示例#1
0
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;
}
示例#2
0
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;
}
示例#3
0
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;
}
示例#4
0
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;
}
示例#5
0
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;
}
示例#6
0
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;
}
示例#7
0
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;
}
示例#8
0
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;
}
示例#9
0
void
GslOptimizer::setInitialPoint(const GslVector & initialPoint)
{
  for (unsigned int i = 0; i < initialPoint.sizeLocal(); i++) {
    (*(this->m_initialPoint))[i] = initialPoint[i];
  }
}
示例#10
0
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;
}
示例#11
0
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;
}
示例#12
0
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;
}
示例#13
0
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;
}
示例#14
0
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;
}
示例#15
0
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;
}
示例#16
0
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;
}
示例#17
0
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;
}
示例#18
0
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;
}