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 
443  real(kind=kreal), pointer :: lagrange(:) => null()
444 
445  integer(kind=kint), pointer :: lag_node_table(:) => null()
446  end type hecmwst_matrix_lagrange
447 
449  integer(kind=kint) :: n, np, npl, npu, ndof
450  real(kind=kreal), pointer :: d(:), b(:), x(:), alu(:)
451  real(kind=kreal), pointer :: al(:), au(:)
452  integer(kind=kint), pointer :: indexl(:), indexu(:)
453  integer(kind=kint), pointer :: iteml(:), itemu(:)
454  integer(kind=kint ), dimension(100) :: iarray
455  real (kind=kreal), dimension(100) :: rarray
456  logical :: symmetric = .true.
457  end type hecmwst_matrix
458 contains
459 
460  !C
461  !C***
462  !C*** HECMW_INIT
463  !C***
464  !C
465  !C INIT. HECMW-FEM process's
466  !C
467  subroutine hecmw_init
468  character(len=HECMW_FILENAME_LEN):: ctrlfile = "hecmw_ctrl.dat"
469  call hecmw_init_ex(ctrlfile)
470  end subroutine hecmw_init
471 
472 
473  !C
474  !C***
475  !C*** HECMW_INIT_EX
476  !C***
477  !C
478  !C INIT. HECMW-FEM process's
479  !C
480  subroutine hecmw_init_ex(ctrlfile)
481  character(len=HECMW_FILENAME_LEN):: ctrlfile
482  integer(kind=kint) :: ierr
483 
484 #ifndef HECMW_SERIAL
485  !call MPI_INIT (ierr)
486  call mpi_comm_size (mpi_comm_world, hecmw_petot, ierr)
487  call mpi_comm_rank (mpi_comm_world, hecmw_rank, ierr)
488  call mpi_comm_dup (mpi_comm_world, hecmw_comm, ierr)
489  call mpi_comm_group(mpi_comm_world, hecmw_group, ierr)
490 #else
491  hecmw_petot=1
492  hecmw_rank=0
493  hecmw_comm=0
494  hecmw_group=0
495  ierr=0
496 #endif
497 
498  call hecmw_comm_init_if(hecmw_comm, hecmw_petot, hecmw_rank, hecmw_group)
499 
500  call hecmw_ctrl_init_ex_if(ctrlfile, ierr)
501  if(ierr /= 0) then
503  endif
504  ! call hecmw_couple_comm_init_if(ierr)
505  ! if(ierr /= 0) then
506  ! call hecmw_abort( hecmw_comm_get_comm( ) )
507  ! endif
508 
509  end subroutine hecmw_init_ex
510 
511 
512  !C
513  !C***
514  !C*** HECMW_FINALIZE
515  !C***
516  !C
517  !C FINALIZE. HECMW-FEM process's
518  !C
519  subroutine hecmw_finalize
520  integer(kind=kint) :: ierr
521 
523 
524 #ifndef HECMW_SERIAL
525  call mpi_finalize(ierr)
526 #endif
527 
528  end subroutine hecmw_finalize
529 
530 
531  !C******************** MPI WRAPPER SUBROUTINES ************************
532  !C
533  !C***
534  !C*** HECMW_ABORT
535  !C***
536  !C
537  subroutine hecmw_abort(comm)
538  integer(kind=kint) :: comm, errorcode, ierror
539 
540 #ifndef HECMW_SERIAL
541  call mpi_abort(comm, errorcode, ierror)
542 #else
543  stop
544 #endif
545  end subroutine hecmw_abort
546 
547  !C
548  !C***
549  !C*** HECMW_WTIME
550  !C***
551  !C
552  function hecmw_wtime()
553  real(kind=kreal) hecmw_wtime
554  external hecmw_wtime_fi
555  real(kind=kreal) hecmw_wtime_fi
557  end function hecmw_wtime
558  !C
559  !C***
560  !C*** HECMW_WTICK
561  !C***
562  !C
563  function hecmw_wtick()
564  real(kind=kreal) hecmw_wtick
565  external hecmw_wtick_fi
566  real(kind=kreal) hecmw_wtick_fi
568  end function hecmw_wtick
569  !C
570  !C***
571  !C*** HECMW_COMM_GET_COMM
572  !C***
573  !C
574  function hecmw_comm_get_comm() result(comm)
575  integer(kind=kint) :: comm
576 
577  comm = hecmw_comm
578  end function hecmw_comm_get_comm
579 
580  !C
581  !C***
582  !C*** HECMW_COMM_GET_RANK
583  !C***
584  !C
585  function hecmw_comm_get_rank() result(rank)
586  integer(kind=kint) :: rank
587 
588  rank = hecmw_rank
589  end function hecmw_comm_get_rank
590 
591  !C
592  !C***
593  !C*** HECMW_COMM_GET_SIZE
594  !C***
595  !C
596  function hecmw_comm_get_size() result(comm_size)
597  integer(kind=kint) :: comm_size
598 
599  comm_size = hecmw_petot
600  end function hecmw_comm_get_size
601 
602 
603  !C*************** NULL POINTER SETTING UTILITY ****************
604 
605  subroutine hecmw_nullify_section( P )
606  type( hecmwst_section ) :: P
607  nullify( p%sect_type )
608  nullify( p%sect_opt )
609  nullify( p%sect_mat_ID_index )
610  nullify( p%sect_mat_ID_item )
611  nullify( p%sect_I_index )
612  nullify( p%sect_I_item )
613  nullify( p%sect_R_index )
614  nullify( p%sect_R_item )
615  end subroutine hecmw_nullify_section
616 
617  subroutine hecmw_nullify_material( P )
618  type( hecmwst_material ) :: P
619  nullify( p%mat_name )
620  nullify( p%mat_item_index )
621  nullify( p%mat_subitem_index )
622  nullify( p%mat_table_index )
623  nullify( p%mat_val )
624  nullify( p%mat_temp )
625  end subroutine hecmw_nullify_material
626 
627  subroutine hecmw_nullify_mpc( P )
628  type( hecmwst_mpc ) :: P
629  nullify( p%mpc_index )
630  nullify( p%mpc_item )
631  nullify( p%mpc_dof )
632  nullify( p%mpc_val )
633  nullify( p%mpc_const )
634  end subroutine hecmw_nullify_mpc
635 
636  subroutine hecmw_initialize_mpc( mpc, n_mpc, n_item )
637  type( hecmwst_mpc ), intent(inout) :: mpc
638  integer(kind=kint), intent(in) :: n_mpc
639  integer(kind=kint), intent(in) :: n_item
640 
641  mpc%n_mpc = n_mpc
642  allocate( mpc%mpc_index(0:n_mpc) )
643  allocate( mpc%mpc_item(n_item) )
644  allocate( mpc%mpc_dof(n_item) )
645  allocate( mpc%mpc_val(n_item) )
646  end subroutine
647 
648  subroutine hecmw_finalize_mpc( P )
649  type( hecmwst_mpc ) :: P
650  if( associated(p%mpc_index) ) deallocate( p%mpc_index )
651  if( associated(p%mpc_item) ) deallocate( p%mpc_item )
652  if( associated(p%mpc_dof) ) deallocate( p%mpc_dof )
653  if( associated(p%mpc_val) ) deallocate( p%mpc_val )
654  end subroutine hecmw_finalize_mpc
655 
656  subroutine hecmw_nullify_amplitude( P )
657  type( hecmwst_amplitude ) :: P
658  nullify( p%amp_name )
659  nullify( p%amp_type_definition )
660  nullify( p%amp_type_time )
661  nullify( p%amp_type_value )
662  nullify( p%amp_index )
663  nullify( p%amp_val )
664  nullify( p%amp_table )
665  end subroutine hecmw_nullify_amplitude
666 
667  subroutine hecmw_nullify_node_grp( P )
668  type( hecmwst_node_grp ) :: P
669  nullify( p%grp_name )
670  nullify( p%grp_index )
671  nullify( p%grp_item )
672  nullify( p%bc_grp_ID )
673  nullify( p%bc_grp_type )
674  nullify( p%bc_grp_index )
675  nullify( p%bc_grp_dof )
676  nullify( p%bc_grp_val )
677  end subroutine hecmw_nullify_node_grp
678 
679  subroutine hecmw_nullify_elem_grp( P )
680  type( hecmwst_elem_grp ) :: P
681  nullify( p%grp_name )
682  nullify( p%grp_index )
683  nullify( p%grp_item )
684  nullify( p%bc_grp_ID )
685  nullify( p%bc_grp_type )
686  nullify( p%bc_grp_index )
687  nullify( p%bc_grp_val )
688  end subroutine hecmw_nullify_elem_grp
689 
690  subroutine hecmw_nullify_surf_grp( P )
691  type( hecmwst_surf_grp ) :: P
692  nullify( p%grp_name )
693  nullify( p%grp_index )
694  nullify( p%grp_item )
695  nullify( p%bc_grp_ID )
696  nullify( p%bc_grp_type )
697  nullify( p%bc_grp_index )
698  nullify( p%bc_grp_val )
699  end subroutine hecmw_nullify_surf_grp
700 
702  type( hecmwst_contact_pair ) :: P
703  nullify( p%name )
704  nullify( p%type )
705  nullify( p%slave_grp_id )
706  nullify( p%slave_orisgrp_id )
707  nullify( p%master_grp_id )
708  end subroutine hecmw_nullify_contact_pair
709 
711  type( hecmwst_refine_origin ) :: P
712  nullify( p%index )
713  nullify( p%item_index )
714  nullify( p%item_item )
715  end subroutine hecmw_nullify_refine_origin
716 
717  subroutine hecmw_nullify_mesh( P )
718  type( hecmwst_local_mesh ) :: P
719  nullify( p%files )
720  nullify( p%node )
721  nullify( p%node_ID )
722  nullify( p%global_node_ID )
723  nullify( p%node_val_index )
724  nullify( p%node_val_item )
725  nullify( p%node_dof_index )
726  nullify( p%node_dof_item )
727  nullify( p%node_init_val_index )
728  nullify( p%node_init_val_item )
729  nullify( p%node_internal_list )
730  nullify( p%elem_type_index )
731  nullify( p%elem_type_item )
732  nullify( p%elem_type )
733  nullify( p%section_ID )
734  nullify( p%elem_mat_ID_index )
735  nullify( p%elem_mat_ID_item )
736  nullify( p%elem_node_index )
737  nullify( p%elem_node_item )
738  nullify( p%elem_ID )
739  nullify( p%global_elem_ID )
740  nullify( p%elem_internal_list )
741  nullify( p%elem_mat_int_index )
742  nullify( p%elem_mat_int_val )
743  nullify( p%elem_val_index )
744  nullify( p%elem_val_item )
745  nullify( p%neighbor_pe )
746  nullify( p%import_index )
747  nullify( p%import_item )
748  nullify( p%export_index )
749  nullify( p%export_item )
750  nullify( p%shared_index )
751  nullify( p%shared_item )
752  nullify( p%when_i_was_refined_node )
753  nullify( p%when_i_was_refined_elem )
754  nullify( p%adapt_parent_type )
755  nullify( p%adapt_type )
756  nullify( p%adapt_level )
757  nullify( p%adapt_parent )
758  nullify( p%adapt_children_index )
759  nullify( p%adapt_children_item )
760  nullify( p%adapt_edge_node )
761  nullify( p%adapt_mid_edge )
762  nullify( p%adapt_iemb )
763  nullify( p%adapt_edge_home )
764  nullify( p%adapt_act_edge )
765  nullify( p%adapt_import_edge_index )
766  nullify( p%adapt_import_edge_item )
767  nullify( p%adapt_export_edge_index )
768  nullify( p%adapt_export_edge_item )
769  nullify( p%adapt_import_elem_index )
770  nullify( p%adapt_import_elem_item )
771  nullify( p%adapt_export_elem_index )
772  nullify( p%adapt_export_elem_item )
773  nullify( p%adapt_import_new_index )
774  nullify( p%adapt_import_new_item )
775  nullify( p%adapt_export_new_index )
776  nullify( p%adapt_export_new_item )
777  nullify( p%rev_neighbor_pe )
778  nullify( p%adapt_act_elem_341 )
779  nullify( p%adapt_act_elem_351 )
780  nullify( p%adapt_OLDtoNEW_node )
781  nullify( p%adapt_NEWtoOLD_node )
782  nullify( p%adapt_OLDtoNEW_elem )
783  nullify( p%adapt_NEWtoOLD_elem )
784  nullify( p%adapt_IWK )
785  nullify( p%adapt_children_local )
786  nullify( p%node_old2new )
787  nullify( p%node_new2old )
788  nullify( p%elem_old2new )
789  nullify( p%elem_new2old )
790  nullify( p%n_node_refine_hist )
791 
792  call hecmw_nullify_section( p%section )
793  call hecmw_nullify_material( p%material )
794  call hecmw_nullify_mpc( p%mpc )
795  call hecmw_nullify_amplitude( p%amp )
796  call hecmw_nullify_node_grp( p%node_group )
797  call hecmw_nullify_elem_grp( p%elem_group )
798  call hecmw_nullify_surf_grp( p%surf_group )
799  call hecmw_nullify_contact_pair( p%contact_pair )
800  call hecmw_nullify_refine_origin( p%refine_origin )
801 
802  end subroutine hecmw_nullify_mesh
803 
804 
806  type( hecmwst_matrix_comm ) :: P
807  nullify( p%neighbor_pe )
808  nullify( p%import_index )
809  nullify( p%import_item )
810  nullify( p%export_index )
811  nullify( p%export_item )
812  nullify( p%shared_index )
813  nullify( p%shared_item )
814  end subroutine hecmw_nullify_matrix_comm
815 
816  subroutine hecmw_nullify_matrix( P )
817  type( hecmwst_matrix ) :: P
818  nullify( p%D )
819  nullify( p%B )
820  nullify( p%X )
821  nullify( p%ALU )
822  nullify( p%AL )
823  nullify( p%AU )
824  nullify( p%indexL )
825  nullify( p%indexU )
826  nullify( p%itemL )
827  nullify( p%itemU )
828  end subroutine hecmw_nullify_matrix
829 
830  subroutine hecmw_print_matrix( fname, P )
831  character(len=*), intent(in) :: fname
832  type( hecmwst_matrix ), intent(in) :: P
833 
834  integer :: i, nf, nBlock
835  integer :: io_stat
836  nf = 777
837  nblock = p%NDOF * p%NDOF
838  open( unit=nf, file=fname, iostat=io_stat)
839  if( io_stat /= 0 ) return
840  write( nf, * ) p%N,p%NP,p%NPL,p%NPU,p%NDOF
841  !---- index
842  do i=0, p%NP
843  write( nf,* ) p%indexL(i), p%indexU(i)
844  enddo
845  !---- itemL, AL
846  do i=1, p%NPL
847  write( nf,* ) p%itemL(i)
848  enddo
849  do i=1,nblock * p%NPL
850  write( nf,* ) p%AL(i)
851  enddo
852  !---- itemU, AU
853  do i=1,p%NPU
854  write( nf,* ) p%itemU(i)
855  enddo
856  do i=1,nblock * p%NPU
857  write( nf,* ) p%AU(i)
858  enddo
859  !---- D
860  do i=1,nblock * p%NP
861  write( nf, * ) p%D(i)
862  enddo
863  !---- B
864  do i=1,p%NDOF * p%NP
865  write( nf, * ) p%B(i)
866  enddo
867 
868  close( nf )
869  end subroutine
870 
871  subroutine hecmw_read_matrix( fname, P )
872  character(len=*), intent(in) :: fname
873  type( hecmwst_matrix ), intent(out) :: P
874 
875  integer :: i, nf, nBlock, istat
876  nf = 777
877  open( unit=nf, file=fname, status='old', iostat= istat)
878  if(istat /= 0) then
879  print *, "cannot open file ",fname
880  stop
881  endif
882  read( nf, * ) p%N,p%NP,p%NPL,p%NPU,p%NDOF
883  nblock = p%NDOF * p%NDOF
884 
885  !----It is supposing of array are not allocated yet
886  allocate( p%indexL(0:p%NP), p%indexU(0:p%NP) )
887  allocate( p%itemL(p%NPL), p%itemU(p%NPU) )
888  allocate( p%AL(p%NPL*nblock), p%AU(p%NPU*nblock) )
889  allocate( p%D(p%NP*nblock) )
890  allocate( p%B(p%NDOF*p%NP) )
891  !---- index
892  do i=0, p%NP
893  read( nf,* ) p%indexL(i), p%indexU(i)
894  enddo
895  !---- itemL, AL
896  do i=1, p%NPL
897  read( nf,* ) p%itemL(i)
898  enddo
899  do i=1,nblock * p%NPL
900  read( nf,* ) p%AL(i)
901  enddo
902  !---- itemU, AU
903  do i=1,p%NPU
904  read( nf,* ) p%itemU(i)
905  enddo
906  do i=1,nblock * p%NPU
907  read( nf,* ) p%AU(i)
908  enddo
909  !---- D
910  do i=1,nblock * p%NP
911  read( nf, * ) p%D(i)
912  enddo
913  !---- B
914  do i=1,p%NDOF * p%NP
915  read( nf, * ) p%B(i)
916  enddo
917 
918  close( nf )
919  end subroutine
920 
921  subroutine hecmw_clone_matrix(hecMATorig,hecMAT)
922  type (hecmwST_matrix ) :: hecMATorig
923  type (hecmwST_matrix ),pointer :: hecMAT
924  allocate(hecmat)
925  call hecmw_nullify_matrix( hecmat )
926 
927  hecmat%B => hecmatorig%B
928  hecmat%X => hecmatorig%X
929  hecmat%D => hecmatorig%D
930  hecmat%AL => hecmatorig%AL
931  hecmat%AU => hecmatorig%AU
932  hecmat%indexL => hecmatorig%indexL
933  hecmat%indexU => hecmatorig%indexU
934  hecmat%itemL => hecmatorig%itemL
935  hecmat%itemU => hecmatorig%itemU
936  hecmat%N = hecmatorig%N
937  hecmat%NP = hecmatorig%NP
938  hecmat%NPL = hecmatorig%NPL
939  hecmat%NPU = hecmatorig%NPU
940  hecmat%NDOF = hecmatorig%NDOF
941  hecmat%Iarray = hecmatorig%Iarray
942  hecmat%Rarray = hecmatorig%Rarray
943  end subroutine hecmw_clone_matrix
944 
945  subroutine hecmw_copy_matrix(hecMATorig,hecMAT)
946  type (hecmwST_matrix ) :: hecMATorig
947  type (hecmwST_matrix ),pointer :: hecMAT
948  integer(kind=kint) NDOF,NDOF2,N,NP,NPL,NPU
949 
950  allocate(hecmat)
951  call hecmw_nullify_matrix( hecmat )
952  n = hecmatorig%N
953  ndof = hecmatorig%NDOF
954  ndof2 = ndof*ndof
955  np = hecmatorig%NP
956  npl = hecmatorig%NPL
957  npu = hecmatorig%NPU
958  hecmat%N = n
959  hecmat%NP = np
960  hecmat%NPL = npl
961  hecmat%NPU = npu
962  hecmat%NDOF = ndof
963  allocate(hecmat%B(ndof*np))
964  allocate(hecmat%X(ndof*np))
965  allocate(hecmat%D(ndof2*np))
966  allocate(hecmat%AU(ndof2*npu))
967  allocate(hecmat%AL(ndof2*npl))
968  allocate(hecmat%indexL(0:np), hecmat%indexU(0:np), hecmat%itemL(npl), hecmat%itemU(npu))
969  hecmat%B = hecmatorig%B
970  hecmat%X = hecmatorig%X
971  hecmat%D = hecmatorig%D
972  hecmat%AU = hecmatorig%AU
973  hecmat%AL = hecmatorig%AL
974  hecmat%indexL = hecmatorig%indexL
975  hecmat%indexU = hecmatorig%indexU
976  hecmat%itemL = hecmatorig%itemL
977  hecmat%itemU = hecmatorig%itemU
978  hecmat%Iarray = hecmatorig%Iarray
979  hecmat%Rarray = hecmatorig%Rarray
980  end subroutine hecmw_copy_matrix
981 
982  subroutine hecmw_blockmatrix_expand(hecMATorig,hecMAT,NDOF)
983  type (hecmwST_matrix ) :: hecMATorig
984  type (hecmwST_matrix ),pointer :: hecMAT
985  integer(kind=kint) NDOF,NDOF2,oNDOF,oNDOF2,i,j,k
986 
987  ndof2 = ndof*ndof
988  ondof = hecmatorig%NDOF
989  ondof2 = ondof*ondof
990  allocate(hecmat)
991  call hecmw_nullify_matrix( hecmat )
992 
993  allocate(hecmat%B(ndof*hecmatorig%NP))
994  allocate(hecmat%X(ndof*hecmatorig%NP))
995  allocate(hecmat%D(ndof2*hecmatorig%NP))
996  allocate(hecmat%AL(ndof2*hecmatorig%NPL))
997  allocate(hecmat%AU(ndof2*hecmatorig%NPU))
998  hecmat%indexL => hecmatorig%indexL
999  hecmat%indexU => hecmatorig%indexU
1000  hecmat%itemL => hecmatorig%itemL
1001  hecmat%itemU => hecmatorig%itemU
1002  hecmat%N = hecmatorig%N
1003  hecmat%NP = hecmatorig%NP
1004  hecmat%NPL = hecmatorig%NPL
1005  hecmat%NPU = hecmatorig%NPU
1006  hecmat%NDOF = ndof
1007  hecmat%Iarray = hecmatorig%Iarray
1008  hecmat%Rarray = hecmatorig%Rarray
1009  hecmat%X = 0.0d0
1010  do i = 1, hecmatorig%NP
1011  do j = 1, ndof
1012  do k = 1, ndof
1013  if (j<=ondof .and. k<=ondof) then
1014  hecmat%D(ndof2*(i-1) + (j-1)*ndof + k) = hecmatorig%D(ondof2*(i-1) + (j-1)*ondof + k)
1015  else
1016  if(j==k) then
1017  hecmat%D(ndof2*(i-1) + (j-1)*ndof + k)=1
1018  else
1019  hecmat%D(ndof2*(i-1) + (j-1)*ndof + k)=0
1020  end if
1021  end if
1022  end do
1023  if (j<=ondof) then
1024  hecmat%B(ndof*(i-1) + j) = hecmatorig%B(ondof*(i-1) + j)
1025  else
1026  hecmat%B(ndof*(i-1) + j)=0
1027  end if
1028  end do
1029  end do
1030  do i = 1, hecmatorig%NPL
1031  do j = 1, ndof
1032  do k = 1, ndof
1033  if (j<=ondof .and. k<=ondof) then
1034  hecmat%AL(ndof2*(i-1) + (j-1)*ndof + k) = hecmatorig%AL(ondof2*(i-1) + (j-1)*ondof + k)
1035  else
1036  hecmat%AL(ndof2*(i-1) + (j-1)*ndof + k) = 0
1037  end if
1038  end do
1039  end do
1040  end do
1041  do i = 1, hecmatorig%NPU
1042  do j = 1, ndof
1043  do k = 1, ndof
1044  if (j<=ondof .and. k<=ondof) then
1045  hecmat%AU(ndof2*(i-1) + (j-1)*ndof + k) = hecmatorig%AU(ondof2*(i-1) + (j-1)*ondof + k)
1046  else
1047  hecmat%AU(ndof2*(i-1) + (j-1)*ndof + k) = 0
1048  end if
1049  end do
1050  end do
1051  end do
1052  end subroutine hecmw_blockmatrix_expand
1053  subroutine hecmw_vector_contract(hecMATorig,hecMAT,NDOF)
1054  type (hecmwST_matrix ) :: hecMATorig
1055  type (hecmwST_matrix ),pointer :: hecMAT
1056  integer(kind=kint) NDOF,NDOF2,oNDOF,i,j
1057  ndof2 = ndof*ndof
1058  ondof = hecmatorig%NDOF
1059  do i = 1, hecmatorig%NP
1060  do j = 1, ondof
1061  hecmatorig%X(ondof*(i-1) + j) = hecmat%X(ndof*(i-1) + j)
1062  end do
1063  end do
1064  hecmatorig%Iarray = hecmat%Iarray
1065  hecmatorig%Rarray = hecmat%Rarray
1066  deallocate(hecmat%B)
1067  deallocate(hecmat%D)
1068  deallocate(hecmat%X)
1069  deallocate(hecmat%AL)
1070  deallocate(hecmat%AU)
1071  deallocate(hecmat)
1072  end subroutine hecmw_vector_contract
1073 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...