diff --git a/code/IO.f90 b/code/IO.f90 index c9675f13d..a8a66e8b9 100644 --- a/code/IO.f90 +++ b/code/IO.f90 @@ -1447,6 +1447,8 @@ subroutine IO_error(error_ID,e,i,g,ext_msg) msg = 'microstructure index out of bounds' case (156_pInt) msg = 'reading from ODF file' + case (157_pInt) + msg = 'illegal texture rotation specified' case (160_pInt) msg = 'no entries in config part' case (170_pInt) diff --git a/code/config/material.config b/code/config/material.config index 3db78fc10..abd6f8143 100644 --- a/code/config/material.config +++ b/code/config/material.config @@ -455,11 +455,12 @@ dSFE_dT 0.0002 # temperature dependance of stacking fault e #-------------------# #-------------------# -#/echo/ # uncomment to output texture part +#/echo/ # uncomment to output texture part [Rolling] hybridIA DP_EBSD.linearODF symmetry orthotropic # or monoclinic +rotation x +z -y # model coordinate x-, y-, z-axis correspond to which axis during texture measurement? [random] @@ -476,6 +477,7 @@ symmetry orthotropic # or monoclinic (gauss) phi1 209.805 Phi 29.206 phi2 63.435 scatter 0.000 fraction 1.000 [fiber example] +rotation x y -z # model coordinate x-, y-, z-axis correspond to which axis during texture measurement? this was a left handed coordinate system! # fiber axis in spherical coordinates: alpha crystal system, beta sample system (fiber) alpha1 123 alpha2 123 beta1 12 beta2 45 scatter 15 fraction 0.333 diff --git a/code/material.f90 b/code/material.f90 index 0b70efdab..5b91a5de1 100644 --- a/code/material.f90 +++ b/code/material.f90 @@ -115,7 +115,8 @@ module material real(pReal), dimension(:,:,:), allocatable, private :: & material_volume, & !< volume of each grain,IP,element texture_Gauss, & !< data of each Gauss component - texture_Fiber !< data of each Fiber component + texture_Fiber, & !< data of each Fiber component + texture_Rotation !< rotation of each texture logical, dimension(:), allocatable, private :: & homogenization_active @@ -567,7 +568,9 @@ subroutine material_parseTexture(myFile,myPart) IO_stringPos use math, only: & inRad, & - math_sampleRandomOri + math_sampleRandomOri, & + math_I3, & + math_inv33 implicit none character(len=*), intent(in) :: myPart @@ -600,6 +603,10 @@ subroutine material_parseTexture(myFile,myPart) texture_maxNfiber = maxval(texture_Nfiber) allocate(texture_Gauss (5,texture_maxNgauss,Nsections)); texture_Gauss = 0.0_pReal allocate(texture_Fiber (6,texture_maxNfiber,Nsections)); texture_Fiber = 0.0_pReal + allocate(texture_Rotation(3,3,Nsections)); + do j =1_pInt, Nsections + texture_Rotation(1:3,1:3,j) = math_I3 + enddo rewind(myFile) line = '' ! to have in initialized @@ -628,6 +635,27 @@ subroutine material_parseTexture(myFile,myPart) tag = IO_lc(IO_stringValue(line,positions,1_pInt)) ! extract key textureType: select case(tag) + case ('rotation') textureType + do j = 1_pInt, 3_pInt + tag = IO_lc(IO_stringValue(line,positions,j+1_pInt)) + select case (tag) + case('x', '+x') + texture_Rotation(1_pInt:3_pInt,j,section) = (/1.0_pReal, 0.0_pReal, 0.0_pReal/) ! original axis is now +x-axis + case('-x') + texture_Rotation(1_pInt:3_pInt,j,section) = (/-1.0_pReal, 0.0_pReal, 0.0_pReal/) ! original axis is now -x-axis + case('y', '+y') + texture_Rotation(1_pInt:3_pInt,j,section) = (/0.0_pReal, 1.0_pReal, 0.0_pReal/) ! original axis is now +y-axis + case('-y') + texture_Rotation(1_pInt:3_pInt,j,section) = (/0.0_pReal, -1.0_pReal, 0.0_pReal/) ! original axis is now -y-axis + case('z', '+z') + texture_Rotation(1_pInt:3_pInt,j,section) = (/0.0_pReal, 0.0_pReal, 1.0_pReal/) ! original axis is now +z-axis + case('-z') + texture_Rotation(1_pInt:3_pInt,j,section) = (/0.0_pReal, 0.0_pReal, -1.0_pReal/) ! original axis is now -z-axis + case default + call IO_error(156_pInt) + end select + enddo + case ('hybridia') textureType texture_ODFfile(section) = IO_stringValue(line,positions,2_pInt)