parent
fd4cdf965b
commit
839be90943
|
@ -107,9 +107,9 @@ subroutine CPFEM_init
|
||||||
|
|
||||||
print'(/,a)', ' <<<+- CPFEM init -+>>>'; flush(IO_STDOUT)
|
print'(/,a)', ' <<<+- CPFEM init -+>>>'; flush(IO_STDOUT)
|
||||||
|
|
||||||
allocate(CPFEM_cs( 6,discretization_nIP,discretization_nElem), source= 0.0_pReal)
|
allocate(CPFEM_cs( 6,discretization_nIPs,discretization_Nelems), source= 0.0_pReal)
|
||||||
allocate(CPFEM_dcsdE( 6,6,discretization_nIP,discretization_nElem), source= 0.0_pReal)
|
allocate(CPFEM_dcsdE( 6,6,discretization_nIPs,discretization_Nelems), source= 0.0_pReal)
|
||||||
allocate(CPFEM_dcsdE_knownGood(6,6,discretization_nIP,discretization_nElem), source= 0.0_pReal)
|
allocate(CPFEM_dcsdE_knownGood(6,6,discretization_nIPs,discretization_Nelems), source= 0.0_pReal)
|
||||||
|
|
||||||
!------------------------------------------------------------------------------
|
!------------------------------------------------------------------------------
|
||||||
! read debug options
|
! read debug options
|
||||||
|
|
|
@ -127,7 +127,7 @@ module constitutive
|
||||||
instance,of,ip,el)
|
instance,of,ip,el)
|
||||||
real(pReal), dimension(3,3), intent(in) :: &
|
real(pReal), dimension(3,3), intent(in) :: &
|
||||||
Mp !< MandelStress
|
Mp !< MandelStress
|
||||||
real(pReal), dimension(3,3,homogenization_maxNconstituent,discretization_nIP,discretization_nElem), intent(in) :: &
|
real(pReal), dimension(3,3,homogenization_maxNconstituents,discretization_nIPs,discretization_Nelems), intent(in) :: &
|
||||||
F, & !< deformation gradient
|
F, & !< deformation gradient
|
||||||
Fp !< plastic deformation gradient
|
Fp !< plastic deformation gradient
|
||||||
real(pReal), intent(in) :: &
|
real(pReal), intent(in) :: &
|
||||||
|
@ -218,7 +218,7 @@ module constitutive
|
||||||
instance, &
|
instance, &
|
||||||
i, &
|
i, &
|
||||||
e
|
e
|
||||||
type(rotation), dimension(1,discretization_nIP,discretization_nElem), intent(in) :: &
|
type(rotation), dimension(1,discretization_nIPs,discretization_Nelems), intent(in) :: &
|
||||||
orientation !< crystal orientation
|
orientation !< crystal orientation
|
||||||
end subroutine plastic_nonlocal_updateCompatibility
|
end subroutine plastic_nonlocal_updateCompatibility
|
||||||
|
|
||||||
|
@ -753,7 +753,7 @@ function constitutive_collectDotState(S, FArray, Fi, FpArray, subdt, ipc, ip, el
|
||||||
of
|
of
|
||||||
real(pReal), intent(in) :: &
|
real(pReal), intent(in) :: &
|
||||||
subdt !< timestep
|
subdt !< timestep
|
||||||
real(pReal), intent(in), dimension(3,3,homogenization_maxNconstituent,discretization_nIP,discretization_nElem) :: &
|
real(pReal), intent(in), dimension(3,3,homogenization_maxNconstituents,discretization_nIPs,discretization_Nelems) :: &
|
||||||
FArray, & !< elastic deformation gradient
|
FArray, & !< elastic deformation gradient
|
||||||
FpArray !< plastic deformation gradient
|
FpArray !< plastic deformation gradient
|
||||||
real(pReal), intent(in), dimension(3,3) :: &
|
real(pReal), intent(in), dimension(3,3) :: &
|
||||||
|
|
|
@ -184,7 +184,7 @@ module subroutine constitutive_damage_getRateAndItsTangents(phiDot, dPhiDot_dPhi
|
||||||
phiDot = 0.0_pReal
|
phiDot = 0.0_pReal
|
||||||
dPhiDot_dPhi = 0.0_pReal
|
dPhiDot_dPhi = 0.0_pReal
|
||||||
|
|
||||||
do grain = 1, homogenization_Nconstituent(material_homogenizationAt(el))
|
do grain = 1, homogenization_Nconstituents(material_homogenizationAt(el))
|
||||||
phase = material_phaseAt(grain,el)
|
phase = material_phaseAt(grain,el)
|
||||||
constituent = material_phasememberAt(grain,ip,el)
|
constituent = material_phasememberAt(grain,ip,el)
|
||||||
do source = 1, phase_Nsources(phase)
|
do source = 1, phase_Nsources(phase)
|
||||||
|
|
|
@ -221,7 +221,7 @@ module function plastic_disloTungsten_init() result(myPlasticity)
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! allocate state arrays
|
! allocate state arrays
|
||||||
NipcMyPhase = count(material_phaseAt == p) * discretization_nIP
|
NipcMyPhase = count(material_phaseAt == p) * discretization_nIPs
|
||||||
sizeDotState = size(['rho_mob ','rho_dip ','gamma_sl']) * prm%sum_N_sl
|
sizeDotState = size(['rho_mob ','rho_dip ','gamma_sl']) * prm%sum_N_sl
|
||||||
sizeState = sizeDotState
|
sizeState = sizeDotState
|
||||||
|
|
||||||
|
|
|
@ -407,7 +407,7 @@ module function plastic_dislotwin_init() result(myPlasticity)
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! allocate state arrays
|
! allocate state arrays
|
||||||
NipcMyPhase = count(material_phaseAt == p) * discretization_nIP
|
NipcMyPhase = count(material_phaseAt == p) * discretization_nIPs
|
||||||
sizeDotState = size(['rho_mob ','rho_dip ','gamma_sl']) * prm%sum_N_sl &
|
sizeDotState = size(['rho_mob ','rho_dip ','gamma_sl']) * prm%sum_N_sl &
|
||||||
+ size(['f_tw']) * prm%sum_N_tw &
|
+ size(['f_tw']) * prm%sum_N_tw &
|
||||||
+ size(['f_tr']) * prm%sum_N_tr
|
+ size(['f_tr']) * prm%sum_N_tr
|
||||||
|
|
|
@ -130,7 +130,7 @@ module function plastic_isotropic_init() result(myPlasticity)
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! allocate state arrays
|
! allocate state arrays
|
||||||
NipcMyPhase = count(material_phaseAt == p) * discretization_nIP
|
NipcMyPhase = count(material_phaseAt == p) * discretization_nIPs
|
||||||
sizeDotState = size(['xi ','gamma'])
|
sizeDotState = size(['xi ','gamma'])
|
||||||
sizeState = sizeDotState
|
sizeState = sizeDotState
|
||||||
|
|
||||||
|
|
|
@ -174,7 +174,7 @@ module function plastic_kinehardening_init() result(myPlasticity)
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! allocate state arrays
|
! allocate state arrays
|
||||||
NipcMyPhase = count(material_phaseAt == p) * discretization_nIP
|
NipcMyPhase = count(material_phaseAt == p) * discretization_nIPs
|
||||||
sizeDotState = size(['crss ','crss_back', 'accshear ']) * prm%sum_N_sl!ToDo: adjust names, ask Philip
|
sizeDotState = size(['crss ','crss_back', 'accshear ']) * prm%sum_N_sl!ToDo: adjust names, ask Philip
|
||||||
sizeDeltaState = size(['sense ', 'chi0 ', 'gamma0' ]) * prm%sum_N_sl !ToDo: adjust names
|
sizeDeltaState = size(['sense ', 'chi0 ', 'gamma0' ]) * prm%sum_N_sl !ToDo: adjust names
|
||||||
sizeState = sizeDotState + sizeDeltaState
|
sizeState = sizeDotState + sizeDeltaState
|
||||||
|
|
|
@ -41,7 +41,7 @@ module function plastic_none_init() result(myPlasticity)
|
||||||
do p = 1, phases%length
|
do p = 1, phases%length
|
||||||
phase => phases%get(p)
|
phase => phases%get(p)
|
||||||
if(.not. myPlasticity(p)) cycle
|
if(.not. myPlasticity(p)) cycle
|
||||||
NipcMyPhase = count(material_phaseAt == p) * discretization_nIP
|
NipcMyPhase = count(material_phaseAt == p) * discretization_nIPs
|
||||||
call constitutive_allocateState(plasticState(p),NipcMyPhase,0,0,0)
|
call constitutive_allocateState(plasticState(p),NipcMyPhase,0,0,0)
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
|
|
|
@ -391,7 +391,7 @@ module function plastic_nonlocal_init() result(myPlasticity)
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! allocate state arrays
|
! allocate state arrays
|
||||||
NipcMyPhase = count(material_phaseAt==p) * discretization_nIP
|
NipcMyPhase = count(material_phaseAt==p) * discretization_nIPs
|
||||||
sizeDotState = size([ 'rhoSglEdgePosMobile ','rhoSglEdgeNegMobile ', &
|
sizeDotState = size([ 'rhoSglEdgePosMobile ','rhoSglEdgeNegMobile ', &
|
||||||
'rhoSglScrewPosMobile ','rhoSglScrewNegMobile ', &
|
'rhoSglScrewPosMobile ','rhoSglScrewNegMobile ', &
|
||||||
'rhoSglEdgePosImmobile ','rhoSglEdgeNegImmobile ', &
|
'rhoSglEdgePosImmobile ','rhoSglEdgeNegImmobile ', &
|
||||||
|
@ -505,7 +505,7 @@ module function plastic_nonlocal_init() result(myPlasticity)
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
allocate(compatibility(2,maxval(param%sum_N_sl),maxval(param%sum_N_sl),nIPneighbors,&
|
allocate(compatibility(2,maxval(param%sum_N_sl),maxval(param%sum_N_sl),nIPneighbors,&
|
||||||
discretization_nIP,discretization_nElem), source=0.0_pReal)
|
discretization_nIPs,discretization_Nelems), source=0.0_pReal)
|
||||||
|
|
||||||
! BEGIN DEPRECATED----------------------------------------------------------------------------------
|
! BEGIN DEPRECATED----------------------------------------------------------------------------------
|
||||||
allocate(iRhoU(maxval(param%sum_N_sl),4,Ninstance), source=0)
|
allocate(iRhoU(maxval(param%sum_N_sl),4,Ninstance), source=0)
|
||||||
|
@ -519,7 +519,7 @@ module function plastic_nonlocal_init() result(myPlasticity)
|
||||||
if(.not. myPlasticity(p)) cycle
|
if(.not. myPlasticity(p)) cycle
|
||||||
i = i + 1
|
i = i + 1
|
||||||
|
|
||||||
NipcMyPhase = count(material_phaseAt==p) * discretization_nIP
|
NipcMyPhase = count(material_phaseAt==p) * discretization_nIPs
|
||||||
l = 0
|
l = 0
|
||||||
do t = 1,4
|
do t = 1,4
|
||||||
do s = 1,param(i)%sum_N_sl
|
do s = 1,param(i)%sum_N_sl
|
||||||
|
@ -976,7 +976,7 @@ module subroutine plastic_nonlocal_dotState(Mp, F, Fp, Temperature,timestep, &
|
||||||
|
|
||||||
real(pReal), dimension(3,3), intent(in) :: &
|
real(pReal), dimension(3,3), intent(in) :: &
|
||||||
Mp !< MandelStress
|
Mp !< MandelStress
|
||||||
real(pReal), dimension(3,3,homogenization_maxNconstituent,discretization_nIP,discretization_nElem), intent(in) :: &
|
real(pReal), dimension(3,3,homogenization_maxNconstituents,discretization_nIPs,discretization_Nelems), intent(in) :: &
|
||||||
F, & !< elastic deformation gradient
|
F, & !< elastic deformation gradient
|
||||||
Fp !< plastic deformation gradient
|
Fp !< plastic deformation gradient
|
||||||
real(pReal), intent(in) :: &
|
real(pReal), intent(in) :: &
|
||||||
|
@ -1176,7 +1176,7 @@ end subroutine plastic_nonlocal_dotState
|
||||||
!---------------------------------------------------------------------------------------------------
|
!---------------------------------------------------------------------------------------------------
|
||||||
function rhoDotFlux(F,Fp,timestep, instance,of,ip,el)
|
function rhoDotFlux(F,Fp,timestep, instance,of,ip,el)
|
||||||
|
|
||||||
real(pReal), dimension(3,3,homogenization_maxNconstituent,discretization_nIP,discretization_nElem), intent(in) :: &
|
real(pReal), dimension(3,3,homogenization_maxNconstituents,discretization_nIPs,discretization_Nelems), intent(in) :: &
|
||||||
F, & !< elastic deformation gradient
|
F, & !< elastic deformation gradient
|
||||||
Fp !< plastic deformation gradient
|
Fp !< plastic deformation gradient
|
||||||
real(pReal), intent(in) :: &
|
real(pReal), intent(in) :: &
|
||||||
|
@ -1416,7 +1416,7 @@ end function rhoDotFlux
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
module subroutine plastic_nonlocal_updateCompatibility(orientation,instance,i,e)
|
module subroutine plastic_nonlocal_updateCompatibility(orientation,instance,i,e)
|
||||||
|
|
||||||
type(rotation), dimension(1,discretization_nIP,discretization_nElem), intent(in) :: &
|
type(rotation), dimension(1,discretization_nIPs,discretization_Nelems), intent(in) :: &
|
||||||
orientation ! crystal orientation
|
orientation ! crystal orientation
|
||||||
integer, intent(in) :: &
|
integer, intent(in) :: &
|
||||||
instance, &
|
instance, &
|
||||||
|
@ -1632,8 +1632,8 @@ subroutine stateInit(ini,phase,NipcMyPhase,instance)
|
||||||
associate(stt => state(instance))
|
associate(stt => state(instance))
|
||||||
|
|
||||||
if (ini%random_rho_u > 0.0_pReal) then ! randomly distribute dislocation segments on random slip system and of random type in the volume
|
if (ini%random_rho_u > 0.0_pReal) then ! randomly distribute dislocation segments on random slip system and of random type in the volume
|
||||||
do e = 1,discretization_nElem
|
do e = 1,discretization_Nelems
|
||||||
do i = 1,discretization_nIP
|
do i = 1,discretization_nIPs
|
||||||
if (material_phaseAt(1,e) == phase) volume(material_phasememberAt(1,i,e)) = IPvolume(i,e)
|
if (material_phaseAt(1,e) == phase) volume(material_phasememberAt(1,i,e)) = IPvolume(i,e)
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
|
|
@ -224,7 +224,7 @@ module function plastic_phenopowerlaw_init() result(myPlasticity)
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! allocate state arrays
|
! allocate state arrays
|
||||||
NipcMyPhase = count(material_phaseAt == p) * discretization_nIP
|
NipcMyPhase = count(material_phaseAt == p) * discretization_nIPs
|
||||||
sizeDotState = size(['xi_sl ','gamma_sl']) * prm%sum_N_sl &
|
sizeDotState = size(['xi_sl ','gamma_sl']) * prm%sum_N_sl &
|
||||||
+ size(['xi_tw ','gamma_tw']) * prm%sum_N_tw
|
+ size(['xi_tw ','gamma_tw']) * prm%sum_N_tw
|
||||||
sizeState = sizeDotState
|
sizeState = sizeDotState
|
||||||
|
|
|
@ -95,7 +95,7 @@ module subroutine constitutive_thermal_getRateAndItsTangents(TDot, dTDot_dT, T,
|
||||||
homog = material_homogenizationAt(el)
|
homog = material_homogenizationAt(el)
|
||||||
instance = thermal_typeInstance(homog)
|
instance = thermal_typeInstance(homog)
|
||||||
|
|
||||||
do grain = 1, homogenization_Nconstituent(homog)
|
do grain = 1, homogenization_Nconstituents(homog)
|
||||||
phase = material_phaseAt(grain,el)
|
phase = material_phaseAt(grain,el)
|
||||||
constituent = material_phasememberAt(grain,ip,el)
|
constituent = material_phasememberAt(grain,ip,el)
|
||||||
do source = 1, phase_Nsources(phase)
|
do source = 1, phase_Nsources(phase)
|
||||||
|
|
|
@ -135,7 +135,7 @@ contains
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine crystallite_init
|
subroutine crystallite_init
|
||||||
|
|
||||||
logical, dimension(discretization_nIP,discretization_nElem) :: devNull
|
logical, dimension(discretization_nIPs,discretization_Nelems) :: devNull
|
||||||
integer :: &
|
integer :: &
|
||||||
c, & !< counter in integration point component loop
|
c, & !< counter in integration point component loop
|
||||||
i, & !< counter in integration point loop
|
i, & !< counter in integration point loop
|
||||||
|
@ -162,9 +162,9 @@ subroutine crystallite_init
|
||||||
debugCrystallite%ip = config_debug%get_asInt('integrationpoint', defaultVal=1)
|
debugCrystallite%ip = config_debug%get_asInt('integrationpoint', defaultVal=1)
|
||||||
debugCrystallite%grain = config_debug%get_asInt('grain', defaultVal=1)
|
debugCrystallite%grain = config_debug%get_asInt('grain', defaultVal=1)
|
||||||
|
|
||||||
cMax = homogenization_maxNconstituent
|
cMax = homogenization_maxNconstituents
|
||||||
iMax = discretization_nIP
|
iMax = discretization_nIPs
|
||||||
eMax = discretization_nElem
|
eMax = discretization_Nelems
|
||||||
|
|
||||||
allocate(crystallite_partitionedF(3,3,cMax,iMax,eMax),source=0.0_pReal)
|
allocate(crystallite_partitionedF(3,3,cMax,iMax,eMax),source=0.0_pReal)
|
||||||
|
|
||||||
|
@ -253,7 +253,7 @@ subroutine crystallite_init
|
||||||
! initialize
|
! initialize
|
||||||
!$OMP PARALLEL DO PRIVATE(i,c)
|
!$OMP PARALLEL DO PRIVATE(i,c)
|
||||||
do e = FEsolving_execElem(1),FEsolving_execElem(2)
|
do e = FEsolving_execElem(1),FEsolving_execElem(2)
|
||||||
do i = FEsolving_execIP(1), FEsolving_execIP(2); do c = 1, homogenization_Nconstituent(material_homogenizationAt(e))
|
do i = FEsolving_execIP(1), FEsolving_execIP(2); do c = 1, homogenization_Nconstituents(material_homogenizationAt(e))
|
||||||
crystallite_Fp0(1:3,1:3,c,i,e) = material_orientation0(c,i,e)%asMatrix() ! Fp reflects initial orientation (see 10.1016/j.actamat.2006.01.005)
|
crystallite_Fp0(1:3,1:3,c,i,e) = material_orientation0(c,i,e)%asMatrix() ! Fp reflects initial orientation (see 10.1016/j.actamat.2006.01.005)
|
||||||
crystallite_Fp0(1:3,1:3,c,i,e) = crystallite_Fp0(1:3,1:3,c,i,e) &
|
crystallite_Fp0(1:3,1:3,c,i,e) = crystallite_Fp0(1:3,1:3,c,i,e) &
|
||||||
/ math_det33(crystallite_Fp0(1:3,1:3,c,i,e))**(1.0_pReal/3.0_pReal)
|
/ math_det33(crystallite_Fp0(1:3,1:3,c,i,e))**(1.0_pReal/3.0_pReal)
|
||||||
|
@ -279,7 +279,7 @@ subroutine crystallite_init
|
||||||
!$OMP PARALLEL DO
|
!$OMP PARALLEL DO
|
||||||
do e = FEsolving_execElem(1),FEsolving_execElem(2)
|
do e = FEsolving_execElem(1),FEsolving_execElem(2)
|
||||||
do i = FEsolving_execIP(1),FEsolving_execIP(2)
|
do i = FEsolving_execIP(1),FEsolving_execIP(2)
|
||||||
do c = 1,homogenization_Nconstituent(material_homogenizationAt(e))
|
do c = 1,homogenization_Nconstituents(material_homogenizationAt(e))
|
||||||
call constitutive_dependentState(crystallite_partitionedF0(1:3,1:3,c,i,e), &
|
call constitutive_dependentState(crystallite_partitionedF0(1:3,1:3,c,i,e), &
|
||||||
crystallite_partitionedFp0(1:3,1:3,c,i,e), &
|
crystallite_partitionedFp0(1:3,1:3,c,i,e), &
|
||||||
c,i,e) ! update dependent state variables to be consistent with basic states
|
c,i,e) ! update dependent state variables to be consistent with basic states
|
||||||
|
@ -307,7 +307,7 @@ end subroutine crystallite_init
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
function crystallite_stress()
|
function crystallite_stress()
|
||||||
|
|
||||||
logical, dimension(discretization_nIP,discretization_nElem) :: crystallite_stress
|
logical, dimension(discretization_nIPs,discretization_Nelems) :: crystallite_stress
|
||||||
real(pReal) :: &
|
real(pReal) :: &
|
||||||
formerSubStep
|
formerSubStep
|
||||||
integer :: &
|
integer :: &
|
||||||
|
@ -317,7 +317,7 @@ function crystallite_stress()
|
||||||
e, & !< counter in element loop
|
e, & !< counter in element loop
|
||||||
startIP, endIP, &
|
startIP, endIP, &
|
||||||
s
|
s
|
||||||
logical, dimension(homogenization_maxNconstituent,discretization_nIP,discretization_nElem) :: todo !ToDo: need to set some values to false for different Ngrains
|
logical, dimension(homogenization_maxNconstituents,discretization_nIPs,discretization_Nelems) :: todo !ToDo: need to set some values to false for different Ngrains
|
||||||
real(pReal), dimension(:,:,:,:,:), allocatable :: &
|
real(pReal), dimension(:,:,:,:,:), allocatable :: &
|
||||||
subLp0,& !< plastic velocity grad at start of crystallite inc
|
subLp0,& !< plastic velocity grad at start of crystallite inc
|
||||||
subLi0 !< intermediate velocity grad at start of crystallite inc
|
subLi0 !< intermediate velocity grad at start of crystallite inc
|
||||||
|
@ -335,7 +335,7 @@ function crystallite_stress()
|
||||||
crystallite_subStep = 0.0_pReal
|
crystallite_subStep = 0.0_pReal
|
||||||
!$OMP PARALLEL DO
|
!$OMP PARALLEL DO
|
||||||
elementLooping1: do e = FEsolving_execElem(1),FEsolving_execElem(2)
|
elementLooping1: do e = FEsolving_execElem(1),FEsolving_execElem(2)
|
||||||
do i = FEsolving_execIP(1),FEsolving_execIP(2); do c = 1,homogenization_Nconstituent(material_homogenizationAt(e))
|
do i = FEsolving_execIP(1),FEsolving_execIP(2); do c = 1,homogenization_Nconstituents(material_homogenizationAt(e))
|
||||||
homogenizationRequestsCalculation: if (crystallite_requested(c,i,e)) then
|
homogenizationRequestsCalculation: if (crystallite_requested(c,i,e)) then
|
||||||
plasticState (material_phaseAt(c,e))%subState0( :,material_phaseMemberAt(c,i,e)) = &
|
plasticState (material_phaseAt(c,e))%subState0( :,material_phaseMemberAt(c,i,e)) = &
|
||||||
plasticState (material_phaseAt(c,e))%partitionedState0(:,material_phaseMemberAt(c,i,e))
|
plasticState (material_phaseAt(c,e))%partitionedState0(:,material_phaseMemberAt(c,i,e))
|
||||||
|
@ -362,7 +362,7 @@ function crystallite_stress()
|
||||||
endIP = startIP
|
endIP = startIP
|
||||||
else singleRun
|
else singleRun
|
||||||
startIP = 1
|
startIP = 1
|
||||||
endIP = discretization_nIP
|
endIP = discretization_nIPs
|
||||||
endif singleRun
|
endif singleRun
|
||||||
|
|
||||||
NiterationCrystallite = 0
|
NiterationCrystallite = 0
|
||||||
|
@ -376,7 +376,7 @@ function crystallite_stress()
|
||||||
!$OMP PARALLEL DO PRIVATE(formerSubStep)
|
!$OMP PARALLEL DO PRIVATE(formerSubStep)
|
||||||
elementLooping3: do e = FEsolving_execElem(1),FEsolving_execElem(2)
|
elementLooping3: do e = FEsolving_execElem(1),FEsolving_execElem(2)
|
||||||
do i = FEsolving_execIP(1),FEsolving_execIP(2)
|
do i = FEsolving_execIP(1),FEsolving_execIP(2)
|
||||||
do c = 1,homogenization_Nconstituent(material_homogenizationAt(e))
|
do c = 1,homogenization_Nconstituents(material_homogenizationAt(e))
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! wind forward
|
! wind forward
|
||||||
if (crystallite_converged(c,i,e)) then
|
if (crystallite_converged(c,i,e)) then
|
||||||
|
@ -472,7 +472,7 @@ subroutine crystallite_initializeRestorationPoints(i,e)
|
||||||
c, & !< constituent number
|
c, & !< constituent number
|
||||||
s
|
s
|
||||||
|
|
||||||
do c = 1,homogenization_Nconstituent(material_homogenizationAt(e))
|
do c = 1,homogenization_Nconstituents(material_homogenizationAt(e))
|
||||||
crystallite_partitionedFp0(1:3,1:3,c,i,e) = crystallite_Fp0(1:3,1:3,c,i,e)
|
crystallite_partitionedFp0(1:3,1:3,c,i,e) = crystallite_Fp0(1:3,1:3,c,i,e)
|
||||||
crystallite_partitionedLp0(1:3,1:3,c,i,e) = crystallite_Lp0(1:3,1:3,c,i,e)
|
crystallite_partitionedLp0(1:3,1:3,c,i,e) = crystallite_Lp0(1:3,1:3,c,i,e)
|
||||||
crystallite_partitionedFi0(1:3,1:3,c,i,e) = crystallite_Fi0(1:3,1:3,c,i,e)
|
crystallite_partitionedFi0(1:3,1:3,c,i,e) = crystallite_Fi0(1:3,1:3,c,i,e)
|
||||||
|
@ -503,7 +503,7 @@ subroutine crystallite_windForward(i,e)
|
||||||
c, & !< constituent number
|
c, & !< constituent number
|
||||||
s
|
s
|
||||||
|
|
||||||
do c = 1,homogenization_Nconstituent(material_homogenizationAt(e))
|
do c = 1,homogenization_Nconstituents(material_homogenizationAt(e))
|
||||||
crystallite_partitionedF0 (1:3,1:3,c,i,e) = crystallite_partitionedF(1:3,1:3,c,i,e)
|
crystallite_partitionedF0 (1:3,1:3,c,i,e) = crystallite_partitionedF(1:3,1:3,c,i,e)
|
||||||
crystallite_partitionedFp0(1:3,1:3,c,i,e) = crystallite_Fp (1:3,1:3,c,i,e)
|
crystallite_partitionedFp0(1:3,1:3,c,i,e) = crystallite_Fp (1:3,1:3,c,i,e)
|
||||||
crystallite_partitionedLp0(1:3,1:3,c,i,e) = crystallite_Lp (1:3,1:3,c,i,e)
|
crystallite_partitionedLp0(1:3,1:3,c,i,e) = crystallite_Lp (1:3,1:3,c,i,e)
|
||||||
|
@ -536,7 +536,7 @@ subroutine crystallite_restore(i,e,includeL)
|
||||||
c, & !< constituent number
|
c, & !< constituent number
|
||||||
s
|
s
|
||||||
|
|
||||||
do c = 1,homogenization_Nconstituent(material_homogenizationAt(e))
|
do c = 1,homogenization_Nconstituents(material_homogenizationAt(e))
|
||||||
if (includeL) then
|
if (includeL) then
|
||||||
crystallite_Lp(1:3,1:3,c,i,e) = crystallite_partitionedLp0(1:3,1:3,c,i,e)
|
crystallite_Lp(1:3,1:3,c,i,e) = crystallite_partitionedLp0(1:3,1:3,c,i,e)
|
||||||
crystallite_Li(1:3,1:3,c,i,e) = crystallite_partitionedLi0(1:3,1:3,c,i,e)
|
crystallite_Li(1:3,1:3,c,i,e) = crystallite_partitionedLi0(1:3,1:3,c,i,e)
|
||||||
|
@ -697,7 +697,7 @@ subroutine crystallite_orientations
|
||||||
!$OMP PARALLEL DO
|
!$OMP PARALLEL DO
|
||||||
do e = FEsolving_execElem(1),FEsolving_execElem(2)
|
do e = FEsolving_execElem(1),FEsolving_execElem(2)
|
||||||
do i = FEsolving_execIP(1),FEsolving_execIP(2)
|
do i = FEsolving_execIP(1),FEsolving_execIP(2)
|
||||||
do c = 1,homogenization_Nconstituent(material_homogenizationAt(e))
|
do c = 1,homogenization_Nconstituents(material_homogenizationAt(e))
|
||||||
call crystallite_orientation(c,i,e)%fromMatrix(transpose(math_rotationalPart(crystallite_Fe(1:3,1:3,c,i,e))))
|
call crystallite_orientation(c,i,e)%fromMatrix(transpose(math_rotationalPart(crystallite_Fe(1:3,1:3,c,i,e))))
|
||||||
enddo; enddo; enddo
|
enddo; enddo; enddo
|
||||||
!$OMP END PARALLEL DO
|
!$OMP END PARALLEL DO
|
||||||
|
@ -821,11 +821,11 @@ subroutine crystallite_results
|
||||||
real(pReal), allocatable, dimension(:,:,:) :: select_tensors
|
real(pReal), allocatable, dimension(:,:,:) :: select_tensors
|
||||||
integer :: e,i,c,j
|
integer :: e,i,c,j
|
||||||
|
|
||||||
allocate(select_tensors(3,3,count(material_phaseAt==instance)*discretization_nIP))
|
allocate(select_tensors(3,3,count(material_phaseAt==instance)*discretization_nIPs))
|
||||||
|
|
||||||
j=0
|
j=0
|
||||||
do e = 1, size(material_phaseAt,2)
|
do e = 1, size(material_phaseAt,2)
|
||||||
do i = 1, discretization_nIP
|
do i = 1, discretization_nIPs
|
||||||
do c = 1, size(material_phaseAt,1) !ToDo: this needs to be changed for varying Ngrains
|
do c = 1, size(material_phaseAt,1) !ToDo: this needs to be changed for varying Ngrains
|
||||||
if (material_phaseAt(c,e) == instance) then
|
if (material_phaseAt(c,e) == instance) then
|
||||||
j = j + 1
|
j = j + 1
|
||||||
|
@ -848,11 +848,11 @@ subroutine crystallite_results
|
||||||
type(rotation), allocatable, dimension(:) :: select_rotations
|
type(rotation), allocatable, dimension(:) :: select_rotations
|
||||||
integer :: e,i,c,j
|
integer :: e,i,c,j
|
||||||
|
|
||||||
allocate(select_rotations(count(material_phaseAt==instance)*homogenization_maxNconstituent*discretization_nIP))
|
allocate(select_rotations(count(material_phaseAt==instance)*homogenization_maxNconstituents*discretization_nIPs))
|
||||||
|
|
||||||
j=0
|
j=0
|
||||||
do e = 1, size(material_phaseAt,2)
|
do e = 1, size(material_phaseAt,2)
|
||||||
do i = 1, discretization_nIP
|
do i = 1, discretization_nIPs
|
||||||
do c = 1, size(material_phaseAt,1) !ToDo: this needs to be changed for varying Ngrains
|
do c = 1, size(material_phaseAt,1) !ToDo: this needs to be changed for varying Ngrains
|
||||||
if (material_phaseAt(c,e) == instance) then
|
if (material_phaseAt(c,e) == instance) then
|
||||||
j = j + 1
|
j = j + 1
|
||||||
|
|
|
@ -143,8 +143,8 @@ subroutine damage_local_getSourceAndItsTangent(phiDot, dPhiDot_dPhi, phi, ip, el
|
||||||
|
|
||||||
call constitutive_damage_getRateAndItsTangents(phiDot, dPhiDot_dPhi, phi, ip, el)
|
call constitutive_damage_getRateAndItsTangents(phiDot, dPhiDot_dPhi, phi, ip, el)
|
||||||
|
|
||||||
phiDot = phiDot/real(homogenization_Nconstituent(material_homogenizationAt(el)),pReal)
|
phiDot = phiDot/real(homogenization_Nconstituents(material_homogenizationAt(el)),pReal)
|
||||||
dPhiDot_dPhi = dPhiDot_dPhi/real(homogenization_Nconstituent(material_homogenizationAt(el)),pReal)
|
dPhiDot_dPhi = dPhiDot_dPhi/real(homogenization_Nconstituents(material_homogenizationAt(el)),pReal)
|
||||||
|
|
||||||
end subroutine damage_local_getSourceAndItsTangent
|
end subroutine damage_local_getSourceAndItsTangent
|
||||||
|
|
||||||
|
|
|
@ -110,8 +110,8 @@ subroutine damage_nonlocal_getSourceAndItsTangent(phiDot, dPhiDot_dPhi, phi, ip,
|
||||||
dPhiDot_dPhi = 0.0_pReal
|
dPhiDot_dPhi = 0.0_pReal
|
||||||
|
|
||||||
call constitutive_damage_getRateAndItsTangents(phiDot, dPhiDot_dPhi, phi, ip, el)
|
call constitutive_damage_getRateAndItsTangents(phiDot, dPhiDot_dPhi, phi, ip, el)
|
||||||
phiDot = phiDot/real(homogenization_Nconstituent(material_homogenizationAt(el)),pReal)
|
phiDot = phiDot/real(homogenization_Nconstituents(material_homogenizationAt(el)),pReal)
|
||||||
dPhiDot_dPhi = dPhiDot_dPhi/real(homogenization_Nconstituent(material_homogenizationAt(el)),pReal)
|
dPhiDot_dPhi = dPhiDot_dPhi/real(homogenization_Nconstituents(material_homogenizationAt(el)),pReal)
|
||||||
|
|
||||||
end subroutine damage_nonlocal_getSourceAndItsTangent
|
end subroutine damage_nonlocal_getSourceAndItsTangent
|
||||||
|
|
||||||
|
@ -132,13 +132,13 @@ function damage_nonlocal_getDiffusion(ip,el)
|
||||||
|
|
||||||
homog = material_homogenizationAt(el)
|
homog = material_homogenizationAt(el)
|
||||||
damage_nonlocal_getDiffusion = 0.0_pReal
|
damage_nonlocal_getDiffusion = 0.0_pReal
|
||||||
do grain = 1, homogenization_Nconstituent(homog)
|
do grain = 1, homogenization_Nconstituents(homog)
|
||||||
damage_nonlocal_getDiffusion = damage_nonlocal_getDiffusion + &
|
damage_nonlocal_getDiffusion = damage_nonlocal_getDiffusion + &
|
||||||
crystallite_push33ToRef(grain,ip,el,lattice_D(1:3,1:3,material_phaseAt(grain,el)))
|
crystallite_push33ToRef(grain,ip,el,lattice_D(1:3,1:3,material_phaseAt(grain,el)))
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
damage_nonlocal_getDiffusion = &
|
damage_nonlocal_getDiffusion = &
|
||||||
num%charLength**2*damage_nonlocal_getDiffusion/real(homogenization_Nconstituent(homog),pReal)
|
num%charLength**2*damage_nonlocal_getDiffusion/real(homogenization_Nconstituents(homog),pReal)
|
||||||
|
|
||||||
end function damage_nonlocal_getDiffusion
|
end function damage_nonlocal_getDiffusion
|
||||||
|
|
||||||
|
@ -156,12 +156,12 @@ real(pReal) function damage_nonlocal_getMobility(ip,el)
|
||||||
|
|
||||||
damage_nonlocal_getMobility = 0.0_pReal
|
damage_nonlocal_getMobility = 0.0_pReal
|
||||||
|
|
||||||
do ipc = 1, homogenization_Nconstituent(material_homogenizationAt(el))
|
do ipc = 1, homogenization_Nconstituents(material_homogenizationAt(el))
|
||||||
damage_nonlocal_getMobility = damage_nonlocal_getMobility + lattice_M(material_phaseAt(ipc,el))
|
damage_nonlocal_getMobility = damage_nonlocal_getMobility + lattice_M(material_phaseAt(ipc,el))
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
damage_nonlocal_getMobility = damage_nonlocal_getMobility/&
|
damage_nonlocal_getMobility = damage_nonlocal_getMobility/&
|
||||||
real(homogenization_Nconstituent(material_homogenizationAt(el)),pReal)
|
real(homogenization_Nconstituents(material_homogenizationAt(el)),pReal)
|
||||||
|
|
||||||
end function damage_nonlocal_getMobility
|
end function damage_nonlocal_getMobility
|
||||||
|
|
||||||
|
|
|
@ -11,8 +11,8 @@ module discretization
|
||||||
private
|
private
|
||||||
|
|
||||||
integer, public, protected :: &
|
integer, public, protected :: &
|
||||||
discretization_nIP, &
|
discretization_nIPs, &
|
||||||
discretization_nElem
|
discretization_Nelems
|
||||||
|
|
||||||
integer, public, protected, dimension(:), allocatable :: &
|
integer, public, protected, dimension(:), allocatable :: &
|
||||||
discretization_materialAt
|
discretization_materialAt
|
||||||
|
@ -51,8 +51,8 @@ subroutine discretization_init(materialAt,&
|
||||||
|
|
||||||
print'(/,a)', ' <<<+- discretization init -+>>>'; flush(6)
|
print'(/,a)', ' <<<+- discretization init -+>>>'; flush(6)
|
||||||
|
|
||||||
discretization_nElem = size(materialAt,1)
|
discretization_Nelems = size(materialAt,1)
|
||||||
discretization_nIP = size(IPcoords0,2)/discretization_nElem
|
discretization_nIPs = size(IPcoords0,2)/discretization_Nelems
|
||||||
|
|
||||||
discretization_materialAt = materialAt
|
discretization_materialAt = materialAt
|
||||||
|
|
||||||
|
|
|
@ -158,7 +158,7 @@ subroutine homogenization_init
|
||||||
debugHomog%grain = config_debug%get_asInt('grain',defaultVal = 1)
|
debugHomog%grain = config_debug%get_asInt('grain',defaultVal = 1)
|
||||||
|
|
||||||
if (debugHomog%grain < 1 &
|
if (debugHomog%grain < 1 &
|
||||||
.or. debugHomog%grain > homogenization_Nconstituent(material_homogenizationAt(debugHomog%element))) &
|
.or. debugHomog%grain > homogenization_Nconstituents(material_homogenizationAt(debugHomog%element))) &
|
||||||
call IO_error(602,ext_msg='constituent', el=debugHomog%element, g=debugHomog%grain)
|
call IO_error(602,ext_msg='constituent', el=debugHomog%element, g=debugHomog%grain)
|
||||||
|
|
||||||
|
|
||||||
|
@ -181,10 +181,10 @@ subroutine homogenization_init
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! allocate and initialize global variables
|
! allocate and initialize global variables
|
||||||
allocate(homogenization_dPdF(3,3,3,3,discretization_nIP,discretization_nElem), source=0.0_pReal)
|
allocate(homogenization_dPdF(3,3,3,3,discretization_nIPs,discretization_Nelems), source=0.0_pReal)
|
||||||
homogenization_F0 = spread(spread(math_I3,3,discretization_nIP),4,discretization_nElem) ! initialize to identity
|
homogenization_F0 = spread(spread(math_I3,3,discretization_nIPs),4,discretization_Nelems) ! initialize to identity
|
||||||
homogenization_F = homogenization_F0 ! initialize to identity
|
homogenization_F = homogenization_F0 ! initialize to identity
|
||||||
allocate(homogenization_P(3,3,discretization_nIP,discretization_nElem), source=0.0_pReal)
|
allocate(homogenization_P(3,3,discretization_nIPs,discretization_Nelems), source=0.0_pReal)
|
||||||
|
|
||||||
print'(/,a)', ' <<<+- homogenization init -+>>>'; flush(IO_STDOUT)
|
print'(/,a)', ' <<<+- homogenization init -+>>>'; flush(IO_STDOUT)
|
||||||
|
|
||||||
|
@ -213,13 +213,13 @@ subroutine materialpoint_stressAndItsTangent(dt)
|
||||||
i, & !< integration point number
|
i, & !< integration point number
|
||||||
e, & !< element number
|
e, & !< element number
|
||||||
myNgrains
|
myNgrains
|
||||||
real(pReal), dimension(discretization_nIP,discretization_nElem) :: &
|
real(pReal), dimension(discretization_nIPs,discretization_Nelems) :: &
|
||||||
subFrac, &
|
subFrac, &
|
||||||
subStep
|
subStep
|
||||||
logical, dimension(discretization_nIP,discretization_nElem) :: &
|
logical, dimension(discretization_nIPs,discretization_Nelems) :: &
|
||||||
requested, &
|
requested, &
|
||||||
converged
|
converged
|
||||||
logical, dimension(2,discretization_nIP,discretization_nElem) :: &
|
logical, dimension(2,discretization_nIPs,discretization_Nelems) :: &
|
||||||
doneAndHappy
|
doneAndHappy
|
||||||
|
|
||||||
|
|
||||||
|
@ -257,7 +257,7 @@ subroutine materialpoint_stressAndItsTangent(dt)
|
||||||
|
|
||||||
!$OMP PARALLEL DO
|
!$OMP PARALLEL DO
|
||||||
elementLooping1: do e = FEsolving_execElem(1),FEsolving_execElem(2)
|
elementLooping1: do e = FEsolving_execElem(1),FEsolving_execElem(2)
|
||||||
myNgrains = homogenization_Nconstituent(material_homogenizationAt(e))
|
myNgrains = homogenization_Nconstituents(material_homogenizationAt(e))
|
||||||
IpLooping1: do i = FEsolving_execIP(1),FEsolving_execIP(2)
|
IpLooping1: do i = FEsolving_execIP(1),FEsolving_execIP(2)
|
||||||
|
|
||||||
if (converged(i,e)) then
|
if (converged(i,e)) then
|
||||||
|
@ -327,7 +327,7 @@ subroutine materialpoint_stressAndItsTangent(dt)
|
||||||
! deformation partitioning
|
! deformation partitioning
|
||||||
!$OMP PARALLEL DO PRIVATE(myNgrains)
|
!$OMP PARALLEL DO PRIVATE(myNgrains)
|
||||||
elementLooping2: do e = FEsolving_execElem(1),FEsolving_execElem(2)
|
elementLooping2: do e = FEsolving_execElem(1),FEsolving_execElem(2)
|
||||||
myNgrains = homogenization_Nconstituent(material_homogenizationAt(e))
|
myNgrains = homogenization_Nconstituents(material_homogenizationAt(e))
|
||||||
IpLooping2: do i = FEsolving_execIP(1),FEsolving_execIP(2)
|
IpLooping2: do i = FEsolving_execIP(1),FEsolving_execIP(2)
|
||||||
if(requested(i,e) .and. .not. doneAndHappy(1,i,e)) then ! requested but not yet done
|
if(requested(i,e) .and. .not. doneAndHappy(1,i,e)) then ! requested but not yet done
|
||||||
call partitionDeformation(homogenization_F0(1:3,1:3,i,e) &
|
call partitionDeformation(homogenization_F0(1:3,1:3,i,e) &
|
||||||
|
@ -408,12 +408,12 @@ subroutine partitionDeformation(subF,ip,el)
|
||||||
|
|
||||||
case (HOMOGENIZATION_ISOSTRAIN_ID) chosenHomogenization
|
case (HOMOGENIZATION_ISOSTRAIN_ID) chosenHomogenization
|
||||||
call mech_isostrain_partitionDeformation(&
|
call mech_isostrain_partitionDeformation(&
|
||||||
crystallite_partitionedF(1:3,1:3,1:homogenization_Nconstituent(material_homogenizationAt(el)),ip,el), &
|
crystallite_partitionedF(1:3,1:3,1:homogenization_Nconstituents(material_homogenizationAt(el)),ip,el), &
|
||||||
subF)
|
subF)
|
||||||
|
|
||||||
case (HOMOGENIZATION_RGC_ID) chosenHomogenization
|
case (HOMOGENIZATION_RGC_ID) chosenHomogenization
|
||||||
call mech_RGC_partitionDeformation(&
|
call mech_RGC_partitionDeformation(&
|
||||||
crystallite_partitionedF(1:3,1:3,1:homogenization_Nconstituent(material_homogenizationAt(el)),ip,el), &
|
crystallite_partitionedF(1:3,1:3,1:homogenization_Nconstituents(material_homogenizationAt(el)),ip,el), &
|
||||||
subF,&
|
subF,&
|
||||||
ip, &
|
ip, &
|
||||||
el)
|
el)
|
||||||
|
@ -437,19 +437,19 @@ function updateState(subdt,subF,ip,el)
|
||||||
el !< element number
|
el !< element number
|
||||||
integer :: c
|
integer :: c
|
||||||
logical, dimension(2) :: updateState
|
logical, dimension(2) :: updateState
|
||||||
real(pReal) :: dPdFs(3,3,3,3,homogenization_Nconstituent(material_homogenizationAt(el)))
|
real(pReal) :: dPdFs(3,3,3,3,homogenization_Nconstituents(material_homogenizationAt(el)))
|
||||||
|
|
||||||
updateState = .true.
|
updateState = .true.
|
||||||
chosenHomogenization: select case(homogenization_type(material_homogenizationAt(el)))
|
chosenHomogenization: select case(homogenization_type(material_homogenizationAt(el)))
|
||||||
case (HOMOGENIZATION_RGC_ID) chosenHomogenization
|
case (HOMOGENIZATION_RGC_ID) chosenHomogenization
|
||||||
do c=1,homogenization_Nconstituent(material_homogenizationAt(el))
|
do c=1,homogenization_Nconstituents(material_homogenizationAt(el))
|
||||||
dPdFs(:,:,:,:,c) = crystallite_stressTangent(c,ip,el)
|
dPdFs(:,:,:,:,c) = crystallite_stressTangent(c,ip,el)
|
||||||
enddo
|
enddo
|
||||||
updateState = &
|
updateState = &
|
||||||
updateState .and. &
|
updateState .and. &
|
||||||
mech_RGC_updateState(crystallite_P(1:3,1:3,1:homogenization_Nconstituent(material_homogenizationAt(el)),ip,el), &
|
mech_RGC_updateState(crystallite_P(1:3,1:3,1:homogenization_Nconstituents(material_homogenizationAt(el)),ip,el), &
|
||||||
crystallite_partitionedF(1:3,1:3,1:homogenization_Nconstituent(material_homogenizationAt(el)),ip,el), &
|
crystallite_partitionedF(1:3,1:3,1:homogenization_Nconstituents(material_homogenizationAt(el)),ip,el), &
|
||||||
crystallite_partitionedF0(1:3,1:3,1:homogenization_Nconstituent(material_homogenizationAt(el)),ip,el),&
|
crystallite_partitionedF0(1:3,1:3,1:homogenization_Nconstituents(material_homogenizationAt(el)),ip,el),&
|
||||||
subF,&
|
subF,&
|
||||||
subdt, &
|
subdt, &
|
||||||
dPdFs, &
|
dPdFs, &
|
||||||
|
@ -487,7 +487,7 @@ subroutine averageStressAndItsTangent(ip,el)
|
||||||
ip, & !< integration point
|
ip, & !< integration point
|
||||||
el !< element number
|
el !< element number
|
||||||
integer :: c
|
integer :: c
|
||||||
real(pReal) :: dPdFs(3,3,3,3,homogenization_Nconstituent(material_homogenizationAt(el)))
|
real(pReal) :: dPdFs(3,3,3,3,homogenization_Nconstituents(material_homogenizationAt(el)))
|
||||||
|
|
||||||
|
|
||||||
chosenHomogenization: select case(homogenization_type(material_homogenizationAt(el)))
|
chosenHomogenization: select case(homogenization_type(material_homogenizationAt(el)))
|
||||||
|
@ -496,24 +496,24 @@ subroutine averageStressAndItsTangent(ip,el)
|
||||||
homogenization_dPdF(1:3,1:3,1:3,1:3,ip,el) = crystallite_stressTangent(1,ip,el)
|
homogenization_dPdF(1:3,1:3,1:3,1:3,ip,el) = crystallite_stressTangent(1,ip,el)
|
||||||
|
|
||||||
case (HOMOGENIZATION_ISOSTRAIN_ID) chosenHomogenization
|
case (HOMOGENIZATION_ISOSTRAIN_ID) chosenHomogenization
|
||||||
do c = 1, homogenization_Nconstituent(material_homogenizationAt(el))
|
do c = 1, homogenization_Nconstituents(material_homogenizationAt(el))
|
||||||
dPdFs(:,:,:,:,c) = crystallite_stressTangent(c,ip,el)
|
dPdFs(:,:,:,:,c) = crystallite_stressTangent(c,ip,el)
|
||||||
enddo
|
enddo
|
||||||
call mech_isostrain_averageStressAndItsTangent(&
|
call mech_isostrain_averageStressAndItsTangent(&
|
||||||
homogenization_P(1:3,1:3,ip,el), &
|
homogenization_P(1:3,1:3,ip,el), &
|
||||||
homogenization_dPdF(1:3,1:3,1:3,1:3,ip,el),&
|
homogenization_dPdF(1:3,1:3,1:3,1:3,ip,el),&
|
||||||
crystallite_P(1:3,1:3,1:homogenization_Nconstituent(material_homogenizationAt(el)),ip,el), &
|
crystallite_P(1:3,1:3,1:homogenization_Nconstituents(material_homogenizationAt(el)),ip,el), &
|
||||||
dPdFs, &
|
dPdFs, &
|
||||||
homogenization_typeInstance(material_homogenizationAt(el)))
|
homogenization_typeInstance(material_homogenizationAt(el)))
|
||||||
|
|
||||||
case (HOMOGENIZATION_RGC_ID) chosenHomogenization
|
case (HOMOGENIZATION_RGC_ID) chosenHomogenization
|
||||||
do c = 1, homogenization_Nconstituent(material_homogenizationAt(el))
|
do c = 1, homogenization_Nconstituents(material_homogenizationAt(el))
|
||||||
dPdFs(:,:,:,:,c) = crystallite_stressTangent(c,ip,el)
|
dPdFs(:,:,:,:,c) = crystallite_stressTangent(c,ip,el)
|
||||||
enddo
|
enddo
|
||||||
call mech_RGC_averageStressAndItsTangent(&
|
call mech_RGC_averageStressAndItsTangent(&
|
||||||
homogenization_P(1:3,1:3,ip,el), &
|
homogenization_P(1:3,1:3,ip,el), &
|
||||||
homogenization_dPdF(1:3,1:3,1:3,1:3,ip,el),&
|
homogenization_dPdF(1:3,1:3,1:3,1:3,ip,el),&
|
||||||
crystallite_P(1:3,1:3,1:homogenization_Nconstituent(material_homogenizationAt(el)),ip,el), &
|
crystallite_P(1:3,1:3,1:homogenization_Nconstituents(material_homogenizationAt(el)),ip,el), &
|
||||||
dPdFs, &
|
dPdFs, &
|
||||||
homogenization_typeInstance(material_homogenizationAt(el)))
|
homogenization_typeInstance(material_homogenizationAt(el)))
|
||||||
end select chosenHomogenization
|
end select chosenHomogenization
|
||||||
|
@ -539,10 +539,10 @@ subroutine homogenization_results
|
||||||
|
|
||||||
group = trim(group_base)//'/generic'
|
group = trim(group_base)//'/generic'
|
||||||
call results_closeGroup(results_addGroup(group))
|
call results_closeGroup(results_addGroup(group))
|
||||||
!temp = reshape(homogenization_F,[3,3,discretization_nIP*discretization_nElem])
|
!temp = reshape(homogenization_F,[3,3,discretization_nIPs*discretization_Nelems])
|
||||||
!call results_writeDataset(group,temp,'F',&
|
!call results_writeDataset(group,temp,'F',&
|
||||||
! 'deformation gradient','1')
|
! 'deformation gradient','1')
|
||||||
!temp = reshape(homogenization_P,[3,3,discretization_nIP*discretization_nElem])
|
!temp = reshape(homogenization_P,[3,3,discretization_nIPs*discretization_Nelems])
|
||||||
!call results_writeDataset(group,temp,'P',&
|
!call results_writeDataset(group,temp,'P',&
|
||||||
! '1st Piola-Kirchhoff stress','Pa')
|
! '1st Piola-Kirchhoff stress','Pa')
|
||||||
|
|
||||||
|
|
|
@ -164,7 +164,7 @@ module subroutine mech_RGC_init(num_homogMech)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
prm%N_constituents = homogMech%get_asInts('cluster_size',requiredSize=3)
|
prm%N_constituents = homogMech%get_asInts('cluster_size',requiredSize=3)
|
||||||
if (homogenization_Nconstituent(h) /= product(prm%N_constituents)) &
|
if (homogenization_Nconstituents(h) /= product(prm%N_constituents)) &
|
||||||
call IO_error(211,ext_msg='N_constituents (mech_RGC)')
|
call IO_error(211,ext_msg='N_constituents (mech_RGC)')
|
||||||
|
|
||||||
prm%xi_alpha = homogMech%get_asFloat('xi_alpha')
|
prm%xi_alpha = homogMech%get_asFloat('xi_alpha')
|
||||||
|
|
|
@ -51,7 +51,7 @@ module subroutine mech_isostrain_init
|
||||||
homogMech => homog%get('mech')
|
homogMech => homog%get('mech')
|
||||||
associate(prm => param(homogenization_typeInstance(h)))
|
associate(prm => param(homogenization_typeInstance(h)))
|
||||||
|
|
||||||
prm%N_constituents = homogenization_Nconstituent(h)
|
prm%N_constituents = homogenization_Nconstituents(h)
|
||||||
select case(homogMech%get_asString('mapping',defaultVal = 'sum'))
|
select case(homogMech%get_asString('mapping',defaultVal = 'sum'))
|
||||||
case ('sum')
|
case ('sum')
|
||||||
prm%mapping = parallel_ID
|
prm%mapping = parallel_ID
|
||||||
|
|
|
@ -26,7 +26,7 @@ module subroutine mech_none_init
|
||||||
do h = 1, size(homogenization_type)
|
do h = 1, size(homogenization_type)
|
||||||
if(homogenization_type(h) /= HOMOGENIZATION_NONE_ID) cycle
|
if(homogenization_type(h) /= HOMOGENIZATION_NONE_ID) cycle
|
||||||
|
|
||||||
if(homogenization_Nconstituent(h) /= 1) &
|
if(homogenization_Nconstituents(h) /= 1) &
|
||||||
call IO_error(211,ext_msg='N_constituents (mech_none)')
|
call IO_error(211,ext_msg='N_constituents (mech_none)')
|
||||||
|
|
||||||
NofMyHomog = count(material_homogenizationAt == h)
|
NofMyHomog = count(material_homogenizationAt == h)
|
||||||
|
|
|
@ -64,10 +64,10 @@ module material
|
||||||
homogenization_type !< type of each homogenization
|
homogenization_type !< type of each homogenization
|
||||||
|
|
||||||
integer, public, protected :: &
|
integer, public, protected :: &
|
||||||
homogenization_maxNconstituent !< max number of grains in any USED homogenization
|
homogenization_maxNconstituents !< max number of grains in any USED homogenization
|
||||||
|
|
||||||
integer, dimension(:), allocatable, public, protected :: &
|
integer, dimension(:), allocatable, public, protected :: &
|
||||||
homogenization_Nconstituent, & !< number of grains in each homogenization
|
homogenization_Nconstituents, & !< number of grains in each homogenization
|
||||||
homogenization_typeInstance, & !< instance of particular type of each homogenization
|
homogenization_typeInstance, & !< instance of particular type of each homogenization
|
||||||
thermal_typeInstance, & !< instance of particular type of each thermal transport
|
thermal_typeInstance, & !< instance of particular type of each thermal transport
|
||||||
damage_typeInstance !< instance of particular type of each nonlocal damage
|
damage_typeInstance !< instance of particular type of each nonlocal damage
|
||||||
|
@ -183,7 +183,7 @@ subroutine material_init(restart)
|
||||||
|
|
||||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
! BEGIN DEPRECATED
|
! BEGIN DEPRECATED
|
||||||
allocate(mappingHomogenizationConst( discretization_nIP,discretization_nElem),source=1)
|
allocate(mappingHomogenizationConst( discretization_nIPs,discretization_Nelems),source=1)
|
||||||
|
|
||||||
! hack needed to initialize field values used during constitutive initialization
|
! hack needed to initialize field values used during constitutive initialization
|
||||||
do myHomog = 1, size(material_name_homogenization)
|
do myHomog = 1, size(material_name_homogenization)
|
||||||
|
@ -312,29 +312,29 @@ subroutine material_parseMaterial
|
||||||
material_name_phase = getKeys(phases)
|
material_name_phase = getKeys(phases)
|
||||||
material_name_homogenization = getKeys(homogenizations)
|
material_name_homogenization = getKeys(homogenizations)
|
||||||
|
|
||||||
allocate(homogenization_Nconstituent(homogenizations%length))
|
allocate(homogenization_Nconstituents(homogenizations%length))
|
||||||
do h=1, homogenizations%length
|
do h=1, homogenizations%length
|
||||||
homogenization => homogenizations%get(h)
|
homogenization => homogenizations%get(h)
|
||||||
homogenization_Nconstituent(h) = homogenization%get_asInt('N_constituents')
|
homogenization_Nconstituents(h) = homogenization%get_asInt('N_constituents')
|
||||||
enddo
|
enddo
|
||||||
homogenization_maxNconstituent = maxval(homogenization_Nconstituent)
|
homogenization_maxNconstituents = maxval(homogenization_Nconstituents)
|
||||||
|
|
||||||
allocate(counterPhase(phases%length),source=0)
|
allocate(counterPhase(phases%length),source=0)
|
||||||
allocate(counterHomogenization(homogenizations%length),source=0)
|
allocate(counterHomogenization(homogenizations%length),source=0)
|
||||||
|
|
||||||
allocate(material_homogenizationAt(discretization_nElem),source=0)
|
allocate(material_homogenizationAt(discretization_Nelems),source=0)
|
||||||
allocate(material_homogenizationMemberAt(discretization_nIP,discretization_nElem),source=0)
|
allocate(material_homogenizationMemberAt(discretization_nIPs,discretization_Nelems),source=0)
|
||||||
allocate(material_phaseAt(homogenization_maxNconstituent,discretization_nElem),source=0)
|
allocate(material_phaseAt(homogenization_maxNconstituents,discretization_Nelems),source=0)
|
||||||
allocate(material_phaseMemberAt(homogenization_maxNconstituent,discretization_nIP,discretization_nElem),source=0)
|
allocate(material_phaseMemberAt(homogenization_maxNconstituents,discretization_nIPs,discretization_Nelems),source=0)
|
||||||
|
|
||||||
allocate(material_orientation0(homogenization_maxNconstituent,discretization_nIP,discretization_nElem))
|
allocate(material_orientation0(homogenization_maxNconstituents,discretization_nIPs,discretization_Nelems))
|
||||||
|
|
||||||
do e = 1, discretization_nElem
|
do e = 1, discretization_Nelems
|
||||||
material => materials%get(discretization_materialAt(e))
|
material => materials%get(discretization_materialAt(e))
|
||||||
constituents => material%get('constituents')
|
constituents => material%get('constituents')
|
||||||
|
|
||||||
material_homogenizationAt(e) = homogenizations%getIndex(material%get_asString('homogenization'))
|
material_homogenizationAt(e) = homogenizations%getIndex(material%get_asString('homogenization'))
|
||||||
do i = 1, discretization_nIP
|
do i = 1, discretization_nIPs
|
||||||
counterHomogenization(material_homogenizationAt(e)) = counterHomogenization(material_homogenizationAt(e)) + 1
|
counterHomogenization(material_homogenizationAt(e)) = counterHomogenization(material_homogenizationAt(e)) + 1
|
||||||
material_homogenizationMemberAt(i,e) = counterHomogenization(material_homogenizationAt(e))
|
material_homogenizationMemberAt(i,e) = counterHomogenization(material_homogenizationAt(e))
|
||||||
enddo
|
enddo
|
||||||
|
@ -345,7 +345,7 @@ subroutine material_parseMaterial
|
||||||
frac = frac + constituent%get_asFloat('fraction')
|
frac = frac + constituent%get_asFloat('fraction')
|
||||||
|
|
||||||
material_phaseAt(c,e) = phases%getIndex(constituent%get_asString('phase'))
|
material_phaseAt(c,e) = phases%getIndex(constituent%get_asString('phase'))
|
||||||
do i = 1, discretization_nIP
|
do i = 1, discretization_nIPs
|
||||||
counterPhase(material_phaseAt(c,e)) = counterPhase(material_phaseAt(c,e)) + 1
|
counterPhase(material_phaseAt(c,e)) = counterPhase(material_phaseAt(c,e)) + 1
|
||||||
material_phaseMemberAt(c,i,e) = counterPhase(material_phaseAt(c,e))
|
material_phaseMemberAt(c,i,e) = counterPhase(material_phaseAt(c,e))
|
||||||
|
|
||||||
|
|
|
@ -100,7 +100,7 @@ module function source_damage_anisoBrittle_init(source_length) result(mySources)
|
||||||
if (any(prm%g_crit < 0.0_pReal)) extmsg = trim(extmsg)//' g_crit'
|
if (any(prm%g_crit < 0.0_pReal)) extmsg = trim(extmsg)//' g_crit'
|
||||||
if (any(prm%s_crit < 0.0_pReal)) extmsg = trim(extmsg)//' s_crit'
|
if (any(prm%s_crit < 0.0_pReal)) extmsg = trim(extmsg)//' s_crit'
|
||||||
|
|
||||||
NipcMyPhase = count(material_phaseAt==p) * discretization_nIP
|
NipcMyPhase = count(material_phaseAt==p) * discretization_nIPs
|
||||||
call constitutive_allocateState(sourceState(p)%p(sourceOffset),NipcMyPhase,1,1,0)
|
call constitutive_allocateState(sourceState(p)%p(sourceOffset),NipcMyPhase,1,1,0)
|
||||||
sourceState(p)%p(sourceOffset)%atol = src%get_asFloat('anisobrittle_atol',defaultVal=1.0e-3_pReal)
|
sourceState(p)%p(sourceOffset)%atol = src%get_asFloat('anisobrittle_atol',defaultVal=1.0e-3_pReal)
|
||||||
if(any(sourceState(p)%p(sourceOffset)%atol < 0.0_pReal)) extmsg = trim(extmsg)//' anisobrittle_atol'
|
if(any(sourceState(p)%p(sourceOffset)%atol < 0.0_pReal)) extmsg = trim(extmsg)//' anisobrittle_atol'
|
||||||
|
|
|
@ -84,7 +84,7 @@ module function source_damage_anisoDuctile_init(source_length) result(mySources)
|
||||||
if (prm%q <= 0.0_pReal) extmsg = trim(extmsg)//' q'
|
if (prm%q <= 0.0_pReal) extmsg = trim(extmsg)//' q'
|
||||||
if (any(prm%gamma_crit < 0.0_pReal)) extmsg = trim(extmsg)//' gamma_crit'
|
if (any(prm%gamma_crit < 0.0_pReal)) extmsg = trim(extmsg)//' gamma_crit'
|
||||||
|
|
||||||
NipcMyPhase=count(material_phaseAt==p) * discretization_nIP
|
NipcMyPhase=count(material_phaseAt==p) * discretization_nIPs
|
||||||
call constitutive_allocateState(sourceState(p)%p(sourceOffset),NipcMyPhase,1,1,0)
|
call constitutive_allocateState(sourceState(p)%p(sourceOffset),NipcMyPhase,1,1,0)
|
||||||
sourceState(p)%p(sourceOffset)%atol = src%get_asFloat('anisoDuctile_atol',defaultVal=1.0e-3_pReal)
|
sourceState(p)%p(sourceOffset)%atol = src%get_asFloat('anisoDuctile_atol',defaultVal=1.0e-3_pReal)
|
||||||
if(any(sourceState(p)%p(sourceOffset)%atol < 0.0_pReal)) extmsg = trim(extmsg)//' anisoductile_atol'
|
if(any(sourceState(p)%p(sourceOffset)%atol < 0.0_pReal)) extmsg = trim(extmsg)//' anisoductile_atol'
|
||||||
|
|
|
@ -73,7 +73,7 @@ module function source_damage_isoBrittle_init(source_length) result(mySources)
|
||||||
! sanity checks
|
! sanity checks
|
||||||
if (prm%W_crit <= 0.0_pReal) extmsg = trim(extmsg)//' W_crit'
|
if (prm%W_crit <= 0.0_pReal) extmsg = trim(extmsg)//' W_crit'
|
||||||
|
|
||||||
NipcMyPhase = count(material_phaseAt==p) * discretization_nIP
|
NipcMyPhase = count(material_phaseAt==p) * discretization_nIPs
|
||||||
call constitutive_allocateState(sourceState(p)%p(sourceOffset),NipcMyPhase,1,1,1)
|
call constitutive_allocateState(sourceState(p)%p(sourceOffset),NipcMyPhase,1,1,1)
|
||||||
sourceState(p)%p(sourceOffset)%atol = src%get_asFloat('isoBrittle_atol',defaultVal=1.0e-3_pReal)
|
sourceState(p)%p(sourceOffset)%atol = src%get_asFloat('isoBrittle_atol',defaultVal=1.0e-3_pReal)
|
||||||
if(any(sourceState(p)%p(sourceOffset)%atol < 0.0_pReal)) extmsg = trim(extmsg)//' isobrittle_atol'
|
if(any(sourceState(p)%p(sourceOffset)%atol < 0.0_pReal)) extmsg = trim(extmsg)//' isobrittle_atol'
|
||||||
|
|
|
@ -77,7 +77,7 @@ module function source_damage_isoDuctile_init(source_length) result(mySources)
|
||||||
if (prm%q <= 0.0_pReal) extmsg = trim(extmsg)//' q'
|
if (prm%q <= 0.0_pReal) extmsg = trim(extmsg)//' q'
|
||||||
if (prm%gamma_crit <= 0.0_pReal) extmsg = trim(extmsg)//' gamma_crit'
|
if (prm%gamma_crit <= 0.0_pReal) extmsg = trim(extmsg)//' gamma_crit'
|
||||||
|
|
||||||
NipcMyPhase=count(material_phaseAt==p) * discretization_nIP
|
NipcMyPhase=count(material_phaseAt==p) * discretization_nIPs
|
||||||
call constitutive_allocateState(sourceState(p)%p(sourceOffset),NipcMyPhase,1,1,0)
|
call constitutive_allocateState(sourceState(p)%p(sourceOffset),NipcMyPhase,1,1,0)
|
||||||
sourceState(p)%p(sourceOffset)%atol = src%get_asFloat('isoDuctile_atol',defaultVal=1.0e-3_pReal)
|
sourceState(p)%p(sourceOffset)%atol = src%get_asFloat('isoDuctile_atol',defaultVal=1.0e-3_pReal)
|
||||||
if(any(sourceState(p)%p(sourceOffset)%atol < 0.0_pReal)) extmsg = trim(extmsg)//' isoductile_atol'
|
if(any(sourceState(p)%p(sourceOffset)%atol < 0.0_pReal)) extmsg = trim(extmsg)//' isoductile_atol'
|
||||||
|
|
|
@ -61,7 +61,7 @@ module function source_thermal_dissipation_init(source_length) result(mySources)
|
||||||
|
|
||||||
src => sources%get(sourceOffset)
|
src => sources%get(sourceOffset)
|
||||||
prm%kappa = src%get_asFloat('kappa')
|
prm%kappa = src%get_asFloat('kappa')
|
||||||
NipcMyPhase = count(material_phaseAt==p) * discretization_nIP
|
NipcMyPhase = count(material_phaseAt==p) * discretization_nIPs
|
||||||
call constitutive_allocateState(sourceState(p)%p(sourceOffset),NipcMyPhase,0,0,0)
|
call constitutive_allocateState(sourceState(p)%p(sourceOffset),NipcMyPhase,0,0,0)
|
||||||
|
|
||||||
end associate
|
end associate
|
||||||
|
|
|
@ -69,7 +69,7 @@ module function source_thermal_externalheat_init(source_length) result(mySources
|
||||||
|
|
||||||
prm%f_T = src%get_asFloats('f_T',requiredSize = size(prm%t_n))
|
prm%f_T = src%get_asFloats('f_T',requiredSize = size(prm%t_n))
|
||||||
|
|
||||||
NipcMyPhase = count(material_phaseAt==p) * discretization_nIP
|
NipcMyPhase = count(material_phaseAt==p) * discretization_nIPs
|
||||||
call constitutive_allocateState(sourceState(p)%p(sourceOffset),NipcMyPhase,1,1,0)
|
call constitutive_allocateState(sourceState(p)%p(sourceOffset),NipcMyPhase,1,1,0)
|
||||||
end associate
|
end associate
|
||||||
|
|
||||||
|
|
|
@ -145,8 +145,8 @@ subroutine thermal_adiabatic_getSourceAndItsTangent(Tdot, dTdot_dT, T, ip, el)
|
||||||
homog = material_homogenizationAt(el)
|
homog = material_homogenizationAt(el)
|
||||||
call constitutive_thermal_getRateAndItsTangents(TDot, dTDot_dT, T, crystallite_S, crystallite_Lp, ip, el)
|
call constitutive_thermal_getRateAndItsTangents(TDot, dTDot_dT, T, crystallite_S, crystallite_Lp, ip, el)
|
||||||
|
|
||||||
Tdot = Tdot/real(homogenization_Nconstituent(homog),pReal)
|
Tdot = Tdot/real(homogenization_Nconstituents(homog),pReal)
|
||||||
dTdot_dT = dTdot_dT/real(homogenization_Nconstituent(homog),pReal)
|
dTdot_dT = dTdot_dT/real(homogenization_Nconstituents(homog),pReal)
|
||||||
|
|
||||||
end subroutine thermal_adiabatic_getSourceAndItsTangent
|
end subroutine thermal_adiabatic_getSourceAndItsTangent
|
||||||
|
|
||||||
|
@ -167,13 +167,13 @@ function thermal_adiabatic_getSpecificHeat(ip,el)
|
||||||
|
|
||||||
thermal_adiabatic_getSpecificHeat = 0.0_pReal
|
thermal_adiabatic_getSpecificHeat = 0.0_pReal
|
||||||
|
|
||||||
do grain = 1, homogenization_Nconstituent(material_homogenizationAt(el))
|
do grain = 1, homogenization_Nconstituents(material_homogenizationAt(el))
|
||||||
thermal_adiabatic_getSpecificHeat = thermal_adiabatic_getSpecificHeat &
|
thermal_adiabatic_getSpecificHeat = thermal_adiabatic_getSpecificHeat &
|
||||||
+ lattice_c_p(material_phaseAt(grain,el))
|
+ lattice_c_p(material_phaseAt(grain,el))
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
thermal_adiabatic_getSpecificHeat = thermal_adiabatic_getSpecificHeat &
|
thermal_adiabatic_getSpecificHeat = thermal_adiabatic_getSpecificHeat &
|
||||||
/ real(homogenization_Nconstituent(material_homogenizationAt(el)),pReal)
|
/ real(homogenization_Nconstituents(material_homogenizationAt(el)),pReal)
|
||||||
|
|
||||||
end function thermal_adiabatic_getSpecificHeat
|
end function thermal_adiabatic_getSpecificHeat
|
||||||
|
|
||||||
|
@ -193,13 +193,13 @@ function thermal_adiabatic_getMassDensity(ip,el)
|
||||||
|
|
||||||
thermal_adiabatic_getMassDensity = 0.0_pReal
|
thermal_adiabatic_getMassDensity = 0.0_pReal
|
||||||
|
|
||||||
do grain = 1, homogenization_Nconstituent(material_homogenizationAt(el))
|
do grain = 1, homogenization_Nconstituents(material_homogenizationAt(el))
|
||||||
thermal_adiabatic_getMassDensity = thermal_adiabatic_getMassDensity &
|
thermal_adiabatic_getMassDensity = thermal_adiabatic_getMassDensity &
|
||||||
+ lattice_rho(material_phaseAt(grain,el))
|
+ lattice_rho(material_phaseAt(grain,el))
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
thermal_adiabatic_getMassDensity = thermal_adiabatic_getMassDensity &
|
thermal_adiabatic_getMassDensity = thermal_adiabatic_getMassDensity &
|
||||||
/ real(homogenization_Nconstituent(material_homogenizationAt(el)),pReal)
|
/ real(homogenization_Nconstituents(material_homogenizationAt(el)),pReal)
|
||||||
|
|
||||||
end function thermal_adiabatic_getMassDensity
|
end function thermal_adiabatic_getMassDensity
|
||||||
|
|
||||||
|
|
|
@ -104,8 +104,8 @@ subroutine thermal_conduction_getSourceAndItsTangent(Tdot, dTdot_dT, T, ip, el)
|
||||||
homog = material_homogenizationAt(el)
|
homog = material_homogenizationAt(el)
|
||||||
call constitutive_thermal_getRateAndItsTangents(TDot, dTDot_dT, T, crystallite_S,crystallite_Lp ,ip, el)
|
call constitutive_thermal_getRateAndItsTangents(TDot, dTDot_dT, T, crystallite_S,crystallite_Lp ,ip, el)
|
||||||
|
|
||||||
Tdot = Tdot/real(homogenization_Nconstituent(homog),pReal)
|
Tdot = Tdot/real(homogenization_Nconstituents(homog),pReal)
|
||||||
dTdot_dT = dTdot_dT/real(homogenization_Nconstituent(homog),pReal)
|
dTdot_dT = dTdot_dT/real(homogenization_Nconstituents(homog),pReal)
|
||||||
|
|
||||||
end subroutine thermal_conduction_getSourceAndItsTangent
|
end subroutine thermal_conduction_getSourceAndItsTangent
|
||||||
|
|
||||||
|
@ -125,13 +125,13 @@ function thermal_conduction_getConductivity(ip,el)
|
||||||
|
|
||||||
|
|
||||||
thermal_conduction_getConductivity = 0.0_pReal
|
thermal_conduction_getConductivity = 0.0_pReal
|
||||||
do grain = 1, homogenization_Nconstituent(material_homogenizationAt(el))
|
do grain = 1, homogenization_Nconstituents(material_homogenizationAt(el))
|
||||||
thermal_conduction_getConductivity = thermal_conduction_getConductivity + &
|
thermal_conduction_getConductivity = thermal_conduction_getConductivity + &
|
||||||
crystallite_push33ToRef(grain,ip,el,lattice_K(:,:,material_phaseAt(grain,el)))
|
crystallite_push33ToRef(grain,ip,el,lattice_K(:,:,material_phaseAt(grain,el)))
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
thermal_conduction_getConductivity = thermal_conduction_getConductivity &
|
thermal_conduction_getConductivity = thermal_conduction_getConductivity &
|
||||||
/ real(homogenization_Nconstituent(material_homogenizationAt(el)),pReal)
|
/ real(homogenization_Nconstituents(material_homogenizationAt(el)),pReal)
|
||||||
|
|
||||||
end function thermal_conduction_getConductivity
|
end function thermal_conduction_getConductivity
|
||||||
|
|
||||||
|
@ -151,13 +151,13 @@ function thermal_conduction_getSpecificHeat(ip,el)
|
||||||
|
|
||||||
thermal_conduction_getSpecificHeat = 0.0_pReal
|
thermal_conduction_getSpecificHeat = 0.0_pReal
|
||||||
|
|
||||||
do grain = 1, homogenization_Nconstituent(material_homogenizationAt(el))
|
do grain = 1, homogenization_Nconstituents(material_homogenizationAt(el))
|
||||||
thermal_conduction_getSpecificHeat = thermal_conduction_getSpecificHeat &
|
thermal_conduction_getSpecificHeat = thermal_conduction_getSpecificHeat &
|
||||||
+ lattice_c_p(material_phaseAt(grain,el))
|
+ lattice_c_p(material_phaseAt(grain,el))
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
thermal_conduction_getSpecificHeat = thermal_conduction_getSpecificHeat &
|
thermal_conduction_getSpecificHeat = thermal_conduction_getSpecificHeat &
|
||||||
/ real(homogenization_Nconstituent(material_homogenizationAt(el)),pReal)
|
/ real(homogenization_Nconstituents(material_homogenizationAt(el)),pReal)
|
||||||
|
|
||||||
end function thermal_conduction_getSpecificHeat
|
end function thermal_conduction_getSpecificHeat
|
||||||
|
|
||||||
|
@ -178,13 +178,13 @@ function thermal_conduction_getMassDensity(ip,el)
|
||||||
thermal_conduction_getMassDensity = 0.0_pReal
|
thermal_conduction_getMassDensity = 0.0_pReal
|
||||||
|
|
||||||
|
|
||||||
do grain = 1, homogenization_Nconstituent(material_homogenizationAt(el))
|
do grain = 1, homogenization_Nconstituents(material_homogenizationAt(el))
|
||||||
thermal_conduction_getMassDensity = thermal_conduction_getMassDensity &
|
thermal_conduction_getMassDensity = thermal_conduction_getMassDensity &
|
||||||
+ lattice_rho(material_phaseAt(grain,el))
|
+ lattice_rho(material_phaseAt(grain,el))
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
thermal_conduction_getMassDensity = thermal_conduction_getMassDensity &
|
thermal_conduction_getMassDensity = thermal_conduction_getMassDensity &
|
||||||
/ real(homogenization_Nconstituent(material_homogenizationAt(el)),pReal)
|
/ real(homogenization_Nconstituents(material_homogenizationAt(el)),pReal)
|
||||||
|
|
||||||
end function thermal_conduction_getMassDensity
|
end function thermal_conduction_getMassDensity
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue