diff --git a/examples/config/numerics.yaml b/examples/config/numerics.yaml index e2759ab92..a0c7cb6b0 100644 --- a/examples/config/numerics.yaml +++ b/examples/config/numerics.yaml @@ -25,30 +25,40 @@ homogenization: stepIncrease: 1.5 # increase of next substep size when previous substep converged in homogenization (value higher than 1) nMPstate: 10 # materialpoint state loop limit -grid: - eps_div_atol: 1.0e-3 # absolute tolerance for fulfillment of stress equilibrium - eps_div_rtol: 5.0e-4 # relative tolerance for fulfillment of stress equilibrium - eps_curl_atol: 1.0e-12 # absolute tolerance for fulfillment of strain compatibility - eps_curl_rtol: 5.0e-4 # relative tolerance for fulfillment of strain compatibility - eps_stress_atol: 1.0e+3 # absolute tolerance for fulfillment of stress BC - eps_stress_rtol: 0.01 # relative tolerance for fulfillment of stress BC - eps_damage_atol: 1.0e-2 # absolute tolerance for damage evolution - eps_damage_rtol: 1.0e-6 # relative tolerance for damage evolution - eps_thermal_atol: 1.0e-2 # absolute tolerance for thermal equilibrium - eps_thermal_rtol: 1.0e-6 # relative tolerance for thermal equilibrium - itmax: 250 # Maximum iteration number - itmin: 2 # Minimum iteration number - fftw_timelimit: -1.0 # timelimit of plan creation for FFTW, see manual on www.fftw.org, Default -1.0: disable timelimit - fftw_plan_mode: FFTW_PATIENT # reads the planing-rigor flag, see manual on www.fftw.org, Default FFTW_PATIENT: use patient planner flag - maxCutBack: 3 # maximum cut back level (0: 1, 1: 0.5, 2: 0.25, etc) - maxStaggeredIter: 10 # max number of field level staggered iterations - memory_efficient: 1 # Precalculate Gamma-operator (81 double per point) - update_gamma: false # Update Gamma-operator with current dPdF (not possible if memory_efficient=1) - divergence_correction: 2 # Use size-independent divergence criterion - derivative: continuous # Approximation used for derivatives in Fourier space - petsc_options: -snes_type ngmres -snes_ngmres_anderson # PetSc solver options - alpha: 1.0 # polarization scheme parameter 0.0 < alpha < 2.0. alpha = 1.0 ==> AL scheme, alpha = 2.0 ==> accelerated scheme - beta: 1.0 # polarization scheme parameter 0.0 < beta < 2.0. beta = 1.0 ==> AL scheme, beta = 2.0 ==> accelerated scheme +solver: + grid: + N_staggered_iter_max: 10 # max number of field level staggered iterations + N_cutback_max: 3 # maximum cut back level (0: 1, 1: 0.5, 2: 0.25, etc) + + damage: + N_iter_max: 100 # maximum iteration number + eps_abs_phi: 1.0e-2 # absolute tolerance for damage evolution + eps_rel_phi: 1.0e-6 # relative tolerance for damage evolution + thermal: + N_iter_max: 100 # maximum iteration number + eps_abs_T: 1.0e-2 # absolute tolerance for thermal equilibrium + eps_rel_T: 1.0e-6 # relative tolerance for thermal equilibrium + + mechanical: + eps_abs_div(P): 1.0e-4 # absolute tolerance for fulfillment of stress equilibrium + eps_rel_div(P): 5.0e-4 # relative tolerance for fulfillment of stress equilibrium + eps_abs_P: 1.0e3 # absolute tolerance for fulfillment of stress BC + eps_rel_P: 1.0e-3 # relative tolerance for fulfillment of stress BC + N_iter_min: 1 # minimum iteration number + N_iter_max: 100 # maximum iteration number + update_gamma: false # Update Gamma-operator with current dPdF (not possible if memory_efficient=1) + + FFT: + memory_efficient: True # Precalculate Gamma-operator (81 double per point) + divergence_correction: size+grid # Use size-independent divergence criterion + derivative: continuous # Approximation used for derivatives in Fourier space + FFTW_plan_mode: FFTW_MEASURE # planing-rigor flag, see manual on www.fftw.org + FFTW_timelimit: -1.0 # timelimit of plan creation for FFTW, see manual on www.fftw.org. -1.0: disable timelimit + PETSc_options: -snes_type ngmres -snes_ngmres_anderson # PETSc solver options + alpha: 1.0 # polarization scheme parameter 0.0 < alpha < 2.0. alpha = 1.0 ==> AL scheme, alpha = 2.0 ==> accelerated scheme + beta: 1.0 # polarization scheme parameter 0.0 < beta < 2.0. beta = 1.0 ==> AL scheme, beta = 2.0 ==> accelerated scheme + eps_abs_curl(F): 1.0e-10 # absolute tolerance for fulfillment of strain compatibility + eps_rel_curl(F): 5.0e-4 # relative tolerance for fulfillment of strain compatibility mesh: maxCutBack: 3 # maximum cut back level (0: 1, 1: 0.5, 2: 0.25, etc) diff --git a/examples/grid/numerics.yaml b/examples/grid/numerics.yaml index 1a069cb76..47582521f 100644 --- a/examples/grid/numerics.yaml +++ b/examples/grid/numerics.yaml @@ -1,3 +1,4 @@ grid: - itmin: 4 - itmax: 40 + mechanical: + itmin: 4 + itmax: 40 diff --git a/src/grid/grid_mech_spectral_basic.f90 b/src/grid/grid_mech_spectral_basic.f90 index fcc4ff50e..7c0ba2e37 100644 --- a/src/grid/grid_mech_spectral_basic.f90 +++ b/src/grid/grid_mech_spectral_basic.f90 @@ -135,9 +135,9 @@ subroutine grid_mechanical_spectral_basic_init(num_grid) num_grid_fft => num_grid%get_dict('FFT',defaultVal=emptyDict) num_grid_mech => num_grid%get_dict('mechanical',defaultVal=emptyDict) - num%itmin = num_grid_mech%get_asInt ('N_iter_min',defaultVal=1) - num%itmax = num_grid_mech%get_asInt ('N_iter_max',defaultVal=100) - num%update_gamma = num_grid_mech%get_asBool ('update_gamma',defaultVal=.false.) + num%itmin = num_grid_mech%get_asInt('N_iter_min',defaultVal=1) + num%itmax = num_grid_mech%get_asInt('N_iter_max',defaultVal=100) + num%update_gamma = num_grid_mech%get_asBool('update_gamma',defaultVal=.false.) num%eps_div_atol = num_grid_mech%get_asReal('eps_abs_div(P)', defaultVal=1.0e-4_pREAL) num%eps_div_rtol = num_grid_mech%get_asReal('eps_rel_div(P)', defaultVal=5.0e-4_pREAL) num%eps_stress_atol = num_grid_mech%get_asReal('eps_abs_P', defaultVal=1.0e3_pREAL) diff --git a/src/grid/grid_mech_spectral_polarization.f90 b/src/grid/grid_mech_spectral_polarization.f90 index 382a0556a..df7beb077 100644 --- a/src/grid/grid_mech_spectral_polarization.f90 +++ b/src/grid/grid_mech_spectral_polarization.f90 @@ -146,9 +146,9 @@ subroutine grid_mechanical_spectral_polarization_init(num_grid) num_grid_fft => num_grid%get_dict('FFT',defaultVal=emptyDict) num_grid_mech => num_grid%get_dict('mechanical',defaultVal=emptyDict) - num%itmin = num_grid_mech%get_asInt ('N_iter_min',defaultVal=1) - num%itmax = num_grid_mech%get_asInt ('N_iter_max',defaultVal=100) - num%update_gamma = num_grid_mech%get_asBool ('update_gamma',defaultVal=.false.) + num%itmin = num_grid_mech%get_asInt('N_iter_min',defaultVal=1) + num%itmax = num_grid_mech%get_asInt('N_iter_max',defaultVal=100) + num%update_gamma = num_grid_mech%get_asBool('update_gamma',defaultVal=.false.) num%eps_div_atol = num_grid_mech%get_asReal('eps_abs_div(P)', defaultVal=1.0e-4_pREAL) num%eps_div_rtol = num_grid_mech%get_asReal('eps_rel_div(P)', defaultVal=5.0e-4_pREAL) num%eps_curl_atol = num_grid_mech%get_asReal('eps_abs_curl(F)',defaultVal=1.0e-10_pREAL) diff --git a/src/grid/spectral_utilities.f90 b/src/grid/spectral_utilities.f90 index 2fde2484f..453723a9b 100644 --- a/src/grid/spectral_utilities.f90 +++ b/src/grid/spectral_utilities.f90 @@ -226,7 +226,7 @@ subroutine spectral_utilities_init() scaledGeomSize = geomSize end if - select case(IO_lc(num_grid_fft%get_asStr('plan_mode',defaultVal='FFTW_MEASURE'))) + select case(IO_lc(num_grid_fft%get_asStr('FFTW_plan_mode',defaultVal='FFTW_MEASURE'))) case('fftw_estimate', 'FFTW_ESTIMATE') ! ordered from slow execution (but fast plan creation) to fast execution FFTW_planner_flag = FFTW_ESTIMATE case('fftw_measure', 'FFTW_MEASURE') @@ -243,7 +243,7 @@ subroutine spectral_utilities_init() !-------------------------------------------------------------------------------------------------- ! general initialization of FFTW (see manual on fftw.org for more details) if (pREAL /= C_DOUBLE .or. kind(1) /= C_INT) error stop 'C and Fortran datatypes do not match' - call fftw_set_timelimit(num_grid_fft%get_asReal('fftw_timelimit',defaultVal=300.0_pREAL)) + call fftw_set_timelimit(num_grid_fft%get_asReal('FFTW_timelimit',defaultVal=300.0_pREAL)) print'(/,1x,a)', 'FFTW initialized'; flush(IO_STDOUT)