//----------------------------------------------------------------- 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]); } } }
//============================================================================== 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); }
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); }