- corrected contribution of immobile singles to dipole formation and annihilation rates

- remobilization of immobile singles immediately increases the mobile single dislocation density and therefore directly affects all other mechanisms in dotState
This commit is contained in:
Christoph Kords 2010-01-06 09:54:00 +00:00
parent dce840c0a5
commit ed8446e0f3
1 changed files with 43 additions and 43 deletions

View File

@ -1279,7 +1279,7 @@ endif
!**************************************************************************** !****************************************************************************
!*** dislocation remobilization (changing direction of slip remobilizes used dislocation densities) !*** dislocation remobilization (bauschinger effect)
thisRhoDotSgl = 0.0_pReal thisRhoDotSgl = 0.0_pReal
if (timestep > 0.0_pReal) then if (timestep > 0.0_pReal) then
@ -1287,7 +1287,9 @@ if (timestep > 0.0_pReal) then
do s = 1,ns do s = 1,ns
if (rhoSgl(s,t+4) * v(s) < 0.0_pReal) then if (rhoSgl(s,t+4) * v(s) < 0.0_pReal) then
thisRhoDotSgl(s,t) = abs(rhoSgl(s,t+4)) / timestep thisRhoDotSgl(s,t) = abs(rhoSgl(s,t+4)) / timestep
rhoSgl(s,t) = rhoSgl(s,t) + abs(rhoSgl(s,t+4))
thisRhoDotSgl(s,t+4) = - sign(1.0_pReal,rhoSgl(s,t+4)) * rhoSgl(s,t+4) / timestep thisRhoDotSgl(s,t+4) = - sign(1.0_pReal,rhoSgl(s,t+4)) * rhoSgl(s,t+4) / timestep
rhoSgl(s,t+4) = 0.0_pReal
endif endif
enddo enddo
enddo enddo
@ -1400,14 +1402,10 @@ endif
!*** formation by glide !*** formation by glide
do c = 1,2 do c = 1,2
thisRhoDotSgl(:,2*c-1) = - 2.0_pReal * dUpper(:,c) / constitutive_nonlocal_burgersPerSlipSystem(:,myInstance) & thisRhoDotSgl(:,2*c-1) = - 4.0_pReal * dUpper(:,c) * rhoSgl(:,2*c-1) * rhoSgl(:,2*c) * abs(v)
* abs(rhoSgl(:,2*c-1)) * abs(gdot(:,2*c)) thisRhoDotSgl(:,2*c) = thisRhoDotSgl(:,2*c-1)
thisRhoDotSgl(:,2*c) = - 2.0_pReal * dUpper(:,c) / constitutive_nonlocal_burgersPerSlipSystem(:,myInstance) & thisRhoDotSgl(:,2*c+3) = - 2.0_pReal * dUpper(:,c) * abs(rhoSgl(:,2*c+3)) * rhoSgl(:,2*c) * abs(v)
* abs(rhoSgl(:,2*c)) * abs(gdot(:,2*c-1)) thisRhoDotSgl(:,2*c+4) = - 2.0_pReal * dUpper(:,c) * abs(rhoSgl(:,2*c+4)) * rhoSgl(:,2*c-1) * abs(v)
thisRhoDotSgl(:,2*c+3) = - 2.0_pReal * dUpper(:,c) / constitutive_nonlocal_burgersPerSlipSystem(:,myInstance) &
* abs(rhoSgl(:,2*c+3)) * abs(gdot(:,2*c))
thisRhoDotSgl(:,2*c+4) = - 2.0_pReal * dUpper(:,c) / constitutive_nonlocal_burgersPerSlipSystem(:,myInstance) &
* abs(rhoSgl(:,2*c+4)) * abs(gdot(:,2*c-1))
thisRhoDotDip(:,c) = - thisRhoDotSgl(:,2*c-1) - thisRhoDotSgl(:,2*c) - thisRhoDotSgl(:,2*c+3) - thisRhoDotSgl(:,2*c+4) thisRhoDotDip(:,c) = - thisRhoDotSgl(:,2*c-1) - thisRhoDotSgl(:,2*c) - thisRhoDotSgl(:,2*c+3) - thisRhoDotSgl(:,2*c+4)
enddo enddo
@ -1424,10 +1422,10 @@ endif
!*** athermal annihilation !*** athermal annihilation
forall (c=1:2) & forall (c=1:2) &
thisRhoDotDip(:,c) = - 4.0_pReal * dLower(:,c) / constitutive_nonlocal_burgersPerSlipSystem(:,myInstance) & thisRhoDotDip(:,c) = - 2.0_pReal * dLower(:,c) * abs(v) &
* ( ( rhoSgl(:,2*c-1) + abs(rhoSgl(:,2*c+3)) ) * abs(gdot(:,2*c)) & ! was single hitting (used) single * ( 4.0_pReal * rhoSgl(:,2*c-1) * rhoSgl(:,2*c) & ! was single hitting single
+ ( rhoSgl(:,2*c) + abs(rhoSgl(:,2*c+4)) ) * abs(gdot(:,2*c-1)) & ! was single hitting (used) single + abs(rhoSgl(:,2*c+3)) * rhoSgl(:,2*c) + abs(rhoSgl(:,2*c+4)) * rhoSgl(:,2*c-1) & ! was single hitting immobile/used single
+ 0.5_pReal * rhoDip(:,c) * (abs(gdot(:,2*c-1))+abs(gdot(:,2*c))) ) ! single knocks dipole constituent + rhoDip(:,c) * ( rhoSgl(:,2*c-1) + rhoSgl(:,2*c) ) ) ! single knocks dipole constituent
thisRhoDotSgl = 0.0_pReal ! singles themselves don't annihilate thisRhoDotSgl = 0.0_pReal ! singles themselves don't annihilate
totalRhoDotSgl = totalRhoDotSgl + thisRhoDotSgl totalRhoDotSgl = totalRhoDotSgl + thisRhoDotSgl
@ -1691,7 +1689,8 @@ cs = 0_pInt
constitutive_nonlocal_postResults = 0.0_pReal constitutive_nonlocal_postResults = 0.0_pReal
! short hand notations for state variables !* short hand notations for state variables
forall (t = 1:8) rhoSgl(:,t) = state(g,ip,el)%p((t-1)*ns+1:t*ns) forall (t = 1:8) rhoSgl(:,t) = state(g,ip,el)%p((t-1)*ns+1:t*ns)
forall (t = 1:8) previousRhoSgl(:,t) = previousState(g,ip,el)%p((t-1)*ns+1:t*ns) forall (t = 1:8) previousRhoSgl(:,t) = previousState(g,ip,el)%p((t-1)*ns+1:t*ns)
forall (c = 1:2) rhoDip(:,c) = state(g,ip,el)%p((7+c)*ns+1:(8+c)*ns) forall (c = 1:2) rhoDip(:,c) = state(g,ip,el)%p((7+c)*ns+1:(8+c)*ns)
@ -1704,7 +1703,8 @@ forall (t = 1:8) rhoDotSgl(:,t) = dotState(g,ip,el)%p((t-1)*ns+1:t*ns)
forall (c = 1:2) rhoDotDip(:,c) = dotState(g,ip,el)%p((7+c)*ns+1:(8+c)*ns) forall (c = 1:2) rhoDotDip(:,c) = dotState(g,ip,el)%p((7+c)*ns+1:(8+c)*ns)
! Calculate shear rate !* Calculate shear rate
do s = 1,ns do s = 1,ns
sLattice = constitutive_nonlocal_slipSystemLattice(s,myInstance) sLattice = constitutive_nonlocal_slipSystemLattice(s,myInstance)
tauSlip(s) = math_mul6x6( Tstar_v + Tdislocation_v, lattice_Sslip_v(:,sLattice,myStructure) ) tauSlip(s) = math_mul6x6( Tstar_v + Tdislocation_v, lattice_Sslip_v(:,sLattice,myStructure) )
@ -1715,13 +1715,20 @@ v = constitutive_nonlocal_v0PerSlipSystem(:,myInstance) &
* exp( - constitutive_nonlocal_Q0(myInstance) / ( kB * Temperature) * (1.0_pReal - (abs(tauSlip)/tauSlipThreshold) ) ) & * exp( - constitutive_nonlocal_Q0(myInstance) / ( kB * Temperature) * (1.0_pReal - (abs(tauSlip)/tauSlipThreshold) ) ) &
* sign(1.0_pReal,tauSlip) * sign(1.0_pReal,tauSlip)
forall (t = 1:4) & do t = 1,4
gdot(:,t) = rhoSgl(:,t) * constitutive_nonlocal_burgersPerSlipSystem(:,myInstance) * v do s = 1,ns
forall (s = 1:ns, t = 1:4, rhoSgl(s,t+4) * v(s) < 0.0_pReal) & ! contribution of used rho for changing sign of v if (rhoSgl(s,t+4) * v(s) < 0.0_pReal) then
gdot(s,t) = gdot(s,t) + abs(rhoSgl(s,t+4)) * constitutive_nonlocal_burgersPerSlipSystem(s,myInstance) * v(s) rhoSgl(s,t) = rhoSgl(s,t) + abs(rhoSgl(s,t+4)) ! remobilization of immobile singles for changing sign of v (bauschinger effect)
rhoSgl(s,t+4) = 0.0_pReal ! remobilization of immobile singles for changing sign of v (bauschinger effect)
endif
enddo
enddo
forall (t = 1:4) gdot(:,t) = rhoSgl(:,t) * constitutive_nonlocal_burgersPerSlipSystem(:,myInstance) * v
! calculate limits for stable dipole height and its rate of change !* calculate limits for stable dipole height and its rate of change
dLower(:,1) = constitutive_nonlocal_dLowerEdgePerSlipSystem(:,myInstance) dLower(:,1) = constitutive_nonlocal_dLowerEdgePerSlipSystem(:,myInstance)
dLower(:,2) = constitutive_nonlocal_dLowerScrewPerSlipSystem(:,myInstance) dLower(:,2) = constitutive_nonlocal_dLowerScrewPerSlipSystem(:,myInstance)
dUpper(:,2) = min( constitutive_nonlocal_Gmod(myInstance) * constitutive_nonlocal_burgersPerSlipSystem(:,myInstance) & dUpper(:,2) = min( constitutive_nonlocal_Gmod(myInstance) * constitutive_nonlocal_burgersPerSlipSystem(:,myInstance) &
@ -1740,7 +1747,8 @@ else
endif endif
! calculate fluxes !* calculate fluxes
m(:,:,1) = lattice_sd(:, constitutive_nonlocal_slipSystemLattice(:,myInstance), myStructure) m(:,:,1) = lattice_sd(:, constitutive_nonlocal_slipSystemLattice(:,myInstance), myStructure)
m(:,:,2) = -lattice_sd(:, constitutive_nonlocal_slipSystemLattice(:,myInstance), myStructure) m(:,:,2) = -lattice_sd(:, constitutive_nonlocal_slipSystemLattice(:,myInstance), myStructure)
m(:,:,3) = lattice_st(:, constitutive_nonlocal_slipSystemLattice(:,myInstance), myStructure) m(:,:,3) = lattice_st(:, constitutive_nonlocal_slipSystemLattice(:,myInstance), myStructure)
@ -1755,22 +1763,18 @@ do n = 1,FE_NipNeighbors(mesh_element(2,el))
neighboring_el = mesh_ipNeighborhood(1,n,ip,el) neighboring_el = mesh_ipNeighborhood(1,n,ip,el)
neighboring_ip = mesh_ipNeighborhood(2,n,ip,el) neighboring_ip = mesh_ipNeighborhood(2,n,ip,el)
! if neighbor exists, total deformation gradient is averaged over me and my neighbor if ( neighboring_el > 0 .and. neighboring_ip > 0 ) then ! if neighbor exists, total deformation gradient is averaged over me and my neighbor
if ( neighboring_el > 0 .and. neighboring_ip > 0 ) then
neighboring_F = math_mul33x33(Fe(:,:,g,neighboring_ip,neighboring_el), Fp(:,:,g,neighboring_ip,neighboring_el)) neighboring_F = math_mul33x33(Fe(:,:,g,neighboring_ip,neighboring_el), Fp(:,:,g,neighboring_ip,neighboring_el))
Favg = 0.5_pReal * (F + neighboring_F) Favg = 0.5_pReal * (F + neighboring_F)
else else
Favg = F Favg = F
endif endif
! calculate the normal of the interface in current and lattice configuration surfaceNormal_currentconf = math_det3x3(Favg) * math_mul33x3(math_inv3x3(transpose(Favg)), mesh_ipAreaNormal(:,n,ip,el)) ! normal of the interface in current configuration
surfaceNormal_currentconf = math_det3x3(Favg) * math_mul33x3(math_inv3x3(transpose(Favg)), mesh_ipAreaNormal(:,n,ip,el)) surfaceNormal = math_mul33x3(transpose(Fe(:,:,g,ip,el)), surfaceNormal_currentconf) / detFe ! normal of the interface in lattice configuration
surfaceNormal = math_mul33x3(transpose(Fe(:,:,g,ip,el)), surfaceNormal_currentconf) / detFe surfaceNormal = surfaceNormal / math_norm3(surfaceNormal) ! normalize the surface normal to unit length
! normalize the surface normal to unit length
surfaceNormal = surfaceNormal / math_norm3(surfaceNormal)
! calculate the area of the interface area = mesh_ipArea(n,ip,el) * math_norm3(surfaceNormal) ! area of the interface
area = mesh_ipArea(n,ip,el) * math_norm3(surfaceNormal)
do s = 1,ns ! loop over slip systems do s = 1,ns ! loop over slip systems
do t = 1,4 ! loop over dislocation types do t = 1,4 ! loop over dislocation types
@ -1974,11 +1978,8 @@ do o = 1,phase_Noutput(material_phase(g,ip,el))
case ('rho_dot_sgl2dip') case ('rho_dot_sgl2dip')
do c=1,2 ! dipole formation by glide do c=1,2 ! dipole formation by glide
constitutive_nonlocal_postResults(cs+1:cs+ns) = constitutive_nonlocal_postResults(cs+1:cs+ns) + & constitutive_nonlocal_postResults(cs+1:cs+ns) = constitutive_nonlocal_postResults(cs+1:cs+ns) + &
2.0_pReal * dUpper(:,c) / constitutive_nonlocal_burgersPerSlipSystem(:,myInstance) & 2.0_pReal * dUpper(:,c) * abs(v) * ( 4.0_pReal * rhoSgl(:,2*c-1) * rhoSgl(:,2*c) & ! was single hitting single
* ( rhoSgl(:,2*c-1) * abs(gdot(:,2*c )) & + abs(rhoSgl(:,2*c+3)) * rhoSgl(:,2*c) + abs(rhoSgl(:,2*c+4)) * rhoSgl(:,2*c-1) ) ! was single hitting immobile/used single
+ rhoSgl(:,2*c ) * abs(gdot(:,2*c-1)) &
+ abs(rhoSgl(:,2*c+3)) * abs(gdot(:,2*c )) &
+ abs(rhoSgl(:,2*c+4)) * abs(gdot(:,2*c-1)) )
enddo enddo
! do c=1,2 ! do c=1,2
! forall (s=1:ns, dUpperDot(s,c) > 0.0_pReal) & ! dipole formation by stress decrease ! forall (s=1:ns, dUpperDot(s,c) > 0.0_pReal) & ! dipole formation by stress decrease
@ -1999,10 +2000,9 @@ do o = 1,phase_Noutput(material_phase(g,ip,el))
case ('rho_dot_ann_ath') case ('rho_dot_ann_ath')
do c=1,2 do c=1,2
constitutive_nonlocal_postResults(cs+1:cs+ns) = constitutive_nonlocal_postResults(cs+1:cs+ns) + & constitutive_nonlocal_postResults(cs+1:cs+ns) = constitutive_nonlocal_postResults(cs+1:cs+ns) + &
4.0_pReal * dLower(:,c) / constitutive_nonlocal_burgersPerSlipSystem(:,myInstance) & 2.0_pReal * dLower(:,c) * abs(v) * ( 4.0_pReal * rhoSgl(:,2*c-1) * rhoSgl(:,2*c) & ! was single hitting single
* ( ( rhoSgl(:,2*c-1) + abs(rhoSgl(:,2*c+3)) ) * abs(gdot(:,2*c)) & ! was single hitting (used) single + abs(rhoSgl(:,2*c+3)) * rhoSgl(:,2*c) + abs(rhoSgl(:,2*c+4)) * rhoSgl(:,2*c-1) & ! was single hitting immobile/used single
+ ( rhoSgl(:,2*c) + abs(rhoSgl(:,2*c+4)) ) * abs(gdot(:,2*c-1)) & ! was single hitting (used) single + rhoDip(:,c) * ( rhoSgl(:,2*c-1) + rhoSgl(:,2*c) ) ) ! single knocks dipole constituent
+ 0.5_pReal * rhoDip(:,c) * ( abs(gdot(:,2*c-1)) + abs(gdot(:,2*c)) ) ) ! single knocks dipole constituent
enddo enddo
cs = cs + ns cs = cs + ns