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
2023-07-15 23:58:57 +05:30
!> @brief Contains crystal 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
!--------------------------------------------------------------------------------------------------
2023-07-15 23:58:57 +05:30
module crystal
2019-05-17 02:26:48 +05:30
use prec
2023-02-19 02:00:57 +05:30
use misc
2019-05-17 02:26:48 +05:30
use IO
use config
use math
2019-09-20 19:38:21 +05:30
use rotations
2022-06-22 02:16:54 +05:30
implicit none ( type , external )
2019-04-13 04:16:27 +05:30
private
2020-02-25 22:02:49 +05:30
2014-08-14 17:51:51 +05:30
!--------------------------------------------------------------------------------------------------
2022-02-21 14:30:00 +05:30
! cF: face centered cubic (fcc)
2020-03-29 22:47:24 +05:30
integer , dimension ( * ) , parameter :: &
2022-02-21 14:30:00 +05:30
CF_NSLIPSYSTEM = [ 12 , 6 ] !< # of slip systems per family for cF
2020-02-25 22:02:49 +05:30
2020-03-29 22:47:24 +05:30
integer , dimension ( * ) , parameter :: &
2022-02-21 14:30:00 +05:30
CF_NTWINSYSTEM = [ 12 ] !< # of twin systems per family for cF
2020-02-25 22:02:49 +05:30
2020-03-29 22:47:24 +05:30
integer , dimension ( * ) , parameter :: &
2022-02-21 14:30:00 +05:30
CF_NTRANSSYSTEM = [ 12 ] !< # of transformation systems per family for cF
2020-02-25 22:02:49 +05:30
2020-03-29 22:47:24 +05:30
integer , dimension ( * ) , parameter :: &
2022-02-21 14:30:00 +05:30
CF_NCLEAVAGESYSTEM = [ 3 ] !< # of cleavage systems per family for cF
2020-02-25 22:02:49 +05:30
2019-05-17 02:26:48 +05:30
integer , parameter :: &
2022-02-21 14:30:00 +05:30
CF_NSLIP = sum ( CF_NSLIPSYSTEM ) , & !< total # of slip systems for cF
CF_NTWIN = sum ( CF_NTWINSYSTEM ) , & !< total # of twin systems for cF
CF_NTRANS = sum ( CF_NTRANSSYSTEM ) , & !< total # of transformation systems for cF
CF_NCLEAVAGE = sum ( CF_NCLEAVAGESYSTEM ) !< total # of cleavage systems for cF
2020-01-04 05:34:20 +05:30
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 3 + 3 , CF_NSLIP ) , parameter :: &
2022-02-21 14:30:00 +05:30
CF_SYSTEMSLIP = reshape ( real ( [ &
2023-06-21 20:51:44 +05:30
! <110>{111} systems (Thompson tetrahedron labeling according to Fig. 3 of 10.1016/S1572-4859(05)80003-8)
2023-06-22 20:57:46 +05:30
0 , 1 , - 1 , 1 , 1 , 1 , & ! AC(d)
- 1 , 0 , 1 , 1 , 1 , 1 , & ! CB(d)
1 , - 1 , 0 , 1 , 1 , 1 , & ! BA(d)
0 , - 1 , - 1 , - 1 , - 1 , 1 , & ! BD(c)
1 , 0 , 1 , - 1 , - 1 , 1 , & ! DA(c)
- 1 , 1 , 0 , - 1 , - 1 , 1 , & ! AB(c)
0 , - 1 , 1 , 1 , - 1 , - 1 , & ! CA(b)
- 1 , 0 , - 1 , 1 , - 1 , - 1 , & ! AD(b)
1 , 1 , 0 , 1 , - 1 , - 1 , & ! DC(b)
0 , 1 , 1 , - 1 , 1 , - 1 , & ! DB(a)
1 , 0 , - 1 , - 1 , 1 , - 1 , & ! BC(a)
- 1 , - 1 , 0 , - 1 , 1 , - 1 , & ! CD(a)
2021-05-09 14:28:43 +05:30
! <110>{110}/non-octahedral systems
2019-04-13 04:16:27 +05:30
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 &
2023-06-04 10:52:25 +05:30
] , pREAL ) , shape ( CF_SYSTEMSLIP ) ) !< cF slip systems
2020-02-25 22:02:49 +05:30
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 3 + 3 , CF_NTWIN ) , parameter :: &
2022-02-21 14:30:00 +05:30
CF_SYSTEMTWIN = reshape ( real ( [ &
2021-05-09 14:28:43 +05:30
! <112>{111} systems
2019-04-13 04:16:27 +05:30
- 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 &
2023-06-04 10:52:25 +05:30
] , pREAL ) , shape ( CF_SYSTEMTWIN ) ) !< cF twin systems
2020-02-25 22:02:49 +05:30
2022-02-21 14:30:00 +05:30
integer , dimension ( 2 , CF_NTWIN ) , parameter , public :: &
2023-07-15 23:58:57 +05:30
crystal_CF_TWINNUCLEATIONSLIPPAIR = reshape ( [ &
2019-04-13 04:16:27 +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 &
2023-07-15 23:58:57 +05:30
] , shape ( crystal_CF_TWINNUCLEATIONSLIPPAIR ) )
2020-02-25 22:02:49 +05:30
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 3 + 3 , CF_NCLEAVAGE ) , parameter :: &
2022-02-21 14:30:00 +05:30
CF_SYSTEMCLEAVAGE = reshape ( real ( [ &
2021-05-09 14:28:43 +05:30
! <001>{001} systems
2019-04-13 04:16:27 +05:30
0 , 1 , 0 , 1 , 0 , 0 , &
0 , 0 , 1 , 0 , 1 , 0 , &
2020-02-26 23:41:33 +05:30
1 , 0 , 0 , 0 , 0 , 1 &
2023-06-04 10:52:25 +05:30
] , pREAL ) , shape ( CF_SYSTEMCLEAVAGE ) ) !< cF cleavage systems
2020-02-25 22:02:49 +05:30
2014-08-14 17:51:51 +05:30
!--------------------------------------------------------------------------------------------------
2022-02-21 14:30:00 +05:30
! cI: body centered cubic (bcc)
2020-03-29 22:47:24 +05:30
integer , dimension ( * ) , parameter :: &
2022-02-21 14:30:00 +05:30
CI_NSLIPSYSTEM = [ 12 , 12 , 24 ] !< # of slip systems per family for cI
2020-02-25 22:02:49 +05:30
2020-03-29 22:47:24 +05:30
integer , dimension ( * ) , parameter :: &
2022-02-21 14:30:00 +05:30
CI_NTWINSYSTEM = [ 12 ] !< # of twin systems per family for cI
2020-02-25 22:02:49 +05:30
2020-03-29 22:47:24 +05:30
integer , dimension ( * ) , parameter :: &
2022-02-21 14:30:00 +05:30
CI_NCLEAVAGESYSTEM = [ 3 ] !< # of cleavage systems per family for cI
2020-02-25 22:02:49 +05:30
2019-05-17 02:26:48 +05:30
integer , parameter :: &
2022-02-21 14:30:00 +05:30
CI_NSLIP = sum ( CI_NSLIPSYSTEM ) , & !< total # of slip systems for cI
CI_NTWIN = sum ( CI_NTWINSYSTEM ) , & !< total # of twin systems for cI
CI_NCLEAVAGE = sum ( CI_NCLEAVAGESYSTEM ) !< total # of cleavage systems for cI
2020-01-04 05:34:20 +05:30
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 3 + 3 , CI_NSLIP ) , parameter :: &
2022-02-21 14:30:00 +05:30
CI_SYSTEMSLIP = reshape ( real ( [ &
2021-05-09 14:28:43 +05:30
! <111>{110} systems
2023-09-15 02:15:24 +05:30
! Sign convention follows Table 1 of 10.1016/j.ijplas.2020.102733
! to allow for universal calculation of non-glide plane normal n1 = Rot(-m,60°) @ n
! The choice matters since Rot(-m,60°) @ n ≠ Rot(m,60°) @ -n ..!
2023-06-21 20:51:44 +05:30
1 , - 1 , 1 , 0 , 1 , 1 , &
2023-09-15 02:15:24 +05:30
- 1 , - 1 , 1 , 0 , - 1 , - 1 , &
1 , 1 , 1 , 0 , 1 , - 1 , &
2023-06-21 20:51:44 +05:30
- 1 , 1 , 1 , 0 , - 1 , 1 , &
2023-09-15 02:15:24 +05:30
- 1 , 1 , 1 , - 1 , 0 , - 1 , &
2023-06-21 20:51:44 +05:30
- 1 , - 1 , 1 , 1 , 0 , 1 , &
1 , 1 , 1 , - 1 , 0 , 1 , &
2023-09-15 02:15:24 +05:30
1 , - 1 , 1 , 1 , 0 , - 1 , &
2023-06-21 20:51:44 +05:30
- 1 , 1 , 1 , 1 , 1 , 0 , &
2023-09-15 02:15:24 +05:30
1 , - 1 , 1 , - 1 , - 1 , 0 , &
1 , 1 , 1 , 1 , - 1 , 0 , &
- 1 , - 1 , 1 , - 1 , 1 , 0 , &
2021-05-09 14:28:43 +05:30
! <111>{112} systems
2023-06-21 20:51:44 +05:30
- 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 , &
2021-05-20 20:34:47 +05:30
! Slip system <111>{123}
1 , 1 , - 1 , 1 , 2 , 3 , &
1 , - 1 , 1 , - 1 , 2 , 3 , &
- 1 , 1 , 1 , 1 , - 2 , 3 , &
1 , 1 , 1 , 1 , 2 , - 3 , &
1 , - 1 , 1 , 1 , 3 , 2 , &
1 , 1 , - 1 , - 1 , 3 , 2 , &
1 , 1 , 1 , 1 , - 3 , 2 , &
- 1 , 1 , 1 , 1 , 3 , - 2 , &
1 , 1 , - 1 , 2 , 1 , 3 , &
1 , - 1 , 1 , - 2 , 1 , 3 , &
- 1 , 1 , 1 , 2 , - 1 , 3 , &
1 , 1 , 1 , 2 , 1 , - 3 , &
1 , - 1 , 1 , 2 , 3 , 1 , &
1 , 1 , - 1 , - 2 , 3 , 1 , &
1 , 1 , 1 , 2 , - 3 , 1 , &
- 1 , 1 , 1 , 2 , 3 , - 1 , &
- 1 , 1 , 1 , 3 , 1 , 2 , &
1 , 1 , 1 , - 3 , 1 , 2 , &
1 , 1 , - 1 , 3 , - 1 , 2 , &
1 , - 1 , 1 , 3 , 1 , - 2 , &
- 1 , 1 , 1 , 3 , 2 , 1 , &
1 , 1 , 1 , - 3 , 2 , 1 , &
1 , 1 , - 1 , 3 , - 2 , 1 , &
1 , - 1 , 1 , 3 , 2 , - 1 &
2023-06-04 10:52:25 +05:30
] , pREAL ) , shape ( CI_SYSTEMSLIP ) ) !< cI slip systems
2020-02-25 22:02:49 +05:30
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 3 + 3 , CI_NTWIN ) , parameter :: &
2022-02-21 14:30:00 +05:30
CI_SYSTEMTWIN = reshape ( real ( [ &
2021-05-09 14:28:43 +05:30
! <111>{112} systems
2019-04-13 04:16:27 +05:30
- 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 &
2023-06-04 10:52:25 +05:30
] , pREAL ) , shape ( CI_SYSTEMTWIN ) ) !< cI twin systems
2020-02-25 22:02:49 +05:30
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 3 + 3 , CI_NCLEAVAGE ) , parameter :: &
2022-02-21 14:30:00 +05:30
CI_SYSTEMCLEAVAGE = reshape ( real ( [ &
2021-05-09 14:28:43 +05:30
! <001>{001} systems
2019-04-13 04:16:27 +05:30
0 , 1 , 0 , 1 , 0 , 0 , &
0 , 0 , 1 , 0 , 1 , 0 , &
2020-02-26 23:41:33 +05:30
1 , 0 , 0 , 0 , 0 , 1 &
2023-06-04 10:52:25 +05:30
] , pREAL ) , shape ( CI_SYSTEMCLEAVAGE ) ) !< cI cleavage systems
2020-02-25 22:02:49 +05:30
2014-08-14 17:51:51 +05:30
!--------------------------------------------------------------------------------------------------
2022-02-21 14:30:00 +05:30
! hP: hexagonal [close packed] (hex, hcp)
2020-03-29 22:47:24 +05:30
integer , dimension ( * ) , parameter :: &
2022-02-21 14:30:00 +05:30
HP_NSLIPSYSTEM = [ 3 , 3 , 6 , 12 , 6 ] !< # of slip systems per family for hP
2020-02-25 22:02:49 +05:30
2020-03-29 22:47:24 +05:30
integer , dimension ( * ) , parameter :: &
2022-02-21 14:30:00 +05:30
HP_NTWINSYSTEM = [ 6 , 6 , 6 , 6 ] !< # of slip systems per family for hP
2020-02-25 22:02:49 +05:30
2019-05-17 02:26:48 +05:30
integer , parameter :: &
2022-02-21 14:30:00 +05:30
HP_NSLIP = sum ( HP_NSLIPSYSTEM ) , & !< total # of slip systems for hP
HP_NTWIN = sum ( HP_NTWINSYSTEM ) !< total # of twin systems for hP
2020-01-04 05:34:20 +05:30
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 4 + 4 , HP_NSLIP ) , parameter :: &
2022-02-21 14:30:00 +05:30
HP_SYSTEMSLIP = reshape ( real ( [ &
2021-05-09 14:28:43 +05:30
! <-1-1.0>{00.1}/basal systems (independent of c/a-ratio)
2019-04-13 04:16:27 +05:30
2 , - 1 , - 1 , 0 , 0 , 0 , 0 , 1 , &
- 1 , 2 , - 1 , 0 , 0 , 0 , 0 , 1 , &
- 1 , - 1 , 2 , 0 , 0 , 0 , 0 , 1 , &
2021-05-09 14:28:43 +05:30
! <-1-1.0>{1-1.0}/prismatic systems (independent of c/a-ratio)
2019-04-13 04:16:27 +05:30
2 , - 1 , - 1 , 0 , 0 , 1 , - 1 , 0 , &
- 1 , 2 , - 1 , 0 , - 1 , 0 , 1 , 0 , &
- 1 , - 1 , 2 , 0 , 1 , - 1 , 0 , 0 , &
2021-11-24 16:54:12 +05:30
! <-1-1.0>{-11.1}/1. order pyramidal <a> systems (direction independent of c/a-ratio)
2019-10-07 21:34:29 +05:30
- 1 , 2 , - 1 , 0 , 1 , 0 , - 1 , 1 , &
- 2 , 1 , 1 , 0 , 0 , 1 , - 1 , 1 , &
- 1 , - 1 , 2 , 0 , - 1 , 1 , 0 , 1 , &
1 , - 2 , 1 , 0 , - 1 , 0 , 1 , 1 , &
2 , - 1 , - 1 , 0 , 0 , - 1 , 1 , 1 , &
1 , 1 , - 2 , 0 , 1 , - 1 , 0 , 1 , &
2021-11-24 16:54:12 +05:30
! <11.3>{-10.1}/1. order pyramidal <c+a> systems (direction independent of c/a-ratio)
2019-04-13 04:16:27 +05:30
- 2 , 1 , 1 , 3 , 1 , 0 , - 1 , 1 , &
2019-10-07 21:34:29 +05:30
- 1 , - 1 , 2 , 3 , 1 , 0 , - 1 , 1 , &
- 1 , - 1 , 2 , 3 , 0 , 1 , - 1 , 1 , &
1 , - 2 , 1 , 3 , 0 , 1 , - 1 , 1 , &
1 , - 2 , 1 , 3 , - 1 , 1 , 0 , 1 , &
2 , - 1 , - 1 , 3 , - 1 , 1 , 0 , 1 , &
2 , - 1 , - 1 , 3 , - 1 , 0 , 1 , 1 , &
1 , 1 , - 2 , 3 , - 1 , 0 , 1 , 1 , &
2019-04-13 04:16:27 +05:30
1 , 1 , - 2 , 3 , 0 , - 1 , 1 , 1 , &
2019-10-07 21:34:29 +05:30
- 1 , 2 , - 1 , 3 , 0 , - 1 , 1 , 1 , &
2019-04-13 04:16:27 +05:30
- 1 , 2 , - 1 , 3 , 1 , - 1 , 0 , 1 , &
2019-10-07 21:34:29 +05:30
- 2 , 1 , 1 , 3 , 1 , - 1 , 0 , 1 , &
2021-11-24 16:54:12 +05:30
! <11.3>{-1-1.2}/2. order pyramidal <c+a> systems
2021-05-09 14:28:43 +05:30
- 1 , - 1 , 2 , 3 , 1 , 1 , - 2 , 2 , &
2019-04-13 04:16:27 +05:30
1 , - 2 , 1 , 3 , - 1 , 2 , - 1 , 2 , &
2019-10-07 21:34:29 +05:30
2 , - 1 , - 1 , 3 , - 2 , 1 , 1 , 2 , &
1 , 1 , - 2 , 3 , - 1 , - 1 , 2 , 2 , &
- 1 , 2 , - 1 , 3 , 1 , - 2 , 1 , 2 , &
- 2 , 1 , 1 , 3 , 2 , - 1 , - 1 , 2 &
2023-06-04 10:52:25 +05:30
] , pREAL ) , shape ( HP_SYSTEMSLIP ) ) !< hP slip systems, sorted by P. Eisenlohr CCW around <c> starting next to a_1 axis
2020-02-25 22:02:49 +05:30
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 4 + 4 , HP_NTWIN ) , parameter :: &
2022-02-21 14:30:00 +05:30
HP_SYSTEMTWIN = reshape ( real ( [ &
2021-05-09 14:28:43 +05:30
! <-10.1>{10.2} systems, shear = (3-(c/a)^2)/(sqrt(3) c/a)
! tension in Co, Mg, Zr, Ti, and Be; compression in Cd and Zn
- 1 , 0 , 1 , 1 , 1 , 0 , - 1 , 2 , & !
2019-10-07 21:34:29 +05:30
0 , - 1 , 1 , 1 , 0 , 1 , - 1 , 2 , &
1 , - 1 , 0 , 1 , - 1 , 1 , 0 , 2 , &
1 , 0 , - 1 , 1 , - 1 , 0 , 1 , 2 , &
2019-04-13 04:16:27 +05:30
0 , 1 , - 1 , 1 , 0 , - 1 , 1 , 2 , &
- 1 , 1 , 0 , 1 , 1 , - 1 , 0 , 2 , &
2021-05-09 14:28:43 +05:30
! <11.6>{-1-1.1} systems, shear = 1/(c/a)
! tension in Co, Re, and Zr
- 1 , - 1 , 2 , 6 , 1 , 1 , - 2 , 1 , &
2019-04-13 04:16:27 +05:30
1 , - 2 , 1 , 6 , - 1 , 2 , - 1 , 1 , &
2019-10-07 21:34:29 +05:30
2 , - 1 , - 1 , 6 , - 2 , 1 , 1 , 1 , &
2019-04-13 04:16:27 +05:30
1 , 1 , - 2 , 6 , - 1 , - 1 , 2 , 1 , &
2019-10-07 21:34:29 +05:30
- 1 , 2 , - 1 , 6 , 1 , - 2 , 1 , 1 , &
- 2 , 1 , 1 , 6 , 2 , - 1 , - 1 , 1 , &
2021-05-09 14:28:43 +05:30
! <10.-2>{10.1} systems, shear = (4(c/a)^2-9)/(4 sqrt(3) c/a)
! compression in Mg
1 , 0 , - 1 , - 2 , 1 , 0 , - 1 , 1 , &
2019-10-07 21:34:29 +05:30
0 , 1 , - 1 , - 2 , 0 , 1 , - 1 , 1 , &
- 1 , 1 , 0 , - 2 , - 1 , 1 , 0 , 1 , &
- 1 , 0 , 1 , - 2 , - 1 , 0 , 1 , 1 , &
2019-04-13 04:16:27 +05:30
0 , - 1 , 1 , - 2 , 0 , - 1 , 1 , 1 , &
1 , - 1 , 0 , - 2 , 1 , - 1 , 0 , 1 , &
2021-05-09 14:28:43 +05:30
! <11.-3>{11.2} systems, shear = 2((c/a)^2-2)/(3 c/a)
! compression in Ti and Zr
1 , 1 , - 2 , - 3 , 1 , 1 , - 2 , 2 , &
2019-04-13 04:16:27 +05:30
- 1 , 2 , - 1 , - 3 , - 1 , 2 , - 1 , 2 , &
- 2 , 1 , 1 , - 3 , - 2 , 1 , 1 , 2 , &
2019-10-07 21:34:29 +05:30
- 1 , - 1 , 2 , - 3 , - 1 , - 1 , 2 , 2 , &
2019-04-13 04:16:27 +05:30
1 , - 2 , 1 , - 3 , 1 , - 2 , 1 , 2 , &
2019-10-07 21:34:29 +05:30
2 , - 1 , - 1 , - 3 , 2 , - 1 , - 1 , 2 &
2023-06-04 10:52:25 +05:30
] , pREAL ) , shape ( HP_SYSTEMTWIN ) ) !< hP twin systems, sorted by P. Eisenlohr CCW around <c> starting next to a_1 axis
2020-02-25 22:02:49 +05:30
2015-06-27 20:25:30 +05:30
!--------------------------------------------------------------------------------------------------
2022-02-21 14:30:00 +05:30
! tI: body centered tetragonal (bct)
2020-03-29 22:47:24 +05:30
integer , dimension ( * ) , parameter :: &
2022-02-21 14:30:00 +05:30
TI_NSLIPSYSTEM = [ 2 , 2 , 2 , 4 , 2 , 4 , 2 , 2 , 4 , 8 , 4 , 8 , 8 ] !< # of slip systems per family for tI
2020-02-25 22:02:49 +05:30
2019-05-17 02:26:48 +05:30
integer , parameter :: &
2022-02-21 14:30:00 +05:30
TI_NSLIP = sum ( TI_NSLIPSYSTEM ) !< total # of slip systems for tI
2021-05-09 14:28:43 +05:30
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 3 + 3 , TI_NSLIP ) , parameter :: &
2022-02-21 14:30:00 +05:30
TI_SYSTEMSLIP = reshape ( real ( [ &
2021-05-09 14:28:43 +05:30
! {100)<001] systems
2019-04-13 04:16:27 +05:30
0 , 0 , 1 , 1 , 0 , 0 , &
0 , 0 , 1 , 0 , 1 , 0 , &
2021-05-09 14:28:43 +05:30
! {110)<001] systems
2019-04-13 04:16:27 +05:30
0 , 0 , 1 , 1 , 1 , 0 , &
0 , 0 , 1 , - 1 , 1 , 0 , &
2021-05-09 14:28:43 +05:30
! {100)<010] systems
2019-04-13 04:16:27 +05:30
0 , 1 , 0 , 1 , 0 , 0 , &
1 , 0 , 0 , 0 , 1 , 0 , &
2021-05-09 14:28:43 +05:30
! {110)<1-11]/2 systems
2019-04-13 04:16:27 +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 , &
2021-05-09 14:28:43 +05:30
! {110)<1-10] systems
2019-04-13 04:16:27 +05:30
1 , - 1 , 0 , 1 , 1 , 0 , &
1 , 1 , 0 , 1 , - 1 , 0 , &
2021-05-09 14:28:43 +05:30
! {100)<011] systems
2019-04-13 04:16:27 +05:30
0 , 1 , 1 , 1 , 0 , 0 , &
0 , - 1 , 1 , 1 , 0 , 0 , &
- 1 , 0 , 1 , 0 , 1 , 0 , &
1 , 0 , 1 , 0 , 1 , 0 , &
2021-05-09 14:28:43 +05:30
! {001)<010] systems
2019-04-13 04:16:27 +05:30
0 , 1 , 0 , 0 , 0 , 1 , &
1 , 0 , 0 , 0 , 0 , 1 , &
2021-05-09 14:28:43 +05:30
! {001)<110] systems
2019-04-13 04:16:27 +05:30
1 , 1 , 0 , 0 , 0 , 1 , &
- 1 , 1 , 0 , 0 , 0 , 1 , &
2021-05-09 14:28:43 +05:30
! {011)<01-1] systems
2019-04-13 04:16:27 +05:30
0 , 1 , - 1 , 0 , 1 , 1 , &
0 , - 1 , - 1 , 0 , - 1 , 1 , &
- 1 , 0 , - 1 , - 1 , 0 , 1 , &
1 , 0 , - 1 , 1 , 0 , 1 , &
2021-05-09 14:28:43 +05:30
! {011)<1-11]/2 systems
2019-04-13 04:16:27 +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 , &
2021-05-09 14:28:43 +05:30
! {011)<100] systems
2019-04-13 04:16:27 +05:30
1 , 0 , 0 , 0 , 1 , 1 , &
1 , 0 , 0 , 0 , 1 , - 1 , &
0 , 1 , 0 , 1 , 0 , 1 , &
0 , 1 , 0 , 1 , 0 , - 1 , &
2021-05-09 14:28:43 +05:30
! {211)<01-1] systems
2019-04-13 04:16:27 +05:30
0 , 1 , - 1 , 2 , 1 , 1 , &
0 , - 1 , - 1 , 2 , - 1 , 1 , &
1 , 0 , - 1 , 1 , 2 , 1 , &
- 1 , 0 , - 1 , - 1 , 2 , 1 , &
0 , 1 , - 1 , - 2 , 1 , 1 , &
0 , - 1 , - 1 , - 2 , - 1 , 1 , &
- 1 , 0 , - 1 , - 1 , - 2 , 1 , &
1 , 0 , - 1 , 1 , - 2 , 1 , &
2021-05-09 14:28:43 +05:30
! {211)<-111]/2 systems
2019-04-13 04:16:27 +05:30
- 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 , - 2 , 1 , 1 , &
1 , - 1 , 1 , - 2 , - 1 , 1 , &
- 1 , 1 , 1 , - 1 , - 2 , 1 , &
1 , 1 , 1 , 1 , - 2 , 1 &
2023-06-04 10:52:25 +05:30
] , pREAL ) , shape ( TI_SYSTEMSLIP ) ) !< tI slip systems for c/a = 0.5456 (Sn), sorted by Bieler 2009 (https://doi.org/10.1007/s11664-009-0909-x)
2020-02-25 22:02:49 +05:30
2023-07-15 23:58:57 +05:30
interface crystal_forestProjection_edge
2019-04-13 04:16:27 +05:30
module procedure slipProjection_transverse
2023-07-15 23:58:57 +05:30
end interface crystal_forestProjection_edge
2020-02-25 22:02:49 +05:30
2023-07-15 23:58:57 +05:30
interface crystal_forestProjection_screw
2019-04-13 04:16:27 +05:30
module procedure slipProjection_direction
2023-07-15 23:58:57 +05:30
end interface crystal_forestProjection_screw
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
public :: &
2023-07-15 23:58:57 +05:30
crystal_init , &
2023-07-21 00:46:31 +05:30
crystal_selfTest , &
2023-07-15 23:58:57 +05:30
crystal_isotropic_nu , &
crystal_isotropic_mu , &
crystal_symmetrize_33 , &
crystal_symmetrize_C66 , &
crystal_SchmidMatrix_slip , &
crystal_SchmidMatrix_twin , &
crystal_SchmidMatrix_trans , &
crystal_SchmidMatrix_cleavage , &
crystal_interaction_SlipBySlip , &
crystal_interaction_TwinByTwin , &
crystal_interaction_TransByTrans , &
crystal_interaction_SlipByTwin , &
crystal_interaction_SlipByTrans , &
crystal_interaction_TwinBySlip , &
crystal_characteristicShear_Twin , &
crystal_C66_twin , &
crystal_C66_trans , &
crystal_forestProjection_edge , &
crystal_forestProjection_screw , &
crystal_slip_normal , &
crystal_slip_direction , &
crystal_slip_transverse , &
crystal_labels_slip , &
crystal_labels_twin
2020-02-25 22:02:49 +05:30
2019-09-20 02:21:37 +05:30
contains
2020-01-03 17:10:25 +05:30
2014-08-14 17:51:51 +05:30
!--------------------------------------------------------------------------------------------------
2023-01-10 04:08:51 +05:30
!> @brief Run self test.
2014-08-14 17:51:51 +05:30
!--------------------------------------------------------------------------------------------------
2023-07-15 23:58:57 +05:30
subroutine crystal_init ( )
2020-02-25 22:02:49 +05:30
2023-07-15 23:58:57 +05:30
print '(/,1x,a)' , '<<<+- crystal init -+>>>' ; flush ( IO_STDOUT )
2020-02-25 22:02:49 +05:30
2023-07-21 00:46:31 +05:30
call crystal_selfTest ( )
2020-02-25 22:02:49 +05:30
2023-07-15 23:58:57 +05:30
end subroutine crystal_init
2020-02-25 22:02:49 +05:30
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
!--------------------------------------------------------------------------------------------------
2023-07-15 23:58:57 +05:30
function crystal_characteristicShear_Twin ( Ntwin , lattice , CoverA ) result ( characteristicShear )
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
integer , dimension ( : ) , intent ( in ) :: Ntwin !< number of active twin systems per family
2022-11-30 18:03:04 +05:30
character ( len = * ) , intent ( in ) :: lattice !< Bravais lattice (Pearson symbol)
2023-06-04 10:52:25 +05:30
real ( pREAL ) , intent ( in ) :: cOverA !< c/a ratio
real ( pREAL ) , dimension ( sum ( Ntwin ) ) :: characteristicShear
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
integer :: &
2019-10-10 15:56:45 +05:30
f , & !< index of my family
2023-11-23 01:01:35 +05:30
s , e
2020-02-25 22:02:49 +05:30
2023-11-23 00:52:05 +05:30
select case ( lattice )
2023-11-23 15:59:18 +05:30
case ( 'cF' , 'cI' ) ! 10.1016/0079-6425(94)00007-7, Table 1
2023-11-23 00:52:05 +05:30
characteristicShear = 0.5_pREAL * sqrt ( 2.0_pREAL )
2023-11-23 15:59:18 +05:30
case ( 'hP' ) ! 10.1016/0079-6425(94)00007-7, Table 3
2023-11-23 00:52:05 +05:30
if ( cOverA < 1.0_pREAL . or . cOverA > 2.0_pREAL ) &
call IO_error ( 131 , ext_msg = 'crystal_characteristicShear_Twin' )
2023-11-23 01:01:35 +05:30
2023-11-23 00:52:05 +05:30
myFamilies : do f = 1 , size ( Ntwin , 1 )
2023-11-23 01:01:35 +05:30
s = sum ( Ntwin ( : f - 1 ) ) + 1
e = sum ( Ntwin ( : f ) )
2023-11-23 15:59:18 +05:30
select case ( f )
2023-11-23 01:02:28 +05:30
case ( 1 ) ! <-10.1>{10.2}
2023-11-23 01:01:35 +05:30
characteristicShear ( s : e ) = ( 3.0_pREAL - cOverA ** 2 ) / sqrt ( 3.0_pREAL ) / CoverA
2023-11-23 01:02:28 +05:30
case ( 2 ) ! <11.6>{-1-1.1}
2023-11-23 01:01:35 +05:30
characteristicShear ( s : e ) = 1.0_pREAL / cOverA
2023-11-23 01:02:28 +05:30
case ( 3 ) ! <10.-2>{10.1}
2023-11-23 01:01:35 +05:30
characteristicShear ( s : e ) = ( 4.0_pREAL * cOverA ** 2 - 9.0_pREAL ) / sqrt ( 4 8.0_pREAL ) / cOverA
2023-11-23 01:02:28 +05:30
case ( 4 ) ! <11.-3>{11.2}
2023-11-23 01:01:35 +05:30
characteristicShear ( s : e ) = 2.0_pREAL * ( cOverA ** 2 - 2.0_pREAL ) / 3.0_pREAL / cOverA
end select
2023-11-23 00:52:05 +05:30
end do myFamilies
case default
call IO_error ( 137 , ext_msg = 'crystal_characteristicShear_Twin: ' / / trim ( lattice ) )
end select
2020-02-25 22:02:49 +05:30
2023-07-15 23:58:57 +05:30
end function crystal_characteristicShear_Twin
2020-02-25 22:02:49 +05:30
2018-10-06 14:12:25 +05:30
!--------------------------------------------------------------------------------------------------
2021-11-28 00:25:02 +05:30
!> @brief Rotated elasticity matrices for twinning in 6x6-matrix notation
2018-10-06 14:12:25 +05:30
!--------------------------------------------------------------------------------------------------
2023-07-15 23:58:57 +05:30
function crystal_C66_twin ( Ntwin , C66 , lattice , CoverA )
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
integer , dimension ( : ) , intent ( in ) :: Ntwin !< number of active twin systems per family
2022-11-30 18:03:04 +05:30
character ( len = * ) , intent ( in ) :: lattice !< Bravais lattice (Pearson symbol)
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 6 , 6 ) , intent ( in ) :: C66 !< unrotated parent stiffness matrix
real ( pREAL ) , intent ( in ) :: cOverA !< c/a ratio
2023-07-15 23:58:57 +05:30
real ( pREAL ) , dimension ( 6 , 6 , sum ( Ntwin ) ) :: crystal_C66_twin
2020-02-25 22:02:49 +05:30
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 3 , 3 , sum ( Ntwin ) ) :: coordinateSystem
2022-01-29 20:00:59 +05:30
type ( tRotation ) :: R
2019-04-13 04:16:27 +05:30
integer :: i
2020-02-25 22:02:49 +05:30
2021-11-18 22:14:06 +05:30
2021-07-23 10:16:17 +05:30
select case ( lattice )
2020-11-29 03:07:03 +05:30
case ( 'cF' )
2023-11-20 17:57:34 +05:30
coordinateSystem = buildCoordinateSystem ( Ntwin , CF_NTWINSYSTEM , CF_SYSTEMTWIN , &
2023-06-04 10:52:25 +05:30
lattice , 0.0_pREAL )
2020-11-29 03:07:03 +05:30
case ( 'cI' )
2023-11-20 17:57:34 +05:30
coordinateSystem = buildCoordinateSystem ( Ntwin , CI_NTWINSYSTEM , CI_SYSTEMTWIN , &
2023-06-04 10:52:25 +05:30
lattice , 0.0_pREAL )
2020-11-29 03:07:03 +05:30
case ( 'hP' )
2023-11-20 17:57:34 +05:30
coordinateSystem = buildCoordinateSystem ( Ntwin , HP_NTWINSYSTEM , HP_SYSTEMTWIN , &
2021-07-23 10:16:17 +05:30
lattice , cOverA )
2019-04-13 04:16:27 +05:30
case default
2023-07-15 23:58:57 +05:30
call IO_error ( 137 , ext_msg = 'crystal_C66_twin: ' / / trim ( lattice ) )
2019-04-13 04:16:27 +05:30
end select
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
do i = 1 , sum ( Ntwin )
2023-11-20 20:49:20 +05:30
call R % fromAxisAngle ( [ coordinateSystem ( 1 : 3 , 2 , i ) , PI ] ) ! mirror on habit (twin shear) plane
2023-07-15 23:58:57 +05:30
crystal_C66_twin ( 1 : 6 , 1 : 6 , i ) = R % rotStiffness ( C66 )
2022-06-09 02:36:01 +05:30
end do
2019-09-20 19:38:21 +05:30
2023-07-15 23:58:57 +05:30
end function crystal_C66_twin
2020-02-25 22:02:49 +05:30
2018-10-06 14:12:25 +05:30
!--------------------------------------------------------------------------------------------------
2021-11-28 00:25:02 +05:30
!> @brief Rotated elasticity matrices for transformation in 6x6-matrix notation
2018-10-06 14:12:25 +05:30
!--------------------------------------------------------------------------------------------------
2023-07-15 23:58:57 +05:30
function crystal_C66_trans ( Ntrans , C_parent66 , crystal_target , &
2022-02-21 14:30:00 +05:30
cOverA_trans , a_cF , a_cI )
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
integer , dimension ( : ) , intent ( in ) :: Ntrans !< number of active twin systems per family
2023-07-15 23:58:57 +05:30
character ( len = * ) , intent ( in ) :: crystal_target !< Bravais lattice (Pearson symbol)
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 6 , 6 ) , intent ( in ) :: C_parent66
real ( pREAL ) , optional , intent ( in ) :: cOverA_trans , a_cF , a_cI
2023-07-15 23:58:57 +05:30
real ( pREAL ) , dimension ( 6 , 6 , sum ( Ntrans ) ) :: crystal_C66_trans
2020-02-25 22:02:49 +05:30
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 6 , 6 ) :: C_bar66 , C_target_unrotated66
real ( pREAL ) , dimension ( 3 , 3 , sum ( Ntrans ) ) :: Q , S
2022-01-29 20:00:59 +05:30
type ( tRotation ) :: R
2019-04-13 04:16:27 +05:30
integer :: i
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
!--------------------------------------------------------------------------------------------------
! elasticity matrix of the target phase in cube orientation
2023-07-15 23:58:57 +05:30
if ( crystal_target == 'hP' . and . present ( cOverA_trans ) ) then
2021-11-20 16:46:32 +05:30
! https://doi.org/10.1063/1.1663858 eq. (16), eq. (18), eq. (19)
! https://doi.org/10.1016/j.actamat.2016.07.032 eq. (47), eq. (48)
2023-06-04 10:52:25 +05:30
if ( cOverA_trans < 1.0_pREAL . or . cOverA_trans > 2.0_pREAL ) &
2023-07-15 23:58:57 +05:30
call IO_error ( 131 , ext_msg = 'crystal_C66_trans: ' / / trim ( crystal_target ) )
2023-06-04 10:52:25 +05:30
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
2021-11-26 01:22:22 +05:30
C_target_unrotated66 ( 1 , 1 ) = C_bar66 ( 1 , 1 ) - C_bar66 ( 1 , 4 ) ** 2 / C_bar66 ( 4 , 4 )
C_target_unrotated66 ( 1 , 2 ) = C_bar66 ( 1 , 2 ) + C_bar66 ( 1 , 4 ) ** 2 / C_bar66 ( 4 , 4 )
2019-04-13 04:16:27 +05:30
C_target_unrotated66 ( 1 , 3 ) = C_bar66 ( 1 , 3 )
C_target_unrotated66 ( 3 , 3 ) = C_bar66 ( 3 , 3 )
2023-06-04 10:52:25 +05:30
C_target_unrotated66 ( 4 , 4 ) = C_bar66 ( 4 , 4 ) - C_bar66 ( 1 , 4 ) ** 2 / ( 0.5_pREAL * ( C_bar66 ( 1 , 1 ) - C_bar66 ( 1 , 2 ) ) )
2023-07-15 23:58:57 +05:30
C_target_unrotated66 = crystal_symmetrize_C66 ( C_target_unrotated66 , 'hP' )
elseif ( crystal_target == 'cI' . and . present ( a_cF ) . and . present ( a_cI ) ) then
2023-06-04 10:52:25 +05:30
if ( a_cI < = 0.0_pREAL . or . a_cF < = 0.0_pREAL ) &
2023-07-15 23:58:57 +05:30
call IO_error ( 134 , ext_msg = 'crystal_C66_trans: ' / / trim ( crystal_target ) )
2019-04-13 04:16:27 +05:30
C_target_unrotated66 = C_parent66
else
2023-07-15 23:58:57 +05:30
call IO_error ( 137 , ext_msg = 'crystal_C66_trans : ' / / trim ( crystal_target ) )
2022-06-09 02:36:01 +05:30
end if
2020-02-25 22:02:49 +05:30
2021-11-19 11:59:40 +05:30
do i = 1 , 6
2019-04-13 04:16:27 +05:30
if ( abs ( C_target_unrotated66 ( i , i ) ) < tol_math_check ) &
2022-05-27 12:59:42 +05:30
call IO_error ( 135 , 'matrix diagonal in transformation' , label1 = 'entry' , ID1 = i )
2022-06-09 02:36:01 +05:30
end do
2020-02-25 22:02:49 +05:30
2022-02-21 14:30:00 +05:30
call buildTransformationSystem ( Q , S , Ntrans , cOverA_trans , a_cF , a_cI )
2020-02-25 22:02:49 +05:30
2021-11-19 11:59:40 +05:30
do i = 1 , sum ( Ntrans )
2019-09-21 05:48:09 +05:30
call R % fromMatrix ( Q ( 1 : 3 , 1 : 3 , i ) )
2023-07-15 23:58:57 +05:30
crystal_C66_trans ( 1 : 6 , 1 : 6 , i ) = R % rotStiffness ( C_target_unrotated66 )
2022-06-09 02:36:01 +05:30
end do
2019-09-20 19:38:21 +05:30
2023-07-15 23:58:57 +05:30
end function crystal_C66_trans
2020-02-25 22:02:49 +05:30
2018-08-25 16:38:32 +05:30
!--------------------------------------------------------------------------------------------------
2018-12-12 04:59:19 +05:30
!> @brief Slip-slip interaction matrix
2022-01-09 12:35:42 +05:30
!> @details only active slip systems are considered
2022-02-21 14:30:00 +05:30
!> @details https://doi.org/10.1016/j.actamat.2016.12.040 (cF: Tab S4-1, cI: Tab S5-1)
!> @details https://doi.org/10.1016/j.ijplas.2014.06.010 (hP: Tab 3b)
2018-08-25 16:38:32 +05:30
!--------------------------------------------------------------------------------------------------
2023-07-15 23:58:57 +05:30
function crystal_interaction_SlipBySlip ( Nslip , interactionValues , lattice ) result ( interactionMatrix )
2019-05-17 02:26:48 +05:30
2019-04-13 04:16:27 +05:30
integer , dimension ( : ) , intent ( in ) :: Nslip !< number of active slip systems per family
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( : ) , intent ( in ) :: interactionValues !< values for slip-slip interaction
2022-11-30 18:03:04 +05:30
character ( len = * ) , intent ( in ) :: lattice !< Bravais lattice (Pearson symbol)
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( sum ( Nslip ) , sum ( Nslip ) ) :: interactionMatrix
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
integer , dimension ( : ) , allocatable :: NslipMax
integer , dimension ( : , : ) , allocatable :: interactionTypes
2020-02-25 22:02:49 +05:30
2022-01-09 12:35:42 +05:30
2022-02-21 14:30:00 +05:30
integer , dimension ( CF_NSLIP , CF_NSLIP ) , parameter :: &
CF_INTERACTIONSLIPSLIP = reshape ( [ &
2021-05-09 14:31:21 +05:30
1 , 2 , 2 , 4 , 7 , 5 , 3 , 5 , 5 , 4 , 6 , 7 , 10 , 11 , 10 , 11 , 12 , 13 , & ! -----> acting (forest)
2021-05-09 14:28:43 +05:30
2 , 1 , 2 , 7 , 4 , 5 , 6 , 4 , 7 , 5 , 3 , 5 , 10 , 11 , 12 , 13 , 10 , 11 , & ! |
2 , 2 , 1 , 5 , 5 , 3 , 6 , 7 , 4 , 7 , 6 , 4 , 12 , 13 , 10 , 11 , 10 , 11 , & ! |
4 , 7 , 6 , 1 , 2 , 2 , 4 , 6 , 7 , 3 , 5 , 5 , 10 , 11 , 11 , 10 , 13 , 12 , & ! v
2021-05-09 14:31:21 +05:30
7 , 4 , 6 , 2 , 1 , 2 , 5 , 3 , 5 , 6 , 4 , 7 , 10 , 11 , 13 , 12 , 11 , 10 , & ! reacting (primary)
2021-05-09 14:28:43 +05:30
5 , 5 , 3 , 2 , 2 , 1 , 7 , 6 , 4 , 6 , 7 , 4 , 12 , 13 , 11 , 10 , 11 , 10 , &
3 , 5 , 5 , 4 , 6 , 7 , 1 , 2 , 2 , 4 , 7 , 6 , 11 , 10 , 11 , 10 , 12 , 13 , &
6 , 4 , 7 , 5 , 3 , 5 , 2 , 1 , 2 , 7 , 4 , 6 , 11 , 10 , 13 , 12 , 10 , 11 , &
6 , 7 , 4 , 7 , 6 , 4 , 2 , 2 , 1 , 5 , 5 , 3 , 13 , 12 , 11 , 10 , 10 , 11 , &
4 , 6 , 7 , 3 , 5 , 5 , 4 , 7 , 6 , 1 , 2 , 2 , 11 , 10 , 10 , 11 , 13 , 12 , &
5 , 3 , 5 , 6 , 4 , 7 , 7 , 4 , 6 , 2 , 1 , 2 , 11 , 10 , 12 , 13 , 11 , 10 , &
7 , 6 , 4 , 6 , 7 , 4 , 5 , 5 , 3 , 2 , 2 , 1 , 13 , 12 , 10 , 11 , 11 , 10 , &
10 , 10 , 12 , 10 , 10 , 12 , 11 , 11 , 13 , 11 , 11 , 13 , 1 , 8 , 9 , 9 , 9 , 9 , &
11 , 11 , 13 , 11 , 11 , 13 , 10 , 10 , 12 , 10 , 10 , 12 , 8 , 1 , 9 , 9 , 9 , 9 , &
10 , 12 , 10 , 11 , 13 , 11 , 11 , 13 , 11 , 10 , 12 , 10 , 9 , 9 , 1 , 8 , 9 , 9 , &
11 , 13 , 11 , 10 , 12 , 10 , 10 , 12 , 10 , 11 , 13 , 11 , 9 , 9 , 8 , 1 , 9 , 9 , &
12 , 10 , 10 , 13 , 11 , 11 , 12 , 10 , 10 , 13 , 11 , 11 , 9 , 9 , 9 , 9 , 1 , 8 , &
13 , 11 , 11 , 12 , 10 , 10 , 13 , 11 , 11 , 12 , 10 , 10 , 9 , 9 , 9 , 9 , 8 , 1 &
2022-02-21 14:30:00 +05:30
] , shape ( CF_INTERACTIONSLIPSLIP ) ) !< Slip-slip interaction types for cF / Madec 2017 (https://doi.org/10.1016/j.actamat.2016.12.040)
2021-05-07 14:01:30 +05:30
!< 1: self interaction --> alpha 0
!< 2: coplanar interaction --> alpha copla
!< 3: collinear interaction --> alpha coli
!< 4: Hirth locks --> alpha 1
!< 5: glissile junctions I --> alpha 2
!< 6: glissile junctions II --> alpha 2*
!< 7: Lomer locks --> alpha 3
!< 8: crossing (similar to Hirth locks in <110>{111} for two {110} planes)
!< 9: similar to Lomer locks in <110>{111} for two {110} planes
!<10: similar to Lomer locks in <110>{111} btw one {110} and one {111} plane
!<11: similar to glissile junctions in <110>{111} btw one {110} and one {111} plane
!<12: crossing btw one {110} and one {111} plane
!<13: collinear btw one {110} and one {111} plane
2020-02-25 22:02:49 +05:30
2022-02-21 14:30:00 +05:30
integer , dimension ( CI_NSLIP , CI_NSLIP ) , parameter :: &
CI_INTERACTIONSLIPSLIP = reshape ( [ &
2021-05-24 00:42:31 +05:30
1 , 3 , 6 , 6 , 7 , 5 , 4 , 2 , 4 , 2 , 7 , 5 , 18 , 18 , 11 , 8 , 9 , 13 , 17 , 14 , 13 , 9 , 17 , 14 , 28 , 25 , 28 , 28 , 25 , 28 , 28 , 28 , 28 , 25 , 28 , 28 , 25 , 28 , 28 , 28 , 28 , 28 , 28 , 25 , 28 , 28 , 28 , 25 , & ! -----> acting (forest)
3 , 1 , 6 , 6 , 4 , 2 , 7 , 5 , 7 , 5 , 4 , 2 , 18 , 18 , 8 , 11 , 13 , 9 , 14 , 17 , 9 , 13 , 14 , 17 , 25 , 28 , 28 , 28 , 28 , 25 , 28 , 28 , 25 , 28 , 28 , 28 , 28 , 25 , 28 , 28 , 28 , 28 , 25 , 28 , 28 , 28 , 25 , 28 , & ! |
6 , 6 , 1 , 3 , 5 , 7 , 2 , 4 , 5 , 7 , 2 , 4 , 11 , 8 , 18 , 18 , 17 , 14 , 9 , 13 , 17 , 14 , 13 , 9 , 28 , 28 , 28 , 25 , 28 , 28 , 25 , 28 , 28 , 28 , 28 , 25 , 28 , 28 , 25 , 28 , 28 , 25 , 28 , 28 , 28 , 25 , 28 , 28 , & ! |
6 , 6 , 3 , 1 , 2 , 4 , 5 , 7 , 2 , 4 , 5 , 7 , 8 , 11 , 18 , 18 , 14 , 17 , 13 , 9 , 14 , 17 , 9 , 13 , 28 , 28 , 25 , 28 , 28 , 28 , 28 , 25 , 28 , 28 , 25 , 28 , 28 , 28 , 28 , 25 , 25 , 28 , 28 , 28 , 25 , 28 , 28 , 28 , & ! v
7 , 5 , 4 , 2 , 1 , 3 , 6 , 6 , 2 , 4 , 7 , 5 , 9 , 17 , 13 , 14 , 18 , 11 , 18 , 8 , 13 , 17 , 9 , 14 , 28 , 28 , 25 , 28 , 28 , 28 , 28 , 25 , 28 , 28 , 25 , 28 , 28 , 28 , 28 , 25 , 25 , 28 , 28 , 28 , 25 , 28 , 28 , 28 , & ! reacting (primary)
4 , 2 , 7 , 5 , 3 , 1 , 6 , 6 , 5 , 7 , 4 , 2 , 13 , 14 , 9 , 17 , 18 , 8 , 18 , 11 , 9 , 14 , 13 , 17 , 25 , 28 , 28 , 28 , 28 , 25 , 28 , 28 , 25 , 28 , 28 , 28 , 28 , 25 , 28 , 28 , 28 , 28 , 25 , 28 , 28 , 28 , 25 , 28 , &
5 , 7 , 2 , 4 , 6 , 6 , 1 , 3 , 7 , 5 , 2 , 4 , 17 , 9 , 14 , 13 , 11 , 18 , 8 , 18 , 17 , 13 , 14 , 9 , 28 , 28 , 28 , 25 , 28 , 28 , 25 , 28 , 28 , 28 , 28 , 25 , 28 , 28 , 25 , 28 , 28 , 25 , 28 , 28 , 28 , 25 , 28 , 28 , &
2 , 4 , 5 , 7 , 6 , 6 , 3 , 1 , 4 , 2 , 5 , 7 , 14 , 13 , 17 , 9 , 8 , 18 , 11 , 18 , 14 , 9 , 17 , 13 , 28 , 25 , 28 , 28 , 25 , 28 , 28 , 28 , 28 , 25 , 28 , 28 , 25 , 28 , 28 , 28 , 28 , 28 , 28 , 25 , 28 , 28 , 28 , 25 , &
5 , 7 , 4 , 2 , 2 , 4 , 7 , 5 , 1 , 3 , 6 , 6 , 9 , 17 , 14 , 13 , 13 , 17 , 14 , 9 , 18 , 11 , 8 , 18 , 28 , 28 , 25 , 28 , 28 , 28 , 28 , 25 , 28 , 28 , 25 , 28 , 28 , 28 , 28 , 25 , 25 , 28 , 28 , 28 , 25 , 28 , 28 , 28 , &
2 , 4 , 7 , 5 , 5 , 7 , 4 , 2 , 3 , 1 , 6 , 6 , 13 , 14 , 17 , 9 , 9 , 14 , 17 , 13 , 18 , 8 , 11 , 18 , 28 , 25 , 28 , 28 , 25 , 28 , 28 , 28 , 28 , 25 , 28 , 28 , 25 , 28 , 28 , 28 , 28 , 28 , 28 , 25 , 28 , 28 , 28 , 25 , &
7 , 5 , 2 , 4 , 7 , 5 , 2 , 4 , 6 , 6 , 1 , 3 , 17 , 9 , 13 , 14 , 17 , 13 , 9 , 14 , 11 , 18 , 18 , 8 , 28 , 28 , 28 , 25 , 28 , 28 , 25 , 28 , 28 , 28 , 28 , 25 , 28 , 28 , 25 , 28 , 28 , 25 , 28 , 28 , 28 , 25 , 28 , 28 , &
4 , 2 , 5 , 7 , 4 , 2 , 5 , 7 , 6 , 6 , 3 , 1 , 14 , 13 , 9 , 17 , 14 , 9 , 13 , 17 , 8 , 18 , 18 , 11 , 25 , 28 , 28 , 28 , 28 , 25 , 28 , 28 , 25 , 28 , 28 , 28 , 28 , 25 , 28 , 28 , 28 , 28 , 25 , 28 , 28 , 28 , 25 , 28 , &
19 , 19 , 10 , 8 , 9 , 12 , 16 , 15 , 9 , 12 , 16 , 15 , 1 , 20 , 24 , 24 , 23 , 22 , 21 , 2 , 23 , 22 , 2 , 21 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 26 , 26 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , &
19 , 19 , 8 , 10 , 16 , 15 , 9 , 12 , 16 , 15 , 9 , 12 , 20 , 1 , 24 , 24 , 22 , 23 , 2 , 21 , 22 , 23 , 21 , 2 , 28 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 28 , 26 , 28 , 28 , &
10 , 8 , 19 , 19 , 12 , 9 , 15 , 16 , 15 , 16 , 12 , 9 , 24 , 24 , 1 , 20 , 21 , 2 , 23 , 22 , 2 , 21 , 23 , 22 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , 26 , 28 , &
8 , 10 , 19 , 19 , 15 , 16 , 12 , 9 , 12 , 9 , 15 , 16 , 24 , 24 , 20 , 1 , 2 , 21 , 22 , 23 , 21 , 2 , 22 , 23 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , 26 , &
9 , 12 , 16 , 15 , 19 , 19 , 10 , 8 , 12 , 9 , 16 , 15 , 23 , 21 , 22 , 2 , 1 , 24 , 20 , 24 , 23 , 2 , 22 , 21 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , 26 , &
12 , 9 , 15 , 16 , 10 , 8 , 19 , 19 , 16 , 15 , 12 , 9 , 21 , 23 , 2 , 21 , 24 , 1 , 24 , 20 , 2 , 23 , 21 , 22 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , 26 , 28 , &
16 , 15 , 9 , 12 , 19 , 19 , 8 , 10 , 15 , 16 , 9 , 12 , 22 , 2 , 23 , 22 , 20 , 24 , 1 , 24 , 22 , 21 , 23 , 2 , 28 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 28 , 26 , 28 , 28 , &
15 , 16 , 12 , 9 , 8 , 10 , 19 , 19 , 9 , 12 , 15 , 16 , 2 , 22 , 21 , 23 , 24 , 20 , 24 , 1 , 21 , 22 , 2 , 23 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 26 , 26 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , &
12 , 9 , 16 , 15 , 12 , 9 , 16 , 15 , 19 , 19 , 10 , 8 , 23 , 21 , 2 , 22 , 23 , 2 , 21 , 22 , 1 , 24 , 24 , 20 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , 26 , 28 , &
9 , 12 , 15 , 16 , 16 , 15 , 12 , 9 , 10 , 8 , 19 , 19 , 21 , 23 , 22 , 2 , 2 , 23 , 22 , 21 , 24 , 1 , 20 , 24 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , 26 , &
16 , 15 , 12 , 9 , 9 , 12 , 15 , 16 , 8 , 10 , 19 , 19 , 2 , 22 , 23 , 21 , 21 , 22 , 23 , 2 , 24 , 20 , 1 , 24 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 26 , 26 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , &
15 , 16 , 9 , 12 , 15 , 16 , 9 , 12 , 19 , 19 , 8 , 10 , 22 , 2 , 21 , 23 , 22 , 21 , 2 , 23 , 20 , 24 , 24 , 1 , 28 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 28 , 26 , 28 , 28 , &
2021-06-01 02:32:51 +05:30
2021-05-24 00:42:31 +05:30
28 , 25 , 28 , 28 , 28 , 25 , 28 , 28 , 28 , 28 , 28 , 25 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 28 , 1 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 28 , 27 , 28 , &
25 , 28 , 28 , 28 , 28 , 28 , 28 , 25 , 28 , 25 , 28 , 28 , 28 , 28 , 28 , 26 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , 1 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 28 , 27 , &
28 , 28 , 28 , 25 , 25 , 28 , 28 , 28 , 25 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 28 , 1 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 27 , 27 , 28 , 28 , 28 , 27 , 28 , 28 , 28 , &
28 , 28 , 25 , 28 , 28 , 28 , 25 , 28 , 28 , 28 , 25 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , 1 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 27 , 28 , 28 , 27 , 28 , 28 , 28 , 27 , 28 , 28 , &
25 , 28 , 28 , 28 , 28 , 28 , 28 , 25 , 28 , 25 , 28 , 28 , 28 , 28 , 28 , 26 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , 27 , 28 , 28 , 1 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 28 , 27 , &
28 , 25 , 28 , 28 , 28 , 25 , 28 , 28 , 28 , 28 , 28 , 25 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 1 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 28 , 27 , 28 , &
28 , 28 , 25 , 28 , 28 , 28 , 25 , 28 , 28 , 28 , 25 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , 27 , 28 , 28 , 1 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 27 , 28 , 28 , 27 , 28 , 28 , 28 , 27 , 28 , 28 , &
28 , 28 , 28 , 25 , 25 , 28 , 28 , 28 , 25 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 1 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 27 , 27 , 28 , 28 , 28 , 27 , 28 , 28 , 28 , &
28 , 25 , 28 , 28 , 28 , 25 , 28 , 28 , 28 , 28 , 28 , 25 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 1 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 28 , 27 , 28 , &
25 , 28 , 28 , 28 , 28 , 28 , 28 , 25 , 28 , 25 , 28 , 28 , 28 , 28 , 28 , 26 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , 27 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 1 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 28 , 27 , &
28 , 28 , 28 , 25 , 25 , 28 , 28 , 28 , 25 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 1 , 28 , 28 , 28 , 28 , 27 , 27 , 28 , 28 , 28 , 27 , 28 , 28 , 28 , &
28 , 28 , 25 , 28 , 28 , 28 , 25 , 28 , 28 , 28 , 25 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , 27 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 1 , 28 , 28 , 27 , 28 , 28 , 27 , 28 , 28 , 28 , 27 , 28 , 28 , &
25 , 28 , 28 , 28 , 28 , 28 , 28 , 25 , 28 , 25 , 28 , 28 , 28 , 28 , 28 , 26 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , 27 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 1 , 28 , 28 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 28 , 27 , &
28 , 25 , 28 , 28 , 28 , 25 , 28 , 28 , 28 , 28 , 28 , 25 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 1 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 28 , 27 , 28 , &
28 , 28 , 25 , 28 , 28 , 28 , 25 , 28 , 28 , 28 , 25 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , 27 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 1 , 28 , 28 , 27 , 28 , 28 , 28 , 27 , 28 , 28 , &
28 , 28 , 28 , 25 , 25 , 28 , 28 , 28 , 25 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 1 , 27 , 28 , 28 , 28 , 27 , 28 , 28 , 28 , &
28 , 28 , 28 , 25 , 25 , 28 , 28 , 28 , 25 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 27 , 1 , 28 , 28 , 28 , 27 , 28 , 28 , 28 , &
28 , 28 , 25 , 28 , 28 , 28 , 25 , 28 , 28 , 28 , 25 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , 27 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 27 , 28 , 28 , 1 , 28 , 28 , 28 , 27 , 28 , 28 , &
28 , 25 , 28 , 28 , 28 , 25 , 28 , 28 , 28 , 28 , 28 , 25 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 1 , 28 , 28 , 28 , 27 , 28 , &
25 , 28 , 28 , 28 , 28 , 28 , 28 , 25 , 28 , 25 , 28 , 28 , 28 , 28 , 28 , 26 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , 27 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 28 , 28 , 1 , 28 , 28 , 28 , 27 , &
28 , 28 , 28 , 25 , 25 , 28 , 28 , 28 , 25 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 27 , 27 , 28 , 28 , 28 , 1 , 28 , 28 , 28 , &
28 , 28 , 25 , 28 , 28 , 28 , 25 , 28 , 28 , 28 , 25 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , 27 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 27 , 28 , 28 , 27 , 28 , 28 , 28 , 1 , 28 , 28 , &
28 , 25 , 28 , 28 , 28 , 25 , 28 , 28 , 28 , 28 , 28 , 25 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 26 , 28 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 28 , 1 , 28 , &
25 , 28 , 28 , 28 , 28 , 28 , 28 , 25 , 28 , 25 , 28 , 28 , 28 , 28 , 28 , 26 , 26 , 28 , 28 , 28 , 28 , 26 , 28 , 28 , 28 , 27 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 27 , 28 , 28 , 28 , 28 , 28 , 28 , 27 , 28 , 28 , 28 , 1 &
2022-02-21 14:30:00 +05:30
] , shape ( CI_INTERACTIONSLIPSLIP ) ) !< Slip-slip interaction types for cI / Madec 2017 (https://doi.org/10.1016/j.actamat.2016.12.040)
2021-05-07 14:07:08 +05:30
!< 1: self interaction --> alpha 0
!< 2: collinear interaction --> alpha 1
!< 3: coplanar interaction --> alpha 2
2021-05-09 14:28:43 +05:30
!< 4-7: other coefficients
2021-05-24 00:42:31 +05:30
!< 8: {110}-{112} collinear and perpendicular planes --> alpha 6
!< 9: {110}-{112} collinear --> alpha 7
2021-05-09 14:28:43 +05:30
!< 10-24: other coefficients
2021-05-24 00:42:31 +05:30
!< 25: {110}-{123} collinear
!< 26: {112}-{123} collinear
!< 27: {123}-{123} collinear
2021-05-20 20:34:47 +05:30
!< 28: other interaction
2020-02-25 22:02:49 +05:30
2022-02-21 14:30:00 +05:30
integer , dimension ( HP_NSLIP , HP_NSLIP ) , parameter :: &
HP_INTERACTIONSLIPSLIP = reshape ( [ &
2021-12-04 07:20:53 +05:30
! basal prism 1. pyr<a> 1. pyr<c+a> 2. pyr<c+a>
2021-12-07 23:40:24 +05:30
1 , 2 , 2 , 3 , 4 , 4 , 9 , 10 , 9 , 9 , 10 , 9 , 20 , 21 , 22 , 22 , 21 , 20 , 20 , 21 , 22 , 22 , 21 , 20 , 47 , 47 , 48 , 47 , 47 , 48 , & ! -----> acting (forest)
2 , 1 , 2 , 4 , 3 , 4 , 10 , 9 , 9 , 10 , 9 , 9 , 22 , 22 , 21 , 20 , 20 , 21 , 22 , 22 , 21 , 20 , 20 , 21 , 47 , 48 , 47 , 47 , 48 , 47 , & ! | basal
2 , 2 , 1 , 4 , 4 , 3 , 9 , 9 , 10 , 9 , 9 , 10 , 21 , 20 , 20 , 21 , 22 , 22 , 21 , 20 , 20 , 21 , 22 , 22 , 48 , 47 , 47 , 48 , 47 , 47 , & ! |
! v
7 , 8 , 8 , 5 , 6 , 6 , 11 , 12 , 11 , 11 , 12 , 11 , 23 , 24 , 25 , 25 , 24 , 23 , 23 , 24 , 25 , 25 , 24 , 23 , 49 , 49 , 50 , 49 , 49 , 50 , & ! reacting (primary)
8 , 7 , 8 , 6 , 5 , 6 , 12 , 11 , 11 , 12 , 11 , 11 , 25 , 25 , 24 , 23 , 23 , 24 , 25 , 25 , 24 , 23 , 23 , 24 , 49 , 50 , 49 , 49 , 50 , 49 , & ! prism
8 , 8 , 7 , 6 , 6 , 5 , 11 , 11 , 12 , 11 , 11 , 12 , 24 , 23 , 23 , 24 , 25 , 25 , 24 , 23 , 23 , 24 , 25 , 25 , 50 , 49 , 49 , 50 , 49 , 49 , &
18 , 19 , 18 , 16 , 17 , 16 , 13 , 14 , 14 , 15 , 14 , 14 , 26 , 26 , 27 , 28 , 28 , 27 , 29 , 29 , 27 , 28 , 28 , 27 , 51 , 52 , 51 , 51 , 52 , 51 , &
19 , 18 , 18 , 17 , 16 , 16 , 14 , 13 , 14 , 14 , 15 , 14 , 28 , 27 , 26 , 26 , 27 , 28 , 28 , 27 , 29 , 29 , 27 , 28 , 51 , 51 , 52 , 51 , 51 , 52 , &
18 , 18 , 19 , 16 , 16 , 17 , 14 , 14 , 13 , 14 , 14 , 15 , 27 , 28 , 28 , 27 , 26 , 26 , 27 , 28 , 28 , 27 , 29 , 29 , 52 , 51 , 51 , 52 , 51 , 51 , &
18 , 19 , 18 , 16 , 17 , 16 , 15 , 14 , 14 , 13 , 14 , 14 , 29 , 29 , 27 , 28 , 28 , 27 , 26 , 26 , 27 , 28 , 28 , 27 , 51 , 52 , 51 , 51 , 52 , 51 , & ! 1. pyr<a>
19 , 18 , 18 , 17 , 16 , 16 , 14 , 15 , 14 , 14 , 13 , 14 , 28 , 27 , 29 , 29 , 27 , 28 , 28 , 27 , 26 , 26 , 27 , 28 , 51 , 51 , 52 , 51 , 51 , 52 , &
18 , 18 , 19 , 16 , 16 , 17 , 14 , 14 , 15 , 14 , 14 , 13 , 27 , 28 , 28 , 27 , 29 , 29 , 27 , 28 , 28 , 27 , 26 , 26 , 52 , 51 , 51 , 52 , 51 , 51 , &
44 , 45 , 46 , 41 , 42 , 43 , 37 , 38 , 39 , 40 , 38 , 39 , 30 , 31 , 32 , 32 , 32 , 33 , 34 , 35 , 32 , 32 , 32 , 36 , 53 , 54 , 55 , 53 , 54 , 56 , &
46 , 45 , 44 , 43 , 42 , 41 , 37 , 39 , 38 , 40 , 39 , 38 , 31 , 30 , 36 , 32 , 32 , 32 , 35 , 34 , 33 , 32 , 32 , 32 , 56 , 54 , 53 , 55 , 54 , 53 , &
45 , 46 , 44 , 42 , 43 , 41 , 39 , 37 , 38 , 39 , 40 , 38 , 32 , 36 , 30 , 31 , 32 , 32 , 32 , 33 , 34 , 35 , 32 , 32 , 56 , 53 , 54 , 55 , 53 , 54 , &
45 , 44 , 46 , 42 , 41 , 43 , 38 , 37 , 39 , 38 , 40 , 39 , 32 , 32 , 31 , 30 , 36 , 32 , 32 , 32 , 35 , 34 , 33 , 32 , 53 , 56 , 54 , 53 , 55 , 54 , &
46 , 44 , 45 , 43 , 41 , 42 , 38 , 39 , 37 , 38 , 39 , 40 , 32 , 32 , 32 , 36 , 30 , 31 , 32 , 32 , 32 , 33 , 34 , 35 , 54 , 56 , 53 , 54 , 55 , 53 , &
44 , 46 , 45 , 41 , 43 , 42 , 39 , 38 , 37 , 39 , 38 , 40 , 33 , 32 , 32 , 32 , 31 , 30 , 36 , 32 , 32 , 32 , 35 , 34 , 54 , 53 , 56 , 54 , 53 , 55 , &
44 , 45 , 46 , 41 , 42 , 43 , 40 , 38 , 39 , 37 , 38 , 39 , 34 , 35 , 32 , 32 , 32 , 36 , 30 , 31 , 32 , 32 , 32 , 33 , 53 , 54 , 56 , 53 , 54 , 55 , & ! 1. pyr<c+a>
46 , 45 , 44 , 43 , 42 , 41 , 40 , 39 , 38 , 37 , 39 , 38 , 35 , 34 , 33 , 32 , 32 , 32 , 31 , 30 , 36 , 32 , 32 , 32 , 55 , 54 , 53 , 56 , 54 , 53 , &
45 , 46 , 44 , 42 , 43 , 41 , 39 , 40 , 38 , 39 , 37 , 38 , 32 , 33 , 34 , 35 , 32 , 32 , 32 , 36 , 30 , 31 , 32 , 32 , 55 , 53 , 54 , 56 , 53 , 54 , &
45 , 44 , 46 , 42 , 41 , 43 , 38 , 40 , 39 , 38 , 37 , 39 , 32 , 32 , 35 , 34 , 33 , 32 , 32 , 32 , 31 , 30 , 36 , 32 , 53 , 55 , 54 , 53 , 56 , 54 , &
46 , 44 , 45 , 43 , 41 , 42 , 38 , 39 , 40 , 38 , 39 , 37 , 32 , 32 , 32 , 33 , 34 , 35 , 32 , 32 , 32 , 36 , 30 , 31 , 54 , 55 , 53 , 54 , 56 , 53 , &
44 , 46 , 45 , 41 , 43 , 42 , 39 , 38 , 40 , 39 , 38 , 37 , 36 , 32 , 32 , 32 , 35 , 34 , 33 , 32 , 32 , 32 , 31 , 30 , 54 , 53 , 55 , 54 , 53 , 56 , &
68 , 68 , 69 , 66 , 66 , 67 , 64 , 64 , 65 , 64 , 65 , 65 , 60 , 61 , 61 , 60 , 62 , 62 , 60 , 63 , 63 , 60 , 62 , 62 , 57 , 58 , 58 , 59 , 58 , 58 , &
68 , 69 , 68 , 66 , 67 , 66 , 65 , 64 , 64 , 65 , 64 , 64 , 62 , 62 , 60 , 61 , 61 , 60 , 62 , 62 , 60 , 63 , 63 , 60 , 58 , 57 , 58 , 58 , 59 , 58 , &
69 , 68 , 68 , 67 , 66 , 66 , 64 , 65 , 64 , 64 , 65 , 64 , 63 , 60 , 62 , 62 , 60 , 61 , 61 , 60 , 62 , 62 , 60 , 63 , 58 , 58 , 57 , 58 , 58 , 59 , &
68 , 68 , 69 , 66 , 66 , 67 , 64 , 64 , 65 , 64 , 64 , 65 , 60 , 63 , 63 , 60 , 62 , 62 , 60 , 61 , 61 , 60 , 62 , 62 , 59 , 58 , 58 , 57 , 58 , 58 , & ! 2. pyr<c+a>
68 , 69 , 68 , 66 , 67 , 66 , 65 , 64 , 64 , 65 , 64 , 64 , 62 , 62 , 60 , 63 , 63 , 60 , 62 , 62 , 60 , 61 , 61 , 60 , 58 , 59 , 58 , 58 , 57 , 58 , &
69 , 68 , 68 , 67 , 66 , 66 , 64 , 65 , 64 , 64 , 65 , 64 , 61 , 60 , 62 , 62 , 60 , 63 , 63 , 60 , 62 , 62 , 60 , 61 , 58 , 58 , 59 , 58 , 58 , 57 &
2022-02-21 14:30:00 +05:30
] , shape ( HP_INTERACTIONSLIPSLIP ) ) !< Slip-slip interaction types for hP (onion peel naming scheme)
2022-01-13 21:12:05 +05:30
!< 10.1016/j.ijplas.2014.06.010 table 3
!< 10.1080/14786435.2012.699689 table 2 and 3
2022-01-13 21:53:09 +05:30
!< index & label & description
!< 1 & S1 & basal self-interaction
!< 2 & 1 & basal/basal coplanar
!< 3 & 3 & basal/prismatic collinear
!< 4 & 4 & basal/prismatic non-collinear
!< 5 & S2 & prismatic self-interaction
!< 6 & 2 & prismatic/prismatic
!< 7 & 5 & prismatic/basal collinear
!< 8 & 6 & prismatic/basal non-collinear
!< 9 & - & basal/pyramidal <a> non-collinear
!< 10 & - & basal/pyramidal <a> collinear
!< 11 & - & prismatic/pyramidal <a> non-collinear
!< 12 & - & prismatic/pyramidal <a> collinear
!< 13 & - & pyramidal <a> self-interaction
!< 14 & - & pyramidal <a> non-collinear
!< 15 & - & pyramidal <a> collinear
!< 16 & - & pyramidal <a>/prismatic non-collinear
!< 17 & - & pyramidal <a>/prismatic collinear
!< 18 & - & pyramidal <a>/basal non-collinear
!< 19 & - & pyramidal <a>/basal collinear
!< 20 & - & basal/1. order pyramidal <c+a> semi-collinear
!< 21 & - & basal/1. order pyramidal <c+a>
!< 22 & - & basal/1. order pyramidal <c+a>
!< 23 & - & prismatic/1. order pyramidal <c+a> semi-collinear
!< 24 & - & prismatic/1. order pyramidal <c+a>
!< 25 & - & prismatic/1. order pyramidal <c+a> semi-coplanar?
!< 26 & - & pyramidal <a>/1. order pyramidal <c+a> coplanar
!< 27 & - & pyramidal <a>/1. order pyramidal <c+a>
!< 28 & - & pyramidal <a>/1. order pyramidal <c+a> semi-collinear
!< 29 & - & pyramidal <a>/1. order pyramidal <c+a> semi-coplanar
!< 30 & - & 1. order pyramidal <c+a> self-interaction
!< 31 & - & 1. order pyramidal <c+a> coplanar
!< 32 & - & 1. order pyramidal <c+a>
!< 33 & - & 1. order pyramidal <c+a>
!< 34 & - & 1. order pyramidal <c+a> semi-coplanar
!< 35 & - & 1. order pyramidal <c+a> semi-coplanar
!< 36 & - & 1. order pyramidal <c+a> collinear
!< 37 & - & 1. order pyramidal <c+a>/pyramidal <a> coplanar
!< 38 & - & 1. order pyramidal <c+a>/pyramidal <a> semi-collinear
!< 39 & - & 1. order pyramidal <c+a>/pyramidal <a>
!< 40 & - & 1. order pyramidal <c+a>/pyramidal <a> semi-coplanar
!< 41 & - & 1. order pyramidal <c+a>/prismatic semi-collinear
!< 42 & - & 1. order pyramidal <c+a>/prismatic semi-coplanar
!< 43 & - & 1. order pyramidal <c+a>/prismatic
!< 44 & - & 1. order pyramidal <c+a>/basal semi-collinear
!< 45 & - & 1. order pyramidal <c+a>/basal
!< 46 & - & 1. order pyramidal <c+a>/basal
!< 47 & 8 & basal/2. order pyramidal <c+a> non-collinear
!< 48 & 7 & basal/2. order pyramidal <c+a> semi-collinear
!< 49 & 10 & prismatic/2. order pyramidal <c+a>
!< 50 & 9 & prismatic/2. order pyramidal <c+a> semi-collinear
!< 51 & - & pyramidal <a>/2. order pyramidal <c+a>
!< 52 & - & pyramidal <a>/2. order pyramidal <c+a> semi collinear
!< 53 & - & 1. order pyramidal <c+a>/2. order pyramidal <c+a>
!< 54 & - & 1. order pyramidal <c+a>/2. order pyramidal <c+a>
!< 55 & - & 1. order pyramidal <c+a>/2. order pyramidal <c+a>
!< 56 & - & 1. order pyramidal <c+a>/2. order pyramidal <c+a> collinear
!< 57 & S3 & 2. order pyramidal <c+a> self-interaction
!< 58 & 16 & 2. order pyramidal <c+a> non-collinear
!< 59 & 15 & 2. order pyramidal <c+a> semi-collinear
!< 60 & - & 2. order pyramidal <c+a>/1. order pyramidal <c+a>
!< 61 & - & 2. order pyramidal <c+a>/1. order pyramidal <c+a> collinear
!< 62 & - & 2. order pyramidal <c+a>/1. order pyramidal <c+a>
!< 63 & - & 2. order pyramidal <c+a>/1. order pyramidal <c+a>
!< 64 & - & 2. order pyramidal <c+a>/pyramidal <a> non-collinear
!< 65 & - & 2. order pyramidal <c+a>/pyramidal <a> semi-collinear
!< 66 & 14 & 2. order pyramidal <c+a>/prismatic non-collinear
!< 67 & 13 & 2. order pyramidal <c+a>/prismatic semi-collinear
!< 68 & 12 & 2. order pyramidal <c+a>/basal non-collinear
!< 69 & 11 & 2. order pyramidal <c+a>/basal semi-collinear
2020-02-25 22:02:49 +05:30
2022-02-21 14:30:00 +05:30
integer , dimension ( TI_NSLIP , TI_NSLIP ) , parameter :: &
TI_INTERACTIONSLIPSLIP = reshape ( [ &
2021-05-24 00:42:31 +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 , & ! -----> acting
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 , & ! |
! |
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 , & ! v
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 , & ! reacting
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 , &
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 , &
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 , &
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 , &
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 , &
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 , &
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 , &
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 &
2022-02-21 14:30:00 +05:30
] , shape ( TI_INTERACTIONSLIPSLIP ) )
2020-02-25 22:02:49 +05:30
2021-07-23 10:16:17 +05:30
select case ( lattice )
2020-11-29 03:07:03 +05:30
case ( 'cF' )
2022-02-21 14:30:00 +05:30
interactionTypes = CF_INTERACTIONSLIPSLIP
NslipMax = CF_NSLIPSYSTEM
2020-11-29 03:07:03 +05:30
case ( 'cI' )
2022-02-21 14:30:00 +05:30
interactionTypes = CI_INTERACTIONSLIPSLIP
NslipMax = CI_NSLIPSYSTEM
2020-11-29 03:07:03 +05:30
case ( 'hP' )
2022-02-21 14:30:00 +05:30
interactionTypes = HP_INTERACTIONSLIPSLIP
NslipMax = HP_NSLIPSYSTEM
2020-11-29 03:07:03 +05:30
case ( 'tI' )
2022-02-21 14:30:00 +05:30
interactionTypes = TI_INTERACTIONSLIPSLIP
NslipMax = TI_NSLIPSYSTEM
2019-04-13 04:16:27 +05:30
case default
2023-07-15 23:58:57 +05:30
call IO_error ( 137 , ext_msg = 'crystal_interaction_SlipBySlip: ' / / trim ( lattice ) )
2019-04-13 04:16:27 +05:30
end select
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
interactionMatrix = buildInteraction ( Nslip , Nslip , NslipMax , NslipMax , interactionValues , interactionTypes )
2020-02-25 22:02:49 +05:30
2023-07-15 23:58:57 +05:30
end function crystal_interaction_SlipBySlip
2020-02-25 22:02:49 +05:30
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
!--------------------------------------------------------------------------------------------------
2023-07-15 23:58:57 +05:30
function crystal_interaction_TwinByTwin ( Ntwin , interactionValues , lattice ) result ( interactionMatrix )
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
integer , dimension ( : ) , intent ( in ) :: Ntwin !< number of active twin systems per family
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( : ) , intent ( in ) :: interactionValues !< values for twin-twin interaction
2022-11-30 18:03:04 +05:30
character ( len = * ) , intent ( in ) :: lattice !< Bravais lattice (Pearson symbol)
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( sum ( Ntwin ) , sum ( Ntwin ) ) :: interactionMatrix
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
integer , dimension ( : ) , allocatable :: NtwinMax
integer , dimension ( : , : ) , allocatable :: interactionTypes
2020-02-25 22:02:49 +05:30
2022-02-21 14:30:00 +05:30
integer , dimension ( CF_NTWIN , CF_NTWIN ) , parameter :: &
CF_INTERACTIONTWINTWIN = reshape ( [ &
2019-04-13 04:16:27 +05:30
1 , 1 , 1 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , & ! -----> acting
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
2 , 2 , 2 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 2 , 2 , & ! reacting
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 &
2022-02-21 14:30:00 +05:30
] , shape ( CF_INTERACTIONTWINTWIN ) ) !< Twin-twin interaction types for cF
2020-02-25 22:02:49 +05:30
2022-02-21 14:30:00 +05:30
integer , dimension ( CI_NTWIN , CI_NTWIN ) , parameter :: &
CI_INTERACTIONTWINTWIN = reshape ( [ &
2019-04-13 04:16:27 +05:30
1 , 3 , 3 , 3 , 3 , 3 , 3 , 2 , 3 , 3 , 2 , 3 , & ! -----> acting
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
3 , 3 , 3 , 2 , 1 , 3 , 3 , 3 , 3 , 2 , 3 , 3 , & ! reacting
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 &
2022-02-21 14:30:00 +05:30
] , shape ( CI_INTERACTIONTWINTWIN ) ) !< Twin-twin interaction types for cI
2018-12-10 13:03:20 +05:30
!< 1: self interaction
!< 2: collinear interaction
!< 3: other interaction
2022-02-21 14:30:00 +05:30
integer , dimension ( HP_NTWIN , HP_NTWIN ) , parameter :: &
HP_INTERACTIONTWINTWIN = reshape ( [ &
2021-11-24 16:54:12 +05:30
! <-10.1>{10.2} <11.6>{-1-1.1} <10.-2>{10.1} <11.-3>{11.2}
2019-04-13 04:16:27 +05:30
1 , 2 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 3 , 3 , 7 , 7 , 7 , 7 , 7 , 7 , 13 , 13 , 13 , 13 , 13 , 13 , & ! -----> acting
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 , & ! |
2021-11-24 16:54:12 +05:30
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 <-10.1>{10.2}
2019-04-13 04:16:27 +05:30
2 , 2 , 2 , 2 , 1 , 2 , 3 , 3 , 3 , 3 , 3 , 3 , 7 , 7 , 7 , 7 , 7 , 7 , 13 , 13 , 13 , 13 , 13 , 13 , & ! reacting
2 , 2 , 2 , 2 , 2 , 1 , 3 , 3 , 3 , 3 , 3 , 3 , 7 , 7 , 7 , 7 , 7 , 7 , 13 , 13 , 13 , 13 , 13 , 13 , &
2021-05-24 00:42:31 +05:30
2019-04-13 04:16:27 +05:30
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 , &
2021-11-24 16:54:12 +05:30
6 , 6 , 6 , 6 , 6 , 6 , 5 , 5 , 5 , 4 , 5 , 5 , 8 , 8 , 8 , 8 , 8 , 8 , 14 , 14 , 14 , 14 , 14 , 14 , & ! <11.6>{-1-1.1}
2019-04-13 04:16:27 +05:30
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 , &
2021-05-24 00:42:31 +05:30
2019-04-13 04:16:27 +05:30
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 , &
2021-11-24 16:54:12 +05:30
12 , 12 , 12 , 12 , 12 , 12 , 11 , 11 , 11 , 11 , 11 , 11 , 10 , 10 , 10 , 9 , 10 , 10 , 15 , 15 , 15 , 15 , 15 , 15 , & ! <10.-2>{10.1}
2019-04-13 04:16:27 +05:30
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 , &
2021-05-24 00:42:31 +05:30
2019-04-13 04:16:27 +05:30
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 , &
2021-11-24 16:54:12 +05:30
20 , 20 , 20 , 20 , 20 , 20 , 19 , 19 , 19 , 19 , 19 , 19 , 18 , 18 , 18 , 18 , 18 , 18 , 17 , 17 , 17 , 16 , 17 , 17 , & ! <11.-3>{11.2}
2019-04-13 04:16:27 +05:30
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 &
2022-02-21 14:30:00 +05:30
] , shape ( HP_INTERACTIONTWINTWIN ) ) !< Twin-twin interaction types for hP
2020-02-25 22:02:49 +05:30
2021-07-23 10:16:17 +05:30
select case ( lattice )
2020-11-29 03:07:03 +05:30
case ( 'cF' )
2022-02-21 14:30:00 +05:30
interactionTypes = CF_INTERACTIONTWINTWIN
NtwinMax = CF_NTWINSYSTEM
2020-11-29 03:07:03 +05:30
case ( 'cI' )
2022-02-21 14:30:00 +05:30
interactionTypes = CI_INTERACTIONTWINTWIN
NtwinMax = CI_NTWINSYSTEM
2020-11-29 03:07:03 +05:30
case ( 'hP' )
2022-02-21 14:30:00 +05:30
interactionTypes = HP_INTERACTIONTWINTWIN
NtwinMax = HP_NTWINSYSTEM
2019-04-13 04:16:27 +05:30
case default
2023-07-15 23:58:57 +05:30
call IO_error ( 137 , ext_msg = 'crystal_interaction_TwinByTwin: ' / / trim ( lattice ) )
2019-04-13 04:16:27 +05:30
end select
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
interactionMatrix = buildInteraction ( Ntwin , Ntwin , NtwinMax , NtwinMax , interactionValues , interactionTypes )
2020-02-25 22:02:49 +05:30
2023-07-15 23:58:57 +05:30
end function crystal_interaction_TwinByTwin
2020-02-25 22:02:49 +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
!--------------------------------------------------------------------------------------------------
2023-07-15 23:58:57 +05:30
function crystal_interaction_TransByTrans ( Ntrans , interactionValues , lattice ) result ( interactionMatrix )
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
integer , dimension ( : ) , intent ( in ) :: Ntrans !< number of active trans systems per family
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( : ) , intent ( in ) :: interactionValues !< values for trans-trans interaction
2022-11-30 18:03:04 +05:30
character ( len = * ) , intent ( in ) :: lattice !<Bravais lattice (Pearson symbol) (parent crystal)
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( sum ( Ntrans ) , sum ( Ntrans ) ) :: interactionMatrix
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
integer , dimension ( : ) , allocatable :: NtransMax
integer , dimension ( : , : ) , allocatable :: interactionTypes
2020-02-25 22:02:49 +05:30
2022-02-21 14:30:00 +05:30
integer , dimension ( CF_NTRANS , CF_NTRANS ) , parameter :: &
CF_INTERACTIONTRANSTRANS = reshape ( [ &
2019-04-13 04:16:27 +05:30
1 , 1 , 1 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , & ! -----> acting
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
2 , 2 , 2 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 2 , 2 , & ! reacting
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 &
2022-02-21 14:30:00 +05:30
] , shape ( CF_INTERACTIONTRANSTRANS ) ) !< Trans-trans interaction types for cF
2020-02-25 22:02:49 +05:30
2021-11-22 02:19:04 +05:30
if ( lattice == 'cF' ) then
2022-02-21 14:30:00 +05:30
interactionTypes = CF_INTERACTIONTRANSTRANS
NtransMax = CF_NTRANSSYSTEM
2019-04-13 04:16:27 +05:30
else
2023-07-15 23:58:57 +05:30
call IO_error ( 137 , ext_msg = 'crystal_interaction_TransByTrans: ' / / trim ( lattice ) )
2019-04-13 04:16:27 +05:30
end if
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
interactionMatrix = buildInteraction ( Ntrans , Ntrans , NtransMax , NtransMax , interactionValues , interactionTypes )
2020-02-25 22:02:49 +05:30
2023-07-15 23:58:57 +05:30
end function crystal_interaction_TransByTrans
2020-02-25 22:02:49 +05:30
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
!--------------------------------------------------------------------------------------------------
2023-07-15 23:58:57 +05:30
function crystal_interaction_SlipByTwin ( Nslip , Ntwin , interactionValues , lattice ) result ( interactionMatrix )
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
integer , dimension ( : ) , intent ( in ) :: Nslip , & !< number of active slip systems per family
Ntwin !< number of active twin systems per family
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( : ) , intent ( in ) :: interactionValues !< values for slip-twin interaction
2022-11-30 18:03:04 +05:30
character ( len = * ) , intent ( in ) :: lattice !< Bravais lattice (Pearson symbol)
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( sum ( Nslip ) , sum ( Ntwin ) ) :: interactionMatrix
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
integer , dimension ( : ) , allocatable :: NslipMax , &
NtwinMax
integer , dimension ( : , : ) , allocatable :: interactionTypes
2020-02-25 22:02:49 +05:30
2022-02-21 14:30:00 +05:30
integer , dimension ( CF_NTWIN , CF_NSLIP ) , parameter :: &
CF_INTERACTIONSLIPTWIN = reshape ( [ &
2019-04-13 04:16:27 +05:30
1 , 1 , 1 , 3 , 3 , 3 , 2 , 2 , 2 , 3 , 3 , 3 , & ! -----> twin (acting)
1 , 1 , 1 , 3 , 3 , 3 , 3 , 3 , 3 , 2 , 2 , 2 , & ! |
1 , 1 , 1 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 3 , 3 , & ! |
2020-02-25 22:02:49 +05:30
3 , 3 , 3 , 1 , 1 , 1 , 3 , 3 , 3 , 2 , 2 , 2 , & ! v
2019-04-13 04:16:27 +05:30
3 , 3 , 3 , 1 , 1 , 1 , 2 , 2 , 2 , 3 , 3 , 3 , & ! slip (reacting)
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 , &
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +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 &
2022-02-21 14:30:00 +05:30
] , shape ( CF_INTERACTIONSLIPTWIN ) ) !< Slip-twin interaction types for cF
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
2022-02-21 14:30:00 +05:30
integer , dimension ( CI_NTWIN , CI_NSLIP ) , parameter :: &
CI_INTERACTIONSLIPTWIN = reshape ( [ &
2019-04-13 04:16:27 +05:30
3 , 3 , 3 , 2 , 2 , 3 , 3 , 3 , 3 , 2 , 3 , 3 , & ! -----> twin (acting)
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
2 , 3 , 3 , 3 , 3 , 3 , 3 , 2 , 3 , 3 , 2 , 3 , & ! slip (reacting)
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 , &
2021-05-24 00:42:31 +05:30
2019-04-13 04:16:27 +05:30
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 , &
2021-05-20 20:34:47 +05:30
3 , 2 , 3 , 3 , 3 , 3 , 2 , 3 , 3 , 3 , 3 , 1 , &
2021-05-24 00:42:31 +05:30
2021-05-20 20:34:47 +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 , &
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 , &
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 , &
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 &
2022-02-21 14:30:00 +05:30
] , shape ( CI_INTERACTIONSLIPTWIN ) ) !< Slip-twin interaction types for cI
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
2021-05-20 20:34:47 +05:30
!< 4: other interaction with slip family {123}
2022-02-21 14:30:00 +05:30
integer , dimension ( HP_NTWIN , HP_NSLIP ) , parameter :: &
HP_INTERACTIONSLIPTWIN = reshape ( [ &
2021-11-24 16:54:12 +05:30
! <-10.1>{10.2} <11.6>{-1-1.1} <10.-2>{10.1} <11.-3>{11.2}
2019-04-13 04:16:27 +05:30
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 (acting)
2021-11-24 16:54:12 +05:30
1 , 1 , 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 3 , 3 , 4 , 4 , 4 , 4 , 4 , 4 , & ! | basal
2019-04-13 04:16:27 +05:30
1 , 1 , 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 3 , 3 , 4 , 4 , 4 , 4 , 4 , 4 , & ! |
2021-05-24 00:42:31 +05:30
! v
2019-04-13 04:16:27 +05:30
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 (reacting)
2021-11-24 16:54:12 +05:30
5 , 5 , 5 , 5 , 5 , 5 , 6 , 6 , 6 , 6 , 6 , 6 , 7 , 7 , 7 , 7 , 7 , 7 , 8 , 8 , 8 , 8 , 8 , 8 , & ! prism
2019-04-13 04:16:27 +05:30
5 , 5 , 5 , 5 , 5 , 5 , 6 , 6 , 6 , 6 , 6 , 6 , 7 , 7 , 7 , 7 , 7 , 7 , 8 , 8 , 8 , 8 , 8 , 8 , &
2021-05-24 00:42:31 +05:30
2019-04-13 04:16:27 +05:30
9 , 9 , 9 , 9 , 9 , 9 , 10 , 10 , 10 , 10 , 10 , 10 , 11 , 11 , 11 , 11 , 11 , 11 , 12 , 12 , 12 , 12 , 12 , 12 , &
2021-12-04 07:20:53 +05:30
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 , & ! 1. pyr<a>
9 , 9 , 9 , 9 , 9 , 9 , 10 , 10 , 10 , 10 , 10 , 10 , 11 , 11 , 11 , 11 , 11 , 11 , 12 , 12 , 12 , 12 , 12 , 12 , &
2019-04-13 04:16:27 +05:30
9 , 9 , 9 , 9 , 9 , 9 , 10 , 10 , 10 , 10 , 10 , 10 , 11 , 11 , 11 , 11 , 11 , 11 , 12 , 12 , 12 , 12 , 12 , 12 , &
2021-05-24 00:42:31 +05:30
2019-04-13 04:16:27 +05:30
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 , &
2021-12-04 07:20:53 +05:30
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 , & ! 1. pyr<c+a>
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 , &
2019-04-13 04:16:27 +05:30
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 , &
2021-05-24 00:42:31 +05:30
2019-04-13 04:16:27 +05:30
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 , &
2021-12-04 07:20:53 +05:30
17 , 17 , 17 , 17 , 17 , 17 , 18 , 18 , 18 , 18 , 18 , 18 , 19 , 19 , 19 , 19 , 19 , 19 , 20 , 20 , 20 , 20 , 20 , 20 , & ! 2. pyr<c+a>
2019-04-13 04:16:27 +05:30
17 , 17 , 17 , 17 , 17 , 17 , 18 , 18 , 18 , 18 , 18 , 18 , 19 , 19 , 19 , 19 , 19 , 19 , 20 , 20 , 20 , 20 , 20 , 20 , &
2021-12-04 07:20:53 +05:30
17 , 17 , 17 , 17 , 17 , 17 , 18 , 18 , 18 , 18 , 18 , 18 , 19 , 19 , 19 , 19 , 19 , 19 , 20 , 20 , 20 , 20 , 20 , 20 &
2022-02-21 14:30:00 +05:30
] , shape ( HP_INTERACTIONSLIPTWIN ) ) !< Slip-twin interaction types for hP
2020-02-25 22:02:49 +05:30
2021-07-23 10:16:17 +05:30
select case ( lattice )
2020-11-29 03:07:03 +05:30
case ( 'cF' )
2022-02-21 14:30:00 +05:30
interactionTypes = CF_INTERACTIONSLIPTWIN
NslipMax = CF_NSLIPSYSTEM
NtwinMax = CF_NTWINSYSTEM
2020-11-29 03:07:03 +05:30
case ( 'cI' )
2022-02-21 14:30:00 +05:30
interactionTypes = CI_INTERACTIONSLIPTWIN
NslipMax = CI_NSLIPSYSTEM
NtwinMax = CI_NTWINSYSTEM
2020-11-29 03:07:03 +05:30
case ( 'hP' )
2022-02-21 14:30:00 +05:30
interactionTypes = HP_INTERACTIONSLIPTWIN
NslipMax = HP_NSLIPSYSTEM
NtwinMax = HP_NTWINSYSTEM
2019-04-13 04:16:27 +05:30
case default
2023-07-15 23:58:57 +05:30
call IO_error ( 137 , ext_msg = 'crystal_interaction_SlipByTwin: ' / / trim ( lattice ) )
2019-04-13 04:16:27 +05:30
end select
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
interactionMatrix = buildInteraction ( Nslip , Ntwin , NslipMax , NtwinMax , interactionValues , interactionTypes )
2020-02-25 22:02:49 +05:30
2023-07-15 23:58:57 +05:30
end function crystal_interaction_SlipByTwin
2020-02-25 22:02:49 +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
!--------------------------------------------------------------------------------------------------
2023-07-15 23:58:57 +05:30
function crystal_interaction_SlipByTrans ( Nslip , Ntrans , interactionValues , lattice ) result ( interactionMatrix )
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
integer , dimension ( : ) , intent ( in ) :: Nslip , & !< number of active slip systems per family
Ntrans !< number of active trans systems per family
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( : ) , intent ( in ) :: interactionValues !< values for slip-trans interaction
2022-11-30 18:03:04 +05:30
character ( len = * ) , intent ( in ) :: lattice !< Bravais lattice (Pearson symbol) (parent crystal)
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( sum ( Nslip ) , sum ( Ntrans ) ) :: interactionMatrix
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
integer , dimension ( : ) , allocatable :: NslipMax , &
NtransMax
integer , dimension ( : , : ) , allocatable :: interactionTypes
2020-02-25 22:02:49 +05:30
2022-02-21 14:30:00 +05:30
integer , dimension ( CF_NTRANS , CF_NSLIP ) , parameter :: &
CF_INTERACTIONSLIPTRANS = reshape ( [ &
2019-04-13 04:16:27 +05:30
1 , 1 , 1 , 3 , 3 , 3 , 2 , 2 , 2 , 3 , 3 , 3 , & ! -----> trans (acting)
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
3 , 3 , 3 , 1 , 1 , 1 , 2 , 2 , 2 , 3 , 3 , 3 , & ! slip (reacting)
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 , &
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +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 &
2022-02-21 14:30:00 +05:30
] , shape ( CF_INTERACTIONSLIPTRANS ) ) !< Slip-trans interaction types for cF
2020-02-25 22:02:49 +05:30
2021-07-23 10:16:17 +05:30
select case ( lattice )
2020-11-29 03:07:03 +05:30
case ( 'cF' )
2022-02-21 14:30:00 +05:30
interactionTypes = CF_INTERACTIONSLIPTRANS
NslipMax = CF_NSLIPSYSTEM
NtransMax = CF_NTRANSSYSTEM
2019-04-13 04:16:27 +05:30
case default
2023-07-15 23:58:57 +05:30
call IO_error ( 137 , ext_msg = 'crystal_interaction_SlipByTrans: ' / / trim ( lattice ) )
2019-04-13 04:16:27 +05:30
end select
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
interactionMatrix = buildInteraction ( Nslip , Ntrans , NslipMax , NtransMax , interactionValues , interactionTypes )
2020-02-25 22:02:49 +05:30
2023-07-15 23:58:57 +05:30
end function crystal_interaction_SlipByTrans
2020-02-25 22:02:49 +05:30
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
!--------------------------------------------------------------------------------------------------
2023-07-15 23:58:57 +05:30
function crystal_interaction_TwinBySlip ( Ntwin , Nslip , interactionValues , lattice ) result ( interactionMatrix )
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
integer , dimension ( : ) , intent ( in ) :: Ntwin , & !< number of active twin systems per family
Nslip !< number of active slip systems per family
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( : ) , intent ( in ) :: interactionValues !< values for twin-twin interaction
2022-11-30 18:03:04 +05:30
character ( len = * ) , intent ( in ) :: lattice !< Bravais lattice (Pearson symbol)
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( sum ( Ntwin ) , sum ( Nslip ) ) :: interactionMatrix
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
integer , dimension ( : ) , allocatable :: NtwinMax , &
NslipMax
integer , dimension ( : , : ) , allocatable :: interactionTypes
2020-02-25 22:02:49 +05:30
2022-02-21 14:30:00 +05:30
integer , dimension ( CF_NSLIP , CF_NTWIN ) , parameter :: &
CF_INTERACTIONTWINSLIP = 1 !< Twin-slip interaction types for cF
2020-02-25 22:02:49 +05:30
2022-02-21 14:30:00 +05:30
integer , dimension ( CI_NSLIP , CI_NTWIN ) , parameter :: &
CI_INTERACTIONTWINSLIP = 1 !< Twin-slip interaction types for cI
2020-02-25 22:02:49 +05:30
2022-02-21 14:30:00 +05:30
integer , dimension ( HP_NSLIP , HP_NTWIN ) , parameter :: &
HP_INTERACTIONTWINSLIP = reshape ( [ &
2021-12-04 07:20:53 +05:30
! basal prism 1. pyr<a> 1. pyr<c+a> 2. pyr<c+a>
1 , 1 , 1 , 5 , 5 , 5 , 9 , 9 , 9 , 9 , 9 , 9 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 17 , 17 , 17 , 17 , 17 , 17 , & ! ----> slip (acting)
1 , 1 , 1 , 5 , 5 , 5 , 9 , 9 , 9 , 9 , 9 , 9 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 17 , 17 , 17 , 17 , 17 , 17 , & ! |
1 , 1 , 1 , 5 , 5 , 5 , 9 , 9 , 9 , 9 , 9 , 9 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 17 , 17 , 17 , 17 , 17 , 17 , & ! |
1 , 1 , 1 , 5 , 5 , 5 , 9 , 9 , 9 , 9 , 9 , 9 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 17 , 17 , 17 , 17 , 17 , 17 , & ! v <-10.1>{10.2}
1 , 1 , 1 , 5 , 5 , 5 , 9 , 9 , 9 , 9 , 9 , 9 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 17 , 17 , 17 , 17 , 17 , 17 , & ! twin (reacting)
1 , 1 , 1 , 5 , 5 , 5 , 9 , 9 , 9 , 9 , 9 , 9 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 17 , 17 , 17 , 17 , 17 , 17 , &
2 , 2 , 2 , 6 , 6 , 6 , 10 , 10 , 10 , 10 , 10 , 10 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 18 , 18 , 18 , 18 , 18 , 18 , &
2 , 2 , 2 , 6 , 6 , 6 , 10 , 10 , 10 , 10 , 10 , 10 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 18 , 18 , 18 , 18 , 18 , 18 , &
2 , 2 , 2 , 6 , 6 , 6 , 10 , 10 , 10 , 10 , 10 , 10 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 18 , 18 , 18 , 18 , 18 , 18 , &
2 , 2 , 2 , 6 , 6 , 6 , 10 , 10 , 10 , 10 , 10 , 10 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 18 , 18 , 18 , 18 , 18 , 18 , & ! <11.6>{-1-1.1}
2 , 2 , 2 , 6 , 6 , 6 , 10 , 10 , 10 , 10 , 10 , 10 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 18 , 18 , 18 , 18 , 18 , 18 , &
2 , 2 , 2 , 6 , 6 , 6 , 10 , 10 , 10 , 10 , 10 , 10 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 18 , 18 , 18 , 18 , 18 , 18 , &
3 , 3 , 3 , 7 , 7 , 7 , 11 , 11 , 11 , 11 , 11 , 11 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 19 , 19 , 19 , 19 , 19 , 19 , &
3 , 3 , 3 , 7 , 7 , 7 , 11 , 11 , 11 , 11 , 11 , 11 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 19 , 19 , 19 , 19 , 19 , 19 , &
3 , 3 , 3 , 7 , 7 , 7 , 11 , 11 , 11 , 11 , 11 , 11 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 19 , 19 , 19 , 19 , 19 , 19 , &
3 , 3 , 3 , 7 , 7 , 7 , 11 , 11 , 11 , 11 , 11 , 11 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 19 , 19 , 19 , 19 , 19 , 19 , & ! <10.-2>{10.1}
3 , 3 , 3 , 7 , 7 , 7 , 11 , 11 , 11 , 11 , 11 , 11 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 19 , 19 , 19 , 19 , 19 , 19 , &
3 , 3 , 3 , 7 , 7 , 7 , 11 , 11 , 11 , 11 , 11 , 11 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 19 , 19 , 19 , 19 , 19 , 19 , &
4 , 4 , 4 , 8 , 8 , 8 , 12 , 12 , 12 , 12 , 12 , 12 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 20 , 20 , 20 , 20 , 20 , 20 , &
4 , 4 , 4 , 8 , 8 , 8 , 12 , 12 , 12 , 12 , 12 , 12 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 20 , 20 , 20 , 20 , 20 , 20 , &
4 , 4 , 4 , 8 , 8 , 8 , 12 , 12 , 12 , 12 , 12 , 12 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 20 , 20 , 20 , 20 , 20 , 20 , &
4 , 4 , 4 , 8 , 8 , 8 , 12 , 12 , 12 , 12 , 12 , 12 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 20 , 20 , 20 , 20 , 20 , 20 , & ! <11.-3>{11.2}
4 , 4 , 4 , 8 , 8 , 8 , 12 , 12 , 12 , 12 , 12 , 12 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 20 , 20 , 20 , 20 , 20 , 20 , &
4 , 4 , 4 , 8 , 8 , 8 , 12 , 12 , 12 , 12 , 12 , 12 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 20 , 20 , 20 , 20 , 20 , 20 &
2022-02-21 14:30:00 +05:30
] , shape ( HP_INTERACTIONTWINSLIP ) ) !< Twin-slip interaction types for hP
2020-02-25 22:02:49 +05:30
2021-07-23 10:16:17 +05:30
select case ( lattice )
2020-11-29 03:07:03 +05:30
case ( 'cF' )
2022-02-21 14:30:00 +05:30
interactionTypes = CF_INTERACTIONTWINSLIP
NtwinMax = CF_NTWINSYSTEM
NslipMax = CF_NSLIPSYSTEM
2020-11-29 03:07:03 +05:30
case ( 'cI' )
2022-02-21 14:30:00 +05:30
interactionTypes = CI_INTERACTIONTWINSLIP
NtwinMax = CI_NTWINSYSTEM
NslipMax = CI_NSLIPSYSTEM
2020-11-29 03:07:03 +05:30
case ( 'hP' )
2022-02-21 14:30:00 +05:30
interactionTypes = HP_INTERACTIONTWINSLIP
NtwinMax = HP_NTWINSYSTEM
NslipMax = HP_NSLIPSYSTEM
2019-04-13 04:16:27 +05:30
case default
2023-07-15 23:58:57 +05:30
call IO_error ( 137 , ext_msg = 'crystal_interaction_TwinBySlip: ' / / trim ( lattice ) )
2019-04-13 04:16:27 +05:30
end select
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
interactionMatrix = buildInteraction ( Ntwin , Nslip , NtwinMax , NslipMax , interactionValues , interactionTypes )
2020-02-25 22:02:49 +05:30
2023-07-15 23:58:57 +05:30
end function crystal_interaction_TwinBySlip
2020-02-25 22:02:49 +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
2023-09-15 20:20:41 +05:30
! Non-schmid projections for cI with up to 6 coefficients
! https://doi.org/10.1016/j.actamat.2012.03.053, eq. (17)
! https://doi.org/10.1016/j.actamat.2008.07.037, table 1
2018-08-25 22:02:55 +05:30
!--------------------------------------------------------------------------------------------------
2023-09-15 20:20:41 +05:30
function crystal_SchmidMatrix_slip ( Nslip , lattice , cOverA , nonSchmidCoefficients , sense ) result ( SchmidMatrix )
2020-02-25 22:02:49 +05:30
2023-09-15 20:20:41 +05:30
integer , dimension ( : ) , intent ( in ) :: Nslip !< number of active slip systems per family
character ( len = * ) , intent ( in ) :: lattice !< Bravais lattice (Pearson symbol)
real ( pREAL ) , intent ( in ) :: cOverA
real ( pREAL ) , dimension ( : , : ) , optional , intent ( in ) :: nonSchmidCoefficients !< non-Schmid coefficients for projections
integer , optional , intent ( in ) :: sense !< sense (-1,+1)
real ( pREAL ) , dimension ( 3 , 3 , sum ( Nslip ) ) :: SchmidMatrix
2020-02-25 22:02:49 +05:30
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 3 , 3 , sum ( Nslip ) ) :: coordinateSystem
real ( pREAL ) , dimension ( : , : ) , allocatable :: slipSystems
2019-04-13 04:16:27 +05:30
integer , dimension ( : ) , allocatable :: NslipMax
2023-09-15 20:20:41 +05:30
integer , dimension ( : ) , allocatable :: slipFamily
real ( pREAL ) , dimension ( 3 ) :: direction , normal , np
2023-09-18 00:38:54 +05:30
real ( pREAL ) , dimension ( 6 ) :: coeff !< local nonSchmid coefficient variable
2023-09-15 20:20:41 +05:30
type ( tRotation ) :: R
2019-04-13 04:16:27 +05:30
integer :: i
2020-02-25 22:02:49 +05:30
2021-07-23 10:16:17 +05:30
select case ( lattice )
2020-11-29 03:07:03 +05:30
case ( 'cF' )
2022-02-21 14:30:00 +05:30
NslipMax = CF_NSLIPSYSTEM
slipSystems = CF_SYSTEMSLIP
2020-11-29 03:07:03 +05:30
case ( 'cI' )
2022-02-21 14:30:00 +05:30
NslipMax = CI_NSLIPSYSTEM
slipSystems = CI_SYSTEMSLIP
2020-11-29 03:07:03 +05:30
case ( 'hP' )
2022-02-21 14:30:00 +05:30
NslipMax = HP_NSLIPSYSTEM
slipSystems = HP_SYSTEMSLIP
2020-11-29 03:07:03 +05:30
case ( 'tI' )
2022-02-21 14:30:00 +05:30
NslipMax = TI_NSLIPSYSTEM
slipSystems = TI_SYSTEMSLIP
2019-04-13 04:16:27 +05:30
case default
2020-05-16 02:03:38 +05:30
allocate ( NslipMax ( 0 ) )
2023-07-15 23:58:57 +05:30
call IO_error ( 137 , ext_msg = 'crystal_SchmidMatrix_slip: ' / / trim ( lattice ) )
2019-04-13 04:16:27 +05:30
end select
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
if ( any ( NslipMax ( 1 : size ( Nslip ) ) - Nslip < 0 ) ) &
2021-07-23 10:16:17 +05:30
call IO_error ( 145 , ext_msg = 'Nslip ' / / trim ( lattice ) )
2019-04-13 04:16:27 +05:30
if ( any ( Nslip < 0 ) ) &
2021-07-23 10:16:17 +05:30
call IO_error ( 144 , ext_msg = 'Nslip ' / / trim ( lattice ) )
2020-02-25 22:02:49 +05:30
2023-09-15 20:20:41 +05:30
slipFamily = math_expand ( [ ( i , i = 1 , size ( Nslip ) ) ] , Nslip )
2021-07-23 10:16:17 +05:30
coordinateSystem = buildCoordinateSystem ( Nslip , NslipMax , slipSystems , lattice , cOverA )
2023-09-15 20:20:41 +05:30
if ( present ( sense ) ) then
if ( abs ( sense ) / = 1 ) error stop 'neither +1 nor -1 sense in crystal_SchmidMatrix_slip'
coordinateSystem ( 1 : 3 , 1 , 1 : sum ( Nslip ) ) = coordinateSystem ( 1 : 3 , 1 , 1 : sum ( Nslip ) ) * real ( sense , pREAL )
end if
do i = 1 , sum ( Nslip )
direction = coordinateSystem ( 1 : 3 , 1 , i )
normal = coordinateSystem ( 1 : 3 , 2 , i )
2020-02-25 22:02:49 +05:30
2023-09-15 20:20:41 +05:30
SchmidMatrix ( 1 : 3 , 1 : 3 , i ) = math_outer ( direction , normal )
2019-04-13 04:16:27 +05:30
if ( abs ( math_trace33 ( SchmidMatrix ( 1 : 3 , 1 : 3 , i ) ) ) > tol_math_check ) &
2022-05-27 12:18:42 +05:30
error stop 'dilatational Schmid matrix for slip'
2023-09-15 20:20:41 +05:30
if ( present ( nonSchmidCoefficients ) ) then
select case ( lattice )
case ( 'cI' )
2023-09-18 19:12:58 +05:30
coeff ( : ) = 0.0_pREAL
2023-09-18 00:38:54 +05:30
select case ( slipFamily ( i ) )
case ( 1 )
2023-09-18 19:12:58 +05:30
coeff ( : size ( nonSchmidCoefficients ( 1 , : ) ) ) = nonSchmidCoefficients ( 1 , : )
2023-09-18 00:38:54 +05:30
call R % fromAxisAngle ( [ direction , 6 0.0_pREAL ] , degrees = . true . , P = 1 )
np = R % rotate ( normal )
SchmidMatrix ( 1 : 3 , 1 : 3 , i ) = SchmidMatrix ( 1 : 3 , 1 : 3 , i ) &
+ coeff ( 1 ) * math_outer ( direction , np ) &
+ coeff ( 2 ) * math_outer ( math_cross ( normal , direction ) , normal ) &
+ coeff ( 3 ) * math_outer ( math_cross ( np , direction ) , np ) &
+ coeff ( 4 ) * math_outer ( normal , normal ) &
+ coeff ( 5 ) * math_outer ( math_cross ( normal , direction ) , &
math_cross ( normal , direction ) ) &
+ coeff ( 6 ) * math_outer ( direction , direction )
end select
2023-09-15 20:20:41 +05:30
end select
end if
2022-06-09 02:36:01 +05:30
end do
2020-02-25 22:02:49 +05:30
2023-07-15 23:58:57 +05:30
end function crystal_SchmidMatrix_slip
2020-02-25 22:02:49 +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
!--------------------------------------------------------------------------------------------------
2023-07-15 23:58:57 +05:30
function crystal_SchmidMatrix_twin ( Ntwin , lattice , cOverA ) result ( SchmidMatrix )
2020-02-25 22:02:49 +05:30
2023-09-15 02:13:50 +05:30
integer , dimension ( : ) , intent ( in ) :: Ntwin !< number of active twin systems per family
character ( len = * ) , intent ( in ) :: lattice !< Bravais lattice (Pearson symbol)
real ( pREAL ) , intent ( in ) :: cOverA !< c/a ratio
real ( pREAL ) , dimension ( 3 , 3 , sum ( Ntwin ) ) :: SchmidMatrix
2020-02-25 22:02:49 +05:30
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 3 , 3 , sum ( Ntwin ) ) :: coordinateSystem
real ( pREAL ) , dimension ( : , : ) , allocatable :: twinSystems
2019-04-13 04:16:27 +05:30
integer , dimension ( : ) , allocatable :: NtwinMax
integer :: i
2020-02-25 22:02:49 +05:30
2021-07-23 10:16:17 +05:30
select case ( lattice )
2020-11-29 03:07:03 +05:30
case ( 'cF' )
2022-02-21 14:30:00 +05:30
NtwinMax = CF_NTWINSYSTEM
twinSystems = CF_SYSTEMTWIN
2020-11-29 03:07:03 +05:30
case ( 'cI' )
2022-02-21 14:30:00 +05:30
NtwinMax = CI_NTWINSYSTEM
twinSystems = CI_SYSTEMTWIN
2020-11-29 03:07:03 +05:30
case ( 'hP' )
2022-02-21 14:30:00 +05:30
NtwinMax = HP_NTWINSYSTEM
twinSystems = HP_SYSTEMTWIN
2019-04-13 04:16:27 +05:30
case default
2020-05-16 02:03:38 +05:30
allocate ( NtwinMax ( 0 ) )
2023-07-15 23:58:57 +05:30
call IO_error ( 137 , ext_msg = 'crystal_SchmidMatrix_twin: ' / / trim ( lattice ) )
2019-04-13 04:16:27 +05:30
end select
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
if ( any ( NtwinMax ( 1 : size ( Ntwin ) ) - Ntwin < 0 ) ) &
2021-07-23 10:16:17 +05:30
call IO_error ( 145 , ext_msg = 'Ntwin ' / / trim ( lattice ) )
2019-04-13 04:16:27 +05:30
if ( any ( Ntwin < 0 ) ) &
2021-07-23 10:16:17 +05:30
call IO_error ( 144 , ext_msg = 'Ntwin ' / / trim ( lattice ) )
2020-02-25 22:02:49 +05:30
2021-07-23 10:16:17 +05:30
coordinateSystem = buildCoordinateSystem ( Ntwin , NtwinMax , twinSystems , lattice , cOverA )
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
do i = 1 , sum ( Ntwin )
SchmidMatrix ( 1 : 3 , 1 : 3 , i ) = math_outer ( coordinateSystem ( 1 : 3 , 1 , i ) , coordinateSystem ( 1 : 3 , 2 , i ) )
if ( abs ( math_trace33 ( SchmidMatrix ( 1 : 3 , 1 : 3 , i ) ) ) > tol_math_check ) &
2022-05-27 12:18:42 +05:30
error stop 'dilatational Schmid matrix for twin'
2022-06-09 02:36:01 +05:30
end do
2020-02-25 22:02:49 +05:30
2023-07-15 23:58:57 +05:30
end function crystal_SchmidMatrix_twin
2020-02-25 22:02:49 +05:30
2018-12-22 12:19:52 +05:30
!--------------------------------------------------------------------------------------------------
2021-11-22 02:19:04 +05:30
!> @brief Schmid matrix for transformation
2018-12-22 12:19:52 +05:30
!> details only active twin systems are considered
!--------------------------------------------------------------------------------------------------
2023-07-15 23:58:57 +05:30
function crystal_SchmidMatrix_trans ( Ntrans , crystal_target , cOverA , a_cF , a_cI ) result ( SchmidMatrix )
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
integer , dimension ( : ) , intent ( in ) :: Ntrans !< number of active twin systems per family
2023-07-15 23:58:57 +05:30
character ( len = * ) , intent ( in ) :: crystal_target !< Bravais lattice (Pearson symbol)
2023-06-04 10:52:25 +05:30
real ( pREAL ) , optional , intent ( in ) :: cOverA , a_cI , a_cF
real ( pREAL ) , dimension ( 3 , 3 , sum ( Ntrans ) ) :: SchmidMatrix
2020-02-25 22:02:49 +05:30
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 3 , 3 , sum ( Ntrans ) ) :: devNull
2020-02-25 22:02:49 +05:30
2019-09-21 06:46:08 +05:30
2023-07-15 23:58:57 +05:30
if ( crystal_target == 'hP' . and . present ( cOverA ) ) then
2023-06-04 10:52:25 +05:30
if ( cOverA < 1.0_pREAL . or . cOverA > 2.0_pREAL ) &
2023-07-15 23:58:57 +05:30
call IO_error ( 131 , ext_msg = 'crystal_SchmidMatrix_trans: ' / / trim ( crystal_target ) )
2022-01-27 03:19:11 +05:30
call buildTransformationSystem ( devNull , SchmidMatrix , Ntrans , cOverA = cOverA )
2023-07-15 23:58:57 +05:30
else if ( crystal_target == 'cI' . and . present ( a_cF ) . and . present ( a_cI ) ) then
2023-06-04 10:52:25 +05:30
if ( a_cI < = 0.0_pREAL . or . a_cF < = 0.0_pREAL ) &
2023-07-15 23:58:57 +05:30
call IO_error ( 134 , ext_msg = 'crystal_SchmidMatrix_trans: ' / / trim ( crystal_target ) )
2022-02-21 14:30:00 +05:30
call buildTransformationSystem ( devNull , SchmidMatrix , Ntrans , a_cF = a_cF , a_cI = a_cI )
2022-01-27 03:19:11 +05:30
else
2023-07-15 23:58:57 +05:30
call IO_error ( 131 , ext_msg = 'crystal_SchmidMatrix_trans: ' / / trim ( crystal_target ) )
2022-01-27 03:19:11 +05:30
end if
2020-02-25 22:02:49 +05:30
2023-07-15 23:58:57 +05:30
end function crystal_SchmidMatrix_trans
2020-02-25 22:02:49 +05:30
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
!--------------------------------------------------------------------------------------------------
2023-07-15 23:58:57 +05:30
function crystal_SchmidMatrix_cleavage ( Ncleavage , lattice , cOverA ) result ( SchmidMatrix )
2019-05-17 02:26:48 +05:30
2023-09-15 02:13:50 +05:30
integer , dimension ( : ) , intent ( in ) :: Ncleavage !< number of active cleavage systems per family
character ( len = * ) , intent ( in ) :: lattice !< Bravais lattice (Pearson symbol)
real ( pREAL ) , intent ( in ) :: cOverA !< c/a ratio
real ( pREAL ) , dimension ( 3 , 3 , 3 , sum ( Ncleavage ) ) :: SchmidMatrix
2020-02-25 22:02:49 +05:30
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 3 , 3 , sum ( Ncleavage ) ) :: coordinateSystem
real ( pREAL ) , dimension ( : , : ) , allocatable :: cleavageSystems
2019-04-13 04:16:27 +05:30
integer , dimension ( : ) , allocatable :: NcleavageMax
integer :: i
2020-02-25 22:02:49 +05:30
2021-07-23 10:16:17 +05:30
select case ( lattice )
2020-11-29 03:07:03 +05:30
case ( 'cF' )
2022-02-21 14:30:00 +05:30
NcleavageMax = CF_NCLEAVAGESYSTEM
cleavageSystems = CF_SYSTEMCLEAVAGE
2020-11-29 03:07:03 +05:30
case ( 'cI' )
2022-02-21 14:30:00 +05:30
NcleavageMax = CI_NCLEAVAGESYSTEM
cleavageSystems = CI_SYSTEMCLEAVAGE
2019-04-13 04:16:27 +05:30
case default
2020-05-16 02:03:38 +05:30
allocate ( NcleavageMax ( 0 ) )
2023-07-15 23:58:57 +05:30
call IO_error ( 137 , ext_msg = 'crystal_SchmidMatrix_cleavage: ' / / trim ( lattice ) )
2019-04-13 04:16:27 +05:30
end select
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
if ( any ( NcleavageMax ( 1 : size ( Ncleavage ) ) - Ncleavage < 0 ) ) &
2021-07-23 10:16:17 +05:30
call IO_error ( 145 , ext_msg = 'Ncleavage ' / / trim ( lattice ) )
2019-04-13 04:16:27 +05:30
if ( any ( Ncleavage < 0 ) ) &
2021-07-23 10:16:17 +05:30
call IO_error ( 144 , ext_msg = 'Ncleavage ' / / trim ( lattice ) )
2020-02-25 22:02:49 +05:30
2021-07-23 10:16:17 +05:30
coordinateSystem = buildCoordinateSystem ( Ncleavage , NcleavageMax , cleavageSystems , lattice , cOverA )
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
do i = 1 , sum ( Ncleavage )
SchmidMatrix ( 1 : 3 , 1 : 3 , 1 , i ) = math_outer ( coordinateSystem ( 1 : 3 , 1 , i ) , coordinateSystem ( 1 : 3 , 2 , i ) )
SchmidMatrix ( 1 : 3 , 1 : 3 , 2 , i ) = math_outer ( coordinateSystem ( 1 : 3 , 3 , i ) , coordinateSystem ( 1 : 3 , 2 , i ) )
SchmidMatrix ( 1 : 3 , 1 : 3 , 3 , i ) = math_outer ( coordinateSystem ( 1 : 3 , 2 , i ) , coordinateSystem ( 1 : 3 , 2 , i ) )
2022-06-09 02:36:01 +05:30
end do
2020-02-25 22:02:49 +05:30
2023-07-15 23:58:57 +05:30
end function crystal_SchmidMatrix_cleavage
2020-02-25 22:02:49 +05:30
2019-02-20 12:23:34 +05:30
!--------------------------------------------------------------------------------------------------
2019-03-12 03:11:59 +05:30
!> @brief Slip direction of slip systems (|| b)
2019-02-20 12:23:34 +05:30
!--------------------------------------------------------------------------------------------------
2023-07-15 23:58:57 +05:30
function crystal_slip_direction ( Nslip , lattice , cOverA ) result ( d )
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
integer , dimension ( : ) , intent ( in ) :: Nslip !< number of active slip systems per family
2022-11-30 18:03:04 +05:30
character ( len = * ) , intent ( in ) :: lattice !< Bravais lattice (Pearson symbol)
2023-06-04 10:52:25 +05:30
real ( pREAL ) , intent ( in ) :: cOverA !< c/a ratio
real ( pREAL ) , dimension ( 3 , sum ( Nslip ) ) :: d
2020-02-25 22:02:49 +05:30
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 3 , 3 , sum ( Nslip ) ) :: coordinateSystem
2020-02-25 22:02:49 +05:30
2021-07-23 10:16:17 +05:30
coordinateSystem = coordinateSystem_slip ( Nslip , lattice , cOverA )
2019-04-13 04:16:27 +05:30
d = coordinateSystem ( 1 : 3 , 1 , 1 : sum ( Nslip ) )
2020-02-25 22:02:49 +05:30
2023-07-15 23:58:57 +05:30
end function crystal_slip_direction
2020-02-25 22:02:49 +05:30
2019-02-20 12:23:34 +05:30
!--------------------------------------------------------------------------------------------------
2019-03-12 03:11:59 +05:30
!> @brief Normal direction of slip systems (|| n)
2019-02-20 12:23:34 +05:30
!--------------------------------------------------------------------------------------------------
2023-07-15 23:58:57 +05:30
function crystal_slip_normal ( Nslip , lattice , cOverA ) result ( n )
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
integer , dimension ( : ) , intent ( in ) :: Nslip !< number of active slip systems per family
2022-11-30 18:03:04 +05:30
character ( len = * ) , intent ( in ) :: lattice !< Bravais lattice (Pearson symbol)
2023-06-04 10:52:25 +05:30
real ( pREAL ) , intent ( in ) :: cOverA !< c/a ratio
real ( pREAL ) , dimension ( 3 , sum ( Nslip ) ) :: n
2020-02-25 22:02:49 +05:30
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 3 , 3 , sum ( Nslip ) ) :: coordinateSystem
2020-02-25 22:02:49 +05:30
2021-07-23 10:16:17 +05:30
coordinateSystem = coordinateSystem_slip ( Nslip , lattice , cOverA )
2019-04-13 04:16:27 +05:30
n = coordinateSystem ( 1 : 3 , 2 , 1 : sum ( Nslip ) )
2020-02-25 22:02:49 +05:30
2023-07-15 23:58:57 +05:30
end function crystal_slip_normal
2019-02-20 12:23:34 +05:30
2019-04-13 04:16:27 +05:30
2019-02-20 12:23:34 +05:30
!--------------------------------------------------------------------------------------------------
2021-05-09 14:31:21 +05:30
!> @brief Transverse direction of slip systems (|| t = b x n)
2019-02-20 12:23:34 +05:30
!--------------------------------------------------------------------------------------------------
2023-07-15 23:58:57 +05:30
function crystal_slip_transverse ( Nslip , lattice , cOverA ) result ( t )
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
integer , dimension ( : ) , intent ( in ) :: Nslip !< number of active slip systems per family
2022-11-30 18:03:04 +05:30
character ( len = * ) , intent ( in ) :: lattice !< Bravais lattice (Pearson symbol)
2023-06-04 10:52:25 +05:30
real ( pREAL ) , intent ( in ) :: cOverA !< c/a ratio
real ( pREAL ) , dimension ( 3 , sum ( Nslip ) ) :: t
2020-02-25 22:02:49 +05:30
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 3 , 3 , sum ( Nslip ) ) :: coordinateSystem
2020-02-25 22:02:49 +05:30
2021-07-23 10:16:17 +05:30
coordinateSystem = coordinateSystem_slip ( Nslip , lattice , cOverA )
2019-04-13 04:16:27 +05:30
t = coordinateSystem ( 1 : 3 , 3 , 1 : sum ( Nslip ) )
2020-02-25 22:02:49 +05:30
2023-07-15 23:58:57 +05:30
end function crystal_slip_transverse
2020-02-25 22:02:49 +05:30
2019-10-10 16:41:02 +05:30
!--------------------------------------------------------------------------------------------------
2021-11-28 00:25:02 +05:30
!> @brief Labels of slip systems
2019-10-10 16:41:02 +05:30
!> details only active slip systems are considered
!--------------------------------------------------------------------------------------------------
2023-07-15 23:58:57 +05:30
function crystal_labels_slip ( Nslip , lattice ) result ( labels )
2019-10-10 16:41:02 +05:30
integer , dimension ( : ) , intent ( in ) :: Nslip !< number of active slip systems per family
2022-11-30 18:03:04 +05:30
character ( len = * ) , intent ( in ) :: lattice !< Bravais lattice (Pearson symbol)
2020-02-25 22:02:49 +05:30
2019-10-10 16:41:02 +05:30
character ( len = : ) , dimension ( : ) , allocatable :: labels
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( : , : ) , allocatable :: slipSystems
2019-10-10 16:41:02 +05:30
integer , dimension ( : ) , allocatable :: NslipMax
2020-02-25 22:02:49 +05:30
2021-07-23 10:16:17 +05:30
select case ( lattice )
2020-11-29 03:07:03 +05:30
case ( 'cF' )
2022-02-21 14:30:00 +05:30
NslipMax = CF_NSLIPSYSTEM
slipSystems = CF_SYSTEMSLIP
2020-11-29 03:07:03 +05:30
case ( 'cI' )
2022-02-21 14:30:00 +05:30
NslipMax = CI_NSLIPSYSTEM
slipSystems = CI_SYSTEMSLIP
2020-11-29 03:07:03 +05:30
case ( 'hP' )
2022-02-21 14:30:00 +05:30
NslipMax = HP_NSLIPSYSTEM
slipSystems = HP_SYSTEMSLIP
2020-11-29 03:07:03 +05:30
case ( 'tI' )
2022-02-21 14:30:00 +05:30
NslipMax = TI_NSLIPSYSTEM
slipSystems = TI_SYSTEMSLIP
2019-10-10 16:41:02 +05:30
case default
2023-07-15 23:58:57 +05:30
call IO_error ( 137 , ext_msg = 'crystal_labels_slip: ' / / trim ( lattice ) )
2019-10-10 16:41:02 +05:30
end select
2020-02-25 22:02:49 +05:30
2019-10-10 16:41:02 +05:30
if ( any ( NslipMax ( 1 : size ( Nslip ) ) - Nslip < 0 ) ) &
2021-07-23 10:16:17 +05:30
call IO_error ( 145 , ext_msg = 'Nslip ' / / trim ( lattice ) )
2019-10-10 16:41:02 +05:30
if ( any ( Nslip < 0 ) ) &
2021-07-23 10:16:17 +05:30
call IO_error ( 144 , ext_msg = 'Nslip ' / / trim ( lattice ) )
2020-02-25 22:02:49 +05:30
2020-01-03 18:03:32 +05:30
labels = getLabels ( Nslip , NslipMax , slipSystems )
2020-02-25 22:02:49 +05:30
2023-07-15 23:58:57 +05:30
end function crystal_labels_slip
2019-10-10 16:41:02 +05:30
2020-02-26 22:32:47 +05:30
!--------------------------------------------------------------------------------------------------
2021-07-23 10:16:17 +05:30
!> @brief Return 3x3 tensor with symmetry according to given Bravais lattice
2020-02-26 22:32:47 +05:30
!--------------------------------------------------------------------------------------------------
2023-07-15 23:58:57 +05:30
pure function crystal_symmetrize_33 ( T , lattice ) result ( T_sym )
2020-02-29 16:50:40 +05:30
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 3 , 3 ) :: T_sym
2020-02-29 16:50:40 +05:30
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 3 , 3 ) , intent ( in ) :: T
2022-11-30 18:03:04 +05:30
character ( len = * ) , intent ( in ) :: lattice !< Bravais lattice (Pearson symbol)
2020-02-26 22:32:47 +05:30
2023-06-04 10:52:25 +05:30
T_sym = 0.0_pREAL
2020-02-26 22:32:47 +05:30
2021-07-21 19:53:21 +05:30
select case ( lattice )
2021-05-24 17:47:04 +05:30
case ( 'cF' , 'cI' )
2020-02-29 16:50:40 +05:30
T_sym ( 1 , 1 ) = T ( 1 , 1 )
T_sym ( 2 , 2 ) = T ( 1 , 1 )
2021-05-25 00:03:50 +05:30
T_sym ( 3 , 3 ) = T ( 1 , 1 )
2021-05-27 02:19:53 +05:30
case ( 'hP' , 'tI' )
2020-02-29 16:50:40 +05:30
T_sym ( 1 , 1 ) = T ( 1 , 1 )
T_sym ( 2 , 2 ) = T ( 1 , 1 )
T_sym ( 3 , 3 ) = T ( 3 , 3 )
2020-02-26 22:32:47 +05:30
end select
2023-07-15 23:58:57 +05:30
end function crystal_symmetrize_33
2020-02-26 22:32:47 +05:30
!--------------------------------------------------------------------------------------------------
2021-07-23 10:16:17 +05:30
!> @brief Return stiffness matrix in 6x6 notation with symmetry according to given Bravais lattice
2020-02-26 22:32:47 +05:30
!> @details J. A. Rayne and B. S. Chandrasekhar Phys. Rev. 120, 1658 Erratum Phys. Rev. 122, 1962
!--------------------------------------------------------------------------------------------------
2023-07-15 23:58:57 +05:30
pure function crystal_symmetrize_C66 ( C66 , lattice ) result ( C66_sym )
2020-02-29 19:04:19 +05:30
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 6 , 6 ) :: C66_sym
2020-02-26 22:32:47 +05:30
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 6 , 6 ) , intent ( in ) :: C66
2022-11-30 18:03:04 +05:30
character ( len = * ) , intent ( in ) :: lattice !< Bravais lattice (Pearson symbol)
2020-02-29 19:04:19 +05:30
2021-05-24 20:47:27 +05:30
integer :: i , j
2020-02-26 22:32:47 +05:30
2023-06-04 10:52:25 +05:30
C66_sym = 0.0_pREAL
2020-02-26 22:32:47 +05:30
2021-07-21 19:53:21 +05:30
select case ( lattice )
2020-11-29 03:07:03 +05:30
case ( 'cF' , 'cI' )
2021-05-24 21:09:09 +05:30
C66_sym ( 1 , 1 ) = C66 ( 1 , 1 ) ; C66_sym ( 2 , 2 ) = C66 ( 1 , 1 ) ; C66_sym ( 3 , 3 ) = C66 ( 1 , 1 )
C66_sym ( 1 , 2 ) = C66 ( 1 , 2 ) ; C66_sym ( 1 , 3 ) = C66 ( 1 , 2 ) ; C66_sym ( 2 , 3 ) = C66 ( 1 , 2 )
C66_sym ( 4 , 4 ) = C66 ( 4 , 4 ) ; C66_sym ( 5 , 5 ) = C66 ( 4 , 4 ) ; C66_sym ( 6 , 6 ) = C66 ( 4 , 4 ) ! isotropic C_44 = (C_11-C_12)/2
2020-11-29 03:07:03 +05:30
case ( 'hP' )
2021-05-24 21:09:09 +05:30
C66_sym ( 1 , 1 ) = C66 ( 1 , 1 ) ; C66_sym ( 2 , 2 ) = C66 ( 1 , 1 )
2020-02-29 19:04:19 +05:30
C66_sym ( 3 , 3 ) = C66 ( 3 , 3 )
C66_sym ( 1 , 2 ) = C66 ( 1 , 2 )
2021-05-24 21:09:09 +05:30
C66_sym ( 1 , 3 ) = C66 ( 1 , 3 ) ; C66_sym ( 2 , 3 ) = C66 ( 1 , 3 )
C66_sym ( 4 , 4 ) = C66 ( 4 , 4 ) ; C66_sym ( 5 , 5 ) = C66 ( 4 , 4 )
2023-06-04 10:52:25 +05:30
C66_sym ( 6 , 6 ) = 0.5_pREAL * ( C66 ( 1 , 1 ) - C66 ( 1 , 2 ) )
2020-11-29 03:07:03 +05:30
case ( 'tI' )
2021-05-24 21:09:09 +05:30
C66_sym ( 1 , 1 ) = C66 ( 1 , 1 ) ; C66_sym ( 2 , 2 ) = C66 ( 1 , 1 )
2020-02-29 19:04:19 +05:30
C66_sym ( 3 , 3 ) = C66 ( 3 , 3 )
C66_sym ( 1 , 2 ) = C66 ( 1 , 2 )
2021-05-24 21:09:09 +05:30
C66_sym ( 1 , 3 ) = C66 ( 1 , 3 ) ; C66_sym ( 2 , 3 ) = C66 ( 1 , 3 )
C66_sym ( 4 , 4 ) = C66 ( 4 , 4 ) ; C66_sym ( 5 , 5 ) = C66 ( 4 , 4 )
2020-02-29 19:04:19 +05:30
C66_sym ( 6 , 6 ) = C66 ( 6 , 6 )
2020-02-26 22:32:47 +05:30
end select
2021-05-24 20:47:27 +05:30
do i = 1 , 6
do j = i + 1 , 6
C66_sym ( j , i ) = C66_sym ( i , j )
2022-06-09 02:36:01 +05:30
end do
end do
2021-05-24 20:47:27 +05:30
2023-07-15 23:58:57 +05:30
end function crystal_symmetrize_C66
2020-02-26 22:32:47 +05:30
2019-10-10 16:41:02 +05:30
!--------------------------------------------------------------------------------------------------
!> @brief Labels for twin systems
!> details only active twin systems are considered
!--------------------------------------------------------------------------------------------------
2023-07-15 23:58:57 +05:30
function crystal_labels_twin ( Ntwin , lattice ) result ( labels )
2019-10-10 16:41:02 +05:30
integer , dimension ( : ) , intent ( in ) :: Ntwin !< number of active slip systems per family
2022-11-30 18:03:04 +05:30
character ( len = * ) , intent ( in ) :: lattice !< Bravais lattice (Pearson symbol)
2020-02-25 22:02:49 +05:30
2019-10-10 16:41:02 +05:30
character ( len = : ) , dimension ( : ) , allocatable :: labels
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( : , : ) , allocatable :: twinSystems
2019-10-10 16:41:02 +05:30
integer , dimension ( : ) , allocatable :: NtwinMax
2020-02-25 22:02:49 +05:30
2021-07-23 10:16:17 +05:30
select case ( lattice )
2020-11-29 03:07:03 +05:30
case ( 'cF' )
2022-02-21 14:30:00 +05:30
NtwinMax = CF_NTWINSYSTEM
twinSystems = CF_SYSTEMTWIN
2020-11-29 03:07:03 +05:30
case ( 'cI' )
2022-02-21 14:30:00 +05:30
NtwinMax = CI_NTWINSYSTEM
twinSystems = CI_SYSTEMTWIN
2020-11-29 03:07:03 +05:30
case ( 'hP' )
2022-02-21 14:30:00 +05:30
NtwinMax = HP_NTWINSYSTEM
twinSystems = HP_SYSTEMTWIN
2019-10-10 16:41:02 +05:30
case default
2023-07-15 23:58:57 +05:30
call IO_error ( 137 , ext_msg = 'crystal_labels_twin: ' / / trim ( lattice ) )
2019-10-10 16:41:02 +05:30
end select
2020-02-25 22:02:49 +05:30
2019-10-10 16:41:02 +05:30
if ( any ( NtwinMax ( 1 : size ( Ntwin ) ) - Ntwin < 0 ) ) &
2021-07-23 10:16:17 +05:30
call IO_error ( 145 , ext_msg = 'Ntwin ' / / trim ( lattice ) )
2019-10-10 16:41:02 +05:30
if ( any ( Ntwin < 0 ) ) &
2021-07-23 10:16:17 +05:30
call IO_error ( 144 , ext_msg = 'Ntwin ' / / trim ( lattice ) )
2020-02-25 22:02:49 +05:30
2020-01-03 18:03:32 +05:30
labels = getLabels ( Ntwin , NtwinMax , twinSystems )
2020-02-25 22:02:49 +05:30
2023-07-15 23:58:57 +05:30
end function crystal_labels_twin
2019-10-10 16:41:02 +05:30
2020-02-29 21:34:29 +05:30
!--------------------------------------------------------------------------------------------------
!> @brief Projection of the transverse direction onto the slip plane
!> @details: This projection is used to calculate forest hardening for edge dislocations
!--------------------------------------------------------------------------------------------------
2021-07-23 10:16:17 +05:30
function slipProjection_transverse ( Nslip , lattice , cOverA ) result ( projection )
2020-02-29 21:34:29 +05:30
integer , dimension ( : ) , intent ( in ) :: Nslip !< number of active slip systems per family
2022-11-30 18:03:04 +05:30
character ( len = * ) , intent ( in ) :: lattice !< Bravais lattice (Pearson symbol)
2023-06-04 10:52:25 +05:30
real ( pREAL ) , intent ( in ) :: cOverA !< c/a ratio
real ( pREAL ) , dimension ( sum ( Nslip ) , sum ( Nslip ) ) :: projection
2020-02-29 21:34:29 +05:30
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 3 , sum ( Nslip ) ) :: n , t
2020-02-29 21:34:29 +05:30
integer :: i , j
2023-07-15 23:58:57 +05:30
n = crystal_slip_normal ( Nslip , lattice , cOverA )
t = crystal_slip_transverse ( Nslip , lattice , cOverA )
2020-02-29 21:34:29 +05:30
do i = 1 , sum ( Nslip ) ; do j = 1 , sum ( Nslip )
projection ( i , j ) = abs ( math_inner ( n ( : , i ) , t ( : , j ) ) )
2022-06-09 02:36:01 +05:30
end do ; end do
2020-02-29 21:34:29 +05:30
end function slipProjection_transverse
2019-02-20 04:25:59 +05:30
!--------------------------------------------------------------------------------------------------
!> @brief Projection of the slip direction onto the slip plane
2019-03-09 17:18:01 +05:30
!> @details: This projection is used to calculate forest hardening for screw dislocations
2019-02-20 04:25:59 +05:30
!--------------------------------------------------------------------------------------------------
2021-07-23 10:16:17 +05:30
function slipProjection_direction ( Nslip , lattice , cOverA ) result ( projection )
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
integer , dimension ( : ) , intent ( in ) :: Nslip !< number of active slip systems per family
2022-11-30 18:03:04 +05:30
character ( len = * ) , intent ( in ) :: lattice !< Bravais lattice (Pearson symbol)
2023-06-04 10:52:25 +05:30
real ( pREAL ) , intent ( in ) :: cOverA !< c/a ratio
real ( pREAL ) , dimension ( sum ( Nslip ) , sum ( Nslip ) ) :: projection
2020-02-25 22:02:49 +05:30
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 3 , sum ( Nslip ) ) :: n , d
2019-09-21 21:46:58 +05:30
integer :: i , j
2020-02-25 22:02:49 +05:30
2023-07-15 23:58:57 +05:30
n = crystal_slip_normal ( Nslip , lattice , cOverA )
d = crystal_slip_direction ( Nslip , lattice , cOverA )
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
do i = 1 , sum ( Nslip ) ; do j = 1 , sum ( Nslip )
2019-09-21 21:46:58 +05:30
projection ( i , j ) = abs ( math_inner ( n ( : , i ) , d ( : , j ) ) )
2022-06-09 02:36:01 +05:30
end do ; end do
2020-02-25 22:02:49 +05:30
2019-02-20 04:25:59 +05:30
end function slipProjection_direction
2020-02-25 22:02:49 +05:30
2019-02-20 12:23:34 +05:30
!--------------------------------------------------------------------------------------------------
!> @brief build a local coordinate system on slip systems
!> @details Order: Direction, plane (normal), and common perpendicular
!--------------------------------------------------------------------------------------------------
2021-07-23 10:16:17 +05:30
function coordinateSystem_slip ( Nslip , lattice , cOverA ) result ( coordinateSystem )
2019-05-17 02:26:48 +05:30
2019-04-13 04:16:27 +05:30
integer , dimension ( : ) , intent ( in ) :: Nslip !< number of active slip systems per family
2022-11-30 18:03:04 +05:30
character ( len = * ) , intent ( in ) :: lattice !< Bravais lattice (Pearson symbol)
2023-06-04 10:52:25 +05:30
real ( pREAL ) , intent ( in ) :: cOverA !< c/a ratio
real ( pREAL ) , dimension ( 3 , 3 , sum ( Nslip ) ) :: coordinateSystem
2020-02-25 22:02:49 +05:30
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( : , : ) , allocatable :: slipSystems
2019-04-13 04:16:27 +05:30
integer , dimension ( : ) , allocatable :: NslipMax
2020-02-25 22:02:49 +05:30
2021-07-23 10:16:17 +05:30
select case ( lattice )
2020-11-29 03:07:03 +05:30
case ( 'cF' )
2022-02-21 14:30:00 +05:30
NslipMax = CF_NSLIPSYSTEM
slipSystems = CF_SYSTEMSLIP
2020-11-29 03:07:03 +05:30
case ( 'cI' )
2022-02-21 14:30:00 +05:30
NslipMax = CI_NSLIPSYSTEM
slipSystems = CI_SYSTEMSLIP
2020-11-29 03:07:03 +05:30
case ( 'hP' )
2022-02-21 14:30:00 +05:30
NslipMax = HP_NSLIPSYSTEM
slipSystems = HP_SYSTEMSLIP
2020-11-29 03:07:03 +05:30
case ( 'tI' )
2022-02-21 14:30:00 +05:30
NslipMax = TI_NSLIPSYSTEM
slipSystems = TI_SYSTEMSLIP
2019-04-13 04:16:27 +05:30
case default
2020-05-16 02:03:38 +05:30
allocate ( NslipMax ( 0 ) )
2021-07-23 10:16:17 +05:30
call IO_error ( 137 , ext_msg = 'coordinateSystem_slip: ' / / trim ( lattice ) )
2019-04-13 04:16:27 +05:30
end select
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
if ( any ( NslipMax ( 1 : size ( Nslip ) ) - Nslip < 0 ) ) &
2021-07-23 10:16:17 +05:30
call IO_error ( 145 , ext_msg = 'Nslip ' / / trim ( lattice ) )
2019-04-13 04:16:27 +05:30
if ( any ( Nslip < 0 ) ) &
2021-07-23 10:16:17 +05:30
call IO_error ( 144 , ext_msg = 'Nslip ' / / trim ( lattice ) )
2020-02-25 22:02:49 +05:30
2021-07-23 10:16:17 +05:30
coordinateSystem = buildCoordinateSystem ( Nslip , NslipMax , slipSystems , lattice , cOverA )
2020-02-25 22:02:49 +05:30
2019-02-20 12:23:34 +05:30
end function coordinateSystem_slip
2020-02-25 22:02:49 +05:30
2018-09-08 23:02:26 +05:30
!--------------------------------------------------------------------------------------------------
2020-03-16 15:44:27 +05:30
!> @brief Populate reduced interaction matrix
2018-09-08 23:02:26 +05:30
!--------------------------------------------------------------------------------------------------
2019-04-13 04:16:27 +05:30
function buildInteraction ( reacting_used , acting_used , reacting_max , acting_max , values , matrix )
2020-02-25 22:02:49 +05:30
2020-02-26 22:25:19 +05:30
integer , dimension ( : ) , intent ( in ) :: &
reacting_used , & !< # of reacting systems per family as specified in material.config
acting_used , & !< # of acting systems per family as specified in material.config
reacting_max , & !< max # of reacting systems per family for given lattice
acting_max !< max # of acting systems per family for given lattice
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( : ) , intent ( in ) :: values !< interaction values
2020-02-26 22:25:19 +05:30
integer , dimension ( : , : ) , intent ( in ) :: matrix !< interaction types
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( sum ( reacting_used ) , sum ( acting_used ) ) :: buildInteraction
2020-02-25 22:02:49 +05:30
2020-02-26 22:25:19 +05:30
integer :: &
acting_family_index , acting_family , acting_system , &
reacting_family_index , reacting_family , reacting_system , &
i , j , k , l
2020-02-25 22:02:49 +05:30
2020-02-26 22:25:19 +05:30
do acting_family = 1 , size ( acting_used , 1 )
acting_family_index = sum ( acting_used ( 1 : acting_family - 1 ) )
do acting_system = 1 , acting_used ( acting_family )
2020-02-25 22:02:49 +05:30
2020-02-26 22:25:19 +05:30
do reacting_family = 1 , size ( reacting_used , 1 )
reacting_family_index = sum ( reacting_used ( 1 : reacting_family - 1 ) )
do reacting_system = 1 , reacting_used ( reacting_family )
2020-02-25 22:02:49 +05:30
2020-02-26 22:25:19 +05:30
i = sum ( acting_max ( 1 : acting_family - 1 ) ) + acting_system
j = sum ( reacting_max ( 1 : reacting_family - 1 ) ) + reacting_system
2020-02-25 22:02:49 +05:30
2020-02-26 22:25:19 +05:30
k = acting_family_index + acting_system
l = reacting_family_index + reacting_system
2020-02-25 22:02:49 +05:30
2020-02-26 22:25:19 +05:30
if ( matrix ( i , j ) > size ( values ) ) call IO_error ( 138 , ext_msg = 'buildInteraction' )
2020-02-25 22:02:49 +05:30
2020-02-26 22:25:19 +05:30
buildInteraction ( l , k ) = values ( matrix ( i , j ) )
2020-02-25 22:02:49 +05:30
2022-06-09 02:36:01 +05:30
end do ; end do
end do ; end do
2020-02-25 22:02:49 +05:30
2018-08-25 16:38:32 +05:30
end function buildInteraction
2020-02-25 22:02:49 +05:30
2018-08-25 22:02:55 +05:30
!--------------------------------------------------------------------------------------------------
2020-03-16 15:44:27 +05:30
!> @brief Build a local coordinate system on slip, twin, trans, cleavage systems
2018-12-12 04:59:19 +05:30
!> @details Order: Direction, plane (normal), and common perpendicular
2018-08-25 22:02:55 +05:30
!--------------------------------------------------------------------------------------------------
2023-08-18 22:42:16 +05:30
function buildCoordinateSystem ( active , potential , system , lattice , cOverA ) result ( coordinateSystem )
2020-02-25 22:02:49 +05:30
2023-09-15 02:13:50 +05:30
integer , dimension ( : ) , intent ( in ) :: &
2020-01-03 16:30:19 +05:30
active , & !< # of active systems per family
potential !< # of potential systems per family
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( : , : ) , intent ( in ) :: &
2019-04-13 04:16:27 +05:30
system
2022-11-30 18:03:04 +05:30
character ( len = * ) , intent ( in ) :: &
2021-07-23 10:16:17 +05:30
lattice !< Bravais lattice (Pearson symbol)
2023-06-04 10:52:25 +05:30
real ( pREAL ) , intent ( in ) :: &
2019-04-13 04:16:27 +05:30
cOverA
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 3 , 3 , sum ( active ) ) :: &
2023-08-18 22:42:16 +05:30
coordinateSystem
2020-02-25 22:02:49 +05:30
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 3 ) :: &
2019-04-13 04:16:27 +05:30
direction , normal
integer :: &
a , & !< index of active system
2019-10-10 15:56:45 +05:30
p , & !< index in potential system matrix
2019-04-13 04:16:27 +05:30
f , & !< index of my family
s !< index of my system in current family
2020-02-25 22:02:49 +05:30
2023-06-04 10:52:25 +05:30
if ( lattice == 'tI' . and . cOverA > 2.0_pREAL ) &
2021-07-23 10:16:17 +05:30
call IO_error ( 131 , ext_msg = 'buildCoordinateSystem:' / / trim ( lattice ) )
2023-06-04 10:52:25 +05:30
if ( lattice == 'hP' . and . ( cOverA < 1.0_pREAL . or . cOverA > 2.0_pREAL ) ) &
2021-07-23 10:16:17 +05:30
call IO_error ( 131 , ext_msg = 'buildCoordinateSystem:' / / trim ( lattice ) )
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
a = 0
activeFamilies : do f = 1 , size ( active , 1 )
activeSystems : do s = 1 , active ( f )
a = a + 1
2019-10-10 15:56:45 +05:30
p = sum ( potential ( 1 : f - 1 ) ) + s
2020-02-25 22:02:49 +05:30
2021-07-23 10:16:17 +05:30
select case ( lattice )
2020-02-25 22:02:49 +05:30
2023-08-18 22:42:16 +05:30
case ( 'cF' , 'cI' )
2019-10-10 15:56:45 +05:30
direction = system ( 1 : 3 , p )
normal = system ( 4 : 6 , p )
2020-02-25 22:02:49 +05:30
2023-08-18 22:42:16 +05:30
case ( 'tI' )
direction = [ system ( 1 , p ) , system ( 2 , p ) , system ( 3 , p ) * cOverA ]
normal = [ system ( 4 , p ) , system ( 5 , p ) , system ( 6 , p ) / cOverA ]
2020-11-29 03:07:03 +05:30
case ( 'hP' )
2023-06-04 10:52:25 +05:30
direction = [ system ( 1 , p ) * 1.5_pREAL , &
( system ( 1 , p ) + 2.0_pREAL * system ( 2 , p ) ) * sqrt ( 0.75_pREAL ) , &
2019-10-10 15:56:45 +05:30
system ( 4 , p ) * cOverA ] ! direction [uvtw]->[3u/2 (u+2v)*sqrt(3)/2 w*(p/a)])
normal = [ system ( 5 , p ) , &
2023-06-04 10:52:25 +05:30
( system ( 5 , p ) + 2.0_pREAL * system ( 6 , p ) ) / sqrt ( 3.0_pREAL ) , &
2019-10-10 15:56:45 +05:30
system ( 8 , p ) / cOverA ] ! plane (hkil)->(h (h+2k)/sqrt(3) l/(p/a))
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
case default
2021-07-23 10:16:17 +05:30
call IO_error ( 137 , ext_msg = 'buildCoordinateSystem: ' / / trim ( lattice ) )
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
end select
2020-02-25 22:02:49 +05:30
2023-08-18 22:42:16 +05:30
coordinateSystem ( 1 : 3 , 1 , a ) = direction / norm2 ( direction )
coordinateSystem ( 1 : 3 , 2 , a ) = normal / norm2 ( normal )
coordinateSystem ( 1 : 3 , 3 , a ) = math_cross ( direction / norm2 ( direction ) , &
normal / norm2 ( normal ) )
2020-02-25 22:02:49 +05:30
2022-06-09 02:36:01 +05:30
end do activeSystems
end do activeFamilies
2020-02-25 22:02:49 +05:30
2018-08-25 22:02:55 +05:30
end function buildCoordinateSystem
2020-02-25 22:02:49 +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.
2022-05-08 13:00:26 +05:30
! @details: use c/a for cF -> hP transformation
! use a_cX for cF -> cI transformation
2018-12-12 03:30:56 +05:30
!--------------------------------------------------------------------------------------------------
2022-02-21 14:30:00 +05:30
subroutine buildTransformationSystem ( Q , S , Ntrans , cOverA , a_cF , a_cI )
2020-02-25 22:02:49 +05:30
2022-02-21 14:30:00 +05:30
integer , dimension ( : ) , intent ( in ) :: &
2019-04-13 04:16:27 +05:30
Ntrans
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 3 , 3 , sum ( Ntrans ) ) , intent ( out ) :: &
2019-04-13 04:16:27 +05:30
Q , & !< Total rotation: Q = R*B
S !< Eigendeformation tensor for phase transformation
2023-06-04 10:52:25 +05:30
real ( pREAL ) , optional , intent ( in ) :: &
2022-02-21 14:30:00 +05:30
cOverA , & !< c/a for target hP lattice
a_cF , & !< lattice parameter a for cF target lattice
a_cI !< lattice parameter a for cI parent lattice
2020-02-25 22:02:49 +05:30
2022-01-29 20:00:59 +05:30
type ( tRotation ) :: &
2019-04-13 04:16:27 +05:30
R , & !< Pitsch rotation
2022-02-21 14:30:00 +05:30
B !< Rotation of cF to Bain coordinate system
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 3 , 3 ) :: &
2019-04-13 04:16:27 +05:30
U , & !< Bain deformation
ss , sd
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 3 ) :: &
2019-04-13 04:16:27 +05:30
x , y , z
integer :: &
i
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 3 + 3 , CF_NTRANS ) , parameter :: &
2022-02-21 14:30:00 +05:30
CFTOHP_SYSTEMTRANS = reshape ( real ( [ &
2019-04-13 04:16:27 +05:30
- 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 &
2023-06-04 10:52:25 +05:30
] , pREAL ) , shape ( CFTOHP_SYSTEMTRANS ) )
2021-07-25 15:24:41 +05:30
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 4 , cF_Ntrans ) , parameter :: &
2022-06-27 14:07:41 +05:30
CFTOCI_SYSTEMTRANS = real ( reshape ( [ &
2019-04-13 04:16:27 +05:30
0.0 , 1.0 , 0.0 , 1 0.26 , & ! Pitsch OR (Ma & Hartmaier 2014, Table 3)
2019-09-20 19:38:21 +05:30
0.0 , - 1.0 , 0.0 , 1 0.26 , &
2019-04-13 04:16:27 +05:30
0.0 , 0.0 , 1.0 , 1 0.26 , &
2019-09-20 19:38:21 +05:30
0.0 , 0.0 , - 1.0 , 1 0.26 , &
2019-04-13 04:16:27 +05:30
1.0 , 0.0 , 0.0 , 1 0.26 , &
2019-09-20 19:38:21 +05:30
- 1.0 , 0.0 , 0.0 , 1 0.26 , &
2019-04-13 04:16:27 +05:30
0.0 , 0.0 , 1.0 , 1 0.26 , &
2019-09-20 19:38:21 +05:30
0.0 , 0.0 , - 1.0 , 1 0.26 , &
2019-04-13 04:16:27 +05:30
1.0 , 0.0 , 0.0 , 1 0.26 , &
2019-09-20 19:38:21 +05:30
- 1.0 , 0.0 , 0.0 , 1 0.26 , &
2019-04-13 04:16:27 +05:30
0.0 , 1.0 , 0.0 , 1 0.26 , &
2019-09-20 19:38:21 +05:30
0.0 , - 1.0 , 0.0 , 1 0.26 &
2023-06-04 10:52:25 +05:30
] , shape ( CFTOCI_SYSTEMTRANS ) ) , pREAL )
2020-02-25 22:02:49 +05:30
2022-02-21 14:30:00 +05:30
integer , dimension ( 9 , cF_Ntrans ) , parameter :: &
CFTOCI_BAINVARIANT = reshape ( [ &
2019-04-13 04:16:27 +05:30
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 &
2022-02-21 14:30:00 +05:30
] , shape ( CFTOCI_BAINVARIANT ) )
2020-02-25 22:02:49 +05:30
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 4 , cF_Ntrans ) , parameter :: &
2022-06-27 14:07:41 +05:30
CFTOCI_BAINROT = real ( reshape ( [ &
2022-02-21 14:30:00 +05:30
1.0 , 0.0 , 0.0 , 4 5.0 , & ! Rotate cF austensite to bain variant
2019-04-13 04:16:27 +05:30
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 &
2023-06-04 10:52:25 +05:30
] , shape ( CFTOCI_BAINROT ) ) , pREAL )
2020-02-25 22:02:49 +05:30
2022-02-21 14:30:00 +05:30
if ( present ( a_cI ) . and . present ( a_cF ) ) then
2019-04-13 04:16:27 +05:30
do i = 1 , sum ( Ntrans )
2022-02-21 14:30:00 +05:30
call R % fromAxisAngle ( CFTOCI_SYSTEMTRANS ( : , i ) , degrees = . true . , P = 1 )
call B % fromAxisAngle ( CFTOCI_BAINROT ( : , i ) , degrees = . true . , P = 1 )
2023-06-04 10:52:25 +05:30
x = real ( CFTOCI_BAINVARIANT ( 1 : 3 , i ) , pREAL )
y = real ( CFTOCI_BAINVARIANT ( 4 : 6 , i ) , pREAL )
z = real ( CFTOCI_BAINVARIANT ( 7 : 9 , i ) , pREAL )
2022-02-21 14:30:00 +05:30
2023-06-04 10:52:25 +05:30
U = ( a_cI / a_cF ) * ( math_outer ( x , x ) + ( math_outer ( y , y ) + math_outer ( z , z ) ) * sqrt ( 2.0_pREAL ) )
2019-09-21 05:48:09 +05:30
Q ( 1 : 3 , 1 : 3 , i ) = matmul ( R % asMatrix ( ) , B % asMatrix ( ) )
S ( 1 : 3 , 1 : 3 , i ) = matmul ( R % asMatrix ( ) , U ) - MATH_I3
2022-06-09 02:36:01 +05:30
end do
2022-01-27 03:19:11 +05:30
else if ( present ( cOverA ) ) then
2019-04-13 04:16:27 +05:30
ss = MATH_I3
sd = MATH_I3
2023-06-04 10:52:25 +05:30
ss ( 1 , 3 ) = sqrt ( 2.0_pREAL ) / 4.0_pREAL
sd ( 3 , 3 ) = cOverA / sqrt ( 8.0_pREAL / 3.0_pREAL )
2020-02-25 22:02:49 +05:30
2019-04-13 04:16:27 +05:30
do i = 1 , sum ( Ntrans )
2022-02-21 14:30:00 +05:30
x = CFTOHP_SYSTEMTRANS ( 1 : 3 , i ) / norm2 ( CFTOHP_SYSTEMTRANS ( 1 : 3 , i ) )
z = CFTOHP_SYSTEMTRANS ( 4 : 6 , i ) / norm2 ( CFTOHP_SYSTEMTRANS ( 4 : 6 , i ) )
2019-04-13 04:16:27 +05:30
y = - math_cross ( x , z )
Q ( 1 : 3 , 1 , i ) = x
Q ( 1 : 3 , 2 , i ) = y
Q ( 1 : 3 , 3 , i ) = z
S ( 1 : 3 , 1 : 3 , i ) = matmul ( Q ( 1 : 3 , 1 : 3 , i ) , matmul ( matmul ( sd , ss ) , transpose ( Q ( 1 : 3 , 1 : 3 , i ) ) ) ) - MATH_I3 ! ToDo: This is of interest for the Schmid matrix only
2022-02-11 10:35:09 +05:30
end do
2019-04-13 04:16:27 +05:30
else
2019-09-21 06:46:08 +05:30
call IO_error ( 132 , ext_msg = 'buildTransformationSystem' )
2022-02-11 10:35:09 +05:30
end if
2019-09-20 19:38:21 +05:30
2018-12-22 12:19:52 +05:30
end subroutine buildTransformationSystem
2019-10-10 16:41:02 +05:30
!--------------------------------------------------------------------------------------------------
!> @brief select active systems as strings
!--------------------------------------------------------------------------------------------------
2020-01-03 17:10:25 +05:30
function getlabels ( active , potential , system ) result ( labels )
2020-02-25 22:02:49 +05:30
2020-01-03 16:30:19 +05:30
integer , dimension ( : ) , intent ( in ) :: &
active , & !< # of active systems per family
potential !< # of potential systems per family
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( : , : ) , intent ( in ) :: &
2019-10-10 16:41:02 +05:30
system
character ( len = : ) , dimension ( : ) , allocatable :: labels
character ( len = : ) , allocatable :: label
2020-02-25 22:02:49 +05:30
integer :: i , j
2019-10-10 16:41:02 +05:30
integer :: &
a , & !< index of active system
2019-10-18 20:43:19 +05:30
p , & !< index in potential system matrix
2019-10-10 16:41:02 +05:30
f , & !< index of my family
s !< index of my system in current family
i = 2 * size ( system , 1 ) + ( size ( system , 1 ) - 2 ) + 4 ! 2 letters per index + spaces + brackets
allocate ( character ( len = i ) :: labels ( sum ( active ) ) , label )
2020-02-25 22:02:49 +05:30
2019-10-10 16:41:02 +05:30
a = 0
activeFamilies : do f = 1 , size ( active , 1 )
activeSystems : do s = 1 , active ( f )
a = a + 1
p = sum ( potential ( 1 : f - 1 ) ) + s
2020-02-25 22:02:49 +05:30
2019-10-10 16:41:02 +05:30
i = 1
2020-01-03 16:30:19 +05:30
label ( i : i ) = '['
2019-10-10 16:41:02 +05:30
direction : do j = 1 , size ( system , 1 ) / 2
2020-03-13 12:31:25 +05:30
write ( label ( i + 1 : i + 2 ) , '(I2.1)' ) int ( system ( j , p ) )
2019-10-10 16:41:02 +05:30
label ( i + 3 : i + 3 ) = ' '
i = i + 3
2022-06-09 02:36:01 +05:30
end do direction
2019-10-10 16:41:02 +05:30
label ( i : i ) = ']'
2020-02-25 22:02:49 +05:30
2019-10-10 16:41:02 +05:30
i = i + 1
2020-01-03 16:30:19 +05:30
label ( i : i ) = '('
2019-10-10 16:41:02 +05:30
normal : do j = size ( system , 1 ) / 2 + 1 , size ( system , 1 )
2020-03-13 12:31:25 +05:30
write ( label ( i + 1 : i + 2 ) , '(I2.1)' ) int ( system ( j , p ) )
2019-10-10 16:41:02 +05:30
label ( i + 3 : i + 3 ) = ' '
i = i + 3
2022-06-09 02:36:01 +05:30
end do normal
2019-10-10 16:41:02 +05:30
label ( i : i ) = ')'
2020-02-25 22:02:49 +05:30
2021-07-25 13:41:19 +05:30
labels ( a ) = label
2019-10-10 16:41:02 +05:30
2022-06-09 02:36:01 +05:30
end do activeSystems
end do activeFamilies
2020-02-25 22:02:49 +05:30
2019-10-10 16:41:02 +05:30
end function getlabels
2020-03-13 12:31:25 +05:30
!--------------------------------------------------------------------------------------------------
!> @brief Equivalent Poisson's ratio (ν )
!> @details https://doi.org/10.1143/JPSJ.20.635
!--------------------------------------------------------------------------------------------------
2023-07-15 23:58:57 +05:30
pure function crystal_isotropic_nu ( C , assumption , lattice ) result ( nu )
2020-03-13 12:31:25 +05:30
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 6 , 6 ) , intent ( in ) :: C !< Stiffness tensor (Voigt notation)
2022-11-30 01:26:13 +05:30
character ( len = * ) , intent ( in ) :: assumption !< Assumption (isostrain = 'Voigt', isostress = 'Reuss')
2022-12-06 23:21:35 +05:30
character ( len = * ) , optional , intent ( in ) :: lattice
2023-06-04 10:52:25 +05:30
real ( pREAL ) :: nu
2020-12-28 15:33:29 +05:30
2023-06-04 10:52:25 +05:30
real ( pREAL ) :: K , mu
2022-12-06 23:21:35 +05:30
logical :: error
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 6 , 6 ) :: S
2020-03-13 12:31:25 +05:30
2020-12-28 15:33:29 +05:30
2023-11-25 20:51:00 +05:30
if ( assumption == 'isostrain' ) then
2023-06-04 10:52:25 +05:30
K = sum ( C ( 1 : 3 , 1 : 3 ) ) / 9.0_pREAL
2023-11-25 20:51:00 +05:30
elseif ( assumption == 'isostress' ) then
2020-03-13 12:31:25 +05:30
call math_invert ( S , error , C )
2021-11-22 02:19:04 +05:30
if ( error ) error stop 'matrix inversion failed'
2023-06-04 10:52:25 +05:30
K = 1.0_pREAL / sum ( S ( 1 : 3 , 1 : 3 ) )
2020-03-13 12:31:25 +05:30
else
2020-11-11 20:27:05 +05:30
error stop 'invalid assumption'
2022-06-09 02:36:01 +05:30
end if
2020-03-13 12:31:25 +05:30
2023-07-15 23:58:57 +05:30
mu = crystal_isotropic_mu ( C , assumption , lattice )
2023-06-04 10:52:25 +05:30
nu = ( 1.5_pREAL * K - mu ) / ( 3.0_pREAL * K + mu )
2020-03-13 12:31:25 +05:30
2023-07-15 23:58:57 +05:30
end function crystal_isotropic_nu
2020-03-13 12:31:25 +05:30
!--------------------------------------------------------------------------------------------------
!> @brief Equivalent shear modulus (μ)
!> @details https://doi.org/10.1143/JPSJ.20.635
2022-11-12 04:33:30 +05:30
!> @details Nonlinear Mechanics of Crystals 10.1007/978-94-007-0350-6, pp 563
2020-03-13 12:31:25 +05:30
!--------------------------------------------------------------------------------------------------
2023-07-15 23:58:57 +05:30
pure function crystal_isotropic_mu ( C , assumption , lattice ) result ( mu )
2020-03-13 12:31:25 +05:30
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 6 , 6 ) , intent ( in ) :: C !< Stiffness tensor (Voigt notation)
2022-11-30 01:26:13 +05:30
character ( len = * ) , intent ( in ) :: assumption !< Assumption (isostrain = 'Voigt', isostress = 'Reuss')
2022-12-06 23:21:35 +05:30
character ( len = * ) , optional , intent ( in ) :: lattice
2023-06-04 10:52:25 +05:30
real ( pREAL ) :: mu
2020-12-28 15:33:29 +05:30
2022-12-06 23:21:35 +05:30
logical :: error
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 6 , 6 ) :: S
2020-12-28 15:33:29 +05:30
2023-11-25 20:51:00 +05:30
if ( assumption == 'isostrain' ) then
2023-02-19 02:00:57 +05:30
select case ( misc_optional ( lattice , '' ) )
2022-11-12 04:33:30 +05:30
case ( 'cF' , 'cI' )
2023-06-04 10:52:25 +05:30
mu = ( C ( 1 , 1 ) - C ( 1 , 2 ) + C ( 4 , 4 ) * 3.0_pREAL ) / 5.0_pREAL
2022-11-12 04:33:30 +05:30
case default
mu = ( C ( 1 , 1 ) + C ( 2 , 2 ) + C ( 3 , 3 ) &
2022-12-06 23:21:35 +05:30
- C ( 1 , 2 ) - C ( 2 , 3 ) - C ( 1 , 3 ) &
2023-06-04 10:52:25 +05:30
+ ( C ( 4 , 4 ) + C ( 5 , 5 ) + C ( 6 , 6 ) ) * 3.0_pREAL &
) / 1 5.0_pREAL
2022-11-12 04:33:30 +05:30
end select
2023-11-25 20:51:00 +05:30
elseif ( assumption == 'isostress' ) then
2023-02-19 02:00:57 +05:30
select case ( misc_optional ( lattice , '' ) )
2022-11-12 04:33:30 +05:30
case ( 'cF' , 'cI' )
2023-06-04 10:52:25 +05:30
mu = 5.0_pREAL &
/ ( 4.0_pREAL / ( C ( 1 , 1 ) - C ( 1 , 2 ) ) + 3.0_pREAL / C ( 4 , 4 ) )
2022-11-12 04:33:30 +05:30
case default
call math_invert ( S , error , C )
if ( error ) error stop 'matrix inversion failed'
2023-06-04 10:52:25 +05:30
mu = 1 5.0_pREAL &
/ ( 4.0_pREAL * ( S ( 1 , 1 ) + S ( 2 , 2 ) + S ( 3 , 3 ) - S ( 1 , 2 ) - S ( 2 , 3 ) - S ( 1 , 3 ) ) + 3.0_pREAL * ( S ( 4 , 4 ) + S ( 5 , 5 ) + S ( 6 , 6 ) ) )
2022-11-12 04:33:30 +05:30
end select
2020-03-13 12:31:25 +05:30
else
2020-11-11 20:27:05 +05:30
error stop 'invalid assumption'
2022-06-09 02:36:01 +05:30
end if
2020-03-13 12:31:25 +05:30
2023-07-15 23:58:57 +05:30
end function crystal_isotropic_mu
2020-03-13 12:31:25 +05:30
2020-03-14 21:59:08 +05:30
!--------------------------------------------------------------------------------------------------
2023-07-15 23:58:57 +05:30
!> @brief Check correctness of some crystal functions.
2020-03-14 21:59:08 +05:30
!--------------------------------------------------------------------------------------------------
2023-10-05 20:29:43 +05:30
subroutine crystal_selfTest ( )
2020-03-14 21:59:08 +05:30
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( : , : , : ) , allocatable :: CoSy
real ( pREAL ) , dimension ( : , : ) , allocatable :: system
2020-03-14 21:59:08 +05:30
2023-06-04 10:52:25 +05:30
real ( pREAL ) , dimension ( 6 , 6 ) :: C , C_cF , C_cI , C_hP , C_tI
real ( pREAL ) , dimension ( 3 , 3 ) :: T , T_cF , T_cI , T_hP , T_tI
real ( pREAL ) , dimension ( 2 ) :: r
real ( pREAL ) :: lambda
2021-05-24 20:47:27 +05:30
integer :: i
2021-05-24 17:47:04 +05:30
2020-03-14 21:59:08 +05:30
call random_number ( r )
2023-06-04 10:52:25 +05:30
system = reshape ( [ 1.0_pREAL + r ( 1 ) , 0.0_pREAL , 0.0_pREAL , 0.0_pREAL , 1.0_pREAL + r ( 2 ) , 0.0_pREAL ] , [ 6 , 1 ] )
CoSy = buildCoordinateSystem ( [ 1 ] , [ 1 ] , system , 'cF' , 0.0_pREAL )
2021-11-22 02:19:04 +05:30
if ( any ( dNeq ( CoSy ( 1 : 3 , 1 : 3 , 1 ) , math_I3 ) ) ) error stop 'buildCoordinateSystem'
2020-03-14 21:59:08 +05:30
2023-08-29 16:25:42 +05:30
if ( any ( dNeq ( buildCoordinateSystem ( TI_NSLIPSYSTEM , TI_NSLIPSYSTEM , TI_SYSTEMSLIP , 'cI' , 0.0_pReal ) , &
buildCoordinateSystem ( TI_NSLIPSYSTEM , TI_NSLIPSYSTEM , TI_SYSTEMSLIP , 'tI' , 1.0_pReal ) ) ) ) &
error stop 'cI/tI coordinate system'
if ( all ( dEq ( buildCoordinateSystem ( TI_NSLIPSYSTEM , TI_NSLIPSYSTEM , TI_SYSTEMSLIP , 'tI' , 1.1_pReal + r ( 1 ) * 0.9_pReal ) , &
buildCoordinateSystem ( TI_NSLIPSYSTEM , TI_NSLIPSYSTEM , TI_SYSTEMSLIP , 'tI' , 1.0_pReal ) ) ) ) &
error stop 'tI coordinate system'
2021-05-24 20:47:27 +05:30
do i = 1 , 10
call random_number ( C )
2023-07-15 23:58:57 +05:30
C_cF = crystal_symmetrize_C66 ( C , 'cI' )
C_cI = crystal_symmetrize_C66 ( C , 'cF' )
C_hP = crystal_symmetrize_C66 ( C , 'hP' )
C_tI = crystal_symmetrize_C66 ( C , 'tI' )
2021-05-25 09:35:51 +05:30
if ( any ( dNeq ( C_cI , transpose ( C_cF ) ) ) ) error stop 'SymmetryC66/cI-cF'
if ( any ( dNeq ( C_cF , transpose ( C_cI ) ) ) ) error stop 'SymmetryC66/cF-cI'
if ( any ( dNeq ( C_hP , transpose ( C_hP ) ) ) ) error stop 'SymmetryC66/hP'
if ( any ( dNeq ( C_tI , transpose ( C_tI ) ) ) ) error stop 'SymmetryC66/tI'
if ( any ( dNeq ( C ( 1 , 1 ) , [ C_cF ( 1 , 1 ) , C_cF ( 2 , 2 ) , C_cF ( 3 , 3 ) ] ) ) ) error stop 'SymmetryC_11-22-33/c'
if ( any ( dNeq ( C ( 1 , 2 ) , [ C_cF ( 1 , 2 ) , C_cF ( 1 , 3 ) , C_cF ( 2 , 3 ) ] ) ) ) error stop 'SymmetryC_12-13-23/c'
if ( any ( dNeq ( C ( 4 , 4 ) , [ C_cF ( 4 , 4 ) , C_cF ( 5 , 5 ) , C_cF ( 6 , 6 ) ] ) ) ) error stop 'SymmetryC_44-55-66/c'
if ( any ( dNeq ( C ( 1 , 1 ) , [ C_hP ( 1 , 1 ) , C_hP ( 2 , 2 ) ] ) ) ) error stop 'SymmetryC_11-22/hP'
if ( any ( dNeq ( C ( 1 , 3 ) , [ C_hP ( 1 , 3 ) , C_hP ( 2 , 3 ) ] ) ) ) error stop 'SymmetryC_13-23/hP'
if ( any ( dNeq ( C ( 4 , 4 ) , [ C_hP ( 4 , 4 ) , C_hP ( 5 , 5 ) ] ) ) ) error stop 'SymmetryC_44-55/hP'
if ( any ( dNeq ( C ( 1 , 1 ) , [ C_tI ( 1 , 1 ) , C_tI ( 2 , 2 ) ] ) ) ) error stop 'SymmetryC_11-22/tI'
if ( any ( dNeq ( C ( 1 , 3 ) , [ C_tI ( 1 , 3 ) , C_tI ( 2 , 3 ) ] ) ) ) error stop 'SymmetryC_13-23/tI'
if ( any ( dNeq ( C ( 4 , 4 ) , [ C_tI ( 4 , 4 ) , C_tI ( 5 , 5 ) ] ) ) ) error stop 'SymmetryC_44-55/tI'
call random_number ( T )
2023-07-15 23:58:57 +05:30
T_cF = crystal_symmetrize_33 ( T , 'cI' )
T_cI = crystal_symmetrize_33 ( T , 'cF' )
T_hP = crystal_symmetrize_33 ( T , 'hP' )
T_tI = crystal_symmetrize_33 ( T , 'tI' )
2021-05-25 09:35:51 +05:30
2023-06-04 10:52:25 +05:30
if ( any ( dNeq0 ( T_cF ) . and . math_I3 < 1.0_pREAL ) ) error stop 'Symmetry33/c'
if ( any ( dNeq0 ( T_hP ) . and . math_I3 < 1.0_pREAL ) ) error stop 'Symmetry33/hP'
if ( any ( dNeq0 ( T_tI ) . and . math_I3 < 1.0_pREAL ) ) error stop 'Symmetry33/tI'
2021-05-25 09:35:51 +05:30
if ( any ( dNeq ( T ( 1 , 1 ) , [ T_cI ( 1 , 1 ) , T_cI ( 2 , 2 ) , T_cI ( 3 , 3 ) ] ) ) ) error stop 'Symmetry33_11-22-33/c'
if ( any ( dNeq ( T ( 1 , 1 ) , [ T_hP ( 1 , 1 ) , T_hP ( 2 , 2 ) ] ) ) ) error stop 'Symmetry33_11-22/hP'
2021-05-27 02:19:53 +05:30
if ( any ( dNeq ( T ( 1 , 1 ) , [ T_tI ( 1 , 1 ) , T_tI ( 2 , 2 ) ] ) ) ) error stop 'Symmetry33_11-22/tI'
2021-05-25 09:35:51 +05:30
2022-06-09 02:36:01 +05:30
end do
2021-05-24 20:47:27 +05:30
2020-03-14 21:59:08 +05:30
call random_number ( C )
2023-06-04 10:52:25 +05:30
C ( 1 , 1 ) = C ( 1 , 1 ) + C ( 1 , 2 ) + 0.1_pREAL
2022-11-12 04:33:30 +05:30
C ( 1 , 3 ) = C ( 1 , 2 )
2022-11-30 01:26:13 +05:30
C ( 3 , 3 ) = C ( 1 , 1 )
2023-06-04 10:52:25 +05:30
C ( 4 , 4 ) = 0.5_pREAL * ( C ( 1 , 1 ) - C ( 1 , 2 ) )
2022-11-12 04:33:30 +05:30
C ( 6 , 6 ) = C ( 4 , 4 )
2023-07-15 23:58:57 +05:30
C_cI = crystal_symmetrize_C66 ( C , 'cI' )
if ( dNeq ( C_cI ( 4 , 4 ) , crystal_isotropic_mu ( C_cI , 'isostrain' , 'cI' ) , 1.0e-12_pREAL ) ) error stop 'isotropic_mu/isostrain/cI'
if ( dNeq ( C_cI ( 4 , 4 ) , crystal_isotropic_mu ( C_cI , 'isostress' , 'cI' ) , 1.0e-12_pREAL ) ) error stop 'isotropic_mu/isostress/cI'
2022-11-12 04:33:30 +05:30
lambda = C_cI ( 1 , 2 )
2023-07-15 23:58:57 +05:30
if ( dNeq ( lambda * 0.5_pREAL / ( lambda + crystal_isotropic_mu ( C_cI , 'isostrain' , 'cI' ) ) , &
crystal_isotropic_nu ( C_cI , 'isostrain' , 'cI' ) , 1.0e-12_pREAL ) ) error stop 'isotropic_nu/isostrain/cI'
if ( dNeq ( lambda * 0.5_pREAL / ( lambda + crystal_isotropic_mu ( C_cI , 'isostress' , 'cI' ) ) , &
crystal_isotropic_nu ( C_cI , 'isostress' , 'cI' ) , 1.0e-12_pREAL ) ) error stop 'isotropic_nu/isostress/cI'
2022-11-12 04:33:30 +05:30
2023-07-15 23:58:57 +05:30
C_hP = crystal_symmetrize_C66 ( C , 'hP' )
if ( dNeq ( C ( 4 , 4 ) , crystal_isotropic_mu ( C_hP , 'isostrain' , 'hP' ) , 1.0e-12_pREAL ) ) error stop 'isotropic_mu/isostrain/hP'
if ( dNeq ( C ( 4 , 4 ) , crystal_isotropic_mu ( C_hP , 'isostress' , 'hP' ) , 1.0e-12_pREAL ) ) error stop 'isotropic_mu/isostress/hP'
2022-11-30 01:26:13 +05:30
2022-11-12 04:33:30 +05:30
lambda = C_hP ( 1 , 2 )
2023-07-15 23:58:57 +05:30
if ( dNeq ( lambda * 0.5_pREAL / ( lambda + crystal_isotropic_mu ( C_hP , 'isostrain' , 'hP' ) ) , &
crystal_isotropic_nu ( C_hP , 'isostrain' , 'hP' ) , 1.0e-12_pREAL ) ) error stop 'isotropic_nu/isostrain/hP'
if ( dNeq ( lambda * 0.5_pREAL / ( lambda + crystal_isotropic_mu ( C_hP , 'isostress' , 'hP' ) ) , &
crystal_isotropic_nu ( C_hP , 'isostress' , 'hP' ) , 1.0e-12_pREAL ) ) error stop 'isotropic_nu/isostress/hP'
2022-11-12 04:33:30 +05:30
2023-07-15 23:58:57 +05:30
C_tI = crystal_symmetrize_C66 ( C , 'tI' )
if ( dNeq ( C ( 6 , 6 ) , crystal_isotropic_mu ( C_tI , 'isostrain' , 'tI' ) , 1.0e-12_pREAL ) ) error stop 'isotropic_mu/isostrain/tI'
if ( dNeq ( C ( 6 , 6 ) , crystal_isotropic_mu ( C_tI , 'isostress' , 'tI' ) , 1.0e-12_pREAL ) ) error stop 'isotropic_mu/isostress/tI'
2022-11-12 04:33:30 +05:30
lambda = C_tI ( 1 , 2 )
2023-07-15 23:58:57 +05:30
if ( dNeq ( lambda * 0.5_pREAL / ( lambda + crystal_isotropic_mu ( C_tI , 'isostrain' , 'tI' ) ) , &
crystal_isotropic_nu ( C_tI , 'isostrain' , 'tI' ) , 1.0e-12_pREAL ) ) error stop 'isotropic_nu/isostrain/tI'
if ( dNeq ( lambda * 0.5_pREAL / ( lambda + crystal_isotropic_mu ( C_tI , 'isostress' , 'tI' ) ) , &
crystal_isotropic_nu ( C_tI , 'isostress' , 'tI' ) , 1.0e-12_pREAL ) ) error stop 'isotropic_nu/isostress/tI'
2022-11-12 04:33:30 +05:30
2022-12-01 04:38:15 +05:30
call random_number ( C )
2023-07-15 23:58:57 +05:30
C = crystal_symmetrize_C66 ( C + math_eye ( 6 ) , 'cI' )
if ( dNeq ( crystal_isotropic_mu ( C , 'isostrain' , 'cI' ) , crystal_isotropic_mu ( C , 'isostrain' , 'hP' ) , 1.0e-12_pREAL ) ) &
2022-12-01 04:38:15 +05:30
error stop 'isotropic_mu/isostrain/cI-hP'
2023-07-15 23:58:57 +05:30
if ( dNeq ( crystal_isotropic_nu ( C , 'isostrain' , 'cF' ) , crystal_isotropic_nu ( C , 'isostrain' , 'cI' ) , 1.0e-12_pREAL ) ) &
2022-12-01 04:38:15 +05:30
error stop 'isotropic_nu/isostrain/cF-tI'
2023-07-15 23:58:57 +05:30
if ( dNeq ( crystal_isotropic_mu ( C , 'isostress' , 'cI' ) , crystal_isotropic_mu ( C , 'isostress' ) , 1.0e-12_pREAL ) ) &
2022-12-01 04:38:15 +05:30
error stop 'isotropic_mu/isostress/cI-hP'
2023-07-15 23:58:57 +05:30
if ( dNeq ( crystal_isotropic_nu ( C , 'isostress' , 'cF' ) , crystal_isotropic_nu ( C , 'isostress' ) , 1.0e-12_pREAL ) ) &
2022-12-01 04:38:15 +05:30
error stop 'isotropic_nu/isostress/cF-tI'
2020-03-14 21:59:08 +05:30
2023-07-21 00:46:31 +05:30
end subroutine crystal_selfTest
2020-03-14 21:59:08 +05:30
2023-07-15 23:58:57 +05:30
end module crystal