27 character( len=80 ) :: control
28 character( len=80 ) :: convcontrol
30 real(kind=kreal) :: converg
31 real(kind=kreal) :: converg_lag
32 real(kind=kreal) :: converg_ddisp
33 real(kind=kreal) :: maxres
35 integer :: num_substep
37 integer :: max_contiter
39 real(kind=kreal) :: initdt
40 real(kind=kreal) :: elapsetime
41 real(kind=kreal) :: mindt
42 real(kind=kreal) :: maxdt
43 real(kind=kreal) :: starttime
44 integer,
pointer :: boundary(:)=>null()
45 integer,
pointer :: load(:)=>null()
46 integer,
pointer :: contact(:)=>null()
47 integer,
pointer :: elemactivation(:)=>null()
48 integer :: timepoint_id
49 integer :: aincparam_id
53 character(HECMW_NAME_LEN) :: name
54 real(kind=kreal) :: ainc_rs
55 real(kind=kreal) :: ainc_rl
56 integer( kind=kint ) :: nrbound_s(10)
57 integer( kind=kint ) :: nrbound_l(10)
58 integer( kind=kint ) :: nrtimes_s
59 integer( kind=kint ) :: nrtimes_l
60 real(kind=kreal) :: ainc_rc
61 integer( kind=kint ) :: cbbound
68 type(
step_info ),
intent(out) :: stepinfo
71 stepinfo%num_substep = 1
72 stepinfo%max_iter = 50
73 stepinfo%max_contiter = 10
75 stepinfo%initdt = 1.d0
76 stepinfo%mindt = 1.d-4
78 stepinfo%elapsetime = 1.d0
79 stepinfo%starttime = 0.d0
80 stepinfo%converg = 1.d-3
81 stepinfo%converg_lag = 1.d-4
82 stepinfo%converg_ddisp = 1.d-8
83 stepinfo%maxres = 1.d+10
84 stepinfo%timepoint_id = 0
85 stepinfo%AincParam_id = 0
89 type(
step_info ),
pointer,
intent(inout) :: stepinfos(:)
93 stepinfos(1)%starttime = 0.d0
94 do i=1,
size(stepinfos)-1
95 stepinfos(i+1)%starttime = stepinfos(i)%starttime + stepinfos(i)%elapsetime
101 integer,
intent(in) :: bnd
102 type(
step_info ),
intent(in) :: stepinfo
104 if( .not.
associated( stepinfo%Boundary ) )
return
110 integer,
intent(in) :: bnd
111 type(
step_info ),
intent(in) :: stepinfo
113 if( .not.
associated( stepinfo%Load ) )
return
119 integer,
intent(in) :: bnd
120 type(
step_info ),
intent(in) :: stepinfo
122 if( .not.
associated( stepinfo%Contact ) )
return
128 integer,
intent(in) :: bnd
129 type(
step_info ),
intent(in) :: stepinfo
131 if( .not.
associated( stepinfo%ElemActivation ) )
return
138 if(
associated( step%Boundary ) )
deallocate( step%Boundary )
139 if(
associated( step%Load ) )
deallocate( step%Load )
140 if(
associated( step%Contact ) )
deallocate( step%Contact )
141 if(
associated( step%ElemActivation ) )
deallocate( step%ElemActivation )
146 integer,
intent(in) :: nfile
148 integer :: i, j, nstep, nbc
151 write( nfile, * )
"-----Information of steps:",nstep
154 write( nfile, * )
" -----Step:",i
155 write(nfile,*) steps(i)%solution, steps(i)%elapsetime, steps(i)%converg, &
156 steps(i)%num_substep, steps(i)%max_iter
157 if(
associated( steps(i)%Boundary ) )
then
158 nbc =
size( steps(i)%Boundary )
159 write(nfile,*)
" Boundary conditions"
160 write(nfile,*) ( steps(i)%Boundary(j),j=1,nbc )
162 if(
associated( steps(i)%Load ) )
then
163 nbc =
size( steps(i)%Load )
164 write(nfile,*)
" External load conditions"
165 write(nfile,*) ( steps(i)%Load(j),j=1,nbc )
167 if(
associated( steps(i)%Contact ) )
then
168 nbc =
size( steps(i)%Contact )
169 write(nfile,*)
" Contact conditions"
170 write(nfile,*) ( steps(i)%Contact(j),j=1,nbc )
172 if(
associated( steps(i)%ElemActivation ) )
then
173 nbc =
size( steps(i)%ElemActivation )
174 write(nfile,*)
" ElemActivation conditions"
175 write(nfile,*) ( steps(i)%ElemActivation(j),j=1,nbc )
185 aincparam%ainc_Rs = 0.5d0
186 aincparam%ainc_Rl = 1.75d0
187 aincparam%NRbound_s = 0
191 aincparam%NRbound_l = 0
195 aincparam%NRtimes_s = 2
196 aincparam%NRtimes_l = 2
197 aincparam%ainc_Rc = 0.25d0
198 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.
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(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.