25 #include <queso/StatisticalForwardProblem.h>
26 #include <queso/SequentialVectorRealizer.h>
27 #include <queso/GslVector.h>
28 #include <queso/GslMatrix.h>
33 template <
class P_V,
class P_M,
class Q_V,
class Q_M>
41 m_env (paramRv.env()),
43 m_qoiFunction (qoiFunction),
47 m_mcSeqGenerator (NULL),
48 m_solutionRealizer (NULL),
49 #ifdef UQ_ALSO_COMPUTE_MDFS_WITHOUT_KDE
51 m_subMdfValues (NULL),
53 #ifdef QUESO_COMPUTES_EXTRA_POST_PROCESSING_STATISTICS
54 m_subSolutionMdf (NULL),
56 m_subCdfValues (NULL),
57 m_subSolutionCdf (NULL),
58 m_unifiedCdfGrids (NULL),
59 m_unifiedCdfValues (NULL),
60 m_unifiedSolutionCdf (NULL),
63 m_optionsObj (alternativeOptionsValues),
64 m_userDidNotProvideOptions(
false)
66 if (m_env.subDisplayFile()) {
67 *m_env.subDisplayFile() <<
"Entering StatisticalForwardProblem<P_V,P_M,Q_V,Q_M>::constructor()"
68 <<
": prefix = " << prefix
69 <<
", alternativeOptionsValues = " << alternativeOptionsValues
70 <<
", m_env.optionsInputFileName() = " << m_env.optionsInputFileName()
75 if (m_optionsObj == NULL) {
80 m_optionsObj = tempOptions;
83 m_userDidNotProvideOptions =
true;
86 if (m_optionsObj->m_help !=
"") {
87 if (m_env.subDisplayFile()) {
88 *m_env.subDisplayFile() << (*m_optionsObj) << std::endl;
92 queso_require_equal_to_msg(paramRv.imageSet().vectorSpace().dimLocal(), qoiFunction.domainSet().vectorSpace().dimLocal(),
"'paramRv' and 'qoiFunction' are related to vector spaces of different dimensions");
94 queso_require_equal_to_msg(qoiFunction.imageSet().vectorSpace().dimLocal(), qoiRv.imageSet().vectorSpace().dimLocal(),
"'qoiFunction' and 'qoiRv' are related to vector spaces of different dimensions");
96 if (m_env.subDisplayFile()) {
97 *m_env.subDisplayFile() <<
"Leaving StatisticalForwardProblem<P_V,P_M,Q_V,Q_M>::constructor()"
98 <<
": prefix = " << m_optionsObj->m_prefix
104 template <
class P_V,
class P_M,
class Q_V,
class Q_M>
107 if (m_solutionPdf )
delete m_solutionPdf;
109 #ifdef QUESO_COMPUTES_EXTRA_POST_PROCESSING_STATISTICS
110 if (m_unifiedSolutionCdf)
delete m_unifiedSolutionCdf;
111 if (m_unifiedCdfValues )
delete m_unifiedCdfValues;
112 if (m_unifiedCdfGrids )
delete m_unifiedCdfGrids;
114 if (m_subSolutionCdf )
delete m_subSolutionCdf;
115 if (m_subCdfValues )
delete m_subCdfValues;
116 if (m_subCdfGrids )
delete m_subCdfGrids;
118 if (m_subSolutionMdf )
delete m_subSolutionMdf;
120 #ifdef UQ_ALSO_COMPUTE_MDFS_WITHOUT_KDE
121 if (m_subMdfValues )
delete m_subMdfValues;
122 if (m_subMdfGrids )
delete m_subMdfGrids;
124 if (m_solutionRealizer )
delete m_solutionRealizer;
126 if (m_mcSeqGenerator )
delete m_mcSeqGenerator;
134 m_paramChain->clear();
138 if (m_optionsObj )
delete m_optionsObj;
142 template <
class P_V,
class P_M,
class Q_V,
class Q_M>
146 return m_optionsObj->m_computeSolution;
149 template <
class P_V,
class P_M,
class Q_V,
class Q_M>
154 m_env.fullComm().Barrier();
155 m_env.fullComm().syncPrintDebugMsg(
"Entering StatisticalForwardProblem<P_V,P_M>::solveWithMonteCarlo()",1,3000000);
157 if (m_optionsObj->m_computeSolution ==
false) {
158 if ((m_env.subDisplayFile())) {
159 *m_env.subDisplayFile() <<
"In StatisticalForwardProblem<P_V,P_M,Q_V,Q_M>::solveWithMonteCarlo()"
160 <<
": avoiding solution, as requested by user"
165 if ((m_env.subDisplayFile())) {
166 *m_env.subDisplayFile() <<
"In StatisticalForwardProblem<P_V,P_M,Q_V,Q_M>::solveWithMonteCarlo()"
167 <<
": computing solution, as requested by user"
171 if (m_solutionPdf )
delete m_solutionPdf;
173 #ifdef QUESO_COMPUTES_EXTRA_POST_PROCESSING_STATISTICS
174 if (m_unifiedSolutionCdf)
delete m_unifiedSolutionCdf;
175 if (m_unifiedCdfValues )
delete m_unifiedCdfValues;
176 if (m_unifiedCdfGrids )
delete m_unifiedCdfGrids;
178 if (m_subSolutionCdf )
delete m_subSolutionCdf;
179 if (m_subCdfValues )
delete m_subCdfValues;
180 if (m_subCdfGrids )
delete m_subCdfGrids;
182 if (m_subSolutionMdf )
delete m_subSolutionMdf;
184 #ifdef UQ_ALSO_COMPUTE_MDFS_WITHOUT_KDE
185 if (m_subMdfValues )
delete m_subMdfValues;
186 if (m_subMdfGrids )
delete m_subMdfGrids;
188 if (m_solutionRealizer )
delete m_solutionRealizer;
190 if (m_mcSeqGenerator )
delete m_mcSeqGenerator;
198 m_paramChain->clear();
202 Q_V numEvaluationPointsVec(m_qoiRv.imageSet().vectorSpace().zeroVector());
203 numEvaluationPointsVec.cwSet(250.);
209 alternativeOptionsValues,
213 m_mcSeqGenerator->generateSequence(*m_paramChain,
217 m_qoiRv.setRealizer(*m_solutionRealizer);
220 #ifdef UQ_ALSO_COMPUTE_MDFS_WITHOUT_KDE
223 m_qoiChain->subUniformlySampledMdf(numEvaluationPointsVec,
230 m_qoiRv.setMdf(*m_subSolutionMdf);
234 #ifdef QUESO_COMPUTES_EXTRA_POST_PROCESSING_STATISTICS
235 std::string subCoreName_qoiCdf(m_optionsObj->m_prefix+
"QoiCdf_");
236 std::string uniCoreName_qoiCdf(m_optionsObj->m_prefix+
"unifQoiCdf_");
237 if (m_env.numSubEnvironments() == 1) subCoreName_qoiCdf = uniCoreName_qoiCdf;
239 std::string subCoreName_solutionCdf(m_optionsObj->m_prefix+
"Qoi");
240 std::string uniCoreName_solutionCdf(m_optionsObj->m_prefix+
"unifQoi");
241 if (m_env.numSubEnvironments() == 1) subCoreName_solutionCdf = uniCoreName_solutionCdf;
252 m_qoiRv.setSubCdf(*m_subSolutionCdf);
255 if (m_env.numSubEnvironments() == 1) {
256 m_qoiRv.setUnifiedCdf(*m_subSolutionCdf);
263 *m_unifiedCdfValues);
267 *m_unifiedCdfValues);
268 m_qoiRv.setUnifiedCdf(*m_unifiedSolutionCdf);
273 P_M* pqCovarianceMatrix = NULL;
274 P_M* pqCorrelationMatrix = NULL;
275 if (m_optionsObj->m_computeCovariances || m_optionsObj->m_computeCorrelations) {
276 if (m_env.subDisplayFile()) {
277 *m_env.subDisplayFile() <<
"In StatisticalForwardProblem<P_V,P_M,Q_V,Q_M>::solveWithMonteCarlo()"
278 <<
", prefix = " << m_optionsObj->
m_prefix
279 <<
": instantiating cov and corr matrices"
282 pqCovarianceMatrix =
new P_M(m_env,
283 m_paramRv.imageSet().vectorSpace().map(),
284 m_qoiRv.imageSet().vectorSpace().dimGlobal());
285 pqCorrelationMatrix =
new P_M(m_env,
286 m_paramRv.imageSet().vectorSpace().map(),
287 m_qoiRv.imageSet().vectorSpace().dimGlobal());
290 std::min(m_paramRv.realizer().subPeriod(),m_qoiRv.realizer().subPeriod()),
292 *pqCorrelationMatrix);
296 if (m_env.subDisplayFile()) {
297 if (pqCovarianceMatrix ) {
298 *m_env.subDisplayFile() <<
"In StatisticalForwardProblem<P_V,P_M,Q_V,Q_M>::solveWithMonteCarlo()"
299 <<
", prefix = " << m_optionsObj->m_prefix
300 <<
": contents of covariance matrix are\n" << *pqCovarianceMatrix
303 if (pqCorrelationMatrix) {
304 *m_env.subDisplayFile() <<
"In StatisticalForwardProblem<P_V,P_M,Q_V,Q_M>::solveWithMonteCarlo()"
305 <<
", prefix = " << m_optionsObj->m_prefix
306 <<
": contents of correlation matrix are\n" << *pqCorrelationMatrix
312 if (m_env.subDisplayFile()) {
313 *m_env.subDisplayFile() <<
"In StatisticalForwardProblem<P_V,P_M,Q_V,Q_M>::solveWithMonteCarlo()"
314 <<
", prefix = " << m_optionsObj->m_prefix
315 <<
": checking necessity of opening data output file '" << m_optionsObj->m_dataOutputFileName
320 if (m_env.openOutputFile(m_optionsObj->m_dataOutputFileName,
322 m_optionsObj->m_dataOutputAllowedSet,
325 #ifdef UQ_ALSO_COMPUTE_MDFS_WITHOUT_KDE
326 m_qoiRv.mdf().print(*filePtrSet.
ofsVar);
328 #ifdef QUESO_COMPUTES_EXTRA_POST_PROCESSING_STATISTICS
329 *filePtrSet.
ofsVar << m_qoiRv.subCdf();
336 #ifdef QUESO_COMPUTES_EXTRA_POST_PROCESSING_STATISTICS
337 if (m_env.numSubEnvironments() > 1) {
338 if (m_qoiRv.imageSet().vectorSpace().numOfProcsForStorage() == 1) {
339 if (m_env.inter0Rank() == 0) {
340 *filePtrSet.
ofsVar << m_qoiRv.unifiedCdf();
344 queso_error_msg(
"unified cdf writing, parallel vectors not supported yet");
350 if (m_env.subDisplayFile()) {
351 *m_env.subDisplayFile() <<
"In StatisticalForwardProblem<P_V,P_M,Q_V,Q_M>::solveWithMonteCarlo()"
352 <<
", prefix = " << m_optionsObj->m_prefix
353 <<
": closed data output file '" << m_optionsObj->m_dataOutputFileName
358 if (m_env.subDisplayFile()) {
359 *m_env.subDisplayFile() << std::endl;
362 if (pqCovarianceMatrix )
delete pqCovarianceMatrix;
363 if (pqCorrelationMatrix)
delete pqCorrelationMatrix;
365 m_env.fullComm().syncPrintDebugMsg(
"Leaving StatisticalForwardProblem<P_V,P_M>::solveWithMonteCarlo()",1,3000000);
366 m_env.fullComm().Barrier();
371 template <
class P_V,
class P_M,
class Q_V,
class Q_M>
379 #ifdef QUESO_COMPUTES_EXTRA_POST_PROCESSING_STATISTICS
380 template <
class P_V,
class P_M,
class Q_V,
class Q_M>
384 if (m_env.numSubEnvironments() == 1) {
385 return m_qoiRv.subCdf();
388 if (m_env.inter0Rank() < 0) {
389 return m_qoiRv.subCdf();
396 return m_qoiRv.unifiedCdf();
400 template <
class P_V,
class P_M,
class Q_V,
class Q_M>
401 const BaseVectorSequence<Q_V,Q_M>&
409 return *m_paramChain;
413 template <
class P_V,
class P_M,
class Q_V,
class Q_M>
Class to accommodate arrays of one-dimensional grid.
A class for handling sampled vector MDFs.
bool computeSolutionFlag() const
Whether or not compute the solution.
~StatisticalForwardProblem()
Destructor.
std::ofstream * ofsVar
Provides a stream interface to write data to files.
Struct for handling data input and output from files.
StatisticalForwardProblem(const char *prefix, const SfpOptionsValues *alternativeOptionsValues, const BaseVectorRV< P_V, P_M > ¶mRv, const BaseVectorFunction< P_V, P_M, Q_V, Q_M > &qoiFunction, GenericVectorRV< Q_V, Q_M > &qoiRv)
Constructor.
void print(std::ostream &os) const
TODO: Prints the sequence.
#define queso_error_msg(msg)
void ComputeCovCorrMatricesBetweenVectorSequences(const BaseVectorSequence< P_V, P_M > &subPSeq, const BaseVectorSequence< Q_V, Q_M > &subQSeq, unsigned int subNumSamples, P_M &pqCovMatrix, P_M &pqCorrMatrix)
This class provides options for a Statistical Forward Problem if no input file is available...
void unifiedUniformlySampledCdf(const V &numEvaluationPointsVec, ArrayOfOneDGrids< V, M > &unifiedCdfGrids, ArrayOfOneDTables< V, M > &unifiedCdfValues) const
Uniformly samples from the CDF from the sub-sequence.
This class provides options for the Monte Carlo sequence generator if no input file is available...
#define queso_require_equal_to_msg(expr1, expr2, msg)
A class for handling sampled vector CDFs.
void subUniformlySampledCdf(const V &numEvaluationPointsVec, ArrayOfOneDGrids< V, M > &cdfGrids, ArrayOfOneDTables< V, M > &cdfValues) const
Uniformly samples from the CDF from the sub-sequence.
const BaseVectorSequence< Q_V, Q_M > & getParamChain() const
Returns the parameter chain; access to private attribute m_paramChain.
#define queso_require_msg(asserted, msg)
This templated class represents a Statistical Forward Problem.
#define UQ_FILE_EXTENSION_FOR_MATLAB_FORMAT
Class to accommodate arrays of one-dimensional tables.
A class for handling sequential draws (sampling) from probability density distributions.
const GenericVectorRV< Q_V, Q_M > & qoiRv() const
Returns the QoI RV; access to private attribute m_qoiRv.
void solveWithMonteCarlo(const McOptionsValues *alternativeOptionsValues)
Solves the problem through Monte Carlo algorithm.
A templated class that implements a Monte Carlo generator of samples.