From 9425184b5281f9fcc09c01c683716355687eaec3 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Sun, 20 Dec 2020 09:27:37 +0100 Subject: [PATCH] using new functions --- src/CPFEM.f90 | 1 + src/CPFEM2.f90 | 1 + src/constitutive.f90 | 40 ++++++++++++++++++++++++++++++++++++++++ src/crystallite.f90 | 14 +------------- src/homogenization.f90 | 1 + 5 files changed, 44 insertions(+), 13 deletions(-) diff --git a/src/CPFEM.f90 b/src/CPFEM.f90 index a19a70432..6fc58ea0f 100644 --- a/src/CPFEM.f90 +++ b/src/CPFEM.f90 @@ -262,6 +262,7 @@ end subroutine CPFEM_general subroutine CPFEM_forward call crystallite_forward + call constitutive_forward end subroutine CPFEM_forward diff --git a/src/CPFEM2.f90 b/src/CPFEM2.f90 index 54e381d34..325a8791e 100644 --- a/src/CPFEM2.f90 +++ b/src/CPFEM2.f90 @@ -99,6 +99,7 @@ end subroutine CPFEM_restartWrite subroutine CPFEM_forward call crystallite_forward + call constitutive_forward end subroutine CPFEM_forward diff --git a/src/constitutive.f90 b/src/constitutive.f90 index 003e5251b..635f169cd 100644 --- a/src/constitutive.f90 +++ b/src/constitutive.f90 @@ -378,6 +378,8 @@ module constitutive constitutive_thermal_getRateAndItsTangents, & constitutive_results, & constitutive_allocateState, & + constitutive_forward, & + constitutive_restore, & plastic_nonlocal_updateCompatibility, & plastic_active, & source_active, & @@ -864,6 +866,44 @@ subroutine constitutive_allocateState(state, & end subroutine constitutive_allocateState +!-------------------------------------------------------------------------------------------------- +!> @brief Restore data after homog cutback. +!-------------------------------------------------------------------------------------------------- +subroutine constitutive_restore(i,e) + + integer, intent(in) :: & + i, & !< integration point number + e !< element number + integer :: & + c, & !< constituent number + s + + do c = 1,homogenization_Nconstituents(material_homogenizationAt(e)) + do s = 1, phase_Nsources(material_phaseAt(c,e)) + sourceState(material_phaseAt(c,e))%p(s)%state( :,material_phasememberAt(c,i,e)) = & + sourceState(material_phaseAt(c,e))%p(s)%partitionedState0(:,material_phasememberAt(c,i,e)) + enddo + enddo + +end subroutine constitutive_restore + + +!-------------------------------------------------------------------------------------------------- +!> @brief Forward data after successful increment. +! ToDo: Any guessing for the current states possible? +!-------------------------------------------------------------------------------------------------- +subroutine constitutive_forward + + integer :: i, j + + do i = 1, size(sourceState) + do j = 1,phase_Nsources(i) + sourceState(i)%p(j)%state0 = sourceState(i)%p(j)%state + enddo; enddo + +end subroutine constitutive_forward + + !-------------------------------------------------------------------------------------------------- !> @brief writes constitutive results to HDF5 output file !-------------------------------------------------------------------------------------------------- diff --git a/src/crystallite.f90 b/src/crystallite.f90 index 3be9af9ee..6abc31125 100644 --- a/src/crystallite.f90 +++ b/src/crystallite.f90 @@ -515,8 +515,7 @@ subroutine crystallite_restore(i,e,includeL) logical, intent(in) :: & includeL !< protect agains fake cutback integer :: & - c, & !< constituent number - s + c !< constituent number do c = 1,homogenization_Nconstituents(material_homogenizationAt(e)) if (includeL) then @@ -529,10 +528,6 @@ subroutine crystallite_restore(i,e,includeL) plasticState (material_phaseAt(c,e))%state( :,material_phasememberAt(c,i,e)) = & plasticState (material_phaseAt(c,e))%partitionedState0(:,material_phasememberAt(c,i,e)) - do s = 1, phase_Nsources(material_phaseAt(c,e)) - sourceState(material_phaseAt(c,e))%p(s)%state( :,material_phasememberAt(c,i,e)) = & - sourceState(material_phaseAt(c,e))%p(s)%partitionedState0(:,material_phasememberAt(c,i,e)) - enddo enddo end subroutine crystallite_restore @@ -1198,8 +1193,6 @@ subroutine integrateSourceState(g,i,e) zeta real(pReal), dimension(max(constitutive_plasticity_maxSizeDotState,constitutive_source_maxSizeDotState)) :: & r ! state residuum - real(pReal), dimension(constitutive_plasticity_maxSizeDotState,2) :: & - plastic_dotState real(pReal), dimension(constitutive_source_maxSizeDotState,2,maxval(phase_Nsources)) :: source_dotState logical :: & broken @@ -1224,7 +1217,6 @@ subroutine integrateSourceState(g,i,e) iteration: do NiterationState = 1, num%nState - if(nIterationState > 1) plastic_dotState(1:size_pl,2) = plastic_dotState(1:size_pl,1) do s = 1, phase_Nsources(p) if(nIterationState > 1) source_dotState(1:size_so(s),2,s) = source_dotState(1:size_so(s),1,s) source_dotState(1:size_so(s),1,s) = sourceState(p)%p(s)%dotState(:,c) @@ -1651,10 +1643,6 @@ subroutine crystallite_forward do i = 1, size(plasticState) plasticState(i)%state0 = plasticState(i)%state enddo - do i = 1, size(sourceState) - do j = 1,phase_Nsources(i) - sourceState(i)%p(j)%state0 = sourceState(i)%p(j)%state - enddo; enddo do i = 1,size(material_name_homogenization) homogState (i)%state0 = homogState (i)%state damageState (i)%state0 = damageState (i)%state diff --git a/src/homogenization.f90 b/src/homogenization.f90 index 30d9cfb90..4da567e4c 100644 --- a/src/homogenization.f90 +++ b/src/homogenization.f90 @@ -255,6 +255,7 @@ subroutine materialpoint_stressAndItsTangent(dt) subStep(i,e) = num%subStepSizeHomog * subStep(i,e) ! crystallite had severe trouble, so do a significant cutback call crystallite_restore(i,e,subStep(i,e) < 1.0_pReal) + call constitutive_restore(i,e) if(homogState(material_homogenizationAt(e))%sizeState > 0) & homogState(material_homogenizationAt(e))%State( :,material_homogenizationMemberAt(i,e)) = &