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