DAMASK (except nonlocal) now sees and interacts with FEM solver

This commit is contained in:
Pratheek Shanthraj 2014-06-06 00:38:29 +00:00
parent 9a285a1e9f
commit 639ca89133
8 changed files with 168 additions and 5 deletions

View File

@ -71,6 +71,10 @@ subroutine CPFEM_initAll(temperature,el,ip)
use IO, only: & use IO, only: &
IO_init IO_init
use DAMASK_interface use DAMASK_interface
#ifdef FEM
use FEZoo, only: &
FEZoo_init
#endif
implicit none implicit none
integer(pInt), intent(in) :: el, & ! FE el number integer(pInt), intent(in) :: el, & ! FE el number
@ -81,9 +85,15 @@ subroutine CPFEM_initAll(temperature,el,ip)
if (.not. CPFEM_init_done) then if (.not. CPFEM_init_done) then
#ifdef Spectral #ifdef Spectral
call DAMASK_interface_init() ! Spectral solver is interfacing to commandline call DAMASK_interface_init() ! Spectral solver is interfacing to commandline
#endif
#ifdef FEM
call DAMASK_interface_init() ! Spectral solver is interfacing to commandline
#endif #endif
call prec_init call prec_init
call IO_init call IO_init
#ifdef FEM
call FEZoo_init() ! Spectral solver is interfacing to commandline
#endif
call numerics_init call numerics_init
call debug_init call debug_init
call math_init call math_init
@ -96,7 +106,9 @@ subroutine CPFEM_initAll(temperature,el,ip)
call homogenization_init call homogenization_init
call CPFEM_init call CPFEM_init
#ifndef Spectral #ifndef Spectral
#ifndef FEM
call DAMASK_interface_init() ! Spectral solver init is already done call DAMASK_interface_init() ! Spectral solver init is already done
#endif
#endif #endif
CPFEM_init_done = .true. CPFEM_init_done = .true.
endif endif

View File

@ -67,8 +67,10 @@ subroutine FE_init
IO_intValue, & IO_intValue, &
IO_lc, & IO_lc, &
#ifndef Spectral #ifndef Spectral
#ifndef FEM
IO_open_inputFile, & IO_open_inputFile, &
IO_open_logFile, & IO_open_logFile, &
#endif
#endif #endif
IO_warning, & IO_warning, &
IO_timeStamp IO_timeStamp
@ -76,6 +78,7 @@ subroutine FE_init
implicit none implicit none
#ifndef Spectral #ifndef Spectral
#ifndef FEM
integer(pInt), parameter :: & integer(pInt), parameter :: &
FILEUNIT = 222_pInt, & FILEUNIT = 222_pInt, &
maxNchunks = 6_pInt maxNchunks = 6_pInt
@ -83,6 +86,7 @@ subroutine FE_init
character(len=64) :: tag character(len=64) :: tag
character(len=1024) :: line character(len=1024) :: line
integer(pInt), dimension(1_pInt+2_pInt*maxNchunks) :: positions integer(pInt), dimension(1_pInt+2_pInt*maxNchunks) :: positions
#endif
#endif #endif
write(6,'(/,a)') ' <<<+- FEsolving init -+>>>' write(6,'(/,a)') ' <<<+- FEsolving init -+>>>'
@ -98,6 +102,13 @@ subroutine FE_init
restartInc = 1_pInt restartInc = 1_pInt
endif endif
restartRead = restartInc > 1_pInt ! only read in if "true" restart requested restartRead = restartInc > 1_pInt ! only read in if "true" restart requested
#elif defined FEM
restartInc = FEMRestartInc
if(restartInc <= 0_pInt) then
call IO_warning(warning_ID=34_pInt)
restartInc = 1_pInt
endif
restartRead = restartInc > 1_pInt
#else #else
call IO_open_inputFile(FILEUNIT,modelName) call IO_open_inputFile(FILEUNIT,modelName)
rewind(FILEUNIT) rewind(FILEUNIT)

View File

@ -73,10 +73,12 @@ module IO
IO_intOut, & IO_intOut, &
IO_timeStamp IO_timeStamp
#ifndef Spectral #ifndef Spectral
#ifndef FEM
public :: & public :: &
IO_open_inputFile, & IO_open_inputFile, &
IO_open_logFile IO_open_logFile
#endif #endif
#endif
#ifdef Abaqus #ifdef Abaqus
public :: & public :: &
IO_abaqus_hasNoPart IO_abaqus_hasNoPart
@ -302,6 +304,7 @@ end function IO_open_JobFile_stat
#ifndef Spectral #ifndef Spectral
#ifndef FEM
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief opens FEM input file for reading located in current working directory to given unit !> @brief opens FEM input file for reading located in current working directory to given unit
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
@ -367,6 +370,7 @@ subroutine IO_open_logFile(fileUnit)
end subroutine IO_open_logFile end subroutine IO_open_logFile
#endif #endif
#endif
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------

View File

@ -29,6 +29,9 @@ module constitutive
constitutive_aTolState !< pointer array to absolute state tolerance constitutive_aTolState !< pointer array to absolute state tolerance
type(p_vec), public, dimension(:,:,:,:), allocatable :: & type(p_vec), public, dimension(:,:,:,:), allocatable :: &
constitutive_RKCK45dotState !< pointer array to evolution of microstructure used by Cash-Karp Runge-Kutta method constitutive_RKCK45dotState !< pointer array to evolution of microstructure used by Cash-Karp Runge-Kutta method
real(pReal), public, dimension(:,:,:), allocatable :: &
constitutive_localDamage, &
constitutive_gradientDamage
integer(pInt), public, dimension(:,:,:), allocatable :: & integer(pInt), public, dimension(:,:,:), allocatable :: &
constitutive_sizeDotState, & !< size of dotState array constitutive_sizeDotState, & !< size of dotState array
constitutive_sizeState, & !< size of state array per grain constitutive_sizeState, & !< size of state array per grain
@ -240,6 +243,8 @@ subroutine constitutive_init
#ifndef NEWSTATE #ifndef NEWSTATE
! lumped into new state ! lumped into new state
allocate(constitutive_state0(cMax,iMax,eMax)) allocate(constitutive_state0(cMax,iMax,eMax))
allocate(constitutive_localDamage(cMax,iMax,eMax)); constitutive_localDamage = 1.0_pReal
allocate(constitutive_gradientDamage(cMax,iMax,eMax)); constitutive_gradientDamage = 1.0_pReal
allocate(constitutive_partionedState0(cMax,iMax,eMax)) allocate(constitutive_partionedState0(cMax,iMax,eMax))
allocate(constitutive_subState0(cMax,iMax,eMax)) allocate(constitutive_subState0(cMax,iMax,eMax))
allocate(constitutive_state(cMax,iMax,eMax)) allocate(constitutive_state(cMax,iMax,eMax))
@ -775,7 +780,7 @@ use math, only : &
C = math_Mandel66to3333(constitutive_homogenizedC(ipc,ip,el)) C = math_Mandel66to3333(constitutive_homogenizedC(ipc,ip,el))
FeT = math_transpose33(Fe) FeT = math_transpose33(Fe)
T = 0.5_pReal * math_mul3333xx33(C, math_mul33x33(FeT,Fe)-MATH_I3) T = 0.5_pReal*math_mul3333xx33(C,math_mul33x33(FeT,Fe)-MATH_I3)*constitutive_gradientDamage(ipc,ip,el)
dT_dFe = 0.0_pReal dT_dFe = 0.0_pReal
forall (i=1_pInt:3_pInt, j=1_pInt:3_pInt, k=1_pInt:3_pInt, l=1_pInt:3_pInt) & forall (i=1_pInt:3_pInt, j=1_pInt:3_pInt, k=1_pInt:3_pInt, l=1_pInt:3_pInt) &

View File

@ -551,7 +551,9 @@ subroutine crystallite_stressAndItsTangent(updateJaco,rate_sensitivity)
#else #else
mappingConstitutive, & mappingConstitutive, &
#endif #endif
constitutive_TandItsTangent constitutive_TandItsTangent, &
constitutive_localDamage, &
constitutive_gradientDamage
implicit none implicit none
logical, intent(in) :: & logical, intent(in) :: &
@ -1371,6 +1373,14 @@ subroutine crystallite_stressAndItsTangent(updateJaco,rate_sensitivity)
crystallite_heat(g,i,e) = 0.98_pReal* & crystallite_heat(g,i,e) = 0.98_pReal* &
abs(math_mul33xx33(math_Mandel6to33(crystallite_Tstar_v(1:6,g,i,e)), & abs(math_mul33xx33(math_Mandel6to33(crystallite_Tstar_v(1:6,g,i,e)), &
crystallite_Lp(1:3,1:3,g,i,e))) crystallite_Lp(1:3,1:3,g,i,e)))
constitutive_localDamage(g,i,e) = &
1.0_pReal* &
sum(math_Mandel6to33(crystallite_Tstar_v(1:6,g,i,e)/constitutive_gradientDamage(g,i,e))* &
(math_mul33x33(math_transpose33(crystallite_Fe(1:3,1:3,g,i,e)), &
crystallite_Fe(1:3,1:3,g,i,e))-math_I3))/4.0_pReal + &
0.0_pReal* &
sum(abs(math_mul33x33(math_transpose33(crystallite_Fp(1:3,1:3,g,i,e)), &
crystallite_Fp(1:3,1:3,g,i,e))-math_I3)/2.0_pReal)
enddo enddo
enddo enddo
enddo elementLooping12 enddo elementLooping12

View File

@ -11,6 +11,9 @@ end module libs
#ifdef Spectral #ifdef Spectral
#include "../lib/kdtree2.f90" #include "../lib/kdtree2.f90"
#endif #endif
#ifdef FEM
#include "../lib/kdtree2.f90"
#endif
#include "../lib/IR_Precision.f90" #include "../lib/IR_Precision.f90"
#include "../lib/Lib_Base64.f90" #include "../lib/Lib_Base64.f90"
#include "../lib/Lib_VTK_IO.f90" #include "../lib/Lib_VTK_IO.f90"

View File

@ -12,6 +12,9 @@ module numerics
implicit none implicit none
private private
#ifdef FEM
#include <finclude/petsc.h90>
#endif
character(len=64), parameter, private :: & character(len=64), parameter, private :: &
numerics_CONFIGFILE = 'numerics.config' !< name of configuration file numerics_CONFIGFILE = 'numerics.config' !< name of configuration file
@ -89,6 +92,7 @@ module numerics
fftw_planner_flag = 32_pInt, & !< conversion of fftw_plan_mode to integer, basically what is usually done in the include file of fftw fftw_planner_flag = 32_pInt, & !< conversion of fftw_plan_mode to integer, basically what is usually done in the include file of fftw
itmax = 250_pInt, & !< maximum number of iterations itmax = 250_pInt, & !< maximum number of iterations
itmin = 2_pInt, & !< minimum number of iterations itmin = 2_pInt, & !< minimum number of iterations
stagItMax = 25_pInt, & !< maximum number of iterations
maxCutBack = 3_pInt, & !< max number of cut backs maxCutBack = 3_pInt, & !< max number of cut backs
continueCalculation = 0_pInt, & !< 0: exit if BVP solver does not converge, 1: continue calculation if BVP solver does not converge continueCalculation = 0_pInt, & !< 0: exit if BVP solver does not converge, 1: continue calculation if BVP solver does not converge
divergence_correction = 2_pInt !< correct divergence calculation in fourier space 0: no correction, 1: size scaled to 1, 2: size scaled to Npoints divergence_correction = 2_pInt !< correct divergence calculation in fourier space 0: no correction, 1: size scaled to 1, 2: size scaled to Npoints
@ -97,6 +101,33 @@ module numerics
update_gamma = .false. !< update gamma operator with current stiffness, Default .false.: use initial stiffness update_gamma = .false. !< update gamma operator with current stiffness, Default .false.: use initial stiffness
#endif #endif
!--------------------------------------------------------------------------------------------------
! FEM parameters:
#ifdef FEM
real(pReal), protected, public :: &
err_struct_tolAbs = 1.0e-10_pReal, & !< absolute tolerance for equilibrium
err_struct_tolRel = 5.0e-4_pReal, & !< relative tolerance for equilibrium
err_thermal_tol = 1.0e-6_pReal, &
err_damage_tol = 1.0e-4_pReal
character(len=1024), protected, public :: &
petsc_optionsFEM = '-snes_type ngmres &
&-snes_ngmres_anderson '
integer(pInt), protected, public :: &
itmaxFEM = 250_pInt, & !< maximum number of iterations
itminFEM = 2_pInt, & !< minimum number of iterations
maxCutBackFEM = 3_pInt, & !< max number of cut backs
integrationOrder = 1_pInt, &
structOrder = 2_pInt, &
thermalOrder = 2_pInt, &
damageOrder = 2_pInt, &
worldrank = 0_pInt, &
worldsize = 0_pInt
logical, protected, public :: &
structThermalCoupling = .false., &
structDamageCoupling = .false., &
thermalDamageCoupling = .false.
#endif
public :: numerics_init public :: numerics_init
contains contains
@ -124,15 +155,20 @@ subroutine numerics_init
#ifdef Spectral #ifdef Spectral
!$ use OMP_LIB, only: omp_set_num_threads ! Use the standard conforming module file for omp if using the spectral solver !$ use OMP_LIB, only: omp_set_num_threads ! Use the standard conforming module file for omp if using the spectral solver
#endif
#ifdef FEM
!$ use OMP_LIB, only: omp_set_num_threads ! Use the standard conforming module file for omp if using the spectral solver
#endif #endif
implicit none implicit none
#ifndef Spectral #ifndef Spectral
#ifndef FEM
!$ include "omp_lib.h" ! use the not F90 standard conforming include file to prevent crashes with some versions of MSC.Marc !$ include "omp_lib.h" ! use the not F90 standard conforming include file to prevent crashes with some versions of MSC.Marc
#endif
#endif #endif
integer(pInt), parameter :: FILEUNIT = 300_pInt ,& integer(pInt), parameter :: FILEUNIT = 300_pInt ,&
maxNchunks = 2_pInt maxNchunks = 2_pInt
!$ integer :: gotDAMASK_NUM_THREADS = 1 !$ integer :: gotDAMASK_NUM_THREADS = 1
integer :: i ! no pInt integer :: i, ierr ! no pInt
integer(pInt), dimension(1+2*maxNchunks) :: positions integer(pInt), dimension(1+2*maxNchunks) :: positions
character(len=65536) :: & character(len=65536) :: &
tag ,& tag ,&
@ -154,6 +190,11 @@ subroutine numerics_init
!$ endif !$ endif
!$ call omp_set_num_threads(DAMASK_NumThreadsInt) ! set number of threads for parallel execution !$ call omp_set_num_threads(DAMASK_NumThreadsInt) ! set number of threads for parallel execution
#ifdef FEM
call MPI_Comm_rank(PETSC_COMM_WORLD,worldrank,ierr);CHKERRQ(ierr)
call MPI_Comm_size(PETSC_COMM_WORLD,worldsize,ierr);CHKERRQ(ierr)
#endif
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
! try to open the config file ! try to open the config file
fileExists: if(IO_open_file_stat(FILEUNIT,numerics_configFile)) then fileExists: if(IO_open_file_stat(FILEUNIT,numerics_configFile)) then
@ -274,6 +315,8 @@ subroutine numerics_init
itmax = IO_intValue(line,positions,2_pInt) itmax = IO_intValue(line,positions,2_pInt)
case ('itmin') case ('itmin')
itmin = IO_intValue(line,positions,2_pInt) itmin = IO_intValue(line,positions,2_pInt)
case ('stagitmax')
stagItMax = IO_intValue(line,positions,2_pInt)
case ('maxcutback') case ('maxcutback')
maxCutBack = IO_intValue(line,positions,2_pInt) maxCutBack = IO_intValue(line,positions,2_pInt)
case ('continuecalculation') case ('continuecalculation')
@ -312,12 +355,53 @@ subroutine numerics_init
#endif #endif
#ifndef Spectral #ifndef Spectral
case ('err_div_tolabs','err_div_tolrel','err_stress_tolrel','err_stress_tolabs',& ! found spectral parameter for FEM build case ('err_div_tolabs','err_div_tolrel','err_stress_tolrel','err_stress_tolabs',& ! found spectral parameter for FEM build
'itmax', 'itmin','memory_efficient','fftw_timelimit','fftw_plan_mode', & 'itmax', 'itmin','stagitmax','memory_efficient','fftw_timelimit','fftw_plan_mode', &
'divergence_correction','update_gamma','myfilter', & 'divergence_correction','update_gamma','myfilter', &
'err_curl_tolabs','err_curl_tolrel', & 'err_curl_tolabs','err_curl_tolrel', &
'maxcutback','polaralpha','polarbeta') 'maxcutback','polaralpha','polarbeta')
call IO_warning(40_pInt,ext_msg=tag) call IO_warning(40_pInt,ext_msg=tag)
#endif #endif
!--------------------------------------------------------------------------------------------------
! FEM parameters
#ifdef FEM
case ('err_struct_tolabs')
err_struct_tolAbs = IO_floatValue(line,positions,2_pInt)
case ('err_struct_tolrel')
err_struct_tolRel = IO_floatValue(line,positions,2_pInt)
case ('err_thermal_tol')
err_thermal_tol = IO_floatValue(line,positions,2_pInt)
case ('err_damage_tol')
err_damage_tol = IO_floatValue(line,positions,2_pInt)
case ('itmaxfem')
itmaxFEM = IO_intValue(line,positions,2_pInt)
case ('itminfem')
itminFEM = IO_intValue(line,positions,2_pInt)
case ('maxcutbackfem')
maxCutBackFEM = IO_intValue(line,positions,2_pInt)
case ('integrationorder')
integrationorder = IO_intValue(line,positions,2_pInt)
case ('structorder')
structorder = IO_intValue(line,positions,2_pInt)
case ('thermalorder')
thermalorder = IO_intValue(line,positions,2_pInt)
case ('damageorder')
damageorder = IO_intValue(line,positions,2_pInt)
case ('petsc_optionsfem')
petsc_optionsFEM = trim(line(positions(4):))
case ('structthermalcoupling')
structThermalCoupling = IO_intValue(line,positions,2_pInt) > 0_pInt
case ('structdamagecoupling')
structDamageCoupling = IO_intValue(line,positions,2_pInt) > 0_pInt
case ('thermaldamagecoupling')
thermalDamageCoupling = IO_intValue(line,positions,2_pInt) > 0_pInt
#endif
#ifndef FEM
case ('err_struct_tolabs','err_struct_tolrel','err_thermal_tol','err_damage_tol',& ! found spectral parameter for FEM build
'itmaxfem', 'itminfem','maxcutbackfem','integrationorder','structorder','thermalorder', &
'damageorder','petsc_optionsfem','structthermalcoupling','structdamagecoupling','thermaldamagecoupling')
call IO_warning(40_pInt,ext_msg=tag)
#endif
case default ! found unknown keyword case default ! found unknown keyword
call IO_error(300_pInt,ext_msg=tag) call IO_error(300_pInt,ext_msg=tag)
endselect endselect
@ -405,6 +489,7 @@ subroutine numerics_init
#ifdef Spectral #ifdef Spectral
write(6,'(a24,1x,i8)') ' itmax: ',itmax write(6,'(a24,1x,i8)') ' itmax: ',itmax
write(6,'(a24,1x,i8)') ' itmin: ',itmin write(6,'(a24,1x,i8)') ' itmin: ',itmin
write(6,'(a24,1x,i8)') ' stagItMax: ',stagItMax
write(6,'(a24,1x,i8)') ' maxCutBack: ',maxCutBack write(6,'(a24,1x,i8)') ' maxCutBack: ',maxCutBack
write(6,'(a24,1x,i8)') ' continueCalculation: ',continueCalculation write(6,'(a24,1x,i8)') ' continueCalculation: ',continueCalculation
write(6,'(a24,1x,L8)') ' memory_efficient: ',memory_efficient write(6,'(a24,1x,L8)') ' memory_efficient: ',memory_efficient
@ -432,6 +517,26 @@ subroutine numerics_init
#endif #endif
#endif #endif
!--------------------------------------------------------------------------------------------------
! spectral parameters
#ifdef FEM
write(6,'(a24,1x,i8)') ' itmaxFEM: ',itmaxFEM
write(6,'(a24,1x,i8)') ' itminFEM: ',itminFEM
write(6,'(a24,1x,i8)') ' maxCutBackFEM: ',maxCutBackFEM
write(6,'(a24,1x,i8)') ' integrationOrder: ',integrationOrder
write(6,'(a24,1x,i8)') ' structOrder: ',structOrder
write(6,'(a24,1x,i8)') ' thermalOrder: ',thermalOrder
write(6,'(a24,1x,i8)') ' damageOrder: ',damageOrder
write(6,'(a24,1x,es8.1)') ' err_struct_tolAbs: ',err_struct_tolAbs
write(6,'(a24,1x,es8.1)') ' err_struct_tolRel: ',err_struct_tolRel
write(6,'(a24,1x,es8.1)') ' err_thermal_tol: ',err_thermal_tol
write(6,'(a24,1x,es8.1)') ' err_damage_tol: ',err_damage_tol
write(6,'(a24,1x,L8)') ' structThermalCoupling: ',structThermalCoupling
write(6,'(a24,1x,L8)') ' structDamageCoupling: ',structDamageCoupling
write(6,'(a24,1x,L8)') ' thermalDamageCoupling: ',thermalDamageCoupling
write(6,'(a24,1x,a)') ' PETSc_optionsFEM: ',trim(petsc_optionsFEM)
#endif
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
! sanity checks ! sanity checks
if (relevantStrain <= 0.0_pReal) call IO_error(301_pInt,ext_msg='relevantStrain') if (relevantStrain <= 0.0_pReal) call IO_error(301_pInt,ext_msg='relevantStrain')
@ -473,7 +578,7 @@ subroutine numerics_init
if (volDiscrPow_RGC <= 0.0_pReal) call IO_error(301_pInt,ext_msg='volDiscrPw_RGC') if (volDiscrPow_RGC <= 0.0_pReal) call IO_error(301_pInt,ext_msg='volDiscrPw_RGC')
#ifdef Spectral #ifdef Spectral
if (itmax <= 1_pInt) call IO_error(301_pInt,ext_msg='itmax') if (itmax <= 1_pInt) call IO_error(301_pInt,ext_msg='itmax')
if (itmin > itmax .or. itmin < 1_pInt) call IO_error(301_pInt,ext_msg='itmin') if (itmin > itmax .or. itmin < 0_pInt) call IO_error(301_pInt,ext_msg='itmin')
if (continueCalculation /= 0_pInt .and. & if (continueCalculation /= 0_pInt .and. &
continueCalculation /= 1_pInt) call IO_error(301_pInt,ext_msg='continueCalculation') continueCalculation /= 1_pInt) call IO_error(301_pInt,ext_msg='continueCalculation')
if (divergence_correction < 0_pInt .or. & if (divergence_correction < 0_pInt .or. &
@ -494,6 +599,16 @@ subroutine numerics_init
polarBeta > 2.0_pReal) call IO_error(301_pInt,ext_msg='polarBeta') polarBeta > 2.0_pReal) call IO_error(301_pInt,ext_msg='polarBeta')
#endif #endif
#endif #endif
#ifdef FEM
if (itmaxFEM <= 1_pInt) call IO_error(301_pInt,ext_msg='itmaxFEM')
if (itminFEM > itmaxFEM .or. &
itminFEM < 0_pInt) call IO_error(301_pInt,ext_msg='itminFEM')
if (maxCutBackFEM < 0_pInt) call IO_error(301_pInt,ext_msg='maxCutBackFEM')
if (err_struct_tolRel <= 0.0_pReal) call IO_error(301_pInt,ext_msg='err_struct_tolRel')
if (err_struct_tolAbs <= 0.0_pReal) call IO_error(301_pInt,ext_msg='err_struct_tolAbs')
if (err_thermal_tol <= 0.0_pReal) call IO_error(301_pInt,ext_msg='err_thermal_tol')
if (err_damage_tol <= 0.0_pReal) call IO_error(301_pInt,ext_msg='err_damage_tol')
#endif
end subroutine numerics_init end subroutine numerics_init

View File

@ -18,6 +18,9 @@ module prec
#if (FLOAT==4) #if (FLOAT==4)
#ifdef Spectral #ifdef Spectral
SPECTRAL SOLVER DOES NOT SUPPORT SINGLE PRECISION, STOPPING COMPILATION SPECTRAL SOLVER DOES NOT SUPPORT SINGLE PRECISION, STOPPING COMPILATION
#endif
#ifdef FEM
SPECTRAL SOLVER DOES NOT SUPPORT SINGLE PRECISION, STOPPING COMPILATION
#endif #endif
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 :: pReal = 4 !< floating point single precition (was selected_real_kind(6,37), number with 6 significant digits, up to 1e+-37)
#ifdef __INTEL_COMPILER #ifdef __INTEL_COMPILER