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:
Claudio Zambaldi 2010-04-19 10:03:34 +00:00
parent 249042c2d3
commit cab2261693
1 changed files with 48 additions and 27 deletions

View File

@ -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