int main(int argc, char ** argv) { #ifdef QUESO_HAS_MPI MPI_Init(&argc, &argv); QUESO::FullEnvironment env(MPI_COMM_WORLD, "", "", NULL); #else QUESO::FullEnvironment env("", "", NULL); #endif QUESO::VectorSpace<> paramSpace(env, "param_", 1, NULL); QUESO::GslVector paramMins(paramSpace.zeroVector()); paramMins.cwSet(0.0); QUESO::GslVector paramMaxs(paramSpace.zeroVector()); paramMaxs.cwSet(1.0); QUESO::BoxSubset<> paramDomain("param_", paramSpace, paramMins, paramMaxs); // We should test the other cases of alpha and beta QUESO::GslVector alpha(paramSpace.zeroVector()); alpha[0] = 2.0; QUESO::GslVector beta(paramSpace.zeroVector()); beta[0] = 3.0; QUESO::BetaJointPdf<> pdf("", paramDomain, alpha, beta); QUESO::GslVector mean(paramSpace.zeroVector()); pdf.distributionMean(mean); const char *msg = "BetaJointPdf mean is incorrect"; double real_mean = alpha[0] / (alpha[0] + beta[0]); queso_require_less_equal_msg(std::abs(mean[0]-real_mean), TOL, msg); QUESO::GslMatrix var(paramSpace.zeroVector()); pdf.distributionVariance(var); const char *msgv = "BetaJointPdf variance is incorrect"; double real_var = alpha[0] * beta[0] / (alpha[0] + beta[0]) / (alpha[0] + beta[0]) / (alpha[0] + beta[0] + 1); queso_require_less_equal_msg(std::abs(var(0,0)-real_var), TOL, msgv); #ifdef QUESO_HAS_MPI MPI_Finalize(); #endif return 0; }
/* extracts elements from vector (*this) starting at position initialPos and save in vec */ void TeuchosVector::cwExtract(unsigned int initialPos, TeuchosVector& vec) const { queso_require_less_msg(initialPos, this->sizeLocal(), "invalid initialPos"); queso_require_less_equal_msg((initialPos +vec.sizeLocal()), this->sizeLocal(), "invalid vec.sizeLocal()"); for (unsigned int i = 0; i < vec.sizeLocal(); ++i) { vec[i] = (*this)[initialPos+i]; } return; }
int main(int argc, char ** argv) { #ifdef QUESO_HAS_MPI MPI_Init(&argc, &argv); QUESO::FullEnvironment env(MPI_COMM_WORLD, "", "", NULL); #else QUESO::FullEnvironment env("", "", NULL); #endif QUESO::VectorSpace<> paramSpace1(env, "param1_", 4, NULL); QUESO::VectorSpace<> paramSpace2(env, "param2_", 2, NULL); QUESO::GslVector paramMins1(paramSpace1.zeroVector()); paramMins1[0] = 1e2; paramMins1[1] = -1e5; paramMins1[2] = 4e-3; paramMins1[3] = 1; QUESO::GslVector paramMaxs1(paramSpace1.zeroVector()); paramMaxs1[0] = 2e2; paramMaxs1[1] = 1e5; paramMaxs1[2] = 6e-3; paramMaxs1[3] = 11; QUESO::BoxSubset<> paramDomain1("", paramSpace1, paramMins1, paramMaxs1); QUESO::GslVector paramMins2(paramSpace2.zeroVector()); paramMins2[0] = -1e5; paramMins2[1] = 2e-3; QUESO::GslVector paramMaxs2(paramSpace2.zeroVector()); paramMaxs2[0] = 1e5; paramMaxs2[1] = 4e-3; QUESO::BoxSubset<> paramDomain2("", paramSpace2, paramMins2, paramMaxs2); QUESO::VectorSpace<> paramSpace(env, "param_", 6, NULL); QUESO::ConcatenationSubset<QUESO::GslVector,QUESO::GslMatrix> paramDomain("",paramSpace,paramDomain1,paramDomain2); QUESO::GslVector centroid(paramSpace.zeroVector()); paramDomain.centroid(centroid); const char *msg = "ConcatenationSubset centroid is incorrect"; queso_require_less_equal_msg(std::abs(centroid[0]-1.5e2), TOL, msg); queso_require_less_equal_msg(std::abs(centroid[1]), TOL, msg); queso_require_less_equal_msg(std::abs(centroid[2]-5e-3), TOL, msg); queso_require_less_equal_msg(std::abs(centroid[3]-6), TOL, msg); queso_require_less_equal_msg(std::abs(centroid[4]), TOL, msg); queso_require_less_equal_msg(std::abs(centroid[5]-3e-3), TOL, msg); #ifdef QUESO_HAS_MPI MPI_Finalize(); #endif return 0; }
void GslVector::cwSet(unsigned int initialPos, const GslVector& vec) { queso_require_less_msg(initialPos, this->sizeLocal(), "invalid initialPos"); queso_require_less_equal_msg((initialPos +vec.sizeLocal()), this->sizeLocal(), "invalid vec.sizeLocal()"); for (unsigned int i = 0; i < vec.sizeLocal(); ++i) { (*this)[initialPos+i] = vec[i]; } return; }
int main(int argc, char ** argv) { #ifdef QUESO_HAS_MPI MPI_Init(&argc, &argv); QUESO::FullEnvironment env(MPI_COMM_WORLD, "", "", NULL); #else QUESO::FullEnvironment env("", "", NULL); #endif QUESO::VectorSpace<> paramSpace(env, "param_", 2, NULL); QUESO::GslVector lawexp(paramSpace.zeroVector()); lawexp[0] = 2.4; lawexp[1] = 0.4; QUESO::GslVector lawvar(paramSpace.zeroVector()); lawvar[0] = 1.2; lawvar[1] = 0.9; QUESO::LogNormalJointPdf<> pdf("", paramSpace, lawexp, lawvar); QUESO::GslVector mean(paramSpace.zeroVector()); pdf.distributionMean(mean); double realmean0 = std::exp(lawexp[0] + lawvar[0]/2); double realmean1 = std::exp(lawexp[1] + lawvar[1]/2); const char *msg = "LogNormalJointPdf mean is incorrect"; queso_require_less_equal_msg(std::abs(mean[0]-realmean0), TOL, msg); queso_require_less_equal_msg(std::abs(mean[1]-realmean1), TOL, msg); QUESO::GslMatrix var(paramSpace.zeroVector()); pdf.distributionVariance(var); double realvar0 = (std::exp(lawvar[0])-1) * std::exp(2*lawexp[0] + lawvar[0]); double realvar1 = (std::exp(lawvar[1])-1) * std::exp(2*lawexp[1] + lawvar[1]); const char *msgv = "LogNormalJointPdf variance is incorrect"; queso_require_less_equal_msg(std::abs(var(0,0)-realvar0), TOL, msgv); queso_require_less_equal_msg(std::abs(var(0,1)), TOL, msgv); queso_require_less_equal_msg(std::abs(var(1,0)), TOL, msgv); queso_require_less_equal_msg(std::abs(var(1,1)-realvar1), TOL, msgv); #ifdef QUESO_HAS_MPI MPI_Finalize(); #endif return 0; }
void GslVector::subWriteContents( const std::string& varNamePrefix, const std::string& fileName, const std::string& fileType, const std::set<unsigned int>& allowedSubEnvIds) const { queso_require_greater_equal_msg(m_env.subRank(), 0, "unexpected subRank"); queso_require_less_equal_msg(this->numOfProcsForStorage(), 1, "implemented just for sequential vectors for now"); FilePtrSetStruct filePtrSet; if (m_env.openOutputFile(fileName, fileType, // "m or hdf" allowedSubEnvIds, false, filePtrSet)) { *filePtrSet.ofsVar << varNamePrefix << "_sub" << m_env.subIdString() << " = zeros(" << this->sizeLocal() << "," << 1 << ");" << std::endl; *filePtrSet.ofsVar << varNamePrefix << "_sub" << m_env.subIdString() << " = ["; bool savedVectorPrintScientific = this->getPrintScientific(); bool savedVectorPrintHorizontally = this->getPrintHorizontally(); this->setPrintScientific (true); this->setPrintHorizontally(false); *filePtrSet.ofsVar << *this; //<< std::endl; // No need for 'endl' because horizontally = 'false' this->setPrintHorizontally(savedVectorPrintHorizontally); this->setPrintScientific (savedVectorPrintScientific); *filePtrSet.ofsVar << "];\n"; m_env.closeFile(filePtrSet,fileType); } return; }
void GPMSAFactory<V, M>::addExperiments( const std::vector<V *> & experimentScenarios, const std::vector<V *> & experimentOutputs, const M * experimentErrors) { queso_require_less_equal_msg(experimentScenarios.size(), this->m_numExperiments, "too many experiments..."); for (unsigned int i = 0; i < this->m_experimentScenarios.size(); i++) { this->m_experimentScenarios[i] = experimentScenarios[i]; this->m_experimentOutputs[i] = experimentOutputs[i]; } this->m_experimentErrors = experimentErrors; this->m_numExperimentAdds += experimentScenarios.size(); if ((this->m_numSimulationAdds == this->m_numSimulations) && (this->m_numExperimentAdds == this->m_numExperiments) && (this->m_constructedGP == false)) { this->m_constructedGP = true; this->gpmsaEmulator = new GPMSAEmulator<V, M>( this->prior().imageSet(), this->m_scenarioSpace, this->m_parameterSpace, this->m_simulationOutputSpace, this->m_experimentOutputSpace, this->m_numSimulations, this->m_numExperiments, this->m_simulationScenarios, this->m_simulationParameters, this->m_simulationOutputs, this->m_experimentScenarios, this->m_experimentOutputs, *(this->m_experimentErrors), *(this->m_totalPrior)); } }
void GslVector::matlabDiff( unsigned int firstPositionToStoreDiff, double valueForRemainderPosition, GslVector& outputVec) const { unsigned int size = this->sizeLocal(); queso_require_less_equal_msg(firstPositionToStoreDiff, 1, "invalid firstPositionToStoreDiff"); queso_require_equal_to_msg(size, outputVec.sizeLocal(), "invalid size of outputVecs"); for (unsigned int i = 0; i < (size-1); ++i) { outputVec[firstPositionToStoreDiff+i] = (*this)[i+1]-(*this)[i]; } if (firstPositionToStoreDiff == 0) { outputVec[size-1] = valueForRemainderPosition; } else { outputVec[0] = valueForRemainderPosition; } return; }
int main(int argc, char ** argv) { #ifdef QUESO_HAS_MPI MPI_Init(&argc, &argv); QUESO::FullEnvironment env(MPI_COMM_WORLD, "", "", NULL); #else QUESO::FullEnvironment env("", "", NULL); #endif unsigned int dim = 3; QUESO::VectorSpace<> paramSpace(env, "param_", dim, NULL); QUESO::GslVector paramMins(paramSpace.zeroVector()); paramMins.cwSet(-INFINITY); QUESO::GslVector paramMaxs(paramSpace.zeroVector()); paramMaxs.cwSet(INFINITY); QUESO::BoxSubset<> paramDomain("param_", paramSpace, paramMins, paramMaxs); QUESO::GslVector mean(paramSpace.zeroVector()); QUESO::GslMatrix var(paramSpace.zeroVector()); mean[0] = 2.0; mean[1] = 3.0; mean[2] = 4.0; var(0,0) = 5.0; var(1,1) = 6.0; var(2,2) = 7.0; // Construct a Gaussian PDF QUESO::GaussianJointPdf<> pdf("", paramDomain, mean, var); // Vectors to store gradient calculations QUESO::GslVector lnGradVector(paramSpace.zeroVector()); QUESO::GslVector gradVector(paramSpace.zeroVector()); // Where to evaluate the gradient. Evaluating at the mean (the mode for a // Gaussian) should give a gradient consisting of a vector of zeros. QUESO::GslVector point(mean); // We are testing that the gradient of log of the pdf is all zeros pdf.lnValue(point, NULL, &lnGradVector, NULL, NULL); queso_require_less_equal_msg(std::abs(lnGradVector[0]), TOL, "grad log gaussian pdf values are incorrect"); queso_require_less_equal_msg(std::abs(lnGradVector[1]), TOL, "grad log gaussian pdf values are incorrect"); queso_require_less_equal_msg(std::abs(lnGradVector[2]), TOL, "grad log gaussian pdf values are incorrect"); // We are testing that the of the pdf is all zeros pdf.actualValue(point, NULL, &gradVector, NULL, NULL); queso_require_less_equal_msg(std::abs(gradVector[0]), TOL, "grad guassian pdf values are incorrect"); queso_require_less_equal_msg(std::abs(gradVector[1]), TOL, "grad guassian pdf values are incorrect"); queso_require_less_equal_msg(std::abs(gradVector[2]), TOL, "grad guassian pdf values are incorrect"); // Now construct another Gaussian. This time we're constructing a Gaussian // that we know will have a gradient consisting entirely of ones (in log // space). mean[0] = 0.0; mean[1] = 0.0; mean[2] = 0.0; var(0,0) = 1.0; var(0,1) = 0.8; var(0,2) = 0.7; var(1,0) = 0.8; var(1,1) = 2.0; var(1,2) = 0.6; var(2,0) = 0.7; var(2,1) = 0.6; var(2,2) = 3.0; point[0] = -2.5; point[1] = -3.4; point[2] = -4.3; QUESO::GaussianJointPdf<> pdf2("", paramDomain, mean, var); pdf2.lnValue(point, NULL, &lnGradVector, NULL, NULL); queso_require_less_equal_msg(std::abs(lnGradVector[0] - 1.0), TOL, "grad log gaussian pdf2 values are incorrect"); queso_require_less_equal_msg(std::abs(lnGradVector[1] - 1.0), TOL, "grad log gaussian pdf2 values are incorrect"); queso_require_less_equal_msg(std::abs(lnGradVector[2] - 1.0), TOL, "grad log gaussian pdf2 values are incorrect"); #ifdef QUESO_HAS_MPI MPI_Finalize(); #endif return 0; }
void GslVector::subReadContents( const std::string& fileName, const std::string& fileType, const std::set<unsigned int>& allowedSubEnvIds) { queso_require_greater_equal_msg(m_env.subRank(), 0, "unexpected subRank"); queso_require_less_equal_msg(this->numOfProcsForStorage(), 1, "implemented just for sequential vectors for now"); FilePtrSetStruct filePtrSet; if (m_env.openInputFile(fileName, fileType, // "m or hdf" allowedSubEnvIds, filePtrSet)) { double subReadSize = this->sizeLocal(); // In the logic below, the id of a line' begins with value 0 (zero) unsigned int idOfMyFirstLine = 1; unsigned int idOfMyLastLine = this->sizeLocal(); unsigned int numParams = 1; // Yes, just '1' // Read number of chain positions in the file by taking care of the first line, // which resembles something like 'variable_name = zeros(n_positions,m_params);' std::string tmpString; // Read 'variable name' string *filePtrSet.ifsVar >> tmpString; //std::cout << "Just read '" << tmpString << "'" << std::endl; // Read '=' sign *filePtrSet.ifsVar >> tmpString; //std::cout << "Just read '" << tmpString << "'" << std::endl; queso_require_equal_to_msg(tmpString, "=", "string should be the '=' sign"); // Read 'zeros(n_positions,n_params)' string *filePtrSet.ifsVar >> tmpString; //std::cout << "Just read '" << tmpString << "'" << std::endl; unsigned int posInTmpString = 6; // Isolate 'n_positions' in a string char nPositionsString[tmpString.size()-posInTmpString+1]; unsigned int posInPositionsString = 0; do { queso_require_less_msg(posInTmpString, tmpString.size(), "symbol ',' not found in first line of file"); nPositionsString[posInPositionsString++] = tmpString[posInTmpString++]; } while (tmpString[posInTmpString] != ','); nPositionsString[posInPositionsString] = '\0'; // Isolate 'n_params' in a string posInTmpString++; // Avoid reading ',' char char nParamsString[tmpString.size()-posInTmpString+1]; unsigned int posInParamsString = 0; do { queso_require_less_msg(posInTmpString, tmpString.size(), "symbol ')' not found in first line of file"); nParamsString[posInParamsString++] = tmpString[posInTmpString++]; } while (tmpString[posInTmpString] != ')'); nParamsString[posInParamsString] = '\0'; // Convert 'n_positions' and 'n_params' strings to numbers unsigned int sizeOfVecInFile = (unsigned int) strtod(nPositionsString,NULL); unsigned int numParamsInFile = (unsigned int) strtod(nParamsString, NULL); if (m_env.subDisplayFile()) { *m_env.subDisplayFile() << "In GslVector::subReadContents()" << ": fullRank " << m_env.fullRank() << ", sizeOfVecInFile = " << sizeOfVecInFile << ", numParamsInFile = " << numParamsInFile << ", this->sizeLocal() = " << this->sizeLocal() << std::endl; } // Check if [size of vec in file] >= [requested sub vec size] queso_require_greater_equal_msg(sizeOfVecInFile, subReadSize, "size of vec in file is not big enough"); // Check if [num params in file] == [num params in current vec] queso_require_equal_to_msg(numParamsInFile, numParams, "number of parameters of vec in file is different than number of parameters in this vec object"); // Code common to any core in a communicator unsigned int maxCharsPerLine = 64*numParams; // Up to about 60 characters to represent each parameter value unsigned int lineId = 0; while (lineId < idOfMyFirstLine) { filePtrSet.ifsVar->ignore(maxCharsPerLine,'\n'); lineId++; }; if (m_env.subDisplayFile()) { *m_env.subDisplayFile() << "In GslVector::subReadContents()" << ": beginning to read input actual data" << std::endl; } // Take care of initial part of the first data line, // which resembles something like 'variable_name = [value1 value2 ...' // Read 'variable name' string *filePtrSet.ifsVar >> tmpString; //std::cout << "Core 0 just read '" << tmpString << "'" << std::endl; // Read '=' sign *filePtrSet.ifsVar >> tmpString; //std::cout << "Core 0 just read '" << tmpString << "'" << std::endl; queso_require_equal_to_msg(tmpString, "=", "in core 0, string should be the '=' sign"); // Take into account the ' [' portion std::streampos tmpPos = filePtrSet.ifsVar->tellg(); filePtrSet.ifsVar->seekg(tmpPos+(std::streampos)2); if (m_env.subDisplayFile()) { *m_env.subDisplayFile() << "In GslVector::subReadContents()" << ": beginning to read lines with numbers only" << ", lineId = " << lineId << ", idOfMyFirstLine = " << idOfMyFirstLine << ", idOfMyLastLine = " << idOfMyLastLine << std::endl; } while (lineId <= idOfMyLastLine) { *filePtrSet.ifsVar >> (*this)[lineId - idOfMyFirstLine]; lineId++; }; m_env.closeFile(filePtrSet,fileType); }
// Default constructor ----------------------------- FiniteDistribution::FiniteDistribution( const BaseEnvironment& env, const char* prefix, const std::vector<double>& inpWeights) : m_env (env), m_prefix ((std::string)(prefix)+"fd_"), m_weights(inpWeights.size(),0.) { queso_deprecated(); if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 5)) { *m_env.subDisplayFile() << "Entering FiniteDistribution::constructor()" << ": prefix = " << m_prefix << ", inpWeights.size() = " << inpWeights.size() << std::endl; } unsigned int numOfZeroWeights = 0; unsigned int numRareCases = 0; double sumCheck = 0.; unsigned int j = 0; m_map.empty(); // prudenci 2010-08-11 for (unsigned int i = 0; i < inpWeights.size(); ++i) { double previousSum = sumCheck; sumCheck += inpWeights[i]; if (sumCheck == previousSum) { numOfZeroWeights++; } else { if ((sumCheck - 1) > 1.e-8) { std::cerr << "In FiniteDistribution::constructor()" << ": sumCheck - 1 = " << sumCheck - 1. << std::endl; } queso_require_less_equal_msg((sumCheck - 1), 1.e-8, "weights sum is too bigger than 1."); if (sumCheck > 1.) sumCheck = 1.; m_weights[j] = inpWeights[i]; std::pair<std::map<double,unsigned int>::iterator,bool> ret; ret = m_map.insert(std::map<double,unsigned int>::value_type(sumCheck,i)); if (ret.second == true) { j++; } else { numRareCases++; if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 2)) { *m_env.subDisplayFile() << "In FiniteDistribution::constructor()" << ": WARNING, map insertion failed" << std::endl; } } } } m_weights.resize(j,0.); if ((1 - sumCheck) > 1.e-8) { std::cerr << "In FiniteDistribution::constructor()" << ": 1 - sumCheck = " << 1. - sumCheck << std::endl; } queso_require_less_equal_msg((1 - sumCheck), 1.e-8, "weights sum is too smaller than 1."); if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 3)) { *m_env.subDisplayFile() << "In FiniteDistribution::constructor()" << ": inpWeights.size() = " << inpWeights.size() << ", numOfZeroWeights = " << numOfZeroWeights << ", numRareCases = " << numRareCases << ", m_map.size() = " << m_map.size() << ", m_weights.size() = " << m_weights.size() << std::endl; } queso_require_equal_to_msg(inpWeights.size(), (m_weights.size()+numOfZeroWeights+numRareCases), "number of input weights was not conserved"); queso_require_equal_to_msg(m_map.size(), m_weights.size(), "map and inpWeights have different sizes"); if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 5)) { *m_env.subDisplayFile() << "Leaving FiniteDistribution::constructor()" << ": prefix = " << m_prefix << std::endl; } }