29 character( len=80 ) :: control
30 character( len=80 ) :: convcontrol
32 real(kind=kreal) :: converg
33 real(kind=kreal) :: converg_lag
34 real(kind=kreal) :: converg_ddisp
35 real(kind=kreal) :: maxres
37 integer :: num_substep
39 integer :: max_contiter
41 integer :: amp_default_type
42 real(kind=kreal) :: initdt
43 real(kind=kreal) :: elapsetime
44 real(kind=kreal) :: mindt
45 real(kind=kreal) :: maxdt
46 real(kind=kreal) :: starttime
47 integer,
pointer :: boundary(:)=>null()
48 integer,
pointer :: load(:)=>null()
49 integer,
pointer :: contact(:)=>null()
50 integer,
pointer :: elemactivation(:)=>null()
51 integer :: timepoint_id
52 integer :: aincparam_id
56 character(HECMW_NAME_LEN) :: name
57 real(kind=kreal) :: ainc_rs
58 real(kind=kreal) :: ainc_rl
59 integer( kind=kint ) :: nrbound_s(10)
60 integer( kind=kint ) :: nrbound_l(10)
61 integer( kind=kint ) :: nrtimes_s
62 integer( kind=kint ) :: nrtimes_l
63 real(kind=kreal) :: ainc_rc
64 integer( kind=kint ) :: cbbound
71 type(
step_info ),
intent(out) :: stepinfo
74 stepinfo%num_substep = 1
75 stepinfo%max_iter = 50
76 stepinfo%max_contiter = 10
79 stepinfo%initdt = 1.d0
80 stepinfo%mindt = 1.d-4
82 stepinfo%elapsetime = 1.d0
83 stepinfo%starttime = 0.d0
84 stepinfo%converg = 1.d-3
85 stepinfo%converg_lag = 1.d-4
86 stepinfo%converg_ddisp = 1.d-8
87 stepinfo%maxres = 1.d+10
88 stepinfo%timepoint_id = 0
89 stepinfo%AincParam_id = 0
93 type(
step_info ),
pointer,
intent(inout) :: stepinfos(:)
97 stepinfos(1)%starttime = 0.d0
98 do i=1,
size(stepinfos)-1
99 stepinfos(i+1)%starttime = stepinfos(i)%starttime + stepinfos(i)%elapsetime
105 integer,
intent(in) :: bnd
106 type(
step_info ),
intent(in) :: stepinfo
108 if( .not.
associated( stepinfo%Boundary ) )
return
114 integer,
intent(in) :: bnd
115 type(
step_info ),
intent(in) :: stepinfo
117 if( .not.
associated( stepinfo%Load ) )
return
123 integer,
intent(in) :: bnd
124 type(
step_info ),
intent(in) :: stepinfo
126 if( .not.
associated( stepinfo%Contact ) )
return
132 integer,
intent(in) :: bnd
133 type(
step_info ),
intent(in) :: stepinfo
135 if( .not.
associated( stepinfo%ElemActivation ) )
return
142 if(
associated( step%Boundary ) )
deallocate( step%Boundary )
143 if(
associated( step%Load ) )
deallocate( step%Load )
144 if(
associated( step%Contact ) )
deallocate( step%Contact )
145 if(
associated( step%ElemActivation ) )
deallocate( step%ElemActivation )
150 integer,
intent(in) :: nfile
152 integer :: i, j, nstep, nbc
155 write( nfile, * )
"-----Information of steps:",nstep
158 write( nfile, * )
" -----Step:",i
159 write(nfile,*) steps(i)%solution, steps(i)%elapsetime, steps(i)%converg, &
160 steps(i)%num_substep, steps(i)%max_iter
161 if(
associated( steps(i)%Boundary ) )
then
162 nbc =
size( steps(i)%Boundary )
163 write(nfile,*)
" Boundary conditions"
164 write(nfile,*) ( steps(i)%Boundary(j),j=1,nbc )
166 if(
associated( steps(i)%Load ) )
then
167 nbc =
size( steps(i)%Load )
168 write(nfile,*)
" External load conditions"
169 write(nfile,*) ( steps(i)%Load(j),j=1,nbc )
171 if(
associated( steps(i)%Contact ) )
then
172 nbc =
size( steps(i)%Contact )
173 write(nfile,*)
" Contact conditions"
174 write(nfile,*) ( steps(i)%Contact(j),j=1,nbc )
176 if(
associated( steps(i)%ElemActivation ) )
then
177 nbc =
size( steps(i)%ElemActivation )
178 write(nfile,*)
" ElemActivation conditions"
179 write(nfile,*) ( steps(i)%ElemActivation(j),j=1,nbc )
189 aincparam%ainc_Rs = 0.5d0
190 aincparam%ainc_Rl = 1.75d0
191 aincparam%NRbound_s = 0
195 aincparam%NRbound_l = 0
199 aincparam%NRtimes_s = 2
200 aincparam%NRtimes_l = 2
201 aincparam%ainc_Rc = 0.25d0
202 aincparam%CBbound = 5
This module manages step information.
logical function iscontactactive(bnd, stepinfo)
Is contact condition in this step active.
subroutine fstr_print_steps(nfile, steps)
Print out step control.
subroutine free_stepinfo(step)
Finalizer.
integer, parameter stepampstep
subroutine init_stepinfo(stepinfo)
Initializer.
logical function iselemactivationactive(bnd, stepinfo)
Is elemact condition in this step active.
integer, parameter stepvisco
integer, parameter stepfixedinc
subroutine init_aincparam(aincparam)
Initializer.
logical function isboundaryactive(bnd, stepinfo)
Is boundary condition in this step active.
integer, parameter stepampramp
integer(kind=kint), parameter knstmaxit
integer, parameter stepautoinc
integer(kind=kint), parameter knstdresn
integer(kind=kint), parameter knstsumit
integer(kind=kint), parameter knstciter
subroutine setup_stepinfo_starttime(stepinfos)
logical function isloadactive(bnd, stepinfo)
Is external load in this step active.
integer, parameter stepstatic
Step control such as active boundary condition, convergent condition etc.