set tolerances to useful values and renamed them.

allowed "keyword = value" in numerics.config (simply removing "=" from line)
This commit is contained in:
Martin Diehl 2013-07-31 15:03:38 +00:00
parent e8c63976b5
commit 2dc985f558
4 changed files with 46 additions and 32 deletions

View File

@ -450,8 +450,9 @@ subroutine AL_formResidual(in,x_scal,f_scal,dummy,ierr)
polarBeta, &
err_stress_tolrel, &
err_stress_tolabs, &
err_f_tol, &
err_p_tol, &
err_f_tolabs, &
err_p_tolabs, &
err_f_p_tolrel, &
err_stress_tolabs
use IO, only: &
IO_intOut
@ -610,8 +611,9 @@ subroutine AL_converged(snes_local,PETScIter,xnorm,snorm,fnorm,reason,dummy,ierr
use numerics, only: &
itmax, &
itmin, &
err_f_tol, &
err_p_tol, &
err_f_tolabs, &
err_p_tolabs, &
err_f_p_tolrel, &
err_stress_tolabs, &
err_stress_tolrel
use FEsolving, only: &
@ -632,8 +634,8 @@ use numerics, only: &
mismatch_p_tol, &
stressBC_tol
mismatch_f_tol = max(maxval(abs(F_aim-math_I3))*err_stress_tolrel,err_f_tol)
mismatch_p_tol = max(maxval(abs(P_av)) *err_stress_tolrel,err_p_tol)
mismatch_f_tol = max(maxval(abs(F_aim-math_I3))*err_f_p_tolrel,err_f_tolabs)
mismatch_p_tol = max(maxval(abs(P_av)) *err_f_p_tolrel,err_p_tolabs)
stressBC_tol = max(maxval(abs(P_av)) *err_stress_tolrel,err_stress_tolabs)
write(6,'(1/,a)') ' ... reporting .............................................................'

View File

@ -450,8 +450,9 @@ subroutine Polarisation_formResidual(in,x_scal,f_scal,dummy,ierr)
polarBeta, &
err_stress_tolrel, &
err_stress_tolabs, &
err_f_tol, &
err_p_tol, &
err_f_tolabs, &
err_p_tolabs, &
err_f_p_tolrel, &
err_stress_tolabs
use IO, only: &
IO_intOut
@ -617,8 +618,9 @@ subroutine Polarisation_converged(snes_local,PETScIter,xnorm,snorm,fnorm,reason,
use numerics, only: &
itmax, &
itmin, &
err_f_tol, &
err_p_tol, &
err_f_tolabs, &
err_p_tolabs, &
err_f_p_tolrel, &
err_stress_tolabs, &
err_stress_tolrel
use FEsolving, only: &
@ -639,8 +641,8 @@ subroutine Polarisation_converged(snes_local,PETScIter,xnorm,snorm,fnorm,reason,
mismatch_p_tol, &
stressBC_tol
mismatch_f_tol = max(maxval(abs(F_aim-math_I3))*err_stress_tolrel,err_f_tol)
mismatch_p_tol = max(maxval(abs(P_av)) *err_stress_tolrel,err_p_tol)
mismatch_f_tol = max(maxval(abs(F_aim-math_I3))*err_f_p_tolrel,err_f_tolabs)
mismatch_p_tol = max(maxval(abs(P_av)) *err_f_p_tolrel,err_p_tolabs)
stressBC_tol = max(maxval(abs(P_av)) *err_stress_tolrel,err_stress_tolabs)
write(6,'(1/,a)') ' ... reporting .............................................................'

View File

@ -57,8 +57,9 @@ fixed_seed 0 # put any number larger than zero, intege
err_div_tol 5.0e-4 # Div(P)/avg(P)*meter
err_stress_tolrel 0.01 # relative tolerance for fulfillment of stress BC
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
err_f_tolabs 1.0e-8_pReal # absolute tolerance mismatch F
err_p_tolabs 1.0e2_pReal # absolute tolerance mismatch P
err_f_p_tolrel 1.0e-5_pReal # relative tolerance for mismatch F and P
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

View File

@ -86,10 +86,11 @@ module numerics
#ifdef Spectral
real(pReal), protected, public :: &
err_div_tol = 5.0e-4_pReal, & !< Div(P)/avg(P)*meter
err_stress_tolrel = 0.01_pReal, & !< relative tolerance for fullfillment of stress BC and of mismatch F and P in percent
err_stress_tolrel = 0.01_pReal, & !< relative tolerance for fullfillment of stress BC
err_stress_tolabs = 1.0e3_pReal, & !< absolute tolerance for fullfillment of stress BC
err_f_tol = 1.0e-7_pReal, & !< absolute tolerance mismatch F
err_p_tol = 1.0e3_pReal, & !< absolute tolerance mismatch P
err_f_tolabs = 1.0e-8_pReal, & !< absolute tolerance mismatch F
err_p_tolabs = 1.0e2_pReal, & !< absolute tolerance mismatch P
err_f_p_tolrel = 1.0e-5_pReal, & !< relative tolerance for mismatch F and P
fftw_timelimit = -1.0_pReal, & !< sets the timelimit of plan creation for FFTW, see manual on www.fftw.org, Default -1.0: disable timelimit
rotation_tol = 1.0e-12_pReal, & !< tolerance of rotation specified in loadcase, Default 1.0e-12: first guess
polarAlpha = 1.0_pReal, & !< polarization scheme parameter 0.0 < alpha < 2.0. alpha = 1.0 ==> AL scheme, alpha = 2.0 ==> accelerated scheme
@ -148,9 +149,11 @@ subroutine numerics_init
integer(pInt), parameter :: FILEUNIT = 300_pInt ,&
maxNchunks = 2_pInt
!$ integer :: gotDAMASK_NUM_THREADS = 1
integer :: i ! no pInt
integer(pInt), dimension(1+2*maxNchunks) :: positions
character(len=65536) :: tag
character(len=65536) :: line
character(len=65536) :: &
tag ,&
line
!$ character(len=6) DAMASK_NumThreadsString ! environment variable DAMASK_NUM_THREADS
write(6,'(/,a)') ' <<<+- numerics init -+>>>'
@ -173,8 +176,11 @@ subroutine numerics_init
!--------------------------------------------------------------------------------------------------
! read variables from config file and overwrite default parameters if keyword is present
line = ''
do while (trim(line) /= '#EOF#') ! read thru sections of phase part
do while (trim(line) /= '#EOF#') ! read thru sections of phase part
line = IO_read(fileunit)
do i=1,len(line)
if(line(i:i) == '=') line(i:i) = ' ' ! also allow keyword = value version
enddo
if (IO_isBlank(line)) cycle ! skip empty lines
positions = IO_stringPos(line,maxNchunks)
tag = IO_lc(IO_stringValue(line,positions,1_pInt)) ! extract key
@ -304,18 +310,20 @@ subroutine numerics_init
petsc_options = trim(line(positions(4):))
case ('myspectralsolver')
myspectralsolver = IO_lc(IO_stringValue(line,positions,2_pInt))
case ('err_f_tol')
err_f_tol = IO_floatValue(line,positions,2_pInt)
case ('err_p_tol')
err_p_tol = IO_floatValue(line,positions,2_pInt)
case ('err_f_tolabs')
err_f_tolabs = IO_floatValue(line,positions,2_pInt)
case ('err_p_tolabs')
err_p_tolabs = IO_floatValue(line,positions,2_pInt)
case ('err_f_p_tolrel')
err_f_p_tolrel = IO_floatValue(line,positions,2_pInt)
case ('polaralpha')
polarAlpha = IO_floatValue(line,positions,2_pInt)
case ('polarbeta')
polarBeta = IO_floatValue(line,positions,2_pInt)
#endif
#ifndef PETSc
case ('myspectralsolver', 'petsc_options','err_f_tol', 'err_p_tol', &
'polaralpha','polarBeta') ! found PETSc parameter, but compiled without PETSc
case ('myspectralsolver', 'petsc_options','err_f_tolabs', 'err_p_tolabs', &
'err_f_p_tolrel','polaralpha','polarBeta') ! found PETSc parameter, but compiled without PETSc
call IO_warning(41_pInt,ext_msg=tag)
#endif
#endif
@ -323,7 +331,7 @@ subroutine numerics_init
case ('err_div_tol','err_stress_tolrel','err_stress_tolabs',& ! found spectral parameter for FEM build
'itmax', 'itmin','memory_efficient','fftw_timelimit','fftw_plan_mode','myspectralsolver', &
'rotation_tol','divergence_correction','update_gamma','petsc_options','myfilter', &
'err_f_tol', 'err_p_tol', 'maxcutback','polaralpha','polarbeta')
'err_f_tolabs', 'err_p_tolabs', 'err_f_p_tolrel', 'maxcutback','polaralpha','polarbeta')
call IO_warning(40_pInt,ext_msg=tag)
#endif
case default ! found unknown keyword
@ -433,8 +441,9 @@ subroutine numerics_init
write(6,'(a24,1x,i8)') ' divergence_correction: ',divergence_correction
write(6,'(a24,1x,L8,/)') ' update_gamma: ',update_gamma
#ifdef PETSc
write(6,'(a24,1x,es8.1)') ' err_f_tol: ',err_f_tol
write(6,'(a24,1x,es8.1)') ' err_p_tol: ',err_p_tol
write(6,'(a24,1x,es8.1)') ' err_f_tolabs: ',err_f_tolabs
write(6,'(a24,1x,es8.1)') ' err_p_tolabs: ',err_p_tolabs
write(6,'(a24,1x,es8.1)') ' err_f_p_tolrel: ',err_f_p_tolrel
write(6,'(a24,1x,es8.1)') ' polarAlpha: ',polarAlpha
write(6,'(a24,1x,es8.1)') ' polarBeta: ',polarBeta
write(6,'(a24,1x,a)') ' myspectralsolver: ',trim(myspectralsolver)
@ -494,13 +503,13 @@ subroutine numerics_init
if (update_gamma .and. &
.not. memory_efficient) call IO_error(error_ID = 847_pInt)
#ifdef PETSc
if (err_f_tol <= 0.0_pReal) call IO_error(301_pInt,ext_msg='err_f_tol')
if (err_p_tol <= 0.0_pReal) call IO_error(301_pInt,ext_msg='err_p_tol')
if (err_f_tolabs <= 0.0_pReal) call IO_error(301_pInt,ext_msg='err_f_tolabs')
if (err_p_tolabs <= 0.0_pReal) call IO_error(301_pInt,ext_msg='err_p_tolabs')
if (err_f_p_tolrel <= 0.0_pReal) call IO_error(301_pInt,ext_msg='err_f_p_tolrel')
if (polarAlpha <= 0.0_pReal .or. &
polarAlpha > 2.0_pReal) call IO_error(301_pInt,ext_msg='polarAlpha')
if (polarBeta <= 0.0_pReal .or. &
polarBeta > 2.0_pReal) call IO_error(301_pInt,ext_msg='polarBeta')
if (err_p_tol <= 0.0_pReal) call IO_error(301_pInt,ext_msg='err_p_tol')
#endif
#endif