Merge branch 'development' into 36-include-hdf5-routines
This commit is contained in:
commit
29cd8fa5e2
|
@ -419,6 +419,9 @@ createTar:
|
||||||
script:
|
script:
|
||||||
- cd $(mktemp -d)
|
- cd $(mktemp -d)
|
||||||
- $DAMASKROOT/PRIVATE/releasing/deployMe.sh $CI_COMMIT_SHA
|
- $DAMASKROOT/PRIVATE/releasing/deployMe.sh $CI_COMMIT_SHA
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
- release
|
||||||
|
|
||||||
###################################################################################################
|
###################################################################################################
|
||||||
AbaqusStd:
|
AbaqusStd:
|
||||||
|
|
2
PRIVATE
2
PRIVATE
|
@ -1 +1 @@
|
||||||
Subproject commit 737427a967e098e1cc82f69f5447fd1a02ffa855
|
Subproject commit c4471725893e301044924eb0990e2ad619aa0a46
|
|
@ -20,6 +20,8 @@ endif
|
||||||
|
|
||||||
# currently, there is no information that unlimited causes problems
|
# currently, there is no information that unlimited causes problems
|
||||||
# still, http://software.intel.com/en-us/forums/topic/501500 suggest to fix it
|
# still, http://software.intel.com/en-us/forums/topic/501500 suggest to fix it
|
||||||
|
# more info https://jblevins.org/log/segfault
|
||||||
|
# https://stackoverflow.com/questions/79923/what-and-where-are-the-stack-and-heap
|
||||||
# http://superuser.com/questions/220059/what-parameters-has-ulimit
|
# http://superuser.com/questions/220059/what-parameters-has-ulimit
|
||||||
limit datasize unlimited # maximum heap size (kB)
|
limit datasize unlimited # maximum heap size (kB)
|
||||||
limit stacksize unlimited # maximum stack size (kB)
|
limit stacksize unlimited # maximum stack size (kB)
|
||||||
|
|
|
@ -43,6 +43,8 @@ PROCESSING=$(type -p postResults || true 2>/dev/null)
|
||||||
|
|
||||||
# currently, there is no information that unlimited causes problems
|
# currently, there is no information that unlimited causes problems
|
||||||
# still, http://software.intel.com/en-us/forums/topic/501500 suggest to fix it
|
# still, http://software.intel.com/en-us/forums/topic/501500 suggest to fix it
|
||||||
|
# more info https://jblevins.org/log/segfault
|
||||||
|
# https://stackoverflow.com/questions/79923/what-and-where-are-the-stack-and-heap
|
||||||
# http://superuser.com/questions/220059/what-parameters-has-ulimit
|
# http://superuser.com/questions/220059/what-parameters-has-ulimit
|
||||||
ulimit -d unlimited 2>/dev/null # maximum heap size (kB)
|
ulimit -d unlimited 2>/dev/null # maximum heap size (kB)
|
||||||
ulimit -s unlimited 2>/dev/null # maximum stack size (kB)
|
ulimit -s unlimited 2>/dev/null # maximum stack size (kB)
|
||||||
|
|
|
@ -34,6 +34,8 @@ PROCESSING=$(which postResults || true 2>/dev/null)
|
||||||
|
|
||||||
# currently, there is no information that unlimited causes problems
|
# currently, there is no information that unlimited causes problems
|
||||||
# still, http://software.intel.com/en-us/forums/topic/501500 suggest to fix it
|
# still, http://software.intel.com/en-us/forums/topic/501500 suggest to fix it
|
||||||
|
# more info https://jblevins.org/log/segfault
|
||||||
|
# https://stackoverflow.com/questions/79923/what-and-where-are-the-stack-and-heap
|
||||||
# http://superuser.com/questions/220059/what-parameters-has-ulimit
|
# http://superuser.com/questions/220059/what-parameters-has-ulimit
|
||||||
ulimit -d unlimited 2>/dev/null # maximum heap size (kB)
|
ulimit -d unlimited 2>/dev/null # maximum heap size (kB)
|
||||||
ulimit -s unlimited 2>/dev/null # maximum stack size (kB)
|
ulimit -s unlimited 2>/dev/null # maximum stack size (kB)
|
||||||
|
|
|
@ -38,7 +38,7 @@ plasticity none
|
||||||
[Ti matrix]
|
[Ti matrix]
|
||||||
|
|
||||||
lattice_structure hex
|
lattice_structure hex
|
||||||
covera_ratio 1.587
|
c/a 1.587
|
||||||
plasticity none
|
plasticity none
|
||||||
{config/elastic_Ti.config}
|
{config/elastic_Ti.config}
|
||||||
{config/thermal.config}
|
{config/thermal.config}
|
||||||
|
@ -65,7 +65,7 @@ plasticity none
|
||||||
[Ti inclusion]
|
[Ti inclusion]
|
||||||
|
|
||||||
lattice_structure hex
|
lattice_structure hex
|
||||||
covera_ratio 1.587
|
c/a 1.587
|
||||||
plasticity none
|
plasticity none
|
||||||
{config/elastic_Ti.config}
|
{config/elastic_Ti.config}
|
||||||
{config/thermal.config}
|
{config/thermal.config}
|
||||||
|
|
|
@ -6,6 +6,8 @@ import os
|
||||||
with open(os.path.join(os.path.dirname(__file__),'../../VERSION')) as f:
|
with open(os.path.join(os.path.dirname(__file__),'../../VERSION')) as f:
|
||||||
version = f.readline()[:-1]
|
version = f.readline()[:-1]
|
||||||
|
|
||||||
|
name = 'damask'
|
||||||
|
|
||||||
from .environment import Environment # noqa
|
from .environment import Environment # noqa
|
||||||
from .asciitable import ASCIItable # noqa
|
from .asciitable import ASCIItable # noqa
|
||||||
|
|
||||||
|
|
|
@ -279,3 +279,14 @@ class Material():
|
||||||
print('Length of value was changed from %i to %i!'%(oldlen,newlen))
|
print('Length of value was changed from %i to %i!'%(oldlen,newlen))
|
||||||
|
|
||||||
|
|
||||||
|
def add_value(self, part=None,
|
||||||
|
section=None,
|
||||||
|
key=None,
|
||||||
|
value=None):
|
||||||
|
if not isinstance(value,list):
|
||||||
|
if not isinstance(value,str):
|
||||||
|
value = '%s'%value
|
||||||
|
value = [value]
|
||||||
|
print('adding %s:%s:%s with value %s '%(part.lower(),section.lower(),key.lower(),value))
|
||||||
|
self.data[part.lower()][section.lower()][key.lower()] = value
|
||||||
|
self.data[part.lower()][section.lower()]['__order__'] += [key.lower()]
|
||||||
|
|
|
@ -3,20 +3,12 @@
|
||||||
!> @author Franz Roters, Max-Planck-Institut für Eisenforschung GmbH
|
!> @author Franz Roters, Max-Planck-Institut für Eisenforschung GmbH
|
||||||
!> @author Koen Janssens, Paul Scherrer Institut
|
!> @author Koen Janssens, Paul Scherrer Institut
|
||||||
!> @author Arun Prakash, Fraunhofer IWM
|
!> @author Arun Prakash, Fraunhofer IWM
|
||||||
|
!> @author Martin Diehl, Max-Planck-Institut für Eisenforschung GmbH
|
||||||
!> @brief interfaces DAMASK with Abaqus/Standard
|
!> @brief interfaces DAMASK with Abaqus/Standard
|
||||||
!> @details put the included file abaqus_v6.env in either your home or model directory,
|
!> @details put the included file abaqus_v6.env in either your home or model directory,
|
||||||
!> it is a minimum Abaqus environment file containing all changes necessary to use the
|
!> it is a minimum Abaqus environment file containing all changes necessary to use the
|
||||||
!> DAMASK subroutine (see Abaqus documentation for more information on the use of abaqus_v6.env)
|
!> DAMASK subroutine (see Abaqus documentation for more information on the use of abaqus_v6.env)
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
#ifndef INT
|
|
||||||
#define INT 4
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef FLOAT
|
|
||||||
#define FLOAT 8
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define Abaqus
|
#define Abaqus
|
||||||
|
|
||||||
#include "prec.f90"
|
#include "prec.f90"
|
||||||
|
@ -24,17 +16,29 @@
|
||||||
module DAMASK_interface
|
module DAMASK_interface
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
character(len=4), dimension(2), parameter :: INPUTFILEEXTENSION = ['.pes','.inp']
|
private
|
||||||
character(len=4), parameter :: LOGFILEEXTENSION = '.log'
|
character(len=4), dimension(2), parameter, public :: INPUTFILEEXTENSION = ['.pes','.inp']
|
||||||
|
character(len=4), parameter, public :: LOGFILEEXTENSION = '.log'
|
||||||
|
|
||||||
|
public :: &
|
||||||
|
DAMASK_interface_init, &
|
||||||
|
getSolverJobName
|
||||||
|
|
||||||
contains
|
contains
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief just reporting
|
!> @brief reports and sets working directory
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine DAMASK_interface_init
|
subroutine DAMASK_interface_init
|
||||||
|
use ifport, only: &
|
||||||
|
CHDIR
|
||||||
|
|
||||||
|
implicit none
|
||||||
integer, dimension(8) :: &
|
integer, dimension(8) :: &
|
||||||
dateAndTime ! type default integer
|
dateAndTime ! type default integer
|
||||||
|
integer :: lenOutDir,ierr
|
||||||
|
character(len=256) :: wd
|
||||||
|
|
||||||
call date_and_time(values = dateAndTime)
|
call date_and_time(values = dateAndTime)
|
||||||
write(6,'(/,a)') ' <<<+- DAMASK_abaqus_std -+>>>'
|
write(6,'(/,a)') ' <<<+- DAMASK_abaqus_std -+>>>'
|
||||||
write(6,'(/,a)') ' Roters et al., Computational Materials Science, 2018'
|
write(6,'(/,a)') ' Roters et al., Computational Materials Science, 2018'
|
||||||
|
@ -46,26 +50,19 @@ subroutine DAMASK_interface_init
|
||||||
dateAndTime(6),':',&
|
dateAndTime(6),':',&
|
||||||
dateAndTime(7)
|
dateAndTime(7)
|
||||||
write(6,'(/,a)') ' <<<+- DAMASK_interface init -+>>>'
|
write(6,'(/,a)') ' <<<+- DAMASK_interface init -+>>>'
|
||||||
|
|
||||||
|
call getoutdir(wd, lenOutDir)
|
||||||
|
ierr = CHDIR(wd)
|
||||||
|
if (ierr /= 0) then
|
||||||
|
write(6,'(a20,a,a16)') ' working directory "',trim(wd),'" does not exist'
|
||||||
|
call quit(1)
|
||||||
|
endif
|
||||||
|
|
||||||
#include "compilation_info.f90"
|
#include "compilation_info.f90"
|
||||||
|
|
||||||
end subroutine DAMASK_interface_init
|
end subroutine DAMASK_interface_init
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
|
||||||
!> @brief using Abaqus/Standard function to get working directory name
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
|
||||||
character(1024) function getSolverWorkingDirectoryName()
|
|
||||||
|
|
||||||
implicit none
|
|
||||||
integer :: lenOutDir
|
|
||||||
|
|
||||||
getSolverWorkingDirectoryName=''
|
|
||||||
call getoutdir(getSolverWorkingDirectoryName, lenOutDir)
|
|
||||||
getSolverWorkingDirectoryName=trim(getSolverWorkingDirectoryName)//'/'
|
|
||||||
|
|
||||||
end function getSolverWorkingDirectoryName
|
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief using Abaqus/Standard function to get solver job name
|
!> @brief using Abaqus/Standard function to get solver job name
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
@ -79,10 +76,17 @@ character(1024) function getSolverJobName()
|
||||||
|
|
||||||
end function getSolverJobName
|
end function getSolverJobName
|
||||||
|
|
||||||
|
|
||||||
end module DAMASK_interface
|
end module DAMASK_interface
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include "commercialFEM_fileList.f90"
|
#include "commercialFEM_fileList.f90"
|
||||||
|
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
!> @brief This is the Abaqus std user subroutine for defining material behavior
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,&
|
subroutine UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,&
|
||||||
RPL,DDSDDT,DRPLDE,DRPLDT,STRAN,DSTRAN,&
|
RPL,DDSDDT,DRPLDE,DRPLDT,STRAN,DSTRAN,&
|
||||||
TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED,CMNAME,NDI,NSHR,NTENS,&
|
TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED,CMNAME,NDI,NSHR,NTENS,&
|
||||||
|
|
|
@ -1,15 +1,3 @@
|
||||||
#define QUOTE(x) #x
|
|
||||||
#define PASTE(x,y) x ## y
|
|
||||||
|
|
||||||
#ifndef INT
|
|
||||||
#define INT 4
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef FLOAT
|
|
||||||
#define FLOAT 8
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "prec.f90"
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @author Philip Eisenlohr, Max-Planck-Institut für Eisenforschung GmbH
|
!> @author Philip Eisenlohr, Max-Planck-Institut für Eisenforschung GmbH
|
||||||
!> @author Franz Roters, Max-Planck-Institut für Eisenforschung GmbH
|
!> @author Franz Roters, Max-Planck-Institut für Eisenforschung GmbH
|
||||||
|
@ -17,13 +5,12 @@
|
||||||
!> @author W.A. Counts
|
!> @author W.A. Counts
|
||||||
!> @author Denny Tjahjanto, Max-Planck-Institut für Eisenforschung GmbH
|
!> @author Denny Tjahjanto, 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
|
||||||
!> @brief Material subroutine for MSC.Marc
|
!> @author Martin Diehl, Max-Planck-Institut für Eisenforschung GmbH
|
||||||
|
!> @brief Interfaces DAMASK with MSC.Marc
|
||||||
!> @details Usage:
|
!> @details Usage:
|
||||||
!> @details - choose material as hypela2
|
!> @details - choose material as hypela2
|
||||||
!> @details - set statevariable 2 to index of homogenization
|
!> @details - set statevariable 2 to index of homogenization
|
||||||
!> @details - set statevariable 3 to index of microstructure
|
!> @details - set statevariable 3 to index of microstructure
|
||||||
!> @details - make sure the file "material.config" exists in the working directory
|
|
||||||
!> @details - make sure the file "numerics.config" exists in the working directory
|
|
||||||
!> @details - use nonsymmetric option for solver (e.g. direct profile or multifrontal sparse, the latter seems to be faster!)
|
!> @details - use nonsymmetric option for solver (e.g. direct profile or multifrontal sparse, the latter seems to be faster!)
|
||||||
!> @details - in case of ddm (domain decomposition) a SYMMETRIC solver has to be used, i.e uncheck "non-symmetric"
|
!> @details - in case of ddm (domain decomposition) a SYMMETRIC solver has to be used, i.e uncheck "non-symmetric"
|
||||||
!> @details Marc subroutines used:
|
!> @details Marc subroutines used:
|
||||||
|
@ -34,23 +21,36 @@
|
||||||
!> @details - concom: lovl, inc
|
!> @details - concom: lovl, inc
|
||||||
!> @details - creeps: timinc
|
!> @details - creeps: timinc
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
#define QUOTE(x) #x
|
||||||
|
#define PASTE(x,y) x ## y
|
||||||
|
|
||||||
|
#include "prec.f90"
|
||||||
|
|
||||||
module DAMASK_interface
|
module DAMASK_interface
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
character(len=4), parameter :: InputFileExtension = '.dat'
|
private
|
||||||
character(len=4), parameter :: LogFileExtension = '.log'
|
character(len=4), parameter, public :: InputFileExtension = '.dat'
|
||||||
|
character(len=4), parameter, public :: LogFileExtension = '.log'
|
||||||
|
|
||||||
|
public :: &
|
||||||
|
DAMASK_interface_init, &
|
||||||
|
getSolverJobName
|
||||||
|
|
||||||
contains
|
contains
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief only output of current version
|
!> @brief reports and sets working directory
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine DAMASK_interface_init
|
subroutine DAMASK_interface_init
|
||||||
|
use ifport, only: &
|
||||||
|
CHDIR
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
integer, dimension(8) :: &
|
integer, dimension(8) :: &
|
||||||
dateAndTime ! type default integer
|
dateAndTime ! type default integer
|
||||||
|
integer :: ierr
|
||||||
|
character(len=1024) :: wd
|
||||||
|
|
||||||
call date_and_time(values = dateAndTime)
|
call date_and_time(values = dateAndTime)
|
||||||
write(6,'(/,a)') ' <<<+- DAMASK_Marc -+>>>'
|
write(6,'(/,a)') ' <<<+- DAMASK_Marc -+>>>'
|
||||||
|
@ -64,27 +64,17 @@ subroutine DAMASK_interface_init
|
||||||
dateAndTime(7)
|
dateAndTime(7)
|
||||||
write(6,'(/,a)') ' <<<+- DAMASK_interface init -+>>>'
|
write(6,'(/,a)') ' <<<+- DAMASK_interface init -+>>>'
|
||||||
#include "compilation_info.f90"
|
#include "compilation_info.f90"
|
||||||
|
inquire(5, name=wd) ! determine inputputfile
|
||||||
|
wd = wd(1:scan(wd,'/',back=.true.))
|
||||||
|
ierr = CHDIR(wd)
|
||||||
|
if (ierr /= 0) then
|
||||||
|
write(6,'(a20,a,a16)') ' working directory "',trim(wd),'" does not exist'
|
||||||
|
call quit(1)
|
||||||
|
endif
|
||||||
|
|
||||||
end subroutine DAMASK_interface_init
|
end subroutine DAMASK_interface_init
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
|
||||||
!> @brief returns the current workingDir
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
|
||||||
function getSolverWorkingDirectoryName()
|
|
||||||
|
|
||||||
implicit none
|
|
||||||
character(1024) getSolverWorkingDirectoryName, inputName
|
|
||||||
character(len=*), parameter :: pathSep = achar(47)//achar(92) ! forward and backward slash
|
|
||||||
|
|
||||||
getSolverWorkingDirectoryName=''
|
|
||||||
inputName=''
|
|
||||||
inquire(5, name=inputName) ! determine inputputfile
|
|
||||||
getSolverWorkingDirectoryName=inputName(1:scan(inputName,pathSep,back=.true.))
|
|
||||||
|
|
||||||
end function getSolverWorkingDirectoryName
|
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief solver job name (no extension) as combination of geometry and load case name
|
!> @brief solver job name (no extension) as combination of geometry and load case name
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
@ -109,6 +99,9 @@ end function getSolverJobName
|
||||||
|
|
||||||
end module DAMASK_interface
|
end module DAMASK_interface
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include "commercialFEM_fileList.f90"
|
#include "commercialFEM_fileList.f90"
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
@ -118,17 +111,6 @@ end module DAMASK_interface
|
||||||
!> @details
|
!> @details
|
||||||
!> @details (2) Use the -> 'Plasticity,3' card(=update+finite+large disp+constant d)
|
!> @details (2) Use the -> 'Plasticity,3' card(=update+finite+large disp+constant d)
|
||||||
!> @details in the parameter section of input deck (updated Lagrangian formulation).
|
!> @details in the parameter section of input deck (updated Lagrangian formulation).
|
||||||
!> @details
|
|
||||||
!> @details The following operation obtains U (stretch tensor) at t=n+1 :
|
|
||||||
!> @details
|
|
||||||
!> @details call scla(un1,0.d0,itel,itel,1)
|
|
||||||
!> @details do k=1,3
|
|
||||||
!> @details do i=1,3
|
|
||||||
!> @details do j=1,3
|
|
||||||
!> @details un1(i,j)=un1(i,j)+dsqrt(strechn1(k))*eigvn1(i,k)*eigvn1(j,k)
|
|
||||||
!> @details enddo
|
|
||||||
!> @details enddo
|
|
||||||
!> @details enddo
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine hypela2(d,g,e,de,s,t,dt,ngens,m,nn,kcus,matus,ndi,nshear,disp, &
|
subroutine hypela2(d,g,e,de,s,t,dt,ngens,m,nn,kcus,matus,ndi,nshear,disp, &
|
||||||
dispt,coord,ffn,frotn,strechn,eigvn,ffn1,frotn1, &
|
dispt,coord,ffn,frotn,strechn,eigvn,ffn1,frotn1, &
|
||||||
|
|
|
@ -20,11 +20,12 @@ program DAMASK_spectral
|
||||||
pReal, &
|
pReal, &
|
||||||
tol_math_check, &
|
tol_math_check, &
|
||||||
dNeq
|
dNeq
|
||||||
|
use system_routines, only: &
|
||||||
|
getCWD
|
||||||
use DAMASK_interface, only: &
|
use DAMASK_interface, only: &
|
||||||
DAMASK_interface_init, &
|
DAMASK_interface_init, &
|
||||||
loadCaseFile, &
|
loadCaseFile, &
|
||||||
geometryFile, &
|
geometryFile, &
|
||||||
getSolverWorkingDirectoryName, &
|
|
||||||
getSolverJobName, &
|
getSolverJobName, &
|
||||||
appendToOutFile
|
appendToOutFile
|
||||||
use IO, only: &
|
use IO, only: &
|
||||||
|
@ -133,7 +134,9 @@ program DAMASK_spectral
|
||||||
lastRestartWritten = 0_pInt, & !< total increment # at which last restart information was written
|
lastRestartWritten = 0_pInt, & !< total increment # at which last restart information was written
|
||||||
stagIter
|
stagIter
|
||||||
character(len=6) :: loadcase_string
|
character(len=6) :: loadcase_string
|
||||||
character(len=1024) :: incInfo !< string parsed to solution with information about current load case
|
character(len=1024) :: &
|
||||||
|
incInfo, & !< string parsed to solution with information about current load case
|
||||||
|
workingDir
|
||||||
type(tLoadCase), allocatable, dimension(:) :: loadCases !< array of all load cases
|
type(tLoadCase), allocatable, dimension(:) :: loadCases !< array of all load cases
|
||||||
type(tSolutionState), allocatable, dimension(:) :: solres
|
type(tSolutionState), allocatable, dimension(:) :: solres
|
||||||
integer(MPI_OFFSET_KIND) :: fileOffset
|
integer(MPI_OFFSET_KIND) :: fileOffset
|
||||||
|
@ -381,10 +384,11 @@ program DAMASK_spectral
|
||||||
! write header of output file
|
! write header of output file
|
||||||
if (worldrank == 0) then
|
if (worldrank == 0) then
|
||||||
if (.not. appendToOutFile) then ! after restart, append to existing results file
|
if (.not. appendToOutFile) then ! after restart, append to existing results file
|
||||||
open(newunit=resUnit,file=trim(getSolverWorkingDirectoryName())//trim(getSolverJobName())//&
|
if (getCWD(workingDir)) call IO_error(106_pInt,ext_msg=trim(workingDir))
|
||||||
|
open(newunit=resUnit,file=trim(getSolverJobName())//&
|
||||||
'.spectralOut',form='UNFORMATTED',status='REPLACE')
|
'.spectralOut',form='UNFORMATTED',status='REPLACE')
|
||||||
write(resUnit) 'load:', trim(loadCaseFile) ! ... and write header
|
write(resUnit) 'load:', trim(loadCaseFile) ! ... and write header
|
||||||
write(resUnit) 'workingdir:', trim(getSolverWorkingDirectoryName())
|
write(resUnit) 'workingdir:', trim(workingDir)
|
||||||
write(resUnit) 'geometry:', trim(geometryFile)
|
write(resUnit) 'geometry:', trim(geometryFile)
|
||||||
write(resUnit) 'grid:', grid
|
write(resUnit) 'grid:', grid
|
||||||
write(resUnit) 'size:', geomSize
|
write(resUnit) 'size:', geomSize
|
||||||
|
@ -397,14 +401,14 @@ program DAMASK_spectral
|
||||||
write(resUnit) 'startingIncrement:', restartInc ! start with writing out the previous inc
|
write(resUnit) 'startingIncrement:', restartInc ! start with writing out the previous inc
|
||||||
write(resUnit) 'eoh'
|
write(resUnit) 'eoh'
|
||||||
close(resUnit) ! end of header
|
close(resUnit) ! end of header
|
||||||
open(newunit=statUnit,file=trim(getSolverWorkingDirectoryName())//trim(getSolverJobName())//&
|
open(newunit=statUnit,file=trim(getSolverJobName())//&
|
||||||
'.sta',form='FORMATTED',status='REPLACE')
|
'.sta',form='FORMATTED',status='REPLACE')
|
||||||
write(statUnit,'(a)') 'Increment Time CutbackLevel Converged IterationsNeeded' ! statistics file
|
write(statUnit,'(a)') 'Increment Time CutbackLevel Converged IterationsNeeded' ! statistics file
|
||||||
if (iand(debug_level(debug_spectral),debug_levelBasic) /= 0) &
|
if (iand(debug_level(debug_spectral),debug_levelBasic) /= 0) &
|
||||||
write(6,'(/,a)') ' header of result and statistics file written out'
|
write(6,'(/,a)') ' header of result and statistics file written out'
|
||||||
flush(6)
|
flush(6)
|
||||||
else ! open new files ...
|
else ! open new files ...
|
||||||
open(newunit=statUnit,file=trim(getSolverWorkingDirectoryName())//trim(getSolverJobName())//&
|
open(newunit=statUnit,file=trim(getSolverJobName())//&
|
||||||
'.sta',form='FORMATTED', position='APPEND', status='OLD')
|
'.sta',form='FORMATTED', position='APPEND', status='OLD')
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
@ -415,8 +419,7 @@ program DAMASK_spectral
|
||||||
outputSize(worldrank+1) = size(materialpoint_results,kind=MPI_OFFSET_KIND)*int(pReal,MPI_OFFSET_KIND)
|
outputSize(worldrank+1) = size(materialpoint_results,kind=MPI_OFFSET_KIND)*int(pReal,MPI_OFFSET_KIND)
|
||||||
call MPI_allreduce(MPI_IN_PLACE,outputSize,worldsize,MPI_LONG,MPI_SUM,PETSC_COMM_WORLD,ierr) ! get total output size over each process
|
call MPI_allreduce(MPI_IN_PLACE,outputSize,worldsize,MPI_LONG,MPI_SUM,PETSC_COMM_WORLD,ierr) ! get total output size over each process
|
||||||
if (ierr /= 0_pInt) call IO_error(error_ID=894_pInt, ext_msg='MPI_allreduce')
|
if (ierr /= 0_pInt) call IO_error(error_ID=894_pInt, ext_msg='MPI_allreduce')
|
||||||
call MPI_file_open(PETSC_COMM_WORLD, &
|
call MPI_file_open(PETSC_COMM_WORLD, trim(getSolverJobName())//'.spectralOut', &
|
||||||
trim(getSolverWorkingDirectoryName())//trim(getSolverJobName())//'.spectralOut', &
|
|
||||||
MPI_MODE_WRONLY + MPI_MODE_APPEND, &
|
MPI_MODE_WRONLY + MPI_MODE_APPEND, &
|
||||||
MPI_INFO_NULL, &
|
MPI_INFO_NULL, &
|
||||||
resUnit, &
|
resUnit, &
|
||||||
|
|
63
src/IO.f90
63
src/IO.f90
|
@ -195,18 +195,14 @@ end subroutine IO_checkAndRewind
|
||||||
!> @details like IO_open_file_stat, but error is handled via call to IO_error and not via return
|
!> @details like IO_open_file_stat, but error is handled via call to IO_error and not via return
|
||||||
!! value
|
!! value
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine IO_open_file(fileUnit,relPath)
|
subroutine IO_open_file(fileUnit,path)
|
||||||
use DAMASK_interface, only: &
|
|
||||||
getSolverWorkingDirectoryName
|
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
integer(pInt), intent(in) :: fileUnit !< file unit
|
integer(pInt), intent(in) :: fileUnit !< file unit
|
||||||
character(len=*), intent(in) :: relPath !< relative path from working directory
|
character(len=*), intent(in) :: path !< relative path from working directory
|
||||||
|
|
||||||
integer(pInt) :: myStat
|
integer(pInt) :: myStat
|
||||||
character(len=1024) :: path
|
|
||||||
|
|
||||||
path = trim(getSolverWorkingDirectoryName())//relPath
|
|
||||||
open(fileUnit,status='old',iostat=myStat,file=path)
|
open(fileUnit,status='old',iostat=myStat,file=path)
|
||||||
if (myStat /= 0_pInt) call IO_error(100_pInt,el=myStat,ext_msg=path)
|
if (myStat /= 0_pInt) call IO_error(100_pInt,el=myStat,ext_msg=path)
|
||||||
|
|
||||||
|
@ -218,18 +214,14 @@ end subroutine IO_open_file
|
||||||
!! directory
|
!! directory
|
||||||
!> @details Like IO_open_file, but error is handled via return value and not via call to IO_error
|
!> @details Like IO_open_file, but error is handled via return value and not via call to IO_error
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
logical function IO_open_file_stat(fileUnit,relPath)
|
logical function IO_open_file_stat(fileUnit,path)
|
||||||
use DAMASK_interface, only: &
|
|
||||||
getSolverWorkingDirectoryName
|
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
integer(pInt), intent(in) :: fileUnit !< file unit
|
integer(pInt), intent(in) :: fileUnit !< file unit
|
||||||
character(len=*), intent(in) :: relPath !< relative path from working directory
|
character(len=*), intent(in) :: path !< relative path from working directory
|
||||||
|
|
||||||
integer(pInt) :: myStat
|
integer(pInt) :: myStat
|
||||||
character(len=1024) :: path
|
|
||||||
|
|
||||||
path = trim(getSolverWorkingDirectoryName())//relPath
|
|
||||||
open(fileUnit,status='old',iostat=myStat,file=path)
|
open(fileUnit,status='old',iostat=myStat,file=path)
|
||||||
IO_open_file_stat = (myStat == 0_pInt)
|
IO_open_file_stat = (myStat == 0_pInt)
|
||||||
|
|
||||||
|
@ -244,7 +236,6 @@ end function IO_open_file_stat
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine IO_open_jobFile(fileUnit,ext)
|
subroutine IO_open_jobFile(fileUnit,ext)
|
||||||
use DAMASK_interface, only: &
|
use DAMASK_interface, only: &
|
||||||
getSolverWorkingDirectoryName, &
|
|
||||||
getSolverJobName
|
getSolverJobName
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
|
@ -254,7 +245,7 @@ subroutine IO_open_jobFile(fileUnit,ext)
|
||||||
integer(pInt) :: myStat
|
integer(pInt) :: myStat
|
||||||
character(len=1024) :: path
|
character(len=1024) :: path
|
||||||
|
|
||||||
path = trim(getSolverWorkingDirectoryName())//trim(getSolverJobName())//'.'//ext
|
path = trim(getSolverJobName())//'.'//ext
|
||||||
open(fileUnit,status='old',iostat=myStat,file=path)
|
open(fileUnit,status='old',iostat=myStat,file=path)
|
||||||
if (myStat /= 0_pInt) call IO_error(100_pInt,el=myStat,ext_msg=path)
|
if (myStat /= 0_pInt) call IO_error(100_pInt,el=myStat,ext_msg=path)
|
||||||
|
|
||||||
|
@ -269,7 +260,6 @@ end subroutine IO_open_jobFile
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
logical function IO_open_jobFile_stat(fileUnit,ext)
|
logical function IO_open_jobFile_stat(fileUnit,ext)
|
||||||
use DAMASK_interface, only: &
|
use DAMASK_interface, only: &
|
||||||
getSolverWorkingDirectoryName, &
|
|
||||||
getSolverJobName
|
getSolverJobName
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
|
@ -279,7 +269,7 @@ logical function IO_open_jobFile_stat(fileUnit,ext)
|
||||||
integer(pInt) :: myStat
|
integer(pInt) :: myStat
|
||||||
character(len=1024) :: path
|
character(len=1024) :: path
|
||||||
|
|
||||||
path = trim(getSolverWorkingDirectoryName())//trim(getSolverJobName())//'.'//ext
|
path = trim(getSolverJobName())//'.'//ext
|
||||||
open(fileUnit,status='old',iostat=myStat,file=path)
|
open(fileUnit,status='old',iostat=myStat,file=path)
|
||||||
IO_open_jobFile_stat = (myStat == 0_pInt)
|
IO_open_jobFile_stat = (myStat == 0_pInt)
|
||||||
|
|
||||||
|
@ -292,7 +282,6 @@ end function IO_open_JobFile_stat
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine IO_open_inputFile(fileUnit,modelName)
|
subroutine IO_open_inputFile(fileUnit,modelName)
|
||||||
use DAMASK_interface, only: &
|
use DAMASK_interface, only: &
|
||||||
getSolverWorkingDirectoryName,&
|
|
||||||
getSolverJobName, &
|
getSolverJobName, &
|
||||||
inputFileExtension
|
inputFileExtension
|
||||||
|
|
||||||
|
@ -306,23 +295,23 @@ subroutine IO_open_inputFile(fileUnit,modelName)
|
||||||
integer(pInt) :: fileType
|
integer(pInt) :: fileType
|
||||||
|
|
||||||
fileType = 1_pInt ! assume .pes
|
fileType = 1_pInt ! assume .pes
|
||||||
path = trim(getSolverWorkingDirectoryName())//trim(modelName)//inputFileExtension(fileType) ! attempt .pes, if it exists: it should be used
|
path = trim(modelName)//inputFileExtension(fileType) ! attempt .pes, if it exists: it should be used
|
||||||
open(fileUnit+1,status='old',iostat=myStat,file=path)
|
open(fileUnit+1,status='old',iostat=myStat,file=path)
|
||||||
if(myStat /= 0_pInt) then ! if .pes does not work / exist; use conventional extension, i.e.".inp"
|
if(myStat /= 0_pInt) then ! if .pes does not work / exist; use conventional extension, i.e.".inp"
|
||||||
fileType = 2_pInt
|
fileType = 2_pInt
|
||||||
path = trim(getSolverWorkingDirectoryName())//trim(modelName)//inputFileExtension(fileType)
|
path = trim(modelName)//inputFileExtension(fileType)
|
||||||
open(fileUnit+1,status='old',iostat=myStat,file=path)
|
open(fileUnit+1,status='old',iostat=myStat,file=path)
|
||||||
endif
|
endif
|
||||||
if (myStat /= 0_pInt) call IO_error(100_pInt,el=myStat,ext_msg=path)
|
if (myStat /= 0_pInt) call IO_error(100_pInt,el=myStat,ext_msg=path)
|
||||||
|
|
||||||
path = trim(getSolverWorkingDirectoryName())//trim(modelName)//inputFileExtension(fileType)//'_assembly'
|
path = trim(modelName)//inputFileExtension(fileType)//'_assembly'
|
||||||
open(fileUnit,iostat=myStat,file=path)
|
open(fileUnit,iostat=myStat,file=path)
|
||||||
if (myStat /= 0_pInt) call IO_error(100_pInt,el=myStat,ext_msg=path)
|
if (myStat /= 0_pInt) call IO_error(100_pInt,el=myStat,ext_msg=path)
|
||||||
if (.not.abaqus_assembleInputFile(fileUnit,fileUnit+1_pInt)) call IO_error(103_pInt) ! strip comments and concatenate any "include"s
|
if (.not.abaqus_assembleInputFile(fileUnit,fileUnit+1_pInt)) call IO_error(103_pInt) ! strip comments and concatenate any "include"s
|
||||||
close(fileUnit+1_pInt)
|
close(fileUnit+1_pInt)
|
||||||
#endif
|
#endif
|
||||||
#ifdef Marc4DAMASK
|
#ifdef Marc4DAMASK
|
||||||
path = trim(getSolverWorkingDirectoryName())//trim(modelName)//inputFileExtension
|
path = trim(modelName)//inputFileExtension
|
||||||
open(fileUnit,status='old',iostat=myStat,file=path)
|
open(fileUnit,status='old',iostat=myStat,file=path)
|
||||||
if (myStat /= 0_pInt) call IO_error(100_pInt,el=myStat,ext_msg=path)
|
if (myStat /= 0_pInt) call IO_error(100_pInt,el=myStat,ext_msg=path)
|
||||||
#endif
|
#endif
|
||||||
|
@ -336,7 +325,6 @@ end subroutine IO_open_inputFile
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine IO_open_logFile(fileUnit)
|
subroutine IO_open_logFile(fileUnit)
|
||||||
use DAMASK_interface, only: &
|
use DAMASK_interface, only: &
|
||||||
getSolverWorkingDirectoryName, &
|
|
||||||
getSolverJobName, &
|
getSolverJobName, &
|
||||||
LogFileExtension
|
LogFileExtension
|
||||||
|
|
||||||
|
@ -346,7 +334,7 @@ subroutine IO_open_logFile(fileUnit)
|
||||||
integer(pInt) :: myStat
|
integer(pInt) :: myStat
|
||||||
character(len=1024) :: path
|
character(len=1024) :: path
|
||||||
|
|
||||||
path = trim(getSolverWorkingDirectoryName())//trim(getSolverJobName())//LogFileExtension
|
path = trim(getSolverJobName())//LogFileExtension
|
||||||
open(fileUnit,status='old',iostat=myStat,file=path)
|
open(fileUnit,status='old',iostat=myStat,file=path)
|
||||||
if (myStat /= 0_pInt) call IO_error(100_pInt,el=myStat,ext_msg=path)
|
if (myStat /= 0_pInt) call IO_error(100_pInt,el=myStat,ext_msg=path)
|
||||||
|
|
||||||
|
@ -360,7 +348,6 @@ end subroutine IO_open_logFile
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine IO_write_jobFile(fileUnit,ext)
|
subroutine IO_write_jobFile(fileUnit,ext)
|
||||||
use DAMASK_interface, only: &
|
use DAMASK_interface, only: &
|
||||||
getSolverWorkingDirectoryName, &
|
|
||||||
getSolverJobName
|
getSolverJobName
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
|
@ -370,7 +357,7 @@ subroutine IO_write_jobFile(fileUnit,ext)
|
||||||
integer(pInt) :: myStat
|
integer(pInt) :: myStat
|
||||||
character(len=1024) :: path
|
character(len=1024) :: path
|
||||||
|
|
||||||
path = trim(getSolverWorkingDirectoryName())//trim(getSolverJobName())//'.'//ext
|
path = trim(getSolverJobName())//'.'//ext
|
||||||
open(fileUnit,status='replace',iostat=myStat,file=path)
|
open(fileUnit,status='replace',iostat=myStat,file=path)
|
||||||
if (myStat /= 0_pInt) call IO_error(100_pInt,el=myStat,ext_msg=path)
|
if (myStat /= 0_pInt) call IO_error(100_pInt,el=myStat,ext_msg=path)
|
||||||
|
|
||||||
|
@ -383,7 +370,6 @@ end subroutine IO_write_jobFile
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine IO_write_jobRealFile(fileUnit,ext,recMultiplier)
|
subroutine IO_write_jobRealFile(fileUnit,ext,recMultiplier)
|
||||||
use DAMASK_interface, only: &
|
use DAMASK_interface, only: &
|
||||||
getSolverWorkingDirectoryName, &
|
|
||||||
getSolverJobName
|
getSolverJobName
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
|
@ -394,7 +380,7 @@ subroutine IO_write_jobRealFile(fileUnit,ext,recMultiplier)
|
||||||
integer(pInt) :: myStat
|
integer(pInt) :: myStat
|
||||||
character(len=1024) :: path
|
character(len=1024) :: path
|
||||||
|
|
||||||
path = trim(getSolverWorkingDirectoryName())//trim(getSolverJobName())//'.'//ext
|
path = trim(getSolverJobName())//'.'//ext
|
||||||
if (present(recMultiplier)) then
|
if (present(recMultiplier)) then
|
||||||
open(fileUnit,status='replace',form='unformatted',access='direct', &
|
open(fileUnit,status='replace',form='unformatted',access='direct', &
|
||||||
recl=pReal*recMultiplier,iostat=myStat,file=path)
|
recl=pReal*recMultiplier,iostat=myStat,file=path)
|
||||||
|
@ -414,7 +400,6 @@ end subroutine IO_write_jobRealFile
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine IO_write_jobIntFile(fileUnit,ext,recMultiplier)
|
subroutine IO_write_jobIntFile(fileUnit,ext,recMultiplier)
|
||||||
use DAMASK_interface, only: &
|
use DAMASK_interface, only: &
|
||||||
getSolverWorkingDirectoryName, &
|
|
||||||
getSolverJobName
|
getSolverJobName
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
|
@ -425,7 +410,7 @@ subroutine IO_write_jobIntFile(fileUnit,ext,recMultiplier)
|
||||||
integer(pInt) :: myStat
|
integer(pInt) :: myStat
|
||||||
character(len=1024) :: path
|
character(len=1024) :: path
|
||||||
|
|
||||||
path = trim(getSolverWorkingDirectoryName())//trim(getSolverJobName())//'.'//ext
|
path = trim(getSolverJobName())//'.'//ext
|
||||||
if (present(recMultiplier)) then
|
if (present(recMultiplier)) then
|
||||||
open(fileUnit,status='replace',form='unformatted',access='direct', &
|
open(fileUnit,status='replace',form='unformatted',access='direct', &
|
||||||
recl=pInt*recMultiplier,iostat=myStat,file=path)
|
recl=pInt*recMultiplier,iostat=myStat,file=path)
|
||||||
|
@ -444,8 +429,6 @@ end subroutine IO_write_jobIntFile
|
||||||
!! located in current working directory
|
!! located in current working directory
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine IO_read_realFile(fileUnit,ext,modelName,recMultiplier)
|
subroutine IO_read_realFile(fileUnit,ext,modelName,recMultiplier)
|
||||||
use DAMASK_interface, only: &
|
|
||||||
getSolverWorkingDirectoryName
|
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
integer(pInt), intent(in) :: fileUnit !< file unit
|
integer(pInt), intent(in) :: fileUnit !< file unit
|
||||||
|
@ -456,7 +439,7 @@ subroutine IO_read_realFile(fileUnit,ext,modelName,recMultiplier)
|
||||||
integer(pInt) :: myStat
|
integer(pInt) :: myStat
|
||||||
character(len=1024) :: path
|
character(len=1024) :: path
|
||||||
|
|
||||||
path = trim(getSolverWorkingDirectoryName())//trim(modelName)//'.'//ext
|
path = trim(modelName)//'.'//ext
|
||||||
if (present(recMultiplier)) then
|
if (present(recMultiplier)) then
|
||||||
open(fileUnit,status='old',form='unformatted',access='direct', &
|
open(fileUnit,status='old',form='unformatted',access='direct', &
|
||||||
recl=pReal*recMultiplier,iostat=myStat,file=path)
|
recl=pReal*recMultiplier,iostat=myStat,file=path)
|
||||||
|
@ -474,8 +457,6 @@ end subroutine IO_read_realFile
|
||||||
!! located in current working directory
|
!! located in current working directory
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine IO_read_intFile(fileUnit,ext,modelName,recMultiplier)
|
subroutine IO_read_intFile(fileUnit,ext,modelName,recMultiplier)
|
||||||
use DAMASK_interface, only: &
|
|
||||||
getSolverWorkingDirectoryName
|
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
integer(pInt), intent(in) :: fileUnit !< file unit
|
integer(pInt), intent(in) :: fileUnit !< file unit
|
||||||
|
@ -486,7 +467,7 @@ subroutine IO_read_intFile(fileUnit,ext,modelName,recMultiplier)
|
||||||
integer(pInt) :: myStat
|
integer(pInt) :: myStat
|
||||||
character(len=1024) :: path
|
character(len=1024) :: path
|
||||||
|
|
||||||
path = trim(getSolverWorkingDirectoryName())//trim(modelName)//'.'//ext
|
path = trim(modelName)//'.'//ext
|
||||||
if (present(recMultiplier)) then
|
if (present(recMultiplier)) then
|
||||||
open(fileUnit,status='old',form='unformatted',access='direct', &
|
open(fileUnit,status='old',form='unformatted',access='direct', &
|
||||||
recl=pInt*recMultiplier,iostat=myStat,file=path)
|
recl=pInt*recMultiplier,iostat=myStat,file=path)
|
||||||
|
@ -1007,11 +988,7 @@ function IO_stringValue(string,chunkPos,myChunk,silent)
|
||||||
|
|
||||||
logical :: warn
|
logical :: warn
|
||||||
|
|
||||||
if (.not. present(silent)) then
|
warn = merge(silent,.false.,present(silent))
|
||||||
warn = .false.
|
|
||||||
else
|
|
||||||
warn = silent
|
|
||||||
endif
|
|
||||||
|
|
||||||
IO_stringValue = ''
|
IO_stringValue = ''
|
||||||
valuePresent: if (myChunk > chunkPos(1) .or. myChunk < 1_pInt) then
|
valuePresent: if (myChunk > chunkPos(1) .or. myChunk < 1_pInt) then
|
||||||
|
@ -1534,6 +1511,8 @@ subroutine IO_error(error_ID,el,ip,g,instance,ext_msg)
|
||||||
msg = '{input} recursion limit reached'
|
msg = '{input} recursion limit reached'
|
||||||
case (105_pInt)
|
case (105_pInt)
|
||||||
msg = 'unknown output:'
|
msg = 'unknown output:'
|
||||||
|
case (106_pInt)
|
||||||
|
msg = 'working directory does not exist:'
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! lattice error messages
|
! lattice error messages
|
||||||
|
@ -1905,8 +1884,6 @@ end function IO_verifyFloatValue
|
||||||
!> including "include"s
|
!> including "include"s
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
recursive function abaqus_assembleInputFile(unit1,unit2) result(createSuccess)
|
recursive function abaqus_assembleInputFile(unit1,unit2) result(createSuccess)
|
||||||
use DAMASK_interface, only: &
|
|
||||||
getSolverWorkingDirectoryName
|
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
integer(pInt), intent(in) :: unit1, &
|
integer(pInt), intent(in) :: unit1, &
|
||||||
|
@ -1923,7 +1900,7 @@ recursive function abaqus_assembleInputFile(unit1,unit2) result(createSuccess)
|
||||||
chunkPos = IO_stringPos(line)
|
chunkPos = IO_stringPos(line)
|
||||||
|
|
||||||
if (IO_lc(IO_StringValue(line,chunkPos,1_pInt))=='*include') then
|
if (IO_lc(IO_StringValue(line,chunkPos,1_pInt))=='*include') then
|
||||||
fname = trim(getSolverWorkingDirectoryName())//trim(line(9+scan(line(9:),'='):))
|
fname = trim(line(9+scan(line(9:),'='):))
|
||||||
inquire(file=fname, exist=fexist)
|
inquire(file=fname, exist=fexist)
|
||||||
if (.not.(fexist)) then
|
if (.not.(fexist)) then
|
||||||
!$OMP CRITICAL (write2out)
|
!$OMP CRITICAL (write2out)
|
||||||
|
|
|
@ -160,7 +160,7 @@ subroutine constitutive_init()
|
||||||
! parse plasticities from config file
|
! parse plasticities from config file
|
||||||
if (any(phase_plasticity == PLASTICITY_NONE_ID)) call plastic_none_init
|
if (any(phase_plasticity == PLASTICITY_NONE_ID)) call plastic_none_init
|
||||||
if (any(phase_plasticity == PLASTICITY_ISOTROPIC_ID)) call plastic_isotropic_init
|
if (any(phase_plasticity == PLASTICITY_ISOTROPIC_ID)) call plastic_isotropic_init
|
||||||
if (any(phase_plasticity == PLASTICITY_PHENOPOWERLAW_ID)) call plastic_phenopowerlaw_init(FILEUNIT)
|
if (any(phase_plasticity == PLASTICITY_PHENOPOWERLAW_ID)) call plastic_phenopowerlaw_init
|
||||||
if (any(phase_plasticity == PLASTICITY_KINEHARDENING_ID)) call plastic_kinehardening_init(FILEUNIT)
|
if (any(phase_plasticity == PLASTICITY_KINEHARDENING_ID)) call plastic_kinehardening_init(FILEUNIT)
|
||||||
if (any(phase_plasticity == PLASTICITY_DISLOTWIN_ID)) call plastic_dislotwin_init(FILEUNIT)
|
if (any(phase_plasticity == PLASTICITY_DISLOTWIN_ID)) call plastic_dislotwin_init(FILEUNIT)
|
||||||
if (any(phase_plasticity == PLASTICITY_DISLOUCLA_ID)) call plastic_disloucla_init(FILEUNIT)
|
if (any(phase_plasticity == PLASTICITY_DISLOUCLA_ID)) call plastic_disloucla_init(FILEUNIT)
|
||||||
|
@ -864,19 +864,11 @@ subroutine constitutive_collectDotState(Tstar_v, FeArray, FpArray, subdt, subfra
|
||||||
FpArray !< plastic deformation gradient
|
FpArray !< plastic deformation gradient
|
||||||
real(pReal), intent(in), dimension(6) :: &
|
real(pReal), intent(in), dimension(6) :: &
|
||||||
Tstar_v !< 2nd Piola Kirchhoff stress tensor (Mandel)
|
Tstar_v !< 2nd Piola Kirchhoff stress tensor (Mandel)
|
||||||
integer(pLongInt) :: &
|
|
||||||
tick = 0_pLongInt, &
|
|
||||||
tock = 0_pLongInt, &
|
|
||||||
tickrate, &
|
|
||||||
maxticks
|
|
||||||
integer(pInt) :: &
|
integer(pInt) :: &
|
||||||
ho, & !< homogenization
|
ho, & !< homogenization
|
||||||
tme, & !< thermal member position
|
tme, & !< thermal member position
|
||||||
s !< counter in source loop
|
s !< counter in source loop
|
||||||
|
|
||||||
if (iand(debug_level(debug_constitutive), debug_levelBasic) /= 0_pInt) &
|
|
||||||
call system_clock(count=tick,count_rate=tickrate,count_max=maxticks)
|
|
||||||
|
|
||||||
ho = material_homog( ip,el)
|
ho = material_homog( ip,el)
|
||||||
tme = thermalMapping(ho)%p(ip,el)
|
tme = thermalMapping(ho)%p(ip,el)
|
||||||
|
|
||||||
|
@ -957,13 +949,6 @@ subroutine constitutive_collectDeltaState(Tstar_v, Fe, ipc, ip, el)
|
||||||
Fe !< elastic deformation gradient
|
Fe !< elastic deformation gradient
|
||||||
integer(pInt) :: &
|
integer(pInt) :: &
|
||||||
s !< counter in source loop
|
s !< counter in source loop
|
||||||
integer(pLongInt) :: &
|
|
||||||
tick, tock, &
|
|
||||||
tickrate, &
|
|
||||||
maxticks
|
|
||||||
|
|
||||||
if (iand(debug_level(debug_constitutive), debug_levelBasic) /= 0_pInt) &
|
|
||||||
call system_clock(count=tick,count_rate=tickrate,count_max=maxticks)
|
|
||||||
|
|
||||||
plasticityType: select case (phase_plasticity(material_phase(ipc,ip,el)))
|
plasticityType: select case (phase_plasticity(material_phase(ipc,ip,el)))
|
||||||
case (PLASTICITY_KINEHARDENING_ID) plasticityType
|
case (PLASTICITY_KINEHARDENING_ID) plasticityType
|
||||||
|
|
|
@ -494,7 +494,6 @@ subroutine crystallite_stressAndItsTangent(updateJaco)
|
||||||
subStepMinCryst, &
|
subStepMinCryst, &
|
||||||
subStepSizeCryst, &
|
subStepSizeCryst, &
|
||||||
stepIncreaseCryst, &
|
stepIncreaseCryst, &
|
||||||
nCryst, &
|
|
||||||
numerics_integrator, &
|
numerics_integrator, &
|
||||||
numerics_integrationMode, &
|
numerics_integrationMode, &
|
||||||
numerics_timeSyncing
|
numerics_timeSyncing
|
||||||
|
@ -1215,8 +1214,6 @@ end subroutine crystallite_stressAndItsTangent
|
||||||
subroutine crystallite_integrateStateRK4()
|
subroutine crystallite_integrateStateRK4()
|
||||||
use, intrinsic :: &
|
use, intrinsic :: &
|
||||||
IEEE_arithmetic
|
IEEE_arithmetic
|
||||||
use numerics, only: &
|
|
||||||
numerics_integrationMode
|
|
||||||
use debug, only: &
|
use debug, only: &
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
debug_e, &
|
debug_e, &
|
||||||
|
@ -1517,8 +1514,7 @@ subroutine crystallite_integrateStateRKCK45()
|
||||||
debug_levelExtensive, &
|
debug_levelExtensive, &
|
||||||
debug_levelSelective
|
debug_levelSelective
|
||||||
use numerics, only: &
|
use numerics, only: &
|
||||||
rTol_crystalliteState, &
|
rTol_crystalliteState
|
||||||
numerics_integrationMode
|
|
||||||
use FEsolving, only: &
|
use FEsolving, only: &
|
||||||
FEsolving_execElem, &
|
FEsolving_execElem, &
|
||||||
FEsolving_execIP
|
FEsolving_execIP
|
||||||
|
@ -2581,7 +2577,6 @@ subroutine crystallite_integrateStateFPI()
|
||||||
debug_levelSelective
|
debug_levelSelective
|
||||||
use numerics, only: &
|
use numerics, only: &
|
||||||
nState, &
|
nState, &
|
||||||
numerics_integrationMode, &
|
|
||||||
rTol_crystalliteState
|
rTol_crystalliteState
|
||||||
use FEsolving, only: &
|
use FEsolving, only: &
|
||||||
FEsolving_execElem, &
|
FEsolving_execElem, &
|
||||||
|
@ -3156,7 +3151,6 @@ logical function crystallite_integrateStress(&
|
||||||
aTol_crystalliteStress, &
|
aTol_crystalliteStress, &
|
||||||
rTol_crystalliteStress, &
|
rTol_crystalliteStress, &
|
||||||
iJacoLpresiduum, &
|
iJacoLpresiduum, &
|
||||||
numerics_integrationMode, &
|
|
||||||
subStepSizeLp, &
|
subStepSizeLp, &
|
||||||
subStepSizeLi
|
subStepSizeLi
|
||||||
use debug, only: debug_level, &
|
use debug, only: debug_level, &
|
||||||
|
|
|
@ -283,11 +283,8 @@ end subroutine debug_reset
|
||||||
subroutine debug_info
|
subroutine debug_info
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
character(len=1) :: exceed
|
|
||||||
|
|
||||||
|
|
||||||
!$OMP CRITICAL (write2out)
|
!$OMP CRITICAL (write2out)
|
||||||
|
|
||||||
debugOutputCPFEM: if (iand(debug_level(debug_CPFEM),debug_LEVELBASIC) /= 0 &
|
debugOutputCPFEM: if (iand(debug_level(debug_CPFEM),debug_LEVELBASIC) /= 0 &
|
||||||
.and. any(debug_stressMinLocation /= 0_pInt) &
|
.and. any(debug_stressMinLocation /= 0_pInt) &
|
||||||
.and. any(debug_stressMaxLocation /= 0_pInt) ) then
|
.and. any(debug_stressMaxLocation /= 0_pInt) ) then
|
||||||
|
|
|
@ -494,7 +494,6 @@ subroutine materialpoint_stressAndItsTangent(updateJaco,dt)
|
||||||
subStepMinHomog, &
|
subStepMinHomog, &
|
||||||
subStepSizeHomog, &
|
subStepSizeHomog, &
|
||||||
stepIncreaseHomog, &
|
stepIncreaseHomog, &
|
||||||
nHomog, &
|
|
||||||
nMPstate
|
nMPstate
|
||||||
use math, only: &
|
use math, only: &
|
||||||
math_transpose33
|
math_transpose33
|
||||||
|
|
479
src/lattice.f90
479
src/lattice.f90
|
@ -16,7 +16,7 @@ module lattice
|
||||||
integer(pInt), parameter, public :: &
|
integer(pInt), parameter, public :: &
|
||||||
LATTICE_maxNslipFamily = 13_pInt, & !< max # of slip system families over lattice structures
|
LATTICE_maxNslipFamily = 13_pInt, & !< max # of slip system families over lattice structures
|
||||||
LATTICE_maxNtwinFamily = 4_pInt, & !< max # of twin system families over lattice structures
|
LATTICE_maxNtwinFamily = 4_pInt, & !< max # of twin system families over lattice structures
|
||||||
LATTICE_maxNtransFamily = 2_pInt, & !< max # of transformation system families over lattice structures
|
LATTICE_maxNtransFamily = 1_pInt, & !< max # of transformation system families over lattice structures
|
||||||
LATTICE_maxNcleavageFamily = 3_pInt !< max # of transformation system families over lattice structures
|
LATTICE_maxNcleavageFamily = 3_pInt !< max # of transformation system families over lattice structures
|
||||||
|
|
||||||
integer(pInt), allocatable, dimension(:,:), protected, public :: &
|
integer(pInt), allocatable, dimension(:,:), protected, public :: &
|
||||||
|
@ -82,17 +82,17 @@ module lattice
|
||||||
LATTICE_fcc_NtwinSystem = int([12, 0, 0, 0],pInt) !< # of twin systems per family for fcc
|
LATTICE_fcc_NtwinSystem = int([12, 0, 0, 0],pInt) !< # of twin systems per family for fcc
|
||||||
|
|
||||||
integer(pInt), dimension(LATTICE_maxNtransFamily), parameter, public :: &
|
integer(pInt), dimension(LATTICE_maxNtransFamily), parameter, public :: &
|
||||||
LATTICE_fcc_NtransSystem = int([12, 0],pInt) !< # of transformation systems per family for fcc
|
LATTICE_fcc_NtransSystem = int([12],pInt) !< # of transformation systems per family for fcc
|
||||||
|
|
||||||
integer(pInt), dimension(LATTICE_maxNcleavageFamily), parameter, public :: &
|
integer(pInt), dimension(LATTICE_maxNcleavageFamily), parameter, public :: &
|
||||||
LATTICE_fcc_NcleavageSystem = int([3, 4, 0],pInt) !< # of cleavage systems per family for fcc
|
LATTICE_fcc_NcleavageSystem = int([3, 4, 0],pInt) !< # of cleavage systems per family for fcc
|
||||||
|
|
||||||
integer(pInt), parameter, private :: &
|
integer(pInt), parameter, private :: &
|
||||||
LATTICE_fcc_Nslip = 12_pInt, & !sum(lattice_fcc_NslipSystem), & !< total # of slip systems for fcc
|
LATTICE_fcc_Nslip = sum(lattice_fcc_NslipSystem), & !< total # of slip systems for fcc
|
||||||
LATTICE_fcc_Ntwin = 12_pInt, & !sum(lattice_fcc_NtwinSystem), & !< total # of twin systems for fcc
|
LATTICE_fcc_Ntwin = sum(lattice_fcc_NtwinSystem), & !< total # of twin systems for fcc
|
||||||
LATTICE_fcc_NnonSchmid = 0_pInt, & !< total # of non-Schmid contributions for fcc
|
LATTICE_fcc_NnonSchmid = 0_pInt, & !< total # of non-Schmid contributions for fcc
|
||||||
LATTICE_fcc_Ntrans = 12_pInt, & !sum(lattice_fcc_NtransSystem), & !< total # of transformation systems for fcc
|
LATTICE_fcc_Ntrans = sum(lattice_fcc_NtransSystem), & !< total # of transformation systems for fcc
|
||||||
LATTICE_fcc_Ncleavage = 7_pInt !sum(lattice_fcc_NcleavageSystem) !< total # of cleavage systems for fcc
|
LATTICE_fcc_Ncleavage = sum(lattice_fcc_NcleavageSystem) !< total # of cleavage systems for fcc
|
||||||
|
|
||||||
real(pReal), dimension(3+3,LATTICE_fcc_Nslip), parameter, private :: &
|
real(pReal), dimension(3+3,LATTICE_fcc_Nslip), parameter, private :: &
|
||||||
LATTICE_fcc_systemSlip = reshape(real([&
|
LATTICE_fcc_systemSlip = reshape(real([&
|
||||||
|
@ -365,17 +365,17 @@ module lattice
|
||||||
LATTICE_bcc_NtwinSystem = int([ 12, 0, 0, 0], pInt) !< # of twin systems per family for bcc
|
LATTICE_bcc_NtwinSystem = int([ 12, 0, 0, 0], pInt) !< # of twin systems per family for bcc
|
||||||
|
|
||||||
integer(pInt), dimension(LATTICE_maxNtransFamily), parameter, public :: &
|
integer(pInt), dimension(LATTICE_maxNtransFamily), parameter, public :: &
|
||||||
LATTICE_bcc_NtransSystem = int([0,0],pInt) !< # of transformation systems per family for bcc
|
LATTICE_bcc_NtransSystem = int([0],pInt) !< # of transformation systems per family for bcc
|
||||||
|
|
||||||
integer(pInt), dimension(LATTICE_maxNcleavageFamily), parameter, public :: &
|
integer(pInt), dimension(LATTICE_maxNcleavageFamily), parameter, public :: &
|
||||||
LATTICE_bcc_NcleavageSystem = int([3, 6, 0],pInt) !< # of cleavage systems per family for bcc
|
LATTICE_bcc_NcleavageSystem = int([3, 6, 0],pInt) !< # of cleavage systems per family for bcc
|
||||||
|
|
||||||
integer(pInt), parameter, private :: &
|
integer(pInt), parameter, private :: &
|
||||||
LATTICE_bcc_Nslip = 24_pInt, & !sum(lattice_bcc_NslipSystem), & !< total # of slip systems for bcc
|
LATTICE_bcc_Nslip = sum(lattice_bcc_NslipSystem), & !< total # of slip systems for bcc
|
||||||
LATTICE_bcc_Ntwin = 12_pInt, & !sum(lattice_bcc_NtwinSystem), & !< total # of twin systems for bcc
|
LATTICE_bcc_Ntwin = sum(lattice_bcc_NtwinSystem), & !< total # of twin systems for bcc
|
||||||
LATTICE_bcc_NnonSchmid = 6_pInt, & !< total # of non-Schmid contributions for bcc (A. Koester, A. Ma, A. Hartmaier 2012)
|
LATTICE_bcc_NnonSchmid = 6_pInt, & !< total # of non-Schmid contributions for bcc (A. Koester, A. Ma, A. Hartmaier 2012)
|
||||||
LATTICE_bcc_Ntrans = 0_pInt, & !sum(lattice_bcc_NtransSystem), & !< total # of transformation systems for bcc
|
LATTICE_bcc_Ntrans = sum(lattice_bcc_NtransSystem), & !< total # of transformation systems for bcc
|
||||||
LATTICE_bcc_Ncleavage = 9_pInt !sum(lattice_bcc_NcleavageSystem) !< total # of cleavage systems for bcc
|
LATTICE_bcc_Ncleavage = sum(lattice_bcc_NcleavageSystem) !< total # of cleavage systems for bcc
|
||||||
|
|
||||||
real(pReal), dimension(3+3,LATTICE_bcc_Nslip), parameter, private :: &
|
real(pReal), dimension(3+3,LATTICE_bcc_Nslip), parameter, private :: &
|
||||||
LATTICE_bcc_systemSlip = reshape(real([&
|
LATTICE_bcc_systemSlip = reshape(real([&
|
||||||
|
@ -562,17 +562,17 @@ module lattice
|
||||||
lattice_hex_NtwinSystem = int([ 6, 6, 6, 6],pInt) !< # of slip systems per family for hex
|
lattice_hex_NtwinSystem = int([ 6, 6, 6, 6],pInt) !< # of slip systems per family for hex
|
||||||
|
|
||||||
integer(pInt), dimension(LATTICE_maxNtransFamily), parameter, public :: &
|
integer(pInt), dimension(LATTICE_maxNtransFamily), parameter, public :: &
|
||||||
LATTICE_hex_NtransSystem = int([0,0],pInt) !< # of transformation systems per family for hex
|
LATTICE_hex_NtransSystem = int([0],pInt) !< # of transformation systems per family for hex
|
||||||
|
|
||||||
integer(pInt), dimension(LATTICE_maxNcleavageFamily), parameter, public :: &
|
integer(pInt), dimension(LATTICE_maxNcleavageFamily), parameter, public :: &
|
||||||
LATTICE_hex_NcleavageSystem = int([3, 0, 0],pInt) !< # of cleavage systems per family for hex
|
LATTICE_hex_NcleavageSystem = int([3, 0, 0],pInt) !< # of cleavage systems per family for hex
|
||||||
|
|
||||||
integer(pInt), parameter, private :: &
|
integer(pInt), parameter, private :: &
|
||||||
LATTICE_hex_Nslip = 33_pInt, & !sum(lattice_hex_NslipSystem), & !< total # of slip systems for hex
|
LATTICE_hex_Nslip = sum(lattice_hex_NslipSystem), & !< total # of slip systems for hex
|
||||||
LATTICE_hex_Ntwin = 24_pInt, & !sum(lattice_hex_NtwinSystem), & !< total # of twin systems for hex
|
LATTICE_hex_Ntwin = sum(lattice_hex_NtwinSystem), & !< total # of twin systems for hex
|
||||||
LATTICE_hex_NnonSchmid = 0_pInt, & !< total # of non-Schmid contributions for hex
|
LATTICE_hex_NnonSchmid = 0_pInt, & !< total # of non-Schmid contributions for hex
|
||||||
LATTICE_hex_Ntrans = 0_pInt, & !sum(lattice_hex_NtransSystem), & !< total # of transformation systems for hex
|
LATTICE_hex_Ntrans = sum(lattice_hex_NtransSystem), & !< total # of transformation systems for hex
|
||||||
LATTICE_hex_Ncleavage = 3_pInt !sum(lattice_hex_NcleavageSystem) !< total # of cleavage systems for hex
|
LATTICE_hex_Ncleavage = sum(lattice_hex_NcleavageSystem) !< total # of cleavage systems for hex
|
||||||
|
|
||||||
real(pReal), dimension(4+4,LATTICE_hex_Nslip), parameter, private :: &
|
real(pReal), dimension(4+4,LATTICE_hex_Nslip), parameter, private :: &
|
||||||
LATTICE_hex_systemSlip = reshape(real([&
|
LATTICE_hex_systemSlip = reshape(real([&
|
||||||
|
@ -844,17 +844,17 @@ module lattice
|
||||||
LATTICE_bct_NtwinSystem = int([0, 0, 0, 0], pInt) !< # of twin systems per family for bct
|
LATTICE_bct_NtwinSystem = int([0, 0, 0, 0], pInt) !< # of twin systems per family for bct
|
||||||
|
|
||||||
integer(pInt), dimension(LATTICE_maxNtransFamily), parameter, public :: &
|
integer(pInt), dimension(LATTICE_maxNtransFamily), parameter, public :: &
|
||||||
LATTICE_bct_NtransSystem = int([0,0],pInt) !< # of transformation systems per family for bct
|
LATTICE_bct_NtransSystem = int([0],pInt) !< # of transformation systems per family for bct
|
||||||
|
|
||||||
integer(pInt), dimension(LATTICE_maxNcleavageFamily), parameter, public :: &
|
integer(pInt), dimension(LATTICE_maxNcleavageFamily), parameter, public :: &
|
||||||
LATTICE_bct_NcleavageSystem = int([0, 0, 0],pInt) !< # of cleavage systems per family for bct
|
LATTICE_bct_NcleavageSystem = int([0, 0, 0],pInt) !< # of cleavage systems per family for bct
|
||||||
|
|
||||||
integer(pInt), parameter, private :: &
|
integer(pInt), parameter, private :: &
|
||||||
LATTICE_bct_Nslip = 52_pInt, & !sum(lattice_bct_NslipSystem), & !< total # of slip systems for bct
|
LATTICE_bct_Nslip = sum(lattice_bct_NslipSystem), & !< total # of slip systems for bct
|
||||||
LATTICE_bct_Ntwin = 0_pInt, & !sum(lattice_bct_NtwinSystem), & !< total # of twin systems for bct
|
LATTICE_bct_Ntwin = sum(lattice_bct_NtwinSystem), & !< total # of twin systems for bct
|
||||||
LATTICE_bct_NnonSchmid = 0_pInt, & !< total # of non-Schmid contributions for bct
|
LATTICE_bct_NnonSchmid = 0_pInt, & !< total # of non-Schmid contributions for bct
|
||||||
LATTICE_bct_Ntrans = 0_pInt, & !sum(lattice_bct_NtransSystem), & !< total # of transformation systems for bct
|
LATTICE_bct_Ntrans = sum(lattice_bct_NtransSystem), & !< total # of transformation systems for bct
|
||||||
LATTICE_bct_Ncleavage = 0_pInt !sum(lattice_bct_NcleavageSystem) !< total # of cleavage systems for bct
|
LATTICE_bct_Ncleavage = sum(lattice_bct_NcleavageSystem) !< total # of cleavage systems for bct
|
||||||
|
|
||||||
real(pReal), dimension(3+3,LATTICE_bct_Nslip), parameter, private :: &
|
real(pReal), dimension(3+3,LATTICE_bct_Nslip), parameter, private :: &
|
||||||
LATTICE_bct_systemSlip = reshape(real([&
|
LATTICE_bct_systemSlip = reshape(real([&
|
||||||
|
@ -1004,17 +1004,17 @@ module lattice
|
||||||
LATTICE_iso_NtwinSystem = int([0, 0, 0, 0], pInt) !< # of twin systems per family for iso
|
LATTICE_iso_NtwinSystem = int([0, 0, 0, 0], pInt) !< # of twin systems per family for iso
|
||||||
|
|
||||||
integer(pInt), dimension(LATTICE_maxNtransFamily), parameter, public :: &
|
integer(pInt), dimension(LATTICE_maxNtransFamily), parameter, public :: &
|
||||||
LATTICE_iso_NtransSystem = int([0, 0],pInt) !< # of transformation systems per family for iso
|
LATTICE_iso_NtransSystem = int([0],pInt) !< # of transformation systems per family for iso
|
||||||
|
|
||||||
integer(pInt), dimension(LATTICE_maxNcleavageFamily), parameter, public :: &
|
integer(pInt), dimension(LATTICE_maxNcleavageFamily), parameter, public :: &
|
||||||
LATTICE_iso_NcleavageSystem = int([3, 0, 0],pInt) !< # of cleavage systems per family for iso
|
LATTICE_iso_NcleavageSystem = int([3, 0, 0],pInt) !< # of cleavage systems per family for iso
|
||||||
|
|
||||||
integer(pInt), parameter, private :: &
|
integer(pInt), parameter, private :: &
|
||||||
LATTICE_iso_Nslip = 0_pInt, & !sum(lattice_iso_NslipSystem), & !< total # of slip systems for iso
|
LATTICE_iso_Nslip = sum(lattice_iso_NslipSystem), & !< total # of slip systems for iso
|
||||||
LATTICE_iso_Ntwin = 0_pInt, & !sum(lattice_iso_NtwinSystem), & !< total # of twin systems for iso
|
LATTICE_iso_Ntwin = sum(lattice_iso_NtwinSystem), & !< total # of twin systems for iso
|
||||||
LATTICE_iso_NnonSchmid = 0_pInt, & !< total # of non-Schmid contributions for iso
|
LATTICE_iso_NnonSchmid = 0_pInt, & !< total # of non-Schmid contributions for iso
|
||||||
LATTICE_iso_Ntrans = 0_pInt, & !sum(lattice_iso_NtransSystem), & !< total # of transformation systems for iso
|
LATTICE_iso_Ntrans = sum(lattice_iso_NtransSystem), & !< total # of transformation systems for iso
|
||||||
LATTICE_iso_Ncleavage = 3_pInt !sum(lattice_iso_NcleavageSystem) !< total # of cleavage systems for iso
|
LATTICE_iso_Ncleavage = sum(lattice_iso_NcleavageSystem) !< total # of cleavage systems for iso
|
||||||
|
|
||||||
real(pReal), dimension(3+3,LATTICE_iso_Ncleavage), parameter, private :: &
|
real(pReal), dimension(3+3,LATTICE_iso_Ncleavage), parameter, private :: &
|
||||||
LATTICE_iso_systemCleavage = reshape(real([&
|
LATTICE_iso_systemCleavage = reshape(real([&
|
||||||
|
@ -1033,17 +1033,17 @@ module lattice
|
||||||
LATTICE_ortho_NtwinSystem = int([0, 0, 0, 0], pInt) !< # of twin systems per family for ortho
|
LATTICE_ortho_NtwinSystem = int([0, 0, 0, 0], pInt) !< # of twin systems per family for ortho
|
||||||
|
|
||||||
integer(pInt), dimension(LATTICE_maxNtransFamily), parameter, public :: &
|
integer(pInt), dimension(LATTICE_maxNtransFamily), parameter, public :: &
|
||||||
LATTICE_ortho_NtransSystem = int([0, 0],pInt) !< # of transformation systems per family for ortho
|
LATTICE_ortho_NtransSystem = int([0],pInt) !< # of transformation systems per family for ortho
|
||||||
|
|
||||||
integer(pInt), dimension(LATTICE_maxNcleavageFamily), parameter, public :: &
|
integer(pInt), dimension(LATTICE_maxNcleavageFamily), parameter, public :: &
|
||||||
LATTICE_ortho_NcleavageSystem = int([1, 1, 1],pInt) !< # of cleavage systems per family for ortho
|
LATTICE_ortho_NcleavageSystem = int([1, 1, 1],pInt) !< # of cleavage systems per family for ortho
|
||||||
|
|
||||||
integer(pInt), parameter, private :: &
|
integer(pInt), parameter, private :: &
|
||||||
LATTICE_ortho_Nslip = 0_pInt, & !sum(lattice_ortho_NslipSystem), & !< total # of slip systems for ortho
|
LATTICE_ortho_Nslip = sum(lattice_ortho_NslipSystem), & !< total # of slip systems for ortho
|
||||||
LATTICE_ortho_Ntwin = 0_pInt, & !sum(lattice_ortho_NtwinSystem), & !< total # of twin systems for ortho
|
LATTICE_ortho_Ntwin = sum(lattice_ortho_NtwinSystem), & !< total # of twin systems for ortho
|
||||||
LATTICE_ortho_NnonSchmid = 0_pInt, & !< total # of non-Schmid contributions for ortho
|
LATTICE_ortho_NnonSchmid = 0_pInt, & !< total # of non-Schmid contributions for ortho
|
||||||
LATTICE_ortho_Ntrans = 0_pInt, & !sum(lattice_ortho_NtransSystem), & !< total # of transformation systems for ortho
|
LATTICE_ortho_Ntrans = sum(lattice_ortho_NtransSystem), & !< total # of transformation systems for ortho
|
||||||
LATTICE_ortho_Ncleavage = 3_pInt !sum(lattice_ortho_NcleavageSystem) !< total # of cleavage systems for ortho
|
LATTICE_ortho_Ncleavage = sum(lattice_ortho_NcleavageSystem) !< total # of cleavage systems for ortho
|
||||||
|
|
||||||
real(pReal), dimension(3+3,LATTICE_ortho_Ncleavage), parameter, private :: &
|
real(pReal), dimension(3+3,LATTICE_ortho_Ncleavage), parameter, private :: &
|
||||||
LATTICE_ortho_systemCleavage = reshape(real([&
|
LATTICE_ortho_systemCleavage = reshape(real([&
|
||||||
|
@ -1054,25 +1054,44 @@ module lattice
|
||||||
],pReal),[ 3_pInt + 3_pInt,LATTICE_ortho_Ncleavage])
|
],pReal),[ 3_pInt + 3_pInt,LATTICE_ortho_Ncleavage])
|
||||||
|
|
||||||
integer(pInt), parameter, public :: &
|
integer(pInt), parameter, public :: &
|
||||||
LATTICE_maxNslip = 52_pInt, &
|
LATTICE_maxNslip = max(LATTICE_fcc_Nslip,LATTICE_bcc_Nslip,LATTICE_hex_Nslip, &
|
||||||
!LATTICE_maxNslip = maxval([LATTICE_fcc_Nslip,LATTICE_bcc_Nslip,LATTICE_hex_Nslip,\
|
LATTICE_bct_Nslip,LATTICE_iso_Nslip,LATTICE_ortho_Nslip), & !< max # of slip systems over lattice structures
|
||||||
! LATTICE_bct_Nslip,LATTICE_iso_Nslip,LATTICE_ortho_Nslip]), & !< max # of slip systems over lattice structures
|
LATTICE_maxNtwin = max(LATTICE_fcc_Ntwin,LATTICE_bcc_Ntwin,LATTICE_hex_Ntwin, &
|
||||||
LATTICE_maxNtwin = 24_pInt, &
|
LATTICE_bct_Ntwin,LATTICE_iso_Ntwin,LATTICE_ortho_Ntwin), & !< max # of twin systems over lattice structures
|
||||||
!LATTICE_maxNtwin = maxval([LATTICE_fcc_Ntwin,LATTICE_bcc_Ntwin,LATTICE_hex_Ntwin,\
|
LATTICE_maxNnonSchmid = max(LATTICE_fcc_NnonSchmid,LATTICE_bcc_NnonSchmid, &
|
||||||
! LATTICE_bct_Ntwin,LATTICE_iso_Ntwin,LATTICE_ortho_Ntwin]), & !< max # of twin systems over lattice structures
|
LATTICE_hex_NnonSchmid,LATTICE_bct_NnonSchmid, &
|
||||||
LATTICE_maxNnonSchmid = 6_pInt, &
|
LATTICE_iso_NnonSchmid,LATTICE_ortho_NnonSchmid), & !< max # of non-Schmid contributions over lattice structures
|
||||||
!LATTICE_maxNtwin = maxval([LATTICE_fcc_NnonSchmid,LATTICE_bcc_NnonSchmid,\
|
LATTICE_maxNtrans = max(LATTICE_fcc_Ntrans,LATTICE_bcc_Ntrans,LATTICE_hex_Ntrans, &
|
||||||
! LATTICE_hex_NnonSchmid,LATTICE_bct_NnonSchmid,\
|
LATTICE_bct_Ntrans,LATTICE_iso_Ntrans,LATTICE_ortho_Ntrans), & !< max # of transformation systems over lattice structures
|
||||||
! LATTICE_iso_NnonSchmid,LATTICE_ortho_NnonSchmid]), & !< max # of non-Schmid contributions over lattice structures
|
LATTICE_maxNcleavage = max(LATTICE_fcc_Ncleavage,LATTICE_bcc_Ncleavage, &
|
||||||
LATTICE_maxNtrans = 12_pInt, &
|
LATTICE_hex_Ncleavage,LATTICE_bct_Ncleavage, &
|
||||||
!LATTICE_maxNtrans = maxval([LATTICE_fcc_Ntrans,LATTICE_bcc_Ntrans,LATTICE_hex_Ntrans,\
|
LATTICE_iso_Ncleavage,LATTICE_ortho_Ncleavage), & !< max # of cleavage systems over lattice structures
|
||||||
! LATTICE_bct_Ntrans,LATTICE_iso_Ntrans,LATTICE_ortho_Ntrans]),&!< max # of transformation systems over lattice structures
|
#if defined(__GFORTRAN__)
|
||||||
LATTICE_maxNcleavage = 9_pInt, &
|
! only supported in gcc 8
|
||||||
!LATTICE_maxNcleavage = maxval([LATTICE_fcc_Ncleavage,LATTICE_bcc_Ncleavage,\
|
LATTICE_maxNinteraction = 182_pInt
|
||||||
! LATTICE_hex_Ncleavage,LATTICE_bct_Ncleavage,\
|
#else
|
||||||
! LATTICE_iso_Ncleavage,LATTICE_ortho_Ncleavage]) !< max # of cleavage systems over lattice structures
|
LATTICE_maxNinteraction = max(&
|
||||||
LATTICE_maxNinteraction = 182_pInt !< max # of interaction types (in hardening matrix part)
|
maxval(lattice_fcc_interactionSlipSlip), &
|
||||||
|
maxval(lattice_bcc_interactionSlipSlip), &
|
||||||
|
maxval(lattice_hex_interactionSlipSlip), &
|
||||||
|
maxval(lattice_bct_interactionSlipSlip), &
|
||||||
|
!
|
||||||
|
maxval(lattice_fcc_interactionSlipTwin), &
|
||||||
|
maxval(lattice_bcc_interactionSlipTwin), &
|
||||||
|
maxval(lattice_hex_interactionSlipTwin), &
|
||||||
|
!maxval(lattice_bct_interactionSlipTwin), &
|
||||||
|
!
|
||||||
|
maxval(lattice_fcc_interactionTwinSlip), &
|
||||||
|
maxval(lattice_bcc_interactionTwinSlip), &
|
||||||
|
maxval(lattice_hex_interactionTwinSlip), &
|
||||||
|
!maxval(lattice_bct_interactionTwinSlip), &
|
||||||
|
!
|
||||||
|
maxval(lattice_fcc_interactionTwinTwin), &
|
||||||
|
maxval(lattice_bcc_interactionTwinTwin), &
|
||||||
|
maxval(lattice_hex_interactionTwinTwin) &
|
||||||
|
!maxval(lattice_bct_interactionTwinTwin)))
|
||||||
|
) !< max # of interaction types (in hardening matrix part)
|
||||||
|
#endif
|
||||||
real(pReal), dimension(:,:,:), allocatable, public, protected :: &
|
real(pReal), dimension(:,:,:), allocatable, public, protected :: &
|
||||||
lattice_C66, lattice_trans_C66
|
lattice_C66, lattice_trans_C66
|
||||||
real(pReal), dimension(:,:,:,:,:), allocatable, public, protected :: &
|
real(pReal), dimension(:,:,:,:,:), allocatable, public, protected :: &
|
||||||
|
@ -1250,38 +1269,19 @@ subroutine lattice_init
|
||||||
compiler_options
|
compiler_options
|
||||||
#endif
|
#endif
|
||||||
use IO, only: &
|
use IO, only: &
|
||||||
IO_open_file,&
|
|
||||||
IO_open_jobFile_stat, &
|
|
||||||
IO_countSections, &
|
|
||||||
IO_error, &
|
IO_error, &
|
||||||
IO_timeStamp, &
|
IO_timeStamp
|
||||||
IO_EOF, &
|
|
||||||
IO_read, &
|
|
||||||
IO_lc, &
|
|
||||||
IO_getTag, &
|
|
||||||
IO_isBlank, &
|
|
||||||
IO_stringPos, &
|
|
||||||
IO_stringValue, &
|
|
||||||
IO_floatValue
|
|
||||||
use config, only: &
|
use config, only: &
|
||||||
material_configfile, &
|
config_phase
|
||||||
material_localFileExt, &
|
|
||||||
material_partPhase
|
|
||||||
use debug, only: &
|
|
||||||
debug_level, &
|
|
||||||
debug_lattice, &
|
|
||||||
debug_levelBasic
|
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
integer(pInt), parameter :: FILEUNIT = 200_pInt
|
|
||||||
integer(pInt) :: Nphases
|
integer(pInt) :: Nphases
|
||||||
character(len=65536) :: &
|
character(len=65536) :: &
|
||||||
tag = '', &
|
tag = ''
|
||||||
line = ''
|
integer(pInt) :: section = 0_pInt,i,p
|
||||||
integer(pInt), allocatable, dimension(:) :: chunkPos
|
|
||||||
integer(pInt) :: section = 0_pInt,i
|
|
||||||
real(pReal), dimension(:), allocatable :: &
|
real(pReal), dimension(:), allocatable :: &
|
||||||
CoverA, & !!!!!!< c/a ratio for low symmetry type lattice
|
temp, &
|
||||||
|
CoverA, & !< c/a ratio for low symmetry type lattice
|
||||||
CoverA_trans, & !< c/a ratio for transformed hex type lattice
|
CoverA_trans, & !< c/a ratio for transformed hex type lattice
|
||||||
a_fcc, & !< lattice parameter a for fcc austenite
|
a_fcc, & !< lattice parameter a for fcc austenite
|
||||||
a_bcc !< lattice paramater a for bcc martensite
|
a_bcc !< lattice paramater a for bcc martensite
|
||||||
|
@ -1290,90 +1290,7 @@ subroutine lattice_init
|
||||||
write(6,'(a15,a)') ' Current time: ',IO_timeStamp()
|
write(6,'(a15,a)') ' Current time: ',IO_timeStamp()
|
||||||
#include "compilation_info.f90"
|
#include "compilation_info.f90"
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
Nphases = size(config_phase)
|
||||||
! consistency checks (required since ifort 15.0 does not support sum/maxval in parameter definition)
|
|
||||||
|
|
||||||
if (LATTICE_maxNslip /= maxval([LATTICE_fcc_Nslip,LATTICE_bcc_Nslip,LATTICE_hex_Nslip,LATTICE_bct_Nslip])) &
|
|
||||||
call IO_error(0_pInt,ext_msg = 'LATTICE_maxNslip')
|
|
||||||
if (LATTICE_maxNtwin /= maxval([LATTICE_fcc_Ntwin,LATTICE_bcc_Ntwin,LATTICE_hex_Ntwin])) &
|
|
||||||
call IO_error(0_pInt,ext_msg = 'LATTICE_maxNtwin')
|
|
||||||
if (LATTICE_maxNtrans /= maxval([LATTICE_fcc_Ntrans,LATTICE_bcc_Ntrans,LATTICE_hex_Ntrans])) &
|
|
||||||
call IO_error(0_pInt,ext_msg = 'LATTICE_maxNtrans')
|
|
||||||
if (LATTICE_maxNnonSchmid /= maxval([lattice_fcc_NnonSchmid,lattice_bcc_NnonSchmid,&
|
|
||||||
lattice_hex_NnonSchmid])) call IO_error(0_pInt,ext_msg = 'LATTICE_maxNnonSchmid')
|
|
||||||
|
|
||||||
if (LATTICE_fcc_Nslip /= sum(lattice_fcc_NslipSystem)) &
|
|
||||||
call IO_error(0_pInt,ext_msg = 'LATTICE_fcc_Nslip')
|
|
||||||
if (LATTICE_bcc_Nslip /= sum(lattice_bcc_NslipSystem)) &
|
|
||||||
call IO_error(0_pInt,ext_msg = 'LATTICE_bcc_Nslip')
|
|
||||||
if (LATTICE_hex_Nslip /= sum(lattice_hex_NslipSystem)) &
|
|
||||||
call IO_error(0_pInt,ext_msg = 'LATTICE_hex_Nslip')
|
|
||||||
if (LATTICE_bct_Nslip /= sum(lattice_bct_NslipSystem)) &
|
|
||||||
call IO_error(0_pInt,ext_msg = 'LATTICE_bct_Nslip')
|
|
||||||
|
|
||||||
if (LATTICE_fcc_Ntwin /= sum(lattice_fcc_NtwinSystem)) &
|
|
||||||
call IO_error(0_pInt,ext_msg = 'LATTICE_fcc_Ntwin')
|
|
||||||
if (LATTICE_bcc_Ntwin /= sum(lattice_bcc_NtwinSystem)) &
|
|
||||||
call IO_error(0_pInt,ext_msg = 'LATTICE_bcc_Ntwin')
|
|
||||||
if (LATTICE_hex_Ntwin /= sum(lattice_hex_NtwinSystem)) &
|
|
||||||
call IO_error(0_pInt,ext_msg = 'LATTICE_hex_Ntwin')
|
|
||||||
if (LATTICE_bct_Ntwin /= sum(lattice_bct_NtwinSystem)) &
|
|
||||||
call IO_error(0_pInt,ext_msg = 'LATTICE_bct_Ntwin')
|
|
||||||
|
|
||||||
if (LATTICE_fcc_Ntrans /= sum(lattice_fcc_NtransSystem)) &
|
|
||||||
call IO_error(0_pInt,ext_msg = 'LATTICE_fcc_Ntrans')
|
|
||||||
if (LATTICE_bcc_Ntrans /= sum(lattice_bcc_NtransSystem)) &
|
|
||||||
call IO_error(0_pInt,ext_msg = 'LATTICE_bcc_Ntrans')
|
|
||||||
if (LATTICE_hex_Ntrans /= sum(lattice_hex_NtransSystem)) &
|
|
||||||
call IO_error(0_pInt,ext_msg = 'LATTICE_hex_Ntrans')
|
|
||||||
if (LATTICE_bct_Ntrans /= sum(lattice_bct_NtransSystem)) &
|
|
||||||
call IO_error(0_pInt,ext_msg = 'LATTICE_bct_Ntrans')
|
|
||||||
|
|
||||||
if (LATTICE_fcc_Ncleavage /= sum(lattice_fcc_NcleavageSystem)) &
|
|
||||||
call IO_error(0_pInt,ext_msg = 'LATTICE_fcc_Ncleavage')
|
|
||||||
if (LATTICE_bcc_Ncleavage /= sum(lattice_bcc_NcleavageSystem)) &
|
|
||||||
call IO_error(0_pInt,ext_msg = 'LATTICE_bcc_Ncleavage')
|
|
||||||
if (LATTICE_hex_Ncleavage /= sum(lattice_hex_NcleavageSystem)) &
|
|
||||||
call IO_error(0_pInt,ext_msg = 'LATTICE_hex_Ncleavage')
|
|
||||||
if (LATTICE_bct_Ncleavage /= sum(lattice_bct_NcleavageSystem)) &
|
|
||||||
call IO_error(0_pInt,ext_msg = 'LATTICE_bct_Ncleavage')
|
|
||||||
if (LATTICE_iso_Ncleavage /= sum(lattice_iso_NcleavageSystem)) &
|
|
||||||
call IO_error(0_pInt,ext_msg = 'LATTICE_iso_Ncleavage')
|
|
||||||
|
|
||||||
if (LATTICE_maxNinteraction /= max(&
|
|
||||||
maxval(lattice_fcc_interactionSlipSlip), &
|
|
||||||
maxval(lattice_bcc_interactionSlipSlip), &
|
|
||||||
maxval(lattice_hex_interactionSlipSlip), &
|
|
||||||
maxval(lattice_bct_interactionSlipSlip), &
|
|
||||||
!
|
|
||||||
maxval(lattice_fcc_interactionSlipTwin), &
|
|
||||||
maxval(lattice_bcc_interactionSlipTwin), &
|
|
||||||
maxval(lattice_hex_interactionSlipTwin), &
|
|
||||||
! maxval(lattice_bct_interactionSlipTwin), &
|
|
||||||
!
|
|
||||||
maxval(lattice_fcc_interactionTwinSlip), &
|
|
||||||
maxval(lattice_bcc_interactionTwinSlip), &
|
|
||||||
maxval(lattice_hex_interactionTwinSlip), &
|
|
||||||
! maxval(lattice_bct_interactionTwinSlip), &
|
|
||||||
!
|
|
||||||
maxval(lattice_fcc_interactionTwinTwin), &
|
|
||||||
maxval(lattice_bcc_interactionTwinTwin), &
|
|
||||||
maxval(lattice_hex_interactionTwinTwin))) &
|
|
||||||
! maxval(lattice_bct_interactionTwinTwin))) &
|
|
||||||
call IO_error(0_pInt,ext_msg = 'LATTICE_maxNinteraction')
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
|
||||||
! read from material configuration file
|
|
||||||
if (.not. IO_open_jobFile_stat(FILEUNIT,material_localFileExt)) & ! no local material configuration present...
|
|
||||||
call IO_open_file(FILEUNIT,material_configFile) ! ... open material.config file
|
|
||||||
Nphases = IO_countSections(FILEUNIT,material_partPhase)
|
|
||||||
|
|
||||||
if(Nphases<1_pInt) &
|
|
||||||
call IO_error(160_pInt,Nphases, ext_msg='No phases found')
|
|
||||||
|
|
||||||
if (iand(debug_level(debug_lattice),debug_levelBasic) /= 0_pInt) then
|
|
||||||
write(6,'(a16,1x,i5)') ' # phases:',Nphases
|
|
||||||
endif
|
|
||||||
|
|
||||||
allocate(lattice_structure(Nphases),source = LATTICE_undefined_ID)
|
allocate(lattice_structure(Nphases),source = LATTICE_undefined_ID)
|
||||||
allocate(trans_lattice_structure(Nphases),source = LATTICE_undefined_ID)
|
allocate(trans_lattice_structure(Nphases),source = LATTICE_undefined_ID)
|
||||||
|
@ -1450,177 +1367,99 @@ subroutine lattice_init
|
||||||
allocate(a_fcc(Nphases),source=0.0_pReal)
|
allocate(a_fcc(Nphases),source=0.0_pReal)
|
||||||
allocate(a_bcc(Nphases),source=0.0_pReal)
|
allocate(a_bcc(Nphases),source=0.0_pReal)
|
||||||
|
|
||||||
rewind(fileUnit)
|
do p = 1, size(config_phase)
|
||||||
line = '' ! to have it initialized
|
tag = config_phase(p)%getString('lattice_structure')
|
||||||
section = 0_pInt ! - " -
|
select case(trim(tag))
|
||||||
do while (trim(line) /= IO_EOF .and. IO_lc(IO_getTag(line,'<','>')) /= material_partPhase) ! wind forward to <Phase>
|
|
||||||
line = IO_read(fileUnit)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
do while (trim(line) /= IO_EOF) ! read through sections of material part
|
|
||||||
line = IO_read(fileUnit)
|
|
||||||
if (IO_isBlank(line)) cycle ! skip empty lines
|
|
||||||
if (IO_getTag(line,'<','>') /= '') then ! stop at next part
|
|
||||||
line = IO_read(fileUnit, .true.) ! reset IO_read
|
|
||||||
exit
|
|
||||||
endif
|
|
||||||
if (IO_getTag(line,'[',']') /= '') then ! next section
|
|
||||||
section = section + 1_pInt
|
|
||||||
endif
|
|
||||||
if (section > 0_pInt) then
|
|
||||||
chunkPos = IO_stringPos(line)
|
|
||||||
tag = IO_lc(IO_stringValue(line,chunkPos,1_pInt)) ! extract key
|
|
||||||
select case(tag)
|
|
||||||
case ('lattice_structure')
|
|
||||||
select case(trim(IO_lc(IO_stringValue(line,chunkPos,2_pInt))))
|
|
||||||
case('iso','isotropic')
|
case('iso','isotropic')
|
||||||
lattice_structure(section) = LATTICE_iso_ID
|
lattice_structure(p) = LATTICE_iso_ID
|
||||||
case('fcc')
|
case('fcc')
|
||||||
lattice_structure(section) = LATTICE_fcc_ID
|
lattice_structure(p) = LATTICE_fcc_ID
|
||||||
case('bcc')
|
case('bcc')
|
||||||
lattice_structure(section) = LATTICE_bcc_ID
|
lattice_structure(p) = LATTICE_bcc_ID
|
||||||
case('hex','hexagonal')
|
case('hex','hexagonal')
|
||||||
lattice_structure(section) = LATTICE_hex_ID
|
lattice_structure(p) = LATTICE_hex_ID
|
||||||
case('bct')
|
case('bct')
|
||||||
lattice_structure(section) = LATTICE_bct_ID
|
lattice_structure(p) = LATTICE_bct_ID
|
||||||
case('ort','orthorhombic')
|
case('ort','orthorhombic')
|
||||||
lattice_structure(section) = LATTICE_ort_ID
|
lattice_structure(p) = LATTICE_ort_ID
|
||||||
case default
|
|
||||||
call IO_error(130_pInt,ext_msg=trim(IO_lc(IO_stringValue(line,chunkPos,2_pInt))))
|
|
||||||
end select
|
end select
|
||||||
case('trans_lattice_structure')
|
|
||||||
select case(trim(IO_lc(IO_stringValue(line,chunkPos,2_pInt))))
|
tag = 'undefined'
|
||||||
|
tag = config_phase(p)%getString('trans_lattice_structure',defaultVal=tag)
|
||||||
|
select case(trim(tag))
|
||||||
case('bcc')
|
case('bcc')
|
||||||
trans_lattice_structure(section) = LATTICE_bcc_ID
|
trans_lattice_structure(section) = LATTICE_bcc_ID
|
||||||
case('hex','hexagonal','hcp')
|
case('hex','hexagonal')
|
||||||
trans_lattice_structure(section) = LATTICE_hex_ID
|
trans_lattice_structure(section) = LATTICE_hex_ID
|
||||||
end select
|
end select
|
||||||
case ('c11')
|
|
||||||
lattice_C66(1,1,section) = IO_floatValue(line,chunkPos,2_pInt)
|
lattice_C66(1,1,p) = config_phase(p)%getFloat('c11',defaultVal=0.0_pReal)
|
||||||
case ('c12')
|
lattice_C66(1,2,p) = config_phase(p)%getFloat('c12',defaultVal=0.0_pReal)
|
||||||
lattice_C66(1,2,section) = IO_floatValue(line,chunkPos,2_pInt)
|
lattice_C66(1,3,p) = config_phase(p)%getFloat('c13',defaultVal=0.0_pReal)
|
||||||
case ('c13')
|
lattice_C66(2,2,p) = config_phase(p)%getFloat('c22',defaultVal=0.0_pReal)
|
||||||
lattice_C66(1,3,section) = IO_floatValue(line,chunkPos,2_pInt)
|
lattice_C66(2,3,p) = config_phase(p)%getFloat('c23',defaultVal=0.0_pReal)
|
||||||
case ('c22')
|
lattice_C66(3,3,p) = config_phase(p)%getFloat('c33',defaultVal=0.0_pReal)
|
||||||
lattice_C66(2,2,section) = IO_floatValue(line,chunkPos,2_pInt)
|
lattice_C66(4,4,p) = config_phase(p)%getFloat('c44',defaultVal=0.0_pReal)
|
||||||
case ('c23')
|
lattice_C66(5,5,p) = config_phase(p)%getFloat('c55',defaultVal=0.0_pReal)
|
||||||
lattice_C66(2,3,section) = IO_floatValue(line,chunkPos,2_pInt)
|
lattice_C66(6,6,p) = config_phase(p)%getFloat('c66',defaultVal=0.0_pReal)
|
||||||
case ('c33')
|
|
||||||
lattice_C66(3,3,section) = IO_floatValue(line,chunkPos,2_pInt)
|
lattice_trans_C66(1,1,p) = config_phase(p)%getFloat('c11_trans',defaultVal=0.0_pReal)
|
||||||
case ('c44')
|
lattice_trans_C66(1,2,p) = config_phase(p)%getFloat('c12_trans',defaultVal=0.0_pReal)
|
||||||
lattice_C66(4,4,section) = IO_floatValue(line,chunkPos,2_pInt)
|
lattice_trans_C66(1,3,p) = config_phase(p)%getFloat('c13_trans',defaultVal=0.0_pReal)
|
||||||
case ('c55')
|
lattice_trans_C66(2,2,p) = config_phase(p)%getFloat('c22_trans',defaultVal=0.0_pReal)
|
||||||
lattice_C66(5,5,section) = IO_floatValue(line,chunkPos,2_pInt)
|
lattice_trans_C66(2,3,p) = config_phase(p)%getFloat('c23_trans',defaultVal=0.0_pReal)
|
||||||
case ('c66')
|
lattice_trans_C66(3,3,p) = config_phase(p)%getFloat('c33_trans',defaultVal=0.0_pReal)
|
||||||
lattice_C66(6,6,section) = IO_floatValue(line,chunkPos,2_pInt)
|
lattice_trans_C66(4,4,p) = config_phase(p)%getFloat('c44_trans',defaultVal=0.0_pReal)
|
||||||
case ('c11_trans')
|
lattice_trans_C66(5,5,p) = config_phase(p)%getFloat('c55_trans',defaultVal=0.0_pReal)
|
||||||
lattice_trans_C66(1,1,section) = IO_floatValue(line,chunkPos,2_pInt)
|
lattice_trans_C66(6,6,p) = config_phase(p)%getFloat('c66_trans',defaultVal=0.0_pReal)
|
||||||
case ('c12_trans')
|
|
||||||
lattice_trans_C66(1,2,section) = IO_floatValue(line,chunkPos,2_pInt)
|
CoverA(p) = config_phase(p)%getFloat('c/a',defaultVal=0.0_pReal)
|
||||||
case ('c13_trans')
|
CoverA_trans(p) = config_phase(p)%getFloat('c/a_trans',defaultVal=0.0_pReal)
|
||||||
lattice_trans_C66(1,3,section) = IO_floatValue(line,chunkPos,2_pInt)
|
a_fcc(p) = config_phase(p)%getFloat('a_fcc',defaultVal=0.0_pReal)
|
||||||
case ('c22_trans')
|
a_bcc(p) = config_phase(p)%getFloat('a_bcc',defaultVal=0.0_pReal)
|
||||||
lattice_trans_C66(2,2,section) = IO_floatValue(line,chunkPos,2_pInt)
|
|
||||||
case ('c23_trans')
|
lattice_thermalConductivity33(1,1,p) = config_phase(p)%getFloat('thermal_conductivity11',defaultVal=0.0_pReal)
|
||||||
lattice_trans_C66(2,3,section) = IO_floatValue(line,chunkPos,2_pInt)
|
lattice_thermalConductivity33(2,2,p) = config_phase(p)%getFloat('thermal_conductivity22',defaultVal=0.0_pReal)
|
||||||
case ('c33_trans')
|
lattice_thermalConductivity33(3,3,p) = config_phase(p)%getFloat('thermal_conductivity33',defaultVal=0.0_pReal)
|
||||||
lattice_trans_C66(3,3,section) = IO_floatValue(line,chunkPos,2_pInt)
|
|
||||||
case ('c44_trans')
|
temp = config_phase(p)%getFloats('thermal_expansion11',defaultVal=[0.0_pReal]) ! read up to three parameters (constant, linear, quadratic with T)
|
||||||
lattice_trans_C66(4,4,section) = IO_floatValue(line,chunkPos,2_pInt)
|
lattice_thermalExpansion33(1,1,1:size(temp),p) = temp
|
||||||
case ('c55_trans')
|
temp = config_phase(p)%getFloats('thermal_expansion22',defaultVal=[0.0_pReal]) ! read up to three parameters (constant, linear, quadratic with T)
|
||||||
lattice_trans_C66(5,5,section) = IO_floatValue(line,chunkPos,2_pInt)
|
lattice_thermalExpansion33(2,2,1:size(temp),p) = temp
|
||||||
case ('c66_trans')
|
temp = config_phase(p)%getFloats('thermal_expansion33',defaultVal=[0.0_pReal]) ! read up to three parameters (constant, linear, quadratic with T)
|
||||||
lattice_trans_C66(6,6,section) = IO_floatValue(line,chunkPos,2_pInt)
|
lattice_thermalExpansion33(3,3,1:size(temp),p) = temp
|
||||||
case ('covera_ratio','c/a_ratio','c/a')
|
|
||||||
CoverA(section) = IO_floatValue(line,chunkPos,2_pInt)
|
lattice_specificHeat(p) = config_phase(p)%getFloat( 'specific_heat',defaultVal=0.0_pReal)
|
||||||
case ('c/a_trans','c/a_martensite','c/a_mart')
|
lattice_vacancyFormationEnergy(p) = config_phase(p)%getFloat( 'vacancyformationenergy',defaultVal=0.0_pReal)
|
||||||
CoverA_trans(section) = IO_floatValue(line,chunkPos,2_pInt)
|
lattice_vacancySurfaceEnergy(p) = config_phase(p)%getFloat( 'vacancyvolume',defaultVal=0.0_pReal)
|
||||||
case ('a_fcc')
|
lattice_vacancyVol(p) = config_phase(p)%getFloat( 'vacancysurfaceenergy',defaultVal=0.0_pReal)
|
||||||
a_fcc(section) = IO_floatValue(line,chunkPos,2_pInt)
|
lattice_hydrogenFormationEnergy(p) = config_phase(p)%getFloat( 'hydrogenformationenergy',defaultVal=0.0_pReal)
|
||||||
case ('a_bcc')
|
lattice_hydrogenSurfaceEnergy(p) = config_phase(p)%getFloat( 'hydrogensurfaceenergy',defaultVal=0.0_pReal)
|
||||||
a_bcc(section) = IO_floatValue(line,chunkPos,2_pInt)
|
lattice_hydrogenVol(p) = config_phase(p)%getFloat( 'hydrogenvolume',defaultVal=0.0_pReal)
|
||||||
case ('thermal_conductivity11')
|
lattice_massDensity(p) = config_phase(p)%getFloat( 'mass_density',defaultVal=0.0_pReal)
|
||||||
lattice_thermalConductivity33(1,1,section) = IO_floatValue(line,chunkPos,2_pInt)
|
lattice_referenceTemperature(p) = config_phase(p)%getFloat( 'reference_temperature',defaultVal=0.0_pReal)
|
||||||
case ('thermal_conductivity22')
|
lattice_DamageDiffusion33(1,1,p) = config_phase(p)%getFloat( 'damage_diffusion11',defaultVal=0.0_pReal)
|
||||||
lattice_thermalConductivity33(2,2,section) = IO_floatValue(line,chunkPos,2_pInt)
|
lattice_DamageDiffusion33(2,2,p) = config_phase(p)%getFloat( 'damage_diffusion22',defaultVal=0.0_pReal)
|
||||||
case ('thermal_conductivity33')
|
lattice_DamageDiffusion33(3,3,p) = config_phase(p)%getFloat( 'damage_diffusion33',defaultVal=0.0_pReal)
|
||||||
lattice_thermalConductivity33(3,3,section) = IO_floatValue(line,chunkPos,2_pInt)
|
lattice_DamageMobility(p) = config_phase(p)%getFloat( 'damage_mobility',defaultVal=0.0_pReal)
|
||||||
case ('thermal_expansion11')
|
lattice_vacancyfluxDiffusion33(1,1,p) = config_phase(p)%getFloat( 'vacancyflux_diffusion11',defaultVal=0.0_pReal)
|
||||||
do i = 2_pInt, min(4,chunkPos(1)) ! read up to three parameters (constant, linear, quadratic with T)
|
lattice_vacancyfluxDiffusion33(2,2,p) = config_phase(p)%getFloat( 'vacancyflux_diffusion22',defaultVal=0.0_pReal)
|
||||||
lattice_thermalExpansion33(1,1,i-1_pInt,section) = IO_floatValue(line,chunkPos,i)
|
lattice_vacancyfluxDiffusion33(3,3,p) = config_phase(p)%getFloat( 'vacancyflux_diffusion33',defaultVal=0.0_pReal)
|
||||||
enddo
|
lattice_vacancyfluxMobility33(1,1,p) = config_phase(p)%getFloat( 'vacancyflux_mobility11',defaultVal=0.0_pReal)
|
||||||
case ('thermal_expansion22')
|
lattice_vacancyfluxMobility33(2,2,p) = config_phase(p)%getFloat( 'vacancyflux_mobility22',defaultVal=0.0_pReal)
|
||||||
do i = 2_pInt, min(4,chunkPos(1)) ! read up to three parameters (constant, linear, quadratic with T)
|
lattice_vacancyfluxMobility33(3,3,p) = config_phase(p)%getFloat( 'vacancyflux_mobility33',defaultVal=0.0_pReal)
|
||||||
lattice_thermalExpansion33(2,2,i-1_pInt,section) = IO_floatValue(line,chunkPos,i)
|
lattice_PorosityDiffusion33(1,1,p) = config_phase(p)%getFloat( 'porosity_diffusion11',defaultVal=0.0_pReal)
|
||||||
enddo
|
lattice_PorosityDiffusion33(2,2,p) = config_phase(p)%getFloat( 'porosity_diffusion22',defaultVal=0.0_pReal)
|
||||||
case ('thermal_expansion33')
|
lattice_PorosityDiffusion33(3,3,p) = config_phase(p)%getFloat( 'porosity_diffusion33',defaultVal=0.0_pReal)
|
||||||
do i = 2_pInt, min(4,chunkPos(1)) ! read up to three parameters (constant, linear, quadratic with T)
|
lattice_PorosityMobility(p) = config_phase(p)%getFloat( 'porosity_mobility',defaultVal=0.0_pReal)
|
||||||
lattice_thermalExpansion33(3,3,i-1_pInt,section) = IO_floatValue(line,chunkPos,i)
|
lattice_hydrogenfluxDiffusion33(1,1,p) = config_phase(p)%getFloat( 'hydrogenflux_diffusion11',defaultVal=0.0_pReal)
|
||||||
enddo
|
lattice_hydrogenfluxDiffusion33(2,2,p) = config_phase(p)%getFloat( 'hydrogenflux_diffusion22',defaultVal=0.0_pReal)
|
||||||
case ('specific_heat')
|
lattice_hydrogenfluxDiffusion33(3,3,p) = config_phase(p)%getFloat( 'hydrogenflux_diffusion33',defaultVal=0.0_pReal)
|
||||||
lattice_specificHeat(section) = IO_floatValue(line,chunkPos,2_pInt)
|
lattice_hydrogenfluxMobility33(1,1,p) = config_phase(p)%getFloat( 'hydrogenflux_mobility11',defaultVal=0.0_pReal)
|
||||||
case ('vacancyformationenergy')
|
lattice_hydrogenfluxMobility33(2,2,p) = config_phase(p)%getFloat( 'hydrogenflux_mobility22',defaultVal=0.0_pReal)
|
||||||
lattice_vacancyFormationEnergy(section) = IO_floatValue(line,chunkPos,2_pInt)
|
lattice_hydrogenfluxMobility33(3,3,p) = config_phase(p)%getFloat( 'hydrogenflux_mobility33',defaultVal=0.0_pReal)
|
||||||
case ('vacancysurfaceenergy')
|
lattice_equilibriumVacancyConcentration(p) = config_phase(p)%getFloat( 'vacancy_eqcv',defaultVal=0.0_pReal)
|
||||||
lattice_vacancySurfaceEnergy(section) = IO_floatValue(line,chunkPos,2_pInt)
|
lattice_equilibriumHydrogenConcentration(p) = config_phase(p)%getFloat( 'hydrogen_eqch',defaultVal=0.0_pReal)
|
||||||
case ('vacancyvolume')
|
|
||||||
lattice_vacancyVol(section) = IO_floatValue(line,chunkPos,2_pInt)
|
|
||||||
case ('hydrogenformationenergy')
|
|
||||||
lattice_hydrogenFormationEnergy(section) = IO_floatValue(line,chunkPos,2_pInt)
|
|
||||||
case ('hydrogensurfaceenergy')
|
|
||||||
lattice_hydrogenSurfaceEnergy(section) = IO_floatValue(line,chunkPos,2_pInt)
|
|
||||||
case ('hydrogenvolume')
|
|
||||||
lattice_hydrogenVol(section) = IO_floatValue(line,chunkPos,2_pInt)
|
|
||||||
case ('mass_density')
|
|
||||||
lattice_massDensity(section) = IO_floatValue(line,chunkPos,2_pInt)
|
|
||||||
case ('reference_temperature')
|
|
||||||
lattice_referenceTemperature(section) = IO_floatValue(line,chunkPos,2_pInt)
|
|
||||||
case ('damage_diffusion11')
|
|
||||||
lattice_DamageDiffusion33(1,1,section) = IO_floatValue(line,chunkPos,2_pInt)
|
|
||||||
case ('damage_diffusion22')
|
|
||||||
lattice_DamageDiffusion33(2,2,section) = IO_floatValue(line,chunkPos,2_pInt)
|
|
||||||
case ('damage_diffusion33')
|
|
||||||
lattice_DamageDiffusion33(3,3,section) = IO_floatValue(line,chunkPos,2_pInt)
|
|
||||||
case ('damage_mobility')
|
|
||||||
lattice_DamageMobility(section) = IO_floatValue(line,chunkPos,2_pInt)
|
|
||||||
case ('vacancyflux_diffusion11')
|
|
||||||
lattice_vacancyfluxDiffusion33(1,1,section) = IO_floatValue(line,chunkPos,2_pInt)
|
|
||||||
case ('vacancyflux_diffusion22')
|
|
||||||
lattice_vacancyfluxDiffusion33(2,2,section) = IO_floatValue(line,chunkPos,2_pInt)
|
|
||||||
case ('vacancyflux_diffusion33')
|
|
||||||
lattice_vacancyfluxDiffusion33(3,3,section) = IO_floatValue(line,chunkPos,2_pInt)
|
|
||||||
case ('vacancyflux_mobility11')
|
|
||||||
lattice_vacancyfluxMobility33(1,1,section) = IO_floatValue(line,chunkPos,2_pInt)
|
|
||||||
case ('vacancyflux_mobility22')
|
|
||||||
lattice_vacancyfluxMobility33(2,2,section) = IO_floatValue(line,chunkPos,2_pInt)
|
|
||||||
case ('vacancyflux_mobility33')
|
|
||||||
lattice_vacancyfluxMobility33(3,3,section) = IO_floatValue(line,chunkPos,2_pInt)
|
|
||||||
case ('porosity_diffusion11')
|
|
||||||
lattice_PorosityDiffusion33(1,1,section) = IO_floatValue(line,chunkPos,2_pInt)
|
|
||||||
case ('porosity_diffusion22')
|
|
||||||
lattice_PorosityDiffusion33(2,2,section) = IO_floatValue(line,chunkPos,2_pInt)
|
|
||||||
case ('porosity_diffusion33')
|
|
||||||
lattice_PorosityDiffusion33(3,3,section) = IO_floatValue(line,chunkPos,2_pInt)
|
|
||||||
case ('porosity_mobility')
|
|
||||||
lattice_PorosityMobility(section) = IO_floatValue(line,chunkPos,2_pInt)
|
|
||||||
case ('hydrogenflux_diffusion11')
|
|
||||||
lattice_hydrogenfluxDiffusion33(1,1,section) = IO_floatValue(line,chunkPos,2_pInt)
|
|
||||||
case ('hydrogenflux_diffusion22')
|
|
||||||
lattice_hydrogenfluxDiffusion33(2,2,section) = IO_floatValue(line,chunkPos,2_pInt)
|
|
||||||
case ('hydrogenflux_diffusion33')
|
|
||||||
lattice_hydrogenfluxDiffusion33(3,3,section) = IO_floatValue(line,chunkPos,2_pInt)
|
|
||||||
case ('hydrogenflux_mobility11')
|
|
||||||
lattice_hydrogenfluxMobility33(1,1,section) = IO_floatValue(line,chunkPos,2_pInt)
|
|
||||||
case ('hydrogenflux_mobility22')
|
|
||||||
lattice_hydrogenfluxMobility33(2,2,section) = IO_floatValue(line,chunkPos,2_pInt)
|
|
||||||
case ('hydrogenflux_mobility33')
|
|
||||||
lattice_hydrogenfluxMobility33(3,3,section) = IO_floatValue(line,chunkPos,2_pInt)
|
|
||||||
case ('vacancy_eqcv')
|
|
||||||
lattice_equilibriumVacancyConcentration(section) = IO_floatValue(line,chunkPos,2_pInt)
|
|
||||||
case ('hydrogen_eqch')
|
|
||||||
lattice_equilibriumHydrogenConcentration(section) = IO_floatValue(line,chunkPos,2_pInt)
|
|
||||||
end select
|
|
||||||
endif
|
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
do i = 1_pInt,Nphases
|
do i = 1_pInt,Nphases
|
||||||
|
@ -1631,8 +1470,6 @@ subroutine lattice_init
|
||||||
call lattice_initializeStructure(i, CoverA(i), CoverA_trans(i), a_fcc(i), a_bcc(i))
|
call lattice_initializeStructure(i, CoverA(i), CoverA_trans(i), a_fcc(i), a_bcc(i))
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
deallocate(CoverA,CoverA_trans,a_fcc,a_bcc)
|
|
||||||
|
|
||||||
end subroutine lattice_init
|
end subroutine lattice_init
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -16,8 +16,8 @@ module material
|
||||||
tSourceState, &
|
tSourceState, &
|
||||||
tHomogMapping, &
|
tHomogMapping, &
|
||||||
tPhaseMapping, &
|
tPhaseMapping, &
|
||||||
p_vec, &
|
group_scalar, &
|
||||||
p_intvec
|
group_int
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
private
|
private
|
||||||
|
@ -268,7 +268,7 @@ module material
|
||||||
porosityMapping, & !< mapping for porosity state/fields
|
porosityMapping, & !< mapping for porosity state/fields
|
||||||
hydrogenfluxMapping !< mapping for hydrogen conc state/fields
|
hydrogenfluxMapping !< mapping for hydrogen conc state/fields
|
||||||
|
|
||||||
type(p_vec), allocatable, dimension(:), public :: &
|
type(group_scalar), allocatable, dimension(:), public :: &
|
||||||
temperature, & !< temperature field
|
temperature, & !< temperature field
|
||||||
damage, & !< damage field
|
damage, & !< damage field
|
||||||
vacancyConc, & !< vacancy conc field
|
vacancyConc, & !< vacancy conc field
|
||||||
|
@ -1121,7 +1121,7 @@ subroutine material_populateGrains
|
||||||
grain,constituentGrain,ipGrain,symExtension, ip
|
grain,constituentGrain,ipGrain,symExtension, ip
|
||||||
real(pReal) :: deviation,extreme,rnd
|
real(pReal) :: deviation,extreme,rnd
|
||||||
integer(pInt), dimension (:,:), allocatable :: Nelems ! counts number of elements in homog, micro array
|
integer(pInt), dimension (:,:), allocatable :: Nelems ! counts number of elements in homog, micro array
|
||||||
type(p_intvec), dimension (:,:), allocatable :: elemsOfHomogMicro ! lists element number in homog, micro array
|
type(group_int), dimension (:,:), allocatable :: elemsOfHomogMicro ! lists element number in homog, micro array
|
||||||
|
|
||||||
myDebug = debug_level(debug_material)
|
myDebug = debug_level(debug_material)
|
||||||
|
|
||||||
|
|
|
@ -379,6 +379,9 @@ pure function math_expand(what,how)
|
||||||
real(pReal), dimension(sum(how)) :: math_expand
|
real(pReal), dimension(sum(how)) :: math_expand
|
||||||
integer(pInt) :: i
|
integer(pInt) :: i
|
||||||
|
|
||||||
|
if (sum(how) == 0_pInt) &
|
||||||
|
return
|
||||||
|
|
||||||
do i = 1_pInt, size(how)
|
do i = 1_pInt, size(how)
|
||||||
math_expand(sum(how(1:i-1))+1:sum(how(1:i))) = what(mod(i-1_pInt,size(what))+1_pInt)
|
math_expand(sum(how(1:i-1))+1:sum(how(1:i))) = what(mod(i-1_pInt,size(what))+1_pInt)
|
||||||
enddo
|
enddo
|
||||||
|
|
|
@ -16,7 +16,6 @@ module numerics
|
||||||
integer(pInt), protected, public :: &
|
integer(pInt), protected, public :: &
|
||||||
iJacoStiffness = 1_pInt, & !< frequency of stiffness update
|
iJacoStiffness = 1_pInt, & !< frequency of stiffness update
|
||||||
iJacoLpresiduum = 1_pInt, & !< frequency of Jacobian update of residuum in Lp
|
iJacoLpresiduum = 1_pInt, & !< frequency of Jacobian update of residuum in Lp
|
||||||
nHomog = 20_pInt, & !< homogenization loop limit (only for debugging info, loop limit is determined by "subStepMinHomog")
|
|
||||||
nMPstate = 10_pInt, & !< materialpoint state loop limit
|
nMPstate = 10_pInt, & !< materialpoint state loop limit
|
||||||
nCryst = 20_pInt, & !< crystallite loop limit (only for debugging info, loop limit is determined by "subStepMinCryst")
|
nCryst = 20_pInt, & !< crystallite loop limit (only for debugging info, loop limit is determined by "subStepMinCryst")
|
||||||
nState = 10_pInt, & !< state loop limit
|
nState = 10_pInt, & !< state loop limit
|
||||||
|
@ -284,8 +283,6 @@ subroutine numerics_init
|
||||||
pert_Fg = IO_floatValue(line,chunkPos,2_pInt)
|
pert_Fg = IO_floatValue(line,chunkPos,2_pInt)
|
||||||
case ('pert_method')
|
case ('pert_method')
|
||||||
pert_method = IO_intValue(line,chunkPos,2_pInt)
|
pert_method = IO_intValue(line,chunkPos,2_pInt)
|
||||||
case ('nhomog')
|
|
||||||
nHomog = IO_intValue(line,chunkPos,2_pInt)
|
|
||||||
case ('nmpstate')
|
case ('nmpstate')
|
||||||
nMPstate = IO_intValue(line,chunkPos,2_pInt)
|
nMPstate = IO_intValue(line,chunkPos,2_pInt)
|
||||||
case ('ncryst')
|
case ('ncryst')
|
||||||
|
@ -536,7 +533,6 @@ subroutine numerics_init
|
||||||
write(6,'(a24,1x,L8)') ' use ping pong scheme: ',usepingpong
|
write(6,'(a24,1x,L8)') ' use ping pong scheme: ',usepingpong
|
||||||
write(6,'(a24,1x,es8.1,/)')' unitlength: ',numerics_unitlength
|
write(6,'(a24,1x,es8.1,/)')' unitlength: ',numerics_unitlength
|
||||||
|
|
||||||
write(6,'(a24,1x,i8)') ' nHomog: ',nHomog
|
|
||||||
write(6,'(a24,1x,es8.1)') ' subStepMinHomog: ',subStepMinHomog
|
write(6,'(a24,1x,es8.1)') ' subStepMinHomog: ',subStepMinHomog
|
||||||
write(6,'(a24,1x,es8.1)') ' subStepSizeHomog: ',subStepSizeHomog
|
write(6,'(a24,1x,es8.1)') ' subStepSizeHomog: ',subStepSizeHomog
|
||||||
write(6,'(a24,1x,es8.1)') ' stepIncreaseHomog: ',stepIncreaseHomog
|
write(6,'(a24,1x,es8.1)') ' stepIncreaseHomog: ',stepIncreaseHomog
|
||||||
|
@ -646,7 +642,6 @@ subroutine numerics_init
|
||||||
if (pert_Fg <= 0.0_pReal) call IO_error(301_pInt,ext_msg='pert_Fg')
|
if (pert_Fg <= 0.0_pReal) call IO_error(301_pInt,ext_msg='pert_Fg')
|
||||||
if (pert_method <= 0_pInt .or. pert_method >= 4_pInt) &
|
if (pert_method <= 0_pInt .or. pert_method >= 4_pInt) &
|
||||||
call IO_error(301_pInt,ext_msg='pert_method')
|
call IO_error(301_pInt,ext_msg='pert_method')
|
||||||
if (nHomog < 1_pInt) call IO_error(301_pInt,ext_msg='nHomog')
|
|
||||||
if (nMPstate < 1_pInt) call IO_error(301_pInt,ext_msg='nMPstate')
|
if (nMPstate < 1_pInt) call IO_error(301_pInt,ext_msg='nMPstate')
|
||||||
if (nCryst < 1_pInt) call IO_error(301_pInt,ext_msg='nCryst')
|
if (nCryst < 1_pInt) call IO_error(301_pInt,ext_msg='nCryst')
|
||||||
if (nState < 1_pInt) call IO_error(301_pInt,ext_msg='nState')
|
if (nState < 1_pInt) call IO_error(301_pInt,ext_msg='nState')
|
||||||
|
|
|
@ -4,16 +4,9 @@
|
||||||
!> @brief material subroutine for purely elastic material
|
!> @brief material subroutine for purely elastic material
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
module plastic_none
|
module plastic_none
|
||||||
use prec, only: &
|
|
||||||
pInt
|
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
private
|
private
|
||||||
integer(pInt), dimension(:), allocatable, public, protected :: &
|
|
||||||
plastic_none_sizePostResults
|
|
||||||
|
|
||||||
integer(pInt), dimension(:,:), allocatable, target, public :: &
|
|
||||||
plastic_none_sizePostResult !< size of each post result output
|
|
||||||
|
|
||||||
public :: &
|
public :: &
|
||||||
plastic_none_init
|
plastic_none_init
|
||||||
|
@ -31,6 +24,8 @@ subroutine plastic_none_init
|
||||||
compiler_version, &
|
compiler_version, &
|
||||||
compiler_options
|
compiler_options
|
||||||
#endif
|
#endif
|
||||||
|
use prec, only: &
|
||||||
|
pInt
|
||||||
use debug, only: &
|
use debug, only: &
|
||||||
debug_level, &
|
debug_level, &
|
||||||
debug_constitutive, &
|
debug_constitutive, &
|
||||||
|
@ -51,18 +46,13 @@ subroutine plastic_none_init
|
||||||
integer(pInt) :: &
|
integer(pInt) :: &
|
||||||
maxNinstance, &
|
maxNinstance, &
|
||||||
phase, &
|
phase, &
|
||||||
NofMyPhase, &
|
NofMyPhase
|
||||||
sizeState, &
|
|
||||||
sizeDotState, &
|
|
||||||
sizeDeltaState
|
|
||||||
|
|
||||||
write(6,'(/,a)') ' <<<+- constitutive_'//PLASTICITY_NONE_label//' init -+>>>'
|
write(6,'(/,a)') ' <<<+- constitutive_'//PLASTICITY_NONE_label//' init -+>>>'
|
||||||
write(6,'(a15,a)') ' Current time: ',IO_timeStamp()
|
write(6,'(a15,a)') ' Current time: ',IO_timeStamp()
|
||||||
#include "compilation_info.f90"
|
#include "compilation_info.f90"
|
||||||
|
|
||||||
maxNinstance = int(count(phase_plasticity == PLASTICITY_none_ID),pInt)
|
maxNinstance = int(count(phase_plasticity == PLASTICITY_none_ID),pInt)
|
||||||
if (maxNinstance == 0_pInt) return
|
|
||||||
|
|
||||||
if (iand(debug_level(debug_constitutive),debug_levelBasic) /= 0_pInt) &
|
if (iand(debug_level(debug_constitutive),debug_levelBasic) /= 0_pInt) &
|
||||||
write(6,'(a16,1x,i5,/)') '# instances:',maxNinstance
|
write(6,'(a16,1x,i5,/)') '# instances:',maxNinstance
|
||||||
|
|
||||||
|
@ -70,37 +60,25 @@ subroutine plastic_none_init
|
||||||
if (phase_plasticity(phase) == PLASTICITY_none_ID) then
|
if (phase_plasticity(phase) == PLASTICITY_none_ID) then
|
||||||
NofMyPhase=count(material_phase==phase)
|
NofMyPhase=count(material_phase==phase)
|
||||||
|
|
||||||
sizeState = 0_pInt
|
allocate(plasticState(phase)%aTolState (0_pInt))
|
||||||
plasticState(phase)%sizeState = sizeState
|
allocate(plasticState(phase)%state0 (0_pInt,NofMyPhase))
|
||||||
sizeDotState = sizeState
|
allocate(plasticState(phase)%partionedState0 (0_pInt,NofMyPhase))
|
||||||
plasticState(phase)%sizeDotState = sizeDotState
|
allocate(plasticState(phase)%subState0 (0_pInt,NofMyPhase))
|
||||||
sizeDeltaState = 0_pInt
|
allocate(plasticState(phase)%state (0_pInt,NofMyPhase))
|
||||||
plasticState(phase)%sizeDeltaState = sizeDeltaState
|
|
||||||
plasticState(phase)%sizePostResults = 0_pInt
|
|
||||||
plasticState(phase)%nSlip = 0_pInt
|
|
||||||
plasticState(phase)%nTwin = 0_pInt
|
|
||||||
plasticState(phase)%nTrans = 0_pInt
|
|
||||||
allocate(plasticState(phase)%aTolState (sizeState))
|
|
||||||
allocate(plasticState(phase)%state0 (sizeState,NofMyPhase))
|
|
||||||
allocate(plasticState(phase)%partionedState0 (sizeState,NofMyPhase))
|
|
||||||
allocate(plasticState(phase)%subState0 (sizeState,NofMyPhase))
|
|
||||||
allocate(plasticState(phase)%state (sizeState,NofMyPhase))
|
|
||||||
|
|
||||||
allocate(plasticState(phase)%dotState (sizeDotState,NofMyPhase))
|
allocate(plasticState(phase)%dotState (0_pInt,NofMyPhase))
|
||||||
allocate(plasticState(phase)%deltaState (sizeDeltaState,NofMyPhase))
|
allocate(plasticState(phase)%deltaState (0_pInt,NofMyPhase))
|
||||||
if (any(numerics_integrator == 1_pInt)) then
|
if (any(numerics_integrator == 1_pInt)) then
|
||||||
allocate(plasticState(phase)%previousDotState (sizeDotState,NofMyPhase))
|
allocate(plasticState(phase)%previousDotState (0_pInt,NofMyPhase))
|
||||||
allocate(plasticState(phase)%previousDotState2(sizeDotState,NofMyPhase))
|
allocate(plasticState(phase)%previousDotState2(0_pInt,NofMyPhase))
|
||||||
endif
|
endif
|
||||||
if (any(numerics_integrator == 4_pInt)) &
|
if (any(numerics_integrator == 4_pInt)) &
|
||||||
allocate(plasticState(phase)%RK4dotState (sizeDotState,NofMyPhase))
|
allocate(plasticState(phase)%RK4dotState (0_pInt,NofMyPhase))
|
||||||
if (any(numerics_integrator == 5_pInt)) &
|
if (any(numerics_integrator == 5_pInt)) &
|
||||||
allocate(plasticState(phase)%RKCK45dotState (6,sizeDotState,NofMyPhase))
|
allocate(plasticState(phase)%RKCK45dotState (6,0_pInt,NofMyPhase))
|
||||||
endif
|
endif
|
||||||
enddo initializeInstances
|
enddo initializeInstances
|
||||||
|
|
||||||
allocate(plastic_none_sizePostResults(maxNinstance), source=0_pInt)
|
|
||||||
|
|
||||||
end subroutine plastic_none_init
|
end subroutine plastic_none_init
|
||||||
|
|
||||||
end module plastic_none
|
end module plastic_none
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
12
src/prec.f90
12
src/prec.f90
|
@ -28,21 +28,21 @@ module prec
|
||||||
|
|
||||||
integer(pInt), allocatable, dimension(:) :: realloc_lhs_test
|
integer(pInt), allocatable, dimension(:) :: realloc_lhs_test
|
||||||
|
|
||||||
type, public :: p_vec !< variable length datatype used for storage of state
|
type, public :: group_scalar !< variable length datatype used for storage of state
|
||||||
real(pReal), dimension(:), pointer :: p
|
real(pReal), dimension(:), pointer :: p
|
||||||
end type p_vec
|
end type group_scalar
|
||||||
|
|
||||||
type, public :: p_intvec
|
type, public :: group_int
|
||||||
integer(pInt), dimension(:), pointer :: p
|
integer(pInt), dimension(:), pointer :: p
|
||||||
end type p_intvec
|
end type group_int
|
||||||
|
|
||||||
!http://stackoverflow.com/questions/3948210/can-i-have-a-pointer-to-an-item-in-an-allocatable-array
|
!http://stackoverflow.com/questions/3948210/can-i-have-a-pointer-to-an-item-in-an-allocatable-array
|
||||||
type, public :: tState
|
type, public :: tState
|
||||||
integer(pInt) :: &
|
integer(pInt) :: &
|
||||||
sizeState = 0_pInt, & !< size of state
|
sizeState = 0_pInt, & !< size of state
|
||||||
sizeDotState = 0_pInt, & !< size of dot state, i.e. state(1:sizeDot) follows time evolution by dotState rates
|
sizeDotState = 0_pInt, & !< size of dot state, i.e. state(1:sizeDot) follows time evolution by dotState rates
|
||||||
offsetDeltaState = 0_pInt, & !< offset of delta state
|
offsetDeltaState = 0_pInt, & !< index offset of delta state
|
||||||
sizeDeltaState = 0_pInt, & !< size of delta state, i.e. state(offset+1:offset+sizeDot) follows time evolution by deltaState increments
|
sizeDeltaState = 0_pInt, & !< size of delta state, i.e. state(offset+1:offset+sizeDelta) follows time evolution by deltaState increments
|
||||||
sizePostResults = 0_pInt !< size of output data
|
sizePostResults = 0_pInt !< size of output data
|
||||||
real(pReal), pointer, dimension(:), contiguous :: &
|
real(pReal), pointer, dimension(:), contiguous :: &
|
||||||
atolState
|
atolState
|
||||||
|
|
|
@ -4,9 +4,8 @@
|
||||||
!> @brief Interfacing between the spectral solver and the material subroutines provided
|
!> @brief Interfacing between the spectral solver and the material subroutines provided
|
||||||
!! by DAMASK
|
!! by DAMASK
|
||||||
!> @details Interfacing between the spectral solver and the material subroutines provided
|
!> @details Interfacing between the spectral solver and the material subroutines provided
|
||||||
!> by DAMASK. Interpretating the command line arguments or, in case of called from f2py,
|
!> by DAMASK. Interpretating the command line arguments to get load case, geometry file,
|
||||||
!> the arguments parsed to the init routine to get load case, geometry file, working
|
!> and working directory.
|
||||||
!> directory, etc.
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
module DAMASK_interface
|
module DAMASK_interface
|
||||||
use prec, only: &
|
use prec, only: &
|
||||||
|
@ -19,21 +18,19 @@ module DAMASK_interface
|
||||||
character(len=1024), public, protected :: &
|
character(len=1024), public, protected :: &
|
||||||
geometryFile = '', & !< parameter given for geometry file
|
geometryFile = '', & !< parameter given for geometry file
|
||||||
loadCaseFile = '' !< parameter given for load case file
|
loadCaseFile = '' !< parameter given for load case file
|
||||||
character(len=1024), private :: workingDirectory !< accessed by getSolverWorkingDirectoryName for compatibility reasons
|
character(len=1024), private :: workingDirectory
|
||||||
|
|
||||||
public :: &
|
public :: &
|
||||||
getSolverWorkingDirectoryName, &
|
|
||||||
getSolverJobName, &
|
getSolverJobName, &
|
||||||
DAMASK_interface_init
|
DAMASK_interface_init
|
||||||
private :: &
|
private :: &
|
||||||
storeWorkingDirectory, &
|
setWorkingDirectory, &
|
||||||
getGeometryFile, &
|
getGeometryFile, &
|
||||||
getLoadCaseFile, &
|
getLoadCaseFile, &
|
||||||
rectifyPath, &
|
rectifyPath, &
|
||||||
makeRelativePath, &
|
makeRelativePath, &
|
||||||
IIO_stringValue, &
|
IIO_stringValue, &
|
||||||
IIO_intValue, &
|
IIO_intValue, &
|
||||||
IIO_lc, &
|
|
||||||
IIO_stringPos
|
IIO_stringPos
|
||||||
contains
|
contains
|
||||||
|
|
||||||
|
@ -57,7 +54,7 @@ subroutine DAMASK_interface_init()
|
||||||
implicit none
|
implicit none
|
||||||
character(len=1024) :: &
|
character(len=1024) :: &
|
||||||
commandLine, & !< command line call as string
|
commandLine, & !< command line call as string
|
||||||
loadCaseArg ='', & !< -l argument given to DAMASK_spectral.exe
|
loadcaseArg = '', & !< -l argument given to DAMASK_spectral.exe
|
||||||
geometryArg = '', & !< -g argument given to DAMASK_spectral.exe
|
geometryArg = '', & !< -g argument given to DAMASK_spectral.exe
|
||||||
workingDirArg = '', & !< -w argument given to DAMASK_spectral.exe
|
workingDirArg = '', & !< -w argument given to DAMASK_spectral.exe
|
||||||
hostName, & !< name of machine on which DAMASK_spectral.exe is execute (might require export HOSTNAME)
|
hostName, & !< name of machine on which DAMASK_spectral.exe is execute (might require export HOSTNAME)
|
||||||
|
@ -114,7 +111,7 @@ subroutine DAMASK_interface_init()
|
||||||
|
|
||||||
call date_and_time(values = dateAndTime)
|
call date_and_time(values = dateAndTime)
|
||||||
write(6,'(/,a)') ' <<<+- DAMASK_spectral -+>>>'
|
write(6,'(/,a)') ' <<<+- DAMASK_spectral -+>>>'
|
||||||
write(6,'(/,a)') ' Roters et al., Computational Materials Science, 2018'
|
write(6,'(a,/)') ' Roters et al., Computational Materials Science, 2018'
|
||||||
write(6,'(/,a)') ' Version: '//DAMASKVERSION
|
write(6,'(/,a)') ' Version: '//DAMASKVERSION
|
||||||
write(6,'(a,2(i2.2,a),i4.4)') ' Date: ',dateAndTime(3),'/',&
|
write(6,'(a,2(i2.2,a),i4.4)') ' Date: ',dateAndTime(3),'/',&
|
||||||
dateAndTime(2),'/',&
|
dateAndTime(2),'/',&
|
||||||
|
@ -128,9 +125,8 @@ subroutine DAMASK_interface_init()
|
||||||
|
|
||||||
call get_command(commandLine)
|
call get_command(commandLine)
|
||||||
chunkPos = IIO_stringPos(commandLine)
|
chunkPos = IIO_stringPos(commandLine)
|
||||||
do i = 1, chunkPos(1)
|
do i = 2_pInt, chunkPos(1)
|
||||||
tag = IIO_lc(IIO_stringValue(commandLine,chunkPos,i)) ! extract key
|
select case(IIO_stringValue(commandLine,chunkPos,i)) ! extract key
|
||||||
select case(tag)
|
|
||||||
case ('-h','--help')
|
case ('-h','--help')
|
||||||
write(6,'(a)') ' #######################################################################'
|
write(6,'(a)') ' #######################################################################'
|
||||||
write(6,'(a)') ' DAMASK_spectral:'
|
write(6,'(a)') ' DAMASK_spectral:'
|
||||||
|
@ -179,23 +175,25 @@ subroutine DAMASK_interface_init()
|
||||||
write(6,'(a,/)')' Prints this message and exits'
|
write(6,'(a,/)')' Prints this message and exits'
|
||||||
call quit(0_pInt) ! normal Termination
|
call quit(0_pInt) ! normal Termination
|
||||||
case ('-l', '--load', '--loadcase')
|
case ('-l', '--load', '--loadcase')
|
||||||
loadcaseArg = IIO_stringValue(commandLine,chunkPos,i+1_pInt)
|
if ( i < chunkPos(1)) loadcaseArg = trim(IIO_stringValue(commandLine,chunkPos,i+1_pInt))
|
||||||
case ('-g', '--geom', '--geometry')
|
case ('-g', '--geom', '--geometry')
|
||||||
geometryArg = IIO_stringValue(commandLine,chunkPos,i+1_pInt)
|
if (i < chunkPos(1)) geometryArg = trim(IIO_stringValue(commandLine,chunkPos,i+1_pInt))
|
||||||
case ('-w', '-d', '--wd', '--directory', '--workingdir', '--workingdirectory')
|
case ('-w', '-d', '--wd', '--directory', '--workingdir', '--workingdirectory')
|
||||||
workingDirArg = IIO_stringValue(commandLine,chunkPos,i+1_pInt)
|
if (i < chunkPos(1)) workingDirArg = trim(IIO_stringValue(commandLine,chunkPos,i+1_pInt))
|
||||||
case ('-r', '--rs', '--restart')
|
case ('-r', '--rs', '--restart')
|
||||||
|
if (i < chunkPos(1)) then
|
||||||
spectralRestartInc = IIO_IntValue(commandLine,chunkPos,i+1_pInt)
|
spectralRestartInc = IIO_IntValue(commandLine,chunkPos,i+1_pInt)
|
||||||
appendToOutFile = .true.
|
appendToOutFile = .true.
|
||||||
|
endif
|
||||||
end select
|
end select
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
if (len(trim(loadcaseArg)) == 0 .or. len(trim(geometryArg)) == 0) then
|
if (len_trim(loadcaseArg) == 0 .or. len_trim(geometryArg) == 0) then
|
||||||
write(6,'(a)') ' Please specify geometry AND load case (-h for help)'
|
write(6,'(a)') ' Please specify geometry AND load case (-h for help)'
|
||||||
call quit(1_pInt)
|
call quit(1_pInt)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
workingDirectory = trim(storeWorkingDirectory(trim(workingDirArg),trim(geometryArg)))
|
workingDirectory = trim(setWorkingDirectory(trim(workingDirArg)))
|
||||||
geometryFile = getGeometryFile(geometryArg)
|
geometryFile = getGeometryFile(geometryArg)
|
||||||
loadCaseFile = getLoadCaseFile(loadCaseArg)
|
loadCaseFile = getLoadCaseFile(loadCaseArg)
|
||||||
|
|
||||||
|
@ -208,7 +206,7 @@ subroutine DAMASK_interface_init()
|
||||||
write(6,'(a,a)') ' Working dir argument: ', trim(workingDirArg)
|
write(6,'(a,a)') ' Working dir argument: ', trim(workingDirArg)
|
||||||
write(6,'(a,a)') ' Geometry argument: ', trim(geometryArg)
|
write(6,'(a,a)') ' Geometry argument: ', trim(geometryArg)
|
||||||
write(6,'(a,a)') ' Loadcase argument: ', trim(loadcaseArg)
|
write(6,'(a,a)') ' Loadcase argument: ', trim(loadcaseArg)
|
||||||
write(6,'(a,a)') ' Working directory: ', trim(getSolverWorkingDirectoryName())
|
write(6,'(a,a)') ' Working directory: ', trim(workingDirectory)
|
||||||
write(6,'(a,a)') ' Geometry file: ', trim(geometryFile)
|
write(6,'(a,a)') ' Geometry file: ', trim(geometryFile)
|
||||||
write(6,'(a,a)') ' Loadcase file: ', trim(loadCaseFile)
|
write(6,'(a,a)') ' Loadcase file: ', trim(loadCaseFile)
|
||||||
write(6,'(a,a)') ' Solver job name: ', trim(getSolverJobName())
|
write(6,'(a,a)') ' Solver job name: ', trim(getSolverJobName())
|
||||||
|
@ -222,59 +220,39 @@ end subroutine DAMASK_interface_init
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief extract working directory from given argument or from location of geometry file,
|
!> @brief extract working directory from given argument or from location of geometry file,
|
||||||
!! possibly converting relative arguments to absolut path
|
!! possibly converting relative arguments to absolut path
|
||||||
!> @todo change working directory with call chdir(storeWorkingDirectory)?
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
character(len=1024) function storeWorkingDirectory(workingDirectoryArg,geometryArg)
|
character(len=1024) function setWorkingDirectory(workingDirectoryArg)
|
||||||
use system_routines, only: &
|
use system_routines, only: &
|
||||||
isDirectory, &
|
getCWD, &
|
||||||
getCWD
|
setCWD
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
character(len=*), intent(in) :: workingDirectoryArg !< working directory argument
|
character(len=*), intent(in) :: workingDirectoryArg !< working directory argument
|
||||||
character(len=*), intent(in) :: geometryArg !< geometry argument
|
|
||||||
character(len=1024) :: cwd
|
|
||||||
logical :: error
|
logical :: error
|
||||||
external :: quit
|
external :: quit
|
||||||
|
|
||||||
wdGiven: if (len(workingDirectoryArg)>0) then
|
wdGiven: if (len(workingDirectoryArg)>0) then
|
||||||
absolutePath: if (workingDirectoryArg(1:1) == '/') then
|
absolutePath: if (workingDirectoryArg(1:1) == '/') then
|
||||||
storeWorkingDirectory = workingDirectoryArg
|
setWorkingDirectory = workingDirectoryArg
|
||||||
else absolutePath
|
else absolutePath
|
||||||
error = getCWD(cwd)
|
error = getCWD(setWorkingDirectory)
|
||||||
if (error) call quit(1_pInt)
|
if (error) call quit(1_pInt)
|
||||||
storeWorkingDirectory = trim(cwd)//'/'//workingDirectoryArg
|
setWorkingDirectory = trim(setWorkingDirectory)//'/'//workingDirectoryArg
|
||||||
endif absolutePath
|
endif absolutePath
|
||||||
if (storeWorkingDirectory(len(trim(storeWorkingDirectory)):len(trim(storeWorkingDirectory))) /= '/') &
|
|
||||||
storeWorkingDirectory = trim(storeWorkingDirectory)//'/' ! if path seperator is not given, append it
|
|
||||||
else wdGiven
|
else wdGiven
|
||||||
if (geometryArg(1:1) == '/') then ! absolute path given as command line argument
|
error = getCWD(setWorkingDirectory) ! relative path given as command line argument
|
||||||
storeWorkingDirectory = geometryArg(1:scan(geometryArg,'/',back=.true.))
|
|
||||||
else
|
|
||||||
error = getCWD(cwd) ! relative path given as command line argument
|
|
||||||
if (error) call quit(1_pInt)
|
if (error) call quit(1_pInt)
|
||||||
storeWorkingDirectory = trim(cwd)//'/'//geometryArg(1:scan(geometryArg,'/',back=.true.))
|
|
||||||
endif
|
|
||||||
endif wdGiven
|
endif wdGiven
|
||||||
|
|
||||||
storeWorkingDirectory = trim(rectifyPath(storeWorkingDirectory))
|
setWorkingDirectory = trim(rectifyPath(setWorkingDirectory))
|
||||||
if(.not. isDirectory(trim(storeWorkingDirectory))) then ! check if the directory exists
|
|
||||||
write(6,'(a20,a,a16)') ' working directory "',trim(storeWorkingDirectory),'" does not exist'
|
error = setCWD(trim(setWorkingDirectory))
|
||||||
|
if(error) then
|
||||||
|
write(6,'(a20,a,a16)') ' working directory "',trim(setWorkingDirectory),'" does not exist'
|
||||||
call quit(1_pInt)
|
call quit(1_pInt)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
end function storeWorkingDirectory
|
end function setWorkingDirectory
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
|
||||||
!> @brief simply returns the private string workingDir
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
|
||||||
character(len=1024) function getSolverWorkingDirectoryName()
|
|
||||||
|
|
||||||
implicit none
|
|
||||||
|
|
||||||
getSolverWorkingDirectoryName = workingDirectory
|
|
||||||
|
|
||||||
end function getSolverWorkingDirectoryName
|
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
@ -306,32 +284,23 @@ end function getSolverJobName
|
||||||
!> @brief basename of geometry file with extension from command line arguments
|
!> @brief basename of geometry file with extension from command line arguments
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
character(len=1024) function getGeometryFile(geometryParameter)
|
character(len=1024) function getGeometryFile(geometryParameter)
|
||||||
use system_routines, only: &
|
|
||||||
getCWD
|
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
character(len=1024), intent(in) :: &
|
character(len=1024), intent(in) :: &
|
||||||
geometryParameter
|
geometryParameter
|
||||||
character(len=1024) :: &
|
|
||||||
cwd
|
|
||||||
integer :: posExt, posSep
|
integer :: posExt, posSep
|
||||||
logical :: error
|
|
||||||
external :: quit
|
external :: quit
|
||||||
|
|
||||||
getGeometryFile = geometryParameter
|
getGeometryFile = trim(geometryParameter)
|
||||||
posExt = scan(getGeometryFile,'.',back=.true.)
|
posExt = scan(getGeometryFile,'.',back=.true.)
|
||||||
posSep = scan(getGeometryFile,'/',back=.true.)
|
posSep = scan(getGeometryFile,'/',back=.true.)
|
||||||
|
|
||||||
if (posExt <= posSep) getGeometryFile = trim(getGeometryFile)//('.geom') ! no extension present
|
if (posExt <= posSep) getGeometryFile = trim(getGeometryFile)//('.geom')
|
||||||
if (scan(getGeometryFile,'/') /= 1) then ! relative path given as command line argument
|
if (scan(getGeometryFile,'/') /= 1) &
|
||||||
error = getcwd(cwd)
|
getGeometryFile = trim(workingDirectory)//'/'//trim(getGeometryFile)
|
||||||
if (error) call quit(1_pInt)
|
|
||||||
getGeometryFile = rectifyPath(trim(cwd)//'/'//getGeometryFile)
|
getGeometryFile = makeRelativePath(workingDirectory, getGeometryFile)
|
||||||
else
|
|
||||||
getGeometryFile = rectifyPath(getGeometryFile)
|
|
||||||
endif
|
|
||||||
|
|
||||||
getGeometryFile = makeRelativePath(getSolverWorkingDirectoryName(), getGeometryFile)
|
|
||||||
|
|
||||||
end function getGeometryFile
|
end function getGeometryFile
|
||||||
|
|
||||||
|
@ -340,38 +309,29 @@ end function getGeometryFile
|
||||||
!> @brief relative path of loadcase from command line arguments
|
!> @brief relative path of loadcase from command line arguments
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
character(len=1024) function getLoadCaseFile(loadCaseParameter)
|
character(len=1024) function getLoadCaseFile(loadCaseParameter)
|
||||||
use system_routines, only: &
|
|
||||||
getCWD
|
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
character(len=1024), intent(in) :: &
|
character(len=1024), intent(in) :: &
|
||||||
loadCaseParameter
|
loadCaseParameter
|
||||||
character(len=1024) :: &
|
|
||||||
cwd
|
|
||||||
integer :: posExt, posSep
|
integer :: posExt, posSep
|
||||||
logical :: error
|
|
||||||
external :: quit
|
external :: quit
|
||||||
|
|
||||||
getLoadCaseFile = loadcaseParameter
|
getLoadCaseFile = trim(loadCaseParameter)
|
||||||
posExt = scan(getLoadCaseFile,'.',back=.true.)
|
posExt = scan(getLoadCaseFile,'.',back=.true.)
|
||||||
posSep = scan(getLoadCaseFile,'/',back=.true.)
|
posSep = scan(getLoadCaseFile,'/',back=.true.)
|
||||||
|
|
||||||
if (posExt <= posSep) getLoadCaseFile = trim(getLoadCaseFile)//('.load') ! no extension present
|
if (posExt <= posSep) getLoadCaseFile = trim(getLoadCaseFile)//('.load')
|
||||||
if (scan(getLoadCaseFile,'/') /= 1) then ! relative path given as command line argument
|
if (scan(getLoadCaseFile,'/') /= 1) &
|
||||||
error = getcwd(cwd)
|
getLoadCaseFile = trim(workingDirectory)//'/'//trim(getLoadCaseFile)
|
||||||
if (error) call quit(1_pInt)
|
|
||||||
getLoadCaseFile = rectifyPath(trim(cwd)//'/'//getLoadCaseFile)
|
|
||||||
else
|
|
||||||
getLoadCaseFile = rectifyPath(getLoadCaseFile)
|
|
||||||
endif
|
|
||||||
|
|
||||||
getLoadCaseFile = makeRelativePath(getSolverWorkingDirectoryName(), getLoadCaseFile)
|
getLoadCaseFile = makeRelativePath(workingDirectory, getLoadCaseFile)
|
||||||
|
|
||||||
end function getLoadCaseFile
|
end function getLoadCaseFile
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief remove ../ and /./ from path
|
!> @brief remove ../, /./, and // from path.
|
||||||
|
!> @details works only if absolute path is given
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
function rectifyPath(path)
|
function rectifyPath(path)
|
||||||
|
|
||||||
|
@ -385,14 +345,21 @@ function rectifyPath(path)
|
||||||
l = len_trim(path)
|
l = len_trim(path)
|
||||||
rectifyPath = path
|
rectifyPath = path
|
||||||
do i = l,3,-1
|
do i = l,3,-1
|
||||||
if (rectifyPath(i-2:i) == '/'//'.'//'/') &
|
if (rectifyPath(i-2:i) == '/./') rectifyPath(i-1:l) = rectifyPath(i+1:l)//' '
|
||||||
rectifyPath(i-1:l) = rectifyPath(i+1:l)//' '
|
enddo
|
||||||
|
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
! remove // from path
|
||||||
|
l = len_trim(path)
|
||||||
|
rectifyPath = path
|
||||||
|
do i = l,2,-1
|
||||||
|
if (rectifyPath(i-1:i) == '//') rectifyPath(i-1:l) = rectifyPath(i:l)//' '
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! remove ../ and corresponding directory from rectifyPath
|
! remove ../ and corresponding directory from rectifyPath
|
||||||
l = len_trim(rectifyPath)
|
l = len_trim(rectifyPath)
|
||||||
i = index(rectifyPath(i:l),'..'//'/')
|
i = index(rectifyPath(i:l),'../')
|
||||||
j = 0
|
j = 0
|
||||||
do while (i > j)
|
do while (i > j)
|
||||||
j = scan(rectifyPath(1:i-2),'/',back=.true.)
|
j = scan(rectifyPath(1:i-2),'/',back=.true.)
|
||||||
|
@ -402,7 +369,7 @@ function rectifyPath(path)
|
||||||
rectifyPath(j+1:k-1) = rectifyPath(j+2:k)
|
rectifyPath(j+1:k-1) = rectifyPath(j+2:k)
|
||||||
rectifyPath(k:k) = ' '
|
rectifyPath(k:k) = ' '
|
||||||
endif
|
endif
|
||||||
i = j+index(rectifyPath(j+1:l),'..'//'/')
|
i = j+index(rectifyPath(j+1:l),'../')
|
||||||
enddo
|
enddo
|
||||||
if(len_trim(rectifyPath) == 0) rectifyPath = '/'
|
if(len_trim(rectifyPath) == 0) rectifyPath = '/'
|
||||||
|
|
||||||
|
@ -415,20 +382,24 @@ end function rectifyPath
|
||||||
character(len=1024) function makeRelativePath(a,b)
|
character(len=1024) function makeRelativePath(a,b)
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
character (len=*) :: a,b
|
character (len=*), intent(in) :: a,b
|
||||||
|
character (len=1024) :: a_cleaned,b_cleaned
|
||||||
integer :: i,posLastCommonSlash,remainingSlashes !no pInt
|
integer :: i,posLastCommonSlash,remainingSlashes !no pInt
|
||||||
|
|
||||||
posLastCommonSlash = 0
|
posLastCommonSlash = 0
|
||||||
remainingSlashes = 0
|
remainingSlashes = 0
|
||||||
|
a_cleaned = rectifyPath(trim(a)//'/')
|
||||||
|
b_cleaned = rectifyPath(b)
|
||||||
|
|
||||||
do i = 1, min(1024,len_trim(a),len_trim(b))
|
do i = 1, min(1024,len_trim(a_cleaned),len_trim(rectifyPath(b_cleaned)))
|
||||||
if (a(i:i) /= b(i:i)) exit
|
if (a_cleaned(i:i) /= b_cleaned(i:i)) exit
|
||||||
if (a(i:i) == '/') posLastCommonSlash = i
|
if (a_cleaned(i:i) == '/') posLastCommonSlash = i
|
||||||
enddo
|
enddo
|
||||||
do i = posLastCommonSlash+1,len_trim(a)
|
do i = posLastCommonSlash+1,len_trim(a_cleaned)
|
||||||
if (a(i:i) == '/') remainingSlashes = remainingSlashes + 1
|
if (a_cleaned(i:i) == '/') remainingSlashes = remainingSlashes + 1
|
||||||
enddo
|
enddo
|
||||||
makeRelativePath = repeat('..'//'/',remainingSlashes)//b(posLastCommonSlash+1:len_trim(b))
|
|
||||||
|
makeRelativePath = repeat('..'//'/',remainingSlashes)//b_cleaned(posLastCommonSlash+1:len_trim(b_cleaned))
|
||||||
|
|
||||||
end function makeRelativePath
|
end function makeRelativePath
|
||||||
|
|
||||||
|
@ -441,15 +412,10 @@ pure function IIO_stringValue(string,chunkPos,myChunk)
|
||||||
implicit none
|
implicit none
|
||||||
integer(pInt), dimension(:), intent(in) :: chunkPos !< positions of start and end of each tag/chunk in given string
|
integer(pInt), dimension(:), intent(in) :: chunkPos !< positions of start and end of each tag/chunk in given string
|
||||||
integer(pInt), intent(in) :: myChunk !< position number of desired chunk
|
integer(pInt), intent(in) :: myChunk !< position number of desired chunk
|
||||||
character(len=1+chunkPos(myChunk*2+1)-chunkPos(myChunk*2)) :: IIO_stringValue
|
character(len=chunkPos(myChunk*2+1)-chunkPos(myChunk*2)+1) :: IIO_stringValue
|
||||||
character(len=*), intent(in) :: string !< raw input with known start and end of each chunk
|
character(len=*), intent(in) :: string !< raw input with known start and end of each chunk
|
||||||
|
|
||||||
|
|
||||||
valuePresent: if (myChunk > chunkPos(1) .or. myChunk < 1_pInt) then
|
|
||||||
IIO_stringValue = ''
|
|
||||||
else valuePresent
|
|
||||||
IIO_stringValue = string(chunkPos(myChunk*2):chunkPos(myChunk*2+1))
|
IIO_stringValue = string(chunkPos(myChunk*2):chunkPos(myChunk*2+1))
|
||||||
endif valuePresent
|
|
||||||
|
|
||||||
end function IIO_stringValue
|
end function IIO_stringValue
|
||||||
|
|
||||||
|
@ -476,29 +442,6 @@ integer(pInt) pure function IIO_intValue(string,chunkPos,myChunk)
|
||||||
end function IIO_intValue
|
end function IIO_intValue
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
|
||||||
!> @brief taken from IO, check IO_lc for documentation
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
|
||||||
pure function IIO_lc(string)
|
|
||||||
|
|
||||||
implicit none
|
|
||||||
character(len=*), intent(in) :: string !< string to convert
|
|
||||||
character(len=len(string)) :: IIO_lc
|
|
||||||
|
|
||||||
character(26), parameter :: LOWER = 'abcdefghijklmnopqrstuvwxyz'
|
|
||||||
character(26), parameter :: UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
|
||||||
|
|
||||||
integer :: i,n ! no pInt (len returns default integer)
|
|
||||||
|
|
||||||
IIO_lc = string
|
|
||||||
do i=1,len(string)
|
|
||||||
n = index(UPPER,IIO_lc(i:i))
|
|
||||||
if (n/=0) IIO_lc(i:i) = LOWER(n:n)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
end function IIO_lc
|
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief taken from IO, check IO_stringPos for documentation
|
!> @brief taken from IO, check IO_stringPos for documentation
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
|
|
@ -65,8 +65,6 @@ subroutine spectral_thermal_init
|
||||||
compiler_options
|
compiler_options
|
||||||
#endif
|
#endif
|
||||||
use IO, only: &
|
use IO, only: &
|
||||||
IO_intOut, &
|
|
||||||
IO_read_realFile, &
|
|
||||||
IO_timeStamp
|
IO_timeStamp
|
||||||
use spectral_utilities, only: &
|
use spectral_utilities, only: &
|
||||||
wgt
|
wgt
|
||||||
|
|
|
@ -7,7 +7,7 @@ module vacancyflux_cahnhilliard
|
||||||
use prec, only: &
|
use prec, only: &
|
||||||
pReal, &
|
pReal, &
|
||||||
pInt, &
|
pInt, &
|
||||||
p_vec
|
group_scalar
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
private
|
private
|
||||||
|
@ -26,7 +26,7 @@ module vacancyflux_cahnhilliard
|
||||||
real(pReal), dimension(:), allocatable, private :: &
|
real(pReal), dimension(:), allocatable, private :: &
|
||||||
vacancyflux_cahnhilliard_flucAmplitude
|
vacancyflux_cahnhilliard_flucAmplitude
|
||||||
|
|
||||||
type(p_vec), dimension(:), allocatable, private :: &
|
type(group_scalar), dimension(:), allocatable, private :: &
|
||||||
vacancyflux_cahnhilliard_thermalFluc
|
vacancyflux_cahnhilliard_thermalFluc
|
||||||
|
|
||||||
real(pReal), parameter, private :: &
|
real(pReal), parameter, private :: &
|
||||||
|
|
Loading…
Reference in New Issue