rearranged arguments of "constitutive_nonlocal_kinetics", got "tauTreshold" as argument, not complete state
don't call "constitutive_nonlocal_kinetics" twice for edges in case of nonSchmid behavior, but just call once and copy results from positive to negative edges
This commit is contained in:
parent
277972edbd
commit
f706ba3ff9
|
@ -1550,7 +1550,7 @@ endsubroutine
|
||||||
!*********************************************************************
|
!*********************************************************************
|
||||||
!* calculates kinetics *
|
!* calculates kinetics *
|
||||||
!*********************************************************************
|
!*********************************************************************
|
||||||
subroutine constitutive_nonlocal_kinetics(v, tau, c, Temperature, state, g, ip, el, dv_dtau)
|
subroutine constitutive_nonlocal_kinetics(v, dv_dtau, tau, tauThreshold, c, Temperature, g, ip, el)
|
||||||
|
|
||||||
use debug, only: debug_level, &
|
use debug, only: debug_level, &
|
||||||
debug_constitutive, &
|
debug_constitutive, &
|
||||||
|
@ -1566,56 +1566,52 @@ use material, only: material_phase, &
|
||||||
implicit none
|
implicit none
|
||||||
|
|
||||||
!*** input variables
|
!*** input variables
|
||||||
integer(pInt), intent(in) :: g, & ! current grain number
|
integer(pInt), intent(in) :: g, & !< current grain number
|
||||||
ip, & ! current integration point
|
ip, & !< current integration point
|
||||||
el, & ! current element number
|
el, & !< current element number
|
||||||
c ! dislocation character (1:edge, 2:screw)
|
c !< dislocation character (1:edge, 2:screw)
|
||||||
real(pReal), intent(in) :: Temperature ! temperature
|
real(pReal), intent(in) :: Temperature !< temperature
|
||||||
real(pReal), dimension(totalNslip(phase_plasticityInstance(material_phase(g,ip,el)))), &
|
real(pReal), dimension(totalNslip(phase_plasticityInstance(material_phase(g,ip,el)))), &
|
||||||
intent(in) :: tau ! resolved external shear stress (for bcc this already contains non Schmid effects)
|
intent(in) :: tau, & !< resolved external shear stress (for bcc this already contains non Schmid effects)
|
||||||
type(p_vec), intent(in) :: state ! microstructural state
|
tauThreshold !< threshold shear stress
|
||||||
|
|
||||||
!*** input/output variables
|
|
||||||
|
|
||||||
!*** output variables
|
!*** output variables
|
||||||
real(pReal), dimension(totalNslip(phase_plasticityInstance(material_phase(g,ip,el)))), &
|
real(pReal), dimension(totalNslip(phase_plasticityInstance(material_phase(g,ip,el)))), &
|
||||||
intent(out) :: v ! velocity
|
intent(out) :: v !< velocity
|
||||||
real(pReal), dimension(totalNslip(phase_plasticityInstance(material_phase(g,ip,el)))), &
|
real(pReal), dimension(totalNslip(phase_plasticityInstance(material_phase(g,ip,el)))), &
|
||||||
intent(out) :: dv_dtau ! velocity derivative with respect to resolved shear stress
|
intent(out) :: dv_dtau !< velocity derivative with respect to resolved shear stress
|
||||||
|
|
||||||
!*** local variables
|
!*** local variables
|
||||||
integer(pInt) :: instance, & ! current instance of this plasticity
|
integer(pInt) :: instance, & !< current instance of this plasticity
|
||||||
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(totalNslip(phase_plasticityInstance(material_phase(g,ip,el)))) :: &
|
real(pReal), dimension(totalNslip(phase_plasticityInstance(material_phase(g,ip,el)))) :: &
|
||||||
tauThreshold, & ! threshold shear stress
|
tauEff !< effective shear stress
|
||||||
tauEff ! effective shear stress
|
|
||||||
real(pReal) tauRel_P, &
|
real(pReal) tauRel_P, &
|
||||||
tauRel_S, &
|
tauRel_S, &
|
||||||
tPeierls, & ! waiting time in front of a peierls barriers
|
tPeierls, & !< waiting time in front of a peierls barriers
|
||||||
tSolidSolution, & ! waiting time in front of a solid solution obstacle
|
tSolidSolution, & !< waiting time in front of a solid solution obstacle
|
||||||
vViscous, & ! viscous glide velocity
|
vViscous, & !< viscous glide velocity
|
||||||
dtPeierls_dtau, & ! derivative with respect to resolved shear stress
|
dtPeierls_dtau, & !< derivative with respect to resolved shear stress
|
||||||
dtSolidSolution_dtau, & ! derivative with respect to resolved shear stress
|
dtSolidSolution_dtau, & !< derivative with respect to resolved shear stress
|
||||||
meanfreepath_S, & ! mean free travel distance for dislocations between two solid solution obstacles
|
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
|
meanfreepath_P, & !< mean free travel distance for dislocations between two Peierls barriers
|
||||||
jumpWidth_P, & ! depth of activated area
|
jumpWidth_P, & !< depth of activated area
|
||||||
jumpWidth_S, & ! depth of activated area
|
jumpWidth_S, & !< depth of activated area
|
||||||
activationLength_P, & ! length of activated dislocation line
|
activationLength_P, & !< length of activated dislocation line
|
||||||
activationLength_S, & ! length of activated dislocation line
|
activationLength_S, & !< length of activated dislocation line
|
||||||
activationVolume_P, & ! volume that needs to be activated to overcome barrier
|
activationVolume_P, & !< volume that needs to be activated to overcome barrier
|
||||||
activationVolume_S, & ! 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_P, & !< energy that is needed to overcome barrier
|
||||||
activationEnergy_S, & ! energy that is needed to overcome barrier
|
activationEnergy_S, & !< energy that is needed to overcome barrier
|
||||||
criticalStress_P, & ! maximum obstacle strength
|
criticalStress_P, & !< maximum obstacle strength
|
||||||
criticalStress_S, & ! maximum obstacle strength
|
criticalStress_S, & !< maximum obstacle strength
|
||||||
mobility ! dislocation mobility
|
mobility !< dislocation mobility
|
||||||
|
|
||||||
|
|
||||||
instance = phase_plasticityInstance(material_phase(g,ip,el))
|
instance = phase_plasticityInstance(material_phase(g,ip,el))
|
||||||
ns = totalNslip(instance)
|
ns = totalNslip(instance)
|
||||||
|
|
||||||
tauThreshold = state%p(iTauF(1:ns,instance))
|
|
||||||
tauEff = abs(tau) - tauThreshold
|
tauEff = abs(tau) - tauThreshold
|
||||||
|
|
||||||
v = 0.0_pReal
|
v = 0.0_pReal
|
||||||
|
@ -1739,42 +1735,43 @@ use mesh, only: mesh_ipVolume
|
||||||
implicit none
|
implicit none
|
||||||
|
|
||||||
!*** input variables
|
!*** input variables
|
||||||
integer(pInt), intent(in) :: g, & ! current grain number
|
integer(pInt), intent(in) :: g, & !< current grain number
|
||||||
ip, & ! current integration point
|
ip, & !< current integration point
|
||||||
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 ! 2nd Piola-Kirchhoff stress in Mandel notation
|
real(pReal), dimension(6), intent(in) :: Tstar_v !< 2nd Piola-Kirchhoff stress in Mandel notation
|
||||||
|
|
||||||
!*** input/output variables
|
!*** input/output variables
|
||||||
type(p_vec), intent(inout) :: state ! microstructural state
|
type(p_vec), intent(inout) :: state !< microstructural state
|
||||||
|
|
||||||
!*** output variables
|
!*** output variables
|
||||||
real(pReal), dimension(3,3), intent(out) :: Lp ! plastic velocity gradient
|
real(pReal), dimension(3,3), intent(out) :: Lp !< plastic velocity gradient
|
||||||
real(pReal), dimension(9,9), intent(out) :: dLp_dTstar99 ! derivative of Lp with respect to Tstar (9x9 matrix)
|
real(pReal), dimension(9,9), intent(out) :: dLp_dTstar99 !< derivative of Lp with respect to Tstar (9x9 matrix)
|
||||||
|
|
||||||
!*** local variables
|
!*** local variables
|
||||||
integer(pInt) myInstance, & ! current instance of this plasticity
|
integer(pInt) myInstance, & !< current instance of this plasticity
|
||||||
myStructure, & ! current lattice structure
|
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
|
||||||
c, &
|
c, &
|
||||||
i, &
|
i, &
|
||||||
j, &
|
j, &
|
||||||
k, &
|
k, &
|
||||||
l, &
|
l, &
|
||||||
t, & ! dislocation type
|
t, & !< dislocation type
|
||||||
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
|
sLattice !< index of my current slip system according to lattice order
|
||||||
real(pReal), dimension(3,3,3,3) :: dLp_dTstar3333 ! derivative of Lp with respect to Tstar (3x3x3x3 matrix)
|
real(pReal), dimension(3,3,3,3) :: dLp_dTstar3333 !< derivative of Lp with respect to Tstar (3x3x3x3 matrix)
|
||||||
real(pReal), dimension(totalNslip(phase_plasticityInstance(material_phase(g,ip,el))),8) :: &
|
real(pReal), dimension(totalNslip(phase_plasticityInstance(material_phase(g,ip,el))),8) :: &
|
||||||
rhoSgl ! single dislocation densities (including blocked)
|
rhoSgl !< single dislocation densities (including blocked)
|
||||||
real(pReal), dimension(totalNslip(phase_plasticityInstance(material_phase(g,ip,el))),4) :: &
|
real(pReal), dimension(totalNslip(phase_plasticityInstance(material_phase(g,ip,el))),4) :: &
|
||||||
v, & ! velocity
|
v, & !< velocity
|
||||||
tau, & ! resolved shear stress including non Schmid and backstress terms
|
tau, & !< resolved shear stress including non Schmid and backstress terms
|
||||||
dgdot_dtau, & ! derivative of the shear rate with respect to the shear stress
|
dgdot_dtau, & !< derivative of the shear rate with respect to the shear stress
|
||||||
dv_dtau ! velocity derivative with respect to the shear stress
|
dv_dtau !< velocity derivative with respect to the shear stress
|
||||||
real(pReal), dimension(totalNslip(phase_plasticityInstance(material_phase(g,ip,el)))) :: &
|
real(pReal), dimension(totalNslip(phase_plasticityInstance(material_phase(g,ip,el)))) :: &
|
||||||
gdotTotal, & ! shear rate
|
gdotTotal, & !< shear rate
|
||||||
tauBack, & ! back stress from dislocation gradients on same slip system
|
tauBack, & !< back stress from dislocation gradients on same slip system
|
||||||
|
tauThreshold, & !< threshold shear stress
|
||||||
deadZoneSize
|
deadZoneSize
|
||||||
|
|
||||||
|
|
||||||
|
@ -1800,9 +1797,10 @@ where (abs(rhoSgl) * mesh_ipVolume(ip,el) ** 0.667_pReal < significantN(myInstan
|
||||||
rhoSgl = 0.0_pReal
|
rhoSgl = 0.0_pReal
|
||||||
|
|
||||||
tauBack = state%p(iTauB(1:ns,myInstance))
|
tauBack = state%p(iTauB(1:ns,myInstance))
|
||||||
|
tauThreshold = state%p(iTauF(1:ns,myInstance))
|
||||||
|
|
||||||
|
|
||||||
!*** get effective resolved shear stress
|
!*** get resolved shear stress
|
||||||
!*** for screws possible non-schmid contributions are also taken into account
|
!*** for screws possible non-schmid contributions are also taken into account
|
||||||
|
|
||||||
do s = 1_pInt,ns
|
do s = 1_pInt,ns
|
||||||
|
@ -1816,25 +1814,30 @@ do s = 1_pInt,ns
|
||||||
tau(s,4) = math_mul33xx33(math_Mandel6to33(Tstar_v), nonSchmidProjection(1:3,1:3,4,s,myInstance))
|
tau(s,4) = math_mul33xx33(math_Mandel6to33(Tstar_v), nonSchmidProjection(1:3,1:3,4,s,myInstance))
|
||||||
endif
|
endif
|
||||||
forall (t = 1_pInt:4_pInt) &
|
forall (t = 1_pInt:4_pInt) &
|
||||||
tau(s,t) = tau(s,t) + tauBack(s) ! add backstress
|
tau(s,t) = tau(s,t) + tauBack(s) ! add backstress
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
|
|
||||||
!*** get dislocation velocity and its tangent and store the velocity in the state array
|
!*** get dislocation velocity and its tangent and store the velocity in the state array
|
||||||
|
|
||||||
if (myStructure == 1_pInt .and. lattice_NnonSchmid(myStructure) == 0_pInt) then ! for fcc all velcities are equal
|
! edges
|
||||||
call constitutive_nonlocal_kinetics(v(1:ns,1), tau(1:ns,1), 1_pInt, Temperature, state, &
|
call constitutive_nonlocal_kinetics(v(1:ns,1), dv_dtau(1:ns,1), tau(1:ns,1), tauThreshold(1:ns), &
|
||||||
g, ip, el, dv_dtau(1:ns,1))
|
1_pInt, Temperature, g, ip, el)
|
||||||
do t = 1_pInt,4_pInt
|
v(1:ns,2) = v(1:ns,1)
|
||||||
|
dv_dtau(1:ns,2) = dv_dtau(1:ns,1)
|
||||||
|
state%p(iV(1:ns,2,myInstance)) = v(1:ns,1)
|
||||||
|
|
||||||
|
!screws
|
||||||
|
if (lattice_NnonSchmid(myStructure) == 0_pInt) then ! no non-Schmid contributions
|
||||||
|
forall(t = 3_pInt:4_pInt)
|
||||||
v(1:ns,t) = v(1:ns,1)
|
v(1:ns,t) = v(1:ns,1)
|
||||||
dv_dtau(1:ns,t) = dv_dtau(1:ns,1)
|
dv_dtau(1:ns,t) = dv_dtau(1:ns,1)
|
||||||
state%p(iV(1:ns,t,myInstance)) = v(1:ns,1)
|
state%p(iV(1:ns,t,myInstance)) = v(1:ns,1)
|
||||||
enddo
|
endforall
|
||||||
else ! for all other lattice structures the velocities may vary with character and sign
|
else ! take non-Schmid contributions into account
|
||||||
do t = 1_pInt,4_pInt
|
do t = 3_pInt,4_pInt
|
||||||
c = (t-1_pInt)/2_pInt+1_pInt
|
call constitutive_nonlocal_kinetics(v(1:ns,t), dv_dtau(1:ns,t), tau(1:ns,t), tauThreshold(1:ns), &
|
||||||
call constitutive_nonlocal_kinetics(v(1:ns,t), tau(1:ns,t), c, Temperature, state, &
|
2_pInt , Temperature, g, ip, el)
|
||||||
g, ip, el, dv_dtau(1:ns,t))
|
|
||||||
state%p(iV(1:ns,t,myInstance)) = v(1:ns,t)
|
state%p(iV(1:ns,t,myInstance)) = v(1:ns,t)
|
||||||
enddo
|
enddo
|
||||||
endif
|
endif
|
||||||
|
|
Loading…
Reference in New Issue