diff --git a/AMDiS/src/ProblemInstat.cc b/AMDiS/src/ProblemInstat.cc index dbfa5e0155ac48f159f07d9b629de63c6bfe238e..0421ef77ee0e5d69b03adc2f5e1d141d1c47e2ec 100644 --- a/AMDiS/src/ProblemInstat.cc +++ b/AMDiS/src/ProblemInstat.cc @@ -43,23 +43,20 @@ namespace AMDiS { ProblemInstatScal::ProblemInstatScal(std::string name_, - ProblemScal *prob, - ProblemStatBase *initialProb) + ProblemScal *prob, ProblemStatBase *initialProb) : ProblemInstat(name_, initialProb), problemStat(prob), oldSolution(NULL) {} - ProblemInstatScal::ProblemInstatScal(std::string name_, - ProblemScal& prob) + ProblemInstatScal::ProblemInstatScal(std::string name_, ProblemScal& prob) : ProblemInstat(name_, NULL), problemStat(&prob), oldSolution(NULL) {} ProblemInstatScal::ProblemInstatScal(std::string name_, - ProblemScal& prob, - ProblemStatBase& initialProb) + ProblemScal& prob, ProblemStatBase& initialProb) : ProblemInstat(name_, &initialProb), problemStat(&prob), oldSolution(NULL) @@ -127,13 +124,25 @@ namespace AMDiS { } ProblemInstatVec::ProblemInstatVec(std::string name_, - ProblemVec *prob, - ProblemStatBase *initialProb) + ProblemVec *prob, ProblemStatBase *initialProb) : ProblemInstat(name_, initialProb), problemStat(prob), oldSolution(NULL) {} + ProblemInstatVec::ProblemInstatVec(std::string name_, ProblemVec &prob) + : ProblemInstat(name_, NULL), + problemStat(&prob), + oldSolution(NULL) + {} + + ProblemInstatVec::ProblemInstatVec(std::string name_, + ProblemVec &prob, ProblemStatBase &initialProb) + : ProblemInstat(name_, &initialProb), + problemStat(&prob), + oldSolution(NULL) + {} + ProblemInstatVec::~ProblemInstatVec() { delete oldSolution; diff --git a/AMDiS/src/ProblemInstat.h b/AMDiS/src/ProblemInstat.h index 94badcf219fdee4e3058837251f4f1b582ad154e..352ee24b5a57fa2c659ce46ae801500db3603c98 100644 --- a/AMDiS/src/ProblemInstat.h +++ b/AMDiS/src/ProblemInstat.h @@ -183,6 +183,10 @@ namespace AMDiS { ProblemVec *prob, ProblemStatBase *initialProb = NULL); + ProblemInstatVec(std::string name, ProblemVec &prob); + + ProblemInstatVec(std::string name, ProblemVec &prob, ProblemStatBase &initialProb); + /// Destructor. virtual ~ProblemInstatVec(); diff --git a/AMDiS/src/ProblemScal.cc b/AMDiS/src/ProblemScal.cc index baa6a63ee09ede90623c5b550659881b1d1d7814..01d82f7adcb6165dc0b2d804543933d0eb8ecc50 100644 --- a/AMDiS/src/ProblemScal.cc +++ b/AMDiS/src/ProblemScal.cc @@ -68,19 +68,25 @@ namespace AMDiS { solution->interpol(fct); } - void ProblemScal::addMatrixOperator(Operator *op, - double *factor, - double *estFactor) + void ProblemScal::addMatrixOperator(Operator *op, double *factor, double *estFactor) { systemMatrix->addOperator(op, factor, estFactor); } - void ProblemScal::addVectorOperator(Operator *op, - double *factor, - double *estFactor) + void ProblemScal::addMatrixOperator(Operator &op, double *factor, double *estFactor) + { + systemMatrix->addOperator(&op, factor, estFactor); + } + + void ProblemScal::addVectorOperator(Operator *op, double *factor, double *estFactor) { rhs->addOperator(op, factor, estFactor); } + + void ProblemScal::addVectorOperator(Operator &op, double *factor, double *estFactor) + { + rhs->addOperator(&op, factor, estFactor); + } void ProblemScal::addDirichletBC(BoundaryType type, AbstractFunction<double, WorldVector<double> >* b) @@ -94,8 +100,7 @@ namespace AMDiS { solution->getBoundaryManager()->addBoundaryCondition(dirichlet); } - void ProblemScal::addDirichletBC(BoundaryType type, - DOFVector<double> *vec) + void ProblemScal::addDirichletBC(BoundaryType type, DOFVector<double> *vec) { DirichletBC *dirichlet = new DirichletBC(type, vec); if (systemMatrix) @@ -126,8 +131,7 @@ namespace AMDiS { } void ProblemScal::addRobinBC(BoundaryType type, - DOFVector<double> *n, - DOFVector<double> *r) + DOFVector<double> *n, DOFVector<double> *r) { RobinBC *robin = new RobinBC(type, n, r, feSpace); if (rhs) diff --git a/AMDiS/src/ProblemScal.h b/AMDiS/src/ProblemScal.h index 4b5c9154443a64f76da0b3eb2aabd22c56cd25d8..55fb1ce00dc712449eec00f7a3fd404bc9f8af8d 100644 --- a/AMDiS/src/ProblemScal.h +++ b/AMDiS/src/ProblemScal.h @@ -170,10 +170,18 @@ namespace AMDiS { void addMatrixOperator(Operator *op, double *factor = NULL, double *estFactor = NULL); + /// Adds an Operator to \ref systemMatrix. + void addMatrixOperator(Operator &op, + double *factor = NULL, double *estFactor = NULL); + /// Adds an Operator to \ref rhs. void addVectorOperator(Operator *op, double *factor = NULL, double *estFactor = NULL); + /// Adds an Operator to \ref rhs. + void addVectorOperator(Operator &op, + double *factor = NULL, double *estFactor = NULL); + /// Adds dirichlet boundary conditions. virtual void addDirichletBC(BoundaryType type, AbstractFunction<double, WorldVector<double> >* b); diff --git a/AMDiS/src/ProblemVec.cc b/AMDiS/src/ProblemVec.cc index 65233cd72f96e5f28e513a9297315da854d9aa55..8846c7cc75c6e0a2216f9d90fc37aabe85544b21 100644 --- a/AMDiS/src/ProblemVec.cc +++ b/AMDiS/src/ProblemVec.cc @@ -1043,10 +1043,8 @@ namespace AMDiS { solution->interpol(fct); } - void ProblemVec::addMatrixOperator(Operator *op, - int i, int j, - double *factor, - double *estFactor) + void ProblemVec::addMatrixOperator(Operator *op, int i, int j, + double *factor, double *estFactor) { FUNCNAME("ProblemVec::addMatrixOperator()"); @@ -1079,9 +1077,14 @@ namespace AMDiS { opFlags[op].setFlag(Operator::MATRIX_OPERATOR); } - void ProblemVec::addVectorOperator(Operator *op, int i, - double *factor, - double *estFactor) + void ProblemVec::addMatrixOperator(Operator &op, int i, int j, + double *factor, double *estFactor) + { + addMatrixOperator(&op, i, j, factor, estFactor); + } + + void ProblemVec::addVectorOperator(Operator *op, int i, + double *factor, double *estFactor) { FUNCNAME("ProblemVec::addVectorOperator()"); @@ -1101,6 +1104,12 @@ namespace AMDiS { opFlags[op].setFlag(Operator::VECTOR_OPERATOR); } + void ProblemVec::addVectorOperator(Operator &op, int i, + double *factor, double *estFactor) + { + addVectorOperator(&op, i, factor, estFactor); + } + void ProblemVec::addDirichletBC(BoundaryType type, int row, int col, AbstractFunction<double, WorldVector<double> >* b) { diff --git a/AMDiS/src/ProblemVec.h b/AMDiS/src/ProblemVec.h index c6740d386cb5738a44dad075487ca0ee43c24166..9dab27d02eaea17e62a24aaf2dff9645045e20e3 100644 --- a/AMDiS/src/ProblemVec.h +++ b/AMDiS/src/ProblemVec.h @@ -222,13 +222,19 @@ namespace AMDiS { /// Adds an Operator to \ref A. void addMatrixOperator(Operator *op, int i, int j, - double *factor = NULL, - double *estFactor = NULL); + double *factor = NULL, double *estFactor = NULL); + + /// Adds an Operator to \ref A. + void addMatrixOperator(Operator &op, int i, int j, + double *factor = NULL, double *estFactor = NULL); /// Adds an Operator to \ref rhs. void addVectorOperator(Operator *op, int i, - double *factor = NULL, - double *estFactor = NULL); + double *factor = NULL, double *estFactor = NULL); + + /// Adds an Operator to \ref rhs. + void addVectorOperator(Operator &op, int i, + double *factor = NULL, double *estFactor = NULL); /// Adds dirichlet boundary conditions. virtual void addDirichletBC(BoundaryType type, int row, int col,