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
108 integer(kind=kint),
parameter ::
ilog = 16
109 integer(kind=kint),
parameter ::
ista = 17
110 integer(kind=kint),
parameter ::
iutb = 18
111 integer(kind=kint),
parameter ::
imsg = 51
112 integer(kind=kint),
parameter ::
idbg = 52
113 integer(kind=kint),
parameter ::
ifvs = 53
114 integer(kind=kint),
parameter ::
ineu = 54
115 integer(kind=kint),
parameter ::
iresout = 100
122 integer(kind=kint),
pointer ::
iecho
126 integer(kind=kint),
pointer ::
irres
127 integer(kind=kint),
pointer ::
iwres
128 integer(kind=kint),
pointer ::
nrres
140 real(kind=kreal) ::
dt
146 character(len=HECMW_FILENAME_LEN) :: cond_name
149 integer,
pointer :: intval(:) => null()
150 real(kind=kreal),
pointer :: realval(:) => null()
156 integer(kind=kint) :: solution_type
157 integer(kind=kint) :: solver_method
158 integer(kind=kint) :: nlsolver_method
162 integer(kind=kint) :: analysis_n
163 real(kind=kreal),
pointer :: dtime(:)
164 real(kind=kreal),
pointer ::
etime(:)
165 real(kind=kreal),
pointer :: dtmin(:)
166 real(kind=kreal),
pointer :: delmax(:)
167 integer(kind=kint),
pointer::
itmax(:)
168 real(kind=kreal),
pointer ::
eps(:)
170 integer(kind=kint) :: timepoint_id
173 integer(kind=kint) :: fg_echo
174 integer(kind=kint) :: fg_result
175 integer(kind=kint) :: fg_visual
178 integer(kind=kint) :: fg_neutral
179 integer(kind=kint) :: fg_irres
180 integer(kind=kint) :: fg_iwres
185 integer(kind=kint) :: n_node
186 integer(kind=kint) :: nn_internal
187 integer(kind=kint),
pointer :: global_local_id(:,:)
190 integer( kind=kint ) :: fg_couple
191 integer( kind=kint ) :: fg_couple_type
192 integer( kind=kint ) :: fg_couple_first
193 integer( kind=kint ) :: fg_couple_window
196 integer( kind=kint ) :: restart_out_type
197 integer( kind=kint ) :: restart_version
200 integer( kind=kint ) :: contact_algo
201 integer( kind=kint ) :: augiter
202 type(tcontactparam),
pointer :: contactparam(:)
203 type(tcontactinterference),
pointer :: contact_if(:)
215 real(kind=kreal),
pointer :: stress(:) => null()
216 real(kind=kreal),
pointer :: strain(:) => null()
217 real(kind=kreal),
pointer :: mises(:) => null()
219 real(kind=kreal),
pointer :: pstress(:) => null()
220 real(kind=kreal),
pointer :: pstrain(:) => null()
221 real(kind=kreal),
pointer :: pstress_vect(:,:) => null()
222 real(kind=kreal),
pointer :: pstrain_vect(:,:) => null()
224 real(kind=kreal),
pointer :: estress(:) => null()
225 real(kind=kreal),
pointer :: estrain(:) => null()
226 real(kind=kreal),
pointer :: emises(:) => null()
227 real(kind=kreal),
pointer :: eplstrain(:) => null()
229 real(kind=kreal),
pointer :: epstress(:) => null()
230 real(kind=kreal),
pointer :: epstrain(:) => null()
231 real(kind=kreal),
pointer :: epstress_vect(:,:) => null()
232 real(kind=kreal),
pointer :: epstrain_vect(:,:) => null()
233 real(kind=kreal),
pointer :: enqm(:) => null()
242 integer(kind=kint) :: file_type
243 integer(kind=kint) :: statictype
244 integer(kind=kint) :: nstep_tot
250 integer(kind=kint) :: boundary_ngrp_tot
251 integer(kind=kint),
pointer :: boundary_ngrp_grpid (:) =>null()
252 integer(kind=kint),
pointer :: boundary_ngrp_id (:) =>null()
253 integer(kind=kint),
pointer :: boundary_ngrp_type (:) =>null()
254 integer(kind=kint),
pointer :: boundary_ngrp_amp (:) =>null()
255 real(kind=kreal),
pointer :: boundary_ngrp_val(:) =>null()
256 integer(kind=kint),
pointer :: boundary_ngrp_istot (:) =>null()
257 integer(kind=kint) :: boundary_ngrp_rot
258 integer(kind=kint),
pointer :: boundary_ngrp_rotid (:) =>null()
259 integer(kind=kint),
pointer :: boundary_ngrp_centerid (:) =>null()
262 integer(kind=kint) :: velocity_type
263 integer(kind=kint) :: velocity_ngrp_tot
264 integer(kind=kint),
pointer :: velocity_ngrp_grpid (:) =>null()
265 integer(kind=kint),
pointer :: velocity_ngrp_id (:) =>null()
266 integer(kind=kint),
pointer :: velocity_ngrp_type (:) =>null()
267 integer(kind=kint),
pointer :: velocity_ngrp_amp (:) =>null()
268 real(kind=kreal),
pointer :: velocity_ngrp_val(:) =>null()
271 integer(kind=kint) :: acceleration_type
272 integer(kind=kint) :: acceleration_ngrp_tot
273 integer(kind=kint),
pointer :: acceleration_ngrp_grpid (:) =>null()
274 integer(kind=kint),
pointer :: acceleration_ngrp_id (:) =>null()
275 integer(kind=kint),
pointer :: acceleration_ngrp_type (:) =>null()
276 integer(kind=kint),
pointer :: acceleration_ngrp_amp (:) =>null()
277 real(kind=kreal),
pointer :: acceleration_ngrp_val(:) =>null()
280 integer(kind=kint) :: cload_ngrp_tot
281 integer(kind=kint),
pointer :: cload_ngrp_grpid (:) =>null()
282 integer(kind=kint),
pointer :: cload_ngrp_id (:)
283 integer(kind=kint),
pointer :: cload_ngrp_dof (:)
284 integer(kind=kint),
pointer :: cload_ngrp_amp (:)
285 real(kind=kreal),
pointer :: cload_ngrp_val(:)
286 integer(kind=kint) :: cload_ngrp_rot
287 integer(kind=kint),
pointer :: cload_ngrp_rotid (:) =>null()
288 integer(kind=kint),
pointer :: cload_ngrp_centerid (:) =>null()
291 integer(kind=kint) :: dload_ngrp_tot
292 integer(kind=kint) :: dload_follow
293 integer(kind=kint),
pointer :: dload_ngrp_grpid (:) =>null()
294 integer(kind=kint),
pointer :: dload_ngrp_id (:)
295 integer(kind=kint),
pointer :: dload_ngrp_lid (:)
296 integer(kind=kint),
pointer :: dload_ngrp_amp (:)
297 real(kind=kreal),
pointer :: dload_ngrp_params(:,:)
300 integer(kind=kint) :: temp_ngrp_tot
301 integer(kind=kint) :: temp_irres
302 integer(kind=kint) :: temp_tstep
303 integer(kind=kint) :: temp_interval
304 integer(kind=kint) :: temp_rtype
305 real(kind=kreal) :: temp_factor
306 integer(kind=kint),
pointer :: temp_ngrp_grpid (:) =>null()
307 integer(kind=kint),
pointer :: temp_ngrp_id (:)
308 real(kind=kreal),
pointer :: temp_ngrp_val(:)
311 integer(kind=kint) :: spring_ngrp_tot
312 integer(kind=kint),
pointer :: spring_ngrp_grpid (:) =>null()
313 integer(kind=kint),
pointer :: spring_ngrp_id (:)
314 integer(kind=kint),
pointer :: spring_ngrp_dof (:)
315 integer(kind=kint),
pointer :: spring_ngrp_amp (:)
316 real(kind=kreal),
pointer :: spring_ngrp_val(:)
322 integer( kind=kint ) :: couple_ngrp_tot
323 integer( kind=kint ),
pointer :: couple_ngrp_id(:)
326 integer(kind=kint) :: maxn_gauss
328 real(kind=kreal),
pointer :: stress(:)
329 real(kind=kreal),
pointer :: strain(:)
330 real(kind=kreal),
pointer :: mises(:)
332 real(kind=kreal),
pointer :: pstress(:)
333 real(kind=kreal),
pointer :: pstrain(:)
334 real(kind=kreal),
pointer :: pstress_vect(:,:)
335 real(kind=kreal),
pointer :: pstrain_vect(:,:)
337 real(kind=kreal),
pointer :: estress(:)
338 real(kind=kreal),
pointer :: estrain(:)
339 real(kind=kreal),
pointer :: emises(:)
340 real(kind=kreal),
pointer :: eplstrain(:)
342 real(kind=kreal),
pointer :: epstress(:)
343 real(kind=kreal),
pointer :: epstrain(:)
344 real(kind=kreal),
pointer :: epstress_vect(:,:)
345 real(kind=kreal),
pointer :: epstrain_vect(:,:)
347 real(kind=kreal),
pointer :: tnstrain(:)
348 real(kind=kreal),
pointer :: testrain(:)
350 real(kind=kreal),
pointer :: yield_ratio(:)
352 real(kind=kreal),
pointer :: enqm(:)
353 real(kind=kreal),
pointer :: reaction(:)
355 real(kind=kreal),
pointer :: cont_nforce(:)
356 real(kind=kreal),
pointer :: cont_fric(:)
357 real(kind=kreal),
pointer :: cont_relvel(:)
358 real(kind=kreal),
pointer :: cont_state(:)
359 integer(kind=kint),
pointer :: cont_sgrp_id(:)
360 real(kind=kreal),
pointer :: cont_area(:)
361 real(kind=kreal),
pointer :: cont_ntrac(:)
362 real(kind=kreal),
pointer :: cont_ftrac(:)
363 real(kind=kreal),
pointer :: embed_nforce(:)
370 integer(kind=kint) :: restart_nout
373 integer(kind=kint) :: restart_nin
376 integer(kind=kint) :: max_lyr
377 integer(kind=kint) :: is_33shell
378 integer(kind=kint) :: is_33beam
379 integer(kind=kint) :: is_heat
380 integer(kind=kint) :: max_ncon_stf
381 integer(kind=kint) :: max_ncon
382 integer(kind=kint),
pointer :: is_rot(:) => null()
383 integer(kind=kint) :: elemopt361
384 logical :: is_smoothing_active
385 real(kind=kreal) :: factor(2)
388 integer(kind=kint) :: nrstat_i(10)
389 real(kind=kreal) :: nrstat_r(10)
390 integer(kind=kint) :: autoinc_stat
391 integer(kind=kint) :: cutback_stat
393 real(kind=kreal),
pointer :: gl(:)
394 real(kind=kreal),
pointer :: gl0(:)
395 real(kind=kreal),
pointer :: eforce(:)
396 real(kind=kreal),
pointer :: qforce(:)
397 real(kind=kreal),
pointer :: qforce_bak(:)
398 real(kind=kreal),
pointer :: unode(:) => null()
399 real(kind=kreal),
pointer :: unode_bak(:) => null()
400 real(kind=kreal),
pointer :: dunode(:) => null()
401 real(kind=kreal),
pointer :: ddunode(:) => null()
402 real(kind=kreal),
pointer :: temperature(:)=> null()
403 real(kind=kreal),
pointer :: temp_bak(:) => null()
404 real(kind=kreal),
pointer :: last_temp(:) => null()
407 type( tmaterial ),
pointer :: materials(:) =>null()
408 integer :: n_contacts
413 real(kind=kreal),
pointer :: mpc_const(:) =>null()
423 real(kind=kreal),
pointer :: unode_bkup(:) => null()
424 real(kind=kreal),
pointer :: qforce_bkup(:) => null()
425 real(kind=kreal),
pointer :: last_temp_bkup(:) => null()
426 type(
telement ),
pointer :: elements_bkup(:) =>null()
427 type(
tcontact ),
pointer :: contacts_bkup(:) =>null()
428 type(
tcontact ),
pointer :: embeds_bkup(:) =>null()
434 integer(kind=kint) :: is_steady
435 real(kind=kreal) :: beta
436 logical :: is_iter_max_limit
439 integer(kind=kint) :: steptot
440 integer(kind=kint) :: restart_nout
441 real(kind=kreal),
pointer :: step_dltime(:), step_eetime(:)
442 real(kind=kreal),
pointer :: step_delmin(:), step_delmax(:)
443 integer(kind=kint) :: timepoint_id
446 integer(kind=kint) :: materialtot
447 integer(kind=kint),
pointer :: rhotab(:), cptab(:), condtab(:)
448 real(kind=kreal),
pointer :: rho(:,:), rhotemp(:,:)
449 real(kind=kreal),
pointer :: cp(:,:), cptemp(:,:)
450 real(kind=kreal),
pointer :: cond(:,:),condtemp(:,:)
452 real(kind=kreal),
pointer :: rhofunca(:,:), rhofuncb(:,:)
453 real(kind=kreal),
pointer :: cpfunca(:,:), cpfuncb(:,:)
454 real(kind=kreal),
pointer :: condfunca(:,:),condfuncb(:,:)
457 integer(kind=kint) :: amplitudetot
458 integer(kind=kint),
pointer :: ampltab(:)
459 real(kind=kreal),
pointer :: ampl(:,:), ampltime(:,:)
460 real(kind=kreal),
pointer :: amplfunca(:,:), amplfuncb(:,:)
463 real(kind=kreal),
pointer :: temp0(:)
464 real(kind=kreal),
pointer :: tempc(:)
465 real(kind=kreal),
pointer :: temp(:)
468 integer(kind=kint) :: t_fix_tot
469 integer(kind=kint),
pointer :: t_fix_node(:)
470 integer(kind=kint),
pointer :: t_fix_ampl(:)
471 real(kind=kreal),
pointer :: t_fix_val(:)
474 integer(kind=kint) :: q_nod_tot
475 integer(kind=kint),
pointer :: q_nod_node(:)
476 integer(kind=kint),
pointer :: q_nod_ampl(:)
477 real(kind=kreal),
pointer :: q_nod_val(:)
480 integer(kind=kint) :: q_vol_tot
481 integer(kind=kint),
pointer :: q_vol_elem(:)
482 integer(kind=kint),
pointer :: q_vol_ampl(:)
483 real(kind=kreal),
pointer :: q_vol_val(:)
486 integer(kind=kint) :: q_suf_tot
487 integer(kind=kint),
pointer :: q_suf_elem(:)
488 integer(kind=kint),
pointer :: q_suf_ampl(:)
489 integer(kind=kint),
pointer :: q_suf_surf(:)
490 real(kind=kreal),
pointer :: q_suf_val(:)
493 integer(kind=kint) :: r_suf_tot
494 integer(kind=kint),
pointer :: r_suf_elem(:)
495 integer(kind=kint),
pointer :: r_suf_ampl(:,:)
496 integer(kind=kint),
pointer :: r_suf_surf(:)
497 real(kind=kreal),
pointer :: r_suf_val(:,:)
500 integer(kind=kint) :: h_suf_tot
501 integer(kind=kint),
pointer :: h_suf_elem(:)
502 integer(kind=kint),
pointer :: h_suf_ampl(:,:)
503 integer(kind=kint),
pointer :: h_suf_surf(:)
504 real(kind=kreal),
pointer :: h_suf_val(:,:)
506 integer(kind=kint) :: wl_tot
516 integer(kind=kint) :: idx_eqa
517 integer(kind=kint) :: idx_resp
520 integer(kind=kint) :: n_step
521 real(kind=kreal) :: t_start
522 real(kind=kreal) :: t_curr
523 real(kind=kreal) :: t_end
524 real(kind=kreal) :: t_delta
525 integer(kind=kint) :: restart_nout
528 integer(kind=kint) :: restart_nin
531 real(kind=kreal) :: gamma
532 real(kind=kreal) :: beta
535 integer(kind=kint) :: idx_mas
538 integer(kind=kint) :: idx_dmp
539 real(kind=kreal) :: ray_m
540 real(kind=kreal) :: ray_k
543 logical :: varinitialize
546 integer(kind=kint) :: nout
547 integer(kind=kint) :: ngrp_monit
548 integer(kind=kint) :: nout_monit
549 integer(kind=kint) :: i_step
550 integer(kind=kint) :: iout_list(6)
559 real(kind=kreal),
pointer :: disp(:,:)
560 real(kind=kreal),
pointer :: vel(:,:)
561 real(kind=kreal),
pointer :: acc(:,:)
563 real(kind=kreal) :: kineticenergy
564 real(kind=kreal) :: strainenergy
565 real(kind=kreal) :: totalenergy
568 real(kind=kreal),
pointer :: vec1(:)
569 real(kind=kreal),
pointer :: vec2(:)
570 real(kind=kreal),
pointer :: vec3(:)
572 integer(kind=kint) :: dynamic_iw4 = 204
573 integer(kind=kint) :: dynamic_iw5 = 205
574 integer(kind=kint) :: dynamic_iw6 = 206
575 integer(kind=kint) :: dynamic_iw7 = 207
576 integer(kind=kint) :: dynamic_iw8 = 208
577 integer(kind=kint) :: dynamic_iw9 = 209
578 integer(kind=kint) :: dynamic_iw10 = 210
582 integer(kind=kint) :: fload_ngrp_tot
583 integer(kind=kint),
pointer :: fload_ngrp_grpid(:) => null()
584 integer(kind=kint),
pointer :: fload_ngrp_id(:) => null()
585 integer(kind=kint),
pointer :: fload_ngrp_type(:) => null()
586 integer(kind=kint),
pointer :: fload_ngrp_dof(:) => null()
587 real(kind=kreal),
pointer :: fload_ngrp_valre(:) => null()
588 real(kind=kreal),
pointer :: fload_ngrp_valim(:) => null()
589 character(len=HECMW_FILENAME_LEN) :: eigenlog_filename
590 integer(kind=kint) :: start_mode
591 integer(kind=kint) :: end_mode
595 integer(kind=kint) :: nummode
596 integer(kind=kint) :: numnodedof
597 real(kind=kreal),
pointer :: eigomega(:) => null()
598 real(kind=kreal),
pointer :: eigvector(:,:) => null()
599 real(kind=kreal) :: rayalpha, raybeta
605 integer(kind=kint) :: nget
606 integer(kind=kint) :: maxiter
607 integer(kind=kint) :: iter
608 real (kind=kreal) :: sigma
609 real (kind=kreal) :: tolerance
610 real (kind=kreal) :: totalmass
611 real (kind=kreal),
pointer :: eigval(:)
612 real (kind=kreal),
pointer :: eigvec(:,:)
613 real (kind=kreal),
pointer :: filter(:)
614 real (kind=kreal),
pointer :: mass(:)
615 real (kind=kreal),
pointer :: effmass(:)
616 real (kind=kreal),
pointer :: partfactor(:)
617 logical :: is_free = .false.
623 integer( kind=kint ) :: dof
624 integer( kind=kint ) :: ndof
625 integer( kind=kint ) :: coupled_node_n
627 integer,
pointer :: coupled_node(:)
628 real( kind=8 ),pointer :: trac(:)
629 real( kind=8 ),pointer :: disp(:)
630 real( kind=8 ),pointer :: velo(:)
631 real( kind=8 ),pointer :: accel(:)
633 integer( kind=kint ),
pointer :: index(:)
639 integer(kind=kint) :: egrpid
640 real( kind=kreal ) :: i
641 real( kind=kreal ) :: u
642 real( kind=kreal ) :: coe
643 real( kind=kreal ) :: v
644 integer(kind=kint) :: xyz
645 real(kind=kreal) :: n1, n2
646 real(kind=kreal) :: distol
647 real(kind=kreal) :: tstart
656 integer :: elemopt341
660 integer :: elemopt361
677 nullify( p%global_local_ID)
678 nullify( p%timepoints )
685 nullify( s%BOUNDARY_ngrp_ID )
686 nullify( s%BOUNDARY_ngrp_type )
687 nullify( s%BOUNDARY_ngrp_amp )
688 nullify( s%BOUNDARY_ngrp_val)
689 nullify( s%BOUNDARY_ngrp_rotID )
690 nullify( s%BOUNDARY_ngrp_centerID )
691 nullify( s%CLOAD_ngrp_ID )
692 nullify( s%CLOAD_ngrp_DOF )
693 nullify( s%CLOAD_ngrp_amp )
694 nullify( s%CLOAD_ngrp_rotID )
695 nullify( s%CLOAD_ngrp_centerID )
696 nullify( s%CLOAD_ngrp_val )
697 nullify( s%DLOAD_ngrp_ID )
698 nullify( s%DLOAD_ngrp_LID )
699 nullify( s%DLOAD_ngrp_amp )
700 nullify( s%DLOAD_ngrp_params )
701 nullify( s%TEMP_ngrp_ID )
702 nullify( s%TEMP_ngrp_val )
703 nullify( s%SPRING_ngrp_ID )
704 nullify( s%SPRING_ngrp_DOF )
705 nullify( s%SPRING_ngrp_amp )
706 nullify( s%SPRING_ngrp_val )
712 nullify( s%PSTRESS_VECT )
713 nullify( s%PSTRAIN_VECT )
714 nullify( s%REACTION )
718 nullify( s%EPLSTRAIN )
719 nullify( s%EPSTRESS )
720 nullify( s%EPSTRAIN )
721 nullify( s%EPSTRESS_VECT )
722 nullify( s%EPSTRAIN_VECT )
727 nullify( s%VELOCITY_ngrp_ID )
728 nullify( s%VELOCITY_ngrp_type )
729 nullify( s%VELOCITY_ngrp_amp )
730 nullify( s%VELOCITY_ngrp_val )
731 nullify( s%ACCELERATION_ngrp_ID )
732 nullify( s%ACCELERATION_ngrp_type )
733 nullify( s%ACCELERATION_ngrp_amp )
734 nullify( s%ACCELERATION_ngrp_val )
735 nullify( s%COUPLE_ngrp_ID )
742 nullify( h%STEP_DLTIME )
743 nullify( h%STEP_EETIME )
744 nullify( h%STEP_DELMIN )
745 nullify( h%STEP_DELMAX )
751 nullify( h%CONDtemp )
755 nullify( h%RHOfuncA )
756 nullify( h%RHOfuncB )
759 nullify( h%CONDfuncA )
760 nullify( h%CONDfuncB )
762 nullify( h%AMPLtime )
764 nullify( h%AMPLfuncA )
765 nullify( h%AMPLfuncB )
769 nullify( h%T_FIX_node )
770 nullify( h%T_FIX_ampl )
771 nullify( h%T_FIX_val )
772 nullify( h%Q_NOD_node )
773 nullify( h%Q_NOD_ampl )
774 nullify( h%Q_NOD_val )
775 nullify( h%Q_VOL_elem )
776 nullify( h%Q_VOL_ampl )
777 nullify( h%Q_VOL_val )
778 nullify( h%Q_SUF_elem )
779 nullify( h%Q_SUF_ampl )
780 nullify( h%Q_SUF_surf )
781 nullify( h%Q_SUF_val )
782 nullify( h%R_SUF_elem )
783 nullify( h%R_SUF_ampl )
784 nullify( h%R_SUF_surf )
785 nullify( h%R_SUF_val )
786 nullify( h%H_SUF_elem )
787 nullify( h%H_SUF_ampl )
788 nullify( h%H_SUF_surf )
789 nullify( h%H_SUF_val )
809 nullify( f%FLOAD_ngrp_GRPID )
810 nullify( f%FLOAD_ngrp_ID )
811 nullify( f%FLOAD_ngrp_TYPE )
812 nullify( f%FLOAD_ngrp_DOF )
813 nullify( f%FLOAD_ngrp_valre )
814 nullify( f%FLOAD_ngrp_valim )
828 nullify( c%coupled_node )
837 type(hecmwst_matrix) :: hecMAT
839 hecmat%Iarray(1) = 100
844 hecmat%Iarray(6) = 10
846 hecmat%Iarray(21)=
kno
847 hecmat%Iarray(22)=
kno
851 hecmat%Iarray(34)= 10
862 hecmat%Rarray(1) = 1.0e-8
863 hecmat%Rarray(2) = 1.0
864 hecmat%Rarray(3) = 0.0
865 hecmat%Rarray(4) = 0.1
866 hecmat%Rarray(5) = 0.1
867 hecmat%Rarray(11)= 1.0e+4
869 hecmat%Iarray(96) = 0
870 hecmat%Iarray(97) =
kyes
871 hecmat%Iarray(98) =
kyes
872 hecmat%Iarray(99) =
kyes
877 type( hecmwst_matrix ) :: hecMAT
878 integer :: ndof, nn, ierror
881 allocate (hecmat%AL(nn*hecmat%NPL) ,stat=ierror )
882 if( ierror /= 0 )
then
883 write(*,*)
"##ERROR : not enough memory"
884 write(
idbg,*)
'stop due to allocation error'
886 call hecmw_abort( hecmw_comm_get_comm() )
888 allocate (hecmat%AU(nn*hecmat%NPU) ,stat=ierror )
889 if( ierror /= 0 )
then
890 write(*,*)
"##ERROR : not enough memory"
891 write(
idbg,*)
'stop due to allocation error'
893 call hecmw_abort( hecmw_comm_get_comm() )
895 allocate (hecmat%B(ndof*hecmat%NP) ,stat=ierror )
896 if( ierror /= 0 )
then
897 write(*,*)
"##ERROR : not enough memory"
898 write(
idbg,*)
'stop due to allocation error'
900 call hecmw_abort( hecmw_comm_get_comm() )
903 allocate (hecmat%D(nn*hecmat%NP) ,stat=ierror )
904 if( ierror /= 0 )
then
905 write(*,*)
"##ERROR : not enough memory"
906 write(
idbg,*)
'stop due to allocation error'
908 call hecmw_abort( hecmw_comm_get_comm() )
910 allocate (hecmat%X(ndof*hecmat%NP) ,stat=ierror )
911 if( ierror /= 0 )
then
912 write(*,*)
"##ERROR : not enough memory"
913 write(
idbg,*)
'stop due to allocation error'
915 call hecmw_abort( hecmw_comm_get_comm() )
926 type( hecmwst_matrix ) :: hecMAT
927 integer :: ndof, nn, ierror
930 if(
associated(hecmat%AL) )
then
931 deallocate(hecmat%AL ,stat=ierror)
932 if( ierror /= 0 )
then
933 write(
idbg,*)
'stop due to deallocation error'
935 call hecmw_abort( hecmw_comm_get_comm())
938 if(
associated(hecmat%AU) )
then
939 deallocate(hecmat%AU ,stat=ierror)
940 if( ierror /= 0 )
then
941 write(
idbg,*)
'stop due to deallocation error'
943 call hecmw_abort( hecmw_comm_get_comm())
946 if(
associated(hecmat%B) )
then
947 deallocate(hecmat%B ,stat=ierror)
948 if( ierror /= 0 )
then
949 write(
idbg,*)
'stop due to deallocation error'
951 call hecmw_abort( hecmw_comm_get_comm())
954 if(
associated(hecmat%D) )
then
955 deallocate(hecmat%D ,stat=ierror)
956 if( ierror /= 0 )
then
957 write(
idbg,*)
'stop due to deallocation error'
959 call hecmw_abort( hecmw_comm_get_comm())
962 if(
associated(hecmat%X) )
then
963 deallocate(hecmat%X ,stat=ierror)
964 if( ierror /= 0 )
then
965 write(
idbg,*)
'stop due to deallocation error'
967 call hecmw_abort( hecmw_comm_get_comm())
976 type(hecmwst_local_mesh) :: hecMESH
977 integer(kind=kint) :: i
978 external fstr_sort_index
981 fstrparam%nlgeom = .false.
982 fstrparam%solver_method =
ksmcg
986 fstrparam%analysis_n = 0
987 fstrparam%ref_temp = 0
990 fstrparam%fg_echo =
koff
991 fstrparam%fg_result =
koff
992 fstrparam%fg_visual =
koff
995 fstrparam%fg_neutral =
koff
996 fstrparam%fg_irres =
kno
997 fstrparam%fg_iwres =
kno
1002 fstrparam%fg_couple = 0
1003 fstrparam%fg_couple_type = 0
1004 fstrparam%fg_couple_first= 0
1005 fstrparam%fg_couple_window= 0
1008 fstrparam%restart_version = 5
1012 fstrparam%augiter = 2
1016 fstrparam%n_node = hecmesh%n_node;
1017 fstrparam%nn_internal = hecmesh%nn_internal;
1018 allocate( fstrparam%global_local_ID(2,hecmesh%nn_internal))
1019 do i = 1, hecmesh%nn_internal
1020 fstrparam%global_local_ID(1,i) = hecmesh%global_node_ID(i)
1021 fstrparam%global_local_ID(2,i) = i
1023 call fstr_sort_index( fstrparam%global_local_ID, hecmesh%nn_internal )
1028 integer,
intent(in) :: nbc
1029 integer,
intent(in) :: cstep
1031 if( .not.
associated(fstrsolid%step_ctrl) )
return
1032 if( cstep>fstrsolid%nstep_tot )
return
1038 integer,
intent(in) :: nbc
1039 integer,
intent(in) :: cstep
1041 if( cstep > 0 )
then
1042 if( .not.
associated(fstrsolid%step_ctrl) )
return
1043 if( cstep>fstrsolid%nstep_tot )
return
1052 integer,
intent(in) :: nbc
1053 integer,
intent(in) :: cstep
1055 if( .not.
associated(fstrsolid%step_ctrl) )
return
1056 if( cstep>fstrsolid%nstep_tot )
return
1062 integer,
intent(in) :: nbc
1063 integer,
intent(in) :: cstep
1065 if( .not.
associated(fstrsolid%step_ctrl) )
return
1066 if( cstep>fstrsolid%nstep_tot )
return
1072 integer,
intent(in) :: nbc
1073 integer,
intent(in) :: cstep
1075 if( .not.
associated(fstrsolid%step_ctrl) )
return
1076 if( cstep>fstrsolid%nstep_tot )
return
1082 integer,
intent(in) :: cdsys_ID
1083 type(hecmwst_local_mesh) :: hecMESH
1085 real(kind=kreal),
intent(out) :: coords(3,3)
1089 if( cdsys_id>0 )
then
1094 coords(1,:)= hecmesh%node(3*ik-2:3*ik)+fstrsolid%unode(3*ik-2:3*ik) &
1095 + fstrsolid%dunode(3*ik-2:3*ik)
1097 coords(2,:)= hecmesh%node(3*ik-2:3*ik)+fstrsolid%unode(3*ik-2:3*ik) &
1098 + fstrsolid%dunode(3*ik-2:3*ik)
1100 if(ik>0) coords(3,:)= hecmesh%node(3*ik-2:3*ik)+fstrsolid%unode(3*ik-2:3*ik) &
1101 + fstrsolid%dunode(3*ik-2:3*ik)
1108 type(hecmwst_local_mesh),
intent(inout) :: hecMESH
1109 type (fstr_solid),
intent(in) :: fstrSOLID
1110 real(kind=kreal),
intent(out) :: coord(:)
1111 integer(kind=kint) :: i
1112 if(hecmesh%n_dof == 4)
return
1113 do i = 1, hecmesh%nn_internal*min(hecmesh%n_dof,3)
1114 coord(i) = hecmesh%node(i)
1115 hecmesh%node(i) = coord(i)+fstrsolid%unode(i)+fstrsolid%dunode(i)
1121 type(hecmwst_local_mesh),
intent(inout) :: hecMESH
1122 type (fstr_solid),
intent(in) :: fstrSOLID
1123 real(kind=kreal),
intent(in) :: coord(:)
1124 integer(kind=kint) :: i
1125 if(hecmesh%n_dof == 4)
return
1126 do i = 1, hecmesh%nn_internal*min(hecmesh%n_dof,3)
1127 hecmesh%node(i) = coord(i)
1137 phys%ESTRAIN = 0.0d0
1138 phys%ESTRESS = 0.0d0
1140 phys%EPLSTRAIN = 0.0d0
1146 type (fstr_solid) :: fstrSOLID
1147 integer(kind=kint) :: i
1149 if (
associated(fstrsolid%SOLID))
then
1152 if (
associated(fstrsolid%SHELL))
then
1154 do i=1,fstrsolid%max_lyr
1159 if (
associated(fstrsolid%BEAM))
then
1164 subroutine table_amp(hecMESH, fstrSOLID, cstep, jj_n_amp, time, f_t)
1165 type ( hecmwST_local_mesh ),
intent(in) :: hecMESH
1166 type ( fstr_solid ),
intent(in) :: fstrSOLID
1167 integer(kind=kint),
intent(in) :: cstep
1168 integer(kind=kint),
intent(in) :: jj_n_amp
1169 real(kind=kreal),
intent(in) :: time
1170 real(kind=kreal),
intent(out) :: f_t
1172 integer(kind=kint) :: i
1173 integer(kind=kint) :: jj1, jj2
1174 integer(kind=kint) :: s1, s2, flag
1175 real(kind=kreal) :: t_1, t_2, t_t, f_1, f_2, tincre
1179 if( jj_n_amp <= 0 )
then
1181 write(
imsg,*)
'internal error: amplitude table not defined'
1183 call hecmw_abort( hecmw_comm_get_comm() )
1186 tincre = fstrsolid%step_ctrl( cstep )%initdt
1187 jj1 = hecmesh%amp%amp_index(jj_n_amp - 1)
1188 jj2 = hecmesh%amp%amp_index(jj_n_amp)
1191 t_t = time-fstrsolid%step_ctrl(cstep)%starttime
1195 if(t_t .gt. hecmesh%amp%amp_table(jj2))
then
1196 f_t = hecmesh%amp%amp_val(jj2)
1197 else if(t_t .le. hecmesh%amp%amp_table(jj2))
then
1200 if(t_t .le. hecmesh%amp%amp_table(i))
then
1205 if( flag == 1 )
exit
1208 t_2 = hecmesh%amp%amp_table(s2)
1209 t_1 = hecmesh%amp%amp_table(s1)
1210 f_2 = hecmesh%amp%amp_val(s2)
1211 f_1 = hecmesh%amp%amp_val(s1)
1212 if( t_2-t_1 .lt. 1.0e-20)
then
1214 write(
imsg,*)
'stop due to t_2-t_1 <= 0'
1216 call hecmw_abort( hecmw_comm_get_comm())
1218 f_t = ((t_2*f_1 - t_1*f_2) + (f_2 - f_1)*t_t) / (t_2 - t_1)
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 get_coordsys(cdsys_ID, hecMESH, fstrSOLID, coords)
This subroutine fetch coords defined by local coordinate system.
subroutine fstr_nullify_fstr_couple(C)
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 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
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.
integer(kind=kint), parameter kbcfnastran
integer(kind=kint), parameter kel361ic
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
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
subroutine fstr_nullify_fstr_freqanalysis(f)
integer(kind=kint), parameter ksmdirect
subroutine table_amp(hecMESH, fstrSOLID, cstep, jj_n_amp, time, f_t)
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
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.
Time points storage for output etc.
All data should be recorded in every elements.