corrected buggy calculation of Schmid matrix for twins introduced in rev1809.

(stress acting on twin systems was overestimated by factor of sqrt(3) due to that!!)

additional polishing.
This commit is contained in:
Philip Eisenlohr 2012-11-23 17:02:50 +00:00
parent 11ed7fab86
commit 1e32eb560e
2 changed files with 50 additions and 47 deletions

View File

@ -171,7 +171,7 @@ module lattice
!< Interaction types !< Interaction types
!< 1 --- self interaction !< 1 --- self interaction
!< 2 --- coplanar interaction !< 2 --- coplanar interaction
!< 3 --- colinear interaction !< 3 --- collinear interaction
!< 4 --- Hirth locks !< 4 --- Hirth locks
!< 5 --- glissile junctions !< 5 --- glissile junctions
!< 6 --- Lomer locks !< 6 --- Lomer locks
@ -193,8 +193,8 @@ module lattice
],pInt),[lattice_fcc_Nslip,lattice_fcc_Ntwin],order=[2,1]) ],pInt),[lattice_fcc_Nslip,lattice_fcc_Ntwin],order=[2,1])
!< Interaction types !< Interaction types
!< 1 --- coplanar interaction !< 1 --- coplanar interaction
!< 2 --- colinear interaction !< 2 --- screw trace between slip system and twin habit plane (easy cross slip)
!< 3 --- hardened interaction !< 3 --- other interaction
integer(pInt), dimension(lattice_fcc_Ntwin,lattice_fcc_Nslip), target, private :: & integer(pInt), dimension(lattice_fcc_Ntwin,lattice_fcc_Nslip), target, private :: &
lattice_fcc_interactionTwinSlip = 0_pInt lattice_fcc_interactionTwinSlip = 0_pInt
@ -226,10 +226,10 @@ module lattice
lattice_bcc_NtwinSystem = int([ 12, 0, 0, 0], pInt) lattice_bcc_NtwinSystem = int([ 12, 0, 0, 0], pInt)
integer(pInt), parameter, private :: & integer(pInt), parameter, private :: &
lattice_bcc_Nslip = 24_pInt ! sum(lattice_bcc_NslipSystem) lattice_bcc_Nslip = 24_pInt ! sum(lattice_bcc_NslipSystem)
integer(pInt), parameter, private :: & integer(pInt), parameter, private :: &
lattice_bcc_Ntwin = 12_pInt ! sum(lattice_bcc_NtwinSystem) lattice_bcc_Ntwin = 12_pInt ! sum(lattice_bcc_NtwinSystem)
integer(pInt), private :: & integer(pInt), private :: &
lattice_bcc_Nstructure = 0_pInt lattice_bcc_Nstructure = 0_pInt
@ -322,33 +322,34 @@ module lattice
0.7071067812_pReal & 0.7071067812_pReal &
],[lattice_bcc_Ntwin]) ],[lattice_bcc_Ntwin])
!> slip--slip interactions for BCC structures (2) from Lee et-al. Int J of Plast. (v15) 1999 pp. 625-645 ! slip--slip interactions for BCC structures (2) from Lee et al. Int J Plast 15 (1999) 625-645
integer(pInt), dimension(lattice_bcc_Nslip,lattice_bcc_Nslip), target, private :: & integer(pInt), dimension(lattice_bcc_Nslip,lattice_bcc_Nslip), target, private :: &
lattice_bcc_interactionSlipSlip = reshape(int( [& lattice_bcc_interactionSlipSlip = reshape(int( [&
1,3,6,6,5,4,4,2,4,2,5,4,6,6,4,2,2,4,6,6,4,2,6,6, & ! ---> slip 1,3,6,6,5,4,4,2,4,2,5,4, 6,6,4,2,2,4,6,6,4,2,6,6, & ! ---> slip
3,1,6,6,4,2,5,4,5,4,4,2,6,6,2,4,4,2,6,6,2,4,6,6, & ! | 3,1,6,6,4,2,5,4,5,4,4,2, 6,6,2,4,4,2,6,6,2,4,6,6, & ! |
6,6,1,3,4,5,2,4,4,5,2,4,4,2,6,6,6,6,2,4,6,6,4,2, & ! | 6,6,1,3,4,5,2,4,4,5,2,4, 4,2,6,6,6,6,2,4,6,6,4,2, & ! |
6,6,3,1,2,4,4,5,2,4,4,5,2,4,6,6,6,6,4,2,6,6,2,4, & ! v slip 6,6,3,1,2,4,4,5,2,4,4,5, 2,4,6,6,6,6,4,2,6,6,2,4, & ! v slip
5,4,4,2,1,3,6,6,2,4,5,4,2,6,4,6,6,4,6,2,4,6,2,6, & 5,4,4,2,1,3,6,6,2,4,5,4, 2,6,4,6,6,4,6,2,4,6,2,6, &
4,2,5,4,3,1,6,6,4,5,4,2,4,6,2,6,6,2,6,4,2,6,4,6, & 4,2,5,4,3,1,6,6,4,5,4,2, 4,6,2,6,6,2,6,4,2,6,4,6, &
4,5,2,4,6,6,1,3,5,4,2,4,6,2,6,4,4,6,2,6,6,4,6,2, & 4,5,2,4,6,6,1,3,5,4,2,4, 6,2,6,4,4,6,2,6,6,4,6,2, &
2,4,4,5,6,6,3,1,4,2,4,5,6,4,6,2,2,6,4,6,6,2,6,4, & 2,4,4,5,6,6,3,1,4,2,4,5, 6,4,6,2,2,6,4,6,6,2,6,4, &
4,5,4,2,2,4,5,4,1,3,6,6,2,6,6,4,4,6,6,2,6,4,2,6, & 4,5,4,2,2,4,5,4,1,3,6,6, 2,6,6,4,4,6,6,2,6,4,2,6, &
2,4,5,4,4,5,4,2,3,1,6,6,4,6,6,2,2,6,6,4,6,2,4,6, & 2,4,5,4,4,5,4,2,3,1,6,6, 4,6,6,2,2,6,6,4,6,2,4,6, &
5,4,2,4,5,4,2,4,6,6,1,3,6,2,4,6,6,4,2,6,4,6,6,2, & 5,4,2,4,5,4,2,4,6,6,1,3, 6,2,4,6,6,4,2,6,4,6,6,2, &
4,2,4,5,4,2,4,5,6,6,3,1,6,4,2,6,6,2,4,6,2,6,6,4, & 4,2,4,5,4,2,4,5,6,6,3,1, 6,4,2,6,6,2,4,6,2,6,6,4, &
6,6,4,2,2,4,6,6,2,4,6,6,1,5,6,6,5,6,6,2,5,6,2,6, & !
6,6,2,4,6,6,2,4,6,6,2,4,5,1,6,6,6,5,2,6,6,5,6,2, & 6,6,4,2,2,4,6,6,2,4,6,6, 1,5,6,6,5,6,6,2,5,6,2,6, &
4,2,6,6,4,2,6,6,6,6,4,2,6,6,1,5,6,2,5,6,2,6,5,6, & 6,6,2,4,6,6,2,4,6,6,2,4, 5,1,6,6,6,5,2,6,6,5,6,2, &
2,4,6,6,6,6,4,2,4,2,6,6,6,6,5,1,2,6,6,5,6,2,6,5, & 4,2,6,6,4,2,6,6,6,6,4,2, 6,6,1,5,6,2,5,6,2,6,5,6, &
2,4,6,6,6,6,4,2,4,2,6,6,5,6,6,2,1,6,5,6,5,2,6,6, & 2,4,6,6,6,6,4,2,4,2,6,6, 6,6,5,1,2,6,6,5,6,2,6,5, &
4,2,6,6,4,2,6,6,6,6,4,2,6,5,2,6,6,1,6,5,2,5,6,6, & 2,4,6,6,6,6,4,2,4,2,6,6, 5,6,6,2,1,6,5,6,5,2,6,6, &
6,6,2,4,6,6,2,4,6,6,2,4,6,2,5,6,5,6,1,6,6,6,5,2, & 4,2,6,6,4,2,6,6,6,6,4,2, 6,5,2,6,6,1,6,5,2,5,6,6, &
6,6,4,2,2,4,6,6,2,4,6,6,2,6,6,5,6,5,6,1,6,6,2,5, & 6,6,2,4,6,6,2,4,6,6,2,4, 6,2,5,6,5,6,1,6,6,6,5,2, &
4,2,6,6,4,2,6,6,6,6,4,2,5,6,2,6,5,2,6,6,1,6,6,5, & 6,6,4,2,2,4,6,6,2,4,6,6, 2,6,6,5,6,5,6,1,6,6,2,5, &
2,4,6,6,6,6,4,2,4,2,6,6,6,5,6,2,2,5,6,6,6,1,5,6, & 4,2,6,6,4,2,6,6,6,6,4,2, 5,6,2,6,5,2,6,6,1,6,6,5, &
6,6,4,2,2,4,6,6,2,4,6,6,2,6,5,6,6,6,5,2,6,5,1,6, & 2,4,6,6,6,6,4,2,4,2,6,6, 6,5,6,2,2,5,6,6,6,1,5,6, &
6,6,2,4,6,6,2,4,6,6,2,4,6,2,6,5,6,6,2,5,5,6,6,1 & 6,6,4,2,2,4,6,6,2,4,6,6, 2,6,5,6,6,6,5,2,6,5,1,6, &
6,6,2,4,6,6,2,4,6,6,2,4, 6,2,6,5,6,6,2,5,5,6,6,1 &
],pInt),[lattice_bcc_Nslip,lattice_bcc_Nslip],order=[2,1]) ],pInt),[lattice_bcc_Nslip,lattice_bcc_Nslip],order=[2,1])
!< Interaction types !< Interaction types
!< 1 --- self interaction !< 1 --- self interaction
@ -372,6 +373,7 @@ module lattice
3,3,3,2,2,3,3,3,3,2,3,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,2,3,3,3,3,2,3,3,3,3,2, &
3,3,2,3,3,2,3,3,2,3,3,3, & 3,3,2,3,3,2,3,3,2,3,3,3, &
!
1,3,3,3,3,3,3,2,3,3,2,3, & 1,3,3,3,3,3,3,2,3,3,2,3, &
3,1,3,3,3,3,2,3,3,3,3,2, & 3,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,1,3,3,2,3,3,2,3,3,3, &
@ -387,14 +389,14 @@ module lattice
],pInt),[lattice_bcc_Nslip,lattice_bcc_Ntwin],order=[2,1]) ],pInt),[lattice_bcc_Nslip,lattice_bcc_Ntwin],order=[2,1])
!< Interaction types !< Interaction types
!< 1 --- coplanar interaction !< 1 --- coplanar interaction
!< 2 --- colinear interaction !< 2 --- screw trace between slip system and twin habit plane (easy cross slip)
!< 3 --- hardened interaction !< 3 --- other interaction
!>twin--slip interactions for BCC structures (2) MISSING: not implemented yet ! twin--slip interactions for BCC structures (2) MISSING: not implemented yet
integer(pInt), dimension(lattice_bcc_Ntwin,lattice_bcc_Nslip), target, private :: & integer(pInt), dimension(lattice_bcc_Ntwin,lattice_bcc_Nslip), target, private :: &
lattice_bcc_interactionTwinSlip = 0_pInt lattice_bcc_interactionTwinSlip = 0_pInt
!> twin-twin interactions for BCC structures (2) MISSING: not implemented yet ! twin--twin interactions for BCC structures (2)
integer(pInt), dimension(lattice_bcc_Ntwin,lattice_bcc_Ntwin), target, private :: & integer(pInt), dimension(lattice_bcc_Ntwin,lattice_bcc_Ntwin), target, private :: &
lattice_bcc_interactionTwinTwin = reshape(int( [& lattice_bcc_interactionTwinTwin = reshape(int( [&
1,3,3,3,3,3,3,2,3,3,2,3, & ! ---> twin 1,3,3,3,3,3,3,2,3,3,2,3, & ! ---> twin
@ -412,13 +414,14 @@ module lattice
],pInt),[lattice_bcc_Ntwin,lattice_bcc_Ntwin],order=[2,1]) ],pInt),[lattice_bcc_Ntwin,lattice_bcc_Ntwin],order=[2,1])
!< Interaction types !< Interaction types
!< 1 --- self interaction !< 1 --- self interaction
!< 2 --- coplinear interaction !< 2 --- collinear interaction
!< 3 --- hardened interaction !< 3 --- other interaction
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
! hex (3+) ! hex (3+)
integer(pInt), dimension(lattice_maxNslipFamily), parameter, private :: & integer(pInt), dimension(lattice_maxNslipFamily), parameter, private :: &
lattice_hex_NslipSystem = int([ 3, 3, 6,12, 6],pInt) lattice_hex_NslipSystem = int([ 3, 3, 6, 12, 6],pInt)
integer(pInt), dimension(lattice_maxNtwinFamily), parameter, private :: & integer(pInt), dimension(lattice_maxNtwinFamily), parameter, private :: &
lattice_hex_NtwinSystem = int([ 6, 6, 6, 6],pInt) lattice_hex_NtwinSystem = int([ 6, 6, 6, 6],pInt)
@ -916,20 +919,20 @@ integer(pInt) function lattice_initializeStructure(struct,CoverA)
lattice_Sslip(1:3,1:3,i,myStructure) = math_tensorproduct(lattice_sd(1:3,i,myStructure), & lattice_Sslip(1:3,1:3,i,myStructure) = math_tensorproduct(lattice_sd(1:3,i,myStructure), &
lattice_sn(1:3,i,myStructure)) lattice_sn(1:3,i,myStructure))
lattice_Sslip_v(1:6,i,myStructure) = math_Mandel33to6(math_symmetric33(lattice_Sslip(1:3,1:3,i,myStructure))) lattice_Sslip_v(1:6,i,myStructure) = math_Mandel33to6(math_symmetric33(lattice_Sslip(1:3,1:3,i,myStructure)))
if (abs(math_trace33(lattice_Sslip(1:3,1:3,i,myStructure))) > 1.0e-8) & if (abs(math_trace33(lattice_Sslip(1:3,1:3,i,myStructure))) > 1.0e-8_pReal) &
call IO_error(0_pInt,myStructure,i,0_pInt,ext_msg = 'dilatational slip Schmid matrix') call IO_error(0_pInt,myStructure,i,0_pInt,ext_msg = 'dilatational slip Schmid matrix')
enddo enddo
do i = 1_pInt,myNtwin ! store twin system vectors and Schmid plus rotation matrix for my structure do i = 1_pInt,myNtwin ! store twin system vectors and Schmid plus rotation matrix for my structure
lattice_td(1:3,i,myStructure) = td(1:3,i)/math_norm3(sd(1:3,i)) ! make unit vector lattice_td(1:3,i,myStructure) = td(1:3,i)/math_norm3(td(1:3,i)) ! make unit vector
lattice_tn(1:3,i,myStructure) = tn(1:3,i)/math_norm3(sn(1:3,i)) ! make unit vector lattice_tn(1:3,i,myStructure) = tn(1:3,i)/math_norm3(tn(1:3,i)) ! make unit vector
lattice_tt(1:3,i,myStructure) = math_vectorproduct(lattice_td(1:3,i,myStructure), & lattice_tt(1:3,i,myStructure) = math_vectorproduct(lattice_td(1:3,i,myStructure), &
lattice_tn(1:3,i,myStructure)) lattice_tn(1:3,i,myStructure))
lattice_Stwin(1:3,1:3,i,myStructure) = math_tensorproduct(lattice_td(1:3,i,myStructure), & lattice_Stwin(1:3,1:3,i,myStructure) = math_tensorproduct(lattice_td(1:3,i,myStructure), &
lattice_tn(1:3,i,myStructure)) lattice_tn(1:3,i,myStructure))
lattice_Stwin_v(1:6,i,myStructure) = math_Mandel33to6(math_symmetric33(lattice_Stwin(1:3,1:3,i,myStructure))) lattice_Stwin_v(1:6,i,myStructure) = math_Mandel33to6(math_symmetric33(lattice_Stwin(1:3,1:3,i,myStructure)))
lattice_Qtwin(1:3,1:3,i,myStructure) = math_AxisAngleToR(tn(1:3,i),180.0_pReal*INRAD) lattice_Qtwin(1:3,1:3,i,myStructure) = math_AxisAngleToR(tn(1:3,i),180.0_pReal*INRAD)
lattice_shearTwin(i,myStructure) = ts(i) lattice_shearTwin(i,myStructure) = ts(i)
if (abs(math_trace33(lattice_Stwin(1:3,1:3,i,myStructure))) > 1.0e-8) & if (abs(math_trace33(lattice_Stwin(1:3,1:3,i,myStructure))) > 1.0e-8_pReal) &
call IO_error(0_pInt,myStructure,i,0_pInt,ext_msg = 'dilatational twin Schmid matrix') call IO_error(0_pInt,myStructure,i,0_pInt,ext_msg = 'dilatational twin Schmid matrix')
enddo enddo
lattice_NslipSystem(1:lattice_maxNslipFamily,myStructure) = myNslipSystem ! number of slip systems in each family lattice_NslipSystem(1:lattice_maxNslipFamily,myStructure) = myNslipSystem ! number of slip systems in each family

View File

@ -1580,7 +1580,7 @@ pure function math_AxisAngleToR(axis,omega)
norm = sqrt(math_mul3x3(axis,axis)) norm = sqrt(math_mul3x3(axis,axis))
if (norm > 1.0e-8_pReal) then ! non-zero rotation if (norm > 1.0e-8_pReal) then ! non-zero rotation
forall (i=1_pInt:3_pInt) axisNrm(i) = axis(i)/norm ! normalize axis to be sure axisNrm = axis/norm ! normalize axis to be sure
s = sin(omega) s = sin(omega)
c = cos(omega) c = cos(omega)
@ -1624,10 +1624,10 @@ pure function math_AxisAngleToQuaternion(axis,omega)
norm = sqrt(math_mul3x3(axis,axis)) norm = sqrt(math_mul3x3(axis,axis))
if (norm > 1.0e-8_pReal) then ! non-zero rotation if (norm > 1.0e-8_pReal) then ! non-zero rotation
forall (i=1_pInt:3_pInt) axisNrm(i) = axis(i)/norm ! normalize axis to be sure axisNrm = axis/norm ! normalize axis to be sure
! formula taken from http://en.wikipedia.org/wiki/Rotation_representation_%28mathematics%29#Rodrigues_parameters ! formula taken from http://en.wikipedia.org/wiki/Rotation_representation_%28mathematics%29#Rodrigues_parameters
s = sin(omega/2.0_pReal) s = sin(0.5_pReal*omega)
c = cos(omega/2.0_pReal) c = cos(0.5_pReal*omega)
math_AxisAngleToQuaternion(1) = c math_AxisAngleToQuaternion(1) = c
math_AxisAngleToQuaternion(2:4) = s * axisNrm(1:3) math_AxisAngleToQuaternion(2:4) = s * axisNrm(1:3)
else else