Ejemplo n.º 1
0
//-----------------------------------------------------------------
FillableMat::FillableMat(EqnBuffer& eqnbuf)
 : matdata_(),
   vecpool_()
{
  std::vector<int>& eqnNums = eqnbuf.eqnNumbers();
  int numEqns = eqnNums.size();
  std::vector<fei::CSVec*>& eqns = eqnbuf.eqns();

  for(int i=0; i<numEqns; ++i) {
    int row = eqnNums[i];
    fei::CSVec* row_vec = eqns[i];
    int rowlen = row_vec->size();
    int* indices = &(row_vec->indices()[0]);
    double* coefs = &(row_vec->coefs()[0]);

    for(int j=0; j<rowlen; ++j) {
      putCoef(row, indices[j], coefs[j]);
    }
  }
}
Ejemplo n.º 2
0
//==============================================================================
int EqnBuffer::addEqns(EqnBuffer& inputEqns, bool accumulate)
{
  if (inputEqns.eqnNumbers().size() < 1) {
    return(0);
  }

  int* eqnNums = &(inputEqns.eqnNumbers()[0]);
  fei::CSVec** eqs = &(inputEqns.eqns()[0]);

  int numRHSs = inputEqns.getNumRHSs();
  std::vector<double>** rhsCoefs = &((*(inputEqns.rhsCoefsPtr()))[0]);

  for(int i=0; i<inputEqns.getNumEqns(); i++) {
    std::vector<int>& indices_i  = eqs[i]->indices();
    std::vector<double>& coefs_i = eqs[i]->coefs();

    int err = addEqn(eqnNums[i], &coefs_i[0], &indices_i[0],
		    eqs[i]->size(), accumulate);
    if (err) return(err);

    if (numRHSs > 0) {
      for(int j=0; j<numRHSs; ++j) {
	addRHS(eqnNums[i], j, (*(rhsCoefs[i]))[j], accumulate);
      }
    }
  }

  return(0);
}
Ejemplo n.º 3
0
int
DirichletBCManager::finalizeBCEqns(EqnBuffer& bcEqns)
{
  //copy the boundary-condition prescribed values into bcEqns.

  bc_map::iterator iter = bcs_.begin(), iter_end = bcs_.end();

  for(; iter!=iter_end; ++iter) {
    int eqn = iter->first;
    double coef = iter->second;

    CHK_ERR( bcEqns.addEqn(eqn, &coef, &eqn, 1, false) );
  }

  bcs_.clear();
  return(0);
}