diff --git a/code/homogenization.f90 b/code/homogenization.f90 index f05c164c9..5d9c15302 100644 --- a/code/homogenization.f90 +++ b/code/homogenization.f90 @@ -25,7 +25,8 @@ module homogenization materialpoint_results !< results array of material point integer(pInt), public, protected :: & materialpoint_sizeResults, & - homogenization_maxSizePostResults + homogenization_maxSizePostResults, & + field_maxSizePostResults real(pReal), dimension(:,:), allocatable, public, protected :: & materialpoint_heat @@ -43,6 +44,22 @@ module homogenization materialpoint_converged logical, dimension(:,:,:), allocatable, private :: & materialpoint_doneAndHappy + enum, bind(c) + enumerator :: undefined_ID, & + temperature_ID, & + damage_ID + end enum + integer(pInt), dimension(:), allocatable, private, protected :: & + field_sizePostResults + integer(pInt), dimension(:,:), allocatable, private :: & + field_sizePostResult + + character(len=64), dimension(:,:), allocatable, private :: & + field_output !< name of each post result output + integer(pInt), dimension(:), allocatable, private :: & + field_Noutput !< number of outputs per homog instance + integer(kind(undefined_ID)), dimension(:,:), allocatable, private :: & + field_outputID !< ID of each post result output public :: & homogenization_init, & @@ -56,7 +73,8 @@ module homogenization field_getThermalConductivity33, & field_getMassDensity, & field_getSpecificHeat, & - materialpoint_postResults + materialpoint_postResults, & + field_postResults private :: & homogenization_partitionDeformation, & homogenization_updateState, & @@ -86,13 +104,6 @@ subroutine homogenization_init() debug_levelBasic, & debug_e, & debug_g - use IO, only: & - IO_error, & - IO_open_file, & - IO_open_jobFile_stat, & - IO_write_jobFile, & - IO_write_jobIntFile, & - IO_timeStamp use mesh, only: & mesh_maxNips, & mesh_NcpElems, & @@ -111,11 +122,13 @@ subroutine homogenization_init() use homogenization_none use homogenization_isostrain use homogenization_RGC + use IO implicit none integer(pInt), parameter :: FILEUNIT = 200_pInt integer(pInt) :: e,i,p,myInstance integer(pInt), dimension(:,:), pointer :: thisSize + integer(pInt), dimension(:) , pointer :: thisNoutput character(len=64), dimension(:,:), pointer :: thisOutput character(len=32) :: outputName !< name of output, intermediate fix until HDF5 output is ready logical :: knownHomogenization @@ -125,6 +138,13 @@ subroutine homogenization_init() allocate(mapping(mesh_ncpelems,4),source=0_pInt) allocate(InstancePosition(material_Nhomogenization),source=0_pInt) #endif + integer(pInt), parameter :: MAXNCHUNKS = 2_pInt + integer(pInt), dimension(1_pInt+2_pInt*MAXNCHUNKS) :: positions + integer(pInt) :: section = 0_pInt + character(len=65536) :: & + tag = '', & + line = '' + !-------------------------------------------------------------------------------------------------- ! parse homogenization from config file if (.not. IO_open_jobFile_stat(FILEUNIT,material_localFileExt)) & ! no local material configuration present... @@ -137,6 +157,61 @@ subroutine homogenization_init() call homogenization_RGC_init(FILEUNIT) close(FILEUNIT) +!-------------------------------------------------------------------------------------------------- +! parse field from config file + allocate(field_sizePostResults(material_Nhomogenization), source=0_pInt) + allocate(field_sizePostResult(maxval(homogenization_Noutput),material_Nhomogenization), & + source=0_pInt) + allocate(field_Noutput(material_Nhomogenization), source=0_pInt) + allocate(field_outputID(maxval(homogenization_Noutput),material_Nhomogenization), & + source=undefined_ID) + allocate(field_output(maxval(homogenization_Noutput),material_Nhomogenization)) + field_output = '' + + if (.not. IO_open_jobFile_stat(FILEUNIT,material_localFileExt)) & ! no local material configuration present... + call IO_open_file(FILEUNIT,material_configFile) ! ... open material.config file + rewind(FILEUNIT) + do while (trim(line) /= IO_EOF .and. IO_lc(IO_getTag(line,'<','>')) /= material_partHomogenization)! wind forward to + line = IO_read(FILEUNIT) + enddo + + parsingFile: do while (trim(line) /= IO_EOF) ! read through sections of homogenization part + line = IO_read(FILEUNIT) + if (IO_isBlank(line)) cycle ! skip empty lines + if (IO_getTag(line,'<','>') /= '') then ! stop at next part + line = IO_read(FILEUNIT, .true.) ! reset IO_read + exit + endif + if (IO_getTag(line,'[',']') /= '') then ! next section + section = section + 1_pInt + cycle + endif + if (section > 0_pInt ) then ! do not short-circuit here (.and. with next if-statement). It's not safe in Fortran + positions = IO_stringPos(line,MAXNCHUNKS) + tag = IO_lc(IO_stringValue(line,positions,1_pInt)) ! extract key + select case(tag) + case ('(output)') + select case(IO_lc(IO_stringValue(line,positions,2_pInt))) + case('temperature') + field_Noutput(section) = field_Noutput(section) + 1_pInt + field_outputID(field_Noutput(section),section) = temperature_ID + field_sizePostResult(field_Noutput(section),section) = 1_pInt + field_sizePostResults(section) = field_sizePostResults(section) + 1_pInt + field_output(field_Noutput(section),section) = IO_lc(IO_stringValue(line,positions,2_pInt)) + case('damage') + field_Noutput(section) = field_Noutput(section) + 1_pInt + field_outputID(field_Noutput(section),section) = damage_ID + field_sizePostResult(field_Noutput(section),section) = 1_pInt + field_sizePostResults(section) = field_sizePostResults(section) + 1_pInt + field_output(field_Noutput(section),section) = IO_lc(IO_stringValue(line,positions,2_pInt)) + + end select + + end select + endif + enddo parsingFile + close(FILEUNIT) + !-------------------------------------------------------------------------------------------------- ! write description file for homogenization output call IO_write_jobFile(FILEUNIT,'outputHomogenization') @@ -146,14 +221,17 @@ subroutine homogenization_init() select case(homogenization_type(p)) ! split per homogenization type case (HOMOGENIZATION_NONE_ID) outputName = HOMOGENIZATION_NONE_label + thisNoutput => null() thisOutput => null() thisSize => null() case (HOMOGENIZATION_ISOSTRAIN_ID) outputName = HOMOGENIZATION_ISOSTRAIN_label + thisNoutput => homogenization_isostrain_Noutput thisOutput => homogenization_isostrain_output thisSize => homogenization_isostrain_sizePostResult case (HOMOGENIZATION_RGC_ID) outputName = HOMOGENIZATION_RGC_label + thisNoutput => homogenization_RGC_Noutput thisOutput => homogenization_RGC_output thisSize => homogenization_RGC_sizePostResult case default @@ -163,10 +241,16 @@ subroutine homogenization_init() if (knownHomogenization) then write(FILEUNIT,'(a)') '(type)'//char(9)//trim(outputName) write(FILEUNIT,'(a,i4)') '(ngrains)'//char(9),homogenization_Ngrains(p) - do e = 1,homogenization_Noutput(p) + do e = 1,thisNoutput(i) write(FILEUNIT,'(a,i4)') trim(thisOutput(e,i))//char(9),thisSize(e,i) enddo endif +#ifdef multiphysicsOut + write(FILEUNIT,'(a)') '(field)' + do e = 1_pInt,field_Noutput(p) + write(FILEUNIT,'(a,i4)') trim(field_output(e,p))//char(9),field_sizePostResult(e,p) + enddo +#endif enddo close(FILEUNIT) @@ -204,11 +288,16 @@ subroutine homogenization_init() #endif homogenization_maxSizePostResults = 0_pInt + field_maxSizePostResults = 0_pInt do p = 1,material_Nhomogenization homogenization_maxSizePostResults = max(homogenization_maxSizePostResults,homogState(p)%sizePostResults) + field_maxSizePostResults = max(field_maxSizePostResults,field_Noutput(p)) enddo materialpoint_sizeResults = 1 & ! grain count + 1 + homogenization_maxSizePostResults & ! homogSize & homogResult +#ifdef multiphysicsOut + + 1 + field_maxSizePostResults & ! field size & field result +#endif + homogenization_maxNgrains * (1 + crystallite_maxSizePostResults & ! crystallite size & crystallite results #ifdef multiphysicsOut + 1 + constitutive_damage_maxSizePostResults & @@ -625,6 +714,17 @@ subroutine materialpoint_postResults materialpoint_results(thePos+1:thePos+theSize,i,e) = homogenization_postResults(i,e) ! tell homogenization results thePos = thePos + theSize endif + +#ifdef multiphysicsOut + theSize = field_Noutput(mappingHomogenization(2,i,e)) + materialpoint_results(thePos+1,i,e) = real(theSize,pReal) ! tell size of field results + thePos = thePos + 1_pInt + + if (theSize > 0_pInt) then ! any homogenization results to mention? + materialpoint_results(thePos+1:thePos+theSize,i,e) = field_postResults(i,e) ! tell field results + thePos = thePos + theSize + endif +#endif materialpoint_results(thePos+1,i,e) = real(myNgrains,pReal) ! tell number of grains at materialpoint thePos = thePos + 1_pInt @@ -1184,4 +1284,36 @@ function homogenization_postResults(ip,el) end function homogenization_postResults +!-------------------------------------------------------------------------------------------------- +!> @brief return array of homogenization results for post file inclusion. call only, +!> if homogenization_sizePostResults(i,e) > 0 !! +!-------------------------------------------------------------------------------------------------- +function field_postResults(ip,el) + use material, only: & + mappingHomogenization + + implicit none + integer(pInt), intent(in) :: & + ip, & !< integration point + el !< element number + real(pReal), dimension(field_sizePostResults(mappingHomogenization(2,ip,el))) :: & + field_postResults + integer(pInt) :: & + c = 0_pInt, homog, o + + field_postResults = 0.0_pReal + homog = mappingHomogenization(2,ip,el) + do o = 1_pInt,field_Noutput(homog) + select case(field_outputID(o,homog)) + case (temperature_ID) + field_postResults(c+1_pInt) = field_getThermal(ip,el) + c = c + 1_pInt + case (damage_ID) + field_postResults(c+1_pInt) = field_getDAMAGE(ip,el) + c = c + 1_pInt + end select + enddo + +end function field_postResults + end module homogenization diff --git a/code/homogenization_RGC.f90 b/code/homogenization_RGC.f90 index 815ba4096..3b3a666ba 100644 --- a/code/homogenization_RGC.f90 +++ b/code/homogenization_RGC.f90 @@ -21,7 +21,7 @@ module homogenization_RGC homogenization_RGC_sizePostResult character(len=64), dimension(:,:), allocatable,target, public :: & homogenization_RGC_output ! name of each post result output - integer(pInt), dimension(:), allocatable, private :: & + integer(pInt), dimension(:), allocatable,target, public :: & homogenization_RGC_Noutput !< number of outputs per homog instance integer(pInt), dimension(:,:), allocatable, private :: & homogenization_RGC_Ngrains @@ -35,7 +35,6 @@ module homogenization_RGC homogenization_RGC_ciAlpha enum, bind(c) enumerator :: undefined_ID, & - temperature_ID, & constitutivework_ID, & penaltyenergy_ID, & volumediscrepancy_ID, & @@ -110,7 +109,7 @@ subroutine homogenization_RGC_init(fileUnit) o, & instance, & sizeHState - integer(pInt) :: section=0_pInt, maxNinstance, i,j,e, output=-1_pInt, mySize, myInstance + integer(pInt) :: section=0_pInt, maxNinstance, i,j,e, mySize, myInstance character(len=65536) :: & tag = '', & line = '' @@ -154,7 +153,6 @@ subroutine homogenization_RGC_init(fileUnit) endif if (IO_getTag(line,'[',']') /= '') then ! next section section = section + 1_pInt - output = 0_pInt ! reset output counter cycle endif if (section > 0_pInt ) then ! do not short-circuit here (.and. with next if-statement). It's not safe in Fortran @@ -163,45 +161,54 @@ subroutine homogenization_RGC_init(fileUnit) positions = IO_stringPos(line,MAXNCHUNKS) tag = IO_lc(IO_stringValue(line,positions,1_pInt)) ! extract key select case(tag) - case ('nconstituents','ngrains','type') - case('field_damage') case ('(output)') - output = output + 1_pInt - homogenization_RGC_output(output,i) = IO_lc(IO_stringValue(line,positions,2_pInt)) - select case(homogenization_RGC_output(output,i)) + select case(IO_lc(IO_stringValue(line,positions,2_pInt))) case('constitutivework') homogenization_RGC_Noutput(i) = homogenization_RGC_Noutput(i) + 1_pInt - homogenization_RGC_outputID(output,i) = constitutivework_ID + homogenization_RGC_outputID(homogenization_RGC_Noutput(i),i) = constitutivework_ID + homogenization_RGC_output(homogenization_RGC_Noutput(i),i) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) case('penaltyenergy') homogenization_RGC_Noutput(i) = homogenization_RGC_Noutput(i) + 1_pInt - homogenization_RGC_outputID(output,i) = penaltyenergy_ID + homogenization_RGC_outputID(homogenization_RGC_Noutput(i),i) = penaltyenergy_ID + homogenization_RGC_output(homogenization_RGC_Noutput(i),i) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) case('volumediscrepancy') homogenization_RGC_Noutput(i) = homogenization_RGC_Noutput(i) + 1_pInt - homogenization_RGC_outputID(output,i) = volumediscrepancy_ID + homogenization_RGC_outputID(homogenization_RGC_Noutput(i),i) = volumediscrepancy_ID + homogenization_RGC_output(homogenization_RGC_Noutput(i),i) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) case('averagerelaxrate') homogenization_RGC_Noutput(i) = homogenization_RGC_Noutput(i) + 1_pInt - homogenization_RGC_outputID(output,i) = averagerelaxrate_ID + homogenization_RGC_outputID(homogenization_RGC_Noutput(i),i) = averagerelaxrate_ID + homogenization_RGC_output(homogenization_RGC_Noutput(i),i) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) case('maximumrelaxrate') homogenization_RGC_Noutput(i) = homogenization_RGC_Noutput(i) + 1_pInt - homogenization_RGC_outputID(output,i) = maximumrelaxrate_ID + homogenization_RGC_outputID(homogenization_RGC_Noutput(i),i) = maximumrelaxrate_ID + homogenization_RGC_output(homogenization_RGC_Noutput(i),i) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) case('magnitudemismatch') homogenization_RGC_Noutput(i) = homogenization_RGC_Noutput(i) + 1_pInt - homogenization_RGC_outputID(output,i) = magnitudemismatch_ID - case('temperature') - homogenization_RGC_Noutput(i) = homogenization_RGC_Noutput(i) + 1_pInt - homogenization_RGC_outputID(output,i) = temperature_ID + homogenization_RGC_outputID(homogenization_RGC_Noutput(i),i) = magnitudemismatch_ID + homogenization_RGC_output(homogenization_RGC_Noutput(i),i) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) case('ipcoords') homogenization_RGC_Noutput(i) = homogenization_RGC_Noutput(i) + 1_pInt - homogenization_RGC_outputID(output,i) = ipcoords_ID + homogenization_RGC_outputID(homogenization_RGC_Noutput(i),i) = ipcoords_ID + homogenization_RGC_output(homogenization_RGC_Noutput(i),i) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) case('avgdefgrad','avgf') homogenization_RGC_Noutput(i) = homogenization_RGC_Noutput(i) + 1_pInt - homogenization_RGC_outputID(output,i) = avgdefgrad_ID + homogenization_RGC_outputID(homogenization_RGC_Noutput(i),i) = avgdefgrad_ID + homogenization_RGC_output(homogenization_RGC_Noutput(i),i) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) case('avgp','avgfirstpiola','avg1stpiola') homogenization_RGC_Noutput(i) = homogenization_RGC_Noutput(i) + 1_pInt - homogenization_RGC_outputID(output,i) = avgfirstpiola_ID - case default - call IO_error(105_pInt,ext_msg=IO_stringValue(line,positions,2_pInt)//& - ' ('//HOMOGENIZATION_RGC_label//')') + homogenization_RGC_outputID(homogenization_RGC_Noutput(i),i) = avgfirstpiola_ID + homogenization_RGC_output(homogenization_RGC_Noutput(i),i) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) + end select case ('clustersize') homogenization_RGC_Ngrains(1,i) = IO_intValue(line,positions,2_pInt) @@ -221,8 +228,7 @@ subroutine homogenization_RGC_init(fileUnit) homogenization_RGC_angles(1,i) = IO_floatValue(line,positions,2_pInt) homogenization_RGC_angles(2,i) = IO_floatValue(line,positions,3_pInt) homogenization_RGC_angles(3,i) = IO_floatValue(line,positions,4_pInt) - case default - call IO_error(210_pInt,ext_msg=trim(tag)//' ('//HOMOGENIZATION_RGC_label//')') + end select endif endif @@ -270,7 +276,7 @@ subroutine homogenization_RGC_init(fileUnit) ! * Determine size of postResults array outputsLoop: do o = 1_pInt, homogenization_RGC_Noutput(instance) select case(homogenization_RGC_outputID(o,instance)) - case(temperature_ID,constitutivework_ID,penaltyenergy_ID,volumediscrepancy_ID, & + case(constitutivework_ID,penaltyenergy_ID,volumediscrepancy_ID, & averagerelaxrate_ID,maximumrelaxrate_ID) mySize = 1_pInt case(ipcoords_ID,magnitudemismatch_ID) @@ -949,8 +955,6 @@ pure function homogenization_RGC_postResults(ip,el,avgP,avgF) homogState, & mappingHomogenization, & homogenization_Noutput - use crystallite, only: & - crystallite_temperature implicit none integer(pInt), intent(in) :: & @@ -973,9 +977,6 @@ pure function homogenization_RGC_postResults(ip,el,avgP,avgF) homogenization_RGC_postResults = 0.0_pReal do o = 1_pInt,homogenization_Noutput(mesh_element(3,el)) select case(homogenization_RGC_outputID(o,homID)) - case (temperature_ID) - homogenization_RGC_postResults(c+1_pInt) = crystallite_temperature(ip,el) - c = c + 1_pInt case (avgdefgrad_ID) homogenization_RGC_postResults(c+1_pInt:c+9_pInt) = reshape(avgF,[9]) c = c + 9_pInt diff --git a/code/homogenization_isostrain.f90 b/code/homogenization_isostrain.f90 index 02853a5d6..0ecb26bee 100644 --- a/code/homogenization_isostrain.f90 +++ b/code/homogenization_isostrain.f90 @@ -18,14 +18,13 @@ module homogenization_isostrain character(len=64), dimension(:,:), allocatable, target, public :: & homogenization_isostrain_output !< name of each post result output - integer(pInt), dimension(:), allocatable, private :: & + integer(pInt), dimension(:), allocatable, target, public :: & homogenization_isostrain_Noutput !< number of outputs per homog instance integer(pInt), dimension(:), allocatable, private :: & homogenization_isostrain_Ngrains enum, bind(c) enumerator :: undefined_ID, & nconstituents_ID, & - temperature_ID, & ipcoords_ID, & avgdefgrad_ID, & avgfirstpiola_ID @@ -67,7 +66,7 @@ subroutine homogenization_isostrain_init(fileUnit) integer(pInt), parameter :: MAXNCHUNKS = 2_pInt integer(pInt), dimension(1_pInt+2_pInt*MAXNCHUNKS) :: positions integer(pInt) :: & - section = 0_pInt, i, output, mySize, o + section = 0_pInt, i, mySize, o integer :: & maxNinstance, & homog, & @@ -113,7 +112,6 @@ subroutine homogenization_isostrain_init(fileUnit) endif if (IO_getTag(line,'[',']') /= '') then ! next section section = section + 1_pInt - output = 0_pInt ! reset output counter cycle endif if (section > 0_pInt ) then ! do not short-circuit here (.and. with next if-statement). It's not safe in Fortran @@ -122,30 +120,29 @@ subroutine homogenization_isostrain_init(fileUnit) positions = IO_stringPos(line,MAXNCHUNKS) tag = IO_lc(IO_stringValue(line,positions,1_pInt)) ! extract key select case(tag) - case('type') - case('field_damage') case ('(output)') - output = output + 1_pInt - homogenization_isostrain_output(output,i) = IO_lc(IO_stringValue(line,positions,2_pInt)) - select case(homogenization_isostrain_output(output,i)) + select case(IO_lc(IO_stringValue(line,positions,2_pInt))) case('nconstituents','ngrains') homogenization_isostrain_Noutput(i) = homogenization_isostrain_Noutput(i) + 1_pInt - homogenization_isostrain_outputID(output,i) = nconstituents_ID - case('temperature') - homogenization_isostrain_Noutput(i) = homogenization_isostrain_Noutput(i) + 1_pInt - homogenization_isostrain_outputID(output,i) = temperature_ID + homogenization_isostrain_outputID(homogenization_isostrain_Noutput(i),i) = nconstituents_ID + homogenization_isostrain_output(homogenization_isostrain_Noutput(i),i) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) case('ipcoords') homogenization_isostrain_Noutput(i) = homogenization_isostrain_Noutput(i) + 1_pInt - homogenization_isostrain_outputID(output,i) = ipcoords_ID + homogenization_isostrain_outputID(homogenization_isostrain_Noutput(i),i) = ipcoords_ID + homogenization_isostrain_output(homogenization_isostrain_Noutput(i),i) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) case('avgdefgrad','avgf') homogenization_isostrain_Noutput(i) = homogenization_isostrain_Noutput(i) + 1_pInt - homogenization_isostrain_outputID(output,i) = avgdefgrad_ID + homogenization_isostrain_outputID(homogenization_isostrain_Noutput(i),i) = avgdefgrad_ID + homogenization_isostrain_output(homogenization_isostrain_Noutput(i),i) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) case('avgp','avgfirstpiola','avg1stpiola') homogenization_isostrain_Noutput(i) = homogenization_isostrain_Noutput(i) + 1_pInt - homogenization_isostrain_outputID(output,i) = avgfirstpiola_ID - case default - call IO_error(105_pInt,ext_msg=IO_stringValue(line,positions,2_pInt)//& - ' ('//HOMOGENIZATION_isostrain_label//')') + homogenization_isostrain_outputID(homogenization_isostrain_Noutput(i),i) = avgfirstpiola_ID + homogenization_isostrain_output(homogenization_isostrain_Noutput(i),i) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) + end select case ('nconstituents','ngrains') homogenization_isostrain_Ngrains(i) = IO_intValue(line,positions,2_pInt) @@ -158,8 +155,7 @@ subroutine homogenization_isostrain_init(fileUnit) case default call IO_error(211_pInt,ext_msg=trim(tag)//' ('//HOMOGENIZATION_isostrain_label//')') end select - case default - call IO_error(210_pInt,ext_msg=trim(tag)//' ('//HOMOGENIZATION_isostrain_label//')') + end select endif endif @@ -173,7 +169,7 @@ subroutine homogenization_isostrain_init(fileUnit) ! * Determine size of postResults array outputsLoop: do o = 1_pInt, homogenization_isostrain_Noutput(instance) select case(homogenization_isostrain_outputID(o,instance)) - case(nconstituents_ID, temperature_ID) + case(nconstituents_ID) mySize = 1_pInt case(ipcoords_ID) mySize = 3_pInt @@ -277,8 +273,6 @@ pure function homogenization_isostrain_postResults(ip,el,avgP,avgF) use material, only: & homogenization_typeInstance, & homogenization_Noutput - use crystallite, only: & - crystallite_temperature implicit none integer(pInt), intent(in) :: & @@ -304,9 +298,6 @@ pure function homogenization_isostrain_postResults(ip,el,avgP,avgF) case (nconstituents_ID) homogenization_isostrain_postResults(c+1_pInt) = real(homogenization_isostrain_Ngrains(homID),pReal) c = c + 1_pInt - case (temperature_ID) - homogenization_isostrain_postResults(c+1_pInt) = crystallite_temperature(ip,el) - c = c + 1_pInt case (avgdefgrad_ID) homogenization_isostrain_postResults(c+1_pInt:c+9_pInt) = reshape(avgF,[9]) c = c + 9_pInt