corrected determination of restartRead from commandline (now done by FEsolving instead of DAMASK_spectral_interface)
recompiled fftw libraries with --enable-shared to make them work with f2py added draft for compilation test of spectral solver
This commit is contained in:
parent
a1adef07ef
commit
de96e99bca
|
@ -68,9 +68,10 @@ program DAMASK_spectral
|
||||||
integer(pInt), dimension (1 + maxNchunksLoadcase*2) :: posLoadcase
|
integer(pInt), dimension (1 + maxNchunksLoadcase*2) :: posLoadcase
|
||||||
integer(pInt), parameter :: maxNchunksGeom = 7_pInt ! 4 identifiers, 3 values
|
integer(pInt), parameter :: maxNchunksGeom = 7_pInt ! 4 identifiers, 3 values
|
||||||
integer(pInt), dimension (1 + maxNchunksGeom*2) :: posGeom
|
integer(pInt), dimension (1 + maxNchunksGeom*2) :: posGeom
|
||||||
integer(pInt) :: myUnit, N_l, N_s, N_t, N_n, N_Fdot, headerLength ! numbers of identifiers
|
integer(pInt) :: headerLength,N_l=0_pInt, N_t=0_pInt, N_n=0_pInt, N_Fdot=0_pInt
|
||||||
|
integer(pInt), parameter :: myUnit = 234_pInt
|
||||||
character(len=1024) :: path, line, keyword
|
character(len=1024) :: path, line, keyword
|
||||||
logical :: gotResolution, gotDimension, gotHomogenization
|
logical :: gotResolution =.false., gotDimension =.false., gotHomogenization = .false.
|
||||||
|
|
||||||
! variables storing information from loadcase file
|
! variables storing information from loadcase file
|
||||||
!ToDo: create Data Structure loadcase
|
!ToDo: create Data Structure loadcase
|
||||||
|
@ -91,14 +92,14 @@ program DAMASK_spectral
|
||||||
|
|
||||||
! variables storing information from geom file
|
! variables storing information from geom file
|
||||||
real(pReal) :: wgt
|
real(pReal) :: wgt
|
||||||
real(pReal), dimension(3) :: geomdimension ! physical dimension of volume element in each direction
|
real(pReal), dimension(3) :: geomdimension = 0.0_pReal ! physical dimension of volume element in each direction
|
||||||
integer(pInt) :: homog ! homogenization scheme used
|
integer(pInt) :: homog ! homogenization scheme used
|
||||||
integer(pInt), dimension(3) :: resolution ! resolution (number of Fourier points) in each direction
|
integer(pInt), dimension(3) :: resolution = 1_pInt ! resolution (number of Fourier points) in each direction
|
||||||
logical :: spectralPictureMode ! indicating 1 to 1 mapping of FP to microstructure
|
logical :: spectralPictureMode = .false. ! indicating 1 to 1 mapping of FP to microstructure
|
||||||
|
|
||||||
! stress etc.
|
! stress, stiffness and compliance average etc.
|
||||||
real(pReal), dimension(3,3) :: pstress, pstress_av, defgrad_av, &
|
real(pReal), dimension(3,3) :: pstress, pstress_av, defgrad_av, &
|
||||||
defgradAim, defgradAimOld, defgradAimCorr,&
|
defgradAim = math_I3, defgradAimOld= math_I3, defgradAimCorr= math_I3,&
|
||||||
mask_stress, mask_defgrad, fDot, &
|
mask_stress, mask_defgrad, fDot, &
|
||||||
pstress_av_load, defgradAim_lab ! quantities rotated to other coordinate system
|
pstress_av_load, defgradAim_lab ! quantities rotated to other coordinate system
|
||||||
real(pReal), dimension(3,3,3,3) :: dPdF, c0_reference, c_current, s_prev, c_prev ! stiffness and compliance
|
real(pReal), dimension(3,3,3,3) :: dPdF, c0_reference, c_current, s_prev, c_prev ! stiffness and compliance
|
||||||
|
@ -106,7 +107,7 @@ program DAMASK_spectral
|
||||||
real(pReal), dimension(6,6) :: dsde ! small strain stiffness
|
real(pReal), dimension(6,6) :: dsde ! small strain stiffness
|
||||||
real(pReal), dimension(9,9) :: s_prev99, c_prev99 ! compliance and stiffness in matrix notation
|
real(pReal), dimension(9,9) :: s_prev99, c_prev99 ! compliance and stiffness in matrix notation
|
||||||
real(pReal), dimension(:,:), allocatable :: s_reduced, c_reduced ! reduced compliance and stiffness (only for stress BC)
|
real(pReal), dimension(:,:), allocatable :: s_reduced, c_reduced ! reduced compliance and stiffness (only for stress BC)
|
||||||
integer(pInt) :: size_reduced ! number of stress BCs
|
integer(pInt) :: size_reduced = 0.0_pReal ! number of stress BCs
|
||||||
|
|
||||||
! pointwise data
|
! pointwise data
|
||||||
real(pReal), dimension(:,:,:,:,:), allocatable :: workfft, defgrad, defgradold
|
real(pReal), dimension(:,:,:,:,:), allocatable :: workfft, defgrad, defgradold
|
||||||
|
@ -150,15 +151,8 @@ program DAMASK_spectral
|
||||||
!$OMP END CRITICAL (write2out)
|
!$OMP END CRITICAL (write2out)
|
||||||
|
|
||||||
! Reading the loadcase file and allocate variables
|
! Reading the loadcase file and allocate variables
|
||||||
myUnit = 234_pInt
|
|
||||||
path = getLoadcaseName()
|
path = getLoadcaseName()
|
||||||
if (.not. IO_open_file(myUnit,path)) call IO_error(error_ID=30,ext_msg = trim(path))
|
if (.not. IO_open_file(myUnit,path)) call IO_error(error_ID=30,ext_msg = trim(path))
|
||||||
|
|
||||||
N_l = 0_pInt
|
|
||||||
N_Fdot = 0_pInt
|
|
||||||
N_t = 0_pInt
|
|
||||||
N_n = 0_pInt
|
|
||||||
|
|
||||||
rewind(myUnit)
|
rewind(myUnit)
|
||||||
do
|
do
|
||||||
read(myUnit,'(a1024)',END = 100) line
|
read(myUnit,'(a1024)',END = 100) line
|
||||||
|
@ -261,17 +255,10 @@ program DAMASK_spectral
|
||||||
101 close(myUnit)
|
101 close(myUnit)
|
||||||
|
|
||||||
!read header of geom file to get the information needed before the complete geom file is intepretated by mesh.f90
|
!read header of geom file to get the information needed before the complete geom file is intepretated by mesh.f90
|
||||||
gotResolution =.false.
|
|
||||||
gotDimension =.false.
|
|
||||||
gotHomogenization = .false.
|
|
||||||
spectralPictureMode = .false.
|
|
||||||
resolution = 1_pInt
|
|
||||||
geomdimension = 0.0_pReal
|
|
||||||
|
|
||||||
path = getModelName()
|
path = getModelName()
|
||||||
if (.not. IO_open_file(myUnit,trim(path)//InputFileExtension))&
|
if (.not. IO_open_file(myUnit,trim(path)//InputFileExtension))&
|
||||||
call IO_error(error_ID=101,ext_msg = trim(path)//InputFileExtension)
|
call IO_error(error_ID=101,ext_msg = trim(path)//InputFileExtension)
|
||||||
|
|
||||||
rewind(myUnit)
|
rewind(myUnit)
|
||||||
read(myUnit,'(a1024)') line
|
read(myUnit,'(a1024)') line
|
||||||
posGeom = IO_stringPos(line,2)
|
posGeom = IO_stringPos(line,2)
|
||||||
|
@ -332,9 +319,6 @@ program DAMASK_spectral
|
||||||
allocate (xi (3,resolution(1)/2+1,resolution(2),resolution(3))); xi =0.0_pReal
|
allocate (xi (3,resolution(1)/2+1,resolution(2),resolution(3))); xi =0.0_pReal
|
||||||
|
|
||||||
wgt = 1.0_pReal/real(resolution(1)*resolution(2)*resolution(3), pReal)
|
wgt = 1.0_pReal/real(resolution(1)*resolution(2)*resolution(3), pReal)
|
||||||
defgradAim = math_I3
|
|
||||||
defgradAimOld = math_I3
|
|
||||||
defgrad_av = math_I3
|
|
||||||
|
|
||||||
! Initialization of CPFEM_general (= constitutive law) and of deformation gradient field
|
! Initialization of CPFEM_general (= constitutive law) and of deformation gradient field
|
||||||
call CPFEM_initAll(bc_temperature(1),1_pInt,1_pInt)
|
call CPFEM_initAll(bc_temperature(1),1_pInt,1_pInt)
|
||||||
|
|
|
@ -27,9 +27,7 @@ MODULE DAMASK_interface
|
||||||
character(len=64), parameter :: FEsolver = 'Spectral'
|
character(len=64), parameter :: FEsolver = 'Spectral'
|
||||||
character(len=5), parameter :: InputFileExtension = '.geom'
|
character(len=5), parameter :: InputFileExtension = '.geom'
|
||||||
character(len=4), parameter :: LogFileExtension = '.log' !until now, we don't have a log file. But IO.f90 requires it
|
character(len=4), parameter :: LogFileExtension = '.log' !until now, we don't have a log file. But IO.f90 requires it
|
||||||
logical :: restartReadFlag
|
|
||||||
character(len=1024) :: geometryParameter,loadcaseParameter
|
character(len=1024) :: geometryParameter,loadcaseParameter
|
||||||
integer(pInt) :: restartReadStep
|
|
||||||
CONTAINS
|
CONTAINS
|
||||||
|
|
||||||
!********************************************************************
|
!********************************************************************
|
||||||
|
@ -41,11 +39,7 @@ subroutine DAMASK_interface_init()
|
||||||
implicit none
|
implicit none
|
||||||
|
|
||||||
character(len=1024) commandLine
|
character(len=1024) commandLine
|
||||||
integer(pInt):: i, start, length
|
integer(pInt):: i, start = 0_pInt, length=0_pInt
|
||||||
|
|
||||||
start = 0_pInt
|
|
||||||
length= 0_pInt
|
|
||||||
restartReadFlag = .false.
|
|
||||||
|
|
||||||
call get_command(commandLine)
|
call get_command(commandLine)
|
||||||
|
|
||||||
|
@ -66,7 +60,6 @@ subroutine DAMASK_interface_init()
|
||||||
geometryParameter = '' ! should be empty
|
geometryParameter = '' ! should be empty
|
||||||
geometryParameter(1:length)=commandLine(start:start+length)
|
geometryParameter(1:length)=commandLine(start:start+length)
|
||||||
|
|
||||||
call get_command(commandLine)
|
|
||||||
do i=1,len(commandLine) ! remove capitals
|
do i=1,len(commandLine) ! remove capitals
|
||||||
if(64<iachar(commandLine(i:i)) .and. iachar(commandLine(i:i))<91) commandLine(i:i) =achar(iachar(commandLine(i:i))+32)
|
if(64<iachar(commandLine(i:i)) .and. iachar(commandLine(i:i))<91) commandLine(i:i) =achar(iachar(commandLine(i:i))+32)
|
||||||
enddo
|
enddo
|
||||||
|
@ -85,24 +78,6 @@ subroutine DAMASK_interface_init()
|
||||||
loadcaseParameter = '' ! should be empty
|
loadcaseParameter = '' ! should be empty
|
||||||
loadcaseParameter(1:length)=commandLine(start:start+length)
|
loadcaseParameter(1:length)=commandLine(start:start+length)
|
||||||
|
|
||||||
do i=1,len(commandLine) ! remove capitals
|
|
||||||
if(64<iachar(commandLine(i:i)) .and. iachar(commandLine(i:i))<91) commandLine(i:i) =achar(iachar(commandLine(i:i))+32)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
start = index(commandLine,'-r',.true.) + 3_pInt ! search for '-r' and jump forward to given name
|
|
||||||
if (index(commandLine,'--restart',.true.)>0) then ! if '--restart' is found, use that (contains '-r')
|
|
||||||
start = index(commandLine,'--restart',.true.) + 10_pInt
|
|
||||||
endif
|
|
||||||
length = index(commandLine(start:len(commandLine)),' ',.false.)
|
|
||||||
|
|
||||||
restartReadStep = 0_pInt
|
|
||||||
if(start/=3_pInt) then ! found -r
|
|
||||||
read(commandLine(start:start+length),'(I12)') restartReadStep
|
|
||||||
restartReadFlag = .true.
|
|
||||||
endif
|
|
||||||
|
|
||||||
if(restartReadStep<1_pInt .and. RestartReadFlag .eq. .true.) stop 'Invalid Restart Parameter, terminating DAMASK' ! Functions from IO.f90 are not available
|
|
||||||
|
|
||||||
!$OMP CRITICAL (write2out)
|
!$OMP CRITICAL (write2out)
|
||||||
write(6,*)
|
write(6,*)
|
||||||
write(6,*) '<<<+- DAMASK_spectral_interface init -+>>>'
|
write(6,*) '<<<+- DAMASK_spectral_interface init -+>>>'
|
||||||
|
@ -110,11 +85,6 @@ subroutine DAMASK_interface_init()
|
||||||
write(6,*)
|
write(6,*)
|
||||||
write(6,*) 'Geometry Parameter: ', trim(geometryParameter)
|
write(6,*) 'Geometry Parameter: ', trim(geometryParameter)
|
||||||
write(6,*) 'Loadcase Parameter: ', trim(loadcaseParameter)
|
write(6,*) 'Loadcase Parameter: ', trim(loadcaseParameter)
|
||||||
if (restartReadFlag) then
|
|
||||||
write(6,*) 'Restart Read: ', restartReadFlag
|
|
||||||
else
|
|
||||||
write(6,'(a,I5)') ' Restart Read at Step: ', restartReadStep
|
|
||||||
endif
|
|
||||||
write(6,*)
|
write(6,*)
|
||||||
!$OMP END CRITICAL (write2out)
|
!$OMP END CRITICAL (write2out)
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
use prec, only: pInt,pReal
|
use prec, only: pInt,pReal
|
||||||
implicit none
|
implicit none
|
||||||
|
|
||||||
integer(pInt) :: cycleCounter = 0_pInt, theInc = -1_pInt
|
integer(pInt) :: cycleCounter = 0_pInt, theInc = -1_pInt, restartReadStep = 0_pInt
|
||||||
real(pReal) :: theTime = 0.0_pReal, theDelta = 0.0_pReal
|
real(pReal) :: theTime = 0.0_pReal, theDelta = 0.0_pReal
|
||||||
logical :: lastIncConverged = .false.,outdatedByNewInc = .false.,outdatedFFN1 = .false.,terminallyIll = .false.
|
logical :: lastIncConverged = .false.,outdatedByNewInc = .false.,outdatedFFN1 = .false.,terminallyIll = .false.
|
||||||
logical :: symmetricSolver = .false.
|
logical :: symmetricSolver = .false.
|
||||||
|
@ -54,16 +54,29 @@
|
||||||
|
|
||||||
integer(pInt), parameter :: fileunit = 222
|
integer(pInt), parameter :: fileunit = 222
|
||||||
integer(pInt), parameter :: maxNchunks = 6
|
integer(pInt), parameter :: maxNchunks = 6
|
||||||
integer(pInt) i
|
integer(pInt):: i, start = 0_pInt, length=0_pInt
|
||||||
integer(pInt), dimension(1+2*maxNchunks) :: positions
|
integer(pInt), dimension(1+2*maxNchunks) :: positions
|
||||||
character(len=64) tag
|
character(len=64) tag
|
||||||
character(len=1024) line
|
character(len=1024) line, commandLine
|
||||||
|
|
||||||
FEmodelGeometry = getModelName()
|
FEmodelGeometry = getModelName()
|
||||||
if (IO_open_inputFile(fileunit,FEmodelGeometry)) then
|
if (IO_open_inputFile(fileunit,FEmodelGeometry)) then
|
||||||
if(trim(FEsolver)=='Spectral') then
|
if(trim(FEsolver)=='Spectral') then
|
||||||
restartWrite = .true.
|
restartWrite = .true.
|
||||||
restartRead = restartReadFlag
|
call get_command(commandLine) ! may contain capitals
|
||||||
|
do i=1,len(commandLine) ! remove capitals
|
||||||
|
if(64<iachar(commandLine(i:i)) .and. iachar(commandLine(i:i))<91) commandLine(i:i) =achar(iachar(commandLine(i:i))+32)
|
||||||
|
enddo
|
||||||
|
start = index(commandLine,'-r',.true.) + 3_pInt ! search for '-r' and jump forward to given name
|
||||||
|
if (index(commandLine,'--restart',.true.)>0) then ! if '--restart' is found, use that (contains '-r')
|
||||||
|
start = index(commandLine,'--restart',.true.) + 10_pInt
|
||||||
|
endif
|
||||||
|
length = index(commandLine(start:len(commandLine)),' ',.false.)
|
||||||
|
if(start/=3_pInt) then ! found at least -r
|
||||||
|
read(commandLine(start:start+length),'(I12)') restartReadStep
|
||||||
|
restartRead = .true.
|
||||||
|
endif
|
||||||
|
if(restartReadStep<0_pInt .and. restartRead .eq. .true.) call IO_error(error_ID=47)
|
||||||
else
|
else
|
||||||
rewind(fileunit)
|
rewind(fileunit)
|
||||||
do
|
do
|
||||||
|
|
|
@ -1166,6 +1166,8 @@ endfunction
|
||||||
msg = 'incomplete information in spectral mesh header'
|
msg = 'incomplete information in spectral mesh header'
|
||||||
case (46)
|
case (46)
|
||||||
msg = 'not a rotation defined for loadcase rotation'
|
msg = 'not a rotation defined for loadcase rotation'
|
||||||
|
case (47)
|
||||||
|
msg = 'invalid restart increment given'
|
||||||
case (50)
|
case (50)
|
||||||
msg = 'writing constitutive output description'
|
msg = 'writing constitutive output description'
|
||||||
case (100)
|
case (100)
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
# Uses OpenMP to parallelise the material subroutines (set number of cores with "export DAMASK_NUM_THREADS=n" to n)
|
# Uses OpenMP to parallelise the material subroutines (set number of cores with "export DAMASK_NUM_THREADS=n" to n)
|
||||||
# Uses linux threads to parallelise fftw3
|
# Uses linux threads to parallelise fftw3
|
||||||
# Besides of the f90 files written at MPIE, the two library files of fftw3 "libfftw3_threads.a" "libfftw3.a" are also needed
|
# Besides of the f90 files written at MPIE, the two library files of fftw3 "libfftw3_threads.a" "libfftw3.a" are also needed
|
||||||
# Install fftw3 (v3.3 is tested) with "./configure --enable-threads --enable-sse2" and "make"; "make install" is not needed
|
# Install fftw3 (v3.3 is tested) with "./configure --enable-threads --enable-sse2 --enable-shared" and "make"; "make install" is not needed
|
||||||
# as long as the two library files "libfftw3_threads.a" "libfftw3.a" are copied to the code/include directory.
|
# as long as the two library files "libfftw3_threads.a" "libfftw3.a" are copied to the /../lib directory.
|
||||||
# Need the AMD Core Math Library to be installed (v 4.4 is tested)
|
# Need the AMD Core Math Library to be installed (v 4.4 is tested)
|
||||||
########################################################################################
|
########################################################################################
|
||||||
# OPTIONS = standard (alternative): meaning
|
# OPTIONS = standard (alternative): meaning
|
||||||
|
|
BIN
lib/libfftw3.a
BIN
lib/libfftw3.a
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
lib/libfftw3f.a
BIN
lib/libfftw3f.a
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
@ -10,8 +10,7 @@
|
||||||
# for the generation of the pyf file:
|
# for the generation of the pyf file:
|
||||||
# f2py -m postprocessingMath -h postprocessingMath.pyf --overwrite-signature postprocessingMath.f90
|
# f2py -m postprocessingMath -h postprocessingMath.pyf --overwrite-signature postprocessingMath.f90
|
||||||
|
|
||||||
# --f90flags="-heap-arrays 500000000" prevents segmentation fault for large arrays
|
# use ./configure --enable-sse2 --enable-shared for the compilation of fftw3.3
|
||||||
# use ./configure --enable-portable-binary --enable-shared for the compilation of fftw3.2.2
|
|
||||||
|
|
||||||
if [[ $# -eq 0 ]]; then
|
if [[ $# -eq 0 ]]; then
|
||||||
wd='.'
|
wd='.'
|
||||||
|
@ -20,10 +19,10 @@ else
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cd $wd
|
cd $wd
|
||||||
rm postprocessingMath.so
|
rm ../../lib/postprocessingMath.so
|
||||||
f2py -c \
|
f2py -c \
|
||||||
postprocessingMath.pyf \
|
postprocessingMath.pyf \
|
||||||
postprocessingMath.f90 \
|
postprocessingMath.f90 \
|
||||||
-lfftw3 \
|
../../lib/libfftw3.a \
|
||||||
-L./
|
-L./
|
||||||
#--f90flags="-heap-arrays 500000000"
|
mv postprocessingMath.so ../../lib/.
|
||||||
|
|
Loading…
Reference in New Issue