diff --git a/code/constitutive_dislotwin.f90 b/code/constitutive_dislotwin.f90 index 202b27ad3..712556f31 100644 --- a/code/constitutive_dislotwin.f90 +++ b/code/constitutive_dislotwin.f90 @@ -81,11 +81,10 @@ module constitutive_dislotwin constitutive_dislotwin_dipoleFormationFactor, & !< scaling factor for dipole formation: 0: off, 1: on. other values not useful constitutive_dislotwin_aTolRho, & !< absolute tolerance for integration of dislocation density constitutive_dislotwin_aTolTwinFrac, & !< absolute tolerance for integration of twin volume fraction - constitutive_dislotwin_c1, & !< strain induced martensite nucleation coefficient - constitutive_dislotwin_c2, & !< phase boundary energy - constitutive_dislotwin_c3, & !< Lagrange multiplier - constitutive_dislotwin_c5, & !< phase transformation rate coefficient - constitutive_dislotwin_deltaG !< free energy difference between austensite and martensite [MPa] + constitutive_dislotwin_Cnuc, & !< Coefficient for strain-induced martensite nucleation + constitutive_dislotwin_Cdwp, & !< Coefficient for double well potential + constitutive_dislotwin_Cgro, & !< Coefficient for stress-assisted martensite growth + constitutive_dislotwin_deltaG !< Free energy difference between austensite and martensite [MPa] real(pReal), dimension(:,:,:,:), allocatable, private :: & constitutive_dislotwin_Ctwin66 !< twin elasticity matrix in Mandel notation for each instance @@ -276,10 +275,9 @@ subroutine constitutive_dislotwin_init(fileUnit) allocate(constitutive_dislotwin_SFE_0K(maxNinstance), source=0.0_pReal) allocate(constitutive_dislotwin_dSFE_dT(maxNinstance), source=0.0_pReal) allocate(constitutive_dislotwin_dipoleFormationFactor(maxNinstance), source=1.0_pReal) !should be on by default - allocate(constitutive_dislotwin_c1(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_c2(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_c3(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_c5(maxNinstance), source=0.0_pReal) + allocate(constitutive_dislotwin_Cnuc(maxNinstance), source=0.0_pReal) + allocate(constitutive_dislotwin_Cdwp(maxNinstance), source=0.0_pReal) + allocate(constitutive_dislotwin_Cgro(maxNinstance), source=0.0_pReal) allocate(constitutive_dislotwin_deltaG(maxNinstance), source=0.0_pReal) allocate(constitutive_dislotwin_rhoEdge0(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) allocate(constitutive_dislotwin_rhoEdgeDip0(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) @@ -592,14 +590,12 @@ subroutine constitutive_dislotwin_init(fileUnit) constitutive_dislotwin_sbVelocity(instance) = IO_floatValue(line,positions,2_pInt) case ('qedgepersbsystem') constitutive_dislotwin_sbQedge(instance) = IO_floatValue(line,positions,2_pInt) - case ('c1') - constitutive_dislotwin_c1(instance) = IO_floatValue(line,positions,2_pInt) - case ('c2') - constitutive_dislotwin_c2(instance) = IO_floatValue(line,positions,2_pInt) - case ('c3') - constitutive_dislotwin_c3(instance) = IO_floatValue(line,positions,2_pInt) - case ('c5') - constitutive_dislotwin_c5(instance) = IO_floatValue(line,positions,2_pInt) + case ('cnuc') + constitutive_dislotwin_Cnuc(instance) = IO_floatValue(line,positions,2_pInt) + case ('cdwp') + constitutive_dislotwin_Cdwp(instance) = IO_floatValue(line,positions,2_pInt) + case ('cgro') + constitutive_dislotwin_Cgro(instance) = IO_floatValue(line,positions,2_pInt) case ('deltag') constitutive_dislotwin_deltaG(instance) = IO_floatValue(line,positions,2_pInt) end select diff --git a/code/lattice.f90 b/code/lattice.f90 index 728f641c9..22641d442 100644 --- a/code/lattice.f90 +++ b/code/lattice.f90 @@ -250,8 +250,8 @@ module lattice 0.0, 0.0, 1.0, 45.0 & ],[ 4_pInt,LATTICE_fcc_Ntrans]) - real(pReal), dimension(12,LATTICE_fcc_Ntrans), parameter, private :: & - LATTICE_fcc_projectionTrans = reshape(real([& + real(pReal), dimension(LATTICE_fcc_Ntrans,LATTICE_fcc_Ntrans), parameter, private :: & ! Matrix for projection of shear from slip system to fault-band (twin) systems + LATTICE_fcc_projectionTrans = reshape([& ! For ns = nt = nr 0, 1,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, & -1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, & 1,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & @@ -264,7 +264,13 @@ module lattice 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,-1, & 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 1, & 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,-1, 0 & - ],pReal),[ 12_pInt,LATTICE_fcc_Ntrans]) + ],[LATTICE_fcc_Ntrans,LATTICE_fcc_Ntrans],order=[2,1]) + + real(pReal), parameter, private :: & + LATTICE_fcc_projectionTransFactor = sqrt(3.0_pReal/4.0_pReal) + + real(pReal), parameter, public :: & + LATTICE_fcc_shearCritTrans = 0.0224 integer(pInt), dimension(2_pInt,LATTICE_fcc_Ntrans), parameter, public :: & LATTICE_fcc_transNucleationTwinPair = reshape(int( [& @@ -741,7 +747,8 @@ module lattice real(pReal), dimension(:,:,:), allocatable, public, protected :: & lattice_thermalConductivity33, & lattice_thermalExpansion33, & - lattice_damageDiffusion33 + lattice_damageDiffusion33, & + lattice_surfaceEnergy33 real(pReal), dimension(:), allocatable, public, protected :: & lattice_damageMobility, & lattice_massDensity, & @@ -1003,6 +1010,7 @@ subroutine lattice_init allocate(lattice_damageMobility ( Nphases), source=0.0_pReal) allocate(lattice_massDensity ( Nphases), source=0.0_pReal) allocate(lattice_specificHeat ( Nphases), source=0.0_pReal) + allocate(lattice_surfaceEnergy33 (3,3,Nphases), source=0.0_pReal) allocate(lattice_referenceTemperature (Nphases), source=0.0_pReal) allocate(lattice_mu(Nphases), source=0.0_pReal) @@ -1108,11 +1116,11 @@ subroutine lattice_init aM(section) = IO_floatValue(line,positions,2_pInt) case ('cm', 'c_m', 'c_martensite') cM(section) = IO_floatValue(line,positions,2_pInt) - case ('thermal_conductivity11') + case ('k11') lattice_thermalConductivity33(1,1,section) = IO_floatValue(line,positions,2_pInt) - case ('thermal_conductivity22') + case ('k22') lattice_thermalConductivity33(2,2,section) = IO_floatValue(line,positions,2_pInt) - case ('thermal_conductivity33') + case ('k33') lattice_thermalConductivity33(3,3,section) = IO_floatValue(line,positions,2_pInt) case ('thermal_expansion11') lattice_thermalExpansion33(1,1,section) = IO_floatValue(line,positions,2_pInt) @@ -1120,20 +1128,38 @@ subroutine lattice_init lattice_thermalExpansion33(2,2,section) = IO_floatValue(line,positions,2_pInt) case ('thermal_expansion33') lattice_thermalExpansion33(3,3,section) = IO_floatValue(line,positions,2_pInt) + case ('g11') + lattice_surfaceEnergy33(1,1,section) = IO_floatValue(line,positions,2_pInt) + case ('g22') + lattice_surfaceEnergy33(2,2,section) = IO_floatValue(line,positions,2_pInt) + case ('g33') + lattice_surfaceEnergy33(3,3,section) = IO_floatValue(line,positions,2_pInt) + case ('reference_temperature') + lattice_referenceTemperature(section) = IO_floatValue(line,positions,2_pInt) + case ('k_d11') + lattice_DamageDiffusion33(1,1,section) = IO_floatValue(line,positions,2_pInt) + case ('k_d12') + lattice_DamageDiffusion33(1,2,section) = IO_floatValue(line,positions,2_pInt) + case ('k_d13') + lattice_DamageDiffusion33(1,3,section) = IO_floatValue(line,positions,2_pInt) + case ('k_d21') + lattice_DamageDiffusion33(2,1,section) = IO_floatValue(line,positions,2_pInt) + case ('k_d22') + lattice_DamageDiffusion33(2,3,section) = IO_floatValue(line,positions,2_pInt) + case ('k_d23') + lattice_DamageDiffusion33(2,3,section) = IO_floatValue(line,positions,2_pInt) + case ('k_d31') + lattice_DamageDiffusion33(3,1,section) = IO_floatValue(line,positions,2_pInt) + case ('k_d32') + lattice_DamageDiffusion33(3,2,section) = IO_floatValue(line,positions,2_pInt) + case ('k_d33') + lattice_DamageDiffusion33(3,3,section) = IO_floatValue(line,positions,2_pInt) + case ('damage_mobility') + lattice_DamageMobility(section) = IO_floatValue(line,positions,2_pInt) case ('specific_heat') lattice_specificHeat(section) = IO_floatValue(line,positions,2_pInt) case ('mass_density') lattice_massDensity(section) = IO_floatValue(line,positions,2_pInt) - case ('reference_temperature') - lattice_referenceTemperature(section) = IO_floatValue(line,positions,2_pInt) - case ('damage_diffusion11') - lattice_DamageDiffusion33(1,1,section) = IO_floatValue(line,positions,2_pInt) - case ('damage_diffusion22') - lattice_DamageDiffusion33(2,2,section) = IO_floatValue(line,positions,2_pInt) - case ('damage_diffusion33') - lattice_DamageDiffusion33(3,3,section) = IO_floatValue(line,positions,2_pInt) - case ('damage_mobility') - lattice_DamageMobility(section) = IO_floatValue(line,positions,2_pInt) end select endif enddo @@ -1221,8 +1247,8 @@ subroutine lattice_initializeStructure(myPhase,CoverA,aA,aM,cM) lattice_thermalConductivity33(1:3,1:3,myPhase)) lattice_thermalExpansion33(1:3,1:3,myPhase) = lattice_symmetrize33(lattice_structure(myPhase),& lattice_thermalExpansion33(1:3,1:3,myPhase)) - lattice_DamageDiffusion33(1:3,1:3,myPhase) = lattice_symmetrize33(lattice_structure(myPhase),& - lattice_DamageDiffusion33(1:3,1:3,myPhase)) + lattice_surfaceEnergy33(1:3,1:3,myPhase) = lattice_symmetrize33(lattice_structure(myPhase),& + lattice_surfaceEnergy33(1:3,1:3,myPhase)) select case(lattice_structure(myPhase)) !-------------------------------------------------------------------------------------------------- @@ -1266,7 +1292,7 @@ subroutine lattice_initializeStructure(myPhase,CoverA,aA,aM,cM) lattice_interactionSlipTwin(1:myNslip,1:myNtwin,myPhase) = lattice_fcc_interactionSlipTwin lattice_interactionTwinSlip(1:myNtwin,1:myNslip,myPhase) = lattice_fcc_interactionTwinSlip lattice_interactionTwinTwin(1:myNtwin,1:myNtwin,myPhase) = lattice_fcc_interactionTwinTwin - lattice_projectionTrans(1:myNtrans,1:myNtrans,myPhase) = LATTICE_fcc_projectionTrans + lattice_projectionTrans(1:myNtrans,1:myNtrans,myPhase) = LATTICE_fcc_projectionTrans*LATTICE_fcc_projectionTransFactor !-------------------------------------------------------------------------------------------------- ! bcc