diff --git a/src/CPFEM2.f90 b/src/CPFEM2.f90 index 757abc9d4..db22748ce 100644 --- a/src/CPFEM2.f90 +++ b/src/CPFEM2.f90 @@ -35,7 +35,8 @@ module CPFEM2 public :: & CPFEM_age, & CPFEM_initAll, & - CPFEM_results + CPFEM_results, & + CPFEM_restartWrite contains @@ -120,15 +121,11 @@ end subroutine CPFEM_init !-------------------------------------------------------------------------------------------------- -!> @brief forwards data after successful increment +!> @brief Forward data after successful increment. !-------------------------------------------------------------------------------------------------- -subroutine CPFEM_age(restartWrite) - - logical :: restartWrite +subroutine CPFEM_age - integer :: i, ph, homog, mySource - character(len=32) :: rankStr, PlasticItem, HomogItem - integer(HID_T) :: fileHandle, groupPlastic, groupHomog + integer :: i, homog, mySource if (iand(debug_level(debug_CPFEM), debug_levelBasic) /= 0) & write(6,'(a)') '<< CPFEM >> aging states' @@ -153,46 +150,52 @@ subroutine CPFEM_age(restartWrite) damageState (homog)%state0 = damageState (homog)%state enddo - if (restartWrite) then - if (iand(debug_level(debug_CPFEM), debug_levelBasic) /= 0) & - write(6,'(a)') '<< CPFEM >> writing restart variables of last converged step to hdf5 file' - - write(rankStr,'(a1,i0)')'_',worldrank - fileHandle = HDF5_openFile(trim(getSolverJobName())//trim(rankStr)//'.hdf5','a') - - call HDF5_write(fileHandle,crystallite_F0, 'convergedF') - call HDF5_write(fileHandle,crystallite_Fp0, 'convergedFp') - call HDF5_write(fileHandle,crystallite_Fi0, 'convergedFi') - call HDF5_write(fileHandle,crystallite_Lp0, 'convergedLp') - call HDF5_write(fileHandle,crystallite_Li0, 'convergedLi') - call HDF5_write(fileHandle,crystallite_S0, 'convergedS') - - groupPlastic = HDF5_addGroup(fileHandle,'PlasticPhases') - do ph = 1,size(phase_plasticity) - write(PlasticItem,*) ph,'_' - call HDF5_write(groupPlastic,plasticState(ph)%state0,trim(PlasticItem)//'convergedStateConst') - enddo - call HDF5_closeGroup(groupPlastic) - - groupHomog = HDF5_addGroup(fileHandle,'HomogStates') - do homog = 1, material_Nhomogenization - write(HomogItem,*) homog,'_' - call HDF5_write(groupHomog,homogState(homog)%state0,trim(HomogItem)//'convergedStateHomog') - enddo - call HDF5_closeGroup(groupHomog) - - call HDF5_closeFile(fileHandle) - restartWrite = .false. - endif - - if (iand(debug_level(debug_CPFEM), debug_levelBasic) /= 0) & - write(6,'(a)') '<< CPFEM >> done aging states' - end subroutine CPFEM_age !-------------------------------------------------------------------------------------------------- -!> @brief triggers writing of the results +!> @brief Store DAMASK restart data. +!-------------------------------------------------------------------------------------------------- +subroutine CPFEM_restartWrite + + integer :: ph, homog + character(len=32) :: rankStr, PlasticItem, HomogItem + integer(HID_T) :: fileHandle, groupPlastic, groupHomog + + if (iand(debug_level(debug_CPFEM), debug_levelBasic) /= 0) & + write(6,'(a)') '<< CPFEM >> writing restart variables of last converged step to hdf5 file' + + write(rankStr,'(a1,i0)')'_',worldrank + fileHandle = HDF5_openFile(trim(getSolverJobName())//trim(rankStr)//'.hdf5','a') + + call HDF5_write(fileHandle,crystallite_F0, 'convergedF') + call HDF5_write(fileHandle,crystallite_Fp0, 'convergedFp') + call HDF5_write(fileHandle,crystallite_Fi0, 'convergedFi') + call HDF5_write(fileHandle,crystallite_Lp0, 'convergedLp') + call HDF5_write(fileHandle,crystallite_Li0, 'convergedLi') + call HDF5_write(fileHandle,crystallite_S0, 'convergedS') + + groupPlastic = HDF5_addGroup(fileHandle,'PlasticPhases') + do ph = 1,size(phase_plasticity) + write(PlasticItem,*) ph,'_' + call HDF5_write(groupPlastic,plasticState(ph)%state0,trim(PlasticItem)//'convergedStateConst') + enddo + call HDF5_closeGroup(groupPlastic) + + groupHomog = HDF5_addGroup(fileHandle,'HomogStates') + do homog = 1, material_Nhomogenization + write(HomogItem,*) homog,'_' + call HDF5_write(groupHomog,homogState(homog)%state0,trim(HomogItem)//'convergedStateHomog') + enddo + call HDF5_closeGroup(groupHomog) + + call HDF5_closeFile(fileHandle) + +end subroutine CPFEM_restartWrite + + +!-------------------------------------------------------------------------------------------------- +!> @brief Trigger writing of results. !-------------------------------------------------------------------------------------------------- subroutine CPFEM_results(inc,time) diff --git a/src/grid/grid_mech_FEM.f90 b/src/grid/grid_mech_FEM.f90 index 6b5b635bf..f470249aa 100644 --- a/src/grid/grid_mech_FEM.f90 +++ b/src/grid/grid_mech_FEM.f90 @@ -301,10 +301,11 @@ subroutine grid_mech_FEM_forward(guess,timeinc,timeinc_old,loadCaseTime,deformat call DMDAVecGetArrayF90(mech_grid,solution_lastInc,u_lastInc,ierr); CHKERRQ(ierr) if (cutBack) then - C_volAvg = C_volAvgLastInc ! QUESTION: where is this required? + C_volAvg = C_volAvgLastInc else - !-------------------------------------------------------------------------------------------------- - ! restart information for spectral solver + call CPFEM_age ! age state and kinematics + call utilities_updateCoords(F) + if (restartWrite) then write(6,'(/,a)') ' writing converged results for restart';flush(6) @@ -323,10 +324,10 @@ subroutine grid_mech_FEM_forward(guess,timeinc,timeinc_old,loadCaseTime,deformat call HDF5_write(fileHandle,C_volAvgLastInc,'C_volAvgLastInc') call HDF5_closeFile(fileHandle) - + + call CPFEM_restartWrite + restartWrite = .false. endif - call CPFEM_age(restartWrite) ! age state and kinematics - call utilities_updateCoords(F) C_volAvgLastInc = C_volAvg @@ -358,7 +359,7 @@ subroutine grid_mech_FEM_forward(guess,timeinc,timeinc_old,loadCaseTime,deformat F_lastInc = F ! winding F forward materialpoint_F0 = reshape(F_lastInc, [3,3,1,product(grid(1:2))*grid3]) ! set starting condition for materialpoint_stressAndItsTangent - + endif !-------------------------------------------------------------------------------------------------- diff --git a/src/grid/grid_mech_spectral_basic.f90 b/src/grid/grid_mech_spectral_basic.f90 index 9eab82775..bee07a80b 100644 --- a/src/grid/grid_mech_spectral_basic.f90 +++ b/src/grid/grid_mech_spectral_basic.f90 @@ -279,11 +279,12 @@ subroutine grid_mech_spectral_basic_forward(guess,timeinc,timeinc_old,loadCaseTi call DMDAVecGetArrayF90(da,solution_vec,F,ierr); CHKERRQ(ierr) if (cutBack) then - C_volAvg = C_volAvgLastInc ! QUESTION: where is this required? - C_minMaxAvg = C_minMaxAvgLastInc ! QUESTION: where is this required? + C_volAvg = C_volAvgLastInc + C_minMaxAvg = C_minMaxAvgLastInc else - !-------------------------------------------------------------------------------------------------- - ! restart information for spectral solver + call CPFEM_age ! age state and kinematics + call utilities_updateCoords(F) + if (restartWrite) then write(6,'(/,a)') ' writing converged results for restart';flush(6) @@ -301,11 +302,11 @@ subroutine grid_mech_spectral_basic_forward(guess,timeinc,timeinc_old,loadCaseTi call HDF5_write(fileHandle,C_minMaxAvg, 'C_minMaxAvg') call HDF5_closeFile(fileHandle) + + call CPFEM_restartWrite + restartWrite = .false. endif - - call CPFEM_age(restartWrite) ! age state and kinematics - call utilities_updateCoords(F) - + C_volAvgLastInc = C_volAvg C_minMaxAvgLastInc = C_minMaxAvg diff --git a/src/grid/grid_mech_spectral_polarisation.f90 b/src/grid/grid_mech_spectral_polarisation.f90 index ce7306510..200c902c9 100644 --- a/src/grid/grid_mech_spectral_polarisation.f90 +++ b/src/grid/grid_mech_spectral_polarisation.f90 @@ -296,15 +296,16 @@ subroutine grid_mech_spectral_polarisation_forward(guess,timeinc,timeinc_old,loa character(len=32) :: rankStr call DMDAVecGetArrayF90(da,solution_vec,FandF_tau,ierr); CHKERRQ(ierr) - F => FandF_tau( 0: 8,:,:,:) - F_tau => FandF_tau( 9:17,:,:,:) + F => FandF_tau(0: 8,:,:,:) + F_tau => FandF_tau(9:17,:,:,:) if (cutBack) then - C_volAvg = C_volAvgLastInc ! QUESTION: where is this required? - C_minMaxAvg = C_minMaxAvgLastInc ! QUESTION: where is this required? + C_volAvg = C_volAvgLastInc + C_minMaxAvg = C_minMaxAvgLastInc else - !-------------------------------------------------------------------------------------------------- - ! restart information for spectral solver + call CPFEM_age ! age state and kinematics + call utilities_updateCoords(F) + if (restartWrite) then write(6,'(/,a)') ' writing converged results for restart';flush(6) @@ -323,11 +324,11 @@ subroutine grid_mech_spectral_polarisation_forward(guess,timeinc,timeinc_old,loa call HDF5_write(fileHandle,C_volAvgLastInc,'C_volAvgLastInc') call HDF5_closeFile(fileHandle) + + call CPFEM_restartWrite + restartWrite = .false. endif - call CPFEM_age(restartWrite) ! age state and kinematics - call utilities_updateCoords(F) - C_volAvgLastInc = C_volAvg C_minMaxAvgLastInc = C_minMaxAvg @@ -357,6 +358,7 @@ subroutine grid_mech_spectral_polarisation_forward(guess,timeinc,timeinc_old,loa F_lastInc = reshape(F, [3,3,grid(1),grid(2),grid3]) ! winding F forward F_tau_lastInc = reshape(F_tau, [3,3,grid(1),grid(2),grid3]) ! winding F_tau forward materialpoint_F0 = reshape(F_lastInc, [3,3,1,product(grid(1:2))*grid3]) ! set starting condition for materialpoint_stressAndItsTangent + endif !--------------------------------------------------------------------------------------------------