GslVector::GslVector(const GslVector& v, double start, double end) : Vector(v.env(),v.map()), m_vec (gsl_vector_calloc(v.sizeLocal())) { //std::cout << "Entering GslVector::constructor(4)" << std::endl; UQ_FATAL_TEST_MACRO((m_vec == NULL), m_env.worldRank(), "GslVector::constructor(4), linspace", "null vector generated"); UQ_FATAL_TEST_MACRO(m_vec->size != (unsigned int) v.map().NumMyElements(), m_env.worldRank(), "GslVector::constructor(4)", "incompatible local vec size"); UQ_FATAL_TEST_MACRO(m_vec->size != (unsigned int) v.map().NumGlobalElements(), m_env.worldRank(), "GslVector::constructor(4)", "incompatible global vec size"); for (unsigned int i = 0; i < m_vec->size; ++i) { double alpha = (double) i / ((double) m_vec->size - 1.); (*this)[i] = (1. - alpha) * start + alpha * end; } UQ_FATAL_TEST_MACRO(m_vec->size != (unsigned int) m_map.NumMyElements(), m_env.worldRank(), "GslVector::constructor(4)", "incompatible own vec size"); //std::cout << "Leaving GslVector::constructor(4)" << std::endl; }
GslVector::GslVector(const GslVector& v) // mox : Vector(v.env(),v.map()), m_vec (gsl_vector_calloc(v.sizeLocal())) { //std::cout << "Entering GslVector::constructor(5)" << std::endl; // prudenci 2010-06-17 mox UQ_FATAL_TEST_MACRO((m_vec == NULL), m_env.worldRank(), "GslVector::constructor(5), copy", "null vector generated"); UQ_FATAL_TEST_MACRO(m_vec->size != (unsigned int) v.map().NumMyElements(), m_env.worldRank(), "GslVector::constructor(5)", "incompatible local vec size"); UQ_FATAL_TEST_MACRO(m_vec->size != (unsigned int) v.map().NumGlobalElements(), m_env.worldRank(), "GslVector::constructor(5)", "incompatible global vec size"); this->copy(v); UQ_FATAL_TEST_MACRO(m_vec->size != (unsigned int) m_map.NumMyElements(), m_env.worldRank(), "GslVector::constructor(5)", "incompatible own vec size"); //std::cout << "Leaving GslVector::constructor(5)" << std::endl; }
void GslVector::cwSetBeta(const GslVector& alpha, const GslVector& beta) { queso_require_equal_to_msg(this->sizeLocal(), alpha.sizeLocal(), "incompatible alpha size"); queso_require_equal_to_msg(this->sizeLocal(), beta.sizeLocal(), "incompatible beta size"); double tmpSample = 0.; for (unsigned int i = 0; i < this->sizeLocal(); ++i) { tmpSample = m_env.rngObject()->betaSample(alpha[i],beta[i]); if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 99)) { *m_env.subDisplayFile() << "In GslVector::cwSetBeta()" << ": fullRank " << m_env.fullRank() << ", i = " << i << ", alpha[i] = " << alpha[i] << ", beta[i] = " << beta[i] << ", sample = " << tmpSample << std::endl; } if ((alpha[i] == 1. ) && (beta [i] == 0.1)) { if (tmpSample == 1.) { if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 99)) { *m_env.subDisplayFile() << "Hitting 'sampe = 1' in GslVector::cwSetBeta()" << ": fullRank " << m_env.fullRank() << ", i = " << i << ", alpha[i] = " << alpha[i] << ", beta[i] = " << beta[i] << ", sample = " << tmpSample << std::endl; } #if 1 std::cerr << "Hitting 'sample = 1' in GslVector::cwSetBeta()" << ": fullRank " << m_env.fullRank() << ", i = " << i << ", alpha[i] = " << alpha[i] << ", beta[i] = " << beta[i] << ", sample = " << tmpSample << std::endl; do { tmpSample = m_env.rngObject()->betaSample(alpha[i],beta[i]); } while (tmpSample == 1.); std::cerr << "Code was able to get 'sample != 1' in GslVector::cwSetBeta()" << ": fullRank " << m_env.fullRank() << ", i = " << i << ", alpha[i] = " << alpha[i] << ", beta[i] = " << beta[i] << ", sample = " << tmpSample << std::endl; } #endif } (*this)[i] = tmpSample; } return; }
void GslVector::cwSetInverseGamma(const GslVector& alpha, const GslVector& beta) { queso_require_equal_to_msg(this->sizeLocal(), alpha.sizeLocal(), "incompatible alpha size"); queso_require_equal_to_msg(this->sizeLocal(), beta.sizeLocal(), "incompatible beta size"); for (unsigned int i = 0; i < this->sizeLocal(); ++i) { (*this)[i] = 1./m_env.rngObject()->gammaSample(alpha[i],1./beta[i]); } return; }
void GslVector::cwSetGamma(const GslVector& a, const GslVector& b) { queso_require_equal_to_msg(this->sizeLocal(), a.sizeLocal(), "incompatible a size"); queso_require_equal_to_msg(this->sizeLocal(), b.sizeLocal(), "incompatible b size"); for (unsigned int i = 0; i < this->sizeLocal(); ++i) { (*this)[i] = m_env.rngObject()->gammaSample(a[i],b[i]); } return; }
void GslVector::cwExtract(unsigned int initialPos, GslVector& 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; }
void GslVector::cwSetConcatenated(const GslVector& v1, const GslVector& v2) { queso_require_equal_to_msg(this->sizeLocal(), v1.sizeLocal() + v2.sizeLocal(), "incompatible vector sizes"); for (unsigned int i = 0; i < v1.sizeLocal(); ++i) { (*this)[i] = v1[i]; } for (unsigned int i = 0; i < v2.sizeLocal(); ++i) { (*this)[v1.sizeLocal()+i] = v2[i]; } return; }
void GslVector::mpiAllQuantile(double probability, const MpiComm& opComm, GslVector& resultVec) const { // Filter out those nodes that should not participate if (opComm.MyPID() < 0) return; queso_require_msg(!((probability < 0.) || (1. < probability)), "invalid input"); unsigned int size = this->sizeLocal(); queso_require_equal_to_msg(size, resultVec.sizeLocal(), "different vector sizes"); for (unsigned int i = 0; i < size; ++i) { double auxDouble = (int) (*this)[i]; std::vector<double> vecOfDoubles(opComm.NumProc(),0.); opComm.Gather((void *) &auxDouble, 1, RawValue_MPI_DOUBLE, (void *) &vecOfDoubles[0], (int) 1, RawValue_MPI_DOUBLE, 0, "GslVector::mpiAllQuantile()", "failed MPI.Gather()"); std::sort(vecOfDoubles.begin(), vecOfDoubles.end()); double result = vecOfDoubles[(unsigned int)( probability*((double)(vecOfDoubles.size()-1)) )]; opComm.Bcast((void *) &result, (int) 1, RawValue_MPI_DOUBLE, 0, "GslVector::mpiAllQuantile()", "failed MPI.Bcast()"); resultVec[i] = result; } return; }
void GslOptimizer::setInitialPoint(const GslVector & initialPoint) { for (unsigned int i = 0; i < initialPoint.sizeLocal(); i++) { (*(this->m_initialPoint))[i] = initialPoint[i]; } }
void GslVector::matlabDiff( unsigned int firstPositionToStoreDiff, double valueForRemainderPosition, GslVector& outputVec) const { unsigned int size = this->sizeLocal(); UQ_FATAL_TEST_MACRO(firstPositionToStoreDiff > 1, m_env.worldRank(), "GslVector::matlabDiff()", "invalid firstPositionToStoreDiff"); UQ_FATAL_TEST_MACRO(size != outputVec.sizeLocal(), m_env.worldRank(), "GslVector::matlabDiff()", "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; }
void GslVector::cwSetConcatenated(const GslVector& v1, const GslVector& v2) { UQ_FATAL_TEST_MACRO(this->sizeLocal() != v1.sizeLocal() + v2.sizeLocal(), m_env.worldRank(), "GslVector::cwSetConcatenated(1)", "incompatible vector sizes"); for (unsigned int i = 0; i < v1.sizeLocal(); ++i) { (*this)[i] = v1[i]; } for (unsigned int i = 0; i < v2.sizeLocal(); ++i) { (*this)[v1.sizeLocal()+i] = v2[i]; } return; }
void GslVector::cwSetInverseGamma(const GslVector& alpha, const GslVector& beta) { UQ_FATAL_TEST_MACRO(this->sizeLocal() != alpha.sizeLocal(), m_env.worldRank(), "GslVector::cwSetInverseGamma()", "incompatible alpha size"); UQ_FATAL_TEST_MACRO(this->sizeLocal() != beta.sizeLocal(), m_env.worldRank(), "GslVector::cwSetInverseGamma()", "incompatible beta size"); for (unsigned int i = 0; i < this->sizeLocal(); ++i) { (*this)[i] = 1./m_env.rngObject()->gammaSample(alpha[i],1./beta[i]); } return; }
void GslVector::cwSetGamma(const GslVector& a, const GslVector& b) { UQ_FATAL_TEST_MACRO(this->sizeLocal() != a.sizeLocal(), m_env.worldRank(), "GslVector::cwSetGamma()", "incompatible a size"); UQ_FATAL_TEST_MACRO(this->sizeLocal() != b.sizeLocal(), m_env.worldRank(), "GslVector::cwSetGamma()", "incompatible b size"); for (unsigned int i = 0; i < this->sizeLocal(); ++i) { (*this)[i] = m_env.rngObject()->gammaSample(a[i],b[i]); } return; }
void GslVector::cwExtract(unsigned int initialPos, GslVector& vec) const { UQ_FATAL_TEST_MACRO(initialPos >= this->sizeLocal(), m_env.worldRank(), "GslVector::cwExtract()", "invalid initialPos"); UQ_FATAL_TEST_MACRO((initialPos +vec.sizeLocal()) > this->sizeLocal(), m_env.worldRank(), "GslVector::cwExtract()", "invalid vec.sizeLocal()"); for (unsigned int i = 0; i < vec.sizeLocal(); ++i) { vec[i] = (*this)[initialPos+i]; } return; }
void GslVector::mpiAllReduce(RawType_MPI_Op mpiOperation, const MpiComm& opComm, GslVector& resultVec) const { // Filter out those nodes that should not participate if (opComm.MyPID() < 0) return; unsigned int size = this->sizeLocal(); queso_require_equal_to_msg(size, resultVec.sizeLocal(), "different vector sizes"); for (unsigned int i = 0; i < size; ++i) { double srcValue = (*this)[i]; double resultValue = 0.; opComm.Allreduce((void *) &srcValue, (void *) &resultValue, (int) 1, RawValue_MPI_DOUBLE, mpiOperation, "GslVector::mpiAllReduce()", "failed MPI.Allreduce()"); resultVec[i] = resultValue; } return; }
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; }
void GslVector::matlabLinearInterpExtrap( const GslVector& x1Vec, const GslVector& y1Vec, const GslVector& x2Vec) { UQ_FATAL_TEST_MACRO(x1Vec.sizeLocal() <= 1, m_env.worldRank(), "GslVector::matlabLinearInterpExtrap()", "invalid 'x1' size"); UQ_FATAL_TEST_MACRO(x1Vec.sizeLocal() != y1Vec.sizeLocal(), m_env.worldRank(), "GslVector::matlabLinearInterpExtrap()", "invalid 'x1' and 'y1' sizes"); UQ_FATAL_TEST_MACRO(x2Vec.sizeLocal() != this->sizeLocal(), m_env.worldRank(), "GslVector::matlabLinearInterpExtrap()", "invalid 'x2' and 'this' sizes"); for (unsigned int i = 1; i < x1Vec.sizeLocal(); ++i) { // Yes, '1' UQ_FATAL_TEST_MACRO(x1Vec[i] <= x1Vec[i-1], m_env.worldRank(), "GslVector::matlabLinearInterpExtrap()", "invalid 'x1' values"); } for (unsigned int id2 = 0; id2 < x2Vec.sizeLocal(); ++id2) { double x2 = x2Vec[id2]; unsigned int id1 = 0; bool found1 = false; for (id1 = 0; id1 < x1Vec.sizeLocal(); ++id1) { if (x2 <= x1Vec[id1]) { found1 = true; break; } } bool makeLinearModel = false; double xa = 0.; double xb = 0.; double ya = 0.; double yb = 0.; if (x2 == x1Vec[id1]) { (*this)[id2] = y1Vec[id1]; } else if (x2 < x1Vec[0]) { // Extrapolation case makeLinearModel = true; xa = x1Vec[0]; xb = x1Vec[1]; ya = y1Vec[0]; yb = y1Vec[1]; } else if (found1 == true) { // Interpolation case makeLinearModel = true; xa = x1Vec[id1-1]; xb = x1Vec[id1]; ya = y1Vec[id1-1]; yb = y1Vec[id1]; } else { // Extrapolation case makeLinearModel = true; xa = x1Vec[x1Vec.sizeLocal()-2]; xb = x1Vec[x1Vec.sizeLocal()-1]; ya = y1Vec[x1Vec.sizeLocal()-2]; yb = y1Vec[x1Vec.sizeLocal()-1]; } if (makeLinearModel) { double rate = (yb-ya)/(xb-xa); (*this)[id2] = ya + (x2-xa)*rate; } } return; }
void GslVector::matlabLinearInterpExtrap( const GslVector& x1Vec, const GslVector& y1Vec, const GslVector& x2Vec) { queso_require_greater_msg(x1Vec.sizeLocal(), 1, "invalid 'x1' size"); queso_require_equal_to_msg(x1Vec.sizeLocal(), y1Vec.sizeLocal(), "invalid 'x1' and 'y1' sizes"); queso_require_equal_to_msg(x2Vec.sizeLocal(), this->sizeLocal(), "invalid 'x2' and 'this' sizes"); for (unsigned int i = 1; i < x1Vec.sizeLocal(); ++i) { // Yes, '1' queso_require_greater_msg(x1Vec[i], x1Vec[i-1], "invalid 'x1' values"); } for (unsigned int id2 = 0; id2 < x2Vec.sizeLocal(); ++id2) { double x2 = x2Vec[id2]; unsigned int id1 = 0; bool found1 = false; for (id1 = 0; id1 < x1Vec.sizeLocal(); ++id1) { if (x2 <= x1Vec[id1]) { found1 = true; break; } } bool makeLinearModel = false; double xa = 0.; double xb = 0.; double ya = 0.; double yb = 0.; if (x2 == x1Vec[id1]) { (*this)[id2] = y1Vec[id1]; } else if (x2 < x1Vec[0]) { // Extrapolation case makeLinearModel = true; xa = x1Vec[0]; xb = x1Vec[1]; ya = y1Vec[0]; yb = y1Vec[1]; } else if (found1 == true) { // Interpolation case makeLinearModel = true; xa = x1Vec[id1-1]; xb = x1Vec[id1]; ya = y1Vec[id1-1]; yb = y1Vec[id1]; } else { // Extrapolation case makeLinearModel = true; xa = x1Vec[x1Vec.sizeLocal()-2]; xb = x1Vec[x1Vec.sizeLocal()-1]; ya = y1Vec[x1Vec.sizeLocal()-2]; yb = y1Vec[x1Vec.sizeLocal()-1]; } if (makeLinearModel) { double rate = (yb-ya)/(xb-xa); (*this)[id2] = ya + (x2-xa)*rate; } } return; }