This commit is contained in:
David Cereceda Senas 2015-01-15 22:40:17 +00:00
parent 62ff5d1d45
commit b1ef2f9dd9
1 changed files with 343 additions and 76 deletions

View File

@ -109,6 +109,7 @@ module plastic_disloucla
plastic_disloucla_omega, & !< attempt frequency for kink pair nucleation plastic_disloucla_omega, & !< attempt frequency for kink pair nucleation
plastic_disloucla_kinkwidth, & !< width of the kink pair plastic_disloucla_kinkwidth, & !< width of the kink pair
plastic_disloucla_dislolength, & !< dislocation length (lamda) plastic_disloucla_dislolength, & !< dislocation length (lamda)
plastic_disloucla_friction, & !< friction coeff. B (kMC)
!* !*
plastic_disloucla_rPerTwinFamily, & !< r-exponent in twin nucleation rate plastic_disloucla_rPerTwinFamily, & !< r-exponent in twin nucleation rate
plastic_disloucla_nonSchmidCoeff !< non-Schmid coefficients (bcc) plastic_disloucla_nonSchmidCoeff !< non-Schmid coefficients (bcc)
@ -147,6 +148,8 @@ module plastic_disloucla
plastic_disloucla_microstructure, & plastic_disloucla_microstructure, &
plastic_disloucla_LpAndItsTangent, & plastic_disloucla_LpAndItsTangent, &
plastic_disloucla_dotState, & plastic_disloucla_dotState, &
plastic_disloucla_getAccumulatedSlip, &
plastic_disloucla_getSlipRate, &
plastic_disloucla_postResults plastic_disloucla_postResults
private :: & private :: &
plastic_disloucla_stateInit, & plastic_disloucla_stateInit, &
@ -207,7 +210,7 @@ subroutine plastic_disloucla_init(fileUnit)
f,instance,j,k,l,m,n,o,p,q,r,s,ns,nt, & f,instance,j,k,l,m,n,o,p,q,r,s,ns,nt, &
Nchunks_SlipSlip, Nchunks_SlipTwin, Nchunks_TwinSlip, Nchunks_TwinTwin, & Nchunks_SlipSlip, Nchunks_SlipTwin, Nchunks_TwinSlip, Nchunks_TwinTwin, &
Nchunks_SlipFamilies, Nchunks_TwinFamilies, Nchunks_nonSchmid, & Nchunks_SlipFamilies, Nchunks_TwinFamilies, Nchunks_nonSchmid, &
offset_slip, index_myFamily, index_otherFamily index_myFamily, index_otherFamily
integer(pInt) :: sizeState, sizeDotState integer(pInt) :: sizeState, sizeDotState
integer(pInt) :: NofMyPhase integer(pInt) :: NofMyPhase
character(len=65536) :: & character(len=65536) :: &
@ -258,10 +261,16 @@ subroutine plastic_disloucla_init(fileUnit)
allocate(plastic_disloucla_rhoEdge0(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) allocate(plastic_disloucla_rhoEdge0(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal)
allocate(plastic_disloucla_rhoEdgeDip0(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) allocate(plastic_disloucla_rhoEdgeDip0(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal)
allocate(plastic_disloucla_burgersPerSlipFamily(lattice_maxNslipFamily,maxNinstance),source=0.0_pReal) allocate(plastic_disloucla_burgersPerSlipFamily(lattice_maxNslipFamily,maxNinstance),source=0.0_pReal)
allocate(plastic_disloucla_kinkheight(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) allocate(plastic_disloucla_kinkheight(lattice_maxNslipFamily,maxNinstance), &
allocate(plastic_disloucla_omega(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) source=0.0_pReal)
allocate(plastic_disloucla_kinkwidth(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) allocate(plastic_disloucla_omega(lattice_maxNslipFamily,maxNinstance), &
allocate(plastic_disloucla_dislolength(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) source=0.0_pReal)
allocate(plastic_disloucla_kinkwidth(lattice_maxNslipFamily,maxNinstance), &
source=0.0_pReal)
allocate(plastic_disloucla_dislolength(lattice_maxNslipFamily,maxNinstance), &
source=0.0_pReal)
allocate(plastic_disloucla_friction(lattice_maxNslipFamily,maxNinstance), &
source=0.0_pReal)
allocate(plastic_disloucla_burgersPerTwinFamily(lattice_maxNtwinFamily,maxNinstance),source=0.0_pReal) allocate(plastic_disloucla_burgersPerTwinFamily(lattice_maxNtwinFamily,maxNinstance),source=0.0_pReal)
allocate(plastic_disloucla_QedgePerSlipFamily(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) allocate(plastic_disloucla_QedgePerSlipFamily(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal)
allocate(plastic_disloucla_v0PerSlipFamily(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) allocate(plastic_disloucla_v0PerSlipFamily(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal)
@ -403,7 +412,7 @@ subroutine plastic_disloucla_init(fileUnit)
plastic_disloucla_Nslip(j,instance) = IO_intValue(line,positions,1_pInt+j) plastic_disloucla_Nslip(j,instance) = IO_intValue(line,positions,1_pInt+j)
enddo enddo
case ('rhoedge0','rhoedgedip0','slipburgers','qedge','v0','clambdaslip','tau_peierls','p_slip','q_slip',& case ('rhoedge0','rhoedgedip0','slipburgers','qedge','v0','clambdaslip','tau_peierls','p_slip','q_slip',&
'u_slip','s_slip','kink_height','omega','kink_width','dislolength') 'u_slip','s_slip','kink_height','omega','kink_width','dislolength','friction_coeff')
do j = 1_pInt, Nchunks_SlipFamilies do j = 1_pInt, Nchunks_SlipFamilies
tempPerSlip(j) = IO_floatValue(line,positions,1_pInt+j) tempPerSlip(j) = IO_floatValue(line,positions,1_pInt+j)
enddo enddo
@ -433,13 +442,20 @@ subroutine plastic_disloucla_init(fileUnit)
case ('s_slip') case ('s_slip')
plastic_disloucla_sPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) plastic_disloucla_sPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies)
case ('kink_height') case ('kink_height')
plastic_disloucla_kinkheight(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) plastic_disloucla_kinkheight(1:Nchunks_SlipFamilies,instance) = &
tempPerSlip(1:Nchunks_SlipFamilies)
case ('omega') case ('omega')
plastic_disloucla_omega(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) plastic_disloucla_omega(1:Nchunks_SlipFamilies,instance) = &
tempPerSlip(1:Nchunks_SlipFamilies)
case ('kink_width') case ('kink_width')
plastic_disloucla_kinkwidth(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) plastic_disloucla_kinkwidth(1:Nchunks_SlipFamilies,instance) = &
tempPerSlip(1:Nchunks_SlipFamilies)
case ('dislolength') case ('dislolength')
plastic_disloucla_dislolength(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) plastic_disloucla_dislolength(1:Nchunks_SlipFamilies,instance) = &
tempPerSlip(1:Nchunks_SlipFamilies)
case ('friction_coeff')
plastic_disloucla_friction(1:Nchunks_SlipFamilies,instance) = &
tempPerSlip(1:Nchunks_SlipFamilies)
end select end select
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
! parameters depending on slip number of twin families ! parameters depending on slip number of twin families
@ -678,9 +694,6 @@ subroutine plastic_disloucla_init(fileUnit)
plasticState(phase)%sizeState = sizeState plasticState(phase)%sizeState = sizeState
plasticState(phase)%sizeDotState = sizeDotState plasticState(phase)%sizeDotState = sizeDotState
plasticState(phase)%nSlip = plastic_disloucla_totalNslip(instance)
plasticState(phase)%nTwin = 0_pInt
plasticState(phase)%nTrans= 0_pInt
allocate(plasticState(phase)%aTolState (sizeState), source=0.0_pReal) allocate(plasticState(phase)%aTolState (sizeState), source=0.0_pReal)
allocate(plasticState(phase)%state0 (sizeState,NofMyPhase), source=0.0_pReal) allocate(plasticState(phase)%state0 (sizeState,NofMyPhase), source=0.0_pReal)
allocate(plasticState(phase)%partionedState0 (sizeState,NofMyPhase), source=0.0_pReal) allocate(plasticState(phase)%partionedState0 (sizeState,NofMyPhase), source=0.0_pReal)
@ -699,11 +712,6 @@ subroutine plastic_disloucla_init(fileUnit)
allocate(plasticState(phase)%RK4dotState (sizeDotState,NofMyPhase), source=0.0_pReal) allocate(plasticState(phase)%RK4dotState (sizeDotState,NofMyPhase), source=0.0_pReal)
if (any(numerics_integrator == 5_pInt)) & if (any(numerics_integrator == 5_pInt)) &
allocate(plasticState(phase)%RKCK45dotState (6,sizeDotState,NofMyPhase),source=0.0_pReal) allocate(plasticState(phase)%RKCK45dotState (6,sizeDotState,NofMyPhase),source=0.0_pReal)
offset_slip = 2_pInt*plasticState(phase)%nSlip
plasticState(phase)%slipRate => &
plasticState(phase)%dotState(offset_slip+1:offset_slip+plasticState(phase)%nSlip,1:NofMyPhase)
plasticState(phase)%accumulatedSlip => &
plasticState(phase)%state (offset_slip+1:offset_slip+plasticState(phase)%nSlip,1:NofMyPhase)
!* Process slip related parameters ------------------------------------------------ !* Process slip related parameters ------------------------------------------------
mySlipFamilies: do f = 1_pInt,lattice_maxNslipFamily mySlipFamilies: do f = 1_pInt,lattice_maxNslipFamily
@ -1232,14 +1240,18 @@ subroutine plastic_disloucla_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Temperature
stressRatio_u = stressRatio** plastic_disloucla_uPerSlipFamily(f,instance) stressRatio_u = stressRatio** plastic_disloucla_uPerSlipFamily(f,instance)
stressRatio_uminus1 = stressRatio**(plastic_disloucla_uPerSlipFamily(f,instance)-1.0_pReal) stressRatio_uminus1 = stressRatio**(plastic_disloucla_uPerSlipFamily(f,instance)-1.0_pReal)
!* Shear rates due to slip !* Shear rates due to slip
vel_slip = plastic_disloucla_kinkheight(f,instance) * plastic_disloucla_omega(f,instance) &
vel_slip = 2.0_pReal*plastic_disloucla_burgersPerSlipFamily(f,instance) &
* plastic_disloucla_kinkheight(f,instance) * plastic_disloucla_omega(f,instance) &
* ( plasticState(ph)%state(5_pInt*ns+3_pInt*nt+j,of) - plastic_disloucla_kinkwidth(f,instance) ) & * ( plasticState(ph)%state(5_pInt*ns+3_pInt*nt+j,of) - plastic_disloucla_kinkwidth(f,instance) ) &
! ^ ^ ^ * (tau_slip_pos &
! | | position in state for all points of the same instance * exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) ) &
! | offset in state (positin of mfp of j in state) / ( &
! state of the phase "ph" (in the case of single phase material ph=1) 2.0_pReal*(plastic_disloucla_burgersPerSlipFamily(f,instance)**2.0_pReal)*tau_slip_pos &
/ plastic_disloucla_burgersPerSlipFamily(f,instance) & + plastic_disloucla_omega(f,instance) * plastic_disloucla_friction(f,instance) &
* exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) *(( plasticState(ph)%state(5_pInt*ns+3_pInt*nt+j,of) - plastic_disloucla_kinkwidth(f,instance) )**2.0_pReal) &
* exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) &
)
gdot_slip_pos(j) = DotGamma0 & gdot_slip_pos(j) = DotGamma0 &
* vel_slip & * vel_slip &
@ -1247,14 +1259,44 @@ subroutine plastic_disloucla_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Temperature
!* Derivatives of shear rates !* Derivatives of shear rates
dvel_slip = & dvel_slip = &
(abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)))& 2.0_pReal*plastic_disloucla_burgersPerSlipFamily(f,instance) &
* plastic_disloucla_kinkheight(f,instance) * plastic_disloucla_omega(f,instance) &
* ( plasticState(ph)%state(5_pInt*ns+3_pInt*nt+j,of) - plastic_disloucla_kinkwidth(f,instance) ) &
* ( &
(exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) &
+ tau_slip_pos &
* (abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)))& !deltaf(i)
*BoltzmannRatio*plastic_disloucla_pPerSlipFamily(f,instance)& *BoltzmannRatio*plastic_disloucla_pPerSlipFamily(f,instance)&
*plastic_disloucla_qPerSlipFamily(f,instance)/& *plastic_disloucla_qPerSlipFamily(f,instance)/&
(plastic_disloucla_SolidSolutionStrength(instance)+plastic_disloucla_tau_peierlsPerSlipFamily(f,instance))*& (plastic_disloucla_SolidSolutionStrength(instance)+plastic_disloucla_tau_peierlsPerSlipFamily(f,instance))*&
StressRatio_pminus1*(1-StressRatio_p)**(plastic_disloucla_qPerSlipFamily(f,instance)-1.0_pReal) )& StressRatio_pminus1*(1-StressRatio_p)**(plastic_disloucla_qPerSlipFamily(f,instance)-1.0_pReal) ) &!deltaf(f)
* plastic_disloucla_kinkheight(f,instance) * plastic_disloucla_omega(f,instance) & ) &
* ( plastic_disloucla_dislolength(f,instance) - plastic_disloucla_kinkwidth(f,instance) ) & * (2.0_pReal*(plastic_disloucla_burgersPerSlipFamily(f,instance)**2.0_pReal)*tau_slip_pos &
/ plastic_disloucla_burgersPerSlipFamily(f,instance) + plastic_disloucla_omega(f,instance) * plastic_disloucla_friction(f,instance) &
*(( plasticState(ph)%state(5_pInt*ns+3_pInt*nt+j,of) - plastic_disloucla_kinkwidth(f,instance) )**2.0_pReal) &
* exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) &
) &
- (tau_slip_pos &
* exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) ) &
* (2.0_pReal*(plastic_disloucla_burgersPerSlipFamily(f,instance)**2.0_pReal) &
+ plastic_disloucla_omega(f,instance) * plastic_disloucla_friction(f,instance) &
*(( plasticState(ph)%state(5_pInt*ns+3_pInt*nt+j,of) - plastic_disloucla_kinkwidth(f,instance) )**2.0_pReal) &
* (abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)))& !deltaf(i)
*BoltzmannRatio*plastic_disloucla_pPerSlipFamily(f,instance)&
*plastic_disloucla_qPerSlipFamily(f,instance)/&
(plastic_disloucla_SolidSolutionStrength(instance)+plastic_disloucla_tau_peierlsPerSlipFamily(f,instance))*&
StressRatio_pminus1*(1-StressRatio_p)**(plastic_disloucla_qPerSlipFamily(f,instance)-1.0_pReal) )& !deltaf(f)
) &
) &
/ ( &
( &
2.0_pReal*(plastic_disloucla_burgersPerSlipFamily(f,instance)**2.0_pReal)*tau_slip_pos &
+ plastic_disloucla_omega(f,instance) * plastic_disloucla_friction(f,instance) &
*(( plasticState(ph)%state(5_pInt*ns+3_pInt*nt+j,of) - plastic_disloucla_kinkwidth(f,instance) )**2.0_pReal) &
* exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) &
)**2.0_pReal &
)
dgdot_dtauslip_pos = DotGamma0 * dvel_slip dgdot_dtauslip_pos = DotGamma0 * dvel_slip
@ -1272,28 +1314,66 @@ subroutine plastic_disloucla_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Temperature
stressRatio_u = stressRatio** plastic_disloucla_uPerSlipFamily(f,instance) stressRatio_u = stressRatio** plastic_disloucla_uPerSlipFamily(f,instance)
stressRatio_uminus1 = stressRatio**(plastic_disloucla_uPerSlipFamily(f,instance)-1.0_pReal) stressRatio_uminus1 = stressRatio**(plastic_disloucla_uPerSlipFamily(f,instance)-1.0_pReal)
!* Shear rates due to slip !* Shear rates due to slip
vel_slip = plastic_disloucla_kinkheight(f,instance) * plastic_disloucla_omega(f,instance) & vel_slip = 2.0_pReal*plastic_disloucla_burgersPerSlipFamily(f,instance) &
* ( plastic_disloucla_dislolength(f,instance) - plastic_disloucla_kinkwidth(f,instance) ) & * plastic_disloucla_kinkheight(f,instance) * plastic_disloucla_omega(f,instance) &
/ plastic_disloucla_burgersPerSlipFamily(f,instance) & * ( plasticState(ph)%state(5_pInt*ns+3_pInt*nt+j,of) - plastic_disloucla_kinkwidth(f,instance) ) &
* exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) * (tau_slip_neg &
* exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) ) &
/ ( &
2.0_pReal*(plastic_disloucla_burgersPerSlipFamily(f,instance)**2.0_pReal)*tau_slip_neg &
+ plastic_disloucla_omega(f,instance) * plastic_disloucla_friction(f,instance) &
*(( plasticState(ph)%state(5_pInt*ns+3_pInt*nt+j,of) - plastic_disloucla_kinkwidth(f,instance) )**2.0_pReal) &
* exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) &
)
gdot_slip_neg(j) = DotGamma0 & gdot_slip_neg(j) = DotGamma0 &
* vel_slip & * vel_slip &
* sign(1.0_pReal,tau_slip_neg) * sign(1.0_pReal,tau_slip_neg)
!* Derivatives of shear rates !* Derivatives of shear rates
!*dvel_slip = &
dvel_slip = & dvel_slip = &
(abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)))& 2.0_pReal*plastic_disloucla_burgersPerSlipFamily(f,instance) &
* plastic_disloucla_kinkheight(f,instance) * plastic_disloucla_omega(f,instance) &
* ( plasticState(ph)%state(5_pInt*ns+3_pInt*nt+j,of) - plastic_disloucla_kinkwidth(f,instance) ) &
* ( &
(exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) &
+ tau_slip_neg &
* (abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)))& !deltaf(i)
*BoltzmannRatio*plastic_disloucla_pPerSlipFamily(f,instance)& *BoltzmannRatio*plastic_disloucla_pPerSlipFamily(f,instance)&
*plastic_disloucla_qPerSlipFamily(f,instance)/& *plastic_disloucla_qPerSlipFamily(f,instance)/&
(plastic_disloucla_SolidSolutionStrength(instance)+plastic_disloucla_tau_peierlsPerSlipFamily(f,instance))*& (plastic_disloucla_SolidSolutionStrength(instance)+plastic_disloucla_tau_peierlsPerSlipFamily(f,instance))*&
StressRatio_pminus1*(1-StressRatio_p)**(plastic_disloucla_qPerSlipFamily(f,instance)-1.0_pReal) )& StressRatio_pminus1*(1-StressRatio_p)**(plastic_disloucla_qPerSlipFamily(f,instance)-1.0_pReal) ) &!deltaf(f)
* plastic_disloucla_kinkheight(f,instance) * plastic_disloucla_omega(f,instance) & ) &
* ( plastic_disloucla_dislolength(f,instance) - plastic_disloucla_kinkwidth(f,instance) ) & * (2.0_pReal*(plastic_disloucla_burgersPerSlipFamily(f,instance)**2.0_pReal)*tau_slip_neg &
/ plastic_disloucla_burgersPerSlipFamily(f,instance) + plastic_disloucla_omega(f,instance) * plastic_disloucla_friction(f,instance) &
*(( plasticState(ph)%state(5_pInt*ns+3_pInt*nt+j,of) - plastic_disloucla_kinkwidth(f,instance) )**2.0_pReal) &
* exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) &
) &
- (tau_slip_neg &
* exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) ) &
* (2.0_pReal*(plastic_disloucla_burgersPerSlipFamily(f,instance)**2.0_pReal) &
+ plastic_disloucla_omega(f,instance) * plastic_disloucla_friction(f,instance) &
*(( plasticState(ph)%state(5_pInt*ns+3_pInt*nt+j,of) - plastic_disloucla_kinkwidth(f,instance) )**2.0_pReal) &
* (abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)))& !deltaf(i)
*BoltzmannRatio*plastic_disloucla_pPerSlipFamily(f,instance)&
*plastic_disloucla_qPerSlipFamily(f,instance)/&
(plastic_disloucla_SolidSolutionStrength(instance)+plastic_disloucla_tau_peierlsPerSlipFamily(f,instance))*&
StressRatio_pminus1*(1-StressRatio_p)**(plastic_disloucla_qPerSlipFamily(f,instance)-1.0_pReal) )& !deltaf(f)
) &
) &
/ ( &
( &
2.0_pReal*(plastic_disloucla_burgersPerSlipFamily(f,instance)**2.0_pReal)*tau_slip_neg &
+ plastic_disloucla_omega(f,instance) * plastic_disloucla_friction(f,instance) &
*(( plasticState(ph)%state(5_pInt*ns+3_pInt*nt+j,of) - plastic_disloucla_kinkwidth(f,instance) )**2.0_pReal) &
* exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) &
)**2.0_pReal &
)
dgdot_dtauslip_neg = DotGamma0 * dvel_slip dgdot_dtauslip_neg = DotGamma0 * dvel_slip
endif significantNegativeStress endif significantNegativeStress
!* Plastic velocity gradient for dislocation glide !* Plastic velocity gradient for dislocation glide
Lp = Lp + (gdot_slip_pos(j)+gdot_slip_neg(j))*0.5_pReal*lattice_Sslip(1:3,1:3,1,index_myFamily+i,ph) Lp = Lp + (gdot_slip_pos(j)+gdot_slip_neg(j))*0.5_pReal*lattice_Sslip(1:3,1:3,1,index_myFamily+i,ph)
@ -1485,11 +1565,17 @@ subroutine plastic_disloucla_dotState(Tstar_v,Temperature,nSlipDamage,slipDamage
stressRatio_p = stressRatio** plastic_disloucla_pPerSlipFamily(f,instance) stressRatio_p = stressRatio** plastic_disloucla_pPerSlipFamily(f,instance)
stressRatio_u = stressRatio** plastic_disloucla_uPerSlipFamily(f,instance) stressRatio_u = stressRatio** plastic_disloucla_uPerSlipFamily(f,instance)
!* Shear rates due to slip !* Shear rates due to slip
vel_slip = 2.0_pReal*plastic_disloucla_burgersPerSlipFamily(f,instance) &
vel_slip = plastic_disloucla_kinkheight(f,instance) * plastic_disloucla_omega(f,instance) & * plastic_disloucla_kinkheight(f,instance) * plastic_disloucla_omega(f,instance) &
* ( plastic_disloucla_dislolength(f,instance) - plastic_disloucla_kinkwidth(f,instance) ) & * ( plasticState(ph)%state(5_pInt*ns+3_pInt*nt+j,of) - plastic_disloucla_kinkwidth(f,instance) ) &
/ plastic_disloucla_burgersPerSlipFamily(f,instance) & * (tau_slip_pos &
* exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) * exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) ) &
/ ( &
2.0_pReal*(plastic_disloucla_burgersPerSlipFamily(f,instance)**2.0_pReal)*tau_slip_pos &
+ plastic_disloucla_omega(f,instance) * plastic_disloucla_friction(f,instance) &
*(( plasticState(ph)%state(5_pInt*ns+3_pInt*nt+j,of) - plastic_disloucla_kinkwidth(f,instance) )**2.0_pReal) &
* exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) &
)
gdot_slip_pos(j) = DotGamma0 & gdot_slip_pos(j) = DotGamma0 &
* vel_slip & * vel_slip &
@ -1503,11 +1589,21 @@ subroutine plastic_disloucla_dotState(Tstar_v,Temperature,nSlipDamage,slipDamage
stressRatio_p = stressRatio** plastic_disloucla_pPerSlipFamily(f,instance) stressRatio_p = stressRatio** plastic_disloucla_pPerSlipFamily(f,instance)
stressRatio_u = stressRatio** plastic_disloucla_uPerSlipFamily(f,instance) stressRatio_u = stressRatio** plastic_disloucla_uPerSlipFamily(f,instance)
!* Shear rates due to slip !* Shear rates due to slip
!*vel_slip = exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) &
!* * (1.0_pReal-plastic_disloucla_sPerSlipFamily(f,instance) &
!* * exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)))
vel_slip = plastic_disloucla_kinkheight(f,instance) * plastic_disloucla_omega(f,instance) & vel_slip = 2.0_pReal*plastic_disloucla_burgersPerSlipFamily(f,instance) &
* ( plastic_disloucla_dislolength(f,instance) - plastic_disloucla_kinkwidth(f,instance) ) & * plastic_disloucla_kinkheight(f,instance) * plastic_disloucla_omega(f,instance) &
/ plastic_disloucla_burgersPerSlipFamily(f,instance) & * ( plasticState(ph)%state(5_pInt*ns+3_pInt*nt+j,of) - plastic_disloucla_kinkwidth(f,instance) ) &
* exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) * (tau_slip_neg &
* exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) ) &
/ ( &
2.0_pReal*(plastic_disloucla_burgersPerSlipFamily(f,instance)**2.0_pReal)*tau_slip_neg &
+ plastic_disloucla_omega(f,instance) * plastic_disloucla_friction(f,instance) &
*(( plasticState(ph)%state(5_pInt*ns+3_pInt*nt+j,of) - plastic_disloucla_kinkwidth(f,instance) )**2.0_pReal) &
* exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) &
)
gdot_slip_neg(j) = DotGamma0 & gdot_slip_neg(j) = DotGamma0 &
* vel_slip & * vel_slip &
@ -1616,6 +1712,95 @@ subroutine plastic_disloucla_dotState(Tstar_v,Temperature,nSlipDamage,slipDamage
end subroutine plastic_disloucla_dotState end subroutine plastic_disloucla_dotState
!--------------------------------------------------------------------------------------------------
!> @brief returns accumulated slip
!--------------------------------------------------------------------------------------------------
subroutine plastic_disloucla_getAccumulatedSlip(nSlip,accumulatedSlip,ipc, ip, el)
use lattice, only: &
lattice_maxNslipFamily
use material, only: &
mappingConstitutive, &
plasticState, &
phase_plasticityInstance
implicit none
real(pReal), dimension(:), allocatable :: &
accumulatedSlip
integer(pInt) :: &
nSlip
integer(pInt), intent(in) :: &
ipc, & !< grain number
ip, & !< integration point number
el !< element number
integer(pInt) :: &
offset, &
phase, &
instance, &
offset_accshear_slip, &
f, j, i
offset = mappingConstitutive(1,ipc,ip,el)
phase = mappingConstitutive(2,ipc,ip,el)
instance = phase_plasticityInstance(phase)
nSlip = plastic_disloucla_totalNslip(instance)
allocate(accumulatedSlip(nSlip))
offset_accshear_slip = 2_pInt*nSlip
j = 0_pInt
slipFamilies: do f = 1_pInt,lattice_maxNslipFamily
slipSystems: do i = 1_pInt,plastic_disloucla_Nslip(f,instance)
j = j+1_pInt
accumulatedSlip(j) = plasticState(phase)%state(offset_accshear_slip+j,offset)
enddo slipSystems
enddo slipFamilies
end subroutine plastic_disloucla_getAccumulatedSlip
!--------------------------------------------------------------------------------------------------
!> @brief returns accumulated slip
!--------------------------------------------------------------------------------------------------
subroutine plastic_disloucla_getSlipRate(nSlip,slipRate,ipc, ip, el)
use lattice, only: &
lattice_maxNslipFamily
use material, only: &
mappingConstitutive, &
plasticState, &
phase_plasticityInstance
implicit none
real(pReal), dimension(:), allocatable :: &
slipRate
integer(pInt) :: &
nSlip
integer(pInt), intent(in) :: &
ipc, & !< grain number
ip, & !< integration point number
el !< element number
integer(pInt) :: &
offset, &
phase, &
instance, &
offset_accshear_slip, &
f, j, i
offset = mappingConstitutive(1,ipc,ip,el)
phase = mappingConstitutive(2,ipc,ip,el)
instance = phase_plasticityInstance(phase)
nSlip = plastic_disloucla_totalNslip(instance)
allocate(slipRate(nSlip))
offset_accshear_slip = 2_pInt*nSlip
j = 0_pInt
slipFamilies: do f = 1_pInt,lattice_maxNslipFamily
slipSystems: do i = 1_pInt,plastic_disloucla_Nslip(f,instance)
j = j+1_pInt
slipRate(j) = plasticState(phase)%dotState(offset_accshear_slip+j,offset)
enddo slipSystems
enddo slipFamilies
end subroutine plastic_disloucla_getSlipRate
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief return array of constitutive results !> @brief return array of constitutive results
@ -1732,26 +1917,66 @@ function plastic_disloucla_postResults(Tstar_v,Temperature,ipc,ip,el)
stressRatio_u = stressRatio** plastic_disloucla_uPerSlipFamily(f,instance) stressRatio_u = stressRatio** plastic_disloucla_uPerSlipFamily(f,instance)
stressRatio_uminus1 = stressRatio**(plastic_disloucla_uPerSlipFamily(f,instance)-1.0_pReal) stressRatio_uminus1 = stressRatio**(plastic_disloucla_uPerSlipFamily(f,instance)-1.0_pReal)
!* Shear rates due to slip !* Shear rates due to slip
vel_slip = plastic_disloucla_kinkheight(f,instance) * plastic_disloucla_omega(f,instance) & !*vel_slip = exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) &
* ( plastic_disloucla_dislolength(f,instance) - plastic_disloucla_kinkwidth(f,instance) ) & !* * (1.0_pReal-plastic_disloucla_sPerSlipFamily(f,instance) &
/ plastic_disloucla_burgersPerSlipFamily(f,instance) & !* * exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)))
* exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance))
vel_slip = 2.0_pReal*plastic_disloucla_burgersPerSlipFamily(f,instance) &
* plastic_disloucla_kinkheight(f,instance) * plastic_disloucla_omega(f,instance) &
* ( plasticState(ph)%state(5_pInt*ns+3_pInt*nt+j,of) - plastic_disloucla_kinkwidth(f,instance) ) &
* (tau_slip_pos(j) &
* exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) ) &
/ ( &
2.0_pReal*(plastic_disloucla_burgersPerSlipFamily(f,instance)**2.0_pReal)*tau_slip_pos(j) &
+ plastic_disloucla_omega(f,instance) * plastic_disloucla_friction(f,instance) &
*(( plasticState(ph)%state(5_pInt*ns+3_pInt*nt+j,of) - plastic_disloucla_kinkwidth(f,instance) )**2.0_pReal) &
* exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) &
)
gdot_slip_pos(j) = DotGamma0 & gdot_slip_pos(j) = DotGamma0 &
* vel_slip & * vel_slip &
* sign(1.0_pReal,tau_slip_pos(j)) * sign(1.0_pReal,tau_slip_pos(j))
!* Derivatives of shear rates !* Derivatives of shear rates
!*dvel_slip = &
dvel_slip = & dvel_slip = &
(abs(exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)))& 2.0_pReal*plastic_disloucla_burgersPerSlipFamily(f,instance) &
* plastic_disloucla_kinkheight(f,instance) * plastic_disloucla_omega(f,instance) &
* ( plasticState(ph)%state(5_pInt*ns+3_pInt*nt+j,of) - plastic_disloucla_kinkwidth(f,instance) ) &
* ( &
(exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) &
+ tau_slip_pos(j) &
* (abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)))& !deltaf(i)
*BoltzmannRatio*plastic_disloucla_pPerSlipFamily(f,instance)& *BoltzmannRatio*plastic_disloucla_pPerSlipFamily(f,instance)&
*plastic_disloucla_qPerSlipFamily(f,instance)/& *plastic_disloucla_qPerSlipFamily(f,instance)/&
(plastic_disloucla_SolidSolutionStrength(instance)+plastic_disloucla_tau_peierlsPerSlipFamily(f,instance))*& (plastic_disloucla_SolidSolutionStrength(instance)+plastic_disloucla_tau_peierlsPerSlipFamily(f,instance))*&
StressRatio_pminus1*(1.0_pReal-StressRatio_p)**(plastic_disloucla_qPerSlipFamily(f,instance)-1.0_pReal) )& StressRatio_pminus1*(1-StressRatio_p)**(plastic_disloucla_qPerSlipFamily(f,instance)-1.0_pReal) ) &!deltaf(f)
* plastic_disloucla_kinkheight(f,instance) * plastic_disloucla_omega(f,instance) & ) &
* ( plastic_disloucla_dislolength(f,instance) - plastic_disloucla_kinkwidth(f,instance) ) & * (2.0_pReal*(plastic_disloucla_burgersPerSlipFamily(f,instance)**2.0_pReal)*tau_slip_pos(j) &
/ plastic_disloucla_burgersPerSlipFamily(f,instance) + plastic_disloucla_omega(f,instance) * plastic_disloucla_friction(f,instance) &
*(( plasticState(ph)%state(5_pInt*ns+3_pInt*nt+j,of) - plastic_disloucla_kinkwidth(f,instance) )**2.0_pReal) &
* exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) &
) &
- (tau_slip_pos(j) &
* exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) ) &
* (2.0_pReal*(plastic_disloucla_burgersPerSlipFamily(f,instance)**2.0_pReal) &
+ plastic_disloucla_omega(f,instance) * plastic_disloucla_friction(f,instance) &
*(( plasticState(ph)%state(5_pInt*ns+3_pInt*nt+j,of) - plastic_disloucla_kinkwidth(f,instance) )**2.0_pReal) &
* (abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)))& !deltaf(i)
*BoltzmannRatio*plastic_disloucla_pPerSlipFamily(f,instance)&
*plastic_disloucla_qPerSlipFamily(f,instance)/&
(plastic_disloucla_SolidSolutionStrength(instance)+plastic_disloucla_tau_peierlsPerSlipFamily(f,instance))*&
StressRatio_pminus1*(1-StressRatio_p)**(plastic_disloucla_qPerSlipFamily(f,instance)-1.0_pReal) )& !deltaf(f)
) &
) &
/ ( &
( &
2.0_pReal*(plastic_disloucla_burgersPerSlipFamily(f,instance)**2.0_pReal)*tau_slip_pos(j) &
+ plastic_disloucla_omega(f,instance) * plastic_disloucla_friction(f,instance) &
*(( plasticState(ph)%state(5_pInt*ns+3_pInt*nt+j,of) - plastic_disloucla_kinkwidth(f,instance) )**2.0_pReal) &
* exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) &
)**2.0_pReal &
)
dgdot_dtauslip_pos(j) = DotGamma0 * dvel_slip dgdot_dtauslip_pos(j) = DotGamma0 * dvel_slip
@ -1766,24 +1991,66 @@ function plastic_disloucla_postResults(Tstar_v,Temperature,ipc,ip,el)
stressRatio_u = stressRatio** plastic_disloucla_uPerSlipFamily(f,instance) stressRatio_u = stressRatio** plastic_disloucla_uPerSlipFamily(f,instance)
stressRatio_uminus1 = stressRatio**(plastic_disloucla_uPerSlipFamily(f,instance)-1.0_pReal) stressRatio_uminus1 = stressRatio**(plastic_disloucla_uPerSlipFamily(f,instance)-1.0_pReal)
!* Shear rates due to slip !* Shear rates due to slip
vel_slip = plastic_disloucla_kinkheight(f,instance) * plastic_disloucla_omega(f,instance) & !*vel_slip = exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) &
* ( plastic_disloucla_dislolength(f,instance) - plastic_disloucla_kinkwidth(f,instance) ) & !* * (1.0_pReal-plastic_disloucla_sPerSlipFamily(f,instance) &
/ plastic_disloucla_burgersPerSlipFamily(f,instance) & !* * exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)))
* exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance))
vel_slip = 2.0_pReal*plastic_disloucla_burgersPerSlipFamily(f,instance) &
* plastic_disloucla_kinkheight(f,instance) * plastic_disloucla_omega(f,instance) &
* ( plasticState(ph)%state(5_pInt*ns+3_pInt*nt+j,of) - plastic_disloucla_kinkwidth(f,instance) ) &
* (tau_slip_neg(j) &
* exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) ) &
/ ( &
2.0_pReal*(plastic_disloucla_burgersPerSlipFamily(f,instance)**2.0_pReal)*tau_slip_neg(j) &
+ plastic_disloucla_omega(f,instance) * plastic_disloucla_friction(f,instance) &
*(( plasticState(ph)%state(5_pInt*ns+3_pInt*nt+j,of) - plastic_disloucla_kinkwidth(f,instance) )**2.0_pReal) &
* exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) &
)
gdot_slip_neg(j) = DotGamma0 & gdot_slip_neg(j) = DotGamma0 &
* vel_slip & * vel_slip &
* sign(1.0_pReal,tau_slip_neg(j)) * sign(1.0_pReal,tau_slip_neg(j))
!* Derivatives of shear rates !* Derivatives of shear rates
!*dvel_slip = &
dvel_slip = & dvel_slip = &
(abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)))& 2.0_pReal*plastic_disloucla_burgersPerSlipFamily(f,instance) &
* plastic_disloucla_kinkheight(f,instance) * plastic_disloucla_omega(f,instance) &
* ( plasticState(ph)%state(5_pInt*ns+3_pInt*nt+j,of) - plastic_disloucla_kinkwidth(f,instance) ) &
* ( &
(exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) &
+ tau_slip_neg(j) &
* (abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)))& !deltaf(i)
*BoltzmannRatio*plastic_disloucla_pPerSlipFamily(f,instance)& *BoltzmannRatio*plastic_disloucla_pPerSlipFamily(f,instance)&
*plastic_disloucla_qPerSlipFamily(f,instance)/& *plastic_disloucla_qPerSlipFamily(f,instance)/&
(plastic_disloucla_SolidSolutionStrength(instance)+plastic_disloucla_tau_peierlsPerSlipFamily(f,instance))*& (plastic_disloucla_SolidSolutionStrength(instance)+plastic_disloucla_tau_peierlsPerSlipFamily(f,instance))*&
StressRatio_pminus1*(1-StressRatio_p)**(plastic_disloucla_qPerSlipFamily(f,instance)-1.0_pReal) )& StressRatio_pminus1*(1-StressRatio_p)**(plastic_disloucla_qPerSlipFamily(f,instance)-1.0_pReal) ) &!deltaf(f)
* plastic_disloucla_kinkheight(f,instance) * plastic_disloucla_omega(f,instance) & ) &
* ( plastic_disloucla_dislolength(f,instance) - plastic_disloucla_kinkwidth(f,instance) ) & * (2.0_pReal*(plastic_disloucla_burgersPerSlipFamily(f,instance)**2.0_pReal)*tau_slip_neg(j) &
/ plastic_disloucla_burgersPerSlipFamily(f,instance) + plastic_disloucla_omega(f,instance) * plastic_disloucla_friction(f,instance) &
*(( plasticState(ph)%state(5_pInt*ns+3_pInt*nt+j,of) - plastic_disloucla_kinkwidth(f,instance) )**2.0_pReal) &
* exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) &
) &
- (tau_slip_neg(j) &
* exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) ) &
* (2.0_pReal*(plastic_disloucla_burgersPerSlipFamily(f,instance)**2.0_pReal) &
+ plastic_disloucla_omega(f,instance) * plastic_disloucla_friction(f,instance) &
*(( plasticState(ph)%state(5_pInt*ns+3_pInt*nt+j,of) - plastic_disloucla_kinkwidth(f,instance) )**2.0_pReal) &
* (abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)))& !deltaf(i)
*BoltzmannRatio*plastic_disloucla_pPerSlipFamily(f,instance)&
*plastic_disloucla_qPerSlipFamily(f,instance)/&
(plastic_disloucla_SolidSolutionStrength(instance)+plastic_disloucla_tau_peierlsPerSlipFamily(f,instance))*&
StressRatio_pminus1*(1-StressRatio_p)**(plastic_disloucla_qPerSlipFamily(f,instance)-1.0_pReal) )& !deltaf(f)
) &
) &
/ ( &
( &
2.0_pReal*(plastic_disloucla_burgersPerSlipFamily(f,instance)**2.0_pReal)*tau_slip_neg(j) &
+ plastic_disloucla_omega(f,instance) * plastic_disloucla_friction(f,instance) &
*(( plasticState(ph)%state(5_pInt*ns+3_pInt*nt+j,of) - plastic_disloucla_kinkwidth(f,instance) )**2.0_pReal) &
* exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloucla_qPerSlipFamily(f,instance)) &
)**2.0_pReal &
)
dgdot_dtauslip_neg(j) = DotGamma0 * dvel_slip dgdot_dtauslip_neg(j) = DotGamma0 * dvel_slip