From 7affe081bc684092615f7d9ce317e1a460cd9f20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Sch=C3=A4fer?= <schafjan@fjfi.cvut.cz> Date: Fri, 6 May 2016 14:43:17 +0200 Subject: [PATCH] dodelana analyticka cast advekce rozctvrceni pocatecni podminky u eulera 2D --- examples/advection/advectionProblem_impl.h | 8 +- examples/inviscid-flow/2d/euler.h | 26 ++++-- examples/inviscid-flow/2d/eulerProblem_impl.h | 82 +++++++++++++------ 3 files changed, 79 insertions(+), 37 deletions(-) diff --git a/examples/advection/advectionProblem_impl.h b/examples/advection/advectionProblem_impl.h index 7892418325..cf4b364700 100644 --- a/examples/advection/advectionProblem_impl.h +++ b/examples/advection/advectionProblem_impl.h @@ -341,7 +341,7 @@ getExplicitRHS( const RealType& time, RealType expValue; for (IndexType i = 1; i < count-2; i++) { - expValue = exp(-pow(this->size*i-0.2*size-step * tau * this->speedX,2)); + expValue = exp(-pow(10/(size*count)*(size*i-0.2*size*count)-step * 10 * tau * this->speedX,2)); if ((i - step * tau * (count/this->schemeSize) * this -> speedX>0.4*count) && (i - step * tau * (count/this->schemeSize) * this -> speedX<0.5*count)) constantFunction=1; else constantFunction=0; if (expValue>constantFunction) this->analyt[i] = expValue; else this->analyt[i] = constantFunction; }; @@ -353,7 +353,7 @@ getExplicitRHS( const RealType& time, for (IndexType i = 0; i < inverseSquareCount-1; i++) for (IndexType j = 0; j < inverseSquareCount-1; j++) { - expValue = exp(-pow(this->size*i-0.2*size-step * tau * this->speedX,2)-pow(this->size*j-0.2*size-step * tau * this->speedY,2)); + expValue = exp(-pow(10/(size*inverseSquareCount)*(size*i-0.2*size*inverseSquareCount)-step * 10 * tau * this->speedX,2)-pow(10/(size*inverseSquareCount)*(size*j-0.2*size*inverseSquareCount)-step * 10 * tau * this->speedY,2)); if ((i - step * tau * (inverseSquareCount/this->schemeSize) * this -> speedX>0.4*inverseSquareCount) && (i - step * tau * (inverseSquareCount/this->schemeSize) * this -> speedX<0.5*inverseSquareCount) && (j - step * tau * (inverseSquareCount/this->schemeSize) * this -> speedY>0.4*inverseSquareCount) && (j - step * tau * (inverseSquareCount/this->schemeSize) * this -> speedY<0.5*inverseSquareCount)) constantFunction=1; else constantFunction=0; @@ -369,7 +369,7 @@ getExplicitRHS( const RealType& time, this->analyt[0] = 0; for (IndexType i = 1; i < count-2; i++) { - this->analyt[i] = exp(-pow(this->size*i-0.2*size-step * tau * this->speedX,2)); + this->analyt[i] = exp(-pow(10/(size*count)*(size*i-0.2*size*count)-step * 10 * tau * this->speedX,2)); }; this->analyt[count-1] = 0; } @@ -379,7 +379,7 @@ getExplicitRHS( const RealType& time, for (IndexType i = 1; i < inverseSquareCount-1; i++) for (IndexType j = 1; j < inverseSquareCount-1; j++) { - this->analyt[i * inverseSquareCount + j] = exp(-pow(this->size*i-0.2*size-step * tau * this->speedX,2)-pow(this->size*j-0.2*size-step * tau * this->speedY,2)); + this->analyt[i * inverseSquareCount + j] = exp(-pow(10/(size*inverseSquareCount)*(size*i-0.2*size*inverseSquareCount)-step * 10 * tau * this->speedX,2)-pow(10/(size*inverseSquareCount)*(size*j-0.2*size*inverseSquareCount)-step * 10 * tau * this->speedY,2)); }; }; } diff --git a/examples/inviscid-flow/2d/euler.h b/examples/inviscid-flow/2d/euler.h index f7fb1d5868..f1466b9e32 100644 --- a/examples/inviscid-flow/2d/euler.h +++ b/examples/inviscid-flow/2d/euler.h @@ -33,15 +33,23 @@ template< typename ConfigTag >class eulerConfig config.addEntryEnum< tnlString >( "neumann" ); config.addEntryEnum< tnlString >( "mymixed" ); config.addEntry< double >( "boundary-conditions-constant", "This sets a value in case of the constant boundary conditions." ); - config.addEntry< double >( "left-density", "This sets a value of left density." ); - config.addEntry< double >( "left-velocityX", "This sets a value of left_x velocity." ); - config.addEntry< double >( "left-velocityY", "This sets a value of left_y velocity." ); - config.addEntry< double >( "left-pressure", "This sets a value of left pressure." ); - config.addEntry< double >( "riemann-border", "This sets a position of discontinuity." ); - config.addEntry< double >( "right-density", "This sets a value of right density." ); - config.addEntry< double >( "right-velocityX", "This sets a value of right_x velocity." ); - config.addEntry< double >( "right-velocityY", "This sets a value of right_y velocity." ); - config.addEntry< double >( "right-pressure", "This sets a value of right pressure." ); + config.addEntry< double >( "left-up-density", "This sets a value of left up density." ); + config.addEntry< double >( "left-up-velocityX", "This sets a value of left up x velocity." ); + config.addEntry< double >( "left-up-velocityY", "This sets a value of left up y velocity." ); + config.addEntry< double >( "left-up-pressure", "This sets a value of left up pressure." ); + config.addEntry< double >( "left-down-density", "This sets a value of left down density." ); + config.addEntry< double >( "left-down-velocityX", "This sets a value of left down x velocity." ); + config.addEntry< double >( "left-down-velocityY", "This sets a value of left down y velocity." ); + config.addEntry< double >( "left-down-pressure", "This sets a value of left down pressure." ); + config.addEntry< double >( "riemann-border", "This sets a position of discontinuity cross." ); + config.addEntry< double >( "right-up-density", "This sets a value of right density." ); + config.addEntry< double >( "right-up-velocityX", "This sets a value of right_x velocity." ); + config.addEntry< double >( "right-up-velocityY", "This sets a value of right_y velocity." ); + config.addEntry< double >( "right-up-pressure", "This sets a value of right pressure." ); + config.addEntry< double >( "right-down-density", "This sets a value of right density." ); + config.addEntry< double >( "right-down-velocityX", "This sets a value of right_x velocity." ); + config.addEntry< double >( "right-down-velocityY", "This sets a value of right_y velocity." ); + config.addEntry< double >( "right-down-pressure", "This sets a value of right pressure." ); config.addEntry< double >( "gamma", "This sets a value of gamma constant." ); /**** diff --git a/examples/inviscid-flow/2d/eulerProblem_impl.h b/examples/inviscid-flow/2d/eulerProblem_impl.h index 88c1f24863..86b591b6e6 100644 --- a/examples/inviscid-flow/2d/eulerProblem_impl.h +++ b/examples/inviscid-flow/2d/eulerProblem_impl.h @@ -104,16 +104,26 @@ setInitialCondition( const tnlParameterContainer& parameters, { typedef typename MeshType::Cell Cell; gamma = parameters.getParameter< RealType >( "gamma" ); - RealType rhoL = parameters.getParameter< RealType >( "left-density" ); - RealType velLX = parameters.getParameter< RealType >( "left-velocityX" ); - RealType velLY = parameters.getParameter< RealType >( "left-velocityY" ); - RealType preL = parameters.getParameter< RealType >( "left-pressure" ); - RealType eL = ( preL / (gamma - 1) ) + 0.5 * rhoL * pow(velLX,2)+pow(velLY,2); - RealType rhoR = parameters.getParameter< RealType >( "right-density" ); - RealType velRX = parameters.getParameter< RealType >( "right-velocityX" ); - RealType velRY = parameters.getParameter< RealType >( "right-velocityY" ); - RealType preR = parameters.getParameter< RealType >( "right-pressure" ); - RealType eR = ( preR / (gamma - 1) ) + 0.5 * rhoR * pow(velRX,2)+pow(velRY,2); + RealType rhoLu = parameters.getParameter< RealType >( "left-up-density" ); + RealType velLuX = parameters.getParameter< RealType >( "left-up-velocityX" ); + RealType velLuY = parameters.getParameter< RealType >( "left-up-velocityY" ); + RealType preLu = parameters.getParameter< RealType >( "left-up-pressure" ); + RealType eLu = ( preLu / (gamma - 1) ) + 0.5 * rhoLu * pow(velLuX,2)+pow(velLuY,2); + RealType rhoLd = parameters.getParameter< RealType >( "left-down-density" ); + RealType velLdX = parameters.getParameter< RealType >( "left-down-velocityX" ); + RealType velLdY = parameters.getParameter< RealType >( "left-down-velocityY" ); + RealType preLd = parameters.getParameter< RealType >( "left-down-pressure" ); + RealType eLd = ( preLd / (gamma - 1) ) + 0.5 * rhoLd * pow(velLdX,2)+pow(velLdY,2); + RealType rhoRu = parameters.getParameter< RealType >( "right-up-density" ); + RealType velRuX = parameters.getParameter< RealType >( "right-up-velocityX" ); + RealType velRuY = parameters.getParameter< RealType >( "right-up-velocityY" ); + RealType preRu = parameters.getParameter< RealType >( "right-up-pressure" ); + RealType eRu = ( preRu / (gamma - 1) ) + 0.5 * rhoRu * pow(velRuX,2)+pow(velRuY,2); + RealType rhoRd = parameters.getParameter< RealType >( "right-down-density" ); + RealType velRdX = parameters.getParameter< RealType >( "right-down-velocityX" ); + RealType velRdY = parameters.getParameter< RealType >( "right-down-velocityY" ); + RealType preRd = parameters.getParameter< RealType >( "right-down-pressure" ); + RealType eRd = ( preRd / (gamma - 1) ) + 0.5 * rhoRd * pow(velRdX,2)+pow(velRdY,2); RealType x0 = parameters.getParameter< RealType >( "riemann-border" ); int size = mesh.template getEntitiesCount< Cell >(); uRho.bind(mesh, dofs, 0); @@ -130,25 +140,49 @@ setInitialCondition( const tnlParameterContainer& parameters, for(IndexType i = 0; i < sqrt(size); i++) if ((i < x0 * sqrt(size))&&(j < x0 * sqrt(size)) ) { - uRho[j*sqrt(size)+i] = rhoL; - uRhoVelocityX[j*sqrt(size)+i] = rhoL * velLX; - uRhoVelocityY[j*sqrt(size)+i] = rhoL * velLY; + uRho[j*sqrt(size)+i] = rhoLd; + uRhoVelocityX[j*sqrt(size)+i] = rhoLd * velLdX; + uRhoVelocityY[j*sqrt(size)+i] = rhoLd * velLdY; uEnergy[j*sqrt(size)+i] = eL; - velocity[j*sqrt(size)+i] = sqrt(pow(velLX,2)+pow(velLY,2)); - velocityX[j*sqrt(size)+i] = velLX; - velocityY[j*sqrt(size)+i] = velLY; - pressure[j*sqrt(size)+i] = preL; + velocity[j*sqrt(size)+i] = sqrt(pow(velLdX,2)+pow(velLdY,2)); + velocityX[j*sqrt(size)+i] = velLdX; + velocityY[j*sqrt(size)+i] = velLdY; + pressure[j*sqrt(size)+i] = preLd; } else + if ((i >= x0 * sqrt(size))&&(j < x0 * sqrt(size)) ) + { + uRho[j*sqrt(size)+i] = rhoLu; + uRhoVelocityX[j*sqrt(size)+i] = rhoLu * velLXu; + uRhoVelocityY[j*sqrt(size)+i] = rhoLu * velLYu; + uEnergy[j*sqrt(size)+i] = eLu; + velocity[j*sqrt(size)+i] = sqrt(pow(velLuX,2)+pow(velLuY,2)); + velocityX[j*sqrt(size)+i] = velLuX; + velocityY[j*sqrt(size)+i] = velLuY; + pressure[j*sqrt(size)+i] = preLu; + } + else + if ((i >= x0 * sqrt(size))&&(j >= x0 * sqrt(size)) ) { uRho[j*sqrt(size)+i] = rhoR; - uRhoVelocityX[j*sqrt(size)+i] = rhoR * velRX; - uRhoVelocityY[j*sqrt(size)+i] = rhoR * velRY; - uEnergy[j*sqrt(size)+i] = eR; - velocity[j*sqrt(size)+i] = sqrt(pow(velRX,2)+pow(velRY,2)); - velocityX[j*sqrt(size)+i] = velRX; - velocityY[j*sqrt(size)+i] = velRY; - pressure[j*sqrt(size)+i] = preR; + uRhoVelocityX[j*sqrt(size)+i] = rhoRu * velRuX; + uRhoVelocityY[j*sqrt(size)+i] = rhoRu * velRuY; + uEnergy[j*sqrt(size)+i] = eRu; + velocity[j*sqrt(size)+i] = sqrt(pow(velRuX,2)+pow(velRuY,2)); + velocityX[j*sqrt(size)+i] = velRuX; + velocityY[j*sqrt(size)+i] = velRuY; + pressure[j*sqrt(size)+i] = preRu; + } + else + { + uRho[j*sqrt(size)+i] = rhoRd; + uRhoVelocityX[j*sqrt(size)+i] = rhoRd * velRdX; + uRhoVelocityY[j*sqrt(size)+i] = rhoRd * velRdY; + uEnergy[j*sqrt(size)+i] = eRd; + velocity[j*sqrt(size)+i] = sqrt(pow(velRdX,2)+pow(velRdY,2)); + velocityX[j*sqrt(size)+i] = velRdX; + velocityY[j*sqrt(size)+i] = velRdY; + pressure[j*sqrt(size)+i] = preRd; }; return true; } -- GitLab