modified meaning of restart increment to "restart from" instead of "restart at"
This commit is contained in:
parent
8949d3cb7c
commit
ad1179117d
2
PRIVATE
2
PRIVATE
|
@ -1 +1 @@
|
|||
Subproject commit eb3f941ff55b2a0fe83c8812d0cfb84448dd8aa5
|
||||
Subproject commit 8de4f792a46d98d98418dbf2d3e621b22c13b18a
|
|
@ -407,7 +407,7 @@ program DAMASK_spectral
|
|||
write(resUnit) 'times:', loadCases%time ! one entry per LoadCase
|
||||
write(resUnit) 'logscales:', loadCases%logscale
|
||||
write(resUnit) 'increments:', loadCases%incs ! one entry per LoadCase
|
||||
write(resUnit) 'startingIncrement:', restartInc - 1_pInt ! start with writing out the previous inc
|
||||
write(resUnit) 'startingIncrement:', restartInc ! start with writing out the previous inc
|
||||
write(resUnit) 'eoh'
|
||||
close(resUnit) ! end of header
|
||||
open(newunit=statUnit,file=trim(getSolverWorkingDirectoryName())//trim(getSolverJobName())//&
|
||||
|
@ -482,13 +482,13 @@ program DAMASK_spectral
|
|||
timeinc = time0 * &
|
||||
( (1.0_pReal + loadCases(currentLoadCase)%time/time0 )**(real( inc ,pReal)/&
|
||||
real(loadCases(currentLoadCase)%incs ,pReal))&
|
||||
-(1.0_pReal + loadCases(currentLoadCase)%time/time0 )**(real( (inc-1_pInt),pReal)/&
|
||||
-(1.0_pReal + loadCases(currentLoadCase)%time/time0 )**(real( inc-1_pInt ,pReal)/&
|
||||
real(loadCases(currentLoadCase)%incs ,pReal)))
|
||||
endif
|
||||
endif
|
||||
timeinc = timeinc * real(subStepFactor,pReal)**real(-cutBackLevel,pReal) ! depending on cut back level, decrease time step
|
||||
|
||||
skipping: if (totalIncsCounter < restartInc) then ! not yet at restart inc?
|
||||
skipping: if (totalIncsCounter <= restartInc) then ! not yet at restart inc?
|
||||
time = time + timeinc ! just advance time, skip already performed calculation
|
||||
guess = .true. ! QUESTION:why forced guessing instead of inheriting loadcase preference
|
||||
else skipping
|
||||
|
|
|
@ -79,20 +79,22 @@ subroutine FE_init
|
|||
#include "compilation_info.f90"
|
||||
|
||||
modelName = getSolverJobName()
|
||||
|
||||
#if defined(Spectral) || defined(FEM)
|
||||
|
||||
#ifdef Spectral
|
||||
restartInc = spectralRestartInc
|
||||
if(restartInc <= 0_pInt) then
|
||||
call IO_warning(warning_ID=34_pInt)
|
||||
restartInc = 1_pInt
|
||||
endif
|
||||
restartRead = restartInc > 1_pInt ! only read in if "true" restart requested
|
||||
#elif defined FEM
|
||||
#endif
|
||||
#ifdef FEM
|
||||
restartInc = FEMRestartInc
|
||||
if(restartInc <= 0_pInt) then
|
||||
#endif
|
||||
|
||||
if(restartInc < 0_pInt) then
|
||||
call IO_warning(warning_ID=34_pInt)
|
||||
restartInc = 1_pInt
|
||||
restartInc = 0_pInt
|
||||
endif
|
||||
restartRead = restartInc > 1_pInt
|
||||
restartRead = restartInc > 0_pInt ! only read in if "true" restart requested
|
||||
|
||||
#else
|
||||
call IO_open_inputFile(FILEUNIT,modelName)
|
||||
rewind(FILEUNIT)
|
||||
|
@ -131,13 +133,13 @@ subroutine FE_init
|
|||
do
|
||||
read (FILEUNIT,'(a1024)',END=200) line
|
||||
chunkPos = IO_stringPos(line)
|
||||
if ( IO_lc(IO_stringValue(line,chunkPos,1_pInt)) == 'restart' .and. &
|
||||
IO_lc(IO_stringValue(line,chunkPos,2_pInt)) == 'file' .and. &
|
||||
IO_lc(IO_stringValue(line,chunkPos,3_pInt)) == 'job' .and. &
|
||||
IO_lc(IO_stringValue(line,chunkPos,4_pInt)) == 'id' ) &
|
||||
if ( IO_lc(IO_stringValue(line,chunkPos,1_pInt)) == 'restart' &
|
||||
.and. IO_lc(IO_stringValue(line,chunkPos,2_pInt)) == 'file' &
|
||||
.and. IO_lc(IO_stringValue(line,chunkPos,3_pInt)) == 'job' &
|
||||
.and. IO_lc(IO_stringValue(line,chunkPos,4_pInt)) == 'id' ) &
|
||||
modelName = IO_StringValue(line,chunkPos,6_pInt)
|
||||
enddo
|
||||
#else
|
||||
#else ! QUESTION: is this meaningful for the spectral/FEM case?
|
||||
call IO_open_inputFile(FILEUNIT,modelName)
|
||||
rewind(FILEUNIT)
|
||||
do
|
||||
|
|
|
@ -885,7 +885,8 @@ subroutine constitutive_collectDotState(Tstar_v, FeArray, FpArray, subdt, subfra
|
|||
real(pReal), intent(in), dimension(6) :: &
|
||||
Tstar_v !< 2nd Piola Kirchhoff stress tensor (Mandel)
|
||||
integer(pLongInt) :: &
|
||||
tick, tock, &
|
||||
tick = 0_pLongInt, &
|
||||
tock = 0_pLongInt, &
|
||||
tickrate, &
|
||||
maxticks
|
||||
integer(pInt) :: &
|
||||
|
|
62
src/mesh.f90
62
src/mesh.f90
|
@ -379,30 +379,30 @@ module mesh
|
|||
],pInt)
|
||||
|
||||
|
||||
integer(pInt), dimension(FE_Nelemtypes), parameter, private :: MESH_VTKELEMTYPE = &
|
||||
int([ &
|
||||
5, & ! element 6 (2D 3node 1ip)
|
||||
22, & ! element 125 (2D 6node 3ip)
|
||||
9, & ! element 11 (2D 4node 4ip)
|
||||
23, & ! element 27 (2D 8node 9ip)
|
||||
23, & ! element 54 (2D 8node 4ip)
|
||||
10, & ! element 134 (3D 4node 1ip)
|
||||
10, & ! element 157 (3D 5node 4ip)
|
||||
24, & ! element 127 (3D 10node 4ip)
|
||||
13, & ! element 136 (3D 6node 6ip)
|
||||
12, & ! element 117 (3D 8node 1ip)
|
||||
12, & ! element 7 (3D 8node 8ip)
|
||||
25, & ! element 57 (3D 20node 8ip)
|
||||
25 & ! element 21 (3D 20node 27ip)
|
||||
],pInt)
|
||||
|
||||
integer(pInt), dimension(FE_Ncelltypes), parameter, private :: MESH_VTKCELLTYPE = &
|
||||
int([ &
|
||||
5, & ! (2D 3node)
|
||||
9, & ! (2D 4node)
|
||||
10, & ! (3D 4node)
|
||||
12 & ! (3D 8node)
|
||||
],pInt)
|
||||
! integer(pInt), dimension(FE_Nelemtypes), parameter, private :: MESH_VTKELEMTYPE = &
|
||||
! int([ &
|
||||
! 5, & ! element 6 (2D 3node 1ip)
|
||||
! 22, & ! element 125 (2D 6node 3ip)
|
||||
! 9, & ! element 11 (2D 4node 4ip)
|
||||
! 23, & ! element 27 (2D 8node 9ip)
|
||||
! 23, & ! element 54 (2D 8node 4ip)
|
||||
! 10, & ! element 134 (3D 4node 1ip)
|
||||
! 10, & ! element 157 (3D 5node 4ip)
|
||||
! 24, & ! element 127 (3D 10node 4ip)
|
||||
! 13, & ! element 136 (3D 6node 6ip)
|
||||
! 12, & ! element 117 (3D 8node 1ip)
|
||||
! 12, & ! element 7 (3D 8node 8ip)
|
||||
! 25, & ! element 57 (3D 20node 8ip)
|
||||
! 25 & ! element 21 (3D 20node 27ip)
|
||||
! ],pInt)
|
||||
!
|
||||
! integer(pInt), dimension(FE_Ncelltypes), parameter, private :: MESH_VTKCELLTYPE = &
|
||||
! int([ &
|
||||
! 5, & ! (2D 3node)
|
||||
! 9, & ! (2D 4node)
|
||||
! 10, & ! (3D 4node)
|
||||
! 12 & ! (3D 8node)
|
||||
! ],pInt)
|
||||
|
||||
|
||||
public :: &
|
||||
|
@ -2848,16 +2848,18 @@ use IO, only: &
|
|||
implicit none
|
||||
integer(pInt), intent(in) :: fileUnit
|
||||
|
||||
#ifndef Spectral
|
||||
#ifdef Spectral
|
||||
mesh_periodicSurface = .true.
|
||||
|
||||
end subroutine mesh_get_damaskOptions
|
||||
|
||||
#else
|
||||
|
||||
integer(pInt), allocatable, dimension(:) :: chunkPos
|
||||
integer(pInt) chunk, Nchunks
|
||||
character(len=300) :: line, damaskOption, v
|
||||
character(len=300) :: keyword
|
||||
#endif
|
||||
|
||||
#ifdef Spectral
|
||||
mesh_periodicSurface = .true.
|
||||
#else
|
||||
mesh_periodicSurface = .false.
|
||||
#ifdef Marc4DAMASK
|
||||
keyword = '$damask'
|
||||
|
@ -2886,9 +2888,9 @@ use IO, only: &
|
|||
enddo
|
||||
|
||||
610 FORMAT(A300)
|
||||
#endif
|
||||
|
||||
620 end subroutine mesh_get_damaskOptions
|
||||
#endif
|
||||
|
||||
|
||||
!--------------------------------------------------------------------------------------------------
|
||||
|
|
|
@ -15,7 +15,7 @@ module DAMASK_interface
|
|||
private
|
||||
#include <petsc/finclude/petscsys.h>
|
||||
logical, public, protected :: appendToOutFile = .false. !< Append to existing spectralOut file (in case of restart, not in case of regridding)
|
||||
integer(pInt), public, protected :: spectralRestartInc = 1_pInt !< Increment at which calculation starts
|
||||
integer(pInt), public, protected :: spectralRestartInc = 0_pInt !< Increment at which calculation starts
|
||||
character(len=1024), public, protected :: &
|
||||
geometryFile = '', & !< parameter given for geometry file
|
||||
loadCaseFile = '' !< parameter given for load case file
|
||||
|
@ -167,12 +167,12 @@ subroutine DAMASK_interface_init()
|
|||
write(6,'(a)') ' For further configuration place "numerics.config"'
|
||||
write(6,'(a)')' and "debug.config" in that directory.'
|
||||
write(6,'(/,a)')' --restart XX'
|
||||
write(6,'(a)') ' Reads in total increment No. XX-1 and continues to'
|
||||
write(6,'(a)') ' calculate total increment No. XX.'
|
||||
write(6,'(a)') ' Reads in increment XX and continues with calculating'
|
||||
write(6,'(a)') ' increment XX+1 based on this.'
|
||||
write(6,'(a)') ' Appends to existing results file'
|
||||
write(6,'(a)') ' "NameOfGeom_NameOfLoadFile.spectralOut".'
|
||||
write(6,'(a)') ' Works only if the restart information for total increment'
|
||||
write(6,'(a)') ' No. XX-1 is available in the working directory.'
|
||||
write(6,'(a)') ' Works only if the restart information for increment XX'
|
||||
write(6,'(a)') ' is available in the working directory.'
|
||||
write(6,'(/,a)')' -----------------------------------------------------------------------'
|
||||
write(6,'(a)') ' Help:'
|
||||
write(6,'(/,a)')' --help'
|
||||
|
@ -212,8 +212,8 @@ subroutine DAMASK_interface_init()
|
|||
write(6,'(a,a)') ' Geometry file: ', trim(geometryFile)
|
||||
write(6,'(a,a)') ' Loadcase file: ', trim(loadCaseFile)
|
||||
write(6,'(a,a)') ' Solver job name: ', trim(getSolverJobName())
|
||||
if (SpectralRestartInc > 1_pInt) &
|
||||
write(6,'(a,i6.6)') ' Restart at increment: ', spectralRestartInc
|
||||
if (SpectralRestartInc > 0_pInt) &
|
||||
write(6,'(a,i6.6)') ' Restart from increment: ', spectralRestartInc
|
||||
write(6,'(a,l1,/)') ' Append to result file: ', appendToOutFile
|
||||
|
||||
end subroutine DAMASK_interface_init
|
||||
|
|
|
@ -188,10 +188,10 @@ subroutine AL_init
|
|||
F => FandF_lambda( 0: 8,:,:,:)
|
||||
F_lambda => FandF_lambda( 9:17,:,:,:)
|
||||
|
||||
restart: if (restartInc > 1_pInt) then
|
||||
restart: if (restartInc > 0_pInt) then
|
||||
if (iand(debug_level(debug_spectral),debug_spectralRestart) /= 0) then
|
||||
write(6,'(/,a,'//IO_intOut(restartInc-1_pInt)//',a)') &
|
||||
'reading values of increment ', restartInc-1_pInt, ' from file'
|
||||
write(6,'(/,a,'//IO_intOut(restartInc)//',a)') &
|
||||
'reading values of increment ', restartInc, ' from file'
|
||||
flush(6)
|
||||
endif
|
||||
write(rankStr,'(a1,i0)')'_',worldrank
|
||||
|
@ -207,7 +207,7 @@ subroutine AL_init
|
|||
read (777,rec=1) F_aimDot; close (777)
|
||||
F_aim = reshape(sum(sum(sum(F,dim=4),dim=3),dim=2) * wgt, [3,3]) ! average of F
|
||||
F_aim_lastInc = sum(sum(sum(F_lastInc,dim=5),dim=4),dim=3) * wgt ! average of F_lastInc
|
||||
elseif (restartInc == 1_pInt) then restart
|
||||
elseif (restartInc == 0_pInt) then restart
|
||||
F_lastInc = spread(spread(spread(math_I3,3,grid(1)),4,grid(2)),5,grid3) ! initialize to identity
|
||||
F = reshape(F_lastInc,[9,grid(1),grid(2),grid3])
|
||||
F_lambda = F
|
||||
|
@ -224,10 +224,10 @@ subroutine AL_init
|
|||
nullify(F_lambda)
|
||||
call DMDAVecRestoreArrayF90(da,solution_vec,FandF_lambda,ierr); CHKERRQ(ierr) ! write data back to PETSc
|
||||
|
||||
restartRead: if (restartInc > 1_pInt) then
|
||||
restartRead: if (restartInc > 0_pInt) then
|
||||
if (iand(debug_level(debug_spectral),debug_spectralRestart)/= 0 .and. worldrank == 0_pInt) &
|
||||
write(6,'(/,a,'//IO_intOut(restartInc-1_pInt)//',a)') &
|
||||
'reading more values of increment ', restartInc-1_pInt, ' from file'
|
||||
write(6,'(/,a,'//IO_intOut(restartInc)//',a)') &
|
||||
'reading more values of increment ', restartInc, ' from file'
|
||||
flush(6)
|
||||
call IO_read_realFile(777,'C_volAvg',trim(getSolverJobName()),size(C_volAvg))
|
||||
read (777,rec=1) C_volAvg; close (777)
|
||||
|
|
|
@ -172,10 +172,10 @@ subroutine basicPETSc_init
|
|||
! init fields
|
||||
call DMDAVecGetArrayF90(da,solution_vec,F,ierr); CHKERRQ(ierr) ! get the data out of PETSc to work with
|
||||
|
||||
restart: if (restartInc > 1_pInt) then
|
||||
restart: if (restartInc > 0_pInt) then
|
||||
if (iand(debug_level(debug_spectral),debug_spectralRestart) /= 0) then
|
||||
write(6,'(/,a,'//IO_intOut(restartInc-1_pInt)//',a)') &
|
||||
'reading values of increment ', restartInc-1_pInt, ' from file'
|
||||
write(6,'(/,a,'//IO_intOut(restartInc)//',a)') &
|
||||
'reading values of increment ', restartInc, ' from file'
|
||||
flush(6)
|
||||
endif
|
||||
write(rankStr,'(a1,i0)')'_',worldrank
|
||||
|
@ -187,7 +187,7 @@ subroutine basicPETSc_init
|
|||
read (777,rec=1) F_aimDot; close (777)
|
||||
F_aim = reshape(sum(sum(sum(F,dim=4),dim=3),dim=2) * wgt, [3,3]) ! average of F
|
||||
F_aim_lastInc = sum(sum(sum(F_lastInc,dim=5),dim=4),dim=3) * wgt ! average of F_lastInc
|
||||
elseif (restartInc == 1_pInt) then restart
|
||||
elseif (restartInc == 0_pInt) then restart
|
||||
F_lastInc = spread(spread(spread(math_I3,3,grid(1)),4,grid(2)),5,grid3) ! initialize to identity
|
||||
F = reshape(F_lastInc,[9,grid(1),grid(2),grid3])
|
||||
endif restart
|
||||
|
@ -201,10 +201,10 @@ subroutine basicPETSc_init
|
|||
call DMDAVecRestoreArrayF90(da,solution_vec,F,ierr); CHKERRQ(ierr) ! write data back to PETSc
|
||||
! QUESTION: why not writing back right after reading (l.189)?
|
||||
|
||||
restartRead: if (restartInc > 1_pInt) then ! QUESTION: are those values not calc'ed by constitutiveResponse? why reading from file?
|
||||
restartRead: if (restartInc > 0_pInt) then ! QUESTION: are those values not calc'ed by constitutiveResponse? why reading from file?
|
||||
if (iand(debug_level(debug_spectral),debug_spectralRestart) /= 0 .and. worldrank == 0_pInt) &
|
||||
write(6,'(/,a,'//IO_intOut(restartInc-1_pInt)//',a)') &
|
||||
'reading more values of increment ', restartInc-1_pInt, ' from file'
|
||||
write(6,'(/,a,'//IO_intOut(restartInc)//',a)') &
|
||||
'reading more values of increment ', restartInc, ' from file'
|
||||
flush(6)
|
||||
call IO_read_realFile(777,'C_volAvg',trim(getSolverJobName()),size(C_volAvg))
|
||||
read (777,rec=1) C_volAvg; close (777)
|
||||
|
|
|
@ -185,10 +185,10 @@ subroutine Polarisation_init
|
|||
call DMDAVecGetArrayF90(da,solution_vec,FandF_tau,ierr); CHKERRQ(ierr) ! places pointer on PETSc data
|
||||
F => FandF_tau( 0: 8,:,:,:)
|
||||
F_tau => FandF_tau( 9:17,:,:,:)
|
||||
restart: if (restartInc > 1_pInt) then
|
||||
restart: if (restartInc > 0_pInt) then
|
||||
if (iand(debug_level(debug_spectral),debug_spectralRestart) /= 0) then
|
||||
write(6,'(/,a,'//IO_intOut(restartInc-1_pInt)//',a)') &
|
||||
'reading values of increment ', restartInc - 1_pInt, ' from file'
|
||||
write(6,'(/,a,'//IO_intOut(restartInc)//',a)') &
|
||||
'reading values of increment ', restartInc, ' from file'
|
||||
flush(6)
|
||||
endif
|
||||
write(rankStr,'(a1,i0)')'_',worldrank
|
||||
|
@ -204,7 +204,7 @@ subroutine Polarisation_init
|
|||
read (777,rec=1) F_aimDot; close (777)
|
||||
F_aim = reshape(sum(sum(sum(F,dim=4),dim=3),dim=2) * wgt, [3,3]) ! average of F
|
||||
F_aim_lastInc = sum(sum(sum(F_lastInc,dim=5),dim=4),dim=3) * wgt ! average of F_lastInc
|
||||
elseif (restartInc == 1_pInt) then restart
|
||||
elseif (restartInc == 0_pInt) then restart
|
||||
F_lastInc = spread(spread(spread(math_I3,3,grid(1)),4,grid(2)),5,grid3) ! initialize to identity
|
||||
F = reshape(F_lastInc,[9,grid(1),grid(2),grid3])
|
||||
F_tau = 2.0_pReal*F
|
||||
|
@ -221,10 +221,10 @@ subroutine Polarisation_init
|
|||
nullify(F_tau)
|
||||
call DMDAVecRestoreArrayF90(da,solution_vec,FandF_tau,ierr); CHKERRQ(ierr) ! write data back to PETSc
|
||||
|
||||
restartRead: if (restartInc > 1_pInt) then
|
||||
restartRead: if (restartInc > 0_pInt) then
|
||||
if (iand(debug_level(debug_spectral),debug_spectralRestart)/= 0 .and. worldrank == 0_pInt) &
|
||||
write(6,'(/,a,'//IO_intOut(restartInc-1_pInt)//',a)') &
|
||||
'reading more values of increment ', restartInc-1_pInt, ' from file'
|
||||
write(6,'(/,a,'//IO_intOut(restartInc)//',a)') &
|
||||
'reading more values of increment ', restartInc, ' from file'
|
||||
flush(6)
|
||||
call IO_read_realFile(777,'C_volAvg',trim(getSolverJobName()),size(C_volAvg))
|
||||
read (777,rec=1) C_volAvg; close (777)
|
||||
|
|
|
@ -153,9 +153,9 @@ contains
|
|||
|
||||
!--------------------------------------------------------------------------------------------------
|
||||
!> @brief allocates all neccessary fields, sets debug flags, create plans for FFTW
|
||||
!> @details Sets the debug levels for general, divergence, restart and FFTW from the biwise coding
|
||||
!> @details Sets the debug levels for general, divergence, restart, and FFTW from the bitwise coding
|
||||
!> provided by the debug module to logicals.
|
||||
!> Allocates all fields used by FFTW and create the corresponding plans depending on the debug
|
||||
!> Allocate all fields used by FFTW and create the corresponding plans depending on the debug
|
||||
!> level chosen.
|
||||
!> Initializes FFTW.
|
||||
!--------------------------------------------------------------------------------------------------
|
||||
|
@ -377,10 +377,10 @@ end subroutine utilities_init
|
|||
|
||||
|
||||
!--------------------------------------------------------------------------------------------------
|
||||
!> @brief updates references stiffness and potentially precalculated gamma operator
|
||||
!> @brief updates reference stiffness and potentially precalculated gamma operator
|
||||
!> @details Sets the current reference stiffness to the stiffness given as an argument.
|
||||
!> If the gamma operator is precalculated, it is calculated with this stiffness.
|
||||
!> In case of a on-the-fly calculation, only the reference stiffness is updated.
|
||||
!> In case of an on-the-fly calculation, only the reference stiffness is updated.
|
||||
!> Also writes out the current reference stiffness for restart.
|
||||
!--------------------------------------------------------------------------------------------------
|
||||
subroutine utilities_updateGamma(C,saveReference)
|
||||
|
|
Loading…
Reference in New Issue