From 36edb4dd9ff06b5e89f311d8b0569389ea4c25db Mon Sep 17 00:00:00 2001 From: Franz Roters Date: Wed, 14 Mar 2012 16:16:11 +0000 Subject: [PATCH] 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 --- code/config/material.config | 5 +++ code/constitutive.f90 | 74 +++++++++++++++++++++++++++++++++++++ code/material.f90 | 10 +++++ 3 files changed, 89 insertions(+) diff --git a/code/config/material.config b/code/config/material.config index c80bc6277..a7566bed6 100644 --- a/code/config/material.config +++ b/code/config/material.config @@ -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 diff --git a/code/constitutive.f90 b/code/constitutive.f90 index fb929f10e..29695d993 100644 --- a/code/constitutive.f90 +++ b/code/constitutive.f90 @@ -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 diff --git a/code/material.f90 b/code/material.f90 index f5c29e5fc..7d05bc389 100644 --- a/code/material.f90 +++ b/code/material.f90 @@ -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