corrected substraction by volume fraction of twin for LpAndItsTangent and removed the substraction in postResults (like for dislowtin)
cleaned up and unified notation in calculation of slip rates
This commit is contained in:
parent
accb571c53
commit
f3b7b5bb96
|
@ -103,7 +103,6 @@ module constitutive_dislokmc
|
||||||
constitutive_dislokmc_pPerSlipFamily, & !< p-exponent in glide velocity
|
constitutive_dislokmc_pPerSlipFamily, & !< p-exponent in glide velocity
|
||||||
constitutive_dislokmc_qPerSlipFamily, & !< q-exponent in glide velocity
|
constitutive_dislokmc_qPerSlipFamily, & !< q-exponent in glide velocity
|
||||||
constitutive_dislokmc_uPerSlipFamily, & !< u-exponent in glide velocity
|
constitutive_dislokmc_uPerSlipFamily, & !< u-exponent in glide velocity
|
||||||
constitutive_dislokmc_vPerSlipFamily, & !< v-exponent in glide velocity
|
|
||||||
constitutive_dislokmc_sPerSlipFamily, & !< self-hardening in glide velocity
|
constitutive_dislokmc_sPerSlipFamily, & !< self-hardening in glide velocity
|
||||||
constitutive_dislokmc_rPerTwinFamily, & !< r-exponent in twin nucleation rate
|
constitutive_dislokmc_rPerTwinFamily, & !< r-exponent in twin nucleation rate
|
||||||
constitutive_dislokmc_nonSchmidCoeff !< non-Schmid coefficients (bcc)
|
constitutive_dislokmc_nonSchmidCoeff !< non-Schmid coefficients (bcc)
|
||||||
|
@ -131,10 +130,6 @@ module constitutive_dislokmc
|
||||||
mfp_twin_ID, &
|
mfp_twin_ID, &
|
||||||
resolved_stress_twin_ID, &
|
resolved_stress_twin_ID, &
|
||||||
threshold_stress_twin_ID
|
threshold_stress_twin_ID
|
||||||
!resolved_stress_shearband_ID, &
|
|
||||||
!shear_rate_shearband_ID, &
|
|
||||||
!sb_eigenvalues_ID, &
|
|
||||||
!sb_eigenvectors_ID
|
|
||||||
end enum
|
end enum
|
||||||
integer(kind(undefined_ID)), dimension(:,:), allocatable, private :: &
|
integer(kind(undefined_ID)), dimension(:,:), allocatable, private :: &
|
||||||
constitutive_dislokmc_outputID !< ID of each post result output
|
constitutive_dislokmc_outputID !< ID of each post result output
|
||||||
|
@ -273,7 +268,6 @@ subroutine constitutive_dislokmc_init(fileUnit)
|
||||||
allocate(constitutive_dislokmc_pPerSlipFamily(lattice_maxNslipFamily,maxNinstance),source=0.0_pReal)
|
allocate(constitutive_dislokmc_pPerSlipFamily(lattice_maxNslipFamily,maxNinstance),source=0.0_pReal)
|
||||||
allocate(constitutive_dislokmc_qPerSlipFamily(lattice_maxNslipFamily,maxNinstance),source=0.0_pReal)
|
allocate(constitutive_dislokmc_qPerSlipFamily(lattice_maxNslipFamily,maxNinstance),source=0.0_pReal)
|
||||||
allocate(constitutive_dislokmc_uPerSlipFamily(lattice_maxNslipFamily,maxNinstance),source=0.0_pReal)
|
allocate(constitutive_dislokmc_uPerSlipFamily(lattice_maxNslipFamily,maxNinstance),source=0.0_pReal)
|
||||||
allocate(constitutive_dislokmc_vPerSlipFamily(lattice_maxNslipFamily,maxNinstance),source=0.0_pReal)
|
|
||||||
allocate(constitutive_dislokmc_sPerSlipFamily(lattice_maxNslipFamily,maxNinstance),source=0.0_pReal)
|
allocate(constitutive_dislokmc_sPerSlipFamily(lattice_maxNslipFamily,maxNinstance),source=0.0_pReal)
|
||||||
allocate(constitutive_dislokmc_Ndot0PerTwinFamily(lattice_maxNtwinFamily,maxNinstance), &
|
allocate(constitutive_dislokmc_Ndot0PerTwinFamily(lattice_maxNtwinFamily,maxNinstance), &
|
||||||
source=0.0_pReal)
|
source=0.0_pReal)
|
||||||
|
@ -441,8 +435,6 @@ subroutine constitutive_dislokmc_init(fileUnit)
|
||||||
constitutive_dislokmc_qPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies)
|
constitutive_dislokmc_qPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies)
|
||||||
case ('u_slip')
|
case ('u_slip')
|
||||||
constitutive_dislokmc_uPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies)
|
constitutive_dislokmc_uPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies)
|
||||||
case ('v_slip')
|
|
||||||
constitutive_dislokmc_vPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies)
|
|
||||||
case ('s_slip')
|
case ('s_slip')
|
||||||
constitutive_dislokmc_sPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies)
|
constitutive_dislokmc_sPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies)
|
||||||
end select
|
end select
|
||||||
|
@ -1184,7 +1176,7 @@ subroutine constitutive_dislokmc_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v,Temperatu
|
||||||
integer(pInt) :: instance,ph,of,ns,nt,f,i,j,k,l,m,n,index_myFamily,s1,s2
|
integer(pInt) :: instance,ph,of,ns,nt,f,i,j,k,l,m,n,index_myFamily,s1,s2
|
||||||
real(pReal) :: sumf,StressRatio_p,StressRatio_pminus1,StressRatio_r,BoltzmannRatio,DotGamma0,Ndot0, &
|
real(pReal) :: sumf,StressRatio_p,StressRatio_pminus1,StressRatio_r,BoltzmannRatio,DotGamma0,Ndot0, &
|
||||||
StressRatio_u,StressRatio_uminus1,tau_slip_pos,tau_slip_neg,vel_slip,dvel_slip,&
|
StressRatio_u,StressRatio_uminus1,tau_slip_pos,tau_slip_neg,vel_slip,dvel_slip,&
|
||||||
dgdot_dtauslip_pos,dgdot_dtauslip_neg,dgdot_dtautwin,tau_twin,gdot_twin
|
dgdot_dtauslip_pos,dgdot_dtauslip_neg,dgdot_dtautwin,tau_twin,gdot_twin,stressRatio
|
||||||
real(pReal), dimension(3,3,2) :: &
|
real(pReal), dimension(3,3,2) :: &
|
||||||
nonSchmid_tensor
|
nonSchmid_tensor
|
||||||
real(pReal), dimension(3,3,3,3) :: &
|
real(pReal), dimension(3,3,3,3) :: &
|
||||||
|
@ -1199,12 +1191,8 @@ subroutine constitutive_dislokmc_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v,Temperatu
|
||||||
ns = constitutive_dislokmc_totalNslip(instance)
|
ns = constitutive_dislokmc_totalNslip(instance)
|
||||||
nt = constitutive_dislokmc_totalNtwin(instance)
|
nt = constitutive_dislokmc_totalNtwin(instance)
|
||||||
|
|
||||||
!* Total twin volume fraction
|
|
||||||
sumf = sum(plasticState(ph)%state((3_pInt*ns+1_pInt):(3_pInt*ns+nt), of)) ! safe for nt == 0
|
|
||||||
|
|
||||||
Lp = 0.0_pReal
|
Lp = 0.0_pReal
|
||||||
dLp_dTstar3333 = 0.0_pReal
|
dLp_dTstar3333 = 0.0_pReal
|
||||||
dLp_dTstar = 0.0_pReal
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! Dislocation glide part
|
! Dislocation glide part
|
||||||
|
@ -1219,8 +1207,6 @@ subroutine constitutive_dislokmc_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v,Temperatu
|
||||||
slipSystems: do i = 1_pInt,constitutive_dislokmc_Nslip(f,instance)
|
slipSystems: do i = 1_pInt,constitutive_dislokmc_Nslip(f,instance)
|
||||||
j = j+1_pInt
|
j = j+1_pInt
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
|
||||||
! Calculation of Lp
|
|
||||||
tau_slip_pos = dot_product(Tstar_v,lattice_Sslip_v(1:6,1,index_myFamily+i,ph))
|
tau_slip_pos = dot_product(Tstar_v,lattice_Sslip_v(1:6,1,index_myFamily+i,ph))
|
||||||
tau_slip_neg = tau_slip_pos
|
tau_slip_neg = tau_slip_pos
|
||||||
nonSchmid_tensor(1:3,1:3,1) = lattice_Sslip(1:3,1:3,1,index_myFamily+i,ph)
|
nonSchmid_tensor(1:3,1:3,1) = lattice_Sslip(1:3,1:3,1,index_myFamily+i,ph)
|
||||||
|
@ -1237,50 +1223,41 @@ subroutine constitutive_dislokmc_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v,Temperatu
|
||||||
lattice_Sslip(1:3,1:3,2*k+1,index_myFamily+i,ph)
|
lattice_Sslip(1:3,1:3,2*k+1,index_myFamily+i,ph)
|
||||||
enddo nonSchmidSystems
|
enddo nonSchmidSystems
|
||||||
|
|
||||||
|
significantPostitiveSlip: if((abs(tau_slip_pos)-plasticState(ph)%state(6*ns+4*nt+j, of)) > tol_math_check) then
|
||||||
|
!* Boltzmann ratio
|
||||||
BoltzmannRatio = constitutive_dislokmc_QedgePerSlipSystem(j,instance)/(kB*Temperature)
|
BoltzmannRatio = constitutive_dislokmc_QedgePerSlipSystem(j,instance)/(kB*Temperature)
|
||||||
|
!* Initial shear rates
|
||||||
DotGamma0 = &
|
DotGamma0 = &
|
||||||
plasticState(ph)%state(j, of)*constitutive_dislokmc_burgersPerSlipSystem(j,instance)*&
|
plasticState(ph)%state(j, of)*constitutive_dislokmc_burgersPerSlipSystem(j,instance)*&
|
||||||
constitutive_dislokmc_v0PerSlipSystem(j,instance)
|
constitutive_dislokmc_v0PerSlipSystem(j,instance)
|
||||||
|
|
||||||
|
|
||||||
significantPostitiveSlip: if((abs(tau_slip_pos)-plasticState(ph)%state(6*ns+4*nt+j, of)) > tol_math_check) then
|
|
||||||
!* Stress ratios
|
!* Stress ratios
|
||||||
StressRatio_p = ((abs(tau_slip_pos)- plasticState(ph)%state(6*ns+4*nt+j, of))/&
|
stressRatio = ((abs(tau_slip_pos)-plasticState(ph)%state(6*ns+4*nt+j, of))/&
|
||||||
(constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))&
|
(constitutive_dislokmc_SolidSolutionStrength(instance)+&
|
||||||
**constitutive_dislokmc_pPerSlipFamily(f,instance)
|
constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))
|
||||||
StressRatio_pminus1 = ((abs(tau_slip_pos)-plasticState(ph)%state(6*ns+4*nt+j, of))/&
|
stressRatio_p = stressRatio** constitutive_dislokmc_pPerSlipFamily(f,instance)
|
||||||
(constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))&
|
stressRatio_pminus1 = stressRatio**(constitutive_dislokmc_pPerSlipFamily(f,instance)-1.0_pReal)
|
||||||
**(constitutive_dislokmc_pPerSlipFamily(f,instance)-1.0_pReal)
|
stressRatio_u = stressRatio** constitutive_dislokmc_uPerSlipFamily(f,instance)
|
||||||
|
stressRatio_uminus1 = stressRatio**(constitutive_dislokmc_uPerSlipFamily(f,instance)-1.0_pReal)
|
||||||
StressRatio_u = ((abs(tau_slip_pos)-plasticState(ph)%state(6*ns+4*nt+j, of))/&
|
|
||||||
(constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))&
|
|
||||||
**constitutive_dislokmc_uPerSlipFamily(f,instance)
|
|
||||||
StressRatio_uminus1 = ((abs(tau_slip_pos)-plasticState(ph)%state(6*ns+4*nt+j, of))/&
|
|
||||||
(constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))&
|
|
||||||
**(constitutive_dislokmc_uPerSlipFamily(f,instance)-1.0_pReal)
|
|
||||||
|
|
||||||
!* Shear rates due to slip
|
!* Shear rates due to slip
|
||||||
vel_slip = exp(-BoltzmannRatio*(1-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)) &
|
vel_slip = exp(-BoltzmannRatio*(1-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)) &
|
||||||
* (1.0_pReal-constitutive_dislokmc_sPerSlipFamily(f,instance) &
|
* (1.0_pReal-constitutive_dislokmc_sPerSlipFamily(f,instance) &
|
||||||
* exp(-BoltzmannRatio*(1-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)))
|
* exp(-BoltzmannRatio*(1-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)))
|
||||||
|
|
||||||
gdot_slip_pos(j) = (1.0_pReal - sumf) * DotGamma0 &
|
gdot_slip_pos(j) = DotGamma0 &
|
||||||
* StressRatio_u * vel_slip &
|
* StressRatio_u * vel_slip &
|
||||||
* sign(1.0_pReal,tau_slip_pos)
|
* sign(1.0_pReal,tau_slip_pos)
|
||||||
|
|
||||||
|
|
||||||
!* Derivatives of shear rates
|
!* Derivatives of shear rates
|
||||||
dvel_slip = &
|
dvel_slip = &
|
||||||
(abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)))&
|
(abs(exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)))&
|
||||||
*BoltzmannRatio*constitutive_dislokmc_pPerSlipFamily(f,instance)&
|
*BoltzmannRatio*constitutive_dislokmc_pPerSlipFamily(f,instance)&
|
||||||
*constitutive_dislokmc_qPerSlipFamily(f,instance)/&
|
*constitutive_dislokmc_qPerSlipFamily(f,instance)/&
|
||||||
(constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance))*&
|
(constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance))*&
|
||||||
StressRatio_pminus1*(1-StressRatio_p)**(constitutive_dislokmc_qPerSlipFamily(f,instance)-1.0_pReal) )&
|
StressRatio_pminus1*(1.0_pReal-StressRatio_p)**(constitutive_dislokmc_qPerSlipFamily(f,instance)-1.0_pReal) )&
|
||||||
*(1.0_pReal - 2.0_pReal*constitutive_dislokmc_sPerSlipFamily(f,instance)&
|
*(1.0_pReal - 2.0_pReal*constitutive_dislokmc_sPerSlipFamily(f,instance)&
|
||||||
*abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance))))
|
*abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance))))
|
||||||
|
|
||||||
dgdot_dtauslip_pos = (1.0_pReal - sumf) * DotGamma0 * &
|
dgdot_dtauslip_pos = DotGamma0 * &
|
||||||
( constitutive_dislokmc_uPerSlipFamily(f,instance)*StressRatio_uminus1 &
|
( constitutive_dislokmc_uPerSlipFamily(f,instance)*StressRatio_uminus1 &
|
||||||
/(constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance))&
|
/(constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance))&
|
||||||
* vel_slip &
|
* vel_slip &
|
||||||
|
@ -1298,6 +1275,13 @@ subroutine constitutive_dislokmc_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v,Temperatu
|
||||||
enddo slipSystems
|
enddo slipSystems
|
||||||
enddo slipFamilies
|
enddo slipFamilies
|
||||||
|
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
! correct Lp and dLp_dTstar3333 for twinned fraction
|
||||||
|
!* Total twin volume fraction
|
||||||
|
sumf = sum(plasticState(ph)%state((3_pInt*ns+1_pInt):(3_pInt*ns+nt), of)) ! safe for nt == 0
|
||||||
|
Lp = Lp * (1.0_pReal - sumf)
|
||||||
|
dLp_dTstar3333 = dLp_dTstar3333 * (1.0_pReal - sumf)
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! Mechanical twinning part
|
! Mechanical twinning part
|
||||||
gdot_twin = 0.0_pReal
|
gdot_twin = 0.0_pReal
|
||||||
|
@ -1405,12 +1389,11 @@ subroutine constitutive_dislokmc_dotState(Tstar_v,Temperature,ipc,ip,el)
|
||||||
of
|
of
|
||||||
real(pReal) :: &
|
real(pReal) :: &
|
||||||
sumf, &
|
sumf, &
|
||||||
StressRatio_p,&
|
stressRatio_p,&
|
||||||
StressRatio_pminus1,&
|
|
||||||
BoltzmannRatio,&
|
BoltzmannRatio,&
|
||||||
DotGamma0,&
|
DotGamma0,&
|
||||||
StressRatio_u,&
|
stressRatio_u,&
|
||||||
StressRatio_uminus1,&
|
stressRatio, &
|
||||||
EdgeDipMinDistance,&
|
EdgeDipMinDistance,&
|
||||||
AtomicVolume,&
|
AtomicVolume,&
|
||||||
VacancyDiffusion,&
|
VacancyDiffusion,&
|
||||||
|
@ -1423,15 +1406,15 @@ subroutine constitutive_dislokmc_dotState(Tstar_v,Temperature,ipc,ip,el)
|
||||||
DotRhoEdgeEdgeAnnihilation, &
|
DotRhoEdgeEdgeAnnihilation, &
|
||||||
ClimbVelocity, &
|
ClimbVelocity, &
|
||||||
DotRhoEdgeDipClimb, &
|
DotRhoEdgeDipClimb, &
|
||||||
DotRhoDipFormation
|
DotRhoDipFormation, &
|
||||||
|
tau_twin, &
|
||||||
|
vel_slip
|
||||||
real(pReal), dimension(3,3,2) :: &
|
real(pReal), dimension(3,3,2) :: &
|
||||||
nonSchmid_tensor
|
nonSchmid_tensor
|
||||||
real(pReal), dimension(3,3,3,3) :: &
|
real(pReal), dimension(3,3,3,3) :: &
|
||||||
dLp_dTstar3333
|
dLp_dTstar3333
|
||||||
real(pReal), dimension(constitutive_dislokmc_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: &
|
real(pReal), dimension(constitutive_dislokmc_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: &
|
||||||
gdot_slip_pos, tau_slip_neg
|
gdot_slip_pos, tau_slip_neg
|
||||||
real(pReal), dimension(constitutive_dislokmc_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: &
|
|
||||||
tau_twin
|
|
||||||
|
|
||||||
!* Shortened notation
|
!* Shortened notation
|
||||||
of = mappingConstitutive(1,ipc,ip,el)
|
of = mappingConstitutive(1,ipc,ip,el)
|
||||||
|
@ -1468,36 +1451,27 @@ subroutine constitutive_dislokmc_dotState(Tstar_v,Temperature,ipc,ip,el)
|
||||||
lattice_Sslip(1:3,1:3,2*k+1,index_myFamily+i,ph)
|
lattice_Sslip(1:3,1:3,2*k+1,index_myFamily+i,ph)
|
||||||
enddo nonSchmidSystems
|
enddo nonSchmidSystems
|
||||||
|
|
||||||
|
significantPostitiveSlip: if((abs(tau_slip_pos)-plasticState(ph)%state(6*ns+4*nt+j, of)) > tol_math_check) then
|
||||||
!* Boltzmann ratio
|
!* Boltzmann ratio
|
||||||
BoltzmannRatio = constitutive_dislokmc_QedgePerSlipSystem(j,instance)/(kB*Temperature)
|
BoltzmannRatio = constitutive_dislokmc_QedgePerSlipSystem(j,instance)/(kB*Temperature)
|
||||||
!* Initial shear rates
|
!* Initial shear rates
|
||||||
DotGamma0 = &
|
DotGamma0 = &
|
||||||
plasticState(ph)%state(j, of)*constitutive_dislokmc_burgersPerSlipSystem(j,instance)*&
|
plasticState(ph)%state(j, of)*constitutive_dislokmc_burgersPerSlipSystem(j,instance)*&
|
||||||
constitutive_dislokmc_v0PerSlipSystem(j,instance)
|
constitutive_dislokmc_v0PerSlipSystem(j,instance)
|
||||||
|
|
||||||
significantPostitiveSlip: if((abs(tau_slip_pos)-plasticState(ph)%state(6*ns+4*nt+j, of)) > tol_math_check) then
|
|
||||||
!* Stress ratios
|
!* Stress ratios
|
||||||
StressRatio_p = ((abs(tau_slip_pos)-plasticState(ph)%state(6*ns+4*nt+j, of))/&
|
stressRatio = ((abs(tau_slip_pos)-plasticState(ph)%state(6*ns+4*nt+j, of))/&
|
||||||
(constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))&
|
(constitutive_dislokmc_SolidSolutionStrength(instance)+&
|
||||||
**constitutive_dislokmc_pPerSlipFamily(f,instance)
|
constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))
|
||||||
StressRatio_pminus1 = ((abs(tau_slip_pos)-plasticState(ph)%state(6*ns+4*nt+j, of))/&
|
stressRatio_p = stressRatio** constitutive_dislokmc_pPerSlipFamily(f,instance)
|
||||||
(constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))&
|
stressRatio_u = stressRatio** constitutive_dislokmc_uPerSlipFamily(f,instance)
|
||||||
**(constitutive_dislokmc_pPerSlipFamily(f,instance)-1.0_pReal)
|
|
||||||
|
|
||||||
StressRatio_u = ((abs(tau_slip_pos)-plasticState(ph)%state(6*ns+4*nt+j, of))/&
|
|
||||||
(constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))&
|
|
||||||
**constitutive_dislokmc_uPerSlipFamily(f,instance)
|
|
||||||
StressRatio_uminus1 = ((abs(tau_slip_pos)-plasticState(ph)%state(6*ns+4*nt+j,of))/&
|
|
||||||
(constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))&
|
|
||||||
**(constitutive_dislokmc_uPerSlipFamily(f,instance)-1.0_pReal)
|
|
||||||
|
|
||||||
|
|
||||||
!* Shear rates due to slip
|
!* Shear rates due to slip
|
||||||
gdot_slip_pos(j) = DotGamma0*exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p)** &
|
vel_slip = exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)) &
|
||||||
constitutive_dislokmc_qPerSlipFamily(f,instance))*sign(1.0_pReal,tau_slip_pos) &
|
|
||||||
* (1.0_pReal-constitutive_dislokmc_sPerSlipFamily(f,instance) &
|
* (1.0_pReal-constitutive_dislokmc_sPerSlipFamily(f,instance) &
|
||||||
* exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance))) &
|
* exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)))
|
||||||
* StressRatio_u
|
|
||||||
|
gdot_slip_pos(j) = DotGamma0 &
|
||||||
|
* StressRatio_u * vel_slip &
|
||||||
|
* sign(1.0_pReal,tau_slip_pos)
|
||||||
endif significantPostitiveSlip
|
endif significantPostitiveSlip
|
||||||
|
|
||||||
!* Multiplication
|
!* Multiplication
|
||||||
|
@ -1568,22 +1542,22 @@ subroutine constitutive_dislokmc_dotState(Tstar_v,Temperature,ipc,ip,el)
|
||||||
j = j+1_pInt
|
j = j+1_pInt
|
||||||
|
|
||||||
!* Resolved shear stress on twin system
|
!* Resolved shear stress on twin system
|
||||||
tau_twin(j) = dot_product(Tstar_v,lattice_Stwin_v(:,index_myFamily+i,ph))
|
tau_twin = dot_product(Tstar_v,lattice_Stwin_v(:,index_myFamily+i,ph))
|
||||||
!* Stress ratios
|
!* Stress ratios
|
||||||
if (tau_twin(j) > tol_math_check) then
|
if (tau_twin > tol_math_check) then
|
||||||
StressRatio_r = (plasticState(ph)%state(7*ns+4*nt+j, of)/tau_twin(j))**constitutive_dislokmc_rPerTwinFamily(f,instance)
|
StressRatio_r = (plasticState(ph)%state(7*ns+4*nt+j, of)/tau_twin)**constitutive_dislokmc_rPerTwinFamily(f,instance)
|
||||||
!* Shear rates and their derivatives due to twin
|
!* Shear rates and their derivatives due to twin
|
||||||
|
|
||||||
select case(lattice_structure(ph))
|
select case(lattice_structure(ph))
|
||||||
case (LATTICE_fcc_ID)
|
case (LATTICE_fcc_ID)
|
||||||
s1=lattice_fcc_twinNucleationSlipPair(1,index_myFamily+i)
|
s1=lattice_fcc_twinNucleationSlipPair(1,index_myFamily+i)
|
||||||
s2=lattice_fcc_twinNucleationSlipPair(2,index_myFamily+i)
|
s2=lattice_fcc_twinNucleationSlipPair(2,index_myFamily+i)
|
||||||
if (tau_twin(j) < constitutive_dislokmc_tau_r(j,instance)) then
|
if (tau_twin < constitutive_dislokmc_tau_r(j,instance)) then
|
||||||
Ndot0=(abs(gdot_slip_pos(s1))*(plasticState(ph)%state(s2, of)+plasticState(ph)%state(ns+s2, of))+&
|
Ndot0=(abs(gdot_slip_pos(s1))*(plasticState(ph)%state(s2, of)+plasticState(ph)%state(ns+s2, of))+&
|
||||||
abs(gdot_slip_pos(s2))*(plasticState(ph)%state(s1, of)+plasticState(ph)%state(ns+s1, of)))/&
|
abs(gdot_slip_pos(s2))*(plasticState(ph)%state(s1, of)+plasticState(ph)%state(ns+s1, of)))/&
|
||||||
(constitutive_dislokmc_L0(instance)*constitutive_dislokmc_burgersPerSlipSystem(j,instance))*&
|
(constitutive_dislokmc_L0(instance)*constitutive_dislokmc_burgersPerSlipSystem(j,instance))*&
|
||||||
(1.0_pReal-exp(-constitutive_dislokmc_VcrossSlip(instance)/(kB*Temperature)*&
|
(1.0_pReal-exp(-constitutive_dislokmc_VcrossSlip(instance)/(kB*Temperature)*&
|
||||||
(constitutive_dislokmc_tau_r(j,instance)-tau_twin(j))))
|
(constitutive_dislokmc_tau_r(j,instance)-tau_twin)))
|
||||||
else
|
else
|
||||||
Ndot0=0.0_pReal
|
Ndot0=0.0_pReal
|
||||||
end if
|
end if
|
||||||
|
@ -1602,6 +1576,7 @@ subroutine constitutive_dislokmc_dotState(Tstar_v,Temperature,ipc,ip,el)
|
||||||
|
|
||||||
end subroutine constitutive_dislokmc_dotState
|
end subroutine constitutive_dislokmc_dotState
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief returns accumulated slip
|
!> @brief returns accumulated slip
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
@ -1637,15 +1612,16 @@ subroutine constitutive_dislokmc_getAccumulatedSlip(nSlip,accumulatedSlip,ipc, i
|
||||||
offset_accshear_slip = 2_pInt*nSlip
|
offset_accshear_slip = 2_pInt*nSlip
|
||||||
|
|
||||||
j = 0_pInt
|
j = 0_pInt
|
||||||
do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families
|
slipFamilies: do f = 1_pInt,lattice_maxNslipFamily
|
||||||
do i = 1_pInt,constitutive_dislokmc_Nslip(f,instance) ! process each (active) slip system in family
|
slipSystems: do i = 1_pInt,constitutive_dislokmc_Nslip(f,instance)
|
||||||
j = j+1_pInt
|
j = j+1_pInt
|
||||||
accumulatedSlip(j) = plasticState(phase)%state(offset_accshear_slip+j,offset)
|
accumulatedSlip(j) = plasticState(phase)%state(offset_accshear_slip+j,offset)
|
||||||
enddo
|
enddo slipSystems
|
||||||
enddo
|
enddo slipFamilies
|
||||||
|
|
||||||
end subroutine constitutive_dislokmc_getAccumulatedSlip
|
end subroutine constitutive_dislokmc_getAccumulatedSlip
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief returns accumulated slip
|
!> @brief returns accumulated slip
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
@ -1658,7 +1634,6 @@ subroutine constitutive_dislokmc_getSlipRate(nSlip,slipRate,ipc, ip, el)
|
||||||
phase_plasticityInstance
|
phase_plasticityInstance
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
|
|
||||||
real(pReal), dimension(:), allocatable :: &
|
real(pReal), dimension(:), allocatable :: &
|
||||||
slipRate
|
slipRate
|
||||||
integer(pInt) :: &
|
integer(pInt) :: &
|
||||||
|
@ -1682,12 +1657,12 @@ subroutine constitutive_dislokmc_getSlipRate(nSlip,slipRate,ipc, ip, el)
|
||||||
offset_accshear_slip = 2_pInt*nSlip
|
offset_accshear_slip = 2_pInt*nSlip
|
||||||
|
|
||||||
j = 0_pInt
|
j = 0_pInt
|
||||||
do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families
|
slipFamilies: do f = 1_pInt,lattice_maxNslipFamily
|
||||||
do i = 1_pInt,constitutive_dislokmc_Nslip(f,instance) ! process each (active) slip system in family
|
slipSystems: do i = 1_pInt,constitutive_dislokmc_Nslip(f,instance)
|
||||||
j = j+1_pInt
|
j = j+1_pInt
|
||||||
slipRate(j) = plasticState(phase)%dotState(offset_accshear_slip+j,offset)
|
slipRate(j) = plasticState(phase)%dotState(offset_accshear_slip+j,offset)
|
||||||
enddo
|
enddo slipSystems
|
||||||
enddo
|
enddo slipFamilies
|
||||||
|
|
||||||
end subroutine constitutive_dislokmc_getSlipRate
|
end subroutine constitutive_dislokmc_getSlipRate
|
||||||
|
|
||||||
|
@ -1746,7 +1721,8 @@ function constitutive_dislokmc_postResults(Tstar_v,Temperature,ipc,ip,el)
|
||||||
s1,s2, &
|
s1,s2, &
|
||||||
ph, &
|
ph, &
|
||||||
of
|
of
|
||||||
real(pReal) :: sumf,tau,StressRatio_p,StressRatio_pminus1,BoltzmannRatio,DotGamma0,StressRatio_r,Ndot0,dgdot_dtauslip
|
real(pReal) :: sumf,tau_slip_pos,tau_twin,StressRatio_p,StressRatio_pminus1,&
|
||||||
|
BoltzmannRatio,DotGamma0,StressRatio_r,Ndot0,dgdot_dtauslip,stressRatio
|
||||||
real(pReal) :: dvel_slip
|
real(pReal) :: dvel_slip
|
||||||
real(pReal) :: StressRatio_u,StressRatio_uminus1
|
real(pReal) :: StressRatio_u,StressRatio_uminus1
|
||||||
real(preal), dimension(constitutive_dislokmc_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: &
|
real(preal), dimension(constitutive_dislokmc_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: &
|
||||||
|
@ -1767,7 +1743,6 @@ function constitutive_dislokmc_postResults(Tstar_v,Temperature,ipc,ip,el)
|
||||||
c = 0_pInt
|
c = 0_pInt
|
||||||
constitutive_dislokmc_postResults = 0.0_pReal
|
constitutive_dislokmc_postResults = 0.0_pReal
|
||||||
|
|
||||||
|
|
||||||
do o = 1_pInt,constitutive_dislokmc_Noutput(instance)
|
do o = 1_pInt,constitutive_dislokmc_Noutput(instance)
|
||||||
select case(constitutive_dislokmc_outputID(o,instance))
|
select case(constitutive_dislokmc_outputID(o,instance))
|
||||||
|
|
||||||
|
@ -1778,49 +1753,39 @@ function constitutive_dislokmc_postResults(Tstar_v,Temperature,ipc,ip,el)
|
||||||
constitutive_dislokmc_postResults(c+1_pInt:c+ns) = plasticState(ph)%state(ns+1_pInt:2_pInt*ns, of)
|
constitutive_dislokmc_postResults(c+1_pInt:c+ns) = plasticState(ph)%state(ns+1_pInt:2_pInt*ns, of)
|
||||||
c = c + ns
|
c = c + ns
|
||||||
case (shear_rate_slip_ID)
|
case (shear_rate_slip_ID)
|
||||||
|
gdot_slip_pos = 0.0_pReal
|
||||||
j = 0_pInt
|
j = 0_pInt
|
||||||
do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families
|
do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families
|
||||||
index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family
|
index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family
|
||||||
do i = 1_pInt,constitutive_dislokmc_Nslip(f,instance) ! process each (active) slip system in family
|
do i = 1_pInt,constitutive_dislokmc_Nslip(f,instance) ! process each (active) slip system in family
|
||||||
j = j + 1_pInt
|
j = j + 1_pInt
|
||||||
|
|
||||||
!* Resolved shear stress on slip system
|
!* Resolved shear stress on slip system
|
||||||
tau = dot_product(Tstar_v,lattice_Sslip_v(:,1,index_myFamily+i,ph))
|
tau_slip_pos = dot_product(Tstar_v,lattice_Sslip_v(:,1,index_myFamily+i,ph))
|
||||||
!* Stress ratios
|
if((abs(tau_slip_pos)-plasticState(ph)%state(6*ns+4*nt+j, of)) > tol_math_check) then
|
||||||
if((abs(tau)-plasticState(ph)%state(6*ns+4*nt+j, of)) > tol_math_check) then
|
|
||||||
!* Stress ratios
|
|
||||||
StressRatio_p = ((abs(tau)-plasticState(ph)%state(6*ns+4*nt+j, of))/&
|
|
||||||
(constitutive_dislokmc_SolidSolutionStrength(instance)+&
|
|
||||||
constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))&
|
|
||||||
**constitutive_dislokmc_pPerSlipFamily(f,instance)
|
|
||||||
StressRatio_pminus1 = ((abs(tau)-plasticState(ph)%state(6*ns+4*nt+j, of))/&
|
|
||||||
(constitutive_dislokmc_SolidSolutionStrength(instance)+&
|
|
||||||
constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))&
|
|
||||||
**(constitutive_dislokmc_pPerSlipFamily(f,instance)-1.0_pReal)
|
|
||||||
StressRatio_u = ((abs(tau)-plasticState(ph)%state(6*ns+4*nt+j, of))/&
|
|
||||||
(constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))&
|
|
||||||
**constitutive_dislokmc_uPerSlipFamily(f,instance)
|
|
||||||
StressRatio_uminus1 = ((abs(tau)-plasticState(ph)%state(6*ns+4*nt+j, of))/&
|
|
||||||
(constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))&
|
|
||||||
**(constitutive_dislokmc_uPerSlipFamily(f,instance)-1.0_pReal)
|
|
||||||
|
|
||||||
!* Boltzmann ratio
|
!* Boltzmann ratio
|
||||||
BoltzmannRatio = constitutive_dislokmc_QedgePerSlipSystem(j,instance)/(kB*Temperature)
|
BoltzmannRatio = constitutive_dislokmc_QedgePerSlipSystem(j,instance)/(kB*Temperature)
|
||||||
!* Initial shear rates
|
!* Initial shear rates
|
||||||
DotGamma0 = &
|
DotGamma0 = &
|
||||||
plasticState(ph)%state(j, of)*constitutive_dislokmc_burgersPerSlipSystem(j,instance)*&
|
plasticState(ph)%state(j, of)*constitutive_dislokmc_burgersPerSlipSystem(j,instance)*&
|
||||||
constitutive_dislokmc_v0PerSlipSystem(j,instance)
|
constitutive_dislokmc_v0PerSlipSystem(j,instance)
|
||||||
|
!* Stress ratios
|
||||||
|
stressRatio = ((abs(tau_slip_pos)-plasticState(ph)%state(6*ns+4*nt+j, of))/&
|
||||||
|
(constitutive_dislokmc_SolidSolutionStrength(instance)+&
|
||||||
|
constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))
|
||||||
|
stressRatio_p = stressRatio** constitutive_dislokmc_pPerSlipFamily(f,instance)
|
||||||
|
stressRatio_pminus1 = stressRatio**(constitutive_dislokmc_pPerSlipFamily(f,instance)-1.0_pReal)
|
||||||
|
stressRatio_u = stressRatio** constitutive_dislokmc_uPerSlipFamily(f,instance)
|
||||||
|
stressRatio_uminus1 = stressRatio**(constitutive_dislokmc_uPerSlipFamily(f,instance)-1.0_pReal)
|
||||||
!* Shear rates due to slip
|
!* Shear rates due to slip
|
||||||
constitutive_dislokmc_postResults(c+j) = &
|
vel_slip(j) = exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)) &
|
||||||
DotGamma0*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)**&
|
|
||||||
constitutive_dislokmc_qPerSlipFamily(f,instance))*sign(1.0_pReal,tau) &
|
|
||||||
* (1.0_pReal-constitutive_dislokmc_sPerSlipFamily(f,instance) &
|
* (1.0_pReal-constitutive_dislokmc_sPerSlipFamily(f,instance) &
|
||||||
* exp(-BoltzmannRatio*(1_pInt-StressRatio_p)**constitutive_dislokmc_qPerSlipFamily(f,instance)))
|
* exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)))
|
||||||
else
|
|
||||||
constitutive_dislokmc_postResults(c+j) = 0.0_pReal
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
gdot_slip_pos(j) = DotGamma0 &
|
||||||
|
* StressRatio_u * vel_slip(j) &
|
||||||
|
* sign(1.0_pReal,tau_slip_pos)
|
||||||
|
endif
|
||||||
|
constitutive_dislokmc_postResults(c+j) = gdot_slip_pos(j)
|
||||||
enddo ; enddo
|
enddo ; enddo
|
||||||
c = c + ns
|
c = c + ns
|
||||||
case (accumulated_shear_slip_ID)
|
case (accumulated_shear_slip_ID)
|
||||||
|
@ -1863,49 +1828,37 @@ function constitutive_dislokmc_postResults(Tstar_v,Temperature,ipc,ip,el)
|
||||||
c = c + nt
|
c = c + nt
|
||||||
case (shear_rate_twin_ID)
|
case (shear_rate_twin_ID)
|
||||||
if (nt > 0_pInt) then
|
if (nt > 0_pInt) then
|
||||||
|
gdot_slip_pos = 0.0_pReal
|
||||||
j = 0_pInt
|
j = 0_pInt
|
||||||
do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families
|
do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families
|
||||||
index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family
|
index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family
|
||||||
do i = 1_pInt,constitutive_dislokmc_Nslip(f,instance) ! process each (active) slip system in family
|
do i = 1_pInt,constitutive_dislokmc_Nslip(f,instance) ! process each (active) slip system in family
|
||||||
j = j + 1_pInt
|
j = j + 1_pInt
|
||||||
|
|
||||||
!* Resolved shear stress on slip system
|
!* Resolved shear stress on slip system
|
||||||
tau = dot_product(Tstar_v,lattice_Sslip_v(:,1,index_myFamily+i,ph))
|
tau_slip_pos = dot_product(Tstar_v,lattice_Sslip_v(:,1,index_myFamily+i,ph))
|
||||||
!* Stress ratios
|
if((abs(tau_slip_pos)-plasticState(ph)%state(6*ns+4*nt+j, of)) > tol_math_check) then
|
||||||
if((abs(tau)-plasticState(ph)%state(6*ns+4*nt+j, of)) > tol_math_check) then
|
|
||||||
!* Stress ratios
|
|
||||||
StressRatio_p = ((abs(tau)-plasticState(ph)%state(6*ns+4*nt+j, of))/&
|
|
||||||
(constitutive_dislokmc_SolidSolutionStrength(instance)+&
|
|
||||||
constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))&
|
|
||||||
**constitutive_dislokmc_pPerSlipFamily(f,instance)
|
|
||||||
StressRatio_pminus1 = ((abs(tau)-plasticState(ph)%state(6*ns+4*nt+j, of))/&
|
|
||||||
(constitutive_dislokmc_SolidSolutionStrength(instance)+&
|
|
||||||
constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))&
|
|
||||||
**(constitutive_dislokmc_pPerSlipFamily(f,instance)-1.0_pReal)
|
|
||||||
|
|
||||||
StressRatio_u = ((abs(tau)-plasticState(ph)%state(6*ns+4*nt+j, of))/&
|
|
||||||
(constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))&
|
|
||||||
**constitutive_dislokmc_uPerSlipFamily(f,instance)
|
|
||||||
StressRatio_uminus1 = ((abs(tau)-plasticState(ph)%state(6*ns+4*nt+j, of))/&
|
|
||||||
(constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))&
|
|
||||||
**(constitutive_dislokmc_uPerSlipFamily(f,instance)-1.0_pReal)
|
|
||||||
|
|
||||||
!* Boltzmann ratio
|
!* Boltzmann ratio
|
||||||
BoltzmannRatio = constitutive_dislokmc_QedgePerSlipSystem(j,instance)/(kB*Temperature)
|
BoltzmannRatio = constitutive_dislokmc_QedgePerSlipSystem(j,instance)/(kB*Temperature)
|
||||||
!* Initial shear rates
|
!* Initial shear rates
|
||||||
DotGamma0 = &
|
DotGamma0 = &
|
||||||
plasticState(ph)%state(j, of)*constitutive_dislokmc_burgersPerSlipSystem(j,instance)*&
|
plasticState(ph)%state(j, of)*constitutive_dislokmc_burgersPerSlipSystem(j,instance)*&
|
||||||
constitutive_dislokmc_v0PerSlipSystem(j,instance)
|
constitutive_dislokmc_v0PerSlipSystem(j,instance)
|
||||||
|
!* Stress ratios
|
||||||
|
stressRatio = ((abs(tau_slip_pos)-plasticState(ph)%state(6*ns+4*nt+j, of))/&
|
||||||
|
(constitutive_dislokmc_SolidSolutionStrength(instance)+&
|
||||||
|
constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))
|
||||||
|
stressRatio_p = stressRatio** constitutive_dislokmc_pPerSlipFamily(f,instance)
|
||||||
|
stressRatio_pminus1 = stressRatio**(constitutive_dislokmc_pPerSlipFamily(f,instance)-1.0_pReal)
|
||||||
|
stressRatio_u = stressRatio** constitutive_dislokmc_uPerSlipFamily(f,instance)
|
||||||
|
stressRatio_uminus1 = stressRatio**(constitutive_dislokmc_uPerSlipFamily(f,instance)-1.0_pReal)
|
||||||
!* Shear rates due to slip
|
!* Shear rates due to slip
|
||||||
gdot_slip_pos(j) = DotGamma0*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)**&
|
vel_slip(j) = exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)) &
|
||||||
constitutive_dislokmc_qPerSlipFamily(f,instance))*sign(1.0_pReal,tau) &
|
|
||||||
* (1.0_pReal-constitutive_dislokmc_sPerSlipFamily(f,instance) &
|
* (1.0_pReal-constitutive_dislokmc_sPerSlipFamily(f,instance) &
|
||||||
* exp(-BoltzmannRatio*(1_pInt-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)) ) &
|
* exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)))
|
||||||
* StressRatio_u
|
|
||||||
else
|
gdot_slip_pos(j) = DotGamma0 &
|
||||||
gdot_slip_pos(j) = 0.0_pReal
|
* StressRatio_u * vel_slip(j) &
|
||||||
|
* sign(1.0_pReal,tau_slip_pos)
|
||||||
endif
|
endif
|
||||||
enddo;enddo
|
enddo;enddo
|
||||||
|
|
||||||
|
@ -1916,24 +1869,24 @@ function constitutive_dislokmc_postResults(Tstar_v,Temperature,ipc,ip,el)
|
||||||
j = j + 1_pInt
|
j = j + 1_pInt
|
||||||
|
|
||||||
!* Resolved shear stress on twin system
|
!* Resolved shear stress on twin system
|
||||||
tau = dot_product(Tstar_v,lattice_Stwin_v(:,index_myFamily+i,ph))
|
tau_twin = dot_product(Tstar_v,lattice_Stwin_v(:,index_myFamily+i,ph))
|
||||||
!* Stress ratios
|
!* Stress ratios
|
||||||
StressRatio_r = (plasticState(ph)%state(7_pInt*ns+4_pInt*nt+j, of)/ &
|
StressRatio_r = (plasticState(ph)%state(7_pInt*ns+4_pInt*nt+j, of)/ &
|
||||||
tau)**constitutive_dislokmc_rPerTwinFamily(f,instance)
|
tau_twin)**constitutive_dislokmc_rPerTwinFamily(f,instance)
|
||||||
|
|
||||||
!* Shear rates due to twin
|
!* Shear rates due to twin
|
||||||
if ( tau > 0.0_pReal ) then
|
if ( tau_twin > 0.0_pReal ) then
|
||||||
select case(lattice_structure(ph))
|
select case(lattice_structure(ph))
|
||||||
case (LATTICE_fcc_ID)
|
case (LATTICE_fcc_ID)
|
||||||
s1=lattice_fcc_twinNucleationSlipPair(1,index_myFamily+i)
|
s1=lattice_fcc_twinNucleationSlipPair(1,index_myFamily+i)
|
||||||
s2=lattice_fcc_twinNucleationSlipPair(2,index_myFamily+i)
|
s2=lattice_fcc_twinNucleationSlipPair(2,index_myFamily+i)
|
||||||
if (tau < constitutive_dislokmc_tau_r(j,instance)) then
|
if (tau_twin < constitutive_dislokmc_tau_r(j,instance)) then
|
||||||
Ndot0=(abs(gdot_slip_pos(s1))*(plasticState(ph)%state(s2, of)+plasticState(ph)%state(ns+s2, of))+&
|
Ndot0=(abs(gdot_slip_pos(s1))*(plasticState(ph)%state(s2, of)+plasticState(ph)%state(ns+s2, of))+&
|
||||||
abs(gdot_slip_pos(s2))*(plasticState(ph)%state(s1, of)+plasticState(ph)%state(ns+s1, of)))/&
|
abs(gdot_slip_pos(s2))*(plasticState(ph)%state(s1, of)+plasticState(ph)%state(ns+s1, of)))/&
|
||||||
(constitutive_dislokmc_L0(instance)*&
|
(constitutive_dislokmc_L0(instance)*&
|
||||||
constitutive_dislokmc_burgersPerSlipSystem(j,instance))*&
|
constitutive_dislokmc_burgersPerSlipSystem(j,instance))*&
|
||||||
(1.0_pReal-exp(-constitutive_dislokmc_VcrossSlip(instance)/(kB*Temperature)*&
|
(1.0_pReal-exp(-constitutive_dislokmc_VcrossSlip(instance)/(kB*Temperature)*&
|
||||||
(constitutive_dislokmc_tau_r(j,instance)-tau)))
|
(constitutive_dislokmc_tau_r(j,instance)-tau_twin)))
|
||||||
else
|
else
|
||||||
Ndot0=0.0_pReal
|
Ndot0=0.0_pReal
|
||||||
end if
|
end if
|
||||||
|
@ -1947,6 +1900,7 @@ function constitutive_dislokmc_postResults(Tstar_v,Temperature,ipc,ip,el)
|
||||||
|
|
||||||
enddo ; enddo
|
enddo ; enddo
|
||||||
endif
|
endif
|
||||||
|
|
||||||
c = c + nt
|
c = c + nt
|
||||||
case (accumulated_shear_twin_ID)
|
case (accumulated_shear_twin_ID)
|
||||||
constitutive_dislokmc_postResults(c+1_pInt:c+nt) = plasticState(ph)% &
|
constitutive_dislokmc_postResults(c+1_pInt:c+nt) = plasticState(ph)% &
|
||||||
|
@ -1972,46 +1926,37 @@ function constitutive_dislokmc_postResults(Tstar_v,Temperature,ipc,ip,el)
|
||||||
state((7_pInt*ns+4_pInt*nt+1_pInt):(7_pInt*ns+5_pInt*nt), of)
|
state((7_pInt*ns+4_pInt*nt+1_pInt):(7_pInt*ns+5_pInt*nt), of)
|
||||||
c = c + nt
|
c = c + nt
|
||||||
case (stress_exponent_ID)
|
case (stress_exponent_ID)
|
||||||
|
gdot_slip_pos = 0.0_pReal
|
||||||
j = 0_pInt
|
j = 0_pInt
|
||||||
do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families
|
do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families
|
||||||
index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family
|
index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family
|
||||||
do i = 1_pInt,constitutive_dislokmc_Nslip(f,instance) ! process each (active) slip system in family
|
do i = 1_pInt,constitutive_dislokmc_Nslip(f,instance) ! process each (active) slip system in family
|
||||||
j = j + 1_pInt
|
j = j + 1_pInt
|
||||||
|
tau_slip_pos = dot_product(Tstar_v,lattice_Sslip_v(:,1,index_myFamily+i,ph))
|
||||||
!* Resolved shear stress on slip system
|
dgdot_dtauslip = 0.0_pReal
|
||||||
tau = dot_product(Tstar_v,lattice_Sslip_v(:,1,index_myFamily+i,ph))
|
if((abs(tau_slip_pos)-plasticState(ph)%state(6*ns+4*nt+j, of)) > tol_math_check) then
|
||||||
if((abs(tau)-plasticState(ph)%state(6*ns+4*nt+j, of)) > tol_math_check) then
|
|
||||||
!* Stress ratios
|
|
||||||
StressRatio_p = ((abs(tau)-plasticState(ph)%state(6*ns+4*nt+j, of))/&
|
|
||||||
(constitutive_dislokmc_SolidSolutionStrength(instance)+&
|
|
||||||
constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))&
|
|
||||||
**constitutive_dislokmc_pPerSlipFamily(f,instance)
|
|
||||||
StressRatio_pminus1 = ((abs(tau)-plasticState(ph)%state(6*ns+4*nt+j, of))/&
|
|
||||||
(constitutive_dislokmc_SolidSolutionStrength(instance)+&
|
|
||||||
constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))&
|
|
||||||
**(constitutive_dislokmc_pPerSlipFamily(f,instance)-1.0_pReal)
|
|
||||||
StressRatio_u = ((abs(tau)-plasticState(ph)%state(6*ns+4*nt+j,of))/&
|
|
||||||
(constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))&
|
|
||||||
**constitutive_dislokmc_uPerSlipFamily(f,instance)
|
|
||||||
StressRatio_uminus1 = ((abs(tau)-plasticState(ph)%state(6*ns+4*nt+j,of))/&
|
|
||||||
(constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))&
|
|
||||||
**(constitutive_dislokmc_uPerSlipFamily(f,instance)-1.0_pReal)
|
|
||||||
|
|
||||||
!* Boltzmann ratio
|
!* Boltzmann ratio
|
||||||
BoltzmannRatio = constitutive_dislokmc_QedgePerSlipSystem(j,instance)/(kB*Temperature)
|
BoltzmannRatio = constitutive_dislokmc_QedgePerSlipSystem(j,instance)/(kB*Temperature)
|
||||||
!* Initial shear rates
|
!* Initial shear rates
|
||||||
DotGamma0 = &
|
DotGamma0 = &
|
||||||
plasticState(ph)%state(j, of)*constitutive_dislokmc_burgersPerSlipSystem(j,instance)*&
|
plasticState(ph)%state(j, of)*constitutive_dislokmc_burgersPerSlipSystem(j,instance)*&
|
||||||
constitutive_dislokmc_v0PerSlipSystem(j,instance)
|
constitutive_dislokmc_v0PerSlipSystem(j,instance)
|
||||||
|
!* Stress ratios
|
||||||
|
stressRatio = ((abs(tau_slip_pos)-plasticState(ph)%state(6*ns+4*nt+j, of))/&
|
||||||
|
(constitutive_dislokmc_SolidSolutionStrength(instance)+&
|
||||||
|
constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))
|
||||||
|
stressRatio_p = stressRatio** constitutive_dislokmc_pPerSlipFamily(f,instance)
|
||||||
|
stressRatio_pminus1 = stressRatio**(constitutive_dislokmc_pPerSlipFamily(f,instance)-1.0_pReal)
|
||||||
|
stressRatio_u = stressRatio** constitutive_dislokmc_uPerSlipFamily(f,instance)
|
||||||
|
stressRatio_uminus1 = stressRatio**(constitutive_dislokmc_uPerSlipFamily(f,instance)-1.0_pReal)
|
||||||
!* Shear rates due to slip
|
!* Shear rates due to slip
|
||||||
vel_slip(j) = exp(-BoltzmannRatio*(1-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)) &
|
vel_slip(j) = exp(-BoltzmannRatio*(1-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)) &
|
||||||
* (1.0_pReal-constitutive_dislokmc_sPerSlipFamily(f,instance) &
|
* (1.0_pReal-constitutive_dislokmc_sPerSlipFamily(f,instance) &
|
||||||
* exp(-BoltzmannRatio*(1-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)))
|
* exp(-BoltzmannRatio*(1-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)))
|
||||||
|
|
||||||
gdot_slip_pos(j) = (1.0_pReal - sumf) * DotGamma0 &
|
gdot_slip_pos(j) = DotGamma0 &
|
||||||
* StressRatio_u * vel_slip(j) &
|
* StressRatio_u * vel_slip(j) &
|
||||||
* sign(1.0_pReal,tau)
|
* sign(1.0_pReal,tau_slip_pos)
|
||||||
!* Derivatives of shear rates
|
!* Derivatives of shear rates
|
||||||
dvel_slip = &
|
dvel_slip = &
|
||||||
(abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)))&
|
(abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)))&
|
||||||
|
@ -2022,24 +1967,18 @@ function constitutive_dislokmc_postResults(Tstar_v,Temperature,ipc,ip,el)
|
||||||
*(1.0_pReal - 2.0_pReal*constitutive_dislokmc_sPerSlipFamily(f,instance)&
|
*(1.0_pReal - 2.0_pReal*constitutive_dislokmc_sPerSlipFamily(f,instance)&
|
||||||
*abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance))))
|
*abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance))))
|
||||||
|
|
||||||
dgdot_dtauslip = &
|
dgdot_dtauslip = DotGamma0 * &
|
||||||
(1.0_pReal - sumf) * DotGamma0 * &
|
|
||||||
( constitutive_dislokmc_uPerSlipFamily(f,instance)*StressRatio_uminus1 &
|
( constitutive_dislokmc_uPerSlipFamily(f,instance)*StressRatio_uminus1 &
|
||||||
/(constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance))&
|
/(constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance))&
|
||||||
* vel_slip(j) &
|
* vel_slip(j) &
|
||||||
+ StressRatio_u * dvel_slip )
|
+ StressRatio_u * dvel_slip )
|
||||||
|
|
||||||
|
|
||||||
else
|
|
||||||
gdot_slip_pos(j) = 0.0_pReal
|
|
||||||
dgdot_dtauslip = 0.0_pReal
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
!* Stress exponent
|
!* Stress exponent
|
||||||
if (gdot_slip_pos(j)==0.0_pReal) then
|
if (gdot_slip_pos(j)==0.0_pReal) then
|
||||||
constitutive_dislokmc_postResults(c+j) = 0.0_pReal
|
constitutive_dislokmc_postResults(c+j) = 0.0_pReal
|
||||||
else
|
else
|
||||||
constitutive_dislokmc_postResults(c+j) = (tau/gdot_slip_pos(j))*dgdot_dtauslip
|
constitutive_dislokmc_postResults(c+j) = (tau_twin/gdot_slip_pos(j))*dgdot_dtauslip
|
||||||
endif
|
endif
|
||||||
enddo ; enddo
|
enddo ; enddo
|
||||||
c = c + ns
|
c = c + ns
|
||||||
|
|
Loading…
Reference in New Issue