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]
|
||||
|
||||
elaticity hooke
|
||||
plasticity j2
|
||||
|
||||
(output) flowstress
|
||||
|
@ -108,6 +109,7 @@ atol_resistance 1
|
|||
|
||||
[Aluminum_phenopowerlaw]
|
||||
# slip only
|
||||
elaticity hooke
|
||||
plasticity phenopowerlaw
|
||||
|
||||
(output) resistance_slip
|
||||
|
@ -152,6 +154,7 @@ atol_resistance 1
|
|||
|
||||
[Aluminum_nonlocal]
|
||||
|
||||
elaticity hooke
|
||||
plasticity nonlocal
|
||||
/nonlocal/
|
||||
|
||||
|
@ -265,6 +268,7 @@ interaction_SlipSlip 0.122 0.122 0.625 0.07 0.137 0.122 # Dislocation i
|
|||
|
||||
|
||||
[BCC_Ferrite]
|
||||
elaticity hooke
|
||||
plasticity phenopowerlaw
|
||||
lattice_structure bcc
|
||||
Nslip 12 0 0 0 # per family
|
||||
|
@ -329,6 +333,7 @@ atol_resistance 1
|
|||
|
||||
[TWIP steel FeMnC]
|
||||
|
||||
elaticity hooke
|
||||
plasticity dislotwin
|
||||
|
||||
#(output) edge_density
|
||||
|
|
|
@ -57,6 +57,8 @@ integer(pInt) :: &
|
|||
constitutive_maxSizeState, &
|
||||
constitutive_maxSizePostResults
|
||||
|
||||
character (len=*), parameter, public :: constitutive_hooke_label = 'hooke'
|
||||
|
||||
contains
|
||||
!****************************************
|
||||
!* - constitutive_init
|
||||
|
@ -67,6 +69,8 @@ contains
|
|||
!* - constitutive_collectDotState
|
||||
!* - constitutive_collectDotTemperature
|
||||
!* - constitutive_postResults
|
||||
!* - constitutive_TandItsTangent
|
||||
!* - constitutive_hooke_TandItsTangent
|
||||
!****************************************
|
||||
|
||||
|
||||
|
@ -816,4 +820,74 @@ end select
|
|||
|
||||
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
|
||||
|
|
|
@ -40,6 +40,7 @@ module material
|
|||
material_partPhase = 'phase'
|
||||
|
||||
character(len=64), dimension(:), allocatable, public :: &
|
||||
phase_elasticity, & !> elasticity of each phase
|
||||
phase_plasticity, & !> plasticity of each phase
|
||||
phase_name, & !> name of each phase
|
||||
homogenization_name, & !> name of each homogenization
|
||||
|
@ -57,6 +58,7 @@ module material
|
|||
homogenization_Ngrains, & !> number of grains in each homogenization
|
||||
homogenization_Noutput, & !> number of '(output)' items per homogenization
|
||||
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
|
||||
crystallite_Noutput, & !> number of '(output)' items per crystallite setting
|
||||
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)
|
||||
|
||||
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_plasticityInstance(Nsections)); phase_plasticityInstance = 0_pInt
|
||||
allocate(phase_Noutput(Nsections))
|
||||
|
@ -480,6 +484,12 @@ subroutine material_parsePhase(myFile,myPart)
|
|||
positions = IO_stringPos(line,maxNchunks)
|
||||
tag = IO_lc(IO_stringValue(line,positions,1_pInt)) ! extract key
|
||||
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')
|
||||
phase_plasticity(section) = IO_lc(IO_stringValue(line,positions,2_pInt))
|
||||
do s = 1_pInt,section
|
||||
|
|
Loading…
Reference in New Issue