complex orientation initialization conflicts with phase field
- easier to do as pre processing (python) - ensures same solution independently of random number
This commit is contained in:
parent
43a59a5e9f
commit
0335207956
|
@ -382,13 +382,6 @@ Phenopowerlaw_singleSlip:
|
||||||
- master
|
- master
|
||||||
- release
|
- release
|
||||||
|
|
||||||
TextureComponents:
|
|
||||||
stage: grid
|
|
||||||
script: TextureComponents/test.py
|
|
||||||
except:
|
|
||||||
- master
|
|
||||||
- release
|
|
||||||
|
|
||||||
|
|
||||||
###################################################################################################
|
###################################################################################################
|
||||||
Marc_compileIfort2018_1:
|
Marc_compileIfort2018_1:
|
||||||
|
|
|
@ -708,6 +708,8 @@ subroutine IO_error(error_ID,el,ip,g,instance,ext_msg)
|
||||||
msg = 'too many systems requested'
|
msg = 'too many systems requested'
|
||||||
case (146_pInt)
|
case (146_pInt)
|
||||||
msg = 'number of values does not match'
|
msg = 'number of values does not match'
|
||||||
|
case (147_pInt)
|
||||||
|
msg = 'not supported anymore'
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! material error messages and related messages in mesh
|
! material error messages and related messages in mesh
|
||||||
|
|
|
@ -856,34 +856,9 @@ subroutine material_parseTexture
|
||||||
if(dNeq(math_det33(texture_transformation(1:3,1:3,t)),1.0_pReal)) call IO_error(157_pInt,t)
|
if(dNeq(math_det33(texture_transformation(1:3,1:3,t)),1.0_pReal)) call IO_error(157_pInt,t)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if (config_texture(t)%keyExists('symmetry')) then
|
if (config_texture(t)%keyExists('symmetry')) call IO_error(147,ext_msg='symmetry')
|
||||||
select case (config_texture(t)%getString('symmetry'))
|
if (config_texture(t)%keyExists('(random)')) call IO_error(147,ext_msg='(random)')
|
||||||
case('orthotropic')
|
if (config_texture(t)%keyExists('(fiber)')) call IO_error(147,ext_msg='(fiber)')
|
||||||
texture_symmetry(t) = 4_pInt
|
|
||||||
case('monoclinic')
|
|
||||||
texture_symmetry(t) = 2_pInt
|
|
||||||
case default
|
|
||||||
texture_symmetry(t) = 1_pInt
|
|
||||||
end select
|
|
||||||
endif
|
|
||||||
|
|
||||||
if (config_texture(t)%keyExists('(random)')) then
|
|
||||||
strings = config_texture(t)%getStrings('(random)',raw=.true.)
|
|
||||||
do i = 1_pInt, size(strings)
|
|
||||||
gauss = gauss + 1_pInt
|
|
||||||
texture_Gauss(1:3,gauss,t) = math_sampleRandomOri()
|
|
||||||
chunkPos = IO_stringPos(strings(i))
|
|
||||||
do j = 1_pInt,3_pInt,2_pInt
|
|
||||||
select case (IO_stringValue(strings(i),chunkPos,j))
|
|
||||||
case('scatter')
|
|
||||||
texture_Gauss(4,gauss,t) = IO_floatValue(strings(i),chunkPos,j+1_pInt)*inRad
|
|
||||||
case('fraction')
|
|
||||||
texture_Gauss(5,gauss,t) = IO_floatValue(strings(i),chunkPos,j+1_pInt)
|
|
||||||
end select
|
|
||||||
enddo
|
|
||||||
enddo
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
if (config_texture(t)%keyExists('(gauss)')) then
|
if (config_texture(t)%keyExists('(gauss)')) then
|
||||||
gauss = gauss + 1_pInt
|
gauss = gauss + 1_pInt
|
||||||
|
@ -906,31 +881,6 @@ subroutine material_parseTexture
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
if (config_texture(t)%keyExists('(fiber)')) then
|
|
||||||
fiber = fiber + 1_pInt
|
|
||||||
strings = config_texture(t)%getStrings('(fiber)',raw= .true.)
|
|
||||||
do i = 1_pInt, size(strings)
|
|
||||||
chunkPos = IO_stringPos(strings(i))
|
|
||||||
do j = 1_pInt,11_pInt,2_pInt
|
|
||||||
select case (IO_stringValue(strings(i),chunkPos,j))
|
|
||||||
case('alpha1')
|
|
||||||
texture_Fiber(1,fiber,t) = IO_floatValue(strings(i),chunkPos,j+1_pInt)*inRad
|
|
||||||
case('alpha2')
|
|
||||||
texture_Fiber(2,fiber,t) = IO_floatValue(strings(i),chunkPos,j+1_pInt)*inRad
|
|
||||||
case('beta1')
|
|
||||||
texture_Fiber(3,fiber,t) = IO_floatValue(strings(i),chunkPos,j+1_pInt)*inRad
|
|
||||||
case('beta2')
|
|
||||||
texture_Fiber(4,fiber,t) = IO_floatValue(strings(i),chunkPos,j+1_pInt)*inRad
|
|
||||||
case('scatter')
|
|
||||||
texture_Fiber(5,fiber,t) = IO_floatValue(strings(i),chunkPos,j+1_pInt)*inRad
|
|
||||||
case('fraction')
|
|
||||||
texture_Fiber(6,fiber,t) = IO_floatValue(strings(i),chunkPos,j+1_pInt)
|
|
||||||
end select
|
|
||||||
enddo
|
|
||||||
enddo
|
|
||||||
endif
|
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
call config_deallocate('material.config/texture')
|
call config_deallocate('material.config/texture')
|
||||||
|
@ -1040,11 +990,7 @@ subroutine material_populateGrains
|
||||||
math_RtoEuler, &
|
math_RtoEuler, &
|
||||||
math_EulerToR, &
|
math_EulerToR, &
|
||||||
math_mul33x33, &
|
math_mul33x33, &
|
||||||
math_range, &
|
math_range
|
||||||
math_sampleRandomOri, &
|
|
||||||
math_sampleGaussOri, &
|
|
||||||
math_sampleFiberOri, &
|
|
||||||
math_symmetricEulers
|
|
||||||
use mesh, only: &
|
use mesh, only: &
|
||||||
theMesh, &
|
theMesh, &
|
||||||
mesh_ipVolume
|
mesh_ipVolume
|
||||||
|
@ -1226,28 +1172,12 @@ subroutine material_populateGrains
|
||||||
! has texture components
|
! has texture components
|
||||||
gauss: do t = 1_pInt,texture_Ngauss(textureID) ! loop over Gauss components
|
gauss: do t = 1_pInt,texture_Ngauss(textureID) ! loop over Gauss components
|
||||||
do g = 1_pInt,int(real(myNorientations,pReal)*texture_Gauss(5,t,textureID),pInt) ! loop over required grain count
|
do g = 1_pInt,int(real(myNorientations,pReal)*texture_Gauss(5,t,textureID),pInt) ! loop over required grain count
|
||||||
orientationOfGrain(:,grain+constituentGrain+g) = &
|
orientationOfGrain(:,grain+constituentGrain+g) = texture_Gauss(1:3,t,textureID)
|
||||||
math_sampleGaussOri(texture_Gauss(1:3,t,textureID),&
|
|
||||||
texture_Gauss( 4,t,textureID))
|
|
||||||
enddo
|
enddo
|
||||||
constituentGrain = &
|
constituentGrain = &
|
||||||
constituentGrain + int(real(myNorientations,pReal)*texture_Gauss(5,t,textureID)) ! advance counter for grains of current constituent
|
constituentGrain + int(real(myNorientations,pReal)*texture_Gauss(5,t,textureID)) ! advance counter for grains of current constituent
|
||||||
enddo gauss
|
enddo gauss
|
||||||
|
|
||||||
fiber: do t = 1_pInt,texture_Nfiber(textureID) ! loop over fiber components
|
|
||||||
do g = 1_pInt,int(real(myNorientations,pReal)*texture_Fiber(6,t,textureID),pInt) ! loop over required grain count
|
|
||||||
orientationOfGrain(:,grain+constituentGrain+g) = &
|
|
||||||
math_sampleFiberOri(texture_Fiber(1:2,t,textureID),&
|
|
||||||
texture_Fiber(3:4,t,textureID),&
|
|
||||||
texture_Fiber( 5,t,textureID))
|
|
||||||
enddo
|
|
||||||
constituentGrain = &
|
|
||||||
constituentGrain + int(real(myNorientations,pReal)*texture_fiber(6,t,textureID),pInt) ! advance counter for grains of current constituent
|
|
||||||
enddo fiber
|
|
||||||
|
|
||||||
random: do constituentGrain = constituentGrain+1_pInt,myNorientations ! fill remainder with random
|
|
||||||
orientationOfGrain(:,grain+constituentGrain) = math_sampleRandomOri()
|
|
||||||
enddo random
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! ...texture transformation
|
! ...texture transformation
|
||||||
|
@ -1261,25 +1191,6 @@ subroutine material_populateGrains
|
||||||
)
|
)
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
|
||||||
! ...sample symmetry
|
|
||||||
|
|
||||||
symExtension = texture_symmetry(textureID) - 1_pInt
|
|
||||||
if (symExtension > 0_pInt) then ! sample symmetry (number of additional equivalent orientations)
|
|
||||||
constituentGrain = myNorientations ! start right after "real" orientations
|
|
||||||
do j = 1_pInt,myNorientations ! loop over each "real" orientation
|
|
||||||
symOrientation = math_symmetricEulers(texture_symmetry(textureID), &
|
|
||||||
orientationOfGrain(1:3,grain+j)) ! get symmetric equivalents
|
|
||||||
e = min(symExtension,NgrainsOfConstituent(i)-constituentGrain) ! do not overshoot end of constituent grain array
|
|
||||||
if (e > 0_pInt) then
|
|
||||||
orientationOfGrain(1:3,grain+constituentGrain+1: &
|
|
||||||
grain+constituentGrain+e) = &
|
|
||||||
symOrientation(1:3,1:e)
|
|
||||||
constituentGrain = constituentGrain + e ! remainder shrinks by e
|
|
||||||
endif
|
|
||||||
enddo
|
|
||||||
endif
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! shuffle grains within current constituent
|
! shuffle grains within current constituent
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue