diff --git a/code/IO.f90 b/code/IO.f90 index 031dc3e77..e5962c989 100644 --- a/code/IO.f90 +++ b/code/IO.f90 @@ -852,7 +852,9 @@ endfunction case (274) msg = 'Non-positive relative maximum value (upper bound) for GIA residual' case (275) - msg = 'Limit for GIA iteration too small' + msg = 'Limit for GIA iteration too small' + case (276) + msg = 'Non-positive relative tolerance for temperature' case (300) msg = 'This material can only be used with elements with three direct stress components' case (500) diff --git a/code/numerics.config b/code/numerics.config index 76ba6c041..a88bcb6a7 100644 --- a/code/numerics.config +++ b/code/numerics.config @@ -1,20 +1,21 @@ ### numerical parameters ### -relevantStrain 1.0e-7 # strain increment considered significant -iJacoStiffness 1 # frequency of stiffness update -iJacoLpresiduum 1 # frequency of Jacobian update of residuum in Lp -pert_Fg 1.0e-6 # strain perturbation for FEM Jacobi -nHomog 10 # homogenization loop limit -nCryst 20 # crystallite loop limit (only for debugging info, real loop limit is "subStepMin") -nState 10 # state loop limit -nStress 40 # stress loop limit -subStepMin 1.0e-3 # minimum (relative) size of sub-step allowed during cutback in crystallite -rTol_crystalliteState 1.0e-6 # relative tolerance in crystallite state loop -rTol_crystalliteStress 1.0e-6 # relative tolerance in crystallite stress loop -aTol_crystalliteStress 1.0e-8 # absolute tolerance in crystallite stress loop +relevantStrain 1.0e-7 # strain increment considered significant +iJacoStiffness 1 # frequency of stiffness update +iJacoLpresiduum 1 # frequency of Jacobian update of residuum in Lp +pert_Fg 1.0e-6 # strain perturbation for FEM Jacobi +nHomog 10 # homogenization loop limit +nCryst 20 # crystallite loop limit (only for debugging info, real loop limit is "subStepMin") +nState 10 # state loop limit +nStress 40 # stress loop limit +subStepMin 1.0e-3 # minimum (relative) size of sub-step allowed during cutback in crystallite +rTol_crystalliteState 1.0e-6 # relative tolerance in crystallite state loop +rTol_crystalliteTemperature 1.0e-6 # relative tolerance in crystallite temperature loop +rTol_crystalliteStress 1.0e-6 # relative tolerance in crystallite stress loop +aTol_crystalliteStress 1.0e-8 # absolute tolerance in crystallite stress loop -resToler 1.0e-4 # relative tolerance of residual in GIA iteration -resAbsol 1.0e+2 # absolute tolerance of residual in GIA iteration (corresponds to ~1 Pa) -resBound 1.0e+1 # relative maximum value (upper bound) for GIA residual -NRiterMax 24 # maximum number of GIA iteration \ No newline at end of file +resToler 1.0e-4 # relative tolerance of residual in GIA iteration +resAbsol 1.0e+2 # absolute tolerance of residual in GIA iteration (corresponds to ~1 Pa) +resBound 1.0e+1 # relative maximum value (upper bound) for GIA residual +NRiterMax 24 # maximum number of GIA iteration \ No newline at end of file diff --git a/code/numerics.f90 b/code/numerics.f90 index 8457346f2..f40aea921 100644 --- a/code/numerics.f90 +++ b/code/numerics.f90 @@ -68,6 +68,7 @@ subroutine numerics_init() ! nStress ! subStepMin ! rTol_crystalliteState + ! rTol_crystalliteTemperature ! rTol_crystalliteStress ! aTol_crystalliteStress ! resToler @@ -80,23 +81,23 @@ subroutine numerics_init() write(6,*) ! initialize all parameters with standard values - relevantStrain = 1.0e-7_pReal - iJacoStiffness = 1_pInt - iJacoLpresiduum = 1_pInt - pert_Fg = 1.0e-6_pReal - nHomog = 10_pInt - nCryst = 20_pInt - nState = 10_pInt - nStress = 40_pInt - subStepMin = 1.0e-3_pReal - rTol_crystalliteState = 1.0e-6_pReal + relevantStrain = 1.0e-7_pReal + iJacoStiffness = 1_pInt + iJacoLpresiduum = 1_pInt + pert_Fg = 1.0e-6_pReal + nHomog = 10_pInt + nCryst = 20_pInt + nState = 10_pInt + nStress = 40_pInt + subStepMin = 1.0e-3_pReal + rTol_crystalliteState = 1.0e-6_pReal rTol_crystalliteTemperature = 1.0e-6_pReal - rTol_crystalliteStress = 1.0e-6_pReal - aTol_crystalliteStress = 1.0e-8_pReal - resToler = 1.0e-4_pReal - resAbsol = 1.0e+2_pReal - resBound = 1.0e+1_pReal - NRiterMax = 24_pInt + rTol_crystalliteStress = 1.0e-6_pReal + aTol_crystalliteStress = 1.0e-8_pReal + resToler = 1.0e-4_pReal + resAbsol = 1.0e+2_pReal + resBound = 1.0e+1_pReal + NRiterMax = 24_pInt ! try to open the config file if(IO_open_file(fileunit,numerics_configFile)) then @@ -132,7 +133,7 @@ subroutine numerics_init() subStepMin = IO_floatValue(line,positions,2) case ('rtol_crystallitestate') rTol_crystalliteState = IO_floatValue(line,positions,2) - case ('rtol_crystalliteTemperature') + case ('rtol_crystallitetemperature') rTol_crystalliteTemperature = IO_floatValue(line,positions,2) case ('rtol_crystallitestress') rTol_crystalliteStress = IO_floatValue(line,positions,2) @@ -178,23 +179,24 @@ subroutine numerics_init() write(6,'(a24,x,i8)') 'NRiterMax: ',NRiterMax write(6,*) - ! sanity check (Temperature check missing!!!!!!!) - if (relevantStrain <= 0.0_pReal) call IO_error(260) - if (iJacoStiffness < 1_pInt) call IO_error(261) - if (iJacoLpresiduum < 1_pInt) call IO_error(262) - if (pert_Fg <= 0.0_pReal) call IO_error(263) - if (nHomog < 1_pInt) call IO_error(264) - if (nCryst < 1_pInt) call IO_error(265) - if (nState < 1_pInt) call IO_error(266) - if (nStress < 1_pInt) call IO_error(267) - if (subStepMin <= 0.0_pReal) call IO_error(268) - if (rTol_crystalliteState <= 0.0_pReal) call IO_error(269) - if (rTol_crystalliteStress <= 0.0_pReal) call IO_error(270) - if (aTol_crystalliteStress <= 0.0_pReal) call IO_error(271) - if (resToler <= 0.0_pReal) call IO_error(272) - if (resAbsol <= 0.0_pReal) call IO_error(273) - if (resBound <= 0.0_pReal) call IO_error(274) - if (NRiterMax < 1_pInt) call IO_error(275) + ! sanity check + if (relevantStrain <= 0.0_pReal) call IO_error(260) + if (iJacoStiffness < 1_pInt) call IO_error(261) + if (iJacoLpresiduum < 1_pInt) call IO_error(262) + if (pert_Fg <= 0.0_pReal) call IO_error(263) + if (nHomog < 1_pInt) call IO_error(264) + if (nCryst < 1_pInt) call IO_error(265) + if (nState < 1_pInt) call IO_error(266) + if (nStress < 1_pInt) call IO_error(267) + if (subStepMin <= 0.0_pReal) call IO_error(268) + if (rTol_crystalliteState <= 0.0_pReal) call IO_error(269) + if (rTol_crystalliteTemperature <= 0.0_pReal) call IO_error(276) + if (rTol_crystalliteStress <= 0.0_pReal) call IO_error(270) + if (aTol_crystalliteStress <= 0.0_pReal) call IO_error(271) + if (resToler <= 0.0_pReal) call IO_error(272) + if (resAbsol <= 0.0_pReal) call IO_error(273) + if (resBound <= 0.0_pReal) call IO_error(274) + if (NRiterMax < 1_pInt) call IO_error(275) endsubroutine