FrontISTR  5.7.0
Large-scale structural analysis program with finit element method
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 !-------------------------------------------------------------------------------
6 module m_heat_io
7 
8 contains
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(hecmw_result_dtype_global, 1, label, work)
111  label = 'TEMPERATURE'
112  call hecmw_result_add(hecmw_result_dtype_node, 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( fstrheat%restart_nout <= 0 ) return
170 
171  if( mod(tstep, fstrheat%restart_nout) == 0 .or. outflag )then
172  restart_istep(1) = istep
173  restart_step(1) = tstep
174  restart_time(1) = current_time
175  restrt_data_size = size(restart_istep)
176  call hecmw_restart_add_int(restart_istep, restrt_data_size)
177  restrt_data_size = size(restart_step)
178  call hecmw_restart_add_int(restart_step, restrt_data_size)
179  restrt_data_size = size(restart_time)
180  call hecmw_restart_add_real(restart_time, restrt_data_size)
181  restrt_data_size = size(fstrheat%TEMP)
182  call hecmw_restart_add_real(fstrheat%TEMP, restrt_data_size)
183  call hecmw_restart_write()
184  if( hecmesh%my_rank.eq.0 ) then
185  write(imsg,*) '### FSTR output Restart_File.'
186  call flush(imsg)
187  endif
188  endif
189  end subroutine heat_output_restart
190 end module m_heat_io
m_heat_io
This module provides a function to control heat analysis.
Definition: heat_io.f90:6
m_fstr::myrank
integer(kind=kint) myrank
PARALLEL EXECUTION.
Definition: m_fstr.f90:96
m_heat_io::heat_output_restart
subroutine heat_output_restart(hecMESH, fstrHEAT, istep, tstep, current_time, outflag)
Definition: heat_io.f90:157
m_fstr::fstr_heat
Data for HEAT ANSLYSIS (fstrHEAT)
Definition: m_fstr.f90:425
m_fstr::fstr_param
FSTR INNER CONTROL PARAMETERS (fstrPARAM)
Definition: m_fstr.f90:154
m_hecmw2fstr_mesh_conv::fstr2hecmw_mesh_conv
subroutine fstr2hecmw_mesh_conv(hecMESH)
Definition: hecmw2fstr_mesh_conv.f90:27
m_heat_io::heat_input_restart
subroutine heat_input_restart(fstrHEAT, hecMESH, istep, tstep, tt)
Definition: heat_io.f90:11
m_fstr
This module defines common data and basic structures for analysis.
Definition: m_fstr.f90:15
m_hecmw2fstr_mesh_conv::hecmw2fstr_mesh_conv
subroutine hecmw2fstr_mesh_conv(hecMESH)
Definition: hecmw2fstr_mesh_conv.f90:15
m_fstr::ivisual
integer(kind=kint), pointer ivisual
Definition: m_fstr.f90:123
m_heat_io::heat_output_visual
subroutine heat_output_visual(hecMESH, fstrRESULT, fstrHEAT, tstep, ctime, outflag)
Definition: heat_io.f90:120
m_heat_io::heat_output_log
subroutine heat_output_log(hecMESH, fstrPARAM, fstrHEAT, tstep, ctime)
Definition: heat_io.f90:42
m_fstr::iresult
integer(kind=kint), pointer iresult
Definition: m_fstr.f90:122
m_fstr::iwres
integer(kind=kint), pointer iwres
Definition: m_fstr.f90:126
m_hecmw2fstr_mesh_conv
HECMW to FSTR Mesh Data Converter. Converting Connectivity of Element Type 232, 342 and 352.
Definition: hecmw2fstr_mesh_conv.f90:8
m_fstr::irres
integer(kind=kint), pointer irres
Definition: m_fstr.f90:125
m_fstr::ilog
integer(kind=kint), parameter ilog
FILE HANDLER.
Definition: m_fstr.f90:107
m_heat_io::heat_output_result
subroutine heat_output_result(hecMESH, fstrHEAT, tstep, ctime, outflag)
Definition: heat_io.f90:90
m_fstr::imsg
integer(kind=kint), parameter imsg
Definition: m_fstr.f90:110