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:
parent
0d95d33646
commit
e912c74da5
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue