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:
parent
bbf4f25898
commit
d62eddc0cd
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue