25 #include <queso/ScalarGaussianRandomField.h> 
   26 #include <queso/GaussianVectorRV.h> 
   31 template <
class V, 
class M>
 
   38   m_env                (indexSet.env()),
 
   39   m_prefix             ((std::string)(prefix)+
"grf_"),
 
   40   m_indexSet           (indexSet),
 
   41   m_meanFunction       (meanFunction),
 
   42   m_covarianceFunction (covarianceFunction),
 
   43   m_savedRvImageSpace  (NULL),
 
   44   m_savedRvLawExpVector(NULL),
 
   45   m_savedRvLawCovMatrix(NULL),
 
   51 template <
class V, 
class M>
 
   56 template <
class V, 
class M>
 
   63 template <
class V, 
class M>
 
   67   return m_meanFunction;
 
   70 template <
class V, 
class M>
 
   74   return m_covarianceFunction;
 
   77 template <
class V, 
class M>
 
   81   if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 99)) {
 
   82     *m_env.subDisplayFile() << 
"Entering ScalarGaussianRandomField<V,M>::sampleFunction()" 
   88                       "ScalarGaussianRandomField<V,M>::sampleFunction()",
 
   89                       "invalid input data");
 
   91   if ((m_savedPositions.size() == 0   ) &&
 
   92       (m_savedRvImageSpace     == NULL) &&
 
   93       (m_savedRvLawExpVector   == NULL) &&
 
   94       (m_savedRvLawCovMatrix   == NULL) &&
 
   95       (m_savedRv               == NULL)) {
 
   98   else if ((m_savedPositions.size() != 0   ) &&
 
   99            (m_savedRvImageSpace     != NULL) &&
 
  100            (m_savedRvLawExpVector   != NULL) &&
 
  101            (m_savedRvLawCovMatrix   != NULL) &&
 
  102            (m_savedRv               != NULL)) {
 
  108                         "ScalarGaussianRandomField<V,M>::sampleFunction()",
 
  109                         "invalid combination of pointer values");
 
  112   unsigned int numberOfPositions = fieldPositions.size();
 
  113   bool instantiate = 
true;
 
  114   if (m_savedPositions.size() == numberOfPositions) {
 
  115     bool allPositionsAreEqual = 
true;
 
  116     for (
unsigned int i = 0; i < numberOfPositions; ++i) {
 
  119                           "ScalarGaussianRandomField<V,M>::sampleFunction()",
 
  120                           "m_savedPositions[i] should not be NULL");
 
  121       if ((m_savedPositions[i]->sizeLocal() == fieldPositions[i]->sizeLocal()) &&
 
  122           (*(m_savedPositions[i])           == *(fieldPositions[i])          )) {
 
  126         allPositionsAreEqual = 
false;
 
  130     instantiate = !allPositionsAreEqual;
 
  135     delete m_savedRvLawCovMatrix;
 
  136     delete m_savedRvLawExpVector;
 
  137     delete m_savedRvImageSpace;
 
  138     for (
unsigned int i = 0; i < m_savedPositions.size(); ++i) {
 
  139       delete m_savedPositions[i];
 
  141     m_savedPositions.clear();
 
  144     m_savedPositions.resize(numberOfPositions,NULL);
 
  145     for (
unsigned int i = 0; i < m_savedPositions.size(); ++i) {
 
  146       m_savedPositions[i] = 
new V(*(fieldPositions[i]));
 
  150     m_savedRvImageSpace = 
new VectorSpace<V,M>(m_env, 
"grf_", numberOfPositions, NULL);
 
  153     m_savedRvLawExpVector = 
new V(m_savedRvImageSpace->zeroVector());
 
  154     for (
unsigned int i = 0; i < numberOfPositions; ++i) {
 
  155       (*m_savedRvLawExpVector)[i] = m_meanFunction.actualValue(*(fieldPositions[i]),NULL,NULL,NULL,NULL);
 
  159     m_savedRvLawCovMatrix = 
new M(m_savedRvImageSpace->zeroVector());
 
  160     for (
unsigned int i = 0; i < numberOfPositions; ++i) {
 
  161       for (
unsigned int j = 0; j < numberOfPositions; ++j) {
 
  162         (*m_savedRvLawCovMatrix)(i,j) = m_covarianceFunction.value(*(fieldPositions[i]),*(fieldPositions[j]));
 
  163         if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 3)) {
 
  164           *m_env.subDisplayFile() << 
"In ScalarGaussianRandomField<V,M>::sampleFunction()" 
  167                                   << 
", *(fieldPositions[i]) = " << *(fieldPositions[i])
 
  168                                   << 
", *(fieldPositions[j]) = " << *(fieldPositions[j])
 
  169                                   << 
", (*m_savedRvLawCovMatrix)(i,j) = " << (*m_savedRvLawCovMatrix)(i,j)
 
  177                                                  *m_savedRvImageSpace,
 
  178                                                  *m_savedRvLawExpVector,
 
  179                                                  *m_savedRvLawCovMatrix);
 
  181     if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 3)) {
 
  182       *m_env.subDisplayFile() << 
"In ScalarGaussianRandomField<V,M>::sampleFunction()" 
  183                               << 
": just instantiated Gaussian RV" 
  184                               << 
"\n *m_savedRvLawExpVector = " << *m_savedRvLawExpVector
 
  185                               << 
"\n *m_savedRvLawCovMatrix = " << *m_savedRvLawCovMatrix
 
  187       for (
unsigned int i = 0; i < numberOfPositions; ++i) {
 
  188         *m_env.subDisplayFile() << 
" *(m_savedPositions[" << i
 
  189                                 << 
"]) = "                << *(m_savedPositions[i])
 
  196   if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 99)) {
 
  197     *m_env.subDisplayFile() << 
"In ScalarGaussianRandomField<V,M>::sampleFunction()" 
  198                             << 
": about to realize sample values" 
  201   m_savedRv->realizer().realization(sampleValues);
 
  202   if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 99)) {
 
  203     *m_env.subDisplayFile() << 
"In ScalarGaussianRandomField<V,M>::sampleFunction()" 
  204                             << 
": just realized sample values" 
  208   if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 99)) {
 
  209     *m_env.subDisplayFile() << 
"Leaving ScalarGaussianRandomField<V,M>::sampleFunction()" 
A templated class for handling sets. 
 
std::vector< V * > m_savedPositions
Saved positions. 
 
ScalarGaussianRandomField(const char *prefix, const VectorSet< V, M > &indexSet, const BaseScalarFunction< V, M > &meanFunction, const BaseScalarCovarianceFunction< V, M > &covarianceFunction)
Constructor. 
 
#define UQ_FATAL_TEST_MACRO(test, givenRank, where, what)
 
A templated (base) class for handling scalar functions. 
 
void sampleFunction(const std::vector< V * > &fieldPositions, V &sampleValues)
Function that samples from a Gaussian PDF. 
 
~ScalarGaussianRandomField()
Destructor. 
 
A templated (base) class to accommodate scalar covariance functions (of random variables). 
 
const BaseScalarFunction< V, M > & meanFunction() const 
Mean function; access to protected attribute m_meanFunction. 
 
const BaseScalarCovarianceFunction< V, M > & covarianceFunction() const 
Covariance function; access to protected attribute m_covarianceFunction. 
 
A class representing a vector space. 
 
A class representing a Gaussian vector RV. 
 
const VectorSet< V, M > & indexSet() const 
Index set; access to protected attribute m_indexSet.