diff --git a/code/constitutive_dislokmc.f90 b/code/constitutive_dislokmc.f90 index 9f0829c77..e86d97f51 100644 --- a/code/constitutive_dislokmc.f90 +++ b/code/constitutive_dislokmc.f90 @@ -59,8 +59,8 @@ module constitutive_dislokmc constitutive_dislokmc_D0, & !< prefactor for self-diffusion coefficient constitutive_dislokmc_Qsd, & !< activation energy for dislocation climb constitutive_dislokmc_GrainSize, & !< grain size - constitutive_dislokmc_pShearBand, & !< p-exponent in shearband velocity - constitutive_dislokmc_qShearBand, & !< q-exponent in shearband velocity + !constitutive_dislokmc_pShearBand, & !< p-exponent in shearband velocity + !constitutive_dislokmc_qShearBand, & !< q-exponent in shearband velocity constitutive_dislokmc_MaxTwinFraction, & !< maximum allowed total twin volume fraction constitutive_dislokmc_CEdgeDipMinDistance, & !< constitutive_dislokmc_Cmfptwin, & !< @@ -69,9 +69,9 @@ module constitutive_dislokmc constitutive_dislokmc_L0, & !< Length of twin nuclei in Burgers vectors constitutive_dislokmc_xc, & !< critical distance for formation of twin nucleus constitutive_dislokmc_VcrossSlip, & !< cross slip volume - constitutive_dislokmc_sbResistance, & !< value for shearband resistance (might become an internal state variable at some point) - constitutive_dislokmc_sbVelocity, & !< value for shearband velocity_0 - constitutive_dislokmc_sbQedge, & !< value for shearband systems Qedge + !constitutive_dislokmc_sbResistance, & !< value for shearband resistance (might become an internal state variable at some point) + !constitutive_dislokmc_sbVelocity, & !< value for shearband velocity_0 + !constitutive_dislokmc_sbQedge, & !< value for shearband systems Qedge constitutive_dislokmc_SFE_0K, & !< stacking fault energy at zero K constitutive_dislokmc_dSFE_dT, & !< temperature dependance of stacking fault energy constitutive_dislokmc_dipoleFormationFactor, & !< scaling factor for dipole formation: 0: off, 1: on. other values not useful @@ -110,15 +110,14 @@ module constitutive_dislokmc constitutive_dislokmc_uPerSlipFamily, & !< u-exponent in glide velocity constitutive_dislokmc_vPerSlipFamily, & !< v-exponent in glide velocity constitutive_dislokmc_sPerSlipFamily, & !< self-hardening in glide velocity - constitutive_dislokmc_rPerTwinFamily !< r-exponent in twin nucleation rate + constitutive_dislokmc_rPerTwinFamily, & !< r-exponent in twin nucleation rate + constitutive_dislokmc_nonSchmidCoeff !< non-Schmid coefficients (bcc) real(pReal), dimension(:,:,:), allocatable, private :: & constitutive_dislokmc_interactionMatrix_SlipSlip, & !< interaction matrix of the different slip systems for each instance constitutive_dislokmc_interactionMatrix_SlipTwin, & !< interaction matrix of slip systems with twin systems for each instance constitutive_dislokmc_interactionMatrix_TwinSlip, & !< interaction matrix of twin systems with slip systems for each instance constitutive_dislokmc_interactionMatrix_TwinTwin, & !< interaction matrix of the different twin systems for each instance constitutive_dislokmc_forestProjectionEdge !< matrix of forest projections of edge dislocations for each instance - real(pReal), dimension(:,:,:,:,:), allocatable, private :: & - constitutive_dislokmc_sbSv enum, bind(c) enumerator :: undefined_ID, & @@ -136,11 +135,11 @@ module constitutive_dislokmc accumulated_shear_twin_ID, & mfp_twin_ID, & resolved_stress_twin_ID, & - threshold_stress_twin_ID, & - resolved_stress_shearband_ID, & - shear_rate_shearband_ID, & - sb_eigenvalues_ID, & - sb_eigenvectors_ID + threshold_stress_twin_ID + !resolved_stress_shearband_ID, & + !shear_rate_shearband_ID, & + !sb_eigenvalues_ID, & + !sb_eigenvectors_ID end enum integer(kind(undefined_ID)), dimension(:,:), allocatable, private :: & constitutive_dislokmc_outputID !< ID of each post result output @@ -215,7 +214,7 @@ subroutine constitutive_dislokmc_init(fileUnit) integer(pInt) :: maxNinstance,mySize=0_pInt,phase,maxTotalNslip,maxTotalNtwin,& f,instance,j,k,l,m,n,o,p,q,r,s,ns,nt, & Nchunks_SlipSlip, Nchunks_SlipTwin, Nchunks_TwinSlip, Nchunks_TwinTwin, & - Nchunks_SlipFamilies, Nchunks_TwinFamilies, & + Nchunks_SlipFamilies, Nchunks_TwinFamilies, Nchunks_nonSchmid, & index_myFamily, index_otherFamily integer(pInt) :: sizeState, sizeDotState integer(pInt) :: NofMyPhase @@ -251,8 +250,8 @@ subroutine constitutive_dislokmc_init(fileUnit) allocate(constitutive_dislokmc_D0(maxNinstance), source=0.0_pReal) allocate(constitutive_dislokmc_Qsd(maxNinstance), source=0.0_pReal) allocate(constitutive_dislokmc_GrainSize(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_pShearBand(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_qShearBand(maxNinstance), source=0.0_pReal) + !allocate(constitutive_dislokmc_pShearBand(maxNinstance), source=0.0_pReal) + !allocate(constitutive_dislokmc_qShearBand(maxNinstance), source=0.0_pReal) allocate(constitutive_dislokmc_MaxTwinFraction(maxNinstance), source=0.0_pReal) allocate(constitutive_dislokmc_CEdgeDipMinDistance(maxNinstance), source=0.0_pReal) allocate(constitutive_dislokmc_Cmfptwin(maxNinstance), source=0.0_pReal) @@ -263,9 +262,9 @@ subroutine constitutive_dislokmc_init(fileUnit) allocate(constitutive_dislokmc_VcrossSlip(maxNinstance), source=0.0_pReal) allocate(constitutive_dislokmc_aTolRho(maxNinstance), source=0.0_pReal) allocate(constitutive_dislokmc_aTolTwinFrac(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_sbResistance(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_sbVelocity(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_sbQedge(maxNinstance), source=0.0_pReal) + !allocate(constitutive_dislokmc_sbResistance(maxNinstance), source=0.0_pReal) + !allocate(constitutive_dislokmc_sbVelocity(maxNinstance), source=0.0_pReal) + !allocate(constitutive_dislokmc_sbQedge(maxNinstance), source=0.0_pReal) allocate(constitutive_dislokmc_SFE_0K(maxNinstance), source=0.0_pReal) allocate(constitutive_dislokmc_dSFE_dT(maxNinstance), source=0.0_pReal) allocate(constitutive_dislokmc_dipoleFormationFactor(maxNinstance), source=1.0_pReal) !should be on by default @@ -301,8 +300,8 @@ subroutine constitutive_dislokmc_init(fileUnit) source=0.0_pReal) allocate(constitutive_dislokmc_interaction_TwinTwin(lattice_maxNinteraction,maxNinstance), & source=0.0_pReal) - allocate(constitutive_dislokmc_sbSv(6,6,homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), & - source=0.0_pReal) + allocate(constitutive_dislokmc_nonSchmidCoeff(lattice_maxNnonSchmid,maxNinstance), & + source=0.0_pReal) rewind(fileUnit) @@ -327,6 +326,7 @@ subroutine constitutive_dislokmc_init(fileUnit) Nchunks_SlipTwin = maxval(lattice_interactionSlipTwin(:,:,phase)) Nchunks_TwinSlip = maxval(lattice_interactionTwinSlip(:,:,phase)) Nchunks_TwinTwin = maxval(lattice_interactionTwinTwin(:,:,phase)) + Nchunks_nonSchmid = lattice_NnonSchmid(phase) if(allocated(tempPerSlip)) deallocate(tempPerSlip) if(allocated(tempPerTwin)) deallocate(tempPerTwin) allocate(tempPerSlip(Nchunks_SlipFamilies)) @@ -411,26 +411,26 @@ subroutine constitutive_dislokmc_init(fileUnit) constitutive_dislokmc_outputID(constitutive_dislokmc_Noutput(instance),instance) = threshold_stress_twin_ID constitutive_dislokmc_output(constitutive_dislokmc_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) - case ('resolved_stress_shearband') - constitutive_dislokmc_Noutput(instance) = constitutive_dislokmc_Noutput(instance) + 1_pInt - constitutive_dislokmc_outputID(constitutive_dislokmc_Noutput(instance),instance) = resolved_stress_shearband_ID - constitutive_dislokmc_output(constitutive_dislokmc_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,positions,2_pInt)) - case ('shear_rate_shearband') - constitutive_dislokmc_Noutput(instance) = constitutive_dislokmc_Noutput(instance) + 1_pInt - constitutive_dislokmc_outputID(constitutive_dislokmc_Noutput(instance),instance) = shear_rate_shearband_ID - constitutive_dislokmc_output(constitutive_dislokmc_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,positions,2_pInt)) - case ('sb_eigenvalues') - constitutive_dislokmc_Noutput(instance) = constitutive_dislokmc_Noutput(instance) + 1_pInt - constitutive_dislokmc_outputID(constitutive_dislokmc_Noutput(instance),instance) = sb_eigenvalues_ID - constitutive_dislokmc_output(constitutive_dislokmc_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,positions,2_pInt)) - case ('sb_eigenvectors') - constitutive_dislokmc_Noutput(instance) = constitutive_dislokmc_Noutput(instance) + 1_pInt - constitutive_dislokmc_outputID(constitutive_dislokmc_Noutput(instance),instance) = sb_eigenvectors_ID - constitutive_dislokmc_output(constitutive_dislokmc_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,positions,2_pInt)) + ! case ('resolved_stress_shearband') + ! constitutive_dislokmc_Noutput(instance) = constitutive_dislokmc_Noutput(instance) + 1_pInt + ! constitutive_dislokmc_outputID(constitutive_dislokmc_Noutput(instance),instance) = resolved_stress_shearband_ID + ! constitutive_dislokmc_output(constitutive_dislokmc_Noutput(instance),instance) = & + ! IO_lc(IO_stringValue(line,positions,2_pInt)) + ! case ('shear_rate_shearband') + ! constitutive_dislokmc_Noutput(instance) = constitutive_dislokmc_Noutput(instance) + 1_pInt + ! constitutive_dislokmc_outputID(constitutive_dislokmc_Noutput(instance),instance) = shear_rate_shearband_ID + ! constitutive_dislokmc_output(constitutive_dislokmc_Noutput(instance),instance) = & + ! IO_lc(IO_stringValue(line,positions,2_pInt)) + ! case ('sb_eigenvalues') + ! constitutive_dislokmc_Noutput(instance) = constitutive_dislokmc_Noutput(instance) + 1_pInt + ! constitutive_dislokmc_outputID(constitutive_dislokmc_Noutput(instance),instance) = sb_eigenvalues_ID + ! constitutive_dislokmc_output(constitutive_dislokmc_Noutput(instance),instance) = & + ! IO_lc(IO_stringValue(line,positions,2_pInt)) + ! case ('sb_eigenvectors') + ! constitutive_dislokmc_Noutput(instance) = constitutive_dislokmc_Noutput(instance) + 1_pInt + ! constitutive_dislokmc_outputID(constitutive_dislokmc_Noutput(instance),instance) = sb_eigenvectors_ID + ! constitutive_dislokmc_output(constitutive_dislokmc_Noutput(instance),instance) = & + ! IO_lc(IO_stringValue(line,positions,2_pInt)) end select !-------------------------------------------------------------------------------------------------- ! parameters depending on number of slip system families @@ -529,16 +529,22 @@ subroutine constitutive_dislokmc_init(fileUnit) do j = 1_pInt, Nchunks_TwinTwin constitutive_dislokmc_interaction_TwinTwin(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo + case ('nonschmid_coefficients') + if (positions(1) < 1_pInt + Nchunks_nonSchmid) & + call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOKMC_label//')') + do j = 1_pInt,Nchunks_nonSchmid + constitutive_dislokmc_nonSchmidCoeff(j,instance) = IO_floatValue(line,positions,1_pInt+j) + enddo !-------------------------------------------------------------------------------------------------- ! parameters independent of number of slip/twin systems case ('grainsize') constitutive_dislokmc_GrainSize(instance) = IO_floatValue(line,positions,2_pInt) case ('maxtwinfraction') constitutive_dislokmc_MaxTwinFraction(instance) = IO_floatValue(line,positions,2_pInt) - case ('p_shearband') - constitutive_dislokmc_pShearBand(instance) = IO_floatValue(line,positions,2_pInt) - case ('q_shearband') - constitutive_dislokmc_qShearBand(instance) = IO_floatValue(line,positions,2_pInt) + ! case ('p_shearband') + ! constitutive_dislokmc_pShearBand(instance) = IO_floatValue(line,positions,2_pInt) + ! case ('q_shearband') + ! constitutive_dislokmc_qShearBand(instance) = IO_floatValue(line,positions,2_pInt) case ('d0') constitutive_dislokmc_D0(instance) = IO_floatValue(line,positions,2_pInt) case ('qsd') @@ -569,12 +575,12 @@ subroutine constitutive_dislokmc_init(fileUnit) constitutive_dislokmc_dSFE_dT(instance) = IO_floatValue(line,positions,2_pInt) case ('dipoleformationfactor') constitutive_dislokmc_dipoleFormationFactor(instance) = IO_floatValue(line,positions,2_pInt) - case ('shearbandresistance') - constitutive_dislokmc_sbResistance(instance) = IO_floatValue(line,positions,2_pInt) - case ('shearbandvelocity') - constitutive_dislokmc_sbVelocity(instance) = IO_floatValue(line,positions,2_pInt) - case ('qedgepersbsystem') - constitutive_dislokmc_sbQedge(instance) = IO_floatValue(line,positions,2_pInt) + !case ('shearbandresistance') + ! constitutive_dislokmc_sbResistance(instance) = IO_floatValue(line,positions,2_pInt) + !case ('shearbandvelocity') + ! constitutive_dislokmc_sbVelocity(instance) = IO_floatValue(line,positions,2_pInt) + !case ('qedgepersbsystem') + ! constitutive_dislokmc_sbQedge(instance) = IO_floatValue(line,positions,2_pInt) end select endif; endif enddo parsingFile @@ -624,19 +630,19 @@ subroutine constitutive_dislokmc_init(fileUnit) if (constitutive_dislokmc_aTolTwinFrac(instance) <= 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='aTolTwinFrac ('//PLASTICITY_DISLOKMC_label//')') endif - if (constitutive_dislokmc_sbResistance(instance) < 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='sbResistance ('//PLASTICITY_DISLOKMC_label//')') - if (constitutive_dislokmc_sbVelocity(instance) < 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='sbVelocity ('//PLASTICITY_DISLOKMC_label//')') - if (constitutive_dislokmc_sbVelocity(instance) > 0.0_pReal .and. & - constitutive_dislokmc_pShearBand(instance) <= 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='pShearBand ('//PLASTICITY_DISLOKMC_label//')') + ! if (constitutive_dislokmc_sbResistance(instance) < 0.0_pReal) & + ! call IO_error(211_pInt,el=instance,ext_msg='sbResistance ('//PLASTICITY_DISLOKMC_label//')') + ! if (constitutive_dislokmc_sbVelocity(instance) < 0.0_pReal) & + ! call IO_error(211_pInt,el=instance,ext_msg='sbVelocity ('//PLASTICITY_DISLOKMC_label//')') + ! if (constitutive_dislokmc_sbVelocity(instance) > 0.0_pReal .and. & + ! constitutive_dislokmc_pShearBand(instance) <= 0.0_pReal) & + ! call IO_error(211_pInt,el=instance,ext_msg='pShearBand ('//PLASTICITY_DISLOKMC_label//')') if (constitutive_dislokmc_dipoleFormationFactor(instance) /= 0.0_pReal .and. & constitutive_dislokmc_dipoleFormationFactor(instance) /= 1.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='dipoleFormationFactor ('//PLASTICITY_DISLOKMC_label//')') - if (constitutive_dislokmc_sbVelocity(instance) > 0.0_pReal .and. & - constitutive_dislokmc_qShearBand(instance) <= 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='qShearBand ('//PLASTICITY_DISLOKMC_label//')') + ! if (constitutive_dislokmc_sbVelocity(instance) > 0.0_pReal .and. & + ! constitutive_dislokmc_qShearBand(instance) <= 0.0_pReal) & + ! call IO_error(211_pInt,el=instance,ext_msg='qShearBand ('//PLASTICITY_DISLOKMC_label//')') !-------------------------------------------------------------------------------------------------- ! Determine total number of active slip or twin systems @@ -709,14 +715,14 @@ subroutine constitutive_dislokmc_init(fileUnit) threshold_stress_twin_ID & ) mySize = nt - case(resolved_stress_shearband_ID, & - shear_rate_shearband_ID & - ) - mySize = 6_pInt - case(sb_eigenvalues_ID) - mySize = 3_pInt - case(sb_eigenvectors_ID) - mySize = 9_pInt + ! case(resolved_stress_shearband_ID, & + ! shear_rate_shearband_ID & + ! ) + ! mySize = 6_pInt + ! case(sb_eigenvalues_ID) + ! mySize = 3_pInt + ! case(sb_eigenvectors_ID) + ! mySize = 9_pInt end select if (mySize > 0_pInt) then ! any meaningful output found @@ -1216,6 +1222,7 @@ subroutine constitutive_dislokmc_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v,Temperatu lattice_maxNtwinFamily, & lattice_NslipSystem, & lattice_NtwinSystem, & + lattice_NnonSchmid, & lattice_shearTwin, & lattice_structure, & lattice_fcc_twinNucleationSlipPair, & @@ -1231,34 +1238,15 @@ subroutine constitutive_dislokmc_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v,Temperatu integer(pInt) :: instance,ph,of,ns,nt,f,i,j,k,l,m,n,index_myFamily,s1,s2 real(pReal) :: sumf,StressRatio_p,StressRatio_pminus1,StressRatio_r,BoltzmannRatio,DotGamma0,Ndot0, & StressRatio_u,StressRatio_uminus1 - real(pReal), dimension(3,3,3,3) :: dLp_dTstar3333 + real(pReal), dimension(3,3,2) :: & + nonSchmid_tensor + real(pReal), dimension(3,3,3,3) :: & + dLp_dTstar3333 real(pReal), dimension(constitutive_dislokmc_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & - gdot_slip,dgdot_dtauslip,tau_slip,vel_slip,dvel_slip + gdot_slip_pos,dgdot_dtauslip,tau_slip_pos,tau_slip_neg,vel_slip,dvel_slip real(pReal), dimension(constitutive_dislokmc_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & gdot_twin,dgdot_dtautwin,tau_twin - real(pReal), dimension(6) :: gdot_sb,dgdot_dtausb,tau_sb - real(pReal), dimension(3,3) :: eigVectors, sb_Smatrix - real(pReal), dimension(3) :: eigValues, sb_s, sb_m - real(pReal), dimension(3,6), parameter :: & - sb_sComposition = & - reshape(real([& - 1, 0, 1, & - 1, 0,-1, & - 1, 1, 0, & - 1,-1, 0, & - 0, 1, 1, & - 0, 1,-1 & - ],pReal),[ 3,6]), & - sb_mComposition = & - reshape(real([& - 1, 0,-1, & - 1, 0,+1, & - 1,-1, 0, & - 1, 1, 0, & - 0, 1,-1, & - 0, 1, 1 & - ],pReal),[ 3,6]) - logical error + !* Shortened notation of = mappingConstitutive(1,ipc,ip,el) @@ -1275,31 +1263,45 @@ subroutine constitutive_dislokmc_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v,Temperatu dLp_dTstar = 0.0_pReal !* Dislocation glide part - gdot_slip = 0.0_pReal + gdot_slip_pos = 0.0_pReal dgdot_dtauslip = 0.0_pReal j = 0_pInt slipFamiliesLoop: do f = 1_pInt,lattice_maxNslipFamily index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family slipSystemsLoop: do i = 1_pInt,constitutive_dislokmc_Nslip(f,instance) - j = j+1_pInt + j = j+1_pInt - !* Calculation of Lp - !* Resolved shear stress on slip system - tau_slip(j) = dot_product(Tstar_v,lattice_Sslip_v(:,1,index_myFamily+i,ph)) +!-------------------------------------------------------------------------------------------------- +! Calculation of Lp + tau_slip_pos(j) = dot_product(Tstar_v,lattice_Sslip_v(1:6,1,index_myFamily+i,ph)) + tau_slip_neg(j) = tau_slip_pos(j) + nonSchmid_tensor(1:3,1:3,1) = lattice_Sslip(1:3,1:3,1,index_myFamily+i,ph) + nonSchmid_tensor(1:3,1:3,2) = nonSchmid_tensor(1:3,1:3,1) - if((abs(tau_slip(j))-plasticState(ph)%state(6*ns+4*nt+j, of)) > tol_math_check) then + do k = 1,lattice_NnonSchmid(ph) + tau_slip_pos(j) = tau_slip_pos(j) + constitutive_dislokmc_nonSchmidCoeff(k,instance)* & + dot_product(Tstar_v,lattice_Sslip_v(1:6,2*k,index_myFamily+i,ph)) + tau_slip_neg(j) = tau_slip_neg(j) + constitutive_dislokmc_nonSchmidCoeff(k,instance)* & + dot_product(Tstar_v,lattice_Sslip_v(1:6,2*k+1,index_myFamily+i,ph)) + nonSchmid_tensor(1:3,1:3,1) = nonSchmid_tensor(1:3,1:3,1) + constitutive_dislokmc_nonSchmidCoeff(k,instance)*& + lattice_Sslip(1:3,1:3,2*k,index_myFamily+i,ph) + nonSchmid_tensor(1:3,1:3,2) = nonSchmid_tensor(1:3,1:3,2) + constitutive_dislokmc_nonSchmidCoeff(k,instance)*& + lattice_Sslip(1:3,1:3,2*k+1,index_myFamily+i,ph) + enddo + + if((abs(tau_slip_pos(j))-plasticState(ph)%state(6*ns+4*nt+j, of)) > tol_math_check) then !* Stress ratios - StressRatio_p = ((abs(tau_slip(j))- plasticState(ph)%state(6*ns+4*nt+j, of))/& + StressRatio_p = ((abs(tau_slip_pos(j))- plasticState(ph)%state(6*ns+4*nt+j, of))/& (constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))& **constitutive_dislokmc_pPerSlipFamily(f,instance) - StressRatio_pminus1 = ((abs(tau_slip(j))-plasticState(ph)%state(6*ns+4*nt+j, of))/& + StressRatio_pminus1 = ((abs(tau_slip_pos(j))-plasticState(ph)%state(6*ns+4*nt+j, of))/& (constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))& **(constitutive_dislokmc_pPerSlipFamily(f,instance)-1.0_pReal) - StressRatio_u = ((abs(tau_slip(j))-plasticState(ph)%state(6*ns+4*nt+j, of))/& + StressRatio_u = ((abs(tau_slip_pos(j))-plasticState(ph)%state(6*ns+4*nt+j, of))/& (constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))& **constitutive_dislokmc_uPerSlipFamily(f,instance) - StressRatio_uminus1 = ((abs(tau_slip(j))-plasticState(ph)%state(6*ns+4*nt+j, of))/& + StressRatio_uminus1 = ((abs(tau_slip_pos(j))-plasticState(ph)%state(6*ns+4*nt+j, of))/& (constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))& **(constitutive_dislokmc_uPerSlipFamily(f,instance)-1.0_pReal) @@ -1315,9 +1317,9 @@ subroutine constitutive_dislokmc_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v,Temperatu * (1.0_pReal-constitutive_dislokmc_sPerSlipFamily(f,instance) & * exp(-BoltzmannRatio*(1-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance))) - gdot_slip(j) = (1.0_pReal - sumf) * DotGamma0 & + gdot_slip_pos(j) = (1.0_pReal - sumf) * DotGamma0 & * StressRatio_u * vel_slip(j) & - * sign(1.0_pReal,tau_slip(j)) + * sign(1.0_pReal,tau_slip_pos(j)) !* Derivatives of shear rates @@ -1340,7 +1342,7 @@ subroutine constitutive_dislokmc_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v,Temperatu endif !* Plastic velocity gradient for dislocation glide - Lp = Lp + gdot_slip(j)*lattice_Sslip(:,:,1,index_myFamily+i,ph) + Lp = Lp + gdot_slip_pos(j)*lattice_Sslip(:,:,1,index_myFamily+i,ph) !* Calculation of the tangent of Lp forall (k=1_pInt:3_pInt,l=1_pInt:3_pInt,m=1_pInt:3_pInt,n=1_pInt:3_pInt) & @@ -1352,6 +1354,7 @@ subroutine constitutive_dislokmc_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v,Temperatu enddo slipFamiliesLoop !* Shear banding (shearband) part +#ifdef Shearband if(constitutive_dislokmc_sbVelocity(instance) /= 0.0_pReal .and. & constitutive_dislokmc_sbResistance(instance) /= 0.0_pReal) then gdot_sb = 0.0_pReal @@ -1405,6 +1408,7 @@ subroutine constitutive_dislokmc_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v,Temperatu sb_Smatrix(m,n) enddo end if +#endif !* Mechanical twinning part gdot_twin = 0.0_pReal @@ -1429,8 +1433,8 @@ subroutine constitutive_dislokmc_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v,Temperatu s1=lattice_fcc_twinNucleationSlipPair(1,index_myFamily+i) s2=lattice_fcc_twinNucleationSlipPair(2,index_myFamily+i) if (tau_twin(j) < constitutive_dislokmc_tau_r(j,instance)) then - Ndot0=(abs(gdot_slip(s1))*(plasticState(ph)%state(s2,of)+plasticState(ph)%state(ns+s2, of))+& - abs(gdot_slip(s2))*(plasticState(ph)%state(s1, of)+plasticState(ph)%state(ns+s1, of)))/& + Ndot0=(abs(gdot_slip_pos(s1))*(plasticState(ph)%state(s2,of)+plasticState(ph)%state(ns+s2, of))+& + abs(gdot_slip_pos(s2))*(plasticState(ph)%state(s1, of)+plasticState(ph)%state(ns+s1, of)))/& (constitutive_dislokmc_L0(instance)*constitutive_dislokmc_burgersPerSlipSystem(j,instance))*& (1.0_pReal-exp(-constitutive_dislokmc_VcrossSlip(instance)/(kB*Temperature)*& (constitutive_dislokmc_tau_r(j,instance)-tau_twin(j)))) @@ -1510,7 +1514,7 @@ subroutine constitutive_dislokmc_dotState(Tstar_v,Temperature,ipc,ip,el) real(pReal) :: sumf,StressRatio_p,StressRatio_pminus1,BoltzmannRatio,DotGamma0,StressRatio_u,StressRatio_uminus1,& EdgeDipMinDistance,AtomicVolume,VacancyDiffusion,StressRatio_r,Ndot0 real(pReal), dimension(constitutive_dislokmc_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & - gdot_slip,tau_slip,DotRhoMultiplication,EdgeDipDistance,DotRhoEdgeEdgeAnnihilation,DotRhoEdgeDipAnnihilation,& + gdot_slip_pos,tau_slip_pos,DotRhoMultiplication,EdgeDipDistance,DotRhoEdgeEdgeAnnihilation,DotRhoEdgeDipAnnihilation,& ClimbVelocity,DotRhoEdgeDipClimb,DotRhoDipFormation real(pReal), dimension(constitutive_dislokmc_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & tau_twin @@ -1527,7 +1531,7 @@ subroutine constitutive_dislokmc_dotState(Tstar_v,Temperature,ipc,ip,el) plasticState(ph)%dotState(:,of) = 0.0_pReal !* Dislocation density evolution - gdot_slip = 0.0_pReal + gdot_slip_pos = 0.0_pReal j = 0_pInt do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family @@ -1536,21 +1540,21 @@ subroutine constitutive_dislokmc_dotState(Tstar_v,Temperature,ipc,ip,el) !* Resolved shear stress on slip system - tau_slip(j) = dot_product(Tstar_v,lattice_Sslip_v(:,1,index_myFamily+i,ph)) + tau_slip_pos(j) = dot_product(Tstar_v,lattice_Sslip_v(:,1,index_myFamily+i,ph)) - if((abs(tau_slip(j))-plasticState(ph)%state(6*ns+4*nt+j, of)) > tol_math_check) then + if((abs(tau_slip_pos(j))-plasticState(ph)%state(6*ns+4*nt+j, of)) > tol_math_check) then !* Stress ratios - StressRatio_p = ((abs(tau_slip(j))-plasticState(ph)%state(6*ns+4*nt+j, of))/& + StressRatio_p = ((abs(tau_slip_pos(j))-plasticState(ph)%state(6*ns+4*nt+j, of))/& (constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))& **constitutive_dislokmc_pPerSlipFamily(f,instance) - StressRatio_pminus1 = ((abs(tau_slip(j))-plasticState(ph)%state(6*ns+4*nt+j, of))/& + StressRatio_pminus1 = ((abs(tau_slip_pos(j))-plasticState(ph)%state(6*ns+4*nt+j, of))/& (constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))& **(constitutive_dislokmc_pPerSlipFamily(f,instance)-1.0_pReal) - StressRatio_u = ((abs(tau_slip(j))-plasticState(ph)%state(6*ns+4*nt+j, of))/& + StressRatio_u = ((abs(tau_slip_pos(j))-plasticState(ph)%state(6*ns+4*nt+j, of))/& (constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))& **constitutive_dislokmc_uPerSlipFamily(f,instance) - StressRatio_uminus1 = ((abs(tau_slip(j))-plasticState(ph)%state(6*ns+4*nt+j,of))/& + StressRatio_uminus1 = ((abs(tau_slip_pos(j))-plasticState(ph)%state(6*ns+4*nt+j,of))/& (constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))& **(constitutive_dislokmc_uPerSlipFamily(f,instance)-1.0_pReal) @@ -1561,50 +1565,50 @@ subroutine constitutive_dislokmc_dotState(Tstar_v,Temperature,ipc,ip,el) plasticState(ph)%state(j, of)*constitutive_dislokmc_burgersPerSlipSystem(j,instance)*& constitutive_dislokmc_v0PerSlipSystem(j,instance) !* Shear rates due to slip - gdot_slip(j) = DotGamma0*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)** & - constitutive_dislokmc_qPerSlipFamily(f,instance))*sign(1.0_pReal,tau_slip(j)) & + gdot_slip_pos(j) = DotGamma0*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)** & + constitutive_dislokmc_qPerSlipFamily(f,instance))*sign(1.0_pReal,tau_slip_pos(j)) & * (1_pInt-constitutive_dislokmc_sPerSlipFamily(f,instance) & * exp(-BoltzmannRatio*(1_pInt-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance))) & * StressRatio_u endif !* Multiplication - DotRhoMultiplication(j) = abs(gdot_slip(j))/& + DotRhoMultiplication(j) = abs(gdot_slip_pos(j))/& (constitutive_dislokmc_burgersPerSlipSystem(j,instance)* & plasticState(ph)%state(5*ns+3*nt+j, of)) !* Dipole formation EdgeDipMinDistance = & constitutive_dislokmc_CEdgeDipMinDistance(instance)*constitutive_dislokmc_burgersPerSlipSystem(j,instance) - if (tau_slip(j) == 0.0_pReal) then + if (tau_slip_pos(j) == 0.0_pReal) then DotRhoDipFormation(j) = 0.0_pReal else EdgeDipDistance(j) = & (3.0_pReal*lattice_mu(ph)*constitutive_dislokmc_burgersPerSlipSystem(j,instance))/& - (16.0_pReal*pi*abs(tau_slip(j))) + (16.0_pReal*pi*abs(tau_slip_pos(j))) if (EdgeDipDistance(j)>plasticState(ph)%state(5*ns+3*nt+j, of)) EdgeDipDistance(j)=plasticState(ph)%state(5*ns+3*nt+j, of) if (EdgeDipDistance(j)