From b9f97ba5daca0f8b9e14eb4e5ffa6372faebbf2c Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Fri, 19 Oct 2012 08:44:21 +0000 Subject: [PATCH] unified naming scheme, fixed a bug in the new basic scheme, and added a statistic file similar to abaqus to store the information on needed cut backs and iterations for each inc --- ..._Driver.f90 => DAMASK_spectral_driver.f90} | 84 ++++++++++--------- ...verAL.f90 => DAMASK_spectral_solverAL.f90} | 10 ++- ...ic.f90 => DAMASK_spectral_solverBasic.f90} | 14 ++-- ...0 => DAMASK_spectral_solverBasicPETSc.f90} | 7 +- ...ties.f90 => DAMASK_spectral_utilities.f90} | 46 ++++++---- code/Makefile | 36 +++++--- 6 files changed, 115 insertions(+), 82 deletions(-) rename code/{DAMASK_spectral_Driver.f90 => DAMASK_spectral_driver.f90} (88%) rename code/{DAMASK_spectral_SolverAL.f90 => DAMASK_spectral_solverAL.f90} (99%) rename code/{DAMASK_spectral_SolverBasic.f90 => DAMASK_spectral_solverBasic.f90} (98%) rename code/{DAMASK_spectral_SolverBasicPETSC.f90 => DAMASK_spectral_solverBasicPETSc.f90} (99%) rename code/{DAMASK_spectral_Utilities.f90 => DAMASK_spectral_utilities.f90} (96%) diff --git a/code/DAMASK_spectral_Driver.f90 b/code/DAMASK_spectral_driver.f90 similarity index 88% rename from code/DAMASK_spectral_Driver.f90 rename to code/DAMASK_spectral_driver.f90 index 745a752de..d0e245f60 100644 --- a/code/DAMASK_spectral_Driver.f90 +++ b/code/DAMASK_spectral_driver.f90 @@ -71,22 +71,22 @@ program DAMASK_spectral_Driver implicit none type tLoadCase - real(pReal), dimension (3,3) :: rotation = math_I3 ! rotation of BC - type(tBoundaryCondition) :: P, & ! stress BC - deformation ! deformation BC (Fdot or L) - real(pReal) :: time = 0.0_pReal, & ! length of increment - temperature = 300.0_pReal ! isothermal starting conditions - integer(pInt) :: incs = 0_pInt, & ! number of increments - outputfrequency = 1_pInt, & ! frequency of result writes - restartfrequency = 0_pInt, & ! frequency of restart writes - logscale = 0_pInt ! linear/logaritmic time inc flag - logical :: followFormerTrajectory = .true. ! follow trajectory of former loadcase + real(pReal), dimension (3,3) :: rotation = math_I3 !< rotation of BC + type(tBoundaryCondition) :: P, & !< stress BC + deformation !< deformation BC (Fdot or L) + real(pReal) :: time = 0.0_pReal, & !< length of increment + temperature = 300.0_pReal !< isothermal starting conditions + integer(pInt) :: incs = 0_pInt, & !< number of increments + outputfrequency = 1_pInt, & !< frequency of result writes + restartfrequency = 0_pInt, & !< frequency of restart writes + logscale = 0_pInt !< linear/logaritmic time inc flag + logical :: followFormerTrajectory = .true. !< follow trajectory of former loadcase end type tLoadCase !-------------------------------------------------------------------------------------------------- ! variables related to information from load case and geom file - real(pReal), dimension(9) :: temp_valueVector !> temporarily from loadcase file when reading in tensors - logical, dimension(9) :: temp_maskVector !> temporarily from loadcase file when reading in tensors + real(pReal), dimension(9) :: temp_valueVector !< temporarily from loadcase file when reading in tensors + logical, dimension(9) :: temp_maskVector !< temporarily from loadcase file when reading in tensors integer(pInt), parameter :: maxNchunksLoadcase = (1_pInt + 9_pInt)*3_pInt +& ! deformation, rotation, and stress (1_pInt + 1_pInt)*5_pInt +& ! time, (log)incs, temp, restartfrequency, and outputfrequency 1_pInt ! dropguessing @@ -104,13 +104,14 @@ program DAMASK_spectral_Driver !-------------------------------------------------------------------------------------------------- ! loop variables, convergence etc. - real(pReal), dimension(3,3), parameter :: ones = 1.0_pReal, zeroes = 0.0_pReal + real(pReal), dimension(3,3), parameter :: ones = 1.0_pReal, zeros = 0.0_pReal real(pReal) :: time = 0.0_pReal, time0 = 0.0_pReal, timeinc = 1.0_pReal, timeinc_old = 0.0_pReal ! elapsed time, begin of interval, time interval, previous time interval real(pReal) :: guessmode integer(pInt) :: i, j, k, l, errorID, cutBackLevel = 0_pInt, stepFraction = 0_pInt integer(pInt) :: currentLoadcase = 0_pInt, inc, & totalIncsCounter = 0_pInt,& - notConvergedCounter = 0_pInt, convergedCounter = 0_pInt + notConvergedCounter = 0_pInt, convergedCounter = 0_pInt, & + resUnit = 0_pInt, statUnit = 0_pInt character(len=6) :: loadcase_string character(len=1024) :: incInfo type(tLoadCase), allocatable, dimension(:) :: loadCases @@ -121,7 +122,7 @@ program DAMASK_spectral_Driver call CPFEM_initAll(temperature = 300.0_pReal, element = 1_pInt, IP= 1_pInt) write(6,'(a)') '' - write(6,'(a)') ' <<<+- DAMASK_spectral_Driver init -+>>>' + write(6,'(a)') ' <<<+- DAMASK_spectral_driver init -+>>>' write(6,'(a)') ' $Id$' #include "compilation_info.f90" !-------------------------------------------------------------------------------------------------- @@ -175,7 +176,7 @@ program DAMASK_spectral_Driver if (temp_maskVector(j)) temp_valueVector(j) = IO_floatValue(line,positions,i+j) enddo loadCases(currentLoadCase)%deformation%maskLogical = transpose(reshape(temp_maskVector,[ 3,3])) - loadCases(currentLoadCase)%deformation%maskFloat = merge(ones,zeroes,& + loadCases(currentLoadCase)%deformation%maskFloat = merge(ones,zeros,& loadCases(currentLoadCase)%deformation%maskLogical) loadCases(currentLoadCase)%deformation%values = math_plain9to33(temp_valueVector) case('p','pk1','piolakirchhoff','stress') @@ -185,7 +186,7 @@ program DAMASK_spectral_Driver if (temp_maskVector(j)) temp_valueVector(j) = IO_floatValue(line,positions,i+j) enddo loadCases(currentLoadCase)%P%maskLogical = transpose(reshape(temp_maskVector,[ 3,3])) - loadCases(currentLoadCase)%P%maskFloat = merge(ones,zeroes,& + loadCases(currentLoadCase)%P%maskFloat = merge(ones,zeros,& loadCases(currentLoadCase)%P%maskLogical) loadCases(currentLoadCase)%P%values = math_plain9to33(temp_valueVector) case('t','time','delta') ! increment time @@ -256,7 +257,6 @@ program DAMASK_spectral_Driver write(6,'(2x,a,i5)') 'increments: ', loadCases(currentLoadCase)%incs write(6,'(2x,a,i5)') 'output frequency: ', loadCases(currentLoadCase)%outputfrequency write(6,'(2x,a,i5,/)') 'restart frequency: ', loadCases(currentLoadCase)%restartfrequency - if (any(loadCases(currentLoadCase)%P%maskLogical .eqv. loadCases(currentLoadCase)%deformation%maskLogical)) errorID = 831_pInt ! exclusive or masking only if (any(loadCases(currentLoadCase)%P%maskLogical .and. transpose(loadCases(currentLoadCase)%P%maskLogical) .and. & reshape([ .false.,.true.,.true.,.true.,.false.,.true.,.true.,.true.,.false.],[ 3,3]))) & @@ -290,25 +290,29 @@ program DAMASK_spectral_Driver !-------------------------------------------------------------------------------------------------- ! write header of output file if (appendToOutFile) then - open(538,file=trim(getSolverWorkingDirectoryName())//trim(getSolverJobName())//'.spectralOut',& - form='UNFORMATTED', position='APPEND', status='OLD') + open(newunit=resUnit,file=trim(getSolverWorkingDirectoryName())//trim(getSolverJobName())//& + '.spectralOut',form='UNFORMATTED', position='APPEND', status='OLD') + open(newunit=statUnit,file=trim(getSolverWorkingDirectoryName())//trim(getSolverJobName())//& + '.sta',form='FORMATTED', position='APPEND', status='OLD') else - open(538,file=trim(getSolverWorkingDirectoryName())//trim(getSolverJobName())//'.spectralOut',& - form='UNFORMATTED',status='REPLACE') - write(538) 'load', trim(loadCaseFile) - write(538) 'workingdir', trim(getSolverWorkingDirectoryName()) - write(538) 'geometry', trim(geometryFile) - write(538) 'resolution', res - write(538) 'dimension', geomdim - write(538) 'materialpoint_sizeResults', materialpoint_sizeResults - write(538) 'loadcases', size(loadCases) - write(538) 'frequencies', loadCases%outputfrequency ! one entry per currentLoadCase - write(538) 'times', loadCases%time ! one entry per currentLoadCase - write(538) 'logscales', loadCases%logscale - write(538) 'increments', loadCases%incs ! one entry per currentLoadCase - write(538) 'startingIncrement', restartInc - 1_pInt ! start with writing out the previous inc - write(538) 'eoh' ! end of header - write(538) materialpoint_results(1_pInt:materialpoint_sizeResults,1,1_pInt:mesh_NcpElems) ! initial (non-deformed or read-in) results + open(newunit=resUnit,file=trim(getSolverWorkingDirectoryName())//trim(getSolverJobName())//& + '.spectralOut',form='UNFORMATTED',status='REPLACE') + open(newunit=statUnit,file=trim(getSolverWorkingDirectoryName())//trim(getSolverJobName())//& + '.sta',form='FORMATTED',status='REPLACE') + write(resUnit) 'load', trim(loadCaseFile) + write(resUnit) 'workingdir', trim(getSolverWorkingDirectoryName()) + write(resUnit) 'geometry', trim(geometryFile) + write(resUnit) 'resolution', res + write(resUnit) 'dimension', geomdim + write(resUnit) 'materialpoint_sizeResults', materialpoint_sizeResults + write(resUnit) 'loadcases', size(loadCases) + write(resUnit) 'frequencies', loadCases%outputfrequency ! one entry per currentLoadCase + write(resUnit) 'times', loadCases%time ! one entry per currentLoadCase + write(resUnit) 'logscales', loadCases%logscale + write(resUnit) 'increments', loadCases%incs ! one entry per currentLoadCase + write(resUnit) 'startingIncrement', restartInc - 1_pInt ! start with writing out the previous inc + write(resUnit) 'eoh' ! end of header + write(resUnit) materialpoint_results(1_pInt:materialpoint_sizeResults,1,1_pInt:mesh_NcpElems) ! initial (non-deformed or read-in) results if (debugGeneral) write(6,'(a)') 'Header of result file written out' endif @@ -408,11 +412,13 @@ program DAMASK_spectral_Driver elseif (solres%termIll) then ! material point model cannot find a solution call IO_error(850_pInt) else - guessmode=1.0_pReal ! start guessing after first accepted (not converged) (sub)inc + guessmode = 1.0_pReal ! start guessing after first accepted (not converged) (sub)inc endif else guessmode = 1.0_pReal ! start guessing after first converged (sub)inc endif + if(guessmode == 1.0_pReal) & + write(statUnit,*) inc, time, cutBackLevel, solres%converged, solres%iterationsNeeded enddo subIncLooping cutBackLevel = max(0_pInt, cutBackLevel - 1_pInt) ! try half subincs next inc if(solres%converged) then @@ -427,7 +433,7 @@ program DAMASK_spectral_Driver if (mod(inc,loadCases(currentLoadCase)%outputFrequency) == 0_pInt) then ! at output frequency write(6,'(1/,a)') '... writing results to file ......................................' - write(538) materialpoint_results ! write result to file + write(resUnit) materialpoint_results ! write result to file endif else !just time forwarding time = time + timeinc @@ -456,7 +462,7 @@ program DAMASK_spectral_Driver real(convergedCounter, pReal)/& real(notConvergedCounter + convergedCounter,pReal)*100.0_pReal, & ' %) increments converged!' - close(538) + close(resUnit) if (notConvergedCounter > 0_pInt) call quit(3_pInt) call quit(0_pInt) diff --git a/code/DAMASK_spectral_SolverAL.f90 b/code/DAMASK_spectral_solverAL.f90 similarity index 99% rename from code/DAMASK_spectral_SolverAL.f90 rename to code/DAMASK_spectral_solverAL.f90 index cc73d3ef5..65bc705d1 100644 --- a/code/DAMASK_spectral_SolverAL.f90 +++ b/code/DAMASK_spectral_solverAL.f90 @@ -71,7 +71,7 @@ module DAMASK_spectral_SolverAL real(pReal), private :: err_stress, err_f, err_p logical, private :: ForwardData real(pReal), private, dimension(3,3) :: mask_stress = 0.0_pReal - + integer(pInt) :: reportIter = 0_pInt contains !-------------------------------------------------------------------------------------------------- @@ -343,8 +343,10 @@ else terminallyIll = .false. - if (reason > 0 ) AL_solution%converged = .true. - + if (reason > 0 ) then + AL_solution%converged = .true. + AL_solution%iterationsNeeded = reportIter + endif end function AL_solution !-------------------------------------------------------------------------------------------------- @@ -373,7 +375,7 @@ else implicit none integer(pInt) :: i,j,k - integer(pInt), save :: callNo = 3_pInt, reportIter = 0_pInt + integer(pInt), save :: callNo = 3_pInt real(pReal), dimension(3,3) :: temp33_Real logical :: report diff --git a/code/DAMASK_spectral_SolverBasic.f90 b/code/DAMASK_spectral_solverBasic.f90 similarity index 98% rename from code/DAMASK_spectral_SolverBasic.f90 rename to code/DAMASK_spectral_solverBasic.f90 index c7360f923..4555425ff 100644 --- a/code/DAMASK_spectral_SolverBasic.f90 +++ b/code/DAMASK_spectral_solverBasic.f90 @@ -235,14 +235,15 @@ else F_lastInc = F endif F_aim = F_aim + f_aimDot * timeinc - F = Utilities_forwardField(timeinc,F_aim,F_lastInc,Fdot) !I thin F aim should be rotated here -print*, 'F', sum(sum(sum(F,dim=5),dim=4),dim=3)*wgt + F = Utilities_forwardField(timeinc,F_aim,F_lastInc,Fdot) !I think F aim should be rotated here + !-------------------------------------------------------------------------------------------------- ! update stiffness (and gamma operator) S = Utilities_maskedCompliance(rotation_BC,P_BC%maskLogical,C) + if (update_gamma) call Utilities_updateGamma(C) - + ForwardData = .True. iter = 0_pInt convergenceLoop: do while(iter < itmax) @@ -250,7 +251,7 @@ print*, 'F', sum(sum(sum(F,dim=5),dim=4),dim=3)*wgt !-------------------------------------------------------------------------------------------------- ! report begin of new iteration write(6,'(/,a,3(a,'//IO_intOut(itmax)//'))') trim(incInfo), & - ' @ Iter. ', itmin, '<',iter, '≤', itmax + ' @ Iter. ', itmin, '≤',iter, '≤', itmax write(6,'(a,/,3(3(f12.7,1x)/))',advance='no') 'deformation gradient aim =', & math_transpose33(F_aim) F_aim_lab_lastIter = math_rotate_backward33(F_aim,rotation_BC) @@ -282,7 +283,10 @@ print*, 'F', sum(sum(sum(F,dim=5),dim=4),dim=3)*wgt F = F - reshape(field_real(1:res(1),1:res(2),1:res(3),1:3,1:3),shape(F),order=[3,4,5,1,2]) ! F(x)^(n+1) = F(x)^(n) + correction; *wgt: correcting for missing normalization basic_solution%converged = basic_Converged(err_div,P_av,err_stress,P_av) write(6,'(/,a)') '==========================================================================' - if ((basic_solution%converged .and. iter > itmin) .or. basic_solution%termIll) exit + if ((basic_solution%converged .and. iter >= itmin) .or. basic_solution%termIll) then + basic_solution%iterationsNeeded = iter + exit + endif enddo convergenceLoop end function basic_solution diff --git a/code/DAMASK_spectral_SolverBasicPETSC.f90 b/code/DAMASK_spectral_solverBasicPETSc.f90 similarity index 99% rename from code/DAMASK_spectral_SolverBasicPETSC.f90 rename to code/DAMASK_spectral_solverBasicPETSc.f90 index b90e71035..1b297cd0c 100644 --- a/code/DAMASK_spectral_SolverBasicPETSC.f90 +++ b/code/DAMASK_spectral_solverBasicPETSc.f90 @@ -116,7 +116,7 @@ subroutine BasicPETSC_init() call Utilities_init() - write(6,'(/,a)') ' <<<+- DAMASK_spectral_solverBasicPETSC init -+>>>' + write(6,'(/,a)') ' <<<+- DAMASK_spectral_solverBasicPETSc init -+>>>' write(6,'(a)') ' $Id: DAMASK_spectral_SolverBasicPETSC.f90 1654 2012-08-03 09:25:48Z MPIE\m.diehl $' #include "compilation_info.f90" write(6,'(a)') '' @@ -307,7 +307,9 @@ else basicPETSc_solution%termIll = terminallyIll terminallyIll = .false. BasicPETSC_solution%converged =.false. - if (reason > 0 ) BasicPETSC_solution%converged = .true. + if (reason > 0 ) then + BasicPETSC_solution%converged = .true. + endif end function BasicPETSC_solution @@ -433,7 +435,6 @@ else ' (',err_div/pAvgDivL2,' N/m³)' write(6,'(a,f6.2,a,es11.4,a)') 'error stress = ', err_stress/min(maxval(abs(P_av))*err_stress_tolrel,err_stress_tolabs), & ' (',err_stress,' Pa)' - return end subroutine BasicPETSC_converged diff --git a/code/DAMASK_spectral_Utilities.f90 b/code/DAMASK_spectral_utilities.f90 similarity index 96% rename from code/DAMASK_spectral_Utilities.f90 rename to code/DAMASK_spectral_utilities.f90 index 4f2fe5edb..06ba4b5f7 100644 --- a/code/DAMASK_spectral_Utilities.f90 +++ b/code/DAMASK_spectral_utilities.f90 @@ -23,12 +23,11 @@ module DAMASK_spectral_Utilities IO_error implicit none - !-------------------------------------------------------------------------------------------------- ! variables storing information for spectral method and FFTW - type(C_PTR), private :: plan_forward, plan_backward ! plans for fftw - real(pReal), private, dimension(:,:,:,:,:,:,:), allocatable :: gamma_hat ! gamma operator (field) for spectral method - real(pReal), private, dimension(:,:,:,:), allocatable :: xi ! wave vector field for divergence and for gamma operator + type(C_PTR), private :: plan_forward, plan_backward ! plans for fftw + real(pReal), private, dimension(:,:,:,:,:,:,:), allocatable :: gamma_hat ! gamma operator (field) for spectral method + real(pReal), private, dimension(:,:,:,:), allocatable :: xi ! wave vector field for divergence and for gamma operator complex(pReal),private, dimension(:,:,:,:,:), pointer :: field_fourier real(pReal), private, dimension(3,3,3,3) :: C_ref @@ -54,9 +53,10 @@ module DAMASK_spectral_Utilities !-------------------------------------------------------------------------------------------------- ! derived types type tSolutionState - logical :: converged = .true. - logical :: regrid = .false. - logical :: termIll = .false. + logical :: converged = .true. + logical :: regrid = .false. + logical :: termIll = .false. + integer(pInt) :: iterationsNeeded = 0_pInt end type tSolutionState type tBoundaryCondition @@ -105,7 +105,7 @@ subroutine Utilities_init() write(6,'(a)') '' - write(6,'(a)') ' <<<+- DAMASK_Utilities init -+>>>' + write(6,'(a)') ' <<<+- DAMASK_spectral_utilities init -+>>>' write(6,'(a)') ' $Id$' #include "compilation_info.f90" write(6,'(a)') '' @@ -454,14 +454,15 @@ end function Utilities_divergenceRMS !-------------------------------------------------------------------------------------------------- !> @brief calculates mask compliance !-------------------------------------------------------------------------------------------------- -function Utilities_maskedCompliance(rot_BC,mask_stressVector,C) +function Utilities_maskedCompliance(rot_BC,mask_stress,C) implicit none real(pReal), dimension(3,3,3,3) :: Utilities_maskedCompliance real(pReal), dimension(3,3,3,3), intent(in) :: C integer(pInt) :: j, k, m, n real(pReal), dimension(3,3), intent(in) :: rot_BC - logical, dimension(9), intent(in) :: mask_stressVector + logical, dimension(3,3), intent(in) :: mask_stress + logical, dimension(9) :: mask_stressVector real(pReal), dimension(3,3,3,3) :: C_lastInc real(pReal), dimension(9,9) :: temp99_Real integer(pInt) :: size_reduced = 0_pInt @@ -469,13 +470,16 @@ function Utilities_maskedCompliance(rot_BC,mask_stressVector,C) logical :: errmatinv character(len=1024):: formatString - size_reduced = count(mask_stressVector) + mask_stressVector = reshape(transpose(mask_stress), [9]) + size_reduced = int(count(mask_stressVector), pInt) if(size_reduced > 0_pInt )then allocate (c_reduced(size_reduced,size_reduced), source =0.0_pReal) allocate (s_reduced(size_reduced,size_reduced), source =0.0_pReal) allocate (sTimesC(size_reduced,size_reduced), source =0.0_pReal) - C_lastInc = math_rotate_forward3333(C*0.75_pReal+0.05_pReal*C_ref,rot_BC) ! calculate stiffness from former inc + C_lastInc = math_rotate_forward3333(C,rot_BC) ! calculate stiffness from former inc + print*,'C' + print*,C_lastInc temp99_Real = math_Plain3333to99(C_lastInc) k = 0_pInt ! build reduced stiffness do n = 1_pInt,9_pInt @@ -521,7 +525,8 @@ function Utilities_maskedCompliance(rot_BC,mask_stressVector,C) temp99_real = 0.0_pReal endif Utilities_maskedCompliance = math_Plain99to3333(temp99_Real) - + print*,'masked S' + print*,Utilities_maskedCompliance end function Utilities_maskedCompliance subroutine Utilities_constitutiveResponse(coordinates,F_lastInc,F,temperature,timeinc,& @@ -539,15 +544,16 @@ subroutine Utilities_constitutiveResponse(coordinates,F_lastInc,F,temperature,ti real(pReal), dimension(3,3,res(1),res(2),res(3)), intent(in) :: F,F_lastInc real(pReal), dimension(3,3,res(1),res(2),res(3)) :: P - real(pReal) :: timeinc + real(pReal),intent(in) :: timeinc logical, intent(in) :: forwardData integer(pInt) :: i, j, k, ielem integer(pInt) :: calcMode, collectMode - real(pReal), dimension(3,3,3,3) :: dPdF, C + real(pReal), dimension(3,3,3,3) :: dPdF + real(pReal), dimension(3,3,3,3),intent(out) :: C real(pReal), dimension(6) :: sigma ! cauchy stress real(pReal), dimension(6,6) :: dsde real(pReal), dimension(3,3), intent(in) :: rotation_BC - real(pReal), dimension(3,3) :: P_av + real(pReal), dimension(3,3),intent(out) :: P_av write(6,'(/,a,/)') '... evaluating constitutive response ......................................' if (forwardData) then @@ -561,8 +567,12 @@ subroutine Utilities_constitutiveResponse(coordinates,F_lastInc,F,temperature,ti calcMode = 2_pInt collectMode = 5_pInt endif - print*, 'collect mode', collectMode - print*, 'calc mode', calcMode + + if (DebugGeneral) then + write(6,*) 'collect mode', collectMode + write(6,*) 'calc mode', calcMode + endif + ielem = 0_pInt do k = 1_pInt, res(3); do j = 1_pInt, res(2); do i = 1_pInt, res(1) ielem = ielem + 1_pInt diff --git a/code/Makefile b/code/Makefile index b0faa88c3..8f715331e 100644 --- a/code/Makefile +++ b/code/Makefile @@ -127,6 +127,7 @@ endif ifneq "$(FASTBUILD)" "YES" STANDARD_CHECK_ifort ?=-stand f08 -standard-semantics -warn stderrors STANDARD_CHECK_gfortran ?=-std=f2008 -fall-intrinsics +#-std=2008ts for newer gfortran endif #-fall-intrinsics: all intrinsic procedures (including the GNU-specific extensions) are accepted. This can be useful with -std=f95 to force standard-compliance # but get access to the full range of intrinsics available with gfortran. As a consequence, -Wintrinsics-std will be ignored and no user-defined @@ -142,6 +143,7 @@ OPTIMIZATION_AGGRESSIVE_gfortran :=-O3 $(PORTABLE_SWITCH) -ffast-math -funroll-l COMPILE_OPTIONS_ifort :=-fpp\ + -ftz\ -assume byterecl ifneq "$(FASTBUILD)" "YES" COMPILE_OPTIONS_ifort :=$(COMPILE_OPTIONS_ifort)\ @@ -159,6 +161,7 @@ COMPILE_OPTIONS_ifort :=$(COMPILE_OPTIONS_ifort)\ endif #-fpp: preprocessor +#-ftz: flush unterflow to zero, automatically set if O<0,1,2,3> >0 #-fimplicit-none: assume "implicit-none" even if not present in source #-diag-disable: disables warnings, where # warning ID 5268: the text exceeds right hand column allowed on the line (we have only comments there) @@ -194,6 +197,7 @@ endif # pointers: Checking for certain disassociated or uninitialized pointers or unallocated allocatable objects. # uninit: Checking for uninitialized variables. #-heap-arrays: should not be done for OpenMP, but set "ulimit -s unlimited" on shell. Probably it helps also to unlimit other limits +#-fpe-all0 capture all floating-point exceptions, sets -ftz automatically ################################################################################################### COMPILE_OPTIONS_gfortran :=-xf95-cpp-input @@ -258,6 +262,12 @@ endif # #OPTIONS FOR DEGUBBING DURING RUNTIME #-fcheck-bounds: check if an array index is too small (<1) or too large! +#-ffpe-trap=invalid,\ stop execution if floating point exception is detected (NaN is silent) +# zero,\ +# overflow,\ +# underflow,\ +# precision,\ +# denormal ################################################################################################## PRECISION_ifort :=-real-size 64 -integer-size 32 -DFLOAT=8 -DINT=4 @@ -281,29 +291,29 @@ COMPILED_FILES = prec.o DAMASK_spectral_interface.o IO.o numerics.o debug.o math ifeq "$(SOLVER)" "NEW" ifdef PETSC_DIR -PETSC_FILES = DAMASK_spectral_SolverAL.o DAMASK_spectral_SolverBasicPETSC.o +PETSC_FILES = DAMASK_spectral_solverAL.o DAMASK_spectral_solverBasicPETSc.o endif -COMPILED_FILES += DAMASK_spectral_Utilities.o DAMASK_spectral_SolverBasic.o $(PETSC_FILES) +COMPILED_FILES += DAMASK_spectral_utilities.o DAMASK_spectral_solverBasic.o $(PETSC_FILES) -DAMASK_spectral.exe: DAMASK_spectral_Driver.o +DAMASK_spectral.exe: DAMASK_spectral_driver.o $(PREFIX) $(COMPILERNAME) $(OPENMP_FLAG_$(F90)) $(OPTIMIZATION_$(MAXOPTI)_$(F90)) $(STANDARD_CHECK_$(F90)) \ - -o DAMASK_spectral.exe DAMASK_spectral_Driver.o \ + -o DAMASK_spectral.exe DAMASK_spectral_driver.o \ $(COMPILED_FILES) $(LIB_DIRS) $(LIBRARIES) $(SUFFIX) -DAMASK_spectral_Driver.o: DAMASK_spectral_Driver.f90 DAMASK_spectral_SolverBasic.o $(PETSC_FILES) - $(PREFIX) $(COMPILERNAME) $(COMPILE_MAXOPTI) -c DAMASK_spectral_Driver.f90 $(SUFFIX) +DAMASK_spectral_driver.o: DAMASK_spectral_driver.f90 DAMASK_spectral_solverBasic.o $(PETSC_FILES) + $(PREFIX) $(COMPILERNAME) $(COMPILE_MAXOPTI) -c DAMASK_spectral_driver.f90 $(SUFFIX) -DAMASK_spectral_SolverAL.o: DAMASK_spectral_SolverAL.f90\ - DAMASK_spectral_Utilities.o +DAMASK_spectral_solverAL.o: DAMASK_spectral_solverAL.f90\ + DAMASK_spectral_utilities.o -DAMASK_spectral_SolverBasic.o: DAMASK_spectral_SolverBasic.f90\ - DAMASK_spectral_Utilities.o +DAMASK_spectral_solverBasic.o: DAMASK_spectral_solverBasic.f90\ + DAMASK_spectral_utilities.o -DAMASK_spectral_SolverBasicPETSC.o: DAMASK_spectral_SolverBasicPETSC.f90\ - DAMASK_spectral_Utilities.o +DAMASK_spectral_solverBasicPETSc.o: DAMASK_spectral_solverBasicPETSc.f90\ + DAMASK_spectral_utilities.o -DAMASK_spectral_Utilities.o: DAMASK_spectral_Utilities.f90\ +DAMASK_spectral_utilities.o: DAMASK_spectral_utilities.f90\ CPFEM.o else DAMASK_spectral.exe: DAMASK_spectral.o