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
This commit is contained in:
parent
bb25d1fee6
commit
73349d02f5
|
@ -37,9 +37,18 @@
|
||||||
!
|
!
|
||||||
!********************************************************************
|
!********************************************************************
|
||||||
|
|
||||||
#include "prec.f90"
|
#ifndef INT
|
||||||
|
#define INT 4
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef FLOAT
|
||||||
|
#define FLOAT 8
|
||||||
|
#endif
|
||||||
|
|
||||||
#define Abaqus
|
#define Abaqus
|
||||||
|
|
||||||
|
#include "prec.f90"
|
||||||
|
|
||||||
module DAMASK_interface
|
module DAMASK_interface
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
|
@ -134,7 +143,7 @@ subroutine vumat (jblock, ndir, nshr, nstatev, nfieldv, nprops, lanneal, &
|
||||||
stressNew(*), stateNew(*), &
|
stressNew(*), stateNew(*), &
|
||||||
enerInternNew(*), enerInelasNew(*)
|
enerInternNew(*), enerInelasNew(*)
|
||||||
|
|
||||||
character*80 cmname
|
character(80) cmname
|
||||||
|
|
||||||
|
|
||||||
call vumatXtrArg ( jblock(1), &
|
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 enerInelasNew(nblock),stateNew(nblock,nstatev),enerInternNew(nblock)
|
||||||
dimension nElement(nblock),nMatPoint(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) :: 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
|
real(pReal), dimension (3,3,3,3) :: dPdF ! not used, but needed for call of cpfem_general
|
||||||
! local variables
|
! 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
|
if (iand(debug_level(debug_abaqus),debug_levelBasic) /= 0) then
|
||||||
!$OMP CRITICAL (write2out)
|
!$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)
|
!$OMP END CRITICAL (write2out)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -222,7 +231,7 @@ subroutine vumat (jblock, ndir, nshr, nstatev, nfieldv, nprops, lanneal, &
|
||||||
|
|
||||||
if (iand(debug_level(debug_abaqus),debug_levelBasic) /= 0) then
|
if (iand(debug_level(debug_abaqus),debug_levelBasic) /= 0) then
|
||||||
!$OMP CRITICAL (write2out)
|
!$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)
|
!$OMP END CRITICAL (write2out)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -244,7 +253,7 @@ subroutine vumat (jblock, ndir, nshr, nstatev, nfieldv, nprops, lanneal, &
|
||||||
|
|
||||||
if (iand(debug_level(debug_abaqus),debug_levelBasic) /= 0) then
|
if (iand(debug_level(debug_abaqus),debug_levelBasic) /= 0) then
|
||||||
!$OMP CRITICAL (write2out)
|
!$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)
|
!$OMP END CRITICAL (write2out)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
|
@ -37,9 +37,17 @@
|
||||||
!
|
!
|
||||||
!********************************************************************
|
!********************************************************************
|
||||||
|
|
||||||
#include "prec.f90"
|
#ifndef INT
|
||||||
|
#define INT 4
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef FLOAT
|
||||||
|
#define FLOAT 8
|
||||||
|
#endif
|
||||||
|
|
||||||
#define Abaqus
|
#define Abaqus
|
||||||
|
|
||||||
|
#include "prec.f90"
|
||||||
|
|
||||||
module DAMASK_interface
|
module DAMASK_interface
|
||||||
|
|
||||||
|
@ -146,7 +154,7 @@ subroutine UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,&
|
||||||
|
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
CHARACTER*80 CMNAME
|
CHARACTER(80) CMNAME
|
||||||
integer(pInt) ndi, nshr, ntens, nstatv, nprops, noel, npt,&
|
integer(pInt) ndi, nshr, ntens, nstatv, nprops, noel, npt,&
|
||||||
kslay, kspt, kstep, kinc
|
kslay, kspt, kstep, kinc
|
||||||
real(pReal) STRESS(NTENS),STATEV(NSTATV),&
|
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
|
lastMode = .false. ! pretend last step was collection
|
||||||
calcMode = .false. ! pretend last step was collection
|
calcMode = .false. ! pretend last step was collection
|
||||||
!$OMP CRITICAL (write2out)
|
!$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)
|
!$OMP END CRITICAL (write2out)
|
||||||
else if (kinc - theInc > 1) then ! >> restart of broken analysis <<
|
else if (kinc - theInc > 1) then ! >> restart of broken analysis <<
|
||||||
lastIncConverged = .false. ! no Jacobian backup
|
lastIncConverged = .false. ! no Jacobian backup
|
||||||
|
@ -193,7 +201,7 @@ subroutine UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,&
|
||||||
lastMode = .true. ! pretend last step was calculation
|
lastMode = .true. ! pretend last step was calculation
|
||||||
calcMode = .true. ! pretend last step was calculation
|
calcMode = .true. ! pretend last step was calculation
|
||||||
!$OMP CRITICAL (write2out)
|
!$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)
|
!$OMP END CRITICAL (write2out)
|
||||||
else ! >> just the next inc <<
|
else ! >> just the next inc <<
|
||||||
lastIncConverged = .true. ! request Jacobian backup
|
lastIncConverged = .true. ! request Jacobian backup
|
||||||
|
@ -201,7 +209,7 @@ subroutine UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,&
|
||||||
lastMode = .true. ! assure last step was calculation
|
lastMode = .true. ! assure last step was calculation
|
||||||
calcMode = .true. ! assure last step was calculation
|
calcMode = .true. ! assure last step was calculation
|
||||||
!$OMP CRITICAL (write2out)
|
!$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)
|
!$OMP END CRITICAL (write2out)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -212,7 +220,7 @@ subroutine UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,&
|
||||||
cycleCounter = -1 ! first calc step increments this to cycle = 0
|
cycleCounter = -1 ! first calc step increments this to cycle = 0
|
||||||
calcMode = .true. ! pretend last step was calculation
|
calcMode = .true. ! pretend last step was calculation
|
||||||
!$OMP CRITICAL (write2out)
|
!$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)
|
!$OMP END CRITICAL (write2out)
|
||||||
|
|
||||||
endif ! convergence treatment end
|
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)
|
calcMode(npt,cp_en) = .not. calcMode(npt,cp_en) ! ping pong (calc <--> collect)
|
||||||
|
|
||||||
if ( calcMode(npt,cp_en) ) then ! now calc
|
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
|
call debug_reset() ! resets debugging
|
||||||
outdatedFFN1 = .false.
|
outdatedFFN1 = .false.
|
||||||
cycleCounter = cycleCounter + 1
|
cycleCounter = cycleCounter + 1
|
||||||
|
@ -232,7 +240,7 @@ subroutine UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,&
|
||||||
computationMode = 2 ! plain calc
|
computationMode = 2 ! plain calc
|
||||||
endif
|
endif
|
||||||
else ! now collect
|
else ! now collect
|
||||||
if ( lastMode /= calcMode(npt,cp_en) .and. &
|
if ( lastMode .neqv. calcMode(npt,cp_en) .and. &
|
||||||
.not. terminallyIll) then
|
.not. terminallyIll) then
|
||||||
call debug_info() ! first after ping pong reports debugging
|
call debug_info() ! first after ping pong reports debugging
|
||||||
endif
|
endif
|
||||||
|
@ -254,7 +262,7 @@ subroutine UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,&
|
||||||
|
|
||||||
if (iand(debug_level(debug_abaqus),debug_levelBasic) /= 0) then
|
if (iand(debug_level(debug_abaqus),debug_levelBasic) /= 0) then
|
||||||
!$OMP CRITICAL (write2out)
|
!$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)
|
!$OMP END CRITICAL (write2out)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
! Copyright 2011 Max-Planck-Institut für Eisenforschung GmbH
|
! Copyright 2011 Max-Planck-Institut für Eisenforschung GmbH
|
||||||
!
|
!
|
||||||
! This file is part of DAMASK,
|
! 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
|
! DAMASK is free software: you can redistribute it and/or modify
|
||||||
! it under the terms of the GNU General Public License as published by
|
! it under the terms of the GNU General Public License as published by
|
||||||
|
@ -54,10 +54,19 @@
|
||||||
! - concom: lovl, ncycle, inc, incsub
|
! - concom: lovl, ncycle, inc, incsub
|
||||||
! - creeps: timinc
|
! - creeps: timinc
|
||||||
!********************************************************************
|
!********************************************************************
|
||||||
!
|
|
||||||
#include "prec.f90"
|
#ifndef INT
|
||||||
|
#define INT 4
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef FLOAT
|
||||||
|
#define FLOAT 8
|
||||||
|
#endif
|
||||||
|
|
||||||
#define Marc
|
#define Marc
|
||||||
|
|
||||||
|
#include "prec.f90"
|
||||||
|
|
||||||
module DAMASK_interface
|
module DAMASK_interface
|
||||||
use prec, only: pInt
|
use prec, only: pInt
|
||||||
|
|
||||||
|
|
|
@ -194,13 +194,8 @@ endif
|
||||||
# pointers: Checking for certain disassociated or uninitialized pointers or unallocated allocatable objects.
|
# pointers: Checking for certain disassociated or uninitialized pointers or unallocated allocatable objects.
|
||||||
# uninit: Checking for uninitialized variables.
|
# 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
|
#-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
|
COMPILE_OPTIONS_gfortran :=-xf95-cpp-input
|
||||||
ifneq "$(FASTBUILD)" "YES"
|
ifneq "$(FASTBUILD)" "YES"
|
||||||
COMPILE_OPTIONS_gfortran :=$(COMPILE_OPTIONS_gfortran)\
|
COMPILE_OPTIONS_gfortran :=$(COMPILE_OPTIONS_gfortran)\
|
||||||
|
@ -263,14 +258,18 @@ endif
|
||||||
#
|
#
|
||||||
#OPTIONS FOR DEGUBBING DURING RUNTIME
|
#OPTIONS FOR DEGUBBING DURING RUNTIME
|
||||||
#-fcheck-bounds: check if an array index is too small (<1) or too large!
|
#-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
|
PRECISION_ifort :=-real-size 64 -integer-size 32 -DFLOAT=8 -DINT=4
|
||||||
COMPILE_MAXOPTI =$(OPENMP_FLAG_$(F90)) $(COMPILE_OPTIONS_$(F90)) $(STANDARD_CHECK_$(F90)) $(OPTIMIZATION_$(MAXOPTI)_$(F90)) $(INCLUDE_DIRS) -DSpectral
|
#-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 \
|
COMPILED_FILES = prec.o DAMASK_spectral_interface.o IO.o numerics.o debug.o math.o \
|
||||||
FEsolving.o mesh.o material.o lattice.o \
|
FEsolving.o mesh.o material.o lattice.o \
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
! Copyright 2011 Max-Planck-Institut für Eisenforschung GmbH
|
! Copyright 2011 Max-Planck-Institut für Eisenforschung GmbH
|
||||||
!
|
!
|
||||||
! This file is part of DAMASK,
|
! 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
|
! DAMASK is free software: you can redistribute it and/or modify
|
||||||
! it under the terms of the GNU General Public License as published by
|
! 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 Philip Eisenlohr, Max-Planck-Institut für Eisenforschung GmbH
|
||||||
!> @author Christoph Kords, 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
|
!> @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
|
#ifdef __INTEL_COMPILER
|
||||||
#if __INTEL_COMPILER<1200
|
#if __INTEL_COMPILER<1100
|
||||||
#define LEGACY_COMPILER
|
#define LEGACY_COMPILER
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
@ -34,24 +34,35 @@
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
module prec
|
module prec
|
||||||
|
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
private
|
private
|
||||||
|
|
||||||
integer, parameter, public :: pReal = selected_real_kind(15,300) !< floating point number with 15 significant digits, up to 1e+-300 (double precision)
|
#if (FLOAT==4)
|
||||||
integer, parameter, public :: pInt = selected_int_kind(9) !< integer representation with at least up to +- 1e9 (32 bit)
|
integer, parameter, public :: pReal = 4 !< floating point single precition (was selected_real_kind(6,37), number with 6 significant digits, up to 1e+-37)
|
||||||
integer, parameter, public :: pLongInt = selected_int_kind(12) !< integer representation with at least up to +- 1e12 (64 bit)
|
#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_math_check = 1.0e-8_pReal
|
||||||
real(pReal), parameter, public :: tol_gravityNodePos = 1.0e-100_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
|
type, public :: p_vec
|
||||||
real(pReal), dimension(:), pointer :: p
|
real(pReal), dimension(:), pointer :: p
|
||||||
|
@ -60,6 +71,7 @@ module prec
|
||||||
public :: prec_init
|
public :: prec_init
|
||||||
|
|
||||||
contains
|
contains
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief reporting precision and checking if DAMASK_NaN is set correctly
|
!> @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,i3)') ' Bytes for pLongInt: ',pLongInt
|
||||||
write(6,'(a,e10.3)') ' NaN: ', DAMASK_NaN
|
write(6,'(a,e10.3)') ' NaN: ', DAMASK_NaN
|
||||||
write(6,'(a,l3)') ' NaN /= NaN: ',DAMASK_NaN/=DAMASK_NaN
|
write(6,'(a,l3)') ' NaN /= NaN: ',DAMASK_NaN/=DAMASK_NaN
|
||||||
if (DAMASK_NaN == DAMASK_NaN) call quit(9000)
|
|
||||||
write(6,*)
|
write(6,*)
|
||||||
|
if (DAMASK_NaN == DAMASK_NaN) call quit(9000)
|
||||||
!$OMP END CRITICAL (write2out)
|
!$OMP END CRITICAL (write2out)
|
||||||
|
|
||||||
end subroutine prec_init
|
end subroutine prec_init
|
||||||
|
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
|
||||||
!
|
|
||||||
!##############################################################
|
|
||||||
!* $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
|
|
|
@ -21,11 +21,15 @@ fortCmd = "ifort"
|
||||||
# "-fpp" use FORTRAN preprocessor on source code
|
# "-fpp" use FORTRAN preprocessor on source code
|
||||||
# "-openmp" build with openMP support
|
# "-openmp" build with openMP support
|
||||||
|
|
||||||
#compile_fortran = (fortCmd + " -c -fPIC -auto -w90 -w95 " +
|
#compile_fortran = (fortCmd + " -c -fPIC -auto" +
|
||||||
# "-WB -I%I -free -O3 -fpp -openmp")
|
# "-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 " +
|
compile_fortran = (fortCmd + " -c -fPIC -auto -mP2OPT_hpo_vec_divbyzero=F " +
|
||||||
"-WB -I%I -free -O3 -fpp -openmp")
|
"-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
|
# Do not use parts in input file
|
||||||
cae_no_parts_input_file=ON
|
cae_no_parts_input_file=ON
|
||||||
|
|
|
@ -49,11 +49,11 @@ if options.compiler not in compilers:
|
||||||
parser.error('compiler switch "--F90" has to be one out of: %s'%(', '.join(compilers)))
|
parser.error('compiler switch "--F90" has to be one out of: %s'%(', '.join(compilers)))
|
||||||
|
|
||||||
f2py_compiler = {
|
f2py_compiler = {
|
||||||
'gfortran': 'gnu95 --f90flags="-fno-range-check -xf95-cpp-input -std=f2008 -fall-intrinsics -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 -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 -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 -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 -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]
|
}[options.compiler]
|
||||||
compiler = {
|
compiler = {
|
||||||
'gfortran': 'gfortran',
|
'gfortran': 'gfortran',
|
||||||
|
|
Loading…
Reference in New Issue