diff --git a/src/crystallite.f90 b/src/crystallite.f90 index 33b717508..8601697ba 100644 --- a/src/crystallite.f90 +++ b/src/crystallite.f90 @@ -3179,7 +3179,9 @@ logical function crystallite_integrateStress(& aTol_crystalliteStress, & rTol_crystalliteStress, & iJacoLpresiduum, & - numerics_integrationMode + numerics_integrationMode, & + subStepSizeLp, & + subStepSizeLi use debug, only: debug_level, & debug_crystallite, & debug_levelBasic, & @@ -3265,9 +3267,7 @@ logical function crystallite_integrateStress(& dLp_dT3333, & dLi_dT3333 real(pReal) detInvFi, & ! determinant of InvFi - steplengthLp0, & steplengthLp, & - steplengthLi0, & steplengthLi, & dt, & ! time increment aTolLp, & @@ -3529,9 +3529,9 @@ logical function crystallite_integrateStress(& .or. norm2(residuumLi) < norm2(residuumLi_old)) then ! not converged, but improved norm of residuum (always proceed in first iteration)... residuumLi_old = residuumLi ! ...remember old values and... Liguess_old = Liguess - steplengthLi = steplengthLi0 ! ...proceed with normal step length (calculate new search direction) + steplengthLi = 1.0_pReal ! ...proceed with normal step length (calculate new search direction) else ! not converged and residuum not improved... - steplengthLi = 0.5_pReal * steplengthLi ! ...try with smaller step length in same direction + steplengthLi = subStepSizeLi * steplengthLi ! ...try with smaller step length in same direction Liguess = Liguess_old + steplengthLi * deltaLi cycle LiLoop endif diff --git a/src/numerics.f90 b/src/numerics.f90 index 108ec22d1..db7bf0fe4 100644 --- a/src/numerics.f90 +++ b/src/numerics.f90 @@ -43,6 +43,7 @@ module numerics subStepSizeCryst = 0.25_pReal, & !< size of first substep when cutback in crystallite subStepSizeHomog = 0.25_pReal, & !< size of first substep when cutback in homogenization subStepSizeLp = 0.5_pReal, & !< size of first substep when cutback in Lp calculation + subStepSizeLi = 0.5_pReal, & !< size of first substep when cutback in Li calculation stepIncreaseCryst = 1.5_pReal, & !< increase of next substep size when previous substep converged in crystallite stepIncreaseHomog = 1.5_pReal, & !< increase of next substep size when previous substep converged in homogenization rTol_crystalliteState = 1.0e-6_pReal, & !< relative tolerance in crystallite state loop @@ -298,6 +299,8 @@ subroutine numerics_init stepIncreaseCryst = IO_floatValue(line,chunkPos,2_pInt) case ('substepsizelp') subStepSizeLp = IO_floatValue(line,chunkPos,2_pInt) + case ('substepsizeli') + subStepSizeLi = IO_floatValue(line,chunkPos,2_pInt) case ('substepminhomog') subStepMinHomog = IO_floatValue(line,chunkPos,2_pInt) case ('substepsizehomog') @@ -519,6 +522,7 @@ subroutine numerics_init write(6,'(a24,1x,es8.1)') ' subStepSizeCryst: ',subStepSizeCryst write(6,'(a24,1x,es8.1)') ' stepIncreaseCryst: ',stepIncreaseCryst write(6,'(a24,1x,es8.1)') ' subStepSizeLp: ',subStepSizeLp + write(6,'(a24,1x,es8.1)') ' subStepSizeLi: ',subStepSizeLi write(6,'(a24,1x,i8)') ' nState: ',nState write(6,'(a24,1x,i8)') ' nStress: ',nStress write(6,'(a24,1x,es8.1)') ' rTol_crystalliteState: ',rTol_crystalliteState @@ -648,6 +652,7 @@ subroutine numerics_init if (subStepSizeCryst <= 0.0_pReal) call IO_error(301_pInt,ext_msg='subStepSizeCryst') if (stepIncreaseCryst <= 0.0_pReal) call IO_error(301_pInt,ext_msg='stepIncreaseCryst') if (subStepSizeLp <= 0.0_pReal) call IO_error(301_pInt,ext_msg='subStepSizeLp') + if (subStepSizeLi <= 0.0_pReal) call IO_error(301_pInt,ext_msg='subStepSizeLi') if (subStepMinHomog <= 0.0_pReal) call IO_error(301_pInt,ext_msg='subStepMinHomog') if (subStepSizeHomog <= 0.0_pReal) call IO_error(301_pInt,ext_msg='subStepSizeHomog') if (stepIncreaseHomog <= 0.0_pReal) call IO_error(301_pInt,ext_msg='stepIncreaseHomog')