From 91a2748131bd86baf7332bcd14e818226eac77dd Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Tue, 4 Dec 2018 19:35:29 +0100 Subject: [PATCH] simplifying --- src/math.f90 | 2 +- src/plastic_disloUCLA.f90 | 108 ++++++++++++++++---------------------- 2 files changed, 45 insertions(+), 65 deletions(-) diff --git a/src/math.f90 b/src/math.f90 index 440ee5303..75d7f4490 100644 --- a/src/math.f90 +++ b/src/math.f90 @@ -2617,7 +2617,7 @@ end function math_rotate_forward3333 !> @brief limits a scalar value to a certain range (either one or two sided) ! Will return NaN if left > right !-------------------------------------------------------------------------------------------------- -real(pReal) pure function math_clip(a, left, right) +real(pReal) pure elemental function math_clip(a, left, right) use, intrinsic :: & IEEE_arithmetic diff --git a/src/plastic_disloUCLA.f90 b/src/plastic_disloUCLA.f90 index a6ff87323..d3385d755 100644 --- a/src/plastic_disloUCLA.f90 +++ b/src/plastic_disloUCLA.f90 @@ -26,10 +26,7 @@ module plastic_disloUCLA plastic_disloUCLA_totalNslip !< total number of active slip systems for each instance real(pReal), dimension(:), allocatable, private :: & - plastic_disloUCLA_CAtomicVolume, & !< atomic volume in Bugers vector unit - plastic_disloUCLA_Qsd, & !< activation energy for dislocation climb - plastic_disloUCLA_CEdgeDipMinDistance, & !< - plastic_disloUCLA_dipoleFormationFactor !< scaling factor for dipole formation: 0: off, 1: on. other values not useful + plastic_disloUCLA_Qsd !< activation energy for dislocation climb real(pReal), dimension(:,:,:), allocatable, private :: & @@ -200,13 +197,8 @@ material_allocatePlasticState allocate(plastic_disloUCLA_totalNslip(maxNinstance), source=0_pInt) - - allocate(plastic_disloUCLA_CAtomicVolume(maxNinstance), source=0.0_pReal) - allocate(plastic_disloUCLA_CEdgeDipMinDistance(maxNinstance), source=0.0_pReal) - allocate(plastic_disloUCLA_Qsd(maxNinstance), source=0.0_pReal) - allocate(plastic_disloUCLA_dipoleFormationFactor(maxNinstance), source=1.0_pReal) !should be on by default allocate(param(maxNinstance)) allocate(state(maxNinstance)) @@ -267,9 +259,11 @@ do p = 1_pInt, size(phase_plasticityInstance) prm%D0 = config_phase(p)%getFloat('d0') plastic_disloUCLA_Qsd(phase_plasticityInstance(p)) = config_phase(p)%getFloat('qsd') - plastic_disloUCLA_CEdgeDipMinDistance(phase_plasticityInstance(p)) = config_phase(p)%getFloat('cedgedipmindistance') - plastic_disloUCLA_CAtomicVolume(phase_plasticityInstance(p)) = config_phase(p)%getFloat('catomicvolume') - plastic_disloUCLA_dipoleFormationFactor(phase_plasticityInstance(p)) = config_phase(p)%getFloat('dipoleformationfactor') + + + prm%dipoleformation = config_phase(p)%getFloat('dipoleformationfactor') > 0.0_pReal !should be on by default + prm%atomicVolume = config_phase(p)%getFloat('catomicvolume') * prm%burgers**3.0_pReal + prm%minDipDistance = config_phase(p)%getFloat('cedgedipmindistance') * prm%burgers ! expand: family => system prm%rho0 = math_expand(prm%rho0, prm%Nslip) @@ -285,15 +279,17 @@ do p = 1_pInt, size(phase_plasticityInstance) prm%v0 = math_expand(prm%v0, prm%Nslip) prm%B = math_expand(prm%B, prm%Nslip) prm%clambda = math_expand(prm%clambda, prm%Nslip) + prm%atomicVolume = math_expand(prm%atomicVolume, prm%Nslip) + prm%minDipDistance = math_expand(prm%minDipDistance, prm%Nslip) instance = phase_plasticityInstance(p) plastic_disloUCLA_totalNslip(instance) = prm%totalNslip !if (plastic_disloUCLA_CAtomicVolume(instance) <= 0.0_pReal) & ! call IO_error(211_pInt,el=instance,ext_msg='cAtomicVolume ('//PLASTICITY_DISLOUCLA_label//')') - if (prm%D0 <= 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='D0 ('//PLASTICITY_DISLOUCLA_label//')') - if (plastic_disloUCLA_Qsd(instance) <= 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='Qsd ('//PLASTICITY_DISLOUCLA_label//')') + ! if (prm%D0 <= 0.0_pReal) & + ! call IO_error(211_pInt,el=instance,ext_msg='D0 ('//PLASTICITY_DISLOUCLA_label//')') + ! if (plastic_disloUCLA_Qsd(instance) <= 0.0_pReal) & + ! call IO_error(211_pInt,el=instance,ext_msg='Qsd ('//PLASTICITY_DISLOUCLA_label//')') ! if (plastic_disloUCLA_aTolRho(instance) <= 0.0_pReal) & ! call IO_error(211_pInt,el=instance,ext_msg='aTolRho ('//PLASTICITY_DISLOUCLA_label//')') @@ -564,82 +560,70 @@ subroutine plastic_disloUCLA_dotState(Mp,Temperature,instance,of) temperature !< temperature at integration point integer(pInt), intent(in) :: & instance, of - integer(pInt) :: ns,j + integer(pInt) :: j real(pReal) :: & - EdgeDipMinDistance,& - AtomicVolume,& VacancyDiffusion,& - EdgeDipDistance, & DotRhoEdgeDipAnnihilation, & DotRhoEdgeEdgeAnnihilation, & - ClimbVelocity, & - DotRhoEdgeDipClimb, & - DotRhoDipFormation + DotRhoEdgeDipClimb real(pReal), dimension(plastic_disloUCLA_totalNslip(instance)) :: & gdot_slip_pos, gdot_slip_neg,& tau_slip_pos,& tau_slip_neg, & - dgdot_dtauslip_neg,dgdot_dtauslip_pos + dgdot_dtauslip_neg,dgdot_dtauslip_pos,DotRhoDipFormation, ClimbVelocity, EdgeDipDistance - ns = plastic_disloUCLA_totalNslip(instance) - dotState(instance)%whole(:,of) = 0.0_pReal - associate(prm => param(instance), stt => state(instance),dot => dotState(instance), mse => microstructure(instance)) - !* Dislocation density evolution + + + associate(prm => param(instance), stt => state(instance),dot => dotState(instance), mse => microstructure(instance)) + call kinetics(Mp,Temperature,instance,of, & gdot_slip_pos,dgdot_dtauslip_pos,tau_slip_pos,gdot_slip_neg,dgdot_dtauslip_neg,tau_slip_neg) - dotState(instance)%accshear_slip(:,of) = (gdot_slip_pos+gdot_slip_neg)*0.5_pReal + + dot%whole(:,of) = 0.0_pReal + dot%accshear_slip(:,of) = (gdot_slip_pos+gdot_slip_neg)*0.5_pReal -do j = 1_pInt, prm%totalNslip - EdgeDipMinDistance = plastic_disloUCLA_CEdgeDipMinDistance(instance)*prm%burgers(j) - AtomicVolume = plastic_disloUCLA_CAtomicVolume(instance)*prm%burgers(j)**(3.0_pReal) + do j = 1_pInt, prm%totalNslip !* Dipole formation - if (dEq0(tau_slip_pos(j))) then - DotRhoDipFormation = 0.0_pReal + if (dEq0(tau_slip_pos(j)) .or. (.not. prm%dipoleformation)) then + DotRhoDipFormation(j) = 0.0_pReal + EdgeDipDistance(j)=mse%mfp(j,of) !ToDo MD@FR: correct? was not handled properly before else - EdgeDipDistance = & + EdgeDipDistance(j) = & (3.0_pReal*prm%mu*prm%burgers(j))/& (16.0_pReal*pi*abs(tau_slip_pos(j))) - if (EdgeDipDistance>mse%mfp(j,of)) EdgeDipDistance=mse%mfp(j,of) - if (EdgeDipDistancemse%mfp(j,of)) EdgeDipDistance(j)=mse%mfp(j,of) + if (EdgeDipDistance(j)