FrontISTR 5.2.0
Large-scale structural analysis program with finit element method
Loading...
Searching...
No Matches
heat_io.f90
Go to the documentation of this file.
1!-------------------------------------------------------------------------------
2! Copyright (c) 2019 FrontISTR Commons
3! This software is released under the MIT License, see LICENSE.txt
4!-------------------------------------------------------------------------------
7
8contains
9
10 subroutine heat_input_restart(fstrHEAT, hecMESH, istep, tstep, tt)
11 use m_fstr
12 implicit none
13 type(hecmwst_local_mesh) :: hecMESH
14 type(fstr_heat) :: fstrHEAT
15 integer(kind=kint) :: restart_istep(1)
16 integer(kind=kint) :: restart_step(1)
17 real(kind=kreal) :: restart_time(1)
18 integer(kind=kint) :: i, istep, tstep
19 real(kind=kreal) :: tt
20
21 if(fstrheat%restart_nout < 0)then
22 fstrheat%restart_nout = -fstrheat%restart_nout
23 call hecmw_restart_open()
24 call hecmw_restart_read_int(restart_istep)
25 call hecmw_restart_read_int(restart_step)
26 call hecmw_restart_read_real(restart_time)
27 call hecmw_restart_read_real(fstrheat%TEMP0)
28 call hecmw_restart_close()
29 istep = restart_istep(1)
30 tstep = restart_step(1) + 1
31 tt = restart_time(1)
32
33 do i = 1, hecmesh%n_node
34 fstrheat%TEMPC(i)= fstrheat%TEMP0(i)
35 fstrheat%TEMP (i)= fstrheat%TEMP0(i)
36 enddo
37 write(ilog,*) ' Restart read of temperatures: OK'
38 endif
39 end subroutine heat_input_restart
40
41 subroutine heat_output_log(hecMESH, fstrPARAM, fstrHEAT, tstep, ctime)
42 use m_fstr
43 implicit none
44 type(hecmwst_local_mesh) :: hecmesh
45 type(fstr_heat) :: fstrHEAT
46 type(fstr_param) :: fstrPARAM
47 integer(kind=kint) :: i, in, inod, tstep, nmax, nmin
48 real(kind=kreal) :: temp, ctime, tmax, tmin
49
50 tmax = -1.0d10
51 tmin = 1.0d10
52 nmax = -1
53 nmin = -1
54
55 write(ilog,*)
56 write(ilog,'(a,i6)') ' ISTEP =', tstep
57 write(ilog,'(a,f10.3)') ' Time =', ctime
58
59 do i = 1, hecmesh%nn_internal
60 inod = fstrparam%global_local_id(1,i)
61 in = fstrparam%global_local_id(2,i)
62 temp = fstrheat%TEMP(in)
63 if(tmax < temp)then
64 tmax = temp
65 nmax = inod
66 endif
67 if(temp < tmin)then
68 tmin = temp
69 nmin = inod
70 endif
71 enddo
72
73 write(ilog,'(a,f10.3,i10)') ' Maximum Temperature :', tmax
74 write(ilog,'(a,i10)') ' Maximum Node No. :', nmax
75 write(ilog,'(a,f10.3,i10)') ' Minimum Temperature :', tmin
76 write(ilog,'(a,i10)') ' Minimum Node No. :', nmin
77
78 !global temperature
79 call hecmw_allreduce_r1 (hecmesh, tmax, hecmw_max)
80 call hecmw_allreduce_r1 (hecmesh, tmin, hecmw_min)
81 if( myrank == 0 ) then
82 write(ilog,'(a,f10.3,i10)') ' Maximum Temperature(global) :', tmax
83 write(ilog,'(a,f10.3,i10)') ' Minimum Temperature(global) :', tmin
84 end if
85
86
87 end subroutine heat_output_log
88
89 subroutine heat_output_result(hecMESH, fstrHEAT, tstep, ctime, outflag)
90 use m_fstr
91 implicit none
92 type(hecmwst_local_mesh) :: hecmesh
93 type(fstr_heat) :: fstrHEAT
94 integer(kind=kint) :: restart_step(1)
95 real(kind=kreal) :: restart_time(1)
96 integer(kind=kint) :: i, tstep
97 real(kind=kreal) :: ctime, work(1)
98 logical, intent(in) :: outflag
99 character(len=HECMW_HEADER_LEN) :: header
100 character(len=HECMW_MSG_LEN) :: comment
101 character(len=HECMW_NAME_LEN) :: label
102 character(len=HECMW_NAME_LEN) :: nameID
103
104 if(iresult == 1 .and. (mod(tstep, irres) == 0 .or. outflag))then
105 header = '*fstrresult'
106 comment = 'nonsteady_heat_result'
107 call hecmw_result_init(hecmesh, tstep, header, comment)
108 work(1) = ctime
109 label = 'TOTALTIME'
110 call hecmw_result_add(3, 1, label, work)
111 label = 'TEMPERATURE'
112 call hecmw_result_add(1, 1, label, fstrheat%TEMP)
113 nameid = 'fstrRES'
114 call hecmw_result_write_by_name(nameid)
115 call hecmw_result_finalize
116 endif
117 end subroutine heat_output_result
118
119 subroutine heat_output_visual(hecMESH, fstrRESULT, fstrHEAT, tstep, ctime, outflag)
120 use m_fstr
122 implicit none
123 type(hecmwst_local_mesh) :: hecMESH
124 type(fstr_heat) :: fstrHEAT
125 type(hecmwst_result_data) :: fstrRESULT
126 integer(kind=kint) :: i, tstep
127 real(kind=kreal) :: ctime
128 logical, intent(in) :: outflag
129
130 if(ivisual == 1 .and. (mod(tstep, iwres) == 0 .or. outflag))then
131 call hecmw_nullify_result_data(fstrresult)
132 fstrresult%ng_component = 1
133 fstrresult%nn_component = 1
134 fstrresult%ne_component = 0
135 allocate(fstrresult%ng_dof(1))
136 allocate(fstrresult%global_label(1))
137 allocate(fstrresult%global_val_item(1))
138 fstrresult%ng_dof(1) = 1
139 fstrresult%global_label(1) = 'TOTALTIME'
140 fstrresult%global_val_item(1) = ctime
141 allocate(fstrresult%nn_dof(1))
142 allocate(fstrresult%node_label(1))
143 allocate(fstrresult%node_val_item(hecmesh%n_node))
144 fstrresult%nn_dof(1) = 1
145 fstrresult%node_label(1) = 'TEMPERATURE'
146 fstrresult%node_val_item = fstrheat%TEMP
147 call fstr2hecmw_mesh_conv(hecmesh)
148 call hecmw_visualize_init
149 call hecmw_visualize( hecmesh, fstrresult, tstep )
150 call hecmw_visualize_finalize
151 call hecmw2fstr_mesh_conv(hecmesh)
152 call hecmw_result_free(fstrresult)
153 endif
154 end subroutine heat_output_visual
155
156 subroutine heat_output_restart(hecMESH, fstrHEAT, istep, tstep, current_time, outflag)
157 use m_fstr
158 implicit none
159 type(hecmwst_local_mesh) :: hecMESH
160 type(fstr_heat) :: fstrHEAT
161 integer(kind=kint) :: restart_istep(1)
162 integer(kind=kint) :: restart_step(1)
163 real(kind=kreal) :: restart_time(1)
164 integer(kind=kint) :: restrt_data_size
165 integer(kind=kint) :: istep, tstep
166 logical, intent(in) :: outflag
167 real(kind=kreal) :: current_time
168
169 if(0 < fstrheat%restart_nout .and. (mod(tstep, fstrheat%restart_nout) == 0 .or. outflag))then
170 restart_istep(1) = istep
171 restart_step(1) = tstep
172 restart_time(1) = current_time
173 restrt_data_size = size(restart_istep)
174 call hecmw_restart_add_int(restart_istep, restrt_data_size)
175 restrt_data_size = size(restart_step)
176 call hecmw_restart_add_int(restart_step, restrt_data_size)
177 restrt_data_size = size(restart_time)
178 call hecmw_restart_add_real(restart_time, restrt_data_size)
179 restrt_data_size = size(fstrheat%TEMP)
180 call hecmw_restart_add_real(fstrheat%TEMP, restrt_data_size)
181 call hecmw_restart_write()
182 if( hecmesh%my_rank.eq.0 ) then
183 write(imsg,*) '### FSTR output Restart_File.'
184 call flush(imsg)
185 endif
186 endif
187 end subroutine heat_output_restart
188end module m_heat_io
This module defined coomon data and basic structures for analysis.
Definition: m_fstr.f90:15
integer(kind=kint), pointer iresult
Definition: m_fstr.f90:106
integer(kind=kint) myrank
PARALLEL EXECUTION.
Definition: m_fstr.f90:80
integer(kind=kint), parameter imsg
Definition: m_fstr.f90:94
integer(kind=kint), pointer iwres
Definition: m_fstr.f90:110
integer(kind=kint), parameter ilog
FILE HANDLER.
Definition: m_fstr.f90:91
integer(kind=kint), pointer irres
Definition: m_fstr.f90:109
integer(kind=kint), pointer ivisual
Definition: m_fstr.f90:107
This module provides a function to control heat analysis.
Definition: heat_io.f90:6
subroutine heat_output_result(hecmesh, fstrheat, tstep, ctime, outflag)
Definition: heat_io.f90:90
subroutine heat_output_visual(hecmesh, fstrresult, fstrheat, tstep, ctime, outflag)
Definition: heat_io.f90:120
subroutine heat_output_log(hecmesh, fstrparam, fstrheat, tstep, ctime)
Definition: heat_io.f90:42
subroutine heat_output_restart(hecmesh, fstrheat, istep, tstep, current_time, outflag)
Definition: heat_io.f90:157
subroutine heat_input_restart(fstrheat, hecmesh, istep, tstep, tt)
Definition: heat_io.f90:11
HECMW to FSTR Mesh Data Converter. Convering Conectivity of Element Type 232, 342 and 352.
subroutine hecmw2fstr_mesh_conv(hecmesh)
subroutine fstr2hecmw_mesh_conv(hecmesh)
Data for HEAT ANSLYSIS (fstrHEAT)
Definition: m_fstr.f90:394
FSTR INNER CONTROL PARAMETERS (fstrPARAM)
Definition: m_fstr.f90:138