started to introduce non-schmid behavior and disabled shear banding in dislokmc
This commit is contained in:
parent
c5176f3bf7
commit
bec0af7b06
|
@ -59,8 +59,8 @@ module constitutive_dislokmc
|
||||||
constitutive_dislokmc_D0, & !< prefactor for self-diffusion coefficient
|
constitutive_dislokmc_D0, & !< prefactor for self-diffusion coefficient
|
||||||
constitutive_dislokmc_Qsd, & !< activation energy for dislocation climb
|
constitutive_dislokmc_Qsd, & !< activation energy for dislocation climb
|
||||||
constitutive_dislokmc_GrainSize, & !< grain size
|
constitutive_dislokmc_GrainSize, & !< grain size
|
||||||
constitutive_dislokmc_pShearBand, & !< p-exponent in shearband velocity
|
!constitutive_dislokmc_pShearBand, & !< p-exponent in shearband velocity
|
||||||
constitutive_dislokmc_qShearBand, & !< q-exponent in shearband velocity
|
!constitutive_dislokmc_qShearBand, & !< q-exponent in shearband velocity
|
||||||
constitutive_dislokmc_MaxTwinFraction, & !< maximum allowed total twin volume fraction
|
constitutive_dislokmc_MaxTwinFraction, & !< maximum allowed total twin volume fraction
|
||||||
constitutive_dislokmc_CEdgeDipMinDistance, & !<
|
constitutive_dislokmc_CEdgeDipMinDistance, & !<
|
||||||
constitutive_dislokmc_Cmfptwin, & !<
|
constitutive_dislokmc_Cmfptwin, & !<
|
||||||
|
@ -69,9 +69,9 @@ module constitutive_dislokmc
|
||||||
constitutive_dislokmc_L0, & !< Length of twin nuclei in Burgers vectors
|
constitutive_dislokmc_L0, & !< Length of twin nuclei in Burgers vectors
|
||||||
constitutive_dislokmc_xc, & !< critical distance for formation of twin nucleus
|
constitutive_dislokmc_xc, & !< critical distance for formation of twin nucleus
|
||||||
constitutive_dislokmc_VcrossSlip, & !< cross slip volume
|
constitutive_dislokmc_VcrossSlip, & !< cross slip volume
|
||||||
constitutive_dislokmc_sbResistance, & !< value for shearband resistance (might become an internal state variable at some point)
|
!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_sbVelocity, & !< value for shearband velocity_0
|
||||||
constitutive_dislokmc_sbQedge, & !< value for shearband systems Qedge
|
!constitutive_dislokmc_sbQedge, & !< value for shearband systems Qedge
|
||||||
constitutive_dislokmc_SFE_0K, & !< stacking fault energy at zero K
|
constitutive_dislokmc_SFE_0K, & !< stacking fault energy at zero K
|
||||||
constitutive_dislokmc_dSFE_dT, & !< temperature dependance of stacking fault energy
|
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
|
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_uPerSlipFamily, & !< u-exponent in glide velocity
|
||||||
constitutive_dislokmc_vPerSlipFamily, & !< v-exponent in glide velocity
|
constitutive_dislokmc_vPerSlipFamily, & !< v-exponent in glide velocity
|
||||||
constitutive_dislokmc_sPerSlipFamily, & !< self-hardening 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 :: &
|
real(pReal), dimension(:,:,:), allocatable, private :: &
|
||||||
constitutive_dislokmc_interactionMatrix_SlipSlip, & !< interaction matrix of the different slip systems for each instance
|
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_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_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_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
|
constitutive_dislokmc_forestProjectionEdge !< matrix of forest projections of edge dislocations for each instance
|
||||||
real(pReal), dimension(:,:,:,:,:), allocatable, private :: &
|
|
||||||
constitutive_dislokmc_sbSv
|
|
||||||
|
|
||||||
enum, bind(c)
|
enum, bind(c)
|
||||||
enumerator :: undefined_ID, &
|
enumerator :: undefined_ID, &
|
||||||
|
@ -136,11 +135,11 @@ module constitutive_dislokmc
|
||||||
accumulated_shear_twin_ID, &
|
accumulated_shear_twin_ID, &
|
||||||
mfp_twin_ID, &
|
mfp_twin_ID, &
|
||||||
resolved_stress_twin_ID, &
|
resolved_stress_twin_ID, &
|
||||||
threshold_stress_twin_ID, &
|
threshold_stress_twin_ID
|
||||||
resolved_stress_shearband_ID, &
|
!resolved_stress_shearband_ID, &
|
||||||
shear_rate_shearband_ID, &
|
!shear_rate_shearband_ID, &
|
||||||
sb_eigenvalues_ID, &
|
!sb_eigenvalues_ID, &
|
||||||
sb_eigenvectors_ID
|
!sb_eigenvectors_ID
|
||||||
end enum
|
end enum
|
||||||
integer(kind(undefined_ID)), dimension(:,:), allocatable, private :: &
|
integer(kind(undefined_ID)), dimension(:,:), allocatable, private :: &
|
||||||
constitutive_dislokmc_outputID !< ID of each post result output
|
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,&
|
integer(pInt) :: maxNinstance,mySize=0_pInt,phase,maxTotalNslip,maxTotalNtwin,&
|
||||||
f,instance,j,k,l,m,n,o,p,q,r,s,ns,nt, &
|
f,instance,j,k,l,m,n,o,p,q,r,s,ns,nt, &
|
||||||
Nchunks_SlipSlip, Nchunks_SlipTwin, Nchunks_TwinSlip, Nchunks_TwinTwin, &
|
Nchunks_SlipSlip, Nchunks_SlipTwin, Nchunks_TwinSlip, Nchunks_TwinTwin, &
|
||||||
Nchunks_SlipFamilies, Nchunks_TwinFamilies, &
|
Nchunks_SlipFamilies, Nchunks_TwinFamilies, Nchunks_nonSchmid, &
|
||||||
index_myFamily, index_otherFamily
|
index_myFamily, index_otherFamily
|
||||||
integer(pInt) :: sizeState, sizeDotState
|
integer(pInt) :: sizeState, sizeDotState
|
||||||
integer(pInt) :: NofMyPhase
|
integer(pInt) :: NofMyPhase
|
||||||
|
@ -251,8 +250,8 @@ subroutine constitutive_dislokmc_init(fileUnit)
|
||||||
allocate(constitutive_dislokmc_D0(maxNinstance), source=0.0_pReal)
|
allocate(constitutive_dislokmc_D0(maxNinstance), source=0.0_pReal)
|
||||||
allocate(constitutive_dislokmc_Qsd(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_GrainSize(maxNinstance), source=0.0_pReal)
|
||||||
allocate(constitutive_dislokmc_pShearBand(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_qShearBand(maxNinstance), source=0.0_pReal)
|
||||||
allocate(constitutive_dislokmc_MaxTwinFraction(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_CEdgeDipMinDistance(maxNinstance), source=0.0_pReal)
|
||||||
allocate(constitutive_dislokmc_Cmfptwin(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_VcrossSlip(maxNinstance), source=0.0_pReal)
|
||||||
allocate(constitutive_dislokmc_aTolRho(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_aTolTwinFrac(maxNinstance), source=0.0_pReal)
|
||||||
allocate(constitutive_dislokmc_sbResistance(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_sbVelocity(maxNinstance), source=0.0_pReal)
|
||||||
allocate(constitutive_dislokmc_sbQedge(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_SFE_0K(maxNinstance), source=0.0_pReal)
|
||||||
allocate(constitutive_dislokmc_dSFE_dT(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
|
allocate(constitutive_dislokmc_dipoleFormationFactor(maxNinstance), source=1.0_pReal) !should be on by default
|
||||||
|
@ -301,7 +300,7 @@ subroutine constitutive_dislokmc_init(fileUnit)
|
||||||
source=0.0_pReal)
|
source=0.0_pReal)
|
||||||
allocate(constitutive_dislokmc_interaction_TwinTwin(lattice_maxNinteraction,maxNinstance), &
|
allocate(constitutive_dislokmc_interaction_TwinTwin(lattice_maxNinteraction,maxNinstance), &
|
||||||
source=0.0_pReal)
|
source=0.0_pReal)
|
||||||
allocate(constitutive_dislokmc_sbSv(6,6,homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), &
|
allocate(constitutive_dislokmc_nonSchmidCoeff(lattice_maxNnonSchmid,maxNinstance), &
|
||||||
source=0.0_pReal)
|
source=0.0_pReal)
|
||||||
|
|
||||||
|
|
||||||
|
@ -327,6 +326,7 @@ subroutine constitutive_dislokmc_init(fileUnit)
|
||||||
Nchunks_SlipTwin = maxval(lattice_interactionSlipTwin(:,:,phase))
|
Nchunks_SlipTwin = maxval(lattice_interactionSlipTwin(:,:,phase))
|
||||||
Nchunks_TwinSlip = maxval(lattice_interactionTwinSlip(:,:,phase))
|
Nchunks_TwinSlip = maxval(lattice_interactionTwinSlip(:,:,phase))
|
||||||
Nchunks_TwinTwin = maxval(lattice_interactionTwinTwin(:,:,phase))
|
Nchunks_TwinTwin = maxval(lattice_interactionTwinTwin(:,:,phase))
|
||||||
|
Nchunks_nonSchmid = lattice_NnonSchmid(phase)
|
||||||
if(allocated(tempPerSlip)) deallocate(tempPerSlip)
|
if(allocated(tempPerSlip)) deallocate(tempPerSlip)
|
||||||
if(allocated(tempPerTwin)) deallocate(tempPerTwin)
|
if(allocated(tempPerTwin)) deallocate(tempPerTwin)
|
||||||
allocate(tempPerSlip(Nchunks_SlipFamilies))
|
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_outputID(constitutive_dislokmc_Noutput(instance),instance) = threshold_stress_twin_ID
|
||||||
constitutive_dislokmc_output(constitutive_dislokmc_Noutput(instance),instance) = &
|
constitutive_dislokmc_output(constitutive_dislokmc_Noutput(instance),instance) = &
|
||||||
IO_lc(IO_stringValue(line,positions,2_pInt))
|
IO_lc(IO_stringValue(line,positions,2_pInt))
|
||||||
case ('resolved_stress_shearband')
|
! case ('resolved_stress_shearband')
|
||||||
constitutive_dislokmc_Noutput(instance) = constitutive_dislokmc_Noutput(instance) + 1_pInt
|
! constitutive_dislokmc_Noutput(instance) = constitutive_dislokmc_Noutput(instance) + 1_pInt
|
||||||
constitutive_dislokmc_outputID(constitutive_dislokmc_Noutput(instance),instance) = resolved_stress_shearband_ID
|
! constitutive_dislokmc_outputID(constitutive_dislokmc_Noutput(instance),instance) = resolved_stress_shearband_ID
|
||||||
constitutive_dislokmc_output(constitutive_dislokmc_Noutput(instance),instance) = &
|
! constitutive_dislokmc_output(constitutive_dislokmc_Noutput(instance),instance) = &
|
||||||
IO_lc(IO_stringValue(line,positions,2_pInt))
|
! IO_lc(IO_stringValue(line,positions,2_pInt))
|
||||||
case ('shear_rate_shearband')
|
! case ('shear_rate_shearband')
|
||||||
constitutive_dislokmc_Noutput(instance) = constitutive_dislokmc_Noutput(instance) + 1_pInt
|
! constitutive_dislokmc_Noutput(instance) = constitutive_dislokmc_Noutput(instance) + 1_pInt
|
||||||
constitutive_dislokmc_outputID(constitutive_dislokmc_Noutput(instance),instance) = shear_rate_shearband_ID
|
! constitutive_dislokmc_outputID(constitutive_dislokmc_Noutput(instance),instance) = shear_rate_shearband_ID
|
||||||
constitutive_dislokmc_output(constitutive_dislokmc_Noutput(instance),instance) = &
|
! constitutive_dislokmc_output(constitutive_dislokmc_Noutput(instance),instance) = &
|
||||||
IO_lc(IO_stringValue(line,positions,2_pInt))
|
! IO_lc(IO_stringValue(line,positions,2_pInt))
|
||||||
case ('sb_eigenvalues')
|
! case ('sb_eigenvalues')
|
||||||
constitutive_dislokmc_Noutput(instance) = constitutive_dislokmc_Noutput(instance) + 1_pInt
|
! constitutive_dislokmc_Noutput(instance) = constitutive_dislokmc_Noutput(instance) + 1_pInt
|
||||||
constitutive_dislokmc_outputID(constitutive_dislokmc_Noutput(instance),instance) = sb_eigenvalues_ID
|
! constitutive_dislokmc_outputID(constitutive_dislokmc_Noutput(instance),instance) = sb_eigenvalues_ID
|
||||||
constitutive_dislokmc_output(constitutive_dislokmc_Noutput(instance),instance) = &
|
! constitutive_dislokmc_output(constitutive_dislokmc_Noutput(instance),instance) = &
|
||||||
IO_lc(IO_stringValue(line,positions,2_pInt))
|
! IO_lc(IO_stringValue(line,positions,2_pInt))
|
||||||
case ('sb_eigenvectors')
|
! case ('sb_eigenvectors')
|
||||||
constitutive_dislokmc_Noutput(instance) = constitutive_dislokmc_Noutput(instance) + 1_pInt
|
! constitutive_dislokmc_Noutput(instance) = constitutive_dislokmc_Noutput(instance) + 1_pInt
|
||||||
constitutive_dislokmc_outputID(constitutive_dislokmc_Noutput(instance),instance) = sb_eigenvectors_ID
|
! constitutive_dislokmc_outputID(constitutive_dislokmc_Noutput(instance),instance) = sb_eigenvectors_ID
|
||||||
constitutive_dislokmc_output(constitutive_dislokmc_Noutput(instance),instance) = &
|
! constitutive_dislokmc_output(constitutive_dislokmc_Noutput(instance),instance) = &
|
||||||
IO_lc(IO_stringValue(line,positions,2_pInt))
|
! IO_lc(IO_stringValue(line,positions,2_pInt))
|
||||||
end select
|
end select
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! parameters depending on number of slip system families
|
! parameters depending on number of slip system families
|
||||||
|
@ -529,16 +529,22 @@ subroutine constitutive_dislokmc_init(fileUnit)
|
||||||
do j = 1_pInt, Nchunks_TwinTwin
|
do j = 1_pInt, Nchunks_TwinTwin
|
||||||
constitutive_dislokmc_interaction_TwinTwin(j,instance) = IO_floatValue(line,positions,1_pInt+j)
|
constitutive_dislokmc_interaction_TwinTwin(j,instance) = IO_floatValue(line,positions,1_pInt+j)
|
||||||
enddo
|
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
|
! parameters independent of number of slip/twin systems
|
||||||
case ('grainsize')
|
case ('grainsize')
|
||||||
constitutive_dislokmc_GrainSize(instance) = IO_floatValue(line,positions,2_pInt)
|
constitutive_dislokmc_GrainSize(instance) = IO_floatValue(line,positions,2_pInt)
|
||||||
case ('maxtwinfraction')
|
case ('maxtwinfraction')
|
||||||
constitutive_dislokmc_MaxTwinFraction(instance) = IO_floatValue(line,positions,2_pInt)
|
constitutive_dislokmc_MaxTwinFraction(instance) = IO_floatValue(line,positions,2_pInt)
|
||||||
case ('p_shearband')
|
! case ('p_shearband')
|
||||||
constitutive_dislokmc_pShearBand(instance) = IO_floatValue(line,positions,2_pInt)
|
! constitutive_dislokmc_pShearBand(instance) = IO_floatValue(line,positions,2_pInt)
|
||||||
case ('q_shearband')
|
! case ('q_shearband')
|
||||||
constitutive_dislokmc_qShearBand(instance) = IO_floatValue(line,positions,2_pInt)
|
! constitutive_dislokmc_qShearBand(instance) = IO_floatValue(line,positions,2_pInt)
|
||||||
case ('d0')
|
case ('d0')
|
||||||
constitutive_dislokmc_D0(instance) = IO_floatValue(line,positions,2_pInt)
|
constitutive_dislokmc_D0(instance) = IO_floatValue(line,positions,2_pInt)
|
||||||
case ('qsd')
|
case ('qsd')
|
||||||
|
@ -569,12 +575,12 @@ subroutine constitutive_dislokmc_init(fileUnit)
|
||||||
constitutive_dislokmc_dSFE_dT(instance) = IO_floatValue(line,positions,2_pInt)
|
constitutive_dislokmc_dSFE_dT(instance) = IO_floatValue(line,positions,2_pInt)
|
||||||
case ('dipoleformationfactor')
|
case ('dipoleformationfactor')
|
||||||
constitutive_dislokmc_dipoleFormationFactor(instance) = IO_floatValue(line,positions,2_pInt)
|
constitutive_dislokmc_dipoleFormationFactor(instance) = IO_floatValue(line,positions,2_pInt)
|
||||||
case ('shearbandresistance')
|
!case ('shearbandresistance')
|
||||||
constitutive_dislokmc_sbResistance(instance) = IO_floatValue(line,positions,2_pInt)
|
! constitutive_dislokmc_sbResistance(instance) = IO_floatValue(line,positions,2_pInt)
|
||||||
case ('shearbandvelocity')
|
!case ('shearbandvelocity')
|
||||||
constitutive_dislokmc_sbVelocity(instance) = IO_floatValue(line,positions,2_pInt)
|
! constitutive_dislokmc_sbVelocity(instance) = IO_floatValue(line,positions,2_pInt)
|
||||||
case ('qedgepersbsystem')
|
!case ('qedgepersbsystem')
|
||||||
constitutive_dislokmc_sbQedge(instance) = IO_floatValue(line,positions,2_pInt)
|
! constitutive_dislokmc_sbQedge(instance) = IO_floatValue(line,positions,2_pInt)
|
||||||
end select
|
end select
|
||||||
endif; endif
|
endif; endif
|
||||||
enddo parsingFile
|
enddo parsingFile
|
||||||
|
@ -624,19 +630,19 @@ subroutine constitutive_dislokmc_init(fileUnit)
|
||||||
if (constitutive_dislokmc_aTolTwinFrac(instance) <= 0.0_pReal) &
|
if (constitutive_dislokmc_aTolTwinFrac(instance) <= 0.0_pReal) &
|
||||||
call IO_error(211_pInt,el=instance,ext_msg='aTolTwinFrac ('//PLASTICITY_DISLOKMC_label//')')
|
call IO_error(211_pInt,el=instance,ext_msg='aTolTwinFrac ('//PLASTICITY_DISLOKMC_label//')')
|
||||||
endif
|
endif
|
||||||
if (constitutive_dislokmc_sbResistance(instance) < 0.0_pReal) &
|
! if (constitutive_dislokmc_sbResistance(instance) < 0.0_pReal) &
|
||||||
call IO_error(211_pInt,el=instance,ext_msg='sbResistance ('//PLASTICITY_DISLOKMC_label//')')
|
! call IO_error(211_pInt,el=instance,ext_msg='sbResistance ('//PLASTICITY_DISLOKMC_label//')')
|
||||||
if (constitutive_dislokmc_sbVelocity(instance) < 0.0_pReal) &
|
! if (constitutive_dislokmc_sbVelocity(instance) < 0.0_pReal) &
|
||||||
call IO_error(211_pInt,el=instance,ext_msg='sbVelocity ('//PLASTICITY_DISLOKMC_label//')')
|
! call IO_error(211_pInt,el=instance,ext_msg='sbVelocity ('//PLASTICITY_DISLOKMC_label//')')
|
||||||
if (constitutive_dislokmc_sbVelocity(instance) > 0.0_pReal .and. &
|
! if (constitutive_dislokmc_sbVelocity(instance) > 0.0_pReal .and. &
|
||||||
constitutive_dislokmc_pShearBand(instance) <= 0.0_pReal) &
|
! constitutive_dislokmc_pShearBand(instance) <= 0.0_pReal) &
|
||||||
call IO_error(211_pInt,el=instance,ext_msg='pShearBand ('//PLASTICITY_DISLOKMC_label//')')
|
! call IO_error(211_pInt,el=instance,ext_msg='pShearBand ('//PLASTICITY_DISLOKMC_label//')')
|
||||||
if (constitutive_dislokmc_dipoleFormationFactor(instance) /= 0.0_pReal .and. &
|
if (constitutive_dislokmc_dipoleFormationFactor(instance) /= 0.0_pReal .and. &
|
||||||
constitutive_dislokmc_dipoleFormationFactor(instance) /= 1.0_pReal) &
|
constitutive_dislokmc_dipoleFormationFactor(instance) /= 1.0_pReal) &
|
||||||
call IO_error(211_pInt,el=instance,ext_msg='dipoleFormationFactor ('//PLASTICITY_DISLOKMC_label//')')
|
call IO_error(211_pInt,el=instance,ext_msg='dipoleFormationFactor ('//PLASTICITY_DISLOKMC_label//')')
|
||||||
if (constitutive_dislokmc_sbVelocity(instance) > 0.0_pReal .and. &
|
! if (constitutive_dislokmc_sbVelocity(instance) > 0.0_pReal .and. &
|
||||||
constitutive_dislokmc_qShearBand(instance) <= 0.0_pReal) &
|
! constitutive_dislokmc_qShearBand(instance) <= 0.0_pReal) &
|
||||||
call IO_error(211_pInt,el=instance,ext_msg='qShearBand ('//PLASTICITY_DISLOKMC_label//')')
|
! call IO_error(211_pInt,el=instance,ext_msg='qShearBand ('//PLASTICITY_DISLOKMC_label//')')
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! Determine total number of active slip or twin systems
|
! Determine total number of active slip or twin systems
|
||||||
|
@ -709,14 +715,14 @@ subroutine constitutive_dislokmc_init(fileUnit)
|
||||||
threshold_stress_twin_ID &
|
threshold_stress_twin_ID &
|
||||||
)
|
)
|
||||||
mySize = nt
|
mySize = nt
|
||||||
case(resolved_stress_shearband_ID, &
|
! case(resolved_stress_shearband_ID, &
|
||||||
shear_rate_shearband_ID &
|
! shear_rate_shearband_ID &
|
||||||
)
|
! )
|
||||||
mySize = 6_pInt
|
! mySize = 6_pInt
|
||||||
case(sb_eigenvalues_ID)
|
! case(sb_eigenvalues_ID)
|
||||||
mySize = 3_pInt
|
! mySize = 3_pInt
|
||||||
case(sb_eigenvectors_ID)
|
! case(sb_eigenvectors_ID)
|
||||||
mySize = 9_pInt
|
! mySize = 9_pInt
|
||||||
end select
|
end select
|
||||||
|
|
||||||
if (mySize > 0_pInt) then ! any meaningful output found
|
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_maxNtwinFamily, &
|
||||||
lattice_NslipSystem, &
|
lattice_NslipSystem, &
|
||||||
lattice_NtwinSystem, &
|
lattice_NtwinSystem, &
|
||||||
|
lattice_NnonSchmid, &
|
||||||
lattice_shearTwin, &
|
lattice_shearTwin, &
|
||||||
lattice_structure, &
|
lattice_structure, &
|
||||||
lattice_fcc_twinNucleationSlipPair, &
|
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
|
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, &
|
real(pReal) :: sumf,StressRatio_p,StressRatio_pminus1,StressRatio_r,BoltzmannRatio,DotGamma0,Ndot0, &
|
||||||
StressRatio_u,StressRatio_uminus1
|
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)))) :: &
|
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)))) :: &
|
real(pReal), dimension(constitutive_dislokmc_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: &
|
||||||
gdot_twin,dgdot_dtautwin,tau_twin
|
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
|
!* Shortened notation
|
||||||
of = mappingConstitutive(1,ipc,ip,el)
|
of = mappingConstitutive(1,ipc,ip,el)
|
||||||
|
@ -1275,7 +1263,7 @@ subroutine constitutive_dislokmc_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v,Temperatu
|
||||||
dLp_dTstar = 0.0_pReal
|
dLp_dTstar = 0.0_pReal
|
||||||
|
|
||||||
!* Dislocation glide part
|
!* Dislocation glide part
|
||||||
gdot_slip = 0.0_pReal
|
gdot_slip_pos = 0.0_pReal
|
||||||
dgdot_dtauslip = 0.0_pReal
|
dgdot_dtauslip = 0.0_pReal
|
||||||
j = 0_pInt
|
j = 0_pInt
|
||||||
slipFamiliesLoop: do f = 1_pInt,lattice_maxNslipFamily
|
slipFamiliesLoop: do f = 1_pInt,lattice_maxNslipFamily
|
||||||
|
@ -1283,23 +1271,37 @@ subroutine constitutive_dislokmc_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v,Temperatu
|
||||||
slipSystemsLoop: do i = 1_pInt,constitutive_dislokmc_Nslip(f,instance)
|
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
|
! Calculation of Lp
|
||||||
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: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
|
!* 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_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))&
|
||||||
**constitutive_dislokmc_pPerSlipFamily(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_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))&
|
||||||
**(constitutive_dislokmc_pPerSlipFamily(f,instance)-1.0_pReal)
|
**(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_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))&
|
||||||
**constitutive_dislokmc_uPerSlipFamily(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_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))&
|
||||||
**(constitutive_dislokmc_uPerSlipFamily(f,instance)-1.0_pReal)
|
**(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) &
|
* (1.0_pReal-constitutive_dislokmc_sPerSlipFamily(f,instance) &
|
||||||
* exp(-BoltzmannRatio*(1-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(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) &
|
* StressRatio_u * vel_slip(j) &
|
||||||
* sign(1.0_pReal,tau_slip(j))
|
* sign(1.0_pReal,tau_slip_pos(j))
|
||||||
|
|
||||||
|
|
||||||
!* Derivatives of shear rates
|
!* Derivatives of shear rates
|
||||||
|
@ -1340,7 +1342,7 @@ subroutine constitutive_dislokmc_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v,Temperatu
|
||||||
endif
|
endif
|
||||||
|
|
||||||
!* Plastic velocity gradient for dislocation glide
|
!* 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
|
!* 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) &
|
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
|
enddo slipFamiliesLoop
|
||||||
|
|
||||||
!* Shear banding (shearband) part
|
!* Shear banding (shearband) part
|
||||||
|
#ifdef Shearband
|
||||||
if(constitutive_dislokmc_sbVelocity(instance) /= 0.0_pReal .and. &
|
if(constitutive_dislokmc_sbVelocity(instance) /= 0.0_pReal .and. &
|
||||||
constitutive_dislokmc_sbResistance(instance) /= 0.0_pReal) then
|
constitutive_dislokmc_sbResistance(instance) /= 0.0_pReal) then
|
||||||
gdot_sb = 0.0_pReal
|
gdot_sb = 0.0_pReal
|
||||||
|
@ -1405,6 +1408,7 @@ subroutine constitutive_dislokmc_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v,Temperatu
|
||||||
sb_Smatrix(m,n)
|
sb_Smatrix(m,n)
|
||||||
enddo
|
enddo
|
||||||
end if
|
end if
|
||||||
|
#endif
|
||||||
|
|
||||||
!* Mechanical twinning part
|
!* Mechanical twinning part
|
||||||
gdot_twin = 0.0_pReal
|
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)
|
s1=lattice_fcc_twinNucleationSlipPair(1,index_myFamily+i)
|
||||||
s2=lattice_fcc_twinNucleationSlipPair(2,index_myFamily+i)
|
s2=lattice_fcc_twinNucleationSlipPair(2,index_myFamily+i)
|
||||||
if (tau_twin(j) < constitutive_dislokmc_tau_r(j,instance)) then
|
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))+&
|
Ndot0=(abs(gdot_slip_pos(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)))/&
|
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))*&
|
(constitutive_dislokmc_L0(instance)*constitutive_dislokmc_burgersPerSlipSystem(j,instance))*&
|
||||||
(1.0_pReal-exp(-constitutive_dislokmc_VcrossSlip(instance)/(kB*Temperature)*&
|
(1.0_pReal-exp(-constitutive_dislokmc_VcrossSlip(instance)/(kB*Temperature)*&
|
||||||
(constitutive_dislokmc_tau_r(j,instance)-tau_twin(j))))
|
(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,&
|
real(pReal) :: sumf,StressRatio_p,StressRatio_pminus1,BoltzmannRatio,DotGamma0,StressRatio_u,StressRatio_uminus1,&
|
||||||
EdgeDipMinDistance,AtomicVolume,VacancyDiffusion,StressRatio_r,Ndot0
|
EdgeDipMinDistance,AtomicVolume,VacancyDiffusion,StressRatio_r,Ndot0
|
||||||
real(pReal), dimension(constitutive_dislokmc_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: &
|
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
|
ClimbVelocity,DotRhoEdgeDipClimb,DotRhoDipFormation
|
||||||
real(pReal), dimension(constitutive_dislokmc_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: &
|
real(pReal), dimension(constitutive_dislokmc_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: &
|
||||||
tau_twin
|
tau_twin
|
||||||
|
@ -1527,7 +1531,7 @@ subroutine constitutive_dislokmc_dotState(Tstar_v,Temperature,ipc,ip,el)
|
||||||
plasticState(ph)%dotState(:,of) = 0.0_pReal
|
plasticState(ph)%dotState(:,of) = 0.0_pReal
|
||||||
|
|
||||||
!* Dislocation density evolution
|
!* Dislocation density evolution
|
||||||
gdot_slip = 0.0_pReal
|
gdot_slip_pos = 0.0_pReal
|
||||||
j = 0_pInt
|
j = 0_pInt
|
||||||
do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families
|
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
|
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
|
!* 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
|
!* 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_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))&
|
||||||
**constitutive_dislokmc_pPerSlipFamily(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_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))&
|
||||||
**(constitutive_dislokmc_pPerSlipFamily(f,instance)-1.0_pReal)
|
**(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_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))&
|
||||||
**constitutive_dislokmc_uPerSlipFamily(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_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance)))&
|
||||||
**(constitutive_dislokmc_uPerSlipFamily(f,instance)-1.0_pReal)
|
**(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)*&
|
plasticState(ph)%state(j, of)*constitutive_dislokmc_burgersPerSlipSystem(j,instance)*&
|
||||||
constitutive_dislokmc_v0PerSlipSystem(j,instance)
|
constitutive_dislokmc_v0PerSlipSystem(j,instance)
|
||||||
!* Shear rates due to slip
|
!* Shear rates due to slip
|
||||||
gdot_slip(j) = DotGamma0*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)** &
|
gdot_slip_pos(j) = DotGamma0*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)** &
|
||||||
constitutive_dislokmc_qPerSlipFamily(f,instance))*sign(1.0_pReal,tau_slip(j)) &
|
constitutive_dislokmc_qPerSlipFamily(f,instance))*sign(1.0_pReal,tau_slip_pos(j)) &
|
||||||
* (1_pInt-constitutive_dislokmc_sPerSlipFamily(f,instance) &
|
* (1_pInt-constitutive_dislokmc_sPerSlipFamily(f,instance) &
|
||||||
* exp(-BoltzmannRatio*(1_pInt-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance))) &
|
* exp(-BoltzmannRatio*(1_pInt-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance))) &
|
||||||
* StressRatio_u
|
* StressRatio_u
|
||||||
endif
|
endif
|
||||||
|
|
||||||
!* Multiplication
|
!* Multiplication
|
||||||
DotRhoMultiplication(j) = abs(gdot_slip(j))/&
|
DotRhoMultiplication(j) = abs(gdot_slip_pos(j))/&
|
||||||
(constitutive_dislokmc_burgersPerSlipSystem(j,instance)* &
|
(constitutive_dislokmc_burgersPerSlipSystem(j,instance)* &
|
||||||
plasticState(ph)%state(5*ns+3*nt+j, of))
|
plasticState(ph)%state(5*ns+3*nt+j, of))
|
||||||
|
|
||||||
!* Dipole formation
|
!* Dipole formation
|
||||||
EdgeDipMinDistance = &
|
EdgeDipMinDistance = &
|
||||||
constitutive_dislokmc_CEdgeDipMinDistance(instance)*constitutive_dislokmc_burgersPerSlipSystem(j,instance)
|
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
|
DotRhoDipFormation(j) = 0.0_pReal
|
||||||
else
|
else
|
||||||
EdgeDipDistance(j) = &
|
EdgeDipDistance(j) = &
|
||||||
(3.0_pReal*lattice_mu(ph)*constitutive_dislokmc_burgersPerSlipSystem(j,instance))/&
|
(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)>plasticState(ph)%state(5*ns+3*nt+j, of)) EdgeDipDistance(j)=plasticState(ph)%state(5*ns+3*nt+j, of)
|
||||||
if (EdgeDipDistance(j)<EdgeDipMinDistance) EdgeDipDistance(j)=EdgeDipMinDistance
|
if (EdgeDipDistance(j)<EdgeDipMinDistance) EdgeDipDistance(j)=EdgeDipMinDistance
|
||||||
DotRhoDipFormation(j) = &
|
DotRhoDipFormation(j) = &
|
||||||
((2.0_pReal*EdgeDipDistance(j))/constitutive_dislokmc_burgersPerSlipSystem(j,instance))*&
|
((2.0_pReal*EdgeDipDistance(j))/constitutive_dislokmc_burgersPerSlipSystem(j,instance))*&
|
||||||
plasticState(ph)%state(j, of)*abs(gdot_slip(j))*constitutive_dislokmc_dipoleFormationFactor(instance)
|
plasticState(ph)%state(j, of)*abs(gdot_slip_pos(j))*constitutive_dislokmc_dipoleFormationFactor(instance)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
!* Spontaneous annihilation of 2 single edge dislocations
|
!* Spontaneous annihilation of 2 single edge dislocations
|
||||||
DotRhoEdgeEdgeAnnihilation(j) = &
|
DotRhoEdgeEdgeAnnihilation(j) = &
|
||||||
((2.0_pReal*EdgeDipMinDistance)/constitutive_dislokmc_burgersPerSlipSystem(j,instance))*&
|
((2.0_pReal*EdgeDipMinDistance)/constitutive_dislokmc_burgersPerSlipSystem(j,instance))*&
|
||||||
plasticState(ph)%state(j, of)*abs(gdot_slip(j))
|
plasticState(ph)%state(j, of)*abs(gdot_slip_pos(j))
|
||||||
|
|
||||||
!* Spontaneous annihilation of a single edge dislocation with a dipole constituent
|
!* Spontaneous annihilation of a single edge dislocation with a dipole constituent
|
||||||
DotRhoEdgeDipAnnihilation(j) = &
|
DotRhoEdgeDipAnnihilation(j) = &
|
||||||
((2.0_pReal*EdgeDipMinDistance)/constitutive_dislokmc_burgersPerSlipSystem(j,instance))*&
|
((2.0_pReal*EdgeDipMinDistance)/constitutive_dislokmc_burgersPerSlipSystem(j,instance))*&
|
||||||
plasticState(ph)%state(ns+j, of)*abs(gdot_slip(j))
|
plasticState(ph)%state(ns+j, of)*abs(gdot_slip_pos(j))
|
||||||
|
|
||||||
!* Dislocation dipole climb
|
!* Dislocation dipole climb
|
||||||
AtomicVolume = &
|
AtomicVolume = &
|
||||||
constitutive_dislokmc_CAtomicVolume(instance)*constitutive_dislokmc_burgersPerSlipSystem(j,instance)**(3.0_pReal)
|
constitutive_dislokmc_CAtomicVolume(instance)*constitutive_dislokmc_burgersPerSlipSystem(j,instance)**(3.0_pReal)
|
||||||
VacancyDiffusion = &
|
VacancyDiffusion = &
|
||||||
constitutive_dislokmc_D0(instance)*exp(-constitutive_dislokmc_Qsd(instance)/(kB*Temperature))
|
constitutive_dislokmc_D0(instance)*exp(-constitutive_dislokmc_Qsd(instance)/(kB*Temperature))
|
||||||
if (tau_slip(j) == 0.0_pReal) then
|
if (tau_slip_pos(j) == 0.0_pReal) then
|
||||||
DotRhoEdgeDipClimb(j) = 0.0_pReal
|
DotRhoEdgeDipClimb(j) = 0.0_pReal
|
||||||
else
|
else
|
||||||
ClimbVelocity(j) = &
|
ClimbVelocity(j) = &
|
||||||
|
@ -1623,7 +1627,7 @@ subroutine constitutive_dislokmc_dotState(Tstar_v,Temperature,ipc,ip,el)
|
||||||
DotRhoDipFormation(j)-DotRhoEdgeDipAnnihilation(j)-DotRhoEdgeDipClimb(j)
|
DotRhoDipFormation(j)-DotRhoEdgeDipAnnihilation(j)-DotRhoEdgeDipClimb(j)
|
||||||
|
|
||||||
!* Dotstate for accumulated shear due to slip
|
!* Dotstate for accumulated shear due to slip
|
||||||
plasticState(ph)%dotState(2_pInt*ns+j, of) = gdot_slip(j)
|
plasticState(ph)%dotState(2_pInt*ns+j, of) = gdot_slip_pos(j)
|
||||||
|
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
@ -1647,8 +1651,8 @@ subroutine constitutive_dislokmc_dotState(Tstar_v,Temperature,ipc,ip,el)
|
||||||
s1=lattice_fcc_twinNucleationSlipPair(1,index_myFamily+i)
|
s1=lattice_fcc_twinNucleationSlipPair(1,index_myFamily+i)
|
||||||
s2=lattice_fcc_twinNucleationSlipPair(2,index_myFamily+i)
|
s2=lattice_fcc_twinNucleationSlipPair(2,index_myFamily+i)
|
||||||
if (tau_twin(j) < constitutive_dislokmc_tau_r(j,instance)) then
|
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))+&
|
Ndot0=(abs(gdot_slip_pos(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)))/&
|
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))*&
|
(constitutive_dislokmc_L0(instance)*constitutive_dislokmc_burgersPerSlipSystem(j,instance))*&
|
||||||
(1.0_pReal-exp(-constitutive_dislokmc_VcrossSlip(instance)/(kB*Temperature)*&
|
(1.0_pReal-exp(-constitutive_dislokmc_VcrossSlip(instance)/(kB*Temperature)*&
|
||||||
(constitutive_dislokmc_tau_r(j,instance)-tau_twin(j))))
|
(constitutive_dislokmc_tau_r(j,instance)-tau_twin(j))))
|
||||||
|
@ -1818,7 +1822,7 @@ function constitutive_dislokmc_postResults(Tstar_v,Temperature,ipc,ip,el)
|
||||||
real(pReal) :: dvel_slip
|
real(pReal) :: dvel_slip
|
||||||
real(pReal) :: StressRatio_u,StressRatio_uminus1
|
real(pReal) :: StressRatio_u,StressRatio_uminus1
|
||||||
real(preal), dimension(constitutive_dislokmc_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: &
|
real(preal), dimension(constitutive_dislokmc_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: &
|
||||||
gdot_slip, vel_slip
|
gdot_slip_pos, vel_slip
|
||||||
real(pReal), dimension(3,3) :: eigVectors
|
real(pReal), dimension(3,3) :: eigVectors
|
||||||
real(pReal), dimension (3) :: eigValues
|
real(pReal), dimension (3) :: eigValues
|
||||||
logical :: error
|
logical :: error
|
||||||
|
@ -1930,36 +1934,6 @@ function constitutive_dislokmc_postResults(Tstar_v,Temperature,ipc,ip,el)
|
||||||
plasticState(ph)%state(5*ns+3*nt+j, of))
|
plasticState(ph)%state(5*ns+3*nt+j, of))
|
||||||
enddo; enddo
|
enddo; enddo
|
||||||
c = c + ns
|
c = c + ns
|
||||||
case (resolved_stress_shearband_ID)
|
|
||||||
do j = 1_pInt,6_pInt ! loop over all shearband families
|
|
||||||
constitutive_dislokmc_postResults(c+j) = dot_product(Tstar_v, &
|
|
||||||
constitutive_dislokmc_sbSv(1:6,j,ipc,ip,el))
|
|
||||||
enddo
|
|
||||||
c = c + 6_pInt
|
|
||||||
case (shear_rate_shearband_ID)
|
|
||||||
do j = 1_pInt,6_pInt ! loop over all shearbands
|
|
||||||
!* Resolved shear stress on shearband system
|
|
||||||
tau = dot_product(Tstar_v,constitutive_dislokmc_sbSv(1:6,j,ipc,ip,el))
|
|
||||||
!* Stress ratios
|
|
||||||
if (abs(tau) < tol_math_check) then
|
|
||||||
StressRatio_p = 0.0_pReal
|
|
||||||
StressRatio_pminus1 = 0.0_pReal
|
|
||||||
else
|
|
||||||
StressRatio_p = (abs(tau)/constitutive_dislokmc_sbResistance(instance))**&
|
|
||||||
constitutive_dislokmc_pShearBand(instance)
|
|
||||||
StressRatio_pminus1 = (abs(tau)/constitutive_dislokmc_sbResistance(instance))**&
|
|
||||||
(constitutive_dislokmc_pShearBand(instance)-1.0_pReal)
|
|
||||||
endif
|
|
||||||
!* Boltzmann ratio
|
|
||||||
BoltzmannRatio = constitutive_dislokmc_sbQedge(instance)/(kB*Temperature)
|
|
||||||
!* Initial shear rates
|
|
||||||
DotGamma0 = constitutive_dislokmc_sbVelocity(instance)
|
|
||||||
! Shear rate due to shear band
|
|
||||||
constitutive_dislokmc_postResults(c+j) = &
|
|
||||||
DotGamma0*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)**constitutive_dislokmc_qShearBand(instance))*&
|
|
||||||
sign(1.0_pReal,tau)
|
|
||||||
enddo
|
|
||||||
c = c + 6_pInt
|
|
||||||
case (twin_fraction_ID)
|
case (twin_fraction_ID)
|
||||||
constitutive_dislokmc_postResults(c+1_pInt:c+nt) = plasticState(ph)%state((3_pInt*ns+1_pInt):(3_pInt*ns+nt), of)
|
constitutive_dislokmc_postResults(c+1_pInt:c+nt) = plasticState(ph)%state((3_pInt*ns+1_pInt):(3_pInt*ns+nt), of)
|
||||||
c = c + nt
|
c = c + nt
|
||||||
|
@ -2001,13 +1975,13 @@ function constitutive_dislokmc_postResults(Tstar_v,Temperature,ipc,ip,el)
|
||||||
constitutive_dislokmc_v0PerSlipSystem(j,instance)
|
constitutive_dislokmc_v0PerSlipSystem(j,instance)
|
||||||
|
|
||||||
!* Shear rates due to slip
|
!* Shear rates due to slip
|
||||||
gdot_slip(j) = DotGamma0*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)**&
|
gdot_slip_pos(j) = DotGamma0*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)**&
|
||||||
constitutive_dislokmc_qPerSlipFamily(f,instance))*sign(1.0_pReal,tau) &
|
constitutive_dislokmc_qPerSlipFamily(f,instance))*sign(1.0_pReal,tau) &
|
||||||
* (1.0_pReal-constitutive_dislokmc_sPerSlipFamily(f,instance) &
|
* (1.0_pReal-constitutive_dislokmc_sPerSlipFamily(f,instance) &
|
||||||
* exp(-BoltzmannRatio*(1_pInt-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)) ) &
|
* exp(-BoltzmannRatio*(1_pInt-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)) ) &
|
||||||
* StressRatio_u
|
* StressRatio_u
|
||||||
else
|
else
|
||||||
gdot_slip(j) = 0.0_pReal
|
gdot_slip_pos(j) = 0.0_pReal
|
||||||
endif
|
endif
|
||||||
enddo;enddo
|
enddo;enddo
|
||||||
|
|
||||||
|
@ -2030,8 +2004,8 @@ function constitutive_dislokmc_postResults(Tstar_v,Temperature,ipc,ip,el)
|
||||||
s1=lattice_fcc_twinNucleationSlipPair(1,index_myFamily+i)
|
s1=lattice_fcc_twinNucleationSlipPair(1,index_myFamily+i)
|
||||||
s2=lattice_fcc_twinNucleationSlipPair(2,index_myFamily+i)
|
s2=lattice_fcc_twinNucleationSlipPair(2,index_myFamily+i)
|
||||||
if (tau < constitutive_dislokmc_tau_r(j,instance)) then
|
if (tau < constitutive_dislokmc_tau_r(j,instance)) then
|
||||||
Ndot0=(abs(gdot_slip(s1))*(plasticState(ph)%state(s2, of)+plasticState(ph)%state(ns+s2, of))+&
|
Ndot0=(abs(gdot_slip_pos(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)))/&
|
abs(gdot_slip_pos(s2))*(plasticState(ph)%state(s1, of)+plasticState(ph)%state(ns+s1, of)))/&
|
||||||
(constitutive_dislokmc_L0(instance)*&
|
(constitutive_dislokmc_L0(instance)*&
|
||||||
constitutive_dislokmc_burgersPerSlipSystem(j,instance))*&
|
constitutive_dislokmc_burgersPerSlipSystem(j,instance))*&
|
||||||
(1.0_pReal-exp(-constitutive_dislokmc_VcrossSlip(instance)/(kB*Temperature)*&
|
(1.0_pReal-exp(-constitutive_dislokmc_VcrossSlip(instance)/(kB*Temperature)*&
|
||||||
|
@ -2111,7 +2085,7 @@ function constitutive_dislokmc_postResults(Tstar_v,Temperature,ipc,ip,el)
|
||||||
* (1.0_pReal-constitutive_dislokmc_sPerSlipFamily(f,instance) &
|
* (1.0_pReal-constitutive_dislokmc_sPerSlipFamily(f,instance) &
|
||||||
* exp(-BoltzmannRatio*(1-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(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) &
|
* StressRatio_u * vel_slip(j) &
|
||||||
* sign(1.0_pReal,tau)
|
* sign(1.0_pReal,tau)
|
||||||
!* Derivatives of shear rates
|
!* Derivatives of shear rates
|
||||||
|
@ -2133,25 +2107,18 @@ function constitutive_dislokmc_postResults(Tstar_v,Temperature,ipc,ip,el)
|
||||||
|
|
||||||
|
|
||||||
else
|
else
|
||||||
gdot_slip(j) = 0.0_pReal
|
gdot_slip_pos(j) = 0.0_pReal
|
||||||
dgdot_dtauslip = 0.0_pReal
|
dgdot_dtauslip = 0.0_pReal
|
||||||
endif
|
endif
|
||||||
|
|
||||||
!* Stress exponent
|
!* Stress exponent
|
||||||
if (gdot_slip(j)==0.0_pReal) then
|
if (gdot_slip_pos(j)==0.0_pReal) then
|
||||||
constitutive_dislokmc_postResults(c+j) = 0.0_pReal
|
constitutive_dislokmc_postResults(c+j) = 0.0_pReal
|
||||||
else
|
else
|
||||||
constitutive_dislokmc_postResults(c+j) = (tau/gdot_slip(j))*dgdot_dtauslip
|
constitutive_dislokmc_postResults(c+j) = (tau/gdot_slip_pos(j))*dgdot_dtauslip
|
||||||
endif
|
endif
|
||||||
enddo ; enddo
|
enddo ; enddo
|
||||||
c = c + ns
|
c = c + ns
|
||||||
case (sb_eigenvalues_ID)
|
|
||||||
forall (j = 1_pInt:3_pInt) &
|
|
||||||
constitutive_dislokmc_postResults(c+j) = eigValues(j)
|
|
||||||
c = c + 3_pInt
|
|
||||||
case (sb_eigenvectors_ID)
|
|
||||||
constitutive_dislokmc_postResults(c+1_pInt:c+9_pInt) = reshape(eigVectors,[9])
|
|
||||||
c = c + 9_pInt
|
|
||||||
end select
|
end select
|
||||||
enddo
|
enddo
|
||||||
end function constitutive_dislokmc_postResults
|
end function constitutive_dislokmc_postResults
|
||||||
|
|
Loading…
Reference in New Issue