From d80b45c1d9365e56efa2d4daa50723d9e87c4b2b Mon Sep 17 00:00:00 2001 From: Christoph Kords Date: Thu, 30 Aug 2012 07:33:13 +0000 Subject: [PATCH] added relativistic correction of velocity (maximum velocity given by parameter in material.config); probability of thermal activation in velocity law not allowed to be greater than one. output of creation rate for edge jogs now for own system, not collinear. check for negative densities in dotState now uses absoluteToleranceRho instead of significantRho. --- code/config/material.config | 1 + code/constitutive_nonlocal.f90 | 53 +++++++++++++++++++++++++--------- 2 files changed, 40 insertions(+), 14 deletions(-) diff --git a/code/config/material.config b/code/config/material.config index 0acb95e52..c61a2825d 100644 --- a/code/config/material.config +++ b/code/config/material.config @@ -285,6 +285,7 @@ viscosity 1e-4 # viscosity for dislocation gli p 1 # exponent for thermal barrier profile q 1 # exponent for thermal barrier profile attackFrequency 50e9 # attack frequency in Hz +maximumVelocity 3600 # maximum allowed velocity surfaceTransmissivity 1.0 # transmissivity of free surfaces for dislocation flux grainboundaryTransmissivity 0.0 # transmissivity of grain boundaries for dislocation flux (grain bundaries are identified as interfaces with different textures on both sides); if not set or set to negative number, the subroutine automatically determines the transmissivity at the grain boundary interaction_SlipSlip 0 0 0.625 0.07 0.137 0.122 # Dislocation interaction coefficient diff --git a/code/constitutive_nonlocal.f90 b/code/constitutive_nonlocal.f90 index 0bc0c4b84..5e2361982 100644 --- a/code/constitutive_nonlocal.f90 +++ b/code/constitutive_nonlocal.f90 @@ -125,6 +125,7 @@ constitutive_nonlocal_p, & ! parameter constitutive_nonlocal_q, & ! parameter for kinetic law (Kocks,Argon,Ashby) constitutive_nonlocal_viscosity, & ! viscosity for dislocation glide in Pa s constitutive_nonlocal_fattack, & ! attack frequency in Hz +constitutive_nonlocal_vmax, & ! maximum allowed velocity constitutive_nonlocal_rhoSglScatter, & ! standard deviation of scatter in initial dislocation density constitutive_nonlocal_surfaceTransmissivity, & ! transmissivity at free surface constitutive_nonlocal_grainboundaryTransmissivity, & ! transmissivity at grain boundary (identified by different texture) @@ -330,6 +331,7 @@ allocate(constitutive_nonlocal_p(maxNinstance)) allocate(constitutive_nonlocal_q(maxNinstance)) allocate(constitutive_nonlocal_viscosity(maxNinstance)) allocate(constitutive_nonlocal_fattack(maxNinstance)) +allocate(constitutive_nonlocal_vmax(maxNinstance)) allocate(constitutive_nonlocal_rhoSglScatter(maxNinstance)) allocate(constitutive_nonlocal_surfaceTransmissivity(maxNinstance)) allocate(constitutive_nonlocal_grainboundaryTransmissivity(maxNinstance)) @@ -359,6 +361,7 @@ constitutive_nonlocal_p = 1.0_pReal constitutive_nonlocal_q = 1.0_pReal constitutive_nonlocal_viscosity = 0.0_pReal constitutive_nonlocal_fattack = 0.0_pReal +constitutive_nonlocal_vmax = 0.0_pReal constitutive_nonlocal_rhoSglScatter = 0.0_pReal constitutive_nonlocal_surfaceTransmissivity = 1.0_pReal constitutive_nonlocal_grainboundaryTransmissivity = -1.0_pReal @@ -501,6 +504,8 @@ do constitutive_nonlocal_viscosity(i) = IO_floatValue(line,positions,2_pInt) case('attackfrequency','fattack') constitutive_nonlocal_fattack(i) = IO_floatValue(line,positions,2_pInt) + case('maximumvelocity','vmax') + constitutive_nonlocal_vmax(i) = IO_floatValue(line,positions,2_pInt) case('rhosglscatter') constitutive_nonlocal_rhoSglScatter(i) = IO_floatValue(line,positions,2_pInt) case('surfacetransmissivity') @@ -597,6 +602,8 @@ enddo //constitutive_nonlocal_label//')') if (constitutive_nonlocal_fattack(i) <= 0.0_pReal) call IO_error(211_pInt,ext_msg='attackFrequency (' & //constitutive_nonlocal_label//')') + if (constitutive_nonlocal_vmax(i) <= 0.0_pReal) call IO_error(211_pInt,ext_msg='maximumVelocity (' & + //constitutive_nonlocal_label//')') if (constitutive_nonlocal_rhoSglScatter(i) < 0.0_pReal) call IO_error(211_pInt,ext_msg='rhoSglScatter (' & //constitutive_nonlocal_label//')') if (constitutive_nonlocal_surfaceTransmissivity(i) < 0.0_pReal & @@ -1387,12 +1394,16 @@ if (Temperature > 0.0_pReal) then 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 = tauEff(s) / criticalStress_P + tauRel_P = min(1.0_pReal, tauEff(s) / criticalStress_P) ! ensure that the activation probability cannot become greater than one 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 - dtPeierls_dtau = tPeierls * p * q * activationVolume_P / (kB * Temperature) & - * (1.0_pReal - tauRel_P**p)**(q-1.0_pReal) * tauRel_P**(p-1.0_pReal) + if (tauEff(s) < criticalStress_P) then + dtPeierls_dtau = tPeierls * p * q * activationVolume_P / (kB * Temperature) & + * (1.0_pReal - tauRel_P**p)**(q-1.0_pReal) * tauRel_P**(p-1.0_pReal) + else + dtPeierls_dtau = 0.0_pReal + endif endif @@ -1406,12 +1417,16 @@ if (Temperature > 0.0_pReal) then 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 = tauEff(s) / criticalStress_S + tauRel_S = min(1.0_pReal, tauEff(s) / criticalStress_S) ! ensure that the activation probability cannot become greater than one 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 - dtSolidSolution_dtau = tSolidSolution * p * q * activationVolume_S / (kB * Temperature) & - * (1.0_pReal - tauRel_S**p)**(q-1.0_pReal) * tauRel_S**(p-1.0_pReal) + if (tauEff(s) < criticalStress_S) then + dtSolidSolution_dtau = tSolidSolution * p * q * activationVolume_S / (kB * Temperature) & + * (1.0_pReal - tauRel_S**p)**(q-1.0_pReal) * tauRel_S**(p-1.0_pReal) + else + dtSolidSolution_dtau = 0.0_pReal + endif endif @@ -1427,15 +1442,26 @@ if (Temperature > 0.0_pReal) then v(s) = 1.0_pReal / (tPeierls / meanfreepath_P + tSolidSolution / meanfreepath_S + 1.0_pReal / vViscous) & * (1.0_pReal - exp(-tauEff(s) * activationVolume_P / (kB * Temperature))) - v(s) = sign(v(s),tau(s)) if (present(dv_dtau)) then dv_dtau(s) = 1.0_pReal / (tPeierls / meanfreepath_P + tSolidSolution / meanfreepath_S + 1.0_pReal / vViscous) & - * (abs(v(s)) * ( dtPeierls_dtau / meanfreepath_P & - + dtSolidSolution_dtau / meanfreepath_S & - + 1.0_pReal / (mobility * tauEff(s)*tauEff(s))) & + * (v(s) * ( dtPeierls_dtau / meanfreepath_P + dtSolidSolution_dtau / meanfreepath_S & + + 1.0_pReal / (mobility * tauEff(s)*tauEff(s))) & + activationVolume_P / (kB * Temperature) * exp(-tauEff(s) * activationVolume_P / (kB * Temperature))) endif + + !* relativistic correction + + if (present(dv_dtau)) then + dv_dtau(s) = dv_dtau(s) * exp( -v(s) / constitutive_nonlocal_vmax(instance)) + endif + v(s) = constitutive_nonlocal_vmax(instance) * (1.0_pReal - exp( -v(s) / constitutive_nonlocal_vmax(instance))) + + + !* adopt sign from resolved stress + + v(s) = sign(v(s),tau(s)) + endif enddo endif @@ -2244,8 +2270,7 @@ if (numerics_integrationMode == 1_pInt) then constitutive_nonlocal_rhoDotSingle2DipoleGlide(1:ns,1:2,g,ip,el) = rhoDotSingle2DipoleGlide(1:ns,9:10) constitutive_nonlocal_rhoDotAthermalAnnihilation(1:ns,1:2,g,ip,el) = rhoDotAthermalAnnihilation(1:ns,9:10) constitutive_nonlocal_rhoDotThermalAnnihilation(1:ns,1:2,g,ip,el) = rhoDotThermalAnnihilation(1:ns,9:10) - constitutive_nonlocal_rhoDotEdgeJogs(1:ns,g,ip,el) = & - 2.0_pReal * rhoDotThermalAnnihilation(constitutive_nonlocal_colinearSystem(1:ns,myInstance),1) + constitutive_nonlocal_rhoDotEdgeJogs(1:ns,g,ip,el) = 2.0_pReal * rhoDotThermalAnnihilation(1:ns,1) endif @@ -2269,8 +2294,8 @@ endif #endif -if ( any(rhoSgl(1:ns,1:4) + rhoDot(1:ns,1:4) * timestep < -constitutive_nonlocal_significantRho(myInstance)) & - .or. any(rhoDip(1:ns,1:2) + rhoDot(1:ns,9:10) * timestep < -constitutive_nonlocal_significantRho(myInstance))) then +if ( any(rhoSgl(1:ns,1:4) + rhoDot(1:ns,1:4) * timestep < -constitutive_nonlocal_aTolRho(myInstance)) & + .or. any(rhoDip(1:ns,1:2) + rhoDot(1:ns,9:10) * timestep < -constitutive_nonlocal_aTolRho(myInstance))) then #ifndef _OPENMP if (iand(debug_level(debug_constitutive),debug_levelBasic) /= 0_pInt) then write(6,'(a,i5,a,i2)') '<< CONST >> evolution rate leads to negative density at el ',el,' ip ',ip