Skip to content

Commit d257b1a

Browse files
authored
Fix avg block (#71)
* fix avg_block issue
1 parent 3bfa2c3 commit d257b1a

8 files changed

Lines changed: 143 additions & 12 deletions

File tree

include/common/globalconstants.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,8 @@ enum SCALAR_OUTPUT {
199199
PROBE_MOMENT_TIME_TRACE,
200200
VAR_ABSORPTION_GREEN,
201201
ABSORPTION_GREEN_BLOCK,
202+
AVG_ABSORPTION_GREEN_BLOCK_INTEGRATED,
203+
VAR_ABSORPTION_GREEN_BLOCK_INTEGRATED,
202204
ABSORPTION_GREEN_LINE
203205
};
204206

@@ -225,6 +227,8 @@ inline std::map<std::string, SCALAR_OUTPUT> ScalarOutput_Map{ { "ITER", ITER },
225227
{ "PROBE_MOMENT_TIME_TRACE", PROBE_MOMENT_TIME_TRACE },
226228
{ "VAR_ABSORPTION_GREEN", VAR_ABSORPTION_GREEN },
227229
{ "ABSORPTION_GREEN_BLOCK", ABSORPTION_GREEN_BLOCK },
230+
{ "AVG_ABSORPTION_GREEN_BLOCK_INTEGRATED", AVG_ABSORPTION_GREEN_BLOCK_INTEGRATED },
231+
{ "VAR_ABSORPTION_GREEN_BLOCK_INTEGRATED", VAR_ABSORPTION_GREEN_BLOCK_INTEGRATED },
228232
{ "ABSORPTION_GREEN_LINE", ABSORPTION_GREEN_LINE } };
229233

230234
// Spherical Basis Name

include/solvers/snsolver_hpc.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,8 @@ class SNSolverHPC
113113
double _curAbsorptionHohlraumVertical;
114114
double _curAbsorptionHohlraumHorizontal;
115115
double _varAbsorptionHohlraumGreen;
116+
double _avgAbsorptionHohlraumGreenBlockIntegrated;
117+
double _varAbsorptionHohlraumGreenBlockIntegrated;
116118

117119
std::vector<std::vector<unsigned>> _probingCellsHohlraum; /*!< @brief Indices of cells that contain a probing sensor */
118120
std::vector<double> _probingMoments; /*!< @brief Solution Momnets at the probing cells that contain a probing sensor */
@@ -125,6 +127,7 @@ class SNSolverHPC
125127
unsigned _nProbingCellsBlocksGreen;
126128
std::vector<std::vector<unsigned>> _probingCellsBlocksGreen; /*!< @brief Indices of cells that contain a probing sensor blocks */
127129
std::vector<double> _absorptionValsBlocksGreen; /*!< @brief Avg Absorption value at the sampleing blocks of lineGreen */
130+
std::vector<double> _absorptionValsBlocksGreenIntegrated; /*!< @brief Internal QoI-3 running values A_i(t) = |g_i|^{-1} \int_{g_i}\int_0^t sigma_a phi d\tau dxdy */
128131

129132
// Design parameters
130133
std::vector<double> _cornerUpperLeftGreen; /*!< @brief Coord of corner of the green area (minus thickness/2 of it) relative to the green center */

include/solvers/snsolver_hpc_cuda.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,8 @@ class SNSolverHPCCUDA
115115
double _curAbsorptionHohlraumVertical;
116116
double _curAbsorptionHohlraumHorizontal;
117117
double _varAbsorptionHohlraumGreen;
118+
double _avgAbsorptionHohlraumGreenBlockIntegrated;
119+
double _varAbsorptionHohlraumGreenBlockIntegrated;
118120

119121
std::vector<std::vector<unsigned>> _probingCellsHohlraum; /*!< @brief Indices of cells that contain a probing sensor */
120122
std::vector<double> _probingMoments; /*!< @brief Solution Momnets at the probing cells that contain a probing sensor */
@@ -127,6 +129,7 @@ class SNSolverHPCCUDA
127129
unsigned _nProbingCellsBlocksGreen;
128130
std::vector<std::vector<unsigned>> _probingCellsBlocksGreen; /*!< @brief Indices of cells that contain a probing sensor blocks */
129131
std::vector<double> _absorptionValsBlocksGreen; /*!< @brief Avg Absorption value at the sampleing blocks of lineGreen */
132+
std::vector<double> _absorptionValsBlocksGreenIntegrated; /*!< @brief Internal QoI-3 running values A_i(t) = |g_i|^{-1} \int_{g_i}\int_0^t sigma_a phi d\tau dxdy */
130133

131134
// Design parameters
132135
std::vector<double> _cornerUpperLeftGreen; /*!< @brief Coord of corner of the green area (minus thickness/2 of it) relative to the green center */

include/solvers/snsolver_hpc_hip.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,8 @@ class SNSolverHPCHIP
115115
double _curAbsorptionHohlraumVertical;
116116
double _curAbsorptionHohlraumHorizontal;
117117
double _varAbsorptionHohlraumGreen;
118+
double _avgAbsorptionHohlraumGreenBlockIntegrated;
119+
double _varAbsorptionHohlraumGreenBlockIntegrated;
118120

119121
std::vector<std::vector<unsigned>> _probingCellsHohlraum; /*!< @brief Indices of cells that contain a probing sensor */
120122
std::vector<double> _probingMoments; /*!< @brief Solution Momnets at the probing cells that contain a probing sensor */
@@ -127,6 +129,7 @@ class SNSolverHPCHIP
127129
unsigned _nProbingCellsBlocksGreen;
128130
std::vector<std::vector<unsigned>> _probingCellsBlocksGreen; /*!< @brief Indices of cells that contain a probing sensor blocks */
129131
std::vector<double> _absorptionValsBlocksGreen; /*!< @brief Avg Absorption value at the sampleing blocks of lineGreen */
132+
std::vector<double> _absorptionValsBlocksGreenIntegrated; /*!< @brief Internal QoI-3 running values A_i(t) = |g_i|^{-1} \int_{g_i}\int_0^t sigma_a phi d\tau dxdy */
130133

131134
// Design parameters
132135
std::vector<double> _cornerUpperLeftGreen; /*!< @brief Coord of corner of the green area (minus thickness/2 of it) relative to the green center */

src/common/config.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -806,18 +806,21 @@ void Config::SetPostprocessing() {
806806
TOTAL_PARTICLE_ABSORPTION,
807807
PROBE_MOMENT_TIME_TRACE,
808808
VAR_ABSORPTION_GREEN,
809+
AVG_ABSORPTION_GREEN_BLOCK_INTEGRATED,
810+
VAR_ABSORPTION_GREEN_BLOCK_INTEGRATED,
809811
};
810812

811813
it = std::find( legalOutputs.begin(), legalOutputs.end(), _screenOutput[idx_screenOutput] );
812814

813815
if( it == legalOutputs.end() ) {
814816
std::string foundKey = findKey( ScalarOutput_Map, _screenOutput[idx_screenOutput] );
815817
ErrorMessages::Error(
816-
"Illegal output field <" + foundKey +
818+
"Illegal output field <" + foundKey +
817819
"> for option SCREEN_OUTPUT for this test case.\n"
818820
"Supported fields are: ITER, SIM_TIME, WALL_TIME, MASS, RMS_FLUX, VTK_OUTPUT, CSV_OUTPUT, TOTAL_PARTICLE_ABSORPTION_CENTER, \n"
819821
"TOTAL_PARTICLE_ABSORPTION_VERTICAL, TOTAL_PARTICLE_ABSORPTION_HORIZONTAL, PROBE_MOMENT_TIME_TRACE, CUR_OUTFLOW, \n "
820-
"TOTAL_OUTFLOW, MAX_OUTFLOW, VAR_ABSORPTION_GREEN \n"
822+
"TOTAL_OUTFLOW, MAX_OUTFLOW, VAR_ABSORPTION_GREEN, AVG_ABSORPTION_GREEN_BLOCK_INTEGRATED, "
823+
"VAR_ABSORPTION_GREEN_BLOCK_INTEGRATED \n"
821824
"Please check your .cfg file.",
822825
CURRENT_FUNCTION );
823826
}
@@ -957,6 +960,8 @@ void Config::SetPostprocessing() {
957960
PROBE_MOMENT_TIME_TRACE,
958961
VAR_ABSORPTION_GREEN,
959962
ABSORPTION_GREEN_BLOCK,
963+
AVG_ABSORPTION_GREEN_BLOCK_INTEGRATED,
964+
VAR_ABSORPTION_GREEN_BLOCK_INTEGRATED,
960965
ABSORPTION_GREEN_LINE };
961966

962967
it = std::find( legalOutputs.begin(), legalOutputs.end(), _historyOutput[idx_historyOutput] );
@@ -968,7 +973,8 @@ void Config::SetPostprocessing() {
968973
"> for option HISTORY_OUTPUT for this test case.\n"
969974
"Supported fields are: ITER, SIM_TIME, WALL_TIME, MASS RMS_FLUX, VTK_OUTPUT, CSV_OUTPUT, TOTAL_PARTICLE_ABSORPTION_CENTER, \n "
970975
"TOTAL_PARTICLE_ABSORPTION_VERTICAL, TOTAL_PARTICLE_ABSORPTION_HORIZONTAL,PROBE_MOMENT_TIME_TRACE, CUR_OUTFLOW, \n"
971-
"TOTAL_OUTFLOW, MAX_OUTFLOW , VAR_ABSORPTION_GREEN, ABSORPTION_GREEN_BLOCK, ABSORPTION_GREEN_LINE \n"
976+
"TOTAL_OUTFLOW, MAX_OUTFLOW , VAR_ABSORPTION_GREEN, ABSORPTION_GREEN_BLOCK, "
977+
"AVG_ABSORPTION_GREEN_BLOCK_INTEGRATED, VAR_ABSORPTION_GREEN_BLOCK_INTEGRATED, ABSORPTION_GREEN_LINE \n"
972978
"Please check your .cfg file.",
973979
CURRENT_FUNCTION );
974980
}
@@ -1043,6 +1049,7 @@ void Config::SetPostprocessing() {
10431049
_nHistoryOutput += 44 - 1; // extend the screen output by the number of probing points
10441050
for( unsigned i = 0; i < 44; i++ ) _historyOutput.push_back( ABSORPTION_GREEN_BLOCK );
10451051
}
1052+
10461053
}
10471054
}
10481055

src/solvers/snsolver_hpc.cpp

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)