now with functionality to output a "JOB.outputHomogenization". This contains size descriptions of all requested output variables to be parsed by a further script to generate meaningful names for user defined vars... (watch out!)

This commit is contained in:
Claudio Zambaldi 2010-02-19 18:03:16 +00:00
parent aab5598d96
commit 7526a24a1b
3 changed files with 70 additions and 17 deletions

View File

@ -55,7 +55,7 @@ CONTAINS
subroutine homogenization_init(Temperature) subroutine homogenization_init(Temperature)
use prec, only: pReal,pInt use prec, only: pReal,pInt
use math, only: math_I3 use math, only: math_I3
use IO, only: IO_error, IO_open_file use IO, only: IO_error, IO_open_file, IO_open_jobFile
use mesh, only: mesh_maxNips,mesh_NcpElems,mesh_element,FE_Nips use mesh, only: mesh_maxNips,mesh_NcpElems,mesh_element,FE_Nips
use material use material
use constitutive, only: constitutive_maxSizePostResults use constitutive, only: constitutive_maxSizePostResults
@ -65,7 +65,10 @@ subroutine homogenization_init(Temperature)
real(pReal) Temperature real(pReal) Temperature
integer(pInt), parameter :: fileunit = 200 integer(pInt), parameter :: fileunit = 200
integer(pInt) e,i,g,myInstance,j integer(pInt) e,i,g,p,myInstance,j
integer(pInt), dimension(:,:), pointer :: thisSize
character(len=64), dimension(:,:), pointer :: thisOutput
logical knownHomogenization
if(.not. IO_open_file(fileunit,material_configFile)) call IO_error (100) ! corrupt config file if(.not. IO_open_file(fileunit,material_configFile)) call IO_error (100) ! corrupt config file
@ -74,6 +77,38 @@ subroutine homogenization_init(Temperature)
close(fileunit) close(fileunit)
! write description file for homogenization output
if(.not. IO_open_jobFile(fileunit,'outputHomogenization')) call IO_error (50) ! problems in writing file
do p = 1,material_Nhomogenization
i = homogenization_typeInstance(p) ! which instance of this homogenization type
knownHomogenization = .true. ! assume valid
select case(homogenization_type(p)) ! split per homogenization type
case (homogenization_isostrain_label)
thisOutput => homogenization_isostrain_output
thisSize => homogenization_isostrain_sizePostResult
case (homogenization_RGC_label)
thisOutput => homogenization_RGC_output
thisSize => homogenization_RGC_sizePostResult
case default
knownHomogenization = .false.
end select
write(fileunit,*)
write(fileunit,'(a)') '['//trim(homogenization_name(p))//']'
write(fileunit,*)
if (knownHomogenization) then
write(fileunit,'(a)') '#'//char(9)//'homogenization'//char(9)//trim(homogenization_type(p))
do e = 1,homogenization_Noutput(p)
write(fileunit,'(a,i4)') trim(thisOutput(e,i))//char(9),thisSize(e,i)
enddo
endif
enddo
close(fileunit)
allocate(homogenization_state0(mesh_maxNips,mesh_NcpElems)) allocate(homogenization_state0(mesh_maxNips,mesh_NcpElems))
allocate(homogenization_subState0(mesh_maxNips,mesh_NcpElems)) allocate(homogenization_subState0(mesh_maxNips,mesh_NcpElems))
allocate(homogenization_state(mesh_maxNips,mesh_NcpElems)) allocate(homogenization_state(mesh_maxNips,mesh_NcpElems))

View File

@ -20,12 +20,13 @@ MODULE homogenization_RGC
integer(pInt), dimension(:), allocatable :: homogenization_RGC_sizeState, & integer(pInt), dimension(:), allocatable :: homogenization_RGC_sizeState, &
homogenization_RGC_sizePostResults homogenization_RGC_sizePostResults
integer(pInt), dimension(:,:), allocatable,target :: homogenization_RGC_sizePostResult
integer(pInt), dimension(:,:), allocatable :: homogenization_RGC_Ngrains integer(pInt), dimension(:,:), allocatable :: homogenization_RGC_Ngrains
real(pReal), dimension(:,:), allocatable :: homogenization_RGC_xiAlpha, & real(pReal), dimension(:,:), allocatable :: homogenization_RGC_xiAlpha, &
homogenization_RGC_ciAlpha homogenization_RGC_ciAlpha
real(pReal), dimension(:), allocatable :: homogenization_RGC_maxVol0, & real(pReal), dimension(:), allocatable :: homogenization_RGC_maxVol0, &
homogenization_RGC_vPower0 homogenization_RGC_vPower0
character(len=64), dimension(:,:), allocatable :: homogenization_RGC_output character(len=64), dimension(:,:), allocatable,target :: homogenization_RGC_output ! name of each post result output
CONTAINS CONTAINS
!**************************************** !****************************************
@ -53,7 +54,7 @@ subroutine homogenization_RGC_init(&
integer(pInt), intent(in) :: file integer(pInt), intent(in) :: file
integer(pInt), parameter :: maxNchunks = 4 integer(pInt), parameter :: maxNchunks = 4
integer(pInt), dimension(1+2*maxNchunks) :: positions integer(pInt), dimension(1+2*maxNchunks) :: positions
integer(pInt) section, maxNinstance, i,j,k,l, output integer(pInt) section, maxNinstance, i,j,k,l, output, mySize
character(len=64) tag character(len=64) tag
character(len=1024) line character(len=1024) line
@ -67,6 +68,8 @@ subroutine homogenization_RGC_init(&
allocate(homogenization_RGC_sizeState(maxNinstance)); homogenization_RGC_sizeState = 0_pInt allocate(homogenization_RGC_sizeState(maxNinstance)); homogenization_RGC_sizeState = 0_pInt
allocate(homogenization_RGC_sizePostResults(maxNinstance)); homogenization_RGC_sizePostResults = 0_pInt allocate(homogenization_RGC_sizePostResults(maxNinstance)); homogenization_RGC_sizePostResults = 0_pInt
allocate(homogenization_RGC_sizePostResult(maxval(homogenization_Noutput), &
maxNinstance)); homogenization_RGC_sizePostResult = 0_pInt
allocate(homogenization_RGC_Ngrains(3,maxNinstance)); homogenization_RGC_Ngrains = 0_pInt allocate(homogenization_RGC_Ngrains(3,maxNinstance)); homogenization_RGC_Ngrains = 0_pInt
allocate(homogenization_RGC_ciAlpha(3,maxNinstance)); homogenization_RGC_ciAlpha = 0.0_pReal allocate(homogenization_RGC_ciAlpha(3,maxNinstance)); homogenization_RGC_ciAlpha = 0.0_pReal
allocate(homogenization_RGC_xiAlpha(3,maxNinstance)); homogenization_RGC_xiAlpha = 0.0_pReal allocate(homogenization_RGC_xiAlpha(3,maxNinstance)); homogenization_RGC_xiAlpha = 0.0_pReal
@ -125,20 +128,25 @@ subroutine homogenization_RGC_init(&
do j = 1,maxval(homogenization_Noutput) do j = 1,maxval(homogenization_Noutput)
select case(homogenization_RGC_output(j,i)) select case(homogenization_RGC_output(j,i))
case('constitutivework') case('constitutivework')
homogenization_RGC_sizePostResults(i) = & mySize = 1
homogenization_RGC_sizePostResults(i) + 1
case('magnitudemismatch') case('magnitudemismatch')
homogenization_RGC_sizePostResults(i) = & mySize = 1
homogenization_RGC_sizePostResults(i) + 1
case('penaltyenergy') case('penaltyenergy')
homogenization_RGC_sizePostResults(i) = & mySize = 1
homogenization_RGC_sizePostResults(i) + 1
case('volumediscrepancy') case('volumediscrepancy')
homogenization_RGC_sizePostResults(i) = & mySize = 1
homogenization_RGC_sizePostResults(i) + 1 case default
mySize = 0
end select end select
if (mySize > 0_pInt) then ! any meaningful output found
homogenization_RGC_sizePostResult(j,i) = mySize
homogenization_RGC_sizePostResults(i) = &
homogenization_RGC_sizePostResults(i) + mySize
endif
enddo enddo
homogenization_RGC_sizeState(i) & homogenization_RGC_sizeState(i) &
= 3*(homogenization_RGC_Ngrains(1,i)-1)*homogenization_RGC_Ngrains(2,i)*homogenization_RGC_Ngrains(3,i) & = 3*(homogenization_RGC_Ngrains(1,i)-1)*homogenization_RGC_Ngrains(2,i)*homogenization_RGC_Ngrains(3,i) &
+ 3*homogenization_RGC_Ngrains(1,i)*(homogenization_RGC_Ngrains(2,i)-1)*homogenization_RGC_Ngrains(3,i) & + 3*homogenization_RGC_Ngrains(1,i)*(homogenization_RGC_Ngrains(2,i)-1)*homogenization_RGC_Ngrains(3,i) &

View File

@ -19,9 +19,10 @@ MODULE homogenization_isostrain
character (len=*), parameter :: homogenization_isostrain_label = 'isostrain' character (len=*), parameter :: homogenization_isostrain_label = 'isostrain'
integer(pInt), dimension(:), allocatable :: homogenization_isostrain_sizeState, & integer(pInt), dimension(:), allocatable :: homogenization_isostrain_sizeState, &
homogenization_isostrain_sizePostResults, &
homogenization_isostrain_Ngrains homogenization_isostrain_Ngrains
character(len=64), dimension(:,:), allocatable :: homogenization_isostrain_output integer(pInt), dimension(:), allocatable :: homogenization_isostrain_sizePostResults
integer(pInt), dimension(:,:), allocatable,target :: homogenization_isostrain_sizePostResult
character(len=64), dimension(:,:), allocatable,target :: homogenization_isostrain_output ! name of each post result output
CONTAINS CONTAINS
@ -49,7 +50,7 @@ subroutine homogenization_isostrain_init(&
integer(pInt), intent(in) :: file integer(pInt), intent(in) :: file
integer(pInt), parameter :: maxNchunks = 2 integer(pInt), parameter :: maxNchunks = 2
integer(pInt), dimension(1+2*maxNchunks) :: positions integer(pInt), dimension(1+2*maxNchunks) :: positions
integer(pInt) section, maxNinstance, i,j,k,l, output integer(pInt) section, maxNinstance, i,j,k,l, output, mySize
character(len=64) tag character(len=64) tag
character(len=1024) line character(len=1024) line
@ -63,6 +64,8 @@ subroutine homogenization_isostrain_init(&
allocate(homogenization_isostrain_sizeState(maxNinstance)) ; homogenization_isostrain_sizeState = 0_pInt allocate(homogenization_isostrain_sizeState(maxNinstance)) ; homogenization_isostrain_sizeState = 0_pInt
allocate(homogenization_isostrain_sizePostResults(maxNinstance)); homogenization_isostrain_sizePostResults = 0_pInt allocate(homogenization_isostrain_sizePostResults(maxNinstance)); homogenization_isostrain_sizePostResults = 0_pInt
allocate(homogenization_isostrain_sizePostResult(maxval(homogenization_Noutput), &
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_output(maxval(homogenization_Noutput), & allocate(homogenization_isostrain_output(maxval(homogenization_Noutput), &
maxNinstance)) ; homogenization_isostrain_output = '' maxNinstance)) ; homogenization_isostrain_output = ''
@ -106,9 +109,16 @@ subroutine homogenization_isostrain_init(&
do j = 1,maxval(homogenization_Noutput) do j = 1,maxval(homogenization_Noutput)
select case(homogenization_isostrain_output(j,i)) select case(homogenization_isostrain_output(j,i))
case('ngrains') case('ngrains')
homogenization_isostrain_sizePostResults(i) = & mySize = 1
homogenization_isostrain_sizePostResults(i) + 1 case default
mySize = 0
end select end select
if (mySize > 0_pInt) then ! any meaningful output found
homogenization_isostrain_sizePostResult(j,i) = mySize
homogenization_isostrain_sizePostResults(i) = &
homogenization_isostrain_sizePostResults(i) + mySize
endif
enddo enddo
enddo enddo