diff --git a/code/DAMASK_spectral_solverAL.f90 b/code/DAMASK_spectral_solverAL.f90 index f8c0feb35..1086338f9 100644 --- a/code/DAMASK_spectral_solverAL.f90 +++ b/code/DAMASK_spectral_solverAL.f90 @@ -541,10 +541,10 @@ subroutine AL_converged(snes_local,it,xnorm,snorm,fnorm,reason,dummy,ierr) logical :: Converged real(pReal) :: err_stress_tol - err_stress_tol = min(maxval(abs(P_av))*err_stress_tolrel,err_stress_tolabs) + err_stress_tol = max(maxval(abs(P_av))*err_stress_tolrel,err_stress_tolabs) Converged = (it > itmin .and. & - all([ err_f/sqrt(sum((F_aim-math_I3)**2.0_pReal))/err_f_tol, & - err_p/sqrt(sum((F_aim-math_I3)**2.0_pReal))/err_p_tol, & + all([ err_f/err_f_tol, & + err_p/err_p_tol, & err_stress/err_stress_tol] < 1.0_pReal)) & .or. terminallyIll @@ -557,11 +557,11 @@ subroutine AL_converged(snes_local,it,xnorm,snorm,fnorm,reason,dummy,ierr) endif write(6,'(1/,a)') ' ... reporting ....................................................' write(6,'(/,a,f8.2,a,es11.5,a,es11.4,a)') ' mismatch F = ', & - err_f/sqrt(sum((F_aim-math_I3)**2.0_pReal))/err_f_tol, & - ' (',err_f/sqrt(sum((F_aim-math_I3)**2.0_pReal)),' -, tol =',err_f_tol,')' + err_f/err_f_tol, & + ' (',err_f,' -, tol =',err_f_tol,')' write(6,'(a,f8.2,a,es11.5,a,es11.4,a)') ' mismatch P = ', & - err_p/sqrt(sum((F_aim-math_I3)**2.0_pReal))/err_p_tol, & - ' (',err_p/sqrt(sum((F_aim-math_I3)**2.0_pReal)),' -, tol =',err_p_tol,')' + err_p/err_p_tol, & + ' (',err_p,' -, tol =',err_p_tol,')' write(6,'(a,f8.2,a,es11.5,a,es11.4,a)') ' error stress BC = ', & err_stress/err_stress_tol, ' (',err_stress, ' Pa, tol =',err_stress_tol,')' write(6,'(/,a)') ' ==========================================================================' diff --git a/code/DAMASK_spectral_solverBasic.f90 b/code/DAMASK_spectral_solverBasic.f90 index 1eade703d..c99ab4139 100644 --- a/code/DAMASK_spectral_solverBasic.f90 +++ b/code/DAMASK_spectral_solverBasic.f90 @@ -353,7 +353,7 @@ logical function basic_Converged(err_div,pAvgDiv,err_stress,pAvgStress) pAvgDivL2 pAvgDivL2 = sqrt(maxval(math_eigenvalues33(math_mul33x33(pAvgDiv,math_transpose33(pAvgDiv))))) ! L_2 norm of average stress (http://mathworld.wolfram.com/SpectralNorm.html) - err_stress_tol = min(maxval(abs(pAvgStress))*err_stress_tolrel,err_stress_tolabs) + err_stress_tol = max(maxval(abs(pAvgStress))*err_stress_tolrel,err_stress_tolabs) basic_Converged = all([ err_div/pAvgDivL2/err_div_tol,& err_stress/err_stress_tol ] < 1.0_pReal) diff --git a/code/DAMASK_spectral_solverBasicPETSc.f90 b/code/DAMASK_spectral_solverBasicPETSc.f90 index 96dbf7d59..88505075f 100644 --- a/code/DAMASK_spectral_solverBasicPETSc.f90 +++ b/code/DAMASK_spectral_solverBasicPETSc.f90 @@ -446,7 +446,7 @@ subroutine BasicPETSc_converged(snes_local,it,xnorm,snorm,fnorm,reason,dummy,ier pAvgDivL2, & err_stress_tol - err_stress_tol =min(maxval(abs(P_av))*err_stress_tolrel,err_stress_tolabs) + err_stress_tol =max(maxval(abs(P_av))*err_stress_tolrel,err_stress_tolabs) pAvgDivL2 = sqrt(maxval(math_eigenvalues33(math_mul33x33(P_av,math_transpose33(P_av))))) Converged = (it >= itmin .and. & all([ err_div/pAvgDivL2/err_div_tol, & diff --git a/code/config/numerics.config b/code/config/numerics.config index 9b56451c7..74a27d361 100644 --- a/code/config/numerics.config +++ b/code/config/numerics.config @@ -55,9 +55,9 @@ fixed_seed 0 # put any number larger than zero, intege ## spectral parameters ## err_div_tol 1.0e-5 # Div(P)/avg(P)*meter err_stress_tolrel 0.01 # relative tolerance for fulfillment of stress BC -err_stress_tolabs 9.9e40 # absolute tolerance for fulfillment of stress BC -err_f_tol 1e-6 # tolerance for compatible and incompatible deformation gradient fields in AL solver -err_p_tol 1e-5 # tolerance for compatible and incompatible stress fields in AL solver +err_stress_tolabs 1.0e3 # absolute tolerance for fulfillment of stress BC +err_f_tol 1e-7 # tolerance for compatible and incompatible deformation gradient fields in AL solver +err_p_tol 1e-7 # tolerance for compatible and incompatible stress fields in AL solver fftw_timelimit -1.0 # timelimit of plan creation for FFTW, see manual on www.fftw.org, Default -1.0: disable timelimit rotation_tol 1.0e-12 # tolerance of rotation specified in loadcase, Default 1.0e-12: first guess fftw_plan_mode FFTW_PATIENT # reads the planing-rigor flag, see manual on www.fftw.org, Default FFTW_PATIENT: use patient planner flag