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:
Franz Roters 2012-03-14 16:16:11 +00:00
parent 9cbbb7cab5
commit 36edb4dd9f
3 changed files with 89 additions and 0 deletions

View File

@ -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

View File

@ -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

View File

@ -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