FrontISTR  6.0.0
Large-scale structural analysis program with finit element method
m_fstr.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 !-------------------------------------------------------------------------------
5 ! If new header is supported, change according to following method. !
6 ! 1) Increase FSTR_CTRL_HEADER_NUMBER !
7 ! 2) Add new header name to fstr_ctrl_header_names !
8 ! 3) Describe new function to get parameters from control file !
9 ! in fstr_ctrl.f90 !
10 ! 4) Describe new subroutine to set values of the parameter !
11 ! in fstr_setup.f90 !
12 ! 5) If initial values are necessary, set the value !
13 ! in subroutine fstr_setup_init in fstr_setup.f90 !
15 module m_fstr
16  use hecmw
17  use m_common_struct
18  use m_step
19  use m_out
20  use m_timepoint
21  use m_elemact
22  use mmechgauss
23  use mcontactdef
24 
25  implicit none
26 
27  public
28 
31  integer(kind=kint), parameter :: kyes = 1
32  integer(kind=kint), parameter :: kno = 0
33  integer(kind=kint), parameter :: kon = 1
34  integer(kind=kint), parameter :: koff = 0
35 
37  integer(kind=kint), parameter :: kstprecheck = 0
38  integer(kind=kint), parameter :: kststatic = 1
39  integer(kind=kint), parameter :: ksteigen = 2
40  integer(kind=kint), parameter :: kstheat = 3
41  integer(kind=kint), parameter :: kstdynamic = 4
42  !integer(kind=kint), parameter :: kstNLSTATIC = 5
43  integer(kind=kint), parameter :: kststaticeigen = 6
44  integer(kind=kint), parameter :: kstnzprof = 7
45 
47  integer(kind=kint), parameter :: ksmcg = 1
48  integer(kind=kint), parameter :: ksmbicgstab = 2
49  integer(kind=kint), parameter :: ksmgmres = 3
50  integer(kind=kint), parameter :: ksmgpbicg = 4
51  integer(kind=kint), parameter :: ksmgmresr = 5
52  integer(kind=kint), parameter :: ksmgmresren = 6
53  integer(kind=kint), parameter :: ksmpipecg = 8
54  integer(kind=kint), parameter :: ksmgroppcg = 9
55  integer(kind=kint), parameter :: ksmdirect = 101
56 
58  integer(kind=kint), parameter :: knsmnewton = 1
59  integer(kind=kint), parameter :: knsmquasinewton = 2
60 
62  integer(kind=kint), parameter :: kcaslagrange = 1
63  integer(kind=kint), parameter :: kcaalagrange = 2
64 
66  integer(kind=kint), parameter :: kbcffstr = 0 ! BC described in fstr control file (default)
67  integer(kind=kint), parameter :: kbcfnastran = 1 ! nastran file
68 
69  integer(kind=kint), parameter :: kbcinitial = 1
70  integer(kind=kint), parameter :: kbctransit = 2
71 
73  integer(kind=kint), parameter :: kmasslumped = 1
74  integer(kind=kint), parameter :: kmassconsistent = 2
75 
77  integer(kind=kint), parameter :: restart_outlast = 1
78  integer(kind=kint), parameter :: restart_outall = 2
79 
81  integer(kind=kint), parameter :: kel341fi = 1
82  integer(kind=kint), parameter :: kel341sesns = 2
83 
84  integer(kind=kint), parameter :: kel361fi = 1
85  integer(kind=kint), parameter :: kel361bbar = 2
86  integer(kind=kint), parameter :: kel361ic = 3
87  integer(kind=kint), parameter :: kel361fbar = 4
88  integer(kind=kint), parameter :: kel361up = 5
89 
90  integer(kind=kint), parameter :: kel611euler = 1
91  integer(kind=kint), parameter :: kel611timoshenko = 2
92 
93  integer(kind=kint), parameter :: kfloadtype_node = 1
94  integer(kind=kint), parameter :: kfloadtype_surf = 2
95 
96  integer(kind=kint), parameter :: kfloadcase_re = 1
97  integer(kind=kint), parameter :: kfloadcase_im = 2
98 
100  integer(kind=kint), parameter :: kitrcontinue = 0
101  integer(kind=kint), parameter :: kitrconverged = 1
102  integer(kind=kint), parameter :: kitrdiverged = 2
103  integer(kind=kint), parameter :: kitrfloatingerror = 3
104 
105 
107  integer(kind = kint) :: myrank
108  integer(kind = kint) :: nprocs
109 
111  logical :: paracontactflag = .false.
112 
114  character(len=HECMW_FILENAME_LEN) :: cntfilname
115  character(len=HECMW_FILENAME_LEN) :: restartfilname
116 
118  integer(kind=kint), parameter :: ilog = 16 ! log
119  integer(kind=kint), parameter :: ista = 17 ! status
120  integer(kind=kint), parameter :: iutb = 18 ! utable
121  integer(kind=kint), parameter :: imsg = 51 ! message (myrank == 0 only)
122  integer(kind=kint), parameter :: idbg = 52 ! debug
123  integer(kind=kint), parameter :: ifvs = 53 ! visual.ini file
124  integer(kind=kint), parameter :: ineu = 54 ! neutral file (heat)
125  integer(kind=kint), parameter :: iresout = 100 ! ~110, keeping for result output file
126 
128  integer(kind=kint), parameter :: kopss_solution = 1
129  integer(kind=kint), parameter :: kopss_material = 2
130  integer(kind=kint) :: opsstype = kopss_solution ! output stress/strain type
131 
133  character(len=HECMW_FILENAME_LEN) :: cond_name
134  integer :: node_elem = 0
135  integer :: grpid = 0
136  integer, pointer :: intval(:) => null()
137  real(kind=kreal), pointer :: realval(:) => null()
138  end type
139  type( tinitialcondition ), pointer, save :: g_initialcnd(:) => null()
140 
143  integer(kind=kint) :: solution_type=0
144  integer(kind=kint) :: solver_method=0
145  integer(kind=kint) :: nlsolver_method=0
146  logical :: nlgeom=.false.
147 
149  integer(kind=kint) :: analysis_n=0
150  real(kind=kreal), pointer :: dtime(:)=>null()
151  real(kind=kreal), pointer :: etime(:)=>null()
152  real(kind=kreal), pointer :: dtmin(:)=>null()
153  real(kind=kreal), pointer :: delmax(:)=>null()
154  integer(kind=kint), pointer:: itmax(:)=>null()
155  real(kind=kreal), pointer :: eps(:)=>null()
156  real(kind=kreal) :: ref_temp=0.d0
157  integer(kind=kint) :: timepoint_id=0
158 
160  integer(kind=kint) :: fg_echo=koff
161  integer(kind=kint) :: fg_result=koff
162  integer(kind=kint) :: fg_visual=koff
163 
165  integer(kind=kint) :: fg_neutral=koff
166  integer(kind=kint) :: fg_irres=kno
167  integer(kind=kint) :: fg_iwres=kno
168  integer(kind=kint) :: nrres=0
169  integer(kind=kint) :: nprint=0
170 
172  integer(kind=kint) :: n_node=0
173  integer(kind=kint) :: nn_internal=0
174  integer(kind=kint), pointer :: global_local_id(:,:)=>null()
175 
177  integer( kind=kint ) :: fg_couple=0
178  integer( kind=kint ) :: fg_couple_type=0
179  integer( kind=kint ) :: fg_couple_first=0
180  integer( kind=kint ) :: fg_couple_window=0
181 
183  integer( kind=kint ) :: restart_out_type=0
184  integer( kind=kint ) :: restart_version=0
185 
187  integer( kind=kint ) :: contact_algo=0
188  integer( kind=kint ) :: augiter=0
189  logical :: fric_cone_follow=.false.
190  real( kind=kreal ) :: eps_fric_band=0.d0
191  type(tcontactparam), pointer :: contactparam(:)=>null()
192  type(tcontactinterference), pointer :: contact_if(:)=>null()
193 
195  type(tparamautoinc), pointer :: ainc(:)=>null()
196  type(time_points), pointer :: timepoints(:)=>null()
197 
199  type(tparamconverg), pointer :: cnvparam(:)=>null()
200  end type fstr_param
201 
204  real(kind=kreal), pointer :: stress(:) => null()
205  real(kind=kreal), pointer :: strain(:) => null()
206  real(kind=kreal), pointer :: mises(:) => null()
207 
208  real(kind=kreal), pointer :: pstress(:) => null()
209  real(kind=kreal), pointer :: pstrain(:) => null()
210  real(kind=kreal), pointer :: pstress_vect(:,:) => null()
211  real(kind=kreal), pointer :: pstrain_vect(:,:) => null()
212 
213  real(kind=kreal), pointer :: estress(:) => null()
214  real(kind=kreal), pointer :: estrain(:) => null()
215  real(kind=kreal), pointer :: emises(:) => null()
216  real(kind=kreal), pointer :: eplstrain(:) => null()
217 
218  real(kind=kreal), pointer :: epstress(:) => null()
219  real(kind=kreal), pointer :: epstrain(:) => null()
220  real(kind=kreal), pointer :: epstress_vect(:,:) => null()
221  real(kind=kreal), pointer :: epstrain_vect(:,:) => null()
222  real(kind=kreal), pointer :: enqm(:) => null()
223 
224 
225  type(fstr_solid_physic_val), pointer :: layer(:) => null()
226  type(fstr_solid_physic_val), pointer :: plus => null()
227  type(fstr_solid_physic_val), pointer :: minus => null()
228  end type fstr_solid_physic_val
229 
231  integer(kind=kint) :: file_type=0 ! kbcfFSTR or kbcfNASTRAN
232  integer(kind=kint) :: statictype=0 ! 1:Total, 2:Updated, 3:Infinitesimal
233  integer(kind=kint) :: nstep_tot=0
234 
235  type(step_info), pointer :: step_ctrl(:) =>null()
236  type(t_output_ctrl), pointer :: output_ctrl(:)=>null()
237 
239  integer(kind=kint) :: boundary_ngrp_tot=0
240  integer(kind=kint), pointer :: boundary_ngrp_grpid (:) =>null()
241  integer(kind=kint), pointer :: boundary_ngrp_id (:) =>null()
242  integer(kind=kint), pointer :: boundary_ngrp_type (:) =>null()
243  integer(kind=kint), pointer :: boundary_ngrp_amp (:) =>null()
244  real(kind=kreal), pointer :: boundary_ngrp_val(:) =>null()
245  integer(kind=kint), pointer :: boundary_ngrp_istot (:) =>null()
246  integer(kind=kint) :: boundary_ngrp_rot=0
247  integer(kind=kint), pointer :: boundary_ngrp_rotid (:) =>null()
248  integer(kind=kint), pointer :: boundary_ngrp_centerid (:) =>null()
249 
251  integer(kind=kint) :: velocity_type=0
252  integer(kind=kint) :: velocity_ngrp_tot=0
253  integer(kind=kint), pointer :: velocity_ngrp_grpid (:) =>null()
254  integer(kind=kint), pointer :: velocity_ngrp_id (:) =>null()
255  integer(kind=kint), pointer :: velocity_ngrp_type (:) =>null()
256  integer(kind=kint), pointer :: velocity_ngrp_amp (:) =>null()
257  real(kind=kreal), pointer :: velocity_ngrp_val(:) =>null()
258  integer(kind=kint) :: velocity_ngrp_rot=0
259  integer(kind=kint), pointer :: velocity_ngrp_rotid (:) =>null()
260  integer(kind=kint), pointer :: velocity_ngrp_centerid (:) =>null()
261 
263  integer(kind=kint) :: acceleration_type=0
264  integer(kind=kint) :: acceleration_ngrp_tot=0
265  integer(kind=kint), pointer :: acceleration_ngrp_grpid (:) =>null()
266  integer(kind=kint), pointer :: acceleration_ngrp_id (:) =>null()
267  integer(kind=kint), pointer :: acceleration_ngrp_type (:) =>null()
268  integer(kind=kint), pointer :: acceleration_ngrp_amp (:) =>null()
269  real(kind=kreal), pointer :: acceleration_ngrp_val(:) =>null()
270 
272  integer(kind=kint) :: cload_ngrp_tot=0
273  integer(kind=kint), pointer :: cload_ngrp_grpid (:) =>null()
274  integer(kind=kint), pointer :: cload_ngrp_id (:) =>null()
275  integer(kind=kint), pointer :: cload_ngrp_dof (:) =>null()
276  integer(kind=kint), pointer :: cload_ngrp_amp (:) =>null()
277  real(kind=kreal), pointer :: cload_ngrp_val(:) =>null()
278  integer(kind=kint) :: cload_ngrp_rot=0
279  integer(kind=kint), pointer :: cload_ngrp_rotid (:) =>null()
280  integer(kind=kint), pointer :: cload_ngrp_centerid (:) =>null()
281 
283  integer(kind=kint) :: dload_ngrp_tot=0
284  integer(kind=kint) :: dload_follow=0
285  integer(kind=kint), pointer :: dload_ngrp_grpid (:) =>null()
286  integer(kind=kint), pointer :: dload_ngrp_id (:) =>null()
287  integer(kind=kint), pointer :: dload_ngrp_lid (:) =>null()
288  integer(kind=kint), pointer :: dload_ngrp_amp (:) =>null()
289  real(kind=kreal), pointer :: dload_ngrp_params(:,:) =>null()
290 
292  integer(kind=kint) :: temp_ngrp_tot=0
293  integer(kind=kint) :: temp_irres=0
294  integer(kind=kint) :: temp_tstep=0
295  integer(kind=kint) :: temp_interval=0
296  integer(kind=kint) :: temp_rtype=0 ! type of reading result; 1: step-based; 2: time-based
297  real(kind=kreal) :: temp_factor=0.d0
298  integer(kind=kint), pointer :: temp_ngrp_grpid (:) =>null()
299  integer(kind=kint), pointer :: temp_ngrp_id (:) =>null()
300  real(kind=kreal), pointer :: temp_ngrp_val(:) =>null()
301 
303  integer(kind=kint) :: spring_ngrp_tot=0
304  integer(kind=kint), pointer :: spring_ngrp_grpid (:) =>null()
305  integer(kind=kint), pointer :: spring_ngrp_id (:) =>null()
306  integer(kind=kint), pointer :: spring_ngrp_dof (:) =>null()
307  integer(kind=kint), pointer :: spring_ngrp_amp (:) =>null()
308  real(kind=kreal), pointer :: spring_ngrp_val(:) =>null()
309  integer(kind=kint), pointer :: spring_incremental (:) =>null()
310 
312  type(telemact) :: elemact
313 
315  integer( kind=kint ) :: couple_ngrp_tot=0
316  integer( kind=kint ),pointer :: couple_ngrp_id(:) =>null()
317 
319  integer(kind=kint) :: maxn_gauss=0
320 
321  real(kind=kreal), pointer :: stress(:) =>null()
322  real(kind=kreal), pointer :: strain(:) =>null()
323  real(kind=kreal), pointer :: mises(:) =>null()
324 
325  real(kind=kreal), pointer :: pstress(:) =>null()
326  real(kind=kreal), pointer :: pstrain(:) =>null()
327  real(kind=kreal), pointer :: pstress_vect(:,:) =>null()
328  real(kind=kreal), pointer :: pstrain_vect(:,:) =>null()
329 
330  real(kind=kreal), pointer :: estress(:) =>null()
331  real(kind=kreal), pointer :: estrain(:) =>null()
332  real(kind=kreal), pointer :: emises(:) =>null()
333  real(kind=kreal), pointer :: eplstrain(:) =>null()
334 
335  real(kind=kreal), pointer :: epstress(:) =>null()
336  real(kind=kreal), pointer :: epstrain(:) =>null()
337  real(kind=kreal), pointer :: epstress_vect(:,:) =>null()
338  real(kind=kreal), pointer :: epstrain_vect(:,:) =>null()
339 
340  real(kind=kreal), pointer :: tnstrain(:) =>null()
341  real(kind=kreal), pointer :: testrain(:) =>null()
342 
343  real(kind=kreal), pointer :: yield_ratio(:) =>null()
344 
345  real(kind=kreal), pointer :: enqm(:) =>null()
346  real(kind=kreal), pointer :: reaction(:) =>null()
347 
348  real(kind=kreal), pointer :: cont_nforce(:) =>null()
349  real(kind=kreal), pointer :: cont_fric(:) =>null()
350  real(kind=kreal), pointer :: cont_relvel(:) =>null()
351  real(kind=kreal), pointer :: cont_state(:) =>null()
352  integer(kind=kint), pointer :: cont_sgrp_id(:) =>null()
353  real(kind=kreal), pointer :: cont_area(:) =>null()
354  real(kind=kreal), pointer :: cont_ntrac(:) =>null()
355  real(kind=kreal), pointer :: cont_ftrac(:) =>null()
356  real(kind=kreal), pointer :: embed_nforce(:) =>null()
357 
358  type(fstr_solid_physic_val), pointer :: solid=>null()
359  type(fstr_solid_physic_val), pointer :: shell=>null()
360  type(fstr_solid_physic_val), pointer :: beam =>null()
361 
363  integer(kind=kint) :: restart_nout=0
366  integer(kind=kint) :: restart_nin=0
367  type(step_info) :: step_ctrl_restart
368 
369  integer(kind=kint) :: max_lyr=0
370  integer(kind=kint) :: is_33shell=0
371  integer(kind=kint) :: is_33beam=0
372  integer(kind=kint) :: is_heat=0
373  integer(kind=kint) :: max_ncon_stf=0
374  integer(kind=kint) :: max_ncon=0
375  integer(kind=kint), pointer :: is_rot(:) => null()
376  integer(kind=kint) :: elemopt361=0
377  logical :: is_smoothing_active=.false.
378  real(kind=kreal) :: factor(2)=0.d0
381  integer(kind=kint) :: nrstat_i(10)=0
382  real(kind=kreal) :: nrstat_r(10)=0.d0
383  integer(kind=kint) :: autoinc_stat=0
384  integer(kind=kint) :: cutback_stat=0
385 
386  real(kind=kreal), pointer :: gl(:) => null()
387  real(kind=kreal), pointer :: gl0(:) => null()
388  real(kind=kreal), pointer :: eforce(:) => null()
389  real(kind=kreal), pointer :: qforce(:) => null()
390  real(kind=kreal), pointer :: qforce_bak(:) => null()
391  real(kind=kreal), pointer :: dforce(:) => null()
392  real(kind=kreal), pointer :: unode(:) => null()
393  real(kind=kreal), pointer :: unode_bak(:) => null()
394  real(kind=kreal), pointer :: dunode(:) => null()
395  real(kind=kreal), pointer :: ddunode(:) => null()
396  logical :: has_finite_rotation_kinematics=.false.
397  logical :: finite_rotation_state_ready=.false.
398  integer(kind=kint), pointer :: shell_node_mode(:) => null()
399  integer(kind=kint), pointer :: shell_rot_state(:) => null()
400  real(kind=kreal), pointer :: shell_ref_triad(:) => null()
401  real(kind=kreal), pointer :: shell_triad(:) => null()
402  real(kind=kreal), pointer :: shell_triad_bak(:) => null()
403  real(kind=kreal), pointer :: shell_dtriad(:) => null()
404  real(kind=kreal), pointer :: shell_drill(:) => null()
405  real(kind=kreal), pointer :: shell_drill_bak(:) => null()
406  real(kind=kreal), pointer :: shell_ddrill(:) => null()
407  real(kind=kreal), pointer :: temperature(:)=> null()
408  real(kind=kreal), pointer :: temp_bak(:) => null()
409  real(kind=kreal), pointer :: last_temp(:) => null()
410 
411  type( telement ), pointer :: elements(:) =>null()
412  type( tmaterial ),pointer :: materials(:) =>null()
413  integer :: n_contacts=0
414  type( tcontact ), pointer :: contacts(:) =>null()
415  integer :: n_embeds=0
416  type( tcontact ), pointer :: embeds(:) =>null()
417  integer :: n_fix_mpc=0
418  real(kind=kreal), pointer :: mpc_const(:) =>null()
419  type(tsection), pointer :: sections(:) =>null()
420 
421  ! for cutback
422  ! ####################### Notice #######################
423  ! # If you add new variables to store analysis status, #
424  ! # - backup variables with postfix "_bkup" here #
425  ! # - backup process to module m_fstr_Cutback #
426  ! # must be added if necessary. #
427  ! ######################################################
428  real(kind=kreal), pointer :: unode_bkup(:) => null()
429  real(kind=kreal), pointer :: qforce_bkup(:) => null()
430  real(kind=kreal), pointer :: dforce_bkup(:) => null()
431  real(kind=kreal), pointer :: last_temp_bkup(:) => null()
432  real(kind=kreal), pointer :: shell_triad_bkup(:) => null()
433  real(kind=kreal), pointer :: shell_drill_bkup(:) => null()
434  type( telement ), pointer :: elements_bkup(:) =>null()
435  type( tcontact ), pointer :: contacts_bkup(:) =>null()
436  type( tcontact ), pointer :: embeds_bkup(:) =>null()
437  end type fstr_solid
438 
442  integer(kind=kint) :: is_steady=0
443  real(kind=kreal) :: beta=0.d0
444  logical :: is_iter_max_limit=.false.
445 
447  integer(kind=kint) :: steptot=0
448  integer(kind=kint) :: restart_nout=0
449  real(kind=kreal), pointer :: step_dltime(:)=>null(), step_eetime(:)=>null()
450  real(kind=kreal), pointer :: step_delmin(:)=>null(), step_delmax(:)=>null()
451  integer(kind=kint) :: timepoint_id=0
452 
454  integer(kind=kint) :: materialtot=0
455  integer(kind=kint), pointer :: rhotab(:)=>null(), cptab(:)=>null(), condtab(:)=>null()
456  real(kind=kreal), pointer :: rho(:,:)=>null(), rhotemp(:,:)=>null()
457  real(kind=kreal), pointer :: cp(:,:)=>null(), cptemp(:,:)=>null()
458  real(kind=kreal), pointer :: cond(:,:)=>null(), condtemp(:,:)=>null()
459 
460  real(kind=kreal), pointer :: rhofunca(:,:)=>null(), rhofuncb(:,:)=>null()
461  real(kind=kreal), pointer :: cpfunca(:,:)=>null(), cpfuncb(:,:)=>null()
462  real(kind=kreal), pointer :: condfunca(:,:)=>null(), condfuncb(:,:)=>null()
463 
465  integer(kind=kint) :: amplitudetot=0
466  integer(kind=kint), pointer :: ampltab(:)=>null()
467  real(kind=kreal), pointer :: ampl(:,:)=>null(), ampltime(:,:)=>null()
468  real(kind=kreal), pointer :: amplfunca(:,:)=>null(), amplfuncb(:,:)=>null()
469 
471  real(kind=kreal), pointer :: temp0(:)=>null()
472  real(kind=kreal), pointer :: tempc(:)=>null()
473  real(kind=kreal), pointer :: temp(:)=>null()
474 
476  logical, pointer :: is_dummy_node(:)=>null()
477 
479  integer(kind=kint) :: t_fix_tot=0
480  integer(kind=kint), pointer :: t_fix_node(:)=>null()
481  integer(kind=kint), pointer :: t_fix_ampl(:)=>null()
482  real(kind=kreal), pointer :: t_fix_val(:)=>null()
483 
485  integer(kind=kint) :: q_nod_tot=0
486  integer(kind=kint), pointer :: q_nod_node(:)=>null()
487  integer(kind=kint), pointer :: q_nod_ampl(:)=>null()
488  real(kind=kreal), pointer :: q_nod_val(:)=>null()
489 
491  integer(kind=kint) :: q_vol_tot=0
492  integer(kind=kint), pointer :: q_vol_elem(:)=>null()
493  integer(kind=kint), pointer :: q_vol_ampl(:)=>null()
494  real(kind=kreal), pointer :: q_vol_val(:)=>null()
495 
497  integer(kind=kint) :: q_suf_tot=0
498  integer(kind=kint), pointer :: q_suf_elem(:)=>null()
499  integer(kind=kint), pointer :: q_suf_ampl(:)=>null()
500  integer(kind=kint), pointer :: q_suf_surf(:)=>null()
501  real(kind=kreal), pointer :: q_suf_val(:)=>null()
502 
504  integer(kind=kint) :: r_suf_tot=0
505  integer(kind=kint), pointer :: r_suf_elem(:)=>null()
506  integer(kind=kint), pointer :: r_suf_ampl(:,:)=>null()
507  integer(kind=kint), pointer :: r_suf_surf(:)=>null()
508  real(kind=kreal), pointer :: r_suf_val(:,:)=>null()
509 
511  integer(kind=kint) :: h_suf_tot=0
512  integer(kind=kint), pointer :: h_suf_elem(:)=>null()
513  integer(kind=kint), pointer :: h_suf_ampl(:,:)=>null()
514  integer(kind=kint), pointer :: h_suf_surf(:)=>null()
515  real(kind=kreal), pointer :: h_suf_val(:,:)=>null()
516 
517  integer(kind=kint) :: wl_tot=0
518  type(tweldline), pointer :: weldline(:) => null()
519 
521  type(telemact) :: elemact
522  end type fstr_heat
523 
527  integer(kind=kint) :: idx_eqa=0 ! implicit or explicit
528  integer(kind=kint) :: idx_resp=0 ! time history or steady-state harmonic response analysis
529 
531  integer(kind=kint) :: n_step=0 ! total step number of analysis
532  real(kind=kreal) :: t_start=0.d0 ! start time of analysis
533  real(kind=kreal) :: t_curr=0.d0 ! current time of analysis
534  real(kind=kreal) :: t_end=0.d0 ! end time of analysis
535  real(kind=kreal) :: t_delta=0.d0 ! time increment
536  integer(kind=kint) :: restart_nout=0! output interval of restart file
537  ! (if .gt.0) restart file write
538  ! (if .lt.0) restart file read and write
539  integer(kind=kint) :: restart_nin=0 !input number of restart file
540 
542  real(kind=kreal) :: gamma=0.d0 ! Newmark-beta parameter gamma
543  real(kind=kreal) :: beta=0.d0 ! Newmark-beta parameter beta
544 
546  real(kind=kreal) :: alpha=0.d0 ! HHT parameter alpha
547 
549  integer(kind=kint) :: idx_mas=0 ! kMassLumped or kMassConsistent
550 
552  integer(kind=kint) :: idx_dmp=0 ! damping type
553  real(kind=kreal) :: ray_m=0.d0 ! Rayleigh damping parameter Rm
554  real(kind=kreal) :: ray_k=0.d0 ! Rayleigh damping parameter Rk
555 
557  logical :: varinitialize=.false. ! initialization flag
558 
560  integer(kind=kint) :: nout=0 ! output interval of result
561  integer(kind=kint) :: ngrp_monit=0 ! node of monitoring result
562  integer(kind=kint) :: nout_monit=0 ! output interval of result monitoring
563  integer(kind=kint) :: iout_list(6)=0 ! 0:not output 1:output
564  ! iout_list(1): displacement
565  ! iout_list(2): velocity
566  ! iout_list(3): acceleration
567  ! iout_list(4): reaction force
568  ! iout_list(5): strain
569  ! iout_list(6): stress
570 
572  real(kind=kreal), pointer :: disp(:,:) => null()
573  real(kind=kreal), pointer :: vel(:,:) => null()
574  real(kind=kreal), pointer :: acc(:,:) => null()
575  real(kind=kreal), pointer :: hht_force(:) => null()
576 
577  real(kind=kreal) :: kineticenergy=0.d0
578  real(kind=kreal) :: strainenergy=0.d0
579  real(kind=kreal) :: totalenergy=0.d0
580 
582  real(kind=kreal), pointer :: vec1(:) => null()
583  real(kind=kreal), pointer :: vec2(:) => null()
584  real(kind=kreal), pointer :: vec3(:) => null()
585 
586  integer(kind=kint) :: dynamic_iw4 = 204
587  integer(kind=kint) :: dynamic_iw5 = 205
588  integer(kind=kint) :: dynamic_iw6 = 206
589  integer(kind=kint) :: dynamic_iw7 = 207
590  integer(kind=kint) :: dynamic_iw8 = 208
591  integer(kind=kint) :: dynamic_iw9 = 209
592  integer(kind=kint) :: dynamic_iw10 = 210
593  end type fstr_dynamic
594 
596  integer(kind=kint) :: fload_ngrp_tot=0
597  integer(kind=kint), pointer :: fload_ngrp_grpid(:) => null()
598  integer(kind=kint), pointer :: fload_ngrp_id(:) => null()
599  integer(kind=kint), pointer :: fload_ngrp_type(:) => null()
600  integer(kind=kint), pointer :: fload_ngrp_dof(:) => null()
601  real(kind=kreal), pointer :: fload_ngrp_valre(:) => null()
602  real(kind=kreal), pointer :: fload_ngrp_valim(:) => null()
603  !acceleration input given by !FACCELERATION (one entry per data line)
604  integer(kind=kint) :: facc_ngrp_tot=0
605  integer(kind=kint), pointer :: facc_ngrp_id(:) => null()
606  integer(kind=kint), pointer :: facc_ngrp_type(:) => null()
607  real(kind=kreal), pointer :: facc_ngrp_valre(:) => null()
608  real(kind=kreal), pointer :: facc_ngrp_valim(:) => null()
609  character(len=HECMW_FILENAME_LEN) :: eigenlog_filename = ""
610  integer(kind=kint) :: start_mode=0
611  integer(kind=kint) :: end_mode=0
612  end type fstr_freqanalysis
613 
615  integer(kind=kint) :: nummode=0
616  integer(kind=kint) :: numnodedof=0
617  real(kind=kreal), pointer :: eigomega(:) => null()
618  real(kind=kreal), pointer :: eigvector(:,:) => null()
619  real(kind=kreal) :: rayalpha=0.d0, raybeta=0.d0
620  end type fstr_freqanalysis_data
621 
625  integer(kind=kint) :: nget=0 ! Solved eigen value number (default:5)
626  integer(kind=kint) :: maxiter=0 ! Max. Lcz iterations (default:60)
627  integer(kind=kint) :: iter=0 ! Max. Lcz iterations (default:60)
628  real (kind=kreal) :: sigma=0.d0 ! 0.0
629  real (kind=kreal) :: tolerance=0.d0 ! Lcz tolerance (default:1.0e-8)
630  real (kind=kreal) :: totalmass=0.d0
631  real (kind=kreal), pointer :: eigval(:) => null()
632  real (kind=kreal), pointer :: eigvec(:,:) => null()
633  real (kind=kreal), pointer :: resid(:) => null()
634  real (kind=kreal), pointer :: filter(:) => null()
635  real (kind=kreal), pointer :: mass(:) => null()
636  real (kind=kreal), pointer :: effmass(:) => null()
637  real (kind=kreal), pointer :: partfactor(:) => null()
638  logical :: is_free = .false.
639  end type fstr_eigen
640 
644  integer( kind=kint ) :: dof=0 ! == 3
645  integer( kind=kint ) :: ndof=0 ! total dof (coupled_node_n*dof)
646  integer( kind=kint ) :: coupled_node_n=0
648  integer, pointer :: coupled_node(:) => null() ! local node id sent from revocap
649  real( kind=8 ),pointer :: trac(:) => null() ! input (x,y,z,x,y,z ... )
650  real( kind=8 ),pointer :: disp(:) => null() ! output (x,y,z,x,y,z ... )
651  real( kind=8 ),pointer :: velo(:) => null() ! output (x,y,z,x,y,z ... )
652  real( kind=8 ),pointer :: accel(:) => null() ! output (x,y,z,x,y,z ... )
654  integer( kind=kint ),pointer :: index(:) => null() ! size:total node num.
656  end type fstr_couple
657 
660  integer(kind=kint) :: egrpid=0
661  real( kind=kreal ) :: i=0.d0
662  real( kind=kreal ) :: u=0.d0
663  real( kind=kreal ) :: coe=0.d0
664  real( kind=kreal ) :: v=0.d0
665  integer(kind=kint) :: xyz=0
666  real(kind=kreal) :: n1=0.d0, n2=0.d0
667  real(kind=kreal) :: distol=0.d0
668  real(kind=kreal) :: tstart=0.d0
669  end type tweldline
670 
672  type tsection
673  !integer :: mat_ID=0
674  !integer :: iset=0
675  !integer :: orien_ID=0
676  real(kind=kreal) :: thickness=0.d0
677  integer :: elemopt341=0
678  !integer :: elemopt342=0
679  !integer :: elemopt351=0
680  !integer :: elemopt352=0
681  integer :: elemopt361=0
682  !integer :: elemopt362=0
683  integer :: elemopt611=0
684  end type tsection
685 
686 contains
687 
691  subroutine fstr_abort( code )
692  integer(kind=kint), intent(in) :: code
693  integer(kind=kint) :: ios
694 
695  flush( ilog, iostat=ios )
696  if( myrank == 0 ) then
697  flush( ista, iostat=ios )
698  flush( imsg, iostat=ios )
699  endif
700  call hecmw_abort( hecmw_comm_get_comm(), code )
701  end subroutine fstr_abort
702 
704  implicit none
705  type( tinitialcondition ) :: cond
706  nullify( cond%intval )
707  nullify( cond%realval )
708  end subroutine
709 
711  subroutine fstr_nullify_fstr_param( P )
712  implicit none
713  type( fstr_param ) :: P
714 
715  nullify( p%dtime )
716  nullify( p%etime )
717  nullify( p%dtmin )
718  nullify( p%delmax )
719  nullify( p%itmax )
720  nullify( p%eps )
721  nullify( p%global_local_ID)
722  nullify( p%contactparam )
723  nullify( p%contact_if )
724  nullify( p%ainc )
725  nullify( p%timepoints )
726  nullify( p%cnvparam )
727  end subroutine fstr_nullify_fstr_param
728 
730  implicit none
731  type( fstr_solid_physic_val ) :: P
732  nullify( p%STRESS )
733  nullify( p%STRAIN )
734  nullify( p%MISES )
735 
736  nullify( p%PSTRESS )
737  nullify( p%PSTRAIN )
738  nullify( p%PSTRESS_VECT )
739  nullify( p%PSTRAIN_VECT )
740 
741  nullify( p%ESTRESS )
742  nullify( p%ESTRAIN )
743  nullify( p%EMISES )
744  nullify( p%EPLSTRAIN )
745 
746  nullify( p%EPSTRESS )
747  nullify( p%EPSTRAIN )
748  nullify( p%EPSTRESS_VECT )
749  nullify( p%EPSTRAIN_VECT )
750  nullify( p%ENQM )
751 
752  nullify( p%LAYER )
753  nullify( p%PLUS )
754  nullify( p%MINUS )
755  end subroutine fstr_nullify_solid_physic_val
756 
757  subroutine fstr_nullify_fstr_solid( S )
758  implicit none
759  type( fstr_solid ) :: S
760 
761  nullify( s%step_ctrl )
762  nullify( s%output_ctrl )
763 
764  nullify( s%BOUNDARY_ngrp_GRPID )
765  nullify( s%BOUNDARY_ngrp_ID )
766  nullify( s%BOUNDARY_ngrp_type )
767  nullify( s%BOUNDARY_ngrp_amp )
768  nullify( s%BOUNDARY_ngrp_val )
769  nullify( s%BOUNDARY_ngrp_istot )
770  nullify( s%BOUNDARY_ngrp_rotID )
771  nullify( s%BOUNDARY_ngrp_centerID )
772 
773  nullify( s%VELOCITY_ngrp_GRPID )
774  nullify( s%VELOCITY_ngrp_ID )
775  nullify( s%VELOCITY_ngrp_type )
776  nullify( s%VELOCITY_ngrp_amp )
777  nullify( s%VELOCITY_ngrp_val )
778  nullify( s%VELOCITY_ngrp_rotID )
779  nullify( s%VELOCITY_ngrp_centerID )
780 
781  nullify( s%ACCELERATION_ngrp_GRPID )
782  nullify( s%ACCELERATION_ngrp_ID )
783  nullify( s%ACCELERATION_ngrp_type )
784  nullify( s%ACCELERATION_ngrp_amp )
785  nullify( s%ACCELERATION_ngrp_val )
786 
787  nullify( s%CLOAD_ngrp_GRPID )
788  nullify( s%CLOAD_ngrp_ID )
789  nullify( s%CLOAD_ngrp_DOF )
790  nullify( s%CLOAD_ngrp_amp )
791  nullify( s%CLOAD_ngrp_val )
792  nullify( s%CLOAD_ngrp_rotID )
793  nullify( s%CLOAD_ngrp_centerID )
794 
795  nullify( s%DLOAD_ngrp_GRPID )
796  nullify( s%DLOAD_ngrp_ID )
797  nullify( s%DLOAD_ngrp_LID )
798  nullify( s%DLOAD_ngrp_amp )
799  nullify( s%DLOAD_ngrp_params )
800 
801  nullify( s%TEMP_ngrp_GRPID )
802  nullify( s%TEMP_ngrp_ID )
803  nullify( s%TEMP_ngrp_val )
804 
805  nullify( s%SPRING_ngrp_GRPID )
806  nullify( s%SPRING_ngrp_ID )
807  nullify( s%SPRING_ngrp_DOF )
808  nullify( s%SPRING_ngrp_amp )
809  nullify( s%SPRING_ngrp_val )
810  nullify( s%SPRING_incremental )
811 
812  nullify( s%COUPLE_ngrp_ID )
813 
814  nullify( s%STRESS )
815  nullify( s%STRAIN )
816  nullify( s%MISES )
817  nullify( s%PSTRESS )
818  nullify( s%PSTRAIN )
819  nullify( s%PSTRESS_VECT )
820  nullify( s%PSTRAIN_VECT )
821  nullify( s%ESTRESS )
822  nullify( s%ESTRAIN )
823  nullify( s%EMISES )
824  nullify( s%EPLSTRAIN )
825  nullify( s%EPSTRESS )
826  nullify( s%EPSTRAIN )
827  nullify( s%EPSTRESS_VECT )
828  nullify( s%EPSTRAIN_VECT )
829  nullify( s%TNSTRAIN )
830  nullify( s%TESTRAIN )
831  nullify( s%YIELD_RATIO )
832  nullify( s%ENQM )
833  nullify( s%REACTION )
834 
835  nullify( s%CONT_NFORCE )
836  nullify( s%CONT_FRIC )
837  nullify( s%CONT_RELVEL )
838  nullify( s%CONT_STATE )
839  nullify( s%CONT_SGRP_ID )
840  nullify( s%CONT_AREA )
841  nullify( s%CONT_NTRAC )
842  nullify( s%CONT_FTRAC )
843  nullify( s%EMBED_NFORCE )
844 
845  nullify( s%SOLID )
846  nullify( s%SHELL )
847  nullify( s%BEAM )
848 
849  nullify( s%is_rot )
850 
851  nullify( s%GL )
852  nullify( s%GL0 )
853  nullify( s%EFORCE )
854  nullify( s%QFORCE )
855  nullify( s%QFORCE_bak )
856  nullify( s%DFORCE )
857  nullify( s%unode )
858  nullify( s%unode_bak )
859  nullify( s%dunode )
860  nullify( s%ddunode )
861 
862  nullify( s%shell_node_mode )
863  nullify( s%shell_rot_state )
864  nullify( s%shell_ref_triad )
865  nullify( s%shell_triad )
866  nullify( s%shell_triad_bak )
867  nullify( s%shell_dtriad )
868  nullify( s%shell_drill )
869  nullify( s%shell_drill_bak )
870  nullify( s%shell_ddrill )
871  nullify( s%temperature )
872  nullify( s%temp_bak )
873  nullify( s%last_temp )
874 
875  nullify( s%elements )
876  nullify( s%materials )
877  nullify( s%contacts )
878  nullify( s%embeds )
879  nullify( s%mpc_const )
880  nullify( s%sections )
881 
882  nullify( s%unode_bkup )
883  nullify( s%QFORCE_bkup )
884  nullify( s%DFORCE_bkup )
885  nullify( s%last_temp_bkup )
886  nullify( s%shell_triad_bkup )
887  nullify( s%shell_drill_bkup )
888  nullify( s%elements_bkup )
889  nullify( s%contacts_bkup )
890  nullify( s%embeds_bkup )
891 
892  end subroutine fstr_nullify_fstr_solid
893 
894  subroutine fstr_nullify_fstr_heat( H )
895  implicit none
896  type( fstr_heat ) :: H
897 
898  nullify( h%STEP_DLTIME )
899  nullify( h%STEP_EETIME )
900  nullify( h%STEP_DELMIN )
901  nullify( h%STEP_DELMAX )
902  nullify( h%RHOtab )
903  nullify( h%CPtab )
904  nullify( h%CONDtab )
905  nullify( h%RHO )
906  nullify( h%RHOtemp )
907  nullify( h%CP )
908  nullify( h%CPtemp )
909  nullify( h%COND )
910  nullify( h%CONDtemp )
911  nullify( h%RHOfuncA )
912  nullify( h%RHOfuncB )
913  nullify( h%CPfuncA )
914  nullify( h%CPfuncB )
915  nullify( h%CONDfuncA )
916  nullify( h%CONDfuncB )
917  nullify( h%AMPLtab )
918  nullify( h%AMPL )
919  nullify( h%AMPLtime )
920  nullify( h%AMPLfuncA )
921  nullify( h%AMPLfuncB )
922  nullify( h%TEMP0 )
923  nullify( h%TEMPC )
924  nullify( h%TEMP )
925  nullify( h%is_dummy_node )
926  nullify( h%T_FIX_node )
927  nullify( h%T_FIX_ampl )
928  nullify( h%T_FIX_val )
929  nullify( h%Q_NOD_node )
930  nullify( h%Q_NOD_ampl )
931  nullify( h%Q_NOD_val )
932  nullify( h%Q_VOL_elem )
933  nullify( h%Q_VOL_ampl )
934  nullify( h%Q_VOL_val )
935  nullify( h%Q_SUF_elem )
936  nullify( h%Q_SUF_ampl )
937  nullify( h%Q_SUF_surf )
938  nullify( h%Q_SUF_val )
939  nullify( h%R_SUF_elem )
940  nullify( h%R_SUF_ampl )
941  nullify( h%R_SUF_surf )
942  nullify( h%R_SUF_val )
943  nullify( h%H_SUF_elem )
944  nullify( h%H_SUF_ampl )
945  nullify( h%H_SUF_surf )
946  nullify( h%H_SUF_val )
947  nullify( h%weldline )
948  end subroutine fstr_nullify_fstr_heat
949 
950  subroutine fstr_nullify_fstr_dynamic( DY )
951  implicit none
952  type( fstr_dynamic ) :: DY
953 
954  nullify( dy%DISP )
955  nullify( dy%VEL )
956  nullify( dy%ACC )
957  nullify( dy%HHT_FORCE )
958  nullify( dy%VEC1 )
959  nullify( dy%VEC2 )
960  nullify( dy%VEC3 )
961  end subroutine fstr_nullify_fstr_dynamic
962 
964  implicit none
965  type( fstr_freqanalysis ), intent(inout) :: f
966 
967  f%FLOAD_ngrp_tot = 0
968  nullify( f%FLOAD_ngrp_GRPID )
969  nullify( f%FLOAD_ngrp_ID )
970  nullify( f%FLOAD_ngrp_TYPE )
971  nullify( f%FLOAD_ngrp_DOF )
972  nullify( f%FLOAD_ngrp_valre )
973  nullify( f%FLOAD_ngrp_valim )
974  !no acceleration input unless !FACCELERATION is given
975  f%FACC_ngrp_tot = 0
976  nullify( f%FACC_ngrp_ID )
977  nullify( f%FACC_ngrp_type )
978  nullify( f%FACC_ngrp_valre )
979  nullify( f%FACC_ngrp_valim )
980  end subroutine fstr_nullify_fstr_freqanalysis
981 
983  implicit none
984  type( fstr_freqanalysis_data ), intent(inout) :: f
985  nullify( f%eigOmega )
986  nullify( f%eigVector )
988 
989  subroutine fstr_nullify_fstr_eigen( E )
990  implicit none
991  type( fstr_eigen ) :: E
992  nullify( e%eigval )
993  nullify( e%eigvec )
994  nullify( e%resid )
995  nullify( e%filter )
996  nullify( e%mass )
997  nullify( e%effmass )
998  nullify( e%partfactor )
999  end subroutine fstr_nullify_fstr_eigen
1000 
1002  implicit none
1003  type( fstr_couple ) :: C
1004 
1005  nullify( c%coupled_node )
1006  nullify( c%trac )
1007  nullify( c%disp )
1008  nullify( c%velo )
1009  nullify( c%index )
1010  end subroutine fstr_nullify_fstr_couple
1011 
1013  subroutine fstr_mat_init( hecMAT )
1014  implicit none
1015  type(hecmwst_matrix) :: hecMAT
1016 
1017  hecmat%Iarray(1) = 100 ! = nier
1018  hecmat%Iarray(2) = 1 ! = method
1019  hecmat%Iarray(3) = 1 ! = precond
1020  hecmat%Iarray(4) = 0 ! = nset
1021  hecmat%Iarray(5) = 1 ! = iterpremax
1022  hecmat%Iarray(6) = 10 ! = nrest
1023  hecmat%Iarray(7) = 0 ! = scaling
1024  hecmat%Iarray(21)= kno ! = iterlog
1025  hecmat%Iarray(22)= kno ! = timelog
1026  hecmat%Iarray(31)= 0 ! = dumptype
1027  hecmat%Iarray(32)= 0 ! = dumpexit
1028  hecmat%Iarray(33)= 0 ! = usejad
1029  hecmat%Iarray(34)= 10 ! = ncolor_in
1030  hecmat%Iarray(13)= 0 ! = mpc_method
1031  hecmat%Iarray(14)= 0 ! = estcond
1032  hecmat%Iarray(16)= 0 ! = recompute_residual
1033  hecmat%Iarray(35)= 3 ! = maxrecycle_precond
1034  hecmat%Iarray(36)= hecmw_matvec_impl_default ! = matvec_impl
1035  hecmat%Iarray(37)= hecmw_precond_impl_default ! = precond_impl
1036  hecmat%Iarray(41)= 0 ! = solver_opt1
1037  hecmat%Iarray(42)= 0 ! = solver_opt2
1038  hecmat%Iarray(43)= 0 ! = solver_opt3
1039  hecmat%Iarray(44)= 0 ! = solver_opt4
1040  hecmat%Iarray(45)= 0 ! = solver_opt5
1041  hecmat%Iarray(46)= 0 ! = solver_opt6
1042 
1043  hecmat%Rarray(1) = 1.0e-8 ! = resid
1044  hecmat%Rarray(2) = 1.0 ! = sigma_diag
1045  hecmat%Rarray(3) = 1.0 ! = omega
1046  hecmat%Rarray(4) = 0.1 ! = thresh
1047  hecmat%Rarray(5) = 0.1 ! = filter
1048  hecmat%Rarray(11)= 1.0e+4 ! = penalty
1049 
1050  hecmat%Iarray(96) = 0 ! nrecycle_precond
1051  hecmat%Iarray(97) = kyes ! flag_numfact
1052  hecmat%Iarray(98) = kyes ! flag_symbfact
1053  hecmat%Iarray(99) = kyes ! indirect method
1054  end subroutine fstr_mat_init
1055 
1056  subroutine hecmat_init( hecMAT )
1057  implicit none
1058  type( hecmwst_matrix ) :: hecMAT
1059  integer :: ndof, nn, ierror
1060  ndof = hecmat%NDOF
1061  nn = ndof*ndof
1062  allocate (hecmat%AL(nn*hecmat%NPL) ,stat=ierror )
1063  if( ierror /= 0 ) then
1064  write(*,*) "##ERROR : not enough memory"
1065  write(idbg,*) 'stop due to allocation error'
1066  call flush(idbg)
1067  call hecmw_abort( hecmw_comm_get_comm() )
1068  end if
1069  allocate (hecmat%AU(nn*hecmat%NPU) ,stat=ierror )
1070  if( ierror /= 0 ) then
1071  write(*,*) "##ERROR : not enough memory"
1072  write(idbg,*) 'stop due to allocation error'
1073  call flush(idbg)
1074  call hecmw_abort( hecmw_comm_get_comm() )
1075  end if
1076  allocate (hecmat%B(ndof*hecmat%NP) ,stat=ierror )
1077  if( ierror /= 0 ) then
1078  write(*,*) "##ERROR : not enough memory"
1079  write(idbg,*) 'stop due to allocation error'
1080  call flush(idbg)
1081  call hecmw_abort( hecmw_comm_get_comm() )
1082  end if
1083  hecmat%B(:)=0.d0
1084  allocate (hecmat%D(nn*hecmat%NP) ,stat=ierror )
1085  if( ierror /= 0 ) then
1086  write(*,*) "##ERROR : not enough memory"
1087  write(idbg,*) 'stop due to allocation error'
1088  call flush(idbg)
1089  call hecmw_abort( hecmw_comm_get_comm() )
1090  end if
1091  allocate (hecmat%X(ndof*hecmat%NP) ,stat=ierror )
1092  if( ierror /= 0 ) then
1093  write(*,*) "##ERROR : not enough memory"
1094  write(idbg,*) 'stop due to allocation error'
1095  call flush(idbg)
1096  call hecmw_abort( hecmw_comm_get_comm() )
1097  end if
1098  hecmat%D = 0.0d0
1099  hecmat%AL = 0.0d0
1100  hecmat%AU = 0.0d0
1101  hecmat%B = 0.0d0
1102  hecmat%X = 0.0d0
1103  end subroutine hecmat_init
1104 
1105  subroutine hecmat_finalize( hecMAT )
1106  implicit none
1107  type( hecmwst_matrix ) :: hecMAT
1108  integer :: ndof, nn, ierror
1109  ndof = hecmat%NDOF
1110  nn = ndof*ndof
1111  if( associated(hecmat%AL) ) then
1112  deallocate(hecmat%AL ,stat=ierror)
1113  if( ierror /= 0 ) then
1114  write(idbg,*) 'stop due to deallocation error'
1115  call flush(idbg)
1116  call hecmw_abort( hecmw_comm_get_comm())
1117  end if
1118  endif
1119  if( associated(hecmat%AU) ) then
1120  deallocate(hecmat%AU ,stat=ierror)
1121  if( ierror /= 0 ) then
1122  write(idbg,*) 'stop due to deallocation error'
1123  call flush(idbg)
1124  call hecmw_abort( hecmw_comm_get_comm())
1125  end if
1126  endif
1127  if( associated(hecmat%B) ) then
1128  deallocate(hecmat%B ,stat=ierror)
1129  if( ierror /= 0 ) then
1130  write(idbg,*) 'stop due to deallocation error'
1131  call flush(idbg)
1132  call hecmw_abort( hecmw_comm_get_comm())
1133  end if
1134  endif
1135  if( associated(hecmat%D) ) then
1136  deallocate(hecmat%D ,stat=ierror)
1137  if( ierror /= 0 ) then
1138  write(idbg,*) 'stop due to deallocation error'
1139  call flush(idbg)
1140  call hecmw_abort( hecmw_comm_get_comm())
1141  end if
1142  endif
1143  if( associated(hecmat%X) ) then
1144  deallocate(hecmat%X ,stat=ierror)
1145  if( ierror /= 0 ) then
1146  write(idbg,*) 'stop due to deallocation error'
1147  call flush(idbg)
1148  call hecmw_abort( hecmw_comm_get_comm())
1149  end if
1150  endif
1151  if( associated(hecmat%A) ) then
1152  deallocate(hecmat%A ,stat=ierror)
1153  if( ierror /= 0 ) then
1154  write(idbg,*) 'stop due to deallocation error'
1155  call flush(idbg)
1156  call hecmw_abort( hecmw_comm_get_comm())
1157  end if
1158  endif
1159  end subroutine hecmat_finalize
1160 
1162  subroutine fstr_param_init( fstrPARAM, hecMESH )
1163  implicit none
1164  type(fstr_param) :: fstrPARAM
1165  type(hecmwst_local_mesh) :: hecMESH
1166  integer(kind=kint) :: i
1167  external fstr_sort_index
1168 
1169  fstrparam%solution_type = kststatic
1170  fstrparam%nlgeom = .false.
1171  fstrparam%solver_method = ksmcg
1172  fstrparam%nlsolver_method = knsmnewton
1173 
1174  !!STATIC !HEAT
1175  fstrparam%analysis_n = 0
1176  fstrparam%ref_temp = 0
1177 
1178  ! output control
1179  fstrparam%fg_echo = koff
1180  fstrparam%fg_result = koff
1181  fstrparam%fg_visual = koff
1182 
1183  ! for heat ...
1184  fstrparam%fg_neutral = koff
1185  fstrparam%fg_irres = kno
1186  fstrparam%fg_iwres = kno
1187  fstrparam%nrres = 1
1188  fstrparam%nprint = 1
1189 
1190  ! for couple
1191  fstrparam%fg_couple = 0
1192  fstrparam%fg_couple_type = 0
1193  fstrparam%fg_couple_first= 0
1194  fstrparam%fg_couple_window= 0
1195 
1196  ! for restart control
1197  fstrparam%restart_version = 6
1198 
1199  ! for contact analysis
1200  fstrparam%contact_algo = kcaslagrange ! default: Standard Lagrange
1201  fstrparam%augiter = 2 ! default augmentation iteration for ALagrange
1202  fstrparam%fric_cone_follow = .true. ! default: cone radius follows the applied normal force
1203  fstrparam%eps_fric_band = 0.d0 ! default: no stick/slip hysteresis band
1204 
1205  ! index table for global node ID sorting
1206 
1207  fstrparam%n_node = hecmesh%n_node;
1208  fstrparam%nn_internal = hecmesh%nn_internal;
1209  allocate( fstrparam%global_local_ID(2,hecmesh%nn_internal))
1210  do i = 1, hecmesh%nn_internal
1211  fstrparam%global_local_ID(1,i) = hecmesh%global_node_ID(i)
1212  fstrparam%global_local_ID(2,i) = i
1213  end do
1214  call fstr_sort_index( fstrparam%global_local_ID, hecmesh%nn_internal )
1215  end subroutine fstr_param_init
1216 
1218  implicit none
1219  type( tinitialcondition ) :: cond
1220  if(associated(cond%intval)) deallocate(cond%intval)
1221  if(associated(cond%realval)) deallocate(cond%realval)
1222  end subroutine fstr_initial_condition_finalize
1223 
1224  subroutine fstr_param_finalize( fstrPARAM )
1225  implicit none
1226  type(fstr_param) :: fstrPARAM
1227  integer :: i
1228  if(associated(fstrparam%dtime)) deallocate(fstrparam%dtime)
1229  if(associated(fstrparam%etime)) deallocate(fstrparam%etime)
1230  if(associated(fstrparam%dtmin)) deallocate(fstrparam%dtmin)
1231  if(associated(fstrparam%delmax)) deallocate(fstrparam%delmax)
1232  if(associated(fstrparam%itmax)) deallocate(fstrparam%itmax)
1233  if(associated(fstrparam%eps)) deallocate(fstrparam%eps)
1234  if(associated(fstrparam%global_local_ID)) deallocate(fstrparam%global_local_ID)
1235 
1236  if(associated(fstrparam%contactparam)) deallocate(fstrparam%contactparam)
1237  if(associated(fstrparam%contact_if)) deallocate(fstrparam%contact_if)
1238 
1239  if(associated(fstrparam%ainc)) deallocate(fstrparam%ainc)
1240  if(associated(fstrparam%timepoints)) then
1241  do i=1, size(fstrparam%timepoints)
1242  if(associated(fstrparam%timepoints(i)%points)) &
1243  deallocate(fstrparam%timepoints(i)%points)
1244  end do
1245  deallocate(fstrparam%timepoints)
1246  end if
1247 
1248  if(associated(fstrparam%cnvparam)) deallocate(fstrparam%cnvparam)
1249  end subroutine fstr_param_finalize
1250 
1251  logical function fstr_isboundaryactive( fstrSOLID, nbc, cstep )
1252  type(fstr_solid) :: fstrsolid
1253  integer, intent(in) :: nbc
1254  integer, intent(in) :: cstep
1255  fstr_isboundaryactive = .true.
1256  if( .not. associated(fstrsolid%step_ctrl) ) return
1257  if( cstep>fstrsolid%nstep_tot ) return
1258  fstr_isboundaryactive = isboundaryactive( nbc, fstrsolid%step_ctrl(cstep) )
1259  end function
1260 
1261  logical function fstr_isloadactive( fstrSOLID, nbc, cstep )
1262  type(fstr_solid) :: fstrsolid
1263  integer, intent(in) :: nbc
1264  integer, intent(in) :: cstep
1265  fstr_isloadactive = .true.
1266  if( cstep > 0 ) then
1267  if( .not. associated(fstrsolid%step_ctrl) ) return
1268  if( cstep>fstrsolid%nstep_tot ) return
1269  fstr_isloadactive = isloadactive( nbc, fstrsolid%step_ctrl(cstep) )
1270  else
1271  fstr_isloadactive = isloadactive( nbc, fstrsolid%step_ctrl_restart )
1272  endif
1273  end function
1274 
1275  logical function fstr_iscontactactive( fstrSOLID, nbc, cstep )
1276  type(fstr_solid) :: fstrsolid
1277  integer, intent(in) :: nbc
1278  integer, intent(in) :: cstep
1279  fstr_iscontactactive = .true.
1280  if( .not. associated(fstrsolid%step_ctrl) ) return
1281  if( cstep>fstrsolid%nstep_tot ) return
1282  fstr_iscontactactive = iscontactactive( nbc, fstrsolid%step_ctrl(cstep) )
1283  end function
1284 
1285  logical function fstr_isembedactive( fstrSOLID, nbc, cstep )
1286  type(fstr_solid) :: fstrsolid
1287  integer, intent(in) :: nbc
1288  integer, intent(in) :: cstep
1289  fstr_isembedactive = .true.
1290  if( .not. associated(fstrsolid%step_ctrl) ) return
1291  if( cstep>fstrsolid%nstep_tot ) return
1292  fstr_isembedactive = iscontactactive( nbc, fstrsolid%step_ctrl(cstep) )
1293  end function
1294 
1295  logical function fstr_iselemactivationactive( fstrSOLID, nbc, cstep )
1296  type(fstr_solid) :: fstrsolid
1297  integer, intent(in) :: nbc
1298  integer, intent(in) :: cstep
1300  if( .not. associated(fstrsolid%step_ctrl) ) return
1301  if( cstep>fstrsolid%nstep_tot ) return
1302  fstr_iselemactivationactive = iselemactivationactive( nbc, fstrsolid%step_ctrl(cstep) )
1303  end function
1304 
1306  subroutine get_coordsys( cdsys_ID, hecMESH, fstrSOLID, coords, icel )
1307  integer, intent(in) :: cdsys_ID
1308  integer, intent(in) :: icel
1309  type(hecmwst_local_mesh) :: hecMESH
1310  type(fstr_solid), intent(inout) :: fstrSOLID
1311  real(kind=kreal), intent(out) :: coords(3,3)
1312  integer :: ik, local_nid, iSS
1313 
1314  coords = 0.d0
1315  if( cdsys_id>0 ) then
1316  if( iscoordneeds(g_localcoordsys(cdsys_id)) ) then
1317  coords=g_localcoordsys(cdsys_id)%CoordSys
1318  elseif( g_localcoordsys(cdsys_id)%sys_type == 12 ) then
1319  iss = hecmesh%elem_node_index(icel-1)
1320  !
1321  local_nid=g_localcoordsys(cdsys_id)%node_ID(1)
1322  ik = hecmesh%elem_node_item(iss+local_nid)
1323  coords(1,:)= hecmesh%node(3*ik-2:3*ik)+fstrsolid%unode(3*ik-2:3*ik) &
1324  + fstrsolid%dunode(3*ik-2:3*ik)
1325  local_nid=g_localcoordsys(cdsys_id)%node_ID(2)
1326  ik = hecmesh%elem_node_item(iss+local_nid)
1327  coords(2,:)= hecmesh%node(3*ik-2:3*ik)+fstrsolid%unode(3*ik-2:3*ik) &
1328  + fstrsolid%dunode(3*ik-2:3*ik)
1329  local_nid=g_localcoordsys(cdsys_id)%node_ID(3)
1330  ik = hecmesh%elem_node_item(iss+local_nid)
1331  coords(3,:)= hecmesh%node(3*ik-2:3*ik)+fstrsolid%unode(3*ik-2:3*ik) &
1332  + fstrsolid%dunode(3*ik-2:3*ik)
1333  else
1334  ik=g_localcoordsys(cdsys_id)%node_ID(1)
1335  coords(1,:)= hecmesh%node(3*ik-2:3*ik)+fstrsolid%unode(3*ik-2:3*ik) &
1336  + fstrsolid%dunode(3*ik-2:3*ik)
1337  ik=g_localcoordsys(cdsys_id)%node_ID(2)
1338  coords(2,:)= hecmesh%node(3*ik-2:3*ik)+fstrsolid%unode(3*ik-2:3*ik) &
1339  + fstrsolid%dunode(3*ik-2:3*ik)
1340  ik=g_localcoordsys(cdsys_id)%node_ID(3)
1341  if(ik>0) coords(3,:)= hecmesh%node(3*ik-2:3*ik)+fstrsolid%unode(3*ik-2:3*ik) &
1342  + fstrsolid%dunode(3*ik-2:3*ik)
1343  endif
1344  endif
1345  end subroutine get_coordsys
1346 
1347  subroutine fstr_set_current_config_to_mesh(hecMESH,fstrSOLID,coord)
1348  implicit none
1349  type(hecmwst_local_mesh), intent(inout) :: hecMESH
1350  type (fstr_solid), intent(in) :: fstrSOLID
1351  real(kind=kreal), intent(out) :: coord(:)
1352  integer(kind=kint) :: i
1353  if(hecmesh%n_dof == 4) return
1354  do i = 1, hecmesh%nn_internal*min(hecmesh%n_dof,3)
1355  coord(i) = hecmesh%node(i)
1356  hecmesh%node(i) = coord(i)+fstrsolid%unode(i)+fstrsolid%dunode(i)
1357  enddo
1358  end subroutine fstr_set_current_config_to_mesh
1359 
1360  subroutine fstr_recover_initial_config_to_mesh(hecMESH,fstrSOLID,coord)
1361  implicit none
1362  type(hecmwst_local_mesh), intent(inout) :: hecMESH
1363  type (fstr_solid), intent(in) :: fstrSOLID
1364  real(kind=kreal), intent(in) :: coord(:)
1365  integer(kind=kint) :: i
1366  if(hecmesh%n_dof == 4) return
1367  do i = 1, hecmesh%nn_internal*min(hecmesh%n_dof,3)
1368  hecmesh%node(i) = coord(i)
1369  enddo
1371 
1372  subroutine fstr_solid_phys_zero(phys)
1373  implicit none
1374  type(fstr_solid_physic_val), pointer :: phys
1375  phys%STRAIN = 0.0d0
1376  phys%STRESS = 0.0d0
1377  phys%MISES = 0.0d0
1378  phys%ESTRAIN = 0.0d0
1379  phys%ESTRESS = 0.0d0
1380  phys%EMISES = 0.0d0
1381  phys%EPLSTRAIN = 0.0d0
1382  phys%ENQM = 0.0d0
1383  end subroutine fstr_solid_phys_zero
1384 
1385  subroutine fstr_solid_phys_clear(fstrSOLID)
1386  implicit none
1387  type (fstr_solid) :: fstrSOLID
1388  integer(kind=kint) :: i
1389 
1390  if (associated(fstrsolid%SOLID)) then
1391  call fstr_solid_phys_zero(fstrsolid%SOLID)
1392  end if
1393  if (associated(fstrsolid%SHELL)) then
1394  call fstr_solid_phys_zero(fstrsolid%SHELL)
1395  do i=1,fstrsolid%max_lyr
1396  call fstr_solid_phys_zero(fstrsolid%SHELL%LAYER(i)%PLUS)
1397  call fstr_solid_phys_zero(fstrsolid%SHELL%LAYER(i)%MINUS)
1398  end do
1399  end if
1400  if (associated(fstrsolid%BEAM)) then
1401  call fstr_solid_phys_zero(fstrsolid%BEAM)
1402  end if
1403  end subroutine fstr_solid_phys_clear
1404 
1413  subroutine fstr_get_amplitude(hecMESH, fstrSOLID, cstep, jj_n_amp, time, value)
1414  type ( hecmwST_local_mesh ), intent(in) :: hecMESH
1415  type ( fstr_solid ), intent(in) :: fstrSOLID
1416  integer(kind=kint), intent(in) :: cstep
1417  integer(kind=kint), intent(in) :: jj_n_amp
1418  real(kind=kreal), intent(in) :: time
1419  real(kind=kreal), intent(inout) :: value
1420 
1421  real(kind=kreal) :: t_eval
1422 
1423  if( jj_n_amp <= 0 ) then ! Amplitude not defined
1424  if(myrank == 0) then
1425  write(imsg,*) 'internal error: amplitude table not defined'
1426  endif
1427  call hecmw_abort( hecmw_comm_get_comm() )
1428  endif
1429 
1430  if( hecmesh%amp%amp_type_time(jj_n_amp) == hecmw_amp_typetime_total ) then
1431  t_eval = time
1432  else
1433  t_eval = time - fstrsolid%step_ctrl(cstep)%starttime
1434  endif
1435 
1436  call hecmw_get_amplitude_value(hecmesh%amp, jj_n_amp, t_eval, value)
1437 
1438  end subroutine fstr_get_amplitude
1439 
1440 end module m_fstr
void fstr_sort_index(int *index_data, int *n)
Definition: hecmw.f90:6
This modules defines common structures for fem analysis.
logical function iscoordneeds(coordsys)
if need to fetch global nodes' coordinate
type(tlocalcoordsys), dimension(:), pointer, save g_localcoordsys
This module defined elemact data and function.
This module defines common data and basic structures for analysis.
Definition: m_fstr.F90:15
integer(kind=kint), parameter kel361bbar
Definition: m_fstr.F90:85
integer(kind=kint), parameter iutb
Definition: m_fstr.F90:120
subroutine fstr_solid_phys_zero(phys)
Definition: m_fstr.F90:1373
subroutine hecmat_finalize(hecMAT)
Definition: m_fstr.F90:1106
subroutine fstr_nullify_fstr_couple(C)
Definition: m_fstr.F90:1002
integer(kind=kint), parameter ksmgroppcg
Definition: m_fstr.F90:54
integer(kind=kint), parameter restart_outall
Definition: m_fstr.F90:78
integer(kind=kint), parameter ineu
Definition: m_fstr.F90:124
subroutine fstr_nullify_fstr_freqanalysis_data(f)
Definition: m_fstr.F90:983
integer(kind=kint) myrank
PARALLEL EXECUTION.
Definition: m_fstr.F90:107
integer(kind=kint), parameter kel341sesns
Definition: m_fstr.F90:82
integer(kind=kint), parameter kbcffstr
boundary condition file type (bcf)
Definition: m_fstr.F90:66
subroutine fstr_recover_initial_config_to_mesh(hecMESH, fstrSOLID, coord)
Definition: m_fstr.F90:1361
subroutine fstr_param_init(fstrPARAM, hecMESH)
Initializer of structure fstr_param.
Definition: m_fstr.F90:1163
integer(kind=kint), parameter imsg
Definition: m_fstr.F90:121
integer(kind=kint), parameter kopss_material
Definition: m_fstr.F90:129
integer(kind=kint), parameter kitrfloatingerror
Definition: m_fstr.F90:103
logical function fstr_isembedactive(fstrSOLID, nbc, cstep)
Definition: m_fstr.F90:1286
integer(kind=kint), parameter ksmcg
solver method (sm) !CAUTION : (<=100):indirect, (>100):direct
Definition: m_fstr.F90:47
integer(kind=kint), parameter kstdynamic
Definition: m_fstr.F90:41
integer(kind=kint), parameter kel361up
Definition: m_fstr.F90:88
integer(kind=kint), parameter ksmgmresren
Definition: m_fstr.F90:52
subroutine fstr_nullify_fstr_heat(H)
Definition: m_fstr.F90:895
logical function fstr_isloadactive(fstrSOLID, nbc, cstep)
Definition: m_fstr.F90:1262
integer(kind=kint), parameter kel341fi
section control
Definition: m_fstr.F90:81
integer(kind=kint), parameter idbg
Definition: m_fstr.F90:122
integer(kind=kint), parameter kfloadtype_surf
Definition: m_fstr.F90:94
integer(kind=kint), parameter ksmgmres
Definition: m_fstr.F90:49
integer(kind=kint), parameter kopss_solution
OUTPUT STRESS/STRAIN TYPE.
Definition: m_fstr.F90:128
integer(kind=kint), parameter kel361fi
Definition: m_fstr.F90:84
integer(kind=kint) opsstype
Definition: m_fstr.F90:130
subroutine fstr_nullify_initial_condition(cond)
Definition: m_fstr.F90:704
integer(kind=kint), parameter kmassconsistent
Definition: m_fstr.F90:74
integer(kind=kint), parameter kon
Definition: m_fstr.F90:33
character(len=hecmw_filename_len) restartfilname
Definition: m_fstr.F90:115
subroutine fstr_get_amplitude(hecMESH, fstrSOLID, cstep, jj_n_amp, time, value)
Evaluate the amplitude-scaled target value a(t) for static analysis.
Definition: m_fstr.F90:1414
integer(kind=kint), parameter kfloadcase_im
Definition: m_fstr.F90:97
subroutine fstr_mat_init(hecMAT)
Initializer of structure hecmwST_matrix.
Definition: m_fstr.F90:1014
subroutine fstr_nullify_fstr_eigen(E)
Definition: m_fstr.F90:990
integer(kind=kint) nprocs
Definition: m_fstr.F90:108
integer(kind=kint), parameter ifvs
Definition: m_fstr.F90:123
logical function fstr_iscontactactive(fstrSOLID, nbc, cstep)
Definition: m_fstr.F90:1276
logical function fstr_iselemactivationactive(fstrSOLID, nbc, cstep)
Definition: m_fstr.F90:1296
integer(kind=kint), parameter kitrconverged
Definition: m_fstr.F90:101
integer(kind=kint), parameter kyes
CONSTANTS general.
Definition: m_fstr.F90:31
subroutine get_coordsys(cdsys_ID, hecMESH, fstrSOLID, coords, icel)
This subroutine fetch coords defined by local coordinate system.
Definition: m_fstr.F90:1307
integer(kind=kint), parameter kbcfnastran
Definition: m_fstr.F90:67
integer(kind=kint), parameter kel361ic
Definition: m_fstr.F90:86
subroutine fstr_abort(code)
Terminate the analysis with a classified exit status. MPI_ABORT does not perform the Fortran I/O fina...
Definition: m_fstr.F90:692
subroutine fstr_param_finalize(fstrPARAM)
Definition: m_fstr.F90:1225
integer(kind=kint), parameter kcaslagrange
contact analysis algorithm
Definition: m_fstr.F90:62
integer(kind=kint), parameter ilog
FILE HANDLER.
Definition: m_fstr.F90:118
integer(kind=kint), parameter ksmgpbicg
Definition: m_fstr.F90:50
integer(kind=kint), parameter knsmnewton
nonlinear solver method (nsm)
Definition: m_fstr.F90:58
integer(kind=kint), parameter kel611timoshenko
Definition: m_fstr.F90:91
integer(kind=kint), parameter kststatic
Definition: m_fstr.F90:38
subroutine fstr_set_current_config_to_mesh(hecMESH, fstrSOLID, coord)
Definition: m_fstr.F90:1348
integer(kind=kint), parameter kbcinitial
Definition: m_fstr.F90:69
integer(kind=kint), parameter kfloadtype_node
Definition: m_fstr.F90:93
integer(kind=kint), parameter kstprecheck
solution type (st)
Definition: m_fstr.F90:37
integer(kind=kint), parameter knsmquasinewton
Definition: m_fstr.F90:59
integer(kind=kint), parameter kcaalagrange
Definition: m_fstr.F90:63
subroutine hecmat_init(hecMAT)
Definition: m_fstr.F90:1057
integer(kind=kint), parameter kststaticeigen
Definition: m_fstr.F90:43
integer(kind=kint), parameter kstheat
Definition: m_fstr.F90:40
integer(kind=kint), parameter ista
Definition: m_fstr.F90:119
integer(kind=kint), parameter ksmpipecg
Definition: m_fstr.F90:53
subroutine fstr_nullify_fstr_freqanalysis(f)
Definition: m_fstr.F90:964
integer(kind=kint), parameter ksmdirect
Definition: m_fstr.F90:55
integer(kind=kint), parameter koff
Definition: m_fstr.F90:34
integer(kind=kint), parameter kstnzprof
Definition: m_fstr.F90:44
integer(kind=kint), parameter kbctransit
Definition: m_fstr.F90:70
subroutine fstr_solid_phys_clear(fstrSOLID)
Definition: m_fstr.F90:1386
integer(kind=kint), parameter ksmbicgstab
Definition: m_fstr.F90:48
character(len=hecmw_filename_len) cntfilname
FILE NAME.
Definition: m_fstr.F90:114
subroutine fstr_nullify_solid_physic_val(P)
Definition: m_fstr.F90:730
integer(kind=kint), parameter kel361fbar
Definition: m_fstr.F90:87
logical function fstr_isboundaryactive(fstrSOLID, nbc, cstep)
Definition: m_fstr.F90:1252
subroutine fstr_nullify_fstr_param(P)
NULL POINTER SETTING TO AVOID RUNTIME ERROR.
Definition: m_fstr.F90:712
integer(kind=kint), parameter ksteigen
Definition: m_fstr.F90:39
type(tinitialcondition), dimension(:), pointer, save g_initialcnd
Definition: m_fstr.F90:139
integer(kind=kint), parameter kmasslumped
mass matrix type
Definition: m_fstr.F90:73
integer(kind=kint), parameter kitrcontinue
iteration control
Definition: m_fstr.F90:100
integer(kind=kint), parameter restart_outlast
restart type
Definition: m_fstr.F90:77
integer(kind=kint), parameter iresout
Definition: m_fstr.F90:125
integer(kind=kint), parameter ksmgmresr
Definition: m_fstr.F90:51
integer(kind=kint), parameter kel611euler
Definition: m_fstr.F90:90
subroutine fstr_nullify_fstr_solid(S)
Definition: m_fstr.F90:758
subroutine fstr_nullify_fstr_dynamic(DY)
Definition: m_fstr.F90:951
integer(kind=kint), parameter kno
Definition: m_fstr.F90:32
integer(kind=kint), parameter kitrdiverged
Definition: m_fstr.F90:102
logical paracontactflag
PARALLEL CONTACT FLAG.
Definition: m_fstr.F90:111
integer(kind=kint), parameter kfloadcase_re
Definition: m_fstr.F90:96
subroutine fstr_initial_condition_finalize(cond)
Definition: m_fstr.F90:1218
This module manages step information.
Definition: m_out.f90:6
This module manages step information.
Definition: m_step.f90:6
logical function iscontactactive(bnd, stepinfo)
Is contact condition in this step active.
Definition: m_step.f90:174
logical function iselemactivationactive(bnd, stepinfo)
Is elemact condition in this step active.
Definition: m_step.f90:183
logical function isboundaryactive(bnd, stepinfo)
Is boundary condition in this step active.
Definition: m_step.f90:156
logical function isloadactive(bnd, stepinfo)
Is external load in this step active.
Definition: m_step.f90:165
This module manages timepoint information.
Definition: m_timepoint.f90:6
This module manages the data structure for contact calculation.
This modules defines a structure to record history dependent parameter in static analysis.
Definition: mechgauss.f90:6
Data for coupling analysis.
Definition: m_fstr.F90:642
Data for DYNAMIC ANSLYSIS (fstrDYNAMIC)
Definition: m_fstr.F90:525
Package of data used by Lanczos eigenvalue solver.
Definition: m_fstr.F90:623
Data for HEAT ANSLYSIS (fstrHEAT)
Definition: m_fstr.F90:440
FSTR INNER CONTROL PARAMETERS (fstrPARAM)
Definition: m_fstr.F90:142
Data for STATIC ANSLYSIS (fstrSOLID)
Definition: m_fstr.F90:203
Data for section control.
Definition: m_fstr.F90:672
-1:not relation, >1:index of coupled_node
Definition: m_fstr.F90:659
output control such as output filename, output frequency etc.
Definition: m_out.f90:29
Step control such as active boundary condition, convergent condition etc.
Definition: m_step.f90:35
Convergence criteria of !CONVERG_PARAM, indexed like step_infocnv_check.
Definition: m_step.f90:79
Time points storage for output etc.
Definition: m_timepoint.f90:14
Structure to includes all info needed by contact calculation.
All data should be recorded in every elements.
Definition: mechgauss.f90:34