moved remobilization of dead dislocations from dotState to deltaState
This commit is contained in:
parent
a5c1624648
commit
4da6907648
|
@ -1529,6 +1529,13 @@ function constitutive_nonlocal_deltaState(Tstar_v, Temperature, state, g,ip,el)
|
||||||
use prec, only: pReal, &
|
use prec, only: pReal, &
|
||||||
pInt, &
|
pInt, &
|
||||||
p_vec
|
p_vec
|
||||||
|
use debug, only: debug_what, &
|
||||||
|
debug_constitutive, &
|
||||||
|
debug_levelBasic, &
|
||||||
|
debug_levelSelective, &
|
||||||
|
debug_g, &
|
||||||
|
debug_i, &
|
||||||
|
debug_e
|
||||||
use mesh, only: mesh_NcpElems, &
|
use mesh, only: mesh_NcpElems, &
|
||||||
mesh_maxNips
|
mesh_maxNips
|
||||||
use material, only: homogenization_maxNgrains, &
|
use material, only: homogenization_maxNgrains, &
|
||||||
|
@ -1551,8 +1558,88 @@ real(pReal), dimension(constitutive_nonlocal_sizeDotState(phase_plasticityInstan
|
||||||
constitutive_nonlocal_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
|
||||||
|
myStructure, & ! current lattice structure
|
||||||
|
ns, & ! short notation for the total number of active slip systems
|
||||||
|
c, & ! character of dislocation
|
||||||
|
n, & ! index of my current neighbor
|
||||||
|
t, & ! type of dislocation
|
||||||
|
s ! index of my current slip system
|
||||||
|
real(pReal), dimension(constitutive_nonlocal_totalNslip(phase_plasticityInstance(material_phase(g,ip,el))),10) :: &
|
||||||
|
deltaRho, & ! density increment
|
||||||
|
deltaRhoRemobilization ! density increment by remobilization
|
||||||
|
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)
|
||||||
|
real(pReal), dimension(constitutive_nonlocal_totalNslip(phase_plasticityInstance(material_phase(g,ip,el))),4) :: &
|
||||||
|
v ! dislocation glide velocity
|
||||||
|
real(pReal), dimension(constitutive_nonlocal_totalNslip(phase_plasticityInstance(material_phase(g,ip,el))),2) :: &
|
||||||
|
rhoDip ! current dipole dislocation densities (screw and edge dipoles)
|
||||||
|
|
||||||
constitutive_nonlocal_deltaState = 0.0_pReal
|
|
||||||
|
#ifndef _OPENMP
|
||||||
|
if (iand(debug_what(debug_constitutive),debug_levelBasic) /= 0_pInt &
|
||||||
|
.and. ((debug_e == el .and. debug_i == ip .and. debug_g == g)&
|
||||||
|
.or. .not. iand(debug_what(debug_constitutive),debug_levelSelective) /= 0_pInt)) then
|
||||||
|
write(6,*)
|
||||||
|
write(6,'(a,i8,1x,i2,1x,i1)') '<< CONST >> nonlocal_dotState at el ip g ',el,ip,g
|
||||||
|
write(6,*)
|
||||||
|
endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
myInstance = phase_plasticityInstance(material_phase(g,ip,el))
|
||||||
|
myStructure = constitutive_nonlocal_structure(myInstance)
|
||||||
|
ns = constitutive_nonlocal_totalNslip(myInstance)
|
||||||
|
|
||||||
|
|
||||||
|
!*** shortcut to state variables
|
||||||
|
|
||||||
|
forall (s = 1_pInt:ns, t = 1_pInt:4_pInt) &
|
||||||
|
rhoSgl(s,t) = max(state(g,ip,el)%p((t-1_pInt)*ns+s), 0.0_pReal)
|
||||||
|
forall (s = 1_pInt:ns, t = 5_pInt:8_pInt) &
|
||||||
|
rhoSgl(s,t) = state(g,ip,el)%p((t-1_pInt)*ns+s)
|
||||||
|
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)
|
||||||
|
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)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
!****************************************************************************
|
||||||
|
!*** dislocation remobilization (bauschinger effect)
|
||||||
|
|
||||||
|
deltaRhoRemobilization = 0.0_pReal
|
||||||
|
do t = 1_pInt,4_pInt
|
||||||
|
do s = 1_pInt,ns
|
||||||
|
if (rhoSgl(s,t+4_pInt) * v(s,t) < 0.0_pReal) then
|
||||||
|
deltaRhoRemobilization(s,t) = abs(rhoSgl(s,t+4_pInt))
|
||||||
|
rhoSgl(s,t) = rhoSgl(s,t) + abs(rhoSgl(s,t+4_pInt))
|
||||||
|
deltaRhoRemobilization(s,t+4_pInt) = - rhoSgl(s,t+4_pInt)
|
||||||
|
rhoSgl(s,t+4_pInt) = 0.0_pReal
|
||||||
|
endif
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
!****************************************************************************
|
||||||
|
!*** assign the rates of dislocation densities to my dotState
|
||||||
|
!*** if evolution rates lead to negative densities, a cutback is enforced
|
||||||
|
|
||||||
|
deltaRho = 0.0_pReal
|
||||||
|
deltaRho = deltaRhoRemobilization
|
||||||
|
|
||||||
|
constitutive_nonlocal_deltaState = reshape(deltaRho,(/10_pInt*ns/))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef _OPENMP
|
||||||
|
if (iand(debug_what(debug_constitutive),debug_levelBasic) /= 0_pInt &
|
||||||
|
.and. ((debug_e == el .and. debug_i == ip .and. debug_g == g)&
|
||||||
|
.or. .not. iand(debug_what(debug_constitutive),debug_levelSelective) /= 0_pInt )) then
|
||||||
|
write(6,'(a,/,8(12x,12(e12.5,1x),/))') '<< CONST >> dislocation remobilization', deltaRhoRemobilization(1:ns,1:8)
|
||||||
|
write(6,*)
|
||||||
|
endif
|
||||||
|
#endif
|
||||||
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
@ -1643,7 +1730,6 @@ integer(pInt) myInstance, & ! current
|
||||||
deads
|
deads
|
||||||
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) :: &
|
||||||
rhoDot, & ! density evolution
|
rhoDot, & ! density evolution
|
||||||
rhoDotRemobilization, & ! density evolution by remobilization
|
|
||||||
rhoDotMultiplication, & ! density evolution by multiplication
|
rhoDotMultiplication, & ! density evolution by multiplication
|
||||||
rhoDotFlux, & ! density evolution by flux
|
rhoDotFlux, & ! density evolution by flux
|
||||||
rhoDotSingle2DipoleGlide, & ! density evolution by dipole formation (by glide)
|
rhoDotSingle2DipoleGlide, & ! density evolution by dipole formation (by glide)
|
||||||
|
@ -1734,8 +1820,6 @@ endif
|
||||||
|
|
||||||
forall (t = 1_pInt:4_pInt) &
|
forall (t = 1_pInt:4_pInt) &
|
||||||
gdot(1_pInt:ns,t) = rhoSgl(1_pInt:ns,t) * constitutive_nonlocal_burgers(1:ns,myInstance) * v(1:ns,t)
|
gdot(1_pInt:ns,t) = rhoSgl(1_pInt:ns,t) * constitutive_nonlocal_burgers(1:ns,myInstance) * v(1:ns,t)
|
||||||
forall (s = 1_pInt:ns, t = 1_pInt:4_pInt, rhoSgl(s,t+4_pInt) * v(s,t) < 0.0_pReal) & ! contribution of used rho for changing sign of v
|
|
||||||
gdot(s,t) = gdot(s,t) + abs(rhoSgl(s,t+4)) * constitutive_nonlocal_burgers(s,myInstance) * v(s,t)
|
|
||||||
|
|
||||||
#ifndef _OPENMP
|
#ifndef _OPENMP
|
||||||
if (iand(debug_what(debug_constitutive),debug_levelBasic) /= 0_pInt &
|
if (iand(debug_what(debug_constitutive),debug_levelBasic) /= 0_pInt &
|
||||||
|
@ -1782,25 +1866,6 @@ dUpper(1:ns,1) = dUpper(1:ns,2) / ( 1.0_pReal - constitutive_nonlocal_nu(myInsta
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
!****************************************************************************
|
|
||||||
!*** dislocation remobilization (bauschinger effect)
|
|
||||||
|
|
||||||
rhoDotRemobilization = 0.0_pReal
|
|
||||||
if (timestep > 0.0_pReal) then
|
|
||||||
do t = 1_pInt,4_pInt
|
|
||||||
do s = 1_pInt,ns
|
|
||||||
if (rhoSgl(s,t+4_pInt) * v(s,t) < 0.0_pReal) then
|
|
||||||
rhoDotRemobilization(s,t) = abs(rhoSgl(s,t+4_pInt)) / timestep
|
|
||||||
rhoSgl(s,t) = rhoSgl(s,t) + abs(rhoSgl(s,t+4_pInt))
|
|
||||||
rhoDotRemobilization(s,t+4_pInt) = - rhoSgl(s,t+4_pInt) / timestep
|
|
||||||
rhoSgl(s,t+4_pInt) = 0.0_pReal
|
|
||||||
endif
|
|
||||||
enddo
|
|
||||||
enddo
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
!****************************************************************************
|
!****************************************************************************
|
||||||
!*** calculate dislocation multiplication
|
!*** calculate dislocation multiplication
|
||||||
|
|
||||||
|
@ -1880,10 +1945,6 @@ if (.not. phase_localPlasticity(material_phase(g,ip,el))) then
|
||||||
neighboring_rhoSgl(1_pInt:ns,t) = max(state(g,neighboring_ip,neighboring_el)%p((t-1_pInt)*ns+1_pInt:t*ns), 0.0_pReal)
|
neighboring_rhoSgl(1_pInt:ns,t) = max(state(g,neighboring_ip,neighboring_el)%p((t-1_pInt)*ns+1_pInt:t*ns), 0.0_pReal)
|
||||||
forall (t = 5_pInt:8_pInt) &
|
forall (t = 5_pInt:8_pInt) &
|
||||||
neighboring_rhoSgl(1_pInt:ns,t) = state(g,neighboring_ip,neighboring_el)%p((t-1_pInt)*ns+1_pInt:t*ns)
|
neighboring_rhoSgl(1_pInt:ns,t) = state(g,neighboring_ip,neighboring_el)%p((t-1_pInt)*ns+1_pInt:t*ns)
|
||||||
forall (s = 1_pInt:ns, t = 1_pInt:4_pInt, neighboring_rhoSgl(s,t+4_pInt)*neighboring_v(s,t) < 0.0_pReal) ! remobilization of deads at neighbor
|
|
||||||
neighboring_rhoSgl(s,t) = neighboring_rhoSgl(s,t) + abs(neighboring_rhoSgl(s,t+4_pInt))
|
|
||||||
neighboring_rhoSgl(s,t+4_pInt) = 0.0_pReal
|
|
||||||
endforall
|
|
||||||
normal_neighbor2me_defConf = math_det33(Favg) &
|
normal_neighbor2me_defConf = math_det33(Favg) &
|
||||||
* math_mul33x3(math_inv33(transpose(Favg)), mesh_ipAreaNormal(1:3,neighboring_n,neighboring_ip,neighboring_el)) ! calculate the normal of the interface in (average) deformed configuration (now pointing from my neighbor to me!!!)
|
* math_mul33x3(math_inv33(transpose(Favg)), mesh_ipAreaNormal(1:3,neighboring_n,neighboring_ip,neighboring_el)) ! calculate the normal of the interface in (average) deformed configuration (now pointing from my neighbor to me!!!)
|
||||||
normal_neighbor2me = math_mul33x3(transpose(neighboring_Fe), normal_neighbor2me_defConf) / math_det33(neighboring_Fe) ! interface normal in the lattice configuration of my neighbor
|
normal_neighbor2me = math_mul33x3(transpose(neighboring_Fe), normal_neighbor2me_defConf) / math_det33(neighboring_Fe) ! interface normal in the lattice configuration of my neighbor
|
||||||
|
@ -2020,7 +2081,6 @@ rhoDotThermalAnnihilation(1:ns,10) = 0.0_pReal
|
||||||
rhoDot = 0.0_pReal
|
rhoDot = 0.0_pReal
|
||||||
rhoDot = rhoDotFlux &
|
rhoDot = rhoDotFlux &
|
||||||
+ rhoDotMultiplication &
|
+ rhoDotMultiplication &
|
||||||
+ rhoDotRemobilization &
|
|
||||||
+ rhoDotSingle2DipoleGlide &
|
+ rhoDotSingle2DipoleGlide &
|
||||||
+ rhoDotAthermalAnnihilation &
|
+ rhoDotAthermalAnnihilation &
|
||||||
+ rhoDotThermalAnnihilation
|
+ rhoDotThermalAnnihilation
|
||||||
|
@ -2045,7 +2105,6 @@ endif
|
||||||
if (iand(debug_what(debug_constitutive),debug_levelBasic) /= 0_pInt &
|
if (iand(debug_what(debug_constitutive),debug_levelBasic) /= 0_pInt &
|
||||||
.and. ((debug_e == el .and. debug_i == ip .and. debug_g == g)&
|
.and. ((debug_e == el .and. debug_i == ip .and. debug_g == g)&
|
||||||
.or. .not. iand(debug_what(debug_constitutive),debug_levelSelective) /= 0_pInt )) then
|
.or. .not. iand(debug_what(debug_constitutive),debug_levelSelective) /= 0_pInt )) then
|
||||||
write(6,'(a,/,8(12x,12(e12.5,1x),/))') '<< CONST >> dislocation remobilization', rhoDotRemobilization(1:ns,1:8) * timestep
|
|
||||||
write(6,'(a,/,4(12x,12(e12.5,1x),/))') '<< CONST >> dislocation multiplication', rhoDotMultiplication(1:ns,1:4) * timestep
|
write(6,'(a,/,4(12x,12(e12.5,1x),/))') '<< CONST >> dislocation multiplication', rhoDotMultiplication(1:ns,1:4) * timestep
|
||||||
write(6,'(a,/,8(12x,12(e12.5,1x),/))') '<< CONST >> dislocation flux', rhoDotFlux(1:ns,1:8) * timestep
|
write(6,'(a,/,8(12x,12(e12.5,1x),/))') '<< CONST >> dislocation flux', rhoDotFlux(1:ns,1:8) * timestep
|
||||||
write(6,'(a,/,10(12x,12(e12.5,1x),/))') '<< CONST >> dipole formation by glide', rhoDotSingle2DipoleGlide * timestep
|
write(6,'(a,/,10(12x,12(e12.5,1x),/))') '<< CONST >> dipole formation by glide', rhoDotSingle2DipoleGlide * timestep
|
||||||
|
|
Loading…
Reference in New Issue