modified cutback counting
restore Lpguess_old in case of iInner > nInner
This commit is contained in:
parent
7453a18b42
commit
de9e35cdb8
|
@ -34,7 +34,7 @@ CONTAINS
|
||||||
Fp_old,& ! old plastic deformation gradient
|
Fp_old,& ! old plastic deformation gradient
|
||||||
state_old) ! old state variable array
|
state_old) ! old state variable array
|
||||||
!
|
!
|
||||||
use prec, only: pReal,pInt,pert_Fg,subStepMin
|
use prec, only: pReal,pInt,pert_Fg,subStepMin, nCutback
|
||||||
use debug
|
use debug
|
||||||
use constitutive, only: constitutive_Nstatevars,constitutive_Nresults
|
use constitutive, only: constitutive_Nstatevars,constitutive_Nresults
|
||||||
use mesh, only: mesh_element
|
use mesh, only: mesh_element
|
||||||
|
@ -44,14 +44,14 @@ CONTAINS
|
||||||
!
|
!
|
||||||
character(len=*) msg
|
character(len=*) msg
|
||||||
logical updateJaco,error,cuttedBack,guessNew
|
logical updateJaco,error,cuttedBack,guessNew
|
||||||
integer(pInt) cp_en,ip,grain,i,j,k,l,m,n, nCutbacks
|
integer(pInt) cp_en,ip,grain,k,l, nCutbacks, maxCutbacks
|
||||||
real(pReal) Temperature
|
real(pReal) Temperature
|
||||||
real(pReal) dt,dt_aim,subFrac,subStep,invJ,det
|
real(pReal) dt,dt_aim,subFrac,subStep,det
|
||||||
real(pReal), dimension(3,3) :: Lp,Lp_pert,inv
|
real(pReal), dimension(3,3) :: Lp,Lp_pert,inv
|
||||||
real(pReal), dimension(3,3) :: Fg_old,Fg_current,Fg_new,Fg_pert,Fg_aim,deltaFg
|
real(pReal), dimension(3,3) :: Fg_old,Fg_current,Fg_new,Fg_pert,Fg_aim,deltaFg
|
||||||
real(pReal), dimension(3,3) :: Fp_old,Fp_current,Fp_new,Fp_pert
|
real(pReal), dimension(3,3) :: Fp_old,Fp_current,Fp_new,Fp_pert
|
||||||
real(pReal), dimension(3,3) :: Fe_old,Fe_current,Fe_new,Fe_pert
|
real(pReal), dimension(3,3) :: Fe_current,Fe_new,Fe_pert
|
||||||
real(pReal), dimension(3,3) :: Tstar,tau,P,P_pert
|
real(pReal), dimension(3,3) :: P,P_pert
|
||||||
real(pReal), dimension(3,3,3,3) :: dPdF
|
real(pReal), dimension(3,3,3,3) :: dPdF
|
||||||
real(pReal), dimension(constitutive_Nstatevars(grain,ip,cp_en)) :: state_old,state_new
|
real(pReal), dimension(constitutive_Nstatevars(grain,ip,cp_en)) :: state_old,state_new
|
||||||
real(pReal), dimension(constitutive_Nstatevars(grain,ip,cp_en)) :: state_current,state_bestguess,state_pert
|
real(pReal), dimension(constitutive_Nstatevars(grain,ip,cp_en)) :: state_current,state_bestguess,state_pert
|
||||||
|
@ -61,6 +61,7 @@ CONTAINS
|
||||||
subFrac = 0.0_pReal
|
subFrac = 0.0_pReal
|
||||||
subStep = 1.0_pReal
|
subStep = 1.0_pReal
|
||||||
nCutbacks = 0_pInt
|
nCutbacks = 0_pInt
|
||||||
|
maxCutbacks = 0_pInt
|
||||||
!
|
!
|
||||||
Fg_aim = Fg_old ! make "new", "aim" a synonym for "old"
|
Fg_aim = Fg_old ! make "new", "aim" a synonym for "old"
|
||||||
Fp_new = Fp_old
|
Fp_new = Fp_old
|
||||||
|
@ -99,6 +100,7 @@ CONTAINS
|
||||||
guessNew = .false. ! keep the Lp
|
guessNew = .false. ! keep the Lp
|
||||||
subFrac = subFrac + subStep
|
subFrac = subFrac + subStep
|
||||||
subStep = 1.0_pReal - subFrac ! try one go
|
subStep = 1.0_pReal - subFrac ! try one go
|
||||||
|
nCutbacks = 0_pInt ! rest cutbackcounter
|
||||||
|
|
||||||
if (debugger) then
|
if (debugger) then
|
||||||
!$OMP CRITICAL (write2out)
|
!$OMP CRITICAL (write2out)
|
||||||
|
@ -107,6 +109,7 @@ CONTAINS
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
nCutbacks = nCutbacks + 1 ! record additional cutback
|
nCutbacks = nCutbacks + 1 ! record additional cutback
|
||||||
|
maxCutbacks=max(nCutbacks,maxCutbacks)! remember maximum number of cutbacks
|
||||||
cuttedBack = .true. ! encountered problems -->
|
cuttedBack = .true. ! encountered problems -->
|
||||||
guessNew = .true. ! redo plastic Lp guess
|
guessNew = .true. ! redo plastic Lp guess
|
||||||
subStep = subStep / 2.0_pReal ! cut time step in half
|
subStep = subStep / 2.0_pReal ! cut time step in half
|
||||||
|
@ -121,7 +124,7 @@ CONTAINS
|
||||||
enddo ! potential substepping
|
enddo ! potential substepping
|
||||||
!
|
!
|
||||||
!$OMP CRITICAL (cutback)
|
!$OMP CRITICAL (cutback)
|
||||||
debug_cutbackDistribution(min(nCutback,nCutbacks)+1) = debug_cutbackDistribution(min(nCutback,nCutbacks)+1)+1
|
debug_cutbackDistribution(min(nCutback,maxCutbacks)+1) = debug_cutbackDistribution(min(nCutback,maxCutbacks)+1)+1
|
||||||
!$OMP END CRITICAL (cutback)
|
!$OMP END CRITICAL (cutback)
|
||||||
!
|
!
|
||||||
if (msg /= 'ok') return ! solution not reached --> report back
|
if (msg /= 'ok') return ! solution not reached --> report back
|
||||||
|
@ -226,7 +229,7 @@ CONTAINS
|
||||||
real(pReal), dimension(6) :: Tstar_v
|
real(pReal), dimension(6) :: Tstar_v
|
||||||
real(pReal), dimension(9,9) :: dLp,dTdLp,dRdLp,invdRdLp,eye2
|
real(pReal), dimension(9,9) :: dLp,dTdLp,dRdLp,invdRdLp,eye2
|
||||||
real(pReal), dimension(6,6) :: C_66
|
real(pReal), dimension(6,6) :: C_66
|
||||||
real(pReal), dimension(3,3) :: Fg_new,Fp_new,invFp_new,Fp_old,invFp_old,Fe_new,Fe_old
|
real(pReal), dimension(3,3) :: Fg_new,Fp_new,invFp_new,Fp_old,invFp_old,Fe_new
|
||||||
real(pReal), dimension(3,3) :: P,Tstar
|
real(pReal), dimension(3,3) :: P,Tstar
|
||||||
real(pReal), dimension(3,3) :: Lp,Lpguess,Lpguess_old,Rinner,Rinner_old,A,B,BT,AB,BTA
|
real(pReal), dimension(3,3) :: Lp,Lpguess,Lpguess_old,Rinner,Rinner_old,A,B,BT,AB,BTA
|
||||||
real(pReal), dimension(3,3,3,3) :: C
|
real(pReal), dimension(3,3,3,3) :: C
|
||||||
|
@ -291,6 +294,7 @@ Outer: do ! outer iteration: State
|
||||||
Inner: do ! inner iteration: Lp
|
Inner: do ! inner iteration: Lp
|
||||||
iInner = iInner+1
|
iInner = iInner+1
|
||||||
if (iInner > nInner) then ! too many loops required
|
if (iInner > nInner) then ! too many loops required
|
||||||
|
Lpguess=Lpguess_old ! do not trust the last update
|
||||||
msg = 'limit Inner iteration'
|
msg = 'limit Inner iteration'
|
||||||
!$OMP CRITICAL (in)
|
!$OMP CRITICAL (in)
|
||||||
debug_InnerLoopDistribution(nInner) = debug_InnerLoopDistribution(nInner)+1
|
debug_InnerLoopDistribution(nInner) = debug_InnerLoopDistribution(nInner)+1
|
||||||
|
|
Loading…
Reference in New Issue