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
39 integer(kind=kint),
parameter ::
kstheat = 3
46 integer(kind=kint),
parameter ::
ksmcg = 1
107 integer(kind=kint),
parameter ::
ilog = 16
108 integer(kind=kint),
parameter ::
ista = 17
109 integer(kind=kint),
parameter ::
iutb = 18
110 integer(kind=kint),
parameter ::
imsg = 51
111 integer(kind=kint),
parameter ::
idbg = 52
112 integer(kind=kint),
parameter ::
ifvs = 53
113 integer(kind=kint),
parameter ::
ineu = 54
114 integer(kind=kint),
parameter ::
iresout = 100
121 integer(kind=kint),
pointer ::
iecho
125 integer(kind=kint),
pointer ::
irres
126 integer(kind=kint),
pointer ::
iwres
127 integer(kind=kint),
pointer ::
nrres
139 real(kind=kreal) ::
dt
145 character(len=HECMW_FILENAME_LEN) :: cond_name
148 integer,
pointer :: intval(:) => null()
149 real(kind=kreal),
pointer :: realval(:) => null()
155 integer(kind=kint) :: solution_type
156 integer(kind=kint) :: solver_method
157 integer(kind=kint) :: nlsolver_method
161 integer(kind=kint) :: analysis_n
162 real(kind=kreal),
pointer :: dtime(:)
163 real(kind=kreal),
pointer ::
etime(:)
164 real(kind=kreal),
pointer :: dtmin(:)
165 real(kind=kreal),
pointer :: delmax(:)
166 integer(kind=kint),
pointer::
itmax(:)
167 real(kind=kreal),
pointer ::
eps(:)
169 integer(kind=kint) :: timepoint_id
172 integer(kind=kint) :: fg_echo
173 integer(kind=kint) :: fg_result
174 integer(kind=kint) :: fg_visual
177 integer(kind=kint) :: fg_neutral
178 integer(kind=kint) :: fg_irres
179 integer(kind=kint) :: fg_iwres
184 integer(kind=kint) :: n_node
185 integer(kind=kint) :: nn_internal
186 integer(kind=kint),
pointer :: global_local_id(:,:)
189 integer( kind=kint ) :: fg_couple
190 integer( kind=kint ) :: fg_couple_type
191 integer( kind=kint ) :: fg_couple_first
192 integer( kind=kint ) :: fg_couple_window
195 integer( kind=kint ) :: restart_out_type
196 integer( kind=kint ) :: restart_version
199 integer( kind=kint ) :: contact_algo
200 type(tcontactparam),
pointer :: contactparam(:)
201 type(tcontactinterference),
pointer :: contact_if(:)
213 real(kind=kreal),
pointer :: stress(:) => null()
214 real(kind=kreal),
pointer :: strain(:) => null()
215 real(kind=kreal),
pointer :: mises(:) => null()
217 real(kind=kreal),
pointer :: pstress(:) => null()
218 real(kind=kreal),
pointer :: pstrain(:) => null()
219 real(kind=kreal),
pointer :: pstress_vect(:,:) => null()
220 real(kind=kreal),
pointer :: pstrain_vect(:,:) => null()
222 real(kind=kreal),
pointer :: estress(:) => null()
223 real(kind=kreal),
pointer :: estrain(:) => null()
224 real(kind=kreal),
pointer :: emises(:) => null()
225 real(kind=kreal),
pointer :: eplstrain(:) => null()
227 real(kind=kreal),
pointer :: epstress(:) => null()
228 real(kind=kreal),
pointer :: epstrain(:) => null()
229 real(kind=kreal),
pointer :: epstress_vect(:,:) => null()
230 real(kind=kreal),
pointer :: epstrain_vect(:,:) => null()
231 real(kind=kreal),
pointer :: enqm(:) => null()
240 integer(kind=kint) :: file_type
241 integer(kind=kint) :: statictype
242 integer(kind=kint) :: nstep_tot
248 integer(kind=kint) :: boundary_ngrp_tot
249 integer(kind=kint),
pointer :: boundary_ngrp_grpid (:) =>null()
250 integer(kind=kint),
pointer :: boundary_ngrp_id (:) =>null()
251 integer(kind=kint),
pointer :: boundary_ngrp_type (:) =>null()
252 integer(kind=kint),
pointer :: boundary_ngrp_amp (:) =>null()
253 real(kind=kreal),
pointer :: boundary_ngrp_val(:) =>null()
254 integer(kind=kint),
pointer :: boundary_ngrp_istot (:) =>null()
255 integer(kind=kint) :: boundary_ngrp_rot
256 integer(kind=kint),
pointer :: boundary_ngrp_rotid (:) =>null()
257 integer(kind=kint),
pointer :: boundary_ngrp_centerid (:) =>null()
260 integer(kind=kint) :: velocity_type
261 integer(kind=kint) :: velocity_ngrp_tot
262 integer(kind=kint),
pointer :: velocity_ngrp_grpid (:) =>null()
263 integer(kind=kint),
pointer :: velocity_ngrp_id (:) =>null()
264 integer(kind=kint),
pointer :: velocity_ngrp_type (:) =>null()
265 integer(kind=kint),
pointer :: velocity_ngrp_amp (:) =>null()
266 real(kind=kreal),
pointer :: velocity_ngrp_val(:) =>null()
269 integer(kind=kint) :: acceleration_type
270 integer(kind=kint) :: acceleration_ngrp_tot
271 integer(kind=kint),
pointer :: acceleration_ngrp_grpid (:) =>null()
272 integer(kind=kint),
pointer :: acceleration_ngrp_id (:) =>null()
273 integer(kind=kint),
pointer :: acceleration_ngrp_type (:) =>null()
274 integer(kind=kint),
pointer :: acceleration_ngrp_amp (:) =>null()
275 real(kind=kreal),
pointer :: acceleration_ngrp_val(:) =>null()
278 integer(kind=kint) :: cload_ngrp_tot
279 integer(kind=kint),
pointer :: cload_ngrp_grpid (:) =>null()
280 integer(kind=kint),
pointer :: cload_ngrp_id (:)
281 integer(kind=kint),
pointer :: cload_ngrp_dof (:)
282 integer(kind=kint),
pointer :: cload_ngrp_amp (:)
283 real(kind=kreal),
pointer :: cload_ngrp_val(:)
284 integer(kind=kint) :: cload_ngrp_rot
285 integer(kind=kint),
pointer :: cload_ngrp_rotid (:) =>null()
286 integer(kind=kint),
pointer :: cload_ngrp_centerid (:) =>null()
289 integer(kind=kint) :: dload_ngrp_tot
290 integer(kind=kint) :: dload_follow
291 integer(kind=kint),
pointer :: dload_ngrp_grpid (:) =>null()
292 integer(kind=kint),
pointer :: dload_ngrp_id (:)
293 integer(kind=kint),
pointer :: dload_ngrp_lid (:)
294 integer(kind=kint),
pointer :: dload_ngrp_amp (:)
295 real(kind=kreal),
pointer :: dload_ngrp_params(:,:)
298 integer(kind=kint) :: temp_ngrp_tot
299 integer(kind=kint) :: temp_irres
300 integer(kind=kint) :: temp_tstep
301 integer(kind=kint) :: temp_interval
302 integer(kind=kint) :: temp_rtype
303 real(kind=kreal) :: temp_factor
304 integer(kind=kint),
pointer :: temp_ngrp_grpid (:) =>null()
305 integer(kind=kint),
pointer :: temp_ngrp_id (:)
306 real(kind=kreal),
pointer :: temp_ngrp_val(:)
309 integer(kind=kint) :: spring_ngrp_tot
310 integer(kind=kint),
pointer :: spring_ngrp_grpid (:) =>null()
311 integer(kind=kint),
pointer :: spring_ngrp_id (:)
312 integer(kind=kint),
pointer :: spring_ngrp_dof (:)
313 integer(kind=kint),
pointer :: spring_ngrp_amp (:)
314 real(kind=kreal),
pointer :: spring_ngrp_val(:)
317 integer( kind=kint ) :: couple_ngrp_tot
318 integer( kind=kint ),
pointer :: couple_ngrp_id(:)
321 integer(kind=kint) :: maxn_gauss
323 real(kind=kreal),
pointer :: stress(:)
324 real(kind=kreal),
pointer :: strain(:)
325 real(kind=kreal),
pointer :: mises(:)
327 real(kind=kreal),
pointer :: pstress(:)
328 real(kind=kreal),
pointer :: pstrain(:)
329 real(kind=kreal),
pointer :: pstress_vect(:,:)
330 real(kind=kreal),
pointer :: pstrain_vect(:,:)
332 real(kind=kreal),
pointer :: estress(:)
333 real(kind=kreal),
pointer :: estrain(:)
334 real(kind=kreal),
pointer :: emises(:)
336 real(kind=kreal),
pointer :: epstress(:)
337 real(kind=kreal),
pointer :: epstrain(:)
338 real(kind=kreal),
pointer :: epstress_vect(:,:)
339 real(kind=kreal),
pointer :: epstrain_vect(:,:)
341 real(kind=kreal),
pointer :: tnstrain(:)
342 real(kind=kreal),
pointer :: testrain(:)
344 real(kind=kreal),
pointer :: yield_ratio(:)
346 real(kind=kreal),
pointer :: enqm(:)
347 real(kind=kreal),
pointer :: reaction(:)
349 real(kind=kreal),
pointer :: cont_nforce(:)
350 real(kind=kreal),
pointer :: cont_fric(:)
351 real(kind=kreal),
pointer :: cont_relvel(:)
352 real(kind=kreal),
pointer :: cont_state(:)
353 integer(kind=kint),
pointer :: cont_sgrp_id(:)
354 real(kind=kreal),
pointer :: cont_area(:)
355 real(kind=kreal),
pointer :: cont_ntrac(:)
356 real(kind=kreal),
pointer :: cont_ftrac(:)
357 real(kind=kreal),
pointer :: embed_nforce(:)
364 integer(kind=kint) :: restart_nout
367 integer(kind=kint) :: restart_nin
370 integer(kind=kint) :: max_lyr
371 integer(kind=kint) :: is_33shell
372 integer(kind=kint) :: is_33beam
373 integer(kind=kint) :: is_heat
374 integer(kind=kint) :: max_ncon_stf
375 integer(kind=kint) :: max_ncon
376 integer(kind=kint),
pointer :: is_rot(:) => null()
377 integer(kind=kint) :: elemopt361
378 logical :: is_smoothing_active
379 real(kind=kreal) :: factor(2)
382 integer(kind=kint) :: nrstat_i(10)
383 real(kind=kreal) :: nrstat_r(10)
384 integer(kind=kint) :: autoinc_stat
385 integer(kind=kint) :: cutback_stat
387 real(kind=kreal),
pointer :: gl(:)
388 real(kind=kreal),
pointer :: gl0(:)
389 real(kind=kreal),
pointer :: eforce(:)
390 real(kind=kreal),
pointer :: qforce(:)
391 real(kind=kreal),
pointer :: qforce_bak(:)
392 real(kind=kreal),
pointer :: unode(:) => null()
393 real(kind=kreal),
pointer :: unode_bak(:) => null()
394 real(kind=kreal),
pointer :: dunode(:) => null()
395 real(kind=kreal),
pointer :: ddunode(:) => null()
396 real(kind=kreal),
pointer :: temperature(:)=> null()
397 real(kind=kreal),
pointer :: temp_bak(:) => null()
398 real(kind=kreal),
pointer :: last_temp(:) => null()
401 type( tmaterial ),
pointer :: materials(:) =>null()
402 integer :: n_contacts
407 real(kind=kreal),
pointer :: mpc_const(:) =>null()
417 real(kind=kreal),
pointer :: unode_bkup(:) => null()
418 real(kind=kreal),
pointer :: qforce_bkup(:) => null()
419 real(kind=kreal),
pointer :: last_temp_bkup(:) => null()
420 type(
telement ),
pointer :: elements_bkup(:) =>null()
421 type(
tcontact ),
pointer :: contacts_bkup(:) =>null()
422 type(
tcontact ),
pointer :: embeds_bkup(:) =>null()
428 integer(kind=kint) :: is_steady
429 real(kind=kreal) :: beta
430 logical :: is_iter_max_limit
433 integer(kind=kint) :: steptot
434 integer(kind=kint) :: restart_nout
435 real(kind=kreal),
pointer :: step_dltime(:), step_eetime(:)
436 real(kind=kreal),
pointer :: step_delmin(:), step_delmax(:)
437 integer(kind=kint) :: timepoint_id
440 integer(kind=kint) :: materialtot
441 integer(kind=kint),
pointer :: rhotab(:), cptab(:), condtab(:)
442 real(kind=kreal),
pointer :: rho(:,:), rhotemp(:,:)
443 real(kind=kreal),
pointer :: cp(:,:), cptemp(:,:)
444 real(kind=kreal),
pointer :: cond(:,:),condtemp(:,:)
446 real(kind=kreal),
pointer :: rhofunca(:,:), rhofuncb(:,:)
447 real(kind=kreal),
pointer :: cpfunca(:,:), cpfuncb(:,:)
448 real(kind=kreal),
pointer :: condfunca(:,:),condfuncb(:,:)
451 integer(kind=kint) :: amplitudetot
452 integer(kind=kint),
pointer :: ampltab(:)
453 real(kind=kreal),
pointer :: ampl(:,:), ampltime(:,:)
454 real(kind=kreal),
pointer :: amplfunca(:,:), amplfuncb(:,:)
457 real(kind=kreal),
pointer :: temp0(:)
458 real(kind=kreal),
pointer :: tempc(:)
459 real(kind=kreal),
pointer :: temp(:)
462 integer(kind=kint) :: t_fix_tot
463 integer(kind=kint),
pointer :: t_fix_node(:)
464 integer(kind=kint),
pointer :: t_fix_ampl(:)
465 real(kind=kreal),
pointer :: t_fix_val(:)
468 integer(kind=kint) :: q_nod_tot
469 integer(kind=kint),
pointer :: q_nod_node(:)
470 integer(kind=kint),
pointer :: q_nod_ampl(:)
471 real(kind=kreal),
pointer :: q_nod_val(:)
474 integer(kind=kint) :: q_vol_tot
475 integer(kind=kint),
pointer :: q_vol_elem(:)
476 integer(kind=kint),
pointer :: q_vol_ampl(:)
477 real(kind=kreal),
pointer :: q_vol_val(:)
480 integer(kind=kint) :: q_suf_tot
481 integer(kind=kint),
pointer :: q_suf_elem(:)
482 integer(kind=kint),
pointer :: q_suf_ampl(:)
483 integer(kind=kint),
pointer :: q_suf_surf(:)
484 real(kind=kreal),
pointer :: q_suf_val(:)
487 integer(kind=kint) :: r_suf_tot
488 integer(kind=kint),
pointer :: r_suf_elem(:)
489 integer(kind=kint),
pointer :: r_suf_ampl(:,:)
490 integer(kind=kint),
pointer :: r_suf_surf(:)
491 real(kind=kreal),
pointer :: r_suf_val(:,:)
494 integer(kind=kint) :: h_suf_tot
495 integer(kind=kint),
pointer :: h_suf_elem(:)
496 integer(kind=kint),
pointer :: h_suf_ampl(:,:)
497 integer(kind=kint),
pointer :: h_suf_surf(:)
498 real(kind=kreal),
pointer :: h_suf_val(:,:)
500 integer(kind=kint) :: wl_tot
507 integer(kind=kint) :: idx_eqa
508 integer(kind=kint) :: idx_resp
511 integer(kind=kint) :: n_step
512 real(kind=kreal) :: t_start
513 real(kind=kreal) :: t_curr
514 real(kind=kreal) :: t_end
515 real(kind=kreal) :: t_delta
516 integer(kind=kint) :: restart_nout
519 integer(kind=kint) :: restart_nin
522 real(kind=kreal) :: gamma
523 real(kind=kreal) :: beta
526 integer(kind=kint) :: idx_mas
529 integer(kind=kint) :: idx_dmp
530 real(kind=kreal) :: ray_m
531 real(kind=kreal) :: ray_k
534 logical :: varinitialize
537 integer(kind=kint) :: nout
538 integer(kind=kint) :: ngrp_monit
539 integer(kind=kint) :: nout_monit
540 integer(kind=kint) :: i_step
541 integer(kind=kint) :: iout_list(6)
550 real(kind=kreal),
pointer :: disp(:,:)
551 real(kind=kreal),
pointer :: vel(:,:)
552 real(kind=kreal),
pointer :: acc(:,:)
554 real(kind=kreal) :: kineticenergy
555 real(kind=kreal) :: strainenergy
556 real(kind=kreal) :: totalenergy
559 real(kind=kreal),
pointer :: vec1(:)
560 real(kind=kreal),
pointer :: vec2(:)
561 real(kind=kreal),
pointer :: vec3(:)
563 integer(kind=kint) :: dynamic_iw4 = 204
564 integer(kind=kint) :: dynamic_iw5 = 205
565 integer(kind=kint) :: dynamic_iw6 = 206
566 integer(kind=kint) :: dynamic_iw7 = 207
567 integer(kind=kint) :: dynamic_iw8 = 208
568 integer(kind=kint) :: dynamic_iw9 = 209
569 integer(kind=kint) :: dynamic_iw10 = 210
573 integer(kind=kint) :: fload_ngrp_tot
574 integer(kind=kint),
pointer :: fload_ngrp_grpid(:) => null()
575 integer(kind=kint),
pointer :: fload_ngrp_id(:) => null()
576 integer(kind=kint),
pointer :: fload_ngrp_type(:) => null()
577 integer(kind=kint),
pointer :: fload_ngrp_dof(:) => null()
578 real(kind=kreal),
pointer :: fload_ngrp_valre(:) => null()
579 real(kind=kreal),
pointer :: fload_ngrp_valim(:) => null()
580 character(len=HECMW_FILENAME_LEN) :: eigenlog_filename
581 integer(kind=kint) :: start_mode
582 integer(kind=kint) :: end_mode
586 integer(kind=kint) :: nummode
587 integer(kind=kint) :: numnodedof
588 real(kind=kreal),
pointer :: eigomega(:) => null()
589 real(kind=kreal),
pointer :: eigvector(:,:) => null()
590 real(kind=kreal) :: rayalpha, raybeta
596 integer(kind=kint) :: nget
597 integer(kind=kint) :: maxiter
598 integer(kind=kint) :: iter
599 real (kind=kreal) :: sigma
600 real (kind=kreal) :: tolerance
601 real (kind=kreal) :: totalmass
602 real (kind=kreal),
pointer :: eigval(:)
603 real (kind=kreal),
pointer :: eigvec(:,:)
604 real (kind=kreal),
pointer :: filter(:)
605 real (kind=kreal),
pointer :: mass(:)
606 real (kind=kreal),
pointer :: effmass(:)
607 real (kind=kreal),
pointer :: partfactor(:)
608 logical :: is_free = .false.
614 integer( kind=kint ) :: dof
615 integer( kind=kint ) :: ndof
616 integer( kind=kint ) :: coupled_node_n
618 integer,
pointer :: coupled_node(:)
619 real( kind=8 ),pointer :: trac(:)
620 real( kind=8 ),pointer :: disp(:)
621 real( kind=8 ),pointer :: velo(:)
622 real( kind=8 ),pointer :: accel(:)
624 integer( kind=kint ),
pointer :: index(:)
630 integer(kind=kint) :: egrpid
631 real( kind=kreal ) :: i
632 real( kind=kreal ) :: u
633 real( kind=kreal ) :: coe
634 real( kind=kreal ) :: v
635 integer(kind=kint) :: xyz
636 real(kind=kreal) :: n1, n2
637 real(kind=kreal) :: distol
638 real(kind=kreal) :: tstart
647 integer :: elemopt341
651 integer :: elemopt361
668 nullify( p%global_local_ID)
669 nullify( p%timepoints )
676 nullify( s%BOUNDARY_ngrp_ID )
677 nullify( s%BOUNDARY_ngrp_type )
678 nullify( s%BOUNDARY_ngrp_amp )
679 nullify( s%BOUNDARY_ngrp_val)
680 nullify( s%BOUNDARY_ngrp_rotID )
681 nullify( s%BOUNDARY_ngrp_centerID )
682 nullify( s%CLOAD_ngrp_ID )
683 nullify( s%CLOAD_ngrp_DOF )
684 nullify( s%CLOAD_ngrp_amp )
685 nullify( s%CLOAD_ngrp_rotID )
686 nullify( s%CLOAD_ngrp_centerID )
687 nullify( s%CLOAD_ngrp_val )
688 nullify( s%DLOAD_ngrp_ID )
689 nullify( s%DLOAD_ngrp_LID )
690 nullify( s%DLOAD_ngrp_amp )
691 nullify( s%DLOAD_ngrp_params )
692 nullify( s%TEMP_ngrp_ID )
693 nullify( s%TEMP_ngrp_val )
694 nullify( s%SPRING_ngrp_ID )
695 nullify( s%SPRING_ngrp_DOF )
696 nullify( s%SPRING_ngrp_amp )
697 nullify( s%SPRING_ngrp_val )
703 nullify( s%PSTRESS_VECT )
704 nullify( s%PSTRAIN_VECT )
705 nullify( s%REACTION )
709 nullify( s%EPSTRESS )
710 nullify( s%EPSTRAIN )
711 nullify( s%EPSTRESS_VECT )
712 nullify( s%EPSTRAIN_VECT )
717 nullify( s%VELOCITY_ngrp_ID )
718 nullify( s%VELOCITY_ngrp_type )
719 nullify( s%VELOCITY_ngrp_amp )
720 nullify( s%VELOCITY_ngrp_val )
721 nullify( s%ACCELERATION_ngrp_ID )
722 nullify( s%ACCELERATION_ngrp_type )
723 nullify( s%ACCELERATION_ngrp_amp )
724 nullify( s%ACCELERATION_ngrp_val )
725 nullify( s%COUPLE_ngrp_ID )
732 nullify( h%STEP_DLTIME )
733 nullify( h%STEP_EETIME )
734 nullify( h%STEP_DELMIN )
735 nullify( h%STEP_DELMAX )
741 nullify( h%CONDtemp )
745 nullify( h%RHOfuncA )
746 nullify( h%RHOfuncB )
749 nullify( h%CONDfuncA )
750 nullify( h%CONDfuncB )
752 nullify( h%AMPLtime )
754 nullify( h%AMPLfuncA )
755 nullify( h%AMPLfuncB )
759 nullify( h%T_FIX_node )
760 nullify( h%T_FIX_ampl )
761 nullify( h%T_FIX_val )
762 nullify( h%Q_NOD_node )
763 nullify( h%Q_NOD_ampl )
764 nullify( h%Q_NOD_val )
765 nullify( h%Q_VOL_elem )
766 nullify( h%Q_VOL_ampl )
767 nullify( h%Q_VOL_val )
768 nullify( h%Q_SUF_elem )
769 nullify( h%Q_SUF_ampl )
770 nullify( h%Q_SUF_surf )
771 nullify( h%Q_SUF_val )
772 nullify( h%R_SUF_elem )
773 nullify( h%R_SUF_ampl )
774 nullify( h%R_SUF_surf )
775 nullify( h%R_SUF_val )
776 nullify( h%H_SUF_elem )
777 nullify( h%H_SUF_ampl )
778 nullify( h%H_SUF_surf )
779 nullify( h%H_SUF_val )
799 nullify( f%FLOAD_ngrp_GRPID )
800 nullify( f%FLOAD_ngrp_ID )
801 nullify( f%FLOAD_ngrp_TYPE )
802 nullify( f%FLOAD_ngrp_DOF )
803 nullify( f%FLOAD_ngrp_valre )
804 nullify( f%FLOAD_ngrp_valim )
818 nullify( c%coupled_node )
827 type(hecmwst_matrix) :: hecMAT
829 hecmat%Iarray(1) = 100
834 hecmat%Iarray(6) = 10
836 hecmat%Iarray(21)=
kno
837 hecmat%Iarray(22)=
kno
841 hecmat%Iarray(34)= 10
852 hecmat%Rarray(1) = 1.0e-8
853 hecmat%Rarray(2) = 1.0
854 hecmat%Rarray(3) = 0.0
855 hecmat%Rarray(4) = 0.1
856 hecmat%Rarray(5) = 0.1
857 hecmat%Rarray(11)= 1.0e+4
859 hecmat%Iarray(96) = 0
860 hecmat%Iarray(97) =
kyes
861 hecmat%Iarray(98) =
kyes
862 hecmat%Iarray(99) =
kyes
867 type( hecmwst_matrix ) :: hecMAT
868 integer :: ndof, nn, ierror
871 allocate (hecmat%AL(nn*hecmat%NPL) ,stat=ierror )
872 if( ierror /= 0 )
then
873 write(*,*)
"##ERROR : not enough memory"
874 write(
idbg,*)
'stop due to allocation error'
876 call hecmw_abort( hecmw_comm_get_comm() )
878 allocate (hecmat%AU(nn*hecmat%NPU) ,stat=ierror )
879 if( ierror /= 0 )
then
880 write(*,*)
"##ERROR : not enough memory"
881 write(
idbg,*)
'stop due to allocation error'
883 call hecmw_abort( hecmw_comm_get_comm() )
885 allocate (hecmat%B(ndof*hecmat%NP) ,stat=ierror )
886 if( ierror /= 0 )
then
887 write(*,*)
"##ERROR : not enough memory"
888 write(
idbg,*)
'stop due to allocation error'
890 call hecmw_abort( hecmw_comm_get_comm() )
893 allocate (hecmat%D(nn*hecmat%NP) ,stat=ierror )
894 if( ierror /= 0 )
then
895 write(*,*)
"##ERROR : not enough memory"
896 write(
idbg,*)
'stop due to allocation error'
898 call hecmw_abort( hecmw_comm_get_comm() )
900 allocate (hecmat%X(ndof*hecmat%NP) ,stat=ierror )
901 if( ierror /= 0 )
then
902 write(*,*)
"##ERROR : not enough memory"
903 write(
idbg,*)
'stop due to allocation error'
905 call hecmw_abort( hecmw_comm_get_comm() )
907 allocate (hecmat%ALU(nn*hecmat%N) ,stat=ierror )
908 if( ierror /= 0 )
then
909 write(*,*)
"##ERROR : not enough memory"
910 write(
idbg,*)
'stop due to allocation error'
912 call hecmw_abort( hecmw_comm_get_comm() )
924 type( hecmwst_matrix ) :: hecMAT
925 integer :: ndof, nn, ierror
928 if(
associated(hecmat%AL) )
then
929 deallocate(hecmat%AL ,stat=ierror)
930 if( ierror /= 0 )
then
931 write(
idbg,*)
'stop due to deallocation error'
933 call hecmw_abort( hecmw_comm_get_comm())
936 if(
associated(hecmat%AU) )
then
937 deallocate(hecmat%AU ,stat=ierror)
938 if( ierror /= 0 )
then
939 write(
idbg,*)
'stop due to deallocation error'
941 call hecmw_abort( hecmw_comm_get_comm())
944 if(
associated(hecmat%B) )
then
945 deallocate(hecmat%B ,stat=ierror)
946 if( ierror /= 0 )
then
947 write(
idbg,*)
'stop due to deallocation error'
949 call hecmw_abort( hecmw_comm_get_comm())
952 if(
associated(hecmat%D) )
then
953 deallocate(hecmat%D ,stat=ierror)
954 if( ierror /= 0 )
then
955 write(
idbg,*)
'stop due to deallocation error'
957 call hecmw_abort( hecmw_comm_get_comm())
960 if(
associated(hecmat%X) )
then
961 deallocate(hecmat%X ,stat=ierror)
962 if( ierror /= 0 )
then
963 write(
idbg,*)
'stop due to deallocation error'
965 call hecmw_abort( hecmw_comm_get_comm())
968 if(
associated(hecmat%ALU) )
then
969 deallocate(hecmat%ALU ,stat=ierror)
970 if( ierror /= 0 )
then
971 write(
idbg,*)
'stop due to deallocation error'
973 call hecmw_abort( hecmw_comm_get_comm())
982 type(hecmwst_local_mesh) :: hecMESH
983 integer(kind=kint) :: i
984 external fstr_sort_index
987 fstrparam%nlgeom = .false.
988 fstrparam%solver_method =
ksmcg
992 fstrparam%analysis_n = 0
993 fstrparam%ref_temp = 0
996 fstrparam%fg_echo =
koff
997 fstrparam%fg_result =
koff
998 fstrparam%fg_visual =
koff
1001 fstrparam%fg_neutral =
koff
1002 fstrparam%fg_irres =
kno
1003 fstrparam%fg_iwres =
kno
1005 fstrparam%nprint = 1
1008 fstrparam%fg_couple = 0
1009 fstrparam%fg_couple_type = 0
1010 fstrparam%fg_couple_first= 0
1011 fstrparam%fg_couple_window= 0
1014 fstrparam%restart_version = 5
1018 fstrparam%n_node = hecmesh%n_node;
1019 fstrparam%nn_internal = hecmesh%nn_internal;
1020 allocate( fstrparam%global_local_ID(2,hecmesh%nn_internal))
1021 do i = 1, hecmesh%nn_internal
1022 fstrparam%global_local_ID(1,i) = hecmesh%global_node_ID(i)
1023 fstrparam%global_local_ID(2,i) = i
1025 call fstr_sort_index( fstrparam%global_local_ID, hecmesh%nn_internal )
1030 integer,
intent(in) :: nbc
1031 integer,
intent(in) :: cstep
1033 if( .not.
associated(fstrsolid%step_ctrl) )
return
1034 if( cstep>fstrsolid%nstep_tot )
return
1040 integer,
intent(in) :: nbc
1041 integer,
intent(in) :: cstep
1043 if( cstep > 0 )
then
1044 if( .not.
associated(fstrsolid%step_ctrl) )
return
1045 if( cstep>fstrsolid%nstep_tot )
return
1054 integer,
intent(in) :: nbc
1055 integer,
intent(in) :: cstep
1057 if( .not.
associated(fstrsolid%step_ctrl) )
return
1058 if( cstep>fstrsolid%nstep_tot )
return
1064 integer,
intent(in) :: nbc
1065 integer,
intent(in) :: cstep
1067 if( .not.
associated(fstrsolid%step_ctrl) )
return
1068 if( cstep>fstrsolid%nstep_tot )
return
1074 integer,
intent(in) :: cdsys_ID
1075 type(hecmwst_local_mesh) :: hecMESH
1077 real(kind=kreal),
intent(out) :: coords(3,3)
1081 if( cdsys_id>0 )
then
1086 coords(1,:)= hecmesh%node(3*ik-2:3*ik)+fstrsolid%unode(3*ik-2:3*ik) &
1087 + fstrsolid%dunode(3*ik-2:3*ik)
1089 coords(2,:)= hecmesh%node(3*ik-2:3*ik)+fstrsolid%unode(3*ik-2:3*ik) &
1090 + fstrsolid%dunode(3*ik-2:3*ik)
1092 if(ik>0) coords(3,:)= hecmesh%node(3*ik-2:3*ik)+fstrsolid%unode(3*ik-2:3*ik) &
1093 + fstrsolid%dunode(3*ik-2:3*ik)
1100 type(hecmwst_local_mesh),
intent(inout) :: hecMESH
1101 type (fstr_solid),
intent(in) :: fstrSOLID
1102 real(kind=kreal),
intent(out) :: coord(:)
1103 integer(kind=kint) :: i
1104 if(hecmesh%n_dof == 4)
return
1105 do i = 1, hecmesh%nn_internal*min(hecmesh%n_dof,3)
1106 coord(i) = hecmesh%node(i)
1107 hecmesh%node(i) = coord(i)+fstrsolid%unode(i)+fstrsolid%dunode(i)
1113 type(hecmwst_local_mesh),
intent(inout) :: hecMESH
1114 type (fstr_solid),
intent(in) :: fstrSOLID
1115 real(kind=kreal),
intent(in) :: coord(:)
1116 integer(kind=kint) :: i
1117 if(hecmesh%n_dof == 4)
return
1118 do i = 1, hecmesh%nn_internal*min(hecmesh%n_dof,3)
1119 hecmesh%node(i) = coord(i)
1129 phys%ESTRAIN = 0.0d0
1130 phys%ESTRESS = 0.0d0
1137 type (fstr_solid) :: fstrSOLID
1138 integer(kind=kint) :: i
1140 if (
associated(fstrsolid%SOLID))
then
1143 if (
associated(fstrsolid%SHELL))
then
1145 do i=1,fstrsolid%max_lyr
1150 if (
associated(fstrsolid%BEAM))
then
1155 subroutine table_amp(hecMESH, fstrSOLID, cstep, jj_n_amp, time, f_t)
1156 type ( hecmwST_local_mesh ),
intent(in) :: hecMESH
1157 type ( fstr_solid ),
intent(in) :: fstrSOLID
1158 integer(kind=kint),
intent(in) :: cstep
1159 integer(kind=kint),
intent(in) :: jj_n_amp
1160 real(kind=kreal),
intent(in) :: time
1161 real(kind=kreal),
intent(out) :: f_t
1163 integer(kind=kint) :: i
1164 integer(kind=kint) :: jj1, jj2
1165 integer(kind=kint) :: s1, s2, flag
1166 real(kind=kreal) :: t_1, t_2, t_t, f_1, f_2, tincre
1170 if( jj_n_amp <= 0 )
then
1172 write(
imsg,*)
'internal error: amplitude table not defined'
1174 call hecmw_abort( hecmw_comm_get_comm() )
1177 tincre = fstrsolid%step_ctrl( cstep )%initdt
1178 jj1 = hecmesh%amp%amp_index(jj_n_amp - 1)
1179 jj2 = hecmesh%amp%amp_index(jj_n_amp)
1182 t_t = time-fstrsolid%step_ctrl(cstep)%starttime
1186 if(t_t .gt. hecmesh%amp%amp_table(jj2))
then
1187 f_t = hecmesh%amp%amp_val(jj2)
1188 else if(t_t .le. hecmesh%amp%amp_table(jj2))
then
1191 if(t_t .le. hecmesh%amp%amp_table(i))
then
1196 if( flag == 1 )
exit
1199 t_2 = hecmesh%amp%amp_table(s2)
1200 t_1 = hecmesh%amp%amp_table(s1)
1201 f_2 = hecmesh%amp%amp_val(s2)
1202 f_1 = hecmesh%amp%amp_val(s1)
1203 if( t_2-t_1 .lt. 1.0e-20)
then
1205 write(
imsg,*)
'stop due to t_2-t_1 <= 0'
1207 call hecmw_abort( hecmw_comm_get_comm())
1209 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 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
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 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.