added possibility to select "mapping" of multiple grains.

'average', 'avg', 'mean' --> result averaged over Ngrains.
'parallel', 'sum' --> result added up from Ngrains.
This commit is contained in:
Philip Eisenlohr 2013-04-30 09:40:06 +00:00
parent 0d95d33646
commit e912c74da5
1 changed files with 20 additions and 5 deletions

View File

@ -39,7 +39,8 @@ module homogenization_isostrain
homogenization_isostrain_sizePostResult homogenization_isostrain_sizePostResult
character(len=64), dimension(:,:), allocatable, target, public :: & character(len=64), dimension(:,:), allocatable, target, public :: &
homogenization_isostrain_output !< name of each post result output homogenization_isostrain_output !< name of each post result output
character(len=64), dimension(:), allocatable, private :: &
homogenization_isostrain_mapping
integer(pInt), dimension(:), allocatable, private :: & integer(pInt), dimension(:), allocatable, private :: &
homogenization_isostrain_Ngrains homogenization_isostrain_Ngrains
@ -86,6 +87,7 @@ subroutine homogenization_isostrain_init(myFile)
allocate(homogenization_isostrain_sizePostResult(maxval(homogenization_Noutput), & allocate(homogenization_isostrain_sizePostResult(maxval(homogenization_Noutput), &
maxNinstance)); homogenization_isostrain_sizePostResult = 0_pInt maxNinstance)); homogenization_isostrain_sizePostResult = 0_pInt
allocate(homogenization_isostrain_Ngrains(maxNinstance)); homogenization_isostrain_Ngrains = 0_pInt allocate(homogenization_isostrain_Ngrains(maxNinstance)); homogenization_isostrain_Ngrains = 0_pInt
allocate(homogenization_isostrain_mapping(maxNinstance)); homogenization_isostrain_mapping = 'avg'
allocate(homogenization_isostrain_output(maxval(homogenization_Noutput), & allocate(homogenization_isostrain_output(maxval(homogenization_Noutput), &
maxNinstance)) ; homogenization_isostrain_output = '' maxNinstance)) ; homogenization_isostrain_output = ''
@ -114,6 +116,8 @@ subroutine homogenization_isostrain_init(myFile)
homogenization_isostrain_output(output,i) = IO_lc(IO_stringValue(line,positions,2_pInt)) homogenization_isostrain_output(output,i) = IO_lc(IO_stringValue(line,positions,2_pInt))
case ('ngrains') case ('ngrains')
homogenization_isostrain_Ngrains(i) = IO_intValue(line,positions,2_pInt) homogenization_isostrain_Ngrains(i) = IO_intValue(line,positions,2_pInt)
case ('mapping')
homogenization_isostrain_mapping(i) = IO_lc(IO_stringValue(line,positions,2_pInt))
end select end select
endif endif
enddo enddo
@ -212,7 +216,7 @@ subroutine homogenization_isostrain_averageStressAndItsTangent(avgP,dAvgPdAvgF,P
pReal pReal
use mesh, only: & use mesh, only: &
mesh_element mesh_element
use material, only: homogenization_maxNgrains, homogenization_Ngrains use material, only: homogenization_maxNgrains, homogenization_Ngrains, homogenization_typeInstance
implicit none implicit none
real(pReal), dimension (3,3), intent(out) :: avgP !< average stress at material point real(pReal), dimension (3,3), intent(out) :: avgP !< average stress at material point
@ -222,11 +226,22 @@ subroutine homogenization_isostrain_averageStressAndItsTangent(avgP,dAvgPdAvgF,P
integer(pInt), intent(in) :: & integer(pInt), intent(in) :: &
i, & !< integration point number i, & !< integration point number
e !< element number e !< element number
integer(pInt) :: Ngrains integer(pInt) :: homID,Ngrains
homID = homogenization_typeInstance(mesh_element(3,e))
Ngrains = homogenization_Ngrains(mesh_element(3,e)) Ngrains = homogenization_Ngrains(mesh_element(3,e))
avgP = sum(P,3)/real(Ngrains,pReal)
dAvgPdAvgF = sum(dPdF,5)/real(Ngrains,pReal) select case (homogenization_isostrain_mapping(homID))
case ('parallel','sum')
avgP = sum(P,3)
dAvgPdAvgF = sum(dPdF,5)
case ('average','mean','avg')
avgP = sum(P,3) /real(Ngrains,pReal)
dAvgPdAvgF = sum(dPdF,5)/real(Ngrains,pReal)
case default
avgP = sum(P,3) /real(Ngrains,pReal)
dAvgPdAvgF = sum(dPdF,5)/real(Ngrains,pReal)
end select
end subroutine homogenization_isostrain_averageStressAndItsTangent end subroutine homogenization_isostrain_averageStressAndItsTangent