fracture modes are calculated differently
This commit is contained in:
parent
7bfd7a42ea
commit
f0d03a41ba
|
@ -511,19 +511,6 @@ module lattice
|
||||||
module procedure slipProjection_direction
|
module procedure slipProjection_direction
|
||||||
end interface lattice_forestProjection_screw
|
end interface lattice_forestProjection_screw
|
||||||
|
|
||||||
interface lattice_slipProjection_modeI
|
|
||||||
module procedure slipProjection_normal
|
|
||||||
end interface lattice_slipProjection_modeI
|
|
||||||
|
|
||||||
interface lattice_slipProjection_modeII
|
|
||||||
module procedure slipProjection_direction
|
|
||||||
end interface lattice_slipProjection_modeII
|
|
||||||
|
|
||||||
interface lattice_slipProjection_modeIII
|
|
||||||
module procedure slipProjection_transverse
|
|
||||||
end interface lattice_slipProjection_modeIII
|
|
||||||
|
|
||||||
|
|
||||||
public :: &
|
public :: &
|
||||||
lattice_init, &
|
lattice_init, &
|
||||||
lattice_qDisorientation, &
|
lattice_qDisorientation, &
|
||||||
|
@ -548,9 +535,6 @@ module lattice
|
||||||
lattice_forestProjection, &
|
lattice_forestProjection, &
|
||||||
lattice_forestProjection_edge, &
|
lattice_forestProjection_edge, &
|
||||||
lattice_forestProjection_screw, &
|
lattice_forestProjection_screw, &
|
||||||
lattice_slipProjection_modeI, &
|
|
||||||
lattice_slipProjection_modeII, &
|
|
||||||
lattice_slipProjection_modeIII, &
|
|
||||||
lattice_slip_normal, &
|
lattice_slip_normal, &
|
||||||
lattice_slip_direction, &
|
lattice_slip_direction, &
|
||||||
lattice_slip_transverse
|
lattice_slip_transverse
|
||||||
|
@ -689,7 +673,7 @@ subroutine lattice_initializeStructure(myPhase,CoverA)
|
||||||
math_mul33x33, &
|
math_mul33x33, &
|
||||||
math_sym3333to66, &
|
math_sym3333to66, &
|
||||||
math_Voigt66to3333, &
|
math_Voigt66to3333, &
|
||||||
math_crossproduct
|
math_cross
|
||||||
use IO, only: &
|
use IO, only: &
|
||||||
IO_error
|
IO_error
|
||||||
|
|
||||||
|
@ -830,7 +814,7 @@ subroutine lattice_initializeStructure(myPhase,CoverA)
|
||||||
do i = 1_pInt,myNslip ! store slip system vectors and Schmid matrix for my structure
|
do i = 1_pInt,myNslip ! store slip system vectors and Schmid matrix for my structure
|
||||||
lattice_sd(1:3,i,myPhase) = sd(1:3,i)/norm2(sd(1:3,i)) ! make unit vector
|
lattice_sd(1:3,i,myPhase) = sd(1:3,i)/norm2(sd(1:3,i)) ! make unit vector
|
||||||
lattice_sn(1:3,i,myPhase) = sn(1:3,i)/norm2(sn(1:3,i)) ! make unit vector
|
lattice_sn(1:3,i,myPhase) = sn(1:3,i)/norm2(sn(1:3,i)) ! make unit vector
|
||||||
lattice_st(1:3,i,myPhase) = math_crossproduct(lattice_sd(1:3,i,myPhase),lattice_sn(1:3,i,myPhase))
|
lattice_st(1:3,i,myPhase) = math_cross(lattice_sd(1:3,i,myPhase),lattice_sn(1:3,i,myPhase))
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
end subroutine lattice_initializeStructure
|
end subroutine lattice_initializeStructure
|
||||||
|
@ -1172,7 +1156,7 @@ function lattice_C66_twin(Ntwin,C66,structure,CoverA)
|
||||||
use IO, only: &
|
use IO, only: &
|
||||||
IO_error
|
IO_error
|
||||||
use math, only: &
|
use math, only: &
|
||||||
INRAD, &
|
PI, &
|
||||||
math_axisAngleToR, &
|
math_axisAngleToR, &
|
||||||
math_sym3333to66, &
|
math_sym3333to66, &
|
||||||
math_66toSym3333, &
|
math_66toSym3333, &
|
||||||
|
@ -1208,7 +1192,7 @@ function lattice_C66_twin(Ntwin,C66,structure,CoverA)
|
||||||
end select
|
end select
|
||||||
|
|
||||||
do i = 1, sum(Ntwin)
|
do i = 1, sum(Ntwin)
|
||||||
R = math_axisAngleToR(coordinateSystem(1:3,2,i), 180.0_pReal * INRAD) ! ToDo: Why always 180 deg?
|
R = math_axisAngleToR(coordinateSystem(1:3,2,i), PI) ! ToDo: Why always 180 deg?
|
||||||
lattice_C66_twin(1:6,1:6,i) = math_sym3333to66(math_rotate_forward3333(math_66toSym3333(C66),R))
|
lattice_C66_twin(1:6,1:6,i) = math_sym3333to66(math_rotate_forward3333(math_66toSym3333(C66),R))
|
||||||
enddo
|
enddo
|
||||||
end function lattice_C66_twin
|
end function lattice_C66_twin
|
||||||
|
@ -1231,9 +1215,7 @@ function lattice_C66_trans(Ntrans,C_parent66,structure_target, &
|
||||||
math_sym3333to66, &
|
math_sym3333to66, &
|
||||||
math_66toSym3333, &
|
math_66toSym3333, &
|
||||||
math_rotate_forward3333, &
|
math_rotate_forward3333, &
|
||||||
math_mul33x33, &
|
math_mul33x33
|
||||||
math_tensorproduct33, &
|
|
||||||
math_crossproduct
|
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
integer(pInt), dimension(:), intent(in) :: Ntrans !< number of active twin systems per family
|
integer(pInt), dimension(:), intent(in) :: Ntrans !< number of active twin systems per family
|
||||||
|
@ -1299,8 +1281,8 @@ function lattice_nonSchmidMatrix(Nslip,nonSchmidCoefficients,sense) result(nonSc
|
||||||
IO_error
|
IO_error
|
||||||
use math, only: &
|
use math, only: &
|
||||||
INRAD, &
|
INRAD, &
|
||||||
math_tensorproduct33, &
|
math_outer, &
|
||||||
math_crossproduct, &
|
math_cross, &
|
||||||
math_mul33x3, &
|
math_mul33x3, &
|
||||||
math_axisAngleToR
|
math_axisAngleToR
|
||||||
implicit none
|
implicit none
|
||||||
|
@ -1326,18 +1308,18 @@ function lattice_nonSchmidMatrix(Nslip,nonSchmidCoefficients,sense) result(nonSc
|
||||||
normal = coordinateSystem(1:3,2,i)
|
normal = coordinateSystem(1:3,2,i)
|
||||||
np = math_mul33x3(math_axisAngleToR(direction,60.0_pReal*INRAD), normal)
|
np = math_mul33x3(math_axisAngleToR(direction,60.0_pReal*INRAD), normal)
|
||||||
if (size(nonSchmidCoefficients)>0) nonSchmidMatrix(1:3,1:3,i) = nonSchmidMatrix(1:3,1:3,i) &
|
if (size(nonSchmidCoefficients)>0) nonSchmidMatrix(1:3,1:3,i) = nonSchmidMatrix(1:3,1:3,i) &
|
||||||
+ nonSchmidCoefficients(1) * math_tensorproduct33(direction, np)
|
+ nonSchmidCoefficients(1) * math_outer(direction, np)
|
||||||
if (size(nonSchmidCoefficients)>1) nonSchmidMatrix(1:3,1:3,i) = nonSchmidMatrix(1:3,1:3,i) &
|
if (size(nonSchmidCoefficients)>1) nonSchmidMatrix(1:3,1:3,i) = nonSchmidMatrix(1:3,1:3,i) &
|
||||||
+ nonSchmidCoefficients(2) * math_tensorproduct33(math_crossproduct(normal, direction), normal)
|
+ nonSchmidCoefficients(2) * math_outer(math_cross(normal, direction), normal)
|
||||||
if (size(nonSchmidCoefficients)>2) nonSchmidMatrix(1:3,1:3,i) = nonSchmidMatrix(1:3,1:3,i) &
|
if (size(nonSchmidCoefficients)>2) nonSchmidMatrix(1:3,1:3,i) = nonSchmidMatrix(1:3,1:3,i) &
|
||||||
+ nonSchmidCoefficients(3) * math_tensorproduct33(math_crossproduct(np, direction), np)
|
+ nonSchmidCoefficients(3) * math_outer(math_cross(np, direction), np)
|
||||||
if (size(nonSchmidCoefficients)>3) nonSchmidMatrix(1:3,1:3,i) = nonSchmidMatrix(1:3,1:3,i) &
|
if (size(nonSchmidCoefficients)>3) nonSchmidMatrix(1:3,1:3,i) = nonSchmidMatrix(1:3,1:3,i) &
|
||||||
+ nonSchmidCoefficients(4) * math_tensorproduct33(normal, normal)
|
+ nonSchmidCoefficients(4) * math_outer(normal, normal)
|
||||||
if (size(nonSchmidCoefficients)>4) nonSchmidMatrix(1:3,1:3,i) = nonSchmidMatrix(1:3,1:3,i) &
|
if (size(nonSchmidCoefficients)>4) nonSchmidMatrix(1:3,1:3,i) = nonSchmidMatrix(1:3,1:3,i) &
|
||||||
+ nonSchmidCoefficients(5) * math_tensorproduct33(math_crossproduct(normal, direction), &
|
+ nonSchmidCoefficients(5) * math_outer(math_cross(normal, direction), &
|
||||||
math_crossproduct(normal, direction))
|
math_cross(normal, direction))
|
||||||
if (size(nonSchmidCoefficients)>5) nonSchmidMatrix(1:3,1:3,i) = nonSchmidMatrix(1:3,1:3,i) &
|
if (size(nonSchmidCoefficients)>5) nonSchmidMatrix(1:3,1:3,i) = nonSchmidMatrix(1:3,1:3,i) &
|
||||||
+ nonSchmidCoefficients(6) * math_tensorproduct33(direction, direction)
|
+ nonSchmidCoefficients(6) * math_outer(direction, direction)
|
||||||
enddo
|
enddo
|
||||||
end function lattice_nonSchmidMatrix
|
end function lattice_nonSchmidMatrix
|
||||||
|
|
||||||
|
@ -2274,8 +2256,7 @@ end function lattice_slip_transverse
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief Projection of the transverse direction onto the slip plane
|
!> @brief Projection of the transverse direction onto the slip plane
|
||||||
!> @details: This projection is used to calculate forest hardening for edge dislocations and for
|
!> @details: This projection is used to calculate forest hardening for edge dislocations
|
||||||
! mode III failure (ToDo: MD I am not 100% sure about mode III)
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
function slipProjection_transverse(Nslip,structure,cOverA) result(projection)
|
function slipProjection_transverse(Nslip,structure,cOverA) result(projection)
|
||||||
use math, only: &
|
use math, only: &
|
||||||
|
@ -2301,8 +2282,7 @@ end function slipProjection_transverse
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief Projection of the slip direction onto the slip plane
|
!> @brief Projection of the slip direction onto the slip plane
|
||||||
!> @details: This projection is used to calculate forest hardening for screw dislocations and for
|
!> @details: This projection is used to calculate forest hardening for screw dislocations
|
||||||
! mode II failure (ToDo: MD I am not 100% sure about mode II)
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
function slipProjection_direction(Nslip,structure,cOverA) result(projection)
|
function slipProjection_direction(Nslip,structure,cOverA) result(projection)
|
||||||
use math, only: &
|
use math, only: &
|
||||||
|
@ -2326,32 +2306,6 @@ function slipProjection_direction(Nslip,structure,cOverA) result(projection)
|
||||||
end function slipProjection_direction
|
end function slipProjection_direction
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
|
||||||
!> @brief Projection of the slip plane onto itself
|
|
||||||
!> @details: This projection is used for mode I failure
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
|
||||||
function slipProjection_normal(Nslip,structure,cOverA) result(projection)
|
|
||||||
use math, only: &
|
|
||||||
math_mul3x3
|
|
||||||
|
|
||||||
implicit none
|
|
||||||
integer(pInt), dimension(:), intent(in) :: Nslip !< number of active slip systems per family
|
|
||||||
character(len=*), intent(in) :: structure !< lattice structure
|
|
||||||
real(pReal), intent(in) :: cOverA !< c/a ratio
|
|
||||||
real(pReal), dimension(sum(Nslip),sum(Nslip)) :: projection
|
|
||||||
|
|
||||||
real(pReal), dimension(3,3,sum(Nslip)) :: coordinateSystem
|
|
||||||
integer(pInt) :: i, j
|
|
||||||
|
|
||||||
coordinateSystem = coordinateSystem_slip(Nslip,structure,cOverA)
|
|
||||||
|
|
||||||
do i=1_pInt, sum(Nslip); do j=1_pInt, sum(Nslip)
|
|
||||||
projection(i,j) = abs(math_mul3x3(coordinateSystem(1:3,2,i),coordinateSystem(1:3,2,j)))
|
|
||||||
enddo; enddo
|
|
||||||
|
|
||||||
end function slipProjection_normal
|
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief build a local coordinate system on slip systems
|
!> @brief build a local coordinate system on slip systems
|
||||||
!> @details Order: Direction, plane (normal), and common perpendicular
|
!> @details Order: Direction, plane (normal), and common perpendicular
|
||||||
|
@ -2406,6 +2360,7 @@ end function coordinateSystem_slip
|
||||||
function buildInteraction(activeA,activeB,maxA,maxB,values,matrix)
|
function buildInteraction(activeA,activeB,maxA,maxB,values,matrix)
|
||||||
use IO, only: &
|
use IO, only: &
|
||||||
IO_error
|
IO_error
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
integer(pInt), dimension(:), intent(in) :: &
|
integer(pInt), dimension(:), intent(in) :: &
|
||||||
activeA, & !< number of active systems as specified in material.config
|
activeA, & !< number of active systems as specified in material.config
|
||||||
|
@ -2446,7 +2401,7 @@ function buildCoordinateSystem(active,complete,system,structure,cOverA)
|
||||||
use IO, only: &
|
use IO, only: &
|
||||||
IO_error
|
IO_error
|
||||||
use math, only: &
|
use math, only: &
|
||||||
math_crossproduct
|
math_cross
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
integer(pInt), dimension(:), intent(in) :: &
|
integer(pInt), dimension(:), intent(in) :: &
|
||||||
|
@ -2503,8 +2458,8 @@ function buildCoordinateSystem(active,complete,system,structure,cOverA)
|
||||||
|
|
||||||
buildCoordinateSystem(1:3,1,a) = direction/norm2(direction)
|
buildCoordinateSystem(1:3,1,a) = direction/norm2(direction)
|
||||||
buildCoordinateSystem(1:3,2,a) = normal/norm2(normal)
|
buildCoordinateSystem(1:3,2,a) = normal/norm2(normal)
|
||||||
buildCoordinateSystem(1:3,3,a) = math_crossproduct(buildCoordinateSystem(1:3,1,a),&
|
buildCoordinateSystem(1:3,3,a) = math_cross(buildCoordinateSystem(1:3,1,a),&
|
||||||
buildCoordinateSystem(1:3,2,a))
|
buildCoordinateSystem(1:3,2,a))
|
||||||
|
|
||||||
enddo activeSystems
|
enddo activeSystems
|
||||||
enddo activeFamilies
|
enddo activeFamilies
|
||||||
|
@ -2522,7 +2477,7 @@ subroutine buildTransformationSystem(Q,S,Ntrans,cOverA,a_fcc,a_bcc)
|
||||||
use prec, only: &
|
use prec, only: &
|
||||||
dEq0
|
dEq0
|
||||||
use math, only: &
|
use math, only: &
|
||||||
math_crossproduct, &
|
math_cross, &
|
||||||
math_tensorproduct33, &
|
math_tensorproduct33, &
|
||||||
math_mul33x33, &
|
math_mul33x33, &
|
||||||
math_mul33x3, &
|
math_mul33x3, &
|
||||||
|
@ -2643,7 +2598,7 @@ subroutine buildTransformationSystem(Q,S,Ntrans,cOverA,a_fcc,a_bcc)
|
||||||
do i = 1_pInt,sum(Ntrans)
|
do i = 1_pInt,sum(Ntrans)
|
||||||
x = lattice_fccTohex_systemTrans(1:3,i)/norm2(lattice_fccTohex_systemTrans(1:3,i))
|
x = lattice_fccTohex_systemTrans(1:3,i)/norm2(lattice_fccTohex_systemTrans(1:3,i))
|
||||||
z = lattice_fccTohex_systemTrans(4:6,i)/norm2(lattice_fccTohex_systemTrans(4:6,i))
|
z = lattice_fccTohex_systemTrans(4:6,i)/norm2(lattice_fccTohex_systemTrans(4:6,i))
|
||||||
y = -math_crossproduct(x,z)
|
y = -math_cross(x,z)
|
||||||
Q(1:3,1,i) = x
|
Q(1:3,1,i) = x
|
||||||
Q(1:3,2,i) = y
|
Q(1:3,2,i) = y
|
||||||
Q(1:3,3,i) = z
|
Q(1:3,3,i) = z
|
||||||
|
|
Loading…
Reference in New Issue