15 type(hecmwst_local_mesh),
intent(in) :: hecmesh
16 integer(kind=kint),
intent(in) :: nstep
17 integer(kind=kint),
intent(in) :: sstep
18 integer(kind=kint),
intent(in) :: rtype
19 integer(kind=kint),
intent(in) :: interval
20 real(kind=kreal),
intent(in) :: factor
21 real(kind=kreal),
intent(in) :: ctime
22 real(kind=kreal),
pointer :: temp(:)
23 real(kind=kreal),
pointer :: temp_bak(:)
26 elseif( rtype == 2 )
then
29 write(
idbg,*)
' Read temperature from result file : OK'
35 type(hecmwst_local_mesh),
intent(in) :: hecmesh
36 integer(kind=kint),
intent(in) :: nstep
37 integer(kind=kint),
intent(in) :: sstep
38 integer(kind=kint),
intent(in) :: interval
39 real(kind=kreal),
intent(in) :: factor
40 real(kind=kreal),
pointer :: temp(:)
41 real(kind=kreal),
pointer :: temp_bak(:)
42 type(hecmwst_result_data) :: result
43 character(len=HECMW_NAME_LEN) :: name_id
44 integer(kind=kint) :: i, k0, kt, nstep_active, tstep
47 real(kind=kreal),
pointer :: temp0(:,:)
49 allocate(temp0(2,
size(temp)))
51 nstep_active = (nstep-sstep)/interval + 1
52 kt = floor(factor*dble(nstep_active)-1.d-10)
53 w = factor*dble(nstep_active)-dble(kt)
56 tstep = sstep+(kt+k0-2)*interval
58 do i=1, hecmesh%n_node
59 temp0(k0,i) = temp_bak(i)
68 if (result%nn_component /= 1 .or. result%nn_dof(1) /= 1)
then
69 write(*,*)
' Read temperature result failed; not heat analysis result'
72 do i=1, hecmesh%n_node
73 temp0(k0,i) = result%node_val_item(i)
79 do i=1, hecmesh%n_node
80 temp(i) = (1.d0-w)*temp0(1,i)+w*temp0(2,i)
90 type(hecmwst_local_mesh),
intent(in) :: hecmesh
91 integer(kind=kint),
intent(in) :: nstep
92 integer(kind=kint),
intent(in) :: sstep
93 real(kind=kreal),
intent(in) :: ctime
94 real(kind=kreal),
pointer :: temp(:)
96 logical,
save :: flg_first_call = .true.
97 logical,
save :: flg_constant = .false.
98 logical,
save :: flg_finished = .false.
99 integer(kind=kint),
save :: tstep1, tstep2
100 real(kind=kreal),
save :: ttime1, ttime2
102 integer(kind=kint) :: ierr, i
103 real(kind=kreal) :: w
104 logical :: flg_read1, flg_read2
105 real(kind=kreal),
allocatable :: temp0(:,:)
107 allocate(temp0(2,
size(temp)))
111 if (flg_first_call)
then
112 call read_next_result(hecmesh, nstep, sstep, tstep1, ttime1, temp0(1,:), ierr)
115 write(*,*)
' Read temperature result failed; no result file'
116 call hecmw_abort(hecmw_comm_get_comm())
119 call read_next_result(hecmesh, nstep, tstep1+1, tstep2, ttime2, temp0(2,:), ierr)
121 if (ierr /= 0) flg_constant = .true.
123 flg_first_call = .false.
126 if (flg_constant)
then
127 if (.not. flg_read1)
call read_result_at(hecmesh, tstep1, ttime1, temp0(1,:))
128 do i=1, hecmesh%n_node
134 if (ctime <= ttime1)
then
135 if (.not. flg_read1)
call read_result_at(hecmesh, tstep1, ttime1, temp0(1,:))
136 do i=1, hecmesh%n_node
142 do while (ttime2 < ctime)
146 do i=1, hecmesh%n_node
147 temp0(1,i) = temp0(2,i)
152 call read_next_result(hecmesh, nstep, tstep1+1, tstep2, ttime2, temp0(2,:), ierr)
155 flg_finished = .true.
161 if (flg_finished)
then
162 if (.not. flg_read1)
call read_result_at(hecmesh, tstep1, ttime1, temp0(1,:))
163 do i=1, hecmesh%n_node
169 if (.not. flg_read1)
call read_result_at(hecmesh, tstep1, ttime1, temp0(1,:))
170 if (.not. flg_read2)
call read_result_at(hecmesh, tstep2, ttime2, temp0(2,:))
171 w = (ctime - ttime1) / (ttime2 - ttime1)
172 do i=1, hecmesh%n_node
173 temp(i) = (1-w)*temp0(1,i) + w*temp0(2,i)
184 type(hecmwst_local_mesh),
intent(in) :: hecmesh
185 integer(kind=kint),
intent(in) :: tstep
186 real(kind=kreal),
intent(out) :: ttime
187 real(kind=kreal),
intent(out) :: temp(:)
188 type(hecmwst_result_data) :: result
189 character(len=HECMW_NAME_LEN) :: name_id
190 integer(kind=kint) :: i
194 if (result%nn_component /= 1 .or. result%nn_dof(1) /= 1)
then
195 write(*,*)
' Read temperature result failed; not heat analysis result'
197 ttime = result%global_val_item(1)
198 do i=1, hecmesh%n_node
199 temp(i) = result%node_val_item(i)
204 subroutine read_next_result(hecMESH, nstep, sstep, tstep, ttime, temp, ierr)
208 type(hecmwst_local_mesh),
intent(in) :: hecMESH
209 integer(kind=kint),
intent(in) :: nstep
210 integer(kind=kint),
intent(in) :: sstep
211 integer(kind=kint),
intent(out) :: tstep
212 real(kind=kreal),
intent(out) :: ttime
213 real(kind=kreal),
intent(out) :: temp(:)
214 integer(kind=kint),
intent(out) :: ierr
215 character(len=HECMW_NAME_LEN) :: name_ID
216 integer(kind=kint) :: istep
219 do istep = sstep, nstep