simplifications
This commit is contained in:
parent
15d1789a19
commit
aa5d3bf9a3
|
@ -178,7 +178,7 @@ subroutine plastic_kinehardening_init
|
||||||
if (phase_plasticity(p) /= PLASTICITY_KINEHARDENING_ID) cycle
|
if (phase_plasticity(p) /= PLASTICITY_KINEHARDENING_ID) cycle
|
||||||
associate(prm => param(phase_plasticityInstance(p)), &
|
associate(prm => param(phase_plasticityInstance(p)), &
|
||||||
dot => dotState(phase_plasticityInstance(p)), &
|
dot => dotState(phase_plasticityInstance(p)), &
|
||||||
delta => deltaState(phase_plasticityInstance(p)), &
|
dlt => deltaState(phase_plasticityInstance(p)), &
|
||||||
stt => state(phase_plasticityInstance(p)),&
|
stt => state(phase_plasticityInstance(p)),&
|
||||||
config => config_phase(p))
|
config => config_phase(p))
|
||||||
|
|
||||||
|
@ -196,8 +196,8 @@ subroutine plastic_kinehardening_init
|
||||||
prm%aTolShear = config%getFloat('atol_shear', defaultVal=1.0e-6_pReal)
|
prm%aTolShear = config%getFloat('atol_shear', defaultVal=1.0e-6_pReal)
|
||||||
|
|
||||||
! sanity checks
|
! sanity checks
|
||||||
if (prm%aTolResistance <= 0.0_pReal) extmsg = trim(extmsg)//'aTolresistance '
|
if (prm%aTolResistance <= 0.0_pReal) extmsg = trim(extmsg)//' aTolresistance'
|
||||||
if (prm%aTolShear <= 0.0_pReal) extmsg = trim(extmsg)//'aTolShear '
|
if (prm%aTolShear <= 0.0_pReal) extmsg = trim(extmsg)//' aTolShear'
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! slip related parameters
|
! slip related parameters
|
||||||
|
@ -227,17 +227,19 @@ subroutine plastic_kinehardening_init
|
||||||
prm%theta0_b = config%getFloats('theta0_b', requiredShape=shape(prm%Nslip))
|
prm%theta0_b = config%getFloats('theta0_b', requiredShape=shape(prm%Nslip))
|
||||||
prm%theta1_b = config%getFloats('theta1_b', requiredShape=shape(prm%Nslip))
|
prm%theta1_b = config%getFloats('theta1_b', requiredShape=shape(prm%Nslip))
|
||||||
|
|
||||||
|
prm%gdot0 = config%getFloat('gdot0')
|
||||||
|
prm%n_slip = config%getFloat('n_slip')
|
||||||
|
|
||||||
! expand: family => system
|
! expand: family => system
|
||||||
prm%crss0 = math_expand(prm%crss0, prm%Nslip)
|
prm%crss0 = math_expand(prm%crss0, prm%Nslip)
|
||||||
prm%tau1 = math_expand(prm%tau1,prm%Nslip)
|
prm%tau1 = math_expand(prm%tau1, prm%Nslip)
|
||||||
prm%tau1_b = math_expand(prm%tau1_b, prm%Nslip)
|
prm%tau1_b = math_expand(prm%tau1_b, prm%Nslip)
|
||||||
prm%theta0 = math_expand(prm%theta0,prm%Nslip)
|
prm%theta0 = math_expand(prm%theta0, prm%Nslip)
|
||||||
prm%theta1 = math_expand(prm%theta1,prm%Nslip)
|
prm%theta1 = math_expand(prm%theta1, prm%Nslip)
|
||||||
prm%theta0_b = math_expand(prm%theta0_b,prm%Nslip)
|
prm%theta0_b = math_expand(prm%theta0_b,prm%Nslip)
|
||||||
prm%theta1_b = math_expand(prm%theta1_b,prm%Nslip)
|
prm%theta1_b = math_expand(prm%theta1_b,prm%Nslip)
|
||||||
|
|
||||||
prm%gdot0 = config%getFloat('gdot0')
|
|
||||||
prm%n_slip = config%getFloat('n_slip')
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! sanity checks
|
! sanity checks
|
||||||
|
@ -260,31 +262,25 @@ subroutine plastic_kinehardening_init
|
||||||
allocate(prm%outputID(0))
|
allocate(prm%outputID(0))
|
||||||
do i=1_pInt, size(outputs)
|
do i=1_pInt, size(outputs)
|
||||||
outputID = undefined_ID
|
outputID = undefined_ID
|
||||||
|
outputSize = prm%totalNslip
|
||||||
select case(outputs(i))
|
select case(outputs(i))
|
||||||
|
|
||||||
case ('resistance')
|
case ('resistance')
|
||||||
outputID = merge(crss_ID,undefined_ID,prm%totalNslip>0_pInt)
|
outputID = merge(crss_ID,undefined_ID,prm%totalNslip>0_pInt)
|
||||||
outputSize = prm%totalNslip
|
|
||||||
case ('accumulatedshear')
|
case ('accumulatedshear')
|
||||||
outputID = merge(accshear_ID,undefined_ID,prm%totalNslip>0_pInt)
|
outputID = merge(accshear_ID,undefined_ID,prm%totalNslip>0_pInt)
|
||||||
outputSize = prm%totalNslip
|
|
||||||
case ('shearrate')
|
case ('shearrate')
|
||||||
outputID = merge(shearrate_ID,undefined_ID,prm%totalNslip>0_pInt)
|
outputID = merge(shearrate_ID,undefined_ID,prm%totalNslip>0_pInt)
|
||||||
outputSize = prm%totalNslip
|
|
||||||
case ('resolvedstress')
|
case ('resolvedstress')
|
||||||
outputID = merge(resolvedstress_ID,undefined_ID,prm%totalNslip>0_pInt)
|
outputID = merge(resolvedstress_ID,undefined_ID,prm%totalNslip>0_pInt)
|
||||||
outputSize = prm%totalNslip
|
|
||||||
case ('backstress')
|
case ('backstress')
|
||||||
outputID = merge(crss_back_ID,undefined_ID,prm%totalNslip>0_pInt)
|
outputID = merge(crss_back_ID,undefined_ID,prm%totalNslip>0_pInt)
|
||||||
outputSize = prm%totalNslip
|
|
||||||
case ('sense')
|
case ('sense')
|
||||||
outputID = merge(sense_ID,undefined_ID,prm%totalNslip>0_pInt)
|
outputID = merge(sense_ID,undefined_ID,prm%totalNslip>0_pInt)
|
||||||
outputSize = prm%totalNslip
|
|
||||||
case ('chi0')
|
case ('chi0')
|
||||||
outputID = merge(chi0_ID,undefined_ID,prm%totalNslip>0_pInt)
|
outputID = merge(chi0_ID,undefined_ID,prm%totalNslip>0_pInt)
|
||||||
outputSize = prm%totalNslip
|
|
||||||
case ('gamma0')
|
case ('gamma0')
|
||||||
outputID = merge(gamma0_ID,undefined_ID,prm%totalNslip>0_pInt)
|
outputID = merge(gamma0_ID,undefined_ID,prm%totalNslip>0_pInt)
|
||||||
outputSize = prm%totalNslip
|
|
||||||
|
|
||||||
end select
|
end select
|
||||||
|
|
||||||
|
@ -336,17 +332,17 @@ subroutine plastic_kinehardening_init
|
||||||
startIndex = endIndex + 1_pInt
|
startIndex = endIndex + 1_pInt
|
||||||
endIndex = endIndex + prm%totalNslip
|
endIndex = endIndex + prm%totalNslip
|
||||||
stt%sense => plasticState(p)%state (startIndex :endIndex ,:)
|
stt%sense => plasticState(p)%state (startIndex :endIndex ,:)
|
||||||
delta%sense => plasticState(p)%deltaState(startIndex-o:endIndex-o,:)
|
dlt%sense => plasticState(p)%deltaState(startIndex-o:endIndex-o,:)
|
||||||
|
|
||||||
startIndex = endIndex + 1_pInt
|
startIndex = endIndex + 1_pInt
|
||||||
endIndex = endIndex + prm%totalNslip
|
endIndex = endIndex + prm%totalNslip
|
||||||
stt%chi0 => plasticState(p)%state (startIndex :endIndex ,:)
|
stt%chi0 => plasticState(p)%state (startIndex :endIndex ,:)
|
||||||
delta%chi0 => plasticState(p)%deltaState(startIndex-o:endIndex-o,:)
|
dlt%chi0 => plasticState(p)%deltaState(startIndex-o:endIndex-o,:)
|
||||||
|
|
||||||
startIndex = endIndex + 1_pInt
|
startIndex = endIndex + 1_pInt
|
||||||
endIndex = endIndex + prm%totalNslip
|
endIndex = endIndex + prm%totalNslip
|
||||||
stt%gamma0 => plasticState(p)%state (startIndex :endIndex ,:)
|
stt%gamma0 => plasticState(p)%state (startIndex :endIndex ,:)
|
||||||
delta%gamma0 => plasticState(p)%deltaState(startIndex-o:endIndex-o,:)
|
dlt%gamma0 => plasticState(p)%deltaState(startIndex-o:endIndex-o,:)
|
||||||
|
|
||||||
plasticState(p)%state0 = plasticState(p)%state ! ToDo: this could be done centrally
|
plasticState(p)%state0 = plasticState(p)%state ! ToDo: this could be done centrally
|
||||||
|
|
||||||
|
@ -425,7 +421,7 @@ subroutine plastic_kinehardening_deltaState(Mp,instance,of)
|
||||||
gdot_pos,gdot_neg, &
|
gdot_pos,gdot_neg, &
|
||||||
sense
|
sense
|
||||||
|
|
||||||
associate(prm => param(instance), stt => state(instance), del => deltaState(instance))
|
associate(prm => param(instance), stt => state(instance), dlt => deltaState(instance))
|
||||||
|
|
||||||
call kinetics(Mp,instance,of,gdot_pos,gdot_neg)
|
call kinetics(Mp,instance,of,gdot_pos,gdot_neg)
|
||||||
sense = merge(state(instance)%sense(:,of), & ! keep existing...
|
sense = merge(state(instance)%sense(:,of), & ! keep existing...
|
||||||
|
@ -444,13 +440,13 @@ subroutine plastic_kinehardening_deltaState(Mp,instance,of)
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! switch in sense of shear?
|
! switch in sense of shear?
|
||||||
where(dNeq(sense,stt%sense(:,of),0.1_pReal))
|
where(dNeq(sense,stt%sense(:,of),0.1_pReal))
|
||||||
del%sense (:,of) = sense - stt%sense(:,of) ! switch sense
|
dlt%sense (:,of) = sense - stt%sense(:,of) ! switch sense
|
||||||
del%chi0 (:,of) = abs(stt%crss_back(:,of)) - stt%chi0(:,of) ! remember current backstress magnitude
|
dlt%chi0 (:,of) = abs(stt%crss_back(:,of)) - stt%chi0(:,of) ! remember current backstress magnitude
|
||||||
del%gamma0(:,of) = stt%accshear(:,of) - stt%gamma0(:,of) ! remember current accumulated shear
|
dlt%gamma0(:,of) = stt%accshear(:,of) - stt%gamma0(:,of) ! remember current accumulated shear
|
||||||
else where
|
else where
|
||||||
del%sense (:,of) = 0.0_pReal
|
dlt%sense (:,of) = 0.0_pReal
|
||||||
del%chi0 (:,of) = 0.0_pReal
|
dlt%chi0 (:,of) = 0.0_pReal
|
||||||
del%gamma0(:,of) = 0.0_pReal
|
dlt%gamma0(:,of) = 0.0_pReal
|
||||||
end where
|
end where
|
||||||
|
|
||||||
end associate
|
end associate
|
||||||
|
@ -470,7 +466,6 @@ subroutine plastic_kinehardening_dotState(Mp,instance,of)
|
||||||
instance, &
|
instance, &
|
||||||
of
|
of
|
||||||
|
|
||||||
|
|
||||||
integer(pInt) :: &
|
integer(pInt) :: &
|
||||||
i
|
i
|
||||||
real(pReal), dimension(param(instance)%totalNslip) :: &
|
real(pReal), dimension(param(instance)%totalNslip) :: &
|
||||||
|
@ -478,8 +473,7 @@ subroutine plastic_kinehardening_dotState(Mp,instance,of)
|
||||||
real(pReal) :: &
|
real(pReal) :: &
|
||||||
sumGamma
|
sumGamma
|
||||||
|
|
||||||
|
associate(prm => param(instance), stt => state(instance), dot => dotState(instance))
|
||||||
associate( prm => param(instance), stt => state(instance), dot => dotState(instance))
|
|
||||||
|
|
||||||
call kinetics(Mp,instance,of,gdot_pos,gdot_neg)
|
call kinetics(Mp,instance,of,gdot_pos,gdot_neg)
|
||||||
dot%accshear(:,of) = abs(gdot_pos+gdot_neg)
|
dot%accshear(:,of) = abs(gdot_pos+gdot_neg)
|
||||||
|
@ -489,7 +483,7 @@ subroutine plastic_kinehardening_dotState(Mp,instance,of)
|
||||||
dot%crss(i,of) = dot_product(prm%interaction_SlipSlip(i,:),dot%accshear(:,of)) &
|
dot%crss(i,of) = dot_product(prm%interaction_SlipSlip(i,:),dot%accshear(:,of)) &
|
||||||
* ( prm%theta1(i) &
|
* ( prm%theta1(i) &
|
||||||
+ (prm%theta0(i) - prm%theta1(i) + prm%theta0(i)*prm%theta1(i)*sumGamma/prm%tau1(i)) &
|
+ (prm%theta0(i) - prm%theta1(i) + prm%theta0(i)*prm%theta1(i)*sumGamma/prm%tau1(i)) &
|
||||||
*exp(-sumGamma*prm%theta0(i)/prm%tau1(i)) &
|
* exp(-sumGamma*prm%theta0(i)/prm%tau1(i)) &
|
||||||
)
|
)
|
||||||
enddo
|
enddo
|
||||||
dot%crss_back(:,of) = stt%sense(:,of)*dot%accshear(:,of) * &
|
dot%crss_back(:,of) = stt%sense(:,of)*dot%accshear(:,of) * &
|
||||||
|
@ -534,41 +528,30 @@ function plastic_kinehardening_postResults(Mp,instance,of) result(postResults)
|
||||||
|
|
||||||
outputsLoop: do o = 1_pInt,size(prm%outputID)
|
outputsLoop: do o = 1_pInt,size(prm%outputID)
|
||||||
select case(prm%outputID(o))
|
select case(prm%outputID(o))
|
||||||
|
|
||||||
case (crss_ID)
|
case (crss_ID)
|
||||||
postResults(c+1_pInt:c+prm%totalNslip) = stt%crss(:,of)
|
postResults(c+1_pInt:c+prm%totalNslip) = stt%crss(:,of)
|
||||||
c = c + prm%totalNslip
|
|
||||||
|
|
||||||
case(crss_back_ID)
|
case(crss_back_ID)
|
||||||
postResults(c+1_pInt:c+prm%totalNslip) = stt%crss_back(:,of)
|
postResults(c+1_pInt:c+prm%totalNslip) = stt%crss_back(:,of)
|
||||||
c = c + prm%totalNslip
|
|
||||||
|
|
||||||
case (sense_ID)
|
case (sense_ID)
|
||||||
postResults(c+1_pInt:c+prm%totalNslip) = stt%sense(:,of)
|
postResults(c+1_pInt:c+prm%totalNslip) = stt%sense(:,of)
|
||||||
c = c + prm%totalNslip
|
|
||||||
|
|
||||||
case (chi0_ID)
|
case (chi0_ID)
|
||||||
postResults(c+1_pInt:c+prm%totalNslip) = stt%chi0(:,of)
|
postResults(c+1_pInt:c+prm%totalNslip) = stt%chi0(:,of)
|
||||||
c = c + prm%totalNslip
|
|
||||||
|
|
||||||
case (gamma0_ID)
|
case (gamma0_ID)
|
||||||
postResults(c+1_pInt:c+prm%totalNslip) = stt%gamma0(:,of)
|
postResults(c+1_pInt:c+prm%totalNslip) = stt%gamma0(:,of)
|
||||||
c = c + prm%totalNslip
|
|
||||||
|
|
||||||
case (accshear_ID)
|
case (accshear_ID)
|
||||||
postResults(c+1_pInt:c+prm%totalNslip) = stt%accshear(:,of)
|
postResults(c+1_pInt:c+prm%totalNslip) = stt%accshear(:,of)
|
||||||
c = c + prm%totalNslip
|
|
||||||
|
|
||||||
case (shearrate_ID)
|
case (shearrate_ID)
|
||||||
postResults(c+1_pInt:c+prm%totalNslip) = gdot_pos+gdot_neg
|
postResults(c+1_pInt:c+prm%totalNslip) = gdot_pos+gdot_neg
|
||||||
c = c + prm%totalNslip
|
|
||||||
|
|
||||||
case (resolvedstress_ID)
|
case (resolvedstress_ID)
|
||||||
do i = 1_pInt, prm%totalNslip
|
do i = 1_pInt, prm%totalNslip
|
||||||
postResults(c+i) = math_mul33xx33(Mp,prm%Schmid_slip(1:3,1:3,i))
|
postResults(c+i) = math_mul33xx33(Mp,prm%Schmid_slip(1:3,1:3,i))
|
||||||
enddo
|
enddo
|
||||||
c = c + prm%totalNslip
|
|
||||||
|
|
||||||
end select
|
end select
|
||||||
|
|
||||||
|
c = c + prm%totalNslip
|
||||||
|
|
||||||
enddo outputsLoop
|
enddo outputsLoop
|
||||||
|
|
||||||
end associate
|
end associate
|
||||||
|
|
Loading…
Reference in New Issue