Added kink-pair pre-factor for screw dislocation mobilities on non-basal slip systems in hex

This commit is contained in:
Alankar Alankar 2010-08-06 15:53:45 +00:00
parent 298cecbfec
commit 9f071c3e01
1 changed files with 460 additions and 214 deletions

View File

@ -2,6 +2,80 @@
!************************************ !************************************
!* Module: CONSTITUTIVE * !* Module: CONSTITUTIVE *
!************************************ !************************************
! Parameters for aluminum
! [alumod]
! constitution titanmod
! (output) rhoedge
! (output) rhoscrew
! (output) velocity_edge
! (output) velocity_screw
! (output) rss_slip
! (output) gamma_dot
! (output) dgdotdtau
! (output) resistance_edge
! (output) resistance_screw
! (output) segment_edge
! (output) segment_screw
! (output) total_generation
! (output) total_annihilation
! (output) total_density
! (output) stressratio_edgep
! (output) stressratio_screwp
! lattice_structure fcc
! covera_ratio 1.587
! c11 106.75e9
! c12 60.41e9
! c44 28.34e9
! c13 68.8e9
! c33 180.5e9
! nslip 12 0 0 0 # per family
! ntwin 0 0 0 0 # per family
! rho_edge0 5.56e8 0 0 0
! rho_screw0 5.56e8 0 0 0
! slipburgers 2.86e-10 0 0 0 # per family
! twinburgers 2.86e-10 0 0 0
! f0 3.2e-19 0 0 0
! v0e 1e-1 0 0 0
! v0s 1e-1 0 0 0
! ndot0 1 0 0 0
! twinsize 1e-05 0 0 0
! celambdaslip 1.0 0 0 0
! cslambdaslip 1.0 0 0 0
! rlengthscrew 1e-6 1e-6 1e-6 1e-6
! grainsize 10e-6
! maxtwinfraction 0.7
! pe 0.11 0 0 0
! ps 0.11 0 0 0
! qe 1.41 0 0 0
! qs 1.41 0 0 0
! rexponent 0.2 0 0 0
! d0 0.2e-5 0 0 0
! qsd 3.0e-19 0 0 0
! cmfptwin 0.5
! cthresholdtwin 0.1
! cedgedipmindistance 50
! catomicvolume 10e-15
! tau0e 5e6 0 0 0 # per family
! tau0s 5e6 0 0 0 # per family
! capre 10.6e-9 0 0 0
! caprs 100.0e-9 0 0 0
! #interactionslipslip 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1
! interactionslipslip 0.10 0.22 0.30 0.16 0.38 0.45
! # Devincre : 0.122 0.122 0.625 0.07 0.137 0.122
! # Arsenlis : G0=0.10, G1=0.22, G2=0.30, G3=0.38, G4=0.16, G5=0.40
! #G3=glissile, G4=Hirth lock, G5=Lomer-Cottrell lock, G2=cross-slip interaction, G0=same Burgers vector and parallel plane (self interaction)
! #G1=different Burgers vectors but parallel slip planes
! #! Interaction types
! #! 1 --- self interaction, G0
! #! 2 --- coplanar interaction, G1
! #! 3 --- collinear interaction, G2
! #! 4 --- Hirth locks, G3
! #! 5 --- glissile junctions, G4
! #! 6 --- Lomer locks, G5
! interactionsliptwin 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
! interactiontwinslip 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
! interactiontwintwin 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
! relevantRho 1.e1
MODULE constitutive_titanmod MODULE constitutive_titanmod
@ -13,15 +87,29 @@ implicit none
character(len=*), parameter :: constitutive_titanmod_label = 'titanmod' character(len=*), parameter :: constitutive_titanmod_label = 'titanmod'
character(len=18), dimension(2), parameter:: constitutive_titanmod_listBasicSlipStates = (/'rho_edge ', & character(len=18), dimension(2), parameter:: constitutive_titanmod_listBasicSlipStates = (/'rho_edge ', &
'rho_screw'/) 'rho_screw'/)
character(len=18), dimension(1), parameter:: constitutive_titanmod_listBasicTwinStates = (/'twinFraction'/) character(len=18), dimension(1), parameter:: constitutive_titanmod_listBasicTwinStates = (/'twinFraction'/)
character(len=18), dimension(5), parameter:: constitutive_titanmod_listDependentSlipStates =(/'invLambdaSlipe', & character(len=18), dimension(19), parameter:: constitutive_titanmod_listDependentSlipStates =(/'segment_edge', &
'invLambdaSlips', & 'segment_screw', &
'etauSlipThreshold', & 'rss_slip', &
'stauSlipThreshold', & 'gamma_dot', &
'invLambdaSlipTwin'/) 'dgdotdtau', &
'resistance_edge', &
'resistance_screw', &
'invLambdaSlipTwin',&
'stressratio_edgep', &
'stressratio_screwp', &
'velocity_edge', &
'velocity_screw', &
'edge_generation',&
'screw_generation', &
'edge_annihilation', &
'screw_annihilation', &
'total_generation', &
'total_annihilation', &
'total_density'/)
character(len=18), dimension(4), parameter:: constitutive_titanmod_listDependentTwinStates =(/'invLambdaTwin ', & character(len=18), dimension(4), parameter:: constitutive_titanmod_listDependentTwinStates =(/'invLambdaTwin ', &
'meanFreePathTwin', & 'meanFreePathTwin', &
'tauTwinThreshold', & 'tauTwinThreshold', &
'twinVolume '/) 'twinVolume '/)
real(pReal), parameter :: kB = 1.38e-23_pReal ! Boltzmann constant in J/Kelvin real(pReal), parameter :: kB = 1.38e-23_pReal ! Boltzmann constant in J/Kelvin
@ -71,10 +159,10 @@ real(pReal), dimension(:,:), allocatable :: constitutive_titanmod_
constitutive_titanmod_burgersPerTwinSystem, & ! absolute length of burgers vector [m] for each twin system and instance constitutive_titanmod_burgersPerTwinSystem, & ! absolute length of burgers vector [m] for each twin system and instance
constitutive_titanmod_f0_PerSlipFamily, & ! activation energy for glide [J] for each slip family and instance constitutive_titanmod_f0_PerSlipFamily, & ! activation energy for glide [J] for each slip family and instance
constitutive_titanmod_f0_PerSlipSystem, & ! activation energy for glide [J] for each slip system and instance constitutive_titanmod_f0_PerSlipSystem, & ! activation energy for glide [J] for each slip system and instance
constitutive_titanmod_tau0e_PerSlipFamily, & ! Initial yield stress edge dislocations per slip family constitutive_titanmod_tau0e_PerSlipFamily, & ! Initial yield stress for edge dislocations per slip family
constitutive_titanmod_tau0e_PerSlipSystem, & ! Initial yield stress edge dislocations per slip system constitutive_titanmod_tau0e_PerSlipSystem, & ! Initial yield stress for edge dislocations per slip system
constitutive_titanmod_tau0s_PerSlipFamily, & ! Initial yield stress screw dislocations per slip family constitutive_titanmod_tau0s_PerSlipFamily, & ! Initial yield stress for screw dislocations per slip family
constitutive_titanmod_tau0s_PerSlipSystem, & ! Initial yield stress screw dislocations per slip system constitutive_titanmod_tau0s_PerSlipSystem, & ! Initial yield stress for screw dislocations per slip system
constitutive_titanmod_capre_PerSlipFamily, & ! Capture radii for edge dislocations per slip family constitutive_titanmod_capre_PerSlipFamily, & ! Capture radii for edge dislocations per slip family
constitutive_titanmod_capre_PerSlipSystem, & ! Capture radii for edge dislocations per slip system constitutive_titanmod_capre_PerSlipSystem, & ! Capture radii for edge dislocations per slip system
constitutive_titanmod_caprs_PerSlipFamily, & ! Capture radii for screw dislocations per slip family constitutive_titanmod_caprs_PerSlipFamily, & ! Capture radii for screw dislocations per slip family
@ -87,10 +175,12 @@ real(pReal), dimension(:,:), allocatable :: constitutive_titanmod_
constitutive_titanmod_ps_PerSlipSystem, & ! p-exponent in glide velocity constitutive_titanmod_ps_PerSlipSystem, & ! p-exponent in glide velocity
constitutive_titanmod_qe_PerSlipSystem, & ! q-exponent in glide velocity constitutive_titanmod_qe_PerSlipSystem, & ! q-exponent in glide velocity
constitutive_titanmod_qs_PerSlipSystem, & ! q-exponent in glide velocity constitutive_titanmod_qs_PerSlipSystem, & ! q-exponent in glide velocity
constitutive_titanmod_v0e_PerSlipFamily, & ! dislocation velocity prefactor [m/s] for each family and instance constitutive_titanmod_v0e_PerSlipFamily, & ! edge dislocation velocity prefactor [m/s] for each family and instance
constitutive_titanmod_v0e_PerSlipSystem, & ! dislocation velocity prefactor [m/s] for each slip system and instance constitutive_titanmod_v0e_PerSlipSystem, & ! screw dislocation velocity prefactor [m/s] for each slip system and instance
constitutive_titanmod_v0s_PerSlipFamily, & ! dislocation velocity prefactor [m/s] for each family and instance constitutive_titanmod_v0s_PerSlipFamily, & ! edge dislocation velocity prefactor [m/s] for each family and instance
constitutive_titanmod_v0s_PerSlipSystem, & ! dislocation velocity prefactor [m/s] for each slip system and instance constitutive_titanmod_v0s_PerSlipSystem, & ! screw dislocation velocity prefactor [m/s] for each slip system and instance
constitutive_titanmod_rlengthscrew_PerSlipFamily, & ! screw dislocation mobility prefactor for kink-pairs per slip family
constitutive_titanmod_rlengthscrew_PerSlipSystem, & ! screw dislocation mobility prefactor for kink-pairs per slip system
constitutive_titanmod_Ndot0PerTwinFamily, & ! twin nucleation rate [1/m³s] for each twin family and instance constitutive_titanmod_Ndot0PerTwinFamily, & ! twin nucleation rate [1/m³s] for each twin family and instance
constitutive_titanmod_Ndot0PerTwinSystem, & ! twin nucleation rate [1/m³s] for each twin system and instance constitutive_titanmod_Ndot0PerTwinSystem, & ! twin nucleation rate [1/m³s] for each twin system and instance
constitutive_titanmod_twinsizePerTwinFamily, & ! twin thickness [m] for each twin family and instance constitutive_titanmod_twinsizePerTwinFamily, & ! twin thickness [m] for each twin family and instance
@ -107,7 +197,8 @@ real(pReal), dimension(:,:,:), allocatable :: constitutive_titanmod_
constitutive_titanmod_interactionMatrixSlipTwin, & ! interaction matrix of slip systems with twin systems for each instance constitutive_titanmod_interactionMatrixSlipTwin, & ! interaction matrix of slip systems with twin systems for each instance
constitutive_titanmod_interactionMatrixTwinSlip, & ! interaction matrix of twin systems with slip systems for each instance constitutive_titanmod_interactionMatrixTwinSlip, & ! interaction matrix of twin systems with slip systems for each instance
constitutive_titanmod_interactionMatrixTwinTwin, & ! interaction matrix of the different twin systems for each instance constitutive_titanmod_interactionMatrixTwinTwin, & ! interaction matrix of the different twin systems for each instance
constitutive_titanmod_forestProjectionEdge ! matrix of forest projections of edge dislocations for each instance constitutive_titanmod_forestProjectionEdge, & ! matrix of forest projections of edge dislocations for each instance
constitutive_titanmod_forestProjectionScrew ! matrix of forest projections of screw dislocations for each instance
CONTAINS CONTAINS
!**************************************** !****************************************
!* - constitutive_titanmod_init !* - constitutive_titanmod_init
@ -121,6 +212,7 @@ CONTAINS
!* - consistutive_titanmod_postResults !* - consistutive_titanmod_postResults
!**************************************** !****************************************
subroutine constitutive_titanmod_init(file) subroutine constitutive_titanmod_init(file)
!************************************** !**************************************
!* Module initialization * !* Module initialization *
@ -233,6 +325,7 @@ allocate(constitutive_titanmod_qe_PerSlipFamily(lattice_maxNslipFamily,maxNinsta
allocate(constitutive_titanmod_qs_PerSlipFamily(lattice_maxNslipFamily,maxNinstance)) allocate(constitutive_titanmod_qs_PerSlipFamily(lattice_maxNslipFamily,maxNinstance))
allocate(constitutive_titanmod_v0e_PerSlipFamily(lattice_maxNslipFamily,maxNinstance)) allocate(constitutive_titanmod_v0e_PerSlipFamily(lattice_maxNslipFamily,maxNinstance))
allocate(constitutive_titanmod_v0s_PerSlipFamily(lattice_maxNslipFamily,maxNinstance)) allocate(constitutive_titanmod_v0s_PerSlipFamily(lattice_maxNslipFamily,maxNinstance))
allocate(constitutive_titanmod_rlengthscrew_PerSlipFamily(lattice_maxNslipFamily,maxNinstance))
allocate(constitutive_titanmod_Ndot0PerTwinFamily(lattice_maxNtwinFamily,maxNinstance)) allocate(constitutive_titanmod_Ndot0PerTwinFamily(lattice_maxNtwinFamily,maxNinstance))
allocate(constitutive_titanmod_twinsizePerTwinFamily(lattice_maxNtwinFamily,maxNinstance)) allocate(constitutive_titanmod_twinsizePerTwinFamily(lattice_maxNtwinFamily,maxNinstance))
allocate(constitutive_titanmod_CeLambdaSlipPerSlipFamily(lattice_maxNslipFamily,maxNinstance)) allocate(constitutive_titanmod_CeLambdaSlipPerSlipFamily(lattice_maxNslipFamily,maxNinstance))
@ -248,6 +341,7 @@ constitutive_titanmod_capre_PerSlipFamily = 0.0_pReal
constitutive_titanmod_caprs_PerSlipFamily = 0.0_pReal constitutive_titanmod_caprs_PerSlipFamily = 0.0_pReal
constitutive_titanmod_v0e_PerSlipFamily = 0.0_pReal constitutive_titanmod_v0e_PerSlipFamily = 0.0_pReal
constitutive_titanmod_v0s_PerSlipFamily = 0.0_pReal constitutive_titanmod_v0s_PerSlipFamily = 0.0_pReal
constitutive_titanmod_rlengthscrew_PerSlipFamily = 0.0_pReal
constitutive_titanmod_Ndot0PerTwinFamily = 0.0_pReal constitutive_titanmod_Ndot0PerTwinFamily = 0.0_pReal
constitutive_titanmod_twinsizePerTwinFamily = 0.0_pReal constitutive_titanmod_twinsizePerTwinFamily = 0.0_pReal
constitutive_titanmod_CeLambdaSlipPerSlipFamily = 0.0_pReal constitutive_titanmod_CeLambdaSlipPerSlipFamily = 0.0_pReal
@ -378,6 +472,11 @@ do ! read thru sections of
constitutive_titanmod_v0s_PerSlipFamily(j,i) = IO_floatValue(line,positions,1+j) constitutive_titanmod_v0s_PerSlipFamily(j,i) = IO_floatValue(line,positions,1+j)
write(6,*) tag,constitutive_titanmod_v0s_PerSlipFamily(1,i),constitutive_titanmod_v0s_PerSlipFamily(2,i), & write(6,*) tag,constitutive_titanmod_v0s_PerSlipFamily(1,i),constitutive_titanmod_v0s_PerSlipFamily(2,i), &
constitutive_titanmod_v0s_PerSlipFamily(3,i), constitutive_titanmod_v0s_PerSlipFamily(4,i) constitutive_titanmod_v0s_PerSlipFamily(3,i), constitutive_titanmod_v0s_PerSlipFamily(4,i)
case ('rlengthscrew')
forall (j = 1:lattice_maxNslipFamily) &
constitutive_titanmod_rlengthscrew_PerSlipFamily(j,i) = IO_floatValue(line,positions,1+j)
write(6,*) tag,constitutive_titanmod_rlengthscrew_PerSlipFamily(1,i),constitutive_titanmod_rlengthscrew_PerSlipFamily(2,i), &
constitutive_titanmod_rlengthscrew_PerSlipFamily(3,i), constitutive_titanmod_rlengthscrew_PerSlipFamily(4,i)
case ('ndot0') case ('ndot0')
forall (j = 1:lattice_maxNtwinFamily) & forall (j = 1:lattice_maxNtwinFamily) &
constitutive_titanmod_Ndot0PerTwinFamily(j,i) = IO_floatValue(line,positions,1+j) constitutive_titanmod_Ndot0PerTwinFamily(j,i) = IO_floatValue(line,positions,1+j)
@ -487,6 +586,7 @@ write(6,*) 'Material Property reading done'
if (constitutive_titanmod_caprs_PerSlipFamily(f,i) <= 0.0_pReal) call IO_error(235) if (constitutive_titanmod_caprs_PerSlipFamily(f,i) <= 0.0_pReal) call IO_error(235)
if (constitutive_titanmod_v0e_PerSlipFamily(f,i) <= 0.0_pReal) call IO_error(226) if (constitutive_titanmod_v0e_PerSlipFamily(f,i) <= 0.0_pReal) call IO_error(226)
if (constitutive_titanmod_v0s_PerSlipFamily(f,i) <= 0.0_pReal) call IO_error(227) if (constitutive_titanmod_v0s_PerSlipFamily(f,i) <= 0.0_pReal) call IO_error(227)
if (constitutive_titanmod_rlengthscrew_PerSlipFamily(f,i) <= 0.0_pReal) call IO_error(238)
endif endif
enddo enddo
do f = 1,lattice_maxNtwinFamily do f = 1,lattice_maxNtwinFamily
@ -528,6 +628,7 @@ allocate(constitutive_titanmod_qe_PerSlipSystem(maxTotalNslip,maxNinstance))
allocate(constitutive_titanmod_qs_PerSlipSystem(maxTotalNslip,maxNinstance)) allocate(constitutive_titanmod_qs_PerSlipSystem(maxTotalNslip,maxNinstance))
allocate(constitutive_titanmod_v0e_PerSlipSystem(maxTotalNslip,maxNinstance)) allocate(constitutive_titanmod_v0e_PerSlipSystem(maxTotalNslip,maxNinstance))
allocate(constitutive_titanmod_v0s_PerSlipSystem(maxTotalNslip,maxNinstance)) allocate(constitutive_titanmod_v0s_PerSlipSystem(maxTotalNslip,maxNinstance))
allocate(constitutive_titanmod_rlengthscrew_PerSlipSystem(maxTotalNslip,maxNinstance))
allocate(constitutive_titanmod_Ndot0PerTwinSystem(maxTotalNtwin, maxNinstance)) allocate(constitutive_titanmod_Ndot0PerTwinSystem(maxTotalNtwin, maxNinstance))
allocate(constitutive_titanmod_twinsizePerTwinSystem(maxTotalNtwin, maxNinstance)) allocate(constitutive_titanmod_twinsizePerTwinSystem(maxTotalNtwin, maxNinstance))
@ -542,6 +643,7 @@ constitutive_titanmod_capre_PerSlipSystem = 0.0_pReal
constitutive_titanmod_caprs_PerSlipSystem = 0.0_pReal constitutive_titanmod_caprs_PerSlipSystem = 0.0_pReal
constitutive_titanmod_v0e_PerSlipSystem = 0.0_pReal constitutive_titanmod_v0e_PerSlipSystem = 0.0_pReal
constitutive_titanmod_v0s_PerSlipSystem = 0.0_pReal constitutive_titanmod_v0s_PerSlipSystem = 0.0_pReal
constitutive_titanmod_rlengthscrew_PerSlipSystem = 0.0_pReal
constitutive_titanmod_pe_PerSlipSystem = 0.0_pReal constitutive_titanmod_pe_PerSlipSystem = 0.0_pReal
constitutive_titanmod_ps_PerSlipSystem = 0.0_pReal constitutive_titanmod_ps_PerSlipSystem = 0.0_pReal
constitutive_titanmod_qe_PerSlipSystem = 0.0_pReal constitutive_titanmod_qe_PerSlipSystem = 0.0_pReal
@ -557,11 +659,13 @@ allocate(constitutive_titanmod_interactionMatrixSlipTwin(maxTotalNslip,maxTotalN
allocate(constitutive_titanmod_interactionMatrixTwinSlip(maxTotalNtwin,maxTotalNslip,maxNinstance)) allocate(constitutive_titanmod_interactionMatrixTwinSlip(maxTotalNtwin,maxTotalNslip,maxNinstance))
allocate(constitutive_titanmod_interactionMatrixTwinTwin(maxTotalNtwin,maxTotalNtwin,maxNinstance)) allocate(constitutive_titanmod_interactionMatrixTwinTwin(maxTotalNtwin,maxTotalNtwin,maxNinstance))
allocate(constitutive_titanmod_forestProjectionEdge(maxTotalNslip,maxTotalNslip,maxNinstance)) allocate(constitutive_titanmod_forestProjectionEdge(maxTotalNslip,maxTotalNslip,maxNinstance))
allocate(constitutive_titanmod_forestProjectionScrew(maxTotalNslip,maxTotalNslip,maxNinstance))
constitutive_titanmod_interactionMatrixSlipSlip = 0.0_pReal constitutive_titanmod_interactionMatrixSlipSlip = 0.0_pReal
constitutive_titanmod_interactionMatrixSlipTwin = 0.0_pReal constitutive_titanmod_interactionMatrixSlipTwin = 0.0_pReal
constitutive_titanmod_interactionMatrixTwinSlip = 0.0_pReal constitutive_titanmod_interactionMatrixTwinSlip = 0.0_pReal
constitutive_titanmod_interactionMatrixTwinTwin = 0.0_pReal constitutive_titanmod_interactionMatrixTwinTwin = 0.0_pReal
constitutive_titanmod_forestProjectionEdge = 0.0_pReal constitutive_titanmod_forestProjectionEdge = 0.0_pReal
constitutive_titanmod_forestProjectionScrew = 0.0_pReal
allocate(constitutive_titanmod_Ctwin_66(6,6,maxTotalNtwin,maxNinstance)) allocate(constitutive_titanmod_Ctwin_66(6,6,maxTotalNtwin,maxNinstance))
allocate(constitutive_titanmod_Ctwin_3333(3,3,3,3,maxTotalNtwin,maxNinstance)) allocate(constitutive_titanmod_Ctwin_3333(3,3,3,3,maxTotalNtwin,maxNinstance))
@ -603,10 +707,24 @@ do i = 1,maxNinstance
select case(constitutive_titanmod_output(o,i)) select case(constitutive_titanmod_output(o,i))
case('rhoedge', & case('rhoedge', &
'rhoscrew', & 'rhoscrew', &
'shear_rate_slip', & 'velocity_edge', &
'mfp_slip', & 'velocity_screw', &
'resolved_stress_slip', & 'segment_edge', &
'threshold_stress_slip' & 'segment_screw', &
'resistance_edge', &
'resistance_screw', &
'rss_slip', &
'gamma_dot', &
'dgdotdtau', &
'edge_generation',&
'screw_generation', &
'edge_annihilation', &
'screw_annihilation', &
'total_generation', &
'total_annihilation', &
'total_density', &
'stressratio_edgep', &
'stressratio_screwp' &
) )
mySize = constitutive_titanmod_totalNslip(i) mySize = constitutive_titanmod_totalNslip(i)
case('twin_fraction', & case('twin_fraction', &
@ -683,6 +801,7 @@ write(6,*) 'Determining elasticity matrix'
constitutive_titanmod_caprs_PerSlipSystem(s,i) = constitutive_titanmod_caprs_PerSlipFamily(f,i) constitutive_titanmod_caprs_PerSlipSystem(s,i) = constitutive_titanmod_caprs_PerSlipFamily(f,i)
constitutive_titanmod_v0e_PerSlipSystem(s,i) = constitutive_titanmod_v0e_PerSlipFamily(f,i) constitutive_titanmod_v0e_PerSlipSystem(s,i) = constitutive_titanmod_v0e_PerSlipFamily(f,i)
constitutive_titanmod_v0s_PerSlipSystem(s,i) = constitutive_titanmod_v0s_PerSlipFamily(f,i) constitutive_titanmod_v0s_PerSlipSystem(s,i) = constitutive_titanmod_v0s_PerSlipFamily(f,i)
constitutive_titanmod_rlengthscrew_PerSlipSystem(s,i) = constitutive_titanmod_rlengthscrew_PerSlipFamily(f,i)
constitutive_titanmod_pe_PerSlipSystem(s,i) = constitutive_titanmod_pe_PerSlipFamily(f,i) constitutive_titanmod_pe_PerSlipSystem(s,i) = constitutive_titanmod_pe_PerSlipFamily(f,i)
constitutive_titanmod_ps_PerSlipSystem(s,i) = constitutive_titanmod_ps_PerSlipFamily(f,i) constitutive_titanmod_ps_PerSlipSystem(s,i) = constitutive_titanmod_ps_PerSlipFamily(f,i)
constitutive_titanmod_qe_PerSlipSystem(s,i) = constitutive_titanmod_qe_PerSlipFamily(f,i) constitutive_titanmod_qe_PerSlipSystem(s,i) = constitutive_titanmod_qe_PerSlipFamily(f,i)
@ -739,6 +858,14 @@ write(6,*) 'Determining elasticity matrix'
abs(math_mul3x3(lattice_sn(:,constitutive_titanmod_slipSystemLattice(s1,i),myStructure), & abs(math_mul3x3(lattice_sn(:,constitutive_titanmod_slipSystemLattice(s1,i),myStructure), &
lattice_st(:,constitutive_titanmod_slipSystemLattice(s2,i),myStructure))) lattice_st(:,constitutive_titanmod_slipSystemLattice(s2,i),myStructure)))
enddo; enddo enddo; enddo
!* Calculation of forest projections for screw dislocations
do s1 = 1,constitutive_titanmod_totalNslip(i)
do s2 = 1,constitutive_titanmod_totalNslip(i)
constitutive_titanmod_forestProjectionScrew(s1,s2,i) = &
abs(math_mul3x3(lattice_sn(:,constitutive_titanmod_slipSystemLattice(s1,i),myStructure), &
lattice_sd(:,constitutive_titanmod_slipSystemLattice(s2,i),myStructure)))
enddo; enddo
enddo enddo
write(6,*) 'Init All done' write(6,*) 'Init All done'
@ -760,12 +887,12 @@ integer(pInt) :: myInstance
real(pReal), dimension(constitutive_titanmod_sizeState(myInstance)) :: constitutive_titanmod_stateInit real(pReal), dimension(constitutive_titanmod_sizeState(myInstance)) :: constitutive_titanmod_stateInit
!* Local variables !* Local variables
integer(pInt) s0,s1,s,t,f,ns,nt integer(pInt) s0,s1,s,t,f,ns,nt
real(pReal), dimension(constitutive_titanmod_totalNslip(myInstance)) :: rho_edge0, & real(pReal), dimension(constitutive_titanmod_totalNslip(myInstance)) :: rho_edge0, &
rho_screw0, & rho_screw0, &
invLambdaSlip0e, & segment_edge0, &
invLambdaSlip0s, & segment_screw0, &
etauSlipThreshold0, & resistance_edge0, &
stauSlipThreshold0 resistance_screw0
real(pReal), dimension(constitutive_titanmod_totalNtwin(myInstance)) :: MeanFreePathTwin0,TwinVolume0 real(pReal), dimension(constitutive_titanmod_totalNtwin(myInstance)) :: MeanFreePathTwin0,TwinVolume0
ns = constitutive_titanmod_totalNslip(myInstance) ns = constitutive_titanmod_totalNslip(myInstance)
@ -787,26 +914,28 @@ constitutive_titanmod_stateInit(ns+1:2*ns) = rho_screw0
!* Initialize dependent slip microstructural variables !* Initialize dependent slip microstructural variables
forall (s = 1:ns) & forall (s = 1:ns) &
invLambdaSlip0e(s) = sqrt(sum(rho_edge0(1:ns))+sum(rho_screw0(1:ns)))/ & segment_edge0(s) = constitutive_titanmod_CeLambdaSlipPerSlipSystem(s,myInstance)/ &
constitutive_titanmod_CeLambdaSlipPerSlipSystem(s,myInstance) sqrt(dot_product((rho_edge0+rho_screw0),constitutive_titanmod_forestProjectionEdge(1:ns,s,myInstance)))
constitutive_titanmod_stateInit(2*ns+nt+1:3*ns+nt) = invLambdaSlip0e
constitutive_titanmod_stateInit(2*ns+nt+1:3*ns+nt) = segment_edge0
forall (s = 1:ns) & forall (s = 1:ns) &
invLambdaSlip0s(s) = sqrt(sum(rho_edge0(1:ns))+sum(rho_screw0(1:ns)))/ & segment_screw0(s) = constitutive_titanmod_CsLambdaSlipPerSlipSystem(s,myInstance)/ &
constitutive_titanmod_CsLambdaSlipPerSlipSystem(s,myInstance) sqrt(dot_product((rho_edge0+rho_screw0),constitutive_titanmod_forestProjectionScrew(1:ns,s,myInstance)))
constitutive_titanmod_stateInit(4*ns+2*nt+1:5*ns+2*nt) = invLambdaSlip0s
constitutive_titanmod_stateInit(4*ns+2*nt+1:5*ns+2*nt) = segment_screw0
forall (s = 1:ns) & forall (s = 1:ns) &
etauSlipThreshold0(s) = & resistance_edge0(s) = &
constitutive_titanmod_Gmod(myInstance)*constitutive_titanmod_burgersPerSlipSystem(s,myInstance)* & constitutive_titanmod_Gmod(myInstance)*constitutive_titanmod_burgersPerSlipSystem(s,myInstance)* &
sqrt(dot_product((rho_edge0+rho_screw0),constitutive_titanmod_interactionMatrixSlipSlip(1:ns,s,myInstance))) sqrt(dot_product((rho_edge0+rho_screw0),constitutive_titanmod_interactionMatrixSlipSlip(1:ns,s,myInstance)))
constitutive_titanmod_stateInit(5*ns+3*nt+1:6*ns+3*nt) = etauSlipThreshold0 constitutive_titanmod_stateInit(5*ns+3*nt+1:6*ns+3*nt) = resistance_edge0
forall (s = 1:ns) & forall (s = 1:ns) &
stauSlipThreshold0(s) = & resistance_screw0(s) = &
constitutive_titanmod_Gmod(myInstance)*constitutive_titanmod_burgersPerSlipSystem(s,myInstance)* & constitutive_titanmod_Gmod(myInstance)*constitutive_titanmod_burgersPerSlipSystem(s,myInstance)* &
sqrt(dot_product((rho_edge0+rho_screw0),constitutive_titanmod_interactionMatrixSlipSlip(1:ns,s,myInstance))) sqrt(dot_product((rho_edge0+rho_screw0),constitutive_titanmod_interactionMatrixSlipSlip(1:ns,s,myInstance)))
constitutive_titanmod_stateInit(6*ns+3*nt+1:7*ns+3*nt) = stauSlipThreshold0 constitutive_titanmod_stateInit(6*ns+3*nt+1:7*ns+3*nt) = resistance_screw0
!* Initialize dependent twin microstructural variables !* Initialize dependent twin microstructural variables
forall (t = 1:nt) & forall (t = 1:nt) &
@ -822,8 +951,8 @@ constitutive_titanmod_stateInit(6*ns+4*nt+1:6*ns+5*nt) = TwinVolume0
!write(6,*) !write(6,*)
!write(6,'(a,/,4(3(f30.20,x)/))') 'rho_edge',rho_edge0 !write(6,'(a,/,4(3(f30.20,x)/))') 'rho_edge',rho_edge0
!write(6,'(a,/,4(3(f30.20,x)/))') 'rho_screw',rho_screw0 !write(6,'(a,/,4(3(f30.20,x)/))') 'rho_screw',rho_screw0
!write(6,'(a,/,4(3(f30.20,x)/))') 'invLambdaSlipe',invLambdaSlip0e !write(6,'(a,/,4(3(f30.20,x)/))') 'segment_edge',segment_edge0
!write(6,'(a,/,4(3(f30.20,x)/))') 'invLambdaSlips',invLambdaSlip0s !write(6,'(a,/,4(3(f30.20,x)/))') 'segment_screw',segment_screw0
!write(6,'(a,/,4(3(f30.20,x)/))') 'tauSlipThreshold', tauSlipThreshold0 !write(6,'(a,/,4(3(f30.20,x)/))') 'tauSlipThreshold', tauSlipThreshold0
!write(6,'(a,/,4(3(f30.20,x)/))') 'MeanFreePathTwin', MeanFreePathTwin0 !write(6,'(a,/,4(3(f30.20,x)/))') 'MeanFreePathTwin', MeanFreePathTwin0
!write(6,'(a,/,4(3(f30.20,x)/))') 'TwinVolume', TwinVolume0 !write(6,'(a,/,4(3(f30.20,x)/))') 'TwinVolume', TwinVolume0
@ -831,7 +960,6 @@ constitutive_titanmod_stateInit(6*ns+4*nt+1:6*ns+5*nt) = TwinVolume0
return return
end function end function
pure function constitutive_titanmod_relevantState(myInstance) pure function constitutive_titanmod_relevantState(myInstance)
!********************************************************************* !*********************************************************************
!* relevant microstructural state * !* relevant microstructural state *
@ -848,7 +976,6 @@ constitutive_titanmod_relevantState = constitutive_titanmod_relevantRho(myInstan
return return
endfunction endfunction
pure function constitutive_titanmod_homogenizedC(state,g,ip,el) pure function constitutive_titanmod_homogenizedC(state,g,ip,el)
!********************************************************************* !*********************************************************************
!* calculates homogenized elacticity matrix * !* calculates homogenized elacticity matrix *
@ -942,12 +1069,27 @@ sfe = 0.0002_pReal*Temperature-0.0396_pReal
forall (t = 1:nt) & forall (t = 1:nt) &
fOverStacksize(t) = & fOverStacksize(t) = &
state(g,ip,el)%p(2*ns+t)/constitutive_titanmod_twinsizePerTwinSystem(t,myInstance) state(g,ip,el)%p(2*ns+t)/constitutive_titanmod_twinsizePerTwinSystem(t,myInstance)
!* 1/mean free distance between 2 forest dislocations seen by a moving dislocation ! average segment length for edge dislocations
forall (s = 1:ns) & forall (s = 1:ns) &
state(g,ip,el)%p(2*ns+nt+s) = & state(g,ip,el)%p(2*ns+nt+s) = constitutive_titanmod_CeLambdaSlipPerSlipSystem(s,myInstance)/ &
sqrt(state(g,ip,el)%p(s)+state(g,ip,el)%p(ns+s))/ & sqrt(dot_product((state(g,ip,el)%p(1:ns)+state(g,ip,el)%p(ns:2*ns)), &
constitutive_titanmod_CeLambdaSlipPerSlipSystem(s,myInstance) constitutive_titanmod_forestProjectionEdge(1:ns,s,myInstance)))
!* Average segment length for screw dislocations
do s = 1,ns
if (nt > 0_pInt) then
state(g,ip,el)%p(4*ns+2*nt+s) = &
constitutive_titanmod_CsLambdaSlipPerSlipSystem(s,myInstance) / &
sqrt(dot_product((state(g,ip,el)%p(1:ns)+state(g,ip,el)%p(ns:2*ns)), &
constitutive_titanmod_forestProjectionScrew(1:ns,s,myInstance)))
else
state(g,ip,el)%p(4*ns+s) = &
constitutive_titanmod_CsLambdaSlipPerSlipSystem(s,myInstance) / &
sqrt(dot_product((state(g,ip,el)%p(1:ns)+state(g,ip,el)%p(ns:2*ns)), &
constitutive_titanmod_forestProjectionScrew(1:ns,s,myInstance)))
endif
enddo
!* 1/mean free distance between 2 twin stacks from different systems seen by a moving dislocation !* 1/mean free distance between 2 twin stacks from different systems seen by a moving dislocation
!$OMP CRITICAL (evilmatmul) !$OMP CRITICAL (evilmatmul)
@ -964,34 +1106,20 @@ if (nt > 0_pInt) &
matmul(constitutive_titanmod_interactionMatrixTwinTwin(1:nt,1:nt,myInstance),fOverStacksize(1:nt))/(1.0_pReal-sumf) matmul(constitutive_titanmod_interactionMatrixTwinTwin(1:nt,1:nt,myInstance),fOverStacksize(1:nt))/(1.0_pReal-sumf)
!$OMP END CRITICAL (evilmatmul) !$OMP END CRITICAL (evilmatmul)
!* mean free path between 2 obstacles seen by a moving dislocation
do s = 1,ns
if (nt > 0_pInt) then
state(g,ip,el)%p(4*ns+2*nt+s) = &
constitutive_titanmod_CsLambdaSlipPerSlipSystem(s,myInstance) / &
sqrt(sum(state(g,ip,el)%p(1:2*ns)))
else
state(g,ip,el)%p(4*ns+s) = &
constitutive_titanmod_CsLambdaSlipPerSlipSystem(s,myInstance) / &
sqrt(sum(state(g,ip,el)%p(1:2*ns)))
! (1.0_pReal+constitutive_titanmod_GrainSize(myInstance)*(state(g,ip,el)%p(2*ns+s)))
endif
enddo
!* mean free path between 2 obstacles seen by a growing twin !* mean free path between 2 obstacles seen by a growing twin
forall (t = 1:nt) & forall (t = 1:nt) &
state(g,ip,el)%p(5*ns+2*nt+t) = & state(g,ip,el)%p(5*ns+2*nt+t) = &
(constitutive_titanmod_Cmfptwin(myInstance)*constitutive_titanmod_GrainSize(myInstance))/& (constitutive_titanmod_Cmfptwin(myInstance)*constitutive_titanmod_GrainSize(myInstance))/&
(1.0_pReal+constitutive_titanmod_GrainSize(myInstance)*state(g,ip,el)%p(4*ns+nt+t)) (1.0_pReal+constitutive_titanmod_GrainSize(myInstance)*state(g,ip,el)%p(4*ns+nt+t))
!* threshold stress for edge dislocation motion !* threshold stress or slip resistance for edge dislocation motion
forall (s = 1:ns) & forall (s = 1:ns) &
state(g,ip,el)%p(5*ns+3*nt+s) = & state(g,ip,el)%p(5*ns+3*nt+s) = &
constitutive_titanmod_Gmod(myInstance)*constitutive_titanmod_burgersPerSlipSystem(s,myInstance)*& constitutive_titanmod_Gmod(myInstance)*constitutive_titanmod_burgersPerSlipSystem(s,myInstance)*&
sqrt(dot_product((state(g,ip,el)%p(1:ns)+state(g,ip,el)%p(ns+1:2*ns)),& sqrt(dot_product((state(g,ip,el)%p(1:ns)+state(g,ip,el)%p(ns+1:2*ns)),&
constitutive_titanmod_interactionMatrixSlipSlip(1:ns,s,myInstance))) constitutive_titanmod_interactionMatrixSlipSlip(1:ns,s,myInstance)))
!* threshold stress for screw dislocation motion !* threshold stress or slip resistance for screw dislocation motion
forall (s = 1:ns) & forall (s = 1:ns) &
state(g,ip,el)%p(6*ns+3*nt+s) = & state(g,ip,el)%p(6*ns+3*nt+s) = &
constitutive_titanmod_Gmod(myInstance)*constitutive_titanmod_burgersPerSlipSystem(s,myInstance)*& constitutive_titanmod_Gmod(myInstance)*constitutive_titanmod_burgersPerSlipSystem(s,myInstance)*&
@ -1019,7 +1147,6 @@ forall (t = 1:nt) &
! write(6,'(a,/,4(3(f10.4,x)/))') 'Fraction',state(g,ip,el)%p(2*ns+1:2*ns+nt) ! write(6,'(a,/,4(3(f10.4,x)/))') 'Fraction',state(g,ip,el)%p(2*ns+1:2*ns+nt)
!endif !endif
return return
end subroutine end subroutine
@ -1055,11 +1182,12 @@ real(pReal), dimension(3,3), intent(out) :: Lp
real(pReal), dimension(9,9), intent(out) :: dLp_dTstar real(pReal), dimension(9,9), intent(out) :: dLp_dTstar
!* Local variables !* Local variables
integer(pInt) myInstance,myStructure,ns,nt,f,i,j,k,l,m,n,index_myFamily integer(pInt) myInstance,myStructure,ns,nt,f,i,j,k,l,m,n,index_myFamily
real(pReal) sumf,StressRatio_edge_p,StressRatio_edge_pminus1,StressRatio_screw_p,StressRatio_screw_pminus1, & real(pReal) sumf,StressRatio_edge_p,minusStressRatio_edge_p,StressRatio_edge_pminus1,StressRatio_screw_p, &
StressRatio_r,BoltzmannRatio,DotGamma0 StressRatio_screw_pminus1, StressRatio_r,BoltzmannRatio,DotGamma0, minusStressRatio_screw_p,gdotTotal, &
screwvelocity_kink_prefactor
real(pReal), dimension(3,3,3,3) :: dLp_dTstar3333 real(pReal), dimension(3,3,3,3) :: dLp_dTstar3333
real(pReal), dimension(constitutive_titanmod_totalNslip(phase_constitutionInstance(material_phase(g,ip,el)))) :: & real(pReal), dimension(constitutive_titanmod_totalNslip(phase_constitutionInstance(material_phase(g,ip,el)))) :: &
gdot_slip,dgdot_dtauslip,tau_slip gdot_slip,dgdot_dtauslip,tau_slip, edge_velocity, screw_velocity
real(pReal), dimension(constitutive_titanmod_totalNtwin(phase_constitutionInstance(material_phase(g,ip,el)))) :: & real(pReal), dimension(constitutive_titanmod_totalNtwin(phase_constitutionInstance(material_phase(g,ip,el)))) :: &
gdot_twin,dgdot_dtautwin,tau_twin gdot_twin,dgdot_dtautwin,tau_twin
@ -1088,40 +1216,78 @@ do f = 1,lattice_maxNslipFamily ! loop over all
!* Calculation of Lp !* Calculation of Lp
!* Resolved shear stress on slip system !* Resolved shear stress on slip system
tau_slip(j) = dot_product(Tstar_v,lattice_Sslip_v(:,index_myFamily+i,myStructure)) tau_slip(j) = dot_product(Tstar_v,lattice_Sslip_v(:,index_myFamily+i,myStructure))
state(g,ip,el)%p(9*ns+3*nt+j)=tau_slip(j)
!************************************************* !*************************************************
!* Stress ratio for edge !* Stress ratio for edge
if((abs(tau_slip(j))-state(g,ip,el)%p(5*ns+3*nt+j))>0.0_pReal) then ! if((abs(tau_slip(j))-state(g,ip,el)%p(5*ns+3*nt+j))>0.0_pReal) then
StressRatio_edge_p = ((abs(tau_slip(j))-state(g,ip,el)%p(5*ns+3*nt+j))/ & ! StressRatio_edge_p = ((abs(tau_slip(j))-state(g,ip,el)%p(5*ns+3*nt+j))/ &
constitutive_titanmod_tau0e_PerSlipSystem(j,myInstance))**constitutive_titanmod_pe_PerSlipSystem(j,myInstance) ! constitutive_titanmod_tau0e_PerSlipSystem(j,myInstance))**constitutive_titanmod_pe_PerSlipSystem(j,myInstance)
else ! else
StressRatio_edge_p=0.0_pReal ! StressRatio_edge_p=0.0_pReal
endif ! endif
!* Stress ratio for screw !* Stress ratio for screw
if((abs(tau_slip(j))-state(g,ip,el)%p(6*ns+3*nt+j))>0.0_pReal) then ! if((abs(tau_slip(j))-state(g,ip,el)%p(6*ns+3*nt+j))>0.0_pReal) then
StressRatio_screw_p = ((abs(tau_slip(j))-state(g,ip,el)%p(6*ns+3*nt+j))/ & ! StressRatio_screw_p = ((abs(tau_slip(j))-state(g,ip,el)%p(6*ns+3*nt+j))/ &
constitutive_titanmod_tau0s_PerSlipSystem(j,myInstance))**constitutive_titanmod_pe_PerSlipSystem(j,myInstance) ! constitutive_titanmod_tau0s_PerSlipSystem(j,myInstance))**constitutive_titanmod_ps_PerSlipSystem(j,myInstance)
! else
! StressRatio_screw_p=0.0_pReal
! endif
if(myStructure==3.and.j>3) then ! only for hex and for all the non-basal slip systems
screwvelocity_kink_prefactor=state(g,ip,el)%p(4*ns+2*nt+j)/constitutive_titanmod_rlengthscrew_PerSlipSystem(j,myInstance)
else else
StressRatio_screw_p=0.0_pReal screwvelocity_kink_prefactor=1.0_pReal
endif endif
!* Stress ratio for edge
StressRatio_edge_p = ((abs(tau_slip(j)))/ &
( constitutive_titanmod_tau0e_PerSlipSystem(j,myInstance)+state(g,ip,el)%p(5*ns+3*nt+j)) &
)**constitutive_titanmod_pe_PerSlipSystem(j,myInstance)
!* Stress ratio for screw
StressRatio_screw_p = ((abs(tau_slip(j)))/ &
( constitutive_titanmod_tau0s_PerSlipSystem(j,myInstance)+state(g,ip,el)%p(6*ns+3*nt+j)) &
)**constitutive_titanmod_ps_PerSlipSystem(j,myInstance)
state(g,ip,el)%p(10*ns+3*nt+j)=StressRatio_edge_p
state(g,ip,el)%p(11*ns+3*nt+j)=StressRatio_screw_p
if((1.0_pReal-StressRatio_edge_p)>0.01_pReal) then
minusStressRatio_edge_p=1.0_pReal-StressRatio_edge_p
else
minusStressRatio_edge_p=0.01_pReal
endif
if((1.0_pReal-StressRatio_screw_p)>0.01_pReal) then
minusStressRatio_screw_p=1.0_pReal-StressRatio_screw_p
else
minusStressRatio_screw_p=0.01_pReal
endif
! !* Stress ratio for edge p minus1
! if((abs(tau_slip(j))-state(g,ip,el)%p(5*ns+3*nt+j))>0.0_pReal) then
! StressRatio_edge_pminus1 = ((abs(tau_slip(j))-state(g,ip,el)%p(5*ns+3*nt+j))/ &
! constitutive_titanmod_tau0e_PerSlipSystem(j,myInstance))**(constitutive_titanmod_pe_PerSlipSystem(j,myInstance)-1)
! else
! StressRatio_edge_pminus1=0.0_pReal
! endif
!* Stress ratio for edge p minus1 ! !* Stress ratio for screw p minus1
if((abs(tau_slip(j))-state(g,ip,el)%p(5*ns+3*nt+j))>0.0_pReal) then ! if((abs(tau_slip(j))-state(g,ip,el)%p(6*ns+3*nt+j))>0.0_pReal) then
StressRatio_edge_pminus1 = ((abs(tau_slip(j))-state(g,ip,el)%p(5*ns+3*nt+j))/ & ! StressRatio_screw_pminus1 = ((abs(tau_slip(j))-state(g,ip,el)%p(6*ns+3*nt+j))/ &
constitutive_titanmod_tau0e_PerSlipSystem(j,myInstance))**(constitutive_titanmod_pe_PerSlipSystem(j,myInstance)-1) ! constitutive_titanmod_tau0s_PerSlipSystem(j,myInstance))**(constitutive_titanmod_ps_PerSlipSystem(j,myInstance)-1)
else ! else
StressRatio_edge_pminus1=0.0_pReal ! StressRatio_screw_pminus1=0.0_pReal
endif ! endif
!* Stress ratio for screw p minus1 StressRatio_edge_pminus1 = ((abs(tau_slip(j)))/ &
if((abs(tau_slip(j))-state(g,ip,el)%p(6*ns+3*nt+j))>0.0_pReal) then ( constitutive_titanmod_tau0e_PerSlipSystem(j,myInstance)+state(g,ip,el)%p(5*ns+3*nt+j)) &
StressRatio_screw_pminus1 = ((abs(tau_slip(j))-state(g,ip,el)%p(6*ns+3*nt+j))/ & )**(constitutive_titanmod_pe_PerSlipSystem(j,myInstance)-1.0_pReal)
constitutive_titanmod_tau0s_PerSlipSystem(j,myInstance))**(constitutive_titanmod_pe_PerSlipSystem(j,myInstance)-1)
else StressRatio_screw_pminus1 = ((abs(tau_slip(j)))/ &
StressRatio_screw_pminus1=0.0_pReal ( constitutive_titanmod_tau0s_PerSlipSystem(j,myInstance)+state(g,ip,el)%p(6*ns+3*nt+j)) &
endif )**(constitutive_titanmod_ps_PerSlipSystem(j,myInstance)-1.0_pReal)
!* Boltzmann ratio !* Boltzmann ratio
BoltzmannRatio = constitutive_titanmod_f0_PerSlipSystem(j,myInstance)/(kB*Temperature) BoltzmannRatio = constitutive_titanmod_f0_PerSlipSystem(j,myInstance)/(kB*Temperature)
@ -1132,13 +1298,23 @@ do f = 1,lattice_maxNslipFamily ! loop over all
+ constitutive_titanmod_v0e_PerSlipSystem(j,myInstance)+state(g,ip,el)%p(ns+j)* & + constitutive_titanmod_v0e_PerSlipSystem(j,myInstance)+state(g,ip,el)%p(ns+j)* &
constitutive_titanmod_v0e_PerSlipSystem(j,myInstance)) constitutive_titanmod_v0e_PerSlipSystem(j,myInstance))
!* Shear rates due to slip edge_velocity(j) =constitutive_titanmod_v0e_PerSlipSystem(j,myInstance)*exp(-BoltzmannRatio*(minusStressRatio_edge_p)** &
gdot_slip(j) = constitutive_titanmod_burgersPerSlipSystem(j,myInstance)*2.0_pReal*(state(g,ip,el)%p(j)* & constitutive_titanmod_qe_PerSlipSystem(j,myInstance))
constitutive_titanmod_v0e_PerSlipSystem(j,myInstance)*exp(-BoltzmannRatio*(1-StressRatio_edge_p)** &
constitutive_titanmod_qe_PerSlipSystem(j,myInstance))+state(g,ip,el)%p(ns+j)* &
constitutive_titanmod_v0s_PerSlipSystem(j,myInstance)*exp(-BoltzmannRatio*(1-StressRatio_screw_p)** &
constitutive_titanmod_qs_PerSlipSystem(j,myInstance)))* sign(1.0_pReal,tau_slip(j))
screw_velocity(j) =screwvelocity_kink_prefactor * constitutive_titanmod_v0s_PerSlipSystem(j,myInstance)* &
exp(-BoltzmannRatio*(minusStressRatio_screw_p)** &
constitutive_titanmod_qs_PerSlipSystem(j,myInstance))
!* Shear rates due to slip
gdot_slip(j) = constitutive_titanmod_burgersPerSlipSystem(j,myInstance)*2.0_pReal*(state(g,ip,el)%p(j)* &
edge_velocity(j)+state(g,ip,el)%p(ns+j) * screw_velocity(j))* sign(1.0_pReal,tau_slip(j))
! forall (s = 1:ns) &
state(g,ip,el)%p(7*ns+3*nt+j)= edge_velocity(j)
! forall (s = 1:ns) &
state(g,ip,el)%p(8*ns+3*nt+j)= screw_velocity(j)
state(g,ip,el)%p(12*ns+3*nt+j)=gdot_slip(j)
!* Derivatives of shear rates !* Derivatives of shear rates
dgdot_dtauslip(j) = & dgdot_dtauslip(j) = &
2.0_pReal* & 2.0_pReal* &
@ -1146,28 +1322,52 @@ do f = 1,lattice_maxNslipFamily ! loop over all
( & ( &
( & ( &
( & ( &
abs(gdot_slip(j)) & (abs(gdot_slip(j))) * &
*BoltzmannRatio*& BoltzmannRatio*&
constitutive_titanmod_pe_PerSlipSystem(j,myInstance)* & constitutive_titanmod_pe_PerSlipSystem(j,myInstance)* &
constitutive_titanmod_qe_PerSlipSystem(j,myInstance) & constitutive_titanmod_qe_PerSlipSystem(j,myInstance) &
)/ & )/ &
constitutive_titanmod_tau0e_PerSlipSystem(j,myInstance) & constitutive_titanmod_tau0e_PerSlipSystem(j,myInstance) &
)*& )*&
StressRatio_edge_pminus1*(1-StressRatio_edge_p)** & StressRatio_edge_pminus1*(minusStressRatio_edge_p)** &
(constitutive_titanmod_qe_PerSlipSystem(j,myInstance)-1.0_pReal) & (constitutive_titanmod_qe_PerSlipSystem(j,myInstance)-1.0_pReal) &
) + & ) + &
( & ( &
( & ( &
(abs(gdot_slip(j))*BoltzmannRatio*& ( &
(abs(gdot_slip(j))) * &
BoltzmannRatio* screwvelocity_kink_prefactor *&
constitutive_titanmod_ps_PerSlipSystem(j,myInstance)* & constitutive_titanmod_ps_PerSlipSystem(j,myInstance)* &
constitutive_titanmod_qs_PerSlipSystem(j,myInstance) & constitutive_titanmod_qs_PerSlipSystem(j,myInstance) &
)/ & )/ &
constitutive_titanmod_tau0s_PerSlipSystem(j,myInstance) & constitutive_titanmod_tau0s_PerSlipSystem(j,myInstance) &
)*& )*&
StressRatio_screw_pminus1*(1-StressRatio_screw_p)**(constitutive_titanmod_qs_PerSlipSystem(j,myInstance)-1.0_pReal) & StressRatio_screw_pminus1*(minusStressRatio_screw_p)**(constitutive_titanmod_qs_PerSlipSystem(j,myInstance)-1.0_pReal) &
) & ) &
) ) !* sign(1.0_pReal,tau_slip(j))
! gdotTotal = sum(gdot_slip)
! dgdot_dtauslip(j)=abs(gdot_slip(j)) * (BoltzmannRatio)*(1/constitutive_titanmod_tau0e_PerSlipSystem(j,myInstance)+ &
! 1/constitutive_titanmod_tau0s_PerSlipSystem(j,myInstance))
! dgdot_dtauslip(j) = &
! 2.0_pReal* sign(1.0_pReal,tau_slip(j)) * &
! ((state(g,ip,el)%p(j)*edge_velocity(j)*BoltzmannRatio*&
! constitutive_titanmod_pe_PerSlipSystem(j,myInstance)* &
! constitutive_titanmod_qe_PerSlipSystem(j,myInstance) / &
! constitutive_titanmod_tau0e_PerSlipSystem(j,myInstance)) * &
! ((minusStressRatio_edge_p)**(constitutive_titanmod_qe_PerSlipSystem(j,myInstance)-1.0_pReal))* &
! (StressRatio_edge_pminus1) + &
! (state(g,ip,el)%p(ns+j)*screw_velocity(j)*BoltzmannRatio*&
! constitutive_titanmod_ps_PerSlipSystem(j,myInstance)* &
! constitutive_titanmod_qs_PerSlipSystem(j,myInstance) / &
! constitutive_titanmod_tau0s_PerSlipSystem(j,myInstance)) * &
! ((minusStressRatio_screw_p)**(constitutive_titanmod_qs_PerSlipSystem(j,myInstance)-1.0_pReal))* &
! (StressRatio_screw_pminus1) &
! )
state(g,ip,el)%p(13*ns+3*nt+j)=dgdot_dtauslip(j)
!************************************************* !*************************************************
!* Plastic velocity gradient for dislocation glide !* Plastic velocity gradient for dislocation glide
Lp = Lp + (1.0_pReal - sumf)*gdot_slip(j)*lattice_Sslip(:,:,index_myFamily+i,myStructure) Lp = Lp + (1.0_pReal - sumf)*gdot_slip(j)*lattice_Sslip(:,:,index_myFamily+i,myStructure)
@ -1198,12 +1398,12 @@ do f = 1,lattice_maxNtwinFamily ! loop over all
StressRatio_r = (state(g,ip,el)%p(6*ns+3*nt+j)/tau_twin(j))**constitutive_titanmod_r(myInstance) StressRatio_r = (state(g,ip,el)%p(6*ns+3*nt+j)/tau_twin(j))**constitutive_titanmod_r(myInstance)
!* Shear rates and their derivatives due to twin !* Shear rates and their derivatives due to twin
if ( tau_twin(j) > 0.0_pReal ) then ! if ( tau_twin(j) > 0.0_pReal ) !then
gdot_twin(j) = & gdot_twin(j) = 0.0_pReal!&
(constitutive_titanmod_MaxTwinFraction(myInstance)-sumf)*lattice_shearTwin(index_myFamily+i,myStructure)*& ! (constitutive_titanmod_MaxTwinFraction(myInstance)-sumf)*lattice_shearTwin(index_myFamily+i,myStructure)*&
state(g,ip,el)%p(6*ns+4*nt+j)*constitutive_titanmod_Ndot0PerTwinSystem(f,myInstance)*exp(-StressRatio_r) ! state(g,ip,el)%p(6*ns+4*nt+j)*constitutive_titanmod_Ndot0PerTwinSystem(f,myInstance)*exp(-StressRatio_r)
dgdot_dtautwin(j) = ((gdot_twin(j)*constitutive_titanmod_r(myInstance))/tau_twin(j))*StressRatio_r ! dgdot_dtautwin(j) = ((gdot_twin(j)*constitutive_titanmod_r(myInstance))/tau_twin(j))*StressRatio_r
endif ! endif
!* Plastic velocity gradient for mechanical twinning !* Plastic velocity gradient for mechanical twinning
Lp = Lp + gdot_twin(j)*lattice_Stwin(:,:,index_myFamily+i,myStructure) Lp = Lp + gdot_twin(j)*lattice_Stwin(:,:,index_myFamily+i,myStructure)
@ -1264,8 +1464,9 @@ real(pReal), dimension(constitutive_titanmod_sizeDotState(phase_constitutionInst
constitutive_titanmod_dotState constitutive_titanmod_dotState
!* Local variables !* Local variables
integer(pInt) MyInstance,MyStructure,ns,nt,f,i,j,k,index_myFamily,s integer(pInt) MyInstance,MyStructure,ns,nt,f,i,j,k,index_myFamily,s
real(pReal) sumf,StressRatio_edge_p,StressRatio_pminus1,BoltzmannRatio,DotGamma0,& real(pReal) sumf,StressRatio_edge_p,minusStressRatio_edge_p,StressRatio_pminus1,BoltzmannRatio,DotGamma0,&
EdgeDipMinDistance,AtomicVolume,VacancyDiffusion,StressRatio_r,StressRatio_screw_p EdgeDipMinDistance,AtomicVolume,VacancyDiffusion,StressRatio_r,StressRatio_screw_p,minusStressRatio_screw_p, &
screwvelocity_kink_prefactor
real(pReal), dimension(constitutive_titanmod_totalNslip(phase_constitutionInstance(material_phase(g,ip,el)))) :: & real(pReal), dimension(constitutive_titanmod_totalNslip(phase_constitutionInstance(material_phase(g,ip,el)))) :: &
gdot_slip,tau_slip,DotRhoEdgeGeneration,EdgeDipDistance,DotRhoEdgeAnnihilation,DotRhoScrewAnnihilation,& gdot_slip,tau_slip,DotRhoEdgeGeneration,EdgeDipDistance,DotRhoEdgeAnnihilation,DotRhoScrewAnnihilation,&
ClimbVelocity,DotRhoScrewGeneration, edge_segment, screw_segment,edge_velocity,screw_velocity ClimbVelocity,DotRhoScrewGeneration, edge_segment, screw_segment,edge_velocity,screw_velocity
@ -1285,14 +1486,16 @@ constitutive_titanmod_dotState = 0.0_pReal
!* average segment length for edge dislocations !* average segment length for edge dislocations
forall (s = 1:ns) & forall (s = 1:ns) &
edge_segment(s) = & edge_segment(s) = &
(constitutive_titanmod_CeLambdaSlipPerSlipSystem(s,myInstance))/(sum(state(g,ip,el)%p(1:2*ns) & (constitutive_titanmod_CeLambdaSlipPerSlipSystem(s,myInstance))/ &
))**0.5_pReal sqrt(dot_product((state(g,ip,el)%p(1:ns)+state(g,ip,el)%p(ns+1:2*ns)), &
constitutive_titanmod_forestProjectionEdge(1:ns,s,myInstance)))
!* average segment length for screw dislocations !* average segment length for screw dislocations
forall (s = 1:ns) & forall (s = 1:ns) &
screw_segment(s) = & screw_segment(s) = &
(constitutive_titanmod_CsLambdaSlipPerSlipSystem(s,myInstance))/(sum(state(g,ip,el)%p(1:2*ns) & (constitutive_titanmod_CsLambdaSlipPerSlipSystem(s,myInstance))/ &
))**0.5_pReal sqrt(dot_product((state(g,ip,el)%p(1:ns)+state(g,ip,el)%p(ns+1:2*ns)), &
constitutive_titanmod_forestProjectionScrew(1:ns,s,myInstance)))
j = 0_pInt j = 0_pInt
do f = 1,lattice_maxNslipFamily ! loop over all slip families do f = 1,lattice_maxNslipFamily ! loop over all slip families
@ -1303,32 +1506,61 @@ forall (s = 1:ns) &
! Resolved shear stress ! Resolved shear stress
tau_slip(j) = dot_product(Tstar_v,lattice_Sslip_v(:,index_myFamily+i,myStructure)) tau_slip(j) = dot_product(Tstar_v,lattice_Sslip_v(:,index_myFamily+i,myStructure))
!* Stress ratio for edge ! !* Stress ratio for edge
if((abs(tau_slip(j))-state(g,ip,el)%p(5*ns+3*nt+j)) > 0.0_pReal) then ! if((abs(tau_slip(j))-state(g,ip,el)%p(5*ns+3*nt+j)) > 0.0_pReal) then
StressRatio_edge_p = ((abs(tau_slip(j))-state(g,ip,el)%p(5*ns+3*nt+j))/ & ! StressRatio_edge_p = ((abs(tau_slip(j))-state(g,ip,el)%p(5*ns+3*nt+j))/ &
constitutive_titanmod_tau0e_PerSlipSystem(j,myInstance))** constitutive_titanmod_pe_PerSlipSystem(j,myInstance) ! constitutive_titanmod_tau0e_PerSlipSystem(j,myInstance))** constitutive_titanmod_pe_PerSlipSystem(j,myInstance)
else ! else
StressRatio_edge_p=0.0_pReal ! StressRatio_edge_p=0.0_pReal
endif ! endif
!* Stress ratio for screw !* Stress ratio for screw
if((abs(tau_slip(j))-state(g,ip,el)%p(6*ns+3*nt+j)) > 0.0_pReal) then ! if((abs(tau_slip(j))-state(g,ip,el)%p(6*ns+3*nt+j)) > 0.0_pReal) then
StressRatio_screw_p = ((abs(tau_slip(j))-state(g,ip,el)%p(6*ns+3*nt+j))/ & ! StressRatio_screw_p = ((abs(tau_slip(j))-state(g,ip,el)%p(6*ns+3*nt+j))/ &
constitutive_titanmod_tau0s_PerSlipSystem(j,myInstance))**constitutive_titanmod_ps_PerSlipSystem(j,myInstance) ! constitutive_titanmod_tau0s_PerSlipSystem(j,myInstance))** constitutive_titanmod_ps_PerSlipSystem(j,myInstance)
else ! else
StressRatio_screw_p=0.0_pReal ! StressRatio_screw_p=0.0_pReal
! endif
if(myStructure==3.and.j>3) then ! only for hex and for all the non-basal slip systems
screwvelocity_kink_prefactor=state(g,ip,el)%p(4*ns+2*nt+j)/constitutive_titanmod_rlengthscrew_PerSlipSystem(j,myInstance)
else
screwvelocity_kink_prefactor=1.0_pReal
endif endif
!* Boltzmann ratio !* Stress ratio for edge
StressRatio_edge_p = ((abs(tau_slip(j)))/ &
( constitutive_titanmod_tau0e_PerSlipSystem(j,myInstance)+state(g,ip,el)%p(5*ns+3*nt+j)) &
)**(constitutive_titanmod_pe_PerSlipSystem(j,myInstance))
!* Stress ratio for screw
StressRatio_screw_p = ((abs(tau_slip(j)))/ &
( constitutive_titanmod_tau0s_PerSlipSystem(j,myInstance)+state(g,ip,el)%p(6*ns+3*nt+j)) &
)**(constitutive_titanmod_ps_PerSlipSystem(j,myInstance))
if((1.0_pReal-StressRatio_edge_p)>0.01_pReal) then
minusStressRatio_edge_p=1.0_pReal-StressRatio_edge_p
else
minusStressRatio_edge_p=0.01_pReal
endif
if((1-StressRatio_screw_p)>0.01_pReal) then
minusStressRatio_screw_p=1.0_pReal-StressRatio_screw_p
else
minusStressRatio_screw_p=0.01_pReal
endif
!* Boltzmann ratio
BoltzmannRatio = constitutive_titanmod_f0_PerSlipSystem(j,myInstance)/(kB*Temperature) BoltzmannRatio = constitutive_titanmod_f0_PerSlipSystem(j,myInstance)/(kB*Temperature)
! if (tau_slip(j) == 0.0_pReal) then ! if (tau_slip(j) == 0.0_pReal) then
! edge_velocity(j) = 0.0_pReal ! edge_velocity(j) = 0.0_pReal
! screw_velocity(j) = 0.0_pReal ! screw_velocity(j) = 0.0_pReal
! else ! else
edge_velocity(j) =constitutive_titanmod_v0e_PerSlipSystem(j,myInstance)*exp(-BoltzmannRatio*(1-StressRatio_edge_p)** & edge_velocity(j) =constitutive_titanmod_v0e_PerSlipSystem(j,myInstance)*exp(-BoltzmannRatio*(minusStressRatio_edge_p)** &
constitutive_titanmod_qe_PerSlipSystem(j,myInstance)) constitutive_titanmod_qe_PerSlipSystem(j,myInstance))
screw_velocity(j) =constitutive_titanmod_v0s_PerSlipSystem(j,myInstance)*exp(-BoltzmannRatio*(1-StressRatio_screw_p)** & screw_velocity(j) =screwvelocity_kink_prefactor* constitutive_titanmod_v0s_PerSlipSystem(j,myInstance)* &
exp(-BoltzmannRatio*(minusStressRatio_screw_p)** &
constitutive_titanmod_qs_PerSlipSystem(j,myInstance)) constitutive_titanmod_qs_PerSlipSystem(j,myInstance))
! endif ! endif
! write(6,*) 'edge_segment(j) ',edge_segment(j) ! write(6,*) 'edge_segment(j) ',edge_segment(j)
@ -1342,16 +1574,16 @@ forall (s = 1:ns) &
! write(6,*) 'edge_velocity(j)',edge_velocity(j),j ! write(6,*) 'edge_velocity(j)',edge_velocity(j),j
! write(6,*) 'screw_velocity(j)',screw_velocity(j),j ! write(6,*) 'screw_velocity(j)',screw_velocity(j),j
!* Multiplication of edge dislocations !* Multiplication of edge dislocations
DotRhoEdgeGeneration(j) = 4.0_pReal*(state(g,ip,el)%p(ns+j)*screw_velocity(j)/screw_segment(j)) DotRhoEdgeGeneration(j) = 2.0_pReal*(state(g,ip,el)%p(ns+j)*screw_velocity(j)/screw_segment(j))
!* Multiplication of screw dislocations !* Multiplication of screw dislocations
DotRhoScrewGeneration(j) = 4.0_pReal*(state(g,ip,el)%p(j)*edge_velocity(j)/edge_segment(j)) DotRhoScrewGeneration(j) = 2.0_pReal*(state(g,ip,el)%p(j)*edge_velocity(j)/edge_segment(j))
!* Annihilation of edge dislocations !* Annihilation of edge dislocations
DotRhoEdgeAnnihilation(j) = -4.0_pReal*((state(g,ip,el)%p(j))**2)* & DotRhoEdgeAnnihilation(j) = -((state(g,ip,el)%p(j))**2)* &
constitutive_titanmod_capre_PerSlipSystem(j,myInstance)*edge_velocity(j) constitutive_titanmod_capre_PerSlipSystem(j,myInstance)*edge_velocity(j)
!* Annihilation of screw dislocations !* Annihilation of screw dislocations
DotRhoScrewAnnihilation(j) = -4.0_pReal*((state(g,ip,el)%p(ns+j))**2)* & DotRhoScrewAnnihilation(j) = -((state(g,ip,el)%p(ns+j))**2)* &
constitutive_titanmod_caprs_PerSlipSystem(j,myInstance)*screw_velocity(j) constitutive_titanmod_caprs_PerSlipSystem(j,myInstance)*screw_velocity(j)
!* Edge dislocation density rate of change !* Edge dislocation density rate of change
@ -1369,7 +1601,7 @@ forall (s = 1:ns) &
enddo enddo
enddo enddo
!* Twin volume fraction evolution !* Twin volume fraction evolution
j = 0_pInt j = 0_pInt
do f = 1,lattice_maxNtwinFamily ! loop over all twin families do f = 1,lattice_maxNtwinFamily ! loop over all twin families
@ -1463,7 +1695,8 @@ real(pReal), intent(in) :: dt,Temperature
real(pReal), dimension(6), intent(in) :: Tstar_v real(pReal), dimension(6), intent(in) :: Tstar_v
type(p_vec), dimension(homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), intent(in) :: state type(p_vec), dimension(homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), intent(in) :: state
integer(pInt) myInstance,myStructure,ns,nt,f,o,i,c,j,index_myFamily integer(pInt) myInstance,myStructure,ns,nt,f,o,i,c,j,index_myFamily
real(pReal) sumf,tau,StressRatio_p,StressRatio_pminus1,BoltzmannRatio,DotGamma0,StressRatio_r,gdot_slip,dgdot_dtauslip real(pReal) sumf,tau,StressRatio_edge_p,StressRatio_screw_p,StressRatio_pminus1,BoltzmannRatio,DotGamma0,StressRatio_r, &
gdot_slip,dgdot_dtauslip
real(pReal), dimension(constitutive_titanmod_sizePostResults(phase_constitutionInstance(material_phase(g,ip,el)))) :: & real(pReal), dimension(constitutive_titanmod_sizePostResults(phase_constitutionInstance(material_phase(g,ip,el)))) :: &
constitutive_titanmod_postResults constitutive_titanmod_postResults
@ -1489,100 +1722,113 @@ do o = 1,phase_Noutput(material_phase(g,ip,el))
case ('rhoscrew') case ('rhoscrew')
constitutive_titanmod_postResults(c+1:c+ns) = state(g,ip,el)%p(ns+1:2*ns) constitutive_titanmod_postResults(c+1:c+ns) = state(g,ip,el)%p(ns+1:2*ns)
c = c + ns c = c + ns
case ('shear_rate_slip') case ('gamma_dot')
j = 0_pInt constitutive_titanmod_postResults(c+1:c+ns) = state(g,ip,el)%p((12*ns+3*nt+1):(13*ns+3*nt))
do f = 1,lattice_maxNslipFamily ! loop over all slip families
index_myFamily = sum(lattice_NslipSystem(1:f-1,myStructure)) ! at which index starts my family
do i = 1,constitutive_titanmod_Nslip(f,myInstance) ! process each (active) slip system in family
j = j + 1_pInt
!* Resolved shear stress on slip system
tau = dot_product(Tstar_v,lattice_Sslip_v(:,index_myFamily+i,myStructure))
!* Stress ratios
StressRatio_p = (abs(tau)/state(g,ip,el)%p(5*ns+3*nt+j))**constitutive_titanmod_pe_PerSlipSystem(j,myInstance)
StressRatio_pminus1 = (abs(tau)/state(g,ip,el)%p(5*ns+3*nt+j))**&
(constitutive_titanmod_pe_PerSlipSystem(j,myInstance)-1.0_pReal)
!* Boltzmann ratio
BoltzmannRatio = constitutive_titanmod_f0_PerSlipSystem(j,myInstance)/(kB*Temperature)
!* Initial shear rates
DotGamma0 = &
state(g,ip,el)%p(j)*constitutive_titanmod_burgersPerSlipSystem(f,myInstance)* &
constitutive_titanmod_v0e_PerSlipSystem(f,myInstance)
!* Shear rates due to slip
constitutive_titanmod_postResults(c+j) = &
DotGamma0*exp(-BoltzmannRatio*(1-StressRatio_p)**constitutive_titanmod_qe_PerSlipSystem(j,myInstance))* &
sign(1.0_pReal,tau)
enddo ; enddo
! invLambdaSlipe', &
! 'invLambdaSlips', &
! 'etauSlipThreshold', &
! 'stauSlipThreshold', &
! 'invLambdaSlipTwin
c = c + ns c = c + ns
case ('edgesegment') case ('dgdotdtau')
constitutive_titanmod_postResults(c+1:c+ns) = state(g,ip,el)%p((13*ns+3*nt+1):(14*ns+3*nt))
c = c + ns
case ('velocity_edge')
constitutive_titanmod_postResults(c+1:c+ns) = state(g,ip,el)%p((7*ns+3*nt+1):(8*ns+3*nt))
c = c + ns
case ('velocity_screw')
constitutive_titanmod_postResults(c+1:c+ns) = state(g,ip,el)%p((8*ns+3*nt+1):(9*ns+3*nt))
c = c + ns
case('stressratio_edgep')
constitutive_titanmod_postResults(c+1:c+ns) = state(g,ip,el)%p((10*ns+3*nt+1):(11*ns+3*nt))
c = c + ns
case('stressratio_screwp')
constitutive_titanmod_postResults(c+1:c+ns) = state(g,ip,el)%p((11*ns+3*nt+1):(12*ns+3*nt))
c = c + ns
case ('segment_edge')
constitutive_titanmod_postResults(c+1:c+ns) = state(g,ip,el)%p((2*ns+nt+1):(3*ns+nt))
c = c + ns
case ('segment_screw')
constitutive_titanmod_postResults(c+1:c+ns) = state(g,ip,el)%p((4*ns+2*nt+1):(5*ns+2*nt)) constitutive_titanmod_postResults(c+1:c+ns) = state(g,ip,el)%p((4*ns+2*nt+1):(5*ns+2*nt))
c = c + ns c = c + ns
case ('screwsegment') case ('resistance_edge')
constitutive_titanmod_postResults(c+1:c+ns) = state(g,ip,el)%p((5*ns+3*nt+1):(6*ns+3*nt))
c = c + ns
case ('resistance_screw')
constitutive_titanmod_postResults(c+1:c+ns) = state(g,ip,el)%p((6*ns+3*nt+1):(7*ns+3*nt))
c = c + ns
case ('rss_slip')
constitutive_titanmod_postResults(c+1:c+ns) = state(g,ip,el)%p(9*ns+3*nt+1:10*ns+3*nt)
c=c + ns
case('edge_generation')
j = 0_pInt j = 0_pInt
do f = 1,lattice_maxNslipFamily do f = 1,lattice_maxNslipFamily
index_myFamily = sum(lattice_NslipSystem(1:f-1,myStructure)) index_myFamily = sum(lattice_NslipSystem(1:f-1,myStructure))
do i = 1,constitutive_titanmod_Nslip(f,myInstance) do i = 1,constitutive_titanmod_Nslip(f,myInstance)
j = j + 1_pInt j = j + 1_pInt
constitutive_titanmod_postResults(c+j) = dot_product(Tstar_v,lattice_Sslip_v(:,index_myFamily+i,myStructure)) constitutive_titanmod_postResults(c+j) = 2.0_pReal*state(g,ip,el)%p(ns+j)* &
state(g,ip,el)%p(8*ns+3*nt+j)/state(g,ip,el)%p(4*ns+2*nt+j)
enddo; enddo enddo; enddo
c = c + ns c = c + ns
case ('edgeresistance') case('screw_generation')
constitutive_titanmod_postResults(c+1:c+ns) = state(g,ip,el)%p((5*ns+3*nt+1):(6*ns+3*nt)) j = 0_pInt
do f = 1,lattice_maxNslipFamily
index_myFamily = sum(lattice_NslipSystem(1:f-1,myStructure))
do i = 1,constitutive_titanmod_Nslip(f,myInstance)
j = j + 1_pInt
constitutive_titanmod_postResults(c+j) = 2.0_pReal*state(g,ip,el)%p(j)* &
state(g,ip,el)%p(7*ns+3*nt+j)/state(g,ip,el)%p(2*ns+nt+j)
enddo; enddo
c = c + ns c = c + ns
case ('screwresistance') case('edge_annihilation')
constitutive_titanmod_postResults(c+1:c+ns) = state(g,ip,el)%p((6*ns+3*nt+1):(6*ns+3*nt)) j = 0_pInt
do f = 1,lattice_maxNslipFamily
index_myFamily = sum(lattice_NslipSystem(1:f-1,myStructure))
do i = 1,constitutive_titanmod_Nslip(f,myInstance)
j = j + 1_pInt
constitutive_titanmod_postResults(c+j) = -((state(g,ip,el)%p(j))**2)* &
constitutive_titanmod_capre_PerSlipSystem(j,myInstance)*state(g,ip,el)%p(7*ns+3*nt+j)
enddo; enddo
c = c + ns
case('screw_annihilation')
j = 0_pInt
do f = 1,lattice_maxNslipFamily
index_myFamily = sum(lattice_NslipSystem(1:f-1,myStructure))
do i = 1,constitutive_titanmod_Nslip(f,myInstance)
j = j + 1_pInt
constitutive_titanmod_postResults(c+j) = -((state(g,ip,el)%p(ns+j))**2)* &
constitutive_titanmod_caprs_PerSlipSystem(j,myInstance)*state(g,ip,el)%p(8*ns+3*nt+j)
enddo; enddo
c = c + ns
case('total_generation')
j = 0_pInt
do f = 1,lattice_maxNslipFamily
index_myFamily = sum(lattice_NslipSystem(1:f-1,myStructure))
do i = 1,constitutive_titanmod_Nslip(f,myInstance)
j = j + 1_pInt
constitutive_titanmod_postResults(c+j) = 2.0_pReal*state(g,ip,el)%p(ns+j)* &
state(g,ip,el)%p(8*ns+3*nt+j)/state(g,ip,el)%p(4*ns+2*nt+j) + 2.0_pReal*state(g,ip,el)%p(j)* &
state(g,ip,el)%p(7*ns+3*nt+j)/state(g,ip,el)%p(2*ns+nt+j)
enddo; enddo
c = c + ns
case('total_annihilation')
j = 0_pInt
do f = 1,lattice_maxNslipFamily
index_myFamily = sum(lattice_NslipSystem(1:f-1,myStructure))
do i = 1,constitutive_titanmod_Nslip(f,myInstance)
j = j + 1_pInt
constitutive_titanmod_postResults(c+j) = -((state(g,ip,el)%p(j))**2)* &
constitutive_titanmod_capre_PerSlipSystem(j,myInstance)*state(g,ip,el)%p(7*ns+3*nt+j)- &
((state(g,ip,el)%p(ns+j))**2)*constitutive_titanmod_caprs_PerSlipSystem(j,myInstance)* &
state(g,ip,el)%p(8*ns+3*nt+j)
enddo; enddo
c = c + ns
case('total_density')
constitutive_titanmod_postResults(c+1:c+ns) = state(g,ip,el)%p(1:ns)+state(g,ip,el)%p(ns+1:2*ns)
c = c + ns c = c + ns
case ('twin_fraction') case ('twin_fraction')
constitutive_titanmod_postResults(c+1:c+nt) = state(g,ip,el)%p((2*ns+1):(2*ns+nt)) constitutive_titanmod_postResults(c+1:c+nt) = state(g,ip,el)%p((2*ns+1):(2*ns+nt))
c = c + nt c = c + nt
case ('shear_rate_twin')
if (nt > 0_pInt) then
j = 0_pInt
do f = 1,lattice_maxNtwinFamily
index_myFamily = sum(lattice_NtwinSystem(1:f-1,myStructure))
do i = 1,constitutive_titanmod_Ntwin(f,myInstance)
j = j + 1_pInt
!* Resolved shear stress on twin system
tau = dot_product(Tstar_v,lattice_Stwin_v(:,index_myFamily+i,myStructure))
!* Stress ratios
StressRatio_r = (state(g,ip,el)%p(6*ns+3*nt+j)/tau)**constitutive_titanmod_r(myInstance)
!* Shear rates and their derivatives due to twin
if ( tau > 0.0_pReal ) then
constitutive_titanmod_postResults(c+j) = &
(constitutive_titanmod_MaxTwinFraction(myInstance)-sumf)*&
state(g,ip,el)%p(6*ns+4*nt+j)*constitutive_titanmod_Ndot0PerTwinSystem(f,myInstance)*exp(-StressRatio_r)
endif
enddo ; enddo
endif
c = c + nt
case ('mfp_twin')
constitutive_titanmod_postResults(c+1:c+nt) = state(g,ip,el)%p((5*ns+2*nt+1):(5*ns+3*nt))
c = c + nt
case ('resolved_stress_twin')
if (nt > 0_pInt) then
j = 0_pInt
do f = 1,lattice_maxNtwinFamily ! loop over all slip families
index_myFamily = sum(lattice_NtwinSystem(1:f-1,myStructure)) ! at which index starts my family
do i = 1,constitutive_titanmod_Ntwin(f,myInstance) ! process each (active) slip system in family
j = j + 1_pInt
constitutive_titanmod_postResults(c+j) = dot_product(Tstar_v,lattice_Stwin_v(:,index_myFamily+i,myStructure))
enddo; enddo
endif
c = c + nt
case ('threshold_stress_twin')
constitutive_titanmod_postResults(c+1:c+nt) = state(g,ip,el)%p((6*ns+3*nt+1):(6*ns+4*nt))
c = c + nt
end select end select
enddo enddo