constitutive_Microstructure() computes now twin "plop" volumes from the given microstructure.
Mattex.dat has 2 parameters for deformation twinning: - average grain size - average twin stack thickness
This commit is contained in:
parent
44d6235777
commit
d0f6c81d66
|
@ -53,6 +53,8 @@ real(pReal), dimension(:) , allocatable :: material_rho0
|
||||||
real(pReal), dimension(:) , allocatable :: material_bg
|
real(pReal), dimension(:) , allocatable :: material_bg
|
||||||
real(pReal), dimension(:) , allocatable :: material_Qedge
|
real(pReal), dimension(:) , allocatable :: material_Qedge
|
||||||
real(pReal), dimension(:) , allocatable :: material_tau0
|
real(pReal), dimension(:) , allocatable :: material_tau0
|
||||||
|
real(pReal), dimension(:) , allocatable :: material_GrainSize
|
||||||
|
real(pReal), dimension(:) , allocatable :: material_StackSize
|
||||||
real(pReal), dimension(:) , allocatable :: material_c1
|
real(pReal), dimension(:) , allocatable :: material_c1
|
||||||
real(pReal), dimension(:) , allocatable :: material_c2
|
real(pReal), dimension(:) , allocatable :: material_c2
|
||||||
real(pReal), dimension(:) , allocatable :: material_c3
|
real(pReal), dimension(:) , allocatable :: material_c3
|
||||||
|
@ -103,6 +105,7 @@ real(pReal), dimension(:) , allocatable :: constitutive_rho_m
|
||||||
real(pReal), dimension(:) , allocatable :: constitutive_rho_f
|
real(pReal), dimension(:) , allocatable :: constitutive_rho_f
|
||||||
real(pReal), dimension(:) , allocatable :: constitutive_rho_p
|
real(pReal), dimension(:) , allocatable :: constitutive_rho_p
|
||||||
real(pReal), dimension(:) , allocatable :: constitutive_g0_slip
|
real(pReal), dimension(:) , allocatable :: constitutive_g0_slip
|
||||||
|
real(pReal), dimension(:) , allocatable :: constitutive_twin_volume
|
||||||
|
|
||||||
!************************************
|
!************************************
|
||||||
!* Interaction matrices *
|
!* Interaction matrices *
|
||||||
|
@ -320,6 +323,10 @@ do while(.true.)
|
||||||
material_Qedge(section)=IO_floatValue(line,positions,2)
|
material_Qedge(section)=IO_floatValue(line,positions,2)
|
||||||
case ('tau0')
|
case ('tau0')
|
||||||
material_tau0(section)=IO_floatValue(line,positions,2)
|
material_tau0(section)=IO_floatValue(line,positions,2)
|
||||||
|
case ('grain_size')
|
||||||
|
material_GrainSize(section)=IO_floatValue(line,positions,2)
|
||||||
|
case ('stack_size')
|
||||||
|
material_StackSize(section)=IO_floatValue(line,positions,2)
|
||||||
case ('c1')
|
case ('c1')
|
||||||
material_c1(section)=IO_floatValue(line,positions,2)
|
material_c1(section)=IO_floatValue(line,positions,2)
|
||||||
case ('c2')
|
case ('c2')
|
||||||
|
@ -482,6 +489,8 @@ allocate(material_SlipIntCoeff(crystal_MaxMaxNslipOfStructure,material_maxN))
|
||||||
allocate(material_bg(material_maxN)) ; material_bg=0.0_pReal
|
allocate(material_bg(material_maxN)) ; material_bg=0.0_pReal
|
||||||
allocate(material_Qedge(material_maxN)) ; material_Qedge=0.0_pReal
|
allocate(material_Qedge(material_maxN)) ; material_Qedge=0.0_pReal
|
||||||
allocate(material_tau0(material_maxN)) ; material_tau0=0.0_pReal
|
allocate(material_tau0(material_maxN)) ; material_tau0=0.0_pReal
|
||||||
|
allocate(material_GrainSize(material_maxN)) ; material_GrainSize=0.0_pReal
|
||||||
|
allocate(material_StackSize(material_maxN)) ; material_StackSize=0.0_pReal
|
||||||
allocate(material_c1(material_maxN)) ; material_c1=0.0_pReal
|
allocate(material_c1(material_maxN)) ; material_c1=0.0_pReal
|
||||||
allocate(material_c2(material_maxN)) ; material_c2=0.0_pReal
|
allocate(material_c2(material_maxN)) ; material_c2=0.0_pReal
|
||||||
allocate(material_c3(material_maxN)) ; material_c3=0.0_pReal
|
allocate(material_c3(material_maxN)) ; material_c3=0.0_pReal
|
||||||
|
@ -669,6 +678,7 @@ allocate(constitutive_passing_stress(material_maxNslip)) ; constitutive_passi
|
||||||
allocate(constitutive_jump_width(material_maxNslip)) ; constitutive_jump_width=0.0_pReal
|
allocate(constitutive_jump_width(material_maxNslip)) ; constitutive_jump_width=0.0_pReal
|
||||||
allocate(constitutive_activation_volume(material_maxNslip)) ; constitutive_activation_volume=0.0_pReal
|
allocate(constitutive_activation_volume(material_maxNslip)) ; constitutive_activation_volume=0.0_pReal
|
||||||
allocate(constitutive_g0_slip(material_maxNslip)) ; constitutive_g0_slip=0.0_pReal
|
allocate(constitutive_g0_slip(material_maxNslip)) ; constitutive_g0_slip=0.0_pReal
|
||||||
|
allocate(constitutive_twin_volume(material_maxNtwin)) ; constitutive_twin_volume=0.0_pReal
|
||||||
|
|
||||||
!* Assignment of all grains in all IPs of all cp-elements
|
!* Assignment of all grains in all IPs of all cp-elements
|
||||||
do e=1,mesh_NcpElems
|
do e=1,mesh_NcpElems
|
||||||
|
@ -821,18 +831,20 @@ subroutine constitutive_Microstructure(state,Tp,ipc,ip,el)
|
||||||
!* - el : current element *
|
!* - el : current element *
|
||||||
!*********************************************************************
|
!*********************************************************************
|
||||||
use prec, only: pReal,pInt
|
use prec, only: pReal,pInt
|
||||||
|
use math, only: pi
|
||||||
|
use crystal, only: crystal_TwinIntType
|
||||||
implicit none
|
implicit none
|
||||||
|
|
||||||
!* Definition of variables
|
!* Definition of variables
|
||||||
integer(pInt) ipc,ip,el
|
integer(pInt) ipc,ip,el
|
||||||
integer(pInt) matID,i
|
integer(pInt) matID,i,j
|
||||||
real(pReal) Tp
|
real(pReal) Tp,inv_intertwin_length,twin_mfp
|
||||||
real(pReal), dimension(constitutive_Nstatevars(ipc,ip,el)) :: state
|
real(pReal), dimension(constitutive_Nstatevars(ipc,ip,el)) :: state
|
||||||
|
|
||||||
!* Get the material-ID from the triplet(ipc,ip,el)
|
!* Get the material-ID from the triplet(ipc,ip,el)
|
||||||
matID = constitutive_matID(ipc,ip,el)
|
matID = constitutive_matID(ipc,ip,el)
|
||||||
|
|
||||||
!* Quantities derivated from state
|
!* Quantities derivated from state - slip
|
||||||
constitutive_rho_f=matmul(constitutive_Pforest (1:material_Nslip(matID),1:material_Nslip(matID),matID),state)
|
constitutive_rho_f=matmul(constitutive_Pforest (1:material_Nslip(matID),1:material_Nslip(matID),matID),state)
|
||||||
constitutive_rho_p=matmul(constitutive_Pparallel(1:material_Nslip(matID),1:material_Nslip(matID),matID),state)
|
constitutive_rho_p=matmul(constitutive_Pparallel(1:material_Nslip(matID),1:material_Nslip(matID),matID),state)
|
||||||
do i=1,material_Nslip(matID)
|
do i=1,material_Nslip(matID)
|
||||||
|
@ -848,6 +860,20 @@ do i=1,material_Nslip(matID)
|
||||||
(Kb*Tp))
|
(Kb*Tp))
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
|
!* Quantities derivated from state - twin
|
||||||
|
do i=1,material_Ntwin(matID)
|
||||||
|
!* Inverse of the average distance between 2 twins of the same familly
|
||||||
|
inv_intertwin_length=0.0_pReal
|
||||||
|
do j=1,material_Ntwin(matID)
|
||||||
|
inv_intertwin_length=inv_intertwin_length+(crystal_TwinIntType(i,j,material_CrystalStructure(matID))*&
|
||||||
|
state((material_Nslip(matID)+j)))/(2.0_pReal*material_StackSize(matID)*&
|
||||||
|
(1.0_pReal-(1-sum(state((material_Nslip(matID)+1):(material_Nslip(matID)+material_Ntwin(matID)))))))
|
||||||
|
enddo
|
||||||
|
twin_mfp=(1.0_pReal)/((1.0_pReal/material_GrainSize(matID))+inv_intertwin_length)
|
||||||
|
constitutive_twin_volume(i)=(pi/6.0_pReal)*material_StackSize(matID)*twin_mfp**2.0_pReal
|
||||||
|
enddo
|
||||||
|
|
||||||
|
return
|
||||||
end subroutine
|
end subroutine
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,9 @@ c4 0.05
|
||||||
c5 10.0
|
c5 10.0
|
||||||
# Dislocation interaction coefficients
|
# Dislocation interaction coefficients
|
||||||
interaction_coefficients 1.0 2.2 3.0 1.6 3.8 4.5
|
interaction_coefficients 1.0 2.2 3.0 1.6 3.8 4.5
|
||||||
|
# Twin parameters: grain size, average size of stacks of twins [m]
|
||||||
|
grain_size 1.5e-5
|
||||||
|
stack_size 5.0e-8
|
||||||
|
|
||||||
<textures>
|
<textures>
|
||||||
[cube SX]
|
[cube SX]
|
||||||
|
|
Loading…
Reference in New Issue