13 type(hecmwst_local_mesh) :: hecMESH
14 integer(kind=kint) :: i, j
16 allocate(fstrheat%TEMP0(hecmesh%n_node))
17 allocate(fstrheat%TEMPC(hecmesh%n_node))
18 allocate(fstrheat%TEMP (hecmesh%n_node))
19 fstrheat%TEMP0 = 0.0d0
20 fstrheat%TEMPC = 0.0d0
23 if(hecmesh%hecmw_flag_initcon == 1)
then
24 do i = 1, hecmesh%n_node
25 j = hecmesh%node_init_val_index(i)
26 fstrheat%TEMP0(i) = hecmesh%node_init_val_item(j)
27 fstrheat%TEMPC(i) = fstrheat%TEMP0(i)
28 fstrheat%TEMP (i) = fstrheat%TEMP0(i)
30 write(
ilog,*)
' Initial condition of temperatures: OK'
35 do i= 1, hecmesh%n_node
37 fstrheat%TEMPC(i)= fstrheat%TEMP0(i)
38 fstrheat%TEMP (i)= fstrheat%TEMP0(i)
43 write(
ilog,*)
' Initial condition of temperatures: OK'
58 type(hecmwst_local_mesh) :: hecMESH
59 integer(kind=kint) :: icel, i, j, in0, nn, n_dummy, old_size, new_size
61 allocate(fstrheat%is_dummy_node(hecmesh%n_node))
62 fstrheat%is_dummy_node = .false.
64 do icel = 1, hecmesh%n_elem
67 in0 = hecmesh%elem_node_index(icel-1)
69 fstrheat%is_dummy_node(hecmesh%elem_node_item(in0+nn+i)) = .true.
73 n_dummy = count(fstrheat%is_dummy_node)
74 if( n_dummy == 0 )
return
76 old_size = fstrheat%T_FIX_tot
77 new_size = old_size + n_dummy
81 fstrheat%T_FIX_tot = new_size
84 do i = 1, hecmesh%n_node
85 if( .not. fstrheat%is_dummy_node(i) ) cycle
86 fstrheat%TEMP0(i) = 0.0d0
87 fstrheat%TEMPC(i) = 0.0d0
88 fstrheat%TEMP (i) = 0.0d0
90 fstrheat%T_FIX_node(j) = i
91 fstrheat%T_FIX_ampl(j) = 0
92 fstrheat%T_FIX_val(j) = 0.0d0
99 type(hecmwst_local_mesh) :: hecMESH
101 integer(kind=kint) :: nradiate
103 if(hecmesh%my_rank == 0)
then
104 write(
imsg,*)
'============================='
105 write(
imsg,*)
' H E A T T R A N S F E R '
106 write(
imsg,*)
'============================='
108 write(
ista,*)
' ISTEP INCR ITER RESIDUAL IITER '
109 write(
ista,*)
'-------------------------------------------------'
112 nradiate = fstrheat%R_SUF_tot
113 call hecmw_allreduce_i1(hecmesh, nradiate, hecmw_sum)
114 if(nradiate > 0 .and. hecmesh%my_rank == 0)
then
115 write(
imsg,
"(a,f12.4)")
"* Absolute zero temperature for radiation: ", hecmesh%zero_temp
127 if(
associated(fstrheat%STEP_DLTIME))
deallocate(fstrheat%STEP_DLTIME)
128 if(
associated(fstrheat%STEP_EETIME))
deallocate(fstrheat%STEP_EETIME)
129 if(
associated(fstrheat%STEP_DELMIN))
deallocate(fstrheat%STEP_DELMIN)
130 if(
associated(fstrheat%STEP_DELMAX))
deallocate(fstrheat%STEP_DELMAX)
131 if(
associated(fstrheat%RHOtab))
deallocate(fstrheat%RHOtab)
132 if(
associated(fstrheat%CPtab))
deallocate(fstrheat%CPtab)
133 if(
associated(fstrheat%CONDtab))
deallocate(fstrheat%CONDtab)
134 if(
associated(fstrheat%RHO))
deallocate(fstrheat%RHO)
135 if(
associated(fstrheat%RHOtemp))
deallocate(fstrheat%RHOtemp)
136 if(
associated(fstrheat%CP))
deallocate(fstrheat%CP)
137 if(
associated(fstrheat%CPtemp))
deallocate(fstrheat%CPtemp)
138 if(
associated(fstrheat%COND))
deallocate(fstrheat%COND)
139 if(
associated(fstrheat%CONDtemp))
deallocate(fstrheat%CONDtemp)
140 if(
associated(fstrheat%RHOfuncA))
deallocate(fstrheat%RHOfuncA)
141 if(
associated(fstrheat%RHOfuncB))
deallocate(fstrheat%RHOfuncB)
142 if(
associated(fstrheat%CPfuncA))
deallocate(fstrheat%CPfuncA)
143 if(
associated(fstrheat%CPfuncB))
deallocate(fstrheat%CPfuncB)
144 if(
associated(fstrheat%CONDfuncA))
deallocate(fstrheat%CONDfuncA)
145 if(
associated(fstrheat%CONDfuncB))
deallocate(fstrheat%CONDfuncB)
146 if(
associated(fstrheat%AMPLtab))
deallocate(fstrheat%AMPLtab)
147 if(
associated(fstrheat%AMPL))
deallocate(fstrheat%AMPL)
148 if(
associated(fstrheat%AMPLtime))
deallocate(fstrheat%AMPLtime)
149 if(
associated(fstrheat%AMPLfuncA))
deallocate(fstrheat%AMPLfuncA)
150 if(
associated(fstrheat%AMPLfuncB))
deallocate(fstrheat%AMPLfuncB)
151 if(
associated(fstrheat%TEMP0))
deallocate(fstrheat%TEMP0)
152 if(
associated(fstrheat%TEMPC))
deallocate(fstrheat%TEMPC)
153 if(
associated(fstrheat%TEMP))
deallocate(fstrheat%TEMP)
154 if(
associated(fstrheat%is_dummy_node))
deallocate(fstrheat%is_dummy_node)
155 if(
associated(fstrheat%T_FIX_node))
deallocate(fstrheat%T_FIX_node)
156 if(
associated(fstrheat%T_FIX_ampl))
deallocate(fstrheat%T_FIX_ampl)
157 if(
associated(fstrheat%T_FIX_val))
deallocate(fstrheat%T_FIX_val)
158 if(
associated(fstrheat%Q_NOD_node))
deallocate(fstrheat%Q_NOD_node)
159 if(
associated(fstrheat%Q_NOD_ampl))
deallocate(fstrheat%Q_NOD_ampl)
160 if(
associated(fstrheat%Q_NOD_val))
deallocate(fstrheat%Q_NOD_val)
161 if(
associated(fstrheat%Q_VOL_elem))
deallocate(fstrheat%Q_VOL_elem)
162 if(
associated(fstrheat%Q_VOL_ampl))
deallocate(fstrheat%Q_VOL_ampl)
163 if(
associated(fstrheat%Q_VOL_val))
deallocate(fstrheat%Q_VOL_val)
164 if(
associated(fstrheat%Q_SUF_elem))
deallocate(fstrheat%Q_SUF_elem)
165 if(
associated(fstrheat%Q_SUF_ampl))
deallocate(fstrheat%Q_SUF_ampl)
166 if(
associated(fstrheat%Q_SUF_surf))
deallocate(fstrheat%Q_SUF_surf)
167 if(
associated(fstrheat%Q_SUF_val))
deallocate(fstrheat%Q_SUF_val)
168 if(
associated(fstrheat%R_SUF_elem))
deallocate(fstrheat%R_SUF_elem)
169 if(
associated(fstrheat%R_SUF_ampl))
deallocate(fstrheat%R_SUF_ampl)
170 if(
associated(fstrheat%R_SUF_surf))
deallocate(fstrheat%R_SUF_surf)
171 if(
associated(fstrheat%R_SUF_val))
deallocate(fstrheat%R_SUF_val)
172 if(
associated(fstrheat%H_SUF_elem))
deallocate(fstrheat%H_SUF_elem)
173 if(
associated(fstrheat%H_SUF_ampl))
deallocate(fstrheat%H_SUF_ampl)
174 if(
associated(fstrheat%H_SUF_surf))
deallocate(fstrheat%H_SUF_surf)
175 if(
associated(fstrheat%H_SUF_val))
deallocate(fstrheat%H_SUF_val)
176 if(
associated(fstrheat%weldline))
deallocate(fstrheat%weldline)
187 integer(kind=kint) :: namax, i, nn, is, iE, icou, j, k
188 real(kind=kreal) :: x1, y1, x2, y2
190 type(hecmwst_local_mesh) :: hecMESH
194 do i = 1, hecmesh%amp%n_amp
195 nn = hecmesh%amp%amp_index(i) - hecmesh%amp%amp_index(i-1)
196 namax = max(nn,namax)
199 fstrheat%AMPLITUDEtot= hecmesh%amp%n_amp
201 allocate (fstrheat%AMPLtab (fstrheat%AMPLITUDEtot) )
202 allocate (fstrheat%AMPL (fstrheat%AMPLITUDEtot,namax), &
203 fstrheat%AMPLtime(fstrheat%AMPLITUDEtot,namax) )
207 fstrheat%AMPLtime = 0.d0
209 do i = 1, fstrheat%AMPLITUDEtot
210 is = hecmesh%amp%amp_index(i-1) + 1
211 ie = hecmesh%amp%amp_index(i)
214 fstrheat%AMPLtab(i) = nn
219 fstrheat%AMPL (i,icou) = hecmesh%amp%amp_val (j)
220 fstrheat%AMPLtime(i,icou) = hecmesh%amp%amp_table(j)
230 allocate ( fstrheat%AMPLfuncA( fstrheat%AMPLITUDEtot,namax+1 ) )
231 allocate ( fstrheat%AMPLfuncB( fstrheat%AMPLITUDEtot,namax+1 ) )
233 fstrheat%AMPLfuncA = 0.d0
234 fstrheat%AMPLfuncB = 0.d0
237 do i = 1, fstrheat%AMPLITUDEtot
239 fstrheat%AMPLfuncA(i,1) = 0.d0
240 fstrheat%AMPLfuncB(i,1) = fstrheat%AMPL(i,1)
242 nn = fstrheat%AMPLtab(i)
246 x1 = fstrheat%AMPLtime(i,k-1)
247 y1 = fstrheat%AMPL (i,k-1)
248 x2 = fstrheat%AMPLtime(i,k)
249 y2 = fstrheat%AMPL (i,k)
251 fstrheat%AMPLfuncA(i,k) = (y2-y1)/(x2-x1)
252 fstrheat%AMPLfuncB(i,k) = -(y2-y1)/(x2-x1)*x1 + y1
256 fstrheat%AMPLfuncA(i,nn+1) = 0.d0
257 fstrheat%AMPLfuncB(i,nn+1) = fstrheat%AMPL(i,nn)
271 integer(kind=kint) :: m1max, m2max, m3max, icou, im, jm, nn, ic, jS, jE, kc, km, k
272 real(kind=kreal) :: aa, bb
274 type(hecmwst_local_mesh) :: hecMESH
281 fstrheat%MATERIALtot= hecmesh%material%n_mat
287 do im = 1, hecmesh%material%n_mat
290 nn = hecmesh%material%mat_TABLE_index(icou) - hecmesh%material%mat_TABLE_index(icou-1)
291 if( jm.eq.1 ) m1max = max(nn,m1max)
292 if( jm.eq.2 ) m2max = max(nn,m2max)
293 if( jm.eq.3 ) m3max = max(nn,m3max)
297 allocate (fstrheat%RHOtab (fstrheat%MATERIALtot), &
298 fstrheat%CPtab (fstrheat%MATERIALtot), &
299 fstrheat%CONDtab (fstrheat%MATERIALtot))
300 allocate (fstrheat%RHO (fstrheat%MATERIALtot,m1max), &
301 fstrheat%RHOtemp (fstrheat%MATERIALtot,m1max))
302 allocate (fstrheat%CP (fstrheat%MATERIALtot,m2max), &
303 fstrheat%CPtemp (fstrheat%MATERIALtot,m2max))
304 allocate (fstrheat%COND (fstrheat%MATERIALtot,m3max), &
305 fstrheat%CONDtemp(fstrheat%MATERIALtot,m3max))
311 fstrheat%RHOtemp = 0.d0
312 fstrheat%CPtemp = 0.d0
313 fstrheat%CONDtemp = 0.d0
319 do im = 1, fstrheat%MATERIALtot
322 js = hecmesh%material%mat_TABLE_index(ic-1) + 1
323 je = hecmesh%material%mat_TABLE_index(ic )
325 if( jm.eq.1 ) fstrheat%RHOtab (im) = nn
326 if( jm.eq.2 ) fstrheat%CPtab (im) = nn
327 if( jm.eq.3 ) fstrheat%CONDtab(im) = nn
333 fstrheat%RHO (im,kc) = hecmesh%material%mat_VAL (km)
334 fstrheat%RHOtemp (im,kc) = hecmesh%material%mat_TEMP(km)
337 fstrheat%CP (im,kc) = hecmesh%material%mat_VAL (km)
338 fstrheat%CPtemp (im,kc) = hecmesh%material%mat_TEMP(km)
341 fstrheat%COND (im,kc) = hecmesh%material%mat_VAL (km)
342 fstrheat%CONDtemp(im,kc) = hecmesh%material%mat_TEMP(km)
354 allocate (fstrheat%RHOfuncA (fstrheat%MATERIALtot, m1max+1) &
355 ,fstrheat%RHOfuncB (fstrheat%MATERIALtot, m1max+1))
356 allocate (fstrheat%CPfuncA (fstrheat%MATERIALtot, m2max+1) &
357 ,fstrheat%CPfuncB (fstrheat%MATERIALtot, m2max+1))
358 allocate (fstrheat%CONDfuncA(fstrheat%MATERIALtot, m3max+1) &
359 ,fstrheat%CONDfuncB(fstrheat%MATERIALtot, m3max+1))
361 fstrheat%RHOfuncA = 0.d0
362 fstrheat%RHOfuncB = 0.d0
363 fstrheat%CPfuncA = 0.d0
364 fstrheat%CPfuncB = 0.d0
365 fstrheat%CONDfuncA = 0.d0
366 fstrheat%CONDfuncB = 0.d0
369 do im = 1, fstrheat%MATERIALtot
370 fstrheat%RHOfuncB(im,1) = fstrheat%RHO(im,1)
371 do k = 2, fstrheat%RHOtab(im)
372 bb= fstrheat%RHO (im,k) - fstrheat%RHO (im,k-1)
373 aa= fstrheat%RHOtemp(im,k) - fstrheat%RHOtemp(im,k-1)
374 fstrheat%RHOfuncA(im,k) = bb/aa
375 fstrheat%RHOfuncB(im,k) = -(bb/aa)*fstrheat%RHOtemp(im,k-1) + fstrheat%RHO(im,k-1)
377 fstrheat%RHOfuncB(im,fstrheat%RHOtab(im)+1) = fstrheat%RHO(im,fstrheat%RHOtab(im))
381 do im = 1, fstrheat%MATERIALtot
382 fstrheat%CPfuncB(im,1) = fstrheat%CP(im,1)
383 do k = 2, fstrheat%CPtab(im)
384 bb= fstrheat%CP (im,k) - fstrheat%CP (im,k-1)
385 aa= fstrheat%CPtemp(im,k) - fstrheat%CPtemp(im,k-1)
386 fstrheat%CPfuncA(im,k) = bb/aa
387 fstrheat%CPfuncB(im,k) = -(bb/aa)*fstrheat%CPtemp(im,k-1) + fstrheat%CP(im,k-1)
389 fstrheat%CPfuncB(im,fstrheat%CPtab(im)+1) = fstrheat%CP(im,fstrheat%CPtab(im))
393 do im = 1, fstrheat%MATERIALtot
394 fstrheat%CONDfuncB(im,1)= fstrheat%COND(im,1)
395 do k = 2, fstrheat%CONDtab(im)
396 bb = fstrheat%COND (im,k) - fstrheat%COND (im,k-1)
397 aa = fstrheat%CONDtemp(im,k) - fstrheat%CONDtemp(im,k-1)
398 fstrheat%CONDfuncA(im,k) = bb/aa
399 fstrheat%CONDfuncB(im,k) = -(bb/aa)*fstrheat%CONDtemp(im,k-1) + fstrheat%COND(im,k-1)
401 fstrheat%CONDfuncB(im,fstrheat%CONDtab(im)+1) = fstrheat%COND(im,fstrheat%CONDtab(im))
integer(kind=kint) function hecmw_get_max_node(etype)
logical function hecmw_is_etype_33struct(etype)
This module contains auxiliary functions in calculation setup.
subroutine hecmw_expand_integer_array(array, old_size, new_size)
subroutine hecmw_expand_real_array(array, old_size, new_size)
This module defines common data and basic structures for analysis.
integer(kind=kint), parameter imsg
integer(kind=kint), parameter ilog
FILE HANDLER.
integer(kind=kint), parameter ista
type(tinitialcondition), dimension(:), pointer, save g_initialcnd
This module provides functions to initialize heat analysis.
subroutine heat_finalize(fstrHEAT)
subroutine heat_init_log(hecMESH, fstrHEAT)
subroutine heat_init_material(hecMESH, fstrHEAT)
subroutine heat_init(hecMESH, fstrHEAT)
subroutine heat_fix_dummy_nodes(hecMESH, fstrHEAT)
Mark the rotational dummy nodes of 641/761/781 elements and fix them to zero temperature....
subroutine heat_init_amplitude(hecMESH, fstrHEAT)
Data for HEAT ANSLYSIS (fstrHEAT)