Liebe Gitlab-Nutzer, lieber Gitlab-Nutzer, es ist nun möglich sich mittels des ZIH-Logins/LDAP an unserem Dienst anzumelden. Ein Anmelden über dieses erzeugt ein neues Konto. Das alte Konto ist über den Reiter "Standard" erreichbar. Die Administratoren

Dear Gitlab user, it is now possible to log in to our service using the ZIH login/LDAP. Logging in via this will create a new account. The old account can be accessed via the "Standard" tab. The administrators

Commit 4e34df55 authored by Praetorius, Simon's avatar Praetorius, Simon
Browse files

NavierStokes base problems changed

parent 006ad304
......@@ -19,7 +19,8 @@ NavierStokesPhase_TaylorHood::NavierStokesPhase_TaylorHood(const std::string &na
Parameters::get(name + "->epsilon", epsilon);
Parameters::get(name + "->alpha", alpha);
};
}
NavierStokesPhase_TaylorHood::~NavierStokesPhase_TaylorHood()
{
......@@ -27,6 +28,7 @@ NavierStokesPhase_TaylorHood::~NavierStokesPhase_TaylorHood()
delete fileWriterPhase;
}
void NavierStokesPhase_TaylorHood::initData()
{
super::initData();
......@@ -52,8 +54,15 @@ void NavierStokesPhase_TaylorHood::transferInitialSolution(AdaptInfo *adaptInfo)
void NavierStokesPhase_TaylorHood::closeTimestep(AdaptInfo *adaptInfo)
{
super::closeTimestep(adaptInfo);
phaseOld->interpol(phase);
writeFiles(adaptInfo, false);
}
void NavierStokesPhase_TaylorHood::writeFiles(AdaptInfo *adaptInfo, bool force)
{ FUNCNAME("NavierStokesPhase_TaylorHood::closeTimestep()");
super::writeFiles(adaptInfo, force);
fileWriterPhase->writeFiles(adaptInfo, false);
}
......@@ -76,7 +85,7 @@ void NavierStokesPhase_TaylorHood::fillOperators()
/// < (1/tau)*u_i^old , psi >
Operator *opTimeOld = new Operator(prob->getFeSpace(i), prob->getFeSpace(i));
opTimeOld->addTerm(new Phase_ZOT(phaseOld, density));
opTimeOld->setUhOld(prob->getSolution()->getDOFVector(i));
opTimeOld->setUhOld(getOldSolution(i));
prob->addVectorOperator(*opTimeOld, i, getInvTau());
/// < u^old*grad(u_i^old) , psi >
......@@ -148,7 +157,7 @@ void NavierStokesPhase_TaylorHood::addLaplaceTerm(int i)
if (laplaceType == 1) {
for (unsigned j = 0; j < dow; ++j) {
Operator *opLaplaceUi1 = new Operator(prob->getFeSpace(i), prob->getFeSpace(j));
opLaplaceUi1->addTerm(new MatrixIJPhase_SOT(phase, 1-i, 1-j, viscosity));
opLaplaceUi1->addTerm(new MatrixIJPhase_SOT(phase, j, i, viscosity));
prob->addMatrixOperator(*opLaplaceUi1, i, j, &theta);
opLaplaceUi1->setUhOld(prob->getSolution()->getDOFVector(j));
......
......@@ -29,6 +29,8 @@ public: // methods
virtual void transferInitialSolution(AdaptInfo *adaptInfo);
virtual void closeTimestep(AdaptInfo *adaptInfo);
virtual void writeFiles(AdaptInfo *adaptInfo, bool force = false);
// === getting/setting methods ===
DOFVector<double> *getPhase()
......@@ -51,6 +53,11 @@ public: // methods
return epsilon;
}
DOFVector<WorldVector<double> >* getVelocity()
{
return velocity;
}
void setPhase(DOFVector<double>* phase_)
{
phase = phase_;
......
......@@ -16,7 +16,10 @@ NavierStokes_TaylorHood::NavierStokes_TaylorHood(const std::string &name_) :
theta(0.5),
theta1(0.5),
minusTheta1(-0.5),
velocity(NULL)
velocity(NULL),
fileWriter(NULL),
initialX(NULL),
initialY(NULL)
{
// force the homogeniouse dirichlet BC if combination of dirichlet and neumann BC
// are set and AMDiS can not handle this combination automatically
......@@ -50,6 +53,10 @@ NavierStokes_TaylorHood::NavierStokes_TaylorHood(const std::string &name_) :
Initfile::get("mesh->scale",dimension);
} else
dimension.set(1.0);
for (size_t i = 0; i < dow; i++)
oldSolution[i] = NULL;
}
......@@ -60,8 +67,18 @@ NavierStokes_TaylorHood::~NavierStokes_TaylorHood()
delete initialX;
delete initialY;
}
if (velocity != NULL)
if (velocity != NULL) {
delete velocity;
velocity = NULL;
}
for (size_t i = 0; i < dow; i++) {
if (oldSolution[i] != NULL)
delete oldSolution[i];
oldSolution[i] = NULL;
}
delete fileWriter;
}
......@@ -71,6 +88,10 @@ void NavierStokes_TaylorHood::initData()
if (velocity == NULL)
velocity = new DOFVector<WorldVector<double> >(getFeSpace(0), "velocity");
for (size_t i = 0; i < dow; i++)
oldSolution[i] = new DOFVector<double>(getFeSpace(i), "old(v_"+Helpers::toString(i)+")");
fileWriter = new FileVectorWriter(name + "->velocity->output", getFeSpace()->getMesh(), velocity);
super::initData();
......@@ -111,7 +132,6 @@ void NavierStokes_TaylorHood::solveInitialProblem(AdaptInfo *adaptInfo)
prob->getSolution()->getDOFVector(i)->interpol(initialFcts[i]);
prob->setExactSolutionFct(initialFcts[i], i);
}
}
......@@ -123,6 +143,9 @@ void NavierStokes_TaylorHood::transferInitialSolution(AdaptInfo *adaptInfo)
for (int i = 0; i < dow; i++)
prob->setExactSolution(prob->getSolution()->getDOFVector(i), i);
for (size_t i = 0; i < dow; i++)
oldSolution[i]->copy(*prob->getSolution()->getDOFVector(i));
fileWriter->writeFiles(adaptInfo, false);
writeFiles(adaptInfo, false);
......@@ -211,7 +234,7 @@ void NavierStokes_TaylorHood::addLaplaceTerm(int i)
if (laplaceType == 1) {
for (unsigned j = 0; j < dow; ++j) {
Operator *opLaplaceUi1 = new Operator(getFeSpace(i), getFeSpace(j));
opLaplaceUi1->addTerm(new MatrixIJ_SOT(1-i, 1-j, viscosity));
opLaplaceUi1->addTerm(new MatrixIJ_SOT(j, i, viscosity));
prob->addMatrixOperator(*opLaplaceUi1, i, j, &theta, &theta);
if (abs(minusTheta1) > DBL_TOL) {
......@@ -244,6 +267,14 @@ void NavierStokes_TaylorHood::closeTimestep(AdaptInfo *adaptInfo)
{ FUNCNAME("NavierStokes_TaylorHood::closeTimestep()");
calcVelocity();
for (size_t i = 0; i < dow; i++)
oldSolution[i]->copy(*prob->getSolution()->getDOFVector(i));
}
void NavierStokes_TaylorHood::writeFiles(AdaptInfo *adaptInfo, bool force)
{ FUNCNAME("NavierStokesPhase_TaylorHood::closeTimestep()");
super::writeFiles(adaptInfo, force);
fileWriter->writeFiles(adaptInfo, false);
writeFiles(adaptInfo, false);
}
......@@ -43,6 +43,8 @@ public: // methods
virtual void transferInitialSolution(AdaptInfo *adaptInfo);
virtual void closeTimestep(AdaptInfo *adaptInfo);
virtual void writeFiles(AdaptInfo *adaptInfo, bool force = false);
// === getting/setting methods ===
......@@ -51,10 +53,15 @@ public: // methods
DOFVector<WorldVector<double> >* getVelocity()
{
if (velocity == NULL)
velocity = new DOFVector<WorldVector<double> >(getFeSpace(0), "velocity");
TEST_EXIT_DBG(velocity != NULL)("velocity is NULL!");
return velocity;
}
DOFVector<double> *getOldSolution(int i)
{
TEST_EXIT_DBG(oldSolution[i] != NULL)("Für die angegebene Komponente ist keine OldSolution erstellt!");
return oldSolution[i];
}
// protected: // methods
......@@ -99,5 +106,6 @@ protected: // variables
WorldVector<double> dimension;
FileVectorWriter *fileWriter;
std::vector<DOFVector<double>*> oldSolution;
};
#endif // NAVIER_STOKES_TAYLOR_HOOD_H
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment