From 73349d02f5899da947186bea185b167eb2f74031 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Tue, 28 Aug 2012 16:08:17 +0000 Subject: [PATCH] merged precision info into the file prec.f90 and removed prec_single.f90 precision information is now parsed as a makro, defined by the compiler, eg. -DFLOAT=8 for 8 byte long floats or -- in case no values is given -- for the FEM wrapper by the interface files. Please don't forget to run setup_code.py !!!!!!!!!!! abaqus_v6.env is adjusted to specify the standard precision (float=8, int=4) and got some extra compilation options, some deprecated warning supressors are removed Optional Marc modification will follow that allow automatic selection of suitable precision --- code/DAMASK_abaqus_exp.f | 21 +++++-- code/DAMASK_abaqus_std.f | 26 +++++--- code/DAMASK_marc.f90 | 15 ++++- code/Makefile | 21 ++++--- code/prec.f90 | 44 +++++++++----- code/prec_single.f90 | 82 -------------------------- installation/mods_Abaqus/abaqus_v6.env | 12 ++-- processing/setup/setup_processing.py | 10 ++-- 8 files changed, 95 insertions(+), 136 deletions(-) delete mode 100644 code/prec_single.f90 diff --git a/code/DAMASK_abaqus_exp.f b/code/DAMASK_abaqus_exp.f index d40630aa5..71cab73f4 100644 --- a/code/DAMASK_abaqus_exp.f +++ b/code/DAMASK_abaqus_exp.f @@ -37,9 +37,18 @@ ! !******************************************************************** -#include "prec.f90" +#ifndef INT +#define INT 4 +#endif + +#ifndef FLOAT +#define FLOAT 8 +#endif + #define Abaqus +#include "prec.f90" + module DAMASK_interface implicit none @@ -134,7 +143,7 @@ subroutine vumat (jblock, ndir, nshr, nstatev, nfieldv, nprops, lanneal, & stressNew(*), stateNew(*), & enerInternNew(*), enerInelasNew(*) - character*80 cmname + character(80) cmname call vumatXtrArg ( jblock(1), & @@ -193,7 +202,7 @@ subroutine vumat (jblock, ndir, nshr, nstatev, nfieldv, nprops, lanneal, & dimension enerInelasNew(nblock),stateNew(nblock,nstatev),enerInternNew(nblock) dimension nElement(nblock),nMatPoint(nblock) - character*80 cmname + character(80) cmname real(pReal), dimension (3,3) :: pstress ! not used, but needed for call of cpfem_general real(pReal), dimension (3,3,3,3) :: dPdF ! not used, but needed for call of cpfem_general ! local variables @@ -213,7 +222,7 @@ subroutine vumat (jblock, ndir, nshr, nstatev, nfieldv, nprops, lanneal, & if (iand(debug_level(debug_abaqus),debug_levelBasic) /= 0) then !$OMP CRITICAL (write2out) - write(6,'(i8,x,i2,x,a)') nElement(n),nMatPoint(n),'first call special case..!'; call flush(6) + write(6,'(i8,1x,i2,1x,a)') nElement(n),nMatPoint(n),'first call special case..!'; call flush(6) !$OMP END CRITICAL (write2out) endif @@ -222,7 +231,7 @@ subroutine vumat (jblock, ndir, nshr, nstatev, nfieldv, nprops, lanneal, & if (iand(debug_level(debug_abaqus),debug_levelBasic) /= 0) then !$OMP CRITICAL (write2out) - write (6,'(i8,x,i2,x,a)') nElement(n),nMatPoint(n),'lastIncConverged + outdated'; call flush(6) + write (6,'(i8,1x,i2,1x,a)') nElement(n),nMatPoint(n),'lastIncConverged + outdated'; call flush(6) !$OMP END CRITICAL (write2out) endif @@ -244,7 +253,7 @@ subroutine vumat (jblock, ndir, nshr, nstatev, nfieldv, nprops, lanneal, & if (iand(debug_level(debug_abaqus),debug_levelBasic) /= 0) then !$OMP CRITICAL (write2out) - write(6,'(a16,x,i2,x,a,i8,x,i5,a)') 'computationMode',computationMode,'(',nElement(n),nMatPoint(n),')'; call flush(6) + write(6,'(a16,1x,i2,1x,a,i8,1x,i5,a)') 'computationMode',computationMode,'(',nElement(n),nMatPoint(n),')'; call flush(6) !$OMP END CRITICAL (write2out) endif diff --git a/code/DAMASK_abaqus_std.f b/code/DAMASK_abaqus_std.f index 541596bbf..1e9c2fbe9 100644 --- a/code/DAMASK_abaqus_std.f +++ b/code/DAMASK_abaqus_std.f @@ -37,9 +37,17 @@ ! !******************************************************************** -#include "prec.f90" +#ifndef INT +#define INT 4 +#endif + +#ifndef FLOAT +#define FLOAT 8 +#endif + #define Abaqus +#include "prec.f90" module DAMASK_interface @@ -146,7 +154,7 @@ subroutine UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,& implicit none - CHARACTER*80 CMNAME + CHARACTER(80) CMNAME integer(pInt) ndi, nshr, ntens, nstatv, nprops, noel, npt,& kslay, kspt, kstep, kinc real(pReal) STRESS(NTENS),STATEV(NSTATV),& @@ -185,7 +193,7 @@ subroutine UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,& lastMode = .false. ! pretend last step was collection calcMode = .false. ! pretend last step was collection !$OMP CRITICAL (write2out) - write (6,'(i8,x,i2,x,a)') noel,npt,'<< UMAT >> start of analysis..!'; call flush(6) + write (6,'(i8,1x,i2,1x,a)') noel,npt,'<< UMAT >> start of analysis..!'; call flush(6) !$OMP END CRITICAL (write2out) else if (kinc - theInc > 1) then ! >> restart of broken analysis << lastIncConverged = .false. ! no Jacobian backup @@ -193,7 +201,7 @@ subroutine UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,& lastMode = .true. ! pretend last step was calculation calcMode = .true. ! pretend last step was calculation !$OMP CRITICAL (write2out) - write (6,'(i8,x,i2,x,a)') noel,npt,'<< UMAT >> restart of analysis..!'; call flush(6) + write (6,'(i8,1x,i2,1x,a)') noel,npt,'<< UMAT >> restart of analysis..!'; call flush(6) !$OMP END CRITICAL (write2out) else ! >> just the next inc << lastIncConverged = .true. ! request Jacobian backup @@ -201,7 +209,7 @@ subroutine UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,& lastMode = .true. ! assure last step was calculation calcMode = .true. ! assure last step was calculation !$OMP CRITICAL (write2out) - write (6,'(i8,x,i2,x,a)') noel,npt,'<< UMAT >> new increment..!'; call flush(6) + write (6,'(i8,1x,i2,1x,a)') noel,npt,'<< UMAT >> new increment..!'; call flush(6) !$OMP END CRITICAL (write2out) endif @@ -212,7 +220,7 @@ subroutine UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,& cycleCounter = -1 ! first calc step increments this to cycle = 0 calcMode = .true. ! pretend last step was calculation !$OMP CRITICAL (write2out) - write(6,'(i8,x,i2,x,a)') noel,npt,'<< UMAT >> cutback detected..!'; call flush(6) + write(6,'(i8,1x,i2,1x,a)') noel,npt,'<< UMAT >> cutback detected..!'; call flush(6) !$OMP END CRITICAL (write2out) endif ! convergence treatment end @@ -220,7 +228,7 @@ subroutine UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,& calcMode(npt,cp_en) = .not. calcMode(npt,cp_en) ! ping pong (calc <--> collect) if ( calcMode(npt,cp_en) ) then ! now calc - if ( lastMode /= calcMode(npt,cp_en) ) then ! first after ping pong + if ( lastMode .neqv. calcMode(npt,cp_en) ) then ! first after ping pong call debug_reset() ! resets debugging outdatedFFN1 = .false. cycleCounter = cycleCounter + 1 @@ -232,7 +240,7 @@ subroutine UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,& computationMode = 2 ! plain calc endif else ! now collect - if ( lastMode /= calcMode(npt,cp_en) .and. & + if ( lastMode .neqv. calcMode(npt,cp_en) .and. & .not. terminallyIll) then call debug_info() ! first after ping pong reports debugging endif @@ -254,7 +262,7 @@ subroutine UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,& if (iand(debug_level(debug_abaqus),debug_levelBasic) /= 0) then !$OMP CRITICAL (write2out) - write(6,'(a16,x,i2,x,a,i8,a,i8,x,i5,a)') 'computationMode',computationMode,'(',cp_en,':',noel,npt,')'; call flush(6) + write(6,'(a16,1x,i2,1x,a,i8,a,i8,1x,i5,a)') 'computationMode',computationMode,'(',cp_en,':',noel,npt,')'; call flush(6) !$OMP END CRITICAL (write2out) endif diff --git a/code/DAMASK_marc.f90 b/code/DAMASK_marc.f90 index e3a776913..2b4153c19 100644 --- a/code/DAMASK_marc.f90 +++ b/code/DAMASK_marc.f90 @@ -1,7 +1,7 @@ ! Copyright 2011 Max-Planck-Institut für Eisenforschung GmbH ! ! This file is part of DAMASK, -! the D√ºsseldorf Advanced MAterial Simulation Kit. +! the Düsseldorf Advanced Material Simulation Kit. ! ! DAMASK is free software: you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by @@ -54,10 +54,19 @@ ! - concom: lovl, ncycle, inc, incsub ! - creeps: timinc !******************************************************************** -! -#include "prec.f90" + +#ifndef INT +#define INT 4 +#endif + +#ifndef FLOAT +#define FLOAT 8 +#endif + #define Marc +#include "prec.f90" + module DAMASK_interface use prec, only: pInt diff --git a/code/Makefile b/code/Makefile index ee5f009fa..46f2b1c15 100644 --- a/code/Makefile +++ b/code/Makefile @@ -194,13 +194,8 @@ 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 -# -#OPTIONS FOR TYPE DEBUGGING -#-real-size 32: set precision to one of those 32/64/128 (= 4/8/16 bytes) for standard real (=8 for pReal) -#-integer-size 16: set precision to one of those 16/32/64 (= 2/4/8 bytes) for standard integer (=4 for pInt) ################################################################################################### - COMPILE_OPTIONS_gfortran :=-xf95-cpp-input ifneq "$(FASTBUILD)" "YES" COMPILE_OPTIONS_gfortran :=$(COMPILE_OPTIONS_gfortran)\ @@ -263,14 +258,18 @@ endif # #OPTIONS FOR DEGUBBING DURING RUNTIME #-fcheck-bounds: check if an array index is too small (<1) or too large! -# -#OPTIONS FOR TYPE DEBUGGING -#-fdefault-real-8: set precision to 8 bytes for standard real (=8 for pReal). Will set size of double to 16 bytes as long as -fdefault-double-8 is not set -#-fdefault-integer-8: set precision to 8 bytes for standard integer (=4 for pInt) ################################################################################################## -COMPILE =$(OPENMP_FLAG_$(F90)) $(COMPILE_OPTIONS_$(F90)) $(STANDARD_CHECK_$(F90)) $(OPTIMIZATION_$(OPTI)_$(F90)) $(INCLUDE_DIRS) -DSpectral -COMPILE_MAXOPTI =$(OPENMP_FLAG_$(F90)) $(COMPILE_OPTIONS_$(F90)) $(STANDARD_CHECK_$(F90)) $(OPTIMIZATION_$(MAXOPTI)_$(F90)) $(INCLUDE_DIRS) -DSpectral +PRECISION_ifort :=-real-size 64 -integer-size 32 -DFLOAT=8 -DINT=4 +#-real-size 32: set precision to one of those 32/64/128 (= 4/8/16 bytes) for standard real (=8 for pReal) +#-integer-size 16: set precision to one of those 16/32/64 (= 2/4/8 bytes) for standard integer (=4 for pInt) +PRECISION_gfortran :=-fdefault-real-8 -fdefault-integer-4 -DFLOAT=8 -DINT=4 +#-fdefault-real-8: set precision to 8 bytes for standard real (=8 for pReal). Will set size of double to 16 bytes as long as -fdefault-double-8 is not set +#-fdefault-integer-8: set precision to 8 bytes for standard integer (=4 for pInt) + +################################################################################################### +COMPILE =$(OPENMP_FLAG_$(F90)) $(COMPILE_OPTIONS_$(F90)) $(STANDARD_CHECK_$(F90)) $(OPTIMIZATION_$(OPTI)_$(F90)) $(INCLUDE_DIRS) $(PRECISION_$(F90)) -DSpectral +COMPILE_MAXOPTI =$(OPENMP_FLAG_$(F90)) $(COMPILE_OPTIONS_$(F90)) $(STANDARD_CHECK_$(F90)) $(OPTIMIZATION_$(MAXOPTI)_$(F90)) $(INCLUDE_DIRS) $(PRECISION_$(F90)) -DSpectral ################################################################################################### COMPILED_FILES = prec.o DAMASK_spectral_interface.o IO.o numerics.o debug.o math.o \ FEsolving.o mesh.o material.o lattice.o \ diff --git a/code/prec.f90 b/code/prec.f90 index 8abb89685..b84e129b2 100644 --- a/code/prec.f90 +++ b/code/prec.f90 @@ -1,7 +1,7 @@ ! Copyright 2011 Max-Planck-Institut für Eisenforschung GmbH ! ! This file is part of DAMASK, -! the Düsseldorf Advanced MAterial Simulation Kit. +! the Düsseldorf Advanced Material Simulation Kit. ! ! DAMASK is free software: you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by @@ -23,10 +23,10 @@ !> @author Philip Eisenlohr, Max-Planck-Institut für Eisenforschung GmbH !> @author Christoph Kords, Max-Planck-Institut für Eisenforschung GmbH !> @author Martin Diehl, Max-Planck-Institut für Eisenforschung GmbH -!> @brief setting precision for real and int type, using double precision for real +!> @brief setting precision for real and int type depending on makros "FLOAT" and "INT" !-------------------------------------------------------------------------------------------------- #ifdef __INTEL_COMPILER -#if __INTEL_COMPILER<1200 +#if __INTEL_COMPILER<1100 #define LEGACY_COMPILER #endif #endif @@ -34,24 +34,35 @@ !-------------------------------------------------------------------------------------------------- module prec - implicit none private - integer, parameter, public :: pReal = selected_real_kind(15,300) !< floating point number with 15 significant digits, up to 1e+-300 (double precision) - integer, parameter, public :: pInt = selected_int_kind(9) !< integer representation with at least up to +- 1e9 (32 bit) - integer, parameter, public :: pLongInt = selected_int_kind(12) !< integer representation with at least up to +- 1e12 (64 bit) +#if (FLOAT==4) + integer, parameter, public :: pReal = 4 !< floating point single precition (was selected_real_kind(6,37), number with 6 significant digits, up to 1e+-37) +#ifdef LEGACY_COMPILER + real(pReal), parameter, public :: DAMASK_NaN = Z'7F800001' !< quiet NaN for single precision (from http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_035.html, copy can be found in documentation/Code/Fortran) +#else + real(pReal), parameter, public :: DAMASK_NaN = real(Z'7F800001', pReal) !< quiet NaN for single precision (from http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_035.html, copy can be found in documentation/Code/Fortran) +#endif +#elif (FLOAT==8) + integer, parameter, public :: pReal = 8 !< floating point double precision (was selected_real_kind(15,300), number with 15 significant digits, up to 1e+-300) +#ifdef LEGACY_COMPILER + real(pReal), parameter, public :: DAMASK_NaN = Z'7FF8000000000000' !< quiet NaN for double precision (from http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_035.html, copy can be found in documentation/Code/Fortran) +#else + real(pReal), parameter, public :: DAMASK_NaN = real(Z'7FF8000000000000', pReal) !< quiet NaN for double precision (from http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_035.html, copy can be found in documentation/Code/Fortran) +#endif +#endif + +#if (INT==4) + integer, parameter, public :: pInt = 4 !< integer representation 32 bit (was selected_int_kind(9), number with at least up to +- 1e9) +#elif (INT==8) + integer, parameter, public :: pInt = 8 !< integer representation 64 bit (was selected_int_kind(12), number with at least up to +- 1e12) +#endif + + integer, parameter, public :: pLongInt = 8 !< integer representation 64 bit (was selected_int_kind(12), number with at least up to +- 1e12) real(pReal), parameter, public :: tol_math_check = 1.0e-8_pReal real(pReal), parameter, public :: tol_gravityNodePos = 1.0e-100_pReal -! NaN is precision dependent -! from http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_035.html -! copy can be found in documentation/Code/Fortran -#ifdef LEGACY_COMPILER - real(pReal), parameter, public :: DAMASK_NaN = Z'7FF8000000000000' !< when using old compiler without standard check -#else - real(pReal), parameter, public :: DAMASK_NaN = real(Z'7FF8000000000000', pReal) !< quiet NaN for double precision -#endif type, public :: p_vec real(pReal), dimension(:), pointer :: p @@ -60,6 +71,7 @@ module prec public :: prec_init contains + !-------------------------------------------------------------------------------------------------- !> @brief reporting precision and checking if DAMASK_NaN is set correctly !-------------------------------------------------------------------------------------------------- @@ -82,8 +94,8 @@ subroutine prec_init write(6,'(a,i3)') ' Bytes for pLongInt: ',pLongInt write(6,'(a,e10.3)') ' NaN: ', DAMASK_NaN write(6,'(a,l3)') ' NaN /= NaN: ',DAMASK_NaN/=DAMASK_NaN - if (DAMASK_NaN == DAMASK_NaN) call quit(9000) write(6,*) + if (DAMASK_NaN == DAMASK_NaN) call quit(9000) !$OMP END CRITICAL (write2out) end subroutine prec_init diff --git a/code/prec_single.f90 b/code/prec_single.f90 deleted file mode 100644 index 5159326db..000000000 --- a/code/prec_single.f90 +++ /dev/null @@ -1,82 +0,0 @@ -! Copyright 2011 Max-Planck-Institut für Eisenforschung GmbH -! -! This file is part of DAMASK, -! the Düsseldorf Advanced MAterial Simulation Kit. -! -! DAMASK is free software: you can redistribute it and/or modify -! it under the terms of the GNU General Public License as published by -! the Free Software Foundation, either version 3 of the License, or -! (at your option) any later version. -! -! DAMASK is distributed in the hope that it will be useful, -! but WITHOUT ANY WARRANTY; without even the implied warranty of -! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -! GNU General Public License for more details. -! -! You should have received a copy of the GNU General Public License -! along with DAMASK. If not, see . -! -!############################################################## -!* $Id$ -!############################################################## -#ifdef __INTEL_COMPILER -#if __INTEL_COMPILER<1200 -#define LEGACY_COMPILER -#endif -#endif - -module prec -!############################################################## - - implicit none - private -! *** Precision of real and integer variables *** - integer, parameter, public :: pReal = selected_real_kind(6,37) ! 6 significant digits, up to 1e+-37 - integer, parameter, public :: pInt = selected_int_kind(9) ! up to +- 1e9 - integer, parameter, public :: pLongInt = 4 ! should be 64bit - real(pReal), parameter, public :: tol_math_check = 1.0e-5_pReal - real(pReal), parameter, public :: tol_gravityNodePos = 1.0e-36_pReal - -! NaN is precision dependent -! from http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_035.html -! copy can be found in documentation/Code/Fortran -#ifdef LEGACY_COMPILER - real(pReal), parameter, public :: DAMASK_NaN = Z'7F800001' -#else - real(pReal), parameter, public :: DAMASK_NaN = real(Z'7F800001', pReal) -#endif - - type, public :: p_vec - real(pReal), dimension(:), pointer :: p - end type p_vec - - public :: prec_init - -contains - -subroutine prec_init - use, intrinsic :: iso_fortran_env ! to get compiler_version and compiler_options (at least for gfortran 4.6 at the moment) - - implicit none - -!$OMP CRITICAL (write2out) -#ifndef LEGACY_COMPILER - open (6, encoding='UTF-8') -#endif - - write(6,*) - write(6,*) '<<<+- prec_single init -+>>>' - write(6,*) '$Id$' -#include "compilation_info.f90" - write(6,'(a,i3)') ' Bytes for pReal: ',pReal - write(6,'(a,i3)') ' Bytes for pInt: ',pInt - write(6,'(a,i3)') ' Bytes for pLongInt: ',pLongInt - write(6,'(a,e10.3)') ' NaN: ', DAMASK_NaN - write(6,'(a,l3)') ' NaN /= NaN: ',DAMASK_NaN/=DAMASK_NaN - if (DAMASK_NaN == DAMASK_NaN) call quit(9000) - write(6,*) -!$OMP END CRITICAL (write2out) - -end subroutine prec_init - -end module prec diff --git a/installation/mods_Abaqus/abaqus_v6.env b/installation/mods_Abaqus/abaqus_v6.env index f092898f1..71a4a774e 100644 --- a/installation/mods_Abaqus/abaqus_v6.env +++ b/installation/mods_Abaqus/abaqus_v6.env @@ -21,11 +21,15 @@ fortCmd = "ifort" # "-fpp" use FORTRAN preprocessor on source code # "-openmp" build with openMP support -#compile_fortran = (fortCmd + " -c -fPIC -auto -w90 -w95 " + -# "-WB -I%I -free -O3 -fpp -openmp") +#compile_fortran = (fortCmd + " -c -fPIC -auto" + +# "-WB -I%I -free -O3 -fpp -openmp " + +# "-implicitnone -assume byterecl " + +# "-real-size 64 -integer-size 32 -DFLOAT=8 -DINT=4") -compile_fortran = (fortCmd + " -c -fPIC -auto -mP2OPT_hpo_vec_divbyzero=F -w90 -w95 " + - "-WB -I%I -free -O3 -fpp -openmp") +compile_fortran = (fortCmd + " -c -fPIC -auto -mP2OPT_hpo_vec_divbyzero=F " + + "-WB -I%I -free -O3 -fpp -openmp "+ + "-implicitnone -assume byterecl " + + "-real-size 64 -integer-size 32 -DFLOAT=8 -DINT=4") # Do not use parts in input file cae_no_parts_input_file=ON diff --git a/processing/setup/setup_processing.py b/processing/setup/setup_processing.py index badc4f9e1..91b216c8b 100755 --- a/processing/setup/setup_processing.py +++ b/processing/setup/setup_processing.py @@ -49,11 +49,11 @@ if options.compiler not in compilers: parser.error('compiler switch "--F90" has to be one out of: %s'%(', '.join(compilers))) f2py_compiler = { - 'gfortran': 'gnu95 --f90flags="-fno-range-check -xf95-cpp-input -std=f2008 -fall-intrinsics -DSpectral -I${DAMASK_ROOT}/lib"', - 'gnu95': 'gnu95 --f90flags="-fno-range-check -xf95-cpp-input -std=f2008 -fall-intrinsics -DSpectral -I${DAMASK_ROOT}/lib"', - 'intel32': 'intel --f90flags="-fpp -stand f03 -diag-disable 5268 -assume byterecl -DSpectral -I${DAMASK_ROOT}/lib"', - 'intel': 'intelem --f90flags="-fpp -stand f03 -diag-disable 5268 -assume byterecl -DSpectral -I${DAMASK_ROOT}/lib"', - 'ifort': 'intelem --f90flags="-fpp -stand f03 -diag-disable 5268 -assume byterecl -DSpectral -I${DAMASK_ROOT}/lib"', + 'gfortran': 'gnu95 --f90flags="-fno-range-check -xf95-cpp-input -std=f2008 -fall-intrinsics -DSpectral -fdefault-real-8 -fdefault-integer-4 -DFLOAT=8 -DINT=4 -I${DAMASK_ROOT}/lib"', + 'gnu95': 'gnu95 --f90flags="-fno-range-check -xf95-cpp-input -std=f2008 -fall-intrinsics -DSpectral -fdefault-real-8 -fdefault-integer-4 -DFLOAT=8 -DINT=4 -I${DAMASK_ROOT}/lib"', + 'intel32': 'intel --f90flags="-fpp -stand f03 -diag-disable 5268 -assume byterecl -DSpectral -real-size 64 -integer-size 32 -DFLOAT=8 -DINT=4 -I${DAMASK_ROOT}/lib"', + 'intel': 'intelem --f90flags="-fpp -stand f03 -diag-disable 5268 -assume byterecl -DSpectral -real-size 64 -integer-size 32 -DFLOAT=8 -DINT=4 -I${DAMASK_ROOT}/lib"', + 'ifort': 'intelem --f90flags="-fpp -stand f03 -diag-disable 5268 -assume byterecl -DSpectral -real-size 64 -integer-size 32 -DFLOAT=8 -DINT=4 -I${DAMASK_ROOT}/lib"', }[options.compiler] compiler = { 'gfortran': 'gfortran',