Added kink-pair pre-factor for screw dislocation mobilities on non-basal slip systems in hex
This commit is contained in:
parent
298cecbfec
commit
9f071c3e01
|
@ -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
|
||||||
|
|
||||||
|
@ -14,11 +88,25 @@ 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', &
|
||||||
|
@ -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)
|
||||||
|
@ -740,6 +859,14 @@ write(6,*) 'Determining elasticity matrix'
|
||||||
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'
|
||||||
return
|
return
|
||||||
|
@ -762,10 +889,10 @@ real(pReal), dimension(constitutive_titanmod_sizeState(myInstance)) :: constitu
|
||||||
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 *
|
||||||
|
@ -943,11 +1070,26 @@ 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,41 +1216,79 @@ 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 p minus1
|
!* Stress ratio for edge
|
||||||
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)))/ &
|
||||||
StressRatio_edge_pminus1 = ((abs(tau_slip(j))-state(g,ip,el)%p(5*ns+3*nt+j))/ &
|
( constitutive_titanmod_tau0e_PerSlipSystem(j,myInstance)+state(g,ip,el)%p(5*ns+3*nt+j)) &
|
||||||
constitutive_titanmod_tau0e_PerSlipSystem(j,myInstance))**(constitutive_titanmod_pe_PerSlipSystem(j,myInstance)-1)
|
)**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
|
else
|
||||||
StressRatio_edge_pminus1=0.0_pReal
|
minusStressRatio_edge_p=0.01_pReal
|
||||||
endif
|
endif
|
||||||
|
|
||||||
!* Stress ratio for screw p minus1
|
if((1.0_pReal-StressRatio_screw_p)>0.01_pReal) then
|
||||||
if((abs(tau_slip(j))-state(g,ip,el)%p(6*ns+3*nt+j))>0.0_pReal) then
|
minusStressRatio_screw_p=1.0_pReal-StressRatio_screw_p
|
||||||
StressRatio_screw_pminus1 = ((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)-1)
|
|
||||||
else
|
else
|
||||||
StressRatio_screw_pminus1=0.0_pReal
|
minusStressRatio_screw_p=0.01_pReal
|
||||||
endif
|
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 screw p minus1
|
||||||
|
! if((abs(tau_slip(j))-state(g,ip,el)%p(6*ns+3*nt+j))>0.0_pReal) then
|
||||||
|
! StressRatio_screw_pminus1 = ((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)-1)
|
||||||
|
! else
|
||||||
|
! StressRatio_screw_pminus1=0.0_pReal
|
||||||
|
! endif
|
||||||
|
|
||||||
|
StressRatio_edge_pminus1 = ((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)-1.0_pReal)
|
||||||
|
|
||||||
|
StressRatio_screw_pminus1 = ((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)-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,12 +1298,22 @@ 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))
|
||||||
|
|
||||||
|
edge_velocity(j) =constitutive_titanmod_v0e_PerSlipSystem(j,myInstance)*exp(-BoltzmannRatio*(minusStressRatio_edge_p)** &
|
||||||
|
constitutive_titanmod_qe_PerSlipSystem(j,myInstance))
|
||||||
|
|
||||||
|
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
|
!* Shear rates due to slip
|
||||||
gdot_slip(j) = constitutive_titanmod_burgersPerSlipSystem(j,myInstance)*2.0_pReal*(state(g,ip,el)%p(j)* &
|
gdot_slip(j) = constitutive_titanmod_burgersPerSlipSystem(j,myInstance)*2.0_pReal*(state(g,ip,el)%p(j)* &
|
||||||
constitutive_titanmod_v0e_PerSlipSystem(j,myInstance)*exp(-BoltzmannRatio*(1-StressRatio_edge_p)** &
|
edge_velocity(j)+state(g,ip,el)%p(ns+j) * screw_velocity(j))* sign(1.0_pReal,tau_slip(j))
|
||||||
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)** &
|
! forall (s = 1:ns) &
|
||||||
constitutive_titanmod_qs_PerSlipSystem(j,myInstance)))* sign(1.0_pReal,tau_slip(j))
|
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) = &
|
||||||
|
@ -1146,27 +1322,51 @@ 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
|
||||||
|
@ -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,20 +1506,48 @@ 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
|
||||||
|
! 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
|
||||||
|
|
||||||
|
!* 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
|
endif
|
||||||
|
|
||||||
!* Boltzmann ratio
|
!* Boltzmann ratio
|
||||||
|
@ -1326,9 +1557,10 @@ forall (s = 1:ns) &
|
||||||
! 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
|
||||||
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue