switched matrix indices in SlipSlip, SlipTwin, TwinSlip, and TwinTwin such that first index refers to first name and second to second... (used to be transposed for memory efficiency)

This commit is contained in:
Philip Eisenlohr 2012-11-14 10:22:34 +00:00
parent 789e6c7d83
commit e4ce63d689
2 changed files with 267 additions and 274 deletions

View File

@ -44,23 +44,19 @@ character(len=18), dimension(4), parameter:: constitutive_dislotwin_listDependen
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
!* Definition of global variables !* Definition of global variables
integer(pInt), dimension(:), allocatable :: constitutive_dislotwin_sizeDotState, & ! number of dotStates integer(pInt), dimension(:), allocatable :: constitutive_dislotwin_sizeDotState, & ! number of dotStates
constitutive_dislotwin_sizeState, & ! total number of microstructural state variables constitutive_dislotwin_sizeState, & ! total number of microstructural state variables
constitutive_dislotwin_sizePostResults ! cumulative size of post results constitutive_dislotwin_sizePostResults ! cumulative size of post results
integer(pInt), dimension(:,:), allocatable, target :: constitutive_dislotwin_sizePostResult ! size of each post result output integer(pInt), dimension(:,:), allocatable, target :: constitutive_dislotwin_sizePostResult ! size of each post result output
character(len=64), dimension(:,:), allocatable, target :: constitutive_dislotwin_output ! name of each post result output character(len=64), dimension(:,:), allocatable, target :: constitutive_dislotwin_output ! name of each post result output
integer(pInt), dimension(:), allocatable :: constitutive_dislotwin_Noutput ! number of outputs per instance of this plasticity integer(pInt), dimension(:), allocatable :: constitutive_dislotwin_Noutput ! number of outputs per instance of this plasticity
character(len=32), dimension(:), allocatable :: constitutive_dislotwin_structureName ! name of the lattice structure character(len=32), dimension(:), allocatable :: constitutive_dislotwin_structureName ! name of the lattice structure
integer(pInt), dimension(:), allocatable :: constitutive_dislotwin_structure, & ! number representing the kind of lattice structure integer(pInt), dimension(:), allocatable :: constitutive_dislotwin_structure, & ! number representing the kind of lattice structure
constitutive_dislotwin_totalNslip, & ! total number of active slip systems for each instance constitutive_dislotwin_totalNslip, & ! total number of active slip systems for each instance
constitutive_dislotwin_totalNtwin ! total number of active twin systems for each instance constitutive_dislotwin_totalNtwin ! total number of active twin systems for each instance
integer(pInt), dimension(:,:), allocatable :: constitutive_dislotwin_Nslip, & ! number of active slip systems for each family and instance integer(pInt), dimension(:,:), allocatable :: constitutive_dislotwin_Nslip, & ! number of active slip systems for each family and instance
constitutive_dislotwin_Ntwin, & ! number of active twin systems for each family and instance constitutive_dislotwin_Ntwin ! number of active twin systems for each family and instance
constitutive_dislotwin_slipFamily, & ! lookup table relating active slip system to slip family for each instance real(pReal), dimension(:), allocatable :: constitutive_dislotwin_CoverA, & ! c/a ratio for hex type lattice
constitutive_dislotwin_twinFamily, & ! lookup table relating active twin system to twin family for each instance
constitutive_dislotwin_slipSystemLattice, & ! lookup table relating active slip system index to lattice slip system index for each instance
constitutive_dislotwin_twinSystemLattice ! lookup table relating active twin system index to lattice twin system index for each instance
real(pReal), dimension(:), allocatable :: constitutive_dislotwin_CoverA, & ! c/a ratio for hex type lattice
constitutive_dislotwin_C11, & ! C11 element in elasticity matrix constitutive_dislotwin_C11, & ! C11 element in elasticity matrix
constitutive_dislotwin_C12, & ! C12 element in elasticity matrix constitutive_dislotwin_C12, & ! C12 element in elasticity matrix
constitutive_dislotwin_C13, & ! C13 element in elasticity matrix constitutive_dislotwin_C13, & ! C13 element in elasticity matrix
@ -90,7 +86,7 @@ real(pReal), dimension(:,:,:), allocatable :: constitutive_dislotwin
real(pReal), dimension(:,:,:,:), allocatable :: constitutive_dislotwin_Ctwin_66 ! twin elasticity matrix in Mandel notation for each instance real(pReal), dimension(:,:,:,:), allocatable :: constitutive_dislotwin_Ctwin_66 ! twin elasticity matrix in Mandel notation for each instance
real(pReal), dimension(:,:,:,:,:), allocatable :: constitutive_dislotwin_Cslip_3333 ! elasticity matrix for each instance real(pReal), dimension(:,:,:,:,:), allocatable :: constitutive_dislotwin_Cslip_3333 ! elasticity matrix for each instance
real(pReal), dimension(:,:,:,:,:,:), allocatable :: constitutive_dislotwin_Ctwin_3333 ! twin elasticity matrix for each instance real(pReal), dimension(:,:,:,:,:,:), allocatable :: constitutive_dislotwin_Ctwin_3333 ! twin elasticity matrix for each instance
real(pReal), dimension(:,:), allocatable :: constitutive_dislotwin_rhoEdge0, & ! initial edge dislocation density per slip system for each family and instance real(pReal), dimension(:,:), allocatable :: constitutive_dislotwin_rhoEdge0, & ! initial edge dislocation density per slip system for each family and instance
constitutive_dislotwin_rhoEdgeDip0, & ! initial edge dipole density per slip system for each family and instance constitutive_dislotwin_rhoEdgeDip0, & ! initial edge dipole density per slip system for each family and instance
constitutive_dislotwin_burgersPerSlipFamily, & ! absolute length of burgers vector [m] for each slip family and instance constitutive_dislotwin_burgersPerSlipFamily, & ! absolute length of burgers vector [m] for each slip family and instance
constitutive_dislotwin_burgersPerSlipSystem, & ! absolute length of burgers vector [m] for each slip system and instance constitutive_dislotwin_burgersPerSlipSystem, & ! absolute length of burgers vector [m] for each slip system and instance
@ -106,16 +102,16 @@ real(pReal), dimension(:,:), allocatable :: constitutive_dislotwin
constitutive_dislotwin_twinsizePerTwinSystem, & ! twin thickness [m] for each twin system and instance constitutive_dislotwin_twinsizePerTwinSystem, & ! twin thickness [m] for each twin system and instance
constitutive_dislotwin_CLambdaSlipPerSlipFamily, & ! Adj. parameter for distance between 2 forest dislocations for each slip family and instance constitutive_dislotwin_CLambdaSlipPerSlipFamily, & ! Adj. parameter for distance between 2 forest dislocations for each slip family and instance
constitutive_dislotwin_CLambdaSlipPerSlipSystem, & ! Adj. parameter for distance between 2 forest dislocations for each slip system and instance constitutive_dislotwin_CLambdaSlipPerSlipSystem, & ! Adj. parameter for distance between 2 forest dislocations for each slip system and instance
constitutive_dislotwin_interactionSlipSlip, & ! coefficients for slip-slip interaction for each interaction type and instance constitutive_dislotwin_interaction_SlipSlip, & ! coefficients for slip-slip interaction for each interaction type and instance
constitutive_dislotwin_interactionSlipTwin, & ! coefficients for slip-twin interaction for each interaction type and instance constitutive_dislotwin_interaction_SlipTwin, & ! coefficients for slip-twin interaction for each interaction type and instance
constitutive_dislotwin_interactionTwinSlip, & ! coefficients for twin-slip interaction for each interaction type and instance constitutive_dislotwin_interaction_TwinSlip, & ! coefficients for twin-slip interaction for each interaction type and instance
constitutive_dislotwin_interactionTwinTwin ! coefficients for twin-twin interaction for each interaction type and instance constitutive_dislotwin_interaction_TwinTwin ! coefficients for twin-twin interaction for each interaction type and instance
real(pReal), dimension(:,:,:), allocatable :: constitutive_dislotwin_interactionMatrixSlipSlip, & ! interaction matrix of the different slip systems for each instance real(pReal), dimension(:,:,:), allocatable :: constitutive_dislotwin_interactionMatrix_SlipSlip, & ! interaction matrix of the different slip systems for each instance
constitutive_dislotwin_interactionMatrixSlipTwin, & ! interaction matrix of slip systems with twin systems for each instance constitutive_dislotwin_interactionMatrix_SlipTwin, & ! interaction matrix of slip systems with twin systems for each instance
constitutive_dislotwin_interactionMatrixTwinSlip, & ! interaction matrix of twin systems with slip systems for each instance constitutive_dislotwin_interactionMatrix_TwinSlip, & ! interaction matrix of twin systems with slip systems for each instance
constitutive_dislotwin_interactionMatrixTwinTwin, & ! interaction matrix of the different twin systems for each instance constitutive_dislotwin_interactionMatrix_TwinTwin, & ! interaction matrix of the different twin systems for each instance
constitutive_dislotwin_forestProjectionEdge ! matrix of forest projections of edge dislocations for each instance constitutive_dislotwin_forestProjectionEdge ! matrix of forest projections of edge dislocations for each instance
real(pReal), dimension(:,:,:,:,:), allocatable :: constitutive_dislotwin_sbSv real(pReal), dimension(:,:,:,:,:), allocatable :: constitutive_dislotwin_sbSv
CONTAINS CONTAINS
!**************************************** !****************************************
@ -185,14 +181,6 @@ allocate(constitutive_dislotwin_Nslip(lattice_maxNslipFamily,maxNinstance))
constitutive_dislotwin_Nslip = 0_pInt constitutive_dislotwin_Nslip = 0_pInt
allocate(constitutive_dislotwin_Ntwin(lattice_maxNtwinFamily,maxNinstance)) allocate(constitutive_dislotwin_Ntwin(lattice_maxNtwinFamily,maxNinstance))
constitutive_dislotwin_Ntwin = 0_pInt constitutive_dislotwin_Ntwin = 0_pInt
allocate(constitutive_dislotwin_slipFamily(lattice_maxNslip,maxNinstance))
constitutive_dislotwin_slipFamily = 0_pInt
allocate(constitutive_dislotwin_twinFamily(lattice_maxNtwin,maxNinstance))
constitutive_dislotwin_twinFamily = 0_pInt
allocate(constitutive_dislotwin_slipSystemLattice(lattice_maxNslip,maxNinstance))
constitutive_dislotwin_slipSystemLattice = 0_pInt
allocate(constitutive_dislotwin_twinSystemLattice(lattice_maxNtwin,maxNinstance))
constitutive_dislotwin_twinSystemLattice = 0_pInt
allocate(constitutive_dislotwin_totalNslip(maxNinstance)) allocate(constitutive_dislotwin_totalNslip(maxNinstance))
constitutive_dislotwin_totalNslip = 0_pInt constitutive_dislotwin_totalNslip = 0_pInt
allocate(constitutive_dislotwin_totalNtwin(maxNinstance)) allocate(constitutive_dislotwin_totalNtwin(maxNinstance))
@ -271,14 +259,14 @@ allocate(constitutive_dislotwin_twinsizePerTwinFamily(lattice_maxNtwinFamily,max
constitutive_dislotwin_twinsizePerTwinFamily = 0.0_pReal constitutive_dislotwin_twinsizePerTwinFamily = 0.0_pReal
allocate(constitutive_dislotwin_CLambdaSlipPerSlipFamily(lattice_maxNslipFamily,maxNinstance)) allocate(constitutive_dislotwin_CLambdaSlipPerSlipFamily(lattice_maxNslipFamily,maxNinstance))
constitutive_dislotwin_CLambdaSlipPerSlipFamily = 0.0_pReal constitutive_dislotwin_CLambdaSlipPerSlipFamily = 0.0_pReal
allocate(constitutive_dislotwin_interactionSlipSlip(lattice_maxNinteraction,maxNinstance)) allocate(constitutive_dislotwin_interaction_SlipSlip(lattice_maxNinteraction,maxNinstance))
constitutive_dislotwin_interactionSlipSlip = 0.0_pReal constitutive_dislotwin_interaction_SlipSlip = 0.0_pReal
allocate(constitutive_dislotwin_interactionSlipTwin(lattice_maxNinteraction,maxNinstance)) allocate(constitutive_dislotwin_interaction_SlipTwin(lattice_maxNinteraction,maxNinstance))
constitutive_dislotwin_interactionSlipTwin = 0.0_pReal constitutive_dislotwin_interaction_SlipTwin = 0.0_pReal
allocate(constitutive_dislotwin_interactionTwinSlip(lattice_maxNinteraction,maxNinstance)) allocate(constitutive_dislotwin_interaction_TwinSlip(lattice_maxNinteraction,maxNinstance))
constitutive_dislotwin_interactionTwinSlip = 0.0_pReal constitutive_dislotwin_interaction_TwinSlip = 0.0_pReal
allocate(constitutive_dislotwin_interactionTwinTwin(lattice_maxNinteraction,maxNinstance)) allocate(constitutive_dislotwin_interaction_TwinTwin(lattice_maxNinteraction,maxNinstance))
constitutive_dislotwin_interactionTwinTwin = 0.0_pReal constitutive_dislotwin_interaction_TwinTwin = 0.0_pReal
allocate(constitutive_dislotwin_sbSv(6,6,homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems)) allocate(constitutive_dislotwin_sbSv(6,6,homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems))
constitutive_dislotwin_sbSv = 0.0_pReal constitutive_dislotwin_sbSv = 0.0_pReal
@ -384,18 +372,18 @@ do ! read thru sections of
constitutive_dislotwin_CEdgeDipMinDistance(i) = IO_floatValue(line,positions,2_pInt) constitutive_dislotwin_CEdgeDipMinDistance(i) = IO_floatValue(line,positions,2_pInt)
case ('catomicvolume') case ('catomicvolume')
constitutive_dislotwin_CAtomicVolume(i) = IO_floatValue(line,positions,2_pInt) constitutive_dislotwin_CAtomicVolume(i) = IO_floatValue(line,positions,2_pInt)
case ('interactionslipslip') case ('interaction_slipslip','interactionslipslip')
forall (j = 1_pInt:lattice_maxNinteraction) & forall (j = 1_pInt:lattice_maxNinteraction) &
constitutive_dislotwin_interactionSlipSlip(j,i) = IO_floatValue(line,positions,1_pInt+j) constitutive_dislotwin_interaction_SlipSlip(j,i) = IO_floatValue(line,positions,1_pInt+j)
case ('interactionsliptwin') case ('interaction_sliptwin','interactionsliptwin')
forall (j = 1_pInt:lattice_maxNinteraction) & forall (j = 1_pInt:lattice_maxNinteraction) &
constitutive_dislotwin_interactionSlipTwin(j,i) = IO_floatValue(line,positions,1_pInt+j) constitutive_dislotwin_interaction_SlipTwin(j,i) = IO_floatValue(line,positions,1_pInt+j)
case ('interactiontwinslip') case ('interaction_twinslip','interactiontwinslip')
forall (j = 1_pInt:lattice_maxNinteraction) & forall (j = 1_pInt:lattice_maxNinteraction) &
constitutive_dislotwin_interactionTwinSlip(j,i) = IO_floatValue(line,positions,1_pInt+j) constitutive_dislotwin_interaction_TwinSlip(j,i) = IO_floatValue(line,positions,1_pInt+j)
case ('interactiontwintwin') case ('interaction_twintwin','interactiontwintwin')
forall (j = 1_pInt:lattice_maxNinteraction) & forall (j = 1_pInt:lattice_maxNinteraction) &
constitutive_dislotwin_interactionTwinTwin(j,i) = IO_floatValue(line,positions,1_pInt+j) constitutive_dislotwin_interaction_TwinTwin(j,i) = IO_floatValue(line,positions,1_pInt+j)
case ('sfe_0k') case ('sfe_0k')
constitutive_dislotwin_SFE_0K(i) = IO_floatValue(line,positions,2_pInt) constitutive_dislotwin_SFE_0K(i) = IO_floatValue(line,positions,2_pInt)
case ('dsfe_dt') case ('dsfe_dt')
@ -489,14 +477,14 @@ allocate(constitutive_dislotwin_twinsizePerTwinSystem(maxTotalNtwin, maxNinstanc
allocate(constitutive_dislotwin_CLambdaSlipPerSlipSystem(maxTotalNslip, maxNinstance)) allocate(constitutive_dislotwin_CLambdaSlipPerSlipSystem(maxTotalNslip, maxNinstance))
constitutive_dislotwin_CLambdaSlipPerSlipSystem = 0.0_pReal constitutive_dislotwin_CLambdaSlipPerSlipSystem = 0.0_pReal
allocate(constitutive_dislotwin_interactionMatrixSlipSlip(maxTotalNslip,maxTotalNslip,maxNinstance)) allocate(constitutive_dislotwin_interactionMatrix_SlipSlip(maxTotalNslip,maxTotalNslip,maxNinstance))
constitutive_dislotwin_interactionMatrixSlipSlip = 0.0_pReal constitutive_dislotwin_interactionMatrix_SlipSlip = 0.0_pReal
allocate(constitutive_dislotwin_interactionMatrixSlipTwin(maxTotalNslip,maxTotalNtwin,maxNinstance)) allocate(constitutive_dislotwin_interactionMatrix_SlipTwin(maxTotalNslip,maxTotalNtwin,maxNinstance))
constitutive_dislotwin_interactionMatrixSlipTwin = 0.0_pReal constitutive_dislotwin_interactionMatrix_SlipTwin = 0.0_pReal
allocate(constitutive_dislotwin_interactionMatrixTwinSlip(maxTotalNtwin,maxTotalNslip,maxNinstance)) allocate(constitutive_dislotwin_interactionMatrix_TwinSlip(maxTotalNtwin,maxTotalNslip,maxNinstance))
constitutive_dislotwin_interactionMatrixTwinSlip = 0.0_pReal constitutive_dislotwin_interactionMatrix_TwinSlip = 0.0_pReal
allocate(constitutive_dislotwin_interactionMatrixTwinTwin(maxTotalNtwin,maxTotalNtwin,maxNinstance)) allocate(constitutive_dislotwin_interactionMatrix_TwinTwin(maxTotalNtwin,maxTotalNtwin,maxNinstance))
constitutive_dislotwin_interactionMatrixTwinTwin = 0.0_pReal constitutive_dislotwin_interactionMatrix_TwinTwin = 0.0_pReal
allocate(constitutive_dislotwin_forestProjectionEdge(maxTotalNslip,maxTotalNslip,maxNinstance)) allocate(constitutive_dislotwin_forestProjectionEdge(maxTotalNslip,maxTotalNslip,maxNinstance))
constitutive_dislotwin_forestProjectionEdge = 0.0_pReal constitutive_dislotwin_forestProjectionEdge = 0.0_pReal
@ -508,35 +496,17 @@ allocate(constitutive_dislotwin_Ctwin_3333(3,3,3,3,maxTotalNtwin,maxNinstance))
do i = 1_pInt,maxNinstance do i = 1_pInt,maxNinstance
myStructure = constitutive_dislotwin_structure(i) myStructure = constitutive_dislotwin_structure(i)
!* Inverse lookup of my slip system family
l = 0_pInt
do f = 1_pInt,lattice_maxNslipFamily
do k = 1_pInt,constitutive_dislotwin_Nslip(f,i)
l = l + 1_pInt
constitutive_dislotwin_slipFamily(l,i) = f
constitutive_dislotwin_slipSystemLattice(l,i) = sum(lattice_NslipSystem(1:f-1_pInt,myStructure)) + k
! write(6,*) 'slip system',l,'has family',f,'and is actually',constitutive_dislotwin_slipSystemLattice(l,i)
enddo; enddo
!* Inverse lookup of my twin system family
l = 0_pInt
do f = 1_pInt,lattice_maxNtwinFamily
do k = 1_pInt,constitutive_dislotwin_Ntwin(f,i)
l = l + 1_pInt
constitutive_dislotwin_twinFamily(l,i) = f
constitutive_dislotwin_twinSystemLattice(l,i) = sum(lattice_NtwinSystem(1:f-1_pInt,myStructure)) + k
! write(6,*) 'twin system',l,'has family',f,'and is actually',constitutive_dislotwin_twinSystemLattice(l,i)
enddo; enddo
!* Determine size of state array
ns = constitutive_dislotwin_totalNslip(i) ns = constitutive_dislotwin_totalNslip(i)
nt = constitutive_dislotwin_totalNtwin(i) nt = constitutive_dislotwin_totalNtwin(i)
! write(6,*) 'instance',i,'has nslip and ntwin',ns,nt ! write(6,*) 'instance',i,'has nslip and ntwin',ns,nt
constitutive_dislotwin_sizeDotState(i) = int(size(constitutive_dislotwin_listBasicSlipStates),pInt)*ns&
+ int(size(constitutive_dislotwin_listBasicTwinStates),pInt)*nt !* Determine size of state array
constitutive_dislotwin_sizeState(i) = constitutive_dislotwin_sizeDotState(i)&
+ int(size(constitutive_dislotwin_listDependentSlipStates),pInt)*ns& constitutive_dislotwin_sizeDotState(i) = int(size(constitutive_dislotwin_listBasicSlipStates),pInt) * ns &
+ int(size(constitutive_dislotwin_listDependentTwinStates),pInt)*nt + int(size(constitutive_dislotwin_listBasicTwinStates),pInt) * nt
constitutive_dislotwin_sizeState(i) = constitutive_dislotwin_sizeDotState(i) &
+ int(size(constitutive_dislotwin_listDependentSlipStates),pInt) * ns &
+ int(size(constitutive_dislotwin_listDependentTwinStates),pInt) * nt
!* Determine size of postResults array !* Determine size of postResults array
do o = 1_pInt,constitutive_dislotwin_Noutput(i) do o = 1_pInt,constitutive_dislotwin_Noutput(i)
@ -584,11 +554,11 @@ do i = 1_pInt,maxNinstance
case(1_pInt:2_pInt) ! cubic(s) case(1_pInt:2_pInt) ! cubic(s)
forall(k=1_pInt:3_pInt) forall(k=1_pInt:3_pInt)
forall(j=1_pInt:3_pInt) & forall(j=1_pInt:3_pInt) &
constitutive_dislotwin_Cslip_66(k,j,i) = constitutive_dislotwin_C12(i) constitutive_dislotwin_Cslip_66(k,j,i) = constitutive_dislotwin_C12(i)
constitutive_dislotwin_Cslip_66(k,k,i) = constitutive_dislotwin_C11(i) constitutive_dislotwin_Cslip_66(k,k,i) = constitutive_dislotwin_C11(i)
constitutive_dislotwin_Cslip_66(k+3_pInt,k+3_pInt,i) = constitutive_dislotwin_C44(i) constitutive_dislotwin_Cslip_66(k+3_pInt,k+3_pInt,i) = constitutive_dislotwin_C44(i)
end forall end forall
case(3_pInt:) ! all hex case(3_pInt:) ! all hex
constitutive_dislotwin_Cslip_66(1,1,i) = constitutive_dislotwin_C11(i) constitutive_dislotwin_Cslip_66(1,1,i) = constitutive_dislotwin_C11(i)
constitutive_dislotwin_Cslip_66(2,2,i) = constitutive_dislotwin_C11(i) constitutive_dislotwin_Cslip_66(2,2,i) = constitutive_dislotwin_C11(i)
constitutive_dislotwin_Cslip_66(3,3,i) = constitutive_dislotwin_C33(i) constitutive_dislotwin_Cslip_66(3,3,i) = constitutive_dislotwin_C33(i)
@ -607,82 +577,106 @@ do i = 1_pInt,maxNinstance
constitutive_dislotwin_Gmod(i) = & constitutive_dislotwin_Gmod(i) = &
0.2_pReal*(constitutive_dislotwin_C11(i)-constitutive_dislotwin_C12(i))+0.3_pReal*constitutive_dislotwin_C44(i) 0.2_pReal*(constitutive_dislotwin_C11(i)-constitutive_dislotwin_C12(i))+0.3_pReal*constitutive_dislotwin_C44(i)
!* Construction of the twin elasticity matrices
do j=1_pInt,lattice_maxNtwinFamily
do k=1_pInt,constitutive_dislotwin_Ntwin(j,i)
do l=1_pInt,3_pInt ; do m=1_pInt,3_pInt ; do n=1_pInt,3_pInt ; do o=1_pInt,3_pInt
do p=1_pInt,3_pInt ; do q=1_pInt,3_pInt ; do r=1_pInt,3_pInt ; do s=1_pInt,3_pInt
constitutive_dislotwin_Ctwin_3333(l,m,n,o,sum(constitutive_dislotwin_Nslip(1:j-1_pInt,i))+k,i) = &
constitutive_dislotwin_Ctwin_3333(l,m,n,o,sum(constitutive_dislotwin_Nslip(1:j-1_pInt,i))+k,i) + &
constitutive_dislotwin_Cslip_3333(p,q,r,s,i)*&
lattice_Qtwin(l,p,sum(lattice_NslipSystem(1:j-1_pInt,myStructure))+k,myStructure)* &
lattice_Qtwin(m,q,sum(lattice_NslipSystem(1:j-1_pInt,myStructure))+k,myStructure)* &
lattice_Qtwin(n,r,sum(lattice_NslipSystem(1:j-1_pInt,myStructure))+k,myStructure)* &
lattice_Qtwin(o,s,sum(lattice_NslipSystem(1:j-1_pInt,myStructure))+k,myStructure)
enddo ; enddo ; enddo ; enddo ; enddo ; enddo ; enddo ; enddo
constitutive_dislotwin_Ctwin_66(:,:,k,i) = math_Mandel3333to66(constitutive_dislotwin_Ctwin_3333(:,:,:,:,k,i))
enddo
enddo
!* Burgers vector, dislocation velocity prefactor, mean free path prefactor and minimum dipole distance for each slip system !* Process slip related parameters ------------------------------------------------
do s = 1_pInt,constitutive_dislotwin_totalNslip(i)
f = constitutive_dislotwin_slipFamily(s,i)
constitutive_dislotwin_burgersPerSlipSystem(s,i) = constitutive_dislotwin_burgersPerSlipFamily(f,i)
constitutive_dislotwin_QedgePerSlipSystem(s,i) = constitutive_dislotwin_QedgePerSlipFamily(f,i)
constitutive_dislotwin_v0PerSlipSystem(s,i) = constitutive_dislotwin_v0PerSlipFamily(f,i)
constitutive_dislotwin_CLambdaSlipPerSlipSystem(s,i) = constitutive_dislotwin_CLambdaSlipPerSlipFamily(f,i)
enddo
!* Burgers vector, nucleation rate prefactor and twin size for each twin system do f = 1_pInt,lattice_maxNslipFamily
do s = 1_pInt,constitutive_dislotwin_totalNtwin(i) index_myFamily = sum(constitutive_dislotwin_Nslip(1:f-1_pInt,i)) ! index in truncated slip system list
f = constitutive_dislotwin_twinFamily(s,i)
constitutive_dislotwin_burgersPerTwinSystem(s,i) = constitutive_dislotwin_burgersPerTwinFamily(f,i)
constitutive_dislotwin_Ndot0PerTwinSystem(s,i) = constitutive_dislotwin_Ndot0PerTwinFamily(f,i)
constitutive_dislotwin_twinsizePerTwinSystem(s,i) = constitutive_dislotwin_twinsizePerTwinFamily(f,i)
enddo
!* Construction of interaction matrices do j = 1_pInt,constitutive_dislotwin_Nslip(f,i) ! system in family
do s1 = 1_pInt,constitutive_dislotwin_totalNslip(i)
do s2 = 1_pInt,constitutive_dislotwin_totalNslip(i)
constitutive_dislotwin_interactionMatrixSlipSlip(s1,s2,i) = &
constitutive_dislotwin_interactionSlipSlip(lattice_interactionSlipSlip(constitutive_dislotwin_slipSystemLattice(s1,i), &
constitutive_dislotwin_slipSystemLattice(s2,i), &
myStructure),i)
enddo; enddo
do t2 = 1_pInt,constitutive_dislotwin_totalNtwin(i) !* Burgers vector,
do s1 = 1_pInt,constitutive_dislotwin_totalNslip(i) ! dislocation velocity prefactor,
constitutive_dislotwin_interactionMatrixSlipTwin(s1,t2,i) = & ! mean free path prefactor,
constitutive_dislotwin_interactionSlipTwin(& ! and minimum dipole distance
lattice_interactionSlipTwin(constitutive_dislotwin_twinSystemLattice(t2,i), &
constitutive_dislotwin_slipSystemLattice(s1,i),myStructure),i)
enddo; enddo
do s2 = 1_pInt,constitutive_dislotwin_totalNslip(i) constitutive_dislotwin_burgersPerSlipSystem(index_myFamily+j,i) = constitutive_dislotwin_burgersPerSlipFamily(f,i)
do t1 = 1_pInt,constitutive_dislotwin_totalNtwin(i) constitutive_dislotwin_QedgePerSlipSystem(index_myFamily+j,i) = constitutive_dislotwin_QedgePerSlipFamily(f,i)
constitutive_dislotwin_interactionMatrixTwinSlip(t1,s2,i) = & constitutive_dislotwin_v0PerSlipSystem(index_myFamily+j,i) = constitutive_dislotwin_v0PerSlipFamily(f,i)
constitutive_dislotwin_interactionTwinSlip(lattice_interactionTwinSlip(& constitutive_dislotwin_CLambdaSlipPerSlipSystem(index_myFamily+j,i) = constitutive_dislotwin_CLambdaSlipPerSlipFamily(f,i)
constitutive_dislotwin_slipSystemLattice(s2,i), &
constitutive_dislotwin_twinSystemLattice(t1,i), myStructure),i)
enddo; enddo
do t1 = 1_pInt,constitutive_dislotwin_totalNtwin(i) !* Interaction matrices
do t2 = 1_pInt,constitutive_dislotwin_totalNtwin(i)
constitutive_dislotwin_interactionMatrixTwinTwin(t1,t2,i) = &
constitutive_dislotwin_interactionTwinTwin(&
lattice_interactionTwinTwin(constitutive_dislotwin_twinSystemLattice(t1,i), &
constitutive_dislotwin_twinSystemLattice(t2,i), myStructure),i)
enddo; enddo
!* Calculation of forest projections for edge dislocations do o = 1_pInt,lattice_maxNslipFamily
do s1 = 1_pInt,constitutive_dislotwin_totalNslip(i) index_otherFamily = sum(constitutive_dislotwin_Nslip(1:o-1_pInt,i))
do s2 = 1_pInt,constitutive_dislotwin_totalNslip(i) do k = 1_pInt,constitutive_dislotwin_Nslip(o,i) ! loop over (active) systems in other family (slip)
constitutive_dislotwin_forestProjectionEdge(s1,s2,i) = & constitutive_dislotwin_interactionMatrix_SlipSlip(index_myFamily+j,index_otherFamily+k,i) = &
abs(math_mul3x3(lattice_sn(:,constitutive_dislotwin_slipSystemLattice(s1,i),myStructure), & constitutive_dislotwin_interaction_SlipSlip(lattice_interactionSlipSlip( &
lattice_st(:,constitutive_dislotwin_slipSystemLattice(s2,i),myStructure))) sum(lattice_NslipSystem(1:f-1,myStructure))+j, &
enddo; enddo sum(lattice_NslipSystem(1:o-1,myStructure))+k, &
myStructure), i )
enddo; enddo
enddo do o = 1_pInt,lattice_maxNtwinFamily
index_otherFamily = sum(constitutive_dislotwin_Ntwin(1:o-1_pInt,i))
do k = 1_pInt,constitutive_dislotwin_Ntwin(o,i) ! loop over (active) systems in other family (twin)
constitutive_dislotwin_interactionMatrix_SlipTwin(index_myFamily+j,index_otherFamily+k,i) = &
constitutive_dislotwin_interaction_SlipTwin(lattice_interactionSlipTwin( &
sum(lattice_NslipSystem(1:f-1_pInt,myStructure))+j, &
sum(lattice_NtwinSystem(1:o-1_pInt,myStructure))+k, &
myStructure), i )
enddo; enddo
enddo ! slip system in family
enddo ! slip families
!* Process twin related parameters ------------------------------------------------
do f = 1_pInt,lattice_maxNtwinFamily
index_myFamily = sum(constitutive_dislotwin_Ntwin(1:f-1_pInt,i)) ! index in truncated twin system list
do j = 1_pInt,constitutive_dislotwin_Ntwin(f,i) ! system in family
!* Burgers vector,
! nucleation rate prefactor,
! and twin size
constitutive_dislotwin_burgersPerTwinSystem(index_myFamily+j,i) = constitutive_dislotwin_burgersPerTwinFamily(f,i)
constitutive_dislotwin_Ndot0PerTwinSystem(index_myFamily+j,i) = constitutive_dislotwin_Ndot0PerTwinFamily(f,i)
constitutive_dislotwin_twinsizePerTwinSystem(index_myFamily+j,i) = constitutive_dislotwin_twinsizePerTwinFamily(f,i)
!* Rotate twin elasticity matrices
index_otherFamily = sum(lattice_NtwinSystem(1:f-1_pInt,myStructure)) ! index in full lattice twin list
do l = 1_pInt,3_pInt ; do m = 1_pInt,3_pInt ; do n = 1_pInt,3_pInt ; do o = 1_pInt,3_pInt
do p = 1_pInt,3_pInt ; do q = 1_pInt,3_pInt ; do r = 1_pInt,3_pInt ; do s = 1_pInt,3_pInt
constitutive_dislotwin_Ctwin_3333(l,m,n,o,index_myFamily+j,i) = &
constitutive_dislotwin_Ctwin_3333(l,m,n,o,index_myFamily+j,i) + &
constitutive_dislotwin_Cslip_3333(p,q,r,s,i) * &
lattice_Qtwin(l,p,index_otherFamily+j,myStructure) * &
lattice_Qtwin(m,q,index_otherFamily+j,myStructure) * &
lattice_Qtwin(n,r,index_otherFamily+j,myStructure) * &
lattice_Qtwin(o,s,index_otherFamily+j,myStructure)
enddo ; enddo ; enddo ; enddo
enddo ; enddo ; enddo ; enddo
constitutive_dislotwin_Ctwin_66(:,:,k,i) = math_Mandel3333to66(constitutive_dislotwin_Ctwin_3333(:,:,:,:,k,i))
!* Interaction matrices
do o = 1_pInt,lattice_maxNslipFamily
index_otherFamily = sum(constitutive_dislotwin_Nslip(1:o-1_pInt,i))
do k = 1_pInt,constitutive_dislotwin_Nslip(o,i) ! loop over (active) systems in other family (slip)
constitutive_dislotwin_interactionMatrix_TwinSlip(index_myFamily+j,index_otherFamily+k,i) = &
constitutive_dislotwin_interaction_TwinSlip(lattice_interactionTwinSlip( &
sum(lattice_NtwinSystem(1:f-1_pInt,myStructure))+j, &
sum(lattice_NslipSystem(1:o-1_pInt,myStructure))+k, &
myStructure), i )
enddo; enddo
do o = 1_pInt,lattice_maxNtwinFamily
index_otherFamily = sum(constitutive_dislotwin_Ntwin(1:o-1_pInt,i))
do k = 1_pInt,constitutive_dislotwin_Ntwin(o,i) ! loop over (active) systems in other family (twin)
constitutive_dislotwin_interactionMatrix_TwinTwin(index_myFamily+j,index_otherFamily+k,i) = &
constitutive_dislotwin_interaction_TwinTwin(lattice_interactionTwinTwin( &
sum(lattice_NtwinSystem(1:f-1_pInt,myStructure))+j, &
sum(lattice_NtwinSystem(1:o-1_pInt,myStructure))+k, &
myStructure), i )
enddo; enddo
enddo ! twin system in family
enddo ! twin families
enddo ! instances
return return
end subroutine end subroutine
@ -701,7 +695,7 @@ implicit none
integer(pInt) :: myInstance integer(pInt) :: myInstance
real(pReal), dimension(constitutive_dislotwin_sizeState(myInstance)) :: constitutive_dislotwin_stateInit real(pReal), dimension(constitutive_dislotwin_sizeState(myInstance)) :: constitutive_dislotwin_stateInit
!* Local variables !* Local variables
integer(pInt) s0,s1,s,t,f,ns,nt integer(pInt) i,j,f,ns,nt
real(pReal), dimension(constitutive_dislotwin_totalNslip(myInstance)) :: rhoEdge0, & real(pReal), dimension(constitutive_dislotwin_totalNslip(myInstance)) :: rhoEdge0, &
rhoEdgeDip0, & rhoEdgeDip0, &
invLambdaSlip0, & invLambdaSlip0, &
@ -714,44 +708,43 @@ nt = constitutive_dislotwin_totalNtwin(myInstance)
constitutive_dislotwin_stateInit = 0.0_pReal constitutive_dislotwin_stateInit = 0.0_pReal
!* Initialize basic slip state variables !* Initialize basic slip state variables
s1 = 0_pInt
do f = 1_pInt,lattice_maxNslipFamily do f = 1_pInt,lattice_maxNslipFamily
s0 = s1 + 1_pInt index_myFamily = sum(constitutive_dislotwin_Nslip(1:f-1_pInt,myInstance)) ! index in truncated slip system list
s1 = s0 + constitutive_dislotwin_Nslip(f,myInstance) - 1_pInt rhoEdge0(index_myFamily: &
do s = s0,s1 index_myFamily+constitutive_dislotwin_Nslip(f)-1_pInt) = constitutive_dislotwin_rhoEdge0(f,myInstance)
rhoEdge0(s) = constitutive_dislotwin_rhoEdge0(f,myInstance) rhoEdgeDip0(index_myFamily: &
rhoEdgeDip0(s) = constitutive_dislotwin_rhoEdgeDip0(f,myInstance) index_myFamily+constitutive_dislotwin_Nslip(f)-1_pInt) = constitutive_dislotwin_rhoEdgeDip0(f,myInstance)
enddo
enddo constitutive_dislotwin_stateInit(1_pInt:ns) = rhoEdge0
constitutive_dislotwin_stateInit(1:ns) = rhoEdge0 constitutive_dislotwin_stateInit(ns+1_pInt:2_pInt*ns) = rhoEdgeDip0
constitutive_dislotwin_stateInit(ns+1:2_pInt*ns) = rhoEdgeDip0
!* Initialize dependent slip microstructural variables !* Initialize dependent slip microstructural variables
forall (s = 1_pInt:ns) & forall (s = 1_pInt:ns) &
invLambdaSlip0(s) = sqrt(dot_product((rhoEdge0+rhoEdgeDip0),constitutive_dislotwin_forestProjectionEdge(1:ns,s,myInstance)))/ & invLambdaSlip0(s) = sqrt(dot_product((rhoEdge0+rhoEdgeDip0),constitutive_dislotwin_forestProjectionEdge(1:ns,s,myInstance)))/ &
constitutive_dislotwin_CLambdaSlipPerSlipSystem(s,myInstance) constitutive_dislotwin_CLambdaSlipPerSlipSystem(s,myInstance)
constitutive_dislotwin_stateInit(2_pInt*ns+nt+1_pInt:3_pInt*ns+nt) = invLambdaSlip0 constitutive_dislotwin_stateInit(2_pInt*ns+nt+1_pInt:3_pInt*ns+nt) = invLambdaSlip0
forall (s = 1_pInt:ns) & forall (s = 1_pInt:ns) &
MeanFreePathSlip0(s) = & MeanFreePathSlip0(s) = &
constitutive_dislotwin_GrainSize(myInstance)/(1.0_pReal+invLambdaSlip0(s)*constitutive_dislotwin_GrainSize(myInstance)) constitutive_dislotwin_GrainSize(myInstance)/(1.0_pReal+invLambdaSlip0(s)*constitutive_dislotwin_GrainSize(myInstance))
constitutive_dislotwin_stateInit(4_pInt*ns+2_pInt*nt+1:5_pInt*ns+2_pInt*nt) = MeanFreePathSlip0 constitutive_dislotwin_stateInit(4_pInt*ns+2_pInt*nt+1:5_pInt*ns+2_pInt*nt) = MeanFreePathSlip0
forall (s = 1_pInt:ns) & forall (s = 1_pInt:ns) &
tauSlipThreshold0(s) = constitutive_dislotwin_SolidSolutionStrength(myInstance)+ & tauSlipThreshold0(s) = constitutive_dislotwin_SolidSolutionStrength(myInstance) + &
constitutive_dislotwin_Gmod(myInstance)*constitutive_dislotwin_burgersPerSlipSystem(s,myInstance)* & constitutive_dislotwin_Gmod(myInstance)*constitutive_dislotwin_burgersPerSlipSystem(s,myInstance) * &
sqrt(dot_product((rhoEdge0+rhoEdgeDip0),constitutive_dislotwin_interactionMatrixSlipSlip(1:ns,s,myInstance))) sqrt(dot_product((rhoEdge0+rhoEdgeDip0),constitutive_dislotwin_interactionMatrix_SlipSlip(s,1:ns,myInstance)))
constitutive_dislotwin_stateInit(5_pInt*ns+3_pInt*nt+1:6_pInt*ns+3_pInt*nt) = tauSlipThreshold0 constitutive_dislotwin_stateInit(5_pInt*ns+3_pInt*nt+1:6_pInt*ns+3_pInt*nt) = tauSlipThreshold0
!* Initialize dependent twin microstructural variables !* Initialize dependent twin microstructural variables
forall (t = 1_pInt:nt) & forall (t = 1_pInt:nt) &
MeanFreePathTwin0(t) = constitutive_dislotwin_GrainSize(myInstance) MeanFreePathTwin0(t) = constitutive_dislotwin_GrainSize(myInstance)
constitutive_dislotwin_stateInit(5_pInt*ns+2_pInt*nt+1_pInt:5_pInt*ns+3_pInt*nt) = MeanFreePathTwin0 constitutive_dislotwin_stateInit(5_pInt*ns+2_pInt*nt+1_pInt:5_pInt*ns+3_pInt*nt) = MeanFreePathTwin0
forall (t = 1_pInt:nt) & forall (t = 1_pInt:nt) &
TwinVolume0(t) = & TwinVolume0(t) = &
(pi/6.0_pReal)*constitutive_dislotwin_twinsizePerTwinSystem(t,myInstance)*MeanFreePathTwin0(t)**(2.0_pReal) (pi/6.0_pReal)*constitutive_dislotwin_twinsizePerTwinSystem(t,myInstance)*MeanFreePathTwin0(t)**(2.0_pReal)
constitutive_dislotwin_stateInit(6_pInt*ns+4_pInt*nt+1_pInt:6_pInt*ns+5_pInt*nt) = TwinVolume0 constitutive_dislotwin_stateInit(6_pInt*ns+4_pInt*nt+1_pInt:6_pInt*ns+5_pInt*nt) = TwinVolume0
!write(6,*) '#STATEINIT#' !write(6,*) '#STATEINIT#'
!write(6,*) !write(6,*)
@ -890,14 +883,14 @@ forall (s = 1_pInt:ns) &
state(g,ip,el)%p((3_pInt*ns+nt+1_pInt):(4_pInt*ns+nt)) = 0.0_pReal state(g,ip,el)%p((3_pInt*ns+nt+1_pInt):(4_pInt*ns+nt)) = 0.0_pReal
if (nt > 0_pInt) & if (nt > 0_pInt) &
state(g,ip,el)%p((3_pInt*ns+nt+1):(4_pInt*ns+nt)) = & state(g,ip,el)%p((3_pInt*ns+nt+1):(4_pInt*ns+nt)) = &
matmul(constitutive_dislotwin_interactionMatrixSlipTwin(1:ns,1:nt,myInstance),fOverStacksize(1:nt))/(1.0_pReal-sumf) matmul(constitutive_dislotwin_interactionMatrix_SlipTwin(1:ns,1:nt,myInstance),fOverStacksize(1:nt))/(1.0_pReal-sumf)
!$OMP END CRITICAL (evilmatmul) !$OMP END CRITICAL (evilmatmul)
!* 1/mean free distance between 2 twin stacks from different systems seen by a growing twin !* 1/mean free distance between 2 twin stacks from different systems seen by a growing twin
!$OMP CRITICAL (evilmatmul) !$OMP CRITICAL (evilmatmul)
if (nt > 0_pInt) & if (nt > 0_pInt) &
state(g,ip,el)%p((4_pInt*ns+nt+1_pInt):(4_pInt*ns+2_pInt*nt)) = & state(g,ip,el)%p((4_pInt*ns+nt+1_pInt):(4_pInt*ns+2_pInt*nt)) = &
matmul(constitutive_dislotwin_interactionMatrixTwinTwin(1:nt,1:nt,myInstance),fOverStacksize(1:nt))/(1.0_pReal-sumf) matmul(constitutive_dislotwin_interactionMatrix_TwinTwin(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 !* mean free path between 2 obstacles seen by a moving dislocation
@ -924,7 +917,7 @@ forall (s = 1_pInt:ns) &
state(g,ip,el)%p(5_pInt*ns+3_pInt*nt+s) = constitutive_dislotwin_SolidSolutionStrength(myInstance)+ & state(g,ip,el)%p(5_pInt*ns+3_pInt*nt+s) = constitutive_dislotwin_SolidSolutionStrength(myInstance)+ &
constitutive_dislotwin_Gmod(myInstance)*constitutive_dislotwin_burgersPerSlipSystem(s,myInstance)*& constitutive_dislotwin_Gmod(myInstance)*constitutive_dislotwin_burgersPerSlipSystem(s,myInstance)*&
sqrt(dot_product((state(g,ip,el)%p(1:ns)+state(g,ip,el)%p(ns+1_pInt:2_pInt*ns)),& sqrt(dot_product((state(g,ip,el)%p(1:ns)+state(g,ip,el)%p(ns+1_pInt:2_pInt*ns)),&
constitutive_dislotwin_interactionMatrixSlipSlip(1:ns,s,myInstance))) constitutive_dislotwin_interactionMatrix_SlipSlip(s,1:ns,myInstance)))
!* threshold stress for growing twin !* threshold stress for growing twin
forall (t = 1_pInt:nt) & forall (t = 1_pInt:nt) &

View File

@ -79,26 +79,26 @@ module constitutive_phenopowerlaw
constitutive_phenopowerlaw_twinC, & constitutive_phenopowerlaw_twinC, &
constitutive_phenopowerlaw_twinD, & constitutive_phenopowerlaw_twinD, &
constitutive_phenopowerlaw_twinE, & constitutive_phenopowerlaw_twinE, &
constitutive_phenopowerlaw_h0_slipslip, & !< reference hardening slip - slip (input parameter) constitutive_phenopowerlaw_h0_SlipSlip, & !< reference hardening slip - slip (input parameter)
constitutive_phenopowerlaw_h0_sliptwin, & !< reference hardening slip - twin (input parameter, no effect at the moment) constitutive_phenopowerlaw_h0_SlipTwin, & !< reference hardening slip - twin (input parameter, no effect at the moment)
constitutive_phenopowerlaw_h0_twinslip, & !< reference hardening twin - slip (input parameter) constitutive_phenopowerlaw_h0_TwinSlip, & !< reference hardening twin - slip (input parameter)
constitutive_phenopowerlaw_h0_twintwin, & !< reference hardening twin - twin (input parameter) constitutive_phenopowerlaw_h0_TwinTwin, & !< reference hardening twin - twin (input parameter)
constitutive_phenopowerlaw_a_slip, & constitutive_phenopowerlaw_a_slip, &
constitutive_phenopowerlaw_aTolResistance, & constitutive_phenopowerlaw_aTolResistance, &
constitutive_phenopowerlaw_aTolShear, & constitutive_phenopowerlaw_aTolShear, &
constitutive_phenopowerlaw_aTolTwinfrac constitutive_phenopowerlaw_aTolTwinfrac
real(pReal), dimension(:,:), allocatable, private :: & real(pReal), dimension(:,:), allocatable, private :: &
constitutive_phenopowerlaw_interaction_slipslip, & !< interaction factors slip - slip (input parameter) constitutive_phenopowerlaw_interaction_SlipSlip, & !< interaction factors slip - slip (input parameter)
constitutive_phenopowerlaw_interaction_sliptwin, & !< interaction factors slip - twin (input parameter) constitutive_phenopowerlaw_interaction_SlipTwin, & !< interaction factors slip - twin (input parameter)
constitutive_phenopowerlaw_interaction_twinslip, & !< interaction factors twin - slip (input parameter) constitutive_phenopowerlaw_interaction_TwinSlip, & !< interaction factors twin - slip (input parameter)
constitutive_phenopowerlaw_interaction_twintwin !< interaction factors twin - twin (input parameter) constitutive_phenopowerlaw_interaction_TwinTwin !< interaction factors twin - twin (input parameter)
real(pReal), dimension(:,:,:), allocatable, private :: & real(pReal), dimension(:,:,:), allocatable, private :: &
constitutive_phenopowerlaw_hardeningMatrix_slipslip, & constitutive_phenopowerlaw_hardeningMatrix_SlipSlip, &
constitutive_phenopowerlaw_hardeningMatrix_sliptwin, & constitutive_phenopowerlaw_hardeningMatrix_SlipTwin, &
constitutive_phenopowerlaw_hardeningMatrix_twinslip, & constitutive_phenopowerlaw_hardeningMatrix_TwinSlip, &
constitutive_phenopowerlaw_hardeningMatrix_twintwin, & constitutive_phenopowerlaw_hardeningMatrix_TwinTwin, &
constitutive_phenopowerlaw_Cslip_66 constitutive_phenopowerlaw_Cslip_66
public :: & public :: &
@ -222,22 +222,22 @@ subroutine constitutive_phenopowerlaw_init(myFile)
constitutive_phenopowerlaw_twinD = 0.0_pReal constitutive_phenopowerlaw_twinD = 0.0_pReal
allocate(constitutive_phenopowerlaw_twinE(maxNinstance)) allocate(constitutive_phenopowerlaw_twinE(maxNinstance))
constitutive_phenopowerlaw_twinE = 0.0_pReal constitutive_phenopowerlaw_twinE = 0.0_pReal
allocate(constitutive_phenopowerlaw_h0_slipslip(maxNinstance)) allocate(constitutive_phenopowerlaw_h0_SlipSlip(maxNinstance))
constitutive_phenopowerlaw_h0_slipslip = 0.0_pReal constitutive_phenopowerlaw_h0_SlipSlip = 0.0_pReal
allocate(constitutive_phenopowerlaw_h0_sliptwin(maxNinstance)) allocate(constitutive_phenopowerlaw_h0_SlipTwin(maxNinstance))
constitutive_phenopowerlaw_h0_sliptwin = 0.0_pReal constitutive_phenopowerlaw_h0_SlipTwin = 0.0_pReal
allocate(constitutive_phenopowerlaw_h0_twinslip(maxNinstance)) allocate(constitutive_phenopowerlaw_h0_TwinSlip(maxNinstance))
constitutive_phenopowerlaw_h0_twinslip = 0.0_pReal constitutive_phenopowerlaw_h0_TwinSlip = 0.0_pReal
allocate(constitutive_phenopowerlaw_h0_twintwin(maxNinstance)) allocate(constitutive_phenopowerlaw_h0_TwinTwin(maxNinstance))
constitutive_phenopowerlaw_h0_twintwin = 0.0_pReal constitutive_phenopowerlaw_h0_TwinTwin = 0.0_pReal
allocate(constitutive_phenopowerlaw_interaction_slipslip(lattice_maxNinteraction,maxNinstance)) allocate(constitutive_phenopowerlaw_interaction_SlipSlip(lattice_maxNinteraction,maxNinstance))
constitutive_phenopowerlaw_interaction_slipslip = 0.0_pReal constitutive_phenopowerlaw_interaction_SlipSlip = 0.0_pReal
allocate(constitutive_phenopowerlaw_interaction_sliptwin(lattice_maxNinteraction,maxNinstance)) allocate(constitutive_phenopowerlaw_interaction_SlipTwin(lattice_maxNinteraction,maxNinstance))
constitutive_phenopowerlaw_interaction_sliptwin = 0.0_pReal constitutive_phenopowerlaw_interaction_SlipTwin = 0.0_pReal
allocate(constitutive_phenopowerlaw_interaction_twinslip(lattice_maxNinteraction,maxNinstance)) allocate(constitutive_phenopowerlaw_interaction_TwinSlip(lattice_maxNinteraction,maxNinstance))
constitutive_phenopowerlaw_interaction_twinslip = 0.0_pReal constitutive_phenopowerlaw_interaction_TwinSlip = 0.0_pReal
allocate(constitutive_phenopowerlaw_interaction_twintwin(lattice_maxNinteraction,maxNinstance)) allocate(constitutive_phenopowerlaw_interaction_TwinTwin(lattice_maxNinteraction,maxNinstance))
constitutive_phenopowerlaw_interaction_twintwin = 0.0_pReal constitutive_phenopowerlaw_interaction_TwinTwin = 0.0_pReal
allocate(constitutive_phenopowerlaw_a_slip(maxNinstance)) allocate(constitutive_phenopowerlaw_a_slip(maxNinstance))
constitutive_phenopowerlaw_a_slip = 0.0_pReal constitutive_phenopowerlaw_a_slip = 0.0_pReal
allocate(constitutive_phenopowerlaw_aTolResistance(maxNinstance)) allocate(constitutive_phenopowerlaw_aTolResistance(maxNinstance))
@ -323,14 +323,14 @@ subroutine constitutive_phenopowerlaw_init(myFile)
case ('twin_e') case ('twin_e')
constitutive_phenopowerlaw_twinE(i) = IO_floatValue(line,positions,2_pInt) constitutive_phenopowerlaw_twinE(i) = IO_floatValue(line,positions,2_pInt)
case ('h0_slipslip') case ('h0_slipslip')
constitutive_phenopowerlaw_h0_slipslip(i) = IO_floatValue(line,positions,2_pInt) constitutive_phenopowerlaw_h0_SlipSlip(i) = IO_floatValue(line,positions,2_pInt)
case ('h0_sliptwin') case ('h0_sliptwin')
constitutive_phenopowerlaw_h0_sliptwin(i) = IO_floatValue(line,positions,2_pInt) constitutive_phenopowerlaw_h0_SlipTwin(i) = IO_floatValue(line,positions,2_pInt)
call IO_warning(42_pInt,ext_msg=trim(tag)//' ('//constitutive_phenopowerlaw_label//')') call IO_warning(42_pInt,ext_msg=trim(tag)//' ('//constitutive_phenopowerlaw_label//')')
case ('h0_twinslip') case ('h0_twinslip')
constitutive_phenopowerlaw_h0_twinslip(i) = IO_floatValue(line,positions,2_pInt) constitutive_phenopowerlaw_h0_TwinSlip(i) = IO_floatValue(line,positions,2_pInt)
case ('h0_twintwin') case ('h0_twintwin')
constitutive_phenopowerlaw_h0_twintwin(i) = IO_floatValue(line,positions,2_pInt) constitutive_phenopowerlaw_h0_TwinTwin(i) = IO_floatValue(line,positions,2_pInt)
case ('atol_resistance') case ('atol_resistance')
constitutive_phenopowerlaw_aTolResistance(i) = IO_floatValue(line,positions,2_pInt) constitutive_phenopowerlaw_aTolResistance(i) = IO_floatValue(line,positions,2_pInt)
case ('atol_shear') case ('atol_shear')
@ -339,16 +339,16 @@ subroutine constitutive_phenopowerlaw_init(myFile)
constitutive_phenopowerlaw_aTolTwinfrac(i) = IO_floatValue(line,positions,2_pInt) constitutive_phenopowerlaw_aTolTwinfrac(i) = IO_floatValue(line,positions,2_pInt)
case ('interaction_slipslip') case ('interaction_slipslip')
forall (j = 1_pInt:lattice_maxNinteraction) & forall (j = 1_pInt:lattice_maxNinteraction) &
constitutive_phenopowerlaw_interaction_slipslip(j,i) = IO_floatValue(line,positions,1_pInt+j) constitutive_phenopowerlaw_interaction_SlipSlip(j,i) = IO_floatValue(line,positions,1_pInt+j)
case ('interaction_sliptwin') case ('interaction_sliptwin')
forall (j = 1_pInt:lattice_maxNinteraction) & forall (j = 1_pInt:lattice_maxNinteraction) &
constitutive_phenopowerlaw_interaction_sliptwin(j,i) = IO_floatValue(line,positions,1_pInt+j) constitutive_phenopowerlaw_interaction_SlipTwin(j,i) = IO_floatValue(line,positions,1_pInt+j)
case ('interaction_twinslip') case ('interaction_twinslip')
forall (j = 1_pInt:lattice_maxNinteraction) & forall (j = 1_pInt:lattice_maxNinteraction) &
constitutive_phenopowerlaw_interaction_twinslip(j,i) = IO_floatValue(line,positions,1_pInt+j) constitutive_phenopowerlaw_interaction_TwinSlip(j,i) = IO_floatValue(line,positions,1_pInt+j)
case ('interaction_twintwin') case ('interaction_twintwin')
forall (j = 1_pInt:lattice_maxNinteraction) & forall (j = 1_pInt:lattice_maxNinteraction) &
constitutive_phenopowerlaw_interaction_twintwin(j,i) = IO_floatValue(line,positions,1_pInt+j) constitutive_phenopowerlaw_interaction_TwinTwin(j,i) = IO_floatValue(line,positions,1_pInt+j)
case default case default
call IO_error(210_pInt,ext_msg=tag//' ('//constitutive_phenopowerlaw_label//')') call IO_error(210_pInt,ext_msg=tag//' ('//constitutive_phenopowerlaw_label//')')
end select end select
@ -400,22 +400,22 @@ subroutine constitutive_phenopowerlaw_init(myFile)
enddo enddo
allocate(constitutive_phenopowerlaw_hardeningMatrix_slipslip(maxval(constitutive_phenopowerlaw_totalNslip),& ! slip resistance from slip activity allocate(constitutive_phenopowerlaw_hardeningMatrix_SlipSlip(maxval(constitutive_phenopowerlaw_totalNslip),& ! slip resistance from slip activity
maxval(constitutive_phenopowerlaw_totalNslip),& maxval(constitutive_phenopowerlaw_totalNslip),&
maxNinstance)) maxNinstance))
allocate(constitutive_phenopowerlaw_hardeningMatrix_sliptwin(maxval(constitutive_phenopowerlaw_totalNtwin),& ! slip resistance from twin activity allocate(constitutive_phenopowerlaw_hardeningMatrix_SlipTwin(maxval(constitutive_phenopowerlaw_totalNslip),& ! slip resistance from twin activity
maxval(constitutive_phenopowerlaw_totalNtwin),&
maxNinstance))
allocate(constitutive_phenopowerlaw_hardeningMatrix_TwinSlip(maxval(constitutive_phenopowerlaw_totalNtwin),& ! twin resistance from slip activity
maxval(constitutive_phenopowerlaw_totalNslip),& maxval(constitutive_phenopowerlaw_totalNslip),&
maxNinstance)) maxNinstance))
allocate(constitutive_phenopowerlaw_hardeningMatrix_twinslip(maxval(constitutive_phenopowerlaw_totalNslip),& ! twin resistance from slip activity allocate(constitutive_phenopowerlaw_hardeningMatrix_TwinTwin(maxval(constitutive_phenopowerlaw_totalNtwin),& ! twin resistance from twin activity
maxval(constitutive_phenopowerlaw_totalNtwin),& maxval(constitutive_phenopowerlaw_totalNtwin),&
maxNinstance)) maxNinstance))
allocate(constitutive_phenopowerlaw_hardeningMatrix_twintwin(maxval(constitutive_phenopowerlaw_totalNtwin),& ! twin resistance from twin activity constitutive_phenopowerlaw_hardeningMatrix_SlipSlip = 0.0_pReal
maxval(constitutive_phenopowerlaw_totalNtwin),& constitutive_phenopowerlaw_hardeningMatrix_SlipTwin = 0.0_pReal
maxNinstance)) constitutive_phenopowerlaw_hardeningMatrix_TwinSlip = 0.0_pReal
constitutive_phenopowerlaw_hardeningMatrix_slipslip = 0.0_pReal constitutive_phenopowerlaw_hardeningMatrix_TwinTwin = 0.0_pReal
constitutive_phenopowerlaw_hardeningMatrix_sliptwin = 0.0_pReal
constitutive_phenopowerlaw_hardeningMatrix_twinslip = 0.0_pReal
constitutive_phenopowerlaw_hardeningMatrix_twintwin = 0.0_pReal
do i = 1_pInt,maxNinstance do i = 1_pInt,maxNinstance
do o = 1_pInt,constitutive_phenopowerlaw_Noutput(i) do o = 1_pInt,constitutive_phenopowerlaw_Noutput(i)
@ -484,21 +484,21 @@ subroutine constitutive_phenopowerlaw_init(myFile)
do o = 1_pInt,lattice_maxNslipFamily do o = 1_pInt,lattice_maxNslipFamily
index_otherFamily = sum(constitutive_phenopowerlaw_Nslip(1:o-1_pInt,i)) index_otherFamily = sum(constitutive_phenopowerlaw_Nslip(1:o-1_pInt,i))
do k = 1_pInt,constitutive_phenopowerlaw_Nslip(o,i) ! loop over (active) systems in other family (slip) do k = 1_pInt,constitutive_phenopowerlaw_Nslip(o,i) ! loop over (active) systems in other family (slip)
constitutive_phenopowerlaw_hardeningMatrix_slipslip(index_otherFamily+k,index_myFamily+j,i) = & constitutive_phenopowerlaw_hardeningMatrix_SlipSlip(index_myFamily+j,index_otherFamily+k,i) = &
constitutive_phenopowerlaw_interaction_slipslip(lattice_interactionSlipSlip( & constitutive_phenopowerlaw_interaction_SlipSlip(lattice_interactionSlipSlip( &
sum(lattice_NslipSystem(1:o-1,myStructure))+k, & sum(lattice_NslipSystem(1:f-1,myStructure))+j, &
sum(lattice_NslipSystem(1:f-1,myStructure))+j, & sum(lattice_NslipSystem(1:o-1,myStructure))+k, &
myStructure), i ) myStructure), i )
enddo; enddo enddo; enddo
do o = 1_pInt,lattice_maxNtwinFamily do o = 1_pInt,lattice_maxNtwinFamily
index_otherFamily = sum(constitutive_phenopowerlaw_Ntwin(1:o-1_pInt,i)) index_otherFamily = sum(constitutive_phenopowerlaw_Ntwin(1:o-1_pInt,i))
do k = 1_pInt,constitutive_phenopowerlaw_Ntwin(o,i) ! loop over (active) systems in other family (twin) do k = 1_pInt,constitutive_phenopowerlaw_Ntwin(o,i) ! loop over (active) systems in other family (twin)
constitutive_phenopowerlaw_hardeningMatrix_sliptwin(index_otherFamily+k,index_myFamily+j,i) = & constitutive_phenopowerlaw_hardeningMatrix_SlipTwin(index_myFamily+j,index_otherFamily+k,i) = &
constitutive_phenopowerlaw_interaction_sliptwin(lattice_interactionSlipTwin( & constitutive_phenopowerlaw_interaction_SlipTwin(lattice_interactionSlipTwin( &
sum(lattice_NtwinSystem(1:o-1_pInt,myStructure))+k, & sum(lattice_NslipSystem(1:f-1_pInt,myStructure))+j, &
sum(lattice_NslipSystem(1:f-1_pInt,myStructure))+j, & sum(lattice_NtwinSystem(1:o-1_pInt,myStructure))+k, &
myStructure), i ) myStructure), i )
enddo; enddo enddo; enddo
enddo; enddo enddo; enddo
@ -510,21 +510,21 @@ subroutine constitutive_phenopowerlaw_init(myFile)
do o = 1_pInt,lattice_maxNslipFamily do o = 1_pInt,lattice_maxNslipFamily
index_otherFamily = sum(constitutive_phenopowerlaw_Nslip(1:o-1_pInt,i)) index_otherFamily = sum(constitutive_phenopowerlaw_Nslip(1:o-1_pInt,i))
do k = 1_pInt,constitutive_phenopowerlaw_Nslip(o,i) ! loop over (active) systems in other family (slip) do k = 1_pInt,constitutive_phenopowerlaw_Nslip(o,i) ! loop over (active) systems in other family (slip)
constitutive_phenopowerlaw_hardeningMatrix_twinslip(index_otherFamily+k,index_myFamily+j,i) = & constitutive_phenopowerlaw_hardeningMatrix_TwinSlip(index_myFamily+j,index_otherFamily+k,i) = &
constitutive_phenopowerlaw_interaction_twinslip(lattice_interactionTwinSlip( & constitutive_phenopowerlaw_interaction_TwinSlip(lattice_interactionTwinSlip( &
sum(lattice_NslipSystem(1:o-1_pInt,myStructure))+k, & sum(lattice_NtwinSystem(1:f-1_pInt,myStructure))+j, &
sum(lattice_NtwinSystem(1:f-1_pInt,myStructure))+j, & sum(lattice_NslipSystem(1:o-1_pInt,myStructure))+k, &
myStructure), i ) myStructure), i )
enddo; enddo enddo; enddo
do o = 1_pInt,lattice_maxNtwinFamily do o = 1_pInt,lattice_maxNtwinFamily
index_otherFamily = sum(constitutive_phenopowerlaw_Ntwin(1:o-1_pInt,i)) index_otherFamily = sum(constitutive_phenopowerlaw_Ntwin(1:o-1_pInt,i))
do k = 1_pInt,constitutive_phenopowerlaw_Ntwin(o,i) ! loop over (active) systems in other family (twin) do k = 1_pInt,constitutive_phenopowerlaw_Ntwin(o,i) ! loop over (active) systems in other family (twin)
constitutive_phenopowerlaw_hardeningMatrix_twintwin(index_otherFamily+k,index_myFamily+j,i) = & constitutive_phenopowerlaw_hardeningMatrix_TwinTwin(index_myFamily+j,index_otherFamily+k,i) = &
constitutive_phenopowerlaw_interaction_twintwin(lattice_interactionTwinTwin( & constitutive_phenopowerlaw_interaction_TwinTwin(lattice_interactionTwinTwin( &
sum(lattice_NtwinSystem(1:o-1_pInt,myStructure))+k, & sum(lattice_NtwinSystem(1:f-1_pInt,myStructure))+j, &
sum(lattice_NtwinSystem(1:f-1_pInt,myStructure))+j, & sum(lattice_NtwinSystem(1:o-1_pInt,myStructure))+k, &
myStructure), i ) myStructure), i )
enddo; enddo enddo; enddo
enddo; enddo enddo; enddo
@ -752,13 +752,13 @@ function constitutive_phenopowerlaw_dotState(Tstar_v,Temperature,state,ipc,ip,el
ip, & !< current integration point ip, & !< current integration point
el !< current element el !< current element
integer(pInt) matID,nSlip,nTwin,f,i,j, structID,index_Gamma,index_F,index_myFamily integer(pInt) matID,nSlip,nTwin,f,i,j, structID,index_Gamma,index_F,index_myFamily
real(pReal) Temperature,c_slipslip,c_sliptwin,c_twinslip,c_twintwin, ssat_offset real(pReal) Temperature,c_SlipSlip,c_SlipTwin,c_TwinSlip,c_TwinTwin, ssat_offset
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
real(pReal), dimension(6), intent(in) :: Tstar_v !< 2nd Piola Kirchhoff stress tensor (Mandel) real(pReal), dimension(6), intent(in) :: Tstar_v !< 2nd Piola Kirchhoff stress tensor (Mandel)
real(pReal), dimension(constitutive_phenopowerlaw_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & real(pReal), dimension(constitutive_phenopowerlaw_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: &
gdot_slip,tau_slip,left_slipslip,left_sliptwin,right_slipslip,right_twinslip gdot_slip,tau_slip,left_SlipSlip,left_SlipTwin,right_SlipSlip,right_TwinSlip
real(pReal), dimension(constitutive_phenopowerlaw_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & real(pReal), dimension(constitutive_phenopowerlaw_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: &
gdot_twin,tau_twin,left_twinslip,left_twintwin,right_sliptwin,right_twintwin gdot_twin,tau_twin,left_TwinSlip,left_TwinTwin,right_SlipTwin,right_TwinTwin
real(pReal), dimension(constitutive_phenopowerlaw_sizeDotState(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & real(pReal), dimension(constitutive_phenopowerlaw_sizeDotState(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: &
constitutive_phenopowerlaw_dotState constitutive_phenopowerlaw_dotState
@ -775,13 +775,13 @@ function constitutive_phenopowerlaw_dotState(Tstar_v,Temperature,state,ipc,ip,el
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
! system-independent (nonlinear) prefactors to M_Xx (X influenced by x) matrices ! system-independent (nonlinear) prefactors to M_Xx (X influenced by x) matrices
c_slipslip = constitutive_phenopowerlaw_h0_slipslip(matID)*& c_SlipSlip = constitutive_phenopowerlaw_h0_SlipSlip(matID)*&
(1.0_pReal + & (1.0_pReal + &
constitutive_phenopowerlaw_twinC(matID)*state(ipc,ip,el)%p(index_F)**constitutive_phenopowerlaw_twinB(matID)) constitutive_phenopowerlaw_twinC(matID)*state(ipc,ip,el)%p(index_F)**constitutive_phenopowerlaw_twinB(matID))
c_sliptwin = 0.0_pReal c_SlipTwin = 0.0_pReal
c_twinslip = constitutive_phenopowerlaw_h0_twinslip(matID)*& c_TwinSlip = constitutive_phenopowerlaw_h0_TwinSlip(matID)*&
state(ipc,ip,el)%p(index_Gamma)**constitutive_phenopowerlaw_twinE(matID) state(ipc,ip,el)%p(index_Gamma)**constitutive_phenopowerlaw_twinE(matID)
c_twintwin = constitutive_phenopowerlaw_h0_twintwin(matID)*& c_TwinTwin = constitutive_phenopowerlaw_h0_TwinTwin(matID)*&
state(ipc,ip,el)%p(index_F)**constitutive_phenopowerlaw_twinD(matID) state(ipc,ip,el)%p(index_F)**constitutive_phenopowerlaw_twinD(matID)
!-- calculate left and right vectors and calculate dot gammas !-- calculate left and right vectors and calculate dot gammas
@ -792,12 +792,12 @@ function constitutive_phenopowerlaw_dotState(Tstar_v,Temperature,state,ipc,ip,el
index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,structID)) ! at which index starts my family index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,structID)) ! at which index starts my family
do i = 1_pInt,constitutive_phenopowerlaw_Nslip(f,matID) ! process each (active) slip system in family do i = 1_pInt,constitutive_phenopowerlaw_Nslip(f,matID) ! process each (active) slip system in family
j = j+1_pInt j = j+1_pInt
left_slipslip(j) = 1.0_pReal ! no system-dependent left part left_SlipSlip(j) = 1.0_pReal ! no system-dependent left part
left_sliptwin(j) = 1.0_pReal ! no system-dependent left part left_SlipTwin(j) = 1.0_pReal ! no system-dependent left part
right_slipslip(j) = (1.0_pReal-state(ipc,ip,el)%p(j) / & right_SlipSlip(j) = (1.0_pReal-state(ipc,ip,el)%p(j) / &
(constitutive_phenopowerlaw_tausat_slip(f,matID)+ssat_offset)) & (constitutive_phenopowerlaw_tausat_slip(f,matID)+ssat_offset)) &
**constitutive_phenopowerlaw_a_slip(matID) **constitutive_phenopowerlaw_a_slip(matID)
right_twinslip(j) = 1.0_pReal ! no system-dependent part right_TwinSlip(j) = 1.0_pReal ! no system-dependent part
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
! Calculation of dot gamma ! Calculation of dot gamma
@ -812,10 +812,10 @@ function constitutive_phenopowerlaw_dotState(Tstar_v,Temperature,state,ipc,ip,el
index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,structID)) ! at which index starts my family index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,structID)) ! at which index starts my family
do i = 1_pInt,constitutive_phenopowerlaw_Ntwin(f,matID) ! process each (active) twin system in family do i = 1_pInt,constitutive_phenopowerlaw_Ntwin(f,matID) ! process each (active) twin system in family
j = j+1_pInt j = j+1_pInt
left_twinslip(j) = 1.0_pReal ! no system-dependent right part left_TwinSlip(j) = 1.0_pReal ! no system-dependent right part
left_twintwin(j) = 1.0_pReal ! no system-dependent right part left_TwinTwin(j) = 1.0_pReal ! no system-dependent right part
right_sliptwin(j) = 1.0_pReal ! no system-dependent right part right_SlipTwin(j) = 1.0_pReal ! no system-dependent right part
right_twintwin(j) = 1.0_pReal ! no system-dependent right part right_TwinTwin(j) = 1.0_pReal ! no system-dependent right part
!* Calculation of dot vol frac !* Calculation of dot vol frac
@ -834,12 +834,12 @@ function constitutive_phenopowerlaw_dotState(Tstar_v,Temperature,state,ipc,ip,el
do i = 1_pInt,constitutive_phenopowerlaw_Nslip(f,matID) ! process each (active) slip system in family do i = 1_pInt,constitutive_phenopowerlaw_Nslip(f,matID) ! process each (active) slip system in family
j = j+1_pInt j = j+1_pInt
constitutive_phenopowerlaw_dotState(j) = & ! evolution of slip resistance j constitutive_phenopowerlaw_dotState(j) = & ! evolution of slip resistance j
c_slipslip * left_slipslip(j) * & c_SlipSlip * left_SlipSlip(j) * &
dot_product(constitutive_phenopowerlaw_hardeningMatrix_slipslip(1:nSlip,j,matID), & dot_product(constitutive_phenopowerlaw_hardeningMatrix_SlipSlip(j,1:nSlip,matID), &
right_slipslip*abs(gdot_slip)) + & ! dot gamma_slip modulated by right-side slip factor right_SlipSlip*abs(gdot_slip)) + & ! dot gamma_slip modulated by right-side slip factor
c_sliptwin * left_sliptwin(j) * & c_SlipTwin * left_SlipTwin(j) * &
dot_product(constitutive_phenopowerlaw_hardeningMatrix_sliptwin(1:nTwin,j,matID), & dot_product(constitutive_phenopowerlaw_hardeningMatrix_SlipTwin(j,1:nTwin,matID), &
right_sliptwin*gdot_twin) ! dot gamma_twin modulated by right-side twin factor right_SlipTwin*gdot_twin) ! dot gamma_twin modulated by right-side twin factor
constitutive_phenopowerlaw_dotState(index_Gamma) = constitutive_phenopowerlaw_dotState(index_Gamma) + & constitutive_phenopowerlaw_dotState(index_Gamma) = constitutive_phenopowerlaw_dotState(index_Gamma) + &
abs(gdot_slip(j)) abs(gdot_slip(j))
enddo enddo
@ -851,12 +851,12 @@ function constitutive_phenopowerlaw_dotState(Tstar_v,Temperature,state,ipc,ip,el
do i = 1_pInt,constitutive_phenopowerlaw_Ntwin(f,matID) ! process each (active) twin system in family do i = 1_pInt,constitutive_phenopowerlaw_Ntwin(f,matID) ! process each (active) twin system in family
j = j+1_pInt j = j+1_pInt
constitutive_phenopowerlaw_dotState(j+nSlip) = & ! evolution of twin resistance j constitutive_phenopowerlaw_dotState(j+nSlip) = & ! evolution of twin resistance j
c_twinslip * left_twinslip(j) * & c_TwinSlip * left_TwinSlip(j) * &
dot_product(constitutive_phenopowerlaw_hardeningMatrix_twinslip(1:nSlip,j,matID), & dot_product(constitutive_phenopowerlaw_hardeningMatrix_TwinSlip(j,1:nSlip,matID), &
right_twinslip*abs(gdot_slip)) + & ! dot gamma_slip modulated by right-side slip factor right_TwinSlip*abs(gdot_slip)) + & ! dot gamma_slip modulated by right-side slip factor
c_twintwin * left_twintwin(j) * & c_TwinTwin * left_TwinTwin(j) * &
dot_product(constitutive_phenopowerlaw_hardeningMatrix_twintwin(1:nTwin,j,matID), & dot_product(constitutive_phenopowerlaw_hardeningMatrix_TwinTwin(j,1:nTwin,matID), &
right_twintwin*gdot_twin) ! dot gamma_twin modulated by right-side twin factor right_TwinTwin*gdot_twin) ! dot gamma_twin modulated by right-side twin factor
constitutive_phenopowerlaw_dotState(index_F) = constitutive_phenopowerlaw_dotState(index_F) + & constitutive_phenopowerlaw_dotState(index_F) = constitutive_phenopowerlaw_dotState(index_F) + &
gdot_twin(j)/lattice_shearTwin(index_myFamily+i,structID) gdot_twin(j)/lattice_shearTwin(index_myFamily+i,structID)
enddo enddo