@@ -193,6 +193,8 @@ SNSolverHPC::SNSolverHPC( Config* settings ) {
193193 _curAbsorptionHohlraumVertical = 0 ;
194194 _curAbsorptionHohlraumHorizontal = 0 ;
195195 _varAbsorptionHohlraumGreen = 0 ;
196+ _avgAbsorptionHohlraumGreenBlockIntegrated = 0 ;
197+ _varAbsorptionHohlraumGreenBlockIntegrated = 0 ;
196198 }
197199
198200 if ( _settings->GetLoadRestartSolution () )
@@ -267,9 +269,10 @@ SNSolverHPC::SNSolverHPC( Config* settings ) {
267269
268270 _nProbingCellsLineGreen = _settings->GetNumProbingCellsLineHohlraum ();
269271
270- _nProbingCellsBlocksGreen = 44 ;
271- _absorptionValsBlocksGreen = std::vector<double >( _nProbingCellsBlocksGreen, 0 . );
272- _absorptionValsLineSegment = std::vector<double >( _nProbingCellsLineGreen, 0.0 );
272+ _nProbingCellsBlocksGreen = 44 ;
273+ _absorptionValsBlocksGreen = std::vector<double >( _nProbingCellsBlocksGreen, 0 . );
274+ _absorptionValsBlocksGreenIntegrated = std::vector<double >( _nProbingCellsBlocksGreen, 0 . );
275+ _absorptionValsLineSegment = std::vector<double >( _nProbingCellsLineGreen, 0.0 );
273276
274277 SetProbingCellsLineGreen (); // ONLY FOR HOHLRAUM
275278 }
@@ -825,6 +828,8 @@ void SNSolverHPC::IterPostprocessing() {
825828 }
826829 // Update time integral values on rank 0
827830 if ( _rank == 0 ) {
831+ constexpr double greenBlockArea = 0.05 * 0.05 ;
832+
828833 _totalScalarOutflow += _curScalarOutflow * _dT;
829834 _totalScalarOutflowPeri1 += _curScalarOutflowPeri1 * _dT;
830835 _totalScalarOutflowPeri2 += _curScalarOutflowPeri2 * _dT;
@@ -833,6 +838,20 @@ void SNSolverHPC::IterPostprocessing() {
833838 _totalAbsorptionHohlraumCenter += _curAbsorptionHohlraumCenter * _dT;
834839 _totalAbsorptionHohlraumVertical += _curAbsorptionHohlraumVertical * _dT;
835840 _totalAbsorptionHohlraumHorizontal += _curAbsorptionHohlraumHorizontal * _dT;
841+ for ( unsigned i = 0 ; i < _nProbingCellsBlocksGreen; ++i ) {
842+ _absorptionValsBlocksGreenIntegrated[i] += _dT * _absorptionValsBlocksGreen[i] / greenBlockArea;
843+ }
844+ _avgAbsorptionHohlraumGreenBlockIntegrated = 0.0 ;
845+ _varAbsorptionHohlraumGreenBlockIntegrated = 0.0 ;
846+ for ( unsigned i = 0 ; i < _nProbingCellsBlocksGreen; ++i ) {
847+ _avgAbsorptionHohlraumGreenBlockIntegrated += _absorptionValsBlocksGreenIntegrated[i];
848+ }
849+ _avgAbsorptionHohlraumGreenBlockIntegrated /= static_cast <double >( _nProbingCellsBlocksGreen );
850+ for ( unsigned i = 0 ; i < _nProbingCellsBlocksGreen; ++i ) {
851+ const double diff = _absorptionValsBlocksGreenIntegrated[i] - _avgAbsorptionHohlraumGreenBlockIntegrated;
852+ _varAbsorptionHohlraumGreenBlockIntegrated += diff * diff;
853+ }
854+ _varAbsorptionHohlraumGreenBlockIntegrated /= static_cast <double >( _nProbingCellsBlocksGreen );
836855
837856 _rmsFlux = sqrt ( _rmsFlux );
838857 }
@@ -938,6 +957,8 @@ void SNSolverHPC::PrepareScreenOutput() {
938957 }
939958 break ;
940959 case VAR_ABSORPTION_GREEN: _screenOutputFieldNames[idx_field] = " Var. absorption green" ; break ;
960+ case AVG_ABSORPTION_GREEN_BLOCK_INTEGRATED: _screenOutputFieldNames[idx_field] = " A_G" ; break ;
961+ case VAR_ABSORPTION_GREEN_BLOCK_INTEGRATED: _screenOutputFieldNames[idx_field] = " V_G" ; break ;
941962
942963 default : ErrorMessages::Error ( " Screen output field not defined!" , CURRENT_FUNCTION ); break ;
943964 }
@@ -996,6 +1017,12 @@ void SNSolverHPC::WriteScalarOutput( unsigned idx_iter ) {
9961017 idx_field--;
9971018 break ;
9981019 case VAR_ABSORPTION_GREEN: _screenOutputFields[idx_field] = _varAbsorptionHohlraumGreen; break ;
1020+ case AVG_ABSORPTION_GREEN_BLOCK_INTEGRATED:
1021+ _screenOutputFields[idx_field] = _avgAbsorptionHohlraumGreenBlockIntegrated;
1022+ break ;
1023+ case VAR_ABSORPTION_GREEN_BLOCK_INTEGRATED:
1024+ _screenOutputFields[idx_field] = _varAbsorptionHohlraumGreenBlockIntegrated;
1025+ break ;
9991026 default : ErrorMessages::Error ( " Screen output group not defined!" , CURRENT_FUNCTION ); break ;
10001027 }
10011028 }
@@ -1054,6 +1081,12 @@ void SNSolverHPC::WriteScalarOutput( unsigned idx_iter ) {
10541081 idx_field--;
10551082 break ;
10561083 case VAR_ABSORPTION_GREEN: _historyOutputFields[idx_field] = _varAbsorptionHohlraumGreen; break ;
1084+ case AVG_ABSORPTION_GREEN_BLOCK_INTEGRATED:
1085+ _historyOutputFields[idx_field] = _avgAbsorptionHohlraumGreenBlockIntegrated;
1086+ break ;
1087+ case VAR_ABSORPTION_GREEN_BLOCK_INTEGRATED:
1088+ _historyOutputFields[idx_field] = _varAbsorptionHohlraumGreenBlockIntegrated;
1089+ break ;
10571090 case ABSORPTION_GREEN_LINE:
10581091 for ( unsigned i = 0 ; i < _settings->GetNumProbingCellsLineHohlraum (); i++ ) {
10591092 _historyOutputFields[idx_field] = _absorptionValsLineSegment[i];
@@ -1106,6 +1139,8 @@ void SNSolverHPC::PrintScreenOutput( unsigned idx_iter ) {
11061139 TOTAL_PARTICLE_ABSORPTION_HORIZONTAL,
11071140 PROBE_MOMENT_TIME_TRACE,
11081141 VAR_ABSORPTION_GREEN,
1142+ AVG_ABSORPTION_GREEN_BLOCK_INTEGRATED,
1143+ VAR_ABSORPTION_GREEN_BLOCK_INTEGRATED,
11091144 ABSORPTION_GREEN_BLOCK,
11101145 ABSORPTION_GREEN_LINE };
11111146 std::vector<SCALAR_OUTPUT> booleanFields = { VTK_OUTPUT, CSV_OUTPUT };
@@ -1187,6 +1222,8 @@ void SNSolverHPC::PrepareHistoryOutput() {
11871222 idx_field--;
11881223 break ;
11891224 case VAR_ABSORPTION_GREEN: _historyOutputFieldNames[idx_field] = " Var. absorption green" ; break ;
1225+ case AVG_ABSORPTION_GREEN_BLOCK_INTEGRATED: _historyOutputFieldNames[idx_field] = " A_G" ; break ;
1226+ case VAR_ABSORPTION_GREEN_BLOCK_INTEGRATED: _historyOutputFieldNames[idx_field] = " V_G" ; break ;
11901227 case ABSORPTION_GREEN_BLOCK:
11911228 for ( unsigned i = 0 ; i < 44 ; i++ ) {
11921229 _historyOutputFieldNames[idx_field] = " Probe Green Block " + std::to_string ( i );
0 commit comments