2014-08-14 17:51:51 +05:30
!--------------------------------------------------------------------------------------------------
!> @author Franz Roters, Max-Planck-Institut für Eisenforschung GmbH
!> @author Philip Eisenlohr, Max-Planck-Institut für Eisenforschung GmbH
!> @author Pratheek Shanthraj, Max-Planck-Institut für Eisenforschung GmbH
!> @author Martin Diehl, Max-Planck-Institut für Eisenforschung GmbH
2018-12-12 04:59:19 +05:30
!> @brief contains lattice structure definitions including Schmid matrices for slip, twin, trans,
! and cleavage as well as interaction among the various systems
2014-08-14 17:51:51 +05:30
!--------------------------------------------------------------------------------------------------
module lattice
use prec , only : &
pReal , &
pInt
implicit none
private
2018-12-12 03:41:59 +05:30
2018-10-03 12:47:06 +05:30
! BEGIN DEPRECATED
2014-08-14 17:51:51 +05:30
integer ( pInt ) , parameter , public :: &
2015-10-27 18:02:03 +05:30
LATTICE_maxNslipFamily = 13_pInt , & !< max # of slip system families over lattice structures
2016-04-26 13:05:42 +05:30
LATTICE_maxNcleavageFamily = 3_pInt !< max # of transformation system families over lattice structures
2016-04-26 23:53:05 +05:30
2014-08-14 17:51:51 +05:30
integer ( pInt ) , allocatable , dimension ( : , : ) , protected , public :: &
lattice_NslipSystem , & !< total # of slip systems in each family
2014-10-28 23:35:51 +05:30
lattice_NcleavageSystem !< total # of transformation systems in each family
2014-08-14 17:51:51 +05:30
integer ( pInt ) , allocatable , dimension ( : , : , : ) , protected , public :: &
2018-12-12 04:59:19 +05:30
lattice_interactionSlipSlip !< Slip--slip interaction type
2018-12-10 02:30:04 +05:30
2014-08-14 17:51:51 +05:30
real ( pReal ) , allocatable , dimension ( : , : , : , : , : ) , protected , public :: &
2014-10-28 23:35:51 +05:30
lattice_Sslip , & !< Schmid and non-Schmid matrices
lattice_Scleavage !< Schmid matrices for cleavage systems
2016-04-26 23:53:05 +05:30
2014-08-14 17:51:51 +05:30
real ( pReal ) , allocatable , dimension ( : , : , : , : ) , protected , public :: &
2014-10-28 23:35:51 +05:30
lattice_Sslip_v , & !< Mandel notation of lattice_Sslip
2018-12-22 12:19:52 +05:30
lattice_Scleavage_v !< Mandel notation of lattice_Scleavege
2014-08-14 17:51:51 +05:30
real ( pReal ) , allocatable , dimension ( : , : , : ) , protected , public :: &
2018-08-25 20:59:20 +05:30
lattice_sn , & !< normal direction of slip system
lattice_st , & !< sd x sn
2018-12-10 13:03:20 +05:30
lattice_sd !< slip direction of slip system
2014-08-14 17:51:51 +05:30
integer ( pInt ) , allocatable , dimension ( : ) , protected , public :: &
lattice_NnonSchmid !< total # of non-Schmid contributions for each structure
2018-09-08 23:02:26 +05:30
! END DEPRECATED
2018-08-25 20:59:20 +05:30
2014-08-14 17:51:51 +05:30
!--------------------------------------------------------------------------------------------------
2016-04-26 13:05:42 +05:30
! face centered cubic
2016-04-26 23:53:05 +05:30
integer ( pInt ) , dimension ( LATTICE_maxNslipFamily ) , parameter , public :: &
2018-12-12 03:41:59 +05:30
LATTICE_FCC_NSLIPSYSTEM = int ( [ 12 , 6 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] , pInt ) !< # of slip systems per family for fcc
2016-04-26 23:53:05 +05:30
2018-12-10 13:03:20 +05:30
integer ( pInt ) , dimension ( 1 ) , parameter , public :: &
LATTICE_FCC_NTWINSYSTEM = int ( [ 12 ] , pInt ) !< # of twin systems per family for fcc
2014-08-14 17:51:51 +05:30
2018-12-11 06:17:13 +05:30
integer ( pInt ) , dimension ( 1 ) , parameter , public :: &
2018-12-12 03:41:59 +05:30
LATTICE_FCC_NTRANSSYSTEM = int ( [ 12 ] , pInt ) !< # of transformation systems per family for fcc
2016-04-26 23:53:05 +05:30
2014-10-28 23:35:51 +05:30
integer ( pInt ) , dimension ( LATTICE_maxNcleavageFamily ) , parameter , public :: &
2018-12-12 03:41:59 +05:30
LATTICE_FCC_NCLEAVAGESYSTEM = int ( [ 3 , 4 , 0 ] , pInt ) !< # of cleavage systems per family for fcc
2016-04-26 23:53:05 +05:30
2014-08-14 17:51:51 +05:30
integer ( pInt ) , parameter , private :: &
2018-12-12 03:41:59 +05:30
LATTICE_FCC_NSLIP = sum ( LATTICE_FCC_NSLIPSYSTEM ) , & !< total # of slip systems for fcc
2018-12-10 13:03:20 +05:30
LATTICE_FCC_NTWIN = sum ( LATTICE_FCC_NTWINSYSTEM ) , & !< total # of twin systems for fcc
2018-12-12 03:41:59 +05:30
LATTICE_FCC_NTRANS = sum ( LATTICE_FCC_NTRANSSYSTEM ) , & !< total # of transformation systems for fcc
LATTICE_FCC_NCLEAVAGE = sum ( LATTICE_FCC_NCLEAVAGESYSTEM ) !< total # of cleavage systems for fcc
2016-04-26 23:53:05 +05:30
2018-12-10 10:22:36 +05:30
real ( pReal ) , dimension ( 3 + 3 , LATTICE_FCC_NSLIP ) , parameter , private :: &
2018-12-22 12:19:52 +05:30
LATTICE_FCC_SYSTEMSLIP = reshape ( real ( [ &
2017-11-19 03:09:13 +05:30
! Slip direction Plane normal ! SCHMID-BOAS notation
0 , 1 , - 1 , 1 , 1 , 1 , & ! B2
- 1 , 0 , 1 , 1 , 1 , 1 , & ! B4
1 , - 1 , 0 , 1 , 1 , 1 , & ! B5
0 , - 1 , - 1 , - 1 , - 1 , 1 , & ! C1
1 , 0 , 1 , - 1 , - 1 , 1 , & ! C3
- 1 , 1 , 0 , - 1 , - 1 , 1 , & ! C5
0 , - 1 , 1 , 1 , - 1 , - 1 , & ! A2
- 1 , 0 , - 1 , 1 , - 1 , - 1 , & ! A3
1 , 1 , 0 , 1 , - 1 , - 1 , & ! A6
0 , 1 , 1 , - 1 , 1 , - 1 , & ! D1
1 , 0 , - 1 , - 1 , 1 , - 1 , & ! D4
2018-11-23 23:23:50 +05:30
- 1 , - 1 , 0 , - 1 , 1 , - 1 , & ! D6
! Slip system <110>{110}
1 , 1 , 0 , 1 , - 1 , 0 , &
1 , - 1 , 0 , 1 , 1 , 0 , &
1 , 0 , 1 , 1 , 0 , - 1 , &
1 , 0 , - 1 , 1 , 0 , 1 , &
0 , 1 , 1 , 0 , 1 , - 1 , &
0 , 1 , - 1 , 0 , 1 , 1 &
2018-10-09 03:24:45 +05:30
] , pReal ) , shape ( LATTICE_FCC_SYSTEMSLIP ) ) !< Slip system <110>{111} directions. Sorted according to Eisenlohr & Hantcherli
2014-08-14 17:51:51 +05:30
2018-11-23 23:23:50 +05:30
character ( len = * ) , dimension ( 2 ) , parameter , public :: LATTICE_FCC_SLIPFAMILY_NAME = &
[ '<0 1 -1>{1 1 1}' , &
'<0 1 -1>{0 1 1}' ]
2018-08-24 16:12:30 +05:30
2018-12-10 10:22:36 +05:30
real ( pReal ) , dimension ( 3 + 3 , LATTICE_FCC_NTWIN ) , parameter , private :: &
2014-08-14 17:51:51 +05:30
LATTICE_fcc_systemTwin = reshape ( real ( [ &
- 2 , 1 , 1 , 1 , 1 , 1 , &
1 , - 2 , 1 , 1 , 1 , 1 , &
1 , 1 , - 2 , 1 , 1 , 1 , &
2 , - 1 , 1 , - 1 , - 1 , 1 , &
- 1 , 2 , 1 , - 1 , - 1 , 1 , &
- 1 , - 1 , - 2 , - 1 , - 1 , 1 , &
- 2 , - 1 , - 1 , 1 , - 1 , - 1 , &
1 , 2 , - 1 , 1 , - 1 , - 1 , &
1 , - 1 , 2 , 1 , - 1 , - 1 , &
2 , 1 , - 1 , - 1 , 1 , - 1 , &
- 1 , - 2 , - 1 , - 1 , 1 , - 1 , &
- 1 , 1 , 2 , - 1 , 1 , - 1 &
2018-12-12 04:59:19 +05:30
] , pReal ) , shape ( LATTICE_FCC_SYSTEMTWIN ) ) !< Twin system <112>{111} directions. Sorted according to Eisenlohr & Hantcherli
2014-08-14 17:51:51 +05:30
2018-08-24 16:12:30 +05:30
character ( len = * ) , dimension ( 1 ) , parameter , public :: LATTICE_FCC_TWINFAMILY_NAME = &
[ '<-2 1 1>{1 1 1}' ]
2014-08-14 17:51:51 +05:30
2018-12-10 10:22:36 +05:30
integer ( pInt ) , dimension ( 2_pInt , LATTICE_FCC_NTWIN ) , parameter , public :: &
LATTICE_FCC_TWINNUCLEATIONSLIPPAIR = reshape ( int ( [ &
2014-08-14 17:51:51 +05:30
2 , 3 , &
1 , 3 , &
1 , 2 , &
5 , 6 , &
4 , 6 , &
4 , 5 , &
8 , 9 , &
7 , 9 , &
7 , 8 , &
11 , 12 , &
10 , 12 , &
10 , 11 &
2018-10-09 03:24:45 +05:30
] , pInt ) , shape ( LATTICE_FCC_TWINNUCLEATIONSLIPPAIR ) )
2014-08-14 17:51:51 +05:30
2018-12-12 03:41:59 +05:30
! ToDo: should be in the interaction function
2018-12-10 10:22:36 +05:30
integer ( pInt ) , dimension ( LATTICE_FCC_NSLIP , LATTICE_FCC_NSLIP ) , parameter , public :: &
LATTICE_FCC_INTERACTIONSLIPSLIP = reshape ( int ( [ &
2018-11-23 23:23:50 +05:30
1 , 2 , 2 , 4 , 6 , 5 , 3 , 5 , 5 , 4 , 5 , 6 , 9 , 10 , 9 , 10 , 11 , 12 , & ! ---> slip
2 , 1 , 2 , 6 , 4 , 5 , 5 , 4 , 6 , 5 , 3 , 5 , 9 , 10 , 11 , 12 , 9 , 10 , & ! |
2 , 2 , 1 , 5 , 5 , 3 , 5 , 6 , 4 , 6 , 5 , 4 , 11 , 12 , 9 , 10 , 9 , 10 , & ! |
4 , 6 , 5 , 1 , 2 , 2 , 4 , 5 , 6 , 3 , 5 , 5 , 9 , 10 , 10 , 9 , 12 , 11 , & ! v slip
6 , 4 , 5 , 2 , 1 , 2 , 5 , 3 , 5 , 5 , 4 , 6 , 9 , 10 , 12 , 11 , 10 , 9 , &
5 , 5 , 3 , 2 , 2 , 1 , 6 , 5 , 4 , 5 , 6 , 4 , 11 , 12 , 10 , 9 , 10 , 9 , &
3 , 5 , 5 , 4 , 5 , 6 , 1 , 2 , 2 , 4 , 6 , 5 , 10 , 9 , 10 , 9 , 11 , 12 , &
5 , 4 , 6 , 5 , 3 , 5 , 2 , 1 , 2 , 6 , 4 , 5 , 10 , 9 , 12 , 11 , 9 , 10 , &
5 , 6 , 4 , 6 , 5 , 4 , 2 , 2 , 1 , 5 , 5 , 3 , 12 , 11 , 10 , 9 , 9 , 10 , &
4 , 5 , 6 , 3 , 5 , 5 , 4 , 6 , 5 , 1 , 2 , 2 , 10 , 9 , 9 , 10 , 12 , 11 , &
5 , 3 , 5 , 5 , 4 , 6 , 6 , 4 , 5 , 2 , 1 , 2 , 10 , 9 , 11 , 12 , 10 , 9 , &
6 , 5 , 4 , 5 , 6 , 4 , 5 , 5 , 3 , 2 , 2 , 1 , 12 , 11 , 9 , 10 , 10 , 9 , &
2018-12-12 04:59:19 +05:30
9 , 9 , 11 , 9 , 9 , 11 , 10 , 10 , 12 , 10 , 10 , 12 , 1 , 7 , 8 , 8 , 8 , 8 , &
10 , 10 , 12 , 10 , 10 , 12 , 9 , 9 , 11 , 9 , 9 , 11 , 7 , 1 , 8 , 8 , 8 , 8 , &
9 , 11 , 9 , 10 , 12 , 10 , 10 , 12 , 10 , 9 , 11 , 9 , 8 , 8 , 1 , 7 , 8 , 8 , &
10 , 12 , 10 , 9 , 11 , 9 , 9 , 11 , 9 , 10 , 12 , 10 , 8 , 8 , 7 , 1 , 8 , 8 , &
11 , 9 , 9 , 12 , 10 , 10 , 11 , 9 , 9 , 12 , 10 , 10 , 8 , 8 , 8 , 8 , 1 , 7 , &
12 , 10 , 10 , 11 , 9 , 9 , 12 , 10 , 10 , 11 , 9 , 9 , 8 , 8 , 8 , 8 , 7 , 1 &
2018-12-10 10:22:36 +05:30
] , pInt ) , shape ( LATTICE_FCC_INTERACTIONSLIPSLIP ) , order = [ 2 , 1 ] ) !< Slip--slip interaction types for fcc
2014-08-14 17:51:51 +05:30
!< 1: self interaction
!< 2: coplanar interaction
!< 3: collinear interaction
!< 4: Hirth locks
!< 5: glissile junctions
!< 6: Lomer locks
2018-11-23 23:23:50 +05:30
!< 7: crossing (similar to Hirth locks in <110>{111} for two {110} planes)
!< 8: similar to Lomer locks in <110>{111} for two {110} planes
!< 9: similar to Lomer locks in <110>{111} btw one {110} and one {111} plane
!<10: similar to glissile junctions in <110>{111} btw one {110} and one {111} plane
!<11: crossing btw one {110} and one {111} plane
!<12: collinear btw one {110} and one {111} plane
2014-10-28 23:35:51 +05:30
real ( pReal ) , dimension ( 3 + 3 , LATTICE_fcc_Ncleavage ) , parameter , private :: &
LATTICE_fcc_systemCleavage = reshape ( real ( [ &
! Cleavage direction Plane normal
2014-11-01 00:07:37 +05:30
0 , 1 , 0 , 1 , 0 , 0 , &
0 , 0 , 1 , 0 , 1 , 0 , &
1 , 0 , 0 , 0 , 0 , 1 , &
2014-10-28 23:35:51 +05:30
0 , 1 , - 1 , 1 , 1 , 1 , &
0 , - 1 , - 1 , - 1 , - 1 , 1 , &
- 1 , 0 , - 1 , 1 , - 1 , - 1 , &
0 , 1 , 1 , - 1 , 1 , - 1 &
2018-10-09 03:24:45 +05:30
] , pReal ) , shape ( LATTICE_FCC_SYSTEMCLEAVAGE ) )
2014-10-28 23:35:51 +05:30
2014-08-14 17:51:51 +05:30
!--------------------------------------------------------------------------------------------------
2016-04-26 23:53:05 +05:30
! body centered cubic
2014-08-14 17:51:51 +05:30
integer ( pInt ) , dimension ( LATTICE_maxNslipFamily ) , parameter , public :: &
2018-12-12 03:41:59 +05:30
LATTICE_BCC_NSLIPSYSTEM = int ( [ 12 , 12 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] , pInt ) !< # of slip systems per family for bcc
2016-04-26 23:53:05 +05:30
2018-12-10 13:03:20 +05:30
integer ( pInt ) , dimension ( 1 ) , parameter , public :: &
LATTICE_BCC_NTWINSYSTEM = int ( [ 12 ] , pInt ) !< # of twin systems per family for bcc
2014-10-28 23:35:51 +05:30
integer ( pInt ) , dimension ( LATTICE_maxNcleavageFamily ) , parameter , public :: &
2018-07-30 00:33:14 +05:30
LATTICE_bcc_NcleavageSystem = int ( [ 3 , 6 , 0 ] , pInt ) !< # of cleavage systems per family for bcc
2016-04-26 23:53:05 +05:30
2014-08-14 17:51:51 +05:30
integer ( pInt ) , parameter , private :: &
2018-12-12 03:41:59 +05:30
LATTICE_BCC_NSLIP = sum ( LATTICE_BCC_NSLIPSYSTEM ) , & !< total # of slip systems for bcc
2018-12-10 13:03:20 +05:30
LATTICE_BCC_NTWIN = sum ( LATTICE_BCC_NTWINSYSTEM ) , & !< total # of twin systems for bcc
2016-03-25 15:33:56 +05:30
LATTICE_bcc_NnonSchmid = 6_pInt , & !< total # of non-Schmid contributions for bcc (A. Koester, A. Ma, A. Hartmaier 2012)
2018-07-20 17:43:13 +05:30
LATTICE_bcc_Ncleavage = sum ( lattice_bcc_NcleavageSystem ) !< total # of cleavage systems for bcc
2014-10-28 23:35:51 +05:30
2018-12-10 10:22:36 +05:30
real ( pReal ) , dimension ( 3 + 3 , LATTICE_BCC_NSLIP ) , parameter , private :: &
2014-08-14 17:51:51 +05:30
LATTICE_bcc_systemSlip = reshape ( real ( [ &
! Slip direction Plane normal
2016-04-26 23:53:05 +05:30
! Slip system <111>{110}
2014-08-14 17:51:51 +05:30
1 , - 1 , 1 , 0 , 1 , 1 , &
- 1 , - 1 , 1 , 0 , 1 , 1 , &
1 , 1 , 1 , 0 , - 1 , 1 , &
- 1 , 1 , 1 , 0 , - 1 , 1 , &
- 1 , 1 , 1 , 1 , 0 , 1 , &
- 1 , - 1 , 1 , 1 , 0 , 1 , &
1 , 1 , 1 , - 1 , 0 , 1 , &
1 , - 1 , 1 , - 1 , 0 , 1 , &
- 1 , 1 , 1 , 1 , 1 , 0 , &
- 1 , 1 , - 1 , 1 , 1 , 0 , &
1 , 1 , 1 , - 1 , 1 , 0 , &
1 , 1 , - 1 , - 1 , 1 , 0 , &
! Slip system <111>{112}
- 1 , 1 , 1 , 2 , 1 , 1 , &
1 , 1 , 1 , - 2 , 1 , 1 , &
1 , 1 , - 1 , 2 , - 1 , 1 , &
1 , - 1 , 1 , 2 , 1 , - 1 , &
1 , - 1 , 1 , 1 , 2 , 1 , &
1 , 1 , - 1 , - 1 , 2 , 1 , &
1 , 1 , 1 , 1 , - 2 , 1 , &
- 1 , 1 , 1 , 1 , 2 , - 1 , &
1 , 1 , - 1 , 1 , 1 , 2 , &
1 , - 1 , 1 , - 1 , 1 , 2 , &
- 1 , 1 , 1 , 1 , - 1 , 2 , &
1 , 1 , 1 , 1 , 1 , - 2 &
2018-10-26 13:50:45 +05:30
] , pReal ) , shape ( LATTICE_BCC_SYSTEMSLIP ) )
2014-08-14 17:51:51 +05:30
2018-08-24 16:12:30 +05:30
character ( len = * ) , dimension ( 2 ) , parameter , public :: LATTICE_BCC_SLIPFAMILY_NAME = &
[ '<1 -1 1>{0 1 1}' , &
'<1 -1 1>{2 1 1}' ]
2018-12-10 10:22:36 +05:30
real ( pReal ) , dimension ( 3 + 3 , LATTICE_BCC_NTWIN ) , parameter , private :: &
2014-08-14 17:51:51 +05:30
LATTICE_bcc_systemTwin = reshape ( real ( [ &
! Twin system <111>{112}
- 1 , 1 , 1 , 2 , 1 , 1 , &
1 , 1 , 1 , - 2 , 1 , 1 , &
1 , 1 , - 1 , 2 , - 1 , 1 , &
1 , - 1 , 1 , 2 , 1 , - 1 , &
1 , - 1 , 1 , 1 , 2 , 1 , &
1 , 1 , - 1 , - 1 , 2 , 1 , &
1 , 1 , 1 , 1 , - 2 , 1 , &
- 1 , 1 , 1 , 1 , 2 , - 1 , &
1 , 1 , - 1 , 1 , 1 , 2 , &
1 , - 1 , 1 , - 1 , 1 , 2 , &
- 1 , 1 , 1 , 1 , - 1 , 2 , &
1 , 1 , 1 , 1 , 1 , - 2 &
2018-10-26 13:50:45 +05:30
] , pReal ) , shape ( LATTICE_BCC_SYSTEMTWIN ) )
2014-08-14 17:51:51 +05:30
2018-08-24 16:12:30 +05:30
character ( len = * ) , dimension ( 1 ) , parameter , public :: LATTICE_BCC_TWINFAMILY_NAME = &
[ '<1 1 1>{2 1 1}' ]
2018-12-11 05:09:50 +05:30
2014-08-14 17:51:51 +05:30
2018-12-10 10:22:36 +05:30
integer ( pInt ) , dimension ( LATTICE_BCC_NSLIP , LATTICE_BCC_NSLIP ) , parameter , public :: &
2014-08-14 17:51:51 +05:30
LATTICE_bcc_interactionSlipSlip = reshape ( int ( [ &
2016-04-26 23:53:05 +05:30
1 , 2 , 6 , 6 , 5 , 4 , 4 , 3 , 4 , 3 , 5 , 4 , 6 , 6 , 4 , 3 , 3 , 4 , 6 , 6 , 4 , 3 , 6 , 6 , & ! ---> slip
2014-08-14 17:51:51 +05:30
2 , 1 , 6 , 6 , 4 , 3 , 5 , 4 , 5 , 4 , 4 , 3 , 6 , 6 , 3 , 4 , 4 , 3 , 6 , 6 , 3 , 4 , 6 , 6 , & ! |
6 , 6 , 1 , 2 , 4 , 5 , 3 , 4 , 4 , 5 , 3 , 4 , 4 , 3 , 6 , 6 , 6 , 6 , 3 , 4 , 6 , 6 , 4 , 3 , & ! |
6 , 6 , 2 , 1 , 3 , 4 , 4 , 5 , 3 , 4 , 4 , 5 , 3 , 4 , 6 , 6 , 6 , 6 , 4 , 3 , 6 , 6 , 3 , 4 , & ! v slip
5 , 4 , 4 , 3 , 1 , 2 , 6 , 6 , 3 , 4 , 5 , 4 , 3 , 6 , 4 , 6 , 6 , 4 , 6 , 3 , 4 , 6 , 3 , 6 , &
4 , 3 , 5 , 4 , 2 , 1 , 6 , 6 , 4 , 5 , 4 , 3 , 4 , 6 , 3 , 6 , 6 , 3 , 6 , 4 , 3 , 6 , 4 , 6 , &
4 , 5 , 3 , 4 , 6 , 6 , 1 , 2 , 5 , 4 , 3 , 4 , 6 , 3 , 6 , 4 , 4 , 6 , 3 , 6 , 6 , 4 , 6 , 3 , &
3 , 4 , 4 , 5 , 6 , 6 , 2 , 1 , 4 , 3 , 4 , 5 , 6 , 4 , 6 , 3 , 3 , 6 , 4 , 6 , 6 , 3 , 6 , 4 , &
4 , 5 , 4 , 3 , 3 , 4 , 5 , 4 , 1 , 2 , 6 , 6 , 3 , 6 , 6 , 4 , 4 , 6 , 6 , 3 , 6 , 4 , 3 , 6 , &
3 , 4 , 5 , 4 , 4 , 5 , 4 , 3 , 2 , 1 , 6 , 6 , 4 , 6 , 6 , 3 , 3 , 6 , 6 , 4 , 6 , 3 , 4 , 6 , &
5 , 4 , 3 , 4 , 5 , 4 , 3 , 4 , 6 , 6 , 1 , 2 , 6 , 3 , 4 , 6 , 6 , 4 , 3 , 6 , 4 , 6 , 6 , 3 , &
4 , 3 , 4 , 5 , 4 , 3 , 4 , 5 , 6 , 6 , 2 , 1 , 6 , 4 , 3 , 6 , 6 , 3 , 4 , 6 , 3 , 6 , 6 , 4 , &
!
6 , 6 , 4 , 3 , 3 , 4 , 6 , 6 , 3 , 4 , 6 , 6 , 1 , 5 , 6 , 6 , 5 , 6 , 6 , 3 , 5 , 6 , 3 , 6 , &
6 , 6 , 3 , 4 , 6 , 6 , 3 , 4 , 6 , 6 , 3 , 4 , 5 , 1 , 6 , 6 , 6 , 5 , 3 , 6 , 6 , 5 , 6 , 3 , &
4 , 3 , 6 , 6 , 4 , 3 , 6 , 6 , 6 , 6 , 4 , 3 , 6 , 6 , 1 , 5 , 6 , 3 , 5 , 6 , 3 , 6 , 5 , 6 , &
3 , 4 , 6 , 6 , 6 , 6 , 4 , 3 , 4 , 3 , 6 , 6 , 6 , 6 , 5 , 1 , 3 , 6 , 6 , 5 , 6 , 3 , 6 , 5 , &
3 , 4 , 6 , 6 , 6 , 6 , 4 , 3 , 4 , 3 , 6 , 6 , 5 , 6 , 6 , 3 , 1 , 6 , 5 , 6 , 5 , 3 , 6 , 6 , &
4 , 3 , 6 , 6 , 4 , 3 , 6 , 6 , 6 , 6 , 4 , 3 , 6 , 5 , 3 , 6 , 6 , 1 , 6 , 5 , 3 , 5 , 6 , 6 , &
6 , 6 , 3 , 4 , 6 , 6 , 3 , 4 , 6 , 6 , 3 , 4 , 6 , 3 , 5 , 6 , 5 , 6 , 1 , 6 , 6 , 6 , 5 , 3 , &
6 , 6 , 4 , 3 , 3 , 4 , 6 , 6 , 3 , 4 , 6 , 6 , 3 , 6 , 6 , 5 , 6 , 5 , 6 , 1 , 6 , 6 , 3 , 5 , &
4 , 3 , 6 , 6 , 4 , 3 , 6 , 6 , 6 , 6 , 4 , 3 , 5 , 6 , 3 , 6 , 5 , 3 , 6 , 6 , 1 , 6 , 6 , 5 , &
3 , 4 , 6 , 6 , 6 , 6 , 4 , 3 , 4 , 3 , 6 , 6 , 6 , 5 , 6 , 3 , 3 , 5 , 6 , 6 , 6 , 1 , 5 , 6 , &
6 , 6 , 4 , 3 , 3 , 4 , 6 , 6 , 3 , 4 , 6 , 6 , 3 , 6 , 5 , 6 , 6 , 6 , 5 , 3 , 6 , 5 , 1 , 6 , &
6 , 6 , 3 , 4 , 6 , 6 , 3 , 4 , 6 , 6 , 3 , 4 , 6 , 3 , 6 , 5 , 6 , 6 , 3 , 5 , 5 , 6 , 6 , 1 &
2018-10-26 13:50:45 +05:30
] , pInt ) , shape ( LATTICE_BCC_INTERACTIONSLIPSLIP ) , order = [ 2 , 1 ] ) !< Slip--slip interaction types for bcc from Queyreau et al. Int J Plast 25 (2009) 361– 377
2014-08-14 17:51:51 +05:30
!< 1: self interaction
!< 2: coplanar interaction
!< 3: collinear interaction
!< 4: mixed-asymmetrical junction
!< 5: mixed-symmetrical junction
!< 6: edge junction
2014-10-28 23:35:51 +05:30
real ( pReal ) , dimension ( 3 + 3 , LATTICE_bcc_Ncleavage ) , parameter , private :: &
LATTICE_bcc_systemCleavage = reshape ( real ( [ &
! Cleavage direction Plane normal
2014-11-01 00:07:37 +05:30
0 , 1 , 0 , 1 , 0 , 0 , &
0 , 0 , 1 , 0 , 1 , 0 , &
1 , 0 , 0 , 0 , 0 , 1 , &
2014-10-28 23:35:51 +05:30
1 , - 1 , 1 , 0 , 1 , 1 , &
1 , 1 , 1 , 0 , - 1 , 1 , &
- 1 , 1 , 1 , 1 , 0 , 1 , &
1 , 1 , 1 , - 1 , 0 , 1 , &
- 1 , 1 , 1 , 1 , 1 , 0 , &
1 , 1 , 1 , - 1 , 1 , 0 &
2018-10-26 13:50:45 +05:30
] , pReal ) , shape ( LATTICE_BCC_SYSTEMCLEAVAGE ) )
2014-10-28 23:35:51 +05:30
2014-08-14 17:51:51 +05:30
!--------------------------------------------------------------------------------------------------
2016-04-26 13:05:42 +05:30
! hexagonal
2014-08-14 17:51:51 +05:30
integer ( pInt ) , dimension ( LATTICE_maxNslipFamily ) , parameter , public :: &
2018-12-12 03:41:59 +05:30
LATTICE_HEX_NSLIPSYSTEM = int ( [ 3 , 3 , 3 , 6 , 12 , 6 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] , pInt ) !< # of slip systems per family for hex
2016-04-26 23:53:05 +05:30
2018-12-10 13:03:20 +05:30
integer ( pInt ) , dimension ( 4 ) , parameter , public :: &
LATTICE_HEX_NTWINSYSTEM = int ( [ 6 , 6 , 6 , 6 ] , pInt ) !< # of slip systems per family for hex
2016-04-26 23:53:05 +05:30
2014-10-28 23:35:51 +05:30
integer ( pInt ) , dimension ( LATTICE_maxNcleavageFamily ) , parameter , public :: &
2018-07-30 00:33:14 +05:30
LATTICE_hex_NcleavageSystem = int ( [ 3 , 0 , 0 ] , pInt ) !< # of cleavage systems per family for hex
2016-04-26 23:53:05 +05:30
2016-03-25 15:33:56 +05:30
integer ( pInt ) , parameter , private :: &
2018-12-12 03:41:59 +05:30
LATTICE_HEX_NSLIP = sum ( LATTICE_HEX_NSLIPSystem ) , & !< total # of slip systems for hex
2018-12-10 13:03:20 +05:30
LATTICE_HEX_NTWIN = sum ( LATTICE_HEX_NTWINSYSTEM ) , & !< total # of twin systems for hex
2018-07-20 17:43:13 +05:30
LATTICE_hex_Ncleavage = sum ( lattice_hex_NcleavageSystem ) !< total # of cleavage systems for hex
2014-08-14 17:51:51 +05:30
2018-12-12 03:41:59 +05:30
real ( pReal ) , dimension ( 4 + 4 , LATTICE_HEX_NSLIP ) , parameter , private :: &
2014-08-14 17:51:51 +05:30
LATTICE_hex_systemSlip = reshape ( real ( [ &
! Slip direction Plane normal
! Basal systems <11.0>{00.1} (independent of c/a-ratio, Bravais notation (4 coordinate base))
2 , - 1 , - 1 , 0 , 0 , 0 , 0 , 1 , &
- 1 , 2 , - 1 , 0 , 0 , 0 , 0 , 1 , &
- 1 , - 1 , 2 , 0 , 0 , 0 , 0 , 1 , &
! 1st type prismatic systems <11.0>{10.0} (independent of c/a-ratio)
2 , - 1 , - 1 , 0 , 0 , 1 , - 1 , 0 , &
- 1 , 2 , - 1 , 0 , - 1 , 0 , 1 , 0 , &
- 1 , - 1 , 2 , 0 , 1 , - 1 , 0 , 0 , &
! 2nd type prismatic systems <10.0>{11.0} -- a slip; plane normals independent of c/a-ratio
0 , 1 , - 1 , 0 , 2 , - 1 , - 1 , 0 , &
- 1 , 0 , 1 , 0 , - 1 , 2 , - 1 , 0 , &
1 , - 1 , 0 , 0 , - 1 , - 1 , 2 , 0 , &
! 1st type 1st order pyramidal systems <11.0>{-11.1} -- plane normals depend on the c/a-ratio
2 , - 1 , - 1 , 0 , 0 , 1 , - 1 , 1 , &
- 1 , 2 , - 1 , 0 , - 1 , 0 , 1 , 1 , &
- 1 , - 1 , 2 , 0 , 1 , - 1 , 0 , 1 , &
1 , 1 , - 2 , 0 , - 1 , 1 , 0 , 1 , &
- 2 , 1 , 1 , 0 , 0 , - 1 , 1 , 1 , &
1 , - 2 , 1 , 0 , 1 , 0 , - 1 , 1 , &
! pyramidal system: c+a slip <11.3>{-10.1} -- plane normals depend on the c/a-ratio
2 , - 1 , - 1 , 3 , - 1 , 1 , 0 , 1 , &
1 , - 2 , 1 , 3 , - 1 , 1 , 0 , 1 , &
- 1 , - 1 , 2 , 3 , 1 , 0 , - 1 , 1 , &
- 2 , 1 , 1 , 3 , 1 , 0 , - 1 , 1 , &
- 1 , 2 , - 1 , 3 , 0 , - 1 , 1 , 1 , &
1 , 1 , - 2 , 3 , 0 , - 1 , 1 , 1 , &
- 2 , 1 , 1 , 3 , 1 , - 1 , 0 , 1 , &
- 1 , 2 , - 1 , 3 , 1 , - 1 , 0 , 1 , &
1 , 1 , - 2 , 3 , - 1 , 0 , 1 , 1 , &
2 , - 1 , - 1 , 3 , - 1 , 0 , 1 , 1 , &
1 , - 2 , 1 , 3 , 0 , 1 , - 1 , 1 , &
- 1 , - 1 , 2 , 3 , 0 , 1 , - 1 , 1 , &
2016-04-26 23:53:05 +05:30
! pyramidal system: c+a slip <11.3>{-1-1.2} -- as for hexagonal ice (Castelnau et al. 1996, similar to twin system found below)
2014-08-14 17:51:51 +05:30
2 , - 1 , - 1 , 3 , - 2 , 1 , 1 , 2 , & ! sorted according to similar twin system
- 1 , 2 , - 1 , 3 , 1 , - 2 , 1 , 2 , & ! <11.3>{-1-1.2} shear = 2((c/a)^2-2)/(3 c/a)
- 1 , - 1 , 2 , 3 , 1 , 1 , - 2 , 2 , &
- 2 , 1 , 1 , 3 , 2 , - 1 , - 1 , 2 , &
1 , - 2 , 1 , 3 , - 1 , 2 , - 1 , 2 , &
1 , 1 , - 2 , 3 , - 1 , - 1 , 2 , 2 &
2018-10-26 13:50:45 +05:30
] , pReal ) , shape ( LATTICE_HEX_SYSTEMSLIP ) ) !< slip systems for hex sorted by A. Alankar & P. Eisenlohr
2014-08-14 17:51:51 +05:30
2018-08-24 16:12:30 +05:30
character ( len = * ) , dimension ( 6 ) , parameter , public :: LATTICE_HEX_SLIPFAMILY_NAME = &
[ '<1 1 . 1>{0 0 . 1} ' , &
'<1 1 . 1>{1 0 . 0} ' , &
'<1 0 . 0>{1 1 . 0} ' , &
'<1 1 . 0>{-1 1 . 1} ' , &
'<1 1 . 3>{-1 0 . 1} ' , &
'<1 1 . 3>{-1 -1 . 2}' ]
2014-08-14 17:51:51 +05:30
real ( pReal ) , dimension ( 4 + 4 , LATTICE_hex_Ntwin ) , parameter , private :: &
LATTICE_hex_systemTwin = reshape ( real ( [ &
! Compression or Tension =f(twinning shear=f(c/a)) for each metal ! (according to Yoo 1981)
1 , - 1 , 0 , 1 , - 1 , 1 , 0 , 2 , & ! <-10.1>{10.2} shear = (3-(c/a)^2)/(sqrt(3) c/a)
- 1 , 0 , 1 , 1 , 1 , 0 , - 1 , 2 , &
0 , 1 , - 1 , 1 , 0 , - 1 , 1 , 2 , &
- 1 , 1 , 0 , 1 , 1 , - 1 , 0 , 2 , &
1 , 0 , - 1 , 1 , - 1 , 0 , 1 , 2 , &
0 , - 1 , 1 , 1 , 0 , 1 , - 1 , 2 , &
!
2 , - 1 , - 1 , 6 , - 2 , 1 , 1 , 1 , & ! <11.6>{-1-1.1} shear = 1/(c/a)
- 1 , 2 , - 1 , 6 , 1 , - 2 , 1 , 1 , &
- 1 , - 1 , 2 , 6 , 1 , 1 , - 2 , 1 , &
- 2 , 1 , 1 , 6 , 2 , - 1 , - 1 , 1 , &
1 , - 2 , 1 , 6 , - 1 , 2 , - 1 , 1 , &
1 , 1 , - 2 , 6 , - 1 , - 1 , 2 , 1 , &
!
- 1 , 1 , 0 , - 2 , - 1 , 1 , 0 , 1 , & !! <10.-2>{10.1} shear = (4(c/a)^2-9)/(4 sqrt(3) c/a)
1 , 0 , - 1 , - 2 , 1 , 0 , - 1 , 1 , &
0 , - 1 , 1 , - 2 , 0 , - 1 , 1 , 1 , &
1 , - 1 , 0 , - 2 , 1 , - 1 , 0 , 1 , &
- 1 , 0 , 1 , - 2 , - 1 , 0 , 1 , 1 , &
0 , 1 , - 1 , - 2 , 0 , 1 , - 1 , 1 , &
!
2 , - 1 , - 1 , - 3 , 2 , - 1 , - 1 , 2 , & ! <11.-3>{11.2} shear = 2((c/a)^2-2)/(3 c/a)
- 1 , 2 , - 1 , - 3 , - 1 , 2 , - 1 , 2 , &
- 1 , - 1 , 2 , - 3 , - 1 , - 1 , 2 , 2 , &
- 2 , 1 , 1 , - 3 , - 2 , 1 , 1 , 2 , &
1 , - 2 , 1 , - 3 , 1 , - 2 , 1 , 2 , &
1 , 1 , - 2 , - 3 , 1 , 1 , - 2 , 2 &
2018-10-26 13:50:45 +05:30
] , pReal ) , shape ( LATTICE_HEX_SYSTEMTWIN ) ) !< twin systems for hex, order follows Prof. Tom Bieler's scheme; but numbering in data was restarted from 1
2014-08-14 17:51:51 +05:30
2018-08-24 16:12:30 +05:30
character ( len = * ) , dimension ( 4 ) , parameter , public :: LATTICE_HEX_TWINFAMILY_NAME = &
[ '<-1 0 . 1>{1 0 . 2} ' , &
'<1 1 . 6>{-1 -1 . 1}' , &
'<1 0 . -2>{1 0 . 1} ' , &
'<1 1 . -3>{1 1 . 2} ' ]
2016-04-26 23:53:05 +05:30
2018-12-12 03:41:59 +05:30
integer ( pInt ) , dimension ( LATTICE_HEX_NSLIP , LATTICE_HEX_NSLIP ) , parameter , public :: &
2014-08-14 17:51:51 +05:30
LATTICE_hex_interactionSlipSlip = reshape ( int ( [ &
1 , 2 , 2 , 3 , 3 , 3 , 7 , 7 , 7 , 13 , 13 , 13 , 13 , 13 , 13 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 31 , 31 , 31 , 31 , 31 , 31 , & ! ---> slip
2 , 1 , 2 , 3 , 3 , 3 , 7 , 7 , 7 , 13 , 13 , 13 , 13 , 13 , 13 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 31 , 31 , 31 , 31 , 31 , 31 , & ! |
2 , 2 , 1 , 3 , 3 , 3 , 7 , 7 , 7 , 13 , 13 , 13 , 13 , 13 , 13 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 31 , 31 , 31 , 31 , 31 , 31 , & ! |
! v slip
6 , 6 , 6 , 4 , 5 , 5 , 8 , 8 , 8 , 14 , 14 , 14 , 14 , 14 , 14 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 32 , 32 , 32 , 32 , 32 , 32 , &
6 , 6 , 6 , 5 , 4 , 5 , 8 , 8 , 8 , 14 , 14 , 14 , 14 , 14 , 14 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 32 , 32 , 32 , 32 , 32 , 32 , &
6 , 6 , 6 , 5 , 5 , 4 , 8 , 8 , 8 , 14 , 14 , 14 , 14 , 14 , 14 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 22 , 32 , 32 , 32 , 32 , 32 , 32 , &
!
12 , 12 , 12 , 11 , 11 , 11 , 9 , 10 , 10 , 15 , 15 , 15 , 15 , 15 , 15 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 33 , 33 , 33 , 33 , 33 , 33 , &
12 , 12 , 12 , 11 , 11 , 11 , 10 , 9 , 10 , 15 , 15 , 15 , 15 , 15 , 15 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 33 , 33 , 33 , 33 , 33 , 33 , &
12 , 12 , 12 , 11 , 11 , 11 , 10 , 10 , 9 , 15 , 15 , 15 , 15 , 15 , 15 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 23 , 33 , 33 , 33 , 33 , 33 , 33 , &
!
20 , 20 , 20 , 19 , 19 , 19 , 18 , 18 , 18 , 16 , 17 , 17 , 17 , 17 , 17 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 34 , 34 , 34 , 34 , 34 , 34 , &
20 , 20 , 20 , 19 , 19 , 19 , 18 , 18 , 18 , 17 , 16 , 17 , 17 , 17 , 17 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 34 , 34 , 34 , 34 , 34 , 34 , &
20 , 20 , 20 , 19 , 19 , 19 , 18 , 18 , 18 , 17 , 17 , 16 , 17 , 17 , 17 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 34 , 34 , 34 , 34 , 34 , 34 , &
20 , 20 , 20 , 19 , 19 , 19 , 18 , 18 , 18 , 17 , 17 , 17 , 16 , 17 , 17 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 34 , 34 , 34 , 34 , 34 , 34 , &
20 , 20 , 20 , 19 , 19 , 19 , 18 , 18 , 18 , 17 , 17 , 17 , 17 , 16 , 17 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 34 , 34 , 34 , 34 , 34 , 34 , &
20 , 20 , 20 , 19 , 19 , 19 , 18 , 18 , 18 , 17 , 17 , 17 , 17 , 17 , 16 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 24 , 34 , 34 , 34 , 34 , 34 , 34 , &
!
30 , 30 , 30 , 29 , 29 , 29 , 28 , 28 , 28 , 27 , 27 , 27 , 27 , 27 , 27 , 25 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 35 , 35 , 35 , 35 , 35 , 35 , &
30 , 30 , 30 , 29 , 29 , 29 , 28 , 28 , 28 , 27 , 27 , 27 , 27 , 27 , 27 , 26 , 25 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 35 , 35 , 35 , 35 , 35 , 35 , &
30 , 30 , 30 , 29 , 29 , 29 , 28 , 28 , 28 , 27 , 27 , 27 , 27 , 27 , 27 , 26 , 26 , 25 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 35 , 35 , 35 , 35 , 35 , 35 , &
30 , 30 , 30 , 29 , 29 , 29 , 28 , 28 , 28 , 27 , 27 , 27 , 27 , 27 , 27 , 26 , 26 , 26 , 25 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 35 , 35 , 35 , 35 , 35 , 35 , &
30 , 30 , 30 , 29 , 29 , 29 , 28 , 28 , 28 , 27 , 27 , 27 , 27 , 27 , 27 , 26 , 26 , 26 , 26 , 25 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 35 , 35 , 35 , 35 , 35 , 35 , &
30 , 30 , 30 , 29 , 29 , 29 , 28 , 28 , 28 , 27 , 27 , 27 , 27 , 27 , 27 , 26 , 26 , 26 , 26 , 26 , 25 , 26 , 26 , 26 , 26 , 26 , 26 , 35 , 35 , 35 , 35 , 35 , 35 , &
30 , 30 , 30 , 29 , 29 , 29 , 28 , 28 , 28 , 27 , 27 , 27 , 27 , 27 , 27 , 26 , 26 , 26 , 26 , 26 , 26 , 25 , 26 , 26 , 26 , 26 , 26 , 35 , 35 , 35 , 35 , 35 , 35 , &
30 , 30 , 30 , 29 , 29 , 29 , 28 , 28 , 28 , 27 , 27 , 27 , 27 , 27 , 27 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 25 , 26 , 26 , 26 , 26 , 35 , 35 , 35 , 35 , 35 , 35 , &
30 , 30 , 30 , 29 , 29 , 29 , 28 , 28 , 28 , 27 , 27 , 27 , 27 , 27 , 27 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 25 , 26 , 26 , 26 , 35 , 35 , 35 , 35 , 35 , 35 , &
30 , 30 , 30 , 29 , 29 , 29 , 28 , 28 , 28 , 27 , 27 , 27 , 27 , 27 , 27 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 25 , 26 , 26 , 35 , 35 , 35 , 35 , 35 , 35 , &
30 , 30 , 30 , 29 , 29 , 29 , 28 , 28 , 28 , 27 , 27 , 27 , 27 , 27 , 27 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 25 , 26 , 35 , 35 , 35 , 35 , 35 , 35 , &
30 , 30 , 30 , 29 , 29 , 29 , 28 , 28 , 28 , 27 , 27 , 27 , 27 , 27 , 27 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 26 , 25 , 35 , 35 , 35 , 35 , 35 , 35 , &
!
42 , 42 , 42 , 41 , 41 , 41 , 40 , 40 , 40 , 39 , 39 , 39 , 39 , 39 , 39 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 36 , 37 , 37 , 37 , 37 , 37 , &
42 , 42 , 42 , 41 , 41 , 41 , 40 , 40 , 40 , 39 , 39 , 39 , 39 , 39 , 39 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 37 , 36 , 37 , 37 , 37 , 37 , &
42 , 42 , 42 , 41 , 41 , 41 , 40 , 40 , 40 , 39 , 39 , 39 , 39 , 39 , 39 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 37 , 37 , 36 , 37 , 37 , 37 , &
42 , 42 , 42 , 41 , 41 , 41 , 40 , 40 , 40 , 39 , 39 , 39 , 39 , 39 , 39 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 37 , 37 , 37 , 36 , 37 , 37 , &
42 , 42 , 42 , 41 , 41 , 41 , 40 , 40 , 40 , 39 , 39 , 39 , 39 , 39 , 39 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 37 , 37 , 37 , 37 , 36 , 37 , &
2016-04-26 23:53:05 +05:30
42 , 42 , 42 , 41 , 41 , 41 , 40 , 40 , 40 , 39 , 39 , 39 , 39 , 39 , 39 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 38 , 37 , 37 , 37 , 37 , 37 , 36 &
2018-12-22 12:19:52 +05:30
] , pInt ) , shape ( LATTICE_HEX_INTERACTIONSLIPSLIP ) , order = [ 2 , 1 ] ) !< Slip--slip interaction types for hex (onion peel naming scheme)
2014-08-14 17:51:51 +05:30
2014-10-28 23:35:51 +05:30
real ( pReal ) , dimension ( 4 + 4 , LATTICE_hex_Ncleavage ) , parameter , private :: &
LATTICE_hex_systemCleavage = reshape ( real ( [ &
! Cleavage direction Plane normal
2 , - 1 , - 1 , 0 , 0 , 0 , 0 , 1 , &
0 , 0 , 0 , 1 , 2 , - 1 , - 1 , 0 , &
0 , 0 , 0 , 1 , 0 , 1 , - 1 , 0 &
2018-10-26 13:50:45 +05:30
] , pReal ) , shape ( LATTICE_HEX_SYSTEMCLEAVAGE ) )
2014-10-28 23:35:51 +05:30
2015-06-27 20:25:30 +05:30
!--------------------------------------------------------------------------------------------------
2016-04-26 13:05:42 +05:30
! body centered tetragonal
2015-06-27 20:25:30 +05:30
integer ( pInt ) , dimension ( LATTICE_maxNslipFamily ) , parameter , public :: &
2015-12-08 23:40:06 +05:30
LATTICE_bct_NslipSystem = int ( [ 2 , 2 , 2 , 4 , 2 , 4 , 2 , 2 , 4 , 8 , 4 , 8 , 8 ] , pInt ) !< # of slip systems per family for bct (Sn) Bieler J. Electr Mater 2009
2015-06-27 20:25:30 +05:30
2016-03-25 15:33:56 +05:30
integer ( pInt ) , parameter , private :: &
2018-12-10 13:03:20 +05:30
LATTICE_bct_Nslip = sum ( lattice_bct_NslipSystem ) !< total # of slip systems for bct
2016-04-26 23:53:05 +05:30
2015-06-27 20:25:30 +05:30
real ( pReal ) , dimension ( 3 + 3 , LATTICE_bct_Nslip ) , parameter , private :: &
LATTICE_bct_systemSlip = reshape ( real ( [ &
! Slip direction Plane normal
! Slip family 1 {100)<001] (Bravais notation {hkl)<uvw] for bct c/a = 0.5456)
0 , 0 , 1 , 1 , 0 , 0 , &
0 , 0 , 1 , 0 , 1 , 0 , &
! Slip family 2 {110)<001]
0 , 0 , 1 , 1 , 1 , 0 , &
0 , 0 , 1 , - 1 , 1 , 0 , &
2016-04-26 23:53:05 +05:30
! slip family 3 {100)<010]
2015-06-27 20:25:30 +05:30
0 , 1 , 0 , 1 , 0 , 0 , &
1 , 0 , 0 , 0 , 1 , 0 , &
2015-09-23 00:12:23 +05:30
! Slip family 4 {110)<1-11]/2
2015-06-27 20:25:30 +05:30
1 , - 1 , 1 , 1 , 1 , 0 , &
1 , - 1 , - 1 , 1 , 1 , 0 , &
- 1 , - 1 , - 1 , - 1 , 1 , 0 , &
- 1 , - 1 , 1 , - 1 , 1 , 0 , &
! Slip family 5 {110)<1-10]
1 , - 1 , 0 , 1 , 1 , 0 , &
1 , 1 , 0 , 1 , - 1 , 0 , &
2016-04-26 23:53:05 +05:30
! Slip family 6 {100)<011]
2015-06-27 20:25:30 +05:30
0 , 1 , 1 , 1 , 0 , 0 , &
0 , - 1 , 1 , 1 , 0 , 0 , &
- 1 , 0 , 1 , 0 , 1 , 0 , &
2016-04-26 23:53:05 +05:30
1 , 0 , 1 , 0 , 1 , 0 , &
! Slip family 7 {001)<010]
2015-06-27 20:25:30 +05:30
0 , 1 , 0 , 0 , 0 , 1 , &
1 , 0 , 0 , 0 , 0 , 1 , &
2016-04-26 23:53:05 +05:30
! Slip family 8 {001)<110]
2015-06-27 20:25:30 +05:30
1 , 1 , 0 , 0 , 0 , 1 , &
2016-04-26 23:53:05 +05:30
- 1 , 1 , 0 , 0 , 0 , 1 , &
! Slip family 9 {011)<01-1]
2015-06-27 20:25:30 +05:30
0 , 1 , - 1 , 0 , 1 , 1 , &
0 , - 1 , - 1 , 0 , - 1 , 1 , &
- 1 , 0 , - 1 , - 1 , 0 , 1 , &
2016-04-26 23:53:05 +05:30
1 , 0 , - 1 , 1 , 0 , 1 , &
! Slip family 10 {011)<1-11]/2
2015-09-23 00:12:23 +05:30
1 , - 1 , 1 , 0 , 1 , 1 , &
1 , 1 , - 1 , 0 , 1 , 1 , &
1 , 1 , 1 , 0 , 1 , - 1 , &
2016-04-26 23:53:05 +05:30
- 1 , 1 , 1 , 0 , 1 , - 1 , &
2015-09-23 00:12:23 +05:30
1 , - 1 , - 1 , 1 , 0 , 1 , &
- 1 , - 1 , 1 , 1 , 0 , 1 , &
1 , 1 , 1 , 1 , 0 , - 1 , &
2016-04-26 23:53:05 +05:30
1 , - 1 , 1 , 1 , 0 , - 1 , &
! Slip family 11 {011)<100]
2015-09-23 00:12:23 +05:30
1 , 0 , 0 , 0 , 1 , 1 , &
1 , 0 , 0 , 0 , 1 , - 1 , &
0 , 1 , 0 , 1 , 0 , 1 , &
2016-04-26 23:53:05 +05:30
0 , 1 , 0 , 1 , 0 , - 1 , &
! Slip family 12 {211)<01-1]
2015-06-27 20:25:30 +05:30
0 , 1 , - 1 , 2 , 1 , 1 , &
0 , - 1 , - 1 , 2 , - 1 , 1 , &
1 , 0 , - 1 , 1 , 2 , 1 , &
2016-04-26 23:53:05 +05:30
- 1 , 0 , - 1 , - 1 , 2 , 1 , &
2015-06-27 20:25:30 +05:30
0 , 1 , - 1 , - 2 , 1 , 1 , &
0 , - 1 , - 1 , - 2 , - 1 , 1 , &
- 1 , 0 , - 1 , - 1 , - 2 , 1 , &
2016-04-26 23:53:05 +05:30
1 , 0 , - 1 , 1 , - 2 , 1 , &
! Slip family 13 {211)<-111]/2
2015-09-23 00:12:23 +05:30
- 1 , 1 , 1 , 2 , 1 , 1 , &
- 1 , - 1 , 1 , 2 , - 1 , 1 , &
1 , - 1 , 1 , 1 , 2 , 1 , &
2016-04-26 23:53:05 +05:30
- 1 , - 1 , 1 , - 1 , 2 , 1 , &
2015-09-23 00:12:23 +05:30
1 , 1 , 1 , - 2 , 1 , 1 , &
1 , - 1 , 1 , - 2 , - 1 , 1 , &
- 1 , 1 , 1 , - 1 , - 2 , 1 , &
2016-04-26 23:53:05 +05:30
1 , 1 , 1 , 1 , - 2 , 1 &
2015-06-27 20:25:30 +05:30
] , pReal ) , [ 3_pInt + 3_pInt , LATTICE_bct_Nslip ] ) !< slip systems for bct sorted by Bieler
2018-08-24 16:12:30 +05:30
character ( len = * ) , dimension ( 13 ) , parameter , public :: LATTICE_BCT_SLIPFAMILY_NAME = &
[ '{1 0 0)<0 0 1] ' , &
'{1 1 0)<0 0 1] ' , &
'{1 0 0)<0 1 0] ' , &
'{1 1 0)<1 -1 1]' , &
'{1 1 0)<1 -1 0]' , &
'{1 0 0)<0 1 1] ' , &
'{0 0 1)<0 1 0] ' , &
'{0 0 1)<1 1 0] ' , &
'{0 1 1)<0 1 -1]' , &
'{0 1 1)<1 -1 1]' , &
'{0 1 1)<1 0 0] ' , &
'{2 1 1)<0 1 -1]' , &
'{2 1 1)<-1 1 1]' ]
2015-06-27 20:25:30 +05:30
integer ( pInt ) , dimension ( LATTICE_bct_Nslip , LATTICE_bct_Nslip ) , parameter , public :: &
LATTICE_bct_interactionSlipSlip = reshape ( int ( [ &
2015-09-23 00:12:23 +05:30
1 , 2 , 3 , 3 , 7 , 7 , 13 , 13 , 13 , 13 , 21 , 21 , 31 , 31 , 31 , 31 , 43 , 43 , 57 , 57 , 73 , 73 , 73 , 73 , 91 , 91 , 91 , 91 , 91 , 91 , 91 , 91 , 111 , 111 , 111 , 111 , 133 , 133 , 133 , 133 , 133 , 133 , 133 , 133 , 157 , 157 , 157 , 157 , 157 , 157 , 157 , 157 , &
2 , 1 , 3 , 3 , 7 , 7 , 13 , 13 , 13 , 13 , 21 , 21 , 31 , 31 , 31 , 31 , 43 , 43 , 57 , 57 , 73 , 73 , 73 , 73 , 91 , 91 , 91 , 91 , 91 , 91 , 91 , 91 , 111 , 111 , 111 , 111 , 133 , 133 , 133 , 133 , 133 , 133 , 133 , 133 , 157 , 157 , 157 , 157 , 157 , 157 , 157 , 157 , &
2015-07-02 15:15:25 +05:30
!
2015-09-23 00:12:23 +05:30
6 , 6 , 4 , 5 , 8 , 8 , 14 , 14 , 14 , 14 , 22 , 22 , 32 , 32 , 32 , 32 , 44 , 44 , 58 , 58 , 74 , 74 , 74 , 74 , 92 , 92 , 92 , 92 , 92 , 92 , 92 , 92 , 112 , 112 , 112 , 112 , 134 , 134 , 134 , 134 , 134 , 134 , 134 , 134 , 158 , 158 , 158 , 158 , 158 , 158 , 158 , 158 , &
6 , 6 , 5 , 4 , 8 , 8 , 14 , 14 , 14 , 14 , 22 , 22 , 32 , 32 , 32 , 32 , 44 , 44 , 58 , 58 , 74 , 74 , 74 , 74 , 92 , 92 , 92 , 92 , 92 , 92 , 92 , 92 , 112 , 112 , 112 , 112 , 134 , 134 , 134 , 134 , 134 , 134 , 134 , 134 , 158 , 158 , 158 , 158 , 158 , 158 , 158 , 158 , &
2016-04-26 23:53:05 +05:30
!
2015-09-23 00:12:23 +05:30
12 , 12 , 11 , 11 , 9 , 10 , 15 , 15 , 15 , 15 , 23 , 23 , 33 , 33 , 33 , 33 , 45 , 45 , 59 , 59 , 75 , 75 , 75 , 75 , 93 , 93 , 93 , 93 , 93 , 93 , 93 , 93 , 113 , 113 , 113 , 113 , 135 , 135 , 135 , 135 , 135 , 135 , 135 , 135 , 159 , 159 , 159 , 159 , 159 , 159 , 159 , 159 , &
12 , 12 , 11 , 11 , 10 , 9 , 15 , 15 , 15 , 15 , 23 , 23 , 33 , 33 , 33 , 33 , 45 , 45 , 59 , 59 , 75 , 75 , 75 , 75 , 93 , 93 , 93 , 93 , 93 , 93 , 93 , 93 , 113 , 113 , 113 , 113 , 135 , 135 , 135 , 135 , 135 , 135 , 135 , 135 , 159 , 159 , 159 , 159 , 159 , 159 , 159 , 159 , &
2015-07-02 15:15:25 +05:30
!
2015-09-23 00:12:23 +05:30
20 , 20 , 19 , 19 , 18 , 18 , 16 , 17 , 17 , 17 , 24 , 24 , 34 , 34 , 34 , 34 , 46 , 46 , 60 , 60 , 76 , 76 , 76 , 76 , 94 , 94 , 94 , 94 , 94 , 94 , 94 , 94 , 114 , 114 , 114 , 114 , 136 , 136 , 136 , 136 , 136 , 136 , 136 , 136 , 160 , 160 , 160 , 160 , 160 , 160 , 160 , 160 , &
20 , 20 , 19 , 19 , 18 , 18 , 17 , 16 , 17 , 17 , 24 , 24 , 34 , 34 , 34 , 34 , 46 , 46 , 60 , 60 , 76 , 76 , 76 , 76 , 94 , 94 , 94 , 94 , 94 , 94 , 94 , 94 , 114 , 114 , 114 , 114 , 136 , 136 , 136 , 136 , 136 , 136 , 136 , 136 , 160 , 160 , 160 , 160 , 160 , 160 , 160 , 160 , &
20 , 20 , 19 , 19 , 18 , 18 , 17 , 17 , 16 , 17 , 24 , 24 , 34 , 34 , 34 , 34 , 46 , 46 , 60 , 60 , 76 , 76 , 76 , 76 , 94 , 94 , 94 , 94 , 94 , 94 , 94 , 94 , 114 , 114 , 114 , 114 , 136 , 136 , 136 , 136 , 136 , 136 , 136 , 136 , 160 , 160 , 160 , 160 , 160 , 160 , 160 , 160 , &
20 , 20 , 19 , 19 , 18 , 18 , 17 , 17 , 17 , 16 , 24 , 24 , 34 , 34 , 34 , 34 , 46 , 46 , 60 , 60 , 76 , 76 , 76 , 76 , 94 , 94 , 94 , 94 , 94 , 94 , 94 , 94 , 114 , 114 , 114 , 114 , 136 , 136 , 136 , 136 , 136 , 136 , 136 , 136 , 160 , 160 , 160 , 160 , 160 , 160 , 160 , 160 , &
2015-07-02 15:15:25 +05:30
!
2015-09-23 00:12:23 +05:30
30 , 30 , 29 , 29 , 28 , 28 , 27 , 27 , 27 , 27 , 25 , 26 , 35 , 35 , 35 , 35 , 47 , 47 , 61 , 61 , 77 , 77 , 77 , 77 , 95 , 95 , 95 , 95 , 95 , 95 , 95 , 95 , 115 , 115 , 115 , 115 , 137 , 137 , 137 , 137 , 137 , 137 , 137 , 137 , 161 , 161 , 161 , 161 , 161 , 161 , 161 , 161 , &
30 , 30 , 29 , 29 , 28 , 28 , 27 , 27 , 27 , 27 , 26 , 25 , 35 , 35 , 35 , 35 , 47 , 47 , 61 , 61 , 77 , 77 , 77 , 77 , 95 , 95 , 95 , 95 , 95 , 95 , 95 , 95 , 115 , 115 , 115 , 115 , 137 , 137 , 137 , 137 , 137 , 137 , 137 , 137 , 161 , 161 , 161 , 161 , 161 , 161 , 161 , 161 , &
2015-07-02 15:15:25 +05:30
!
2015-09-23 00:12:23 +05:30
42 , 42 , 41 , 41 , 40 , 40 , 39 , 39 , 39 , 39 , 38 , 38 , 36 , 37 , 37 , 37 , 48 , 48 , 62 , 62 , 78 , 78 , 78 , 78 , 96 , 96 , 96 , 96 , 96 , 96 , 96 , 96 , 116 , 116 , 116 , 116 , 138 , 138 , 138 , 138 , 138 , 138 , 138 , 138 , 162 , 162 , 162 , 162 , 162 , 162 , 162 , 162 , &
42 , 42 , 41 , 41 , 40 , 40 , 39 , 39 , 39 , 39 , 38 , 38 , 37 , 36 , 37 , 37 , 48 , 48 , 62 , 62 , 78 , 78 , 78 , 78 , 96 , 96 , 96 , 96 , 96 , 96 , 96 , 96 , 116 , 116 , 116 , 116 , 138 , 138 , 138 , 138 , 138 , 138 , 138 , 138 , 162 , 162 , 162 , 162 , 162 , 162 , 162 , 162 , &
42 , 42 , 41 , 41 , 40 , 40 , 39 , 39 , 39 , 39 , 38 , 38 , 37 , 37 , 36 , 37 , 48 , 48 , 62 , 62 , 78 , 78 , 78 , 78 , 96 , 96 , 96 , 96 , 96 , 96 , 96 , 96 , 116 , 116 , 116 , 116 , 138 , 138 , 138 , 138 , 138 , 138 , 138 , 138 , 162 , 162 , 162 , 162 , 162 , 162 , 162 , 162 , &
42 , 42 , 41 , 41 , 40 , 40 , 39 , 39 , 39 , 39 , 38 , 38 , 37 , 37 , 37 , 36 , 48 , 48 , 62 , 62 , 78 , 78 , 78 , 78 , 96 , 96 , 96 , 96 , 96 , 96 , 96 , 96 , 116 , 116 , 116 , 116 , 138 , 138 , 138 , 138 , 138 , 138 , 138 , 138 , 162 , 162 , 162 , 162 , 162 , 162 , 162 , 162 , &
2015-07-02 15:15:25 +05:30
!
2015-09-23 00:12:23 +05:30
56 , 56 , 55 , 55 , 54 , 54 , 53 , 53 , 53 , 53 , 52 , 52 , 51 , 51 , 51 , 51 , 49 , 50 , 63 , 63 , 79 , 79 , 79 , 79 , 97 , 97 , 97 , 97 , 97 , 97 , 97 , 97 , 117 , 117 , 117 , 117 , 139 , 139 , 139 , 139 , 139 , 139 , 139 , 139 , 163 , 163 , 163 , 163 , 163 , 163 , 163 , 163 , &
56 , 56 , 55 , 55 , 54 , 54 , 53 , 53 , 53 , 53 , 52 , 52 , 51 , 51 , 51 , 51 , 50 , 49 , 63 , 63 , 79 , 79 , 79 , 79 , 97 , 97 , 97 , 97 , 97 , 97 , 97 , 97 , 117 , 117 , 117 , 117 , 139 , 139 , 139 , 139 , 139 , 139 , 139 , 139 , 163 , 163 , 163 , 163 , 163 , 163 , 163 , 163 , &
2015-07-02 15:15:25 +05:30
!
2015-09-23 00:12:23 +05:30
72 , 72 , 71 , 71 , 70 , 70 , 69 , 69 , 69 , 69 , 68 , 68 , 67 , 67 , 67 , 67 , 66 , 66 , 64 , 65 , 80 , 80 , 80 , 80 , 98 , 98 , 98 , 98 , 98 , 98 , 98 , 98 , 118 , 118 , 118 , 118 , 140 , 140 , 140 , 140 , 140 , 140 , 140 , 140 , 164 , 164 , 164 , 164 , 164 , 164 , 164 , 164 , &
72 , 72 , 71 , 71 , 70 , 70 , 69 , 69 , 69 , 69 , 68 , 68 , 67 , 67 , 67 , 67 , 66 , 66 , 65 , 64 , 80 , 80 , 80 , 80 , 98 , 98 , 98 , 98 , 98 , 98 , 98 , 98 , 118 , 118 , 118 , 118 , 140 , 140 , 140 , 140 , 140 , 140 , 140 , 140 , 164 , 164 , 164 , 164 , 164 , 164 , 164 , 164 , &
2015-07-02 15:15:25 +05:30
!
2015-09-23 00:12:23 +05:30
90 , 90 , 89 , 89 , 88 , 88 , 87 , 87 , 87 , 87 , 86 , 86 , 85 , 85 , 85 , 85 , 84 , 84 , 83 , 83 , 81 , 82 , 82 , 82 , 99 , 99 , 99 , 99 , 99 , 99 , 99 , 99 , 119 , 119 , 119 , 119 , 141 , 141 , 141 , 141 , 141 , 141 , 141 , 141 , 165 , 165 , 165 , 165 , 165 , 165 , 165 , 165 , &
90 , 90 , 89 , 89 , 88 , 88 , 87 , 87 , 87 , 87 , 86 , 86 , 85 , 85 , 85 , 85 , 84 , 84 , 83 , 83 , 82 , 81 , 82 , 82 , 99 , 99 , 99 , 99 , 99 , 99 , 99 , 99 , 119 , 119 , 119 , 119 , 141 , 141 , 141 , 141 , 141 , 141 , 141 , 141 , 165 , 165 , 165 , 165 , 165 , 165 , 165 , 165 , &
90 , 90 , 89 , 89 , 88 , 88 , 87 , 87 , 87 , 87 , 86 , 86 , 85 , 85 , 85 , 85 , 84 , 84 , 83 , 83 , 82 , 82 , 81 , 82 , 99 , 99 , 99 , 99 , 99 , 99 , 99 , 99 , 119 , 119 , 119 , 119 , 141 , 141 , 141 , 141 , 141 , 141 , 141 , 141 , 165 , 165 , 165 , 165 , 165 , 165 , 165 , 165 , &
90 , 90 , 89 , 89 , 88 , 88 , 87 , 87 , 87 , 87 , 86 , 86 , 85 , 85 , 85 , 85 , 84 , 84 , 83 , 83 , 82 , 82 , 82 , 81 , 99 , 99 , 99 , 99 , 99 , 99 , 99 , 99 , 119 , 119 , 119 , 119 , 141 , 141 , 141 , 141 , 141 , 141 , 141 , 141 , 165 , 165 , 165 , 165 , 165 , 165 , 165 , 165 , &
2015-07-02 15:15:25 +05:30
!
2015-09-23 00:12:23 +05:30
110 , 110 , 109 , 109 , 108 , 108 , 107 , 107 , 107 , 107 , 106 , 106 , 105 , 105 , 105 , 105 , 104 , 104 , 103 , 103 , 102 , 102 , 102 , 102 , 100 , 101 , 101 , 101 , 101 , 101 , 101 , 101 , 120 , 120 , 120 , 120 , 142 , 142 , 142 , 142 , 142 , 142 , 142 , 142 , 166 , 166 , 166 , 166 , 166 , 166 , 166 , 166 , &
110 , 110 , 109 , 109 , 108 , 108 , 107 , 107 , 107 , 107 , 106 , 106 , 105 , 105 , 105 , 105 , 104 , 104 , 103 , 103 , 102 , 102 , 102 , 102 , 101 , 100 , 101 , 101 , 101 , 101 , 101 , 101 , 120 , 120 , 120 , 120 , 142 , 142 , 142 , 142 , 142 , 142 , 142 , 142 , 166 , 166 , 166 , 166 , 166 , 166 , 166 , 166 , &
110 , 110 , 109 , 109 , 108 , 108 , 107 , 107 , 107 , 107 , 106 , 106 , 105 , 105 , 105 , 105 , 104 , 104 , 103 , 103 , 102 , 102 , 102 , 102 , 101 , 101 , 100 , 101 , 101 , 101 , 101 , 101 , 120 , 120 , 120 , 120 , 142 , 142 , 142 , 142 , 142 , 142 , 142 , 142 , 166 , 166 , 166 , 166 , 166 , 166 , 166 , 166 , &
110 , 110 , 109 , 109 , 108 , 108 , 107 , 107 , 107 , 107 , 106 , 106 , 105 , 105 , 105 , 105 , 104 , 104 , 103 , 103 , 102 , 102 , 102 , 102 , 101 , 101 , 101 , 100 , 101 , 101 , 101 , 101 , 120 , 120 , 120 , 120 , 142 , 142 , 142 , 142 , 142 , 142 , 142 , 142 , 166 , 166 , 166 , 166 , 166 , 166 , 166 , 166 , &
110 , 110 , 109 , 109 , 108 , 108 , 107 , 107 , 107 , 107 , 106 , 106 , 105 , 105 , 105 , 105 , 104 , 104 , 103 , 103 , 102 , 102 , 102 , 102 , 101 , 101 , 101 , 101 , 100 , 101 , 101 , 101 , 120 , 120 , 120 , 120 , 142 , 142 , 142 , 142 , 142 , 142 , 142 , 142 , 166 , 166 , 166 , 166 , 166 , 166 , 166 , 166 , &
110 , 110 , 109 , 109 , 108 , 108 , 107 , 107 , 107 , 107 , 106 , 106 , 105 , 105 , 105 , 105 , 104 , 104 , 103 , 103 , 102 , 102 , 102 , 102 , 101 , 101 , 101 , 101 , 101 , 100 , 101 , 101 , 120 , 120 , 120 , 120 , 142 , 142 , 142 , 142 , 142 , 142 , 142 , 142 , 166 , 166 , 166 , 166 , 166 , 166 , 166 , 166 , &
110 , 110 , 109 , 109 , 108 , 108 , 107 , 107 , 107 , 107 , 106 , 106 , 105 , 105 , 105 , 105 , 104 , 104 , 103 , 103 , 102 , 102 , 102 , 102 , 101 , 101 , 101 , 101 , 101 , 101 , 100 , 101 , 120 , 120 , 120 , 120 , 142 , 142 , 142 , 142 , 142 , 142 , 142 , 142 , 166 , 166 , 166 , 166 , 166 , 166 , 166 , 166 , &
110 , 110 , 109 , 109 , 108 , 108 , 107 , 107 , 107 , 107 , 106 , 106 , 105 , 105 , 105 , 105 , 104 , 104 , 103 , 103 , 102 , 102 , 102 , 102 , 101 , 101 , 101 , 101 , 101 , 101 , 101 , 100 , 120 , 120 , 120 , 120 , 142 , 142 , 142 , 142 , 142 , 142 , 142 , 142 , 166 , 166 , 166 , 166 , 166 , 166 , 166 , 166 , &
!
132 , 132 , 131 , 131 , 130 , 130 , 129 , 129 , 129 , 129 , 128 , 128 , 127 , 127 , 127 , 127 , 126 , 126 , 125 , 125 , 124 , 124 , 124 , 124 , 123 , 123 , 123 , 123 , 123 , 123 , 123 , 123 , 121 , 122 , 122 , 122 , 143 , 143 , 143 , 143 , 143 , 143 , 143 , 143 , 167 , 167 , 167 , 167 , 167 , 167 , 167 , 167 , &
132 , 132 , 131 , 131 , 130 , 130 , 129 , 129 , 129 , 129 , 128 , 128 , 127 , 127 , 127 , 127 , 126 , 126 , 125 , 125 , 124 , 124 , 124 , 124 , 123 , 123 , 123 , 123 , 123 , 123 , 123 , 123 , 121 , 121 , 122 , 122 , 143 , 143 , 143 , 143 , 143 , 143 , 143 , 143 , 167 , 167 , 167 , 167 , 167 , 167 , 167 , 167 , &
132 , 132 , 131 , 131 , 130 , 130 , 129 , 129 , 129 , 129 , 128 , 128 , 127 , 127 , 127 , 127 , 126 , 126 , 125 , 125 , 124 , 124 , 124 , 124 , 123 , 123 , 123 , 123 , 123 , 123 , 123 , 123 , 121 , 122 , 121 , 122 , 143 , 143 , 143 , 143 , 143 , 143 , 143 , 143 , 167 , 167 , 167 , 167 , 167 , 167 , 167 , 167 , &
132 , 132 , 131 , 131 , 130 , 130 , 129 , 129 , 129 , 129 , 128 , 128 , 127 , 127 , 127 , 127 , 126 , 126 , 125 , 125 , 124 , 124 , 124 , 124 , 123 , 123 , 123 , 123 , 123 , 123 , 123 , 123 , 121 , 122 , 122 , 121 , 143 , 143 , 143 , 143 , 143 , 143 , 143 , 143 , 167 , 167 , 167 , 167 , 167 , 167 , 167 , 167 , &
!
156 , 156 , 155 , 155 , 154 , 154 , 153 , 153 , 153 , 153 , 152 , 152 , 151 , 151 , 151 , 151 , 150 , 150 , 149 , 149 , 148 , 148 , 148 , 148 , 147 , 147 , 147 , 147 , 147 , 147 , 147 , 147 , 146 , 146 , 146 , 146 , 144 , 145 , 145 , 145 , 145 , 145 , 145 , 145 , 168 , 168 , 168 , 168 , 168 , 168 , 168 , 168 , &
156 , 156 , 155 , 155 , 154 , 154 , 153 , 153 , 153 , 153 , 152 , 152 , 151 , 151 , 151 , 151 , 150 , 150 , 149 , 149 , 148 , 148 , 148 , 148 , 147 , 147 , 147 , 147 , 147 , 147 , 147 , 147 , 146 , 146 , 146 , 146 , 145 , 144 , 145 , 145 , 145 , 145 , 145 , 145 , 168 , 168 , 168 , 168 , 168 , 168 , 168 , 168 , &
156 , 156 , 155 , 155 , 154 , 154 , 153 , 153 , 153 , 153 , 152 , 152 , 151 , 151 , 151 , 151 , 150 , 150 , 149 , 149 , 148 , 148 , 148 , 148 , 147 , 147 , 147 , 147 , 147 , 147 , 147 , 147 , 146 , 146 , 146 , 146 , 145 , 145 , 144 , 145 , 145 , 145 , 145 , 145 , 168 , 168 , 168 , 168 , 168 , 168 , 168 , 168 , &
156 , 156 , 155 , 155 , 154 , 154 , 153 , 153 , 153 , 153 , 152 , 152 , 151 , 151 , 151 , 151 , 150 , 150 , 149 , 149 , 148 , 148 , 148 , 148 , 147 , 147 , 147 , 147 , 147 , 147 , 147 , 147 , 146 , 146 , 146 , 146 , 145 , 145 , 145 , 144 , 145 , 145 , 145 , 145 , 168 , 168 , 168 , 168 , 168 , 168 , 168 , 168 , &
156 , 156 , 155 , 155 , 154 , 154 , 153 , 153 , 153 , 153 , 152 , 152 , 151 , 151 , 151 , 151 , 150 , 150 , 149 , 149 , 148 , 148 , 148 , 148 , 147 , 147 , 147 , 147 , 147 , 147 , 147 , 147 , 146 , 146 , 146 , 146 , 145 , 145 , 145 , 145 , 144 , 145 , 145 , 145 , 168 , 168 , 168 , 168 , 168 , 168 , 168 , 168 , &
156 , 156 , 155 , 155 , 154 , 154 , 153 , 153 , 153 , 153 , 152 , 152 , 151 , 151 , 151 , 151 , 150 , 150 , 149 , 149 , 148 , 148 , 148 , 148 , 147 , 147 , 147 , 147 , 147 , 147 , 147 , 147 , 146 , 146 , 146 , 146 , 145 , 145 , 145 , 145 , 145 , 144 , 145 , 145 , 168 , 168 , 168 , 168 , 168 , 168 , 168 , 168 , &
156 , 156 , 155 , 155 , 154 , 154 , 153 , 153 , 153 , 153 , 152 , 152 , 151 , 151 , 151 , 151 , 150 , 150 , 149 , 149 , 148 , 148 , 148 , 148 , 147 , 147 , 147 , 147 , 147 , 147 , 147 , 147 , 146 , 146 , 146 , 146 , 145 , 145 , 145 , 145 , 145 , 145 , 144 , 145 , 168 , 168 , 168 , 168 , 168 , 168 , 168 , 168 , &
156 , 156 , 155 , 155 , 154 , 154 , 153 , 153 , 153 , 153 , 152 , 152 , 151 , 151 , 151 , 151 , 150 , 150 , 149 , 149 , 148 , 148 , 148 , 148 , 147 , 147 , 147 , 147 , 147 , 147 , 147 , 147 , 146 , 146 , 146 , 146 , 145 , 145 , 145 , 145 , 145 , 145 , 145 , 144 , 168 , 168 , 168 , 168 , 168 , 168 , 168 , 168 , &
!
182 , 182 , 181 , 181 , 180 , 180 , 179 , 179 , 179 , 179 , 178 , 178 , 177 , 177 , 177 , 177 , 176 , 176 , 175 , 175 , 174 , 174 , 174 , 174 , 173 , 173 , 173 , 173 , 173 , 173 , 173 , 173 , 172 , 172 , 172 , 172 , 171 , 171 , 171 , 171 , 171 , 171 , 171 , 171 , 169 , 170 , 170 , 170 , 170 , 170 , 170 , 170 , &
182 , 182 , 181 , 181 , 180 , 180 , 179 , 179 , 179 , 179 , 178 , 178 , 177 , 177 , 177 , 177 , 176 , 176 , 175 , 175 , 174 , 174 , 174 , 174 , 173 , 173 , 173 , 173 , 173 , 173 , 173 , 173 , 172 , 172 , 172 , 172 , 171 , 171 , 171 , 171 , 171 , 171 , 171 , 171 , 170 , 169 , 170 , 170 , 170 , 170 , 170 , 170 , &
182 , 182 , 181 , 181 , 180 , 180 , 179 , 179 , 179 , 179 , 178 , 178 , 177 , 177 , 177 , 177 , 176 , 176 , 175 , 175 , 174 , 174 , 174 , 174 , 173 , 173 , 173 , 173 , 173 , 173 , 173 , 173 , 172 , 172 , 172 , 172 , 171 , 171 , 171 , 171 , 171 , 171 , 171 , 171 , 170 , 170 , 169 , 170 , 170 , 170 , 170 , 170 , &
182 , 182 , 181 , 181 , 180 , 180 , 179 , 179 , 179 , 179 , 178 , 178 , 177 , 177 , 177 , 177 , 176 , 176 , 175 , 175 , 174 , 174 , 174 , 174 , 173 , 173 , 173 , 173 , 173 , 173 , 173 , 173 , 172 , 172 , 172 , 172 , 171 , 171 , 171 , 171 , 171 , 171 , 171 , 171 , 170 , 170 , 170 , 169 , 170 , 170 , 170 , 170 , &
182 , 182 , 181 , 181 , 180 , 180 , 179 , 179 , 179 , 179 , 178 , 178 , 177 , 177 , 177 , 177 , 176 , 176 , 175 , 175 , 174 , 174 , 174 , 174 , 173 , 173 , 173 , 173 , 173 , 173 , 173 , 173 , 172 , 172 , 172 , 172 , 171 , 171 , 171 , 171 , 171 , 171 , 171 , 171 , 170 , 170 , 170 , 170 , 169 , 170 , 170 , 170 , &
182 , 182 , 181 , 181 , 180 , 180 , 179 , 179 , 179 , 179 , 178 , 178 , 177 , 177 , 177 , 177 , 176 , 176 , 175 , 175 , 174 , 174 , 174 , 174 , 173 , 173 , 173 , 173 , 173 , 173 , 173 , 173 , 172 , 172 , 172 , 172 , 171 , 171 , 171 , 171 , 171 , 171 , 171 , 171 , 169 , 170 , 170 , 170 , 170 , 169 , 170 , 170 , &
182 , 182 , 181 , 181 , 180 , 180 , 179 , 179 , 179 , 179 , 178 , 178 , 177 , 177 , 177 , 177 , 176 , 176 , 175 , 175 , 174 , 174 , 174 , 174 , 173 , 173 , 173 , 173 , 173 , 173 , 173 , 173 , 172 , 172 , 172 , 172 , 171 , 171 , 171 , 171 , 171 , 171 , 171 , 171 , 169 , 170 , 170 , 170 , 170 , 170 , 169 , 170 , &
182 , 182 , 181 , 181 , 180 , 180 , 179 , 179 , 179 , 179 , 178 , 178 , 177 , 177 , 177 , 177 , 176 , 176 , 175 , 175 , 174 , 174 , 174 , 174 , 173 , 173 , 173 , 173 , 173 , 173 , 173 , 173 , 172 , 172 , 172 , 172 , 171 , 171 , 171 , 171 , 171 , 171 , 171 , 171 , 169 , 170 , 170 , 170 , 170 , 170 , 170 , 169 &
2016-04-26 23:53:05 +05:30
] , pInt ) , [ lattice_bct_Nslip , lattice_bct_Nslip ] , order = [ 2 , 1 ] )
2015-06-27 20:25:30 +05:30
2018-12-22 12:19:52 +05:30
2014-10-28 23:35:51 +05:30
!--------------------------------------------------------------------------------------------------
! isotropic
integer ( pInt ) , dimension ( LATTICE_maxNcleavageFamily ) , parameter , public :: &
2018-07-30 00:33:14 +05:30
LATTICE_iso_NcleavageSystem = int ( [ 3 , 0 , 0 ] , pInt ) !< # of cleavage systems per family for iso
2016-04-26 23:53:05 +05:30
2014-10-28 23:35:51 +05:30
integer ( pInt ) , parameter , private :: &
2018-07-30 00:33:14 +05:30
LATTICE_iso_Ncleavage = sum ( lattice_iso_NcleavageSystem ) !< total # of cleavage systems for iso
2014-10-28 23:35:51 +05:30
real ( pReal ) , dimension ( 3 + 3 , LATTICE_iso_Ncleavage ) , parameter , private :: &
LATTICE_iso_systemCleavage = reshape ( real ( [ &
! Cleavage direction Plane normal
2014-11-01 00:07:37 +05:30
0 , 1 , 0 , 1 , 0 , 0 , &
0 , 0 , 1 , 0 , 1 , 0 , &
1 , 0 , 0 , 0 , 0 , 1 &
2014-10-28 23:35:51 +05:30
] , pReal ) , [ 3_pInt + 3_pInt , LATTICE_iso_Ncleavage ] )
2018-12-22 12:19:52 +05:30
2014-10-28 23:35:51 +05:30
!--------------------------------------------------------------------------------------------------
! orthorhombic
integer ( pInt ) , dimension ( LATTICE_maxNcleavageFamily ) , parameter , public :: &
2018-12-22 12:19:52 +05:30
LATTICE_ort_NcleavageSystem = int ( [ 1 , 1 , 1 ] , pInt ) !< # of cleavage systems per family for ortho
2016-04-26 23:53:05 +05:30
2014-10-28 23:35:51 +05:30
integer ( pInt ) , parameter , private :: &
2018-12-22 12:19:52 +05:30
LATTICE_ort_Ncleavage = sum ( lattice_ort_NcleavageSystem ) !< total # of cleavage systems for ortho
2014-10-28 23:35:51 +05:30
2018-12-11 12:33:40 +05:30
real ( pReal ) , dimension ( 3 + 3 , LATTICE_ort_Ncleavage ) , parameter , private :: &
LATTICE_ort_systemCleavage = reshape ( real ( [ &
2014-10-28 23:35:51 +05:30
! Cleavage direction Plane normal
2014-11-01 00:07:37 +05:30
0 , 1 , 0 , 1 , 0 , 0 , &
0 , 0 , 1 , 0 , 1 , 0 , &
1 , 0 , 0 , 0 , 0 , 1 &
2018-12-11 12:33:40 +05:30
] , pReal ) , [ 3_pInt + 3_pInt , LATTICE_ort_Ncleavage ] )
2014-10-28 23:35:51 +05:30
2018-10-03 12:47:06 +05:30
! BEGIN DEPRECATED
2016-04-26 13:05:42 +05:30
integer ( pInt ) , parameter , public :: &
2018-12-12 03:41:59 +05:30
LATTICE_maxNslip = max ( LATTICE_FCC_NSLIP , LATTICE_BCC_NSLIP , LATTICE_HEX_NSLIP , &
2018-12-10 13:03:20 +05:30
LATTICE_bct_Nslip ) , & !< max # of slip systems over lattice structures
LATTICE_maxNnonSchmid = LATTICE_bcc_NnonSchmid , & !< max # of non-Schmid contributions over lattice structures
2018-08-03 12:12:26 +05:30
LATTICE_maxNcleavage = max ( LATTICE_fcc_Ncleavage , LATTICE_bcc_Ncleavage , &
2018-12-10 13:03:20 +05:30
LATTICE_hex_Ncleavage , &
2018-12-22 12:19:52 +05:30
LATTICE_iso_Ncleavage , LATTICE_ort_Ncleavage ) , & !< max # of cleavage systems over lattice structures
2018-08-03 12:12:26 +05:30
LATTICE_maxNinteraction = 182_pInt
2018-10-03 12:47:06 +05:30
!END DEPRECATED
2019-01-06 12:47:23 +05:30
2016-03-25 15:33:56 +05:30
real ( pReal ) , dimension ( : , : , : ) , allocatable , public , protected :: &
2018-09-14 11:49:39 +05:30
lattice_C66
2016-04-25 19:25:50 +05:30
real ( pReal ) , dimension ( : , : , : , : , : ) , allocatable , public , protected :: &
2018-12-22 12:19:52 +05:30
lattice_C3333
2016-04-25 19:25:50 +05:30
real ( pReal ) , dimension ( : ) , allocatable , public , protected :: &
2018-09-12 19:27:54 +05:30
lattice_mu , lattice_nu
2018-12-11 05:09:50 +05:30
! SHOULD NOT BE PART OF LATTICE BEGIN
2018-02-26 00:44:03 +05:30
real ( pReal ) , dimension ( : , : , : , : ) , allocatable , public , protected :: & ! with higher-order parameters (e.g. temperature-dependent)
lattice_thermalExpansion33
2016-04-25 19:25:50 +05:30
real ( pReal ) , dimension ( : , : , : ) , allocatable , public , protected :: &
2014-08-14 17:51:51 +05:30
lattice_thermalConductivity33 , &
2019-01-06 12:47:23 +05:30
lattice_damageDiffusion33
2016-04-25 19:25:50 +05:30
real ( pReal ) , dimension ( : ) , allocatable , public , protected :: &
2014-09-10 14:07:12 +05:30
lattice_damageMobility , &
lattice_massDensity , &
lattice_specificHeat , &
2019-01-06 12:47:23 +05:30
lattice_referenceTemperature
2018-12-10 13:03:20 +05:30
! SHOULD NOT BE PART OF LATTICE END
2018-12-11 05:09:50 +05:30
2014-08-14 17:51:51 +05:30
enum , bind ( c )
enumerator :: LATTICE_undefined_ID , &
LATTICE_iso_ID , &
LATTICE_fcc_ID , &
LATTICE_bcc_ID , &
LATTICE_hex_ID , &
2015-06-27 20:25:30 +05:30
LATTICE_bct_ID , &
2014-08-14 17:51:51 +05:30
LATTICE_ort_ID
end enum
integer ( kind ( LATTICE_undefined_ID ) ) , dimension ( : ) , allocatable , public , protected :: &
2015-06-11 13:53:27 +05:30
lattice_structure , trans_lattice_structure
2014-08-14 17:51:51 +05:30
public :: &
lattice_init , &
lattice_qDisorientation , &
LATTICE_fcc_ID , &
LATTICE_bcc_ID , &
2015-06-27 20:25:30 +05:30
LATTICE_bct_ID , &
2018-10-02 02:18:14 +05:30
LATTICE_hex_ID , &
lattice_SchmidMatrix_slip , &
2018-10-02 02:32:31 +05:30
lattice_SchmidMatrix_twin , &
2018-12-22 12:19:52 +05:30
lattice_SchmidMatrix_trans , &
lattice_SchmidMatrix_cleavage , &
2018-10-05 00:48:13 +05:30
lattice_nonSchmidMatrix , &
2018-10-07 22:10:02 +05:30
lattice_interaction_SlipSlip , &
lattice_interaction_TwinTwin , &
2018-12-11 05:09:50 +05:30
lattice_interaction_TransTrans , &
2018-10-07 22:10:02 +05:30
lattice_interaction_SlipTwin , &
2018-12-11 05:09:50 +05:30
lattice_interaction_SlipTrans , &
2018-10-07 22:10:02 +05:30
lattice_interaction_TwinSlip , &
2018-12-12 03:30:56 +05:30
lattice_forestProjection , &
2018-12-10 10:22:36 +05:30
lattice_characteristicShear_Twin , &
2018-12-22 04:49:51 +05:30
lattice_C66_twin , &
lattice_C66_trans
2014-08-14 17:51:51 +05:30
contains
!--------------------------------------------------------------------------------------------------
!> @brief Module initialization
!--------------------------------------------------------------------------------------------------
subroutine lattice_init
2018-02-02 17:06:09 +05:30
#if defined(__GFORTRAN__) || __INTEL_COMPILER >= 1800
2017-10-05 20:05:34 +05:30
use , intrinsic :: iso_fortran_env , only : &
compiler_version , &
compiler_options
#endif
2014-08-14 17:51:51 +05:30
use IO , only : &
IO_error , &
2018-07-20 17:43:13 +05:30
IO_timeStamp
2018-06-14 10:09:49 +05:30
use config , only : &
2018-07-20 17:43:13 +05:30
config_phase
2016-04-26 23:53:05 +05:30
2014-08-14 17:51:51 +05:30
implicit none
integer ( pInt ) :: Nphases
character ( len = 65536 ) :: &
2018-07-20 17:43:13 +05:30
tag = ''
2018-08-25 19:20:43 +05:30
integer ( pInt ) :: i , p
2014-08-14 17:51:51 +05:30
real ( pReal ) , dimension ( : ) , allocatable :: &
2018-08-03 11:39:28 +05:30
temp , &
2018-12-22 12:19:52 +05:30
CoverA !< c/a ratio for low symmetry type lattice
2014-08-14 17:51:51 +05:30
2017-02-09 00:34:47 +05:30
write ( 6 , '(/,a)' ) ' <<<+- lattice init -+>>>'
write ( 6 , '(a15,a)' ) ' Current time: ' , IO_timeStamp ( )
2014-08-14 17:51:51 +05:30
#include "compilation_info.f90"
2018-07-20 17:43:13 +05:30
Nphases = size ( config_phase )
2016-04-26 23:53:05 +05:30
2014-08-14 17:51:51 +05:30
allocate ( lattice_structure ( Nphases ) , source = LATTICE_undefined_ID )
2015-06-11 13:53:27 +05:30
allocate ( trans_lattice_structure ( Nphases ) , source = LATTICE_undefined_ID )
2014-08-14 17:51:51 +05:30
allocate ( lattice_C66 ( 6 , 6 , Nphases ) , source = 0.0_pReal )
allocate ( lattice_C3333 ( 3 , 3 , 3 , 3 , Nphases ) , source = 0.0_pReal )
2018-12-22 12:19:52 +05:30
2018-02-26 00:44:03 +05:30
allocate ( lattice_thermalExpansion33 ( 3 , 3 , 3 , Nphases ) , source = 0.0_pReal ) ! constant, linear, quadratic coefficients
2015-05-28 22:32:23 +05:30
allocate ( lattice_thermalConductivity33 ( 3 , 3 , Nphases ) , source = 0.0_pReal )
allocate ( lattice_damageDiffusion33 ( 3 , 3 , Nphases ) , source = 0.0_pReal )
allocate ( lattice_damageMobility ( Nphases ) , source = 0.0_pReal )
allocate ( lattice_massDensity ( Nphases ) , source = 0.0_pReal )
allocate ( lattice_specificHeat ( Nphases ) , source = 0.0_pReal )
2015-07-24 20:17:18 +05:30
allocate ( lattice_referenceTemperature ( Nphases ) , source = 30 0.0_pReal )
2014-08-14 17:51:51 +05:30
allocate ( lattice_mu ( Nphases ) , source = 0.0_pReal )
allocate ( lattice_nu ( Nphases ) , source = 0.0_pReal )
allocate ( lattice_NnonSchmid ( Nphases ) , source = 0_pInt )
allocate ( lattice_Sslip ( 3 , 3 , 1 + 2 * lattice_maxNnonSchmid , lattice_maxNslip , Nphases ) , source = 0.0_pReal )
allocate ( lattice_Sslip_v ( 6 , 1 + 2 * lattice_maxNnonSchmid , lattice_maxNslip , Nphases ) , source = 0.0_pReal )
2018-12-11 06:17:13 +05:30
allocate ( lattice_NslipSystem ( lattice_maxNslipFamily , Nphases ) , source = 0_pInt )
allocate ( lattice_interactionSlipSlip ( lattice_maxNslip , lattice_maxNslip , Nphases ) , source = 0_pInt ) ! other:me
2014-10-28 23:35:51 +05:30
allocate ( lattice_Scleavage ( 3 , 3 , 3 , lattice_maxNslip , Nphases ) , source = 0.0_pReal )
allocate ( lattice_Scleavage_v ( 6 , 3 , lattice_maxNslip , Nphases ) , source = 0.0_pReal )
2018-12-11 06:17:13 +05:30
allocate ( lattice_NcleavageSystem ( lattice_maxNcleavageFamily , Nphases ) , source = 0_pInt )
2014-08-14 17:51:51 +05:30
allocate ( CoverA ( Nphases ) , source = 0.0_pReal )
2018-12-22 12:19:52 +05:30
2018-08-25 20:59:20 +05:30
allocate ( lattice_sd ( 3 , lattice_maxNslip , Nphases ) , source = 0.0_pReal )
allocate ( lattice_st ( 3 , lattice_maxNslip , Nphases ) , source = 0.0_pReal )
allocate ( lattice_sn ( 3 , lattice_maxNslip , Nphases ) , source = 0.0_pReal )
2018-07-30 00:33:14 +05:30
do p = 1 , size ( config_phase )
tag = config_phase ( p ) % getString ( 'lattice_structure' )
select case ( trim ( tag ) )
case ( 'iso' , 'isotropic' )
lattice_structure ( p ) = LATTICE_iso_ID
case ( 'fcc' )
lattice_structure ( p ) = LATTICE_fcc_ID
case ( 'bcc' )
lattice_structure ( p ) = LATTICE_bcc_ID
case ( 'hex' , 'hexagonal' )
lattice_structure ( p ) = LATTICE_hex_ID
case ( 'bct' )
lattice_structure ( p ) = LATTICE_bct_ID
case ( 'ort' , 'orthorhombic' )
lattice_structure ( p ) = LATTICE_ort_ID
end select
2018-07-20 17:43:13 +05:30
2018-07-30 15:15:16 +05:30
tag = 'undefined'
tag = config_phase ( p ) % getString ( 'trans_lattice_structure' , defaultVal = tag )
select case ( trim ( tag ) )
case ( 'bcc' )
2018-08-25 19:20:43 +05:30
trans_lattice_structure ( p ) = LATTICE_bcc_ID
2018-07-30 15:15:16 +05:30
case ( 'hex' , 'hexagonal' )
2018-08-25 19:20:43 +05:30
trans_lattice_structure ( p ) = LATTICE_hex_ID
2018-07-30 15:15:16 +05:30
end select
2018-07-20 17:43:13 +05:30
2018-07-30 00:33:14 +05:30
lattice_C66 ( 1 , 1 , p ) = config_phase ( p ) % getFloat ( 'c11' , defaultVal = 0.0_pReal )
lattice_C66 ( 1 , 2 , p ) = config_phase ( p ) % getFloat ( 'c12' , defaultVal = 0.0_pReal )
lattice_C66 ( 1 , 3 , p ) = config_phase ( p ) % getFloat ( 'c13' , defaultVal = 0.0_pReal )
2018-08-18 01:13:09 +05:30
lattice_C66 ( 2 , 2 , p ) = config_phase ( p ) % getFloat ( 'c22' , defaultVal = 0.0_pReal )
2018-07-30 00:33:14 +05:30
lattice_C66 ( 2 , 3 , p ) = config_phase ( p ) % getFloat ( 'c23' , defaultVal = 0.0_pReal )
lattice_C66 ( 3 , 3 , p ) = config_phase ( p ) % getFloat ( 'c33' , defaultVal = 0.0_pReal )
lattice_C66 ( 4 , 4 , p ) = config_phase ( p ) % getFloat ( 'c44' , defaultVal = 0.0_pReal )
lattice_C66 ( 5 , 5 , p ) = config_phase ( p ) % getFloat ( 'c55' , defaultVal = 0.0_pReal )
lattice_C66 ( 6 , 6 , p ) = config_phase ( p ) % getFloat ( 'c66' , defaultVal = 0.0_pReal )
CoverA ( p ) = config_phase ( p ) % getFloat ( 'c/a' , defaultVal = 0.0_pReal )
2018-07-20 17:43:13 +05:30
2018-08-05 02:23:56 +05:30
lattice_thermalConductivity33 ( 1 , 1 , p ) = config_phase ( p ) % getFloat ( 'thermal_conductivity11' , defaultVal = 0.0_pReal )
lattice_thermalConductivity33 ( 2 , 2 , p ) = config_phase ( p ) % getFloat ( 'thermal_conductivity22' , defaultVal = 0.0_pReal )
lattice_thermalConductivity33 ( 3 , 3 , p ) = config_phase ( p ) % getFloat ( 'thermal_conductivity33' , defaultVal = 0.0_pReal )
2018-07-30 15:15:16 +05:30
2018-08-05 02:23:56 +05:30
temp = config_phase ( p ) % getFloats ( 'thermal_expansion11' , defaultVal = [ 0.0_pReal ] ) ! read up to three parameters (constant, linear, quadratic with T)
2018-08-03 11:39:28 +05:30
lattice_thermalExpansion33 ( 1 , 1 , 1 : size ( temp ) , p ) = temp
2018-08-05 02:23:56 +05:30
temp = config_phase ( p ) % getFloats ( 'thermal_expansion22' , defaultVal = [ 0.0_pReal ] ) ! read up to three parameters (constant, linear, quadratic with T)
2018-08-03 11:39:28 +05:30
lattice_thermalExpansion33 ( 2 , 2 , 1 : size ( temp ) , p ) = temp
2018-08-05 02:23:56 +05:30
temp = config_phase ( p ) % getFloats ( 'thermal_expansion33' , defaultVal = [ 0.0_pReal ] ) ! read up to three parameters (constant, linear, quadratic with T)
2018-08-03 11:39:28 +05:30
lattice_thermalExpansion33 ( 3 , 3 , 1 : size ( temp ) , p ) = temp
2016-04-26 23:53:05 +05:30
2018-07-30 00:33:14 +05:30
lattice_specificHeat ( p ) = config_phase ( p ) % getFloat ( 'specific_heat' , defaultVal = 0.0_pReal )
lattice_massDensity ( p ) = config_phase ( p ) % getFloat ( 'mass_density' , defaultVal = 0.0_pReal )
lattice_referenceTemperature ( p ) = config_phase ( p ) % getFloat ( 'reference_temperature' , defaultVal = 0.0_pReal )
lattice_DamageDiffusion33 ( 1 , 1 , p ) = config_phase ( p ) % getFloat ( 'damage_diffusion11' , defaultVal = 0.0_pReal )
lattice_DamageDiffusion33 ( 2 , 2 , p ) = config_phase ( p ) % getFloat ( 'damage_diffusion22' , defaultVal = 0.0_pReal )
lattice_DamageDiffusion33 ( 3 , 3 , p ) = config_phase ( p ) % getFloat ( 'damage_diffusion33' , defaultVal = 0.0_pReal )
lattice_DamageMobility ( p ) = config_phase ( p ) % getFloat ( 'damage_mobility' , defaultVal = 0.0_pReal )
2018-07-20 17:43:13 +05:30
enddo
2018-07-30 00:33:14 +05:30
2014-08-14 17:51:51 +05:30
do i = 1_pInt , Nphases
if ( ( CoverA ( i ) < 1.0_pReal . or . CoverA ( i ) > 2.0_pReal ) &
2014-12-03 06:12:35 +05:30
. and . lattice_structure ( i ) == LATTICE_hex_ID ) call IO_error ( 131_pInt , el = i ) ! checking physical significance of c/a
2015-06-27 20:25:30 +05:30
if ( ( CoverA ( i ) > 2.0_pReal ) &
. and . lattice_structure ( i ) == LATTICE_bct_ID ) call IO_error ( 131_pInt , el = i ) ! checking physical significance of c/a
2018-12-22 12:19:52 +05:30
call lattice_initializeStructure ( i , CoverA ( i ) )
2014-08-14 17:51:51 +05:30
enddo
end subroutine lattice_init
2018-12-11 05:09:50 +05:30
!--------------------------------------------------------------------------------------------------
2018-12-12 03:30:56 +05:30
!> @brief !!!!!!!DEPRECTATED!!!!!!
2014-08-14 17:51:51 +05:30
!--------------------------------------------------------------------------------------------------
2018-12-22 12:19:52 +05:30
subroutine lattice_initializeStructure ( myPhase , CoverA )
2014-08-14 17:51:51 +05:30
use prec , only : &
tol_math_check
use math , only : &
2016-01-10 19:04:26 +05:30
math_crossproduct , &
math_tensorproduct33 , &
2014-08-29 18:33:48 +05:30
math_mul33x33 , &
2014-08-14 17:51:51 +05:30
math_mul33x3 , &
math_trace33 , &
math_symmetric33 , &
math_Mandel33to6 , &
math_Mandel3333to66 , &
math_Voigt66to3333 , &
math_axisAngleToR , &
2015-06-22 13:40:20 +05:30
INRAD , &
MATH_I3
2014-08-14 17:51:51 +05:30
use IO , only : &
2014-11-26 15:46:30 +05:30
IO_error , &
IO_warning
2016-04-26 23:53:05 +05:30
2014-08-14 17:51:51 +05:30
implicit none
integer ( pInt ) , intent ( in ) :: myPhase
real ( pReal ) , intent ( in ) :: &
2018-12-22 12:19:52 +05:30
CoverA
2014-08-14 17:51:51 +05:30
real ( pReal ) , dimension ( 3 ) :: &
sdU , snU , &
np , nn
real ( pReal ) , dimension ( 3 , lattice_maxNslip ) :: &
sd , sn
real ( pReal ) , dimension ( 3 , 3 , 2 , lattice_maxNnonSchmid , lattice_maxNslip ) :: &
sns
integer ( pInt ) :: &
2018-12-22 12:19:52 +05:30
j , i , &
myNslip , myNcleavage
2014-08-14 17:51:51 +05:30
lattice_C66 ( 1 : 6 , 1 : 6 , myPhase ) = lattice_symmetrizeC66 ( lattice_structure ( myPhase ) , &
lattice_C66 ( 1 : 6 , 1 : 6 , myPhase ) )
2016-04-26 23:53:05 +05:30
2014-08-14 17:51:51 +05:30
lattice_mu ( myPhase ) = 0.2_pReal * ( lattice_C66 ( 1 , 1 , myPhase ) &
- lattice_C66 ( 1 , 2 , myPhase ) &
2015-04-18 20:52:15 +05:30
+ 3.0_pReal * lattice_C66 ( 4 , 4 , myPhase ) ) ! (C11iso-C12iso)/2 with C11iso=(3*C11+2*C12+4*C44)/5 and C12iso=(C11+4*C12-2*C44)/5
2014-08-14 17:51:51 +05:30
lattice_nu ( myPhase ) = ( lattice_C66 ( 1 , 1 , myPhase ) &
+ 4.0_pReal * lattice_C66 ( 1 , 2 , myPhase ) &
- 2.0_pReal * lattice_C66 ( 4 , 4 , myPhase ) ) &
/ ( 4.0_pReal * lattice_C66 ( 1 , 1 , myPhase ) &
+ 6.0_pReal * lattice_C66 ( 1 , 2 , myPhase ) &
+ 2.0_pReal * lattice_C66 ( 4 , 4 , myPhase ) ) ! C12iso/(C11iso+C12iso) with C11iso=(3*C11+2*C12+4*C44)/5 and C12iso=(C11+4*C12-2*C44)/5
lattice_C3333 ( 1 : 3 , 1 : 3 , 1 : 3 , 1 : 3 , myPhase ) = math_Voigt66to3333 ( lattice_C66 ( 1 : 6 , 1 : 6 , myPhase ) ) ! Literature data is Voigt
lattice_C66 ( 1 : 6 , 1 : 6 , myPhase ) = math_Mandel3333to66 ( lattice_C3333 ( 1 : 3 , 1 : 3 , 1 : 3 , 1 : 3 , myPhase ) ) ! DAMASK uses Mandel
do i = 1_pInt , 6_pInt
2015-04-18 20:52:15 +05:30
if ( abs ( lattice_C66 ( i , i , myPhase ) ) < tol_math_check ) &
call IO_error ( 135_pInt , el = i , ip = myPhase , ext_msg = 'matrix diagonal "el"ement of phase "ip"' )
2014-08-14 17:51:51 +05:30
enddo
2015-07-08 17:28:52 +05:30
2018-02-26 00:44:03 +05:30
forall ( i = 1_pInt : 3_pInt ) &
lattice_thermalExpansion33 ( 1 : 3 , 1 : 3 , i , myPhase ) = lattice_symmetrize33 ( lattice_structure ( myPhase ) , &
lattice_thermalExpansion33 ( 1 : 3 , 1 : 3 , i , myPhase ) )
lattice_thermalConductivity33 ( 1 : 3 , 1 : 3 , myPhase ) = lattice_symmetrize33 ( lattice_structure ( myPhase ) , &
lattice_thermalConductivity33 ( 1 : 3 , 1 : 3 , myPhase ) )
lattice_DamageDiffusion33 ( 1 : 3 , 1 : 3 , myPhase ) = lattice_symmetrize33 ( lattice_structure ( myPhase ) , &
lattice_DamageDiffusion33 ( 1 : 3 , 1 : 3 , myPhase ) )
2018-12-11 12:33:40 +05:30
myNslip = 0_pInt
myNcleavage = 0_pInt
2016-04-26 23:53:05 +05:30
2014-08-14 17:51:51 +05:30
select case ( lattice_structure ( myPhase ) )
!--------------------------------------------------------------------------------------------------
! fcc
case ( LATTICE_fcc_ID )
2018-12-11 12:33:40 +05:30
myNslip = LATTICE_FCC_NSLIP
2014-10-28 23:35:51 +05:30
myNcleavage = lattice_fcc_Ncleavage
2018-12-11 12:33:40 +05:30
lattice_NslipSystem ( 1 : lattice_maxNslipFamily , myPhase ) = lattice_fcc_NslipSystem
lattice_NcleavageSystem ( 1 : lattice_maxNcleavageFamily , myPhase ) = lattice_fcc_NcleavageSystem
lattice_interactionSlipSlip ( 1 : myNslip , 1 : myNslip , myPhase ) = lattice_fcc_interactionSlipSlip
lattice_Scleavage ( 1 : 3 , 1 : 3 , 1 : 3 , 1 : myNcleavage , myPhase ) = &
lattice_SchmidMatrix_cleavage ( lattice_fcc_ncleavageSystem , 'fcc' , covera )
do i = 1_pInt , myNslip
2014-08-14 17:51:51 +05:30
sd ( 1 : 3 , i ) = lattice_fcc_systemSlip ( 1 : 3 , i )
sn ( 1 : 3 , i ) = lattice_fcc_systemSlip ( 4 : 6 , i )
2016-04-26 23:53:05 +05:30
enddo
2014-08-29 18:33:48 +05:30
2014-08-14 17:51:51 +05:30
!--------------------------------------------------------------------------------------------------
! bcc
case ( LATTICE_bcc_ID )
2018-12-11 12:33:40 +05:30
myNslip = LATTICE_BCC_NSLIP
2014-10-28 23:35:51 +05:30
myNcleavage = lattice_bcc_Ncleavage
2018-12-11 12:33:40 +05:30
lattice_NslipSystem ( 1 : lattice_maxNslipFamily , myPhase ) = lattice_bcc_NslipSystem
lattice_NcleavageSystem ( 1 : lattice_maxNcleavageFamily , myPhase ) = lattice_bcc_NcleavageSystem
lattice_NnonSchmid ( myPhase ) = lattice_bcc_NnonSchmid
lattice_interactionSlipSlip ( 1 : myNslip , 1 : myNslip , myPhase ) = lattice_bcc_interactionSlipSlip
lattice_Scleavage ( 1 : 3 , 1 : 3 , 1 : 3 , 1 : myNcleavage , myPhase ) = &
lattice_SchmidMatrix_cleavage ( lattice_bcc_ncleavagesystem , 'bcc' , covera )
2014-08-14 17:51:51 +05:30
do i = 1_pInt , myNslip ! assign slip system vectors
sd ( 1 : 3 , i ) = lattice_bcc_systemSlip ( 1 : 3 , i )
sn ( 1 : 3 , i ) = lattice_bcc_systemSlip ( 4 : 6 , i )
2016-01-10 19:04:26 +05:30
sdU = sd ( 1 : 3 , i ) / norm2 ( sd ( 1 : 3 , i ) )
snU = sn ( 1 : 3 , i ) / norm2 ( sn ( 1 : 3 , i ) )
2014-08-14 17:51:51 +05:30
! "np" and "nn" according to Gröger_etal2008, Acta Materialia 56 (2008) 5412– 5425, table 1 (corresponds to their "n1" for positive and negative slip direction respectively)
np = math_mul33x3 ( math_axisAngleToR ( sdU , 6 0.0_pReal * INRAD ) , snU )
nn = math_mul33x3 ( math_axisAngleToR ( - sdU , 6 0.0_pReal * INRAD ) , snU )
! Schmid matrices with non-Schmid contributions according to Koester_etal2012, Acta Materialia 60 (2012) 3894– 3901, eq. (17) ("n1" is replaced by either "np" or "nn" according to either positive or negative slip direction)
2016-01-10 19:04:26 +05:30
sns ( 1 : 3 , 1 : 3 , 1 , 1 , i ) = math_tensorproduct33 ( sdU , np )
sns ( 1 : 3 , 1 : 3 , 2 , 1 , i ) = math_tensorproduct33 ( - sdU , nn )
sns ( 1 : 3 , 1 : 3 , 1 , 2 , i ) = math_tensorproduct33 ( math_crossproduct ( snU , sdU ) , snU )
sns ( 1 : 3 , 1 : 3 , 2 , 2 , i ) = math_tensorproduct33 ( math_crossproduct ( snU , - sdU ) , snU )
sns ( 1 : 3 , 1 : 3 , 1 , 3 , i ) = math_tensorproduct33 ( math_crossproduct ( np , sdU ) , np )
sns ( 1 : 3 , 1 : 3 , 2 , 3 , i ) = math_tensorproduct33 ( math_crossproduct ( nn , - sdU ) , nn )
sns ( 1 : 3 , 1 : 3 , 1 , 4 , i ) = math_tensorproduct33 ( snU , snU )
sns ( 1 : 3 , 1 : 3 , 2 , 4 , i ) = math_tensorproduct33 ( snU , snU )
sns ( 1 : 3 , 1 : 3 , 1 , 5 , i ) = math_tensorproduct33 ( math_crossproduct ( snU , sdU ) , math_crossproduct ( snU , sdU ) )
sns ( 1 : 3 , 1 : 3 , 2 , 5 , i ) = math_tensorproduct33 ( math_crossproduct ( snU , - sdU ) , math_crossproduct ( snU , - sdU ) )
sns ( 1 : 3 , 1 : 3 , 1 , 6 , i ) = math_tensorproduct33 ( sdU , sdU )
sns ( 1 : 3 , 1 : 3 , 2 , 6 , i ) = math_tensorproduct33 ( - sdU , - sdU )
2014-08-14 17:51:51 +05:30
enddo
2016-04-26 23:53:05 +05:30
2014-08-14 17:51:51 +05:30
!--------------------------------------------------------------------------------------------------
! hex (including conversion from miller-bravais (a1=a2=a3=c) to miller (a, b, c) indices)
case ( LATTICE_hex_ID )
2018-12-12 03:41:59 +05:30
myNslip = LATTICE_HEX_NSLIP
2014-10-28 23:35:51 +05:30
myNcleavage = lattice_hex_Ncleavage
2018-12-12 03:41:59 +05:30
lattice_NslipSystem ( 1 : lattice_maxNslipFamily , myPhase ) = LATTICE_HEX_NSLIPSystem
2018-12-11 12:33:40 +05:30
lattice_NcleavageSystem ( 1 : lattice_maxNcleavageFamily , myPhase ) = lattice_hex_NcleavageSystem
lattice_interactionSlipSlip ( 1 : myNslip , 1 : myNslip , myPhase ) = lattice_hex_interactionSlipSlip
lattice_Scleavage ( 1 : 3 , 1 : 3 , 1 : 3 , 1 : myNcleavage , myPhase ) = &
2018-12-12 03:30:56 +05:30
lattice_SchmidMatrix_cleavage ( lattice_hex_ncleavagesystem , 'hex' , covera )
2018-12-11 12:33:40 +05:30
2016-04-26 23:53:05 +05:30
do i = 1_pInt , myNslip ! assign slip system vectors
2014-08-14 17:51:51 +05:30
sd ( 1 , i ) = lattice_hex_systemSlip ( 1 , i ) * 1.5_pReal ! direction [uvtw]->[3u/2 (u+2v)*sqrt(3)/2 w*(c/a)]
sd ( 2 , i ) = ( lattice_hex_systemSlip ( 1 , i ) + 2.0_pReal * lattice_hex_systemSlip ( 2 , i ) ) * &
0.5_pReal * sqrt ( 3.0_pReal )
sd ( 3 , i ) = lattice_hex_systemSlip ( 4 , i ) * CoverA
sn ( 1 , i ) = lattice_hex_systemSlip ( 5 , i ) ! plane (hkil)->(h (h+2k)/sqrt(3) l/(c/a))
sn ( 2 , i ) = ( lattice_hex_systemSlip ( 5 , i ) + 2.0_pReal * lattice_hex_systemSlip ( 6 , i ) ) / sqrt ( 3.0_pReal )
sn ( 3 , i ) = lattice_hex_systemSlip ( 8 , i ) / CoverA
2016-04-26 23:53:05 +05:30
enddo
2014-08-14 17:51:51 +05:30
2015-06-27 20:25:30 +05:30
!--------------------------------------------------------------------------------------------------
! bct
case ( LATTICE_bct_ID )
myNslip = lattice_bct_Nslip
2018-12-11 12:33:40 +05:30
lattice_NslipSystem ( 1 : lattice_maxNslipFamily , myPhase ) = lattice_bct_NslipSystem
lattice_interactionSlipSlip ( 1 : myNslip , 1 : myNslip , myPhase ) = lattice_bct_interactionSlipSlip
2015-06-27 20:25:30 +05:30
do i = 1_pInt , myNslip ! assign slip system vectors
sd ( 1 : 2 , i ) = lattice_bct_systemSlip ( 1 : 2 , i )
sd ( 3 , i ) = lattice_bct_systemSlip ( 3 , i ) * CoverA
sn ( 1 : 2 , i ) = lattice_bct_systemSlip ( 4 : 5 , i )
sn ( 3 , i ) = lattice_bct_systemSlip ( 6 , i ) / CoverA
2016-01-10 19:04:26 +05:30
sdU = sd ( 1 : 3 , i ) / norm2 ( sd ( 1 : 3 , i ) )
snU = sn ( 1 : 3 , i ) / norm2 ( sn ( 1 : 3 , i ) )
2015-06-27 20:25:30 +05:30
enddo
2014-08-14 17:51:51 +05:30
!--------------------------------------------------------------------------------------------------
2014-11-03 21:11:05 +05:30
! orthorhombic (no crystal plasticity)
2014-10-28 23:35:51 +05:30
case ( LATTICE_ort_ID )
2018-12-11 12:33:40 +05:30
myNcleavage = lattice_ort_Ncleavage
lattice_NcleavageSystem ( 1 : lattice_maxNcleavageFamily , myPhase ) = lattice_ort_NcleavageSystem
lattice_Scleavage ( 1 : 3 , 1 : 3 , 1 : 3 , 1 : myNcleavage , myPhase ) = &
lattice_SchmidMatrix_cleavage ( lattice_ort_NcleavageSystem , 'ort' , covera )
2014-10-28 23:35:51 +05:30
!--------------------------------------------------------------------------------------------------
! isotropic (no crystal plasticity)
case ( LATTICE_iso_ID )
myNcleavage = lattice_iso_Ncleavage
lattice_NcleavageSystem ( 1 : lattice_maxNcleavageFamily , myPhase ) = lattice_iso_NcleavageSystem
2014-08-14 17:51:51 +05:30
2018-12-11 12:33:40 +05:30
lattice_Scleavage ( 1 : 3 , 1 : 3 , 1 : 3 , 1 : myNcleavage , myPhase ) = &
lattice_SchmidMatrix_cleavage ( lattice_iso_NcleavageSystem , 'iso' , covera )
2014-08-14 17:51:51 +05:30
!--------------------------------------------------------------------------------------------------
! something went wrong
case default
2014-12-03 06:12:35 +05:30
call IO_error ( 130_pInt , ext_msg = 'lattice_initializeStructure' )
2014-08-14 17:51:51 +05:30
end select
do i = 1_pInt , myNslip ! store slip system vectors and Schmid matrix for my structure
2016-01-10 19:04:26 +05:30
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_st ( 1 : 3 , i , myPhase ) = math_crossproduct ( lattice_sd ( 1 : 3 , i , myPhase ) , &
2014-08-14 17:51:51 +05:30
lattice_sn ( 1 : 3 , i , myPhase ) )
2016-01-10 19:04:26 +05:30
lattice_Sslip ( 1 : 3 , 1 : 3 , 1 , i , myPhase ) = math_tensorproduct33 ( lattice_sd ( 1 : 3 , i , myPhase ) , &
2015-04-18 20:52:15 +05:30
lattice_sn ( 1 : 3 , i , myPhase ) ) ! calculate Schmid matrix d \otimes n
2014-08-14 17:51:51 +05:30
do j = 1_pInt , lattice_NnonSchmid ( myPhase )
lattice_Sslip ( 1 : 3 , 1 : 3 , 2 * j , i , myPhase ) = sns ( 1 : 3 , 1 : 3 , 1 , j , i )
lattice_Sslip ( 1 : 3 , 1 : 3 , 2 * j + 1 , i , myPhase ) = sns ( 1 : 3 , 1 : 3 , 2 , j , i )
2016-04-26 23:53:05 +05:30
enddo
2014-08-14 17:51:51 +05:30
do j = 1_pInt , 1_pInt + 2_pInt * lattice_NnonSchmid ( myPhase )
lattice_Sslip_v ( 1 : 6 , j , i , myPhase ) = &
math_Mandel33to6 ( math_symmetric33 ( lattice_Sslip ( 1 : 3 , 1 : 3 , j , i , myPhase ) ) )
enddo
enddo
2018-12-11 12:33:40 +05:30
2018-12-12 04:59:19 +05:30
do i = 1_pInt , myNcleavage ! store slip system vectors and Schmid matrix for my structure
2014-10-28 23:35:51 +05:30
do j = 1_pInt , 3_pInt
lattice_Scleavage_v ( 1 : 6 , j , i , myPhase ) = &
math_Mandel33to6 ( math_symmetric33 ( lattice_Scleavage ( 1 : 3 , 1 : 3 , j , i , myPhase ) ) )
enddo
enddo
2016-04-26 23:53:05 +05:30
2014-08-14 17:51:51 +05:30
end subroutine lattice_initializeStructure
!--------------------------------------------------------------------------------------------------
!> @brief Symmetrizes stiffness matrix according to lattice type
2018-12-12 04:59:19 +05:30
!> @details J. A. Rayne and B. S. Chandrasekhar Phys. Rev. 120, 1658 Erratum Phys. Rev. 122, 1962
2014-08-14 17:51:51 +05:30
!--------------------------------------------------------------------------------------------------
pure function lattice_symmetrizeC66 ( struct , C66 )
implicit none
integer ( kind ( LATTICE_undefined_ID ) ) , intent ( in ) :: struct
real ( pReal ) , dimension ( 6 , 6 ) , intent ( in ) :: C66
real ( pReal ) , dimension ( 6 , 6 ) :: lattice_symmetrizeC66
integer ( pInt ) :: j , k
lattice_symmetrizeC66 = 0.0_pReal
2016-04-26 23:53:05 +05:30
2014-08-14 17:51:51 +05:30
select case ( struct )
case ( LATTICE_iso_ID )
forall ( k = 1_pInt : 3_pInt )
forall ( j = 1_pInt : 3_pInt ) lattice_symmetrizeC66 ( k , j ) = C66 ( 1 , 2 )
lattice_symmetrizeC66 ( k , k ) = C66 ( 1 , 1 )
lattice_symmetrizeC66 ( k + 3 , k + 3 ) = 0.5_pReal * ( C66 ( 1 , 1 ) - C66 ( 1 , 2 ) )
end forall
case ( LATTICE_fcc_ID , LATTICE_bcc_ID )
forall ( k = 1_pInt : 3_pInt )
forall ( j = 1_pInt : 3_pInt ) lattice_symmetrizeC66 ( k , j ) = C66 ( 1 , 2 )
lattice_symmetrizeC66 ( k , k ) = C66 ( 1 , 1 )
lattice_symmetrizeC66 ( k + 3_pInt , k + 3_pInt ) = C66 ( 4 , 4 )
2016-04-26 23:53:05 +05:30
end forall
2014-08-14 17:51:51 +05:30
case ( LATTICE_hex_ID )
lattice_symmetrizeC66 ( 1 , 1 ) = C66 ( 1 , 1 )
lattice_symmetrizeC66 ( 2 , 2 ) = C66 ( 1 , 1 )
lattice_symmetrizeC66 ( 3 , 3 ) = C66 ( 3 , 3 )
lattice_symmetrizeC66 ( 1 , 2 ) = C66 ( 1 , 2 )
lattice_symmetrizeC66 ( 2 , 1 ) = C66 ( 1 , 2 )
lattice_symmetrizeC66 ( 1 , 3 ) = C66 ( 1 , 3 )
lattice_symmetrizeC66 ( 3 , 1 ) = C66 ( 1 , 3 )
lattice_symmetrizeC66 ( 2 , 3 ) = C66 ( 1 , 3 )
lattice_symmetrizeC66 ( 3 , 2 ) = C66 ( 1 , 3 )
lattice_symmetrizeC66 ( 4 , 4 ) = C66 ( 4 , 4 )
lattice_symmetrizeC66 ( 5 , 5 ) = C66 ( 4 , 4 )
lattice_symmetrizeC66 ( 6 , 6 ) = 0.5_pReal * ( C66 ( 1 , 1 ) - C66 ( 1 , 2 ) )
case ( LATTICE_ort_ID )
lattice_symmetrizeC66 ( 1 , 1 ) = C66 ( 1 , 1 )
lattice_symmetrizeC66 ( 2 , 2 ) = C66 ( 2 , 2 )
lattice_symmetrizeC66 ( 3 , 3 ) = C66 ( 3 , 3 )
lattice_symmetrizeC66 ( 1 , 2 ) = C66 ( 1 , 2 )
lattice_symmetrizeC66 ( 2 , 1 ) = C66 ( 1 , 2 )
lattice_symmetrizeC66 ( 1 , 3 ) = C66 ( 1 , 3 )
lattice_symmetrizeC66 ( 3 , 1 ) = C66 ( 1 , 3 )
lattice_symmetrizeC66 ( 2 , 3 ) = C66 ( 2 , 3 )
lattice_symmetrizeC66 ( 3 , 2 ) = C66 ( 2 , 3 )
lattice_symmetrizeC66 ( 4 , 4 ) = C66 ( 4 , 4 )
lattice_symmetrizeC66 ( 5 , 5 ) = C66 ( 5 , 5 )
lattice_symmetrizeC66 ( 6 , 6 ) = C66 ( 6 , 6 )
2015-06-27 20:25:30 +05:30
case ( LATTICE_bct_ID )
lattice_symmetrizeC66 ( 1 , 1 ) = C66 ( 1 , 1 )
lattice_symmetrizeC66 ( 2 , 2 ) = C66 ( 1 , 1 )
lattice_symmetrizeC66 ( 3 , 3 ) = C66 ( 3 , 3 )
lattice_symmetrizeC66 ( 1 , 2 ) = C66 ( 1 , 2 )
lattice_symmetrizeC66 ( 2 , 1 ) = C66 ( 1 , 2 )
lattice_symmetrizeC66 ( 1 , 3 ) = C66 ( 1 , 3 )
lattice_symmetrizeC66 ( 3 , 1 ) = C66 ( 1 , 3 )
lattice_symmetrizeC66 ( 2 , 3 ) = C66 ( 1 , 3 )
lattice_symmetrizeC66 ( 3 , 2 ) = C66 ( 1 , 3 )
lattice_symmetrizeC66 ( 4 , 4 ) = C66 ( 4 , 4 )
lattice_symmetrizeC66 ( 5 , 5 ) = C66 ( 4 , 4 )
2018-12-12 04:59:19 +05:30
lattice_symmetrizeC66 ( 6 , 6 ) = C66 ( 6 , 6 )
2014-08-14 17:51:51 +05:30
case default
lattice_symmetrizeC66 = C66
end select
2016-04-26 23:53:05 +05:30
2014-08-14 17:51:51 +05:30
end function lattice_symmetrizeC66
2018-09-12 17:33:45 +05:30
2014-08-14 17:51:51 +05:30
!--------------------------------------------------------------------------------------------------
!> @brief Symmetrizes 2nd order tensor according to lattice type
!--------------------------------------------------------------------------------------------------
pure function lattice_symmetrize33 ( struct , T33 )
implicit none
integer ( kind ( LATTICE_undefined_ID ) ) , intent ( in ) :: struct
real ( pReal ) , dimension ( 3 , 3 ) , intent ( in ) :: T33
real ( pReal ) , dimension ( 3 , 3 ) :: lattice_symmetrize33
2014-09-23 02:04:42 +05:30
integer ( pInt ) :: k
2014-08-14 17:51:51 +05:30
lattice_symmetrize33 = 0.0_pReal
2016-04-26 23:53:05 +05:30
2014-08-14 17:51:51 +05:30
select case ( struct )
case ( LATTICE_iso_ID , LATTICE_fcc_ID , LATTICE_bcc_ID )
forall ( k = 1_pInt : 3_pInt ) lattice_symmetrize33 ( k , k ) = T33 ( 1 , 1 )
case ( LATTICE_hex_ID )
lattice_symmetrize33 ( 1 , 1 ) = T33 ( 1 , 1 )
lattice_symmetrize33 ( 2 , 2 ) = T33 ( 1 , 1 )
lattice_symmetrize33 ( 3 , 3 ) = T33 ( 3 , 3 )
2015-06-27 20:25:30 +05:30
case ( LATTICE_ort_ID , lattice_bct_ID )
2014-08-14 17:51:51 +05:30
lattice_symmetrize33 ( 1 , 1 ) = T33 ( 1 , 1 )
lattice_symmetrize33 ( 2 , 2 ) = T33 ( 2 , 2 )
lattice_symmetrize33 ( 3 , 3 ) = T33 ( 3 , 3 )
case default
lattice_symmetrize33 = T33
end select
2016-04-26 23:53:05 +05:30
2014-08-14 17:51:51 +05:30
end function lattice_symmetrize33
!--------------------------------------------------------------------------------------------------
!> @brief figures whether unit quat falls into stereographic standard triangle
!--------------------------------------------------------------------------------------------------
logical pure function lattice_qInSST ( Q , struct )
2017-05-04 04:02:44 +05:30
use , intrinsic :: &
IEEE_arithmetic
2014-08-14 17:51:51 +05:30
use math , only : &
math_qToRodrig
implicit none
2015-04-14 17:13:31 +05:30
real ( pReal ) , dimension ( 4 ) , intent ( in ) :: Q ! orientation
integer ( kind ( LATTICE_undefined_ID ) ) , intent ( in ) :: struct ! lattice structure
real ( pReal ) , dimension ( 3 ) :: Rodrig ! Rodrigues vector of Q
2014-08-14 17:51:51 +05:30
Rodrig = math_qToRodrig ( Q )
2017-05-04 04:02:44 +05:30
if ( any ( IEEE_is_NaN ( Rodrig ) ) ) then
2014-08-14 17:51:51 +05:30
lattice_qInSST = . false .
else
select case ( struct )
case ( LATTICE_bcc_ID , LATTICE_fcc_ID )
lattice_qInSST = Rodrig ( 1 ) > Rodrig ( 2 ) . and . &
Rodrig ( 2 ) > Rodrig ( 3 ) . and . &
Rodrig ( 3 ) > 0.0_pReal
case ( LATTICE_hex_ID )
lattice_qInSST = Rodrig ( 1 ) > sqrt ( 3.0_pReal ) * Rodrig ( 2 ) . and . &
Rodrig ( 2 ) > 0.0_pReal . and . &
Rodrig ( 3 ) > 0.0_pReal
case default
lattice_qInSST = . true .
end select
endif
end function lattice_qInSST
!--------------------------------------------------------------------------------------------------
!> @brief calculates the disorientation for 2 unit quaternions
!--------------------------------------------------------------------------------------------------
pure function lattice_qDisorientation ( Q1 , Q2 , struct )
use prec , only : &
tol_math_check
use math , only : &
math_qMul , &
math_qConj
implicit none
real ( pReal ) , dimension ( 4 ) :: lattice_qDisorientation
real ( pReal ) , dimension ( 4 ) , intent ( in ) :: &
2016-01-10 19:04:26 +05:30
Q1 , & ! 1st orientation
2016-03-16 02:53:01 +05:30
Q2 ! 2nd orientation
2016-01-10 19:04:26 +05:30
integer ( kind ( LATTICE_undefined_ID ) ) , optional , intent ( in ) :: & ! if given, symmetries between the two orientation will be considered
2014-08-14 17:51:51 +05:30
struct
real ( pReal ) , dimension ( 4 ) :: dQ , dQsymA , mis
integer ( pInt ) :: i , j , k , s , symmetry
integer ( kind ( LATTICE_undefined_ID ) ) :: myStruct
2018-12-10 13:03:20 +05:30
integer ( pInt ) , dimension ( 2 ) , parameter :: &
NsymOperations = [ 24_pInt , 12_pInt ]
real ( pReal ) , dimension ( 4 , 36 ) , parameter :: &
symOperations = reshape ( [ &
2018-12-12 04:59:19 +05:30
1.0_pReal , 0.0_pReal , 0.0_pReal , 0.0_pReal , & ! cubic symmetry operations
0.0_pReal , 0.0_pReal , 1.0_pReal / sqrt ( 2.0_pReal ) , 1.0_pReal / sqrt ( 2.0_pReal ) , & ! 2-fold symmetry
2018-12-10 13:03:20 +05:30
0.0_pReal , 1.0_pReal / sqrt ( 2.0_pReal ) , 0.0_pReal , 1.0_pReal / sqrt ( 2.0_pReal ) , &
0.0_pReal , 1.0_pReal / sqrt ( 2.0_pReal ) , 1.0_pReal / sqrt ( 2.0_pReal ) , 0.0_pReal , &
0.0_pReal , 0.0_pReal , 1.0_pReal / sqrt ( 2.0_pReal ) , - 1.0_pReal / sqrt ( 2.0_pReal ) , &
0.0_pReal , - 1.0_pReal / sqrt ( 2.0_pReal ) , 0.0_pReal , 1.0_pReal / sqrt ( 2.0_pReal ) , &
0.0_pReal , 1.0_pReal / sqrt ( 2.0_pReal ) , - 1.0_pReal / sqrt ( 2.0_pReal ) , 0.0_pReal , &
2018-12-12 04:59:19 +05:30
0.5_pReal , 0.5_pReal , 0.5_pReal , 0.5_pReal , & ! 3-fold symmetry
2018-12-10 13:03:20 +05:30
- 0.5_pReal , 0.5_pReal , 0.5_pReal , 0.5_pReal , &
0.5_pReal , - 0.5_pReal , 0.5_pReal , 0.5_pReal , &
- 0.5_pReal , - 0.5_pReal , 0.5_pReal , 0.5_pReal , &
0.5_pReal , 0.5_pReal , - 0.5_pReal , 0.5_pReal , &
- 0.5_pReal , 0.5_pReal , - 0.5_pReal , 0.5_pReal , &
0.5_pReal , 0.5_pReal , 0.5_pReal , - 0.5_pReal , &
- 0.5_pReal , 0.5_pReal , 0.5_pReal , - 0.5_pReal , &
2018-12-12 04:59:19 +05:30
1.0_pReal / sqrt ( 2.0_pReal ) , 1.0_pReal / sqrt ( 2.0_pReal ) , 0.0_pReal , 0.0_pReal , & ! 4-fold symmetry
2018-12-10 13:03:20 +05:30
0.0_pReal , 1.0_pReal , 0.0_pReal , 0.0_pReal , &
- 1.0_pReal / sqrt ( 2.0_pReal ) , 1.0_pReal / sqrt ( 2.0_pReal ) , 0.0_pReal , 0.0_pReal , &
1.0_pReal / sqrt ( 2.0_pReal ) , 0.0_pReal , 1.0_pReal / sqrt ( 2.0_pReal ) , 0.0_pReal , &
0.0_pReal , 0.0_pReal , 1.0_pReal , 0.0_pReal , &
- 1.0_pReal / sqrt ( 2.0_pReal ) , 0.0_pReal , 1.0_pReal / sqrt ( 2.0_pReal ) , 0.0_pReal , &
1.0_pReal / sqrt ( 2.0_pReal ) , 0.0_pReal , 0.0_pReal , 1.0_pReal / sqrt ( 2.0_pReal ) , &
0.0_pReal , 0.0_pReal , 0.0_pReal , 1.0_pReal , &
- 1.0_pReal / sqrt ( 2.0_pReal ) , 0.0_pReal , 0.0_pReal , 1.0_pReal / sqrt ( 2.0_pReal ) , &
!
2018-12-12 04:59:19 +05:30
1.0_pReal , 0.0_pReal , 0.0_pReal , 0.0_pReal , & ! hexagonal symmetry operations
0.0_pReal , 1.0_pReal , 0.0_pReal , 0.0_pReal , & ! 2-fold symmetry
2018-12-10 13:03:20 +05:30
0.0_pReal , 0.0_pReal , 1.0_pReal , 0.0_pReal , &
0.0_pReal , 0.5_pReal , 2.0_pReal / sqrt ( 3.0_pReal ) , 0.0_pReal , &
0.0_pReal , - 0.5_pReal , 2.0_pReal / sqrt ( 3.0_pReal ) , 0.0_pReal , &
0.0_pReal , 2.0_pReal / sqrt ( 3.0_pReal ) , 0.5_pReal , 0.0_pReal , &
0.0_pReal , - 2.0_pReal / sqrt ( 3.0_pReal ) , 0.5_pReal , 0.0_pReal , &
2018-12-12 04:59:19 +05:30
2.0_pReal / sqrt ( 3.0_pReal ) , 0.0_pReal , 0.0_pReal , 0.5_pReal , & ! 6-fold symmetry
2018-12-10 13:03:20 +05:30
- 2.0_pReal / sqrt ( 3.0_pReal ) , 0.0_pReal , 0.0_pReal , 0.5_pReal , &
0.5_pReal , 0.0_pReal , 0.0_pReal , 2.0_pReal / sqrt ( 3.0_pReal ) , &
- 0.5_pReal , 0.0_pReal , 0.0_pReal , 2.0_pReal / sqrt ( 3.0_pReal ) , &
0.0_pReal , 0.0_pReal , 0.0_pReal , 1.0_pReal &
2018-12-12 04:59:19 +05:30
] , [ 4 , 36 ] ) !< Symmetry operations as quaternions 24 for cubic, 12 for hexagonal = 36
2018-12-10 13:03:20 +05:30
2014-08-14 17:51:51 +05:30
!--------------------------------------------------------------------------------------------------
! check if a structure with known symmetries is given
if ( present ( struct ) ) then
myStruct = struct
select case ( struct )
case ( LATTICE_fcc_ID , LATTICE_bcc_ID )
symmetry = 1_pInt
case ( LATTICE_hex_ID )
symmetry = 2_pInt
case default
symmetry = 0_pInt
end select
else
symmetry = 0_pInt
myStruct = LATTICE_undefined_ID
endif
!--------------------------------------------------------------------------------------------------
2016-01-15 19:33:24 +05:30
! calculate misorientation, for cubic and hexagonal structure find symmetries
2014-08-14 17:51:51 +05:30
dQ = math_qMul ( math_qConj ( Q1 ) , Q2 )
lattice_qDisorientation = dQ
2016-04-26 23:53:05 +05:30
select case ( symmetry )
2014-08-14 17:51:51 +05:30
case ( 1_pInt , 2_pInt )
2018-12-10 13:03:20 +05:30
s = sum ( NsymOperations ( 1 : symmetry - 1_pInt ) )
2014-08-14 17:51:51 +05:30
do i = 1_pInt , 2_pInt
dQ = math_qConj ( dQ ) ! switch order of "from -- to"
2018-12-10 13:03:20 +05:30
do j = 1_pInt , NsymOperations ( symmetry ) ! run through first crystal's symmetries
dQsymA = math_qMul ( symOperations ( 1 : 4 , s + j ) , dQ ) ! apply sym
do k = 1_pInt , NsymOperations ( symmetry ) ! run through 2nd crystal's symmetries
mis = math_qMul ( dQsymA , symOperations ( 1 : 4 , s + k ) ) ! apply sym
2014-08-14 17:51:51 +05:30
if ( mis ( 1 ) < 0.0_pReal ) & ! want positive angle
mis = - mis
2016-01-10 19:04:26 +05:30
if ( mis ( 1 ) - lattice_qDisorientation ( 1 ) > - tol_math_check &
. and . lattice_qInSST ( mis , LATTICE_undefined_ID ) ) lattice_qDisorientation = mis ! found better one
2014-08-14 17:51:51 +05:30
enddo ; enddo ; enddo
case ( 0_pInt )
if ( lattice_qDisorientation ( 1 ) < 0.0_pReal ) lattice_qDisorientation = - lattice_qDisorientation ! keep omega within 0 to 180 deg
end select
end function lattice_qDisorientation
2018-10-06 14:12:25 +05:30
!--------------------------------------------------------------------------------------------------
2018-12-12 04:59:19 +05:30
!> @brief Characteristic shear for twinning
2018-10-06 14:12:25 +05:30
!--------------------------------------------------------------------------------------------------
2018-10-05 08:24:47 +05:30
function lattice_characteristicShear_Twin ( Ntwin , structure , CoverA ) result ( characteristicShear )
use IO , only : &
IO_error
implicit none
2018-12-12 04:59:19 +05:30
integer ( pInt ) , dimension ( : ) , intent ( in ) :: Ntwin !< number of active twin systems per family
character ( len = 3 ) , intent ( in ) :: structure !< lattice structure
real ( pReal ) , intent ( in ) :: cOverA !< c/a ratio
real ( pReal ) , dimension ( sum ( Ntwin ) ) :: characteristicShear
2018-10-05 08:24:47 +05:30
integer ( pInt ) :: &
2018-12-12 04:59:19 +05:30
a , & !< index of active system
c , & !< index in complete system list
2018-10-05 08:24:47 +05:30
mf , & !< index of my family
ms !< index of my system in current family
2018-10-06 02:16:53 +05:30
2018-12-11 05:09:50 +05:30
integer ( pInt ) , dimension ( LATTICE_HEX_NTWIN ) , parameter :: &
2018-12-12 04:59:19 +05:30
HEX_SHEARTWIN = reshape ( int ( [ &
2018-12-11 05:09:50 +05:30
1 , & ! <-10.1>{10.2}
1 , &
1 , &
1 , &
1 , &
1 , &
2 , & ! <11.6>{-1-1.1}
2 , &
2 , &
2 , &
2 , &
2 , &
3 , & ! <10.-2>{10.1}
3 , &
3 , &
3 , &
3 , &
3 , &
4 , & ! <11.-3>{11.2}
4 , &
4 , &
4 , &
4 , &
4 &
2018-12-12 04:59:19 +05:30
] , pInt ) , [ LATTICE_HEX_NTWIN ] ) ! indicator to formulas below
2018-12-11 05:09:50 +05:30
2018-12-12 04:59:19 +05:30
a = 0_pInt
2018-10-05 10:50:51 +05:30
myFamilies : do mf = 1_pInt , size ( Ntwin , 1 )
mySystems : do ms = 1_pInt , Ntwin ( mf )
2018-12-12 04:59:19 +05:30
a = a + 1_pInt
select case ( trim ( structure ) )
case ( 'fcc' , 'bcc' )
characteristicShear ( a ) = 0.5_pReal * sqrt ( 2.0_pReal )
2018-10-05 10:50:51 +05:30
case ( 'hex' )
2018-12-12 04:59:19 +05:30
if ( cOverA < 1.0_pReal . or . cOverA > 2.0_pReal ) &
call IO_error ( 131_pInt , ext_msg = 'lattice_characteristicShear_Twin' )
c = sum ( LATTICE_HEX_NTWINSYSTEM ( 1 : mf - 1 ) ) + ms
select case ( HEX_SHEARTWIN ( c ) ) ! from Christian & Mahajan 1995 p.29
2018-10-05 08:24:47 +05:30
case ( 1_pInt ) ! <-10.1>{10.2}
2018-12-12 04:59:19 +05:30
characteristicShear ( a ) = ( 3.0_pReal - cOverA ** 2.0_pReal ) / sqrt ( 3.0_pReal ) / CoverA
2018-10-05 08:24:47 +05:30
case ( 2_pInt ) ! <11.6>{-1-1.1}
2018-12-12 04:59:19 +05:30
characteristicShear ( a ) = 1.0_pReal / cOverA
2018-10-05 08:24:47 +05:30
case ( 3_pInt ) ! <10.-2>{10.1}
2018-12-12 04:59:19 +05:30
characteristicShear ( a ) = ( 4.0_pReal * cOverA ** 2.0_pReal - 9.0_pReal ) / sqrt ( 4 8.0_pReal ) / cOverA
2018-10-05 08:24:47 +05:30
case ( 4_pInt ) ! <11.-3>{11.2}
2018-12-12 04:59:19 +05:30
characteristicShear ( a ) = 2.0_pReal * ( cOverA ** 2.0_pReal - 2.0_pReal ) / 3.0_pReal / cOverA
2018-10-05 08:24:47 +05:30
end select
2018-12-12 04:59:19 +05:30
case default
call IO_error ( 137_pInt , ext_msg = 'lattice_characteristicShear_Twin: ' / / trim ( structure ) )
2018-10-05 10:50:51 +05:30
end select
enddo mySystems
enddo myFamilies
2018-10-05 08:24:47 +05:30
end function lattice_characteristicShear_Twin
2018-10-06 14:12:25 +05:30
!--------------------------------------------------------------------------------------------------
2018-12-12 04:59:19 +05:30
!> @brief Rotated elasticity matrices for twinning in Mandel notation
2018-10-06 14:12:25 +05:30
!--------------------------------------------------------------------------------------------------
2018-09-12 19:27:54 +05:30
function lattice_C66_twin ( Ntwin , C66 , structure , CoverA )
use IO , only : &
IO_error
use math , only : &
INRAD , &
math_axisAngleToR , &
math_Mandel3333to66 , &
math_Mandel66to3333 , &
math_rotate_forward3333
implicit none
integer ( pInt ) , dimension ( : ) , intent ( in ) :: Ntwin !< number of active twin systems per family
character ( len = * ) , intent ( in ) :: structure !< lattice structure
2018-12-12 04:59:19 +05:30
real ( pReal ) , dimension ( 6 , 6 ) , intent ( in ) :: C66 !< unrotated parent stiffness matrix
real ( pReal ) , intent ( in ) :: cOverA !< c/a ratio
real ( pReal ) , dimension ( 6 , 6 , sum ( Ntwin ) ) :: lattice_C66_twin
2018-09-12 19:27:54 +05:30
2018-12-12 04:59:19 +05:30
real ( pReal ) , dimension ( 3 , 3 , sum ( Ntwin ) ) :: coordinateSystem
2018-09-12 19:27:54 +05:30
2018-12-12 04:59:19 +05:30
real ( pReal ) , dimension ( 3 , 3 ) :: R
2018-09-12 19:27:54 +05:30
integer ( pInt ) :: i
2018-12-12 04:59:19 +05:30
select case ( trim ( structure ) )
2018-09-12 19:27:54 +05:30
case ( 'fcc' )
2018-12-12 04:59:19 +05:30
coordinateSystem = buildCoordinateSystem ( Ntwin , LATTICE_FCC_NSLIPSYSTEM , LATTICE_FCC_SYSTEMTWIN , &
trim ( structure ) , 0.0_pReal )
2018-09-12 19:27:54 +05:30
case ( 'bcc' )
2018-12-12 04:59:19 +05:30
coordinateSystem = buildCoordinateSystem ( Ntwin , LATTICE_BCC_NSLIPSYSTEM , LATTICE_BCC_SYSTEMTWIN , &
trim ( structure ) , 0.0_pReal )
2018-09-12 19:27:54 +05:30
case ( 'hex' , 'hexagonal' ) !ToDo: "No alias policy": long or short?
2018-12-12 04:59:19 +05:30
coordinateSystem = buildCoordinateSystem ( Ntwin , LATTICE_HEX_NSLIPSYSTEM , LATTICE_HEX_SYSTEMTWIN , &
'hex' , cOverA )
2018-09-12 19:27:54 +05:30
case default
2018-12-12 04:59:19 +05:30
call IO_error ( 137_pInt , ext_msg = 'lattice_C66_twin: ' / / trim ( structure ) )
2018-09-12 19:27:54 +05:30
end select
2018-12-12 04:59:19 +05:30
2018-09-12 19:27:54 +05:30
do i = 1 , sum ( Ntwin )
R = math_axisAngleToR ( coordinateSystem ( 1 : 3 , 2 , i ) , 18 0.0_pReal * INRAD ) ! ToDo: Why always 180 deg?
lattice_C66_twin ( 1 : 6 , 1 : 6 , i ) = math_Mandel3333to66 ( math_rotate_forward3333 ( math_Mandel66to3333 ( C66 ) , R ) )
enddo
2018-12-10 02:50:18 +05:30
end function lattice_C66_twin
2018-08-25 16:38:32 +05:30
2018-09-12 19:31:57 +05:30
2018-10-06 14:12:25 +05:30
!--------------------------------------------------------------------------------------------------
2018-12-12 04:59:19 +05:30
!> @brief Rotated elasticity matrices for transformation in Mandel notation
!> ToDo: Completely untested and incomplete and undocumented
2018-10-06 14:12:25 +05:30
!--------------------------------------------------------------------------------------------------
2018-12-22 04:23:21 +05:30
function lattice_C66_trans ( Ntrans , C_parent66 , &
structure_target , &
2018-12-12 03:30:56 +05:30
CoverA_trans , a_bcc , a_fcc )
2018-10-06 14:12:25 +05:30
use prec , only : &
tol_math_check
2018-09-13 00:07:55 +05:30
use IO , only : &
IO_error
use math , only : &
INRAD , &
2018-10-06 14:12:25 +05:30
MATH_I3 , &
2018-09-13 00:07:55 +05:30
math_axisAngleToR , &
math_Mandel3333to66 , &
math_Mandel66to3333 , &
2018-10-06 14:12:25 +05:30
math_rotate_forward3333 , &
math_mul33x33 , &
math_tensorproduct33 , &
math_crossproduct
2018-09-13 00:07:55 +05:30
implicit none
2018-12-12 04:59:19 +05:30
integer ( pInt ) , dimension ( : ) , intent ( in ) :: Ntrans !< number of active twin systems per family
2018-09-13 00:07:55 +05:30
character ( len = * ) , intent ( in ) :: &
2018-12-22 04:23:21 +05:30
structure_target !< lattice structure
real ( pReal ) , dimension ( 6 , 6 ) , intent ( in ) :: C_parent66
2018-10-06 14:12:25 +05:30
real ( pReal ) , dimension ( 6 , 6 ) :: C_bar66 , C_target_unrotated66
2018-12-22 04:49:51 +05:30
real ( pReal ) , dimension ( 3 , 3 , 3 , 3 ) :: C_target_unrotated
2018-10-06 14:12:25 +05:30
real ( pReal ) , dimension ( 6 , 6 , sum ( Ntrans ) ) :: lattice_C66_trans
2018-12-22 04:23:21 +05:30
real ( pReal ) , dimension ( 3 , 3 , sum ( Ntrans ) ) :: Q , S
2018-10-06 14:12:25 +05:30
real ( pReal ) :: a_bcc , a_fcc , CoverA_trans
2018-09-13 00:07:55 +05:30
integer ( pInt ) :: i
2018-10-06 14:12:25 +05:30
!--------------------------------------------------------------------------------------------------
! elasticity matrix of the target phase in cube orientation
if ( trim ( structure_target ) == 'hex' ) then
C_bar66 ( 1 , 1 ) = ( C_parent66 ( 1 , 1 ) + C_parent66 ( 1 , 2 ) + 2.0_pReal * C_parent66 ( 4 , 4 ) ) / 2.0_pReal
C_bar66 ( 1 , 2 ) = ( C_parent66 ( 1 , 1 ) + 5.0_pReal * C_parent66 ( 1 , 2 ) - 2.0_pReal * C_parent66 ( 4 , 4 ) ) / 6.0_pReal
C_bar66 ( 3 , 3 ) = ( C_parent66 ( 1 , 1 ) + 2.0_pReal * C_parent66 ( 1 , 2 ) + 4.0_pReal * C_parent66 ( 4 , 4 ) ) / 3.0_pReal
C_bar66 ( 1 , 3 ) = ( C_parent66 ( 1 , 1 ) + 2.0_pReal * C_parent66 ( 1 , 2 ) - 2.0_pReal * C_parent66 ( 4 , 4 ) ) / 3.0_pReal
C_bar66 ( 4 , 4 ) = ( C_parent66 ( 1 , 1 ) - C_parent66 ( 1 , 2 ) + C_parent66 ( 4 , 4 ) ) / 3.0_pReal
C_bar66 ( 1 , 4 ) = ( C_parent66 ( 1 , 1 ) - C_parent66 ( 1 , 2 ) - 2.0_pReal * C_parent66 ( 4 , 4 ) ) / ( 3.0_pReal * sqrt ( 2.0_pReal ) )
C_target_unrotated66 = 0.0_pReal
C_target_unrotated66 ( 1 , 1 ) = C_bar66 ( 1 , 1 ) - C_bar66 ( 1 , 4 ) ** 2.0_pReal / C_bar66 ( 4 , 4 )
C_target_unrotated66 ( 1 , 2 ) = C_bar66 ( 1 , 2 ) + C_bar66 ( 1 , 4 ) ** 2.0_pReal / C_bar66 ( 4 , 4 )
C_target_unrotated66 ( 1 , 3 ) = C_bar66 ( 1 , 3 )
C_target_unrotated66 ( 3 , 3 ) = C_bar66 ( 3 , 3 )
C_target_unrotated66 ( 4 , 4 ) = C_bar66 ( 4 , 4 ) - C_bar66 ( 1 , 4 ) ** 2.0_pReal / ( 0.5_pReal * ( C_bar66 ( 1 , 1 ) - C_bar66 ( 1 , 2 ) ) )
C_target_unrotated66 = lattice_symmetrizeC66 ( LATTICE_HEX_ID , C_target_unrotated66 )
elseif ( trim ( structure_target ) == 'bcc' ) then
C_target_unrotated66 = C_parent66
else
write ( 6 , * ) "Mist"
endif
2018-12-22 04:49:51 +05:30
2018-10-06 14:12:25 +05:30
do i = 1_pInt , 6_pInt
if ( abs ( C_target_unrotated66 ( i , i ) ) < tol_math_check ) &
call IO_error ( 135_pInt , el = i , ext_msg = 'matrix diagonal "el"ement in transformation' )
enddo
2018-12-22 04:49:51 +05:30
C_target_unrotated = math_Mandel66to3333 ( C_target_unrotated66 )
2018-12-22 12:19:52 +05:30
call buildTransformationSystem ( Q , S , Ntrans , CoverA_trans , a_fcc , a_bcc )
2018-12-22 04:23:21 +05:30
2018-10-06 14:12:25 +05:30
do i = 1 , sum ( Ntrans )
2018-12-22 04:49:51 +05:30
lattice_C66_trans ( 1 : 6 , 1 : 6 , i ) = math_Mandel3333to66 ( math_rotate_forward3333 ( C_target_unrotated , Q ( 1 : 3 , 1 : 3 , i ) ) )
2018-10-06 14:12:25 +05:30
enddo
end function
2018-10-05 00:48:13 +05:30
2018-10-06 14:12:25 +05:30
!--------------------------------------------------------------------------------------------------
2018-12-12 04:59:19 +05:30
!> @brief Non-schmid projections for bcc with up to 6 coefficients
! Koester et al. 2012, Acta Materialia 60 (2012) 3894– 3901, eq. (17)
! Gröger et al. 2008, Acta Materialia 56 (2008) 5412– 5425, table 1
2018-10-06 14:12:25 +05:30
!--------------------------------------------------------------------------------------------------
2018-10-03 12:19:23 +05:30
function lattice_nonSchmidMatrix ( Nslip , nonSchmidCoefficients , sense ) result ( nonSchmidMatrix )
2018-12-12 04:59:19 +05:30
use IO , only : &
IO_error
2018-10-03 12:19:23 +05:30
use math , only : &
2018-10-05 00:48:13 +05:30
INRAD , &
math_tensorproduct33 , &
math_crossproduct , &
math_mul33x3 , &
math_axisAngleToR
2018-10-03 12:19:23 +05:30
implicit none
2018-12-12 04:59:19 +05:30
integer ( pInt ) , dimension ( : ) , intent ( in ) :: Nslip !< number of active slip systems per family
real ( pReal ) , dimension ( : ) , intent ( in ) :: nonSchmidCoefficients !< non-Schmid coefficients for projections
integer ( pInt ) , intent ( in ) :: sense !< sense (-1,+1)
real ( pReal ) , dimension ( 1 : 3 , 1 : 3 , sum ( Nslip ) ) :: nonSchmidMatrix
real ( pReal ) , dimension ( 1 : 3 , 1 : 3 , sum ( Nslip ) ) :: coordinateSystem !< coordinate system of slip system
real ( pReal ) , dimension ( : ) , allocatable :: &
direction , normal , np
2018-10-03 12:19:23 +05:30
integer ( pInt ) :: i
2018-12-12 04:59:19 +05:30
if ( abs ( sense ) / = 1_pInt ) call IO_error ( 0_pInt , ext_msg = 'lattice_nonSchmidMatrix' )
coordinateSystem = buildCoordinateSystem ( Nslip , LATTICE_BCC_NSLIPSYSTEM , LATTICE_BCC_SYSTEMSLIP , &
'bcc' , 0.0_pReal )
coordinateSystem ( 1 : 3 , 1 , 1 : sum ( Nslip ) ) = coordinateSystem ( 1 : 3 , 1 , 1 : sum ( Nslip ) ) * real ( sense , pReal ) ! convert unidirectional coordinate system
nonSchmidMatrix = lattice_SchmidMatrix_slip ( Nslip , 'bcc' , 0.0_pReal ) ! Schmid contribution
2018-10-03 12:19:23 +05:30
do i = 1_pInt , sum ( Nslip )
direction = coordinateSystem ( 1 : 3 , 1 , i )
normal = coordinateSystem ( 1 : 3 , 2 , i )
2018-10-05 00:48:13 +05:30
np = math_mul33x3 ( math_axisAngleToR ( direction , 6 0.0_pReal * INRAD ) , normal )
2018-10-06 02:16:53 +05:30
if ( size ( nonSchmidCoefficients ) > 0 ) nonSchmidMatrix ( 1 : 3 , 1 : 3 , i ) = nonSchmidMatrix ( 1 : 3 , 1 : 3 , i ) &
2018-10-05 14:06:44 +05:30
+ nonSchmidCoefficients ( 1 ) * math_tensorproduct33 ( direction , np )
2018-10-06 02:16:53 +05:30
if ( size ( nonSchmidCoefficients ) > 1 ) nonSchmidMatrix ( 1 : 3 , 1 : 3 , i ) = nonSchmidMatrix ( 1 : 3 , 1 : 3 , i ) &
2018-10-05 14:06:44 +05:30
+ nonSchmidCoefficients ( 2 ) * math_tensorproduct33 ( math_crossproduct ( normal , direction ) , normal )
2018-10-06 02:16:53 +05:30
if ( size ( nonSchmidCoefficients ) > 2 ) nonSchmidMatrix ( 1 : 3 , 1 : 3 , i ) = nonSchmidMatrix ( 1 : 3 , 1 : 3 , i ) &
2018-10-05 14:06:44 +05:30
+ nonSchmidCoefficients ( 3 ) * math_tensorproduct33 ( math_crossproduct ( np , direction ) , np )
2018-10-06 02:16:53 +05:30
if ( size ( nonSchmidCoefficients ) > 3 ) nonSchmidMatrix ( 1 : 3 , 1 : 3 , i ) = nonSchmidMatrix ( 1 : 3 , 1 : 3 , i ) &
2018-10-05 14:06:44 +05:30
+ nonSchmidCoefficients ( 4 ) * math_tensorproduct33 ( normal , normal )
2018-10-06 02:16:53 +05:30
if ( size ( nonSchmidCoefficients ) > 4 ) nonSchmidMatrix ( 1 : 3 , 1 : 3 , i ) = nonSchmidMatrix ( 1 : 3 , 1 : 3 , i ) &
2018-10-05 14:06:44 +05:30
+ nonSchmidCoefficients ( 5 ) * math_tensorproduct33 ( math_crossproduct ( normal , direction ) , &
2018-10-08 01:46:18 +05:30
math_crossproduct ( normal , direction ) )
2018-10-06 02:16:53 +05:30
if ( size ( nonSchmidCoefficients ) > 5 ) nonSchmidMatrix ( 1 : 3 , 1 : 3 , i ) = nonSchmidMatrix ( 1 : 3 , 1 : 3 , i ) &
2018-10-05 14:06:44 +05:30
+ nonSchmidCoefficients ( 6 ) * math_tensorproduct33 ( direction , direction )
2018-10-03 12:19:23 +05:30
enddo
end function lattice_nonSchmidMatrix
2018-09-12 17:33:45 +05:30
2018-08-25 16:38:32 +05:30
!--------------------------------------------------------------------------------------------------
2018-12-12 04:59:19 +05:30
!> @brief Slip-slip interaction matrix
!> details only active slip systems are considered
2018-08-25 16:38:32 +05:30
!--------------------------------------------------------------------------------------------------
2018-10-08 11:57:12 +05:30
function lattice_interaction_SlipSlip ( Nslip , interactionValues , structure ) result ( interactionMatrix )
2018-08-25 16:38:32 +05:30
use IO , only : &
IO_error
implicit none
integer ( pInt ) , dimension ( : ) , intent ( in ) :: Nslip !< number of active slip systems per family
2018-12-12 04:59:19 +05:30
real ( pReal ) , dimension ( : ) , intent ( in ) :: interactionValues !< values for slip-slip interaction
2018-08-25 16:38:32 +05:30
character ( len = * ) , intent ( in ) :: structure !< lattice structure
2018-10-08 11:57:12 +05:30
real ( pReal ) , dimension ( sum ( Nslip ) , sum ( Nslip ) ) :: interactionMatrix
2018-08-25 16:38:32 +05:30
integer ( pInt ) , dimension ( : ) , allocatable :: NslipMax
2018-10-08 11:57:12 +05:30
integer ( pInt ) , dimension ( : , : ) , allocatable :: interactionTypes
2018-08-25 16:38:32 +05:30
select case ( structure )
case ( 'fcc' )
2018-10-08 11:57:12 +05:30
interactionTypes = LATTICE_FCC_INTERACTIONSLIPSLIP
NslipMax = LATTICE_FCC_NSLIPSYSTEM
2018-08-25 16:38:32 +05:30
case ( 'bcc' )
2018-10-08 11:57:12 +05:30
interactionTypes = LATTICE_BCC_INTERACTIONSLIPSLIP
NslipMax = LATTICE_BCC_NSLIPSYSTEM
2018-12-10 13:03:20 +05:30
case ( 'hex' , 'hexagonal' ) ! ToDo: "No alias policy": long or short?
2018-10-08 11:57:12 +05:30
interactionTypes = LATTICE_HEX_INTERACTIONSLIPSLIP
NslipMax = LATTICE_HEX_NSLIPSYSTEM
2018-08-25 16:38:32 +05:30
case ( 'bct' )
2018-10-08 11:57:12 +05:30
interactionTypes = LATTICE_BCT_INTERACTIONSLIPSLIP
NslipMax = LATTICE_BCT_NSLIPSYSTEM
2018-08-25 16:38:32 +05:30
case default
2018-12-12 04:59:19 +05:30
call IO_error ( 137_pInt , ext_msg = 'lattice_interaction_SlipSlip: ' / / trim ( structure ) )
2018-08-25 16:38:32 +05:30
end select
2018-10-08 11:57:12 +05:30
interactionMatrix = buildInteraction ( Nslip , Nslip , NslipMax , NslipMax , interactionValues , interactionTypes )
2018-08-25 16:38:32 +05:30
2018-10-07 22:10:02 +05:30
end function lattice_interaction_SlipSlip
2018-08-25 16:38:32 +05:30
!--------------------------------------------------------------------------------------------------
2018-12-12 04:59:19 +05:30
!> @brief Twin-twin interaction matrix
!> details only active twin systems are considered
2018-08-25 16:38:32 +05:30
!--------------------------------------------------------------------------------------------------
2018-10-08 11:57:12 +05:30
function lattice_interaction_TwinTwin ( Ntwin , interactionValues , structure ) result ( interactionMatrix )
2018-08-25 16:38:32 +05:30
use IO , only : &
IO_error
implicit none
integer ( pInt ) , dimension ( : ) , intent ( in ) :: Ntwin !< number of active twin systems per family
2018-12-12 04:59:19 +05:30
real ( pReal ) , dimension ( : ) , intent ( in ) :: interactionValues !< values for twin-twin interaction
2018-08-25 16:38:32 +05:30
character ( len = * ) , intent ( in ) :: structure !< lattice structure
2018-10-08 11:57:12 +05:30
real ( pReal ) , dimension ( sum ( Ntwin ) , sum ( Ntwin ) ) :: interactionMatrix
2018-08-25 16:38:32 +05:30
integer ( pInt ) , dimension ( : ) , allocatable :: NtwinMax
2018-10-08 11:57:12 +05:30
integer ( pInt ) , dimension ( : , : ) , allocatable :: interactionTypes
2018-08-25 16:38:32 +05:30
2018-12-10 13:03:20 +05:30
integer ( pInt ) , dimension ( LATTICE_FCC_NTWIN , LATTICE_FCC_NTWIN ) , parameter :: &
FCC_INTERACTIONTWINTWIN = reshape ( int ( [ &
1 , 1 , 1 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , & ! ---> twin
1 , 1 , 1 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , & ! |
1 , 1 , 1 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , & ! |
2 , 2 , 2 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 2 , 2 , & ! v twin
2 , 2 , 2 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 2 , 2 , &
2 , 2 , 2 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 2 , 2 , &
2 , 2 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , 2 , 2 , 2 , &
2 , 2 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , 2 , 2 , 2 , &
2 , 2 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , 2 , 2 , 2 , &
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , &
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , &
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 1 , 1 , 1 &
2018-12-12 04:59:19 +05:30
] , pInt ) , shape ( FCC_INTERACTIONTWINTWIN ) , order = [ 2 , 1 ] ) !< Twin-twin interaction types for fcc
2018-12-10 13:03:20 +05:30
integer ( pInt ) , dimension ( LATTICE_BCC_NTWIN , LATTICE_BCC_NTWIN ) , parameter :: &
BCC_INTERACTIONTWINTWIN = reshape ( int ( [ &
1 , 3 , 3 , 3 , 3 , 3 , 3 , 2 , 3 , 3 , 2 , 3 , & ! ---> twin
3 , 1 , 3 , 3 , 3 , 3 , 2 , 3 , 3 , 3 , 3 , 2 , & ! |
3 , 3 , 1 , 3 , 3 , 2 , 3 , 3 , 2 , 3 , 3 , 3 , & ! |
3 , 3 , 3 , 1 , 2 , 3 , 3 , 3 , 3 , 2 , 3 , 3 , & ! v twin
3 , 3 , 3 , 2 , 1 , 3 , 3 , 3 , 3 , 2 , 3 , 3 , &
3 , 3 , 2 , 3 , 3 , 1 , 3 , 3 , 2 , 3 , 3 , 3 , &
3 , 2 , 3 , 3 , 3 , 3 , 1 , 3 , 3 , 3 , 3 , 2 , &
2 , 3 , 3 , 3 , 3 , 3 , 3 , 1 , 3 , 3 , 2 , 3 , &
3 , 3 , 2 , 3 , 3 , 2 , 3 , 3 , 1 , 3 , 3 , 3 , &
3 , 3 , 3 , 2 , 2 , 3 , 3 , 3 , 3 , 1 , 3 , 3 , &
2 , 3 , 3 , 3 , 3 , 3 , 3 , 2 , 3 , 3 , 1 , 3 , &
3 , 2 , 3 , 3 , 3 , 3 , 2 , 3 , 3 , 3 , 3 , 1 &
2018-12-12 04:59:19 +05:30
] , pInt ) , shape ( BCC_INTERACTIONTWINTWIN ) , order = [ 2 , 1 ] ) !< Twin-twin interaction types for bcc
2018-12-10 13:03:20 +05:30
!< 1: self interaction
!< 2: collinear interaction
!< 3: other interaction
integer ( pInt ) , dimension ( LATTICE_HEX_NTWIN , LATTICE_HEX_NTWIN ) , parameter :: &
HEX_INTERACTIONTWINTWIN = reshape ( int ( [ &
1 , 2 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 3 , 3 , 7 , 7 , 7 , 7 , 7 , 7 , 13 , 13 , 13 , 13 , 13 , 13 , & ! ---> twin
2 , 1 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 3 , 3 , 7 , 7 , 7 , 7 , 7 , 7 , 13 , 13 , 13 , 13 , 13 , 13 , & ! |
2 , 2 , 1 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 3 , 3 , 7 , 7 , 7 , 7 , 7 , 7 , 13 , 13 , 13 , 13 , 13 , 13 , & ! |
2 , 2 , 2 , 1 , 2 , 2 , 3 , 3 , 3 , 3 , 3 , 3 , 7 , 7 , 7 , 7 , 7 , 7 , 13 , 13 , 13 , 13 , 13 , 13 , & ! v twin
2 , 2 , 2 , 2 , 1 , 2 , 3 , 3 , 3 , 3 , 3 , 3 , 7 , 7 , 7 , 7 , 7 , 7 , 13 , 13 , 13 , 13 , 13 , 13 , &
2 , 2 , 2 , 2 , 2 , 1 , 3 , 3 , 3 , 3 , 3 , 3 , 7 , 7 , 7 , 7 , 7 , 7 , 13 , 13 , 13 , 13 , 13 , 13 , &
!
6 , 6 , 6 , 6 , 6 , 6 , 4 , 5 , 5 , 5 , 5 , 5 , 8 , 8 , 8 , 8 , 8 , 8 , 14 , 14 , 14 , 14 , 14 , 14 , &
6 , 6 , 6 , 6 , 6 , 6 , 5 , 4 , 5 , 5 , 5 , 5 , 8 , 8 , 8 , 8 , 8 , 8 , 14 , 14 , 14 , 14 , 14 , 14 , &
6 , 6 , 6 , 6 , 6 , 6 , 5 , 5 , 4 , 5 , 5 , 5 , 8 , 8 , 8 , 8 , 8 , 8 , 14 , 14 , 14 , 14 , 14 , 14 , &
6 , 6 , 6 , 6 , 6 , 6 , 5 , 5 , 5 , 4 , 5 , 5 , 8 , 8 , 8 , 8 , 8 , 8 , 14 , 14 , 14 , 14 , 14 , 14 , &
6 , 6 , 6 , 6 , 6 , 6 , 5 , 5 , 5 , 5 , 4 , 5 , 8 , 8 , 8 , 8 , 8 , 8 , 14 , 14 , 14 , 14 , 14 , 14 , &
6 , 6 , 6 , 6 , 6 , 6 , 5 , 5 , 5 , 5 , 5 , 4 , 8 , 8 , 8 , 8 , 8 , 8 , 14 , 14 , 14 , 14 , 14 , 14 , &
!
12 , 12 , 12 , 12 , 12 , 12 , 11 , 11 , 11 , 11 , 11 , 11 , 9 , 10 , 10 , 10 , 10 , 10 , 15 , 15 , 15 , 15 , 15 , 15 , &
12 , 12 , 12 , 12 , 12 , 12 , 11 , 11 , 11 , 11 , 11 , 11 , 10 , 9 , 10 , 10 , 10 , 10 , 15 , 15 , 15 , 15 , 15 , 15 , &
12 , 12 , 12 , 12 , 12 , 12 , 11 , 11 , 11 , 11 , 11 , 11 , 10 , 10 , 9 , 10 , 10 , 10 , 15 , 15 , 15 , 15 , 15 , 15 , &
12 , 12 , 12 , 12 , 12 , 12 , 11 , 11 , 11 , 11 , 11 , 11 , 10 , 10 , 10 , 9 , 10 , 10 , 15 , 15 , 15 , 15 , 15 , 15 , &
12 , 12 , 12 , 12 , 12 , 12 , 11 , 11 , 11 , 11 , 11 , 11 , 10 , 10 , 10 , 10 , 9 , 10 , 15 , 15 , 15 , 15 , 15 , 15 , &
12 , 12 , 12 , 12 , 12 , 12 , 11 , 11 , 11 , 11 , 11 , 11 , 10 , 10 , 10 , 10 , 10 , 9 , 15 , 15 , 15 , 15 , 15 , 15 , &
!
20 , 20 , 20 , 20 , 20 , 20 , 19 , 19 , 19 , 19 , 19 , 19 , 18 , 18 , 18 , 18 , 18 , 18 , 16 , 17 , 17 , 17 , 17 , 17 , &
20 , 20 , 20 , 20 , 20 , 20 , 19 , 19 , 19 , 19 , 19 , 19 , 18 , 18 , 18 , 18 , 18 , 18 , 17 , 16 , 17 , 17 , 17 , 17 , &
20 , 20 , 20 , 20 , 20 , 20 , 19 , 19 , 19 , 19 , 19 , 19 , 18 , 18 , 18 , 18 , 18 , 18 , 17 , 17 , 16 , 17 , 17 , 17 , &
20 , 20 , 20 , 20 , 20 , 20 , 19 , 19 , 19 , 19 , 19 , 19 , 18 , 18 , 18 , 18 , 18 , 18 , 17 , 17 , 17 , 16 , 17 , 17 , &
20 , 20 , 20 , 20 , 20 , 20 , 19 , 19 , 19 , 19 , 19 , 19 , 18 , 18 , 18 , 18 , 18 , 18 , 17 , 17 , 17 , 17 , 16 , 17 , &
20 , 20 , 20 , 20 , 20 , 20 , 19 , 19 , 19 , 19 , 19 , 19 , 18 , 18 , 18 , 18 , 18 , 18 , 17 , 17 , 17 , 17 , 17 , 16 &
2018-12-12 04:59:19 +05:30
] , pInt ) , shape ( HEX_INTERACTIONTWINTWIN ) , order = [ 2 , 1 ] ) !< Twin-twin interaction types for hex
2018-12-10 13:03:20 +05:30
2018-08-25 16:38:32 +05:30
select case ( structure )
case ( 'fcc' )
2018-12-10 13:03:20 +05:30
interactionTypes = FCC_INTERACTIONTWINTWIN
2018-10-08 11:57:12 +05:30
NtwinMax = LATTICE_FCC_NTWINSYSTEM
2018-08-25 16:38:32 +05:30
case ( 'bcc' )
2018-12-10 13:03:20 +05:30
interactionTypes = BCC_INTERACTIONTWINTWIN
2018-10-08 11:57:12 +05:30
NtwinMax = LATTICE_BCC_NTWINSYSTEM
2018-12-10 13:03:20 +05:30
case ( 'hex' , 'hexagonal' ) ! ToDo: "No alias policy": long or short?
interactionTypes = HEX_INTERACTIONTWINTWIN
2018-10-08 11:57:12 +05:30
NtwinMax = LATTICE_HEX_NTWINSYSTEM
2018-08-25 16:38:32 +05:30
case default
2018-12-12 04:59:19 +05:30
call IO_error ( 137_pInt , ext_msg = 'lattice_interaction_TwinTwin: ' / / trim ( structure ) )
2018-08-25 16:38:32 +05:30
end select
2018-10-08 11:57:12 +05:30
interactionMatrix = buildInteraction ( Ntwin , Ntwin , NtwinMax , NtwinMax , interactionValues , interactionTypes )
2018-08-25 16:38:32 +05:30
2018-10-07 22:10:02 +05:30
end function lattice_interaction_TwinTwin
2018-08-25 16:38:32 +05:30
2018-12-11 05:09:50 +05:30
!--------------------------------------------------------------------------------------------------
2018-12-12 04:59:19 +05:30
!> @brief Trans-trans interaction matrix
!> details only active trans systems are considered
2018-12-11 05:09:50 +05:30
!--------------------------------------------------------------------------------------------------
function lattice_interaction_TransTrans ( Ntrans , interactionValues , structure ) result ( interactionMatrix )
use IO , only : &
IO_error
implicit none
2018-12-12 04:59:19 +05:30
integer ( pInt ) , dimension ( : ) , intent ( in ) :: Ntrans !< number of active trans systems per family
real ( pReal ) , dimension ( : ) , intent ( in ) :: interactionValues !< values for trans-trans interaction
character ( len = * ) , intent ( in ) :: structure !< lattice structure (parent crystal)
2018-12-11 05:09:50 +05:30
real ( pReal ) , dimension ( sum ( Ntrans ) , sum ( Ntrans ) ) :: interactionMatrix
integer ( pInt ) , dimension ( : ) , allocatable :: NtransMax
integer ( pInt ) , dimension ( : , : ) , allocatable :: interactionTypes
integer ( pInt ) , dimension ( LATTICE_FCC_NTRANS , LATTICE_FCC_NTRANS ) , parameter :: &
FCC_INTERACTIONTRANSTRANS = reshape ( int ( [ &
1 , 1 , 1 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , & ! ---> trans
1 , 1 , 1 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , & ! |
1 , 1 , 1 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , & ! |
2 , 2 , 2 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 2 , 2 , & ! v trans
2 , 2 , 2 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 2 , 2 , &
2 , 2 , 2 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 2 , 2 , &
2 , 2 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , 2 , 2 , 2 , &
2 , 2 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , 2 , 2 , 2 , &
2 , 2 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , 2 , 2 , 2 , &
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , &
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , &
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 1 , 1 , 1 &
2018-12-12 04:59:19 +05:30
] , pInt ) , shape ( FCC_INTERACTIONTRANSTRANS ) , order = [ 2 , 1 ] ) !< Trans-trans interaction types for fcc
2018-12-11 05:09:50 +05:30
if ( trim ( structure ) == 'fcc' ) then
interactionTypes = FCC_INTERACTIONTRANSTRANS
NtransMax = LATTICE_FCC_NTRANSSYSTEM
else
2018-12-12 04:59:19 +05:30
call IO_error ( 137_pInt , ext_msg = 'lattice_interaction_TransTrans: ' / / trim ( structure ) )
2018-12-11 05:09:50 +05:30
end if
interactionMatrix = buildInteraction ( Ntrans , Ntrans , NtransMax , NtransMax , interactionValues , interactionTypes )
2018-12-12 04:59:19 +05:30
2018-12-11 05:09:50 +05:30
end function lattice_interaction_TransTrans
2018-10-03 11:21:11 +05:30
!--------------------------------------------------------------------------------------------------
2018-12-12 04:59:19 +05:30
!> @brief Slip-twin interaction matrix
!> details only active slip and twin systems are considered
2018-10-03 11:21:11 +05:30
!--------------------------------------------------------------------------------------------------
2018-10-08 11:57:12 +05:30
function lattice_interaction_SlipTwin ( Nslip , Ntwin , interactionValues , structure ) result ( interactionMatrix )
2018-10-03 11:21:11 +05:30
use IO , only : &
IO_error
implicit none
2018-12-11 05:09:50 +05:30
integer ( pInt ) , dimension ( : ) , intent ( in ) :: Nslip , & !< number of active slip systems per family
Ntwin !< number of active twin systems per family
2018-12-12 04:59:19 +05:30
real ( pReal ) , dimension ( : ) , intent ( in ) :: interactionValues !< values for slip-twin interaction
2018-10-03 11:21:11 +05:30
character ( len = * ) , intent ( in ) :: structure !< lattice structure
2018-10-08 11:57:12 +05:30
real ( pReal ) , dimension ( sum ( Nslip ) , sum ( Ntwin ) ) :: interactionMatrix
2018-10-03 11:21:11 +05:30
2018-12-11 05:09:50 +05:30
integer ( pInt ) , dimension ( : ) , allocatable :: NslipMax , &
NtwinMax
2018-10-08 11:57:12 +05:30
integer ( pInt ) , dimension ( : , : ) , allocatable :: interactionTypes
2018-10-03 11:21:11 +05:30
2018-12-10 13:03:20 +05:30
integer ( pInt ) , dimension ( LATTICE_FCC_NSLIP , LATTICE_FCC_NTWIN ) , parameter :: &
FCC_INTERACTIONSLIPTWIN = reshape ( int ( [ &
1 , 1 , 1 , 3 , 3 , 3 , 2 , 2 , 2 , 3 , 3 , 3 , & ! ---> twin
1 , 1 , 1 , 3 , 3 , 3 , 3 , 3 , 3 , 2 , 2 , 2 , & ! |
1 , 1 , 1 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 3 , 3 , & ! |
3 , 3 , 3 , 1 , 1 , 1 , 3 , 3 , 3 , 2 , 2 , 2 , & ! v slip
3 , 3 , 3 , 1 , 1 , 1 , 2 , 2 , 2 , 3 , 3 , 3 , &
2 , 2 , 2 , 1 , 1 , 1 , 3 , 3 , 3 , 3 , 3 , 3 , &
2 , 2 , 2 , 3 , 3 , 3 , 1 , 1 , 1 , 3 , 3 , 3 , &
3 , 3 , 3 , 2 , 2 , 2 , 1 , 1 , 1 , 3 , 3 , 3 , &
3 , 3 , 3 , 3 , 3 , 3 , 1 , 1 , 1 , 2 , 2 , 2 , &
3 , 3 , 3 , 2 , 2 , 2 , 3 , 3 , 3 , 1 , 1 , 1 , &
2 , 2 , 2 , 3 , 3 , 3 , 3 , 3 , 3 , 1 , 1 , 1 , &
3 , 3 , 3 , 3 , 3 , 3 , 2 , 2 , 2 , 1 , 1 , 1 , &
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , &
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , &
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , &
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , &
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , &
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 &
2018-12-12 04:59:19 +05:30
] , pInt ) , shape ( FCC_INTERACTIONSLIPTWIN ) , order = [ 2 , 1 ] ) !< Slip-twin interaction types for fcc
2018-12-10 13:03:20 +05:30
!< 1: coplanar interaction
!< 2: screw trace between slip system and twin habit plane (easy cross slip)
!< 3: other interaction
integer ( pInt ) , dimension ( LATTICE_BCC_NSLIP , LATTICE_BCC_NTWIN ) , parameter :: &
BCC_INTERACTIONSLIPTWIN = reshape ( int ( [ &
3 , 3 , 3 , 2 , 2 , 3 , 3 , 3 , 3 , 2 , 3 , 3 , & ! ---> twin
3 , 3 , 2 , 3 , 3 , 2 , 3 , 3 , 2 , 3 , 3 , 3 , & ! |
3 , 2 , 3 , 3 , 3 , 3 , 2 , 3 , 3 , 3 , 3 , 2 , & ! |
2 , 3 , 3 , 3 , 3 , 3 , 3 , 2 , 3 , 3 , 2 , 3 , & ! v slip
2 , 3 , 3 , 3 , 3 , 3 , 3 , 2 , 3 , 3 , 2 , 3 , &
3 , 3 , 2 , 3 , 3 , 2 , 3 , 3 , 2 , 3 , 3 , 3 , &
3 , 2 , 3 , 3 , 3 , 3 , 2 , 3 , 3 , 3 , 3 , 2 , &
3 , 3 , 3 , 2 , 2 , 3 , 3 , 3 , 3 , 2 , 3 , 3 , &
2 , 3 , 3 , 3 , 3 , 3 , 3 , 2 , 3 , 3 , 2 , 3 , &
3 , 3 , 3 , 2 , 2 , 3 , 3 , 3 , 3 , 2 , 3 , 3 , &
3 , 2 , 3 , 3 , 3 , 3 , 2 , 3 , 3 , 3 , 3 , 2 , &
3 , 3 , 2 , 3 , 3 , 2 , 3 , 3 , 2 , 3 , 3 , 3 , &
!
1 , 3 , 3 , 3 , 3 , 3 , 3 , 2 , 3 , 3 , 2 , 3 , &
3 , 1 , 3 , 3 , 3 , 3 , 2 , 3 , 3 , 3 , 3 , 2 , &
3 , 3 , 1 , 3 , 3 , 2 , 3 , 3 , 2 , 3 , 3 , 3 , &
3 , 3 , 3 , 1 , 2 , 3 , 3 , 3 , 3 , 2 , 3 , 3 , &
3 , 3 , 3 , 2 , 1 , 3 , 3 , 3 , 3 , 2 , 3 , 3 , &
3 , 3 , 2 , 3 , 3 , 1 , 3 , 3 , 2 , 3 , 3 , 3 , &
3 , 2 , 3 , 3 , 3 , 3 , 1 , 3 , 3 , 3 , 3 , 2 , &
2 , 3 , 3 , 3 , 3 , 3 , 3 , 1 , 3 , 3 , 2 , 3 , &
3 , 3 , 2 , 3 , 3 , 2 , 3 , 3 , 1 , 3 , 3 , 3 , &
3 , 3 , 3 , 2 , 2 , 3 , 3 , 3 , 3 , 1 , 3 , 3 , &
2 , 3 , 3 , 3 , 3 , 3 , 3 , 2 , 3 , 3 , 1 , 3 , &
3 , 2 , 3 , 3 , 3 , 3 , 2 , 3 , 3 , 3 , 3 , 1 &
2018-12-12 04:59:19 +05:30
] , pInt ) , shape ( BCC_INTERACTIONSLIPTWIN ) , order = [ 2 , 1 ] ) !< Slip-twin interaction types for bcc
2018-12-10 13:03:20 +05:30
!< 1: coplanar interaction
!< 2: screw trace between slip system and twin habit plane (easy cross slip)
!< 3: other interaction
integer ( pInt ) , dimension ( LATTICE_HEX_NSLIP , LATTICE_HEX_NTWIN ) , parameter :: &
HEX_INTERACTIONSLIPTWIN = reshape ( int ( [ &
1 , 1 , 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 3 , 3 , 4 , 4 , 4 , 4 , 4 , 4 , & ! --> twin
1 , 1 , 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 3 , 3 , 4 , 4 , 4 , 4 , 4 , 4 , & ! |
1 , 1 , 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 3 , 3 , 4 , 4 , 4 , 4 , 4 , 4 , & ! |
! v
5 , 5 , 5 , 5 , 5 , 5 , 6 , 6 , 6 , 6 , 6 , 6 , 7 , 7 , 7 , 7 , 7 , 7 , 8 , 8 , 8 , 8 , 8 , 8 , & ! slip
5 , 5 , 5 , 5 , 5 , 5 , 6 , 6 , 6 , 6 , 6 , 6 , 7 , 7 , 7 , 7 , 7 , 7 , 8 , 8 , 8 , 8 , 8 , 8 , &
5 , 5 , 5 , 5 , 5 , 5 , 6 , 6 , 6 , 6 , 6 , 6 , 7 , 7 , 7 , 7 , 7 , 7 , 8 , 8 , 8 , 8 , 8 , 8 , &
!
9 , 9 , 9 , 9 , 9 , 9 , 10 , 10 , 10 , 10 , 10 , 10 , 11 , 11 , 11 , 11 , 11 , 11 , 12 , 12 , 12 , 12 , 12 , 12 , &
9 , 9 , 9 , 9 , 9 , 9 , 10 , 10 , 10 , 10 , 10 , 10 , 11 , 11 , 11 , 11 , 11 , 11 , 12 , 12 , 12 , 12 , 12 , 12 , &
9 , 9 , 9 , 9 , 9 , 9 , 10 , 10 , 10 , 10 , 10 , 10 , 11 , 11 , 11 , 11 , 11 , 11 , 12 , 12 , 12 , 12 , 12 , 12 , &
!
13 , 13 , 13 , 13 , 13 , 13 , 14 , 14 , 14 , 14 , 14 , 14 , 15 , 15 , 15 , 15 , 15 , 15 , 16 , 16 , 16 , 16 , 16 , 16 , &
13 , 13 , 13 , 13 , 13 , 13 , 14 , 14 , 14 , 14 , 14 , 14 , 15 , 15 , 15 , 15 , 15 , 15 , 16 , 16 , 16 , 16 , 16 , 16 , &
13 , 13 , 13 , 13 , 13 , 13 , 14 , 14 , 14 , 14 , 14 , 14 , 15 , 15 , 15 , 15 , 15 , 15 , 16 , 16 , 16 , 16 , 16 , 16 , &
13 , 13 , 13 , 13 , 13 , 13 , 14 , 14 , 14 , 14 , 14 , 14 , 15 , 15 , 15 , 15 , 15 , 15 , 16 , 16 , 16 , 16 , 16 , 16 , &
13 , 13 , 13 , 13 , 13 , 13 , 14 , 14 , 14 , 14 , 14 , 14 , 15 , 15 , 15 , 15 , 15 , 15 , 16 , 16 , 16 , 16 , 16 , 16 , &
13 , 13 , 13 , 13 , 13 , 13 , 14 , 14 , 14 , 14 , 14 , 14 , 15 , 15 , 15 , 15 , 15 , 15 , 16 , 16 , 16 , 16 , 16 , 16 , &
!
17 , 17 , 17 , 17 , 17 , 17 , 18 , 18 , 18 , 18 , 18 , 18 , 19 , 19 , 19 , 19 , 19 , 19 , 20 , 20 , 20 , 20 , 20 , 20 , &
17 , 17 , 17 , 17 , 17 , 17 , 18 , 18 , 18 , 18 , 18 , 18 , 19 , 19 , 19 , 19 , 19 , 19 , 20 , 20 , 20 , 20 , 20 , 20 , &
17 , 17 , 17 , 17 , 17 , 17 , 18 , 18 , 18 , 18 , 18 , 18 , 19 , 19 , 19 , 19 , 19 , 19 , 20 , 20 , 20 , 20 , 20 , 20 , &
17 , 17 , 17 , 17 , 17 , 17 , 18 , 18 , 18 , 18 , 18 , 18 , 19 , 19 , 19 , 19 , 19 , 19 , 20 , 20 , 20 , 20 , 20 , 20 , &
17 , 17 , 17 , 17 , 17 , 17 , 18 , 18 , 18 , 18 , 18 , 18 , 19 , 19 , 19 , 19 , 19 , 19 , 20 , 20 , 20 , 20 , 20 , 20 , &
17 , 17 , 17 , 17 , 17 , 17 , 18 , 18 , 18 , 18 , 18 , 18 , 19 , 19 , 19 , 19 , 19 , 19 , 20 , 20 , 20 , 20 , 20 , 20 , &
17 , 17 , 17 , 17 , 17 , 17 , 18 , 18 , 18 , 18 , 18 , 18 , 19 , 19 , 19 , 19 , 19 , 19 , 20 , 20 , 20 , 20 , 20 , 20 , &
17 , 17 , 17 , 17 , 17 , 17 , 18 , 18 , 18 , 18 , 18 , 18 , 19 , 19 , 19 , 19 , 19 , 19 , 20 , 20 , 20 , 20 , 20 , 20 , &
17 , 17 , 17 , 17 , 17 , 17 , 18 , 18 , 18 , 18 , 18 , 18 , 19 , 19 , 19 , 19 , 19 , 19 , 20 , 20 , 20 , 20 , 20 , 20 , &
17 , 17 , 17 , 17 , 17 , 17 , 18 , 18 , 18 , 18 , 18 , 18 , 19 , 19 , 19 , 19 , 19 , 19 , 20 , 20 , 20 , 20 , 20 , 20 , &
17 , 17 , 17 , 17 , 17 , 17 , 18 , 18 , 18 , 18 , 18 , 18 , 19 , 19 , 19 , 19 , 19 , 19 , 20 , 20 , 20 , 20 , 20 , 20 , &
17 , 17 , 17 , 17 , 17 , 17 , 18 , 18 , 18 , 18 , 18 , 18 , 19 , 19 , 19 , 19 , 19 , 19 , 20 , 20 , 20 , 20 , 20 , 20 , &
!
21 , 21 , 21 , 21 , 21 , 21 , 22 , 22 , 22 , 22 , 22 , 22 , 23 , 23 , 23 , 23 , 23 , 23 , 24 , 24 , 24 , 24 , 24 , 24 , &
21 , 21 , 21 , 21 , 21 , 21 , 22 , 22 , 22 , 22 , 22 , 22 , 23 , 23 , 23 , 23 , 23 , 23 , 24 , 24 , 24 , 24 , 24 , 24 , &
21 , 21 , 21 , 21 , 21 , 21 , 22 , 22 , 22 , 22 , 22 , 22 , 23 , 23 , 23 , 23 , 23 , 23 , 24 , 24 , 24 , 24 , 24 , 24 , &
21 , 21 , 21 , 21 , 21 , 21 , 22 , 22 , 22 , 22 , 22 , 22 , 23 , 23 , 23 , 23 , 23 , 23 , 24 , 24 , 24 , 24 , 24 , 24 , &
21 , 21 , 21 , 21 , 21 , 21 , 22 , 22 , 22 , 22 , 22 , 22 , 23 , 23 , 23 , 23 , 23 , 23 , 24 , 24 , 24 , 24 , 24 , 24 , &
21 , 21 , 21 , 21 , 21 , 21 , 22 , 22 , 22 , 22 , 22 , 22 , 23 , 23 , 23 , 23 , 23 , 23 , 24 , 24 , 24 , 24 , 24 , 24 &
!
2018-12-12 04:59:19 +05:30
] , pInt ) , shape ( HEX_INTERACTIONSLIPTWIN ) , order = [ 2 , 1 ] ) !< Slip-twin interaction types for hex
2018-12-10 13:03:20 +05:30
2018-10-03 11:21:11 +05:30
select case ( structure )
case ( 'fcc' )
2018-12-10 13:03:20 +05:30
interactionTypes = FCC_INTERACTIONSLIPTWIN
2018-10-08 11:57:12 +05:30
NslipMax = LATTICE_FCC_NSLIPSYSTEM
NtwinMax = LATTICE_FCC_NTWINSYSTEM
2018-10-03 11:21:11 +05:30
case ( 'bcc' )
2018-12-10 13:03:20 +05:30
interactionTypes = BCC_INTERACTIONSLIPTWIN
2018-10-08 11:57:12 +05:30
NslipMax = LATTICE_BCC_NSLIPSYSTEM
NtwinMax = LATTICE_BCC_NTWINSYSTEM
2018-12-10 13:03:20 +05:30
case ( 'hex' , 'hexagonal' ) ! ToDo: "No alias policy": long or short?
interactionTypes = HEX_INTERACTIONSLIPTWIN
2018-10-08 11:57:12 +05:30
NslipMax = LATTICE_HEX_NSLIPSYSTEM
NtwinMax = LATTICE_HEX_NTWINSYSTEM
2018-10-03 11:21:11 +05:30
case default
2018-12-12 04:59:19 +05:30
call IO_error ( 137_pInt , ext_msg = 'lattice_interaction_SlipTwin: ' / / trim ( structure ) )
2018-10-03 11:21:11 +05:30
end select
2018-10-08 11:57:12 +05:30
interactionMatrix = buildInteraction ( Nslip , Ntwin , NslipMax , NtwinMax , interactionValues , interactionTypes )
2018-10-03 11:21:11 +05:30
2018-10-07 22:10:02 +05:30
end function lattice_interaction_SlipTwin
2018-10-03 11:21:11 +05:30
2018-12-11 05:09:50 +05:30
!--------------------------------------------------------------------------------------------------
2018-12-12 04:59:19 +05:30
!> @brief Slip-trans interaction matrix
!> details only active slip and trans systems are considered
2018-12-11 05:09:50 +05:30
!--------------------------------------------------------------------------------------------------
function lattice_interaction_SlipTrans ( Nslip , Ntrans , interactionValues , structure ) result ( interactionMatrix )
use IO , only : &
IO_error
implicit none
integer ( pInt ) , dimension ( : ) , intent ( in ) :: Nslip , & !< number of active slip systems per family
Ntrans !< number of active trans systems per family
2018-12-12 04:59:19 +05:30
real ( pReal ) , dimension ( : ) , intent ( in ) :: interactionValues !< values for slip-trans interaction
2018-12-11 05:09:50 +05:30
character ( len = * ) , intent ( in ) :: &
2018-12-12 04:59:19 +05:30
structure !< lattice structure (parent crystal)
2018-12-11 05:09:50 +05:30
real ( pReal ) , dimension ( sum ( Nslip ) , sum ( Ntrans ) ) :: interactionMatrix
integer ( pInt ) , dimension ( : ) , allocatable :: NslipMax , &
NtransMax
integer ( pInt ) , dimension ( : , : ) , allocatable :: interactionTypes
2018-12-11 06:17:13 +05:30
integer ( pInt ) , dimension ( LATTICE_FCC_NSLIP , LATTICE_fcc_Ntrans ) , parameter :: &
FCC_INTERACTIONSLIPTRANS = reshape ( int ( [ &
1 , 1 , 1 , 3 , 3 , 3 , 2 , 2 , 2 , 3 , 3 , 3 , & ! ---> trans
1 , 1 , 1 , 3 , 3 , 3 , 3 , 3 , 3 , 2 , 2 , 2 , & ! |
1 , 1 , 1 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 3 , 3 , & ! |
3 , 3 , 3 , 1 , 1 , 1 , 3 , 3 , 3 , 2 , 2 , 2 , & ! v slip
3 , 3 , 3 , 1 , 1 , 1 , 2 , 2 , 2 , 3 , 3 , 3 , &
2 , 2 , 2 , 1 , 1 , 1 , 3 , 3 , 3 , 3 , 3 , 3 , &
2 , 2 , 2 , 3 , 3 , 3 , 1 , 1 , 1 , 3 , 3 , 3 , &
3 , 3 , 3 , 2 , 2 , 2 , 1 , 1 , 1 , 3 , 3 , 3 , &
3 , 3 , 3 , 3 , 3 , 3 , 1 , 1 , 1 , 2 , 2 , 2 , &
3 , 3 , 3 , 2 , 2 , 2 , 3 , 3 , 3 , 1 , 1 , 1 , &
2 , 2 , 2 , 3 , 3 , 3 , 3 , 3 , 3 , 1 , 1 , 1 , &
3 , 3 , 3 , 3 , 3 , 3 , 2 , 2 , 2 , 1 , 1 , 1 , &
2018-12-12 04:59:19 +05:30
2018-12-11 06:17:13 +05:30
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , &
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , &
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , &
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , &
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , &
4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 &
2018-12-12 04:59:19 +05:30
] , pInt ) , shape ( FCC_INTERACTIONSLIPTRANS ) , order = [ 2 , 1 ] ) !< Slip-trans interaction types for fcc
2018-12-11 06:17:13 +05:30
2018-12-11 05:09:50 +05:30
select case ( structure )
case ( 'fcc' )
2018-12-11 06:17:13 +05:30
interactionTypes = FCC_INTERACTIONSLIPTRANS
2018-12-11 05:09:50 +05:30
NslipMax = LATTICE_FCC_NSLIPSYSTEM
NtransMax = LATTICE_FCC_NTRANSSYSTEM
case default
2018-12-12 04:59:19 +05:30
call IO_error ( 137_pInt , ext_msg = 'lattice_interaction_SlipTrans: ' / / trim ( structure ) )
2018-12-11 05:09:50 +05:30
end select
interactionMatrix = buildInteraction ( Nslip , Ntrans , NslipMax , NtransMax , interactionValues , interactionTypes )
end function lattice_interaction_SlipTrans
2018-10-03 11:21:11 +05:30
!--------------------------------------------------------------------------------------------------
2018-12-12 04:59:19 +05:30
!> @brief Twin-slip interaction matrix
!> details only active twin and slip systems are considered
2018-10-03 11:21:11 +05:30
!--------------------------------------------------------------------------------------------------
2018-10-08 11:57:12 +05:30
function lattice_interaction_TwinSlip ( Ntwin , Nslip , interactionValues , structure ) result ( interactionMatrix )
2018-10-03 11:21:11 +05:30
use IO , only : &
IO_error
implicit none
2018-12-11 05:09:50 +05:30
integer ( pInt ) , dimension ( : ) , intent ( in ) :: Ntwin , & !< number of active twin systems per family
Nslip !< number of active slip systems per family
2018-12-12 04:59:19 +05:30
real ( pReal ) , dimension ( : ) , intent ( in ) :: interactionValues !< values for twin-twin interaction
2018-10-03 11:21:11 +05:30
character ( len = * ) , intent ( in ) :: structure !< lattice structure
2018-10-08 11:57:12 +05:30
real ( pReal ) , dimension ( sum ( Ntwin ) , sum ( Nslip ) ) :: interactionMatrix
2018-10-03 11:21:11 +05:30
2018-12-11 05:09:50 +05:30
integer ( pInt ) , dimension ( : ) , allocatable :: NtwinMax , &
NslipMax
2018-10-08 11:57:12 +05:30
integer ( pInt ) , dimension ( : , : ) , allocatable :: interactionTypes
2018-10-03 11:21:11 +05:30
2018-12-10 13:03:20 +05:30
integer ( pInt ) , dimension ( LATTICE_FCC_NTWIN , LATTICE_FCC_NSLIP ) , parameter :: &
2018-12-12 04:59:19 +05:30
FCC_INTERACTIONTWINSLIP = 1_pInt !< Twin-Slip interaction types for fcc
2018-12-10 13:03:20 +05:30
integer ( pInt ) , dimension ( LATTICE_BCC_NTWIN , LATTICE_BCC_NSLIP ) , parameter :: &
2018-12-12 04:59:19 +05:30
BCC_INTERACTIONTWINSLIP = 1_pInt !< Twin-slip interaction types for bcc
2018-12-10 13:03:20 +05:30
2018-12-11 05:09:50 +05:30
integer ( pInt ) , dimension ( LATTICE_HEX_NTWIN , LATTICE_HEX_NSLIP ) , parameter :: &
2018-12-10 13:03:20 +05:30
HEX_INTERACTIONTWINSLIP = reshape ( int ( [ &
1 , 1 , 1 , 5 , 5 , 5 , 9 , 9 , 9 , 13 , 13 , 13 , 13 , 13 , 13 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 21 , 21 , 21 , 21 , 21 , 21 , & ! --> slip
1 , 1 , 1 , 5 , 5 , 5 , 9 , 9 , 9 , 13 , 13 , 13 , 13 , 13 , 13 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 21 , 21 , 21 , 21 , 21 , 21 , & ! |
1 , 1 , 1 , 5 , 5 , 5 , 9 , 9 , 9 , 13 , 13 , 13 , 13 , 13 , 13 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 21 , 21 , 21 , 21 , 21 , 21 , & ! |
1 , 1 , 1 , 5 , 5 , 5 , 9 , 9 , 9 , 13 , 13 , 13 , 13 , 13 , 13 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 21 , 21 , 21 , 21 , 21 , 21 , & ! v
1 , 1 , 1 , 5 , 5 , 5 , 9 , 9 , 9 , 13 , 13 , 13 , 13 , 13 , 13 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 21 , 21 , 21 , 21 , 21 , 21 , & ! twin
1 , 1 , 1 , 5 , 5 , 5 , 9 , 9 , 9 , 13 , 13 , 13 , 13 , 13 , 13 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 21 , 21 , 21 , 21 , 21 , 21 , &
!
2 , 2 , 2 , 6 , 6 , 6 , 10 , 10 , 10 , 14 , 14 , 14 , 14 , 14 , 14 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 22 , 22 , 22 , 22 , 22 , 22 , &
2 , 2 , 2 , 6 , 6 , 6 , 10 , 10 , 10 , 14 , 14 , 14 , 14 , 14 , 14 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 22 , 22 , 22 , 22 , 22 , 22 , &
2 , 2 , 2 , 6 , 6 , 6 , 10 , 10 , 10 , 14 , 14 , 14 , 14 , 14 , 14 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 22 , 22 , 22 , 22 , 22 , 22 , &
2 , 2 , 2 , 6 , 6 , 6 , 10 , 10 , 10 , 14 , 14 , 14 , 14 , 14 , 14 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 22 , 22 , 22 , 22 , 22 , 22 , &
2 , 2 , 2 , 6 , 6 , 6 , 10 , 10 , 10 , 14 , 14 , 14 , 14 , 14 , 14 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 22 , 22 , 22 , 22 , 22 , 22 , &
2 , 2 , 2 , 6 , 6 , 6 , 10 , 10 , 10 , 14 , 14 , 14 , 14 , 14 , 14 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 18 , 22 , 22 , 22 , 22 , 22 , 22 , &
!
3 , 3 , 3 , 7 , 7 , 7 , 11 , 11 , 11 , 15 , 15 , 15 , 15 , 15 , 15 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 23 , 23 , 23 , 23 , 23 , 23 , &
3 , 3 , 3 , 7 , 7 , 7 , 11 , 11 , 11 , 15 , 15 , 15 , 15 , 15 , 15 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 23 , 23 , 23 , 23 , 23 , 23 , &
3 , 3 , 3 , 7 , 7 , 7 , 11 , 11 , 11 , 15 , 15 , 15 , 15 , 15 , 15 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 23 , 23 , 23 , 23 , 23 , 23 , &
3 , 3 , 3 , 7 , 7 , 7 , 11 , 11 , 11 , 15 , 15 , 15 , 15 , 15 , 15 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 23 , 23 , 23 , 23 , 23 , 23 , &
3 , 3 , 3 , 7 , 7 , 7 , 11 , 11 , 11 , 15 , 15 , 15 , 15 , 15 , 15 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 23 , 23 , 23 , 23 , 23 , 23 , &
3 , 3 , 3 , 7 , 7 , 7 , 11 , 11 , 11 , 15 , 15 , 15 , 15 , 15 , 15 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 19 , 23 , 23 , 23 , 23 , 23 , 23 , &
!
4 , 4 , 4 , 8 , 8 , 8 , 12 , 12 , 12 , 16 , 16 , 16 , 16 , 16 , 16 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 24 , 24 , 24 , 24 , 24 , 24 , &
4 , 4 , 4 , 8 , 8 , 8 , 12 , 12 , 12 , 16 , 16 , 16 , 16 , 16 , 16 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 24 , 24 , 24 , 24 , 24 , 24 , &
4 , 4 , 4 , 8 , 8 , 8 , 12 , 12 , 12 , 16 , 16 , 16 , 16 , 16 , 16 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 24 , 24 , 24 , 24 , 24 , 24 , &
4 , 4 , 4 , 8 , 8 , 8 , 12 , 12 , 12 , 16 , 16 , 16 , 16 , 16 , 16 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 24 , 24 , 24 , 24 , 24 , 24 , &
4 , 4 , 4 , 8 , 8 , 8 , 12 , 12 , 12 , 16 , 16 , 16 , 16 , 16 , 16 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 24 , 24 , 24 , 24 , 24 , 24 , &
4 , 4 , 4 , 8 , 8 , 8 , 12 , 12 , 12 , 16 , 16 , 16 , 16 , 16 , 16 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 20 , 24 , 24 , 24 , 24 , 24 , 24 &
2018-12-12 04:59:19 +05:30
] , pInt ) , shape ( HEX_INTERACTIONTWINSLIP ) , order = [ 2 , 1 ] ) !< Twin-twin interaction types for hex
2018-12-10 13:03:20 +05:30
2018-10-03 11:21:11 +05:30
select case ( structure )
case ( 'fcc' )
2018-12-10 13:03:20 +05:30
interactionTypes = FCC_INTERACTIONTWINSLIP
2018-10-08 11:57:12 +05:30
NtwinMax = LATTICE_FCC_NTWINSYSTEM
NslipMax = LATTICE_FCC_NSLIPSYSTEM
2018-10-03 11:21:11 +05:30
case ( 'bcc' )
2018-12-10 13:03:20 +05:30
interactionTypes = BCC_INTERACTIONTWINSLIP
2018-10-08 11:57:12 +05:30
NtwinMax = LATTICE_BCC_NTWINSYSTEM
NslipMax = LATTICE_BCC_NSLIPSYSTEM
2018-12-10 13:03:20 +05:30
case ( 'hex' , 'hexagonal' ) ! ToDo: "No alias policy": long or short?
interactionTypes = HEX_INTERACTIONTWINSLIP
2018-10-08 11:57:12 +05:30
NtwinMax = LATTICE_HEX_NTWINSYSTEM
NslipMax = LATTICE_HEX_NSLIPSYSTEM
2018-10-03 11:21:11 +05:30
case default
2018-12-12 04:59:19 +05:30
call IO_error ( 137_pInt , ext_msg = 'lattice_interaction_TwinSlip: ' / / trim ( structure ) )
2018-10-03 11:21:11 +05:30
end select
2018-10-08 11:57:12 +05:30
interactionMatrix = buildInteraction ( Ntwin , Nslip , NtwinMax , NslipMax , interactionValues , interactionTypes )
2018-10-03 11:21:11 +05:30
2018-10-07 22:10:02 +05:30
end function lattice_interaction_TwinSlip
2018-10-03 11:21:11 +05:30
2018-08-25 22:02:55 +05:30
!--------------------------------------------------------------------------------------------------
2018-12-12 04:59:19 +05:30
!> @brief Schmid matrix for slip
!> details only active slip systems are considered
2018-08-25 22:02:55 +05:30
!--------------------------------------------------------------------------------------------------
2018-09-12 17:59:22 +05:30
function lattice_SchmidMatrix_slip ( Nslip , structure , cOverA ) result ( SchmidMatrix )
2018-09-12 19:27:54 +05:30
use prec , only : &
tol_math_check
2018-08-25 22:02:55 +05:30
use IO , only : &
IO_error
use math , only : &
2018-09-12 19:27:54 +05:30
math_trace33 , &
2018-08-25 22:02:55 +05:30
math_tensorproduct33
implicit none
2018-12-12 04:59:19 +05:30
integer ( pInt ) , dimension ( : ) , intent ( in ) :: Nslip !< number of active slip systems per family
character ( len = * ) , intent ( in ) :: structure !< lattice structure
2018-10-10 11:12:07 +05:30
real ( pReal ) , intent ( in ) :: cOverA
2018-12-12 03:30:56 +05:30
real ( pReal ) , dimension ( 3 , 3 , sum ( Nslip ) ) :: SchmidMatrix
2018-08-25 22:02:55 +05:30
real ( pReal ) , dimension ( 3 , 3 , sum ( Nslip ) ) :: coordinateSystem
2018-10-08 11:57:12 +05:30
real ( pReal ) , dimension ( : , : ) , allocatable :: slipSystems
2018-12-12 04:59:19 +05:30
integer ( pInt ) , dimension ( : ) , allocatable :: NslipMax
2018-08-25 22:02:55 +05:30
integer ( pInt ) :: i
select case ( structure )
case ( 'fcc' )
2018-10-08 23:02:18 +05:30
NslipMax = LATTICE_FCC_NSLIPSYSTEM
2018-10-08 11:57:12 +05:30
slipSystems = LATTICE_FCC_SYSTEMSLIP
2018-08-25 22:02:55 +05:30
case ( 'bcc' )
2018-10-08 23:02:18 +05:30
NslipMax = LATTICE_BCC_NSLIPSYSTEM
2018-10-08 11:57:12 +05:30
slipSystems = LATTICE_BCC_SYSTEMSLIP
2018-12-10 13:03:20 +05:30
case ( 'hex' , 'hexagonal' ) ! ToDo: "No alias policy": long or short?
2018-10-08 11:57:12 +05:30
NslipMax = LATTICE_HEX_NSLIPSYSTEM
slipSystems = LATTICE_HEX_SYSTEMSLIP
2018-08-25 22:02:55 +05:30
case ( 'bct' )
2018-10-08 11:57:12 +05:30
NslipMax = LATTICE_BCT_NSLIPSYSTEM
slipSystems = LATTICE_BCT_SYSTEMSLIP
2018-08-25 22:02:55 +05:30
case default
2018-12-12 04:59:19 +05:30
call IO_error ( 137_pInt , ext_msg = 'lattice_SchmidMatrix_slip: ' / / trim ( structure ) )
2018-08-25 22:02:55 +05:30
end select
2018-10-10 11:12:07 +05:30
if ( any ( NslipMax ( 1 : size ( Nslip ) ) - Nslip < 0_pInt ) ) &
2018-10-08 11:57:12 +05:30
call IO_error ( 145_pInt , ext_msg = 'Nslip ' / / trim ( structure ) )
2018-10-10 11:12:07 +05:30
if ( any ( Nslip < 0_pInt ) ) &
call IO_error ( 144_pInt , ext_msg = 'Nslip ' / / trim ( structure ) )
coordinateSystem = buildCoordinateSystem ( Nslip , NslipMax , slipSystems , structure , cOverA )
2018-08-25 22:02:55 +05:30
do i = 1 , sum ( Nslip )
2018-09-12 17:59:22 +05:30
SchmidMatrix ( 1 : 3 , 1 : 3 , i ) = math_tensorproduct33 ( coordinateSystem ( 1 : 3 , 1 , i ) , coordinateSystem ( 1 : 3 , 2 , i ) )
if ( abs ( math_trace33 ( SchmidMatrix ( 1 : 3 , 1 : 3 , i ) ) ) > tol_math_check ) &
call IO_error ( 0_pInt , i , ext_msg = 'dilatational Schmid matrix for slip' )
2018-08-25 22:02:55 +05:30
enddo
2018-09-12 17:33:45 +05:30
end function lattice_SchmidMatrix_slip
2018-08-25 22:02:55 +05:30
2018-08-25 16:38:32 +05:30
!--------------------------------------------------------------------------------------------------
2018-12-12 04:59:19 +05:30
!> @brief Schmid matrix for twinning
!> details only active twin systems are considered
2018-08-25 16:38:32 +05:30
!--------------------------------------------------------------------------------------------------
2018-10-07 23:33:45 +05:30
function lattice_SchmidMatrix_twin ( Ntwin , structure , cOverA ) result ( SchmidMatrix )
use prec , only : &
tol_math_check
2018-08-25 16:38:32 +05:30
use IO , only : &
IO_error
2018-09-08 23:02:26 +05:30
use math , only : &
2018-10-07 23:33:45 +05:30
math_trace33 , &
2018-09-08 23:02:26 +05:30
math_tensorproduct33
implicit none
2018-12-12 04:59:19 +05:30
integer ( pInt ) , dimension ( : ) , intent ( in ) :: Ntwin !< number of active twin systems per family
character ( len = * ) , intent ( in ) :: structure !< lattice structure
real ( pReal ) , intent ( in ) :: cOverA !< c/a ratio
2018-12-12 03:30:56 +05:30
real ( pReal ) , dimension ( 3 , 3 , sum ( Ntwin ) ) :: SchmidMatrix
2018-09-08 23:02:26 +05:30
real ( pReal ) , dimension ( 3 , 3 , sum ( Ntwin ) ) :: coordinateSystem
2018-10-08 11:57:12 +05:30
real ( pReal ) , dimension ( : , : ) , allocatable :: twinSystems
2018-12-12 04:59:19 +05:30
integer ( pInt ) , dimension ( : ) , allocatable :: NtwinMax
2018-09-08 23:02:26 +05:30
integer ( pInt ) :: i
select case ( structure )
case ( 'fcc' )
2018-10-08 11:57:12 +05:30
NtwinMax = LATTICE_FCC_NTWINSYSTEM
twinSystems = LATTICE_FCC_SYSTEMTWIN
2018-09-08 23:02:26 +05:30
case ( 'bcc' )
2018-10-08 11:57:12 +05:30
NtwinMax = LATTICE_BCC_NTWINSYSTEM
twinSystems = LATTICE_BCC_SYSTEMTWIN
2018-09-08 23:02:26 +05:30
case ( 'hex' , 'hexagonal' ) !ToDo: "No alias policy": long or short?
2018-10-08 11:57:12 +05:30
NtwinMax = LATTICE_HEX_NTWINSYSTEM
twinSystems = LATTICE_HEX_SYSTEMTWIN
2018-09-08 23:02:26 +05:30
case default
2018-12-12 04:59:19 +05:30
call IO_error ( 137_pInt , ext_msg = 'lattice_SchmidMatrix_twin: ' / / trim ( structure ) )
2018-09-08 23:02:26 +05:30
end select
2018-10-10 11:12:07 +05:30
if ( any ( NtwinMax ( 1 : size ( Ntwin ) ) - Ntwin < 0_pInt ) ) &
2018-10-08 11:57:12 +05:30
call IO_error ( 145_pInt , ext_msg = 'Ntwin ' / / trim ( structure ) )
2018-10-10 11:12:07 +05:30
if ( any ( Ntwin < 0_pInt ) ) &
call IO_error ( 144_pInt , ext_msg = 'Ntwin ' / / trim ( structure ) )
2018-12-12 04:59:19 +05:30
2018-10-10 11:12:07 +05:30
coordinateSystem = buildCoordinateSystem ( Ntwin , NtwinMax , twinSystems , structure , cOverA )
2018-09-12 17:33:45 +05:30
do i = 1 , sum ( Ntwin )
2018-10-07 23:33:45 +05:30
SchmidMatrix ( 1 : 3 , 1 : 3 , i ) = math_tensorproduct33 ( coordinateSystem ( 1 : 3 , 1 , i ) , coordinateSystem ( 1 : 3 , 2 , i ) )
if ( abs ( math_trace33 ( SchmidMatrix ( 1 : 3 , 1 : 3 , i ) ) ) > tol_math_check ) &
call IO_error ( 0_pInt , i , ext_msg = 'dilatational Schmid matrix for twin' )
2018-09-08 23:02:26 +05:30
enddo
2018-09-12 17:33:45 +05:30
end function lattice_SchmidMatrix_twin
2018-09-08 23:02:26 +05:30
2018-12-22 12:19:52 +05:30
!--------------------------------------------------------------------------------------------------
!> @brief Schmid matrix for twinning
!> details only active twin systems are considered
!--------------------------------------------------------------------------------------------------
function lattice_SchmidMatrix_trans ( Ntrans , structure_target , cOverA , a_bcc , a_fcc ) result ( SchmidMatrix )
use prec , only : &
tol_math_check
use IO , only : &
IO_error
use math , only : &
math_trace33 , &
math_tensorproduct33
implicit none
integer ( pInt ) , dimension ( : ) , intent ( in ) :: Ntrans !< number of active twin systems per family
real ( pReal ) , intent ( in ) :: cOverA !< c/a ratio
2019-01-06 12:47:23 +05:30
real ( pReal ) , dimension ( 3 , 3 , sum ( Ntrans ) ) :: SchmidMatrix
2018-12-22 12:19:52 +05:30
character ( len = * ) , intent ( in ) :: &
structure_target !< lattice structure
2019-01-06 12:47:23 +05:30
real ( pReal ) , dimension ( 3 , 3 , sum ( Ntrans ) ) :: devNull
2018-12-22 12:19:52 +05:30
real ( pReal ) :: a_bcc , a_fcc
! ToDo: Error checking!!!!!!!!!!!!!!!!!!!
call buildTransformationSystem ( devNull , SchmidMatrix , Ntrans , cOverA , a_fcc , a_bcc )
end function lattice_SchmidMatrix_trans
2018-10-16 01:59:23 +05:30
!--------------------------------------------------------------------------------------------------
2018-12-12 04:59:19 +05:30
!> @brief Schmid matrix for cleavage
!> details only active cleavage systems are considered
2018-10-16 01:59:23 +05:30
!--------------------------------------------------------------------------------------------------
function lattice_SchmidMatrix_cleavage ( Ncleavage , structure , cOverA ) result ( SchmidMatrix )
use math , only : &
math_tensorproduct33
2018-12-12 03:30:56 +05:30
use IO , only : &
IO_error
2018-10-16 01:59:23 +05:30
implicit none
2018-12-12 04:59:19 +05:30
integer ( pInt ) , dimension ( : ) , intent ( in ) :: Ncleavage !< number of active cleavage systems per family
character ( len = * ) , intent ( in ) :: structure !< lattice structure
real ( pReal ) , intent ( in ) :: cOverA !< c/a ratio
2018-12-12 03:30:56 +05:30
real ( pReal ) , dimension ( 3 , 3 , 3 , sum ( Ncleavage ) ) :: SchmidMatrix
2018-10-16 01:59:23 +05:30
real ( pReal ) , dimension ( 3 , 3 , sum ( Ncleavage ) ) :: coordinateSystem
real ( pReal ) , dimension ( : , : ) , allocatable :: cleavageSystems
integer ( pInt ) , dimension ( : ) , allocatable :: NcleavageMax
integer ( pInt ) :: i
select case ( structure )
case ( 'iso' )
NcleavageMax = LATTICE_ISO_NCLEAVAGESYSTEM
cleavageSystems = LATTICE_ISO_SYSTEMCLEAVAGE
case ( 'ort' )
2018-12-11 12:33:40 +05:30
NcleavageMax = LATTICE_ORT_NCLEAVAGESYSTEM
cleavageSystems = LATTICE_ORT_SYSTEMCLEAVAGE
2018-10-16 01:59:23 +05:30
case ( 'fcc' )
NcleavageMax = LATTICE_FCC_NCLEAVAGESYSTEM
cleavageSystems = LATTICE_FCC_SYSTEMCLEAVAGE
case ( 'bcc' )
NcleavageMax = LATTICE_BCC_NCLEAVAGESYSTEM
cleavageSystems = LATTICE_BCC_SYSTEMCLEAVAGE
case ( 'hex' , 'hexagonal' ) !ToDo: "No alias policy": long or short?
NcleavageMax = LATTICE_HEX_NCLEAVAGESYSTEM
cleavageSystems = LATTICE_HEX_SYSTEMCLEAVAGE
case default
2018-12-12 04:59:19 +05:30
call IO_error ( 137_pInt , ext_msg = 'lattice_SchmidMatrix_cleavage: ' / / trim ( structure ) )
2018-10-16 01:59:23 +05:30
end select
if ( any ( NcleavageMax ( 1 : size ( Ncleavage ) ) - Ncleavage < 0_pInt ) ) &
call IO_error ( 145_pInt , ext_msg = 'Ncleavage ' / / trim ( structure ) )
if ( any ( Ncleavage < 0_pInt ) ) &
call IO_error ( 144_pInt , ext_msg = 'Ncleavage ' / / trim ( structure ) )
coordinateSystem = buildCoordinateSystem ( Ncleavage , NcleavageMax , cleavageSystems , structure , cOverA )
2018-12-10 02:50:18 +05:30
do i = 1 , sum ( Ncleavage )
2018-12-10 13:03:20 +05:30
SchmidMatrix ( 1 : 3 , 1 : 3 , 1 , i ) = math_tensorproduct33 ( coordinateSystem ( 1 : 3 , 1 , i ) , coordinateSystem ( 1 : 3 , 2 , i ) )
SchmidMatrix ( 1 : 3 , 1 : 3 , 2 , i ) = math_tensorproduct33 ( coordinateSystem ( 1 : 3 , 3 , i ) , coordinateSystem ( 1 : 3 , 2 , i ) )
SchmidMatrix ( 1 : 3 , 1 : 3 , 3 , i ) = math_tensorproduct33 ( coordinateSystem ( 1 : 3 , 2 , i ) , coordinateSystem ( 1 : 3 , 2 , i ) )
2018-12-10 02:50:18 +05:30
enddo
2018-10-16 01:59:23 +05:30
end function lattice_SchmidMatrix_cleavage
2018-12-12 03:30:56 +05:30
!--------------------------------------------------------------------------------------------------
2018-12-12 04:59:19 +05:30
!> @brief Forest projection (for edge dislocations)
2018-12-12 03:30:56 +05:30
!--------------------------------------------------------------------------------------------------
function lattice_forestProjection ( Nslip , structure , cOverA ) result ( projection )
use math , only : &
math_mul3x3
use IO , only : &
IO_error
implicit none
2018-12-12 04:59:19 +05:30
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
2018-12-12 03:30:56 +05:30
real ( pReal ) , dimension ( sum ( Nslip ) , sum ( Nslip ) ) :: projection
real ( pReal ) , dimension ( 3 , 3 , sum ( Nslip ) ) :: coordinateSystem
real ( pReal ) , dimension ( : , : ) , allocatable :: slipSystems
integer ( pInt ) , dimension ( : ) , allocatable :: NslipMax
integer ( pInt ) :: i , j
select case ( structure )
case ( 'fcc' )
NslipMax = LATTICE_FCC_NSLIPSYSTEM
slipSystems = LATTICE_FCC_SYSTEMSLIP
case ( 'bcc' )
NslipMax = LATTICE_BCC_NSLIPSYSTEM
slipSystems = LATTICE_BCC_SYSTEMSLIP
case ( 'hex' , 'hexagonal' ) ! ToDo: "No alias policy": long or short?
NslipMax = LATTICE_HEX_NSLIPSYSTEM
slipSystems = LATTICE_HEX_SYSTEMSLIP
case ( 'bct' )
NslipMax = LATTICE_BCT_NSLIPSYSTEM
slipSystems = LATTICE_BCT_SYSTEMSLIP
case default
2018-12-12 04:59:19 +05:30
call IO_error ( 137_pInt , ext_msg = 'lattice_forestProjection: ' / / trim ( structure ) )
2018-12-12 03:30:56 +05:30
end select
if ( any ( NslipMax ( 1 : size ( Nslip ) ) - Nslip < 0_pInt ) ) &
call IO_error ( 145_pInt , ext_msg = 'Nslip ' / / trim ( structure ) )
if ( any ( Nslip < 0_pInt ) ) &
call IO_error ( 144_pInt , ext_msg = 'Nslip ' / / trim ( structure ) )
coordinateSystem = buildCoordinateSystem ( Nslip , NslipMax , slipSystems , structure , cOverA )
2018-12-12 04:59:19 +05:30
2018-12-12 03:30:56 +05:30
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 , 3 , j ) ) )
enddo ; enddo
end function lattice_forestProjection
2018-09-08 23:02:26 +05:30
!--------------------------------------------------------------------------------------------------
!> @brief Populates reduced interaction matrix
!--------------------------------------------------------------------------------------------------
2018-12-12 04:59:19 +05:30
function buildInteraction ( activeA , activeB , maxA , maxB , values , matrix )
use IO , only : &
IO_error
2018-08-25 16:38:32 +05:30
implicit none
integer ( pInt ) , dimension ( : ) , intent ( in ) :: &
2018-09-08 23:02:26 +05:30
activeA , & !< number of active systems as specified in material.config
activeB , & !< number of active systems as specified in material.config
maxA , & !< number of maximum available systems
maxB !< number of maximum available systems
2018-08-25 16:38:32 +05:30
real ( pReal ) , dimension ( : ) , intent ( in ) :: values !< interaction values
2018-12-12 04:59:19 +05:30
integer ( pInt ) , dimension ( : , : ) , intent ( in ) :: matrix !< complete interaction matrix
2018-08-25 16:38:32 +05:30
real ( pReal ) , dimension ( sum ( activeA ) , sum ( activeB ) ) :: buildInteraction
integer ( pInt ) :: &
index_myFamily , index_otherFamily , &
mf , ms , of , os
myFamilies : do mf = 1_pInt , size ( activeA , 1 )
2018-10-07 19:14:13 +05:30
index_myFamily = sum ( activeA ( 1 : mf - 1_pInt ) )
mySystems : do ms = 1_pInt , activeA ( mf )
otherFamilies : do of = 1_pInt , size ( activeB , 1 )
index_otherFamily = sum ( activeB ( 1 : of - 1_pInt ) )
otherSystems : do os = 1_pInt , activeB ( of )
2018-12-12 04:59:19 +05:30
if ( matrix ( sum ( maxA ( 1 : mf - 1 ) ) + ms , sum ( maxB ( 1 : of - 1 ) ) + os ) > size ( values ) ) &
call IO_error ( 138 , ext_msg = 'buildInteraction' )
2018-10-07 19:14:13 +05:30
buildInteraction ( index_myFamily + ms , index_otherFamily + os ) = &
values ( matrix ( sum ( maxA ( 1 : mf - 1 ) ) + ms , sum ( maxB ( 1 : of - 1 ) ) + os ) )
enddo otherSystems ; enddo otherFamilies ;
2018-08-25 16:38:32 +05:30
enddo mySystems ; enddo myFamilies
end function buildInteraction
2018-08-25 22:02:55 +05:30
!--------------------------------------------------------------------------------------------------
!> @brief build a local coordinate system in a slip, twin, trans, cleavage system
2018-12-12 04:59:19 +05:30
!> @details Order: Direction, plane (normal), and common perpendicular
2018-08-25 22:02:55 +05:30
!--------------------------------------------------------------------------------------------------
2018-12-12 04:59:19 +05:30
function buildCoordinateSystem ( active , complete , system , structure , cOverA )
use IO , only : &
IO_error
2018-08-25 22:02:55 +05:30
use math , only : &
math_crossproduct
implicit none
integer ( pInt ) , dimension ( : ) , intent ( in ) :: &
2018-10-07 19:14:13 +05:30
active , &
2018-12-12 04:59:19 +05:30
complete
2018-10-08 11:57:12 +05:30
real ( pReal ) , dimension ( : , : ) , intent ( in ) :: &
2018-08-25 22:02:55 +05:30
system
character ( len = * ) , intent ( in ) :: &
structure !< lattice structure
2018-10-10 11:12:07 +05:30
real ( pReal ) , intent ( in ) :: &
2018-08-25 22:02:55 +05:30
cOverA
real ( pReal ) , dimension ( 3 , 3 , sum ( active ) ) :: &
buildCoordinateSystem
real ( pReal ) , dimension ( 3 ) :: &
direction , normal
2018-09-08 23:02:26 +05:30
integer ( pInt ) :: &
2018-12-12 04:59:19 +05:30
a , & !< index of active system
c , & !< index in complete system matrix
2018-10-07 19:14:13 +05:30
f , & !< index of my family
s !< index of my system in current family
2018-08-25 22:02:55 +05:30
2018-12-13 15:41:45 +05:30
if ( trim ( structure ) == 'bct' . and . cOverA > 2.0_pReal ) &
call IO_error ( 131_pInt , ext_msg = 'buildCoordinateSystem:' / / trim ( structure ) )
if ( trim ( structure ) == 'hex' . and . ( cOverA < 1.0_pReal . or . cOverA > 2.0_pReal ) ) &
call IO_error ( 131_pInt , ext_msg = 'buildCoordinateSystem:' / / trim ( structure ) )
2018-12-12 04:59:19 +05:30
a = 0_pInt
2018-10-07 19:14:13 +05:30
activeFamilies : do f = 1_pInt , size ( active , 1 )
activeSystems : do s = 1_pInt , active ( f )
2018-12-12 04:59:19 +05:30
a = a + 1_pInt
c = sum ( complete ( 1 : f - 1 ) ) + s
2018-08-25 22:02:55 +05:30
select case ( trim ( structure ) )
2018-12-13 15:41:45 +05:30
case ( 'fcc' , 'bcc' , 'iso' , 'ort' , 'bct' )
2018-12-12 04:59:19 +05:30
direction = system ( 1 : 3 , c )
normal = system ( 4 : 6 , c )
2018-08-25 22:02:55 +05:30
case ( 'hex' )
2018-12-12 04:59:19 +05:30
direction = [ system ( 1 , c ) * 1.5_pReal , &
( system ( 1 , c ) + 2.0_pReal * system ( 2 , c ) ) * sqrt ( 0.75_pReal ) , &
system ( 4 , c ) * cOverA ] ! direction [uvtw]->[3u/2 (u+2v)*sqrt(3)/2 w*(c/a)])
normal = [ system ( 5 , c ) , &
( system ( 5 , c ) + 2.0_pReal * system ( 6 , c ) ) / sqrt ( 3.0_pReal ) , &
system ( 8 , c ) / cOverA ] ! plane (hkil)->(h (h+2k)/sqrt(3) l/(c/a))
2018-08-25 22:02:55 +05:30
2018-12-12 04:59:19 +05:30
case default
call IO_error ( 137_pInt , ext_msg = 'buildCoordinateSystem: ' / / trim ( structure ) )
2018-08-25 22:02:55 +05:30
end select
2018-12-12 04:59:19 +05:30
buildCoordinateSystem ( 1 : 3 , 1 , a ) = direction / norm2 ( direction )
buildCoordinateSystem ( 1 : 3 , 2 , a ) = normal / norm2 ( normal )
buildCoordinateSystem ( 1 : 3 , 3 , a ) = math_crossproduct ( buildCoordinateSystem ( 1 : 3 , 1 , a ) , &
buildCoordinateSystem ( 1 : 3 , 2 , a ) )
2018-08-25 22:02:55 +05:30
2018-10-07 19:14:13 +05:30
enddo activeSystems
enddo activeFamilies
2018-08-25 22:02:55 +05:30
end function buildCoordinateSystem
2018-12-22 12:19:52 +05:30
2018-12-12 03:30:56 +05:30
!--------------------------------------------------------------------------------------------------
2018-12-12 04:59:19 +05:30
!> @brief Helper function to define transformation systems
2018-12-22 12:19:52 +05:30
! Needed to calculate Schmid matrix and rotated stiffness matrices.
! @details: set c/a = 0.0 for fcc -> bcc transformation
! set a_bcc = 0.0 for fcc -> bcc transformation
2018-12-12 03:30:56 +05:30
!--------------------------------------------------------------------------------------------------
2018-12-22 12:19:52 +05:30
subroutine buildTransformationSystem ( Q , S , Ntrans , cOverA , a_fcc , a_bcc )
use prec , only : &
dEq0
2018-12-12 03:30:56 +05:30
use math , only : &
math_crossproduct , &
math_tensorproduct33 , &
math_mul33x33 , &
math_mul33x3 , &
math_axisAngleToR , &
INRAD , &
MATH_I3
use IO , only : &
IO_error
implicit none
integer ( pInt ) , dimension ( : ) , intent ( in ) :: &
Ntrans
real ( pReal ) , dimension ( 3 , 3 , sum ( Ntrans ) ) , intent ( out ) :: &
2018-12-22 12:19:52 +05:30
Q , & !< Total rotation: Q = R*B
S !< Eigendeformation tensor for phase transformation
real ( pReal ) , intent ( in ) :: &
cOverA , & !< c/a for target hex structure
a_bcc , & !< lattice parameter a for target bcc structure
a_fcc !< lattice parameter a for parent fcc structure
2018-12-12 03:30:56 +05:30
real ( pReal ) , dimension ( 3 , 3 ) :: &
2018-12-22 12:19:52 +05:30
R , & !< Pitsch rotation
U , & !< Bain deformation
B , & !< Rotation of fcc to Bain coordinate system
2018-12-12 03:30:56 +05:30
ss , sd
real ( pReal ) , dimension ( 3 ) :: &
x , y , z
integer ( pInt ) :: &
i
2018-12-22 12:19:52 +05:30
real ( pReal ) , dimension ( 3 + 3 , LATTICE_FCC_NTRANS ) , parameter :: &
LATTICE_FCCTOHEX_SYSTEMTRANS = reshape ( real ( [ &
- 2 , 1 , 1 , 1 , 1 , 1 , &
1 , - 2 , 1 , 1 , 1 , 1 , &
1 , 1 , - 2 , 1 , 1 , 1 , &
2 , - 1 , 1 , - 1 , - 1 , 1 , &
- 1 , 2 , 1 , - 1 , - 1 , 1 , &
- 1 , - 1 , - 2 , - 1 , - 1 , 1 , &
- 2 , - 1 , - 1 , 1 , - 1 , - 1 , &
1 , 2 , - 1 , 1 , - 1 , - 1 , &
1 , - 1 , 2 , 1 , - 1 , - 1 , &
2 , 1 , - 1 , - 1 , 1 , - 1 , &
- 1 , - 2 , - 1 , - 1 , 1 , - 1 , &
- 1 , 1 , 2 , - 1 , 1 , - 1 &
] , pReal ) , shape ( LATTICE_FCCTOHEX_SYSTEMTRANS ) )
real ( pReal ) , dimension ( 4 , LATTICE_fcc_Ntrans ) , parameter :: &
LATTICE_FCCTOBCC_SYSTEMTRANS = reshape ( [ &
0.0 , 1.0 , 0.0 , 1 0.26 , & ! Pitsch OR (Ma & Hartmaier 2014, Table 3)
0.0 , 1.0 , 0.0 , - 1 0.26 , &
0.0 , 0.0 , 1.0 , 1 0.26 , &
0.0 , 0.0 , 1.0 , - 1 0.26 , &
1.0 , 0.0 , 0.0 , 1 0.26 , &
1.0 , 0.0 , 0.0 , - 1 0.26 , &
0.0 , 0.0 , 1.0 , 1 0.26 , &
0.0 , 0.0 , 1.0 , - 1 0.26 , &
1.0 , 0.0 , 0.0 , 1 0.26 , &
1.0 , 0.0 , 0.0 , - 1 0.26 , &
0.0 , 1.0 , 0.0 , 1 0.26 , &
0.0 , 1.0 , 0.0 , - 1 0.26 &
] , shape ( LATTICE_FCCTOBCC_SYSTEMTRANS ) )
integer ( pInt ) , dimension ( 9 , LATTICE_fcc_Ntrans ) , parameter :: &
LATTICE_FCCTOBCC_BAINVARIANT = reshape ( int ( [ &
1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , & ! Pitsch OR (Ma & Hartmaier 2014, Table 3)
1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , &
1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , &
1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , &
0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , &
0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , &
0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , &
0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , &
0 , 0 , 1 , 1 , 0 , 0 , 0 , 1 , 0 , &
0 , 0 , 1 , 1 , 0 , 0 , 0 , 1 , 0 , &
0 , 0 , 1 , 1 , 0 , 0 , 0 , 1 , 0 , &
0 , 0 , 1 , 1 , 0 , 0 , 0 , 1 , 0 &
] , pInt ) , shape ( LATTICE_FCCTOBCC_BAINVARIANT ) )
real ( pReal ) , dimension ( 4 , LATTICE_fcc_Ntrans ) , parameter :: &
LATTICE_FCCTOBCC_BAINROT = reshape ( [ &
1.0 , 0.0 , 0.0 , 4 5.0 , & ! Rotate fcc austensite to bain variant
1.0 , 0.0 , 0.0 , 4 5.0 , &
1.0 , 0.0 , 0.0 , 4 5.0 , &
1.0 , 0.0 , 0.0 , 4 5.0 , &
0.0 , 1.0 , 0.0 , 4 5.0 , &
0.0 , 1.0 , 0.0 , 4 5.0 , &
0.0 , 1.0 , 0.0 , 4 5.0 , &
0.0 , 1.0 , 0.0 , 4 5.0 , &
0.0 , 0.0 , 1.0 , 4 5.0 , &
0.0 , 0.0 , 1.0 , 4 5.0 , &
0.0 , 0.0 , 1.0 , 4 5.0 , &
0.0 , 0.0 , 1.0 , 4 5.0 &
] , shape ( LATTICE_FCCTOBCC_BAINROT ) )
2018-12-12 03:30:56 +05:30
2019-01-06 12:47:23 +05:30
if ( size ( Ntrans ) < 1_pInt . or . size ( Ntrans ) > 1_pInt ) print * , 'mist' ! ToDo
2018-12-12 04:59:19 +05:30
2018-12-22 12:19:52 +05:30
if ( a_bcc > 0.0_pReal . and . dEq0 ( cOverA ) ) then ! fcc -> bcc transformation
2019-01-06 12:47:23 +05:30
if ( a_bcc < = 0.0_pReal ) print * , 'mist' ! ToDo
2018-12-12 03:30:56 +05:30
do i = 1_pInt , sum ( Ntrans )
2018-12-22 12:19:52 +05:30
R = math_axisAngleToR ( lattice_fccTobcc_systemTrans ( 1 : 3 , i ) , &
2018-12-12 03:30:56 +05:30
lattice_fccTobcc_systemTrans ( 4 , i ) * INRAD )
2018-12-22 12:19:52 +05:30
B = math_axisAngleToR ( lattice_fccTobcc_bainRot ( 1 : 3 , i ) , &
2018-12-12 03:30:56 +05:30
lattice_fccTobcc_bainRot ( 4 , i ) * INRAD )
x = real ( LATTICE_fccTobcc_bainVariant ( 1 : 3 , i ) , pReal )
y = real ( LATTICE_fccTobcc_bainVariant ( 4 : 6 , i ) , pReal )
2018-12-12 04:59:19 +05:30
z = real ( LATTICE_fccTobcc_bainVariant ( 7 : 9 , i ) , pReal )
2018-12-12 03:30:56 +05:30
U = ( a_bcc / a_fcc ) * math_tensorproduct33 ( x , x ) &
+ ( a_bcc / a_fcc ) * math_tensorproduct33 ( y , y ) * sqrt ( 2.0_pReal ) &
+ ( a_bcc / a_fcc ) * math_tensorproduct33 ( z , z ) * sqrt ( 2.0_pReal )
Q ( 1 : 3 , 1 : 3 , i ) = math_mul33x33 ( R , B )
S ( 1 : 3 , 1 : 3 , i ) = math_mul33x33 ( R , U ) - MATH_I3
enddo
2018-12-22 12:19:52 +05:30
elseif ( cOverA > 0.0_pReal . and . dEq0 ( a_bcc ) ) then ! fcc -> hex transformation
2018-12-12 03:30:56 +05:30
ss = MATH_I3
sd = MATH_I3
ss ( 1 , 3 ) = sqrt ( 2.0_pReal ) / 4.0_pReal
if ( cOverA > 1.0_pReal . and . cOverA < 2.0_pReal ) &
sd ( 3 , 3 ) = cOverA / sqrt ( 8.0_pReal / 3.0_pReal )
do i = 1_pInt , sum ( Ntrans )
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 ) )
y = - math_crossproduct ( x , z )
Q ( 1 : 3 , 1 , i ) = x
Q ( 1 : 3 , 2 , i ) = y
Q ( 1 : 3 , 3 , i ) = z
2018-12-22 12:19:52 +05:30
S ( 1 : 3 , 1 : 3 , i ) = math_mul33x33 ( Q ( 1 : 3 , 1 : 3 , i ) , math_mul33x33 ( math_mul33x33 ( sd , ss ) , transpose ( Q ( 1 : 3 , 1 : 3 , i ) ) ) ) - MATH_I3 ! ToDo: This is of interest for the Schmid matrix only
2018-12-12 03:30:56 +05:30
enddo
endif
2018-12-12 04:59:19 +05:30
2018-12-22 12:19:52 +05:30
end subroutine buildTransformationSystem
2018-12-12 03:30:56 +05:30
2014-08-14 17:51:51 +05:30
end module lattice