20 subroutine hecmw_dist_copy_f2c_set_if_c(sname, vname, src, ierr, len_s, len_v) &
21 bind(c,name=
'hecmw_dist_copy_f2c_set_if')
23 type(c_ptr),
value :: sname, vname
24 type(c_ptr),
value :: src
25 integer(c_int) :: ierr
26 integer(c_int),
value :: len_s, len_v
27 end subroutine hecmw_dist_copy_f2c_set_if_c
34 character(len=*),
target :: sname,vname
35 type(*),
dimension(..),
target :: src
36 integer(c_int) :: ierr
37 call hecmw_dist_copy_f2c_set_if_c(c_loc(sname), c_loc(vname), c_loc(src), ierr, len(sname), len(vname))
41 integer(kind=kint) :: ierr
44 call put_flags(mesh, ierr)
47 call put_etc(mesh, ierr)
50 call put_node(mesh, ierr)
53 call put_elem(mesh, ierr)
56 call put_comm(mesh, ierr)
59 call put_adapt(mesh, ierr)
62 call put_refine(mesh, ierr)
65 call put_sect(mesh%section, ierr)
68 call put_mat(mesh%material, ierr)
71 call put_mpc(mesh%mpc, ierr)
74 call put_amp(mesh%amp, ierr)
77 call put_ngrp(mesh%node_group, ierr)
80 call put_egrp(mesh%elem_group, ierr)
83 call put_sgrp(mesh%surf_group, ierr)
86 call put_contact_pair(mesh%contact_pair, ierr)
91 subroutine put_flags(mesh, ierr)
92 integer(kind=kint) :: ierr
94 character(len=100) :: sname,vname
96 sname =
'hecmwST_local_mesh'
98 vname =
'hecmw_flag_adapt'
102 vname =
'hecmw_flag_initcon'
106 vname =
'hecmw_flag_parttype'
110 vname =
'hecmw_flag_partdepth'
114 vname =
'hecmw_flag_version'
118 vname =
'hecmw_flag_partcontact'
121 end subroutine put_flags
124 subroutine put_etc(mesh, ierr)
125 integer(kind=kint) :: ierr
127 character(len=100) :: sname,vname
129 sname =
'hecmwST_local_mesh'
135 vname =
'hecmw_n_file'
139 if(mesh%hecmw_n_file > 0)
then
152 end subroutine put_etc
155 subroutine put_node(mesh, ierr)
156 integer(kind=kint) :: ierr
158 character(len=100) :: sname,vname
160 sname =
'hecmwST_local_mesh'
165 vname =
'n_node_gross'
173 vname =
'nn_internal'
177 if((mesh%hecmw_flag_parttype == 0 .OR. mesh%hecmw_flag_parttype == 2) .AND. mesh%nn_internal > 0)
then
178 vname =
'node_internal_list'
183 if(mesh%n_node_gross > 0)
then
188 vname =
'global_node_ID'
209 if(mesh%n_dof_grp > 0)
then
210 vname =
'node_dof_index'
214 vname =
'node_dof_item'
219 if(mesh%n_node_gross > 0)
then
220 vname =
'node_val_index'
221 if(
associated(mesh%node_val_index))
then
226 vname =
'node_val_item'
227 if(
associated(mesh%node_val_item))
then
228 if(mesh%node_val_index(mesh%n_node_gross) > 0)
then
234 vname =
'node_init_val_index'
235 if(
associated(mesh%node_init_val_index))
then
240 vname =
'node_init_val_item'
241 if(
associated(mesh%node_init_val_item))
then
242 if(mesh%node_init_val_index(mesh%n_node_gross) > 0)
then
248 end subroutine put_node
251 subroutine put_elem(mesh, ierr)
252 integer(kind=kint) :: ierr
254 character(len=100) :: sname,vname
256 sname =
'hecmwST_local_mesh'
262 vname =
'n_elem_gross'
266 vname =
'ne_internal'
270 if((mesh%hecmw_flag_parttype == 0 .OR. mesh%hecmw_flag_parttype == 1) .AND. mesh%ne_internal > 0)
then
271 vname =
'elem_internal_list'
276 if(mesh%n_elem_gross > 0)
then
281 vname =
'global_elem_ID'
290 vname =
'n_elem_type'
294 if(mesh%n_elem_type > 0)
then
295 vname =
'elem_type_index'
299 vname =
'elem_type_item'
304 if(mesh%n_elem_gross > 0)
then
305 vname =
'elem_node_index'
309 vname =
'elem_node_item'
310 if(mesh%elem_node_index(mesh%n_elem_gross) > 0)
then
320 if(mesh%n_elem_gross > 0)
then
321 vname =
'elem_mat_ID_index'
325 if(mesh%elem_mat_ID_index(mesh%n_elem_gross) > 0)
then
326 vname =
'elem_mat_ID_item'
332 vname =
'n_elem_mat_ID'
336 if(mesh%n_elem_gross > 0)
then
337 vname =
'elem_mat_int_index'
338 if(
associated(mesh%elem_mat_int_index))
then
343 vname =
'elem_mat_int_val'
344 if(
associated(mesh%elem_mat_int_val))
then
345 if(mesh%elem_mat_int_index(mesh%n_elem_gross) > 0)
then
352 if(mesh%n_elem_gross > 0)
then
353 vname =
'elem_val_index'
354 if(
associated(mesh%elem_val_index))
then
359 vname =
'elem_val_item'
360 if(
associated(mesh%elem_val_item))
then
361 if(mesh%elem_val_index(mesh%n_elem_gross) > 0)
then
367 end subroutine put_elem
370 subroutine put_comm(mesh, ierr)
371 integer(kind=kint) :: ierr
373 character(len=100) :: sname,vname
376 sname =
'hecmwST_local_mesh'
402 vname =
'n_subdomain'
406 vname =
'n_neighbor_pe'
410 if(mesh%n_neighbor_pe > 0)
then
411 vname =
'neighbor_pe'
415 vname =
'import_index'
419 if(mesh%import_index(mesh%n_neighbor_pe) > 0)
then
420 vname =
'import_item'
425 vname =
'export_index'
429 if(mesh%export_index(mesh%n_neighbor_pe) > 0)
then
430 vname =
'export_item'
435 vname =
'shared_index'
439 if(mesh%shared_index(mesh%n_neighbor_pe) > 0)
then
440 vname =
'shared_item'
445 end subroutine put_comm
448 subroutine put_adapt(mesh, ierr)
449 integer(kind=kint) :: ierr
451 character(len=100) :: sname,vname
453 if(mesh%hecmw_flag_adapt == 0) return;
455 sname =
'hecmwST_local_mesh'
457 vname =
'coarse_grid_level'
465 if(mesh%n_node_gross > 0)
then
466 vname =
'when_i_was_refined_node'
471 if(mesh%n_elem_gross > 0)
then
472 vname =
'when_i_was_refined_elem'
476 vname =
'adapt_parent_type'
484 vname =
'adapt_level'
488 vname =
'adapt_parent'
492 vname =
'adapt_children_index'
496 vname =
'adapt_children_item'
497 if(mesh%adapt_children_index(mesh%n_elem_gross) > 0)
then
502 end subroutine put_adapt
505 subroutine put_refine(mesh, ierr)
506 integer(kind=kint) :: ierr
508 character(len=100) :: sname,vname
510 sname =
'hecmwST_local_mesh'
516 if(mesh%n_refine == 0) return;
518 if(mesh%n_node_gross > 0)
then
519 vname =
'node_old2new'
520 if(
associated(mesh%node_old2new))
then
525 vname =
'node_new2old'
526 if(
associated(mesh%node_new2old))
then
532 if(mesh%n_elem_gross > 0)
then
533 vname =
'elem_old2new'
534 if(
associated(mesh%elem_old2new))
then
539 vname =
'elem_new2old'
540 if(
associated(mesh%elem_new2old))
then
546 if(mesh%n_refine > 0)
then
547 vname =
'n_node_refine_hist'
548 if(
associated(mesh%n_node_refine_hist))
then
553 end subroutine put_refine
556 subroutine put_sect(sect, ierr)
557 integer(kind=kint) :: ierr
559 character(len=100) :: sname,vname
561 sname =
'hecmwST_section'
567 if(sect%n_sect > 0)
then
576 vname =
'sect_mat_ID_index'
580 if(sect%sect_mat_ID_index(sect%n_sect) > 0)
then
581 vname =
'sect_mat_ID_item'
586 vname =
'sect_I_index'
590 if(sect%sect_I_index(sect%n_sect) > 0)
then
591 vname =
'sect_I_item'
596 vname =
'sect_R_index'
600 if(sect%sect_R_index(sect%n_sect) > 0)
then
601 vname =
'sect_R_item'
606 end subroutine put_sect
609 subroutine put_mat(mat, ierr)
610 integer(kind=kint) :: ierr
612 character(len=HECMW_NAME_LEN),
pointer :: name_p
613 character(len=100) :: sname,vname
615 sname =
'hecmwST_material'
625 vname =
'n_mat_subitem'
629 vname =
'n_mat_table'
633 if(mat%n_mat > 0)
then
635 name_p => mat%mat_name(1)
640 if(mat%n_mat > 0)
then
641 vname =
'mat_item_index'
646 if(mat%n_mat_item > 0)
then
647 vname =
'mat_subitem_index'
652 if(mat%n_mat_subitem > 0)
then
653 vname =
'mat_table_index'
658 if(mat%n_mat_table > 0)
then
667 end subroutine put_mat
670 subroutine put_mpc(mpc, ierr)
671 integer(kind=kint) :: ierr
673 character(len=100) :: sname,vname
675 sname =
'hecmwST_mpc'
681 if(mpc%n_mpc > 0)
then
686 if(mpc%mpc_index(mpc%n_mpc) > 0)
then
704 end subroutine put_mpc
707 subroutine put_amp(amp, ierr)
708 integer(kind=kint) :: ierr
710 character(len=HECMW_NAME_LEN),
pointer :: name_p
711 character(len=100) :: sname,vname
713 sname =
'hecmwST_amplitude'
719 if(amp%n_amp > 0)
then
721 name_p => amp%amp_name(1)
725 vname =
'amp_type_definition'
729 vname =
'amp_type_time'
733 vname =
'amp_type_value'
741 if(amp%amp_index(amp%n_amp) > 0)
then
751 end subroutine put_amp
754 subroutine put_ngrp(grp, ierr)
755 integer(kind=kint) :: ierr
757 character(len=HECMW_NAME_LEN),
pointer :: name_p
758 character(len=100) :: sname,vname
760 sname =
'hecmwST_node_grp'
766 if(grp%n_grp > 0)
then
768 name_p => grp%grp_name(1)
777 if(grp%grp_index(grp%n_grp) > 0)
then
787 if(grp%n_bc > 0)
then
789 if(
associated(grp%bc_grp_ID))
then
794 vname =
'bc_grp_type'
795 if(
associated(grp%bc_grp_type))
then
800 vname =
'bc_grp_index'
801 if(
associated(grp%bc_grp_index))
then
807 if(
associated(grp%bc_grp_dof))
then
813 if(
associated(grp%bc_grp_val))
then
818 end subroutine put_ngrp
821 subroutine put_egrp(grp, ierr)
822 integer(kind=kint) :: ierr
824 character(len=HECMW_NAME_LEN),
pointer :: name_p
825 character(len=100) :: sname,vname
827 sname =
'hecmwST_elem_grp'
833 if(grp%n_grp > 0)
then
835 name_p => grp%grp_name(1)
844 if(grp%grp_index(grp%n_grp) > 0)
then
854 if(grp%n_bc > 0)
then
856 if(
associated(grp%bc_grp_ID))
then
861 vname =
'bc_grp_type'
862 if(
associated(grp%bc_grp_type))
then
867 vname =
'bc_grp_index'
868 if(
associated(grp%bc_grp_index))
then
874 if(
associated(grp%bc_grp_val))
then
879 end subroutine put_egrp
882 subroutine put_sgrp(grp, ierr)
883 integer(kind=kint) :: ierr
885 character(len=HECMW_NAME_LEN),
pointer :: name_p
886 character(len=100) :: sname,vname
888 sname =
'hecmwST_surf_grp'
894 if(grp%n_grp > 0)
then
896 name_p => grp%grp_name(1)
905 if(grp%grp_index(grp%n_grp) > 0)
then
915 if(grp%n_bc > 0)
then
917 if(
associated(grp%bc_grp_ID))
then
922 vname =
'bc_grp_type'
923 if(
associated(grp%bc_grp_type))
then
928 vname =
'bc_grp_index'
929 if(
associated(grp%bc_grp_index))
then
935 if(
associated(grp%bc_grp_val))
then
940 end subroutine put_sgrp
943 subroutine put_contact_pair(cpair, ierr)
944 integer(kind=kint) :: ierr
946 character(len=HECMW_NAME_LEN),
pointer :: name_p
947 character(len=100) :: sname,vname
949 sname =
'hecmwST_contact_pair'
955 if(cpair%n_pair > 0)
then
957 name_p => cpair%name(1)
965 vname =
'slave_grp_id'
969 vname =
'slave_orisgrp_id'
973 vname =
'master_grp_id'
977 end subroutine put_contact_pair
void hecmw_dist_copy_f2c_set_if(char *struct_name, char *var_name, void *src, int *err, int slen, int vlen)
I/O and Utility memo) Intel 9 compiler generates codes to waste stack memory when an array of string ...
subroutine, public hecmw_dist_copy_f2c(mesh, ierr)