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
40 integer(kind=kint),
parameter ::
kstheat = 3
47 integer(kind=kint),
parameter ::
ksmcg = 1
114 integer(kind=kint),
parameter ::
ilog = 16
115 integer(kind=kint),
parameter ::
ista = 17
116 integer(kind=kint),
parameter ::
iutb = 18
117 integer(kind=kint),
parameter ::
imsg = 51
118 integer(kind=kint),
parameter ::
idbg = 52
119 integer(kind=kint),
parameter ::
ifvs = 53
120 integer(kind=kint),
parameter ::
ineu = 54
121 integer(kind=kint),
parameter ::
iresout = 100
128 integer(kind=kint),
pointer ::
iecho
132 integer(kind=kint),
pointer ::
irres
133 integer(kind=kint),
pointer ::
iwres
134 integer(kind=kint),
pointer ::
nrres
146 real(kind=kreal) ::
dt
152 character(len=HECMW_FILENAME_LEN) :: cond_name
155 integer,
pointer :: intval(:) => null()
156 real(kind=kreal),
pointer :: realval(:) => null()
162 integer(kind=kint) :: solution_type
163 integer(kind=kint) :: solver_method
164 integer(kind=kint) :: nlsolver_method
168 integer(kind=kint) :: analysis_n
169 real(kind=kreal),
pointer :: dtime(:)
170 real(kind=kreal),
pointer ::
etime(:)
171 real(kind=kreal),
pointer :: dtmin(:)
172 real(kind=kreal),
pointer :: delmax(:)
173 integer(kind=kint),
pointer::
itmax(:)
174 real(kind=kreal),
pointer ::
eps(:)
176 integer(kind=kint) :: timepoint_id
179 integer(kind=kint) :: fg_echo
180 integer(kind=kint) :: fg_result
181 integer(kind=kint) :: fg_visual
184 integer(kind=kint) :: fg_neutral
185 integer(kind=kint) :: fg_irres
186 integer(kind=kint) :: fg_iwres
191 integer(kind=kint) :: n_node
192 integer(kind=kint) :: nn_internal
193 integer(kind=kint),
pointer :: global_local_id(:,:)
196 integer( kind=kint ) :: fg_couple
197 integer( kind=kint ) :: fg_couple_type
198 integer( kind=kint ) :: fg_couple_first
199 integer( kind=kint ) :: fg_couple_window
202 integer( kind=kint ) :: restart_out_type
203 integer( kind=kint ) :: restart_version
206 integer( kind=kint ) :: contact_algo
207 integer( kind=kint ) :: augiter
208 logical :: fric_cone_follow
209 real( kind=kreal ) :: eps_fric_band
210 type(tcontactparam),
pointer :: contactparam(:)
211 type(tcontactinterference),
pointer :: contact_if(:)
226 real(kind=kreal),
pointer :: stress(:) => null()
227 real(kind=kreal),
pointer :: strain(:) => null()
228 real(kind=kreal),
pointer :: mises(:) => null()
230 real(kind=kreal),
pointer :: pstress(:) => null()
231 real(kind=kreal),
pointer :: pstrain(:) => null()
232 real(kind=kreal),
pointer :: pstress_vect(:,:) => null()
233 real(kind=kreal),
pointer :: pstrain_vect(:,:) => null()
235 real(kind=kreal),
pointer :: estress(:) => null()
236 real(kind=kreal),
pointer :: estrain(:) => null()
237 real(kind=kreal),
pointer :: emises(:) => null()
238 real(kind=kreal),
pointer :: eplstrain(:) => null()
240 real(kind=kreal),
pointer :: epstress(:) => null()
241 real(kind=kreal),
pointer :: epstrain(:) => null()
242 real(kind=kreal),
pointer :: epstress_vect(:,:) => null()
243 real(kind=kreal),
pointer :: epstrain_vect(:,:) => null()
244 real(kind=kreal),
pointer :: enqm(:) => null()
253 integer(kind=kint) :: file_type
254 integer(kind=kint) :: statictype
255 integer(kind=kint) :: nstep_tot
261 integer(kind=kint) :: boundary_ngrp_tot
262 integer(kind=kint),
pointer :: boundary_ngrp_grpid (:) =>null()
263 integer(kind=kint),
pointer :: boundary_ngrp_id (:) =>null()
264 integer(kind=kint),
pointer :: boundary_ngrp_type (:) =>null()
265 integer(kind=kint),
pointer :: boundary_ngrp_amp (:) =>null()
266 real(kind=kreal),
pointer :: boundary_ngrp_val(:) =>null()
267 integer(kind=kint),
pointer :: boundary_ngrp_istot (:) =>null()
268 integer(kind=kint) :: boundary_ngrp_rot
269 integer(kind=kint),
pointer :: boundary_ngrp_rotid (:) =>null()
270 integer(kind=kint),
pointer :: boundary_ngrp_centerid (:) =>null()
273 integer(kind=kint) :: velocity_type
274 integer(kind=kint) :: velocity_ngrp_tot
275 integer(kind=kint),
pointer :: velocity_ngrp_grpid (:) =>null()
276 integer(kind=kint),
pointer :: velocity_ngrp_id (:) =>null()
277 integer(kind=kint),
pointer :: velocity_ngrp_type (:) =>null()
278 integer(kind=kint),
pointer :: velocity_ngrp_amp (:) =>null()
279 real(kind=kreal),
pointer :: velocity_ngrp_val(:) =>null()
280 integer(kind=kint) :: velocity_ngrp_rot
281 integer(kind=kint),
pointer :: velocity_ngrp_rotid (:) =>null()
282 integer(kind=kint),
pointer :: velocity_ngrp_centerid (:) =>null()
285 integer(kind=kint) :: acceleration_type
286 integer(kind=kint) :: acceleration_ngrp_tot
287 integer(kind=kint),
pointer :: acceleration_ngrp_grpid (:) =>null()
288 integer(kind=kint),
pointer :: acceleration_ngrp_id (:) =>null()
289 integer(kind=kint),
pointer :: acceleration_ngrp_type (:) =>null()
290 integer(kind=kint),
pointer :: acceleration_ngrp_amp (:) =>null()
291 real(kind=kreal),
pointer :: acceleration_ngrp_val(:) =>null()
294 integer(kind=kint) :: cload_ngrp_tot
295 integer(kind=kint),
pointer :: cload_ngrp_grpid (:) =>null()
296 integer(kind=kint),
pointer :: cload_ngrp_id (:)
297 integer(kind=kint),
pointer :: cload_ngrp_dof (:)
298 integer(kind=kint),
pointer :: cload_ngrp_amp (:)
299 real(kind=kreal),
pointer :: cload_ngrp_val(:)
300 integer(kind=kint) :: cload_ngrp_rot
301 integer(kind=kint),
pointer :: cload_ngrp_rotid (:) =>null()
302 integer(kind=kint),
pointer :: cload_ngrp_centerid (:) =>null()
305 integer(kind=kint) :: dload_ngrp_tot
306 integer(kind=kint) :: dload_follow
307 integer(kind=kint),
pointer :: dload_ngrp_grpid (:) =>null()
308 integer(kind=kint),
pointer :: dload_ngrp_id (:)
309 integer(kind=kint),
pointer :: dload_ngrp_lid (:)
310 integer(kind=kint),
pointer :: dload_ngrp_amp (:)
311 real(kind=kreal),
pointer :: dload_ngrp_params(:,:)
314 integer(kind=kint) :: temp_ngrp_tot
315 integer(kind=kint) :: temp_irres
316 integer(kind=kint) :: temp_tstep
317 integer(kind=kint) :: temp_interval
318 integer(kind=kint) :: temp_rtype
319 real(kind=kreal) :: temp_factor
320 integer(kind=kint),
pointer :: temp_ngrp_grpid (:) =>null()
321 integer(kind=kint),
pointer :: temp_ngrp_id (:)
322 real(kind=kreal),
pointer :: temp_ngrp_val(:)
325 integer(kind=kint) :: spring_ngrp_tot
326 integer(kind=kint),
pointer :: spring_ngrp_grpid (:) =>null()
327 integer(kind=kint),
pointer :: spring_ngrp_id (:)
328 integer(kind=kint),
pointer :: spring_ngrp_dof (:)
329 integer(kind=kint),
pointer :: spring_ngrp_amp (:)
330 real(kind=kreal),
pointer :: spring_ngrp_val(:)
331 integer(kind=kint),
pointer :: spring_incremental (:)
337 integer( kind=kint ) :: couple_ngrp_tot
338 integer( kind=kint ),
pointer :: couple_ngrp_id(:)
341 integer(kind=kint) :: maxn_gauss
343 real(kind=kreal),
pointer :: stress(:)
344 real(kind=kreal),
pointer :: strain(:)
345 real(kind=kreal),
pointer :: mises(:)
347 real(kind=kreal),
pointer :: pstress(:)
348 real(kind=kreal),
pointer :: pstrain(:)
349 real(kind=kreal),
pointer :: pstress_vect(:,:)
350 real(kind=kreal),
pointer :: pstrain_vect(:,:)
352 real(kind=kreal),
pointer :: estress(:)
353 real(kind=kreal),
pointer :: estrain(:)
354 real(kind=kreal),
pointer :: emises(:)
355 real(kind=kreal),
pointer :: eplstrain(:)
357 real(kind=kreal),
pointer :: epstress(:)
358 real(kind=kreal),
pointer :: epstrain(:)
359 real(kind=kreal),
pointer :: epstress_vect(:,:)
360 real(kind=kreal),
pointer :: epstrain_vect(:,:)
362 real(kind=kreal),
pointer :: tnstrain(:)
363 real(kind=kreal),
pointer :: testrain(:)
365 real(kind=kreal),
pointer :: yield_ratio(:)
367 real(kind=kreal),
pointer :: enqm(:)
368 real(kind=kreal),
pointer :: reaction(:)
370 real(kind=kreal),
pointer :: cont_nforce(:)
371 real(kind=kreal),
pointer :: cont_fric(:)
372 real(kind=kreal),
pointer :: cont_relvel(:)
373 real(kind=kreal),
pointer :: cont_state(:)
374 integer(kind=kint),
pointer :: cont_sgrp_id(:)
375 real(kind=kreal),
pointer :: cont_area(:)
376 real(kind=kreal),
pointer :: cont_ntrac(:)
377 real(kind=kreal),
pointer :: cont_ftrac(:)
378 real(kind=kreal),
pointer :: embed_nforce(:)
385 integer(kind=kint) :: restart_nout
388 integer(kind=kint) :: restart_nin
391 integer(kind=kint) :: max_lyr
392 integer(kind=kint) :: is_33shell
393 integer(kind=kint) :: is_33beam
394 integer(kind=kint) :: is_heat
395 integer(kind=kint) :: max_ncon_stf
396 integer(kind=kint) :: max_ncon
397 integer(kind=kint),
pointer :: is_rot(:) => null()
398 integer(kind=kint) :: elemopt361
399 logical :: is_smoothing_active
400 real(kind=kreal) :: factor(2)
403 integer(kind=kint) :: nrstat_i(10)
404 real(kind=kreal) :: nrstat_r(10)
405 integer(kind=kint) :: autoinc_stat
406 integer(kind=kint) :: cutback_stat
408 real(kind=kreal),
pointer :: gl(:)
409 real(kind=kreal),
pointer :: gl0(:)
410 real(kind=kreal),
pointer :: eforce(:)
411 real(kind=kreal),
pointer :: qforce(:)
412 real(kind=kreal),
pointer :: qforce_bak(:)
413 real(kind=kreal),
pointer :: dforce(:)
414 real(kind=kreal),
pointer :: unode(:) => null()
415 real(kind=kreal),
pointer :: unode_bak(:) => null()
416 real(kind=kreal),
pointer :: dunode(:) => null()
417 real(kind=kreal),
pointer :: ddunode(:) => null()
418 logical :: has_finite_rotation_kinematics
419 logical :: finite_rotation_state_ready
420 integer(kind=kint),
pointer :: shell_node_mode(:) => null()
421 integer(kind=kint),
pointer :: shell_rot_state(:) => null()
422 real(kind=kreal),
pointer :: shell_ref_triad(:) => null()
423 real(kind=kreal),
pointer :: shell_triad(:) => null()
424 real(kind=kreal),
pointer :: shell_triad_bak(:) => null()
425 real(kind=kreal),
pointer :: shell_dtriad(:) => null()
426 real(kind=kreal),
pointer :: shell_drill(:) => null()
427 real(kind=kreal),
pointer :: shell_drill_bak(:) => null()
428 real(kind=kreal),
pointer :: shell_ddrill(:) => null()
429 real(kind=kreal),
pointer :: temperature(:)=> null()
430 real(kind=kreal),
pointer :: temp_bak(:) => null()
431 real(kind=kreal),
pointer :: last_temp(:) => null()
434 type( tmaterial ),
pointer :: materials(:) =>null()
435 integer :: n_contacts
440 real(kind=kreal),
pointer :: mpc_const(:) =>null()
450 real(kind=kreal),
pointer :: unode_bkup(:) => null()
451 real(kind=kreal),
pointer :: qforce_bkup(:) => null()
452 real(kind=kreal),
pointer :: dforce_bkup(:) => null()
453 real(kind=kreal),
pointer :: last_temp_bkup(:) => null()
454 real(kind=kreal),
pointer :: shell_triad_bkup(:) => null()
455 real(kind=kreal),
pointer :: shell_drill_bkup(:) => null()
456 type(
telement ),
pointer :: elements_bkup(:) =>null()
457 type(
tcontact ),
pointer :: contacts_bkup(:) =>null()
458 type(
tcontact ),
pointer :: embeds_bkup(:) =>null()
464 integer(kind=kint) :: is_steady
465 real(kind=kreal) :: beta
466 logical :: is_iter_max_limit
469 integer(kind=kint) :: steptot
470 integer(kind=kint) :: restart_nout
471 real(kind=kreal),
pointer :: step_dltime(:), step_eetime(:)
472 real(kind=kreal),
pointer :: step_delmin(:), step_delmax(:)
473 integer(kind=kint) :: timepoint_id
476 integer(kind=kint) :: materialtot
477 integer(kind=kint),
pointer :: rhotab(:), cptab(:), condtab(:)
478 real(kind=kreal),
pointer :: rho(:,:), rhotemp(:,:)
479 real(kind=kreal),
pointer :: cp(:,:), cptemp(:,:)
480 real(kind=kreal),
pointer :: cond(:,:),condtemp(:,:)
482 real(kind=kreal),
pointer :: rhofunca(:,:), rhofuncb(:,:)
483 real(kind=kreal),
pointer :: cpfunca(:,:), cpfuncb(:,:)
484 real(kind=kreal),
pointer :: condfunca(:,:),condfuncb(:,:)
487 integer(kind=kint) :: amplitudetot
488 integer(kind=kint),
pointer :: ampltab(:)
489 real(kind=kreal),
pointer :: ampl(:,:), ampltime(:,:)
490 real(kind=kreal),
pointer :: amplfunca(:,:), amplfuncb(:,:)
493 real(kind=kreal),
pointer :: temp0(:)
494 real(kind=kreal),
pointer :: tempc(:)
495 real(kind=kreal),
pointer :: temp(:)
498 integer(kind=kint) :: t_fix_tot
499 integer(kind=kint),
pointer :: t_fix_node(:)
500 integer(kind=kint),
pointer :: t_fix_ampl(:)
501 real(kind=kreal),
pointer :: t_fix_val(:)
504 integer(kind=kint) :: q_nod_tot
505 integer(kind=kint),
pointer :: q_nod_node(:)
506 integer(kind=kint),
pointer :: q_nod_ampl(:)
507 real(kind=kreal),
pointer :: q_nod_val(:)
510 integer(kind=kint) :: q_vol_tot
511 integer(kind=kint),
pointer :: q_vol_elem(:)
512 integer(kind=kint),
pointer :: q_vol_ampl(:)
513 real(kind=kreal),
pointer :: q_vol_val(:)
516 integer(kind=kint) :: q_suf_tot
517 integer(kind=kint),
pointer :: q_suf_elem(:)
518 integer(kind=kint),
pointer :: q_suf_ampl(:)
519 integer(kind=kint),
pointer :: q_suf_surf(:)
520 real(kind=kreal),
pointer :: q_suf_val(:)
523 integer(kind=kint) :: r_suf_tot
524 integer(kind=kint),
pointer :: r_suf_elem(:)
525 integer(kind=kint),
pointer :: r_suf_ampl(:,:)
526 integer(kind=kint),
pointer :: r_suf_surf(:)
527 real(kind=kreal),
pointer :: r_suf_val(:,:)
530 integer(kind=kint) :: h_suf_tot
531 integer(kind=kint),
pointer :: h_suf_elem(:)
532 integer(kind=kint),
pointer :: h_suf_ampl(:,:)
533 integer(kind=kint),
pointer :: h_suf_surf(:)
534 real(kind=kreal),
pointer :: h_suf_val(:,:)
536 integer(kind=kint) :: wl_tot
546 integer(kind=kint) :: idx_eqa
547 integer(kind=kint) :: idx_resp
550 integer(kind=kint) :: n_step
551 real(kind=kreal) :: t_start
552 real(kind=kreal) :: t_curr
553 real(kind=kreal) :: t_end
554 real(kind=kreal) :: t_delta
555 integer(kind=kint) :: restart_nout
558 integer(kind=kint) :: restart_nin
561 real(kind=kreal) :: gamma
562 real(kind=kreal) :: beta
565 integer(kind=kint) :: idx_mas
568 integer(kind=kint) :: idx_dmp
569 real(kind=kreal) :: ray_m
570 real(kind=kreal) :: ray_k
573 logical :: varinitialize
576 integer(kind=kint) :: nout
577 integer(kind=kint) :: ngrp_monit
578 integer(kind=kint) :: nout_monit
579 integer(kind=kint) :: iout_list(6)
588 real(kind=kreal),
pointer :: disp(:,:)
589 real(kind=kreal),
pointer :: vel(:,:)
590 real(kind=kreal),
pointer :: acc(:,:)
592 real(kind=kreal) :: kineticenergy
593 real(kind=kreal) :: strainenergy
594 real(kind=kreal) :: totalenergy
597 real(kind=kreal),
pointer :: vec1(:)
598 real(kind=kreal),
pointer :: vec2(:)
599 real(kind=kreal),
pointer :: vec3(:)
601 integer(kind=kint) :: dynamic_iw4 = 204
602 integer(kind=kint) :: dynamic_iw5 = 205
603 integer(kind=kint) :: dynamic_iw6 = 206
604 integer(kind=kint) :: dynamic_iw7 = 207
605 integer(kind=kint) :: dynamic_iw8 = 208
606 integer(kind=kint) :: dynamic_iw9 = 209
607 integer(kind=kint) :: dynamic_iw10 = 210
611 integer(kind=kint) :: fload_ngrp_tot
612 integer(kind=kint),
pointer :: fload_ngrp_grpid(:) => null()
613 integer(kind=kint),
pointer :: fload_ngrp_id(:) => null()
614 integer(kind=kint),
pointer :: fload_ngrp_type(:) => null()
615 integer(kind=kint),
pointer :: fload_ngrp_dof(:) => null()
616 real(kind=kreal),
pointer :: fload_ngrp_valre(:) => null()
617 real(kind=kreal),
pointer :: fload_ngrp_valim(:) => null()
618 character(len=HECMW_FILENAME_LEN) :: eigenlog_filename
619 integer(kind=kint) :: start_mode
620 integer(kind=kint) :: end_mode
624 integer(kind=kint) :: nummode
625 integer(kind=kint) :: numnodedof
626 real(kind=kreal),
pointer :: eigomega(:) => null()
627 real(kind=kreal),
pointer :: eigvector(:,:) => null()
628 real(kind=kreal) :: rayalpha, raybeta
634 integer(kind=kint) :: nget
635 integer(kind=kint) :: maxiter
636 integer(kind=kint) :: iter
637 real (kind=kreal) :: sigma
638 real (kind=kreal) :: tolerance
639 real (kind=kreal) :: totalmass
640 real (kind=kreal),
pointer :: eigval(:)
641 real (kind=kreal),
pointer :: eigvec(:,:)
642 real (kind=kreal),
pointer :: resid(:)
643 real (kind=kreal),
pointer :: filter(:)
644 real (kind=kreal),
pointer :: mass(:)
645 real (kind=kreal),
pointer :: effmass(:)
646 real (kind=kreal),
pointer :: partfactor(:)
647 logical :: is_free = .false.
653 integer( kind=kint ) :: dof
654 integer( kind=kint ) :: ndof
655 integer( kind=kint ) :: coupled_node_n
657 integer,
pointer :: coupled_node(:)
658 real( kind=8 ),pointer :: trac(:)
659 real( kind=8 ),pointer :: disp(:)
660 real( kind=8 ),pointer :: velo(:)
661 real( kind=8 ),pointer :: accel(:)
663 integer( kind=kint ),
pointer :: index(:)
669 integer(kind=kint) :: egrpid
670 real( kind=kreal ) :: i
671 real( kind=kreal ) :: u
672 real( kind=kreal ) :: coe
673 real( kind=kreal ) :: v
674 integer(kind=kint) :: xyz
675 real(kind=kreal) :: n1, n2
676 real(kind=kreal) :: distol
677 real(kind=kreal) :: tstart
685 real(kind=kreal) :: thickness
686 integer :: elemopt341
690 integer :: elemopt361
692 integer :: elemopt611
701 integer(kind=kint),
intent(in) :: code
702 integer(kind=kint) :: ios
704 flush(
ilog, iostat=ios )
706 flush(
ista, iostat=ios )
707 flush(
imsg, iostat=ios )
709 call hecmw_abort( hecmw_comm_get_comm(), code )
723 nullify( p%global_local_ID)
724 nullify( p%timepoints )
731 nullify( s%BOUNDARY_ngrp_ID )
732 nullify( s%BOUNDARY_ngrp_type )
733 nullify( s%BOUNDARY_ngrp_amp )
734 nullify( s%BOUNDARY_ngrp_val)
735 nullify( s%BOUNDARY_ngrp_rotID )
736 nullify( s%BOUNDARY_ngrp_centerID )
737 nullify( s%CLOAD_ngrp_ID )
738 nullify( s%CLOAD_ngrp_DOF )
739 nullify( s%CLOAD_ngrp_amp )
740 nullify( s%CLOAD_ngrp_rotID )
741 nullify( s%CLOAD_ngrp_centerID )
742 nullify( s%CLOAD_ngrp_val )
743 nullify( s%DLOAD_ngrp_ID )
744 nullify( s%DLOAD_ngrp_LID )
745 nullify( s%DLOAD_ngrp_amp )
746 nullify( s%DLOAD_ngrp_params )
747 nullify( s%TEMP_ngrp_ID )
748 nullify( s%TEMP_ngrp_val )
749 nullify( s%SPRING_ngrp_ID )
750 nullify( s%SPRING_ngrp_DOF )
751 nullify( s%SPRING_ngrp_amp )
752 nullify( s%SPRING_ngrp_val )
753 nullify( s%SPRING_incremental )
759 nullify( s%PSTRESS_VECT )
760 nullify( s%PSTRAIN_VECT )
761 nullify( s%REACTION )
765 nullify( s%EPLSTRAIN )
766 nullify( s%EPSTRESS )
767 nullify( s%EPSTRAIN )
768 nullify( s%EPSTRESS_VECT )
769 nullify( s%EPSTRAIN_VECT )
775 nullify( s%VELOCITY_ngrp_GRPID )
776 nullify( s%VELOCITY_ngrp_ID )
777 nullify( s%VELOCITY_ngrp_type )
778 nullify( s%VELOCITY_ngrp_amp )
779 nullify( s%VELOCITY_ngrp_val )
780 nullify( s%VELOCITY_ngrp_rotID )
781 nullify( s%VELOCITY_ngrp_centerID )
782 nullify( s%ACCELERATION_ngrp_GRPID )
783 nullify( s%ACCELERATION_ngrp_ID )
784 nullify( s%ACCELERATION_ngrp_type )
785 nullify( s%ACCELERATION_ngrp_amp )
786 nullify( s%ACCELERATION_ngrp_val )
787 nullify( s%COUPLE_ngrp_ID )
794 nullify( h%STEP_DLTIME )
795 nullify( h%STEP_EETIME )
796 nullify( h%STEP_DELMIN )
797 nullify( h%STEP_DELMAX )
803 nullify( h%CONDtemp )
807 nullify( h%RHOfuncA )
808 nullify( h%RHOfuncB )
811 nullify( h%CONDfuncA )
812 nullify( h%CONDfuncB )
814 nullify( h%AMPLtime )
816 nullify( h%AMPLfuncA )
817 nullify( h%AMPLfuncB )
821 nullify( h%T_FIX_node )
822 nullify( h%T_FIX_ampl )
823 nullify( h%T_FIX_val )
824 nullify( h%Q_NOD_node )
825 nullify( h%Q_NOD_ampl )
826 nullify( h%Q_NOD_val )
827 nullify( h%Q_VOL_elem )
828 nullify( h%Q_VOL_ampl )
829 nullify( h%Q_VOL_val )
830 nullify( h%Q_SUF_elem )
831 nullify( h%Q_SUF_ampl )
832 nullify( h%Q_SUF_surf )
833 nullify( h%Q_SUF_val )
834 nullify( h%R_SUF_elem )
835 nullify( h%R_SUF_ampl )
836 nullify( h%R_SUF_surf )
837 nullify( h%R_SUF_val )
838 nullify( h%H_SUF_elem )
839 nullify( h%H_SUF_ampl )
840 nullify( h%H_SUF_surf )
841 nullify( h%H_SUF_val )
861 nullify( f%FLOAD_ngrp_GRPID )
862 nullify( f%FLOAD_ngrp_ID )
863 nullify( f%FLOAD_ngrp_TYPE )
864 nullify( f%FLOAD_ngrp_DOF )
865 nullify( f%FLOAD_ngrp_valre )
866 nullify( f%FLOAD_ngrp_valim )
880 nullify( c%coupled_node )
889 type(hecmwst_matrix) :: hecMAT
891 hecmat%Iarray(1) = 100
896 hecmat%Iarray(6) = 10
898 hecmat%Iarray(21)=
kno
899 hecmat%Iarray(22)=
kno
903 hecmat%Iarray(34)= 10
908 hecmat%Iarray(36)= hecmw_matvec_impl_default
909 hecmat%Iarray(37)= hecmw_precond_impl_default
917 hecmat%Rarray(1) = 1.0e-8
918 hecmat%Rarray(2) = 1.0
919 hecmat%Rarray(3) = 1.0
920 hecmat%Rarray(4) = 0.1
921 hecmat%Rarray(5) = 0.1
922 hecmat%Rarray(11)= 1.0e+4
924 hecmat%Iarray(96) = 0
925 hecmat%Iarray(97) =
kyes
926 hecmat%Iarray(98) =
kyes
927 hecmat%Iarray(99) =
kyes
932 type( hecmwst_matrix ) :: hecMAT
933 integer :: ndof, nn, ierror
936 allocate (hecmat%AL(nn*hecmat%NPL) ,stat=ierror )
937 if( ierror /= 0 )
then
938 write(*,*)
"##ERROR : not enough memory"
939 write(
idbg,*)
'stop due to allocation error'
941 call hecmw_abort( hecmw_comm_get_comm() )
943 allocate (hecmat%AU(nn*hecmat%NPU) ,stat=ierror )
944 if( ierror /= 0 )
then
945 write(*,*)
"##ERROR : not enough memory"
946 write(
idbg,*)
'stop due to allocation error'
948 call hecmw_abort( hecmw_comm_get_comm() )
950 allocate (hecmat%B(ndof*hecmat%NP) ,stat=ierror )
951 if( ierror /= 0 )
then
952 write(*,*)
"##ERROR : not enough memory"
953 write(
idbg,*)
'stop due to allocation error'
955 call hecmw_abort( hecmw_comm_get_comm() )
958 allocate (hecmat%D(nn*hecmat%NP) ,stat=ierror )
959 if( ierror /= 0 )
then
960 write(*,*)
"##ERROR : not enough memory"
961 write(
idbg,*)
'stop due to allocation error'
963 call hecmw_abort( hecmw_comm_get_comm() )
965 allocate (hecmat%X(ndof*hecmat%NP) ,stat=ierror )
966 if( ierror /= 0 )
then
967 write(*,*)
"##ERROR : not enough memory"
968 write(
idbg,*)
'stop due to allocation error'
970 call hecmw_abort( hecmw_comm_get_comm() )
981 type( hecmwst_matrix ) :: hecMAT
982 integer :: ndof, nn, ierror
985 if(
associated(hecmat%AL) )
then
986 deallocate(hecmat%AL ,stat=ierror)
987 if( ierror /= 0 )
then
988 write(
idbg,*)
'stop due to deallocation error'
990 call hecmw_abort( hecmw_comm_get_comm())
993 if(
associated(hecmat%AU) )
then
994 deallocate(hecmat%AU ,stat=ierror)
995 if( ierror /= 0 )
then
996 write(
idbg,*)
'stop due to deallocation error'
998 call hecmw_abort( hecmw_comm_get_comm())
1001 if(
associated(hecmat%B) )
then
1002 deallocate(hecmat%B ,stat=ierror)
1003 if( ierror /= 0 )
then
1004 write(
idbg,*)
'stop due to deallocation error'
1006 call hecmw_abort( hecmw_comm_get_comm())
1009 if(
associated(hecmat%D) )
then
1010 deallocate(hecmat%D ,stat=ierror)
1011 if( ierror /= 0 )
then
1012 write(
idbg,*)
'stop due to deallocation error'
1014 call hecmw_abort( hecmw_comm_get_comm())
1017 if(
associated(hecmat%X) )
then
1018 deallocate(hecmat%X ,stat=ierror)
1019 if( ierror /= 0 )
then
1020 write(
idbg,*)
'stop due to deallocation error'
1022 call hecmw_abort( hecmw_comm_get_comm())
1025 if(
associated(hecmat%A) )
then
1026 deallocate(hecmat%A ,stat=ierror)
1027 if( ierror /= 0 )
then
1028 write(
idbg,*)
'stop due to deallocation error'
1030 call hecmw_abort( hecmw_comm_get_comm())
1039 type(hecmwst_local_mesh) :: hecMESH
1040 integer(kind=kint) :: i
1041 external fstr_sort_index
1044 fstrparam%nlgeom = .false.
1045 fstrparam%solver_method =
ksmcg
1049 fstrparam%analysis_n = 0
1050 fstrparam%ref_temp = 0
1053 fstrparam%fg_echo =
koff
1054 fstrparam%fg_result =
koff
1055 fstrparam%fg_visual =
koff
1058 fstrparam%fg_neutral =
koff
1059 fstrparam%fg_irres =
kno
1060 fstrparam%fg_iwres =
kno
1062 fstrparam%nprint = 1
1065 fstrparam%fg_couple = 0
1066 fstrparam%fg_couple_type = 0
1067 fstrparam%fg_couple_first= 0
1068 fstrparam%fg_couple_window= 0
1071 fstrparam%restart_version = 6
1075 fstrparam%augiter = 2
1076 fstrparam%fric_cone_follow = .true.
1077 fstrparam%eps_fric_band = 0.d0
1081 fstrparam%n_node = hecmesh%n_node;
1082 fstrparam%nn_internal = hecmesh%nn_internal;
1083 allocate( fstrparam%global_local_ID(2,hecmesh%nn_internal))
1084 do i = 1, hecmesh%nn_internal
1085 fstrparam%global_local_ID(1,i) = hecmesh%global_node_ID(i)
1086 fstrparam%global_local_ID(2,i) = i
1088 call fstr_sort_index( fstrparam%global_local_ID, hecmesh%nn_internal )
1093 integer,
intent(in) :: nbc
1094 integer,
intent(in) :: cstep
1096 if( .not.
associated(fstrsolid%step_ctrl) )
return
1097 if( cstep>fstrsolid%nstep_tot )
return
1103 integer,
intent(in) :: nbc
1104 integer,
intent(in) :: cstep
1106 if( cstep > 0 )
then
1107 if( .not.
associated(fstrsolid%step_ctrl) )
return
1108 if( cstep>fstrsolid%nstep_tot )
return
1117 integer,
intent(in) :: nbc
1118 integer,
intent(in) :: cstep
1120 if( .not.
associated(fstrsolid%step_ctrl) )
return
1121 if( cstep>fstrsolid%nstep_tot )
return
1127 integer,
intent(in) :: nbc
1128 integer,
intent(in) :: cstep
1130 if( .not.
associated(fstrsolid%step_ctrl) )
return
1131 if( cstep>fstrsolid%nstep_tot )
return
1137 integer,
intent(in) :: nbc
1138 integer,
intent(in) :: cstep
1140 if( .not.
associated(fstrsolid%step_ctrl) )
return
1141 if( cstep>fstrsolid%nstep_tot )
return
1147 integer,
intent(in) :: cdsys_ID
1148 integer,
intent(in) :: icel
1149 type(hecmwst_local_mesh) :: hecMESH
1151 real(kind=kreal),
intent(out) :: coords(3,3)
1152 integer :: ik, local_nid, iSS
1155 if( cdsys_id>0 )
then
1159 iss = hecmesh%elem_node_index(icel-1)
1162 ik = hecmesh%elem_node_item(iss+local_nid)
1163 coords(1,:)= hecmesh%node(3*ik-2:3*ik)+fstrsolid%unode(3*ik-2:3*ik) &
1164 + fstrsolid%dunode(3*ik-2:3*ik)
1166 ik = hecmesh%elem_node_item(iss+local_nid)
1167 coords(2,:)= hecmesh%node(3*ik-2:3*ik)+fstrsolid%unode(3*ik-2:3*ik) &
1168 + fstrsolid%dunode(3*ik-2:3*ik)
1170 ik = hecmesh%elem_node_item(iss+local_nid)
1171 coords(3,:)= hecmesh%node(3*ik-2:3*ik)+fstrsolid%unode(3*ik-2:3*ik) &
1172 + fstrsolid%dunode(3*ik-2:3*ik)
1175 coords(1,:)= hecmesh%node(3*ik-2:3*ik)+fstrsolid%unode(3*ik-2:3*ik) &
1176 + fstrsolid%dunode(3*ik-2:3*ik)
1178 coords(2,:)= hecmesh%node(3*ik-2:3*ik)+fstrsolid%unode(3*ik-2:3*ik) &
1179 + fstrsolid%dunode(3*ik-2:3*ik)
1181 if(ik>0) coords(3,:)= hecmesh%node(3*ik-2:3*ik)+fstrsolid%unode(3*ik-2:3*ik) &
1182 + fstrsolid%dunode(3*ik-2:3*ik)
1189 type(hecmwst_local_mesh),
intent(inout) :: hecMESH
1190 type (fstr_solid),
intent(in) :: fstrSOLID
1191 real(kind=kreal),
intent(out) :: coord(:)
1192 integer(kind=kint) :: i
1193 if(hecmesh%n_dof == 4)
return
1194 do i = 1, hecmesh%nn_internal*min(hecmesh%n_dof,3)
1195 coord(i) = hecmesh%node(i)
1196 hecmesh%node(i) = coord(i)+fstrsolid%unode(i)+fstrsolid%dunode(i)
1202 type(hecmwst_local_mesh),
intent(inout) :: hecMESH
1203 type (fstr_solid),
intent(in) :: fstrSOLID
1204 real(kind=kreal),
intent(in) :: coord(:)
1205 integer(kind=kint) :: i
1206 if(hecmesh%n_dof == 4)
return
1207 do i = 1, hecmesh%nn_internal*min(hecmesh%n_dof,3)
1208 hecmesh%node(i) = coord(i)
1218 phys%ESTRAIN = 0.0d0
1219 phys%ESTRESS = 0.0d0
1221 phys%EPLSTRAIN = 0.0d0
1227 type (fstr_solid) :: fstrSOLID
1228 integer(kind=kint) :: i
1230 if (
associated(fstrsolid%SOLID))
then
1233 if (
associated(fstrsolid%SHELL))
then
1235 do i=1,fstrsolid%max_lyr
1240 if (
associated(fstrsolid%BEAM))
then
1254 type ( hecmwST_local_mesh ),
intent(in) :: hecMESH
1255 type ( fstr_solid ),
intent(in) :: fstrSOLID
1256 integer(kind=kint),
intent(in) :: cstep
1257 integer(kind=kint),
intent(in) :: jj_n_amp
1258 real(kind=kreal),
intent(in) :: time
1259 real(kind=kreal),
intent(inout) ::
value
1261 real(kind=kreal) :: t_eval
1263 if( jj_n_amp <= 0 )
then
1265 write(
imsg,*)
'internal error: amplitude table not defined'
1267 call hecmw_abort( hecmw_comm_get_comm() )
1270 if( hecmesh%amp%amp_type_time(jj_n_amp) == hecmw_amp_typetime_total )
then
1273 t_eval = time - fstrsolid%step_ctrl(cstep)%starttime
1276 call hecmw_get_amplitude_value(hecmesh%amp, jj_n_amp, t_eval,
value)
void fstr_sort_index(int *index_data, int *n)
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.
integer(kind=kint), parameter kel361bbar
integer(kind=kint), parameter iutb
integer(kind=kint), pointer iresult
subroutine fstr_solid_phys_zero(phys)
subroutine hecmat_finalize(hecMAT)
subroutine fstr_nullify_fstr_couple(C)
integer(kind=kint), parameter ksmgroppcg
integer(kind=kint), parameter restart_outall
integer(kind=kint), parameter ineu
integer(kind=kint) myrank
PARALLEL EXECUTION.
integer(kind=kint), parameter kel341sesns
integer(kind=kint), parameter kbcffstr
boundary condition file type (bcf)
subroutine fstr_recover_initial_config_to_mesh(hecMESH, fstrSOLID, coord)
subroutine fstr_param_init(fstrPARAM, hecMESH)
Initializer of structure fstr_param.
integer(kind=kint), parameter imsg
integer(kind=kint), parameter kopss_material
integer(kind=kint), parameter kitrfloatingerror
logical function fstr_isembedactive(fstrSOLID, nbc, cstep)
integer(kind=kint), parameter ksmcg
solver method (sm) !CAUTION : (<=100):indirect, (>100):direct
real(kind=kreal), dimension(100) svrarray
integer(kind=kint), parameter kstdynamic
integer(kind=kint), parameter kel361up
integer(kind=kint), parameter ksmgmresren
integer(kind=kint), pointer ineutral
subroutine fstr_nullify_fstr_heat(H)
logical function fstr_isloadactive(fstrSOLID, nbc, cstep)
integer(kind=kint), parameter kel341fi
section control
integer(kind=kint), parameter idbg
integer(kind=kint), parameter kfloadtype_surf
integer(kind=kint), parameter ksmgmres
integer(kind=kint), parameter kopss_solution
integer(kind=kint), parameter kel361fi
integer(kind=kint) opsstype
integer(kind=kint), dimension(100) sviarray
SOLVER CONTROL.
integer(kind=kint), parameter kon
character(len=hecmw_filename_len) restartfilname
subroutine fstr_get_amplitude(hecMESH, fstrSOLID, cstep, jj_n_amp, time, value)
Evaluate the amplitude-scaled target value a(t) for static analysis.
integer(kind=kint), parameter kfloadcase_im
subroutine fstr_mat_init(hecMAT)
Initializer of structure hecmwST_matrix.
subroutine fstr_nullify_fstr_eigen(E)
integer(kind=kint) nprocs
integer(kind=kint), parameter ifvs
logical function fstr_iscontactactive(fstrSOLID, nbc, cstep)
integer(kind=kint), pointer iwres
logical function fstr_iselemactivationactive(fstrSOLID, nbc, cstep)
integer(kind=kint), parameter kitrconverged
integer(kind=kint), parameter kyes
CONSTANTS general.
subroutine get_coordsys(cdsys_ID, hecMESH, fstrSOLID, coords, icel)
This subroutine fetch coords defined by local coordinate system.
integer(kind=kint), parameter kbcfnastran
integer(kind=kint), parameter kel361ic
subroutine fstr_abort(code)
Terminate the analysis with a classified exit status. MPI_ABORT does not perform the Fortran I/O fina...
integer(kind=kint), parameter kcaslagrange
contact analysis algorithm
integer(kind=kint), parameter ilog
FILE HANDLER.
integer(kind=kint), parameter ksmgpbicg
integer(kind=kint), parameter knsmnewton
nonlinear solver method (nsm)
integer(kind=kint), pointer nprint
integer(kind=kint), parameter kel611timoshenko
real(kind=kreal) dt
ANALYSIS CONTROL for NLGEOM and HEAT.
integer(kind=kint), pointer nrres
integer(kind=kint), parameter kststatic
subroutine fstr_set_current_config_to_mesh(hecMESH, fstrSOLID, coord)
integer(kind=kint), parameter kbcinitial
integer(kind=kint), parameter kfloadtype_node
integer(kind=kint), parameter kstprecheck
solution type (st)
integer(kind=kint), parameter knsmquasinewton
integer(kind=kint), parameter kcaalagrange
subroutine hecmat_init(hecMAT)
integer(kind=kint), parameter kststaticeigen
integer(kind=kint), parameter kstheat
integer(kind=kint), parameter ista
integer(kind=kint), parameter ksmpipecg
subroutine fstr_nullify_fstr_freqanalysis(f)
integer(kind=kint), parameter ksmdirect
integer(kind=kint), parameter koff
real(kind=kreal), pointer ref_temp
REFTEMP.
integer(kind=kint), parameter kstnzprof
integer(kind=kint), parameter kbctransit
subroutine fstr_solid_phys_clear(fstrSOLID)
integer(kind=kint), pointer irres
integer(kind=kint), parameter ksmbicgstab
character(len=hecmw_filename_len) cntfilname
FILE NAME.
integer(kind=kint), pointer iecho
FLAG for ECHO/RESULT/POST.
type(fstr_param), target fstrpr
GLOBAL VARIABLE INITIALIZED IN FSTR_SETUP.
integer(kind=kint), parameter kel361fbar
logical function fstr_isboundaryactive(fstrSOLID, nbc, cstep)
subroutine fstr_nullify_fstr_param(P)
NULL POINTER SETTING TO AVOID RUNTIME ERROR.
integer(kind=kint), parameter ksteigen
type(tinitialcondition), dimension(:), pointer, save g_initialcnd
integer(kind=kint), pointer ivisual
integer(kind=kint), parameter kitrcontinue
iteration control
integer(kind=kint), parameter restart_outlast
restart type
integer(kind=kint), parameter iresout
integer(kind=kint), parameter ksmgmresr
integer(kind=kint), parameter kel611euler
subroutine fstr_nullify_fstr_solid(S)
subroutine fstr_nullify_fstr_dynamic(DY)
integer(kind=kint), parameter kno
integer(kind=kint), parameter kitrdiverged
logical paracontactflag
PARALLEL CONTACT FLAG.
integer(kind=kint), parameter kfloadcase_re
This module manages step information.
This module manages step information.
logical function iscontactactive(bnd, stepinfo)
Is contact condition in this step active.
logical function iselemactivationactive(bnd, stepinfo)
Is elemact condition in this step active.
logical function isboundaryactive(bnd, stepinfo)
Is boundary condition in this step active.
logical function isloadactive(bnd, stepinfo)
Is external load in this step active.
This module manages timepoint information.
This modules defines a structure to record history dependent parameter in static analysis.
Data for coupling analysis.
Data for DYNAMIC ANSLYSIS (fstrDYNAMIC)
Package of data used by Lanczos eigenvalue solver.
Data for HEAT ANSLYSIS (fstrHEAT)
FSTR INNER CONTROL PARAMETERS (fstrPARAM)
Data for STATIC ANSLYSIS (fstrSOLID)
Data for section control.
-1:not relation, >1:index of coupled_node
output control such as output filename, output frequency etc.
Step control such as active boundary condition, convergent condition etc.
Convergence criteria of !CONVERG_PARAM, indexed like step_infocnv_check.
Time points storage for output etc.
All data should be recorded in every elements.