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
56 subroutine hecmw_result_copy_f2c_set_if_c(sname, vname, src, ierr, len_s, len_v) &
57 bind(c,name=
'hecmw_result_copy_f2c_set_if')
59 type(c_ptr),
value :: sname, vname
60 type(c_ptr),
value :: src
61 integer(c_int) :: ierr
62 integer(c_int),
value :: len_s, len_v
63 end subroutine hecmw_result_copy_f2c_set_if_c
65 bind(c,name=
'hecmw_result_write_st_init_if')
67 integer(c_int) :: ierr
70 bind(c,name=
'hecmw_result_write_st_finalize_if')
72 integer(c_int) :: ierr
75 bind(c,name=
'hecmw_result_write_st_by_name_if')
77 type(c_ptr),
value :: name_ID
78 integer(c_int) :: ierr
79 integer(c_int),
value :: len
83 bind(c,name=
'hecmw_result_copy_c2f_set_if')
85 type(c_ptr),
value :: sname, vname
86 type(c_ptr),
value :: dst
87 integer(c_int) :: ierr
88 integer(c_int),
value :: len_s, len_v
91 bind(c,name=
'hecmw_result_read_by_name_if')
93 type(c_ptr),
value :: name_id
94 integer(c_int) :: i_step, n_node, n_elem, ierr
95 integer(c_int),
value :: len
98 bind(c,name=
'hecmw_result_read_finalize_if')
100 integer(c_int) :: ierr
108 character(len=*),
target :: sname,vname
109 type(*),
dimension(..),
target :: src
110 integer(c_int) :: ierr
111 call hecmw_result_copy_f2c_set_if_c(c_loc(sname), c_loc(vname), c_loc(src), ierr, len(sname), len(vname))
116 character(len=*),
target :: name_ID
117 integer(c_int) :: ierr
123 character(len=*),
target :: sname,vname
124 type(*),
dimension(..),
target :: dst
125 integer(c_int) :: ierr
131 character(len=*),
target :: name_ID
132 integer(c_int) :: i_step, n_node, n_elem, ierr
143 type( hecmwst_result_data ) :: p
147 nullify( p%global_label )
148 nullify( p%node_label )
149 nullify( p%elem_label )
150 nullify( p%global_val_item )
151 nullify( p%node_val_item )
152 nullify( p%elem_val_item )
161 integer(kind=kint) :: nnode, nelem, i_step, ierr
162 character(len=HECMW_HEADER_LEN) :: header
163 character(len=HECMW_MSG_LEN) :: comment
165 nnode = hecmesh%n_node
166 nelem = hecmesh%n_elem
169 hecmesh%n_elem_type, hecmesh%elem_type_index, hecmesh%elem_type_item, &
170 i_step, header, comment, ierr)
177 integer(kind=kint) :: dtype, n_dof, ierr
178 character(len=HECMW_NAME_LEN) :: label
179 real(kind=
kreal) ::
data(:)
188 integer(kind=kint) :: ierr
189 character(len=HECMW_NAME_LEN) :: name_id
197 integer(kind=kint) :: ierr
205 integer(kind=kint) :: ierr
206 type(hecmwst_result_data):: result_data
207 character(len=HECMW_NAME_LEN):: name_id
221 integer(kind=kint) :: ierr
222 character(len=HECMW_NAME_LEN) :: name_id, addfname
230 type(hecmwst_result_data),
intent(in) :: result_data
231 integer(kind=kint),
intent(inout) :: ierr
233 call put_global_component( result_data, ierr )
234 if( ierr /= 0 )
return
235 call put_node_component( result_data, ierr )
236 if( ierr /= 0 )
return
237 call put_elem_component( result_data, ierr )
238 if( ierr /= 0 )
return
242 subroutine put_global_component( result_data, ierr )
243 type(hecmwst_result_data),
intent(in) :: result_data
244 integer(kind=kint),
intent(inout) :: ierr
245 character(len=HECMW_NAME_LEN) :: sname,vname
247 sname =
"hecmwST_result_data"
249 vname =
"ng_component"
251 if( ierr /= 0 )
return
253 if( result_data%ng_component /= 0 )
then
256 if( ierr /= 0 )
return
258 vname =
"global_label"
260 if( ierr /= 0 )
return
262 vname =
"global_val_item"
264 if( ierr /= 0 )
return
266 end subroutine put_global_component
268 subroutine put_node_component( result_data, ierr )
269 type(hecmwst_result_data),
intent(in) :: result_data
270 integer(kind=kint),
intent(inout) :: ierr
271 character(len=HECMW_NAME_LEN) :: sname,vname
273 sname =
"hecmwST_result_data"
275 vname =
"nn_component"
277 if( ierr /= 0 )
return
279 if( result_data%nn_component /= 0 )
then
282 if( ierr /= 0 )
return
286 if( ierr /= 0 )
return
288 vname =
"node_val_item"
290 if( ierr /= 0 )
return
292 end subroutine put_node_component
294 subroutine put_elem_component( result_data, ierr )
295 type(hecmwst_result_data),
intent(in) :: result_data
296 integer(kind=kint),
intent(inout) :: ierr
297 character(len=HECMW_NAME_LEN) :: sname,vname
299 sname =
"hecmwST_result_data"
301 vname =
"ne_component"
303 if( ierr /= 0 )
return
305 if( result_data%ne_component /= 0 )
then
308 if( ierr /= 0 )
return
312 if( ierr /= 0 )
return
314 vname =
"elem_val_item"
316 if( ierr /= 0 )
return
318 end subroutine put_elem_component
325 character(len=HECMW_NAME_LEN),
intent(in) :: name_id
326 integer(kind=kint),
intent(in) :: i_step
327 integer(kind=kint),
intent(out) :: ierr
335 character(len=HECMW_NAME_LEN),
intent(in) :: name_id
336 integer(kind=kint),
intent(in) :: i_step
337 type(hecmwst_result_data),
intent(inout) :: result
338 integer(kind=kint) :: n_node, n_elem, ierr
349 call refine_result(hecmesh, n_node, result, ierr)
354 subroutine refine_result(hecMESH, n_node, result, ierr)
356 integer(kind=kint),
intent(in) :: n_node
357 type(hecmwst_result_data),
intent(inout) :: result
358 integer(kind=kint),
intent(out) :: ierr
359 real(kind=
kreal),
pointer :: tmp_val(:)
360 integer(kind=kint) :: iref, i, j, k, is, ie, js, je, i0
361 integer(kind=kint) :: jj, j0, nn_comp_tot, nn, n_node_ref
363 if(n_node == hecmesh%n_node)
return
364 if(n_node > hecmesh%n_node)
then
365 write(*,*)
'ERROR: result needs to be coarsened; not implemented yet'
371 do i = 1, result%nn_component
372 nn_comp_tot = nn_comp_tot + result%nn_dof(i)
374 do iref = 1, hecmesh%n_refine
375 is = hecmesh%refine_origin%index(iref-1)
376 ie = hecmesh%refine_origin%index(iref)
378 if(n_node >= n_node_ref) cycle
380 allocate(tmp_val(n_node_ref * nn_comp_tot))
383 js = hecmesh%refine_origin%item_index(is+i-1)
384 je = hecmesh%refine_origin%item_index(is+i)
386 i0 = (i-1)*nn_comp_tot
388 jj = hecmesh%refine_origin%item_item(j)
389 j0 = (jj-1)*nn_comp_tot
390 do k = 1, nn_comp_tot
391 tmp_val(i0+k) = tmp_val(i0+k) + result%node_val_item(j0+k) / nn
395 deallocate(result%node_val_item)
396 result%node_val_item => tmp_val
401 end subroutine refine_result
405 integer(kind=kint) :: n_node, n_elem, ierr
406 type(hecmwst_result_data) :: result
408 call get_global_component(result, n_node, ierr)
410 call get_node_component(result, n_node, ierr)
412 call get_elem_component(result, n_elem, ierr)
417 subroutine get_global_component(result, n_global, ierr)
418 integer(kind=kint) :: n_global, ierr
419 type(hecmwst_result_data) :: result
420 character(len=HECMW_NAME_LEN) :: sname,vname
422 sname =
'hecmwST_result_data'
424 vname =
'ng_component'
428 if(result%ng_component > 0)
then
430 allocate(result%ng_dof(result%ng_component))
434 vname =
'global_label'
435 allocate(result%global_label(result%ng_component))
439 vname =
'global_val_item'
440 allocate(result%global_val_item(sum(result%ng_dof)*n_global))
444 end subroutine get_global_component
447 subroutine get_node_component(result, n_node, ierr)
448 integer(kind=kint) :: n_node, ierr
449 type(hecmwst_result_data) :: result
450 character(len=HECMW_NAME_LEN) :: sname,vname
452 sname =
'hecmwST_result_data'
454 vname =
'nn_component'
458 if(result%nn_component > 0)
then
460 allocate(result%nn_dof(result%nn_component))
465 allocate(result%node_label(result%nn_component))
469 vname =
'node_val_item'
470 allocate(result%node_val_item(sum(result%nn_dof)*n_node))
474 end subroutine get_node_component
477 subroutine get_elem_component(result, n_elem, ierr)
478 integer(kind=kint) :: n_elem, ierr
479 type(hecmwst_result_data) :: result
480 character(len=HECMW_NAME_LEN) :: sname,vname
482 sname =
'hecmwST_result_data'
484 vname =
'ne_component'
488 if(result%ne_component > 0)
then
490 allocate(result%ne_dof(result%ne_component))
495 allocate(result%elem_label(result%ne_component))
499 vname =
'elem_val_item'
500 allocate(result%elem_val_item(sum(result%ne_dof)*n_elem))
504 end subroutine get_elem_component
508 type(hecmwst_result_data),
intent(inout) :: result_data
509 integer(kind=kint) :: ierr
513 if(
associated( result_data%ng_dof ) )
then
514 deallocate( result_data%ng_dof, stat=ierr )
516 print *,
"Error: Deallocation error"
521 if(
associated( result_data%global_label ) )
then
522 deallocate( result_data%global_label, stat=ierr )
524 print *,
"Error: Deallocation error"
529 if(
associated( result_data%global_val_item ) )
then
530 deallocate( result_data%global_val_item, stat=ierr )
532 print *,
"Error: Deallocation error"
537 if(
associated( result_data%nn_dof ) )
then
538 deallocate( result_data%nn_dof, stat=ierr )
540 print *,
"Error: Deallocation error"
545 if(
associated( result_data%node_label ) )
then
546 deallocate( result_data%node_label, stat=ierr )
548 print *,
"Error: Deallocation error"
553 if(
associated( result_data%node_val_item ) )
then
554 deallocate( result_data%node_val_item, stat=ierr )
556 print *,
"Error: Deallocation error"
561 if(
associated( result_data%ne_dof ) )
then
562 deallocate( result_data%ne_dof, stat=ierr )
563 if ( ierr /= 0 )
then
564 print *,
"Error: Deallocation error"
569 if(
associated( result_data%elem_label ) )
then
570 deallocate( result_data%elem_label, stat=ierr )
572 print *,
"Error: Deallocation error"
577 if(
associated( result_data%elem_val_item ) )
then
578 deallocate( result_data%elem_val_item, stat=ierr )
580 print *,
"Error: Deallocation error"
void hecmw_result_write_by_addfname_if(char *name_ID, char *addfname, int *err, int len1, int len2)
void hecmw_result_init_if(int *n_node, int *n_elem, int *nodeID, int *elemID, int *n_elem_type, int *elem_type_index, int *elem_type_item, int *i_step, char *header, char *comment, int *err, int len)
void hecmw_result_write_by_name_if(char *name_ID, int *err, int len)
void hecmw_result_checkfile_by_name_if(char *name_ID, int *i_step, int *err, int len)
void hecmw_result_finalize_if(int *err)
void hecmw_result_add_if(int *dtype, int *n_dof, char *label, double *ptr, int *err, int len)
void hecmw_result_copy_c2f_set_if(char *struct_name, char *var_name, void *dst, int *err, int len_struct, int len_var)
void hecmw_result_read_by_name_if(char *name_ID, int *i_step, int *n_node, int *n_elem, int *err, int len)
void hecmw_result_write_st_by_name_if(char *name_ID, int *err, int len)
void hecmw_result_copy_f2c_set_if(char *struct_name, char *var_name, void *src, int *err, int slen, int vlen)
subroutine, public hecmw_result_checkfile_by_name(name_ID, i_step, ierr)
subroutine, public hecmw_result_write_by_addfname(name_ID, addfname)
subroutine, public hecmw_result_read_by_name(hecMESH, name_ID, i_step, result)
subroutine, public hecmw_result_copy_f2c(result_data, ierr)
subroutine, public hecmw_nullify_result_data(P)
subroutine, public hecmw_result_add(dtype, n_dof, label, data)
subroutine, public hecmw_result_finalize()
subroutine, public hecmw_result_copy_c2f(result, n_node, n_elem, ierr)
integer(kind=kint), parameter, public hecmw_result_dtype_global
subroutine, public hecmw_result_write_st_by_name(name_ID, result_data)
subroutine, public hecmw_result_init(hecMESH, i_step, header, comment)
subroutine, public hecmw_result_write_by_name(name_ID)
integer(kind=kint), parameter, public hecmw_result_dtype_node
subroutine, public hecmw_result_free(result_data)
integer(kind=kint), parameter, public hecmw_result_dtype_elem
integer(kind=kint) function hecmw_comm_get_comm()
integer(kind=4), parameter kreal
subroutine hecmw_abort(comm)