Merge branch 'development' into noPostResults
This commit is contained in:
commit
9e801928b0
|
@ -42,7 +42,7 @@ contains
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief call (thread safe) all module initializations
|
!> @brief call all module initializations
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine CPFEM_initAll
|
subroutine CPFEM_initAll
|
||||||
|
|
||||||
|
@ -69,28 +69,23 @@ subroutine CPFEM_initAll
|
||||||
|
|
||||||
end subroutine CPFEM_initAll
|
end subroutine CPFEM_initAll
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief allocate the arrays defined in module CPFEM and initialize them
|
!> @brief allocate the arrays defined in module CPFEM and initialize them
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine CPFEM_init
|
subroutine CPFEM_init
|
||||||
|
|
||||||
integer :: ph,homog
|
integer :: i
|
||||||
character(len=1024) :: rankStr, PlasticItem, HomogItem
|
integer(HID_T) :: fileHandle, groupHandle
|
||||||
integer(HID_T) :: fileHandle, groupPlasticID, groupHomogID
|
character(len=pStringLen) :: fileName, datasetName
|
||||||
|
|
||||||
write(6,'(/,a)') ' <<<+- CPFEM init -+>>>'
|
write(6,'(/,a)') ' <<<+- CPFEM init -+>>>'; flush(6)
|
||||||
flush(6)
|
|
||||||
|
|
||||||
! *** restore the last converged values of each essential variable
|
|
||||||
if (interface_restartInc > 0) then
|
if (interface_restartInc > 0) then
|
||||||
if (iand(debug_level(debug_CPFEM), debug_levelExtensive) /= 0) then
|
write(6,'(/,a,i0,a)') ' reading restart information of increment ', interface_restartInc, ' from file'
|
||||||
write(6,'(a)') '<< CPFEM >> restored state variables of last converged step from hdf5 file'
|
|
||||||
flush(6)
|
|
||||||
endif
|
|
||||||
|
|
||||||
write(rankStr,'(a1,i0)')'_',worldrank
|
write(fileName,'(a,i0,a)') trim(getSolverJobName())//'_',worldrank,'.hdf5'
|
||||||
|
fileHandle = HDF5_openFile(fileName)
|
||||||
fileHandle = HDF5_openFile(trim(getSolverJobName())//trim(rankStr)//'.hdf5')
|
|
||||||
|
|
||||||
call HDF5_read(fileHandle,crystallite_F0, 'F')
|
call HDF5_read(fileHandle,crystallite_F0, 'F')
|
||||||
call HDF5_read(fileHandle,crystallite_Fp0,'Fp')
|
call HDF5_read(fileHandle,crystallite_Fp0,'Fp')
|
||||||
|
@ -99,19 +94,19 @@ subroutine CPFEM_init
|
||||||
call HDF5_read(fileHandle,crystallite_Li0,'Li')
|
call HDF5_read(fileHandle,crystallite_Li0,'Li')
|
||||||
call HDF5_read(fileHandle,crystallite_S0, 'S')
|
call HDF5_read(fileHandle,crystallite_S0, 'S')
|
||||||
|
|
||||||
groupPlasticID = HDF5_openGroup(fileHandle,'constituent')
|
groupHandle = HDF5_openGroup(fileHandle,'constituent')
|
||||||
do ph = 1,size(phase_plasticity)
|
do i = 1,size(phase_plasticity)
|
||||||
write(PlasticItem,*) ph,'_'
|
write(datasetName,'(i0,a)') i,'_omega_plastic'
|
||||||
call HDF5_read(groupPlasticID,plasticState(ph)%state0,trim(PlasticItem)//'omega_plastic')
|
call HDF5_read(groupHandle,plasticState(i)%state0,datasetName)
|
||||||
enddo
|
enddo
|
||||||
call HDF5_closeGroup(groupPlasticID)
|
call HDF5_closeGroup(groupHandle)
|
||||||
|
|
||||||
groupHomogID = HDF5_openGroup(fileHandle,'materialpoint')
|
groupHandle = HDF5_openGroup(fileHandle,'materialpoint')
|
||||||
do homog = 1, material_Nhomogenization
|
do i = 1, material_Nhomogenization
|
||||||
write(HomogItem,*) homog,'_'
|
write(datasetName,'(i0,a)') i,'_omega_homogenization'
|
||||||
call HDF5_read(groupHomogID,homogState(homog)%state0, trim(HomogItem)//'omega_homogenization')
|
call HDF5_read(groupHandle,homogState(i)%state0,datasetName)
|
||||||
enddo
|
enddo
|
||||||
call HDF5_closeGroup(groupHomogID)
|
call HDF5_closeGroup(groupHandle)
|
||||||
|
|
||||||
call HDF5_closeFile(fileHandle)
|
call HDF5_closeFile(fileHandle)
|
||||||
endif
|
endif
|
||||||
|
@ -125,7 +120,7 @@ end subroutine CPFEM_init
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine CPFEM_forward
|
subroutine CPFEM_forward
|
||||||
|
|
||||||
integer :: i, homog, mySource
|
integer :: i, j
|
||||||
|
|
||||||
if (iand(debug_level(debug_CPFEM), debug_levelBasic) /= 0) &
|
if (iand(debug_level(debug_CPFEM), debug_levelBasic) /= 0) &
|
||||||
write(6,'(a)') '<< CPFEM >> aging states'
|
write(6,'(a)') '<< CPFEM >> aging states'
|
||||||
|
@ -141,32 +136,31 @@ subroutine CPFEM_forward
|
||||||
plasticState(i)%state0 = plasticState(i)%state
|
plasticState(i)%state0 = plasticState(i)%state
|
||||||
enddo
|
enddo
|
||||||
do i = 1, size(sourceState)
|
do i = 1, size(sourceState)
|
||||||
do mySource = 1,phase_Nsources(i)
|
do j = 1,phase_Nsources(i)
|
||||||
sourceState(i)%p(mySource)%state0 = sourceState(i)%p(mySource)%state
|
sourceState(i)%p(j)%state0 = sourceState(i)%p(j)%state
|
||||||
enddo; enddo
|
enddo; enddo
|
||||||
do homog = 1, material_Nhomogenization
|
do i = 1, material_Nhomogenization
|
||||||
homogState (homog)%state0 = homogState (homog)%state
|
homogState (i)%state0 = homogState (i)%state
|
||||||
thermalState (homog)%state0 = thermalState (homog)%state
|
thermalState(i)%state0 = thermalState(i)%state
|
||||||
damageState (homog)%state0 = damageState (homog)%state
|
damageState (i)%state0 = damageState (i)%state
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
end subroutine CPFEM_forward
|
end subroutine CPFEM_forward
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief Write current constitutive variables for restart to file.
|
!> @brief Write current restart information (Field and constitutive data) to file.
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine CPFEM_restartWrite
|
subroutine CPFEM_restartWrite
|
||||||
|
|
||||||
integer :: ph, homog
|
integer :: i
|
||||||
character(len=32) :: rankStr, PlasticItem, HomogItem
|
integer(HID_T) :: fileHandle, groupHandle
|
||||||
integer(HID_T) :: fileHandle, groupPlastic, groupHomog
|
character(len=pStringLen) :: fileName, datasetName
|
||||||
|
|
||||||
|
write(6,'(a)') ' writing field and constitutive data required for restart to file';flush(6)
|
||||||
|
|
||||||
write(6,'(a)') ' writing constitutive data required for restart to file';flush(6)
|
write(fileName,'(a,i0,a)') trim(getSolverJobName())//'_',worldrank,'.hdf5'
|
||||||
|
fileHandle = HDF5_openFile(fileName,'a')
|
||||||
write(rankStr,'(a1,i0)')'_',worldrank
|
|
||||||
fileHandle = HDF5_openFile(trim(getSolverJobName())//trim(rankStr)//'.hdf5','a')
|
|
||||||
|
|
||||||
call HDF5_write(fileHandle,crystallite_partionedF,'F')
|
call HDF5_write(fileHandle,crystallite_partionedF,'F')
|
||||||
call HDF5_write(fileHandle,crystallite_Fp, 'Fp')
|
call HDF5_write(fileHandle,crystallite_Fp, 'Fp')
|
||||||
|
@ -175,19 +169,19 @@ subroutine CPFEM_restartWrite
|
||||||
call HDF5_write(fileHandle,crystallite_Li, 'Li')
|
call HDF5_write(fileHandle,crystallite_Li, 'Li')
|
||||||
call HDF5_write(fileHandle,crystallite_S, 'S')
|
call HDF5_write(fileHandle,crystallite_S, 'S')
|
||||||
|
|
||||||
groupPlastic = HDF5_addGroup(fileHandle,'constituent')
|
groupHandle = HDF5_addGroup(fileHandle,'constituent')
|
||||||
do ph = 1,size(phase_plasticity)
|
do i = 1,size(phase_plasticity)
|
||||||
write(PlasticItem,*) ph,'_'
|
write(datasetName,'(i0,a)') i,'_omega_plastic'
|
||||||
call HDF5_write(groupPlastic,plasticState(ph)%state,trim(PlasticItem)//'omega_plastic')
|
call HDF5_write(groupHandle,plasticState(i)%state,datasetName)
|
||||||
enddo
|
enddo
|
||||||
call HDF5_closeGroup(groupPlastic)
|
call HDF5_closeGroup(groupHandle)
|
||||||
|
|
||||||
groupHomog = HDF5_addGroup(fileHandle,'materialpoint')
|
groupHandle = HDF5_addGroup(fileHandle,'materialpoint')
|
||||||
do homog = 1, material_Nhomogenization
|
do i = 1, material_Nhomogenization
|
||||||
write(HomogItem,*) homog,'_'
|
write(datasetName,'(i0,a)') i,'_omega_homogenization'
|
||||||
call HDF5_write(groupHomog,homogState(homog)%state,trim(HomogItem)//'omega_homogenization')
|
call HDF5_write(groupHandle,homogState(i)%state,datasetName)
|
||||||
enddo
|
enddo
|
||||||
call HDF5_closeGroup(groupHomog)
|
call HDF5_closeGroup(groupHandle)
|
||||||
|
|
||||||
call HDF5_closeFile(fileHandle)
|
call HDF5_closeFile(fileHandle)
|
||||||
|
|
||||||
|
@ -208,7 +202,7 @@ subroutine CPFEM_results(inc,time)
|
||||||
call crystallite_results
|
call crystallite_results
|
||||||
call homogenization_results
|
call homogenization_results
|
||||||
call discretization_results
|
call discretization_results
|
||||||
call results_removeLink('current') ! ToDo: put this into closeJobFile
|
call results_removeLink('current') ! ToDo: put this into closeJobFile?
|
||||||
call results_closeJobFile
|
call results_closeJobFile
|
||||||
|
|
||||||
end subroutine CPFEM_results
|
end subroutine CPFEM_results
|
||||||
|
|
|
@ -544,6 +544,7 @@ end function IO_lc
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief returns format string for integer values without leading zeros
|
!> @brief returns format string for integer values without leading zeros
|
||||||
|
!> @details deprecated, use '(i0)' format specifier
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
pure function IO_intOut(intToPrint)
|
pure function IO_intOut(intToPrint)
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ module config
|
||||||
config_numerics, &
|
config_numerics, &
|
||||||
config_debug
|
config_debug
|
||||||
|
|
||||||
character(len=64), dimension(:), allocatable, public, protected :: &
|
character(len=pStringLen), dimension(:), allocatable, public, protected :: &
|
||||||
config_name_phase, & !< name of each phase
|
config_name_phase, & !< name of each phase
|
||||||
config_name_homogenization, & !< name of each homogenization
|
config_name_homogenization, & !< name of each homogenization
|
||||||
config_name_crystallite, & !< name of each crystallite setting
|
config_name_crystallite, & !< name of each crystallite setting
|
||||||
|
@ -54,7 +54,7 @@ subroutine config_init
|
||||||
character(len=pStringLen), dimension(:), allocatable :: fileContent
|
character(len=pStringLen), dimension(:), allocatable :: fileContent
|
||||||
logical :: fileExists
|
logical :: fileExists
|
||||||
|
|
||||||
write(6,'(/,a)') ' <<<+- config init -+>>>'
|
write(6,'(/,a)') ' <<<+- config init -+>>>'; flush(6)
|
||||||
|
|
||||||
verbose = iand(debug_level(debug_material),debug_levelBasic) /= 0
|
verbose = iand(debug_level(debug_material),debug_levelBasic) /= 0
|
||||||
|
|
||||||
|
@ -214,7 +214,7 @@ end function read_materialConfig
|
||||||
subroutine parse_materialConfig(sectionNames,part,line, &
|
subroutine parse_materialConfig(sectionNames,part,line, &
|
||||||
fileContent)
|
fileContent)
|
||||||
|
|
||||||
character(len=64), allocatable, dimension(:), intent(out) :: sectionNames
|
character(len=pStringLen), allocatable, dimension(:), intent(out) :: sectionNames
|
||||||
type(tPartitionedStringList), allocatable, dimension(:), intent(inout) :: part
|
type(tPartitionedStringList), allocatable, dimension(:), intent(inout) :: part
|
||||||
character(len=pStringLen), intent(inout) :: line
|
character(len=pStringLen), intent(inout) :: line
|
||||||
character(len=pStringLen), dimension(:), intent(in) :: fileContent
|
character(len=pStringLen), dimension(:), intent(in) :: fileContent
|
||||||
|
@ -222,7 +222,7 @@ subroutine parse_materialConfig(sectionNames,part,line, &
|
||||||
integer, allocatable, dimension(:) :: partPosition !< position of [] tags + last line in section
|
integer, allocatable, dimension(:) :: partPosition !< position of [] tags + last line in section
|
||||||
integer :: i, j
|
integer :: i, j
|
||||||
logical :: echo
|
logical :: echo
|
||||||
character(len=pStringLen) :: section_ID
|
character(len=pStringLen) :: sectionName
|
||||||
|
|
||||||
echo = .false.
|
echo = .false.
|
||||||
|
|
||||||
|
@ -246,8 +246,8 @@ subroutine parse_materialConfig(sectionNames,part,line, &
|
||||||
partPosition = [partPosition, i] ! needed when actually storing content
|
partPosition = [partPosition, i] ! needed when actually storing content
|
||||||
|
|
||||||
do i = 1, size(partPosition) -1
|
do i = 1, size(partPosition) -1
|
||||||
write(section_ID,'('//IO_intOut(size(partPosition))//')') i
|
write(sectionName,'(i0,a,a)') i,'_',trim(IO_getTag(fileContent(partPosition(i)),'[',']'))
|
||||||
sectionNames(i) = trim(section_ID)//'_'//trim(adjustl(IO_getTag(fileContent(partPosition(i)),'[',']')))
|
sectionNames(i) = sectionName
|
||||||
do j = partPosition(i) + 1, partPosition(i+1) -1
|
do j = partPosition(i) + 1, partPosition(i+1) -1
|
||||||
call part(i)%add(trim(adjustl(fileContent(j))))
|
call part(i)%add(trim(adjustl(fileContent(j))))
|
||||||
enddo
|
enddo
|
||||||
|
|
|
@ -93,7 +93,7 @@ program DAMASK_spectral
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! init DAMASK (all modules)
|
! init DAMASK (all modules)
|
||||||
call CPFEM_initAll
|
call CPFEM_initAll
|
||||||
write(6,'(/,a)') ' <<<+- DAMASK_spectral init -+>>>'
|
write(6,'(/,a)') ' <<<+- DAMASK_spectral init -+>>>'; flush(6)
|
||||||
|
|
||||||
write(6,'(/,a)') ' Shanthraj et al., Handbook of Mechanics of Materials, 2019'
|
write(6,'(/,a)') ' Shanthraj et al., Handbook of Mechanics of Materials, 2019'
|
||||||
write(6,'(a)') ' https://doi.org/10.1007/978-981-10-6855-3_80'
|
write(6,'(a)') ' https://doi.org/10.1007/978-981-10-6855-3_80'
|
||||||
|
@ -382,19 +382,12 @@ program DAMASK_spectral
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! report begin of new step
|
! report begin of new step
|
||||||
write(6,'(/,a)') ' ###########################################################################'
|
write(6,'(/,a)') ' ###########################################################################'
|
||||||
write(6,'(1x,a,es12.5'//&
|
write(6,'(1x,a,es12.5,6(a,i0))') &
|
||||||
',a,'//IO_intOut(inc) //',a,'//IO_intOut(loadCases(currentLoadCase)%incs)//&
|
|
||||||
',a,'//IO_intOut(stepFraction) //',a,'//IO_intOut(subStepFactor**cutBackLevel)//&
|
|
||||||
',a,'//IO_intOut(currentLoadCase)//',a,'//IO_intOut(size(loadCases))//')') &
|
|
||||||
'Time', time, &
|
'Time', time, &
|
||||||
's: Increment ', inc,'/',loadCases(currentLoadCase)%incs,&
|
's: Increment ', inc,'/',loadCases(currentLoadCase)%incs,&
|
||||||
'-', stepFraction,'/',subStepFactor**cutBackLevel,&
|
'-', stepFraction,'/',subStepFactor**cutBackLevel,&
|
||||||
' of load case ', currentLoadCase,'/',size(loadCases)
|
' of load case ', currentLoadCase,'/',size(loadCases)
|
||||||
write(incInfo,&
|
write(incInfo,'(4(a,i0))') &
|
||||||
'(a,'//IO_intOut(totalIncsCounter)//&
|
|
||||||
',a,'//IO_intOut(sum(loadCases%incs))//&
|
|
||||||
',a,'//IO_intOut(stepFraction)//&
|
|
||||||
',a,'//IO_intOut(subStepFactor**cutBackLevel)//')') &
|
|
||||||
'Increment ',totalIncsCounter,'/',sum(loadCases%incs),&
|
'Increment ',totalIncsCounter,'/',sum(loadCases%incs),&
|
||||||
'-', stepFraction,'/',subStepFactor**cutBackLevel
|
'-', stepFraction,'/',subStepFactor**cutBackLevel
|
||||||
flush(6)
|
flush(6)
|
||||||
|
@ -478,11 +471,9 @@ program DAMASK_spectral
|
||||||
cutBackLevel = max(0, cutBackLevel - 1) ! try half number of subincs next inc
|
cutBackLevel = max(0, cutBackLevel - 1) ! try half number of subincs next inc
|
||||||
|
|
||||||
if (all(solres(:)%converged)) then
|
if (all(solres(:)%converged)) then
|
||||||
write(6,'(/,a,'//IO_intOut(totalIncsCounter)//',a)') & ! report converged inc
|
write(6,'(/,a,i0,a)') ' increment ', totalIncsCounter, ' converged'
|
||||||
' increment ', totalIncsCounter, ' converged'
|
|
||||||
else
|
else
|
||||||
write(6,'(/,a,'//IO_intOut(totalIncsCounter)//',a)') & ! report non-converged inc
|
write(6,'(/,a,i0,a)') ' increment ', totalIncsCounter, ' NOT converged'
|
||||||
' increment ', totalIncsCounter, ' NOT converged'
|
|
||||||
endif; flush(6)
|
endif; flush(6)
|
||||||
|
|
||||||
if (mod(inc,loadCases(currentLoadCase)%outputFrequency) == 0) then ! at output frequency
|
if (mod(inc,loadCases(currentLoadCase)%outputFrequency) == 0) then ! at output frequency
|
||||||
|
|
|
@ -98,12 +98,12 @@ subroutine grid_mech_FEM_init
|
||||||
PetscErrorCode :: ierr
|
PetscErrorCode :: ierr
|
||||||
integer :: rank
|
integer :: rank
|
||||||
integer(HID_T) :: fileHandle, groupHandle
|
integer(HID_T) :: fileHandle, groupHandle
|
||||||
character(len=1024) :: rankStr
|
character(len=pStringLen) :: fileName
|
||||||
real(pReal), dimension(3,3,3,3) :: devNull
|
real(pReal), dimension(3,3,3,3) :: devNull
|
||||||
PetscScalar, pointer, dimension(:,:,:,:) :: &
|
PetscScalar, pointer, dimension(:,:,:,:) :: &
|
||||||
u_current,u_lastInc
|
u_current,u_lastInc
|
||||||
|
|
||||||
write(6,'(/,a)') ' <<<+- grid_mech_FEM init -+>>>'
|
write(6,'(/,a)') ' <<<+- grid_mech_FEM init -+>>>'; flush(6)
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! set default and user defined options for PETSc
|
! set default and user defined options for PETSc
|
||||||
|
@ -184,11 +184,10 @@ subroutine grid_mech_FEM_init
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! init fields
|
! init fields
|
||||||
restartRead: if (interface_restartInc > 0) then
|
restartRead: if (interface_restartInc > 0) then
|
||||||
write(6,'(/,a,'//IO_intOut(interface_restartInc)//',a)') &
|
write(6,'(/,a,i0,a)') ' reading restart data of increment ', interface_restartInc, ' from file'
|
||||||
'reading values of increment ', interface_restartInc, ' from file'
|
|
||||||
|
|
||||||
write(rankStr,'(a1,i0)')'_',worldrank
|
write(fileName,'(a,a,i0,a)') trim(getSolverJobName()),'_',worldrank,'.hdf5'
|
||||||
fileHandle = HDF5_openFile(trim(getSolverJobName())//trim(rankStr)//'.hdf5')
|
fileHandle = HDF5_openFile(fileName)
|
||||||
groupHandle = HDF5_openGroup(fileHandle,'solver')
|
groupHandle = HDF5_openGroup(fileHandle,'solver')
|
||||||
|
|
||||||
call HDF5_read(groupHandle,F_aim, 'F_aim')
|
call HDF5_read(groupHandle,F_aim, 'F_aim')
|
||||||
|
@ -214,8 +213,7 @@ subroutine grid_mech_FEM_init
|
||||||
CHKERRQ(ierr)
|
CHKERRQ(ierr)
|
||||||
|
|
||||||
restartRead2: if (interface_restartInc > 0) then
|
restartRead2: if (interface_restartInc > 0) then
|
||||||
write(6,'(/,a,'//IO_intOut(interface_restartInc)//',a)') &
|
write(6,'(/,a,i0,a)') ' reading more restart data of increment ', interface_restartInc, ' from file'
|
||||||
'reading more values of increment ', interface_restartInc, ' from file'
|
|
||||||
call HDF5_read(groupHandle,C_volAvg, 'C_volAvg')
|
call HDF5_read(groupHandle,C_volAvg, 'C_volAvg')
|
||||||
call HDF5_read(groupHandle,C_volAvgLastInc,'C_volAvgLastInc')
|
call HDF5_read(groupHandle,C_volAvgLastInc,'C_volAvgLastInc')
|
||||||
|
|
||||||
|
@ -355,7 +353,7 @@ end subroutine grid_mech_FEM_forward
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief Age
|
!> @brief Age
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine grid_mech_FEM_updateCoords()
|
subroutine grid_mech_FEM_updateCoords
|
||||||
|
|
||||||
call utilities_updateCoords(F)
|
call utilities_updateCoords(F)
|
||||||
|
|
||||||
|
@ -365,20 +363,20 @@ end subroutine grid_mech_FEM_updateCoords
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief Write current solver and constitutive data for restart to file
|
!> @brief Write current solver and constitutive data for restart to file
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine grid_mech_FEM_restartWrite()
|
subroutine grid_mech_FEM_restartWrite
|
||||||
|
|
||||||
PetscErrorCode :: ierr
|
PetscErrorCode :: ierr
|
||||||
PetscScalar, dimension(:,:,:,:), pointer :: u_current,u_lastInc
|
|
||||||
integer(HID_T) :: fileHandle, groupHandle
|
integer(HID_T) :: fileHandle, groupHandle
|
||||||
character(len=32) :: rankStr
|
PetscScalar, dimension(:,:,:,:), pointer :: u_current,u_lastInc
|
||||||
|
character(len=pStringLen) :: fileName
|
||||||
|
|
||||||
call DMDAVecGetArrayF90(mech_grid,solution_current,u_current,ierr); CHKERRQ(ierr)
|
call DMDAVecGetArrayF90(mech_grid,solution_current,u_current,ierr); CHKERRQ(ierr)
|
||||||
call DMDAVecGetArrayF90(mech_grid,solution_lastInc,u_lastInc,ierr); CHKERRQ(ierr)
|
call DMDAVecGetArrayF90(mech_grid,solution_lastInc,u_lastInc,ierr); CHKERRQ(ierr)
|
||||||
|
|
||||||
write(6,'(a)') ' writing solver data required for restart to file';flush(6)
|
write(6,'(a)') ' writing solver data required for restart to file'; flush(6)
|
||||||
|
|
||||||
write(rankStr,'(a1,i0)')'_',worldrank
|
write(fileName,'(a,a,i0,a)') trim(getSolverJobName()),'_',worldrank,'.hdf5'
|
||||||
fileHandle = HDF5_openFile(trim(getSolverJobName())//trim(rankStr)//'.hdf5','w')
|
fileHandle = HDF5_openFile(fileName,'w')
|
||||||
groupHandle = HDF5_addGroup(fileHandle,'solver')
|
groupHandle = HDF5_addGroup(fileHandle,'solver')
|
||||||
|
|
||||||
call HDF5_write(groupHandle,F_aim, 'F_aim')
|
call HDF5_write(groupHandle,F_aim, 'F_aim')
|
||||||
|
|
|
@ -96,9 +96,9 @@ subroutine grid_mech_spectral_basic_init
|
||||||
PetscInt, dimension(worldsize) :: localK
|
PetscInt, dimension(worldsize) :: localK
|
||||||
integer(HID_T) :: fileHandle, groupHandle
|
integer(HID_T) :: fileHandle, groupHandle
|
||||||
integer :: fileUnit
|
integer :: fileUnit
|
||||||
character(len=1024) :: rankStr
|
character(len=pStringLen) :: fileName
|
||||||
|
|
||||||
write(6,'(/,a)') ' <<<+- grid_mech_spectral_basic init -+>>>'
|
write(6,'(/,a)') ' <<<+- grid_mech_spectral_basic init -+>>>'; flush(6)
|
||||||
|
|
||||||
write(6,'(/,a)') ' Eisenlohr et al., International Journal of Plasticity 46:37–53, 2013'
|
write(6,'(/,a)') ' Eisenlohr et al., International Journal of Plasticity 46:37–53, 2013'
|
||||||
write(6,'(a)') ' https://doi.org/10.1016/j.ijplas.2012.09.012'
|
write(6,'(a)') ' https://doi.org/10.1016/j.ijplas.2012.09.012'
|
||||||
|
@ -151,11 +151,10 @@ subroutine grid_mech_spectral_basic_init
|
||||||
call DMDAVecGetArrayF90(da,solution_vec,F,ierr); CHKERRQ(ierr) ! places pointer on PETSc data
|
call DMDAVecGetArrayF90(da,solution_vec,F,ierr); CHKERRQ(ierr) ! places pointer on PETSc data
|
||||||
|
|
||||||
restartRead: if (interface_restartInc > 0) then
|
restartRead: if (interface_restartInc > 0) then
|
||||||
write(6,'(/,a,'//IO_intOut(interface_restartInc)//',a)') &
|
write(6,'(/,a,i0,a)') ' reading restart data of increment ', interface_restartInc, ' from file'
|
||||||
' reading values of increment ', interface_restartInc, ' from file'
|
|
||||||
|
|
||||||
write(rankStr,'(a1,i0)')'_',worldrank
|
write(fileName,'(a,a,i0,a)') trim(getSolverJobName()),'_',worldrank,'.hdf5'
|
||||||
fileHandle = HDF5_openFile(trim(getSolverJobName())//trim(rankStr)//'.hdf5')
|
fileHandle = HDF5_openFile(fileName)
|
||||||
groupHandle = HDF5_openGroup(fileHandle,'solver')
|
groupHandle = HDF5_openGroup(fileHandle,'solver')
|
||||||
|
|
||||||
call HDF5_read(groupHandle,F_aim, 'F_aim')
|
call HDF5_read(groupHandle,F_aim, 'F_aim')
|
||||||
|
@ -177,8 +176,7 @@ subroutine grid_mech_spectral_basic_init
|
||||||
call DMDAVecRestoreArrayF90(da,solution_vec,F,ierr); CHKERRQ(ierr) ! deassociate pointer
|
call DMDAVecRestoreArrayF90(da,solution_vec,F,ierr); CHKERRQ(ierr) ! deassociate pointer
|
||||||
|
|
||||||
restartRead2: if (interface_restartInc > 0) then
|
restartRead2: if (interface_restartInc > 0) then
|
||||||
write(6,'(/,a,'//IO_intOut(interface_restartInc)//',a)') &
|
write(6,'(/,a,i0,a)') ' reading more restart data of increment ', interface_restartInc, ' from file'
|
||||||
'reading more values of increment ', interface_restartInc, ' from file'
|
|
||||||
call HDF5_read(groupHandle,C_volAvg, 'C_volAvg')
|
call HDF5_read(groupHandle,C_volAvg, 'C_volAvg')
|
||||||
call HDF5_read(groupHandle,C_volAvgLastInc,'C_volAvgLastInc')
|
call HDF5_read(groupHandle,C_volAvgLastInc,'C_volAvgLastInc')
|
||||||
|
|
||||||
|
@ -320,7 +318,7 @@ end subroutine grid_mech_spectral_basic_forward
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief Age
|
!> @brief Age
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine grid_mech_spectral_basic_updateCoords()
|
subroutine grid_mech_spectral_basic_updateCoords
|
||||||
|
|
||||||
PetscErrorCode :: ierr
|
PetscErrorCode :: ierr
|
||||||
PetscScalar, dimension(:,:,:,:), pointer :: F
|
PetscScalar, dimension(:,:,:,:), pointer :: F
|
||||||
|
@ -335,19 +333,19 @@ end subroutine grid_mech_spectral_basic_updateCoords
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief Write current solver and constitutive data for restart to file
|
!> @brief Write current solver and constitutive data for restart to file
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine grid_mech_spectral_basic_restartWrite()
|
subroutine grid_mech_spectral_basic_restartWrite
|
||||||
|
|
||||||
PetscErrorCode :: ierr
|
PetscErrorCode :: ierr
|
||||||
PetscScalar, dimension(:,:,:,:), pointer :: F
|
|
||||||
integer(HID_T) :: fileHandle, groupHandle
|
integer(HID_T) :: fileHandle, groupHandle
|
||||||
character(len=32) :: rankStr
|
PetscScalar, dimension(:,:,:,:), pointer :: F
|
||||||
|
character(len=pStringLen) :: fileName
|
||||||
|
|
||||||
call DMDAVecGetArrayF90(da,solution_vec,F,ierr); CHKERRQ(ierr)
|
call DMDAVecGetArrayF90(da,solution_vec,F,ierr); CHKERRQ(ierr)
|
||||||
|
|
||||||
write(6,'(a)') ' writing solver data required for restart to file';flush(6)
|
write(6,'(a)') ' writing solver data required for restart to file'; flush(6)
|
||||||
|
|
||||||
write(rankStr,'(a1,i0)')'_',worldrank
|
write(fileName,'(a,a,i0,a)') trim(getSolverJobName()),'_',worldrank,'.hdf5'
|
||||||
fileHandle = HDF5_openFile(trim(getSolverJobName())//trim(rankStr)//'.hdf5','w')
|
fileHandle = HDF5_openFile(fileName,'w')
|
||||||
groupHandle = HDF5_addGroup(fileHandle,'solver')
|
groupHandle = HDF5_addGroup(fileHandle,'solver')
|
||||||
|
|
||||||
call HDF5_write(groupHandle,F_aim, 'F_aim')
|
call HDF5_write(groupHandle,F_aim, 'F_aim')
|
||||||
|
|
|
@ -105,9 +105,9 @@ subroutine grid_mech_spectral_polarisation_init
|
||||||
PetscInt, dimension(worldsize) :: localK
|
PetscInt, dimension(worldsize) :: localK
|
||||||
integer(HID_T) :: fileHandle, groupHandle
|
integer(HID_T) :: fileHandle, groupHandle
|
||||||
integer :: fileUnit
|
integer :: fileUnit
|
||||||
character(len=1024) :: rankStr
|
character(len=pStringLen) :: fileName
|
||||||
|
|
||||||
write(6,'(/,a)') ' <<<+- grid_mech_spectral_polarisation init -+>>>'
|
write(6,'(/,a)') ' <<<+- grid_mech_spectral_polarisation init -+>>>'; flush(6)
|
||||||
|
|
||||||
write(6,'(/,a)') ' Shanthraj et al., International Journal of Plasticity 66:31–45, 2015'
|
write(6,'(/,a)') ' Shanthraj et al., International Journal of Plasticity 66:31–45, 2015'
|
||||||
write(6,'(a)') ' https://doi.org/10.1016/j.ijplas.2014.02.006'
|
write(6,'(a)') ' https://doi.org/10.1016/j.ijplas.2014.02.006'
|
||||||
|
@ -161,11 +161,10 @@ subroutine grid_mech_spectral_polarisation_init
|
||||||
F_tau => FandF_tau(9:17,:,:,:)
|
F_tau => FandF_tau(9:17,:,:,:)
|
||||||
|
|
||||||
restartRead: if (interface_restartInc > 0) then
|
restartRead: if (interface_restartInc > 0) then
|
||||||
write(6,'(/,a,'//IO_intOut(interface_restartInc)//',a)') &
|
write(6,'(/,a,i0,a)') ' reading restart data of increment ', interface_restartInc, ' from file'
|
||||||
' reading values of increment ', interface_restartInc, ' from file'
|
|
||||||
|
|
||||||
write(rankStr,'(a1,i0)')'_',worldrank
|
write(fileName,'(a,a,i0,a)') trim(getSolverJobName()),'_',worldrank,'.hdf5'
|
||||||
fileHandle = HDF5_openFile(trim(getSolverJobName())//trim(rankStr)//'.hdf5')
|
fileHandle = HDF5_openFile(fileName)
|
||||||
groupHandle = HDF5_openGroup(fileHandle,'solver')
|
groupHandle = HDF5_openGroup(fileHandle,'solver')
|
||||||
|
|
||||||
call HDF5_read(groupHandle,F_aim, 'F_aim')
|
call HDF5_read(groupHandle,F_aim, 'F_aim')
|
||||||
|
@ -191,8 +190,7 @@ subroutine grid_mech_spectral_polarisation_init
|
||||||
call DMDAVecRestoreArrayF90(da,solution_vec,FandF_tau,ierr); CHKERRQ(ierr) ! deassociate pointer
|
call DMDAVecRestoreArrayF90(da,solution_vec,FandF_tau,ierr); CHKERRQ(ierr) ! deassociate pointer
|
||||||
|
|
||||||
restartRead2: if (interface_restartInc > 0) then
|
restartRead2: if (interface_restartInc > 0) then
|
||||||
write(6,'(/,a,'//IO_intOut(interface_restartInc)//',a)') &
|
write(6,'(/,a,i0,a)') ' reading more restart data of increment ', interface_restartInc, ' from file'
|
||||||
' reading more values of increment ', interface_restartInc, ' from file'
|
|
||||||
call HDF5_read(groupHandle,C_volAvg, 'C_volAvg')
|
call HDF5_read(groupHandle,C_volAvg, 'C_volAvg')
|
||||||
call HDF5_read(groupHandle,C_volAvgLastInc,'C_volAvgLastInc')
|
call HDF5_read(groupHandle,C_volAvgLastInc,'C_volAvgLastInc')
|
||||||
|
|
||||||
|
@ -364,7 +362,7 @@ end subroutine grid_mech_spectral_polarisation_forward
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief Age
|
!> @brief Age
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine grid_mech_spectral_polarisation_updateCoords()
|
subroutine grid_mech_spectral_polarisation_updateCoords
|
||||||
|
|
||||||
PetscErrorCode :: ierr
|
PetscErrorCode :: ierr
|
||||||
PetscScalar, dimension(:,:,:,:), pointer :: FandF_tau
|
PetscScalar, dimension(:,:,:,:), pointer :: FandF_tau
|
||||||
|
@ -379,21 +377,21 @@ end subroutine grid_mech_spectral_polarisation_updateCoords
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief Write current solver and constitutive data for restart to file
|
!> @brief Write current solver and constitutive data for restart to file
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine grid_mech_spectral_polarisation_restartWrite()
|
subroutine grid_mech_spectral_polarisation_restartWrite
|
||||||
|
|
||||||
PetscErrorCode :: ierr
|
PetscErrorCode :: ierr
|
||||||
PetscScalar, dimension(:,:,:,:), pointer :: FandF_tau, F, F_tau
|
|
||||||
integer(HID_T) :: fileHandle, groupHandle
|
integer(HID_T) :: fileHandle, groupHandle
|
||||||
character(len=32) :: rankStr
|
PetscScalar, dimension(:,:,:,:), pointer :: FandF_tau, F, F_tau
|
||||||
|
character(len=pStringLen) :: fileName
|
||||||
|
|
||||||
call DMDAVecGetArrayF90(da,solution_vec,FandF_tau,ierr); CHKERRQ(ierr)
|
call DMDAVecGetArrayF90(da,solution_vec,FandF_tau,ierr); CHKERRQ(ierr)
|
||||||
F => FandF_tau(0: 8,:,:,:)
|
F => FandF_tau(0: 8,:,:,:)
|
||||||
F_tau => FandF_tau(9:17,:,:,:)
|
F_tau => FandF_tau(9:17,:,:,:)
|
||||||
|
|
||||||
write(6,'(a)') ' writing solver data required for restart to file';flush(6)
|
write(6,'(a)') ' writing solver data required for restart to file'; flush(6)
|
||||||
|
|
||||||
write(rankStr,'(a1,i0)')'_',worldrank
|
write(fileName,'(a,a,i0,a)') trim(getSolverJobName()),'_',worldrank,'.hdf5'
|
||||||
fileHandle = HDF5_openFile(trim(getSolverJobName())//trim(rankStr)//'.hdf5','w')
|
fileHandle = HDF5_openFile(fileName,'w')
|
||||||
groupHandle = HDF5_addGroup(fileHandle,'solver')
|
groupHandle = HDF5_addGroup(fileHandle,'solver')
|
||||||
|
|
||||||
call HDF5_write(groupHandle,F_aim, 'F_aim')
|
call HDF5_write(groupHandle,F_aim, 'F_aim')
|
||||||
|
|
|
@ -1123,7 +1123,7 @@ subroutine utilities_saveReferenceStiffness
|
||||||
fileUnit
|
fileUnit
|
||||||
|
|
||||||
if (worldrank == 0) then
|
if (worldrank == 0) then
|
||||||
write(6,'(a)') ' writing reference stiffness data required for restart to file';flush(6)
|
write(6,'(a)') ' writing reference stiffness data required for restart to file'; flush(6)
|
||||||
fileUnit = IO_open_jobFile_binary('C_ref','w')
|
fileUnit = IO_open_jobFile_binary('C_ref','w')
|
||||||
write(fileUnit) C_ref
|
write(fileUnit) C_ref
|
||||||
close(fileUnit)
|
close(fileUnit)
|
||||||
|
|
|
@ -73,7 +73,7 @@ program DAMASK_FEM
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! init DAMASK (all modules)
|
! init DAMASK (all modules)
|
||||||
call CPFEM_initAll
|
call CPFEM_initAll
|
||||||
write(6,'(/,a)') ' <<<+- DAMASK_FEM init -+>>>'
|
write(6,'(/,a)') ' <<<+- DAMASK_FEM init -+>>>'; flush(6)
|
||||||
|
|
||||||
! reading basic information from load case file and allocate data structure containing load cases
|
! reading basic information from load case file and allocate data structure containing load cases
|
||||||
call DMGetDimension(geomMesh,dimPlex,ierr); CHKERRA(ierr) !< dimension of mesh (2D or 3D)
|
call DMGetDimension(geomMesh,dimPlex,ierr); CHKERRA(ierr) !< dimension of mesh (2D or 3D)
|
||||||
|
@ -296,19 +296,12 @@ program DAMASK_FEM
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! report begin of new step
|
! report begin of new step
|
||||||
write(6,'(/,a)') ' ###########################################################################'
|
write(6,'(/,a)') ' ###########################################################################'
|
||||||
write(6,'(1x,a,es12.5'//&
|
write(6,'(1x,a,es12.5,6(a,i0))')&
|
||||||
',a,'//IO_intOut(inc)//',a,'//IO_intOut(loadCases(currentLoadCase)%incs)//&
|
|
||||||
',a,'//IO_intOut(stepFraction)//',a,'//IO_intOut(subStepFactor**cutBackLevel)//&
|
|
||||||
',a,'//IO_intOut(currentLoadCase)//',a,'//IO_intOut(size(loadCases))//')') &
|
|
||||||
'Time', time, &
|
'Time', time, &
|
||||||
's: Increment ', inc, '/', loadCases(currentLoadCase)%incs,&
|
's: Increment ', inc, '/', loadCases(currentLoadCase)%incs,&
|
||||||
'-', stepFraction, '/', subStepFactor**cutBackLevel,&
|
'-', stepFraction, '/', subStepFactor**cutBackLevel,&
|
||||||
' of load case ', currentLoadCase,'/',size(loadCases)
|
' of load case ', currentLoadCase,'/',size(loadCases)
|
||||||
write(incInfo,&
|
write(incInfo,'(4(a,i0))') &
|
||||||
'(a,'//IO_intOut(totalIncsCounter)//&
|
|
||||||
',a,'//IO_intOut(sum(loadCases%incs))//&
|
|
||||||
',a,'//IO_intOut(stepFraction)//&
|
|
||||||
',a,'//IO_intOut(subStepFactor**cutBackLevel)//')') &
|
|
||||||
'Increment ',totalIncsCounter,'/',sum(loadCases%incs),&
|
'Increment ',totalIncsCounter,'/',sum(loadCases%incs),&
|
||||||
'-',stepFraction, '/', subStepFactor**cutBackLevel
|
'-',stepFraction, '/', subStepFactor**cutBackLevel
|
||||||
flush(6)
|
flush(6)
|
||||||
|
@ -373,11 +366,9 @@ program DAMASK_FEM
|
||||||
cutBackLevel = max(0, cutBackLevel - 1) ! try half number of subincs next inc
|
cutBackLevel = max(0, cutBackLevel - 1) ! try half number of subincs next inc
|
||||||
|
|
||||||
if (all(solres(:)%converged)) then
|
if (all(solres(:)%converged)) then
|
||||||
write(6,'(/,a,'//IO_intOut(totalIncsCounter)//',a)') & ! report converged inc
|
write(6,'(/,a,i0,a)') ' increment ', totalIncsCounter, ' converged'
|
||||||
' increment ', totalIncsCounter, ' converged'
|
|
||||||
else
|
else
|
||||||
write(6,'(/,a,'//IO_intOut(totalIncsCounter)//',a)') & ! report non-converged inc
|
write(6,'(/,a,i0,a)') ' increment ', totalIncsCounter, ' NOT converged'
|
||||||
' increment ', totalIncsCounter, ' NOT converged'
|
|
||||||
endif; flush(6)
|
endif; flush(6)
|
||||||
|
|
||||||
if (mod(inc,loadCases(currentLoadCase)%outputFrequency) == 0) then ! at output frequency
|
if (mod(inc,loadCases(currentLoadCase)%outputFrequency) == 0) then ! at output frequency
|
||||||
|
|
|
@ -454,7 +454,7 @@ subroutine results_mapping_constituent(phaseAt,memberAt,label)
|
||||||
|
|
||||||
integer, dimension(:,:), intent(in) :: phaseAt !< phase section at (constituent,element)
|
integer, dimension(:,:), intent(in) :: phaseAt !< phase section at (constituent,element)
|
||||||
integer, dimension(:,:,:), intent(in) :: memberAt !< phase member at (constituent,IP,element)
|
integer, dimension(:,:,:), intent(in) :: memberAt !< phase member at (constituent,IP,element)
|
||||||
character(len=64), dimension(:), intent(in) :: label !< label of each phase section
|
character(len=pStringLen), dimension(:), intent(in) :: label !< label of each phase section
|
||||||
|
|
||||||
integer, dimension(size(memberAt,1),size(memberAt,2),size(memberAt,3)) :: &
|
integer, dimension(size(memberAt,1),size(memberAt,2),size(memberAt,3)) :: &
|
||||||
phaseAt_perIP, &
|
phaseAt_perIP, &
|
||||||
|
@ -589,7 +589,7 @@ subroutine results_mapping_materialpoint(homogenizationAt,memberAt,label)
|
||||||
|
|
||||||
integer, dimension(:), intent(in) :: homogenizationAt !< homogenization section at (element)
|
integer, dimension(:), intent(in) :: homogenizationAt !< homogenization section at (element)
|
||||||
integer, dimension(:,:), intent(in) :: memberAt !< homogenization member at (IP,element)
|
integer, dimension(:,:), intent(in) :: memberAt !< homogenization member at (IP,element)
|
||||||
character(len=64), dimension(:), intent(in) :: label !< label of each homogenization section
|
character(len=pStringLen), dimension(:), intent(in) :: label !< label of each homogenization section
|
||||||
|
|
||||||
integer, dimension(size(memberAt,1),size(memberAt,2)) :: &
|
integer, dimension(size(memberAt,1),size(memberAt,2)) :: &
|
||||||
homogenizationAt_perIP, &
|
homogenizationAt_perIP, &
|
||||||
|
|
Loading…
Reference in New Issue