introduced keyword elasticity in material.config
added constitutive_TandItsTangent and special version constitutive_hooke_TandItsTangent those are however not yet used and need to be tested
This commit is contained in:
parent
9cbbb7cab5
commit
36edb4dd9f
|
@ -90,6 +90,7 @@ crystallite 2
|
||||||
|
|
||||||
[Aluminum_J2isotropic]
|
[Aluminum_J2isotropic]
|
||||||
|
|
||||||
|
elaticity hooke
|
||||||
plasticity j2
|
plasticity j2
|
||||||
|
|
||||||
(output) flowstress
|
(output) flowstress
|
||||||
|
@ -108,6 +109,7 @@ atol_resistance 1
|
||||||
|
|
||||||
[Aluminum_phenopowerlaw]
|
[Aluminum_phenopowerlaw]
|
||||||
# slip only
|
# slip only
|
||||||
|
elaticity hooke
|
||||||
plasticity phenopowerlaw
|
plasticity phenopowerlaw
|
||||||
|
|
||||||
(output) resistance_slip
|
(output) resistance_slip
|
||||||
|
@ -152,6 +154,7 @@ atol_resistance 1
|
||||||
|
|
||||||
[Aluminum_nonlocal]
|
[Aluminum_nonlocal]
|
||||||
|
|
||||||
|
elaticity hooke
|
||||||
plasticity nonlocal
|
plasticity nonlocal
|
||||||
/nonlocal/
|
/nonlocal/
|
||||||
|
|
||||||
|
@ -265,6 +268,7 @@ interaction_SlipSlip 0.122 0.122 0.625 0.07 0.137 0.122 # Dislocation i
|
||||||
|
|
||||||
|
|
||||||
[BCC_Ferrite]
|
[BCC_Ferrite]
|
||||||
|
elaticity hooke
|
||||||
plasticity phenopowerlaw
|
plasticity phenopowerlaw
|
||||||
lattice_structure bcc
|
lattice_structure bcc
|
||||||
Nslip 12 0 0 0 # per family
|
Nslip 12 0 0 0 # per family
|
||||||
|
@ -329,6 +333,7 @@ atol_resistance 1
|
||||||
|
|
||||||
[TWIP steel FeMnC]
|
[TWIP steel FeMnC]
|
||||||
|
|
||||||
|
elaticity hooke
|
||||||
plasticity dislotwin
|
plasticity dislotwin
|
||||||
|
|
||||||
#(output) edge_density
|
#(output) edge_density
|
||||||
|
|
|
@ -57,6 +57,8 @@ integer(pInt) :: &
|
||||||
constitutive_maxSizeState, &
|
constitutive_maxSizeState, &
|
||||||
constitutive_maxSizePostResults
|
constitutive_maxSizePostResults
|
||||||
|
|
||||||
|
character (len=*), parameter, public :: constitutive_hooke_label = 'hooke'
|
||||||
|
|
||||||
contains
|
contains
|
||||||
!****************************************
|
!****************************************
|
||||||
!* - constitutive_init
|
!* - constitutive_init
|
||||||
|
@ -67,6 +69,8 @@ contains
|
||||||
!* - constitutive_collectDotState
|
!* - constitutive_collectDotState
|
||||||
!* - constitutive_collectDotTemperature
|
!* - constitutive_collectDotTemperature
|
||||||
!* - constitutive_postResults
|
!* - constitutive_postResults
|
||||||
|
!* - constitutive_TandItsTangent
|
||||||
|
!* - constitutive_hooke_TandItsTangent
|
||||||
!****************************************
|
!****************************************
|
||||||
|
|
||||||
|
|
||||||
|
@ -816,4 +820,74 @@ end select
|
||||||
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
subroutine constitutive_TandItsTangent(T, dT_dFe, Fe, ipc, ip, el)
|
||||||
|
!************************************************************************
|
||||||
|
!* This subroutine returns the 2nd Piola-Kirchhoff stress tensor and *
|
||||||
|
!* its tangent with respect to the elastic deformation gradient *
|
||||||
|
!* OUTPUT: *
|
||||||
|
!* - Tstar : 2nd Piola-Kirchhoff stress tensor *
|
||||||
|
!* - dTstar_dFe : derivative of 2nd Piola-Kirchhoff stress tensor *
|
||||||
|
!* with respect to the elastic deformation gradient *
|
||||||
|
!* INPUT: *
|
||||||
|
!* - Fe : elastic deformation gradient *
|
||||||
|
!* - ipc : component-ID of current integration point *
|
||||||
|
!* - ip : current integration point *
|
||||||
|
!* - el : current element *
|
||||||
|
!************************************************************************
|
||||||
|
use prec, only: pReal
|
||||||
|
use material, only: phase_elasticity,material_phase
|
||||||
|
|
||||||
|
implicit none
|
||||||
|
integer(pInt) :: ipc,ip,el
|
||||||
|
real(pReal), dimension(3,3) :: T, Fe
|
||||||
|
real(pReal), dimension(3,3,3,3) :: dT_dFe
|
||||||
|
|
||||||
|
select case (phase_elasticity(material_phase(ipc,ip,el)))
|
||||||
|
|
||||||
|
case (constitutive_hooke_label)
|
||||||
|
call constitutive_hooke_TstarAndItsTangent(T, dT_dFe, Fe, ipc, ip, el)
|
||||||
|
|
||||||
|
end select
|
||||||
|
|
||||||
|
return
|
||||||
|
endsubroutine constitutive_TandItsTangent
|
||||||
|
|
||||||
|
subroutine constitutive_hooke_TandItsTangent(T, dT_dFe, Fe, g, i, e)
|
||||||
|
!************************************************************************
|
||||||
|
!* This subroutine returns the 2nd Piola-Kirchhoff stress tensor and *
|
||||||
|
!* its tangent with respect to the elastic deformation gradient *
|
||||||
|
!* OUTPUT: *
|
||||||
|
!* - Tstar : 2nd Piola-Kirchhoff stress tensor *
|
||||||
|
!* - dTstar_dFe : derivative of 2nd Piola-Kirchhoff stress tensor *
|
||||||
|
!* with respect to the elastic deformation gradient *
|
||||||
|
!* INPUT: *
|
||||||
|
!* - Fe : elastic deformation gradient *
|
||||||
|
!* - ipc : component-ID of current integration point *
|
||||||
|
!* - ip : current integration point *
|
||||||
|
!* - el : current element *
|
||||||
|
!************************************************************************
|
||||||
|
use prec, only: p_vec
|
||||||
|
use math
|
||||||
|
|
||||||
|
implicit none
|
||||||
|
!* Definition of variables
|
||||||
|
integer(pInt) g, i, e, p, o
|
||||||
|
real(pReal), dimension(3,3) :: T, Fe
|
||||||
|
real(pReal), dimension(6,6) :: C_66
|
||||||
|
real(pReal), dimension(3,3,3,3) :: dT_dFe, C
|
||||||
|
|
||||||
|
!* get elasticity tensor
|
||||||
|
|
||||||
|
C_66 = constitutive_homogenizedC(g,i,e)
|
||||||
|
C = math_Mandel66to3333(C_66)
|
||||||
|
|
||||||
|
T = 0.5_pReal*math_mul3333xx33(C,math_mul33x33(math_transpose33(Fe),Fe)-math_I3)
|
||||||
|
|
||||||
|
do p=1_pInt,3_pInt; do o=1_pInt,3_pInt
|
||||||
|
dT_dFe(o,p,1:3,1:3) = math_mul33x33(C(o,p,1:3,1:3), math_transpose33(Fe)) ! dT*_ij/dFe_kl
|
||||||
|
enddo; enddo
|
||||||
|
|
||||||
|
end subroutine constitutive_hooke_TandItsTangent
|
||||||
|
|
||||||
END MODULE
|
END MODULE
|
||||||
|
|
|
@ -40,6 +40,7 @@ module material
|
||||||
material_partPhase = 'phase'
|
material_partPhase = 'phase'
|
||||||
|
|
||||||
character(len=64), dimension(:), allocatable, public :: &
|
character(len=64), dimension(:), allocatable, public :: &
|
||||||
|
phase_elasticity, & !> elasticity of each phase
|
||||||
phase_plasticity, & !> plasticity of each phase
|
phase_plasticity, & !> plasticity of each phase
|
||||||
phase_name, & !> name of each phase
|
phase_name, & !> name of each phase
|
||||||
homogenization_name, & !> name of each homogenization
|
homogenization_name, & !> name of each homogenization
|
||||||
|
@ -57,6 +58,7 @@ module material
|
||||||
homogenization_Ngrains, & !> number of grains in each homogenization
|
homogenization_Ngrains, & !> number of grains in each homogenization
|
||||||
homogenization_Noutput, & !> number of '(output)' items per homogenization
|
homogenization_Noutput, & !> number of '(output)' items per homogenization
|
||||||
phase_Noutput, & !> number of '(output)' items per phase
|
phase_Noutput, & !> number of '(output)' items per phase
|
||||||
|
phase_elasticityInstance, & !> instance of particular elasticity of each phase
|
||||||
phase_plasticityInstance, & !> instance of particular plasticity of each phase
|
phase_plasticityInstance, & !> instance of particular plasticity of each phase
|
||||||
crystallite_Noutput, & !> number of '(output)' items per crystallite setting
|
crystallite_Noutput, & !> number of '(output)' items per crystallite setting
|
||||||
homogenization_typeInstance, & !> instance of particular type of each homogenization
|
homogenization_typeInstance, & !> instance of particular type of each homogenization
|
||||||
|
@ -452,6 +454,8 @@ subroutine material_parsePhase(myFile,myPart)
|
||||||
if (Nsections < 1_pInt) call IO_error(160_pInt,ext_msg=myPart)
|
if (Nsections < 1_pInt) call IO_error(160_pInt,ext_msg=myPart)
|
||||||
|
|
||||||
allocate(phase_name(Nsections)); phase_name = ''
|
allocate(phase_name(Nsections)); phase_name = ''
|
||||||
|
allocate(phase_elasticity(Nsections)); phase_elasticity = ''
|
||||||
|
allocate(phase_elasticityInstance(Nsections)); phase_elasticityInstance = 0_pInt
|
||||||
allocate(phase_plasticity(Nsections)); phase_plasticity = ''
|
allocate(phase_plasticity(Nsections)); phase_plasticity = ''
|
||||||
allocate(phase_plasticityInstance(Nsections)); phase_plasticityInstance = 0_pInt
|
allocate(phase_plasticityInstance(Nsections)); phase_plasticityInstance = 0_pInt
|
||||||
allocate(phase_Noutput(Nsections))
|
allocate(phase_Noutput(Nsections))
|
||||||
|
@ -480,6 +484,12 @@ subroutine material_parsePhase(myFile,myPart)
|
||||||
positions = IO_stringPos(line,maxNchunks)
|
positions = IO_stringPos(line,maxNchunks)
|
||||||
tag = IO_lc(IO_stringValue(line,positions,1_pInt)) ! extract key
|
tag = IO_lc(IO_stringValue(line,positions,1_pInt)) ! extract key
|
||||||
select case(tag)
|
select case(tag)
|
||||||
|
case ('elasticity')
|
||||||
|
phase_elasticity(section) = IO_lc(IO_stringValue(line,positions,2_pInt))
|
||||||
|
do s = 1_pInt,section
|
||||||
|
if (phase_elasticity(s) == phase_elasticity(section)) &
|
||||||
|
phase_elasticityInstance(section) = phase_elasticityInstance(section) + 1_pInt ! count instances
|
||||||
|
enddo
|
||||||
case ('plasticity')
|
case ('plasticity')
|
||||||
phase_plasticity(section) = IO_lc(IO_stringValue(line,positions,2_pInt))
|
phase_plasticity(section) = IO_lc(IO_stringValue(line,positions,2_pInt))
|
||||||
do s = 1_pInt,section
|
do s = 1_pInt,section
|
||||||
|
|
Loading…
Reference in New Issue