unfified interface for spectral and FEM solver
Note: extension to load case and geometry is not added automatically anymore!
This commit is contained in:
parent
f29a5b3df3
commit
b8d56ae320
|
@ -27,7 +27,7 @@ program DAMASK_spectral
|
||||||
loadCaseFile, &
|
loadCaseFile, &
|
||||||
geometryFile, &
|
geometryFile, &
|
||||||
getSolverJobName, &
|
getSolverJobName, &
|
||||||
appendToOutFile
|
interface_appendToOutFile
|
||||||
use IO, only: &
|
use IO, only: &
|
||||||
IO_read, &
|
IO_read, &
|
||||||
IO_isBlank, &
|
IO_isBlank, &
|
||||||
|
@ -383,7 +383,7 @@ 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. interface_appendToOutFile) then ! after restart, append to existing results file
|
||||||
if (getCWD(workingDir)) call IO_error(106_pInt,ext_msg=trim(workingDir))
|
if (getCWD(workingDir)) call IO_error(106_pInt,ext_msg=trim(workingDir))
|
||||||
open(newunit=resUnit,file=trim(getSolverJobName())//&
|
open(newunit=resUnit,file=trim(getSolverJobName())//&
|
||||||
'.spectralOut',form='UNFORMATTED',status='REPLACE')
|
'.spectralOut',form='UNFORMATTED',status='REPLACE')
|
||||||
|
@ -431,7 +431,7 @@ program DAMASK_spectral
|
||||||
call MPI_file_seek (resUnit,fileOffset,MPI_SEEK_SET,ierr)
|
call MPI_file_seek (resUnit,fileOffset,MPI_SEEK_SET,ierr)
|
||||||
if (ierr /= 0_pInt) call IO_error(error_ID=894_pInt, ext_msg='MPI_file_seek')
|
if (ierr /= 0_pInt) call IO_error(error_ID=894_pInt, ext_msg='MPI_file_seek')
|
||||||
|
|
||||||
if (.not. appendToOutFile) then ! if not restarting, write 0th increment
|
if (.not. interface_appendToOutFile) then ! if not restarting, write 0th increment
|
||||||
write(6,'(1/,a)') ' ... writing initial configuration to file ........................'
|
write(6,'(1/,a)') ' ... writing initial configuration to file ........................'
|
||||||
do i = 1, size(materialpoint_results,3)/(maxByteOut/(materialpoint_sizeResults*pReal))+1 ! slice the output of my process in chunks not exceeding the limit for one output
|
do i = 1, size(materialpoint_results,3)/(maxByteOut/(materialpoint_sizeResults*pReal))+1 ! slice the output of my process in chunks not exceeding the limit for one output
|
||||||
outputIndex = int([(i-1_pInt)*((maxRealOut)/materialpoint_sizeResults)+1_pInt, & ! QUESTION: why not starting i at 0 instead of murky 1?
|
outputIndex = int([(i-1_pInt)*((maxRealOut)/materialpoint_sizeResults)+1_pInt, & ! QUESTION: why not starting i at 0 instead of murky 1?
|
||||||
|
|
|
@ -81,20 +81,13 @@ subroutine FE_init
|
||||||
modelName = getSolverJobName()
|
modelName = getSolverJobName()
|
||||||
|
|
||||||
#if defined(Spectral) || defined(FEM)
|
#if defined(Spectral) || defined(FEM)
|
||||||
|
restartInc = interface_RestartInc
|
||||||
#ifdef Spectral
|
|
||||||
restartInc = spectralRestartInc
|
|
||||||
#endif
|
|
||||||
#ifdef FEM
|
|
||||||
restartInc = FEMRestartInc
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if(restartInc < 0_pInt) then
|
if(restartInc < 0_pInt) then
|
||||||
call IO_warning(warning_ID=34_pInt)
|
call IO_warning(warning_ID=34_pInt)
|
||||||
restartInc = 0_pInt
|
restartInc = 0_pInt
|
||||||
endif
|
endif
|
||||||
restartRead = restartInc > 0_pInt ! only read in if "true" restart requested
|
restartRead = restartInc > 0_pInt ! only read in if "true" restart requested
|
||||||
|
|
||||||
#else
|
#else
|
||||||
call IO_open_inputFile(FILEUNIT,modelName)
|
call IO_open_inputFile(FILEUNIT,modelName)
|
||||||
rewind(FILEUNIT)
|
rewind(FILEUNIT)
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
!> @author Jaeyong Jung, Max-Planck-Institut für Eisenforschung GmbH
|
||||||
|
!> @author Pratheek Shanthraj, Max-Planck-Institut für Eisenforschung GmbH
|
||||||
!> @author Martin Diehl, Max-Planck-Institut für Eisenforschung GmbH
|
!> @author Martin Diehl, Max-Planck-Institut für Eisenforschung GmbH
|
||||||
!> @author Philip Eisenlohr, Max-Planck-Institut für Eisenforschung GmbH
|
!> @author Philip Eisenlohr, Max-Planck-Institut für Eisenforschung GmbH
|
||||||
!> @brief Interfacing between the spectral solver and the material subroutines provided
|
!> @brief Interfacing between the PETSc-based solvers and the material subroutines provided
|
||||||
!! by DAMASK
|
!! by DAMASK
|
||||||
!> @details Interfacing between the spectral solver and the material subroutines provided
|
!> @details Interfacing between the PETSc-based solvers and the material subroutines provided
|
||||||
!> by DAMASK. Interpretating the command line arguments to get load case, geometry file,
|
!> by DAMASK. Interpretating the command line arguments to get load case, geometry file,
|
||||||
!> and working directory.
|
!> and working directory.
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
@ -13,8 +15,8 @@ module DAMASK_interface
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
private
|
private
|
||||||
logical, public, protected :: appendToOutFile = .false. !< Append to existing spectralOut file (in case of restart, not in case of regridding)
|
logical, public, protected :: interface_appendToOutFile = .false. !< Append to existing spectralOut file (in case of restart, not in case of regridding)
|
||||||
integer(pInt), public, protected :: spectralRestartInc = 0_pInt !< Increment at which calculation starts
|
integer(pInt), public, protected :: interface_restartInc = 0_pInt !< Increment at which calculation starts
|
||||||
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
|
||||||
|
@ -54,11 +56,11 @@ 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 the executable
|
||||||
geometryArg = '', & !< -g argument given to DAMASK_spectral.exe
|
geometryArg = '', & !< -g argument given to the executable
|
||||||
workingDirArg = '', & !< -w argument given to DAMASK_spectral.exe
|
workingDirArg = '', & !< -w argument given to the executable
|
||||||
hostName, & !< name of machine on which DAMASK_spectral.exe is execute (might require export HOSTNAME)
|
hostName, & !< name of machine (might require export HOSTNAME)
|
||||||
userName, & !< name of user calling DAMASK_spectral.exe
|
userName, & !< name of user calling the executable
|
||||||
tag
|
tag
|
||||||
integer :: &
|
integer :: &
|
||||||
i, &
|
i, &
|
||||||
|
@ -110,7 +112,7 @@ subroutine DAMASK_interface_init()
|
||||||
endif mainProcess
|
endif mainProcess
|
||||||
|
|
||||||
call date_and_time(values = dateAndTime)
|
call date_and_time(values = dateAndTime)
|
||||||
write(6,'(/,a)') ' <<<+- DAMASK_spectral -+>>>'
|
write(6,'(/,a)') ' <<<+- DAMASK_interface init -+>>>'
|
||||||
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),'/',&
|
||||||
|
@ -120,7 +122,6 @@ subroutine DAMASK_interface_init()
|
||||||
dateAndTime(6),':',&
|
dateAndTime(6),':',&
|
||||||
dateAndTime(7)
|
dateAndTime(7)
|
||||||
write(6,'(/,a,i4.1)') ' MPI processes: ',worldsize
|
write(6,'(/,a,i4.1)') ' MPI processes: ',worldsize
|
||||||
write(6,'(/,a)') ' <<<+- DAMASK_interface init -+>>>'
|
|
||||||
#include "compilation_info.f90"
|
#include "compilation_info.f90"
|
||||||
|
|
||||||
call get_command(commandLine)
|
call get_command(commandLine)
|
||||||
|
@ -129,9 +130,8 @@ subroutine DAMASK_interface_init()
|
||||||
select case(IIO_stringValue(commandLine,chunkPos,i)) ! extract key
|
select case(IIO_stringValue(commandLine,chunkPos,i)) ! extract key
|
||||||
case ('-h','--help')
|
case ('-h','--help')
|
||||||
write(6,'(a)') ' #######################################################################'
|
write(6,'(a)') ' #######################################################################'
|
||||||
write(6,'(a)') ' DAMASK_spectral:'
|
write(6,'(a)') ' DAMASK Command Line Interface:'
|
||||||
write(6,'(a)') ' The spectral method boundary value problem solver for'
|
write(6,'(a)') ' For PETSc-based solvers for the Düsseldorf Advanced Material Simulation Kit'
|
||||||
write(6,'(a)') ' the Düsseldorf Advanced Material Simulation Kit'
|
|
||||||
write(6,'(a,/)')' #######################################################################'
|
write(6,'(a,/)')' #######################################################################'
|
||||||
write(6,'(a,/)')' Valid command line switches:'
|
write(6,'(a,/)')' Valid command line switches:'
|
||||||
write(6,'(a)') ' --geom (-g, --geometry)'
|
write(6,'(a)') ' --geom (-g, --geometry)'
|
||||||
|
@ -141,23 +141,14 @@ subroutine DAMASK_interface_init()
|
||||||
write(6,'(a)') ' --help (-h)'
|
write(6,'(a)') ' --help (-h)'
|
||||||
write(6,'(/,a)')' -----------------------------------------------------------------------'
|
write(6,'(/,a)')' -----------------------------------------------------------------------'
|
||||||
write(6,'(a)') ' Mandatory arguments:'
|
write(6,'(a)') ' Mandatory arguments:'
|
||||||
write(6,'(/,a)')' --geom PathToGeomFile/NameOfGeom.geom'
|
write(6,'(/,a)')' --geom PathToGeomFile/NameOfGeom'
|
||||||
write(6,'(a)') ' Specifies the location of the geometry definition file,'
|
write(6,'(a)') ' Specifies the location of the geometry definition file.'
|
||||||
write(6,'(a)') ' if no extension is given, .geom will be appended.'
|
write(6,'(/,a)')' --load PathToLoadFile/NameOfLoadFile'
|
||||||
write(6,'(a)') ' "PathToGeomFile" will be the working directory if not specified'
|
write(6,'(a)') ' Specifies the location of the load case definition file.'
|
||||||
write(6,'(a)') ' via --workingdir.'
|
|
||||||
write(6,'(a)') ' Make sure the file "material.config" exists in the working'
|
|
||||||
write(6,'(a)') ' directory.'
|
|
||||||
write(6,'(a)') ' For further configuration place "numerics.config"'
|
|
||||||
write(6,'(a)')' and "numerics.config" in that directory.'
|
|
||||||
write(6,'(/,a)')' --load PathToLoadFile/NameOfLoadFile.load'
|
|
||||||
write(6,'(a)') ' Specifies the location of the load case definition file,'
|
|
||||||
write(6,'(a)') ' if no extension is given, .load will be appended.'
|
|
||||||
write(6,'(/,a)')' -----------------------------------------------------------------------'
|
write(6,'(/,a)')' -----------------------------------------------------------------------'
|
||||||
write(6,'(a)') ' Optional arguments:'
|
write(6,'(a)') ' Optional arguments:'
|
||||||
write(6,'(/,a)')' --workingdirectory PathToWorkingDirectory'
|
write(6,'(/,a)')' --workingdirectory PathToWorkingDirectory'
|
||||||
write(6,'(a)') ' Specifies the working directory and overwrites the default'
|
write(6,'(a)') ' Specifies the working directory and overwrites the default ./'
|
||||||
write(6,'(a)') ' "PathToGeomFile".'
|
|
||||||
write(6,'(a)') ' Make sure the file "material.config" exists in the working'
|
write(6,'(a)') ' Make sure the file "material.config" exists in the working'
|
||||||
write(6,'(a)') ' directory.'
|
write(6,'(a)') ' directory.'
|
||||||
write(6,'(a)') ' For further configuration place "numerics.config"'
|
write(6,'(a)') ' For further configuration place "numerics.config"'
|
||||||
|
@ -166,7 +157,7 @@ subroutine DAMASK_interface_init()
|
||||||
write(6,'(a)') ' Reads in increment XX and continues with calculating'
|
write(6,'(a)') ' Reads in increment XX and continues with calculating'
|
||||||
write(6,'(a)') ' increment XX+1 based on this.'
|
write(6,'(a)') ' increment XX+1 based on this.'
|
||||||
write(6,'(a)') ' Appends to existing results file'
|
write(6,'(a)') ' Appends to existing results file'
|
||||||
write(6,'(a)') ' "NameOfGeom_NameOfLoadFile.spectralOut".'
|
write(6,'(a)') ' "NameOfGeom_NameOfLoadFile".'
|
||||||
write(6,'(a)') ' Works only if the restart information for increment XX'
|
write(6,'(a)') ' Works only if the restart information for increment XX'
|
||||||
write(6,'(a)') ' is available in the working directory.'
|
write(6,'(a)') ' is available in the working directory.'
|
||||||
write(6,'(/,a)')' -----------------------------------------------------------------------'
|
write(6,'(/,a)')' -----------------------------------------------------------------------'
|
||||||
|
@ -182,8 +173,8 @@ subroutine DAMASK_interface_init()
|
||||||
if (i < chunkPos(1)) workingDirArg = trim(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
|
if (i < chunkPos(1)) then
|
||||||
spectralRestartInc = IIO_IntValue(commandLine,chunkPos,i+1_pInt)
|
interface_restartInc = IIO_IntValue(commandLine,chunkPos,i+1_pInt)
|
||||||
appendToOutFile = .true.
|
interface_appendToOutFile = .true.
|
||||||
endif
|
endif
|
||||||
end select
|
end select
|
||||||
enddo
|
enddo
|
||||||
|
@ -210,9 +201,9 @@ subroutine DAMASK_interface_init()
|
||||||
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())
|
||||||
if (SpectralRestartInc > 0_pInt) &
|
if (interface_restartInc > 0_pInt) &
|
||||||
write(6,'(a,i6.6)') ' Restart from increment: ', spectralRestartInc
|
write(6,'(a,i6.6)') ' Restart from increment: ', interface_restartInc
|
||||||
write(6,'(a,l1,/)') ' Append to result file: ', appendToOutFile
|
write(6,'(a,l1,/)') ' Append to result file: ', interface_appendToOutFile
|
||||||
|
|
||||||
end subroutine DAMASK_interface_init
|
end subroutine DAMASK_interface_init
|
||||||
|
|
||||||
|
@ -288,14 +279,10 @@ character(len=1024) function getGeometryFile(geometryParameter)
|
||||||
implicit none
|
implicit none
|
||||||
character(len=1024), intent(in) :: &
|
character(len=1024), intent(in) :: &
|
||||||
geometryParameter
|
geometryParameter
|
||||||
integer :: posExt, posSep
|
|
||||||
external :: quit
|
external :: quit
|
||||||
|
|
||||||
getGeometryFile = trim(geometryParameter)
|
getGeometryFile = trim(geometryParameter)
|
||||||
posExt = scan(getGeometryFile,'.',back=.true.)
|
|
||||||
posSep = scan(getGeometryFile,'/',back=.true.)
|
|
||||||
|
|
||||||
if (posExt <= posSep) getGeometryFile = trim(getGeometryFile)//('.geom')
|
|
||||||
if (scan(getGeometryFile,'/') /= 1) &
|
if (scan(getGeometryFile,'/') /= 1) &
|
||||||
getGeometryFile = trim(workingDirectory)//'/'//trim(getGeometryFile)
|
getGeometryFile = trim(workingDirectory)//'/'//trim(getGeometryFile)
|
||||||
|
|
||||||
|
@ -313,14 +300,10 @@ character(len=1024) function getLoadCaseFile(loadCaseParameter)
|
||||||
implicit none
|
implicit none
|
||||||
character(len=1024), intent(in) :: &
|
character(len=1024), intent(in) :: &
|
||||||
loadCaseParameter
|
loadCaseParameter
|
||||||
integer :: posExt, posSep
|
|
||||||
external :: quit
|
external :: quit
|
||||||
|
|
||||||
getLoadCaseFile = trim(loadCaseParameter)
|
getLoadCaseFile = trim(loadCaseParameter)
|
||||||
posExt = scan(getLoadCaseFile,'.',back=.true.)
|
|
||||||
posSep = scan(getLoadCaseFile,'/',back=.true.)
|
|
||||||
|
|
||||||
if (posExt <= posSep) getLoadCaseFile = trim(getLoadCaseFile)//('.load')
|
|
||||||
if (scan(getLoadCaseFile,'/') /= 1) &
|
if (scan(getLoadCaseFile,'/') /= 1) &
|
||||||
getLoadCaseFile = trim(workingDirectory)//'/'//trim(getLoadCaseFile)
|
getLoadCaseFile = trim(workingDirectory)//'/'//trim(getLoadCaseFile)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue