dipole dissociation and formation by change in stress as new mechanism in deltaState; had to add dipole height to state variables, which is however updated by deltaState instead of microstructure; alternatively microstructure had to know the current stress state

This commit is contained in:
Christoph Kords 2012-05-18 14:35:52 +00:00
parent 4da6907648
commit 5b02d4e8eb
2 changed files with 99 additions and 18 deletions

View File

@ -831,7 +831,7 @@ select case (phase_plasticity(material_phase(ipc,ip,el)))
constitutive_deltaState(ipc,ip,el)%p = constitutive_dislotwin_deltaState(Tstar_v,Temperature,constitutive_state,ipc,ip,el) constitutive_deltaState(ipc,ip,el)%p = constitutive_dislotwin_deltaState(Tstar_v,Temperature,constitutive_state,ipc,ip,el)
case (constitutive_nonlocal_label) case (constitutive_nonlocal_label)
constitutive_deltaState(ipc,ip,el)%p = constitutive_nonlocal_deltaState(Tstar_v,Temperature,constitutive_state,ipc,ip,el) call constitutive_nonlocal_deltaState(constitutive_deltaState(ipc,ip,el),constitutive_state, Tstar_v,Temperature,ipc,ip,el)
end select end select

View File

@ -58,11 +58,13 @@ constitutive_nonlocal_listDependentStates = (/'rhoForest ', &
'tauThreshold ', & 'tauThreshold ', &
'tauBack ' /) ! list of microstructural state variables that depend on other state variables 'tauBack ' /) ! list of microstructural state variables that depend on other state variables
character(len=16), dimension(4), parameter, private :: & character(len=20), dimension(6), parameter, private :: &
constitutive_nonlocal_listOtherStates = (/'velocityEdgePos ', & constitutive_nonlocal_listOtherStates = (/'velocityEdgePos ', &
'velocityEdgeNeg ', & 'velocityEdgeNeg ', &
'velocityScrewPos', & 'velocityScrewPos ', &
'velocityScrewNeg' /) ! list of other dependent state variables that are not updated by microstructure 'velocityScrewNeg ', &
'maxDipoleHeightEdge ', &
'maxDipoleHeightScrew' /) ! list of other dependent state variables that are not updated by microstructure
real(pReal), parameter, private :: & real(pReal), parameter, private :: &
kB = 1.38e-23_pReal ! Physical parameter, Boltzmann constant in J/Kelvin kB = 1.38e-23_pReal ! Physical parameter, Boltzmann constant in J/Kelvin
@ -1524,7 +1526,7 @@ endsubroutine
!********************************************************************* !*********************************************************************
!* incremental change of microstructure * !* incremental change of microstructure *
!********************************************************************* !*********************************************************************
function constitutive_nonlocal_deltaState(Tstar_v, Temperature, state, g,ip,el) subroutine constitutive_nonlocal_deltaState(deltaState, state, Tstar_v, Temperature, g,ip,el)
use prec, only: pReal, & use prec, only: pReal, &
pInt, & pInt, &
@ -1536,6 +1538,9 @@ use debug, only: debug_what, &
debug_g, & debug_g, &
debug_i, & debug_i, &
debug_e debug_e
use math, only: pi, &
math_mul6x6
use lattice, only: lattice_Sslip_v
use mesh, only: mesh_NcpElems, & use mesh, only: mesh_NcpElems, &
mesh_maxNips mesh_maxNips
use material, only: homogenization_maxNgrains, & use material, only: homogenization_maxNgrains, &
@ -1550,12 +1555,13 @@ integer(pInt), intent(in) :: g, & ! current
el ! current element number el ! current element number
real(pReal), intent(in) :: Temperature ! temperature real(pReal), intent(in) :: Temperature ! temperature
real(pReal), dimension(6), intent(in) :: Tstar_v ! current 2nd Piola-Kirchhoff stress in Mandel notation real(pReal), dimension(6), intent(in) :: Tstar_v ! current 2nd Piola-Kirchhoff stress in Mandel notation
type(p_vec), dimension(homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), intent(in) :: &
!*** input/output variables
type(p_vec), dimension(homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), intent(inout) :: &
state ! current microstructural state state ! current microstructural state
!*** output variables !*** output variables
real(pReal), dimension(constitutive_nonlocal_sizeDotState(phase_plasticityInstance(material_phase(g,ip,el)))) :: & type(p_vec), intent(out) :: deltaState ! change of state variables / microstructure
constitutive_nonlocal_deltaState ! change of state variables / microstructure
!*** local variables !*** local variables
integer(pInt) myInstance, & ! current instance of this plasticity integer(pInt) myInstance, & ! current instance of this plasticity
@ -1564,16 +1570,26 @@ integer(pInt) myInstance, & ! current
c, & ! character of dislocation c, & ! character of dislocation
n, & ! index of my current neighbor n, & ! index of my current neighbor
t, & ! type of dislocation t, & ! type of dislocation
s ! index of my current slip system s, & ! index of my current slip system
sLattice ! index of my current slip system according to lattice order
real(pReal), dimension(constitutive_nonlocal_totalNslip(phase_plasticityInstance(material_phase(g,ip,el))),10) :: & real(pReal), dimension(constitutive_nonlocal_totalNslip(phase_plasticityInstance(material_phase(g,ip,el))),10) :: &
deltaRho, & ! density increment deltaRho, & ! density increment
deltaRhoRemobilization ! density increment by remobilization deltaRhoRemobilization, & ! density increment by remobilization
deltaRhoSingle2DipoleStress, & ! density increment by dipole formation (by stress change)
deltaRhoDipole2SingleStress ! density increment by dipole dissociation (by stress change)
real(pReal), dimension(constitutive_nonlocal_totalNslip(phase_plasticityInstance(material_phase(g,ip,el))),8) :: & real(pReal), dimension(constitutive_nonlocal_totalNslip(phase_plasticityInstance(material_phase(g,ip,el))),8) :: &
rhoSgl ! current single dislocation densities (positive/negative screw and edge without dipoles) rhoSgl ! current single dislocation densities (positive/negative screw and edge without dipoles)
real(pReal), dimension(constitutive_nonlocal_totalNslip(phase_plasticityInstance(material_phase(g,ip,el))),4) :: & real(pReal), dimension(constitutive_nonlocal_totalNslip(phase_plasticityInstance(material_phase(g,ip,el))),4) :: &
v ! dislocation glide velocity v ! dislocation glide velocity
real(pReal), dimension(constitutive_nonlocal_totalNslip(phase_plasticityInstance(material_phase(g,ip,el)))) :: &
tau, & ! current resolved shear stress
tauBack ! current back stress from pileups on same slip system
real(pReal), dimension(constitutive_nonlocal_totalNslip(phase_plasticityInstance(material_phase(g,ip,el))),2) :: & real(pReal), dimension(constitutive_nonlocal_totalNslip(phase_plasticityInstance(material_phase(g,ip,el))),2) :: &
rhoDip ! current dipole dislocation densities (screw and edge dipoles) rhoDip, & ! current dipole dislocation densities (screw and edge dipoles)
dLower, & ! minimum stable dipole distance for edges and screws
dUpper, & ! current maximum stable dipole distance for edges and screws
dUpperOld, & ! old maximum stable dipole distance for edges and screws
deltaDUpper ! change in maximum stable dipole distance for edges and screws
#ifndef _OPENMP #ifndef _OPENMP
@ -1599,8 +1615,11 @@ forall (s = 1_pInt:ns, t = 5_pInt:8_pInt) &
rhoSgl(s,t) = state(g,ip,el)%p((t-1_pInt)*ns+s) rhoSgl(s,t) = state(g,ip,el)%p((t-1_pInt)*ns+s)
forall (s = 1_pInt:ns, c = 1_pInt:2_pInt) & forall (s = 1_pInt:ns, c = 1_pInt:2_pInt) &
rhoDip(s,c) = max(state(g,ip,el)%p((7_pInt+c)*ns+s), 0.0_pReal) rhoDip(s,c) = max(state(g,ip,el)%p((7_pInt+c)*ns+s), 0.0_pReal)
tauBack = state(g,ip,el)%p(12_pInt*ns+1:13_pInt*ns)
forall (t = 1_pInt:4_pInt) & forall (t = 1_pInt:4_pInt) &
v(1_pInt:ns,t) = state(g,ip,el)%p((12_pInt+t)*ns+1_pInt:(13_pInt+t)*ns) v(1_pInt:ns,t) = state(g,ip,el)%p((12_pInt+t)*ns+1_pInt:(13_pInt+t)*ns)
forall (c = 1_pInt:2_pInt) &
dUpperOld(1_pInt:ns,c) = state(g,ip,el)%p((16_pInt+c)*ns+1_pInt:(17_pInt+c)*ns)
@ -1622,13 +1641,75 @@ enddo
!**************************************************************************** !****************************************************************************
!*** assign the rates of dislocation densities to my dotState !*** calculate dipole formation and dissociation by stress change
!*** if evolution rates lead to negative densities, a cutback is enforced
!*** calculate limits for stable dipole height
do s = 1_pInt,ns
sLattice = constitutive_nonlocal_slipSystemLattice(s,myInstance)
tau(s) = math_mul6x6(Tstar_v, lattice_Sslip_v(1:6,sLattice,myStructure)) + tauBack(s)
if (abs(tau(s)) < 1.0e-15_pReal) tau(s) = 1.0e-15_pReal
enddo
dLower = constitutive_nonlocal_minimumDipoleHeight(1:ns,1:2,myInstance)
dUpper(1:ns,2) = min(1.0_pReal / sqrt(sum(abs(rhoSgl),2) + sum(rhoDip,2)), &
constitutive_nonlocal_Gmod(myInstance) * constitutive_nonlocal_burgers(1:ns,myInstance) &
/ (8.0_pReal * pi * abs(tau)))
dUpper(1:ns,1) = dUpper(1:ns,2) / (1.0_pReal - constitutive_nonlocal_nu(myInstance))
deltaDUpper = dUpper - dUpperOld
!*** dissociation by stress increase
deltaRhoDipole2SingleStress = 0.0_pReal
forall (c=1_pInt:2_pInt, s=1_pInt:ns, deltaDUpper(s,c) < 0.0_pReal) &
deltaRhoDipole2SingleStress(s,8_pInt+c) = rhoDip(s,c) * deltaDUpper(s,c) / (dUpper(s,c) - dLower(s,c))
forall (t=1_pInt:4_pInt) &
deltaRhoDipole2SingleStress(1_pInt:ns,t) = -0.5_pReal * deltaRhoDipole2SingleStress(1_pInt:ns,(t-1_pInt)/2_pInt+9_pInt)
!*** formation by stress decrease
deltaRhoSingle2DipoleStress = 0.0_pReal
do c = 1,2
do s = 1,ns
if (deltaDUpper(s,c) > 0.0_pReal) then
deltaRhoSingle2DipoleStress(s,2*(c-1)+1) = -4.0_pReal * deltaDUpper(s,c) * dUpper(s,c) * rhoSgl(s,2*(c-1)+1) &
* ( rhoSgl(s,2*(c-1)+2) + abs(rhoSgl(s,2*(c-1)+6)) )
deltaRhoSingle2DipoleStress(s,2*(c-1)+2) = -4.0_pReal * deltaDUpper(s,c) * dUpper(s,c) * rhoSgl(s,2*(c-1)+2) &
* ( rhoSgl(s,2*(c-1)+1) + abs(rhoSgl(s,2*(c-1)+5)) )
deltaRhoSingle2DipoleStress(s,2*(c-1)+5) = -4.0_pReal * deltaDUpper(s,c) * dUpper(s,c) * rhoSgl(s,2*(c-1)+5) &
* ( rhoSgl(s,2*(c-1)+2) + abs(rhoSgl(s,2*(c-1)+6)) )
deltaRhoSingle2DipoleStress(s,2*(c-1)+6) = -4.0_pReal * deltaDUpper(s,c) * dUpper(s,c) * rhoSgl(s,2*(c-1)+6) &
* ( rhoSgl(s,2*(c-1)+1) + abs(rhoSgl(s,2*(c-1)+5)) )
endif
enddo
enddo
forall (c = 1:2) &
deltaRhoSingle2DipoleStress(1:ns,8+c) = abs(deltaRhoSingle2DipoleStress(1:ns,2*(c-1)+1)) &
+ abs(deltaRhoSingle2DipoleStress(1:ns,2*(c-1)+2)) &
+ abs(deltaRhoSingle2DipoleStress(1:ns,2*(c-1)+5)) &
+ abs(deltaRhoSingle2DipoleStress(1:ns,2*(c-1)+6))
!*** store new maximum dipole height in state
forall (c = 1_pInt:2_pInt) &
state(g,ip,el)%p((16_pInt+c)*ns+1_pInt:(17_pInt+c)*ns) = dUpper(1_pInt:ns,c)
!****************************************************************************
!*** assign the rates of dislocation densities to deltaState
deltaRho = 0.0_pReal deltaRho = 0.0_pReal
deltaRho = deltaRhoRemobilization deltaRho = deltaRhoRemobilization &
+ deltaRhoDipole2SingleStress &
+ deltaRhoSingle2DipoleStress
constitutive_nonlocal_deltaState = reshape(deltaRho,(/10_pInt*ns/)) deltaState%p = reshape(deltaRho,(/10_pInt*ns/))
@ -1641,7 +1722,7 @@ constitutive_nonlocal_deltaState = reshape(deltaRho,(/10_pInt*ns/))
endif endif
#endif #endif
endfunction endsubroutine