From 43095b1f1b8d91383f7e784268623cc83c4d2c61 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Thu, 22 Jan 2015 09:34:11 +0000 Subject: [PATCH] added threshold_stress_slip as output (got lost once upon a time) --- code/plastic_disloKMC.f90 | 1121 ++++++++++++++++++------------------ code/plastic_disloUCLA.f90 | 96 +-- code/plastic_dislotwin.f90 | 5 + 3 files changed, 573 insertions(+), 649 deletions(-) diff --git a/code/plastic_disloKMC.f90 b/code/plastic_disloKMC.f90 index 6f8077665..17e60242f 100644 --- a/code/plastic_disloKMC.f90 +++ b/code/plastic_disloKMC.f90 @@ -8,7 +8,7 @@ !> @brief material subroutine incoprorating dislocation and twinning physics !> @details to be done !-------------------------------------------------------------------------------------------------- -module plastic_dislokmc +module plastic_disloKMC use prec, only: & pReal, & pInt @@ -16,102 +16,102 @@ module plastic_dislokmc implicit none private integer(pInt), dimension(:), allocatable, public, protected :: & - plastic_dislokmc_sizePostResults !< cumulative size of post results + plastic_disloKMC_sizePostResults !< cumulative size of post results integer(pInt), dimension(:,:), allocatable, target, public :: & - plastic_dislokmc_sizePostResult !< size of each post result output + plastic_disloKMC_sizePostResult !< size of each post result output character(len=64), dimension(:,:), allocatable, target, public :: & - plastic_dislokmc_output !< name of each post result output + plastic_disloKMC_output !< name of each post result output character(len=12), dimension(3), parameter, private :: & - plastic_dislokmc_listBasicSlipStates = & + plastic_disloKMC_listBasicSlipStates = & ['rhoEdge ', 'rhoEdgeDip ', 'accshearslip'] character(len=12), dimension(2), parameter, private :: & - plastic_dislokmc_listBasicTwinStates = & + plastic_disloKMC_listBasicTwinStates = & ['twinFraction', 'accsheartwin'] character(len=17), dimension(4), parameter, private :: & - plastic_dislokmc_listDependentSlipStates = & + plastic_disloKMC_listDependentSlipStates = & ['invLambdaSlip ', 'invLambdaSlipTwin', 'meanFreePathSlip ', 'tauSlipThreshold '] character(len=16), dimension(4), parameter, private :: & - plastic_dislokmc_listDependentTwinStates = & + plastic_disloKMC_listDependentTwinStates = & ['invLambdaTwin ', 'meanFreePathTwin', 'tauTwinThreshold', 'twinVolume '] real(pReal), parameter, private :: & kB = 1.38e-23_pReal !< Boltzmann constant in J/Kelvin integer(pInt), dimension(:), allocatable, target, public :: & - plastic_dislokmc_Noutput !< number of outputs per instance of this plasticity + plastic_disloKMC_Noutput !< number of outputs per instance of this plasticity integer(pInt), dimension(:), allocatable, public, protected :: & - plastic_dislokmc_totalNslip, & !< total number of active slip systems for each instance - plastic_dislokmc_totalNtwin !< total number of active twin systems for each instance + plastic_disloKMC_totalNslip, & !< total number of active slip systems for each instance + plastic_disloKMC_totalNtwin !< total number of active twin systems for each instance integer(pInt), dimension(:,:), allocatable, private :: & - plastic_dislokmc_Nslip, & !< number of active slip systems for each family and instance - plastic_dislokmc_Ntwin !< number of active twin systems for each family and instance + plastic_disloKMC_Nslip, & !< number of active slip systems for each family and instance + plastic_disloKMC_Ntwin !< number of active twin systems for each family and instance real(pReal), dimension(:), allocatable, private :: & - plastic_dislokmc_CAtomicVolume, & !< atomic volume in Bugers vector unit - plastic_dislokmc_D0, & !< prefactor for self-diffusion coefficient - plastic_dislokmc_Qsd, & !< activation energy for dislocation climb - plastic_dislokmc_GrainSize, & !< grain size - plastic_dislokmc_MaxTwinFraction, & !< maximum allowed total twin volume fraction - plastic_dislokmc_CEdgeDipMinDistance, & !< - plastic_dislokmc_Cmfptwin, & !< - plastic_dislokmc_Cthresholdtwin, & !< - plastic_dislokmc_SolidSolutionStrength, & !< Strength due to elements in solid solution - plastic_dislokmc_L0, & !< Length of twin nuclei in Burgers vectors - plastic_dislokmc_xc, & !< critical distance for formation of twin nucleus - plastic_dislokmc_VcrossSlip, & !< cross slip volume - plastic_dislokmc_SFE_0K, & !< stacking fault energy at zero K - plastic_dislokmc_dSFE_dT, & !< temperature dependance of stacking fault energy - plastic_dislokmc_dipoleFormationFactor, & !< scaling factor for dipole formation: 0: off, 1: on. other values not useful - plastic_dislokmc_aTolRho, & !< absolute tolerance for integration of dislocation density - plastic_dislokmc_aTolTwinFrac !< absolute tolerance for integration of twin volume fraction + plastic_disloKMC_CAtomicVolume, & !< atomic volume in Bugers vector unit + plastic_disloKMC_D0, & !< prefactor for self-diffusion coefficient + plastic_disloKMC_Qsd, & !< activation energy for dislocation climb + plastic_disloKMC_GrainSize, & !< grain size + plastic_disloKMC_MaxTwinFraction, & !< maximum allowed total twin volume fraction + plastic_disloKMC_CEdgeDipMinDistance, & !< + plastic_disloKMC_Cmfptwin, & !< + plastic_disloKMC_Cthresholdtwin, & !< + plastic_disloKMC_SolidSolutionStrength, & !< Strength due to elements in solid solution + plastic_disloKMC_L0, & !< Length of twin nuclei in Burgers vectors + plastic_disloKMC_xc, & !< critical distance for formation of twin nucleus + plastic_disloKMC_VcrossSlip, & !< cross slip volume + plastic_disloKMC_SFE_0K, & !< stacking fault energy at zero K + plastic_disloKMC_dSFE_dT, & !< temperature dependance of stacking fault energy + plastic_disloKMC_dipoleFormationFactor, & !< scaling factor for dipole formation: 0: off, 1: on. other values not useful + plastic_disloKMC_aTolRho, & !< absolute tolerance for integration of dislocation density + plastic_disloKMC_aTolTwinFrac !< absolute tolerance for integration of twin volume fraction real(pReal), dimension(:,:,:,:), allocatable, private :: & - plastic_dislokmc_Ctwin66 !< twin elasticity matrix in Mandel notation for each instance + plastic_disloKMC_Ctwin66 !< twin elasticity matrix in Mandel notation for each instance real(pReal), dimension(:,:,:,:,:,:), allocatable, private :: & - plastic_dislokmc_Ctwin3333 !< twin elasticity matrix for each instance + plastic_disloKMC_Ctwin3333 !< twin elasticity matrix for each instance real(pReal), dimension(:,:), allocatable, private :: & - plastic_dislokmc_rhoEdge0, & !< initial edge dislocation density per slip system for each family and instance - plastic_dislokmc_rhoEdgeDip0, & !< initial edge dipole density per slip system for each family and instance - plastic_dislokmc_burgersPerSlipFamily, & !< absolute length of burgers vector [m] for each slip family and instance - plastic_dislokmc_burgersPerSlipSystem, & !< absolute length of burgers vector [m] for each slip system and instance - plastic_dislokmc_burgersPerTwinFamily, & !< absolute length of burgers vector [m] for each twin family and instance - plastic_dislokmc_burgersPerTwinSystem, & !< absolute length of burgers vector [m] for each twin system and instance - plastic_dislokmc_QedgePerSlipFamily, & !< activation energy for glide [J] for each slip family and instance - plastic_dislokmc_QedgePerSlipSystem, & !< activation energy for glide [J] for each slip system and instance - plastic_dislokmc_v0PerSlipFamily, & !< dislocation velocity prefactor [m/s] for each family and instance - plastic_dislokmc_v0PerSlipSystem, & !< dislocation velocity prefactor [m/s] for each slip system and instance - plastic_dislokmc_tau_peierlsPerSlipFamily, & !< Peierls stress [Pa] for each family and instance - plastic_dislokmc_Ndot0PerTwinFamily, & !< twin nucleation rate [1/m³s] for each twin family and instance - plastic_dislokmc_Ndot0PerTwinSystem, & !< twin nucleation rate [1/m³s] for each twin system and instance - plastic_dislokmc_tau_r, & !< stress to bring partial close together for each twin system and instance - plastic_dislokmc_twinsizePerTwinFamily, & !< twin thickness [m] for each twin family and instance - plastic_dislokmc_twinsizePerTwinSystem, & !< twin thickness [m] for each twin system and instance - plastic_dislokmc_CLambdaSlipPerSlipFamily, & !< Adj. parameter for distance between 2 forest dislocations for each slip family and instance - plastic_dislokmc_CLambdaSlipPerSlipSystem, & !< Adj. parameter for distance between 2 forest dislocations for each slip system and instance - plastic_dislokmc_interaction_SlipSlip, & !< coefficients for slip-slip interaction for each interaction type and instance - plastic_dislokmc_interaction_SlipTwin, & !< coefficients for slip-twin interaction for each interaction type and instance - plastic_dislokmc_interaction_TwinSlip, & !< coefficients for twin-slip interaction for each interaction type and instance - plastic_dislokmc_interaction_TwinTwin, & !< coefficients for twin-twin interaction for each interaction type and instance - plastic_dislokmc_pPerSlipFamily, & !< p-exponent in glide velocity - plastic_dislokmc_qPerSlipFamily, & !< q-exponent in glide velocity - plastic_dislokmc_uPerSlipFamily, & !< u-exponent in glide velocity - plastic_dislokmc_sPerSlipFamily, & !< self-hardening in glide velocity - plastic_dislokmc_rPerTwinFamily, & !< r-exponent in twin nucleation rate - plastic_dislokmc_nonSchmidCoeff !< non-Schmid coefficients (bcc) + plastic_disloKMC_rhoEdge0, & !< initial edge dislocation density per slip system for each family and instance + plastic_disloKMC_rhoEdgeDip0, & !< initial edge dipole density per slip system for each family and instance + plastic_disloKMC_burgersPerSlipFamily, & !< absolute length of burgers vector [m] for each slip family and instance + plastic_disloKMC_burgersPerSlipSystem, & !< absolute length of burgers vector [m] for each slip system and instance + plastic_disloKMC_burgersPerTwinFamily, & !< absolute length of burgers vector [m] for each twin family and instance + plastic_disloKMC_burgersPerTwinSystem, & !< absolute length of burgers vector [m] for each twin system and instance + plastic_disloKMC_QedgePerSlipFamily, & !< activation energy for glide [J] for each slip family and instance + plastic_disloKMC_QedgePerSlipSystem, & !< activation energy for glide [J] for each slip system and instance + plastic_disloKMC_v0PerSlipFamily, & !< dislocation velocity prefactor [m/s] for each family and instance + plastic_disloKMC_v0PerSlipSystem, & !< dislocation velocity prefactor [m/s] for each slip system and instance + plastic_disloKMC_tau_peierlsPerSlipFamily, & !< Peierls stress [Pa] for each family and instance + plastic_disloKMC_Ndot0PerTwinFamily, & !< twin nucleation rate [1/m³s] for each twin family and instance + plastic_disloKMC_Ndot0PerTwinSystem, & !< twin nucleation rate [1/m³s] for each twin system and instance + plastic_disloKMC_tau_r, & !< stress to bring partial close together for each twin system and instance + plastic_disloKMC_twinsizePerTwinFamily, & !< twin thickness [m] for each twin family and instance + plastic_disloKMC_twinsizePerTwinSystem, & !< twin thickness [m] for each twin system and instance + plastic_disloKMC_CLambdaSlipPerSlipFamily, & !< Adj. parameter for distance between 2 forest dislocations for each slip family and instance + plastic_disloKMC_CLambdaSlipPerSlipSystem, & !< Adj. parameter for distance between 2 forest dislocations for each slip system and instance + plastic_disloKMC_interaction_SlipSlip, & !< coefficients for slip-slip interaction for each interaction type and instance + plastic_disloKMC_interaction_SlipTwin, & !< coefficients for slip-twin interaction for each interaction type and instance + plastic_disloKMC_interaction_TwinSlip, & !< coefficients for twin-slip interaction for each interaction type and instance + plastic_disloKMC_interaction_TwinTwin, & !< coefficients for twin-twin interaction for each interaction type and instance + plastic_disloKMC_pPerSlipFamily, & !< p-exponent in glide velocity + plastic_disloKMC_qPerSlipFamily, & !< q-exponent in glide velocity + plastic_disloKMC_uPerSlipFamily, & !< u-exponent in glide velocity + plastic_disloKMC_sPerSlipFamily, & !< self-hardening in glide velocity + plastic_disloKMC_rPerTwinFamily, & !< r-exponent in twin nucleation rate + plastic_disloKMC_nonSchmidCoeff !< non-Schmid coefficients (bcc) real(pReal), dimension(:,:,:), allocatable, private :: & - plastic_dislokmc_interactionMatrix_SlipSlip, & !< interaction matrix of the different slip systems for each instance - plastic_dislokmc_interactionMatrix_SlipTwin, & !< interaction matrix of slip systems with twin systems for each instance - plastic_dislokmc_interactionMatrix_TwinSlip, & !< interaction matrix of twin systems with slip systems for each instance - plastic_dislokmc_interactionMatrix_TwinTwin, & !< interaction matrix of the different twin systems for each instance - plastic_dislokmc_forestProjectionEdge !< matrix of forest projections of edge dislocations for each instance + plastic_disloKMC_interactionMatrix_SlipSlip, & !< interaction matrix of the different slip systems for each instance + plastic_disloKMC_interactionMatrix_SlipTwin, & !< interaction matrix of slip systems with twin systems for each instance + plastic_disloKMC_interactionMatrix_TwinSlip, & !< interaction matrix of twin systems with slip systems for each instance + plastic_disloKMC_interactionMatrix_TwinTwin, & !< interaction matrix of the different twin systems for each instance + plastic_disloKMC_forestProjectionEdge !< matrix of forest projections of edge dislocations for each instance enum, bind(c) enumerator :: undefined_ID, & @@ -132,19 +132,19 @@ module plastic_dislokmc threshold_stress_twin_ID end enum integer(kind(undefined_ID)), dimension(:,:), allocatable, private :: & - plastic_dislokmc_outputID !< ID of each post result output + plastic_disloKMC_outputID !< ID of each post result output public :: & - plastic_dislokmc_init, & - plastic_dislokmc_homogenizedC, & - plastic_dislokmc_microstructure, & - plastic_dislokmc_LpAndItsTangent, & - plastic_dislokmc_dotState, & - plastic_dislokmc_postResults + plastic_disloKMC_init, & + plastic_disloKMC_homogenizedC, & + plastic_disloKMC_microstructure, & + plastic_disloKMC_LpAndItsTangent, & + plastic_disloKMC_dotState, & + plastic_disloKMC_postResults private :: & - plastic_dislokmc_stateInit, & - plastic_dislokmc_aTolState + plastic_disloKMC_stateInit, & + plastic_disloKMC_aTolState contains @@ -153,7 +153,7 @@ contains !> @brief module initialization !> @details reads in material parameters, allocates arrays, and does sanity checks !-------------------------------------------------------------------------------------------------- -subroutine plastic_dislokmc_init(fileUnit) +subroutine plastic_disloKMC_init(fileUnit) use, intrinsic :: iso_fortran_env ! to get compiler_version and compiler_options (at least for gfortran 4.6 at the moment) use debug, only: & debug_level,& @@ -222,55 +222,55 @@ subroutine plastic_dislokmc_init(fileUnit) if (iand(debug_level(debug_constitutive),debug_levelBasic) /= 0_pInt) & write(6,'(a16,1x,i5,/)') '# instances:',maxNinstance - allocate(plastic_dislokmc_sizePostResults(maxNinstance), source=0_pInt) - allocate(plastic_dislokmc_sizePostResult(maxval(phase_Noutput),maxNinstance),source=0_pInt) - allocate(plastic_dislokmc_output(maxval(phase_Noutput),maxNinstance)) - plastic_dislokmc_output = '' - allocate(plastic_dislokmc_outputID(maxval(phase_Noutput),maxNinstance), source=undefined_ID) - allocate(plastic_dislokmc_Noutput(maxNinstance), source=0_pInt) - allocate(plastic_dislokmc_Nslip(lattice_maxNslipFamily,maxNinstance), source=0_pInt) - allocate(plastic_dislokmc_Ntwin(lattice_maxNtwinFamily,maxNinstance), source=0_pInt) - allocate(plastic_dislokmc_totalNslip(maxNinstance), source=0_pInt) - allocate(plastic_dislokmc_totalNtwin(maxNinstance), source=0_pInt) - allocate(plastic_dislokmc_CAtomicVolume(maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_D0(maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_Qsd(maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_GrainSize(maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_MaxTwinFraction(maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_CEdgeDipMinDistance(maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_Cmfptwin(maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_Cthresholdtwin(maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_SolidSolutionStrength(maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_L0(maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_xc(maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_VcrossSlip(maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_aTolRho(maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_aTolTwinFrac(maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_SFE_0K(maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_dSFE_dT(maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_dipoleFormationFactor(maxNinstance), source=1.0_pReal) !should be on by default - allocate(plastic_dislokmc_rhoEdge0(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_rhoEdgeDip0(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_burgersPerSlipFamily(lattice_maxNslipFamily,maxNinstance),source=0.0_pReal) - allocate(plastic_dislokmc_burgersPerTwinFamily(lattice_maxNtwinFamily,maxNinstance),source=0.0_pReal) - allocate(plastic_dislokmc_QedgePerSlipFamily(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_v0PerSlipFamily(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_tau_peierlsPerSlipFamily(lattice_maxNslipFamily,maxNinstance), & + allocate(plastic_disloKMC_sizePostResults(maxNinstance), source=0_pInt) + allocate(plastic_disloKMC_sizePostResult(maxval(phase_Noutput),maxNinstance),source=0_pInt) + allocate(plastic_disloKMC_output(maxval(phase_Noutput),maxNinstance)) + plastic_disloKMC_output = '' + allocate(plastic_disloKMC_outputID(maxval(phase_Noutput),maxNinstance), source=undefined_ID) + allocate(plastic_disloKMC_Noutput(maxNinstance), source=0_pInt) + allocate(plastic_disloKMC_Nslip(lattice_maxNslipFamily,maxNinstance), source=0_pInt) + allocate(plastic_disloKMC_Ntwin(lattice_maxNtwinFamily,maxNinstance), source=0_pInt) + allocate(plastic_disloKMC_totalNslip(maxNinstance), source=0_pInt) + allocate(plastic_disloKMC_totalNtwin(maxNinstance), source=0_pInt) + allocate(plastic_disloKMC_CAtomicVolume(maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_D0(maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_Qsd(maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_GrainSize(maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_MaxTwinFraction(maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_CEdgeDipMinDistance(maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_Cmfptwin(maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_Cthresholdtwin(maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_SolidSolutionStrength(maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_L0(maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_xc(maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_VcrossSlip(maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_aTolRho(maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_aTolTwinFrac(maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_SFE_0K(maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_dSFE_dT(maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_dipoleFormationFactor(maxNinstance), source=1.0_pReal) !should be on by default + allocate(plastic_disloKMC_rhoEdge0(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_rhoEdgeDip0(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_burgersPerSlipFamily(lattice_maxNslipFamily,maxNinstance),source=0.0_pReal) + allocate(plastic_disloKMC_burgersPerTwinFamily(lattice_maxNtwinFamily,maxNinstance),source=0.0_pReal) + allocate(plastic_disloKMC_QedgePerSlipFamily(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_v0PerSlipFamily(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_tau_peierlsPerSlipFamily(lattice_maxNslipFamily,maxNinstance), & source=0.0_pReal) - allocate(plastic_dislokmc_pPerSlipFamily(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_qPerSlipFamily(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_uPerSlipFamily(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_sPerSlipFamily(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_Ndot0PerTwinFamily(lattice_maxNtwinFamily,maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_twinsizePerTwinFamily(lattice_maxNtwinFamily,maxNinstance),source=0.0_pReal) - allocate(plastic_dislokmc_CLambdaSlipPerSlipFamily(lattice_maxNslipFamily,maxNinstance), & + allocate(plastic_disloKMC_pPerSlipFamily(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_qPerSlipFamily(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_uPerSlipFamily(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_sPerSlipFamily(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_Ndot0PerTwinFamily(lattice_maxNtwinFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_twinsizePerTwinFamily(lattice_maxNtwinFamily,maxNinstance),source=0.0_pReal) + allocate(plastic_disloKMC_CLambdaSlipPerSlipFamily(lattice_maxNslipFamily,maxNinstance), & source=0.0_pReal) - allocate(plastic_dislokmc_rPerTwinFamily(lattice_maxNtwinFamily,maxNinstance),source=0.0_pReal) - allocate(plastic_dislokmc_interaction_SlipSlip(lattice_maxNinteraction,maxNinstance),source=0.0_pReal) - allocate(plastic_dislokmc_interaction_SlipTwin(lattice_maxNinteraction,maxNinstance),source=0.0_pReal) - allocate(plastic_dislokmc_interaction_TwinSlip(lattice_maxNinteraction,maxNinstance),source=0.0_pReal) - allocate(plastic_dislokmc_interaction_TwinTwin(lattice_maxNinteraction,maxNinstance),source=0.0_pReal) - allocate(plastic_dislokmc_nonSchmidCoeff(lattice_maxNnonSchmid,maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_rPerTwinFamily(lattice_maxNtwinFamily,maxNinstance),source=0.0_pReal) + allocate(plastic_disloKMC_interaction_SlipSlip(lattice_maxNinteraction,maxNinstance),source=0.0_pReal) + allocate(plastic_disloKMC_interaction_SlipTwin(lattice_maxNinteraction,maxNinstance),source=0.0_pReal) + allocate(plastic_disloKMC_interaction_TwinSlip(lattice_maxNinteraction,maxNinstance),source=0.0_pReal) + allocate(plastic_disloKMC_interaction_TwinTwin(lattice_maxNinteraction,maxNinstance),source=0.0_pReal) + allocate(plastic_disloKMC_nonSchmidCoeff(lattice_maxNnonSchmid,maxNinstance), source=0.0_pReal) rewind(fileUnit) @@ -311,74 +311,79 @@ subroutine plastic_dislokmc_init(fileUnit) case ('(output)') select case(IO_lc(IO_stringValue(line,positions,2_pInt))) case ('edge_density') - plastic_dislokmc_Noutput(instance) = plastic_dislokmc_Noutput(instance) + 1_pInt - plastic_dislokmc_outputID(plastic_dislokmc_Noutput(instance),instance) = edge_density_ID - plastic_dislokmc_output(plastic_dislokmc_Noutput(instance),instance) = & + plastic_disloKMC_Noutput(instance) = plastic_disloKMC_Noutput(instance) + 1_pInt + plastic_disloKMC_outputID(plastic_disloKMC_Noutput(instance),instance) = edge_density_ID + plastic_disloKMC_output(plastic_disloKMC_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('dipole_density') - plastic_dislokmc_Noutput(instance) = plastic_dislokmc_Noutput(instance) + 1_pInt - plastic_dislokmc_outputID(plastic_dislokmc_Noutput(instance),instance) = dipole_density_ID - plastic_dislokmc_output(plastic_dislokmc_Noutput(instance),instance) = & + plastic_disloKMC_Noutput(instance) = plastic_disloKMC_Noutput(instance) + 1_pInt + plastic_disloKMC_outputID(plastic_disloKMC_Noutput(instance),instance) = dipole_density_ID + plastic_disloKMC_output(plastic_disloKMC_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('shear_rate_slip') - plastic_dislokmc_Noutput(instance) = plastic_dislokmc_Noutput(instance) + 1_pInt - plastic_dislokmc_outputID(plastic_dislokmc_Noutput(instance),instance) = shear_rate_slip_ID - plastic_dislokmc_output(plastic_dislokmc_Noutput(instance),instance) = & + plastic_disloKMC_Noutput(instance) = plastic_disloKMC_Noutput(instance) + 1_pInt + plastic_disloKMC_outputID(plastic_disloKMC_Noutput(instance),instance) = shear_rate_slip_ID + plastic_disloKMC_output(plastic_disloKMC_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('accumulated_shear_slip') - plastic_dislokmc_Noutput(instance) = plastic_dislokmc_Noutput(instance) + 1_pInt - plastic_dislokmc_outputID(plastic_dislokmc_Noutput(instance),instance) = accumulated_shear_slip_ID - plastic_dislokmc_output(plastic_dislokmc_Noutput(instance),instance) = & + plastic_disloKMC_Noutput(instance) = plastic_disloKMC_Noutput(instance) + 1_pInt + plastic_disloKMC_outputID(plastic_disloKMC_Noutput(instance),instance) = accumulated_shear_slip_ID + plastic_disloKMC_output(plastic_disloKMC_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('mfp_slip') - plastic_dislokmc_Noutput(instance) = plastic_dislokmc_Noutput(instance) + 1_pInt - plastic_dislokmc_outputID(plastic_dislokmc_Noutput(instance),instance) = mfp_slip_ID - plastic_dislokmc_output(plastic_dislokmc_Noutput(instance),instance) = & + plastic_disloKMC_Noutput(instance) = plastic_disloKMC_Noutput(instance) + 1_pInt + plastic_disloKMC_outputID(plastic_disloKMC_Noutput(instance),instance) = mfp_slip_ID + plastic_disloKMC_output(plastic_disloKMC_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('resolved_stress_slip') - plastic_dislokmc_Noutput(instance) = plastic_dislokmc_Noutput(instance) + 1_pInt - plastic_dislokmc_outputID(plastic_dislokmc_Noutput(instance),instance) = resolved_stress_slip_ID - plastic_dislokmc_output(plastic_dislokmc_Noutput(instance),instance) = & + plastic_disloKMC_Noutput(instance) = plastic_disloKMC_Noutput(instance) + 1_pInt + plastic_disloKMC_outputID(plastic_disloKMC_Noutput(instance),instance) = resolved_stress_slip_ID + plastic_disloKMC_output(plastic_disloKMC_Noutput(instance),instance) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) + case ('threshold_stress_slip') + plastic_disloKMC_Noutput(instance) = plastic_disloKMC_Noutput(instance) + 1_pInt + plastic_disloKMC_outputID(plastic_disloKMC_Noutput(instance),instance) = threshold_stress_slip_ID + plastic_disloKMC_output(plastic_disloKMC_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('edge_dipole_distance') - plastic_dislokmc_Noutput(instance) = plastic_dislokmc_Noutput(instance) + 1_pInt - plastic_dislokmc_outputID(plastic_dislokmc_Noutput(instance),instance) = edge_dipole_distance_ID - plastic_dislokmc_output(plastic_dislokmc_Noutput(instance),instance) = & + plastic_disloKMC_Noutput(instance) = plastic_disloKMC_Noutput(instance) + 1_pInt + plastic_disloKMC_outputID(plastic_disloKMC_Noutput(instance),instance) = edge_dipole_distance_ID + plastic_disloKMC_output(plastic_disloKMC_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('stress_exponent') - plastic_dislokmc_Noutput(instance) = plastic_dislokmc_Noutput(instance) + 1_pInt - plastic_dislokmc_outputID(plastic_dislokmc_Noutput(instance),instance) = stress_exponent_ID - plastic_dislokmc_output(plastic_dislokmc_Noutput(instance),instance) = & + plastic_disloKMC_Noutput(instance) = plastic_disloKMC_Noutput(instance) + 1_pInt + plastic_disloKMC_outputID(plastic_disloKMC_Noutput(instance),instance) = stress_exponent_ID + plastic_disloKMC_output(plastic_disloKMC_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('twin_fraction') - plastic_dislokmc_Noutput(instance) = plastic_dislokmc_Noutput(instance) + 1_pInt - plastic_dislokmc_outputID(plastic_dislokmc_Noutput(instance),instance) = twin_fraction_ID - plastic_dislokmc_output(plastic_dislokmc_Noutput(instance),instance) = & + plastic_disloKMC_Noutput(instance) = plastic_disloKMC_Noutput(instance) + 1_pInt + plastic_disloKMC_outputID(plastic_disloKMC_Noutput(instance),instance) = twin_fraction_ID + plastic_disloKMC_output(plastic_disloKMC_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('shear_rate_twin') - plastic_dislokmc_Noutput(instance) = plastic_dislokmc_Noutput(instance) + 1_pInt - plastic_dislokmc_outputID(plastic_dislokmc_Noutput(instance),instance) = shear_rate_twin_ID - plastic_dislokmc_output(plastic_dislokmc_Noutput(instance),instance) = & + plastic_disloKMC_Noutput(instance) = plastic_disloKMC_Noutput(instance) + 1_pInt + plastic_disloKMC_outputID(plastic_disloKMC_Noutput(instance),instance) = shear_rate_twin_ID + plastic_disloKMC_output(plastic_disloKMC_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('accumulated_shear_twin') - plastic_dislokmc_Noutput(instance) = plastic_dislokmc_Noutput(instance) + 1_pInt - plastic_dislokmc_outputID(plastic_dislokmc_Noutput(instance),instance) = accumulated_shear_twin_ID - plastic_dislokmc_output(plastic_dislokmc_Noutput(instance),instance) = & + plastic_disloKMC_Noutput(instance) = plastic_disloKMC_Noutput(instance) + 1_pInt + plastic_disloKMC_outputID(plastic_disloKMC_Noutput(instance),instance) = accumulated_shear_twin_ID + plastic_disloKMC_output(plastic_disloKMC_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('mfp_twin') - plastic_dislokmc_Noutput(instance) = plastic_dislokmc_Noutput(instance) + 1_pInt - plastic_dislokmc_outputID(plastic_dislokmc_Noutput(instance),instance) = mfp_twin_ID - plastic_dislokmc_output(plastic_dislokmc_Noutput(instance),instance) = & + plastic_disloKMC_Noutput(instance) = plastic_disloKMC_Noutput(instance) + 1_pInt + plastic_disloKMC_outputID(plastic_disloKMC_Noutput(instance),instance) = mfp_twin_ID + plastic_disloKMC_output(plastic_disloKMC_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('resolved_stress_twin') - plastic_dislokmc_Noutput(instance) = plastic_dislokmc_Noutput(instance) + 1_pInt - plastic_dislokmc_outputID(plastic_dislokmc_Noutput(instance),instance) = resolved_stress_twin_ID - plastic_dislokmc_output(plastic_dislokmc_Noutput(instance),instance) = & + plastic_disloKMC_Noutput(instance) = plastic_disloKMC_Noutput(instance) + 1_pInt + plastic_disloKMC_outputID(plastic_disloKMC_Noutput(instance),instance) = resolved_stress_twin_ID + plastic_disloKMC_output(plastic_disloKMC_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('threshold_stress_twin') - plastic_dislokmc_Noutput(instance) = plastic_dislokmc_Noutput(instance) + 1_pInt - plastic_dislokmc_outputID(plastic_dislokmc_Noutput(instance),instance) = threshold_stress_twin_ID - plastic_dislokmc_output(plastic_dislokmc_Noutput(instance),instance) = & + plastic_disloKMC_Noutput(instance) = plastic_disloKMC_Noutput(instance) + 1_pInt + plastic_disloKMC_outputID(plastic_disloKMC_Noutput(instance),instance) = threshold_stress_twin_ID + plastic_disloKMC_output(plastic_disloKMC_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) end select !-------------------------------------------------------------------------------------------------- @@ -390,7 +395,7 @@ subroutine plastic_dislokmc_init(fileUnit) call IO_error(150_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOKMC_label//')') Nchunks_SlipFamilies = positions(1) - 1_pInt do j = 1_pInt, Nchunks_SlipFamilies - plastic_dislokmc_Nslip(j,instance) = IO_intValue(line,positions,1_pInt+j) + plastic_disloKMC_Nslip(j,instance) = IO_intValue(line,positions,1_pInt+j) enddo case ('rhoedge0','rhoedgedip0','slipburgers','qedge','v0','clambdaslip','tau_peierls','p_slip','q_slip',& 'u_slip','s_slip') @@ -399,29 +404,29 @@ subroutine plastic_dislokmc_init(fileUnit) enddo select case(tag) case ('rhoedge0') - plastic_dislokmc_rhoEdge0(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) + plastic_disloKMC_rhoEdge0(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) case ('rhoedgedip0') - plastic_dislokmc_rhoEdgeDip0(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) + plastic_disloKMC_rhoEdgeDip0(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) case ('slipburgers') - plastic_dislokmc_burgersPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) + plastic_disloKMC_burgersPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) case ('qedge') - plastic_dislokmc_QedgePerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) + plastic_disloKMC_QedgePerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) case ('v0') - plastic_dislokmc_v0PerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) + plastic_disloKMC_v0PerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) case ('clambdaslip') - plastic_dislokmc_CLambdaSlipPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) + plastic_disloKMC_CLambdaSlipPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) case ('tau_peierls') if (lattice_structure(phase) /= LATTICE_bcc_ID) & call IO_warning(42_pInt,ext_msg=trim(tag)//' for non-bcc ('//PLASTICITY_DISLOKMC_label//')') - plastic_dislokmc_tau_peierlsPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) + plastic_disloKMC_tau_peierlsPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) case ('p_slip') - plastic_dislokmc_pPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) + plastic_disloKMC_pPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) case ('q_slip') - plastic_dislokmc_qPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) + plastic_disloKMC_qPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) case ('u_slip') - plastic_dislokmc_uPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) + plastic_disloKMC_uPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) case ('s_slip') - plastic_dislokmc_sPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) + plastic_disloKMC_sPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) end select !-------------------------------------------------------------------------------------------------- ! parameters depending on slip number of twin families @@ -432,7 +437,7 @@ subroutine plastic_dislokmc_init(fileUnit) call IO_error(150_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOKMC_label//')') Nchunks_TwinFamilies = positions(1) - 1_pInt do j = 1_pInt, Nchunks_TwinFamilies - plastic_dislokmc_Ntwin(j,instance) = IO_intValue(line,positions,1_pInt+j) + plastic_disloKMC_Ntwin(j,instance) = IO_intValue(line,positions,1_pInt+j) enddo case ('ndot0','twinsize','twinburgers','r_twin') do j = 1_pInt, Nchunks_TwinFamilies @@ -442,13 +447,13 @@ subroutine plastic_dislokmc_init(fileUnit) case ('ndot0') if (lattice_structure(phase) == LATTICE_fcc_ID) & call IO_warning(42_pInt,ext_msg=trim(tag)//' for fcc ('//PLASTICITY_DISLOKMC_label//')') - plastic_dislokmc_Ndot0PerTwinFamily(1:Nchunks_TwinFamilies,instance) = tempPerTwin(1:Nchunks_TwinFamilies) + plastic_disloKMC_Ndot0PerTwinFamily(1:Nchunks_TwinFamilies,instance) = tempPerTwin(1:Nchunks_TwinFamilies) case ('twinsize') - plastic_dislokmc_twinsizePerTwinFamily(1:Nchunks_TwinFamilies,instance) = tempPerTwin(1:Nchunks_TwinFamilies) + plastic_disloKMC_twinsizePerTwinFamily(1:Nchunks_TwinFamilies,instance) = tempPerTwin(1:Nchunks_TwinFamilies) case ('twinburgers') - plastic_dislokmc_burgersPerTwinFamily(1:Nchunks_TwinFamilies,instance) = tempPerTwin(1:Nchunks_TwinFamilies) + plastic_disloKMC_burgersPerTwinFamily(1:Nchunks_TwinFamilies,instance) = tempPerTwin(1:Nchunks_TwinFamilies) case ('r_twin') - plastic_dislokmc_rPerTwinFamily(1:Nchunks_TwinFamilies,instance) = tempPerTwin(1:Nchunks_TwinFamilies) + plastic_disloKMC_rPerTwinFamily(1:Nchunks_TwinFamilies,instance) = tempPerTwin(1:Nchunks_TwinFamilies) end select !-------------------------------------------------------------------------------------------------- ! parameters depending on number of interactions @@ -456,173 +461,173 @@ subroutine plastic_dislokmc_init(fileUnit) if (positions(1) < 1_pInt + Nchunks_SlipSlip) & call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOKMC_label//')') do j = 1_pInt, Nchunks_SlipSlip - plastic_dislokmc_interaction_SlipSlip(j,instance) = IO_floatValue(line,positions,1_pInt+j) + plastic_disloKMC_interaction_SlipSlip(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('interaction_sliptwin','interactionsliptwin') if (positions(1) < 1_pInt + Nchunks_SlipTwin) & call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOKMC_label//')') do j = 1_pInt, Nchunks_SlipTwin - plastic_dislokmc_interaction_SlipTwin(j,instance) = IO_floatValue(line,positions,1_pInt+j) + plastic_disloKMC_interaction_SlipTwin(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('interaction_twinslip','interactiontwinslip') if (positions(1) < 1_pInt + Nchunks_TwinSlip) & call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOKMC_label//')') do j = 1_pInt, Nchunks_TwinSlip - plastic_dislokmc_interaction_TwinSlip(j,instance) = IO_floatValue(line,positions,1_pInt+j) + plastic_disloKMC_interaction_TwinSlip(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('interaction_twintwin','interactiontwintwin') if (positions(1) < 1_pInt + Nchunks_TwinTwin) & call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOKMC_label//')') do j = 1_pInt, Nchunks_TwinTwin - plastic_dislokmc_interaction_TwinTwin(j,instance) = IO_floatValue(line,positions,1_pInt+j) + plastic_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 - plastic_dislokmc_nonSchmidCoeff(j,instance) = IO_floatValue(line,positions,1_pInt+j) + plastic_disloKMC_nonSchmidCoeff(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo !-------------------------------------------------------------------------------------------------- ! parameters independent of number of slip/twin systems case ('grainsize') - plastic_dislokmc_GrainSize(instance) = IO_floatValue(line,positions,2_pInt) + plastic_disloKMC_GrainSize(instance) = IO_floatValue(line,positions,2_pInt) case ('maxtwinfraction') - plastic_dislokmc_MaxTwinFraction(instance) = IO_floatValue(line,positions,2_pInt) + plastic_disloKMC_MaxTwinFraction(instance) = IO_floatValue(line,positions,2_pInt) case ('d0') - plastic_dislokmc_D0(instance) = IO_floatValue(line,positions,2_pInt) + plastic_disloKMC_D0(instance) = IO_floatValue(line,positions,2_pInt) case ('qsd') - plastic_dislokmc_Qsd(instance) = IO_floatValue(line,positions,2_pInt) + plastic_disloKMC_Qsd(instance) = IO_floatValue(line,positions,2_pInt) case ('atol_rho') - plastic_dislokmc_aTolRho(instance) = IO_floatValue(line,positions,2_pInt) + plastic_disloKMC_aTolRho(instance) = IO_floatValue(line,positions,2_pInt) case ('atol_twinfrac') - plastic_dislokmc_aTolTwinFrac(instance) = IO_floatValue(line,positions,2_pInt) + plastic_disloKMC_aTolTwinFrac(instance) = IO_floatValue(line,positions,2_pInt) case ('cmfptwin') - plastic_dislokmc_Cmfptwin(instance) = IO_floatValue(line,positions,2_pInt) + plastic_disloKMC_Cmfptwin(instance) = IO_floatValue(line,positions,2_pInt) case ('cthresholdtwin') - plastic_dislokmc_Cthresholdtwin(instance) = IO_floatValue(line,positions,2_pInt) + plastic_disloKMC_Cthresholdtwin(instance) = IO_floatValue(line,positions,2_pInt) case ('solidsolutionstrength') - plastic_dislokmc_SolidSolutionStrength(instance) = IO_floatValue(line,positions,2_pInt) + plastic_disloKMC_SolidSolutionStrength(instance) = IO_floatValue(line,positions,2_pInt) case ('l0') - plastic_dislokmc_L0(instance) = IO_floatValue(line,positions,2_pInt) + plastic_disloKMC_L0(instance) = IO_floatValue(line,positions,2_pInt) case ('xc') - plastic_dislokmc_xc(instance) = IO_floatValue(line,positions,2_pInt) + plastic_disloKMC_xc(instance) = IO_floatValue(line,positions,2_pInt) case ('vcrossslip') - plastic_dislokmc_VcrossSlip(instance) = IO_floatValue(line,positions,2_pInt) + plastic_disloKMC_VcrossSlip(instance) = IO_floatValue(line,positions,2_pInt) case ('cedgedipmindistance') - plastic_dislokmc_CEdgeDipMinDistance(instance) = IO_floatValue(line,positions,2_pInt) + plastic_disloKMC_CEdgeDipMinDistance(instance) = IO_floatValue(line,positions,2_pInt) case ('catomicvolume') - plastic_dislokmc_CAtomicVolume(instance) = IO_floatValue(line,positions,2_pInt) + plastic_disloKMC_CAtomicVolume(instance) = IO_floatValue(line,positions,2_pInt) case ('sfe_0k') - plastic_dislokmc_SFE_0K(instance) = IO_floatValue(line,positions,2_pInt) + plastic_disloKMC_SFE_0K(instance) = IO_floatValue(line,positions,2_pInt) case ('dsfe_dt') - plastic_dislokmc_dSFE_dT(instance) = IO_floatValue(line,positions,2_pInt) + plastic_disloKMC_dSFE_dT(instance) = IO_floatValue(line,positions,2_pInt) case ('dipoleformationfactor') - plastic_dislokmc_dipoleFormationFactor(instance) = IO_floatValue(line,positions,2_pInt) + plastic_disloKMC_dipoleFormationFactor(instance) = IO_floatValue(line,positions,2_pInt) end select endif; endif enddo parsingFile sanityChecks: do phase = 1_pInt, size(phase_plasticity) - myPhase: if (phase_plasticity(phase) == PLASTICITY_dislokmc_ID) then + myPhase: if (phase_plasticity(phase) == PLASTICITY_disloKMC_ID) then instance = phase_plasticityInstance(phase) - if (sum(plastic_dislokmc_Nslip(:,instance)) < 0_pInt) & + if (sum(plastic_disloKMC_Nslip(:,instance)) < 0_pInt) & call IO_error(211_pInt,el=instance,ext_msg='Nslip ('//PLASTICITY_DISLOKMC_label//')') - if (sum(plastic_dislokmc_Ntwin(:,instance)) < 0_pInt) & + if (sum(plastic_disloKMC_Ntwin(:,instance)) < 0_pInt) & call IO_error(211_pInt,el=instance,ext_msg='Ntwin ('//PLASTICITY_DISLOKMC_label//')') do f = 1_pInt,lattice_maxNslipFamily - if (plastic_dislokmc_Nslip(f,instance) > 0_pInt) then - if (plastic_dislokmc_rhoEdge0(f,instance) < 0.0_pReal) & + if (plastic_disloKMC_Nslip(f,instance) > 0_pInt) then + if (plastic_disloKMC_rhoEdge0(f,instance) < 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='rhoEdge0 ('//PLASTICITY_DISLOKMC_label//')') - if (plastic_dislokmc_rhoEdgeDip0(f,instance) < 0.0_pReal) & + if (plastic_disloKMC_rhoEdgeDip0(f,instance) < 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='rhoEdgeDip0 ('//PLASTICITY_DISLOKMC_label//')') - if (plastic_dislokmc_burgersPerSlipFamily(f,instance) <= 0.0_pReal) & + if (plastic_disloKMC_burgersPerSlipFamily(f,instance) <= 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='slipBurgers ('//PLASTICITY_DISLOKMC_label//')') - if (plastic_dislokmc_v0PerSlipFamily(f,instance) <= 0.0_pReal) & + if (plastic_disloKMC_v0PerSlipFamily(f,instance) <= 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='v0 ('//PLASTICITY_DISLOKMC_label//')') - if (plastic_dislokmc_tau_peierlsPerSlipFamily(f,instance) < 0.0_pReal) & + if (plastic_disloKMC_tau_peierlsPerSlipFamily(f,instance) < 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='tau_peierls ('//PLASTICITY_DISLOKMC_label//')') endif enddo do f = 1_pInt,lattice_maxNtwinFamily - if (plastic_dislokmc_Ntwin(f,instance) > 0_pInt) then - if (plastic_dislokmc_burgersPerTwinFamily(f,instance) <= 0.0_pReal) & + if (plastic_disloKMC_Ntwin(f,instance) > 0_pInt) then + if (plastic_disloKMC_burgersPerTwinFamily(f,instance) <= 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='twinburgers ('//PLASTICITY_DISLOKMC_label//')') - if (plastic_dislokmc_Ndot0PerTwinFamily(f,instance) < 0.0_pReal) & + if (plastic_disloKMC_Ndot0PerTwinFamily(f,instance) < 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='ndot0 ('//PLASTICITY_DISLOKMC_label//')') endif enddo - if (plastic_dislokmc_CAtomicVolume(instance) <= 0.0_pReal) & + if (plastic_disloKMC_CAtomicVolume(instance) <= 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='cAtomicVolume ('//PLASTICITY_DISLOKMC_label//')') - if (plastic_dislokmc_D0(instance) <= 0.0_pReal) & + if (plastic_disloKMC_D0(instance) <= 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='D0 ('//PLASTICITY_DISLOKMC_label//')') - if (plastic_dislokmc_Qsd(instance) <= 0.0_pReal) & + if (plastic_disloKMC_Qsd(instance) <= 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='Qsd ('//PLASTICITY_DISLOKMC_label//')') - if (sum(plastic_dislokmc_Ntwin(:,instance)) > 0_pInt) then - if (plastic_dislokmc_SFE_0K(instance) == 0.0_pReal .and. & - plastic_dislokmc_dSFE_dT(instance) == 0.0_pReal .and. & + if (sum(plastic_disloKMC_Ntwin(:,instance)) > 0_pInt) then + if (plastic_disloKMC_SFE_0K(instance) == 0.0_pReal .and. & + plastic_disloKMC_dSFE_dT(instance) == 0.0_pReal .and. & lattice_structure(phase) == LATTICE_fcc_ID) & call IO_error(211_pInt,el=instance,ext_msg='SFE0K ('//PLASTICITY_DISLOKMC_label//')') - if (plastic_dislokmc_aTolRho(instance) <= 0.0_pReal) & + if (plastic_disloKMC_aTolRho(instance) <= 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='aTolRho ('//PLASTICITY_DISLOKMC_label//')') - if (plastic_dislokmc_aTolTwinFrac(instance) <= 0.0_pReal) & + if (plastic_disloKMC_aTolTwinFrac(instance) <= 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='aTolTwinFrac ('//PLASTICITY_DISLOKMC_label//')') endif - if (plastic_dislokmc_dipoleFormationFactor(instance) /= 0.0_pReal .and. & - plastic_dislokmc_dipoleFormationFactor(instance) /= 1.0_pReal) & + if (plastic_disloKMC_dipoleFormationFactor(instance) /= 0.0_pReal .and. & + plastic_disloKMC_dipoleFormationFactor(instance) /= 1.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='dipoleFormationFactor ('//PLASTICITY_DISLOKMC_label//')') !-------------------------------------------------------------------------------------------------- ! Determine total number of active slip or twin systems - plastic_dislokmc_Nslip(:,instance) = min(lattice_NslipSystem(:,phase),plastic_dislokmc_Nslip(:,instance)) - plastic_dislokmc_Ntwin(:,instance) = min(lattice_NtwinSystem(:,phase),plastic_dislokmc_Ntwin(:,instance)) - plastic_dislokmc_totalNslip(instance) = sum(plastic_dislokmc_Nslip(:,instance)) - plastic_dislokmc_totalNtwin(instance) = sum(plastic_dislokmc_Ntwin(:,instance)) + plastic_disloKMC_Nslip(:,instance) = min(lattice_NslipSystem(:,phase),plastic_disloKMC_Nslip(:,instance)) + plastic_disloKMC_Ntwin(:,instance) = min(lattice_NtwinSystem(:,phase),plastic_disloKMC_Ntwin(:,instance)) + plastic_disloKMC_totalNslip(instance) = sum(plastic_disloKMC_Nslip(:,instance)) + plastic_disloKMC_totalNtwin(instance) = sum(plastic_disloKMC_Ntwin(:,instance)) endif myPhase enddo sanityChecks !-------------------------------------------------------------------------------------------------- ! allocation of variables whose size depends on the total number of active slip systems - maxTotalNslip = maxval(plastic_dislokmc_totalNslip) - maxTotalNtwin = maxval(plastic_dislokmc_totalNtwin) + maxTotalNslip = maxval(plastic_disloKMC_totalNslip) + maxTotalNtwin = maxval(plastic_disloKMC_totalNtwin) - allocate(plastic_dislokmc_burgersPerSlipSystem(maxTotalNslip, maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_burgersPerTwinSystem(maxTotalNtwin, maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_QedgePerSlipSystem(maxTotalNslip, maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_v0PerSlipSystem(maxTotalNslip, maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_Ndot0PerTwinSystem(maxTotalNtwin, maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_tau_r(maxTotalNtwin, maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_twinsizePerTwinSystem(maxTotalNtwin, maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_CLambdaSlipPerSlipSystem(maxTotalNslip, maxNinstance),source=0.0_pReal) + allocate(plastic_disloKMC_burgersPerSlipSystem(maxTotalNslip, maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_burgersPerTwinSystem(maxTotalNtwin, maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_QedgePerSlipSystem(maxTotalNslip, maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_v0PerSlipSystem(maxTotalNslip, maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_Ndot0PerTwinSystem(maxTotalNtwin, maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_tau_r(maxTotalNtwin, maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_twinsizePerTwinSystem(maxTotalNtwin, maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_CLambdaSlipPerSlipSystem(maxTotalNslip, maxNinstance),source=0.0_pReal) - allocate(plastic_dislokmc_interactionMatrix_SlipSlip(maxval(plastic_dislokmc_totalNslip),& ! slip resistance from slip activity - maxval(plastic_dislokmc_totalNslip),& + allocate(plastic_disloKMC_interactionMatrix_SlipSlip(maxval(plastic_disloKMC_totalNslip),& ! slip resistance from slip activity + maxval(plastic_disloKMC_totalNslip),& maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_interactionMatrix_SlipTwin(maxval(plastic_dislokmc_totalNslip),& ! slip resistance from twin activity - maxval(plastic_dislokmc_totalNtwin),& + allocate(plastic_disloKMC_interactionMatrix_SlipTwin(maxval(plastic_disloKMC_totalNslip),& ! slip resistance from twin activity + maxval(plastic_disloKMC_totalNtwin),& maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_interactionMatrix_TwinSlip(maxval(plastic_dislokmc_totalNtwin),& ! twin resistance from slip activity - maxval(plastic_dislokmc_totalNslip),& + allocate(plastic_disloKMC_interactionMatrix_TwinSlip(maxval(plastic_disloKMC_totalNtwin),& ! twin resistance from slip activity + maxval(plastic_disloKMC_totalNslip),& maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_interactionMatrix_TwinTwin(maxval(plastic_dislokmc_totalNtwin),& ! twin resistance from twin activity - maxval(plastic_dislokmc_totalNtwin),& + allocate(plastic_disloKMC_interactionMatrix_TwinTwin(maxval(plastic_disloKMC_totalNtwin),& ! twin resistance from twin activity + maxval(plastic_disloKMC_totalNtwin),& maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_forestProjectionEdge(maxTotalNslip,maxTotalNslip,maxNinstance), & + allocate(plastic_disloKMC_forestProjectionEdge(maxTotalNslip,maxTotalNslip,maxNinstance), & source=0.0_pReal) - allocate(plastic_dislokmc_Ctwin66(6,6,maxTotalNtwin,maxNinstance), source=0.0_pReal) - allocate(plastic_dislokmc_Ctwin3333(3,3,3,3,maxTotalNtwin,maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_Ctwin66(6,6,maxTotalNtwin,maxNinstance), source=0.0_pReal) + allocate(plastic_disloKMC_Ctwin3333(3,3,3,3,maxTotalNtwin,maxNinstance), source=0.0_pReal) initializeInstances: do phase = 1_pInt, size(phase_plasticity) - myPhase2: if (phase_plasticity(phase) == PLASTICITY_dislokmc_ID) then + myPhase2: if (phase_plasticity(phase) == PLASTICITY_disloKMC_ID) then NofMyPhase=count(material_phase==phase) instance = phase_plasticityInstance(phase) - ns = plastic_dislokmc_totalNslip(instance) - nt = plastic_dislokmc_totalNtwin(instance) + ns = plastic_disloKMC_totalNslip(instance) + nt = plastic_disloKMC_totalNtwin(instance) !-------------------------------------------------------------------------------------------------- ! Determine size of postResults array - outputs: do o = 1_pInt,plastic_dislokmc_Noutput(instance) - select case(plastic_dislokmc_outputID(o,instance)) + outputs: do o = 1_pInt,plastic_disloKMC_Noutput(instance) + select case(plastic_disloKMC_outputID(o,instance)) case(edge_density_ID, & dipole_density_ID, & shear_rate_slip_ID, & @@ -645,22 +650,22 @@ subroutine plastic_dislokmc_init(fileUnit) end select if (mySize > 0_pInt) then ! any meaningful output found - plastic_dislokmc_sizePostResult(o,instance) = mySize - plastic_dislokmc_sizePostResults(instance) = plastic_dislokmc_sizePostResults(instance) + mySize + plastic_disloKMC_sizePostResult(o,instance) = mySize + plastic_disloKMC_sizePostResults(instance) = plastic_disloKMC_sizePostResults(instance) + mySize endif enddo outputs !-------------------------------------------------------------------------------------------------- ! allocate state arrays - sizeDotState = int(size(plastic_dislokmc_listBasicSlipStates),pInt) * ns & - + int(size(plastic_dislokmc_listBasicTwinStates),pInt) * nt + sizeDotState = int(size(plastic_disloKMC_listBasicSlipStates),pInt) * ns & + + int(size(plastic_disloKMC_listBasicTwinStates),pInt) * nt sizeState = sizeDotState & - + int(size(plastic_dislokmc_listDependentSlipStates),pInt) * ns & - + int(size(plastic_dislokmc_listDependentTwinStates),pInt) * nt + + int(size(plastic_disloKMC_listDependentSlipStates),pInt) * ns & + + int(size(plastic_disloKMC_listDependentTwinStates),pInt) * nt plasticState(phase)%sizeState = sizeState plasticState(phase)%sizeDotState = sizeDotState - plasticState(phase)%nSlip = plastic_dislokmc_totalNslip(instance) + plasticState(phase)%nSlip = plastic_disloKMC_totalNslip(instance) plasticState(phase)%nTwin = 0_pInt plasticState(phase)%nTrans= 0_pInt allocate(plasticState(phase)%aTolState (sizeState), source=0.0_pReal) @@ -689,47 +694,47 @@ subroutine plastic_dislokmc_init(fileUnit) !* Process slip related parameters ------------------------------------------------ mySlipFamilies: do f = 1_pInt,lattice_maxNslipFamily - index_myFamily = sum(plastic_dislokmc_Nslip(1:f-1_pInt,instance)) ! index in truncated slip system list - mySlipSystems: do j = 1_pInt,plastic_dislokmc_Nslip(f,instance) + index_myFamily = sum(plastic_disloKMC_Nslip(1:f-1_pInt,instance)) ! index in truncated slip system list + mySlipSystems: do j = 1_pInt,plastic_disloKMC_Nslip(f,instance) !* Burgers vector, ! dislocation velocity prefactor, ! mean free path prefactor, ! and minimum dipole distance - plastic_dislokmc_burgersPerSlipSystem(index_myFamily+j,instance) = & - plastic_dislokmc_burgersPerSlipFamily(f,instance) + plastic_disloKMC_burgersPerSlipSystem(index_myFamily+j,instance) = & + plastic_disloKMC_burgersPerSlipFamily(f,instance) - plastic_dislokmc_QedgePerSlipSystem(index_myFamily+j,instance) = & - plastic_dislokmc_QedgePerSlipFamily(f,instance) + plastic_disloKMC_QedgePerSlipSystem(index_myFamily+j,instance) = & + plastic_disloKMC_QedgePerSlipFamily(f,instance) - plastic_dislokmc_v0PerSlipSystem(index_myFamily+j,instance) = & - plastic_dislokmc_v0PerSlipFamily(f,instance) + plastic_disloKMC_v0PerSlipSystem(index_myFamily+j,instance) = & + plastic_disloKMC_v0PerSlipFamily(f,instance) - plastic_dislokmc_CLambdaSlipPerSlipSystem(index_myFamily+j,instance) = & - plastic_dislokmc_CLambdaSlipPerSlipFamily(f,instance) + plastic_disloKMC_CLambdaSlipPerSlipSystem(index_myFamily+j,instance) = & + plastic_disloKMC_CLambdaSlipPerSlipFamily(f,instance) !* Calculation of forest projections for edge dislocations !* Interaction matrices otherSlipFamilies: do o = 1_pInt,lattice_maxNslipFamily - index_otherFamily = sum(plastic_dislokmc_Nslip(1:o-1_pInt,instance)) - otherSlipSystems: do k = 1_pInt,plastic_dislokmc_Nslip(o,instance) - plastic_dislokmc_forestProjectionEdge(index_myFamily+j,index_otherFamily+k,instance) = & + index_otherFamily = sum(plastic_disloKMC_Nslip(1:o-1_pInt,instance)) + otherSlipSystems: do k = 1_pInt,plastic_disloKMC_Nslip(o,instance) + plastic_disloKMC_forestProjectionEdge(index_myFamily+j,index_otherFamily+k,instance) = & abs(math_mul3x3(lattice_sn(:,sum(lattice_NslipSystem(1:f-1,phase))+j,phase), & lattice_st(:,sum(lattice_NslipSystem(1:o-1,phase))+k,phase))) - plastic_dislokmc_interactionMatrix_SlipSlip(index_myFamily+j,index_otherFamily+k,instance) = & - plastic_dislokmc_interaction_SlipSlip(lattice_interactionSlipSlip( & + plastic_disloKMC_interactionMatrix_SlipSlip(index_myFamily+j,index_otherFamily+k,instance) = & + plastic_disloKMC_interaction_SlipSlip(lattice_interactionSlipSlip( & sum(lattice_NslipSystem(1:f-1,phase))+j, & sum(lattice_NslipSystem(1:o-1,phase))+k, & phase), instance ) enddo otherSlipSystems; enddo otherSlipFamilies otherTwinFamilies: do o = 1_pInt,lattice_maxNtwinFamily - index_otherFamily = sum(plastic_dislokmc_Ntwin(1:o-1_pInt,instance)) - otherTwinSystems: do k = 1_pInt,plastic_dislokmc_Ntwin(o,instance) - plastic_dislokmc_interactionMatrix_SlipTwin(index_myFamily+j,index_otherFamily+k,instance) = & - plastic_dislokmc_interaction_SlipTwin(lattice_interactionSlipTwin( & + index_otherFamily = sum(plastic_disloKMC_Ntwin(1:o-1_pInt,instance)) + otherTwinSystems: do k = 1_pInt,plastic_disloKMC_Ntwin(o,instance) + plastic_disloKMC_interactionMatrix_SlipTwin(index_myFamily+j,index_otherFamily+k,instance) = & + plastic_disloKMC_interaction_SlipTwin(lattice_interactionSlipTwin( & sum(lattice_NslipSystem(1:f-1_pInt,phase))+j, & sum(lattice_NtwinSystem(1:o-1_pInt,phase))+k, & phase), instance ) @@ -741,29 +746,29 @@ subroutine plastic_dislokmc_init(fileUnit) !* Process twin related parameters ------------------------------------------------ myTwinFamilies: do f = 1_pInt,lattice_maxNtwinFamily - index_myFamily = sum(plastic_dislokmc_Ntwin(1:f-1_pInt,instance)) ! index in truncated twin system list - myTwinSystems: do j = 1_pInt,plastic_dislokmc_Ntwin(f,instance) + index_myFamily = sum(plastic_disloKMC_Ntwin(1:f-1_pInt,instance)) ! index in truncated twin system list + myTwinSystems: do j = 1_pInt,plastic_disloKMC_Ntwin(f,instance) !* Burgers vector, ! nucleation rate prefactor, ! and twin size - plastic_dislokmc_burgersPerTwinSystem(index_myFamily+j,instance) = & - plastic_dislokmc_burgersPerTwinFamily(f,instance) + plastic_disloKMC_burgersPerTwinSystem(index_myFamily+j,instance) = & + plastic_disloKMC_burgersPerTwinFamily(f,instance) - plastic_dislokmc_Ndot0PerTwinSystem(index_myFamily+j,instance) = & - plastic_dislokmc_Ndot0PerTwinFamily(f,instance) + plastic_disloKMC_Ndot0PerTwinSystem(index_myFamily+j,instance) = & + plastic_disloKMC_Ndot0PerTwinFamily(f,instance) - plastic_dislokmc_twinsizePerTwinSystem(index_myFamily+j,instance) = & - plastic_dislokmc_twinsizePerTwinFamily(f,instance) + plastic_disloKMC_twinsizePerTwinSystem(index_myFamily+j,instance) = & + plastic_disloKMC_twinsizePerTwinFamily(f,instance) !* Rotate twin elasticity matrices index_otherFamily = sum(lattice_NtwinSystem(1:f-1_pInt,phase)) ! index in full lattice twin list do l = 1_pInt,3_pInt; do m = 1_pInt,3_pInt; do n = 1_pInt,3_pInt; do o = 1_pInt,3_pInt do p = 1_pInt,3_pInt; do q = 1_pInt,3_pInt; do r = 1_pInt,3_pInt; do s = 1_pInt,3_pInt - plastic_dislokmc_Ctwin3333(l,m,n,o,index_myFamily+j,instance) = & - plastic_dislokmc_Ctwin3333(l,m,n,o,index_myFamily+j,instance) + & + plastic_disloKMC_Ctwin3333(l,m,n,o,index_myFamily+j,instance) = & + plastic_disloKMC_Ctwin3333(l,m,n,o,index_myFamily+j,instance) + & lattice_C3333(p,q,r,s,instance) * & lattice_Qtwin(l,p,index_otherFamily+j,phase) * & lattice_Qtwin(m,q,index_otherFamily+j,phase) * & @@ -771,25 +776,25 @@ subroutine plastic_dislokmc_init(fileUnit) lattice_Qtwin(o,s,index_otherFamily+j,phase) enddo; enddo; enddo; enddo enddo; enddo; enddo; enddo - plastic_dislokmc_Ctwin66(1:6,1:6,index_myFamily+j,instance) = & - math_Mandel3333to66(plastic_dislokmc_Ctwin3333(1:3,1:3,1:3,1:3,index_myFamily+j,instance)) + plastic_disloKMC_Ctwin66(1:6,1:6,index_myFamily+j,instance) = & + math_Mandel3333to66(plastic_disloKMC_Ctwin3333(1:3,1:3,1:3,1:3,index_myFamily+j,instance)) !* Interaction matrices otherSlipFamilies2: do o = 1_pInt,lattice_maxNslipFamily - index_otherFamily = sum(plastic_dislokmc_Nslip(1:o-1_pInt,instance)) - otherSlipSystems2: do k = 1_pInt,plastic_dislokmc_Nslip(o,instance) - plastic_dislokmc_interactionMatrix_TwinSlip(index_myFamily+j,index_otherFamily+k,instance) = & - plastic_dislokmc_interaction_TwinSlip(lattice_interactionTwinSlip( & + index_otherFamily = sum(plastic_disloKMC_Nslip(1:o-1_pInt,instance)) + otherSlipSystems2: do k = 1_pInt,plastic_disloKMC_Nslip(o,instance) + plastic_disloKMC_interactionMatrix_TwinSlip(index_myFamily+j,index_otherFamily+k,instance) = & + plastic_disloKMC_interaction_TwinSlip(lattice_interactionTwinSlip( & sum(lattice_NtwinSystem(1:f-1_pInt,phase))+j, & sum(lattice_NslipSystem(1:o-1_pInt,phase))+k, & phase), instance ) enddo otherSlipSystems2; enddo otherSlipFamilies2 otherTwinFamilies2: do o = 1_pInt,lattice_maxNtwinFamily - index_otherFamily = sum(plastic_dislokmc_Ntwin(1:o-1_pInt,instance)) - otherTwinSystems2: do k = 1_pInt,plastic_dislokmc_Ntwin(o,instance) - plastic_dislokmc_interactionMatrix_TwinTwin(index_myFamily+j,index_otherFamily+k,instance) = & - plastic_dislokmc_interaction_TwinTwin(lattice_interactionTwinTwin( & + index_otherFamily = sum(plastic_disloKMC_Ntwin(1:o-1_pInt,instance)) + otherTwinSystems2: do k = 1_pInt,plastic_disloKMC_Ntwin(o,instance) + plastic_disloKMC_interactionMatrix_TwinTwin(index_myFamily+j,index_otherFamily+k,instance) = & + plastic_disloKMC_interaction_TwinTwin(lattice_interactionTwinTwin( & sum(lattice_NtwinSystem(1:f-1_pInt,phase))+j, & sum(lattice_NtwinSystem(1:o-1_pInt,phase))+k, & phase), instance ) @@ -797,18 +802,18 @@ subroutine plastic_dislokmc_init(fileUnit) enddo myTwinSystems enddo myTwinFamilies - call plastic_dislokmc_stateInit(phase,instance) - call plastic_dislokmc_aTolState(phase,instance) + call plastic_disloKMC_stateInit(phase,instance) + call plastic_disloKMC_aTolState(phase,instance) endif myPhase2 enddo initializeInstances -end subroutine plastic_dislokmc_init +end subroutine plastic_disloKMC_init !-------------------------------------------------------------------------------------------------- !> @brief sets the relevant state values for a given instance of this plasticity !-------------------------------------------------------------------------------------------------- -subroutine plastic_dislokmc_stateInit(ph,instance) +subroutine plastic_disloKMC_stateInit(ph,instance) use math, only: & pi use lattice, only: & @@ -825,28 +830,28 @@ subroutine plastic_dislokmc_stateInit(ph,instance) real(pReal), dimension(plasticState(ph)%sizeState) :: tempState integer(pInt) :: i,j,f,ns,nt, index_myFamily - real(pReal), dimension(plastic_dislokmc_totalNslip(instance)) :: & + real(pReal), dimension(plastic_disloKMC_totalNslip(instance)) :: & rhoEdge0, & rhoEdgeDip0, & invLambdaSlip0, & MeanFreePathSlip0, & tauSlipThreshold0 - real(pReal), dimension(plastic_dislokmc_totalNtwin(instance)) :: & + real(pReal), dimension(plastic_disloKMC_totalNtwin(instance)) :: & MeanFreePathTwin0,TwinVolume0 tempState = 0.0_pReal - ns = plastic_dislokmc_totalNslip(instance) - nt = plastic_dislokmc_totalNtwin(instance) + ns = plastic_disloKMC_totalNslip(instance) + nt = plastic_disloKMC_totalNtwin(instance) !-------------------------------------------------------------------------------------------------- ! initialize basic slip state variables do f = 1_pInt,lattice_maxNslipFamily - index_myFamily = sum(plastic_dislokmc_Nslip(1:f-1_pInt,instance)) ! index in truncated slip system list + index_myFamily = sum(plastic_disloKMC_Nslip(1:f-1_pInt,instance)) ! index in truncated slip system list rhoEdge0(index_myFamily+1_pInt: & - index_myFamily+plastic_dislokmc_Nslip(f,instance)) = & - plastic_dislokmc_rhoEdge0(f,instance) + index_myFamily+plastic_disloKMC_Nslip(f,instance)) = & + plastic_disloKMC_rhoEdge0(f,instance) rhoEdgeDip0(index_myFamily+1_pInt: & - index_myFamily+plastic_dislokmc_Nslip(f,instance)) = & - plastic_dislokmc_rhoEdgeDip0(f,instance) + index_myFamily+plastic_disloKMC_Nslip(f,instance)) = & + plastic_disloKMC_rhoEdgeDip0(f,instance) enddo tempState(1_pInt:ns) = rhoEdge0 @@ -855,19 +860,19 @@ subroutine plastic_dislokmc_stateInit(ph,instance) !-------------------------------------------------------------------------------------------------- ! initialize dependent slip microstructural variables forall (i = 1_pInt:ns) & - invLambdaSlip0(i) = sqrt(dot_product((rhoEdge0+rhoEdgeDip0),plastic_dislokmc_forestProjectionEdge(1:ns,i,instance)))/ & - plastic_dislokmc_CLambdaSlipPerSlipSystem(i,instance) + invLambdaSlip0(i) = sqrt(dot_product((rhoEdge0+rhoEdgeDip0),plastic_disloKMC_forestProjectionEdge(1:ns,i,instance)))/ & + plastic_disloKMC_CLambdaSlipPerSlipSystem(i,instance) tempState(3_pInt*ns+2_pInt*nt+1:4_pInt*ns+2_pInt*nt) = invLambdaSlip0 forall (i = 1_pInt:ns) & MeanFreePathSlip0(i) = & - plastic_dislokmc_GrainSize(instance)/(1.0_pReal+invLambdaSlip0(i)*plastic_dislokmc_GrainSize(instance)) + plastic_disloKMC_GrainSize(instance)/(1.0_pReal+invLambdaSlip0(i)*plastic_disloKMC_GrainSize(instance)) tempState(5_pInt*ns+3_pInt*nt+1:6_pInt*ns+3_pInt*nt) = MeanFreePathSlip0 forall (i = 1_pInt:ns) & tauSlipThreshold0(i) = & - lattice_mu(ph)*plastic_dislokmc_burgersPerSlipSystem(i,instance) * & - sqrt(dot_product((rhoEdge0+rhoEdgeDip0),plastic_dislokmc_interactionMatrix_SlipSlip(i,1:ns,instance))) + lattice_mu(ph)*plastic_disloKMC_burgersPerSlipSystem(i,instance) * & + sqrt(dot_product((rhoEdge0+rhoEdgeDip0),plastic_disloKMC_interactionMatrix_SlipSlip(i,1:ns,instance))) tempState(6_pInt*ns+4_pInt*nt+1:7_pInt*ns+4_pInt*nt) = tauSlipThreshold0 @@ -876,22 +881,22 @@ subroutine plastic_dislokmc_stateInit(ph,instance) !-------------------------------------------------------------------------------------------------- ! initialize dependent twin microstructural variables forall (j = 1_pInt:nt) & - MeanFreePathTwin0(j) = plastic_dislokmc_GrainSize(instance) + MeanFreePathTwin0(j) = plastic_disloKMC_GrainSize(instance) tempState(6_pInt*ns+3_pInt*nt+1_pInt:6_pInt*ns+4_pInt*nt) = MeanFreePathTwin0 forall (j = 1_pInt:nt) & TwinVolume0(j) = & - (pi/4.0_pReal)*plastic_dislokmc_twinsizePerTwinSystem(j,instance)*MeanFreePathTwin0(j)**(2.0_pReal) + (pi/4.0_pReal)*plastic_disloKMC_twinsizePerTwinSystem(j,instance)*MeanFreePathTwin0(j)**(2.0_pReal) tempState(7_pInt*ns+5_pInt*nt+1_pInt:7_pInt*ns+6_pInt*nt) = TwinVolume0 plasticState(ph)%state0 = spread(tempState,2,size(plasticState(ph)%state(1,:))) -end subroutine plastic_dislokmc_stateInit +end subroutine plastic_disloKMC_stateInit !-------------------------------------------------------------------------------------------------- !> @brief sets the relevant state values for a given instance of this plasticity !-------------------------------------------------------------------------------------------------- -subroutine plastic_dislokmc_aTolState(ph,instance) +subroutine plastic_disloKMC_aTolState(ph,instance) use material, only: & plasticState @@ -901,33 +906,33 @@ subroutine plastic_dislokmc_aTolState(ph,instance) instance ! number specifying the current instance of the plasticity ! Tolerance state for dislocation densities - plasticState(ph)%aTolState(1_pInt:2_pInt*plastic_dislokmc_totalNslip(instance)) = & - plastic_dislokmc_aTolRho(instance) + plasticState(ph)%aTolState(1_pInt:2_pInt*plastic_disloKMC_totalNslip(instance)) = & + plastic_disloKMC_aTolRho(instance) ! Tolerance state for accumulated shear due to slip - plasticState(ph)%aTolState(2_pInt*plastic_dislokmc_totalNslip(instance)+1_pInt: & - 3_pInt*plastic_dislokmc_totalNslip(instance))=1e6_pReal + plasticState(ph)%aTolState(2_pInt*plastic_disloKMC_totalNslip(instance)+1_pInt: & + 3_pInt*plastic_disloKMC_totalNslip(instance))=1e6_pReal ! Tolerance state for twin volume fraction - plasticState(ph)%aTolState(3_pInt*plastic_dislokmc_totalNslip(instance)+1_pInt: & - 3_pInt*plastic_dislokmc_totalNslip(instance)+& - plastic_dislokmc_totalNtwin(instance)) = & - plastic_dislokmc_aTolTwinFrac(instance) + plasticState(ph)%aTolState(3_pInt*plastic_disloKMC_totalNslip(instance)+1_pInt: & + 3_pInt*plastic_disloKMC_totalNslip(instance)+& + plastic_disloKMC_totalNtwin(instance)) = & + plastic_disloKMC_aTolTwinFrac(instance) ! Tolerance state for accumulated shear due to twin - plasticState(ph)%aTolState(3_pInt*plastic_dislokmc_totalNslip(instance)+ & - plastic_dislokmc_totalNtwin(instance)+1_pInt: & - 3_pInt*plastic_dislokmc_totalNslip(instance)+ & - 2_pInt*plastic_dislokmc_totalNtwin(instance)) = 1e6_pReal + plasticState(ph)%aTolState(3_pInt*plastic_disloKMC_totalNslip(instance)+ & + plastic_disloKMC_totalNtwin(instance)+1_pInt: & + 3_pInt*plastic_disloKMC_totalNslip(instance)+ & + 2_pInt*plastic_disloKMC_totalNtwin(instance)) = 1e6_pReal -end subroutine plastic_dislokmc_aTolState +end subroutine plastic_disloKMC_aTolState !-------------------------------------------------------------------------------------------------- !> @brief returns the homogenized elasticity matrix !-------------------------------------------------------------------------------------------------- -function plastic_dislokmc_homogenizedC(ipc,ip,el) +function plastic_disloKMC_homogenizedC(ipc,ip,el) use material, only: & homogenization_maxNgrains, & phase_plasticityInstance, & @@ -938,7 +943,7 @@ function plastic_dislokmc_homogenizedC(ipc,ip,el) implicit none real(pReal), dimension(6,6) :: & - plastic_dislokmc_homogenizedC + plastic_disloKMC_homogenizedC integer(pInt), intent(in) :: & ipc, & !< component-ID of integration point ip, & !< integration point @@ -953,24 +958,24 @@ function plastic_dislokmc_homogenizedC(ipc,ip,el) of = mappingConstitutive(1,ipc,ip,el) ph = mappingConstitutive(2,ipc,ip,el) instance = phase_plasticityInstance(ph) - ns = plastic_dislokmc_totalNslip(instance) - nt = plastic_dislokmc_totalNtwin(instance) + ns = plastic_disloKMC_totalNslip(instance) + nt = plastic_disloKMC_totalNtwin(instance) !* Total twin volume fraction sumf = sum(plasticState(ph)%state((3_pInt*ns+1_pInt):(3_pInt*ns+nt),of)) ! safe for nt == 0 !* Homogenized elasticity matrix - plastic_dislokmc_homogenizedC = (1.0_pReal-sumf)*lattice_C66(1:6,1:6,ph) + plastic_disloKMC_homogenizedC = (1.0_pReal-sumf)*lattice_C66(1:6,1:6,ph) do i=1_pInt,nt - plastic_dislokmc_homogenizedC = plastic_dislokmc_homogenizedC & - + plasticState(ph)%state(3_pInt*ns+i, of)*plastic_dislokmc_Ctwin66(1:6,1:6,i,instance) + plastic_disloKMC_homogenizedC = plastic_disloKMC_homogenizedC & + + plasticState(ph)%state(3_pInt*ns+i, of)*plastic_disloKMC_Ctwin66(1:6,1:6,i,instance) enddo -end function plastic_dislokmc_homogenizedC +end function plastic_disloKMC_homogenizedC !-------------------------------------------------------------------------------------------------- !> @brief calculates derived quantities from state !-------------------------------------------------------------------------------------------------- -subroutine plastic_dislokmc_microstructure(temperature,ipc,ip,el) +subroutine plastic_disloKMC_microstructure(temperature,ipc,ip,el) use math, only: & pi use material, only: & @@ -997,14 +1002,14 @@ subroutine plastic_dislokmc_microstructure(temperature,ipc,ip,el) of real(pReal) :: & sumf,sfe,x0 - real(pReal), dimension(plastic_dislokmc_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: fOverStacksize + real(pReal), dimension(plastic_disloKMC_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: fOverStacksize !* Shortened notation of = mappingConstitutive(1,ipc,ip,el) ph = mappingConstitutive(2,ipc,ip,el) instance = phase_plasticityInstance(ph) - ns = plastic_dislokmc_totalNslip(instance) - nt = plastic_dislokmc_totalNtwin(instance) + ns = plastic_disloKMC_totalNslip(instance) + nt = plastic_disloKMC_totalNtwin(instance) !* State: 1 : ns rho_edge !* State: ns+1 : 2*ns rho_dipole !* State: 2*ns+1 : 3*ns accumulated shear due to slip @@ -1023,90 +1028,90 @@ subroutine plastic_dislokmc_microstructure(temperature,ipc,ip,el) sumf = sum(plasticState(ph)%state((3*ns+1):(3*ns+nt), of)) ! safe for nt == 0 !* Stacking fault energy - sfe = plastic_dislokmc_SFE_0K(instance) + & - plastic_dislokmc_dSFE_dT(instance) * Temperature + sfe = plastic_disloKMC_SFE_0K(instance) + & + plastic_disloKMC_dSFE_dT(instance) * Temperature !* rescaled twin volume fraction for topology forall (t = 1_pInt:nt) & fOverStacksize(t) = & - plasticState(ph)%state(3_pInt*ns+t, of)/plastic_dislokmc_twinsizePerTwinSystem(t,instance) + plasticState(ph)%state(3_pInt*ns+t, of)/plastic_disloKMC_twinsizePerTwinSystem(t,instance) !* 1/mean free distance between 2 forest dislocations seen by a moving dislocation forall (s = 1_pInt:ns) & plasticState(ph)%state(3_pInt*ns+2_pInt*nt+s, of) = & sqrt(dot_product((plasticState(ph)%state(1:ns,of)+plasticState(ph)%state(ns+1_pInt:2_pInt*ns,of)),& - plastic_dislokmc_forestProjectionEdge(1:ns,s,instance)))/ & - plastic_dislokmc_CLambdaSlipPerSlipSystem(s,instance) + plastic_disloKMC_forestProjectionEdge(1:ns,s,instance)))/ & + plastic_disloKMC_CLambdaSlipPerSlipSystem(s,instance) !* 1/mean free distance between 2 twin stacks from different systems seen by a moving dislocation !$OMP CRITICAL (evilmatmul) plasticState(ph)%state((4_pInt*ns+2_pInt*nt+1_pInt):(5_pInt*ns+2_pInt*nt), of) = 0.0_pReal if (nt > 0_pInt .and. ns > 0_pInt) & plasticState(ph)%state((4_pInt*ns+2_pInt*nt+1):(5_pInt*ns+2_pInt*nt), of) = & - matmul(plastic_dislokmc_interactionMatrix_SlipTwin(1:ns,1:nt,instance),fOverStacksize(1:nt))/(1.0_pReal-sumf) + matmul(plastic_disloKMC_interactionMatrix_SlipTwin(1:ns,1:nt,instance),fOverStacksize(1:nt))/(1.0_pReal-sumf) !$OMP END CRITICAL (evilmatmul) !* 1/mean free distance between 2 twin stacks from different systems seen by a growing twin !$OMP CRITICAL (evilmatmul) if (nt > 0_pInt) & plasticState(ph)%state((5_pInt*ns+2_pInt*nt+1_pInt):(5_pInt*ns+3_pInt*nt), of) = & - matmul(plastic_dislokmc_interactionMatrix_TwinTwin(1:nt,1:nt,instance),fOverStacksize(1:nt))/(1.0_pReal-sumf) + matmul(plastic_disloKMC_interactionMatrix_TwinTwin(1:nt,1:nt,instance),fOverStacksize(1:nt))/(1.0_pReal-sumf) !$OMP END CRITICAL (evilmatmul) !* mean free path between 2 obstacles seen by a moving dislocation do s = 1_pInt,ns if (nt > 0_pInt) then plasticState(ph)%state(5_pInt*ns+3_pInt*nt+s, of) = & - plastic_dislokmc_GrainSize(instance)/(1.0_pReal+plastic_dislokmc_GrainSize(instance)*& + plastic_disloKMC_GrainSize(instance)/(1.0_pReal+plastic_disloKMC_GrainSize(instance)*& (plasticState(ph)%state(3_pInt*ns+2_pInt*nt+s, of)+plasticState(ph)%state(4_pInt*ns+2_pInt*nt+s, of))) else plasticState(ph)%state(5_pInt*ns+s, of) = & - plastic_dislokmc_GrainSize(instance)/& - (1.0_pReal+plastic_dislokmc_GrainSize(instance)*(plasticState(ph)%state(3_pInt*ns+s, of))) + plastic_disloKMC_GrainSize(instance)/& + (1.0_pReal+plastic_disloKMC_GrainSize(instance)*(plasticState(ph)%state(3_pInt*ns+s, of))) endif enddo !* mean free path between 2 obstacles seen by a growing twin forall (t = 1_pInt:nt) & plasticState(ph)%state(6_pInt*ns+3_pInt*nt+t, of) = & - (plastic_dislokmc_Cmfptwin(instance)*plastic_dislokmc_GrainSize(instance))/& - (1.0_pReal+plastic_dislokmc_GrainSize(instance)*plasticState(ph)%state(5_pInt*ns+2_pInt*nt+t, of)) + (plastic_disloKMC_Cmfptwin(instance)*plastic_disloKMC_GrainSize(instance))/& + (1.0_pReal+plastic_disloKMC_GrainSize(instance)*plasticState(ph)%state(5_pInt*ns+2_pInt*nt+t, of)) !* threshold stress for dislocation motion forall (s = 1_pInt:ns) & plasticState(ph)%state(6_pInt*ns+4_pInt*nt+s, of) = & - lattice_mu(ph)*plastic_dislokmc_burgersPerSlipSystem(s,instance)*& + lattice_mu(ph)*plastic_disloKMC_burgersPerSlipSystem(s,instance)*& sqrt(dot_product((plasticState(ph)%state(1:ns, of)+plasticState(ph)%state(ns+1_pInt:2_pInt*ns, of)),& - plastic_dislokmc_interactionMatrix_SlipSlip(s,1:ns,instance))) + plastic_disloKMC_interactionMatrix_SlipSlip(s,1:ns,instance))) !* threshold stress for growing twin forall (t = 1_pInt:nt) & plasticState(ph)%state(7_pInt*ns+4_pInt*nt+t, of) = & - plastic_dislokmc_Cthresholdtwin(instance)*& - (sfe/(3.0_pReal*plastic_dislokmc_burgersPerTwinSystem(t,instance))+& - 3.0_pReal*plastic_dislokmc_burgersPerTwinSystem(t,instance)*lattice_mu(ph)/& - (plastic_dislokmc_L0(instance)*plastic_dislokmc_burgersPerSlipSystem(t,instance))) + plastic_disloKMC_Cthresholdtwin(instance)*& + (sfe/(3.0_pReal*plastic_disloKMC_burgersPerTwinSystem(t,instance))+& + 3.0_pReal*plastic_disloKMC_burgersPerTwinSystem(t,instance)*lattice_mu(ph)/& + (plastic_disloKMC_L0(instance)*plastic_disloKMC_burgersPerSlipSystem(t,instance))) !* final twin volume after growth forall (t = 1_pInt:nt) & plasticState(ph)%state(7_pInt*ns+5_pInt*nt+t, of) = & - (pi/4.0_pReal)*plastic_dislokmc_twinsizePerTwinSystem(t,instance)*plasticState(ph)%state(6*ns+3*nt+t, of)**(2.0_pReal) + (pi/4.0_pReal)*plastic_disloKMC_twinsizePerTwinSystem(t,instance)*plasticState(ph)%state(6*ns+3*nt+t, of)**(2.0_pReal) !* equilibrium seperation of partial dislocations do t = 1_pInt,nt - x0 = lattice_mu(ph)*plastic_dislokmc_burgersPerTwinSystem(t,instance)**(2.0_pReal)/& + x0 = lattice_mu(ph)*plastic_disloKMC_burgersPerTwinSystem(t,instance)**(2.0_pReal)/& (sfe*8.0_pReal*pi)*(2.0_pReal+lattice_nu(ph))/(1.0_pReal-lattice_nu(ph)) - plastic_dislokmc_tau_r(t,instance)= & - lattice_mu(ph)*plastic_dislokmc_burgersPerTwinSystem(t,instance)/(2.0_pReal*pi)*& - (1/(x0+plastic_dislokmc_xc(instance))+cos(pi/3.0_pReal)/x0) !!! used where?? + plastic_disloKMC_tau_r(t,instance)= & + lattice_mu(ph)*plastic_disloKMC_burgersPerTwinSystem(t,instance)/(2.0_pReal*pi)*& + (1/(x0+plastic_disloKMC_xc(instance))+cos(pi/3.0_pReal)/x0) !!! used where?? enddo -end subroutine plastic_dislokmc_microstructure +end subroutine plastic_disloKMC_microstructure !-------------------------------------------------------------------------------------------------- !> @brief calculates plastic velocity gradient and its tangent !-------------------------------------------------------------------------------------------------- -subroutine plastic_dislokmc_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Temperature,nSlipDamage,slipDamage, & +subroutine plastic_disloKMC_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Temperature,nSlipDamage,slipDamage, & ipc,ip,el) use prec, only: & tol_math_check @@ -1154,15 +1159,15 @@ subroutine plastic_dislokmc_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Temperature, nonSchmid_tensor real(pReal), dimension(3,3,3,3) :: & dLp_dTstar3333 - real(pReal), dimension(plastic_dislokmc_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & + real(pReal), dimension(plastic_disloKMC_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & gdot_slip_pos,gdot_slip_neg !* Shortened notation of = mappingConstitutive(1,ipc,ip,el) ph = mappingConstitutive(2,ipc,ip,el) instance = phase_plasticityInstance(ph) - ns = plastic_dislokmc_totalNslip(instance) - nt = plastic_dislokmc_totalNtwin(instance) + ns = plastic_disloKMC_totalNslip(instance) + nt = plastic_disloKMC_totalNtwin(instance) Lp = 0.0_pReal dLp_dTstar3333 = 0.0_pReal @@ -1177,27 +1182,27 @@ subroutine plastic_dislokmc_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Temperature, j = 0_pInt slipFamilies: do f = 1_pInt,lattice_maxNslipFamily index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family - slipSystems: do i = 1_pInt,plastic_dislokmc_Nslip(f,instance) + slipSystems: do i = 1_pInt,plastic_disloKMC_Nslip(f,instance) j = j+1_pInt !* Boltzmann ratio - BoltzmannRatio = plastic_dislokmc_QedgePerSlipSystem(j,instance)/(kB*Temperature) + BoltzmannRatio = plastic_disloKMC_QedgePerSlipSystem(j,instance)/(kB*Temperature) !* Initial shear rates DotGamma0 = & - plasticState(ph)%state(j, of)*plastic_dislokmc_burgersPerSlipSystem(j,instance)*& - plastic_dislokmc_v0PerSlipSystem(j,instance) + plasticState(ph)%state(j, of)*plastic_disloKMC_burgersPerSlipSystem(j,instance)*& + plastic_disloKMC_v0PerSlipSystem(j,instance) !* Resolved shear stress on slip system tau_slip_pos = dot_product(Tstar_v,lattice_Sslip_v(1:6,1,index_myFamily+i,ph)) tau_slip_neg = tau_slip_pos 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) nonSchmidSystems: do k = 1,lattice_NnonSchmid(ph) - tau_slip_pos = tau_slip_pos + plastic_dislokmc_nonSchmidCoeff(k,instance)* & + tau_slip_pos = tau_slip_pos + plastic_disloKMC_nonSchmidCoeff(k,instance)* & dot_product(Tstar_v,lattice_Sslip_v(1:6,2*k,index_myFamily+i,ph)) - tau_slip_neg = tau_slip_neg + plastic_dislokmc_nonSchmidCoeff(k,instance)* & + tau_slip_neg = tau_slip_neg + plastic_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) + plastic_dislokmc_nonSchmidCoeff(k,instance)*& + nonSchmid_tensor(1:3,1:3,1) = nonSchmid_tensor(1:3,1:3,1) + plastic_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) + plastic_dislokmc_nonSchmidCoeff(k,instance)*& + nonSchmid_tensor(1:3,1:3,2) = nonSchmid_tensor(1:3,1:3,2) + plastic_disloKMC_nonSchmidCoeff(k,instance)*& lattice_Sslip(1:3,1:3,2*k+1,index_myFamily+i,ph) enddo nonSchmidSystems !* Applying damage to slip system @@ -1207,16 +1212,16 @@ subroutine plastic_dislokmc_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Temperature, significantPostitiveStress: if((abs(tau_slip_pos)-plasticState(ph)%state(6*ns+4*nt+j, of)) > tol_math_check) then !* Stress ratios stressRatio = ((abs(tau_slip_pos)-plasticState(ph)%state(6*ns+4*nt+j, of))/& - (plastic_dislokmc_SolidSolutionStrength(instance)+& - plastic_dislokmc_tau_peierlsPerSlipFamily(f,instance))) - stressRatio_p = stressRatio** plastic_dislokmc_pPerSlipFamily(f,instance) - stressRatio_pminus1 = stressRatio**(plastic_dislokmc_pPerSlipFamily(f,instance)-1.0_pReal) - stressRatio_u = stressRatio** plastic_dislokmc_uPerSlipFamily(f,instance) - stressRatio_uminus1 = stressRatio**(plastic_dislokmc_uPerSlipFamily(f,instance)-1.0_pReal) + (plastic_disloKMC_SolidSolutionStrength(instance)+& + plastic_disloKMC_tau_peierlsPerSlipFamily(f,instance))) + stressRatio_p = stressRatio** plastic_disloKMC_pPerSlipFamily(f,instance) + stressRatio_pminus1 = stressRatio**(plastic_disloKMC_pPerSlipFamily(f,instance)-1.0_pReal) + stressRatio_u = stressRatio** plastic_disloKMC_uPerSlipFamily(f,instance) + stressRatio_uminus1 = stressRatio**(plastic_disloKMC_uPerSlipFamily(f,instance)-1.0_pReal) !* Shear rates due to slip - vel_slip = exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance)) & - * (1.0_pReal-plastic_dislokmc_sPerSlipFamily(f,instance) & - * exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance))) + vel_slip = exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloKMC_qPerSlipFamily(f,instance)) & + * (1.0_pReal-plastic_disloKMC_sPerSlipFamily(f,instance) & + * exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloKMC_qPerSlipFamily(f,instance))) gdot_slip_pos(j) = DotGamma0 & * StressRatio_u * vel_slip & @@ -1224,33 +1229,33 @@ subroutine plastic_dislokmc_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Temperature, !* Derivatives of shear rates dvel_slip = & - (abs(exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance)))& - *BoltzmannRatio*plastic_dislokmc_pPerSlipFamily(f,instance)& - *plastic_dislokmc_qPerSlipFamily(f,instance)/& - (plastic_dislokmc_SolidSolutionStrength(instance)+plastic_dislokmc_tau_peierlsPerSlipFamily(f,instance))*& - StressRatio_pminus1*(1.0_pReal-StressRatio_p)**(plastic_dislokmc_qPerSlipFamily(f,instance)-1.0_pReal) )& - *(1.0_pReal - 2.0_pReal*plastic_dislokmc_sPerSlipFamily(f,instance)& - *abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance)))) + (abs(exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_disloKMC_qPerSlipFamily(f,instance)))& + *BoltzmannRatio*plastic_disloKMC_pPerSlipFamily(f,instance)& + *plastic_disloKMC_qPerSlipFamily(f,instance)/& + (plastic_disloKMC_SolidSolutionStrength(instance)+plastic_disloKMC_tau_peierlsPerSlipFamily(f,instance))*& + StressRatio_pminus1*(1.0_pReal-StressRatio_p)**(plastic_disloKMC_qPerSlipFamily(f,instance)-1.0_pReal) )& + *(1.0_pReal - 2.0_pReal*plastic_disloKMC_sPerSlipFamily(f,instance)& + *abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloKMC_qPerSlipFamily(f,instance)))) dgdot_dtauslip_pos = DotGamma0 * & - ( plastic_dislokmc_uPerSlipFamily(f,instance)*StressRatio_uminus1 & - /(plastic_dislokmc_SolidSolutionStrength(instance)+plastic_dislokmc_tau_peierlsPerSlipFamily(f,instance))& + ( plastic_disloKMC_uPerSlipFamily(f,instance)*StressRatio_uminus1 & + /(plastic_disloKMC_SolidSolutionStrength(instance)+plastic_disloKMC_tau_peierlsPerSlipFamily(f,instance))& * vel_slip & + StressRatio_u * dvel_slip) endif significantPostitiveStress significantNegativeStress: if((abs(tau_slip_neg)-plasticState(ph)%state(6*ns+4*nt+j, of)) > tol_math_check) then !* Stress ratios stressRatio = ((abs(tau_slip_neg)-plasticState(ph)%state(6*ns+4*nt+j, of))/& - (plastic_dislokmc_SolidSolutionStrength(instance)+& - plastic_dislokmc_tau_peierlsPerSlipFamily(f,instance))) - stressRatio_p = stressRatio** plastic_dislokmc_pPerSlipFamily(f,instance) - stressRatio_pminus1 = stressRatio**(plastic_dislokmc_pPerSlipFamily(f,instance)-1.0_pReal) - stressRatio_u = stressRatio** plastic_dislokmc_uPerSlipFamily(f,instance) - stressRatio_uminus1 = stressRatio**(plastic_dislokmc_uPerSlipFamily(f,instance)-1.0_pReal) + (plastic_disloKMC_SolidSolutionStrength(instance)+& + plastic_disloKMC_tau_peierlsPerSlipFamily(f,instance))) + stressRatio_p = stressRatio** plastic_disloKMC_pPerSlipFamily(f,instance) + stressRatio_pminus1 = stressRatio**(plastic_disloKMC_pPerSlipFamily(f,instance)-1.0_pReal) + stressRatio_u = stressRatio** plastic_disloKMC_uPerSlipFamily(f,instance) + stressRatio_uminus1 = stressRatio**(plastic_disloKMC_uPerSlipFamily(f,instance)-1.0_pReal) !* Shear rates due to slip - vel_slip = exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance)) & - * (1.0_pReal-plastic_dislokmc_sPerSlipFamily(f,instance) & - * exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance))) + vel_slip = exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloKMC_qPerSlipFamily(f,instance)) & + * (1.0_pReal-plastic_disloKMC_sPerSlipFamily(f,instance) & + * exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloKMC_qPerSlipFamily(f,instance))) gdot_slip_neg(j) = DotGamma0 & * StressRatio_u * vel_slip & @@ -1258,17 +1263,17 @@ subroutine plastic_dislokmc_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Temperature, !* Derivatives of shear rates dvel_slip = & - (abs(exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance)))& - *BoltzmannRatio*plastic_dislokmc_pPerSlipFamily(f,instance)& - *plastic_dislokmc_qPerSlipFamily(f,instance)/& - (plastic_dislokmc_SolidSolutionStrength(instance)+plastic_dislokmc_tau_peierlsPerSlipFamily(f,instance))*& - StressRatio_pminus1*(1.0_pReal-StressRatio_p)**(plastic_dislokmc_qPerSlipFamily(f,instance)-1.0_pReal) )& - *(1.0_pReal - 2.0_pReal*plastic_dislokmc_sPerSlipFamily(f,instance)& - *abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance)))) + (abs(exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_disloKMC_qPerSlipFamily(f,instance)))& + *BoltzmannRatio*plastic_disloKMC_pPerSlipFamily(f,instance)& + *plastic_disloKMC_qPerSlipFamily(f,instance)/& + (plastic_disloKMC_SolidSolutionStrength(instance)+plastic_disloKMC_tau_peierlsPerSlipFamily(f,instance))*& + StressRatio_pminus1*(1.0_pReal-StressRatio_p)**(plastic_disloKMC_qPerSlipFamily(f,instance)-1.0_pReal) )& + *(1.0_pReal - 2.0_pReal*plastic_disloKMC_sPerSlipFamily(f,instance)& + *abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloKMC_qPerSlipFamily(f,instance)))) dgdot_dtauslip_neg = DotGamma0 * & - ( plastic_dislokmc_uPerSlipFamily(f,instance)*StressRatio_uminus1 & - /(plastic_dislokmc_SolidSolutionStrength(instance)+plastic_dislokmc_tau_peierlsPerSlipFamily(f,instance))& + ( plastic_disloKMC_uPerSlipFamily(f,instance)*StressRatio_uminus1 & + /(plastic_disloKMC_SolidSolutionStrength(instance)+plastic_disloKMC_tau_peierlsPerSlipFamily(f,instance))& * vel_slip & + StressRatio_u * dvel_slip) endif significantNegativeStress @@ -1297,35 +1302,35 @@ subroutine plastic_dislokmc_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Temperature, j = 0_pInt twinFamilies: do f = 1_pInt,lattice_maxNtwinFamily index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,ph)) ! at which index starts my family - twinSystems: do i = 1_pInt,plastic_dislokmc_Ntwin(f,instance) + twinSystems: do i = 1_pInt,plastic_disloKMC_Ntwin(f,instance) j = j+1_pInt !* Resolved shear stress on twin system tau_twin = dot_product(Tstar_v,lattice_Stwin_v(:,index_myFamily+i,ph)) !* Stress ratios if (tau_twin > tol_math_check) then - StressRatio_r = (plasticState(ph)%state(7*ns+4*nt+j, of)/tau_twin)**plastic_dislokmc_rPerTwinFamily(f,instance) + StressRatio_r = (plasticState(ph)%state(7*ns+4*nt+j, of)/tau_twin)**plastic_disloKMC_rPerTwinFamily(f,instance) !* Shear rates and their derivatives due to twin select case(lattice_structure(ph)) case (LATTICE_fcc_ID) s1=lattice_fcc_twinNucleationSlipPair(1,index_myFamily+i) s2=lattice_fcc_twinNucleationSlipPair(2,index_myFamily+i) - if (tau_twin < plastic_dislokmc_tau_r(j,instance)) then + if (tau_twin < plastic_disloKMC_tau_r(j,instance)) then Ndot0=(abs(gdot_slip_pos(s1))*(plasticState(ph)%state(s2,of)+plasticState(ph)%state(ns+s2, of))+& !no non-Schmid behavior for fcc, just take the not influenced positive gdot_slip_pos (= gdot_slip_neg) abs(gdot_slip_pos(s2))*(plasticState(ph)%state(s1,of)+plasticState(ph)%state(ns+s1, of)))/& - (plastic_dislokmc_L0(instance)*plastic_dislokmc_burgersPerSlipSystem(j,instance))*& - (1.0_pReal-exp(-plastic_dislokmc_VcrossSlip(instance)/(kB*Temperature)*& - (plastic_dislokmc_tau_r(j,instance)-tau_twin))) + (plastic_disloKMC_L0(instance)*plastic_disloKMC_burgersPerSlipSystem(j,instance))*& + (1.0_pReal-exp(-plastic_disloKMC_VcrossSlip(instance)/(kB*Temperature)*& + (plastic_disloKMC_tau_r(j,instance)-tau_twin))) else Ndot0=0.0_pReal end if case default - Ndot0=plastic_dislokmc_Ndot0PerTwinSystem(j,instance) + Ndot0=plastic_disloKMC_Ndot0PerTwinSystem(j,instance) end select gdot_twin = & - (plastic_dislokmc_MaxTwinFraction(instance)-sumf)*lattice_shearTwin(index_myFamily+i,ph)*& + (plastic_disloKMC_MaxTwinFraction(instance)-sumf)*lattice_shearTwin(index_myFamily+i,ph)*& plasticState(ph)%state(7*ns+5*nt+j, of)*Ndot0*exp(-StressRatio_r) - dgdot_dtautwin = ((gdot_twin*plastic_dislokmc_rPerTwinFamily(f,instance))/tau_twin)*StressRatio_r + dgdot_dtautwin = ((gdot_twin*plastic_disloKMC_rPerTwinFamily(f,instance))/tau_twin)*StressRatio_r endif !* Plastic velocity gradient for mechanical twinning @@ -1342,13 +1347,13 @@ subroutine plastic_dislokmc_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Temperature, dLp_dTstar99 = math_Plain3333to99(dLp_dTstar3333) -end subroutine plastic_dislokmc_LpAndItsTangent +end subroutine plastic_disloKMC_LpAndItsTangent !-------------------------------------------------------------------------------------------------- !> @brief calculates the rate of change of microstructure !-------------------------------------------------------------------------------------------------- -subroutine plastic_dislokmc_dotState(Tstar_v,Temperature,nSlipDamage,slipDamage,ipc,ip,el) +subroutine plastic_disloKMC_dotState(Tstar_v,Temperature,nSlipDamage,slipDamage,ipc,ip,el) use prec, only: & tol_math_check use math, only: & @@ -1413,15 +1418,15 @@ subroutine plastic_dislokmc_dotState(Tstar_v,Temperature,nSlipDamage,slipDamage, tau_twin, & vel_slip, & gdot_slip - real(pReal), dimension(plastic_dislokmc_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & + real(pReal), dimension(plastic_disloKMC_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & gdot_slip_pos, gdot_slip_neg !* Shortened notation of = mappingConstitutive(1,ipc,ip,el) ph = mappingConstitutive(2,ipc,ip,el) instance = phase_plasticityInstance(ph) - ns = plastic_dislokmc_totalNslip(instance) - nt = plastic_dislokmc_totalNtwin(instance) + ns = plastic_disloKMC_totalNslip(instance) + nt = plastic_disloKMC_totalNtwin(instance) !* Total twin volume fraction sumf = sum(plasticState(ph)%state((3_pInt*ns+1_pInt):(3_pInt*ns+nt), of)) ! safe for nt == 0 @@ -1433,22 +1438,22 @@ subroutine plastic_dislokmc_dotState(Tstar_v,Temperature,nSlipDamage,slipDamage, j = 0_pInt slipFamilies: do f = 1_pInt,lattice_maxNslipFamily index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family - slipSystems: do i = 1_pInt,plastic_dislokmc_Nslip(f,instance) + slipSystems: do i = 1_pInt,plastic_disloKMC_Nslip(f,instance) j = j+1_pInt !* Boltzmann ratio - BoltzmannRatio = plastic_dislokmc_QedgePerSlipSystem(j,instance)/(kB*Temperature) + BoltzmannRatio = plastic_disloKMC_QedgePerSlipSystem(j,instance)/(kB*Temperature) !* Initial shear rates DotGamma0 = & - plasticState(ph)%state(j, of)*plastic_dislokmc_burgersPerSlipSystem(j,instance)*& - plastic_dislokmc_v0PerSlipSystem(j,instance) + plasticState(ph)%state(j, of)*plastic_disloKMC_burgersPerSlipSystem(j,instance)*& + plastic_disloKMC_v0PerSlipSystem(j,instance) !* Resolved shear stress on slip system tau_slip_pos = dot_product(Tstar_v,lattice_Sslip_v(1:6,1,index_myFamily+i,ph)) tau_slip_neg = tau_slip_pos nonSchmidSystems: do k = 1,lattice_NnonSchmid(ph) - tau_slip_pos = tau_slip_pos + plastic_dislokmc_nonSchmidCoeff(k,instance)* & + tau_slip_pos = tau_slip_pos + plastic_disloKMC_nonSchmidCoeff(k,instance)* & dot_product(Tstar_v,lattice_Sslip_v(1:6,2*k, index_myFamily+i,ph)) - tau_slip_neg = tau_slip_neg + plastic_dislokmc_nonSchmidCoeff(k,instance)* & + tau_slip_neg = tau_slip_neg + plastic_disloKMC_nonSchmidCoeff(k,instance)* & dot_product(Tstar_v,lattice_Sslip_v(1:6,2*k+1,index_myFamily+i,ph)) enddo nonSchmidSystems tau_slip_pos = tau_slip_pos/slipDamage(j) @@ -1457,14 +1462,14 @@ subroutine plastic_dislokmc_dotState(Tstar_v,Temperature,nSlipDamage,slipDamage, significantPositiveStress: if((abs(tau_slip_pos)-plasticState(ph)%state(6*ns+4*nt+j, of)) > tol_math_check) then !* Stress ratios stressRatio = ((abs(tau_slip_pos)-plasticState(ph)%state(6*ns+4*nt+j, of))/& - (plastic_dislokmc_SolidSolutionStrength(instance)+& - plastic_dislokmc_tau_peierlsPerSlipFamily(f,instance))) - stressRatio_p = stressRatio** plastic_dislokmc_pPerSlipFamily(f,instance) - stressRatio_u = stressRatio** plastic_dislokmc_uPerSlipFamily(f,instance) + (plastic_disloKMC_SolidSolutionStrength(instance)+& + plastic_disloKMC_tau_peierlsPerSlipFamily(f,instance))) + stressRatio_p = stressRatio** plastic_disloKMC_pPerSlipFamily(f,instance) + stressRatio_u = stressRatio** plastic_disloKMC_uPerSlipFamily(f,instance) !* Shear rates due to slip - vel_slip = exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance)) & - * (1.0_pReal-plastic_dislokmc_sPerSlipFamily(f,instance) & - * exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance))) + vel_slip = exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_disloKMC_qPerSlipFamily(f,instance)) & + * (1.0_pReal-plastic_disloKMC_sPerSlipFamily(f,instance) & + * exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_disloKMC_qPerSlipFamily(f,instance))) gdot_slip_pos(j) = DotGamma0 & * StressRatio_u * vel_slip & @@ -1473,14 +1478,14 @@ subroutine plastic_dislokmc_dotState(Tstar_v,Temperature,nSlipDamage,slipDamage, significantNegativeStress: if((abs(tau_slip_neg)-plasticState(ph)%state(6*ns+4*nt+j, of)) > tol_math_check) then !* Stress ratios stressRatio = ((abs(tau_slip_neg)-plasticState(ph)%state(6*ns+4*nt+j, of))/& - (plastic_dislokmc_SolidSolutionStrength(instance)+& - plastic_dislokmc_tau_peierlsPerSlipFamily(f,instance))) - stressRatio_p = stressRatio** plastic_dislokmc_pPerSlipFamily(f,instance) - stressRatio_u = stressRatio** plastic_dislokmc_uPerSlipFamily(f,instance) + (plastic_disloKMC_SolidSolutionStrength(instance)+& + plastic_disloKMC_tau_peierlsPerSlipFamily(f,instance))) + stressRatio_p = stressRatio** plastic_disloKMC_pPerSlipFamily(f,instance) + stressRatio_u = stressRatio** plastic_disloKMC_uPerSlipFamily(f,instance) !* Shear rates due to slip - vel_slip = exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance)) & - * (1.0_pReal-plastic_dislokmc_sPerSlipFamily(f,instance) & - * exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance))) + vel_slip = exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_disloKMC_qPerSlipFamily(f,instance)) & + * (1.0_pReal-plastic_disloKMC_sPerSlipFamily(f,instance) & + * exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_disloKMC_qPerSlipFamily(f,instance))) gdot_slip_neg(j) = DotGamma0 & * StressRatio_u * vel_slip & @@ -1489,40 +1494,40 @@ subroutine plastic_dislokmc_dotState(Tstar_v,Temperature,nSlipDamage,slipDamage, gdot_slip = (gdot_slip_pos(j)+gdot_slip_neg(j))*0.5_pReal !* Multiplication DotRhoMultiplication = abs(gdot_slip)/& - (plastic_dislokmc_burgersPerSlipSystem(j,instance)* & + (plastic_disloKMC_burgersPerSlipSystem(j,instance)* & plasticState(ph)%state(5*ns+3*nt+j, of)) !* Dipole formation EdgeDipMinDistance = & - plastic_dislokmc_CEdgeDipMinDistance(instance)*plastic_dislokmc_burgersPerSlipSystem(j,instance) + plastic_disloKMC_CEdgeDipMinDistance(instance)*plastic_disloKMC_burgersPerSlipSystem(j,instance) if (tau_slip_pos == 0.0_pReal) then DotRhoDipFormation = 0.0_pReal else EdgeDipDistance = & - (3.0_pReal*lattice_mu(ph)*plastic_dislokmc_burgersPerSlipSystem(j,instance))/& + (3.0_pReal*lattice_mu(ph)*plastic_disloKMC_burgersPerSlipSystem(j,instance))/& (16.0_pReal*pi*abs(tau_slip_pos)) if (EdgeDipDistance>plasticState(ph)%state(5*ns+3*nt+j, of)) EdgeDipDistance=plasticState(ph)%state(5*ns+3*nt+j, of) if (EdgeDipDistance tol_math_check) then - StressRatio_r = (plasticState(ph)%state(7*ns+4*nt+j, of)/tau_twin)**plastic_dislokmc_rPerTwinFamily(f,instance) + StressRatio_r = (plasticState(ph)%state(7*ns+4*nt+j, of)/tau_twin)**plastic_disloKMC_rPerTwinFamily(f,instance) !* Shear rates and their derivatives due to twin select case(lattice_structure(ph)) case (LATTICE_fcc_ID) s1=lattice_fcc_twinNucleationSlipPair(1,index_myFamily+i) s2=lattice_fcc_twinNucleationSlipPair(2,index_myFamily+i) - if (tau_twin < plastic_dislokmc_tau_r(j,instance)) then + if (tau_twin < plastic_disloKMC_tau_r(j,instance)) then Ndot0=(abs(gdot_slip_pos(s1))*(plasticState(ph)%state(s2, of)+plasticState(ph)%state(ns+s2, of))+& !no non-Schmid behavior for fcc, just take the not influenced positive slip (gdot_slip_pos = gdot_slip_neg) abs(gdot_slip_pos(s2))*(plasticState(ph)%state(s1, of)+plasticState(ph)%state(ns+s1, of)))/& - (plastic_dislokmc_L0(instance)*plastic_dislokmc_burgersPerSlipSystem(j,instance))*& - (1.0_pReal-exp(-plastic_dislokmc_VcrossSlip(instance)/(kB*Temperature)*& - (plastic_dislokmc_tau_r(j,instance)-tau_twin))) + (plastic_disloKMC_L0(instance)*plastic_disloKMC_burgersPerSlipSystem(j,instance))*& + (1.0_pReal-exp(-plastic_disloKMC_VcrossSlip(instance)/(kB*Temperature)*& + (plastic_disloKMC_tau_r(j,instance)-tau_twin))) else Ndot0=0.0_pReal end if case default - Ndot0=plastic_dislokmc_Ndot0PerTwinSystem(j,instance) + Ndot0=plastic_disloKMC_Ndot0PerTwinSystem(j,instance) end select plasticState(ph)%dotState(3_pInt*ns+j, of) = & - (plastic_dislokmc_MaxTwinFraction(instance)-sumf)*& + (plastic_disloKMC_MaxTwinFraction(instance)-sumf)*& plasticState(ph)%state(7_pInt*ns+5_pInt*nt+j, of)*Ndot0*exp(-StressRatio_r) !* Dotstate for accumulated shear due to twin plasticState(ph)%dotState(3_pInt*ns+nt+j, of) = plasticState(ph)%dotState(3_pInt*ns+j, of) * & @@ -1587,13 +1592,13 @@ subroutine plastic_dislokmc_dotState(Tstar_v,Temperature,nSlipDamage,slipDamage, enddo twinSystems enddo twinFamilies -end subroutine plastic_dislokmc_dotState +end subroutine plastic_disloKMC_dotState !-------------------------------------------------------------------------------------------------- !> @brief return array of constitutive results !-------------------------------------------------------------------------------------------------- -function plastic_dislokmc_postResults(Tstar_v,Temperature,ipc,ip,el) +function plastic_disloKMC_postResults(Tstar_v,Temperature,ipc,ip,el) use prec, only: & tol_math_check use math, only: & @@ -1628,8 +1633,8 @@ function plastic_dislokmc_postResults(Tstar_v,Temperature,ipc,ip,el) ip, & !< integration point el !< element - real(pReal), dimension(plastic_dislokmc_sizePostResults(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & - plastic_dislokmc_postResults + real(pReal), dimension(plastic_disloKMC_sizePostResults(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & + plastic_disloKMC_postResults integer(pInt) :: & instance,& @@ -1642,31 +1647,31 @@ function plastic_dislokmc_postResults(Tstar_v,Temperature,ipc,ip,el) BoltzmannRatio,DotGamma0,StressRatio_r,Ndot0,stressRatio real(pReal) :: dvel_slip, vel_slip real(pReal) :: StressRatio_u,StressRatio_uminus1 - real(pReal), dimension(plastic_dislokmc_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & + real(pReal), dimension(plastic_disloKMC_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & gdot_slip_pos,dgdot_dtauslip_pos,tau_slip_pos,gdot_slip_neg,dgdot_dtauslip_neg,tau_slip_neg !* Shortened notation of = mappingConstitutive(1,ipc,ip,el) ph = mappingConstitutive(2,ipc,ip,el) instance = phase_plasticityInstance(ph) - ns = plastic_dislokmc_totalNslip(instance) - nt = plastic_dislokmc_totalNtwin(instance) + ns = plastic_disloKMC_totalNslip(instance) + nt = plastic_disloKMC_totalNtwin(instance) !* Total twin volume fraction sumf = sum(plasticState(ph)%state((3_pInt*ns+1_pInt):(3_pInt*ns+nt), of)) ! safe for nt == 0 !* Required output c = 0_pInt - plastic_dislokmc_postResults = 0.0_pReal + plastic_disloKMC_postResults = 0.0_pReal - do o = 1_pInt,plastic_dislokmc_Noutput(instance) - select case(plastic_dislokmc_outputID(o,instance)) + do o = 1_pInt,plastic_disloKMC_Noutput(instance) + select case(plastic_disloKMC_outputID(o,instance)) case (edge_density_ID) - plastic_dislokmc_postResults(c+1_pInt:c+ns) = plasticState(ph)%state(1_pInt:ns, of) + plastic_disloKMC_postResults(c+1_pInt:c+ns) = plasticState(ph)%state(1_pInt:ns, of) c = c + ns case (dipole_density_ID) - plastic_dislokmc_postResults(c+1_pInt:c+ns) = plasticState(ph)%state(ns+1_pInt:2_pInt*ns, of) + plastic_disloKMC_postResults(c+1_pInt:c+ns) = plasticState(ph)%state(ns+1_pInt:2_pInt*ns, of) c = c + ns case (shear_rate_slip_ID,shear_rate_twin_ID,stress_exponent_ID) gdot_slip_pos = 0.0_pReal @@ -1676,110 +1681,110 @@ function plastic_dislokmc_postResults(Tstar_v,Temperature,ipc,ip,el) j = 0_pInt slipFamilies: do f = 1_pInt,lattice_maxNslipFamily index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family - slipSystems: do i = 1_pInt,plastic_dislokmc_Nslip(f,instance) + slipSystems: do i = 1_pInt,plastic_disloKMC_Nslip(f,instance) j = j + 1_pInt !* Boltzmann ratio - BoltzmannRatio = plastic_dislokmc_QedgePerSlipSystem(j,instance)/(kB*Temperature) + BoltzmannRatio = plastic_disloKMC_QedgePerSlipSystem(j,instance)/(kB*Temperature) !* Initial shear rates DotGamma0 = & - plasticState(ph)%state(j, of)*plastic_dislokmc_burgersPerSlipSystem(j,instance)*& - plastic_dislokmc_v0PerSlipSystem(j,instance) + plasticState(ph)%state(j, of)*plastic_disloKMC_burgersPerSlipSystem(j,instance)*& + plastic_disloKMC_v0PerSlipSystem(j,instance) !* Resolved shear stress on slip system tau_slip_pos(j) = dot_product(Tstar_v,lattice_Sslip_v(:,1,index_myFamily+i,ph)) tau_slip_neg(j) = tau_slip_pos(j) nonSchmidSystems: do k = 1,lattice_NnonSchmid(ph) - tau_slip_pos = tau_slip_pos + plastic_dislokmc_nonSchmidCoeff(k,instance)* & + tau_slip_pos = tau_slip_pos + plastic_disloKMC_nonSchmidCoeff(k,instance)* & dot_product(Tstar_v,lattice_Sslip_v(1:6,2*k,index_myFamily+i,ph)) - tau_slip_neg = tau_slip_neg + plastic_dislokmc_nonSchmidCoeff(k,instance)* & + tau_slip_neg = tau_slip_neg + plastic_disloKMC_nonSchmidCoeff(k,instance)* & dot_product(Tstar_v,lattice_Sslip_v(1:6,2*k+1,index_myFamily+i,ph)) enddo nonSchmidSystems significantPostitiveStress: if((abs(tau_slip_pos(j))-plasticState(ph)%state(6*ns+4*nt+j, of)) > tol_math_check) then !* Stress ratios stressRatio = ((abs(tau_slip_pos(j))-plasticState(ph)%state(6*ns+4*nt+j, of))/& - (plastic_dislokmc_SolidSolutionStrength(instance)+& - plastic_dislokmc_tau_peierlsPerSlipFamily(f,instance))) - stressRatio_p = stressRatio** plastic_dislokmc_pPerSlipFamily(f,instance) - stressRatio_pminus1 = stressRatio**(plastic_dislokmc_pPerSlipFamily(f,instance)-1.0_pReal) - stressRatio_u = stressRatio** plastic_dislokmc_uPerSlipFamily(f,instance) - stressRatio_uminus1 = stressRatio**(plastic_dislokmc_uPerSlipFamily(f,instance)-1.0_pReal) + (plastic_disloKMC_SolidSolutionStrength(instance)+& + plastic_disloKMC_tau_peierlsPerSlipFamily(f,instance))) + stressRatio_p = stressRatio** plastic_disloKMC_pPerSlipFamily(f,instance) + stressRatio_pminus1 = stressRatio**(plastic_disloKMC_pPerSlipFamily(f,instance)-1.0_pReal) + stressRatio_u = stressRatio** plastic_disloKMC_uPerSlipFamily(f,instance) + stressRatio_uminus1 = stressRatio**(plastic_disloKMC_uPerSlipFamily(f,instance)-1.0_pReal) !* Shear rates due to slip - vel_slip = exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance)) & - * (1.0_pReal-plastic_dislokmc_sPerSlipFamily(f,instance) & - * exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance))) + vel_slip = exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_disloKMC_qPerSlipFamily(f,instance)) & + * (1.0_pReal-plastic_disloKMC_sPerSlipFamily(f,instance) & + * exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_disloKMC_qPerSlipFamily(f,instance))) gdot_slip_pos(j) = DotGamma0 & * StressRatio_u * vel_slip & * sign(1.0_pReal,tau_slip_pos(j)) !* Derivatives of shear rates dvel_slip = & - (abs(exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance)))& - *BoltzmannRatio*plastic_dislokmc_pPerSlipFamily(f,instance)& - *plastic_dislokmc_qPerSlipFamily(f,instance)/& - (plastic_dislokmc_SolidSolutionStrength(instance)+plastic_dislokmc_tau_peierlsPerSlipFamily(f,instance))*& - StressRatio_pminus1*(1.0_pReal-StressRatio_p)**(plastic_dislokmc_qPerSlipFamily(f,instance)-1.0_pReal) )& - *(1.0_pReal - 2.0_pReal*plastic_dislokmc_sPerSlipFamily(f,instance)& - *abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance)))) + (abs(exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_disloKMC_qPerSlipFamily(f,instance)))& + *BoltzmannRatio*plastic_disloKMC_pPerSlipFamily(f,instance)& + *plastic_disloKMC_qPerSlipFamily(f,instance)/& + (plastic_disloKMC_SolidSolutionStrength(instance)+plastic_disloKMC_tau_peierlsPerSlipFamily(f,instance))*& + StressRatio_pminus1*(1.0_pReal-StressRatio_p)**(plastic_disloKMC_qPerSlipFamily(f,instance)-1.0_pReal) )& + *(1.0_pReal - 2.0_pReal*plastic_disloKMC_sPerSlipFamily(f,instance)& + *abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloKMC_qPerSlipFamily(f,instance)))) dgdot_dtauslip_pos(j) = DotGamma0 * & - ( plastic_dislokmc_uPerSlipFamily(f,instance)*StressRatio_uminus1 & - /(plastic_dislokmc_SolidSolutionStrength(instance)+plastic_dislokmc_tau_peierlsPerSlipFamily(f,instance))& + ( plastic_disloKMC_uPerSlipFamily(f,instance)*StressRatio_uminus1 & + /(plastic_disloKMC_SolidSolutionStrength(instance)+plastic_disloKMC_tau_peierlsPerSlipFamily(f,instance))& * vel_slip & + StressRatio_u * dvel_slip) endif significantPostitiveStress significantNegativeStress: if((abs(tau_slip_neg(j))-plasticState(ph)%state(6*ns+4*nt+j, of)) > tol_math_check) then !* Stress ratios stressRatio = ((abs(tau_slip_neg(j))-plasticState(ph)%state(6*ns+4*nt+j, of))/& - (plastic_dislokmc_SolidSolutionStrength(instance)+& - plastic_dislokmc_tau_peierlsPerSlipFamily(f,instance))) - stressRatio_p = stressRatio** plastic_dislokmc_pPerSlipFamily(f,instance) - stressRatio_pminus1 = stressRatio**(plastic_dislokmc_pPerSlipFamily(f,instance)-1.0_pReal) - stressRatio_u = stressRatio** plastic_dislokmc_uPerSlipFamily(f,instance) - stressRatio_uminus1 = stressRatio**(plastic_dislokmc_uPerSlipFamily(f,instance)-1.0_pReal) + (plastic_disloKMC_SolidSolutionStrength(instance)+& + plastic_disloKMC_tau_peierlsPerSlipFamily(f,instance))) + stressRatio_p = stressRatio** plastic_disloKMC_pPerSlipFamily(f,instance) + stressRatio_pminus1 = stressRatio**(plastic_disloKMC_pPerSlipFamily(f,instance)-1.0_pReal) + stressRatio_u = stressRatio** plastic_disloKMC_uPerSlipFamily(f,instance) + stressRatio_uminus1 = stressRatio**(plastic_disloKMC_uPerSlipFamily(f,instance)-1.0_pReal) !* Shear rates due to slip - vel_slip = exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance)) & - * (1.0_pReal-plastic_dislokmc_sPerSlipFamily(f,instance) & - * exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance))) + vel_slip = exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_disloKMC_qPerSlipFamily(f,instance)) & + * (1.0_pReal-plastic_disloKMC_sPerSlipFamily(f,instance) & + * exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_disloKMC_qPerSlipFamily(f,instance))) gdot_slip_neg(j) = DotGamma0 & * StressRatio_u * vel_slip & * sign(1.0_pReal,tau_slip_neg(j)) !* Derivatives of shear rates dvel_slip = & - (abs(exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance)))& - *BoltzmannRatio*plastic_dislokmc_pPerSlipFamily(f,instance)& - *plastic_dislokmc_qPerSlipFamily(f,instance)/& - (plastic_dislokmc_SolidSolutionStrength(instance)+plastic_dislokmc_tau_peierlsPerSlipFamily(f,instance))*& - StressRatio_pminus1*(1.0_pReal-StressRatio_p)**(plastic_dislokmc_qPerSlipFamily(f,instance)-1.0_pReal) )& - *(1.0_pReal - 2.0_pReal*plastic_dislokmc_sPerSlipFamily(f,instance)& - *abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance)))) + (abs(exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_disloKMC_qPerSlipFamily(f,instance)))& + *BoltzmannRatio*plastic_disloKMC_pPerSlipFamily(f,instance)& + *plastic_disloKMC_qPerSlipFamily(f,instance)/& + (plastic_disloKMC_SolidSolutionStrength(instance)+plastic_disloKMC_tau_peierlsPerSlipFamily(f,instance))*& + StressRatio_pminus1*(1.0_pReal-StressRatio_p)**(plastic_disloKMC_qPerSlipFamily(f,instance)-1.0_pReal) )& + *(1.0_pReal - 2.0_pReal*plastic_disloKMC_sPerSlipFamily(f,instance)& + *abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_disloKMC_qPerSlipFamily(f,instance)))) dgdot_dtauslip_neg(j) = DotGamma0 * & - ( plastic_dislokmc_uPerSlipFamily(f,instance)*StressRatio_uminus1 & - /(plastic_dislokmc_SolidSolutionStrength(instance)+plastic_dislokmc_tau_peierlsPerSlipFamily(f,instance))& + ( plastic_disloKMC_uPerSlipFamily(f,instance)*StressRatio_uminus1 & + /(plastic_disloKMC_SolidSolutionStrength(instance)+plastic_disloKMC_tau_peierlsPerSlipFamily(f,instance))& * vel_slip & + StressRatio_u * dvel_slip) endif significantNegativeStress enddo slipSystems enddo slipFamilies - if (plastic_dislokmc_outputID(o,instance) == shear_rate_slip_ID) then - plastic_dislokmc_postResults(c+1:c+ns) = (gdot_slip_pos + gdot_slip_neg)*0.5_pReal + if (plastic_disloKMC_outputID(o,instance) == shear_rate_slip_ID) then + plastic_disloKMC_postResults(c+1:c+ns) = (gdot_slip_pos + gdot_slip_neg)*0.5_pReal c = c + ns - elseif (plastic_dislokmc_outputID(o,instance) == shear_rate_twin_ID) then + elseif (plastic_disloKMC_outputID(o,instance) == shear_rate_twin_ID) then if (nt > 0_pInt) then j = 0_pInt twinFamilies1: do f = 1_pInt,lattice_maxNtwinFamily index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,ph)) ! at which index starts my family - twinSystems1: do i = 1,plastic_dislokmc_Ntwin(f,instance) + twinSystems1: do i = 1,plastic_disloKMC_Ntwin(f,instance) j = j + 1_pInt !* Resolved shear stress on twin system tau_twin = dot_product(Tstar_v,lattice_Stwin_v(:,index_myFamily+i,ph)) !* Stress ratios StressRatio_r = (plasticState(ph)%state(7_pInt*ns+4_pInt*nt+j, of)/ & - tau_twin)**plastic_dislokmc_rPerTwinFamily(f,instance) + tau_twin)**plastic_disloKMC_rPerTwinFamily(f,instance) !* Shear rates due to twin if ( tau_twin > 0.0_pReal ) then @@ -1787,34 +1792,34 @@ function plastic_dislokmc_postResults(Tstar_v,Temperature,ipc,ip,el) case (LATTICE_fcc_ID) s1=lattice_fcc_twinNucleationSlipPair(1,index_myFamily+i) s2=lattice_fcc_twinNucleationSlipPair(2,index_myFamily+i) - if (tau_twin < plastic_dislokmc_tau_r(j,instance)) then + if (tau_twin < plastic_disloKMC_tau_r(j,instance)) then Ndot0=(abs(gdot_slip_pos(s1))*(plasticState(ph)%state(s2, of)+plasticState(ph)%state(ns+s2, of))+& !no non-Schmid behavior for fcc, just take the not influenced positive slip (gdot_slip_pos = gdot_slip_neg) abs(gdot_slip_pos(s2))*(plasticState(ph)%state(s1, of)+plasticState(ph)%state(ns+s1, of)))/& - (plastic_dislokmc_L0(instance)*& - plastic_dislokmc_burgersPerSlipSystem(j,instance))*& - (1.0_pReal-exp(-plastic_dislokmc_VcrossSlip(instance)/(kB*Temperature)*& - (plastic_dislokmc_tau_r(j,instance)-tau_twin))) + (plastic_disloKMC_L0(instance)*& + plastic_disloKMC_burgersPerSlipSystem(j,instance))*& + (1.0_pReal-exp(-plastic_disloKMC_VcrossSlip(instance)/(kB*Temperature)*& + (plastic_disloKMC_tau_r(j,instance)-tau_twin))) else Ndot0=0.0_pReal end if case default - Ndot0=plastic_dislokmc_Ndot0PerTwinSystem(j,instance) + Ndot0=plastic_disloKMC_Ndot0PerTwinSystem(j,instance) end select - plastic_dislokmc_postResults(c+j) = & - (plastic_dislokmc_MaxTwinFraction(instance)-sumf)*lattice_shearTwin(index_myFamily+i,ph)*& + plastic_disloKMC_postResults(c+j) = & + (plastic_disloKMC_MaxTwinFraction(instance)-sumf)*lattice_shearTwin(index_myFamily+i,ph)*& plasticState(ph)%state(7_pInt*ns+5_pInt*nt+j, of)*Ndot0*exp(-StressRatio_r) endif enddo twinSystems1 enddo twinFamilies1 endif c = c + nt - elseif(plastic_dislokmc_outputID(o,instance) == stress_exponent_ID) then + elseif(plastic_disloKMC_outputID(o,instance) == stress_exponent_ID) then do j = 1_pInt, ns if ((gdot_slip_pos(j)+gdot_slip_neg(j))*0.5_pReal==0.0_pReal) then - plastic_dislokmc_postResults(c+j) = 0.0_pReal + plastic_disloKMC_postResults(c+j) = 0.0_pReal else - plastic_dislokmc_postResults(c+j) = (tau_slip_pos(j)+tau_slip_neg(j))/& + plastic_disloKMC_postResults(c+j) = (tau_slip_pos(j)+tau_slip_neg(j))/& (gdot_slip_pos(j)+gdot_slip_neg(j))*& (dgdot_dtauslip_pos(j)+dgdot_dtauslip_neg(j))* 0.5_pReal endif @@ -1823,50 +1828,50 @@ function plastic_dislokmc_postResults(Tstar_v,Temperature,ipc,ip,el) endif case (accumulated_shear_slip_ID) - plastic_dislokmc_postResults(c+1_pInt:c+ns) = & + plastic_disloKMC_postResults(c+1_pInt:c+ns) = & plasticState(ph)%state((2_pInt*ns+1_pInt):(3_pInt*ns), of) c = c + ns case (mfp_slip_ID) - plastic_dislokmc_postResults(c+1_pInt:c+ns) =& + plastic_disloKMC_postResults(c+1_pInt:c+ns) =& plasticState(ph)%state((5_pInt*ns+3_pInt*nt+1_pInt):(6_pInt*ns+3_pInt*nt), of) c = c + ns case (resolved_stress_slip_ID) j = 0_pInt slipFamilies1: do f = 1_pInt,lattice_maxNslipFamily index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family - slipSystems1: do i = 1_pInt,plastic_dislokmc_Nslip(f,instance) + slipSystems1: do i = 1_pInt,plastic_disloKMC_Nslip(f,instance) j = j + 1_pInt - plastic_dislokmc_postResults(c+j) =& + plastic_disloKMC_postResults(c+j) =& dot_product(Tstar_v,lattice_Sslip_v(:,1,index_myFamily+i,ph)) enddo slipSystems1; enddo slipFamilies1 c = c + ns case (threshold_stress_slip_ID) - plastic_dislokmc_postResults(c+1_pInt:c+ns) = & + plastic_disloKMC_postResults(c+1_pInt:c+ns) = & plasticState(ph)%state((6_pInt*ns+4_pInt*nt+1_pInt):(7_pInt*ns+4_pInt*nt), of) c = c + ns case (edge_dipole_distance_ID) j = 0_pInt slipFamilies2: do f = 1_pInt,lattice_maxNslipFamily index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family - slipSystems2: do i = 1_pInt,plastic_dislokmc_Nslip(f,instance) + slipSystems2: do i = 1_pInt,plastic_disloKMC_Nslip(f,instance) j = j + 1_pInt - plastic_dislokmc_postResults(c+j) = & - (3.0_pReal*lattice_mu(ph)*plastic_dislokmc_burgersPerSlipSystem(j,instance))/& + plastic_disloKMC_postResults(c+j) = & + (3.0_pReal*lattice_mu(ph)*plastic_disloKMC_burgersPerSlipSystem(j,instance))/& (16.0_pReal*pi*abs(dot_product(Tstar_v,lattice_Sslip_v(:,1,index_myFamily+i,ph)))) - plastic_dislokmc_postResults(c+j)=min(plastic_dislokmc_postResults(c+j),& + plastic_disloKMC_postResults(c+j)=min(plastic_disloKMC_postResults(c+j),& plasticState(ph)%state(5*ns+3*nt+j, of)) enddo slipSystems2; enddo slipFamilies2 c = c + ns case (twin_fraction_ID) - plastic_dislokmc_postResults(c+1_pInt:c+nt) = plasticState(ph)%state((3_pInt*ns+1_pInt):(3_pInt*ns+nt), of) + plastic_disloKMC_postResults(c+1_pInt:c+nt) = plasticState(ph)%state((3_pInt*ns+1_pInt):(3_pInt*ns+nt), of) c = c + nt case (accumulated_shear_twin_ID) - plastic_dislokmc_postResults(c+1_pInt:c+nt) = plasticState(ph)% & + plastic_disloKMC_postResults(c+1_pInt:c+nt) = plasticState(ph)% & state((3_pInt*ns+nt+1_pInt) :(3_pInt*ns+2_pInt*nt), of) c = c + nt case (mfp_twin_ID) - plastic_dislokmc_postResults(c+1_pInt:c+nt) = plasticState(ph)% & + plastic_disloKMC_postResults(c+1_pInt:c+nt) = plasticState(ph)% & state((6_pInt*ns+3_pInt*nt+1_pInt):(6_pInt*ns+4_pInt*nt), of) c = c + nt case (resolved_stress_twin_ID) @@ -1874,18 +1879,18 @@ function plastic_dislokmc_postResults(Tstar_v,Temperature,ipc,ip,el) j = 0_pInt twinFamilies2: do f = 1_pInt,lattice_maxNtwinFamily index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,ph)) ! at which index starts my family - twinSystems2: do i = 1_pInt,plastic_dislokmc_Ntwin(f,instance) + twinSystems2: do i = 1_pInt,plastic_disloKMC_Ntwin(f,instance) j = j + 1_pInt - plastic_dislokmc_postResults(c+j) = dot_product(Tstar_v,lattice_Stwin_v(:,index_myFamily+i,ph)) + plastic_disloKMC_postResults(c+j) = dot_product(Tstar_v,lattice_Stwin_v(:,index_myFamily+i,ph)) enddo twinSystems2; enddo twinFamilies2 endif c = c + nt case (threshold_stress_twin_ID) - plastic_dislokmc_postResults(c+1_pInt:c+nt) = plasticState(ph)% & + plastic_disloKMC_postResults(c+1_pInt:c+nt) = plasticState(ph)% & state((7_pInt*ns+4_pInt*nt+1_pInt):(7_pInt*ns+5_pInt*nt), of) c = c + nt end select enddo -end function plastic_dislokmc_postResults +end function plastic_disloKMC_postResults -end module plastic_dislokmc +end module plastic_disloKMC diff --git a/code/plastic_disloUCLA.f90 b/code/plastic_disloUCLA.f90 index e0e85e940..97a69effe 100644 --- a/code/plastic_disloUCLA.f90 +++ b/code/plastic_disloUCLA.f90 @@ -146,8 +146,6 @@ module plastic_disloUCLA plastic_disloUCLA_microstructure, & plastic_disloUCLA_LpAndItsTangent, & plastic_disloUCLA_dotState, & - plastic_disloUCLA_getAccumulatedSlip, & - plastic_disloUCLA_getSlipRate, & plastic_disloUCLA_postResults private :: & plastic_disloUCLA_stateInit, & @@ -355,6 +353,11 @@ subroutine plastic_disloUCLA_init(fileUnit) plastic_disloUCLA_outputID(plastic_disloUCLA_Noutput(instance),instance) = resolved_stress_slip_ID plastic_disloUCLA_output(plastic_disloUCLA_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) + case ('threshold_stress_slip') + plastic_disloUCLA_Noutput(instance) = plastic_disloUCLA_Noutput(instance) + 1_pInt + plastic_disloUCLA_outputID(plastic_disloUCLA_Noutput(instance),instance) = threshold_stress_slip_ID + plastic_disloUCLA_output(plastic_disloUCLA_Noutput(instance),instance) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) case ('edge_dipole_distance') plastic_disloUCLA_Noutput(instance) = plastic_disloUCLA_Noutput(instance) + 1_pInt plastic_disloUCLA_outputID(plastic_disloUCLA_Noutput(instance),instance) = edge_dipole_distance_ID @@ -1684,95 +1687,6 @@ subroutine plastic_disloUCLA_dotState(Tstar_v,Temperature,nSlipDamage,slipDamage end subroutine plastic_disloUCLA_dotState -!-------------------------------------------------------------------------------------------------- -!> @brief returns accumulated slip -!-------------------------------------------------------------------------------------------------- -subroutine plastic_disloUCLA_getAccumulatedSlip(nSlip,accumulatedSlip,ipc, ip, el) - use lattice, only: & - lattice_maxNslipFamily - use material, only: & - mappingConstitutive, & - plasticState, & - phase_plasticityInstance - - implicit none - real(pReal), dimension(:), allocatable :: & - accumulatedSlip - integer(pInt) :: & - nSlip - integer(pInt), intent(in) :: & - ipc, & !< grain number - ip, & !< integration point number - el !< element number - integer(pInt) :: & - offset, & - phase, & - instance, & - offset_accshear_slip, & - f, j, i - - offset = mappingConstitutive(1,ipc,ip,el) - phase = mappingConstitutive(2,ipc,ip,el) - instance = phase_plasticityInstance(phase) - nSlip = plastic_disloUCLA_totalNslip(instance) - allocate(accumulatedSlip(nSlip)) - offset_accshear_slip = 2_pInt*nSlip - - j = 0_pInt - slipFamilies: do f = 1_pInt,lattice_maxNslipFamily - slipSystems: do i = 1_pInt,plastic_disloUCLA_Nslip(f,instance) - j = j+1_pInt - accumulatedSlip(j) = plasticState(phase)%state(offset_accshear_slip+j,offset) - enddo slipSystems - enddo slipFamilies - -end subroutine plastic_disloUCLA_getAccumulatedSlip - - -!-------------------------------------------------------------------------------------------------- -!> @brief returns accumulated slip -!-------------------------------------------------------------------------------------------------- -subroutine plastic_disloUCLA_getSlipRate(nSlip,slipRate,ipc, ip, el) - use lattice, only: & - lattice_maxNslipFamily - use material, only: & - mappingConstitutive, & - plasticState, & - phase_plasticityInstance - - implicit none - real(pReal), dimension(:), allocatable :: & - slipRate - integer(pInt) :: & - nSlip - integer(pInt), intent(in) :: & - ipc, & !< grain number - ip, & !< integration point number - el !< element number - integer(pInt) :: & - offset, & - phase, & - instance, & - offset_accshear_slip, & - f, j, i - - offset = mappingConstitutive(1,ipc,ip,el) - phase = mappingConstitutive(2,ipc,ip,el) - instance = phase_plasticityInstance(phase) - nSlip = plastic_disloUCLA_totalNslip(instance) - allocate(slipRate(nSlip)) - offset_accshear_slip = 2_pInt*nSlip - - j = 0_pInt - slipFamilies: do f = 1_pInt,lattice_maxNslipFamily - slipSystems: do i = 1_pInt,plastic_disloUCLA_Nslip(f,instance) - j = j+1_pInt - slipRate(j) = plasticState(phase)%dotState(offset_accshear_slip+j,offset) - enddo slipSystems - enddo slipFamilies - -end subroutine plastic_disloUCLA_getSlipRate - !-------------------------------------------------------------------------------------------------- !> @brief return array of constitutive results diff --git a/code/plastic_dislotwin.f90 b/code/plastic_dislotwin.f90 index 64c55a221..312c12567 100644 --- a/code/plastic_dislotwin.f90 +++ b/code/plastic_dislotwin.f90 @@ -396,6 +396,11 @@ subroutine plastic_dislotwin_init(fileUnit) plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = resolved_stress_slip_ID plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) + case ('threshold_stress_slip') + plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt + plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = threshold_stress_slip_ID + plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) case ('edge_dipole_distance') plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = edge_dipole_distance_ID