FrontISTR  5.2.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 mmechgauss
22  use mcontactdef
23 
24  implicit none
25 
26  public
27 
30  integer(kind=kint), parameter :: kyes = 1
31  integer(kind=kint), parameter :: kno = 0
32  integer(kind=kint), parameter :: kon = 1
33  integer(kind=kint), parameter :: koff = 0
34 
36  integer(kind=kint), parameter :: kstprecheck = 0
37  integer(kind=kint), parameter :: kststatic = 1
38  integer(kind=kint), parameter :: ksteigen = 2
39  integer(kind=kint), parameter :: kstheat = 3
40  integer(kind=kint), parameter :: kstdynamic = 4
41  !integer(kind=kint), parameter :: kstNLSTATIC = 5
42  integer(kind=kint), parameter :: kststaticeigen = 6
43  integer(kind=kint), parameter :: kstnzprof = 7
44 
46  integer(kind=kint), parameter :: ksmcg = 1
47  integer(kind=kint), parameter :: ksmbicgstab = 2
48  integer(kind=kint), parameter :: ksmgmres = 3
49  integer(kind=kint), parameter :: ksmgpbicg = 4
50  integer(kind=kint), parameter :: ksmdirect = 101
51 
53  integer(kind=kint), parameter :: kcaslagrange = 1
54  integer(kind=kint), parameter :: kcaalagrange = 2
55 
57  integer(kind=kint), parameter :: kbcffstr = 0 ! BC described in fstr control file (default)
58  integer(kind=kint), parameter :: kbcfnastran = 1 ! nastran file
59 
60  integer(kind=kint), parameter :: kbcinitial = 1
61  integer(kind=kint), parameter :: kbctransit = 2
62 
64  integer(kind=kint), parameter :: restart_outlast = 1
65  integer(kind=kint), parameter :: restart_outall = 2
66 
68  integer(kind=kint), parameter :: kel361fi = 1
69  integer(kind=kint), parameter :: kel361bbar = 2
70  integer(kind=kint), parameter :: kel361ic = 3
71  integer(kind=kint), parameter :: kel361fbar = 4
72 
73  integer(kind=kint), parameter :: kfloadtype_node = 1
74  integer(kind=kint), parameter :: kfloadtype_surf = 2
75 
76  integer(kind=kint), parameter :: kfloadcase_re = 1
77  integer(kind=kint), parameter :: kfloadcase_im = 2
78 
80  integer(kind = kint) :: myrank
81  integer(kind = kint) :: nprocs
82 
84  logical :: paracontactflag = .false.
85 
87  character(len=HECMW_FILENAME_LEN) :: cntfilname
88  character(len=HECMW_FILENAME_LEN) :: restartfilname
89 
91  integer(kind=kint), parameter :: ilog = 16 ! log
92  integer(kind=kint), parameter :: ista = 17 ! status
93  integer(kind=kint), parameter :: iutb = 18 ! utable
94  integer(kind=kint), parameter :: imsg = 51 ! message (myrank == 0 only)
95  integer(kind=kint), parameter :: idbg = 52 ! debug
96  integer(kind=kint), parameter :: ifvs = 53 ! visual.ini file
97  integer(kind=kint), parameter :: ineu = 54 ! neutral file (heat)
98  integer(kind=kint), parameter :: iresout = 100 ! ~110, keeping for result output file
99 
101  integer(kind=kint) :: sviarray(100)
102  real(kind=kreal) :: svrarray(100)
103 
105  integer(kind=kint), pointer :: iecho
106  integer(kind=kint), pointer :: iresult
107  integer(kind=kint), pointer :: ivisual
108  integer(kind=kint), pointer :: ineutral ! flag for femap neutral file
109  integer(kind=kint), pointer :: irres ! flag for restart, read
110  integer(kind=kint), pointer :: iwres ! flag for restart, write
111  integer(kind=kint), pointer :: nrres ! position of restart read
112  integer(kind=kint), pointer :: nprint ! interval of write
113 
114  integer(kind=kint), parameter :: kopss_solution = 1
115  integer(kind=kint), parameter :: kopss_material = 2
116  integer(kind=kint) :: opsstype = kopss_solution ! output stress/strain type
117 
118 
120  real(kind=kreal), pointer :: ref_temp
121 
123  real(kind=kreal) :: dt ! /=fstr_param%dtime
124  real(kind=kreal) :: etime ! /=fstr_param%etime
125  integer(kind=kint) :: itmax
126  real(kind=kreal) :: eps ! /=fstr_param%eps
127 
129  character(len=HECMW_FILENAME_LEN) :: cond_name
130  integer :: node_elem
131  integer :: grpid
132  integer, pointer :: intval(:) => null()
133  real(kind=kreal), pointer :: realval(:) => null()
134  end type
135  type( tinitialcondition ), pointer, save :: g_initialcnd(:) => null()
136 
139  integer(kind=kint) :: solution_type
140  integer(kind=kint) :: solver_method
141  logical :: nlgeom
142 
144  integer(kind=kint) :: analysis_n
145  real(kind=kreal), pointer :: dtime(:)
146  real(kind=kreal), pointer :: etime(:)
147  real(kind=kreal), pointer :: dtmin(:)
148  real(kind=kreal), pointer :: delmax(:)
149  integer(kind=kint), pointer:: itmax(:)
150  real(kind=kreal), pointer :: eps(:)
151  real(kind=kreal) :: ref_temp
152  integer(kind=kint) :: timepoint_id
153 
155  integer(kind=kint) :: fg_echo
156  integer(kind=kint) :: fg_result
157  integer(kind=kint) :: fg_visual
158 
160  integer(kind=kint) :: fg_neutral
161  integer(kind=kint) :: fg_irres
162  integer(kind=kint) :: fg_iwres
163  integer(kind=kint) :: nrres
164  integer(kind=kint) :: nprint
165 
167  integer(kind=kint) :: n_node
168  integer(kind=kint) :: nn_internal
169  integer(kind=kint), pointer :: global_local_id(:,:)
170 
172  integer( kind=kint ) :: fg_couple
173  integer( kind=kint ) :: fg_couple_type
174  integer( kind=kint ) :: fg_couple_first
175  integer( kind=kint ) :: fg_couple_window
176 
178  integer( kind=kint ) :: restart_out_type
179  integer( kind=kint ) :: restart_version
180 
182  integer( kind=kint ) :: contact_algo
183 
185  type(tparamautoinc), pointer :: ainc(:)
186  type(time_points), pointer :: timepoints(:)
187  end type fstr_param
188 
190  type( fstr_param ),target :: fstrpr
191 
194  real(kind=kreal), pointer :: stress(:) => null()
195  real(kind=kreal), pointer :: strain(:) => null()
196  real(kind=kreal), pointer :: mises(:) => null()
197 
198  real(kind=kreal), pointer :: pstress(:) => null()
199  real(kind=kreal), pointer :: pstrain(:) => null()
200  real(kind=kreal), pointer :: pstress_vect(:,:) => null()
201  real(kind=kreal), pointer :: pstrain_vect(:,:) => null()
202 
203  real(kind=kreal), pointer :: estress(:) => null()
204  real(kind=kreal), pointer :: estrain(:) => null()
205  real(kind=kreal), pointer :: emises(:) => null()
206 
207  real(kind=kreal), pointer :: epstress(:) => null()
208  real(kind=kreal), pointer :: epstrain(:) => null()
209  real(kind=kreal), pointer :: epstress_vect(:,:) => null()
210  real(kind=kreal), pointer :: epstrain_vect(:,:) => null()
211  real(kind=kreal), pointer :: enqm(:) => null()
212 
213 
214  type(fstr_solid_physic_val), pointer :: layer(:) => null()
215  type(fstr_solid_physic_val), pointer :: plus => null()
216  type(fstr_solid_physic_val), pointer :: minus => null()
217  end type fstr_solid_physic_val
218 
220  integer(kind=kint) :: file_type ! kbcfFSTR or kbcfNASTRAN
221  integer(kind=kint) :: statictype ! 1:Total, 2:Updated, 3:Infinitesimal
222  integer(kind=kint) :: nstep_tot
223 
224  type(step_info), pointer :: step_ctrl(:) =>null()
225  type(t_output_ctrl), pointer :: output_ctrl(:)=>null()
226 
228  integer(kind=kint) :: boundary_ngrp_tot
229  integer(kind=kint), pointer :: boundary_ngrp_grpid (:) =>null()
230  integer(kind=kint), pointer :: boundary_ngrp_id (:) =>null()
231  integer(kind=kint), pointer :: boundary_ngrp_type (:) =>null()
232  integer(kind=kint), pointer :: boundary_ngrp_amp (:) =>null()
233  real(kind=kreal), pointer :: boundary_ngrp_val(:) =>null()
234  integer(kind=kint) :: boundary_ngrp_rot
235  integer(kind=kint), pointer :: boundary_ngrp_rotid (:) =>null()
236  integer(kind=kint), pointer :: boundary_ngrp_centerid (:) =>null()
237 
239  integer(kind=kint) :: velocity_type
240  integer(kind=kint) :: velocity_ngrp_tot
241  integer(kind=kint), pointer :: velocity_ngrp_grpid (:) =>null()
242  integer(kind=kint), pointer :: velocity_ngrp_id (:) =>null()
243  integer(kind=kint), pointer :: velocity_ngrp_type (:) =>null()
244  integer(kind=kint), pointer :: velocity_ngrp_amp (:) =>null()
245  real(kind=kreal), pointer :: velocity_ngrp_val(:) =>null()
246 
248  integer(kind=kint) :: acceleration_type
249  integer(kind=kint) :: acceleration_ngrp_tot
250  integer(kind=kint), pointer :: acceleration_ngrp_grpid (:) =>null()
251  integer(kind=kint), pointer :: acceleration_ngrp_id (:) =>null()
252  integer(kind=kint), pointer :: acceleration_ngrp_type (:) =>null()
253  integer(kind=kint), pointer :: acceleration_ngrp_amp (:) =>null()
254  real(kind=kreal), pointer :: acceleration_ngrp_val(:) =>null()
255 
257  integer(kind=kint) :: cload_ngrp_tot
258  integer(kind=kint), pointer :: cload_ngrp_grpid (:) =>null()
259  integer(kind=kint), pointer :: cload_ngrp_id (:)
260  integer(kind=kint), pointer :: cload_ngrp_dof (:)
261  integer(kind=kint), pointer :: cload_ngrp_amp (:)
262  real(kind=kreal), pointer :: cload_ngrp_val(:)
263  integer(kind=kint) :: cload_ngrp_rot
264  integer(kind=kint), pointer :: cload_ngrp_rotid (:) =>null()
265  integer(kind=kint), pointer :: cload_ngrp_centerid (:) =>null()
266 
268  integer(kind=kint) :: dload_ngrp_tot
269  integer(kind=kint) :: dload_follow
270  integer(kind=kint), pointer :: dload_ngrp_grpid (:) =>null()
271  integer(kind=kint), pointer :: dload_ngrp_id (:)
272  integer(kind=kint), pointer :: dload_ngrp_lid (:)
273  integer(kind=kint), pointer :: dload_ngrp_amp (:)
274  real(kind=kreal), pointer :: dload_ngrp_params(:,:)
275 
277  integer(kind=kint) :: temp_ngrp_tot
278  integer(kind=kint) :: temp_irres
279  integer(kind=kint) :: temp_tstep
280  integer(kind=kint) :: temp_interval
281  integer(kind=kint) :: temp_rtype ! type of reading result; 1: step-based; 2: time-based
282  real(kind=kreal) :: temp_factor
283  integer(kind=kint), pointer :: temp_ngrp_grpid (:) =>null()
284  integer(kind=kint), pointer :: temp_ngrp_id (:)
285  real(kind=kreal), pointer :: temp_ngrp_val(:)
286 
288  integer(kind=kint) :: spring_ngrp_tot
289  integer(kind=kint), pointer :: spring_ngrp_grpid (:) =>null()
290  integer(kind=kint), pointer :: spring_ngrp_id (:)
291  integer(kind=kint), pointer :: spring_ngrp_dof (:)
292  integer(kind=kint), pointer :: spring_ngrp_amp (:)
293  real(kind=kreal), pointer :: spring_ngrp_val(:)
294 
296  integer( kind=kint ) :: couple_ngrp_tot
297  integer( kind=kint ),pointer :: couple_ngrp_id(:)
298 
300  integer(kind=kint) :: maxn_gauss
301 
302  real(kind=kreal), pointer :: stress(:)
303  real(kind=kreal), pointer :: strain(:)
304  real(kind=kreal), pointer :: mises(:)
305 
306  real(kind=kreal), pointer :: pstress(:)
307  real(kind=kreal), pointer :: pstrain(:)
308  real(kind=kreal), pointer :: pstress_vect(:,:)
309  real(kind=kreal), pointer :: pstrain_vect(:,:)
310 
311  real(kind=kreal), pointer :: estress(:)
312  real(kind=kreal), pointer :: estrain(:)
313  real(kind=kreal), pointer :: emises(:)
314 
315  real(kind=kreal), pointer :: epstress(:)
316  real(kind=kreal), pointer :: epstrain(:)
317  real(kind=kreal), pointer :: epstress_vect(:,:)
318  real(kind=kreal), pointer :: epstrain_vect(:,:)
319 
320  real(kind=kreal), pointer :: tnstrain(:)
321  real(kind=kreal), pointer :: testrain(:)
322 
323  real(kind=kreal), pointer :: yield_ratio(:)
324 
325  real(kind=kreal), pointer :: enqm(:)
326  real(kind=kreal), pointer :: reaction(:)
327 
328  real(kind=kreal), pointer :: cont_nforce(:)
329  real(kind=kreal), pointer :: cont_fric(:)
330  real(kind=kreal), pointer :: cont_relvel(:)
331  real(kind=kreal), pointer :: cont_state(:)
332  integer(kind=kint), pointer :: cont_sgrp_id(:)
333  real(kind=kreal), pointer :: cont_area(:)
334  real(kind=kreal), pointer :: cont_ntrac(:)
335  real(kind=kreal), pointer :: cont_ftrac(:)
336 
337  type(fstr_solid_physic_val), pointer :: solid=>null()
338  type(fstr_solid_physic_val), pointer :: shell=>null()
339  type(fstr_solid_physic_val), pointer :: beam =>null()
340 
342  integer(kind=kint) :: restart_nout
345  integer(kind=kint) :: restart_nin
346  type(step_info) :: step_ctrl_restart
347 
348  integer(kind=kint) :: max_lyr
349  integer(kind=kint) :: is_33shell
350  integer(kind=kint) :: is_33beam
351  integer(kind=kint) :: is_heat
352  integer(kind=kint), pointer :: is_rot(:) => null()
353  integer(kind=kint) :: elemopt361
354  real(kind=kreal) :: factor(2)
357  integer(kind=kint) :: nrstat_i(10)
358  real(kind=kreal) :: nrstat_r(10)
359  integer(kind=kint) :: autoinc_stat
360  integer(kind=kint) :: cutback_stat
361 
362  real(kind=kreal), pointer :: gl(:)
363  real(kind=kreal), pointer :: eforce(:)
364  real(kind=kreal), pointer :: qforce(:)
365  real(kind=kreal), pointer :: unode(:) => null()
366  real(kind=kreal), pointer :: dunode(:) => null()
367  real(kind=kreal), pointer :: ddunode(:) => null()
368  real(kind=kreal), pointer :: temperature(:)=> null()
369  real(kind=kreal), pointer :: temp_bak(:) => null()
370  real(kind=kreal), pointer :: last_temp(:) => null()
371 
372  type( telement ), pointer :: elements(:) =>null()
373  type( tmaterial ),pointer :: materials(:) =>null()
374  type( tcontact ), pointer :: contacts(:) =>null()
375  integer :: n_fix_mpc
376  real(kind=kreal), pointer :: mpc_const(:) =>null()
377  type(tsection), pointer :: sections(:) =>null()
378 
379  ! for cutback
380  ! ####################### Notice #######################
381  ! # If you add new variables to store analysis status, #
382  ! # - backup variables with postfix "_bkup" here #
383  ! # - backup process to module m_fstr_Cutback #
384  ! # must be added if necessary. #
385  ! ######################################################
386  real(kind=kreal), pointer :: unode_bkup(:) => null()
387  real(kind=kreal), pointer :: qforce_bkup(:) => null()
388  real(kind=kreal), pointer :: last_temp_bkup(:) => null()
389  type( telement ), pointer :: elements_bkup(:) =>null()
390  type( tcontact ), pointer :: contacts_bkup(:) =>null()
391  end type fstr_solid
392 
396  integer(kind=kint) :: is_steady
397  real(kind=kreal) :: beta
398  logical :: is_iter_max_limit
399 
401  integer(kind=kint) :: steptot
402  integer(kind=kint) :: restart_nout
403  real(kind=kreal), pointer :: step_dltime(:), step_eetime(:)
404  real(kind=kreal), pointer :: step_delmin(:), step_delmax(:)
405  integer(kind=kint) :: timepoint_id
406 
408  integer(kind=kint) :: materialtot
409  integer(kind=kint), pointer :: rhotab(:), cptab(:), condtab(:)
410  real(kind=kreal), pointer :: rho(:,:), rhotemp(:,:)
411  real(kind=kreal), pointer :: cp(:,:), cptemp(:,:)
412  real(kind=kreal), pointer :: cond(:,:),condtemp(:,:)
413 
414  real(kind=kreal), pointer :: rhofunca(:,:), rhofuncb(:,:)
415  real(kind=kreal), pointer :: cpfunca(:,:), cpfuncb(:,:)
416  real(kind=kreal), pointer :: condfunca(:,:),condfuncb(:,:)
417 
419  integer(kind=kint) :: amplitudetot
420  integer(kind=kint), pointer :: ampltab(:)
421  real(kind=kreal), pointer :: ampl(:,:), ampltime(:,:)
422  real(kind=kreal), pointer :: amplfunca(:,:), amplfuncb(:,:)
423 
425  real(kind=kreal), pointer :: temp0(:)
426  real(kind=kreal), pointer :: tempc(:)
427  real(kind=kreal), pointer :: temp(:)
428 
430  integer(kind=kint) :: t_fix_tot
431  integer(kind=kint), pointer :: t_fix_node(:)
432  integer(kind=kint), pointer :: t_fix_ampl(:)
433  real(kind=kreal), pointer :: t_fix_val(:)
434 
436  integer(kind=kint) :: q_nod_tot
437  integer(kind=kint), pointer :: q_nod_node(:)
438  integer(kind=kint), pointer :: q_nod_ampl(:)
439  real(kind=kreal), pointer :: q_nod_val(:)
440 
442  integer(kind=kint) :: q_vol_tot
443  integer(kind=kint), pointer :: q_vol_elem(:)
444  integer(kind=kint), pointer :: q_vol_ampl(:)
445  real(kind=kreal), pointer :: q_vol_val(:)
446 
448  integer(kind=kint) :: q_suf_tot
449  integer(kind=kint), pointer :: q_suf_elem(:)
450  integer(kind=kint), pointer :: q_suf_ampl(:)
451  integer(kind=kint), pointer :: q_suf_surf(:)
452  real(kind=kreal), pointer :: q_suf_val(:)
453 
455  integer(kind=kint) :: r_suf_tot
456  integer(kind=kint), pointer :: r_suf_elem(:)
457  integer(kind=kint), pointer :: r_suf_ampl(:,:)
458  integer(kind=kint), pointer :: r_suf_surf(:)
459  real(kind=kreal), pointer :: r_suf_val(:,:)
460 
462  integer(kind=kint) :: h_suf_tot
463  integer(kind=kint), pointer :: h_suf_elem(:)
464  integer(kind=kint), pointer :: h_suf_ampl(:,:)
465  integer(kind=kint), pointer :: h_suf_surf(:)
466  real(kind=kreal), pointer :: h_suf_val(:,:)
467 
468  integer(kind=kint) :: wl_tot
469  type(tweldline), pointer :: weldline(:) => null()
470  end type fstr_heat
471 
475  integer(kind=kint) :: idx_eqa ! implicit or explicit
476  integer(kind=kint) :: idx_resp ! time history or steady-state harmonic response analysis
477 
479  integer(kind=kint) :: n_step ! total step number of analysis
480  real(kind=kreal) :: t_start ! start time of analysis
481  real(kind=kreal) :: t_curr ! current time of analysis
482  real(kind=kreal) :: t_end ! end time of analysis
483  real(kind=kreal) :: t_delta ! time increment
484  integer(kind=kint) :: restart_nout ! output interval of restart file
485  ! (if .gt.0) restart file write
486  ! (if .lt.0) restart file read and write
487  integer(kind=kint) :: restart_nin !input number of restart file
488 
490  real(kind=kreal) :: ganma ! Newmark-beta parameter ganma
491  real(kind=kreal) :: beta ! Newmark-beta parameter beta
492 
494  integer(kind=kint) :: idx_mas ! mass matrix type
495 
497  integer(kind=kint) :: idx_dmp ! damping type
498  real(kind=kreal) :: ray_m ! Rayleigh damping parameter Rm
499  real(kind=kreal) :: ray_k ! Rayleigh damping parameter Rk
500 
502  logical :: varinitialize ! initialization flag
503 
505  integer(kind=kint) :: nout ! output interval of result
506  integer(kind=kint) :: ngrp_monit ! node of monitoring result
507  integer(kind=kint) :: nout_monit ! output interval of result monitoring
508  integer(kind=kint) :: i_step ! step number
509  integer(kind=kint) :: iout_list(6) ! 0:not output 1:output
510  ! iout_list(1): displacement
511  ! iout_list(2): velocity
512  ! iout_list(3): acceleration
513  ! iout_list(4): reaction force
514  ! iout_list(5): strain
515  ! iout_list(6): stress
516 
518  real(kind=kreal), pointer :: disp(:,:)
519  real(kind=kreal), pointer :: vel(:,:)
520  real(kind=kreal), pointer :: acc(:,:)
521 
522  real(kind=kreal) :: kineticenergy
523  real(kind=kreal) :: strainenergy
524  real(kind=kreal) :: totalenergy
525 
527  real(kind=kreal), pointer :: vec1(:)
528  real(kind=kreal), pointer :: vec2(:)
529  real(kind=kreal), pointer :: vec3(:)
530 
531  integer(kind=kint) :: dynamic_iw4 = 204
532  integer(kind=kint) :: dynamic_iw5 = 205
533  integer(kind=kint) :: dynamic_iw6 = 206
534  integer(kind=kint) :: dynamic_iw7 = 207
535  integer(kind=kint) :: dynamic_iw8 = 208
536  integer(kind=kint) :: dynamic_iw9 = 209
537  integer(kind=kint) :: dynamic_iw10 = 210
538  end type fstr_dynamic
539 
541  integer(kind=kint) :: fload_ngrp_tot
542  integer(kind=kint), pointer :: fload_ngrp_grpid(:) => null()
543  integer(kind=kint), pointer :: fload_ngrp_id(:) => null()
544  integer(kind=kint), pointer :: fload_ngrp_type(:) => null()
545  integer(kind=kint), pointer :: fload_ngrp_dof(:) => null()
546  real(kind=kreal), pointer :: fload_ngrp_valre(:) => null()
547  real(kind=kreal), pointer :: fload_ngrp_valim(:) => null()
548  character(len=HECMW_FILENAME_LEN) :: eigenlog_filename
549  integer(kind=kint) :: start_mode
550  integer(kind=kint) :: end_mode
551  end type fstr_freqanalysis
552 
554  integer(kind=kint) :: nummode
555  integer(kind=kint) :: numnodedof
556  real(kind=kreal), pointer :: eigomega(:) => null()
557  real(kind=kreal), pointer :: eigvector(:,:) => null()
558  real(kind=kreal) :: rayalpha, raybeta
559  end type fstr_freqanalysis_data
560 
564  integer(kind=kint) :: nget ! Solved eigen value number (default:5)
565  integer(kind=kint) :: maxiter ! Max. Lcz iterations (default:60)
566  integer(kind=kint) :: iter ! Max. Lcz iterations (default:60)
567  real (kind=kreal) :: sigma ! 0.0
568  real (kind=kreal) :: tolerance ! Lcz tolerance (default:1.0e-8)
569  real (kind=kreal) :: totalmass
570  real (kind=kreal), pointer :: eigval(:)
571  real (kind=kreal), pointer :: eigvec(:,:)
572  real (kind=kreal), pointer :: filter(:)
573  real (kind=kreal), pointer :: mass(:)
574  real (kind=kreal), pointer :: effmass(:)
575  real (kind=kreal), pointer :: partfactor(:)
576  logical :: is_free = .false.
577  end type fstr_eigen
578 
582  integer( kind=kint ) :: dof ! == 3
583  integer( kind=kint ) :: ndof ! total dof (coupled_node_n*dof)
584  integer( kind=kint ) :: coupled_node_n
586  integer, pointer :: coupled_node(:) ! local node id sent from revocap
587  real( kind=8 ),pointer :: trac(:) ! input (x,y,z,x,y,z ... )
588  real( kind=8 ),pointer :: disp(:) ! output (x,y,z,x,y,z ... )
589  real( kind=8 ),pointer :: velo(:) ! output (x,y,z,x,y,z ... )
590  real( kind=8 ),pointer :: accel(:) ! output (x,y,z,x,y,z ... )
592  integer( kind=kint ),pointer :: index(:) ! size:total node num.
594  end type fstr_couple
595 
598  integer(kind=kint) :: egrpid
599  real( kind=kreal ) :: i
600  real( kind=kreal ) :: u
601  real( kind=kreal ) :: coe
602  real( kind=kreal ) :: v
603  integer(kind=kint) :: xyz
604  real(kind=kreal) :: n1, n2
605  real(kind=kreal) :: distol
606  real(kind=kreal) :: tstart
607  end type tweldline
608 
610  type tsection
611  !integer :: mat_ID
612  !integer :: iset
613  !integer :: orien_ID
614  !real(kind=kreal) :: thickness
615  !integer :: elemopt341
616  !integer :: elemopt342
617  !integer :: elemopt351
618  !integer :: elemopt352
619  integer :: elemopt361
620  !integer :: elemopt362
621  end type tsection
622 
623 contains
624 
626  subroutine fstr_nullify_fstr_param( P )
627  implicit none
628  type( fstr_param ) :: P
629 
630  nullify( p%dtime )
631  nullify( p%etime )
632  nullify( p%dtmin )
633  nullify( p%delmax )
634  nullify( p%itmax )
635  nullify( p%eps )
636  nullify( p%global_local_ID)
637  nullify( p%timepoints )
638  end subroutine fstr_nullify_fstr_param
639 
640  subroutine fstr_nullify_fstr_solid( S )
641  implicit none
642  type( fstr_solid ) :: S
643 
644  nullify( s%BOUNDARY_ngrp_ID )
645  nullify( s%BOUNDARY_ngrp_type )
646  nullify( s%BOUNDARY_ngrp_amp )
647  nullify( s%BOUNDARY_ngrp_val)
648  nullify( s%BOUNDARY_ngrp_rotID )
649  nullify( s%BOUNDARY_ngrp_centerID )
650  nullify( s%CLOAD_ngrp_ID )
651  nullify( s%CLOAD_ngrp_DOF )
652  nullify( s%CLOAD_ngrp_amp )
653  nullify( s%CLOAD_ngrp_rotID )
654  nullify( s%CLOAD_ngrp_centerID )
655  nullify( s%CLOAD_ngrp_val )
656  nullify( s%DLOAD_ngrp_ID )
657  nullify( s%DLOAD_ngrp_LID )
658  nullify( s%DLOAD_ngrp_amp )
659  nullify( s%DLOAD_ngrp_params )
660  nullify( s%TEMP_ngrp_ID )
661  nullify( s%TEMP_ngrp_val )
662  nullify( s%SPRING_ngrp_ID )
663  nullify( s%SPRING_ngrp_DOF )
664  nullify( s%SPRING_ngrp_amp )
665  nullify( s%SPRING_ngrp_val )
666  nullify( s%STRESS )
667  nullify( s%STRAIN )
668  nullify( s%MISES )
669  nullify( s%PSTRESS )
670  nullify( s%PSTRAIN )
671  nullify( s%PSTRESS_VECT )
672  nullify( s%PSTRAIN_VECT )
673  nullify( s%REACTION )
674  nullify( s%ESTRESS )
675  nullify( s%ESTRAIN )
676  nullify( s%EMISES )
677  nullify( s%EPSTRESS )
678  nullify( s%EPSTRAIN )
679  nullify( s%EPSTRESS_VECT )
680  nullify( s%EPSTRAIN_VECT )
681  nullify( s%ENQM )
682  nullify( s%GL )
683  nullify( s%QFORCE )
684  nullify( s%VELOCITY_ngrp_ID )
685  nullify( s%VELOCITY_ngrp_type )
686  nullify( s%VELOCITY_ngrp_amp )
687  nullify( s%VELOCITY_ngrp_val )
688  nullify( s%ACCELERATION_ngrp_ID )
689  nullify( s%ACCELERATION_ngrp_type )
690  nullify( s%ACCELERATION_ngrp_amp )
691  nullify( s%ACCELERATION_ngrp_val )
692  nullify( s%COUPLE_ngrp_ID )
693  end subroutine fstr_nullify_fstr_solid
694 
695  subroutine fstr_nullify_fstr_heat( H )
696  implicit none
697  type( fstr_heat ) :: H
698 
699  nullify( h%STEP_DLTIME )
700  nullify( h%STEP_EETIME )
701  nullify( h%STEP_DELMIN )
702  nullify( h%STEP_DELMAX )
703  nullify( h%RHO )
704  nullify( h%RHOtemp )
705  nullify( h%CP )
706  nullify( h%CPtemp )
707  nullify( h%COND )
708  nullify( h%CONDtemp )
709  nullify( h%RHOtab )
710  nullify( h%CPtab )
711  nullify( h%CONDtab )
712  nullify( h%RHOfuncA )
713  nullify( h%RHOfuncB )
714  nullify( h%CPfuncA )
715  nullify( h%CPfuncB )
716  nullify( h%CONDfuncA )
717  nullify( h%CONDfuncB )
718  nullify( h%AMPL )
719  nullify( h%AMPLtime )
720  nullify( h%AMPLtab )
721  nullify( h%AMPLfuncA )
722  nullify( h%AMPLfuncB )
723  nullify( h%TEMP0 )
724  nullify( h%TEMPC )
725  nullify( h%TEMP )
726  nullify( h%T_FIX_node )
727  nullify( h%T_FIX_ampl )
728  nullify( h%T_FIX_val )
729  nullify( h%Q_NOD_node )
730  nullify( h%Q_NOD_ampl )
731  nullify( h%Q_NOD_val )
732  nullify( h%Q_VOL_elem )
733  nullify( h%Q_VOL_ampl )
734  nullify( h%Q_VOL_val )
735  nullify( h%Q_SUF_elem )
736  nullify( h%Q_SUF_ampl )
737  nullify( h%Q_SUF_surf )
738  nullify( h%Q_SUF_val )
739  nullify( h%R_SUF_elem )
740  nullify( h%R_SUF_ampl )
741  nullify( h%R_SUF_surf )
742  nullify( h%R_SUF_val )
743  nullify( h%H_SUF_elem )
744  nullify( h%H_SUF_ampl )
745  nullify( h%H_SUF_surf )
746  nullify( h%H_SUF_val )
747  end subroutine fstr_nullify_fstr_heat
748 
749  subroutine fstr_nullify_fstr_dynamic( DY )
750  implicit none
751  type( fstr_dynamic ) :: DY
752 
753  nullify( dy%DISP )
754  nullify( dy%VEL )
755  nullify( dy%ACC )
756  nullify( dy%VEC1 )
757  nullify( dy%VEC2 )
758  nullify( dy%VEC3 )
759  end subroutine fstr_nullify_fstr_dynamic
760 
762  implicit none
763  type( fstr_freqanalysis ), intent(inout) :: f
764 
765  f%FLOAD_ngrp_tot = 0
766  nullify( f%FLOAD_ngrp_GRPID )
767  nullify( f%FLOAD_ngrp_ID )
768  nullify( f%FLOAD_ngrp_TYPE )
769  nullify( f%FLOAD_ngrp_DOF )
770  nullify( f%FLOAD_ngrp_valre )
771  nullify( f%FLOAD_ngrp_valim )
772  end subroutine fstr_nullify_fstr_freqanalysis
773 
774  subroutine fstr_nullify_fstr_eigen( E )
775  implicit none
776  type( fstr_eigen ) :: E
777 
778  nullify( e%mass )
779  end subroutine fstr_nullify_fstr_eigen
780 
781  subroutine fstr_nullify_fstr_couple( C )
782  implicit none
783  type( fstr_couple ) :: C
784 
785  nullify( c%coupled_node )
786  nullify( c%trac )
787  nullify( c%velo )
788  nullify( c%index )
789  end subroutine fstr_nullify_fstr_couple
790 
792  subroutine fstr_mat_init( hecMAT )
793  implicit none
794  type(hecmwst_matrix) :: hecMAT
795 
796  hecmat%Iarray(1) = 100 ! = nier
797  hecmat%Iarray(2) = 1 ! = method
798  hecmat%Iarray(3) = 1 ! = precond
799  hecmat%Iarray(4) = 0 ! = nset
800  hecmat%Iarray(5) = 1 ! = iterpremax
801  hecmat%Iarray(6) = 10 ! = nrest
802  hecmat%Iarray(7) = 0 ! = scaling
803  hecmat%Iarray(21)= kno ! = iterlog
804  hecmat%Iarray(22)= kno ! = timelog
805  hecmat%Iarray(31)= 0 ! = dumptype
806  hecmat%Iarray(32)= 0 ! = dumpexit
807  hecmat%Iarray(33)= 0 ! = usejad
808  hecmat%Iarray(34)= 10 ! = ncolor_in
809  hecmat%Iarray(13)= 0 ! = mpc_method
810  hecmat%Iarray(14)= 0 ! = estcond
811  hecmat%Iarray(35)= 3 ! = maxrecycle_precond
812  hecmat%Iarray(41)= 0 ! = solver_opt1
813  hecmat%Iarray(42)= 0 ! = solver_opt2
814  hecmat%Iarray(43)= 0 ! = solver_opt3
815  hecmat%Iarray(44)= 0 ! = solver_opt4
816  hecmat%Iarray(45)= 0 ! = solver_opt5
817  hecmat%Iarray(46)= 0 ! = solver_opt6
818 
819  hecmat%Rarray(1) = 1.0e-8 ! = resid
820  hecmat%Rarray(2) = 1.0 ! = sigma_diag
821  hecmat%Rarray(3) = 0.0 ! = sigma
822  hecmat%Rarray(4) = 0.1 ! = thresh
823  hecmat%Rarray(5) = 0.1 ! = filter
824  hecmat%Rarray(11)= 1.0e+4 ! = penalty
825 
826  hecmat%Iarray(96) = 0 ! nrecycle_precond
827  hecmat%Iarray(97) = kyes ! flag_numfact
828  hecmat%Iarray(98) = kyes ! flag_symbfact
829  hecmat%Iarray(99) = kyes ! indirect method
830  end subroutine fstr_mat_init
831 
832  subroutine hecmat_init( hecMAT )
833  implicit none
834  type( hecmwst_matrix ) :: hecMAT
835  integer :: ndof, nn, ierror
836  ndof = hecmat%NDOF
837  nn = ndof*ndof
838  allocate (hecmat%AL(nn*hecmat%NPL) ,stat=ierror )
839  if( ierror /= 0 ) then
840  write(*,*) "##ERROR : not enough memory"
841  write(idbg,*) 'stop due to allocation error'
842  call flush(idbg)
843  call hecmw_abort( hecmw_comm_get_comm() )
844  end if
845  allocate (hecmat%AU(nn*hecmat%NPU) ,stat=ierror )
846  if( ierror /= 0 ) then
847  write(*,*) "##ERROR : not enough memory"
848  write(idbg,*) 'stop due to allocation error'
849  call flush(idbg)
850  call hecmw_abort( hecmw_comm_get_comm() )
851  end if
852  allocate (hecmat%B(ndof*hecmat%NP) ,stat=ierror )
853  if( ierror /= 0 ) then
854  write(*,*) "##ERROR : not enough memory"
855  write(idbg,*) 'stop due to allocation error'
856  call flush(idbg)
857  call hecmw_abort( hecmw_comm_get_comm() )
858  end if
859  hecmat%B(:)=0.d0
860  allocate (hecmat%D(nn*hecmat%NP) ,stat=ierror )
861  if( ierror /= 0 ) then
862  write(*,*) "##ERROR : not enough memory"
863  write(idbg,*) 'stop due to allocation error'
864  call flush(idbg)
865  call hecmw_abort( hecmw_comm_get_comm() )
866  end if
867  allocate (hecmat%X(ndof*hecmat%NP) ,stat=ierror )
868  if( ierror /= 0 ) then
869  write(*,*) "##ERROR : not enough memory"
870  write(idbg,*) 'stop due to allocation error'
871  call flush(idbg)
872  call hecmw_abort( hecmw_comm_get_comm() )
873  end if
874  allocate (hecmat%ALU(nn*hecmat%N) ,stat=ierror )
875  if( ierror /= 0 ) then
876  write(*,*) "##ERROR : not enough memory"
877  write(idbg,*) 'stop due to allocation error'
878  call flush(idbg)
879  call hecmw_abort( hecmw_comm_get_comm() )
880  endif
881  call hecmw_cmat_init( hecmat%cmat )
882  hecmat%D = 0.0d0
883  hecmat%AL = 0.0d0
884  hecmat%AU = 0.0d0
885  hecmat%B = 0.0d0
886  hecmat%X = 0.0d0
887  hecmat%ALU = 0.0d0
888  end subroutine hecmat_init
889 
890  subroutine hecmat_finalize( hecMAT )
891  implicit none
892  type( hecmwst_matrix ) :: hecMAT
893  integer :: ndof, nn, ierror
894  ndof = hecmat%NDOF
895  nn = ndof*ndof
896  if( associated(hecmat%AL) ) then
897  deallocate(hecmat%AL ,stat=ierror)
898  if( ierror /= 0 ) then
899  write(idbg,*) 'stop due to deallocation error'
900  call flush(idbg)
901  call hecmw_abort( hecmw_comm_get_comm())
902  end if
903  endif
904  if( associated(hecmat%AU) ) then
905  deallocate(hecmat%AU ,stat=ierror)
906  if( ierror /= 0 ) then
907  write(idbg,*) 'stop due to deallocation error'
908  call flush(idbg)
909  call hecmw_abort( hecmw_comm_get_comm())
910  end if
911  endif
912  if( associated(hecmat%B) ) then
913  deallocate(hecmat%B ,stat=ierror)
914  if( ierror /= 0 ) then
915  write(idbg,*) 'stop due to deallocation error'
916  call flush(idbg)
917  call hecmw_abort( hecmw_comm_get_comm())
918  end if
919  endif
920  if( associated(hecmat%D) ) then
921  deallocate(hecmat%D ,stat=ierror)
922  if( ierror /= 0 ) then
923  write(idbg,*) 'stop due to deallocation error'
924  call flush(idbg)
925  call hecmw_abort( hecmw_comm_get_comm())
926  end if
927  endif
928  if( associated(hecmat%X) ) then
929  deallocate(hecmat%X ,stat=ierror)
930  if( ierror /= 0 ) then
931  write(idbg,*) 'stop due to deallocation error'
932  call flush(idbg)
933  call hecmw_abort( hecmw_comm_get_comm())
934  end if
935  endif
936  if( associated(hecmat%ALU) ) then
937  deallocate(hecmat%ALU ,stat=ierror)
938  if( ierror /= 0 ) then
939  write(idbg,*) 'stop due to deallocation error'
940  call flush(idbg)
941  call hecmw_abort( hecmw_comm_get_comm())
942  end if
943  endif
944  call hecmw_cmat_finalize(hecmat%cmat)
945  end subroutine hecmat_finalize
946 
948  subroutine fstr_param_init( fstrPARAM, hecMESH )
949  implicit none
950  type(fstr_param) :: fstrPARAM
951  type(hecmwst_local_mesh) :: hecMESH
952  integer(kind=kint) :: i
953  external fstr_sort_index
954 
955  fstrparam%solution_type = kststatic
956  fstrparam%nlgeom = .false.
957  fstrparam%solver_method = ksmcg
958 
959  !!STATIC !HEAT
960  fstrparam%analysis_n = 0
961  fstrparam%ref_temp = 0
962 
963  ! output control
964  fstrparam%fg_echo = koff
965  fstrparam%fg_result = koff
966  fstrparam%fg_visual = koff
967 
968  ! for heat ...
969  fstrparam%fg_neutral = koff
970  fstrparam%fg_irres = kno
971  fstrparam%fg_iwres = kno
972  fstrparam%nrres = 1
973  fstrparam%nprint = 1
974 
975  ! for couple
976  fstrparam%fg_couple = 0
977  fstrparam%fg_couple_type = 0
978  fstrparam%fg_couple_first= 0
979  fstrparam%fg_couple_window= 0
980 
981  ! for restart control
982  fstrparam%restart_version = 5
983 
984  ! index table for global node ID sorting
985 
986  fstrparam%n_node = hecmesh%n_node;
987  fstrparam%nn_internal = hecmesh%nn_internal;
988  allocate( fstrparam%global_local_ID(2,hecmesh%nn_internal))
989  do i = 1, hecmesh%nn_internal
990  fstrparam%global_local_ID(1,i) = hecmesh%global_node_ID(i)
991  fstrparam%global_local_ID(2,i) = i
992  end do
993  call fstr_sort_index( fstrparam%global_local_ID, hecmesh%nn_internal )
994  end subroutine fstr_param_init
995 
996  logical function fstr_isboundaryactive( fstrSOLID, nbc, cstep )
997  type(fstr_solid) :: fstrsolid
998  integer, intent(in) :: nbc
999  integer, intent(in) :: cstep
1000  fstr_isboundaryactive = .true.
1001  if( .not. associated(fstrsolid%step_ctrl) ) return
1002  if( cstep>fstrsolid%nstep_tot ) return
1003  fstr_isboundaryactive = isboundaryactive( nbc, fstrsolid%step_ctrl(cstep) )
1004  end function
1005 
1006  logical function fstr_isloadactive( fstrSOLID, nbc, cstep )
1007  type(fstr_solid) :: fstrsolid
1008  integer, intent(in) :: nbc
1009  integer, intent(in) :: cstep
1010  fstr_isloadactive = .true.
1011  if( cstep > 0 ) then
1012  if( .not. associated(fstrsolid%step_ctrl) ) return
1013  if( cstep>fstrsolid%nstep_tot ) return
1014  fstr_isloadactive = isloadactive( nbc, fstrsolid%step_ctrl(cstep) )
1015  else
1016  fstr_isloadactive = isloadactive( nbc, fstrsolid%step_ctrl_restart )
1017  endif
1018  end function
1019 
1020  logical function fstr_iscontactactive( fstrSOLID, nbc, cstep )
1021  type(fstr_solid) :: fstrsolid
1022  integer, intent(in) :: nbc
1023  integer, intent(in) :: cstep
1024  fstr_iscontactactive = .true.
1025  if( .not. associated(fstrsolid%step_ctrl) ) return
1026  if( cstep>fstrsolid%nstep_tot ) return
1027  fstr_iscontactactive = iscontactactive( nbc, fstrsolid%step_ctrl(cstep) )
1028  end function
1029 
1031  subroutine get_coordsys( cdsys_ID, hecMESH, fstrSOLID, coords )
1032  integer, intent(in) :: cdsys_ID
1033  type(hecmwst_local_mesh) :: hecMESH
1034  type(fstr_solid), intent(inout) :: fstrSOLID
1035  real(kind=kreal), intent(out) :: coords(3,3)
1036  integer :: ik
1037 
1038  coords = 0.d0
1039  if( cdsys_id>0 ) then
1040  if( iscoordneeds(g_localcoordsys(cdsys_id)) ) then
1041  coords=g_localcoordsys(cdsys_id)%CoordSys
1042  else
1043  ik=g_localcoordsys(cdsys_id)%node_ID(1)
1044  coords(1,:)= hecmesh%node(3*ik-2:3*ik)+fstrsolid%unode(3*ik-2:3*ik) &
1045  + fstrsolid%dunode(3*ik-2:3*ik)
1046  ik=g_localcoordsys(cdsys_id)%node_ID(2)
1047  coords(2,:)= hecmesh%node(3*ik-2:3*ik)+fstrsolid%unode(3*ik-2:3*ik) &
1048  + fstrsolid%dunode(3*ik-2:3*ik)
1049  ik=g_localcoordsys(cdsys_id)%node_ID(3)
1050  if(ik>0) coords(3,:)= hecmesh%node(3*ik-2:3*ik)+fstrsolid%unode(3*ik-2:3*ik) &
1051  + fstrsolid%dunode(3*ik-2:3*ik)
1052  endif
1053  endif
1054  end subroutine get_coordsys
1055 
1056  subroutine fstr_set_current_config_to_mesh(hecMESH,fstrSOLID,coord)
1057  implicit none
1058  type(hecmwst_local_mesh), intent(inout) :: hecMESH
1059  type (fstr_solid), intent(in) :: fstrSOLID
1060  real(kind=kreal), intent(out) :: coord(:)
1061  integer(kind=kint) :: i
1062  if(hecmesh%n_dof == 4) return
1063  do i = 1, hecmesh%nn_internal*min(hecmesh%n_dof,3)
1064  coord(i) = hecmesh%node(i)
1065  hecmesh%node(i) = coord(i)+fstrsolid%unode(i)+fstrsolid%dunode(i)
1066  enddo
1067  end subroutine fstr_set_current_config_to_mesh
1068 
1069  subroutine fstr_recover_initial_config_to_mesh(hecMESH,fstrSOLID,coord)
1070  implicit none
1071  type(hecmwst_local_mesh), intent(inout) :: hecMESH
1072  type (fstr_solid), intent(in) :: fstrSOLID
1073  real(kind=kreal), intent(in) :: coord(:)
1074  integer(kind=kint) :: i
1075  if(hecmesh%n_dof == 4) return
1076  do i = 1, hecmesh%nn_internal*min(hecmesh%n_dof,3)
1077  hecmesh%node(i) = coord(i)
1078  enddo
1080 
1081  subroutine fstr_solid_phys_zero(phys)
1082  implicit none
1083  type(fstr_solid_physic_val), pointer :: phys
1084  phys%STRAIN = 0.0d0
1085  phys%STRESS = 0.0d0
1086  phys%MISES = 0.0d0
1087  phys%ESTRAIN = 0.0d0
1088  phys%ESTRESS = 0.0d0
1089  phys%EMISES = 0.0d0
1090  phys%ENQM = 0.0d0
1091  end subroutine fstr_solid_phys_zero
1092 
1093  subroutine fstr_solid_phys_clear(fstrSOLID)
1094  implicit none
1095  type (fstr_solid) :: fstrSOLID
1096  integer(kind=kint) :: i
1097 
1098  if (associated(fstrsolid%SOLID)) then
1099  call fstr_solid_phys_zero(fstrsolid%SOLID)
1100  end if
1101  if (associated(fstrsolid%SHELL)) then
1102  call fstr_solid_phys_zero(fstrsolid%SHELL)
1103  do i=1,fstrsolid%max_lyr
1104  call fstr_solid_phys_zero(fstrsolid%SHELL%LAYER(i)%PLUS)
1105  call fstr_solid_phys_zero(fstrsolid%SHELL%LAYER(i)%MINUS)
1106  end do
1107  end if
1108  if (associated(fstrsolid%BEAM)) then
1109  call fstr_solid_phys_zero(fstrsolid%BEAM)
1110  end if
1111  end subroutine fstr_solid_phys_clear
1112 
1113 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' coodinate
type(tlocalcoordsys), dimension(:), pointer, save g_localcoordsys
This module defined coomon data and basic structures for analysis.
Definition: m_fstr.f90:15
integer(kind=kint), parameter kel361bbar
Definition: m_fstr.f90:69
integer(kind=kint), parameter iutb
Definition: m_fstr.f90:93
integer(kind=kint), pointer iresult
Definition: m_fstr.f90:106
subroutine fstr_solid_phys_zero(phys)
Definition: m_fstr.f90:1082
subroutine hecmat_finalize(hecMAT)
Definition: m_fstr.f90:891
subroutine get_coordsys(cdsys_ID, hecMESH, fstrSOLID, coords)
This subroutine fetch coords defined by local coordinate system.
Definition: m_fstr.f90:1032
subroutine fstr_nullify_fstr_couple(C)
Definition: m_fstr.f90:782
integer(kind=kint), parameter restart_outall
Definition: m_fstr.f90:65
integer(kind=kint), parameter ineu
Definition: m_fstr.f90:97
real(kind=kreal) eps
Definition: m_fstr.f90:126
integer(kind=kint) myrank
PARALLEL EXECUTION.
Definition: m_fstr.f90:80
integer(kind=kint), parameter kbcffstr
boundary condition file type (bcf)
Definition: m_fstr.f90:57
subroutine fstr_recover_initial_config_to_mesh(hecMESH, fstrSOLID, coord)
Definition: m_fstr.f90:1070
subroutine fstr_param_init(fstrPARAM, hecMESH)
Initializer of structure fstr_param.
Definition: m_fstr.f90:949
integer(kind=kint), parameter imsg
Definition: m_fstr.f90:94
integer(kind=kint), parameter kopss_material
Definition: m_fstr.f90:115
integer(kind=kint), parameter ksmcg
solver method (sm) !CAUTION : (<=100):indirect, (>100):direct
Definition: m_fstr.f90:46
real(kind=kreal), dimension(100) svrarray
Definition: m_fstr.f90:102
integer(kind=kint), parameter kstdynamic
Definition: m_fstr.f90:40
integer(kind=kint), pointer ineutral
Definition: m_fstr.f90:108
subroutine fstr_nullify_fstr_heat(H)
Definition: m_fstr.f90:696
real(kind=kreal) etime
Definition: m_fstr.f90:124
logical function fstr_isloadactive(fstrSOLID, nbc, cstep)
Definition: m_fstr.f90:1007
integer(kind=kint), parameter idbg
Definition: m_fstr.f90:95
integer(kind=kint), parameter kfloadtype_surf
Definition: m_fstr.f90:74
integer(kind=kint), parameter ksmgmres
Definition: m_fstr.f90:48
integer(kind=kint), parameter kopss_solution
Definition: m_fstr.f90:114
integer(kind=kint), parameter kel361fi
section control
Definition: m_fstr.f90:68
integer(kind=kint) opsstype
Definition: m_fstr.f90:116
integer(kind=kint), dimension(100) sviarray
SOLVER CONTROL.
Definition: m_fstr.f90:101
integer(kind=kint), parameter kon
Definition: m_fstr.f90:32
character(len=hecmw_filename_len) restartfilname
Definition: m_fstr.f90:88
integer(kind=kint), parameter kfloadcase_im
Definition: m_fstr.f90:77
subroutine fstr_mat_init(hecMAT)
Initializer of structure hecmwST_matrix.
Definition: m_fstr.f90:793
integer(kind=kint) itmax
Definition: m_fstr.f90:125
subroutine fstr_nullify_fstr_eigen(E)
Definition: m_fstr.f90:775
integer(kind=kint) nprocs
Definition: m_fstr.f90:81
integer(kind=kint), parameter ifvs
Definition: m_fstr.f90:96
logical function fstr_iscontactactive(fstrSOLID, nbc, cstep)
Definition: m_fstr.f90:1021
integer(kind=kint), pointer iwres
Definition: m_fstr.f90:110
integer(kind=kint), parameter kyes
CONSTANTS general.
Definition: m_fstr.f90:30
integer(kind=kint), parameter kbcfnastran
Definition: m_fstr.f90:58
integer(kind=kint), parameter kel361ic
Definition: m_fstr.f90:70
integer(kind=kint), parameter kcaslagrange
contact analysis algorithm
Definition: m_fstr.f90:53
integer(kind=kint), parameter ilog
FILE HANDLER.
Definition: m_fstr.f90:91
integer(kind=kint), parameter ksmgpbicg
Definition: m_fstr.f90:49
integer(kind=kint), pointer nprint
Definition: m_fstr.f90:112
real(kind=kreal) dt
ANALYSIS CONTROL for NLGEOM and HEAT.
Definition: m_fstr.f90:123
integer(kind=kint), pointer nrres
Definition: m_fstr.f90:111
integer(kind=kint), parameter kststatic
Definition: m_fstr.f90:37
subroutine fstr_set_current_config_to_mesh(hecMESH, fstrSOLID, coord)
Definition: m_fstr.f90:1057
integer(kind=kint), parameter kbcinitial
Definition: m_fstr.f90:60
integer(kind=kint), parameter kfloadtype_node
Definition: m_fstr.f90:73
integer(kind=kint), parameter kstprecheck
solution type (st)
Definition: m_fstr.f90:36
integer(kind=kint), parameter kcaalagrange
Definition: m_fstr.f90:54
subroutine hecmat_init(hecMAT)
Definition: m_fstr.f90:833
integer(kind=kint), parameter kststaticeigen
Definition: m_fstr.f90:42
integer(kind=kint), parameter kstheat
Definition: m_fstr.f90:39
integer(kind=kint), parameter ista
Definition: m_fstr.f90:92
subroutine fstr_nullify_fstr_freqanalysis(f)
Definition: m_fstr.f90:762
integer(kind=kint), parameter ksmdirect
Definition: m_fstr.f90:50
integer(kind=kint), parameter koff
Definition: m_fstr.f90:33
real(kind=kreal), pointer ref_temp
REFTEMP.
Definition: m_fstr.f90:120
integer(kind=kint), parameter kstnzprof
Definition: m_fstr.f90:43
integer(kind=kint), parameter kbctransit
Definition: m_fstr.f90:61
subroutine fstr_solid_phys_clear(fstrSOLID)
Definition: m_fstr.f90:1094
integer(kind=kint), pointer irres
Definition: m_fstr.f90:109
integer(kind=kint), parameter ksmbicgstab
Definition: m_fstr.f90:47
character(len=hecmw_filename_len) cntfilname
FILE NAME.
Definition: m_fstr.f90:87
integer(kind=kint), pointer iecho
FLAG for ECHO/RESULT/POST.
Definition: m_fstr.f90:105
type(fstr_param), target fstrpr
GLOBAL VARIABLE INITIALIZED IN FSTR_SETUP.
Definition: m_fstr.f90:190
integer(kind=kint), parameter kel361fbar
Definition: m_fstr.f90:71
logical function fstr_isboundaryactive(fstrSOLID, nbc, cstep)
Definition: m_fstr.f90:997
subroutine fstr_nullify_fstr_param(P)
NULL POINTER SETTING TO AVOID RUNTIME ERROR.
Definition: m_fstr.f90:627
integer(kind=kint), parameter ksteigen
Definition: m_fstr.f90:38
type(tinitialcondition), dimension(:), pointer, save g_initialcnd
Definition: m_fstr.f90:135
integer(kind=kint), pointer ivisual
Definition: m_fstr.f90:107
integer(kind=kint), parameter restart_outlast
restart type
Definition: m_fstr.f90:64
integer(kind=kint), parameter iresout
Definition: m_fstr.f90:98
subroutine fstr_nullify_fstr_solid(S)
Definition: m_fstr.f90:641
subroutine fstr_nullify_fstr_dynamic(DY)
Definition: m_fstr.f90:750
integer(kind=kint), parameter kno
Definition: m_fstr.f90:31
logical paracontactflag
PARALLEL CONTACT FLAG.
Definition: m_fstr.f90:84
integer(kind=kint), parameter kfloadcase_re
Definition: m_fstr.f90:76
This module manages step infomation.
Definition: m_out.f90:6
This module manages step infomation.
Definition: m_step.f90:6
logical function iscontactactive(bnd, stepinfo)
Is contact condition in this step active.
Definition: m_step.f90:114
logical function isboundaryactive(bnd, stepinfo)
Is boundary condition in this step active.
Definition: m_step.f90:96
logical function isloadactive(bnd, stepinfo)
Is external load in this step active.
Definition: m_step.f90:105
This module manages timepoint infomation.
Definition: m_timepoint.f90:6
This module manage 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:580
Data for DYNAMIC ANSLYSIS (fstrDYNAMIC)
Definition: m_fstr.f90:473
Package of data used by Lanczos eigenvalue solver.
Definition: m_fstr.f90:562
Data for HEAT ANSLYSIS (fstrHEAT)
Definition: m_fstr.f90:394
FSTR INNER CONTROL PARAMETERS (fstrPARAM)
Definition: m_fstr.f90:138
Data for STATIC ANSLYSIS (fstrSOLID)
Definition: m_fstr.f90:193
Data for section control.
Definition: m_fstr.f90:610
-1:not relation, >1:index of coupled_node
Definition: m_fstr.f90:597
output control such as output filename, output freqency etc.
Definition: m_out.f90:29
Step control such as active boundary condition, convergent condition etc.
Definition: m_step.f90:24
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:29