FrontISTR  5.7.0
Large-scale structural analysis program with finit element method
hecmw_util_f.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 
7 module hecmw_util
8  implicit none
9 #ifndef HECMW_SERIAL
10  include 'mpif.h'
11 #endif
12  private :: hecmw_petot,hecmw_rank,hecmw_comm,hecmw_group
13  public
14 
15  integer(kind=4),parameter:: kint = 4
16  integer(kind=4),parameter:: kreal = 8
17 
18  integer(kind=kint),parameter :: hecmw_name_len = 63
19  integer(kind=kint),parameter :: hecmw_header_len = 127
20  integer(kind=kint),parameter :: hecmw_msg_len = 255
21  integer(kind=kint),parameter :: hecmw_filename_len = 1023
22 
23  integer(kind=kint),parameter :: hecmw_sum = 46801
24  integer(kind=kint),parameter :: hecmw_prod = 46802
25  integer(kind=kint),parameter :: hecmw_max = 46803
26  integer(kind=kint),parameter :: hecmw_min = 46804
27  integer(kind=kint),parameter :: hecmw_integer = 53951
28  integer(kind=kint),parameter :: hecmw_single_precision = 53952
29  integer(kind=kint),parameter :: hecmw_double_precision = 53953
30  integer(kind=kint),parameter :: hecmw_character = 53954
31 
32 #ifndef HECMW_SERIAL
33  integer(kind=kint),parameter :: hecmw_status_size = mpi_status_size
34 #else
35  integer(kind=kint),parameter :: hecmw_status_size = 1
36 #endif
37 
38  integer(kind=kint) :: hecmw_petot,hecmw_rank,hecmw_comm,hecmw_group
39  !C
40  !C +---------------+
41  !C | SECTION info. |
42  !C +---------------+
43  !C===
45  integer(kind=kint) :: n_sect
46  integer(kind=kint),pointer :: sect_type(:)
47  integer(kind=kint),pointer :: sect_opt(:)
48  integer(kind=kint),pointer :: sect_mat_id_index(:)
49  integer(kind=kint),pointer :: sect_mat_id_item(:)
50  integer(kind=kint),pointer :: sect_i_index(:)
51  integer(kind=kint),pointer :: sect_i_item(:)
52  integer(kind=kint),pointer :: sect_r_index(:)
53  real(kind=kreal),pointer :: sect_r_item(:)
54  integer(kind=kint),pointer :: sect_orien_id(:) => null()
55  end type hecmwst_section
56 
57  !C for hecmwST_section%sect_type
58  integer(kind=kint),parameter :: hecmw_sect_type_solid = 1
59  integer(kind=kint),parameter :: hecmw_sect_type_shell = 2
60  integer(kind=kint),parameter :: hecmw_sect_type_beam = 3
61  integer(kind=kint),parameter :: hecmw_sect_type_interface = 4
62  !C for hecmwST_section%sect_opt
63  integer(kind=kint),parameter :: hecmw_sect_opt_pstress = 0
64  integer(kind=kint),parameter :: hecmw_sect_opt_pstrain = 1
65  integer(kind=kint),parameter :: hecmw_sect_opt_asymmetry = 2
66  integer(kind=kint),parameter :: hecmw_sect_opt_pstress_ri = 10
67  integer(kind=kint),parameter :: hecmw_sect_opt_pstrain_ri = 11
68  integer(kind=kint),parameter :: hecmw_sect_opt_asymmetry_ri = 12
69  !C===
70 
71  !C
72  !C +----------------+
73  !C | MATERIAL info. |
74  !C +----------------+
75  !C===
77  integer(kind=kint) :: n_mat
78  integer(kind=kint) :: n_mat_item
79  integer(kind=kint) :: n_mat_subitem
80  integer(kind=kint) :: n_mat_table
81  character(HECMW_NAME_LEN),pointer :: mat_name(:)
82  integer(kind=kint),pointer :: mat_item_index(:)
83  integer(kind=kint),pointer :: mat_subitem_index(:)
84  integer(kind=kint),pointer :: mat_table_index(:)
85  real(kind=kreal),pointer :: mat_val(:)
86  real(kind=kreal),pointer :: mat_temp(:)
87  end type hecmwst_material
88  !C===
89 
90  !C
91  !C +-----------+
92  !C | MPC info. |
93  !C +-----------+
94  !C===
96  integer(kind=kint) :: n_mpc
97  integer(kind=kint),pointer :: mpc_index(:)
98  integer(kind=kint),pointer :: mpc_item(:)
99  integer(kind=kint),pointer :: mpc_dof(:)
100  real(kind=kreal),pointer :: mpc_val(:)
101  real(kind=kreal),pointer :: mpc_const(:)
102  end type hecmwst_mpc
103  !C===
104 
105  !C
106  !C +-----------+
107  !C | AMPLITUDE |
108  !C +-----------+
109  !C===
111  integer(kind=kint) :: n_amp
112  character(len=HECMW_NAME_LEN),pointer :: amp_name(:)
113  integer(kind=kint),pointer :: amp_type_definition(:)
114  integer(kind=kint),pointer :: amp_type_time(:)
115  integer(kind=kint),pointer :: amp_type_value(:)
116  integer(kind=kint),pointer :: amp_index(:)
117  real(kind=kreal),pointer :: amp_val(:)
118  real(kind=kreal),pointer :: amp_table(:)
119  end type hecmwst_amplitude
120 
121  !C for hecmwST_amplitude%amp_type_definition
122  integer(kind=kint),parameter :: hecmw_amp_typedef_tabular = 1
123  !C for hecmwST_amplitude%amp_type_time
124  integer(kind=kint),parameter :: hecmw_amp_typetime_step = 1
125  !C for hecmwST_amplitude%amp_type_value
126  integer(kind=kint),parameter :: hecmw_amp_typeval_relative = 1
127  integer(kind=kint),parameter :: hecmw_amp_typeval_absolute = 2
128  !C===
129 
130  !C
131  !C +-----------+
132  !C | NODE grp. |
133  !C +-----------+
134  !C===
136  integer(kind=kint) :: n_grp
137  integer(kind=kint) :: n_bc
138  character(HECMW_NAME_LEN),pointer :: grp_name(:)
139  integer(kind=kint),pointer :: grp_index(:)
140  integer(kind=kint),pointer :: grp_item(:)
141  integer(kind=kint),pointer :: bc_grp_id(:)
142  integer(kind=kint),pointer :: bc_grp_type(:)
143  integer(kind=kint),pointer :: bc_grp_index(:)
144  integer(kind=kint),pointer :: bc_grp_dof(:)
145  real(kind=kreal),pointer :: bc_grp_val(:)
146  end type hecmwst_node_grp
147 
148  !C for hecmwST_node_grp%bc_grp_type
149  integer(kind=kint),parameter :: hecmw_bcgrptype_desplacement = 1
150  integer(kind=kint),parameter :: hecmw_bcgrptype_flux = 2
151  !C===
152 
153  !C
154  !C +-----------+
155  !C | ELEM grp. |
156  !C +-----------+
157  !C===
159  integer(kind=kint) :: n_grp
160  integer(kind=kint) :: n_bc
161  character(HECMW_NAME_LEN),pointer :: grp_name(:)
162  integer(kind=kint),pointer :: grp_index(:)
163  integer(kind=kint),pointer :: grp_item(:)
164  integer(kind=kint),pointer :: bc_grp_id(:)
165  integer(kind=kint),pointer :: bc_grp_type(:)
166  integer(kind=kint),pointer :: bc_grp_index(:)
167  real(kind=kreal),pointer :: bc_grp_val(:)
168  end type hecmwst_elem_grp
169 
170  !C for hecmwST_elem_grp%bc_grp_type
171  !C integer(kind=kint),parameter :: HECMW_BCGRPTYPE_DESPLACEMENT = 1
172  !C integer(kind=kint),parameter :: HECMW_BCGRPTYPE_FLUX = 2
173  !C===
174 
175  !C
176  !C +-----------+
177  !C | SURF grp. |
178  !C +-----------+
179  !C===
181  integer(kind=kint) :: n_grp
182  integer(kind=kint) :: n_bc
183  character(HECMW_NAME_LEN),pointer:: grp_name(:)
184  integer(kind=kint),pointer :: grp_index(:)
185  integer(kind=kint),pointer :: grp_item(:)
186  integer(kind=kint),pointer :: bc_grp_id(:)
187  integer(kind=kint),pointer :: bc_grp_type(:)
188  integer(kind=kint),pointer :: bc_grp_index(:)
189  real(kind=kreal),pointer :: bc_grp_val(:)
190  end type hecmwst_surf_grp
191 
192  !C for hecmwST_surf_grp%bc_grp_type
193  !C integer(kind=kint),parameter :: HECMW_BCGRPTYPE_DESPLACEMENT = 1
194  !C integer(kind=kint),parameter :: HECMW_BCGRPTYPE_FLUX = 2
195  !C
196 
197  !C
198  !C +---------+
199  !C | CONTACT |
200  !C +---------+
201  !C===
203  integer(kind=kint) :: n_pair
204  character(HECMW_NAME_LEN),pointer:: name(:)
205  integer(kind=kint),pointer :: type(:)
206  integer(kind=kint),pointer :: slave_grp_id(:)
207  integer(kind=kint),pointer :: master_grp_id(:)
208  integer(kind=kint),pointer :: slave_orisgrp_id(:)
209  end type hecmwst_contact_pair
210 
211  !C for hecmwST_contact_pair%type
212  integer(kind=kint),parameter :: hecmw_contact_type_node_surf = 1
213  integer(kind=kint),parameter :: hecmw_contact_type_surf_surf = 2
214  integer(kind=kint),parameter :: hecmw_contact_type_node_elem = 3
215  !C===
216 
217  !C
218  !C +----------------+
219  !C | REFINE Origin. |
220  !C +----------------+
221  !C===
223  integer(kind=kint),pointer :: index(:)
224  integer(kind=kint),pointer :: item_index(:)
225  integer(kind=kint),pointer :: item_item(:)
226  end type hecmwst_refine_origin
227  !C===
228 
229  !C
230  !C +------------------+
231  !C | LOCAL MESH info. |
232  !C +------------------+
233  !C===
235 
236  !C
237  !C-- FILES, GENERAL
238  !C
239  character(HECMW_FILENAME_LEN) :: gridfile
240  character(HECMW_FILENAME_LEN),pointer :: files(:)
241  character(HECMW_HEADER_LEN) :: header
242  integer(kind=kint) :: hecmw_flag_adapt
243  integer(kind=kint) :: hecmw_flag_initcon
244  integer(kind=kint) :: hecmw_n_file
245  integer(kind=kint) :: hecmw_flag_parttype
246  integer(kind=kint) :: hecmw_flag_partdepth
247  integer(kind=kint) :: hecmw_flag_version
248  integer(kind=kint) :: hecmw_flag_partcontact
249  real(kind=kreal) :: zero_temp
250 
251  !C
252  !C-- NODE
253  integer(kind=kint) :: n_node
254  integer(kind=kint) :: n_node_gross
255  ! For parallel contact with hanging slave nodes
256  integer(kind=kint) :: nn_middle
257  integer(kind=kint) :: nn_internal
258  integer(kind=kint) :: n_dof
259  integer(kind=kint) :: n_dof_grp
260  integer(kind=kint) :: n_dof_tot
261  real(kind=kreal),pointer :: node(:)
262  integer(kind=kint),pointer :: node_id(:)
263  integer(kind=kint),pointer :: global_node_id(:)
264  integer(kind=kint),pointer :: node_val_index(:)
265  real(kind=kreal),pointer :: node_val_item(:)
266  integer(kind=kint),pointer :: node_dof_index(:)
267  integer(kind=kint),pointer :: node_dof_item(:)
268  integer(kind=kint),pointer :: node_init_val_index(:)
269  real(kind=kreal),pointer :: node_init_val_item(:)
270  integer(kind=kint),pointer :: node_internal_list(:)
271  !C
272  !C-- ELEMENT
273  !C
274  integer(kind=kint) :: n_elem
275  integer(kind=kint) :: n_elem_gross
276  integer(kind=kint) :: ne_internal
277  integer(kind=kint) :: n_elem_type
278  integer(kind=kint) :: n_elem_mat_id
279  integer(kind=kint),pointer :: elem_type_index(:)
280  integer(kind=kint),pointer :: elem_type_item(:)
281  integer(kind=kint),pointer :: elem_type(:)
282  integer(kind=kint),pointer :: section_id(:)
283  integer(kind=kint),pointer :: elem_mat_id_index(:)
284  integer(kind=kint),pointer :: elem_mat_id_item(:)
285  integer(kind=kint),pointer :: elem_node_index(:)
286  integer(kind=kint),pointer :: elem_node_item(:)
287  integer(kind=kint),pointer :: elem_id(:)
288  integer(kind=kint),pointer :: global_elem_id(:)
289  integer(kind=kint),pointer :: elem_internal_list(:)
290  integer(kind=kint),pointer :: elem_mat_int_index(:)
291  real(kind=kreal),pointer :: elem_mat_int_val(:)
292  integer(kind=kint),pointer :: elem_val_index(:)
293  real(kind=kreal),pointer :: elem_val_item(:)
294  !integer(kind=kint) :: is_33shell
295  !integer(kind=kint) :: is_33beam
296  !integer(kind=kint) :: is_heat
297  !C
298  !C-- COMMUNICATION
299  !C
300  integer(kind=kint) :: zero
301  integer(kind=kint) :: mpi_comm
302  integer(kind=kint) :: petot
303  integer(kind=kint) :: pesmptot
304  integer(kind=kint) :: my_rank
305  integer(kind=kint) :: errnof
306  integer(kind=kint) :: n_subdomain
307  integer(kind=kint) :: n_neighbor_pe
308  integer(kind=kint),pointer :: neighbor_pe(:)
309  integer(kind=kint),pointer :: import_index(:)
310  integer(kind=kint),pointer :: import_item(:)
311  integer(kind=kint),pointer :: export_index(:)
312  integer(kind=kint),pointer :: export_item(:)
313  integer(kind=kint),pointer :: shared_index(:)
314  integer(kind=kint),pointer :: shared_item(:)
315 
316  !C
317  !C-- ADAPTATION
318  !C
319  integer(kind=kint) :: coarse_grid_level
320  integer(kind=kint) :: n_adapt
321  integer(kind=kint),pointer :: when_i_was_refined_node(:)
322  integer(kind=kint),pointer :: when_i_was_refined_elem(:)
323  integer(kind=kint),pointer :: adapt_parent_type(:)
324  integer(kind=kint),pointer :: adapt_type (:)
325  integer(kind=kint),pointer :: adapt_level(:)
326  integer(kind=kint),pointer :: adapt_parent(:)
327  integer(kind=kint),pointer :: adapt_children_index(:)
328  integer(kind=kint),pointer :: adapt_children_item(:)
329 
330  integer(kind=kint) :: nn_array, ne_array, nx_array
331  integer(kind=kint) :: n_adapt_edge, n_adapt_edge_global
332  integer(kind=kint) :: n_adapt_act_node, n_adapt_act_edge
333  integer(kind=kint) :: n_adapt_act_elem, n_adapt_act_elem_cur
334  integer(kind=kint) :: n_adapt_elem_341, n_adapt_elem_351
335  integer(kind=kint) :: n_adapt_elem_341_cur, n_adapt_elem_351_cur
336  integer(kind=kint) :: n_adapt_act_elem_341, n_adapt_act_elem_351
337 
338  integer(kind=kint) :: n_adapt_node_cur, nn_adapt_internal_cur
339  integer(kind=kint) :: n_adapt_node_old, nn_adapt_internal_old
340  integer(kind=kint) :: n_adapt_elem_cur, n_adapt_elem_old
341 
342  integer(kind=kint), pointer :: adapt_edge_node(:), adapt_mid_edge (:)
343  integer(kind=kint), pointer :: adapt_iemb (:), adapt_edge_home(:)
344  integer(kind=kint), pointer :: adapt_act_edge (:)
345 
346  integer(kind=kint), pointer :: &
347  & adapt_import_edge_index(:), adapt_import_edge_item (:),&
348  & adapt_export_edge_index(:), adapt_export_edge_item (:),&
349  & adapt_import_elem_index(:), adapt_import_elem_item (:),&
350  & adapt_export_elem_index(:), adapt_export_elem_item (:),&
351  & adapt_import_new_index (:), adapt_import_new_item (:),&
352  & adapt_export_new_index (:), adapt_export_new_item (:)
353  integer(kind=kint), pointer :: rev_neighbor_pe(:)
354  integer(kind=kint), pointer :: adapt_act_elem_341(:)
355  integer(kind=kint), pointer :: adapt_act_elem_351(:)
356  integer(kind=kint), pointer :: adapt_oldtonew_node(:), adapt_newtoold_node(:)
357  integer(kind=kint), pointer :: adapt_oldtonew_elem(:), adapt_newtoold_elem(:)
358  integer(kind=kint), pointer :: adapt_iwk(:), adapt_children_local(:)
359 
360  !C
361  !C-- REFINEMENT
362  !C
363  integer(kind=kint) :: n_refine
364  integer(kind=kint),pointer :: node_old2new(:)
365  integer(kind=kint),pointer :: node_new2old(:)
366  integer(kind=kint),pointer :: elem_old2new(:)
367  integer(kind=kint),pointer :: elem_new2old(:)
368  integer(kind=kint),pointer :: n_node_refine_hist(:)
369 
370  !C
371  !C-- ETC.
372  !C
373  type (hecmwst_section) :: section
374  type (hecmwst_material) :: material
375  type (hecmwst_mpc) :: mpc
376  type (hecmwst_amplitude) :: amp
377  type (hecmwst_node_grp) :: node_group
378  type (hecmwst_elem_grp) :: elem_group
379  type (hecmwst_surf_grp) :: surf_group
380  type (hecmwst_contact_pair):: contact_pair
381  type (hecmwst_refine_origin):: refine_origin
382 
383  end type hecmwst_local_mesh
384 
385  !C for hecmwST_local_mesh%hecmw_flag_parttype
386  integer(kind=kint),parameter :: hecmw_flag_parttype_unknown = 0
387  integer(kind=kint),parameter :: hecmw_flag_parttype_nodebased = 1
388  integer(kind=kint),parameter :: hecmw_flag_parttype_elembased = 2
389 
390  !C for hecmwST_local_mesh%hecmw_flag_partcontact
391  integer(kind=kint),parameter :: hecmw_flag_partcontact_unknown = 0
392  integer(kind=kint),parameter :: hecmw_flag_partcontact_aggregate = 1
393  integer(kind=kint),parameter :: hecmw_flag_partcontact_distribute = 2
394  integer(kind=kint),parameter :: hecmw_flag_partcontact_simple = 3
395 
396  !C
397  !C +--------+
398  !C | MATRIX |
399  !C +--------+
400  !C===
402  integer(kind=kint) :: zero
403  integer(kind=kint) :: hecmw_comm
404  integer(kind=kint) :: petot
405  integer(kind=kint) :: pesmptot
406  integer(kind=kint) :: my_rank
407  integer(kind=kint) :: errnof
408  integer(kind=kint) :: n_subdomain
409  integer(kind=kint) :: n_neighbor_pe
410  integer(kind=kint), dimension(:), pointer :: neighbor_pe
411  integer(kind=kint), dimension(:), pointer :: import_index
412  integer(kind=kint), dimension(:), pointer :: import_item
413  integer(kind=kint), dimension(:), pointer :: export_index
414  integer(kind=kint), dimension(:), pointer :: export_item
415  integer(kind=kint), dimension(:), pointer :: shared_index
416  integer(kind=kint), dimension(:), pointer :: shared_item
417  end type hecmwst_matrix_comm
418 
420  integer(kind=kint) :: i
421  integer(kind=kint) :: j
422  real(kind=kreal), dimension(3,3) :: val
423  end type hecmwst_index_value_pair
424 
428  integer(kind=kint) :: num_lagrange = 0
429  integer(kind=kint) :: numl_lagrange = 0
430  integer(kind=kint) :: numu_lagrange = 0
431 
432  integer(kind=kint), pointer :: indexl_lagrange(:) => null()
433  integer(kind=kint), pointer :: indexu_lagrange(:) => null()
434 
435  integer(kind=kint), pointer :: iteml_lagrange(:) => null()
436  integer(kind=kint), pointer :: itemu_lagrange(:) => null()
437 
438  real(kind=kreal), pointer :: al_lagrange(:) => null()
439  real(kind=kreal), pointer :: au_lagrange(:) => null()
440 
441  real(kind=kreal), pointer :: lagrange(:) => null()
442  end type hecmwst_matrix_lagrange
443 
445  integer(kind=kint) :: n, np, npl, npu, ndof
446  real(kind=kreal), pointer :: d(:), b(:), x(:), alu(:)
447  real(kind=kreal), pointer :: al(:), au(:)
448  integer(kind=kint), pointer :: indexl(:), indexu(:)
449  integer(kind=kint), pointer :: iteml(:), itemu(:)
450  integer(kind=kint ), dimension(100) :: iarray
451  real (kind=kreal), dimension(100) :: rarray
452  logical :: symmetric = .true.
453  end type hecmwst_matrix
454 contains
455 
456  !C
457  !C***
458  !C*** HECMW_INIT
459  !C***
460  !C
461  !C INIT. HECMW-FEM process's
462  !C
463  subroutine hecmw_init
464  character(len=HECMW_FILENAME_LEN):: ctrlfile = "hecmw_ctrl.dat"
465  call hecmw_init_ex(ctrlfile)
466  end subroutine hecmw_init
467 
468 
469  !C
470  !C***
471  !C*** HECMW_INIT_EX
472  !C***
473  !C
474  !C INIT. HECMW-FEM process's
475  !C
476  subroutine hecmw_init_ex(ctrlfile)
477  character(len=HECMW_FILENAME_LEN):: ctrlfile
478  integer(kind=kint) :: ierr
479 
480 #ifndef HECMW_SERIAL
481  !call MPI_INIT (ierr)
482  call mpi_comm_size (mpi_comm_world, hecmw_petot, ierr)
483  call mpi_comm_rank (mpi_comm_world, hecmw_rank, ierr)
484  call mpi_comm_dup (mpi_comm_world, hecmw_comm, ierr)
485  call mpi_comm_group(mpi_comm_world, hecmw_group, ierr)
486 #else
487  hecmw_petot=1
488  hecmw_rank=0
489  hecmw_comm=0
490  hecmw_group=0
491  ierr=0
492 #endif
493 
494  call hecmw_comm_init_if(hecmw_comm, hecmw_petot, hecmw_rank, hecmw_group)
495 
496  call hecmw_ctrl_init_ex_if(ctrlfile, ierr)
497  if(ierr /= 0) then
499  endif
500  ! call hecmw_couple_comm_init_if(ierr)
501  ! if(ierr /= 0) then
502  ! call hecmw_abort( hecmw_comm_get_comm( ) )
503  ! endif
504 
505  end subroutine hecmw_init_ex
506 
507 
508  !C
509  !C***
510  !C*** HECMW_FINALIZE
511  !C***
512  !C
513  !C FINALIZE. HECMW-FEM process's
514  !C
515  subroutine hecmw_finalize
516  integer(kind=kint) :: ierr
517 
519 
520 #ifndef HECMW_SERIAL
521  call mpi_finalize(ierr)
522 #endif
523 
524  end subroutine hecmw_finalize
525 
526 
527  !C******************** MPI WRAPPER SUBROUTINES ************************
528  !C
529  !C***
530  !C*** HECMW_ABORT
531  !C***
532  !C
533  subroutine hecmw_abort(comm)
534  integer(kind=kint) :: comm, errorcode, ierror
535 
536 #ifndef HECMW_SERIAL
537  call mpi_abort(comm, errorcode, ierror)
538 #else
539  stop
540 #endif
541  end subroutine hecmw_abort
542 
543  !C
544  !C***
545  !C*** HECMW_WTIME
546  !C***
547  !C
548  function hecmw_wtime()
549  real(kind=kreal) hecmw_wtime
550  external hecmw_wtime_fi
551  real(kind=kreal) hecmw_wtime_fi
553  end function hecmw_wtime
554  !C
555  !C***
556  !C*** HECMW_WTICK
557  !C***
558  !C
559  function hecmw_wtick()
560  real(kind=kreal) hecmw_wtick
561  external hecmw_wtick_fi
562  real(kind=kreal) hecmw_wtick_fi
564  end function hecmw_wtick
565  !C
566  !C***
567  !C*** HECMW_COMM_GET_COMM
568  !C***
569  !C
570  function hecmw_comm_get_comm() result(comm)
571  integer(kind=kint) :: comm
572 
573  comm = hecmw_comm
574  end function hecmw_comm_get_comm
575 
576  !C
577  !C***
578  !C*** HECMW_COMM_GET_RANK
579  !C***
580  !C
581  function hecmw_comm_get_rank() result(rank)
582  integer(kind=kint) :: rank
583 
584  rank = hecmw_rank
585  end function hecmw_comm_get_rank
586 
587  !C
588  !C***
589  !C*** HECMW_COMM_GET_SIZE
590  !C***
591  !C
592  function hecmw_comm_get_size() result(comm_size)
593  integer(kind=kint) :: comm_size
594 
595  comm_size = hecmw_petot
596  end function hecmw_comm_get_size
597 
598 
599  !C*************** NULL POINTER SETTING UTILITY ****************
600 
601  subroutine hecmw_nullify_section( P )
602  type( hecmwst_section ) :: P
603  nullify( p%sect_type )
604  nullify( p%sect_opt )
605  nullify( p%sect_mat_ID_index )
606  nullify( p%sect_mat_ID_item )
607  nullify( p%sect_I_index )
608  nullify( p%sect_I_item )
609  nullify( p%sect_R_index )
610  nullify( p%sect_R_item )
611  end subroutine hecmw_nullify_section
612 
613  subroutine hecmw_nullify_material( P )
614  type( hecmwst_material ) :: P
615  nullify( p%mat_name )
616  nullify( p%mat_item_index )
617  nullify( p%mat_subitem_index )
618  nullify( p%mat_table_index )
619  nullify( p%mat_val )
620  nullify( p%mat_temp )
621  end subroutine hecmw_nullify_material
622 
623  subroutine hecmw_nullify_mpc( P )
624  type( hecmwst_mpc ) :: P
625  nullify( p%mpc_index )
626  nullify( p%mpc_item )
627  nullify( p%mpc_dof )
628  nullify( p%mpc_val )
629  nullify( p%mpc_const )
630  end subroutine hecmw_nullify_mpc
631 
632  subroutine hecmw_initialize_mpc( mpc, n_mpc, n_item )
633  type( hecmwst_mpc ), intent(inout) :: mpc
634  integer(kind=kint), intent(in) :: n_mpc
635  integer(kind=kint), intent(in) :: n_item
636 
637  mpc%n_mpc = n_mpc
638  allocate( mpc%mpc_index(0:n_mpc) )
639  allocate( mpc%mpc_item(n_item) )
640  allocate( mpc%mpc_dof(n_item) )
641  allocate( mpc%mpc_val(n_item) )
642  end subroutine
643 
644  subroutine hecmw_finalize_mpc( P )
645  type( hecmwst_mpc ) :: P
646  if( associated(p%mpc_index) ) deallocate( p%mpc_index )
647  if( associated(p%mpc_item) ) deallocate( p%mpc_item )
648  if( associated(p%mpc_dof) ) deallocate( p%mpc_dof )
649  if( associated(p%mpc_val) ) deallocate( p%mpc_val )
650  end subroutine hecmw_finalize_mpc
651 
652  subroutine hecmw_nullify_amplitude( P )
653  type( hecmwst_amplitude ) :: P
654  nullify( p%amp_name )
655  nullify( p%amp_type_definition )
656  nullify( p%amp_type_time )
657  nullify( p%amp_type_value )
658  nullify( p%amp_index )
659  nullify( p%amp_val )
660  nullify( p%amp_table )
661  end subroutine hecmw_nullify_amplitude
662 
663  subroutine hecmw_nullify_node_grp( P )
664  type( hecmwst_node_grp ) :: P
665  nullify( p%grp_name )
666  nullify( p%grp_index )
667  nullify( p%grp_item )
668  nullify( p%bc_grp_ID )
669  nullify( p%bc_grp_type )
670  nullify( p%bc_grp_index )
671  nullify( p%bc_grp_dof )
672  nullify( p%bc_grp_val )
673  end subroutine hecmw_nullify_node_grp
674 
675  subroutine hecmw_nullify_elem_grp( P )
676  type( hecmwst_elem_grp ) :: P
677  nullify( p%grp_name )
678  nullify( p%grp_index )
679  nullify( p%grp_item )
680  nullify( p%bc_grp_ID )
681  nullify( p%bc_grp_type )
682  nullify( p%bc_grp_index )
683  nullify( p%bc_grp_val )
684  end subroutine hecmw_nullify_elem_grp
685 
686  subroutine hecmw_nullify_surf_grp( P )
687  type( hecmwst_surf_grp ) :: P
688  nullify( p%grp_name )
689  nullify( p%grp_index )
690  nullify( p%grp_item )
691  nullify( p%bc_grp_ID )
692  nullify( p%bc_grp_type )
693  nullify( p%bc_grp_index )
694  nullify( p%bc_grp_val )
695  end subroutine hecmw_nullify_surf_grp
696 
697  subroutine hecmw_nullify_contact_pair( P )
698  type( hecmwst_contact_pair ) :: P
699  nullify( p%name )
700  nullify( p%type )
701  nullify( p%slave_grp_id )
702  nullify( p%slave_orisgrp_id )
703  nullify( p%master_grp_id )
704  end subroutine hecmw_nullify_contact_pair
705 
706  subroutine hecmw_nullify_refine_origin( P )
708  nullify( p%index )
709  nullify( p%item_index )
710  nullify( p%item_item )
711  end subroutine hecmw_nullify_refine_origin
712 
713  subroutine hecmw_nullify_mesh( P )
714  type( hecmwst_local_mesh ) :: P
715  nullify( p%files )
716  nullify( p%node )
717  nullify( p%node_ID )
718  nullify( p%global_node_ID )
719  nullify( p%node_val_index )
720  nullify( p%node_val_item )
721  nullify( p%node_dof_index )
722  nullify( p%node_dof_item )
723  nullify( p%node_init_val_index )
724  nullify( p%node_init_val_item )
725  nullify( p%node_internal_list )
726  nullify( p%elem_type_index )
727  nullify( p%elem_type_item )
728  nullify( p%elem_type )
729  nullify( p%section_ID )
730  nullify( p%elem_mat_ID_index )
731  nullify( p%elem_mat_ID_item )
732  nullify( p%elem_node_index )
733  nullify( p%elem_node_item )
734  nullify( p%elem_ID )
735  nullify( p%global_elem_ID )
736  nullify( p%elem_internal_list )
737  nullify( p%elem_mat_int_index )
738  nullify( p%elem_mat_int_val )
739  nullify( p%elem_val_index )
740  nullify( p%elem_val_item )
741  nullify( p%neighbor_pe )
742  nullify( p%import_index )
743  nullify( p%import_item )
744  nullify( p%export_index )
745  nullify( p%export_item )
746  nullify( p%shared_index )
747  nullify( p%shared_item )
748  nullify( p%when_i_was_refined_node )
749  nullify( p%when_i_was_refined_elem )
750  nullify( p%adapt_parent_type )
751  nullify( p%adapt_type )
752  nullify( p%adapt_level )
753  nullify( p%adapt_parent )
754  nullify( p%adapt_children_index )
755  nullify( p%adapt_children_item )
756  nullify( p%adapt_edge_node )
757  nullify( p%adapt_mid_edge )
758  nullify( p%adapt_iemb )
759  nullify( p%adapt_edge_home )
760  nullify( p%adapt_act_edge )
761  nullify( p%adapt_import_edge_index )
762  nullify( p%adapt_import_edge_item )
763  nullify( p%adapt_export_edge_index )
764  nullify( p%adapt_export_edge_item )
765  nullify( p%adapt_import_elem_index )
766  nullify( p%adapt_import_elem_item )
767  nullify( p%adapt_export_elem_index )
768  nullify( p%adapt_export_elem_item )
769  nullify( p%adapt_import_new_index )
770  nullify( p%adapt_import_new_item )
771  nullify( p%adapt_export_new_index )
772  nullify( p%adapt_export_new_item )
773  nullify( p%rev_neighbor_pe )
774  nullify( p%adapt_act_elem_341 )
775  nullify( p%adapt_act_elem_351 )
776  nullify( p%adapt_OLDtoNEW_node )
777  nullify( p%adapt_NEWtoOLD_node )
778  nullify( p%adapt_OLDtoNEW_elem )
779  nullify( p%adapt_NEWtoOLD_elem )
780  nullify( p%adapt_IWK )
781  nullify( p%adapt_children_local )
782  nullify( p%node_old2new )
783  nullify( p%node_new2old )
784  nullify( p%elem_old2new )
785  nullify( p%elem_new2old )
786  nullify( p%n_node_refine_hist )
787 
788  call hecmw_nullify_section( p%section )
789  call hecmw_nullify_material( p%material )
790  call hecmw_nullify_mpc( p%mpc )
791  call hecmw_nullify_amplitude( p%amp )
792  call hecmw_nullify_node_grp( p%node_group )
793  call hecmw_nullify_elem_grp( p%elem_group )
794  call hecmw_nullify_surf_grp( p%surf_group )
795  call hecmw_nullify_contact_pair( p%contact_pair )
796  call hecmw_nullify_refine_origin( p%refine_origin )
797 
798  end subroutine hecmw_nullify_mesh
799 
800 
801  subroutine hecmw_nullify_matrix_comm( P )
802  type( hecmwst_matrix_comm ) :: P
803  nullify( p%neighbor_pe )
804  nullify( p%import_index )
805  nullify( p%import_item )
806  nullify( p%export_index )
807  nullify( p%export_item )
808  nullify( p%shared_index )
809  nullify( p%shared_item )
810  end subroutine hecmw_nullify_matrix_comm
811 
812  subroutine hecmw_nullify_matrix( P )
813  type( hecmwst_matrix ) :: P
814  nullify( p%D )
815  nullify( p%B )
816  nullify( p%X )
817  nullify( p%ALU )
818  nullify( p%AL )
819  nullify( p%AU )
820  nullify( p%indexL )
821  nullify( p%indexU )
822  nullify( p%itemL )
823  nullify( p%itemU )
824  end subroutine hecmw_nullify_matrix
825 
826  subroutine hecmw_print_matrix( fname, P )
827  character(len=*), intent(in) :: fname
828  type( hecmwst_matrix ), intent(in) :: P
829 
830  integer :: i, nf, nBlock
831  nf = 777
832  nblock = p%NDOF * p%NDOF
833  open( unit=nf, file=fname)
834  write( nf, * ) p%N,p%NP,p%NPL,p%NPU,p%NDOF
835  !---- index
836  do i=0, p%NP
837  write( nf,* ) p%indexL(i), p%indexU(i)
838  enddo
839  !---- itemL, AL
840  do i=1, p%NPL
841  write( nf,* ) p%itemL(i)
842  enddo
843  do i=1,nblock * p%NPL
844  write( nf,* ) p%AL(i)
845  enddo
846  !---- itemU, AU
847  do i=1,p%NPU
848  write( nf,* ) p%itemU(i)
849  enddo
850  do i=1,nblock * p%NPU
851  write( nf,* ) p%AU(i)
852  enddo
853  !---- D
854  do i=1,nblock * p%NP
855  write( nf, * ) p%D(i)
856  enddo
857  !---- B
858  do i=1,p%NDOF * p%NP
859  write( nf, * ) p%B(i)
860  enddo
861 
862  close( nf )
863  end subroutine
864 
865  subroutine hecmw_read_matrix( fname, P )
866  character(len=*), intent(in) :: fname
867  type( hecmwst_matrix ), intent(out) :: P
868 
869  integer :: i, nf, nBlock, istat
870  nf = 777
871  open( unit=nf, file=fname, status='old', iostat= istat)
872  if(istat /= 0) then
873  print *, "cannot open file ",fname
874  stop
875  endif
876  read( nf, * ) p%N,p%NP,p%NPL,p%NPU,p%NDOF
877  nblock = p%NDOF * p%NDOF
878 
879  !----It is supposing of array are not allocated yet
880  allocate( p%indexL(0:p%NP), p%indexU(0:p%NP) )
881  allocate( p%itemL(p%NPL), p%itemU(p%NPU) )
882  allocate( p%AL(p%NPL*nblock), p%AU(p%NPU*nblock) )
883  allocate( p%D(p%NP*nblock) )
884  allocate( p%B(p%NDOF*p%NP) )
885  !---- index
886  do i=0, p%NP
887  read( nf,* ) p%indexL(i), p%indexU(i)
888  enddo
889  !---- itemL, AL
890  do i=1, p%NPL
891  read( nf,* ) p%itemL(i)
892  enddo
893  do i=1,nblock * p%NPL
894  read( nf,* ) p%AL(i)
895  enddo
896  !---- itemU, AU
897  do i=1,p%NPU
898  read( nf,* ) p%itemU(i)
899  enddo
900  do i=1,nblock * p%NPU
901  read( nf,* ) p%AU(i)
902  enddo
903  !---- D
904  do i=1,nblock * p%NP
905  read( nf, * ) p%D(i)
906  enddo
907  !---- B
908  do i=1,p%NDOF * p%NP
909  read( nf, * ) p%B(i)
910  enddo
911 
912  close( nf )
913  end subroutine
914 
915  subroutine hecmw_clone_matrix(hecMATorig,hecMAT)
916  type (hecmwST_matrix ) :: hecMATorig
917  type (hecmwST_matrix ),pointer :: hecMAT
918  allocate(hecmat)
919  call hecmw_nullify_matrix( hecmat )
920 
921  hecmat%B => hecmatorig%B
922  hecmat%X => hecmatorig%X
923  hecmat%D => hecmatorig%D
924  hecmat%AL => hecmatorig%AL
925  hecmat%AU => hecmatorig%AU
926  hecmat%indexL => hecmatorig%indexL
927  hecmat%indexU => hecmatorig%indexU
928  hecmat%itemL => hecmatorig%itemL
929  hecmat%itemU => hecmatorig%itemU
930  hecmat%N = hecmatorig%N
931  hecmat%NP = hecmatorig%NP
932  hecmat%NPL = hecmatorig%NPL
933  hecmat%NPU = hecmatorig%NPU
934  hecmat%NDOF = hecmatorig%NDOF
935  hecmat%Iarray = hecmatorig%Iarray
936  hecmat%Rarray = hecmatorig%Rarray
937  end subroutine hecmw_clone_matrix
938 
939  subroutine hecmw_copy_matrix(hecMATorig,hecMAT)
940  type (hecmwST_matrix ) :: hecMATorig
941  type (hecmwST_matrix ),pointer :: hecMAT
942  integer(kind=kint) NDOF,NDOF2,N,NP,NPL,NPU
943 
944  allocate(hecmat)
945  call hecmw_nullify_matrix( hecmat )
946  n = hecmatorig%N
947  ndof = hecmatorig%NDOF
948  ndof2 = ndof*ndof
949  np = hecmatorig%NP
950  npl = hecmatorig%NPL
951  npu = hecmatorig%NPU
952  hecmat%N = n
953  hecmat%NP = np
954  hecmat%NPL = npl
955  hecmat%NPU = npu
956  hecmat%NDOF = ndof
957  allocate(hecmat%B(ndof*np))
958  allocate(hecmat%X(ndof*np))
959  allocate(hecmat%D(ndof2*np))
960  allocate(hecmat%AU(ndof2*npu))
961  allocate(hecmat%AL(ndof2*npl))
962  allocate(hecmat%indexL(0:np), hecmat%indexU(0:np), hecmat%itemL(npl), hecmat%itemU(npu))
963  hecmat%B = hecmatorig%B
964  hecmat%X = hecmatorig%X
965  hecmat%D = hecmatorig%D
966  hecmat%AU = hecmatorig%AU
967  hecmat%AL = hecmatorig%AL
968  hecmat%indexL = hecmatorig%indexL
969  hecmat%indexU = hecmatorig%indexU
970  hecmat%itemL = hecmatorig%itemL
971  hecmat%itemU = hecmatorig%itemU
972  hecmat%Iarray = hecmatorig%Iarray
973  hecmat%Rarray = hecmatorig%Rarray
974  end subroutine hecmw_copy_matrix
975 
976  subroutine hecmw_blockmatrix_expand(hecMATorig,hecMAT,NDOF)
977  type (hecmwST_matrix ) :: hecMATorig
978  type (hecmwST_matrix ),pointer :: hecMAT
979  integer(kind=kint) NDOF,NDOF2,oNDOF,oNDOF2,i,j,k
980 
981  ndof2 = ndof*ndof
982  ondof = hecmatorig%NDOF
983  ondof2 = ondof*ondof
984  allocate(hecmat)
985  call hecmw_nullify_matrix( hecmat )
986 
987  allocate(hecmat%B(ndof*hecmatorig%NP))
988  allocate(hecmat%X(ndof*hecmatorig%NP))
989  allocate(hecmat%D(ndof2*hecmatorig%NP))
990  allocate(hecmat%AL(ndof2*hecmatorig%NPL))
991  allocate(hecmat%AU(ndof2*hecmatorig%NPU))
992  hecmat%indexL => hecmatorig%indexL
993  hecmat%indexU => hecmatorig%indexU
994  hecmat%itemL => hecmatorig%itemL
995  hecmat%itemU => hecmatorig%itemU
996  hecmat%N = hecmatorig%N
997  hecmat%NP = hecmatorig%NP
998  hecmat%NPL = hecmatorig%NPL
999  hecmat%NPU = hecmatorig%NPU
1000  hecmat%NDOF = ndof
1001  hecmat%Iarray = hecmatorig%Iarray
1002  hecmat%Rarray = hecmatorig%Rarray
1003  hecmat%X = 0.0d0
1004  do i = 1, hecmatorig%NP
1005  do j = 1, ndof
1006  do k = 1, ndof
1007  if (j<=ondof .and. k<=ondof) then
1008  hecmat%D(ndof2*(i-1) + (j-1)*ndof + k) = hecmatorig%D(ondof2*(i-1) + (j-1)*ondof + k)
1009  else
1010  if(j==k) then
1011  hecmat%D(ndof2*(i-1) + (j-1)*ndof + k)=1
1012  else
1013  hecmat%D(ndof2*(i-1) + (j-1)*ndof + k)=0
1014  end if
1015  end if
1016  end do
1017  if (j<=ondof) then
1018  hecmat%B(ndof*(i-1) + j) = hecmatorig%B(ondof*(i-1) + j)
1019  else
1020  hecmat%B(ndof*(i-1) + j)=0
1021  end if
1022  end do
1023  end do
1024  do i = 1, hecmatorig%NPL
1025  do j = 1, ndof
1026  do k = 1, ndof
1027  if (j<=ondof .and. k<=ondof) then
1028  hecmat%AL(ndof2*(i-1) + (j-1)*ndof + k) = hecmatorig%AL(ondof2*(i-1) + (j-1)*ondof + k)
1029  else
1030  hecmat%AL(ndof2*(i-1) + (j-1)*ndof + k) = 0
1031  end if
1032  end do
1033  end do
1034  end do
1035  do i = 1, hecmatorig%NPU
1036  do j = 1, ndof
1037  do k = 1, ndof
1038  if (j<=ondof .and. k<=ondof) then
1039  hecmat%AU(ndof2*(i-1) + (j-1)*ndof + k) = hecmatorig%AU(ondof2*(i-1) + (j-1)*ondof + k)
1040  else
1041  hecmat%AU(ndof2*(i-1) + (j-1)*ndof + k) = 0
1042  end if
1043  end do
1044  end do
1045  end do
1046  end subroutine hecmw_blockmatrix_expand
1047  subroutine hecmw_vector_contract(hecMATorig,hecMAT,NDOF)
1048  type (hecmwST_matrix ) :: hecMATorig
1049  type (hecmwST_matrix ),pointer :: hecMAT
1050  integer(kind=kint) NDOF,NDOF2,oNDOF,i,j
1051  ndof2 = ndof*ndof
1052  ondof = hecmatorig%NDOF
1053  do i = 1, hecmatorig%NP
1054  do j = 1, ondof
1055  hecmatorig%X(ondof*(i-1) + j) = hecmat%X(ndof*(i-1) + j)
1056  end do
1057  end do
1058  hecmatorig%Iarray = hecmat%Iarray
1059  hecmatorig%Rarray = hecmat%Rarray
1060  deallocate(hecmat%B)
1061  deallocate(hecmat%D)
1062  deallocate(hecmat%X)
1063  deallocate(hecmat%AL)
1064  deallocate(hecmat%AU)
1065  deallocate(hecmat)
1066  end subroutine hecmw_vector_contract
1067 end module hecmw_util
hecmw_util::hecmwst_amplitude
Definition: hecmw_util_f.F90:110
hecmw_util::hecmw_flag_partcontact_simple
integer(kind=kint), parameter hecmw_flag_partcontact_simple
Definition: hecmw_util_f.F90:394
hecmw_util::hecmw_max
integer(kind=kint), parameter hecmw_max
Definition: hecmw_util_f.F90:25
hecmw_util::hecmw_wtick
real(kind=kreal) function hecmw_wtick()
Definition: hecmw_util_f.F90:560
hecmw_util::kint
integer(kind=4), parameter kint
Definition: hecmw_util_f.F90:15
hecmw_util::hecmw_single_precision
integer(kind=kint), parameter hecmw_single_precision
Definition: hecmw_util_f.F90:28
hecmw_util::hecmw_finalize_mpc
subroutine hecmw_finalize_mpc(P)
Definition: hecmw_util_f.F90:645
hecmw_util::hecmw_nullify_material
subroutine hecmw_nullify_material(P)
Definition: hecmw_util_f.F90:614
hecmw_util::hecmwst_material
Definition: hecmw_util_f.F90:76
hecmw_util::hecmw_bcgrptype_desplacement
integer(kind=kint), parameter hecmw_bcgrptype_desplacement
Definition: hecmw_util_f.F90:149
hecmw_util::hecmw_amp_typetime_step
integer(kind=kint), parameter hecmw_amp_typetime_step
Definition: hecmw_util_f.F90:124
hecmw_util::hecmw_nullify_mesh
subroutine hecmw_nullify_mesh(P)
Definition: hecmw_util_f.F90:714
hecmw_util::hecmw_wtime
real(kind=kreal) function hecmw_wtime()
Definition: hecmw_util_f.F90:549
hecmw_util::hecmw_abort
subroutine hecmw_abort(comm)
Definition: hecmw_util_f.F90:534
hecmw_util::hecmw_character
integer(kind=kint), parameter hecmw_character
Definition: hecmw_util_f.F90:30
hecmw_util::hecmw_blockmatrix_expand
subroutine hecmw_blockmatrix_expand(hecMATorig, hecMAT, NDOF)
Definition: hecmw_util_f.F90:977
hecmw_util::hecmwst_contact_pair
Definition: hecmw_util_f.F90:202
hecmw_util::hecmw_clone_matrix
subroutine hecmw_clone_matrix(hecMATorig, hecMAT)
Definition: hecmw_util_f.F90:916
hecmw_util::hecmw_double_precision
integer(kind=kint), parameter hecmw_double_precision
Definition: hecmw_util_f.F90:29
hecmw_util::hecmw_sum
integer(kind=kint), parameter hecmw_sum
Definition: hecmw_util_f.F90:23
hecmw_util::hecmw_init
subroutine hecmw_init
Definition: hecmw_util_f.F90:464
hecmw_util::hecmw_nullify_surf_grp
subroutine hecmw_nullify_surf_grp(P)
Definition: hecmw_util_f.F90:687
hecmw_util::hecmwst_mpc
Definition: hecmw_util_f.F90:95
hecmw_util::hecmw_read_matrix
subroutine hecmw_read_matrix(fname, P)
Definition: hecmw_util_f.F90:866
hecmw_util::hecmw_name_len
integer(kind=kint), parameter hecmw_name_len
Definition: hecmw_util_f.F90:18
hecmw_util::hecmw_contact_type_node_surf
integer(kind=kint), parameter hecmw_contact_type_node_surf
Definition: hecmw_util_f.F90:212
hecmw_util::hecmw_nullify_elem_grp
subroutine hecmw_nullify_elem_grp(P)
Definition: hecmw_util_f.F90:676
hecmw_util::hecmw_filename_len
integer(kind=kint), parameter hecmw_filename_len
Definition: hecmw_util_f.F90:21
hecmw_comm_init_if
void hecmw_comm_init_if(HECMW_Fint *comm, int *size, int *rank, HECMW_Fint *group)
Definition: hecmw_comm.c:741
hecmw_util::hecmwst_refine_origin
Definition: hecmw_util_f.F90:222
hecmw_util::hecmw_status_size
integer(kind=kint), parameter hecmw_status_size
Definition: hecmw_util_f.F90:33
hecmw_util::hecmw_sect_opt_pstrain
integer(kind=kint), parameter hecmw_sect_opt_pstrain
Definition: hecmw_util_f.F90:64
hecmw_util::hecmwst_matrix_comm
Definition: hecmw_util_f.F90:401
hecmw_util
I/O and Utility.
Definition: hecmw_util_f.F90:7
hecmw_util::hecmwst_local_mesh
Definition: hecmw_util_f.F90:234
hecmw_util::hecmw_header_len
integer(kind=kint), parameter hecmw_header_len
Definition: hecmw_util_f.F90:19
hecmw_util::hecmwst_index_value_pair
Definition: hecmw_util_f.F90:419
hecmw_util::hecmw_flag_parttype_elembased
integer(kind=kint), parameter hecmw_flag_parttype_elembased
Definition: hecmw_util_f.F90:388
hecmw_util::hecmw_nullify_amplitude
subroutine hecmw_nullify_amplitude(P)
Definition: hecmw_util_f.F90:653
hecmw_util::hecmw_init_ex
subroutine hecmw_init_ex(ctrlfile)
Definition: hecmw_util_f.F90:477
hecmw_util::hecmw_amp_typeval_absolute
integer(kind=kint), parameter hecmw_amp_typeval_absolute
Definition: hecmw_util_f.F90:127
hecmw_util::hecmw_min
integer(kind=kint), parameter hecmw_min
Definition: hecmw_util_f.F90:26
hecmw_util::hecmw_flag_parttype_unknown
integer(kind=kint), parameter hecmw_flag_parttype_unknown
Definition: hecmw_util_f.F90:386
hecmw_util::hecmw_amp_typeval_relative
integer(kind=kint), parameter hecmw_amp_typeval_relative
Definition: hecmw_util_f.F90:126
hecmw_util::hecmwst_elem_grp
Definition: hecmw_util_f.F90:158
hecmw_util::hecmw_copy_matrix
subroutine hecmw_copy_matrix(hecMATorig, hecMAT)
Definition: hecmw_util_f.F90:940
hecmw_util::hecmw_flag_parttype_nodebased
integer(kind=kint), parameter hecmw_flag_parttype_nodebased
Definition: hecmw_util_f.F90:387
hecmw_util::hecmw_flag_partcontact_aggregate
integer(kind=kint), parameter hecmw_flag_partcontact_aggregate
Definition: hecmw_util_f.F90:392
hecmw_util::hecmw_nullify_refine_origin
subroutine hecmw_nullify_refine_origin(P)
Definition: hecmw_util_f.F90:707
hecmw_util::kreal
integer(kind=4), parameter kreal
Definition: hecmw_util_f.F90:16
hecmw_util::hecmw_contact_type_surf_surf
integer(kind=kint), parameter hecmw_contact_type_surf_surf
Definition: hecmw_util_f.F90:213
hecmw_util::hecmw_contact_type_node_elem
integer(kind=kint), parameter hecmw_contact_type_node_elem
Definition: hecmw_util_f.F90:214
hecmw_wtick_fi
double hecmw_wtick_fi(void)
Definition: hecmw_time.c:39
hecmw_util::hecmw_nullify_contact_pair
subroutine hecmw_nullify_contact_pair(P)
Definition: hecmw_util_f.F90:698
hecmw_util::hecmw_prod
integer(kind=kint), parameter hecmw_prod
Definition: hecmw_util_f.F90:24
hecmw_util::hecmw_nullify_matrix
subroutine hecmw_nullify_matrix(P)
Definition: hecmw_util_f.F90:813
hecmw_util::hecmw_sect_opt_pstrain_ri
integer(kind=kint), parameter hecmw_sect_opt_pstrain_ri
Definition: hecmw_util_f.F90:67
hecmw_util::hecmw_sect_type_interface
integer(kind=kint), parameter hecmw_sect_type_interface
Definition: hecmw_util_f.F90:61
hecmw_util::hecmw_nullify_mpc
subroutine hecmw_nullify_mpc(P)
Definition: hecmw_util_f.F90:624
hecmw_util::hecmw_finalize
subroutine hecmw_finalize
Definition: hecmw_util_f.F90:516
hecmw_wtime_fi
double hecmw_wtime_fi(void)
Definition: hecmw_time.c:32
hecmw_util::hecmwst_section
Definition: hecmw_util_f.F90:44
hecmw_util::hecmw_sect_type_beam
integer(kind=kint), parameter hecmw_sect_type_beam
Definition: hecmw_util_f.F90:60
hecmw_util::hecmw_print_matrix
subroutine hecmw_print_matrix(fname, P)
Definition: hecmw_util_f.F90:827
hecmw_util::hecmw_sect_opt_asymmetry_ri
integer(kind=kint), parameter hecmw_sect_opt_asymmetry_ri
Definition: hecmw_util_f.F90:68
hecmw_util::hecmw_sect_opt_pstress_ri
integer(kind=kint), parameter hecmw_sect_opt_pstress_ri
Definition: hecmw_util_f.F90:66
hecmw_util::hecmw_comm_get_size
integer(kind=kint) function hecmw_comm_get_size()
Definition: hecmw_util_f.F90:593
hecmw_ctrl_finalize_if
void hecmw_ctrl_finalize_if(void)
Definition: hecmw_control.c:2546
hecmw_util::hecmw_flag_partcontact_unknown
integer(kind=kint), parameter hecmw_flag_partcontact_unknown
Definition: hecmw_util_f.F90:391
hecmw_util::hecmw_initialize_mpc
subroutine hecmw_initialize_mpc(mpc, n_mpc, n_item)
Definition: hecmw_util_f.F90:633
hecmw_ctrl_init_ex_if
void hecmw_ctrl_init_ex_if(char *ctrlfile, int *err, int len)
Definition: hecmw_control.c:2520
hecmw_util::hecmwst_matrix_lagrange
Structure for Lagrange multiplier-related part of stiffness matrix (Lagrange multiplier-related matri...
Definition: hecmw_util_f.F90:427
hecmw_util::hecmw_nullify_matrix_comm
subroutine hecmw_nullify_matrix_comm(P)
Definition: hecmw_util_f.F90:802
hecmw_util::hecmw_bcgrptype_flux
integer(kind=kint), parameter hecmw_bcgrptype_flux
Definition: hecmw_util_f.F90:150
hecmw_util::hecmw_flag_partcontact_distribute
integer(kind=kint), parameter hecmw_flag_partcontact_distribute
Definition: hecmw_util_f.F90:393
hecmw_util::hecmwst_node_grp
Definition: hecmw_util_f.F90:135
hecmw_util::hecmw_sect_opt_pstress
integer(kind=kint), parameter hecmw_sect_opt_pstress
Definition: hecmw_util_f.F90:63
hecmw_util::hecmw_nullify_section
subroutine hecmw_nullify_section(P)
Definition: hecmw_util_f.F90:602
hecmw_util::hecmw_comm_get_rank
integer(kind=kint) function hecmw_comm_get_rank()
Definition: hecmw_util_f.F90:582
hecmw_util::hecmwst_surf_grp
Definition: hecmw_util_f.F90:180
hecmw_util::hecmw_sect_type_solid
integer(kind=kint), parameter hecmw_sect_type_solid
Definition: hecmw_util_f.F90:58
hecmw_util::hecmw_amp_typedef_tabular
integer(kind=kint), parameter hecmw_amp_typedef_tabular
Definition: hecmw_util_f.F90:122
hecmw_util::hecmw_nullify_node_grp
subroutine hecmw_nullify_node_grp(P)
Definition: hecmw_util_f.F90:664
hecmw_util::hecmw_sect_type_shell
integer(kind=kint), parameter hecmw_sect_type_shell
Definition: hecmw_util_f.F90:59
hecmw_util::hecmw_comm_get_comm
integer(kind=kint) function hecmw_comm_get_comm()
Definition: hecmw_util_f.F90:571
hecmw_util::hecmw_sect_opt_asymmetry
integer(kind=kint), parameter hecmw_sect_opt_asymmetry
Definition: hecmw_util_f.F90:65
hecmw_util::hecmw_vector_contract
subroutine hecmw_vector_contract(hecMATorig, hecMAT, NDOF)
Definition: hecmw_util_f.F90:1048
hecmw_util::hecmw_integer
integer(kind=kint), parameter hecmw_integer
Definition: hecmw_util_f.F90:27
hecmw_util::hecmw_msg_len
integer(kind=kint), parameter hecmw_msg_len
Definition: hecmw_util_f.F90:20
hecmw_util::hecmwst_matrix
Definition: hecmw_util_f.F90:444