corrected kinetics law and changed parameters. For solid solution hardening there are 3 parameters: the activation energy, the concentration of obstacles that determines the activation length and meanfreepath, and the obstacle size that determines the activation volume. For the Peierls mechanism there is: the width of doublekinks that determines the activation volume and the Peierls stress for edge and screw.

Still testing needed to check whether the current formulation makes sense or not.
This commit is contained in:
Christoph Kords 2012-02-03 12:50:54 +00:00
parent bbf4f25898
commit d62eddc0cd
2 changed files with 92 additions and 81 deletions

View File

@ -248,13 +248,13 @@ lambda0 80 # prefactor for mean free path
atomicVolume 1.7e-29 # atomic volume in m**3 atomicVolume 1.7e-29 # atomic volume in m**3
selfdiffusionPrefactor 1e-4 # prefactor for self-diffusion coefficient in m**2/s selfdiffusionPrefactor 1e-4 # prefactor for self-diffusion coefficient in m**2/s
selfdiffusionEnergy 2.3e-19 # activation enthalpy for seld-diffusion in J selfdiffusionEnergy 2.3e-19 # activation enthalpy for seld-diffusion in J
solidSolutionStrength 10e6 # obstacle strength in Pa solidSolutionEnergy 2e-19 # activation energy of solid solution particles in J
solidSolutionEnergy 1e-19 # activation energy for solid solution in J solidSolutionConcentration 1e-4 # concentration of solid solution in parts per b^3
peierlsStressEdge 0.1e6 # Peierls stress for edges in Pa (per slip family) solidSolutionSize 2 # size of solid solution obstacles in multiples of burgers vector length
peierlsStressScrew 0.1e6 # Peierls stress for screws in Pa (per slip family) peierlsStressEdge 20e6 # Peierls stress for edges in Pa (per slip family)
peierlsEnergyEdge 1e-20 # activation energy for Peierls barrier for edges in J (per slip family) peierlsStressScrew 20e6 # Peierls stress for screws in Pa (per slip family)
peierlsEnergyScrew 1e-20 # activation energy for Peierls barrier for screws in J (per slip family) doublekinkWidth 10 # width of double kinks in multiples of burgers vector length b
viscosity 100 # viscosity fr dislocation glide in Pa s viscosity 1e-4 # viscosity for dislocation glide in Pa s
p 1 # exponent for thermal barrier profile p 1 # exponent for thermal barrier profile
q 1 # exponent for thermal barrier profile q 1 # exponent for thermal barrier profile
attackFrequency 50e9 # attack frequency in Hz attackFrequency 50e9 # attack frequency in Hz

View File

@ -83,8 +83,10 @@ real(pReal), dimension(:), allocatable :: constitutive_nonlocal_
constitutive_nonlocal_Qsd, & ! activation enthalpy for diffusion constitutive_nonlocal_Qsd, & ! activation enthalpy for diffusion
constitutive_nonlocal_aTolRho, & ! absolute tolerance for dislocation density in state integration constitutive_nonlocal_aTolRho, & ! absolute tolerance for dislocation density in state integration
constitutive_nonlocal_R, & ! cutoff radius for dislocation stress constitutive_nonlocal_R, & ! cutoff radius for dislocation stress
constitutive_nonlocal_solidSolutionStrength, & ! solid solution obstacle strength in Pa constitutive_nonlocal_doublekinkwidth, & ! width of a doubkle kink in multiples of the burgers vector length b
constitutive_nonlocal_solidSolutionEnergy, & ! solid solution obstacle strength in Pa constitutive_nonlocal_solidSolutionEnergy, & ! activation energy for solid solution in J
constitutive_nonlocal_solidSolutionSize, & ! solid solution obstacle size in multiples of the burgers vector length
constitutive_nonlocal_solidSolutionConcentration, & ! concentration of solid solution in atomic parts
constitutive_nonlocal_p, & ! parameter for kinetic law (Kocks,Argon,Ashby) constitutive_nonlocal_p, & ! parameter for kinetic law (Kocks,Argon,Ashby)
constitutive_nonlocal_q, & ! parameter for kinetic law (Kocks,Argon,Ashby) constitutive_nonlocal_q, & ! parameter for kinetic law (Kocks,Argon,Ashby)
constitutive_nonlocal_viscosity, & ! viscosity for dislocation glide in Pa s constitutive_nonlocal_viscosity, & ! viscosity for dislocation glide in Pa s
@ -107,9 +109,7 @@ real(pReal), dimension(:,:), allocatable :: constitutive_nonlocal_
real(pReal), dimension(:,:,:), allocatable :: constitutive_nonlocal_minimumDipoleHeightPerSlipFamily, & ! minimum stable edge/screw dipole height for each family and instance real(pReal), dimension(:,:,:), allocatable :: constitutive_nonlocal_minimumDipoleHeightPerSlipFamily, & ! minimum stable edge/screw dipole height for each family and instance
constitutive_nonlocal_minimumDipoleHeight, & ! minimum stable edge/screw dipole height for each slip system and instance constitutive_nonlocal_minimumDipoleHeight, & ! minimum stable edge/screw dipole height for each slip system and instance
constitutive_nonlocal_peierlsStressPerSlipFamily, & ! Peierls stress (edge and screw) constitutive_nonlocal_peierlsStressPerSlipFamily, & ! Peierls stress (edge and screw)
constitutive_nonlocal_peierlsStress, & ! Peierls stress (edge and screw) constitutive_nonlocal_peierlsStress ! Peierls stress (edge and screw)
constitutive_nonlocal_peierlsEnergyPerSlipFamily, & ! activation energy of peierls barrier (edge and screw)
constitutive_nonlocal_peierlsEnergy ! activation energy of peierls barrier (edge and screw)
real(pReal), dimension(:,:,:,:,:), allocatable :: constitutive_nonlocal_rhoDotFlux ! dislocation convection term real(pReal), dimension(:,:,:,:,:), allocatable :: constitutive_nonlocal_rhoDotFlux ! dislocation convection term
real(pReal), dimension(:,:,:,:,:,:), allocatable :: constitutive_nonlocal_compatibility ! slip system compatibility between me and my neighbors real(pReal), dimension(:,:,:,:,:,:), allocatable :: constitutive_nonlocal_compatibility ! slip system compatibility between me and my neighbors
real(pReal), dimension(:,:,:), allocatable :: constitutive_nonlocal_forestProjectionEdge, & ! matrix of forest projections of edge dislocations for each instance real(pReal), dimension(:,:,:), allocatable :: constitutive_nonlocal_forestProjectionEdge, & ! matrix of forest projections of edge dislocations for each instance
@ -264,8 +264,10 @@ allocate(constitutive_nonlocal_aTolRho(maxNinstance))
allocate(constitutive_nonlocal_Cslip_66(6,6,maxNinstance)) allocate(constitutive_nonlocal_Cslip_66(6,6,maxNinstance))
allocate(constitutive_nonlocal_Cslip_3333(3,3,3,3,maxNinstance)) allocate(constitutive_nonlocal_Cslip_3333(3,3,3,3,maxNinstance))
allocate(constitutive_nonlocal_R(maxNinstance)) allocate(constitutive_nonlocal_R(maxNinstance))
allocate(constitutive_nonlocal_solidSolutionStrength(maxNinstance)) allocate(constitutive_nonlocal_doublekinkwidth(maxNinstance))
allocate(constitutive_nonlocal_solidSolutionEnergy(maxNinstance)) allocate(constitutive_nonlocal_solidSolutionEnergy(maxNinstance))
allocate(constitutive_nonlocal_solidSolutionSize(maxNinstance))
allocate(constitutive_nonlocal_solidSolutionConcentration(maxNinstance))
allocate(constitutive_nonlocal_p(maxNinstance)) allocate(constitutive_nonlocal_p(maxNinstance))
allocate(constitutive_nonlocal_q(maxNinstance)) allocate(constitutive_nonlocal_q(maxNinstance))
allocate(constitutive_nonlocal_viscosity(maxNinstance)) allocate(constitutive_nonlocal_viscosity(maxNinstance))
@ -287,8 +289,10 @@ constitutive_nonlocal_nu = 0.0_pReal
constitutive_nonlocal_Cslip_66 = 0.0_pReal constitutive_nonlocal_Cslip_66 = 0.0_pReal
constitutive_nonlocal_Cslip_3333 = 0.0_pReal constitutive_nonlocal_Cslip_3333 = 0.0_pReal
constitutive_nonlocal_R = -1.0_pReal constitutive_nonlocal_R = -1.0_pReal
constitutive_nonlocal_solidSolutionStrength = 0.0_pReal constitutive_nonlocal_doublekinkwidth = 0.0_pReal
constitutive_nonlocal_solidSolutionEnergy = 0.0_pReal constitutive_nonlocal_solidSolutionEnergy = 0.0_pReal
constitutive_nonlocal_solidSolutionSize = 0.0_pReal
constitutive_nonlocal_solidSolutionConcentration = 0.0_pReal
constitutive_nonlocal_p = 1.0_pReal constitutive_nonlocal_p = 1.0_pReal
constitutive_nonlocal_q = 1.0_pReal constitutive_nonlocal_q = 1.0_pReal
constitutive_nonlocal_viscosity = 0.0_pReal constitutive_nonlocal_viscosity = 0.0_pReal
@ -316,10 +320,8 @@ constitutive_nonlocal_lambda0PerSlipFamily = 0.0_pReal
constitutive_nonlocal_interactionSlipSlip = 0.0_pReal constitutive_nonlocal_interactionSlipSlip = 0.0_pReal
allocate(constitutive_nonlocal_minimumDipoleHeightPerSlipFamily(lattice_maxNslipFamily,2,maxNinstance)) allocate(constitutive_nonlocal_minimumDipoleHeightPerSlipFamily(lattice_maxNslipFamily,2,maxNinstance))
allocate(constitutive_nonlocal_peierlsEnergyPerSlipFamily(lattice_maxNslipFamily,2,maxNinstance))
allocate(constitutive_nonlocal_peierlsStressPerSlipFamily(lattice_maxNslipFamily,2,maxNinstance)) allocate(constitutive_nonlocal_peierlsStressPerSlipFamily(lattice_maxNslipFamily,2,maxNinstance))
constitutive_nonlocal_minimumDipoleHeightPerSlipFamily = 0.0_pReal constitutive_nonlocal_minimumDipoleHeightPerSlipFamily = 0.0_pReal
constitutive_nonlocal_peierlsEnergyPerSlipFamily = 0.0_pReal
constitutive_nonlocal_peierlsStressPerSlipFamily = 0.0_pReal constitutive_nonlocal_peierlsStressPerSlipFamily = 0.0_pReal
!*** readout data from material.config file !*** readout data from material.config file
@ -407,16 +409,14 @@ do
case('peierlsstressscrew') case('peierlsstressscrew')
forall (f = 1:lattice_maxNslipFamily) & forall (f = 1:lattice_maxNslipFamily) &
constitutive_nonlocal_peierlsStressPerSlipFamily(f,2,i) = IO_floatValue(line,positions,1+f) constitutive_nonlocal_peierlsStressPerSlipFamily(f,2,i) = IO_floatValue(line,positions,1+f)
case('peierlsenergyedge') case('doublekinkwidth')
forall (f = 1:lattice_maxNslipFamily) & constitutive_nonlocal_doublekinkwidth(i) = IO_floatValue(line,positions,2)
constitutive_nonlocal_peierlsEnergyPerSlipFamily(f,1,i) = IO_floatValue(line,positions,1+f)
case('peierlsenergyscrew')
forall (f = 1:lattice_maxNslipFamily) &
constitutive_nonlocal_peierlsEnergyPerSlipFamily(f,2,i) = IO_floatValue(line,positions,1+f)
case('solidsolutionstrength')
constitutive_nonlocal_solidSolutionStrength(i) = IO_floatValue(line,positions,2)
case('solidsolutionenergy') case('solidsolutionenergy')
constitutive_nonlocal_solidSolutionEnergy(i) = IO_floatValue(line,positions,2) constitutive_nonlocal_solidSolutionEnergy(i) = IO_floatValue(line,positions,2)
case('solidsolutionsize')
constitutive_nonlocal_solidSolutionSize(i) = IO_floatValue(line,positions,2)
case('solidsolutionconcentration')
constitutive_nonlocal_solidSolutionConcentration(i) = IO_floatValue(line,positions,2)
case('p') case('p')
constitutive_nonlocal_p(i) = IO_floatValue(line,positions,2) constitutive_nonlocal_p(i) = IO_floatValue(line,positions,2)
case('q') case('q')
@ -466,8 +466,6 @@ enddo
call IO_error(235,ext_msg='minimumDipoleHeightScrew') call IO_error(235,ext_msg='minimumDipoleHeightScrew')
if (constitutive_nonlocal_peierlsStressPerSlipFamily(f,1,i) <= 0.0_pReal) call IO_error(235,ext_msg='peierlsStressEdge') if (constitutive_nonlocal_peierlsStressPerSlipFamily(f,1,i) <= 0.0_pReal) call IO_error(235,ext_msg='peierlsStressEdge')
if (constitutive_nonlocal_peierlsStressPerSlipFamily(f,2,i) <= 0.0_pReal) call IO_error(235,ext_msg='peierlsStressScrew') if (constitutive_nonlocal_peierlsStressPerSlipFamily(f,2,i) <= 0.0_pReal) call IO_error(235,ext_msg='peierlsStressScrew')
if (constitutive_nonlocal_peierlsEnergyPerSlipFamily(f,1,i) <= 0.0_pReal) call IO_error(235,ext_msg='peierlsEnergyEdge')
if (constitutive_nonlocal_peierlsEnergyPerSlipFamily(f,2,i) <= 0.0_pReal) call IO_error(235,ext_msg='peierlsEnergyScrew')
endif endif
enddo enddo
if (any(constitutive_nonlocal_interactionSlipSlip(1:maxval(lattice_interactionSlipSlip(:,:,myStructure)),i) < 0.0_pReal)) & if (any(constitutive_nonlocal_interactionSlipSlip(1:maxval(lattice_interactionSlipSlip(:,:,myStructure)),i) < 0.0_pReal)) &
@ -477,8 +475,10 @@ enddo
if (constitutive_nonlocal_Dsd0(i) <= 0.0_pReal) call IO_error(235,ext_msg='selfDiffusionPrefactor') if (constitutive_nonlocal_Dsd0(i) <= 0.0_pReal) call IO_error(235,ext_msg='selfDiffusionPrefactor')
if (constitutive_nonlocal_Qsd(i) <= 0.0_pReal) call IO_error(235,ext_msg='selfDiffusionEnergy') if (constitutive_nonlocal_Qsd(i) <= 0.0_pReal) call IO_error(235,ext_msg='selfDiffusionEnergy')
if (constitutive_nonlocal_aTolRho(i) <= 0.0_pReal) call IO_error(235,ext_msg='aTol_rho') if (constitutive_nonlocal_aTolRho(i) <= 0.0_pReal) call IO_error(235,ext_msg='aTol_rho')
if (constitutive_nonlocal_solidSolutionStrength(i) <= 0.0_pReal) call IO_error(235,ext_msg='solidSolutionStrength') if (constitutive_nonlocal_doublekinkwidth(i) <= 0.0_pReal) call IO_error(235,ext_msg='doublekinkwidth')
if (constitutive_nonlocal_solidSolutionEnergy(i) <= 0.0_pReal) call IO_error(235,ext_msg='solidSolutionEnergy') if (constitutive_nonlocal_solidSolutionEnergy(i) <= 0.0_pReal) call IO_error(235,ext_msg='solidSolutionEnergy')
if (constitutive_nonlocal_solidSolutionSize(i) <= 0.0_pReal) call IO_error(235,ext_msg='solidSolutionSize')
if (constitutive_nonlocal_solidSolutionConcentration(i) <= 0.0_pReal) call IO_error(235,ext_msg='solidSolutionConcentration')
if (constitutive_nonlocal_p(i) <= 0.0_pReal .or. constitutive_nonlocal_p(i) > 1.0_pReal) call IO_error(235,ext_msg='p') if (constitutive_nonlocal_p(i) <= 0.0_pReal .or. constitutive_nonlocal_p(i) > 1.0_pReal) call IO_error(235,ext_msg='p')
if (constitutive_nonlocal_q(i) < 1.0_pReal .or. constitutive_nonlocal_q(i) > 2.0_pReal) call IO_error(235,ext_msg='q') if (constitutive_nonlocal_q(i) < 1.0_pReal .or. constitutive_nonlocal_q(i) > 2.0_pReal) call IO_error(235,ext_msg='q')
if (constitutive_nonlocal_viscosity(i) <= 0.0_pReal) call IO_error(235,ext_msg='viscosity') if (constitutive_nonlocal_viscosity(i) <= 0.0_pReal) call IO_error(235,ext_msg='viscosity')
@ -531,9 +531,6 @@ constitutive_nonlocal_rhoDotFlux = 0.0_pReal
allocate(constitutive_nonlocal_compatibility(2,maxTotalNslip, maxTotalNslip, FE_maxNipNeighbors, mesh_maxNips, mesh_NcpElems)) allocate(constitutive_nonlocal_compatibility(2,maxTotalNslip, maxTotalNslip, FE_maxNipNeighbors, mesh_maxNips, mesh_NcpElems))
constitutive_nonlocal_compatibility = 0.0_pReal constitutive_nonlocal_compatibility = 0.0_pReal
allocate(constitutive_nonlocal_peierlsEnergy(maxTotalNslip,2,maxNinstance))
constitutive_nonlocal_peierlsEnergy = 0.0_pReal
allocate(constitutive_nonlocal_peierlsStress(maxTotalNslip,2,maxNinstance)) allocate(constitutive_nonlocal_peierlsStress(maxTotalNslip,2,maxNinstance))
constitutive_nonlocal_peierlsStress = 0.0_pReal constitutive_nonlocal_peierlsStress = 0.0_pReal
@ -693,7 +690,6 @@ do i = 1,maxNinstance
constitutive_nonlocal_lambda0(s1,i) = constitutive_nonlocal_lambda0PerSlipFamily(f,i) constitutive_nonlocal_lambda0(s1,i) = constitutive_nonlocal_lambda0PerSlipFamily(f,i)
constitutive_nonlocal_minimumDipoleHeight(s1,1:2,i) = constitutive_nonlocal_minimumDipoleHeightPerSlipFamily(f,1:2,i) constitutive_nonlocal_minimumDipoleHeight(s1,1:2,i) = constitutive_nonlocal_minimumDipoleHeightPerSlipFamily(f,1:2,i)
constitutive_nonlocal_peierlsStress(s1,1:2,i) = constitutive_nonlocal_peierlsStressPerSlipFamily(f,1:2,i) constitutive_nonlocal_peierlsStress(s1,1:2,i) = constitutive_nonlocal_peierlsStressPerSlipFamily(f,1:2,i)
constitutive_nonlocal_peierlsEnergy(s1,1:2,i) = constitutive_nonlocal_peierlsEnergyPerSlipFamily(f,1:2,i)
do s2 = 1,ns do s2 = 1,ns
@ -1241,40 +1237,42 @@ real(pReal), dimension(constitutive_nonlocal_totalNslip(phase_constitutionInstan
intent(out), optional :: dv_dtau ! velocity derivative with respect to resolved shear stress intent(out), optional :: dv_dtau ! velocity derivative with respect to resolved shear stress
!*** local variables !*** local variables
integer(pInt) myInstance, & ! current instance of this constitution integer(pInt) instance, & ! current instance of this constitution
myStructure, & ! current lattice structure
ns, & ! short notation for the total number of active slip systems ns, & ! short notation for the total number of active slip systems
s ! index of my current slip system s ! index of my current slip system
real(pReal), dimension(constitutive_nonlocal_totalNslip(phase_constitutionInstance(material_phase(g,ip,el)))) :: & real(pReal), dimension(constitutive_nonlocal_totalNslip(phase_constitutionInstance(material_phase(g,ip,el)))) :: &
tauThreshold, & ! threshold shear stress tauThreshold ! threshold shear stress
rhoForest, & ! forest dislocation density real(pReal) tauRel_P, &
meanfreepath, & ! mean free travel distance for dislocations between two strong obstacles tauRel_S, &
sweaptArea, & ! area that is swept when one strong obstacle is surmounted
b ! shortcut for burgers vector length
real(pReal) tauRelPeierls, &
tauRelSS, &
tPeierls, & ! waiting time in front of a peierls barriers tPeierls, & ! waiting time in front of a peierls barriers
tSS, & ! waiting time in front of a solid solution obstacle tSolidSolution, & ! waiting time in front of a solid solution obstacle
tViscous, & ! travel time for mean freepath in case of viscous glide vViscous, & ! viscous glide velocity
dtPeierls_dtau, & ! derivative with respect to resolved shear stress dtPeierls_dtau, & ! derivative with respect to resolved shear stress
dtSS_dtau, & ! derivative with respect to resolved shear stress dtSolidSolution_dtau, & ! derivative with respect to resolved shear stress
dtViscous_dtau, & ! derivative with respect to resolved shear stress
p, & ! shortcut to Kocks,Argon,Ashby parameter p p, & ! shortcut to Kocks,Argon,Ashby parameter p
q ! shortcut to Kocks,Argon,Ashby parameter q q, & ! shortcut to Kocks,Argon,Ashby parameter q
meanfreepath_S, & ! mean free travel distance for dislocations between two solid solution obstacles
meanfreepath_P, & ! mean free travel distance for dislocations between two Peierls barriers
jumpWidth_P, & ! depth of activated area
jumpWidth_S, & ! depth of activated area
activationLength_P, & ! length of activated dislocation line
activationLength_S, & ! length of activated dislocation line
activationVolume_P, & ! volume that needs to be activated to overcome barrier
activationVolume_S, & ! volume that needs to be activated to overcome barrier
activationEnergy_P, & ! energy that is needed to overcome barrier
activationEnergy_S, & ! energy that is needed to overcome barrier
criticalStress_P, & ! maximum obstacle strength
criticalStress_S, & ! maximum obstacle strength
mobility ! dislocation mobility
myInstance = phase_constitutionInstance(material_phase(g,ip,el)) instance = phase_constitutionInstance(material_phase(g,ip,el))
myStructure = constitutive_nonlocal_structure(myInstance) ns = constitutive_nonlocal_totalNslip(instance)
ns = constitutive_nonlocal_totalNslip(myInstance)
rhoForest = state%p(10*ns+1:11*ns)
tauThreshold = state%p(11*ns+1:12*ns) tauThreshold = state%p(11*ns+1:12*ns)
meanfreepath = 1.0_pReal / sqrt(rhoForest)
sweaptArea = 1.0_pReal / rhoForest
p = constitutive_nonlocal_p(myInstance) p = constitutive_nonlocal_p(instance)
q = constitutive_nonlocal_q(myInstance) q = constitutive_nonlocal_q(instance)
b = constitutive_nonlocal_burgers(1:ns,myInstance)
v = 0.0_pReal v = 0.0_pReal
if (present(dv_dtau)) dv_dtau = 0.0_pReal if (present(dv_dtau)) dv_dtau = 0.0_pReal
@ -1287,45 +1285,58 @@ if (Temperature > 0.0_pReal) then
!* Peierls contribution !* Peierls contribution
!* The derivative only gives absolute values; the correct sign is taken care of in the formula for the derivative of the velocity !* The derivative only gives absolute values; the correct sign is taken care of in the formula for the derivative of the velocity
tauRelPeierls = (abs(tau(s)) - tauThreshold(s)) / constitutive_nonlocal_peierlsStress(s,c,myInstance) meanfreepath_P = constitutive_nonlocal_burgers(s,instance)
tPeierls = constitutive_nonlocal_fattack(myInstance) & jumpWidth_P = constitutive_nonlocal_burgers(s,instance)
* exp(constitutive_nonlocal_peierlsEnergy(s,c,myInstance) / (kB * Temperature) * (1.0_pReal - tauRelPeierls**p)**q ) activationLength_P = constitutive_nonlocal_doublekinkwidth(instance) * constitutive_nonlocal_burgers(s,instance)
activationVolume_P = activationLength_P * jumpWidth_P * constitutive_nonlocal_burgers(s,instance)
criticalStress_P = constitutive_nonlocal_peierlsStress(s,c,instance)
activationEnergy_P = criticalStress_P * activationVolume_P
tauRel_P = (abs(tau(s)) - tauThreshold(s)) / criticalStress_P
tPeierls = 1.0_pReal / constitutive_nonlocal_fattack(instance) &
* exp(activationEnergy_P / (kB * Temperature) * (1.0_pReal - tauRel_P**p)**q)
if (present(dv_dtau)) then if (present(dv_dtau)) then
dtPeierls_dtau = tPeierls * p * q * constitutive_nonlocal_peierlsEnergy(s,c,myInstance) & dtPeierls_dtau = tPeierls * p * q * activationVolume_P / (kB * Temperature) &
/ (kB * Temperature * constitutive_nonlocal_peierlsStress(s,c,myInstance)) & * (1.0_pReal - tauRel_P**p)**(q-1.0_pReal) * tauRel_P**(p-1.0_pReal)
* (1.0_pReal - tauRelPeierls**p)**(q-1.0_pReal) * tauRelPeierls**(p-1.0_pReal)
endif endif
!* Contribution from solid solution strengthening !* Contribution from solid solution strengthening
!* The derivative only gives absolute values; the correct sign is taken care of in the formula for the derivative of the velocity !* The derivative only gives absolute values; the correct sign is taken care of in the formula for the derivative of the velocity
tauRelSS = (abs(tau(s)) - tauThreshold(s)) / constitutive_nonlocal_solidSolutionStrength(myInstance) meanfreepath_S = constitutive_nonlocal_burgers(s,instance) / sqrt(constitutive_nonlocal_solidSolutionConcentration(instance))
tSS = constitutive_nonlocal_fattack(myInstance) & jumpWidth_S = constitutive_nonlocal_solidSolutionSize(instance) * constitutive_nonlocal_burgers(s,instance)
* exp(constitutive_nonlocal_solidSolutionEnergy(myInstance) / (kB * Temperature) * (1.0_pReal - tauRelSS**p)**q ) activationLength_S = constitutive_nonlocal_burgers(s,instance) &
/ sqrt(constitutive_nonlocal_solidSolutionConcentration(instance))
activationVolume_S = activationLength_S * jumpWidth_S * constitutive_nonlocal_burgers(s,instance)
activationEnergy_S = constitutive_nonlocal_solidSolutionEnergy(instance)
criticalStress_S = activationEnergy_S / activationVolume_S
tauRel_S = (abs(tau(s)) - tauThreshold(s)) / criticalStress_S
tSolidSolution = 1.0_pReal / constitutive_nonlocal_fattack(instance) &
* exp(activationEnergy_S / (kB * Temperature) * (1.0_pReal - tauRel_S**p)**q)
if (present(dv_dtau)) then if (present(dv_dtau)) then
dtSS_dtau = tSS * p * q * constitutive_nonlocal_solidSolutionEnergy(myInstance) & dtSolidSolution_dtau = tSolidSolution * p * q * activationVolume_S / (kB * Temperature) &
/ (kB * Temperature * constitutive_nonlocal_solidsolutionStrength(myInstance)) & * (1.0_pReal - tauRel_S**p)**(q-1.0_pReal) * tauRel_S**(p-1.0_pReal)
* (1.0_pReal - tauRelSS**p)**(q-1.0_pReal) * tauRelSS**(p-1.0_pReal)
endif endif
!* Contribution from viscous glide !* viscous glide velocity
!* The derivative only gives absolute values; the correct sign is taken care of in the formula for the derivative of the velocity
tViscous = meanfreepath(s) * constitutive_nonlocal_viscosity(myInstance) / (b(s) * abs(tau(s))) mobility = constitutive_nonlocal_burgers(s,instance) / constitutive_nonlocal_viscosity(instance)
dtViscous_dtau = tViscous / abs(tau(s)) vViscous = mobility * abs(tau(s))
!* velocity = travel distance over travel time times correction term for backward jumps !* Mean velocity results from waiting time at peierls barriers and solid solution obstacles with respective meanfreepath of
!* free flight at glide velocity in between. Backward jumps at low stresses are considered only at peierls barriers,
!* since those have the smallest activation volume, thus are decisive.
v(s) = meanfreepath(s) / (tPeierls + tSS + tViscous) & v(s) = 1.0_pReal / (tPeierls / meanfreepath_P + tSolidSolution / meanfreepath_S + 1.0_pReal / vViscous) &
* (1.0_pReal - exp(-(abs(tau(s)) - tauThreshold(s)) * sweaptArea(s) * b(s) / (kB * Temperature))) * (1.0_pReal - exp(-(abs(tau(s)) - tauThreshold(s)) * activationVolume_P / (kB * Temperature)))
v(s) = sign(v(s),tau(s)) v(s) = sign(v(s),tau(s))
if (present(dv_dtau)) then if (present(dv_dtau)) then
dv_dtau(s) = abs(v(s)) * (dtPeierls_dtau + dtSS_dtau + dtViscous_dtau) / (tPeierls + tSS + tViscous) & dv_dtau(s) = 1.0_pReal / (tPeierls / meanfreepath_P + tSolidSolution / meanfreepath_S + 1.0_pReal / vViscous) &
+ sweaptArea(s) * b(s) / (kB * Temperature) * meanfreepath(s) / (tPeierls + tSS + tViscous) & * (abs(v(s)) * (dtPeierls_dtau + dtSolidSolution_dtau + 1.0_pReal / (mobility * tau(s) * tau(s))) &
* exp(-(abs(tau(s)) - tauThreshold(s)) * sweaptArea(s) * b(s) / (kB * Temperature)) + activationVolume_P / (kB * Temperature) * exp(-(abs(tau(s)) - tauThreshold(s)) * activationVolume_P &
/ (kB * Temperature)))
endif endif
endif endif
@ -1339,7 +1350,7 @@ endif
write(6,'(a,i8,1x,i2,1x,i1)') '<< CONST >> nonlocal_kinetics at el ip g',el,ip,g write(6,'(a,i8,1x,i2,1x,i1)') '<< CONST >> nonlocal_kinetics at el ip g',el,ip,g
write(6,*) write(6,*)
write(6,'(a,/,12x,12(f12.5,1x))') '<< CONST >> tau / MPa', tau / 1e6_pReal write(6,'(a,/,12x,12(f12.5,1x))') '<< CONST >> tau / MPa', tau / 1e6_pReal
write(6,'(a,/,4(12x,12(f12.5,1x),/))') '<< CONST >> v / 1e-3m/s', v * 1e3 write(6,'(a,/,12x,12(f12.5,1x))') '<< CONST >> v / 1e-3m/s', v * 1e3
endif endif
#endif #endif
@ -1859,7 +1870,7 @@ if (.not. phase_localConstitution(material_phase(g,ip,el))) then
endif endif
if (considerLeavingFlux) then if (considerLeavingFlux) then
normal_me2neighbor_defConf = math_det33(Favg) * math_mul33x3(math_inv33(math_transpose33(Favg)),& normal_me2neighbor_defConf = math_det33(Favg) * math_mul33x3(math_inv33(math_transpose33(Favg)), &
mesh_ipAreaNormal(1:3,n,ip,el)) ! calculate the normal of the interface in (average) deformed configuration (pointing from me to my neighbor!!!) mesh_ipAreaNormal(1:3,n,ip,el)) ! calculate the normal of the interface in (average) deformed configuration (pointing from me to my neighbor!!!)
normal_me2neighbor = math_mul33x3(math_transpose33(my_Fe), normal_me2neighbor_defConf) / math_det33(my_Fe) ! interface normal in my lattice configuration normal_me2neighbor = math_mul33x3(math_transpose33(my_Fe), normal_me2neighbor_defConf) / math_det33(my_Fe) ! interface normal in my lattice configuration
area = mesh_ipArea(n,ip,el) * math_norm3(normal_me2neighbor) area = mesh_ipArea(n,ip,el) * math_norm3(normal_me2neighbor)
@ -2292,7 +2303,7 @@ forall (t = 5:8) &
constitutive_nonlocal_dislocationstress = 0.0_pReal constitutive_nonlocal_dislocationstress = 0.0_pReal
if (.not. phase_localConstitution(phase)) then if (.not. phase_localConstitution(phase)) then
call math_invert33(Fe(1:3,1:3,1,ip,el), invFe, detFe, inversionError) call math_invert33(Fe(1:3,1:3,g,ip,el), invFe, detFe, inversionError)
! if (inversionError) then ! if (inversionError) then
! return ! return
! endif ! endif