mech/plastic only
This commit is contained in:
parent
55d14fbfa8
commit
d92a732dcc
|
@ -13,8 +13,6 @@ module constitutive
|
||||||
use results
|
use results
|
||||||
use lattice
|
use lattice
|
||||||
use discretization
|
use discretization
|
||||||
use geometry_plastic_nonlocal, only: &
|
|
||||||
geometry_plastic_nonlocal_disable
|
|
||||||
use parallelization
|
use parallelization
|
||||||
use HDF5_utilities
|
use HDF5_utilities
|
||||||
use DAMASK_interface
|
use DAMASK_interface
|
||||||
|
@ -169,6 +167,24 @@ module constitutive
|
||||||
end function constitutive_collectDotState
|
end function constitutive_collectDotState
|
||||||
|
|
||||||
|
|
||||||
|
module function constitutive_deltaState(S, Fi, ipc, ip, el, phase, of) result(broken)
|
||||||
|
|
||||||
|
integer, intent(in) :: &
|
||||||
|
ipc, & !< component-ID of integration point
|
||||||
|
ip, & !< integration point
|
||||||
|
el, & !< element
|
||||||
|
phase, &
|
||||||
|
of
|
||||||
|
real(pReal), intent(in), dimension(3,3) :: &
|
||||||
|
S, & !< 2nd Piola Kirchhoff stress
|
||||||
|
Fi !< intermediate deformation gradient
|
||||||
|
logical :: &
|
||||||
|
broken
|
||||||
|
|
||||||
|
|
||||||
|
end function constitutive_deltaState
|
||||||
|
|
||||||
|
|
||||||
module function plastic_active(plastic_label) result(active_plastic)
|
module function plastic_active(plastic_label) result(active_plastic)
|
||||||
character(len=*), intent(in) :: plastic_label
|
character(len=*), intent(in) :: plastic_label
|
||||||
logical, dimension(:), allocatable :: active_plastic
|
logical, dimension(:), allocatable :: active_plastic
|
||||||
|
@ -309,24 +325,6 @@ end function constitutive_collectDotState
|
||||||
end subroutine kinematics_thermal_expansion_LiAndItsTangent
|
end subroutine kinematics_thermal_expansion_LiAndItsTangent
|
||||||
|
|
||||||
|
|
||||||
module subroutine plastic_kinehardening_deltaState(Mp,instance,of)
|
|
||||||
real(pReal), dimension(3,3), intent(in) :: &
|
|
||||||
Mp !< Mandel stress
|
|
||||||
integer, intent(in) :: &
|
|
||||||
instance, &
|
|
||||||
of
|
|
||||||
end subroutine plastic_kinehardening_deltaState
|
|
||||||
|
|
||||||
module subroutine plastic_nonlocal_deltaState(Mp,instance,of,ip,el)
|
|
||||||
real(pReal), dimension(3,3), intent(in) :: &
|
|
||||||
Mp
|
|
||||||
integer, intent(in) :: &
|
|
||||||
instance, &
|
|
||||||
of, &
|
|
||||||
ip, &
|
|
||||||
el
|
|
||||||
end subroutine plastic_nonlocal_deltaState
|
|
||||||
|
|
||||||
module subroutine source_damage_isoBrittle_deltaState(C, Fe, ipc, ip, el)
|
module subroutine source_damage_isoBrittle_deltaState(C, Fe, ipc, ip, el)
|
||||||
integer, intent(in) :: &
|
integer, intent(in) :: &
|
||||||
ipc, & !< component-ID of integration point
|
ipc, & !< component-ID of integration point
|
||||||
|
@ -702,62 +700,6 @@ function constitutive_collectDotState_source(S, ipc, ip, el,phase,of) result(bro
|
||||||
end function constitutive_collectDotState_source
|
end function constitutive_collectDotState_source
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
|
||||||
!> @brief for constitutive models having an instantaneous change of state
|
|
||||||
!> will return false if delta state is not needed/supported by the constitutive model
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
|
||||||
function constitutive_deltaState(S, Fi, ipc, ip, el, phase, of) result(broken)
|
|
||||||
|
|
||||||
integer, intent(in) :: &
|
|
||||||
ipc, & !< component-ID of integration point
|
|
||||||
ip, & !< integration point
|
|
||||||
el, & !< element
|
|
||||||
phase, &
|
|
||||||
of
|
|
||||||
real(pReal), intent(in), dimension(3,3) :: &
|
|
||||||
S, & !< 2nd Piola Kirchhoff stress
|
|
||||||
Fi !< intermediate deformation gradient
|
|
||||||
real(pReal), dimension(3,3) :: &
|
|
||||||
Mp
|
|
||||||
integer :: &
|
|
||||||
instance, &
|
|
||||||
myOffset, &
|
|
||||||
mySize
|
|
||||||
logical :: &
|
|
||||||
broken
|
|
||||||
|
|
||||||
Mp = matmul(matmul(transpose(Fi),Fi),S)
|
|
||||||
instance = phase_plasticityInstance(phase)
|
|
||||||
|
|
||||||
plasticityType: select case (phase_plasticity(phase))
|
|
||||||
|
|
||||||
case (PLASTICITY_KINEHARDENING_ID) plasticityType
|
|
||||||
call plastic_kinehardening_deltaState(Mp,instance,of)
|
|
||||||
broken = any(IEEE_is_NaN(plasticState(phase)%deltaState(:,of)))
|
|
||||||
|
|
||||||
case (PLASTICITY_NONLOCAL_ID) plasticityType
|
|
||||||
call plastic_nonlocal_deltaState(Mp,instance,of,ip,el)
|
|
||||||
broken = any(IEEE_is_NaN(plasticState(phase)%deltaState(:,of)))
|
|
||||||
|
|
||||||
case default
|
|
||||||
broken = .false.
|
|
||||||
|
|
||||||
end select plasticityType
|
|
||||||
|
|
||||||
if(.not. broken) then
|
|
||||||
select case(phase_plasticity(phase))
|
|
||||||
case (PLASTICITY_NONLOCAL_ID,PLASTICITY_KINEHARDENING_ID)
|
|
||||||
|
|
||||||
myOffset = plasticState(phase)%offsetDeltaState
|
|
||||||
mySize = plasticState(phase)%sizeDeltaState
|
|
||||||
plasticState(phase)%state(myOffset + 1:myOffset + mySize,of) = &
|
|
||||||
plasticState(phase)%state(myOffset + 1:myOffset + mySize,of) + plasticState(phase)%deltaState(1:mySize,of)
|
|
||||||
end select
|
|
||||||
endif
|
|
||||||
|
|
||||||
end function constitutive_deltaState
|
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @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
|
||||||
|
|
|
@ -220,6 +220,24 @@ submodule(constitutive) constitutive_mech
|
||||||
el !< current element number
|
el !< current element number
|
||||||
end subroutine plastic_nonlocal_dependentState
|
end subroutine plastic_nonlocal_dependentState
|
||||||
|
|
||||||
|
module subroutine plastic_kinehardening_deltaState(Mp,instance,of)
|
||||||
|
real(pReal), dimension(3,3), intent(in) :: &
|
||||||
|
Mp !< Mandel stress
|
||||||
|
integer, intent(in) :: &
|
||||||
|
instance, &
|
||||||
|
of
|
||||||
|
end subroutine plastic_kinehardening_deltaState
|
||||||
|
|
||||||
|
module subroutine plastic_nonlocal_deltaState(Mp,instance,of,ip,el)
|
||||||
|
real(pReal), dimension(3,3), intent(in) :: &
|
||||||
|
Mp
|
||||||
|
integer, intent(in) :: &
|
||||||
|
instance, &
|
||||||
|
of, &
|
||||||
|
ip, &
|
||||||
|
el
|
||||||
|
end subroutine plastic_nonlocal_deltaState
|
||||||
|
|
||||||
module subroutine plastic_isotropic_results(instance,group)
|
module subroutine plastic_isotropic_results(instance,group)
|
||||||
integer, intent(in) :: instance
|
integer, intent(in) :: instance
|
||||||
character(len=*), intent(in) :: group
|
character(len=*), intent(in) :: group
|
||||||
|
@ -577,6 +595,62 @@ function constitutive_collectDotState(S, FArray, Fi, FpArray, subdt, ipc, ip, el
|
||||||
end function constitutive_collectDotState
|
end function constitutive_collectDotState
|
||||||
|
|
||||||
|
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
!> @brief for constitutive models having an instantaneous change of state
|
||||||
|
!> will return false if delta state is not needed/supported by the constitutive model
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
function constitutive_deltaState(S, Fi, ipc, ip, el, phase, of) result(broken)
|
||||||
|
|
||||||
|
integer, intent(in) :: &
|
||||||
|
ipc, & !< component-ID of integration point
|
||||||
|
ip, & !< integration point
|
||||||
|
el, & !< element
|
||||||
|
phase, &
|
||||||
|
of
|
||||||
|
real(pReal), intent(in), dimension(3,3) :: &
|
||||||
|
S, & !< 2nd Piola Kirchhoff stress
|
||||||
|
Fi !< intermediate deformation gradient
|
||||||
|
real(pReal), dimension(3,3) :: &
|
||||||
|
Mp
|
||||||
|
integer :: &
|
||||||
|
instance, &
|
||||||
|
myOffset, &
|
||||||
|
mySize
|
||||||
|
logical :: &
|
||||||
|
broken
|
||||||
|
|
||||||
|
Mp = matmul(matmul(transpose(Fi),Fi),S)
|
||||||
|
instance = phase_plasticityInstance(phase)
|
||||||
|
|
||||||
|
plasticityType: select case (phase_plasticity(phase))
|
||||||
|
|
||||||
|
case (PLASTICITY_KINEHARDENING_ID) plasticityType
|
||||||
|
call plastic_kinehardening_deltaState(Mp,instance,of)
|
||||||
|
broken = any(IEEE_is_NaN(plasticState(phase)%deltaState(:,of)))
|
||||||
|
|
||||||
|
case (PLASTICITY_NONLOCAL_ID) plasticityType
|
||||||
|
call plastic_nonlocal_deltaState(Mp,instance,of,ip,el)
|
||||||
|
broken = any(IEEE_is_NaN(plasticState(phase)%deltaState(:,of)))
|
||||||
|
|
||||||
|
case default
|
||||||
|
broken = .false.
|
||||||
|
|
||||||
|
end select plasticityType
|
||||||
|
|
||||||
|
if(.not. broken) then
|
||||||
|
select case(phase_plasticity(phase))
|
||||||
|
case (PLASTICITY_NONLOCAL_ID,PLASTICITY_KINEHARDENING_ID)
|
||||||
|
|
||||||
|
myOffset = plasticState(phase)%offsetDeltaState
|
||||||
|
mySize = plasticState(phase)%sizeDeltaState
|
||||||
|
plasticState(phase)%state(myOffset + 1:myOffset + mySize,of) = &
|
||||||
|
plasticState(phase)%state(myOffset + 1:myOffset + mySize,of) + plasticState(phase)%deltaState(1:mySize,of)
|
||||||
|
end select
|
||||||
|
endif
|
||||||
|
|
||||||
|
end function constitutive_deltaState
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------
|
||||||
!> @brief writes plasticity constitutive results to HDF5 output file
|
!> @brief writes plasticity constitutive results to HDF5 output file
|
||||||
!--------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------
|
||||||
|
|
|
@ -10,7 +10,8 @@ submodule(constitutive:constitutive_mech) plastic_nonlocal
|
||||||
IPneighborhood => geometry_plastic_nonlocal_IPneighborhood, &
|
IPneighborhood => geometry_plastic_nonlocal_IPneighborhood, &
|
||||||
IPvolume => geometry_plastic_nonlocal_IPvolume0, &
|
IPvolume => geometry_plastic_nonlocal_IPvolume0, &
|
||||||
IParea => geometry_plastic_nonlocal_IParea0, &
|
IParea => geometry_plastic_nonlocal_IParea0, &
|
||||||
IPareaNormal => geometry_plastic_nonlocal_IPareaNormal0
|
IPareaNormal => geometry_plastic_nonlocal_IPareaNormal0, &
|
||||||
|
geometry_plastic_nonlocal_disable
|
||||||
|
|
||||||
real(pReal), parameter :: &
|
real(pReal), parameter :: &
|
||||||
kB = 1.38e-23_pReal !< Boltzmann constant in J/Kelvin
|
kB = 1.38e-23_pReal !< Boltzmann constant in J/Kelvin
|
||||||
|
@ -195,7 +196,7 @@ module function plastic_nonlocal_init() result(myPlasticity)
|
||||||
call geometry_plastic_nonlocal_disable
|
call geometry_plastic_nonlocal_disable
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
print*, 'Reuber et al., Acta Materialia 71:333–348, 2014'
|
print*, 'Reuber et al., Acta Materialia 71:333–348, 2014'
|
||||||
print*, 'https://doi.org/10.1016/j.actamat.2014.03.012'//IO_EOL
|
print*, 'https://doi.org/10.1016/j.actamat.2014.03.012'//IO_EOL
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue