13 public :: hecmwst_result_data
29 private :: put_node_component
30 private :: put_elem_component
31 private :: refine_result
32 private :: get_node_component
33 private :: get_elem_component
35 type hecmwst_result_data
36 integer(kind=kint) :: ng_component
37 integer(kind=kint) :: nn_component
38 integer(kind=kint) :: ne_component
39 integer(kind=kint),
pointer :: ng_dof(:)
40 integer(kind=kint),
pointer :: nn_dof(:)
41 integer(kind=kint),
pointer :: ne_dof(:)
42 character(len=HECMW_NAME_LEN),
pointer :: global_label(:)
43 character(len=HECMW_NAME_LEN),
pointer :: node_label(:)
44 character(len=HECMW_NAME_LEN),
pointer :: elem_label(:)
45 real(kind=
kreal),
pointer :: global_val_item(:)
46 real(kind=
kreal),
pointer :: node_val_item(:)
47 real(kind=
kreal),
pointer :: elem_val_item(:)
48 end type hecmwst_result_data
55 character(len=HECMW_NAME_LEN) :: sname,vname
64 type( hecmwst_result_data ) :: p
68 nullify( p%global_label )
69 nullify( p%node_label )
70 nullify( p%elem_label )
71 nullify( p%global_val_item )
72 nullify( p%node_val_item )
73 nullify( p%elem_val_item )
82 integer(kind=kint) :: nnode, nelem, i_step, ierr
83 character(len=HECMW_HEADER_LEN) :: header
84 character(len=HECMW_MSG_LEN) :: comment
86 nnode = hecmesh%n_node
87 nelem = hecmesh%n_elem
90 hecmesh%n_elem_type, hecmesh%elem_type_index, hecmesh%elem_type_item, &
91 i_step, header, comment, ierr)
98 integer(kind=kint) :: dtype, n_dof, ierr
99 character(len=HECMW_NAME_LEN) :: label
100 real(kind=
kreal) ::
data(:)
109 integer(kind=kint) :: ierr
110 character(len=HECMW_NAME_LEN) :: name_id
118 integer(kind=kint) :: ierr
126 integer(kind=kint) :: ierr
127 type(hecmwst_result_data):: result_data
128 character(len=HECMW_NAME_LEN):: name_id
142 integer(kind=kint) :: ierr
143 character(len=HECMW_NAME_LEN) :: name_id, addfname
151 type(hecmwst_result_data),
intent(in) :: result_data
152 integer(kind=kint),
intent(inout) :: ierr
154 call put_global_component( result_data, ierr )
155 if( ierr /= 0 )
return
156 call put_node_component( result_data, ierr )
157 if( ierr /= 0 )
return
158 call put_elem_component( result_data, ierr )
159 if( ierr /= 0 )
return
163 subroutine put_global_component( result_data, ierr )
164 type(hecmwst_result_data),
intent(in) :: result_data
165 integer(kind=kint),
intent(inout) :: ierr
167 sname =
"hecmwST_result_data"
169 vname =
"ng_component"
171 if( ierr /= 0 )
return
173 if( result_data%ng_component /= 0 )
then
176 if( ierr /= 0 )
return
178 vname =
"global_label"
180 if( ierr /= 0 )
return
182 vname =
"global_val_item"
184 if( ierr /= 0 )
return
186 end subroutine put_global_component
188 subroutine put_node_component( result_data, ierr )
189 type(hecmwst_result_data),
intent(in) :: result_data
190 integer(kind=kint),
intent(inout) :: ierr
192 sname =
"hecmwST_result_data"
194 vname =
"nn_component"
196 if( ierr /= 0 )
return
198 if( result_data%nn_component /= 0 )
then
201 if( ierr /= 0 )
return
205 if( ierr /= 0 )
return
207 vname =
"node_val_item"
209 if( ierr /= 0 )
return
211 end subroutine put_node_component
213 subroutine put_elem_component( result_data, ierr )
214 type(hecmwst_result_data),
intent(in) :: result_data
215 integer(kind=kint),
intent(inout) :: ierr
217 sname =
"hecmwST_result_data"
219 vname =
"ne_component"
221 if( ierr /= 0 )
return
223 if( result_data%ne_component /= 0 )
then
226 if( ierr /= 0 )
return
230 if( ierr /= 0 )
return
232 vname =
"elem_val_item"
234 if( ierr /= 0 )
return
236 end subroutine put_elem_component
243 character(len=HECMW_NAME_LEN),
intent(in) :: name_id
244 integer(kind=kint),
intent(in) :: i_step
245 integer(kind=kint),
intent(out) :: ierr
253 character(len=HECMW_NAME_LEN),
intent(in) :: name_id
254 integer(kind=kint),
intent(in) :: i_step
255 type(hecmwst_result_data),
intent(inout) :: result
256 integer(kind=kint) :: n_node, n_elem, ierr
267 call refine_result(hecmesh, n_node, result, ierr)
272 subroutine refine_result(hecMESH, n_node, result, ierr)
274 integer(kind=kint),
intent(in) :: n_node
275 type(hecmwst_result_data),
intent(inout) :: result
276 integer(kind=kint),
intent(out) :: ierr
277 real(kind=
kreal),
pointer :: tmp_val(:)
278 integer(kind=kint) :: iref, i, j, k, is, ie, js, je, i0
279 integer(kind=kint) :: jj, j0, nn_comp_tot, nn, n_node_ref
281 if(n_node == hecmesh%n_node)
return
282 if(n_node > hecmesh%n_node)
then
283 write(*,*)
'ERROR: result needs to be coarsened; not implemented yet'
289 do i = 1, result%nn_component
290 nn_comp_tot = nn_comp_tot + result%nn_dof(i)
292 do iref = 1, hecmesh%n_refine
293 is = hecmesh%refine_origin%index(iref-1)
294 ie = hecmesh%refine_origin%index(iref)
296 if(n_node >= n_node_ref) cycle
298 allocate(tmp_val(n_node_ref * nn_comp_tot))
301 js = hecmesh%refine_origin%item_index(is+i-1)
302 je = hecmesh%refine_origin%item_index(is+i)
304 i0 = (i-1)*nn_comp_tot
306 jj = hecmesh%refine_origin%item_item(j)
307 j0 = (jj-1)*nn_comp_tot
308 do k = 1, nn_comp_tot
309 tmp_val(i0+k) = tmp_val(i0+k) + result%node_val_item(j0+k) / nn
313 deallocate(result%node_val_item)
314 result%node_val_item => tmp_val
319 end subroutine refine_result
323 integer(kind=kint) :: n_node, n_elem, ierr
324 type(hecmwst_result_data) :: result
326 call get_global_component(result, n_node, ierr)
328 call get_node_component(result, n_node, ierr)
330 call get_elem_component(result, n_elem, ierr)
335 subroutine get_global_component(result, n_global, ierr)
336 integer(kind=kint) :: n_global, ierr
337 type(hecmwst_result_data) :: result
339 sname =
'hecmwST_result_data'
341 vname =
'ng_component'
345 if(result%ng_component > 0)
then
347 allocate(result%ng_dof(result%ng_component))
351 vname =
'global_label'
352 allocate(result%global_label(result%ng_component))
356 vname =
'global_val_item'
357 allocate(result%global_val_item(sum(result%ng_dof)*n_global))
361 end subroutine get_global_component
364 subroutine get_node_component(result, n_node, ierr)
365 integer(kind=kint) :: n_node, ierr
366 type(hecmwst_result_data) :: result
368 sname =
'hecmwST_result_data'
370 vname =
'nn_component'
374 if(result%nn_component > 0)
then
376 allocate(result%nn_dof(result%nn_component))
381 allocate(result%node_label(result%nn_component))
385 vname =
'node_val_item'
386 allocate(result%node_val_item(sum(result%nn_dof)*n_node))
390 end subroutine get_node_component
393 subroutine get_elem_component(result, n_elem, ierr)
394 integer(kind=kint) :: n_elem, ierr
395 type(hecmwst_result_data) :: result
397 sname =
'hecmwST_result_data'
399 vname =
'ne_component'
403 if(result%ne_component > 0)
then
405 allocate(result%ne_dof(result%ne_component))
410 allocate(result%elem_label(result%ne_component))
414 vname =
'elem_val_item'
415 allocate(result%elem_val_item(sum(result%ne_dof)*n_elem))
419 end subroutine get_elem_component
423 type(hecmwst_result_data),
intent(inout) :: result_data
424 integer(kind=kint) :: ierr
428 if(
associated( result_data%ng_dof ) )
then
429 deallocate( result_data%ng_dof, stat=ierr )
431 print *,
"Error: Deallocation error"
436 if(
associated( result_data%global_label ) )
then
437 deallocate( result_data%global_label, stat=ierr )
439 print *,
"Error: Deallocation error"
444 if(
associated( result_data%global_val_item ) )
then
445 deallocate( result_data%global_val_item, stat=ierr )
447 print *,
"Error: Deallocation error"
452 if(
associated( result_data%nn_dof ) )
then
453 deallocate( result_data%nn_dof, stat=ierr )
455 print *,
"Error: Deallocation error"
460 if(
associated( result_data%node_label ) )
then
461 deallocate( result_data%node_label, stat=ierr )
463 print *,
"Error: Deallocation error"
468 if(
associated( result_data%node_val_item ) )
then
469 deallocate( result_data%node_val_item, stat=ierr )
471 print *,
"Error: Deallocation error"
476 if(
associated( result_data%ne_dof ) )
then
477 deallocate( result_data%ne_dof, stat=ierr )
478 if ( ierr /= 0 )
then
479 print *,
"Error: Deallocation error"
484 if(
associated( result_data%elem_label ) )
then
485 deallocate( result_data%elem_label, stat=ierr )
487 print *,
"Error: Deallocation error"
492 if(
associated( result_data%elem_val_item ) )
then
493 deallocate( result_data%elem_val_item, stat=ierr )
495 print *,
"Error: Deallocation error"