handle error checking centrally
This commit is contained in:
parent
9e926f1545
commit
6b11d43842
|
@ -327,7 +327,7 @@ module constitutive
|
||||||
constitutive_initialFi, &
|
constitutive_initialFi, &
|
||||||
constitutive_SandItsTangents, &
|
constitutive_SandItsTangents, &
|
||||||
constitutive_collectDotState, &
|
constitutive_collectDotState, &
|
||||||
constitutive_collectDeltaState, &
|
constitutive_deltaState, &
|
||||||
constitutive_results
|
constitutive_results
|
||||||
|
|
||||||
contains
|
contains
|
||||||
|
@ -794,7 +794,7 @@ end function constitutive_collectDotState
|
||||||
!> @brief for constitutive models having an instantaneous change of state
|
!> @brief for constitutive models having an instantaneous change of state
|
||||||
!> will return false if delta state is not needed/supported by the constitutive model
|
!> will return false if delta state is not needed/supported by the constitutive model
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine constitutive_collectDeltaState(S, Fe, Fi, ipc, ip, el)
|
function constitutive_deltaState(S, Fe, Fi, ipc, ip, el) result(broken)
|
||||||
|
|
||||||
integer, intent(in) :: &
|
integer, intent(in) :: &
|
||||||
ipc, & !< component-ID of integration point
|
ipc, & !< component-ID of integration point
|
||||||
|
@ -808,13 +808,18 @@ subroutine constitutive_collectDeltaState(S, Fe, Fi, ipc, ip, el)
|
||||||
Mp
|
Mp
|
||||||
integer :: &
|
integer :: &
|
||||||
i, &
|
i, &
|
||||||
instance, of
|
instance, of, &
|
||||||
|
phase
|
||||||
|
logical :: &
|
||||||
|
broken
|
||||||
|
|
||||||
|
|
||||||
Mp = matmul(matmul(transpose(Fi),Fi),S)
|
Mp = matmul(matmul(transpose(Fi),Fi),S)
|
||||||
of = material_phasememberAt(ipc,ip,el)
|
of = material_phasememberAt(ipc,ip,el)
|
||||||
|
phase = material_phaseAt(ipc,el)
|
||||||
instance = phase_plasticityInstance(material_phaseAt(ipc,el))
|
instance = phase_plasticityInstance(material_phaseAt(ipc,el))
|
||||||
|
|
||||||
plasticityType: select case (phase_plasticity(material_phaseAt(ipc,el)))
|
plasticityType: select case (phase_plasticity(phase))
|
||||||
|
|
||||||
case (PLASTICITY_KINEHARDENING_ID) plasticityType
|
case (PLASTICITY_KINEHARDENING_ID) plasticityType
|
||||||
call plastic_kinehardening_deltaState(Mp,instance,of)
|
call plastic_kinehardening_deltaState(Mp,instance,of)
|
||||||
|
@ -823,10 +828,11 @@ subroutine constitutive_collectDeltaState(S, Fe, Fi, ipc, ip, el)
|
||||||
call plastic_nonlocal_deltaState(Mp,instance,of,ip,el)
|
call plastic_nonlocal_deltaState(Mp,instance,of,ip,el)
|
||||||
|
|
||||||
end select plasticityType
|
end select plasticityType
|
||||||
|
broken = any(IEEE_is_NaN(plasticState(phase)%deltaState(:,of)))
|
||||||
|
|
||||||
sourceLoop: do i = 1, phase_Nsources(material_phaseAt(ipc,el))
|
sourceLoop: do i = 1, phase_Nsources(phase)
|
||||||
|
|
||||||
sourceType: select case (phase_source(i,material_phaseAt(ipc,el)))
|
sourceType: select case (phase_source(i,phase))
|
||||||
|
|
||||||
case (SOURCE_damage_isoBrittle_ID) sourceType
|
case (SOURCE_damage_isoBrittle_ID) sourceType
|
||||||
call source_damage_isoBrittle_deltaState (constitutive_homogenizedC(ipc,ip,el), Fe, &
|
call source_damage_isoBrittle_deltaState (constitutive_homogenizedC(ipc,ip,el), Fe, &
|
||||||
|
@ -834,9 +840,11 @@ subroutine constitutive_collectDeltaState(S, Fe, Fi, ipc, ip, el)
|
||||||
|
|
||||||
end select sourceType
|
end select sourceType
|
||||||
|
|
||||||
|
broken = broken .or. any(IEEE_is_NaN(sourceState(phase)%p(i)%deltaState(:,of)))
|
||||||
|
|
||||||
enddo SourceLoop
|
enddo SourceLoop
|
||||||
|
|
||||||
end subroutine constitutive_collectDeltaState
|
end function constitutive_deltaState
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
|
|
@ -1654,18 +1654,15 @@ logical function stateJump(ipc,ip,el)
|
||||||
c = material_phaseMemberAt(ipc,ip,el)
|
c = material_phaseMemberAt(ipc,ip,el)
|
||||||
p = material_phaseAt(ipc,el)
|
p = material_phaseAt(ipc,el)
|
||||||
|
|
||||||
call constitutive_collectDeltaState(crystallite_S(1:3,1:3,ipc,ip,el), &
|
stateJump = .not. constitutive_deltaState(crystallite_S(1:3,1:3,ipc,ip,el), &
|
||||||
crystallite_Fe(1:3,1:3,ipc,ip,el), &
|
crystallite_Fe(1:3,1:3,ipc,ip,el), &
|
||||||
crystallite_Fi(1:3,1:3,ipc,ip,el), &
|
crystallite_Fi(1:3,1:3,ipc,ip,el), &
|
||||||
ipc,ip,el)
|
ipc,ip,el)
|
||||||
|
if(.not. stateJump) return
|
||||||
|
|
||||||
myOffset = plasticState(p)%offsetDeltaState
|
myOffset = plasticState(p)%offsetDeltaState
|
||||||
mySize = plasticState(p)%sizeDeltaState
|
mySize = plasticState(p)%sizeDeltaState
|
||||||
|
|
||||||
if( any(IEEE_is_NaN(plasticState(p)%deltaState(1:mySize,c)))) then
|
|
||||||
stateJump = .false.
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
|
|
||||||
plasticState(p)%state(myOffset + 1:myOffset + mySize,c) = &
|
plasticState(p)%state(myOffset + 1:myOffset + mySize,c) = &
|
||||||
plasticState(p)%state(myOffset + 1:myOffset + mySize,c) + plasticState(p)%deltaState(1:mySize,c)
|
plasticState(p)%state(myOffset + 1:myOffset + mySize,c) + plasticState(p)%deltaState(1:mySize,c)
|
||||||
|
@ -1673,16 +1670,10 @@ logical function stateJump(ipc,ip,el)
|
||||||
do mySource = 1, phase_Nsources(p)
|
do mySource = 1, phase_Nsources(p)
|
||||||
myOffset = sourceState(p)%p(mySource)%offsetDeltaState
|
myOffset = sourceState(p)%p(mySource)%offsetDeltaState
|
||||||
mySize = sourceState(p)%p(mySource)%sizeDeltaState
|
mySize = sourceState(p)%p(mySource)%sizeDeltaState
|
||||||
if (any(IEEE_is_NaN(sourceState(p)%p(mySource)%deltaState(1:mySize,c)))) then
|
|
||||||
stateJump = .false.
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
sourceState(p)%p(mySource)%state(myOffset + 1: myOffset + mySize,c) = &
|
sourceState(p)%p(mySource)%state(myOffset + 1: myOffset + mySize,c) = &
|
||||||
sourceState(p)%p(mySource)%state(myOffset + 1: myOffset + mySize,c) + sourceState(p)%p(mySource)%deltaState(1:mySize,c)
|
sourceState(p)%p(mySource)%state(myOffset + 1: myOffset + mySize,c) + sourceState(p)%p(mySource)%deltaState(1:mySize,c)
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
stateJump = .true.
|
|
||||||
|
|
||||||
end function stateJump
|
end function stateJump
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue