New array crystallite_symmetryID(i,g,e) is now filled during initialization run with 1 for bcc and fcc phase and 2 for hexagonal phase. The values are needed for misorientation calculations to apply the correct symmetry operators for cubic and hexagonal phases.
This commit is contained in:
parent
249042c2d3
commit
cab2261693
|
@ -24,6 +24,8 @@ integer(pInt) crystallite_maxSizePostResults
|
||||||
integer(pInt), dimension(:), allocatable :: crystallite_sizePostResults
|
integer(pInt), dimension(:), allocatable :: crystallite_sizePostResults
|
||||||
integer(pInt), dimension(:,:), allocatable :: crystallite_sizePostResult
|
integer(pInt), dimension(:,:), allocatable :: crystallite_sizePostResult
|
||||||
character(len=64), dimension(:,:), allocatable :: crystallite_output ! name of each post result output
|
character(len=64), dimension(:,:), allocatable :: crystallite_output ! name of each post result output
|
||||||
|
integer(pInt), dimension (:,:,:), allocatable :: &
|
||||||
|
crystallite_symmetryID ! crystallographic symmetry 1=cubic 2=hexagonal, needed in all orientation calcs
|
||||||
|
|
||||||
real(pReal), dimension (:,:,:), allocatable :: &
|
real(pReal), dimension (:,:,:), allocatable :: &
|
||||||
crystallite_dt, & ! requested time increment of each grain
|
crystallite_dt, & ! requested time increment of each grain
|
||||||
|
@ -94,6 +96,13 @@ subroutine crystallite_init(Temperature)
|
||||||
mesh_maxNipNeighbors
|
mesh_maxNipNeighbors
|
||||||
use IO
|
use IO
|
||||||
use material
|
use material
|
||||||
|
use lattice, only: lattice_symmetryTypes
|
||||||
|
use constitutive_phenopowerlaw, only: constitutive_phenopowerlaw_label, &
|
||||||
|
constitutive_phenopowerlaw_structure
|
||||||
|
use constitutive_dislotwin, only: constitutive_dislotwin_label, &
|
||||||
|
constitutive_dislotwin_structure
|
||||||
|
use constitutive_nonlocal, only: constitutive_nonlocal_label, &
|
||||||
|
constitutive_nonlocal_structure
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
integer(pInt), parameter :: file = 200
|
integer(pInt), parameter :: file = 200
|
||||||
|
@ -118,6 +127,9 @@ subroutine crystallite_init(Temperature)
|
||||||
integer(pInt) section, j,p, output, mySize
|
integer(pInt) section, j,p, output, mySize
|
||||||
character(len=64) tag
|
character(len=64) tag
|
||||||
character(len=1024) line
|
character(len=1024) line
|
||||||
|
integer(pInt) myStructure, & ! lattice structure
|
||||||
|
myPhase
|
||||||
|
|
||||||
|
|
||||||
gMax = homogenization_maxNgrains
|
gMax = homogenization_maxNgrains
|
||||||
iMax = mesh_maxNips
|
iMax = mesh_maxNips
|
||||||
|
@ -142,6 +154,7 @@ subroutine crystallite_init(Temperature)
|
||||||
allocate(crystallite_partionedLp0(3,3,gMax,iMax,eMax)); crystallite_partionedLp0 = 0.0_pReal
|
allocate(crystallite_partionedLp0(3,3,gMax,iMax,eMax)); crystallite_partionedLp0 = 0.0_pReal
|
||||||
allocate(crystallite_partionedTstar0_v(6,gMax,iMax,eMax)); crystallite_partionedTstar0_v = 0.0_pReal
|
allocate(crystallite_partionedTstar0_v(6,gMax,iMax,eMax)); crystallite_partionedTstar0_v = 0.0_pReal
|
||||||
allocate(crystallite_subTemperature0(gMax,iMax,eMax)); crystallite_subTemperature0 = 0.0_pReal
|
allocate(crystallite_subTemperature0(gMax,iMax,eMax)); crystallite_subTemperature0 = 0.0_pReal
|
||||||
|
allocate(crystallite_symmetryID(gMax,iMax,eMax)); crystallite_symmetryID = 0.0_pReal !NEW
|
||||||
allocate(crystallite_subF(3,3,gMax,iMax,eMax)); crystallite_subF = 0.0_pReal
|
allocate(crystallite_subF(3,3,gMax,iMax,eMax)); crystallite_subF = 0.0_pReal
|
||||||
allocate(crystallite_subF0(3,3,gMax,iMax,eMax)); crystallite_subF0 = 0.0_pReal
|
allocate(crystallite_subF0(3,3,gMax,iMax,eMax)); crystallite_subF0 = 0.0_pReal
|
||||||
allocate(crystallite_subFp0(3,3,gMax,iMax,eMax)); crystallite_subFp0 = 0.0_pReal
|
allocate(crystallite_subFp0(3,3,gMax,iMax,eMax)); crystallite_subFp0 = 0.0_pReal
|
||||||
|
@ -263,6 +276,30 @@ subroutine crystallite_init(Temperature)
|
||||||
enddo
|
enddo
|
||||||
!$OMPEND PARALLEL DO
|
!$OMPEND PARALLEL DO
|
||||||
|
|
||||||
|
! Initialize crystallite_symmetryID(g,i,e)
|
||||||
|
!$OMP PARALLEL DO
|
||||||
|
do e = FEsolving_execElem(1),FEsolving_execElem(2)
|
||||||
|
do i = FEsolving_execIP(1,e),FEsolving_execIP(2,e)
|
||||||
|
do g = 1,homogenization_Ngrains(mesh_element(3,e))
|
||||||
|
myPhase = material_phase(g,i,e)
|
||||||
|
select case (phase_constitution(myPhase))
|
||||||
|
case (constitutive_phenopowerlaw_label)
|
||||||
|
myStructure = constitutive_phenopowerlaw_structure(phase_constitutionInstance(myPhase))
|
||||||
|
case (constitutive_dislotwin_label)
|
||||||
|
myStructure = constitutive_dislotwin_structure(phase_constitutionInstance(myPhase))
|
||||||
|
case (constitutive_nonlocal_label)
|
||||||
|
myStructure = constitutive_nonlocal_structure(phase_constitutionInstance(myPhase))
|
||||||
|
case default
|
||||||
|
myStructure = -1_pInt ! does this happen for j2 material?
|
||||||
|
end select
|
||||||
|
if (myStructure>0_pInt) then
|
||||||
|
crystallite_symmetryID(g,i,e)=lattice_symmetryTypes(myStructure) ! structure = 1(fcc) or 2(bcc) => 1; 3(hex)=>2
|
||||||
|
endif
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
!$OMPEND PARALLEL DO
|
||||||
|
|
||||||
call crystallite_orientations()
|
call crystallite_orientations()
|
||||||
crystallite_orientation0=crystallite_orientation ! Store initial orientations for calculation of grain rotations
|
crystallite_orientation0=crystallite_orientation ! Store initial orientations for calculation of grain rotations
|
||||||
|
|
||||||
|
@ -289,6 +326,7 @@ subroutine crystallite_init(Temperature)
|
||||||
write(6,'(a35,x,7(i5,x))') 'crystallite_partionedLp0: ', shape(crystallite_partionedLp0)
|
write(6,'(a35,x,7(i5,x))') 'crystallite_partionedLp0: ', shape(crystallite_partionedLp0)
|
||||||
write(6,'(a35,x,7(i5,x))') 'crystallite_subF: ', shape(crystallite_subF)
|
write(6,'(a35,x,7(i5,x))') 'crystallite_subF: ', shape(crystallite_subF)
|
||||||
write(6,'(a35,x,7(i5,x))') 'crystallite_subTemperature0: ', shape(crystallite_subTemperature0)
|
write(6,'(a35,x,7(i5,x))') 'crystallite_subTemperature0: ', shape(crystallite_subTemperature0)
|
||||||
|
write(6,'(a35,x,7(i5,x))') 'crystallite_symmetryID: ', shape(crystallite_symmetryID) !NEW
|
||||||
write(6,'(a35,x,7(i5,x))') 'crystallite_subF0: ', shape(crystallite_subF0)
|
write(6,'(a35,x,7(i5,x))') 'crystallite_subF0: ', shape(crystallite_subF0)
|
||||||
write(6,'(a35,x,7(i5,x))') 'crystallite_subFp0: ', shape(crystallite_subFp0)
|
write(6,'(a35,x,7(i5,x))') 'crystallite_subFp0: ', shape(crystallite_subFp0)
|
||||||
write(6,'(a35,x,7(i5,x))') 'crystallite_subLp0: ', shape(crystallite_subLp0)
|
write(6,'(a35,x,7(i5,x))') 'crystallite_subLp0: ', shape(crystallite_subLp0)
|
||||||
|
@ -300,7 +338,7 @@ subroutine crystallite_init(Temperature)
|
||||||
write(6,'(a35,x,7(i5,x))') 'crystallite_dPdF: ', shape(crystallite_dPdF)
|
write(6,'(a35,x,7(i5,x))') 'crystallite_dPdF: ', shape(crystallite_dPdF)
|
||||||
write(6,'(a35,x,7(i5,x))') 'crystallite_fallbackdPdF: ', shape(crystallite_fallbackdPdF)
|
write(6,'(a35,x,7(i5,x))') 'crystallite_fallbackdPdF: ', shape(crystallite_fallbackdPdF)
|
||||||
write(6,'(a35,x,7(i5,x))') 'crystallite_orientation: ', shape(crystallite_orientation)
|
write(6,'(a35,x,7(i5,x))') 'crystallite_orientation: ', shape(crystallite_orientation)
|
||||||
write(6,'(a35,x,7(i5,x))') 'crystallite_orientation0: ', shape(crystallite_orientation)
|
write(6,'(a35,x,7(i5,x))') 'crystallite_orientation0: ', shape(crystallite_orientation0)
|
||||||
write(6,'(a35,x,7(i5,x))') 'crystallite_rotation: ', shape(crystallite_rotation)
|
write(6,'(a35,x,7(i5,x))') 'crystallite_rotation: ', shape(crystallite_rotation)
|
||||||
write(6,'(a35,x,7(i5,x))') 'crystallite_misorientation: ', shape(crystallite_misorientation)
|
write(6,'(a35,x,7(i5,x))') 'crystallite_misorientation: ', shape(crystallite_misorientation)
|
||||||
write(6,'(a35,x,7(i5,x))') 'crystallite_dt: ', shape(crystallite_dt)
|
write(6,'(a35,x,7(i5,x))') 'crystallite_dt: ', shape(crystallite_dt)
|
||||||
|
@ -1518,7 +1556,7 @@ use math, only: math_pDecomposition, &
|
||||||
use FEsolving, only: FEsolving_execElem, &
|
use FEsolving, only: FEsolving_execElem, &
|
||||||
FEsolving_execIP
|
FEsolving_execIP
|
||||||
use IO, only: IO_warning
|
use IO, only: IO_warning
|
||||||
use lattice, only: lattice_symmetryTypes
|
!use lattice, only: lattice_symmetryTypes
|
||||||
use material, only: material_phase, &
|
use material, only: material_phase, &
|
||||||
homogenization_Ngrains, &
|
homogenization_Ngrains, &
|
||||||
phase_constitution, &
|
phase_constitution, &
|
||||||
|
@ -1545,12 +1583,10 @@ integer(pInt) e, & ! element index
|
||||||
g, & ! grain index
|
g, & ! grain index
|
||||||
n, & ! neighbor index
|
n, & ! neighbor index
|
||||||
myPhase, & ! phase
|
myPhase, & ! phase
|
||||||
myStructure, & ! lattice structure
|
|
||||||
neighboring_e, & ! element index of my neighbor
|
neighboring_e, & ! element index of my neighbor
|
||||||
neighboring_i, & ! integration point index of my neighbor
|
neighboring_i, & ! integration point index of my neighbor
|
||||||
neighboringPhase, & ! phase of my neighbor
|
neighboringPhase, & ! phase of my neighbor
|
||||||
neighboringStructure, & ! lattice structure of my neighbor
|
neighboringStructure ! lattice structure of my neighbor
|
||||||
symmetryType ! type of crystal symmetry
|
|
||||||
real(pReal), dimension(3,3) :: U, R
|
real(pReal), dimension(3,3) :: U, R
|
||||||
logical error
|
logical error
|
||||||
|
|
||||||
|
@ -1569,23 +1605,9 @@ logical error
|
||||||
crystallite_orientation(:,g,i,e) = math_RtoQuaternion(R)
|
crystallite_orientation(:,g,i,e) = math_RtoQuaternion(R)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
myPhase = material_phase(g,i,e)
|
call math_misorientation( crystallite_rotation(:,g,i,e), & ! calculate grainrotation
|
||||||
select case (phase_constitution(myPhase))
|
crystallite_orientation(:,g,i,e), crystallite_orientation0(:,g,i,e), &
|
||||||
case (constitutive_phenopowerlaw_label)
|
crystallite_symmetryID(g,i,e))
|
||||||
myStructure = constitutive_phenopowerlaw_structure(phase_constitutionInstance(myPhase))
|
|
||||||
case (constitutive_dislotwin_label)
|
|
||||||
myStructure = constitutive_dislotwin_structure(phase_constitutionInstance(myPhase))
|
|
||||||
case (constitutive_nonlocal_label)
|
|
||||||
myStructure = constitutive_nonlocal_structure(phase_constitutionInstance(myPhase))
|
|
||||||
case default
|
|
||||||
myStructure = ''
|
|
||||||
end select
|
|
||||||
|
|
||||||
! calculate grain rotation
|
|
||||||
symmetryType=lattice_symmetryTypes(myStructure) ! structure = 1(fcc) or 2(bcc) => 1; 3(hex)=>2
|
|
||||||
call math_misorientation( crystallite_rotation(:,g,i,e), &
|
|
||||||
crystallite_orientation(:,g,i,e), crystallite_orientation0(:,g,i,e), &
|
|
||||||
symmetryType)
|
|
||||||
|
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
@ -1598,8 +1620,8 @@ logical error
|
||||||
do i = FEsolving_execIP(1,e),FEsolving_execIP(2,e)
|
do i = FEsolving_execIP(1,e),FEsolving_execIP(2,e)
|
||||||
myPhase = material_phase(1,i,e) ! get my crystal structure
|
myPhase = material_phase(1,i,e) ! get my crystal structure
|
||||||
if (phase_constitution(myPhase) == constitutive_nonlocal_label) then ! if nonlocal model
|
if (phase_constitution(myPhase) == constitutive_nonlocal_label) then ! if nonlocal model
|
||||||
myStructure = constitutive_nonlocal_structure(phase_constitutionInstance(myPhase))
|
|
||||||
do n = 1,FE_NipNeighbors(mesh_element(2,e)) ! loop through my neighbors
|
do n = 1,FE_NipNeighbors(mesh_element(2,e)) ! loop through my neighbors
|
||||||
|
|
||||||
neighboring_e = mesh_ipNeighborhood(1,n,i,e)
|
neighboring_e = mesh_ipNeighborhood(1,n,i,e)
|
||||||
neighboring_i = mesh_ipNeighborhood(2,n,i,e)
|
neighboring_i = mesh_ipNeighborhood(2,n,i,e)
|
||||||
|
@ -1609,11 +1631,10 @@ logical error
|
||||||
neighboringPhase = material_phase(1,neighboring_i,neighboring_e) ! get my neighbor's crystal structure
|
neighboringPhase = material_phase(1,neighboring_i,neighboring_e) ! get my neighbor's crystal structure
|
||||||
if (myPhase == neighboringPhase) then ! if my neighbor has same phase like me
|
if (myPhase == neighboringPhase) then ! if my neighbor has same phase like me
|
||||||
|
|
||||||
symmetryType=lattice_symmetryTypes(myStructure) ! structure = 1(fcc) or 2(bcc) => 1; 3(hex)=>2
|
|
||||||
call math_misorientation( crystallite_misorientation(:,n,1,i,e), &
|
call math_misorientation( crystallite_misorientation(:,n,1,i,e), &
|
||||||
crystallite_orientation(:,1,i,e), &
|
crystallite_orientation(:,1,i,e), &
|
||||||
crystallite_orientation(:,1,neighboring_i,neighboring_e), &
|
crystallite_orientation(:,1,neighboring_i,neighboring_e), &
|
||||||
symmetryType) ! calculate misorientation
|
crystallite_symmetryID(g,i,e)) ! calculate misorientation
|
||||||
|
|
||||||
else ! for neighbor with different phase
|
else ! for neighbor with different phase
|
||||||
crystallite_misorientation(:,n,1,i,e) = (/-1.0_pReal, 0.0_pReal, 0.0_pReal, 0.0_pReal/) ! set misorientation to maximum
|
crystallite_misorientation(:,n,1,i,e) = (/-1.0_pReal, 0.0_pReal, 0.0_pReal, 0.0_pReal/) ! set misorientation to maximum
|
||||||
|
|
Loading…
Reference in New Issue