simplified API + general polishing

This commit is contained in:
Martin Diehl 2018-12-04 21:33:32 +01:00
parent 3afb14bea1
commit 10445606ba
2 changed files with 161 additions and 175 deletions

View File

@ -164,7 +164,7 @@ subroutine constitutive_init()
if (any(phase_plasticity == PLASTICITY_PHENOPOWERLAW_ID)) call plastic_phenopowerlaw_init if (any(phase_plasticity == PLASTICITY_PHENOPOWERLAW_ID)) call plastic_phenopowerlaw_init
if (any(phase_plasticity == PLASTICITY_KINEHARDENING_ID)) call plastic_kinehardening_init(FILEUNIT) if (any(phase_plasticity == PLASTICITY_KINEHARDENING_ID)) call plastic_kinehardening_init(FILEUNIT)
if (any(phase_plasticity == PLASTICITY_DISLOTWIN_ID)) call plastic_dislotwin_init(FILEUNIT) if (any(phase_plasticity == PLASTICITY_DISLOTWIN_ID)) call plastic_dislotwin_init(FILEUNIT)
if (any(phase_plasticity == PLASTICITY_DISLOUCLA_ID)) call plastic_disloucla_init(FILEUNIT) if (any(phase_plasticity == PLASTICITY_DISLOUCLA_ID)) call plastic_disloucla_init
if (any(phase_plasticity == PLASTICITY_NONLOCAL_ID)) then if (any(phase_plasticity == PLASTICITY_NONLOCAL_ID)) then
call plastic_nonlocal_init(FILEUNIT) call plastic_nonlocal_init(FILEUNIT)
call plastic_nonlocal_stateInit() call plastic_nonlocal_stateInit()
@ -530,8 +530,9 @@ subroutine constitutive_LpAndItsTangents(Lp, dLp_dS, dLp_dFi, S6, Fi, ipc, ip, e
call plastic_dislotwin_LpAndItsTangent (Lp,dLp_dMp,Mp,temperature(ho)%p(tme),instance,of) call plastic_dislotwin_LpAndItsTangent (Lp,dLp_dMp,Mp,temperature(ho)%p(tme),instance,of)
case (PLASTICITY_DISLOUCLA_ID) plasticityType case (PLASTICITY_DISLOUCLA_ID) plasticityType
call plastic_disloucla_LpAndItsTangent (Lp,dLp_dMp,Mp, & of = phasememberAt(ipc,ip,el)
temperature(ho)%p(tme), ipc,ip,el) instance = phase_plasticityInstance(material_phase(ipc,ip,el))
call plastic_disloucla_LpAndItsTangent (Lp,dLp_dMp,Mp,temperature(ho)%p(tme),instance,of)
end select plasticityType end select plasticityType

View File

@ -25,9 +25,6 @@ module plastic_disloUCLA
integer(pInt), dimension(:), allocatable, private :: & integer(pInt), dimension(:), allocatable, private :: &
plastic_disloUCLA_totalNslip !< total number of active slip systems for each instance plastic_disloUCLA_totalNslip !< total number of active slip systems for each instance
real(pReal), dimension(:), allocatable, private :: &
plastic_disloUCLA_Qsd !< activation energy for dislocation climb
real(pReal), dimension(:,:,:), allocatable, private :: & real(pReal), dimension(:,:,:), allocatable, private :: &
plastic_disloUCLA_forestProjectionEdge !< matrix of forest projections of edge dislocations for each instance plastic_disloUCLA_forestProjectionEdge !< matrix of forest projections of edge dislocations for each instance
@ -51,7 +48,8 @@ module plastic_disloUCLA
grainSize, & grainSize, &
SolidSolutionStrength, & !< Strength due to elements in solid solution SolidSolutionStrength, & !< Strength due to elements in solid solution
mu, & mu, &
D0 !< prefactor for self-diffusion coefficient D0, & !< prefactor for self-diffusion coefficient
Qsd !< activation energy for dislocation climb
real(pReal), allocatable, dimension(:) :: & real(pReal), allocatable, dimension(:) :: &
B, & !< friction coeff. B (kMC) B, & !< friction coeff. B (kMC)
rho0, & !< initial edge dislocation density per slip system for each family and instance rho0, & !< initial edge dislocation density per slip system for each family and instance
@ -129,7 +127,7 @@ contains
!> @brief module initialization !> @brief module initialization
!> @details reads in material parameters, allocates arrays, and does sanity checks !> @details reads in material parameters, allocates arrays, and does sanity checks
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
subroutine plastic_disloUCLA_init(fileUnit) subroutine plastic_disloUCLA_init()
#if defined(__GFORTRAN__) || __INTEL_COMPILER >= 1800 #if defined(__GFORTRAN__) || __INTEL_COMPILER >= 1800
use, intrinsic :: iso_fortran_env, only: & use, intrinsic :: iso_fortran_env, only: &
compiler_version, & compiler_version, &
@ -140,8 +138,6 @@ subroutine plastic_disloUCLA_init(fileUnit)
debug_constitutive,& debug_constitutive,&
debug_levelBasic debug_levelBasic
use math, only: & use math, only: &
math_Mandel3333to66, &
math_Voigt66to3333, &
math_mul3x3, & math_mul3x3, &
math_expand math_expand
use IO, only: & use IO, only: &
@ -155,18 +151,16 @@ subroutine plastic_disloUCLA_init(fileUnit)
PLASTICITY_DISLOUCLA_ID, & PLASTICITY_DISLOUCLA_ID, &
material_phase, & material_phase, &
plasticState, & plasticState, &
material_allocatePlasticState material_allocatePlasticState
use config, only: & use config, only: &
MATERIAL_partPhase, & MATERIAL_partPhase, &
config_phase config_phase
use lattice use lattice
implicit none implicit none
integer(pInt), intent(in) :: fileUnit integer(pInt) :: maxNinstance,&
integer(pInt) :: maxNinstance,phase,maxTotalNslip,&
f,instance,j,k,o, i, & f,instance,j,k,o, i, &
outputSize, & outputSize, phase, &
offset_slip, index_myFamily, index_otherFamily, & offset_slip, index_myFamily, index_otherFamily, &
startIndex, endIndex, p startIndex, endIndex, p
integer(pInt) :: sizeState, sizeDotState integer(pInt) :: sizeState, sizeDotState
@ -197,7 +191,6 @@ material_allocatePlasticState
allocate(plastic_disloUCLA_totalNslip(maxNinstance), source=0_pInt) allocate(plastic_disloUCLA_totalNslip(maxNinstance), source=0_pInt)
allocate(plastic_disloUCLA_Qsd(maxNinstance), source=0.0_pReal)
allocate(param(maxNinstance)) allocate(param(maxNinstance))
@ -250,7 +243,6 @@ do p = 1_pInt, size(phase_plasticityInstance)
prm%omega = config_phase(p)%getFloats('omega') prm%omega = config_phase(p)%getFloats('omega')
prm%B = config_phase(p)%getFloats('friction_coeff') prm%B = config_phase(p)%getFloats('friction_coeff')
!prm%viscosity = config_phase(p)%getFloats('viscosity')
prm%SolidSolutionStrength = config_phase(p)%getFloat('solidsolutionstrength') prm%SolidSolutionStrength = config_phase(p)%getFloat('solidsolutionstrength')
@ -258,7 +250,7 @@ do p = 1_pInt, size(phase_plasticityInstance)
prm%grainSize = config_phase(p)%getFloat('grainsize') prm%grainSize = config_phase(p)%getFloat('grainsize')
prm%D0 = config_phase(p)%getFloat('d0') prm%D0 = config_phase(p)%getFloat('d0')
plastic_disloUCLA_Qsd(phase_plasticityInstance(p)) = config_phase(p)%getFloat('qsd') prm%Qsd= config_phase(p)%getFloat('qsd')
prm%dipoleformation = config_phase(p)%getFloat('dipoleformationfactor') > 0.0_pReal !should be on by default prm%dipoleformation = config_phase(p)%getFloat('dipoleformationfactor') > 0.0_pReal !should be on by default
@ -296,7 +288,6 @@ do p = 1_pInt, size(phase_plasticityInstance)
else slipActive else slipActive
allocate(prm%rho0(0)) allocate(prm%rho0(0))
allocate(prm%rhoDip0(0)) allocate(prm%rhoDip0(0))
endif slipActive endif slipActive
@ -491,26 +482,20 @@ end subroutine plastic_disloUCLA_microstructure
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief calculates plastic velocity gradient and its tangent !> @brief calculates plastic velocity gradient and its tangent
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
subroutine plastic_disloUCLA_LpAndItsTangent(Lp,dLp_dMp,Mp,Temperature,ipc,ip,el) subroutine plastic_disloUCLA_LpAndItsTangent(Lp,dLp_dMp,Mp,Temperature,instance,of)
use material, only: &
material_phase, &
phase_plasticityInstance, &
phaseAt, phasememberAt
implicit none implicit none
integer(pInt), intent(in) :: ipc,ip,el integer(pInt), intent(in) :: instance, of
real(pReal), intent(in) :: Temperature real(pReal), intent(in) :: Temperature
real(pReal), dimension(3,3), intent(in) :: Mp real(pReal), dimension(3,3), intent(in) :: Mp
real(pReal), dimension(3,3), intent(out) :: Lp real(pReal), dimension(3,3), intent(out) :: Lp
real(pReal), dimension(3,3,3,3), intent(out) :: dLp_dMp real(pReal), dimension(3,3,3,3), intent(out) :: dLp_dMp
integer(pInt) :: instance,of,i,k,l,m,n integer(pInt) :: i,k,l,m,n
real(pReal), dimension(plastic_disloUCLA_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & real(pReal), dimension(param(instance)%totalNslip) :: &
gdot_slip_pos,gdot_slip_neg,tau_slip_pos,tau_slip_neg,dgdot_dtauslip_pos,dgdot_dtauslip_neg gdot_slip_pos,gdot_slip_neg,tau_slip_pos,tau_slip_neg,dgdot_dtauslip_pos,dgdot_dtauslip_neg
of = phasememberAt(ipc,ip,el)
instance = phase_plasticityInstance(phaseAt(ipc,ip,el))
associate(prm => param(instance)) associate(prm => param(instance))
Lp = 0.0_pReal Lp = 0.0_pReal
@ -525,7 +510,7 @@ subroutine plastic_disloUCLA_LpAndItsTangent(Lp,dLp_dMp,Mp,Temperature,ipc,ip,el
+ dgdot_dtauslip_pos(i) * prm%Schmid_slip(k,l,i) * prm%nonSchmid_pos(m,n,i) & + dgdot_dtauslip_pos(i) * prm%Schmid_slip(k,l,i) * prm%nonSchmid_pos(m,n,i) &
+ dgdot_dtauslip_neg(i) * prm%Schmid_slip(k,l,i) * prm%nonSchmid_neg(m,n,i) + dgdot_dtauslip_neg(i) * prm%Schmid_slip(k,l,i) * prm%nonSchmid_neg(m,n,i)
enddo slipSystems enddo slipSystems
end associate end associate
Lp = 0.5_pReal * Lp Lp = 0.5_pReal * Lp
dLp_dMp = 0.5_pReal * dLp_dMp dLp_dMp = 0.5_pReal * dLp_dMp
@ -551,7 +536,6 @@ subroutine plastic_disloUCLA_dotState(Mp,Temperature,instance,of)
temperature !< temperature at integration point temperature !< temperature at integration point
integer(pInt), intent(in) :: & integer(pInt), intent(in) :: &
instance, of instance, of
integer(pInt) :: j
real(pReal) :: & real(pReal) :: &
VacancyDiffusion VacancyDiffusion
@ -570,9 +554,9 @@ subroutine plastic_disloUCLA_dotState(Mp,Temperature,instance,of)
dot%whole(:,of) = 0.0_pReal dot%whole(:,of) = 0.0_pReal
dot%accshear_slip(:,of) = (gdot_slip_pos+gdot_slip_neg)*0.5_pReal dot%accshear_slip(:,of) = (gdot_slip_pos+gdot_slip_neg)*0.5_pReal
VacancyDiffusion = prm%D0*exp(-plastic_disloUCLA_Qsd(instance)/(kB*Temperature)) VacancyDiffusion = prm%D0*exp(-prm%Qsd/(kB*Temperature))
where(dEq0(tau_slip_pos) .or. (.not. prm%dipoleformation)) where(dEq0(tau_slip_pos))
EdgeDipDistance = mse%mfp(:,of) !ToDo MD@FR: correct? was not handled properly before EdgeDipDistance = mse%mfp(:,of) !ToDo MD@FR: correct? was not handled properly before
DotRhoDipFormation = 0.0_pReal DotRhoDipFormation = 0.0_pReal
DotRhoEdgeDipClimb = 0.0_pReal DotRhoEdgeDipClimb = 0.0_pReal
@ -706,7 +690,7 @@ math_mul33xx33
instance,of instance,of
integer(pInt) :: & integer(pInt) :: &
i,j j
real(pReal) :: StressRatio_p,StressRatio_pminus1,& real(pReal) :: StressRatio_p,StressRatio_pminus1,&
BoltzmannRatio,DotGamma0,stressRatio,& BoltzmannRatio,DotGamma0,stressRatio,&
dvel_slip, vel_slip dvel_slip, vel_slip
@ -716,152 +700,153 @@ instance,of
gdot_slip_pos = 0.0_pReal gdot_slip_pos = 0.0_pReal
gdot_slip_neg = 0.0_pReal gdot_slip_neg = 0.0_pReal
dgdot_dtauslip_pos = 0.0_pReal dgdot_dtauslip_pos = 0.0_pReal
dgdot_dtauslip_neg = 0.0_pReal dgdot_dtauslip_neg = 0.0_pReal
do j = 1_pInt, prm%totalNslip do j = 1_pInt, prm%totalNslip
!* Boltzmann ratio !* Boltzmann ratio
BoltzmannRatio = prm%H0kp(j)/(kB*Temperature) BoltzmannRatio = prm%H0kp(j)/(kB*Temperature)
!* Initial shear rates !* Initial shear rates
DotGamma0 = stt%rhoEdge(j,of)*prm%burgers(j)*prm%v0(j) DotGamma0 = stt%rhoEdge(j,of)*prm%burgers(j)*prm%v0(j)
!* Resolved shear stress on slip system !* Resolved shear stress on slip system
tau_slip_pos(j) = math_mul33xx33(Mp,prm%nonSchmid_pos(1:3,1:3,j)) tau_slip_pos(j) = math_mul33xx33(Mp,prm%nonSchmid_pos(1:3,1:3,j))
tau_slip_neg(j) = math_mul33xx33(Mp,prm%nonSchmid_neg(1:3,1:3,j)) tau_slip_neg(j) = math_mul33xx33(Mp,prm%nonSchmid_neg(1:3,1:3,j))
significantPositiveTau: if((abs(tau_slip_pos(j))-mse%threshold_stress(j, of)) > tol_math_check) then significantPositiveTau: if((abs(tau_slip_pos(j))-mse%threshold_stress(j, of)) > tol_math_check) then
!* Stress ratio !* Stress ratio
stressRatio = ((abs(tau_slip_pos(j))-mse%threshold_stress(j, of))/& stressRatio = ((abs(tau_slip_pos(j))-mse%threshold_stress(j, of))/&
(prm%solidSolutionStrength+& (prm%solidSolutionStrength+&
prm%tau_Peierls(j))) prm%tau_Peierls(j)))
stressRatio_p = stressRatio** prm%p(j) stressRatio_p = stressRatio** prm%p(j)
stressRatio_pminus1 = stressRatio**(prm%p(j)-1.0_pReal) stressRatio_pminus1 = stressRatio**(prm%p(j)-1.0_pReal)
!* Shear rates due to slip !* Shear rates due to slip
vel_slip = 2.0_pReal*prm%burgers(j) & vel_slip = 2.0_pReal*prm%burgers(j) &
* prm%kink_height(j) * prm%omega(j) & * prm%kink_height(j) * prm%omega(j) &
* ( mse%mfp(j,of) - prm%kink_width(j) ) & * ( mse%mfp(j,of) - prm%kink_width(j) ) &
* (tau_slip_pos(j) & * (tau_slip_pos(j) &
* exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q(j)) ) & * exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q(j)) ) &
/ ( & / ( &
2.0_pReal*(prm%burgers(j)**2.0_pReal)*tau_slip_pos(j) & 2.0_pReal*(prm%burgers(j)**2.0_pReal)*tau_slip_pos(j) &
+ prm%omega(j) * prm%B(j) & + prm%omega(j) * prm%B(j) &
*(( mse%mfp(j,of) - prm%kink_width(j) )**2.0_pReal) & *(( mse%mfp(j,of) - prm%kink_width(j) )**2.0_pReal) &
* exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q(j)) & * exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q(j)) &
) )
gdot_slip_pos(j) = DotGamma0 * sign(vel_slip,tau_slip_pos(j)) gdot_slip_pos(j) = DotGamma0 * sign(vel_slip,tau_slip_pos(j))
!* Derivatives of shear rates !* Derivatives of shear rates
dvel_slip = & dvel_slip = &
2.0_pReal*prm%burgers(j) & 2.0_pReal*prm%burgers(j) &
* prm%kink_height(j) * prm%omega(j) & * prm%kink_height(j) * prm%omega(j) &
* ( mse%mfp(j,of) - prm%kink_width(j) ) & * ( mse%mfp(j,of) - prm%kink_width(j) ) &
* ( & * ( &
(exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q(j)) & (exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q(j)) &
+ tau_slip_pos(j) & + tau_slip_pos(j) &
* (abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q(j)))& * (abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q(j)))&
*BoltzmannRatio*prm%p(j)& *BoltzmannRatio*prm%p(j)&
*prm%q(j)/& *prm%q(j)/&
(prm%solidSolutionStrength+prm%tau_Peierls(j))*& (prm%solidSolutionStrength+prm%tau_Peierls(j))*&
StressRatio_pminus1*(1-StressRatio_p)**(prm%q(j)-1.0_pReal) ) & StressRatio_pminus1*(1-StressRatio_p)**(prm%q(j)-1.0_pReal) ) &
) & ) &
* (2.0_pReal*(prm%burgers(j)**2.0_pReal)*tau_slip_pos(j) & * (2.0_pReal*(prm%burgers(j)**2.0_pReal)*tau_slip_pos(j) &
+ prm%omega(j) * prm%B(j) & + prm%omega(j) * prm%B(j) &
*(( mse%mfp(j,of) - prm%kink_width(j) )**2.0_pReal) & *(( mse%mfp(j,of) - prm%kink_width(j) )**2.0_pReal) &
* exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q(j)) & * exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q(j)) &
) & ) &
- (tau_slip_pos(j) & - (tau_slip_pos(j) &
* exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q(j)) ) & * exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q(j)) ) &
* (2.0_pReal*(prm%burgers(j)**2.0_pReal) & * (2.0_pReal*(prm%burgers(j)**2.0_pReal) &
+ prm%omega(j) * prm%B(j) & + prm%omega(j) * prm%B(j) &
*(( mse%mfp(j,of) - prm%kink_width(j) )**2.0_pReal) & *(( mse%mfp(j,of) - prm%kink_width(j) )**2.0_pReal) &
* (abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q(j)))& * (abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q(j)))&
*BoltzmannRatio*prm%p(j)& *BoltzmannRatio*prm%p(j)&
*prm%q(j)/& *prm%q(j)/&
(prm%solidSolutionStrength+prm%tau_Peierls(j))*& (prm%solidSolutionStrength+prm%tau_Peierls(j))*&
StressRatio_pminus1*(1-StressRatio_p)**(prm%q(j)-1.0_pReal) )& StressRatio_pminus1*(1-StressRatio_p)**(prm%q(j)-1.0_pReal) )&
) & ) &
) & ) &
/ ( & / ( &
( & ( &
2.0_pReal*(prm%burgers(j)**2.0_pReal)*tau_slip_pos(j) & 2.0_pReal*(prm%burgers(j)**2.0_pReal)*tau_slip_pos(j) &
+ prm%omega(j) * prm%B(j) & + prm%omega(j) * prm%B(j) &
*(( mse%mfp(j,of) - prm%kink_width(j) )**2.0_pReal) & *(( mse%mfp(j,of) - prm%kink_width(j) )**2.0_pReal) &
* exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q(j)) & * exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q(j)) &
)**2.0_pReal & )**2.0_pReal &
) )
dgdot_dtauslip_pos(j) = DotGamma0 * dvel_slip dgdot_dtauslip_pos(j) = DotGamma0 * dvel_slip
endif significantPositiveTau endif significantPositiveTau
significantNegativeTau: if((abs(tau_slip_neg(j))-mse%threshold_stress(j, of)) > tol_math_check) then significantNegativeTau: if((abs(tau_slip_neg(j))-mse%threshold_stress(j, of)) > tol_math_check) then
!* Stress ratios !* Stress ratios
stressRatio = ((abs(tau_slip_neg(j))-mse%threshold_stress(j, of))/& stressRatio = ((abs(tau_slip_neg(j))-mse%threshold_stress(j, of))/&
(prm%solidSolutionStrength+& (prm%solidSolutionStrength+&
prm%tau_Peierls(j))) prm%tau_Peierls(j)))
stressRatio_p = stressRatio** prm%p(j) stressRatio_p = stressRatio** prm%p(j)
stressRatio_pminus1 = stressRatio**(prm%p(j)-1.0_pReal) stressRatio_pminus1 = stressRatio**(prm%p(j)-1.0_pReal)
!* Shear rates due to slip !* Shear rates due to slip
vel_slip = 2.0_pReal*prm%burgers(j) & vel_slip = 2.0_pReal*prm%burgers(j) &
* prm%kink_height(j) * prm%omega(j) & * prm%kink_height(j) * prm%omega(j) &
* ( mse%mfp(j,of) - prm%kink_width(j) ) & * ( mse%mfp(j,of) - prm%kink_width(j) ) &
* (tau_slip_neg(j) & * (tau_slip_neg(j) &
* exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q(j)) ) & * exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q(j)) ) &
/ ( & / ( &
2.0_pReal*(prm%burgers(j)**2.0_pReal)*tau_slip_neg(j) & 2.0_pReal*(prm%burgers(j)**2.0_pReal)*tau_slip_neg(j) &
+ prm%omega(j) * prm%B(j) & + prm%omega(j) * prm%B(j) &
*(( mse%mfp(j,of) - prm%kink_width(j) )**2.0_pReal) & *(( mse%mfp(j,of) - prm%kink_width(j) )**2.0_pReal) &
* exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q(j)) & * exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q(j)) &
) )
gdot_slip_neg(j) = DotGamma0 * sign(vel_slip,tau_slip_neg(j)) gdot_slip_neg(j) = DotGamma0 * sign(vel_slip,tau_slip_neg(j))
!* Derivatives of shear rates !* Derivatives of shear rates
dvel_slip = & dvel_slip = &
2.0_pReal*prm%burgers(j) & 2.0_pReal*prm%burgers(j) &
* prm%kink_height(j) * prm%omega(j) & * prm%kink_height(j) * prm%omega(j) &
* ( mse%mfp(j,of) - prm%kink_width(j) ) & * ( mse%mfp(j,of) - prm%kink_width(j) ) &
* ( & * ( &
(exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q(j)) & (exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q(j)) &
+ tau_slip_neg(j) & + tau_slip_neg(j) &
* (abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q(j)))& * (abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q(j)))&
*BoltzmannRatio*prm%p(j)& *BoltzmannRatio*prm%p(j)&
*prm%q(j)/& *prm%q(j)/&
(prm%solidSolutionStrength+prm%tau_Peierls(j))*& (prm%solidSolutionStrength+prm%tau_Peierls(j))*&
StressRatio_pminus1*(1-StressRatio_p)**(prm%q(j)-1.0_pReal) ) & StressRatio_pminus1*(1-StressRatio_p)**(prm%q(j)-1.0_pReal) ) &
) & ) &
* (2.0_pReal*(prm%burgers(j)**2.0_pReal)*tau_slip_neg(j) & * (2.0_pReal*(prm%burgers(j)**2.0_pReal)*tau_slip_neg(j) &
+ prm%omega(j) * prm%B(j) & + prm%omega(j) * prm%B(j) &
*(( mse%mfp(j,of) - prm%kink_width(j) )**2.0_pReal) & *(( mse%mfp(j,of) - prm%kink_width(j) )**2.0_pReal) &
* exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q(j)) & * exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q(j)) &
) & ) &
- (tau_slip_neg(j) & - (tau_slip_neg(j) &
* exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q(j)) ) & * exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q(j)) ) &
* (2.0_pReal*(prm%burgers(j)**2.0_pReal) & * (2.0_pReal*(prm%burgers(j)**2.0_pReal) &
+ prm%omega(j) * prm%B(j) & + prm%omega(j) * prm%B(j) &
*(( mse%mfp(j,of) - prm%kink_width(j) )**2.0_pReal) & *(( mse%mfp(j,of) - prm%kink_width(j) )**2.0_pReal) &
* (abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q(j)))& * (abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q(j)))&
*BoltzmannRatio*prm%p(j)& *BoltzmannRatio*prm%p(j)&
*prm%q(j)/& *prm%q(j)/&
(prm%solidSolutionStrength+prm%tau_Peierls(j))*& (prm%solidSolutionStrength+prm%tau_Peierls(j))*&
StressRatio_pminus1*(1-StressRatio_p)**(prm%q(j)-1.0_pReal) )& StressRatio_pminus1*(1-StressRatio_p)**(prm%q(j)-1.0_pReal) )&
) & ) &
) & ) &
/ ( & / ( &
( & ( &
2.0_pReal*(prm%burgers(j)**2.0_pReal)*tau_slip_neg(j) & 2.0_pReal*(prm%burgers(j)**2.0_pReal)*tau_slip_neg(j) &
+ prm%omega(j) * prm%B(j) & + prm%omega(j) * prm%B(j) &
*(( mse%mfp(j,of) - prm%kink_width(j) )**2.0_pReal) & *(( mse%mfp(j,of) - prm%kink_width(j) )**2.0_pReal) &
* exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q(j)) & * exp(-BoltzmannRatio*(1-StressRatio_p) ** prm%q(j)) &
)**2.0_pReal & )**2.0_pReal &
) )
dgdot_dtauslip_neg(j) = DotGamma0 * dvel_slip dgdot_dtauslip_neg(j) = DotGamma0 * dvel_slip
endif significantNegativeTau endif significantNegativeTau
enddo enddo
end associate end associate
end subroutine kinetics end subroutine kinetics
end module plastic_disloUCLA end module plastic_disloUCLA