Added 'dislocation-type' dependent interactions. Ideal for hexagonal and BCC structures.

This commit is contained in:
Alankar Alankar 2010-08-23 11:36:51 +00:00
parent da53656c9a
commit ec4269bdd8
1 changed files with 483 additions and 357 deletions

View File

@ -2,6 +2,67 @@
!************************************
!* Module: CONSTITUTIVE *
!************************************
! Parameters for titanium
! [titanmod]
! constitution titanmod
! (output) rhoedge
! (output) rhoscrew
! (output) velocity_edge
! (output) velocity_screw
! (output) rss_slip
! (output) gamma_dot
! (output) resistance_edge
! (output) resistance_screw
! (output) segment_edge
! (output) segment_screw
! (output) total_generation
! (output) total_annihilation
! (output) total_density
! lattice_structure hex
! covera_ratio 1.587
! c11 162.2e9
! c12 91.8e9
! c13 68.8e9
! c33 180.5e9
! c44 46.7e9
! nslip 3 3 6 0 # per family
! ntwin 0 0 0 0 # per family
! rho_edge0 1.66e9 1.66e9 1.66e9 1.66e9
! rho_screw0 1.66e9 1.66e9 1.66e9 1.66e9
! slipburgers 2.86e-10 2.86e-10 2.86e-10 2.86e-10 # per family
! twinburgers 2.86e-10 2.86e-10 2.86e-10 2.86e-10
! f0 3.0e-19 3.0e-19 3.0e-19 3.0e-19
! v0e 1e-1 10e0 1e0 1e0
! v0s 1e-1 1e0 1e0 1e0
! ndot0 1 1 1 1
! twinsize 1e-05 5e-05 1e-05 1e-05
! celambdaslip 1.0 1.0 1.0 1.0
! cslambdaslip 1.0 1.0 1.0 1.0
! rlengthscrew 1e-6 1e-6 1e-6 1e-6
! grainsize 10e-6
! maxtwinfraction 0.7
! pe 0.61 0.45 0.61 0.61
! ps 0.61 0.45 0.61 0.61
! qe 1.40 1.60 1.40 1.40
! qs 1.40 1.60 1.40 1.40
! rexponent 0.2 0.2 0.2 0.2
! d0 0.2e-5 0.2e-5 0.2e-5 0.2e-5
! qsd 3.0e-19 3.0e-19 3.0e-19 3.0e-19
! cmfptwin 0.5
! cthresholdtwin 0.1
! cedgedipmindistance 50
! catomicvolume 10e-15
! tau0e 20e6 24e6 47e6 47e6 # per family
! tau0s 20e6 24e6 50e6 50e6 # per family
! capre 1.6e-9 5.6e-9 10.6e-9 10.6e-9
! caprs 10.6e-9 110.6e-9 10.6e-9 10.6e-9
! # 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
! interactionslipslip 0.15 0.07 0.10 0.10 0.25 0.15 0.15 0.15 0.65 0.15 0.65 0.65 0.65 0.65 0.65 0.15 0.65 0.65 0.65 0.65
! interactionsliptwin 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
! interactiontwinslip 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
! interactiontwintwin 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
! relevantRho 1.e1
! Parameters for aluminum
! [alumod]
! constitution titanmod
@ -190,10 +251,16 @@ real(pReal), dimension(:,:), allocatable :: constitutive_titanmod_
constitutive_titanmod_CsLambdaSlipPerSlipFamily, & ! Adj. parameter for distance between 2 forest dislocations for each slip family and instance
constitutive_titanmod_CsLambdaSlipPerSlipSystem, & ! Adj. parameter for distance between 2 forest dislocations for each slip system and instance
constitutive_titanmod_interactionSlipSlip, & ! coefficients for slip-slip interaction for each interaction type and instance
constitutive_titanmod_interactionSlipTwin, & ! coefficients for slip-twin interaction for each interaction type and instance
constitutive_titanmod_interaction_ee, & ! coefficients for e-e interaction for each interaction type and instance
constitutive_titanmod_interaction_ss, & ! coefficients for s-s interaction for each interaction type and instance
constitutive_titanmod_interaction_es, & ! coefficients for e-s-twin interaction for each interaction type and instance
constitutive_titanmod_interactionSlipTwin, & ! coefficients for twin-slip interaction for each interaction type and instance
constitutive_titanmod_interactionTwinSlip, & ! coefficients for twin-slip interaction for each interaction type and instance
constitutive_titanmod_interactionTwinTwin ! coefficients for twin-twin interaction for each interaction type and instance
real(pReal), dimension(:,:,:), allocatable :: constitutive_titanmod_interactionMatrixSlipSlip, & ! interaction matrix of the different slip systems for each instance
constitutive_titanmod_interactionMatrix_ee, & ! interaction matrix of e-e for each instance
constitutive_titanmod_interactionMatrix_ss, & ! interaction matrix of s-s for each instance
constitutive_titanmod_interactionMatrix_es, & ! interaction matrix of e-s for each instance
constitutive_titanmod_interactionMatrixSlipTwin, & ! interaction matrix of slip systems with twin systems for each instance
constitutive_titanmod_interactionMatrixTwinSlip, & ! interaction matrix of twin systems with slip systems for each instance
constitutive_titanmod_interactionMatrixTwinTwin, & ! interaction matrix of the different twin systems for each instance
@ -228,7 +295,8 @@ integer(pInt), intent(in) :: file
!* Local variables
integer(pInt), parameter :: maxNchunks = 21
integer(pInt), dimension(1+2*maxNchunks) :: positions
integer(pInt) section,maxNinstance,f,i,j,k,l,m,n,o,p,q,r,s,s1,s2,t1,t2,ns,nt,output,mySize,myStructure,maxTotalNslip,maxTotalNtwin
integer(pInt) section,maxNinstance,f,i,j,k,l,m,n,o,p,q,r,s,s1,s2,t1,t2,ns,nt,output,mySize,myStructure,maxTotalNslip, &
maxTotalNtwin
character(len=64) tag
character(len=1024) line
@ -351,10 +419,16 @@ constitutive_titanmod_ps_PerSlipFamily = 0.0_pReal
constitutive_titanmod_qe_PerSlipFamily = 0.0_pReal
constitutive_titanmod_qs_PerSlipFamily = 0.0_pReal
allocate(constitutive_titanmod_interactionSlipSlip(lattice_maxNinteraction,maxNinstance))
allocate(constitutive_titanmod_interaction_ee(lattice_maxNinteraction,maxNinstance))
allocate(constitutive_titanmod_interaction_ss(lattice_maxNinteraction,maxNinstance))
allocate(constitutive_titanmod_interaction_es(lattice_maxNinteraction,maxNinstance))
allocate(constitutive_titanmod_interactionSlipTwin(lattice_maxNinteraction,maxNinstance))
allocate(constitutive_titanmod_interactionTwinSlip(lattice_maxNinteraction,maxNinstance))
allocate(constitutive_titanmod_interactionTwinTwin(lattice_maxNinteraction,maxNinstance))
constitutive_titanmod_interactionSlipSlip = 0.0_pReal
constitutive_titanmod_interaction_ee = 0.0_pReal
constitutive_titanmod_interaction_ss = 0.0_pReal
constitutive_titanmod_interaction_ss = 0.0_pReal
constitutive_titanmod_interactionSlipTwin = 0.0_pReal
constitutive_titanmod_interactionTwinSlip = 0.0_pReal
constitutive_titanmod_interactionTwinTwin = 0.0_pReal
@ -475,7 +549,8 @@ do ! read thru sections of
case ('rlengthscrew')
forall (j = 1:lattice_maxNslipFamily) &
constitutive_titanmod_rlengthscrew_PerSlipFamily(j,i) = IO_floatValue(line,positions,1+j)
write(6,*) tag,constitutive_titanmod_rlengthscrew_PerSlipFamily(1,i),constitutive_titanmod_rlengthscrew_PerSlipFamily(2,i), &
write(6,*) tag,constitutive_titanmod_rlengthscrew_PerSlipFamily(1,i), &
constitutive_titanmod_rlengthscrew_PerSlipFamily(2,i), &
constitutive_titanmod_rlengthscrew_PerSlipFamily(3,i), constitutive_titanmod_rlengthscrew_PerSlipFamily(4,i)
case ('ndot0')
forall (j = 1:lattice_maxNtwinFamily) &
@ -547,6 +622,18 @@ do ! read thru sections of
forall (j = 1:lattice_maxNinteraction) &
constitutive_titanmod_interactionSlipSlip(j,i) = IO_floatValue(line,positions,1+j)
write(6,*) tag
case ('interactionee')
forall (j = 1:lattice_maxNinteraction) &
constitutive_titanmod_interaction_ee(j,i) = IO_floatValue(line,positions,1+j)
write(6,*) tag
case ('interactionss')
forall (j = 1:lattice_maxNinteraction) &
constitutive_titanmod_interaction_ss(j,i) = IO_floatValue(line,positions,1+j)
write(6,*) tag
case ('interactiones')
forall (j = 1:lattice_maxNinteraction) &
constitutive_titanmod_interaction_es(j,i) = IO_floatValue(line,positions,1+j)
write(6,*) tag
case ('interactionsliptwin')
forall (j = 1:lattice_maxNinteraction) &
constitutive_titanmod_interactionSlipTwin(j,i) = IO_floatValue(line,positions,1+j)
@ -655,12 +742,18 @@ constitutive_titanmod_CeLambdaSlipPerSlipSystem = 0.0_pReal
constitutive_titanmod_CsLambdaSlipPerSlipSystem = 0.0_pReal
allocate(constitutive_titanmod_interactionMatrixSlipSlip(maxTotalNslip,maxTotalNslip,maxNinstance))
allocate(constitutive_titanmod_interactionMatrix_ee(maxTotalNslip,maxTotalNslip,maxNinstance))
allocate(constitutive_titanmod_interactionMatrix_ss(maxTotalNslip,maxTotalNslip,maxNinstance))
allocate(constitutive_titanmod_interactionMatrix_es(maxTotalNslip,maxTotalNslip,maxNinstance))
allocate(constitutive_titanmod_interactionMatrixSlipTwin(maxTotalNslip,maxTotalNtwin,maxNinstance))
allocate(constitutive_titanmod_interactionMatrixTwinSlip(maxTotalNtwin,maxTotalNslip,maxNinstance))
allocate(constitutive_titanmod_interactionMatrixTwinTwin(maxTotalNtwin,maxTotalNtwin,maxNinstance))
allocate(constitutive_titanmod_forestProjectionEdge(maxTotalNslip,maxTotalNslip,maxNinstance))
allocate(constitutive_titanmod_forestProjectionScrew(maxTotalNslip,maxTotalNslip,maxNinstance))
constitutive_titanmod_interactionMatrixSlipSlip = 0.0_pReal
constitutive_titanmod_interactionMatrix_ee = 0.0_pReal
constitutive_titanmod_interactionMatrix_ss = 0.0_pReal
constitutive_titanmod_interactionMatrix_es = 0.0_pReal
constitutive_titanmod_interactionMatrixSlipTwin = 0.0_pReal
constitutive_titanmod_interactionMatrixTwinSlip = 0.0_pReal
constitutive_titanmod_interactionMatrixTwinTwin = 0.0_pReal
@ -827,6 +920,30 @@ write(6,*) 'Determining elasticity matrix'
myStructure),i)
enddo; enddo
do s1 = 1,constitutive_titanmod_totalNslip(i)
do s2 = 1,constitutive_titanmod_totalNslip(i)
constitutive_titanmod_interactionMatrix_ee(s1,s2,i) = &
constitutive_titanmod_interaction_ee(lattice_interactionSlipSlip(constitutive_titanmod_slipSystemLattice(s1,i), &
constitutive_titanmod_slipSystemLattice(s2,i), &
myStructure),i)
enddo; enddo
do s1 = 1,constitutive_titanmod_totalNslip(i)
do s2 = 1,constitutive_titanmod_totalNslip(i)
constitutive_titanmod_interactionMatrix_ss(s1,s2,i) = &
constitutive_titanmod_interaction_ss(lattice_interactionSlipSlip(constitutive_titanmod_slipSystemLattice(s1,i), &
constitutive_titanmod_slipSystemLattice(s2,i), &
myStructure),i)
enddo; enddo
do s1 = 1,constitutive_titanmod_totalNslip(i)
do s2 = 1,constitutive_titanmod_totalNslip(i)
constitutive_titanmod_interactionMatrix_es(s1,s2,i) = &
constitutive_titanmod_interaction_es(lattice_interactionSlipSlip(constitutive_titanmod_slipSystemLattice(s1,i), &
constitutive_titanmod_slipSystemLattice(s2,i), &
myStructure),i)
enddo; enddo
do s1 = 1,constitutive_titanmod_totalNslip(i)
do t2 = 1,constitutive_titanmod_totalNtwin(i)
constitutive_titanmod_interactionMatrixSlipTwin(s1,t2,i) = &
@ -928,13 +1045,15 @@ constitutive_titanmod_stateInit(4*ns+2*nt+1:5*ns+2*nt) = segment_screw0
forall (s = 1:ns) &
resistance_edge0(s) = &
constitutive_titanmod_Gmod(myInstance)*constitutive_titanmod_burgersPerSlipSystem(s,myInstance)* &
sqrt(dot_product((rho_edge0+rho_screw0),constitutive_titanmod_interactionMatrixSlipSlip(1:ns,s,myInstance)))
sqrt(dot_product((rho_edge0),constitutive_titanmod_interactionMatrix_ee(1:ns,s,myInstance))+dot_product((rho_screw0), &
constitutive_titanmod_interactionMatrix_es(1:ns,s,myInstance)))
constitutive_titanmod_stateInit(5*ns+3*nt+1:6*ns+3*nt) = resistance_edge0
forall (s = 1:ns) &
resistance_screw0(s) = &
constitutive_titanmod_Gmod(myInstance)*constitutive_titanmod_burgersPerSlipSystem(s,myInstance)* &
sqrt(dot_product((rho_edge0+rho_screw0),constitutive_titanmod_interactionMatrixSlipSlip(1:ns,s,myInstance)))
sqrt(dot_product((rho_edge0),constitutive_titanmod_interactionMatrix_es(1:ns,s,myInstance))+dot_product((rho_screw0), &
constitutive_titanmod_interactionMatrix_ss(1:ns,s,myInstance)))
constitutive_titanmod_stateInit(6*ns+3*nt+1:7*ns+3*nt) = resistance_screw0
!* Initialize dependent twin microstructural variables
@ -1116,15 +1235,19 @@ forall (t = 1:nt) &
forall (s = 1:ns) &
state(g,ip,el)%p(5*ns+3*nt+s) = &
constitutive_titanmod_Gmod(myInstance)*constitutive_titanmod_burgersPerSlipSystem(s,myInstance)*&
sqrt(dot_product((state(g,ip,el)%p(1:ns)+state(g,ip,el)%p(ns+1:2*ns)),&
constitutive_titanmod_interactionMatrixSlipSlip(1:ns,s,myInstance)))
sqrt(dot_product((state(g,ip,el)%p(1:ns)),&
constitutive_titanmod_interactionMatrix_ee(1:ns,s,myInstance))+ &
dot_product((state(g,ip,el)%p(ns+1:2*ns)),&
constitutive_titanmod_interactionMatrix_es(1:ns,s,myInstance)))
!* threshold stress or slip resistance for screw dislocation motion
forall (s = 1:ns) &
state(g,ip,el)%p(6*ns+3*nt+s) = &
constitutive_titanmod_Gmod(myInstance)*constitutive_titanmod_burgersPerSlipSystem(s,myInstance)*&
sqrt(dot_product((state(g,ip,el)%p(1:ns)+state(g,ip,el)%p(ns+1:2*ns)),&
constitutive_titanmod_interactionMatrixSlipSlip(1:ns,s,myInstance)))
sqrt(dot_product((state(g,ip,el)%p(1:ns)),&
constitutive_titanmod_interactionMatrix_es(1:ns,s,myInstance))+ &
dot_product((state(g,ip,el)%p(ns+1:2*ns)),&
constitutive_titanmod_interactionMatrix_ss(1:ns,s,myInstance)))
!* threshold stress for growing twin
forall (t = 1:nt) &
@ -1298,7 +1421,8 @@ do f = 1,lattice_maxNslipFamily ! loop over all
+ constitutive_titanmod_v0e_PerSlipSystem(j,myInstance)+state(g,ip,el)%p(ns+j)* &
constitutive_titanmod_v0e_PerSlipSystem(j,myInstance))
edge_velocity(j) =constitutive_titanmod_v0e_PerSlipSystem(j,myInstance)*exp(-BoltzmannRatio*(minusStressRatio_edge_p)** &
edge_velocity(j) =constitutive_titanmod_v0e_PerSlipSystem(j,myInstance)*exp(-BoltzmannRatio* &
(minusStressRatio_edge_p)** &
constitutive_titanmod_qe_PerSlipSystem(j,myInstance))
screw_velocity(j) =screwvelocity_kink_prefactor * constitutive_titanmod_v0s_PerSlipSystem(j,myInstance)* &
@ -1470,7 +1594,8 @@ real(pReal) sumf,StressRatio_edge_p,minusStressRatio_edge_p,StressRatio_pminus1,
real(pReal), dimension(constitutive_titanmod_totalNslip(phase_constitutionInstance(material_phase(g,ip,el)))) :: &
gdot_slip,tau_slip,DotRhoEdgeGeneration,EdgeDipDistance,DotRhoEdgeAnnihilation,DotRhoScrewAnnihilation,&
ClimbVelocity,DotRhoScrewGeneration, edge_segment, screw_segment,edge_velocity,screw_velocity
real(pReal), dimension(constitutive_titanmod_totalNtwin(phase_constitutionInstance(material_phase(g,ip,el)))) :: gdot_twin,tau_twin
real(pReal), dimension(constitutive_titanmod_totalNtwin(phase_constitutionInstance(material_phase(g,ip,el)))) :: gdot_twin, &
tau_twin
!* Shortened notation
myInstance = phase_constitutionInstance(material_phase(g,ip,el))
@ -1557,7 +1682,8 @@ forall (s = 1:ns) &
! edge_velocity(j) = 0.0_pReal
! screw_velocity(j) = 0.0_pReal
! else
edge_velocity(j) =constitutive_titanmod_v0e_PerSlipSystem(j,myInstance)*exp(-BoltzmannRatio*(minusStressRatio_edge_p)** &
edge_velocity(j) =constitutive_titanmod_v0e_PerSlipSystem(j,myInstance)*exp(-BoltzmannRatio* &
(minusStressRatio_edge_p)** &
constitutive_titanmod_qe_PerSlipSystem(j,myInstance))
screw_velocity(j) =screwvelocity_kink_prefactor* constitutive_titanmod_v0s_PerSlipSystem(j,myInstance)* &
exp(-BoltzmannRatio*(minusStressRatio_screw_p)** &