From 50e651dc73d7b263c186a363b0a55ecc4a81c354 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Sch=C3=A4fer?= <schafjan@fjfi.cvut.cz> Date: Wed, 7 Dec 2016 18:04:54 +0100 Subject: [PATCH] opraveny chyby, 1D a 2D ozkouseno --- .../inviscid-flow/1d/Euler1DPressureGetter.h | 4 +- .../1d/LaxFridrichsContinuity_impl.h | 2 + .../1d/LaxFridrichsMomentum_impl.h | 4 + examples/inviscid-flow/1d/eulerProblem_impl.h | 20 ++--- .../inviscid-flow/2d/EulerPressureGetter.h | 6 +- .../2d/LaxFridrichsContinuity_impl .h | 2 +- .../2d/MyNeumannBoundaryConditions.h | 2 +- examples/inviscid-flow/2d/euler.h | 1 + examples/inviscid-flow/2d/eulerProblem_impl.h | 28 ++++--- examples/inviscid-flow/3d/euler.h | 8 ++ examples/inviscid-flow/3d/eulerProblem_impl.h | 76 ++++++++++++------- 11 files changed, 99 insertions(+), 54 deletions(-) diff --git a/examples/inviscid-flow/1d/Euler1DPressureGetter.h b/examples/inviscid-flow/1d/Euler1DPressureGetter.h index 7900c4b085..57f3ff859d 100644 --- a/examples/inviscid-flow/1d/Euler1DPressureGetter.h +++ b/examples/inviscid-flow/1d/Euler1DPressureGetter.h @@ -42,8 +42,8 @@ class EulerPressureGetter __cuda_callable__ Real operator[]( const IndexType& idx ) const { - //if (this->rho[ idx ]==0) return 0; else return ( this->gamma - 1.0 ) * ( this->energy[ idx ] - 0.5 * this->rhoVel[ idx ] * this->rhoVel[ idx ] / this->rho[ idx ]); - return ( this->gamma - 1.0 ) * this->energy[ idx ] * this->rho[ idx ]; + if (this->rho[ idx ]==0) return 0; else return ( this->gamma - 1.0 ) * ( this->energy[ idx ] - 0.5 * this->rhoVel[ idx ] * this->rhoVel[ idx ] / this->rho[ idx ]); + //return ( this->gamma - 1.0 ) * this->energy[ idx ] * this->rho[ idx ]; } diff --git a/examples/inviscid-flow/1d/LaxFridrichsContinuity_impl.h b/examples/inviscid-flow/1d/LaxFridrichsContinuity_impl.h index 3880bb7d2d..dd13d36428 100644 --- a/examples/inviscid-flow/1d/LaxFridrichsContinuity_impl.h +++ b/examples/inviscid-flow/1d/LaxFridrichsContinuity_impl.h @@ -45,6 +45,8 @@ operator()( const MeshFunction& u, const IndexType& west = neighbourEntities.template getEntityIndex< -1 >(); return (0.5 / this->tau) * ( u[ west ] - 2.0 * u[ center ] + u[ east ] ) - 0.5 * hxInverse * ( u[ east ] * this->velocity[ east ] - u[ west ] * this->velocity[ west ] ); + /*(0.5) * ( u[ west ] + u[ east ] ) + - 0.5 * hxInverse * this->tau * ( u[ east ] * this->velocity[ east ] - u[ west ] * this->velocity[ west ] );*/ } template< typename MeshReal, diff --git a/examples/inviscid-flow/1d/LaxFridrichsMomentum_impl.h b/examples/inviscid-flow/1d/LaxFridrichsMomentum_impl.h index 217afc4b5f..ebfe407324 100644 --- a/examples/inviscid-flow/1d/LaxFridrichsMomentum_impl.h +++ b/examples/inviscid-flow/1d/LaxFridrichsMomentum_impl.h @@ -47,6 +47,10 @@ operator()( const MeshFunction& u, - 0.5 * hxInverse * (( u[ east ] * this -> velocity[ east ] + this -> pressure [ east ] ) -( u[ west ] * this -> velocity[ west ] + this -> pressure [ west ] )); + /*(0.5) * ( u[ west ] + u[ east ] ) + - 0.5 * hxInverse * this->tau * + (( u[ east ] * this -> velocity[ east ] + this -> pressure [ east ] ) + -( u[ west ] * this -> velocity[ west ] + this -> pressure [ west ] ));*/ } template< typename MeshReal, diff --git a/examples/inviscid-flow/1d/eulerProblem_impl.h b/examples/inviscid-flow/1d/eulerProblem_impl.h index 1471a46c2d..82e89903d4 100644 --- a/examples/inviscid-flow/1d/eulerProblem_impl.h +++ b/examples/inviscid-flow/1d/eulerProblem_impl.h @@ -60,7 +60,7 @@ setup( const MeshPointer& meshPointer, const Config::ParameterContainer& parameters, const String& prefix ) { - if( ! this->boundaryConditionsPointer->setup( meshPointer, parameters, prefix + "boundary-conditions-" ) || + if( //! this->boundaryConditionsPointer->setup( meshPointer, parameters, prefix + "boundary-conditions-" ) || ! this->rightHandSidePointer->setup( parameters, prefix + "right-hand-side-" ) ) return false; return true; @@ -103,19 +103,19 @@ setInitialCondition( const Config::ParameterContainer& parameters, DofVectorPointer& dofs, MeshDependentDataPointer& meshDependentData ) { - std::cout << std::endl << "get conditions from CML"; + std::cout << std::endl << "get conditions from CMD"; typedef typename MeshType::Cell Cell; this->gamma = parameters.getParameter< RealType >( "gamma" ); RealType rhoL = parameters.getParameter< RealType >( "left-density" ); RealType velL = parameters.getParameter< RealType >( "left-velocity" ); RealType preL = parameters.getParameter< RealType >( "left-pressure" ); - RealType eL = ( preL / ( rhoL * (gamma - 1) ) ); - //RealType eL = ( preL / (gamma - 1) ) + 0.5 * rhoL * velL * velL; + //RealType eL = ( preL / ( rhoL * (gamma - 1) ) ); + RealType eL = ( preL / (gamma - 1) ) + 0.5 * rhoL * velL * velL; RealType rhoR = parameters.getParameter< RealType >( "right-density" ); RealType velR = parameters.getParameter< RealType >( "right-velocity" ); RealType preR = parameters.getParameter< RealType >( "right-pressure" ); - RealType eR = ( preR / ( rhoR * (gamma - 1) ) ); - //RealType eR = ( preR / (gamma - 1) ) + 0.5 * rhoR * velR * velR; + //RealType eR = ( preR / ( rhoR * (gamma - 1) ) ); + RealType eR = ( preR / (gamma - 1) ) + 0.5 * rhoR * velR * velR; RealType x0 = parameters.getParameter< RealType >( "riemann-border" ); int count = mesh->template getEntitiesCount< Cell >(); uRho->bind( mesh, *dofs, 0); @@ -125,7 +125,7 @@ setInitialCondition( const Config::ParameterContainer& parameters, data.setSize(2*count); velocity->bind( mesh, data, 0); pressure->bind( mesh, data, count ); - std::cout << std::endl << "set conditions from CML"<< std::endl; + std::cout << std::endl << "set conditions from CMD"<< std::endl; for(IndexType i = 0; i < count; i++) if (i < x0 * count ) { @@ -230,9 +230,9 @@ getExplicitRHS( const RealType& time, typedef typename MeshType::Cell Cell; int count = mesh->template getEntitiesCount< Cell >(); //bind _fu - this->fuRho->bind(mesh, _u, 0); - this->fuRhoVelocity->bind(mesh, _u, count); - this->fuEnergy->bind(mesh, _u, 2 * count); + this->fuRho->bind(mesh, _fu, 0); + this->fuRhoVelocity->bind(mesh, _fu, count); + this->fuEnergy->bind(mesh, _fu, 2 * count); //generating Differential operator object SharedPointer< Continuity > lF1DContinuity; diff --git a/examples/inviscid-flow/2d/EulerPressureGetter.h b/examples/inviscid-flow/2d/EulerPressureGetter.h index 76792cdea9..a251372a77 100644 --- a/examples/inviscid-flow/2d/EulerPressureGetter.h +++ b/examples/inviscid-flow/2d/EulerPressureGetter.h @@ -43,10 +43,10 @@ class EulerPressureGetter __cuda_callable__ Real operator[]( const IndexType& idx ) const { -/* if (this->rho[ idx ]==0) return 0; + if (this->rho[ idx ]==0) {return 0;} else return ( this->gamma - 1.0 ) * ( this->energy[ idx ] - 0.5 * this->rho[ idx ] * - ( this->rhoVelX[ idx ] / this->rho[ idx ] + this->rhoVelY[ idx ] / this->rho[ idx ]) ); -*/ return ( this->gamma - 1.0 ) * ( this->energy[ idx ] * this->rho[ idx ] ); + ( std::pow(this->rhoVelX[ idx ] / this->rho[ idx ],2) + std::pow(this->rhoVelY[ idx ] / this->rho[ idx ],2) ) ); +//*/ return ( this->gamma - 1.0 ) * ( this->energy[ idx ] * this->rho[ idx ] ); } diff --git a/examples/inviscid-flow/2d/LaxFridrichsContinuity_impl .h b/examples/inviscid-flow/2d/LaxFridrichsContinuity_impl .h index 11a7e3adc5..539e574c96 100644 --- a/examples/inviscid-flow/2d/LaxFridrichsContinuity_impl .h +++ b/examples/inviscid-flow/2d/LaxFridrichsContinuity_impl .h @@ -46,7 +46,7 @@ operator()( const MeshFunction& u, const IndexType& center = entity.getIndex(); const IndexType& east = neighbourEntities.template getEntityIndex< 1 >(); const IndexType& west = neighbourEntities.template getEntityIndex< -1 >(); - return ( u[ west ] - 2.0 * u[ center ] + u[ east ] ) * hxSquareInverse; + return 0;/*( u[ west ] - 2.0 * u[ center ] + u[ east ] ) * hxSquareInverse;*/ } template< typename MeshReal, diff --git a/examples/inviscid-flow/2d/MyNeumannBoundaryConditions.h b/examples/inviscid-flow/2d/MyNeumannBoundaryConditions.h index 7987b93160..72285a4ae0 100644 --- a/examples/inviscid-flow/2d/MyNeumannBoundaryConditions.h +++ b/examples/inviscid-flow/2d/MyNeumannBoundaryConditions.h @@ -66,7 +66,7 @@ class MyNeumannBoundaryConditions const Config::ParameterContainer& parameters, const String& prefix = "" ) { - return Functions::FunctionAdapter< MeshType, FunctionType >::template setup< MeshPointer >( this->function, meshPointer, parameters, prefix ); + return true; //Functions::FunctionAdapter< MeshType, FunctionType >::template setup< MeshPointer >( this->function, meshPointer, parameters, prefix ); } void setFunction( const Function& function ) diff --git a/examples/inviscid-flow/2d/euler.h b/examples/inviscid-flow/2d/euler.h index acdf88f23e..ef1da7735c 100644 --- a/examples/inviscid-flow/2d/euler.h +++ b/examples/inviscid-flow/2d/euler.h @@ -79,6 +79,7 @@ class eulerSetter static bool run( const Config::ParameterContainer & parameters ) { +std::cout <<"run"; enum { Dimensions = MeshType::getMeshDimensions() }; typedef LaxFridrichs2D< MeshType, Real, Index > ApproximateOperator; typedef eulerRhs< MeshType, Real > RightHandSide; diff --git a/examples/inviscid-flow/2d/eulerProblem_impl.h b/examples/inviscid-flow/2d/eulerProblem_impl.h index 29b0dd0a34..7c07eafeb0 100644 --- a/examples/inviscid-flow/2d/eulerProblem_impl.h +++ b/examples/inviscid-flow/2d/eulerProblem_impl.h @@ -10,6 +10,8 @@ #include "EulerPressureGetter.h" #include "Euler2DVelXGetter.h" #include "EulerVelGetter.h" +#include "MyMixedBoundaryConditions.h" +#include "MyNeumannBoundaryConditions.h" namespace TNL { @@ -59,7 +61,7 @@ setup( const MeshPointer& meshPointer, const Config::ParameterContainer& parameters, const String& prefix ) { - if( ! this->boundaryConditionPointer->setup( meshPointer, parameters, prefix + "boundary-conditions-" ) || + if( //! this->boundaryConditionPointer->setup( meshPointer, parameters, prefix + "boundary-conditions-" ) || ! this->rightHandSidePointer->setup( parameters, prefix + "right-hand-side-" ) ) return false; return true; @@ -76,7 +78,7 @@ getDofs( const MeshPointer& mesh ) const /**** * Return number of DOFs (degrees of freedom) i.e. number * of unknowns to be resolved by the main solver. - */ + */ return 4*mesh->template getEntitiesCount< typename MeshType::Cell >(); } @@ -108,26 +110,30 @@ setInitialCondition( const Config::ParameterContainer& parameters, RealType velLuX = parameters.getParameter< RealType >( "NW-velocityX" ); RealType velLuY = parameters.getParameter< RealType >( "NW-velocityY" ); RealType preLu = parameters.getParameter< RealType >( "NW-pressure" ); - RealType eLu = ( preLu / ( rhoLu * (gamma - 1) ) ); - //RealType eLu = ( preLu / (gamma - 1) ) + 0.5 * rhoLu * pow(velLuX,2)+pow(velLuY,2); + //RealType eLu = ( preLu / ( rhoLu * (gamma - 1) ) ); + RealType eLu = ( preLu / (gamma - 1) ) + 0.5 * rhoLu * ( std::pow(velLuX,2)+std::pow(velLuY,2) ); + std::cout << rhoLu <<' '<< velLuX<<' '<<velLuY<<' '<<preLu<<' '<<eLu<<' '; RealType rhoLd = parameters.getParameter< RealType >( "SW-density" ); RealType velLdX = parameters.getParameter< RealType >( "SW-velocityX" ); RealType velLdY = parameters.getParameter< RealType >( "SW-velocityY" ); RealType preLd = parameters.getParameter< RealType >( "SW-pressure" ); - RealType eLd = ( preLd / ( rhoLd * (gamma - 1) ) ); - //RealType eLd = ( preLd / (gamma - 1) ) + 0.5 * rhoLd * pow(velLdX,2)+pow(velLdY,2); + //RealType eLd = ( preLd / ( rhoLd * (gamma - 1) ) ); + RealType eLd = ( preLd / (gamma - 1) ) + 0.5 * rhoLd * ( std::pow(velLdX,2)+std::pow(velLdY,2) ); + std::cout << rhoLd <<' '<< velLdX<<' '<<velLdY<<' '<<preLd<<' '<<eLd<<' '; RealType rhoRu = parameters.getParameter< RealType >( "NE-density" ); RealType velRuX = parameters.getParameter< RealType >( "NE-velocityX" ); RealType velRuY = parameters.getParameter< RealType >( "NE-velocityY" ); RealType preRu = parameters.getParameter< RealType >( "NE-pressure" ); - RealType eRu = ( preRu / ( rhoRu * (gamma - 1) ) ); - //RealType eRu = ( preRu / (gamma - 1) ) + 0.5 * rhoRu * pow(velRuX,2)+pow(velRuY,2); + //RealType eRu = ( preRu / ( rhoRu * (gamma - 1) ) ); + RealType eRu = ( preRu / (gamma - 1) ) + 0.5 * rhoRu * ( std::pow(velRuX,2)+std::pow(velRuY,2) ); + std::cout << rhoRu <<' '<< velRuX<<' '<<velRuY<<' '<<preRu<<' '<<eRu<<' '; RealType rhoRd = parameters.getParameter< RealType >( "SE-density" ); RealType velRdX = parameters.getParameter< RealType >( "SE-velocityX" ); RealType velRdY = parameters.getParameter< RealType >( "SE-velocityY" ); RealType preRd = parameters.getParameter< RealType >( "SE-pressure" ); - RealType eRd = ( preRd / ( rhoRd * (gamma - 1) ) ); - //RealType eRd = ( preRd / (gamma - 1) ) + 0.5 * rhoRd * pow(velRdX,2)+pow(velRdY,2); + //RealType eRd = ( preRd / ( rhoRd * (gamma - 1) ) ); + RealType eRd = ( preRd / (gamma - 1) ) + 0.5 * rhoRd * ( std::pow(velRdX,2)+std::pow(velRdY,2) ); + std::cout << rhoRd <<' '<< velRdX<<' '<<velRdY<<' '<<preRd<<' '<<eRd<<' '; RealType x0 = parameters.getParameter< RealType >( "riemann-border" ); int size = mesh->template getEntitiesCount< Cell >(); uRho->bind(mesh, dofs, 0); @@ -254,7 +260,7 @@ makeSnapshot( const RealType& time, fileName.setFileNameBase( "velocity-" ); if( ! velocity->save( fileName.getFileName() ) ) return false; - fileName.setFileNameBase( "pressue-" ); + fileName.setFileNameBase( "pressure-" ); if( ! pressure->save( fileName.getFileName() ) ) return false; diff --git a/examples/inviscid-flow/3d/euler.h b/examples/inviscid-flow/3d/euler.h index 600653ecc7..d5550d0c72 100644 --- a/examples/inviscid-flow/3d/euler.h +++ b/examples/inviscid-flow/3d/euler.h @@ -40,35 +40,43 @@ template< typename ConfigTag >class eulerConfig config.addEntry< double >( "NWU-density", "This sets a value of northwest up density." ); config.addEntry< double >( "NWU-velocityX", "This sets a value of northwest up x velocity." ); config.addEntry< double >( "NWU-velocityY", "This sets a value of northwest up y velocity." ); + config.addEntry< double >( "NWU-velocityZ", "This sets a value of northwest up z velocity." ); config.addEntry< double >( "NWU-pressure", "This sets a value of northwest up pressure." ); config.addEntry< double >( "SWU-density", "This sets a value of southwest up density." ); config.addEntry< double >( "SWU-velocityX", "This sets a value of southwest up x velocity." ); config.addEntry< double >( "SWU-velocityY", "This sets a value of southwest up y velocity." ); + config.addEntry< double >( "SWU-velocityZ", "This sets a value of southwest up z velocity." ); config.addEntry< double >( "SWU-pressure", "This sets a value of southwest up pressure." ); config.addEntry< double >( "NWD-density", "This sets a value of northwest down density." ); config.addEntry< double >( "NWD-velocityX", "This sets a value of northwest down x velocity." ); config.addEntry< double >( "NWD-velocityY", "This sets a value of northwest down y velocity." ); + config.addEntry< double >( "NWD-velocityZ", "This sets a value of northwest down z velocity." ); config.addEntry< double >( "NWD-pressure", "This sets a value of northwest down pressure." ); config.addEntry< double >( "SWD-density", "This sets a value of southwest down density." ); config.addEntry< double >( "SWD-velocityX", "This sets a value of southwest down x velocity." ); config.addEntry< double >( "SWD-velocityY", "This sets a value of southwest down y velocity." ); + config.addEntry< double >( "SWF-velocityZ", "This sets a value of southwest down z velocity." ); config.addEntry< double >( "SWD-pressure", "This sets a value of southwest down pressure." ); config.addEntry< double >( "riemann-border", "This sets a position of discontinuity cross." ); config.addEntry< double >( "NEU-density", "This sets a value of northeast up density." ); config.addEntry< double >( "NEU-velocityX", "This sets a value of northeast up x velocity." ); config.addEntry< double >( "NEU-velocityY", "This sets a value of northeast up y velocity." ); + config.addEntry< double >( "NEU-velocityZ", "This sets a value of northeast up z velocity." ); config.addEntry< double >( "NEU-pressure", "This sets a value of northeast up pressure." ); config.addEntry< double >( "SEU-density", "This sets a value of southeast up density." ); config.addEntry< double >( "SEU-velocityX", "This sets a value of southeast up x velocity." ); config.addEntry< double >( "SEU-velocityY", "This sets a value of southeast up y velocity." ); + config.addEntry< double >( "SEU-velocityZ", "This sets a value of southeast up z velocity." ); config.addEntry< double >( "SEU-pressure", "This sets a value of southeast up pressure." ); config.addEntry< double >( "NED-density", "This sets a value of northeast down density." ); config.addEntry< double >( "NED-velocityX", "This sets a value of northeast down x velocity." ); config.addEntry< double >( "NED-velocityY", "This sets a value of northeast down y velocity." ); + config.addEntry< double >( "NED-velocityZ", "This sets a value of northeast down z velocity." ); config.addEntry< double >( "NED-pressure", "This sets a value of northeast down pressure." ); config.addEntry< double >( "SED-density", "This sets a value of southeast down density." ); config.addEntry< double >( "SED-velocityX", "This sets a value of southeast down x velocity." ); config.addEntry< double >( "SED-velocityY", "This sets a value of southeast down y velocity." ); + config.addEntry< double >( "SED-velocityZ", "This sets a value of southeast down z velocity." ); config.addEntry< double >( "SED-pressure", "This sets a value of southeast down pressure." ); config.addEntry< double >( "gamma", "This sets a value of gamma constant." ); diff --git a/examples/inviscid-flow/3d/eulerProblem_impl.h b/examples/inviscid-flow/3d/eulerProblem_impl.h index 8f314ec73b..b01979b87c 100644 --- a/examples/inviscid-flow/3d/eulerProblem_impl.h +++ b/examples/inviscid-flow/3d/eulerProblem_impl.h @@ -60,7 +60,7 @@ setup( const MeshPointer& meshPointer, const Config::ParameterContainer& parameters, const String& prefix ) { - if( ! this->boundaryConditionPointer->setup( meshPointer, parameters, prefix + "boundary-conditions-" ) || + if( //! this->boundaryConditionPointer->setup( meshPointer, parameters, prefix + "boundary-conditions-" ) || ! this->rightHandSidePointer->setup( parameters, prefix + "right-hand-side-" ) ) return false; return true; @@ -108,51 +108,59 @@ setInitialCondition( const Config::ParameterContainer& parameters, RealType rhoNWU = parameters.getParameter< RealType >( "NWU-density" ); RealType velNWUX = parameters.getParameter< RealType >( "NWU-velocityX" ); RealType velNWUY = parameters.getParameter< RealType >( "NWU-velocityY" ); + RealType velNWUZ = parameters.getParameter< RealType >( "NWU-velocityZ" ); RealType preNWU = parameters.getParameter< RealType >( "NWU-pressure" ); - RealType eNWU = ( preNWU / ( rhoNWU * (gamma - 1) ) ); - //RealType eNWU = ( preNWU / (gamma - 1) ) + 0.5 * rhoNWU * pow(velNWUX,2)+pow(velNWUY,2); + //RealType eNWU = ( preNWU / ( rhoNWU * (gamma - 1) ) ); + RealType eNWU = ( preNWU / (gamma - 1) ) + 0.5 * rhoNWU * (std::pow(velNWUX,2)+std::pow(velNWUY,2)+std::pow(velNWUZ,2)); RealType rhoSWU = parameters.getParameter< RealType >( "SWU-density" ); RealType velSWUX = parameters.getParameter< RealType >( "SWU-velocityX" ); RealType velSWUY = parameters.getParameter< RealType >( "SWU-velocityY" ); + RealType velSWUZ = parameters.getParameter< RealType >( "SWU-velocityZ" ); RealType preSWU = parameters.getParameter< RealType >( "SWU-pressure" ); - RealType eSWU = ( preSWU / ( rhoSWU * (gamma - 1) ) ); - //RealType eSWU = ( preSWU / (gamma - 1) ) + 0.5 * rhoSWU * pow(velSWUX,2)+pow(velSWUY,2); + //RealType eSWU = ( preSWU / ( rhoSWU * (gamma - 1) ) ); + RealType eSWU = ( preSWU / (gamma - 1) ) + 0.5 * rhoSWU * (std::pow(velSWUX,2)+std::pow(velSWUY,2)+std::pow(velSWUZ,2)); RealType rhoNWD = parameters.getParameter< RealType >( "NWD-density" ); RealType velNWDX = parameters.getParameter< RealType >( "NWD-velocityX" ); RealType velNWDY = parameters.getParameter< RealType >( "NWD-velocityY" ); + RealType velNWDZ = parameters.getParameter< RealType >( "NWD-velocityZ" ); RealType preNWD = parameters.getParameter< RealType >( "NWD-pressure" ); - RealType eNWD = ( preNWD / ( rhoNWD * (gamma - 1) ) ); - //RealType eNWD = ( preNWD / (gamma - 1) ) + 0.5 * rhoNWD * pow(velNWDX,2)+pow(velNWDY,2); + //RealType eNWD = ( preNWD / ( rhoNWD * (gamma - 1) ) ); + RealType eNWD = ( preNWD / (gamma - 1) ) + 0.5 * rhoNWD * (std::pow(velNWDX,2)+std::pow(velNWDY,2)+std::pow(velNWDZ,2)); RealType rhoSWD = parameters.getParameter< RealType >( "SWD-density" ); RealType velSWDX = parameters.getParameter< RealType >( "SWD-velocityX" ); RealType velSWDY = parameters.getParameter< RealType >( "SWD-velocityY" ); + RealType velSWDZ = parameters.getParameter< RealType >( "SWD-velocityZ" ); RealType preSWD = parameters.getParameter< RealType >( "SWD-pressure" ); - RealType eSWD = ( preSWD / ( rhoSWD * (gamma - 1) ) ); - //RealType eSWD = ( preSWD / (gamma - 1) ) + 0.5 * rhoSWD * pow(velSWDX,2)+pow(velSWDY,2); + //RealType eSWD = ( preSWD / ( rhoSWD * (gamma - 1) ) ); + RealType eSWD = ( preSWD / (gamma - 1) ) + 0.5 * rhoSWD * (std::pow(velSWDX,2)+std::pow(velSWDY,2)+std::pow(velSWDZ,2)); RealType rhoNEU = parameters.getParameter< RealType >( "NEU-density" ); RealType velNEUX = parameters.getParameter< RealType >( "NEU-velocityX" ); RealType velNEUY = parameters.getParameter< RealType >( "NEU-velocityY" ); + RealType velNEUZ = parameters.getParameter< RealType >( "NEU-velocityZ" ); RealType preNEU = parameters.getParameter< RealType >( "NEU-pressure" ); - RealType eNEU = ( preNEU / ( rhoNEU * (gamma - 1) ) ); - //RealType eNEU = ( preNEU / (gamma - 1) ) + 0.5 * rhoNEU * pow(velNEUX,2)+pow(velNEUY,2); + //RealType eNEU = ( preNEU / ( rhoNEU * (gamma - 1) ) ); + RealType eNEU = ( preNEU / (gamma - 1) ) + 0.5 * rhoNEU * (std::pow(velNEUX,2)+std::pow(velNEUY,2)+std::pow(velNEUZ,2)); RealType rhoSEU = parameters.getParameter< RealType >( "SEU-density" ); RealType velSEUX = parameters.getParameter< RealType >( "SEU-velocityX" ); RealType velSEUY = parameters.getParameter< RealType >( "SEU-velocityY" ); + RealType velSEUZ = parameters.getParameter< RealType >( "SEU-velocityZ" ); RealType preSEU = parameters.getParameter< RealType >( "SEU-pressure" ); - RealType eSEU = ( preSEU / ( rhoSEU * (gamma - 1) ) ); - //RealType eSEU = ( preSEU / (gamma - 1) ) + 0.5 * rhoSEU * pow(velSEUX,2)+pow(velSEUY,2); + //RealType eSEU = ( preSEU / ( rhoSEU * (gamma - 1) ) ); + RealType eSEU = ( preSEU / (gamma - 1) ) + 0.5 * rhoSEU * (std::pow(velSEUX,2)+std::pow(velSEUY,2)+std::pow(velSEUZ,2)); RealType rhoNED = parameters.getParameter< RealType >( "NED-density" ); RealType velNEDX = parameters.getParameter< RealType >( "NED-velocityX" ); RealType velNEDY = parameters.getParameter< RealType >( "NED-velocityY" ); + RealType velNEDZ = parameters.getParameter< RealType >( "NED-velocityZ" ); RealType preNED = parameters.getParameter< RealType >( "NED-pressure" ); - RealType eNED = ( preNED / ( rhoNED * (gamma - 1) ) ); - //RealType eNED = ( preNED / (gamma - 1) ) + 0.5 * rhoNED * pow(velNEDX,2)+pow(velNEDY,2); + //RealType eNED = ( preNED / ( rhoNED * (gamma - 1) ) ); + RealType eNED = ( preNED / (gamma - 1) ) + 0.5 * rhoNED * (std::pow(velNEDX,2)+std::pow(velNEDY,2)+std::pow(velNEDZ,2)); RealType rhoSED = parameters.getParameter< RealType >( "SED-density" ); RealType velSEDX = parameters.getParameter< RealType >( "SED-velocityX" ); RealType velSEDY = parameters.getParameter< RealType >( "SED-velocityY" ); + RealType velSEDZ = parameters.getParameter< RealType >( "SED-velocityZ" ); RealType preSED = parameters.getParameter< RealType >( "SED-pressure" ); - RealType eSED = ( preSED / ( rhoSED * (gamma - 1) ) ); - //RealType eSED = ( preSED / (gamma - 1) ) + 0.5 * rhoSED * pow(velSEDX,2)+pow(velSEDY,2); + //RealType eSED = ( preSED / ( rhoSED * (gamma - 1) ) ); + RealType eSED = ( preSED / (gamma - 1) ) + 0.5 * rhoSED * (std::pow(velSEDX,2)+std::pow(velSEDY,2)+std::pow(velSEDZ,2)); RealType x0 = parameters.getParameter< RealType >( "riemann-border" ); int size = mesh->template getEntitiesCount< Cell >(); uRho->bind(mesh, dofs, 0); @@ -166,7 +174,7 @@ setInitialCondition( const Config::ParameterContainer& parameters, velocity->bind(mesh, data, size); velocityX->bind(mesh, data, 2*size); velocityY->bind(mesh, data, 3*size); - velocityY->bind(mesh, data, 4*size); + velocityZ->bind(mesh, data, 4*size); int count = std::pow(size, (1.0/3.0)); for(IndexType i = 0; i < count; i++) for(IndexType j = 0; j < count; j++) @@ -176,10 +184,12 @@ setInitialCondition( const Config::ParameterContainer& parameters, (* uRho)[i*std::pow(count,2)+j*count+k] = rhoSWD; (* uRhoVelocityX)[i*std::pow(count,2)+j*count+k] = rhoSWD * velSWDX; (* uRhoVelocityY)[i*std::pow(count,2)+j*count+k] = rhoSWD * velSWDY; + (* uRhoVelocityZ)[i*std::pow(count,2)+j*count+k] = rhoSWD * velSWDZ; (* uEnergy)[i*std::pow(count,2)+j*count+k] = eSWD; - (* velocity)[i*std::pow(count,2)+j*count+k] = std::sqrt(std::pow(velSWDX,2)+std::pow(velSWDY,2)); + (* velocity)[i*std::pow(count,2)+j*count+k] = std::sqrt(std::pow(velSWDX,2)+std::pow(velSWDY,2)+std::pow(velSWDZ,2)); (* velocityX)[i*std::pow(count,2)+j*count+k] = velSWDX; (* velocityY)[i*std::pow(count,2)+j*count+k] = velSWDY; + (* velocityZ)[i*std::pow(count,2)+j*count+k] = velSWDZ; (* pressure)[i*std::pow(count,2)+j*count+k] = preSWD; } else @@ -188,10 +198,12 @@ setInitialCondition( const Config::ParameterContainer& parameters, (* uRho)[i*std::pow(count,2)+j*count+k] = rhoSED; (* uRhoVelocityX)[i*std::pow(count,2)+j*count+k] = rhoSED * velSEDX; (* uRhoVelocityY)[i*std::pow(count,2)+j*count+k] = rhoSED * velSEDY; + (* uRhoVelocityZ)[i*std::pow(count,2)+j*count+k] = rhoSED * velSEDZ; (* uEnergy)[i*std::pow(count,2)+j*count+k] = eSED; - (* velocity)[i*std::pow(count,2)+j*count+k] = std::sqrt(std::pow(velSEDX,2)+std::pow(velSEDY,2)); + (* velocity)[i*std::pow(count,2)+j*count+k] = std::sqrt(std::pow(velSEDX,2)+std::pow(velSEDY,2)+std::pow(velSEDZ,2)); (* velocityX)[i*std::pow(count,2)+j*count+k] = velSEDX; (* velocityY)[i*std::pow(count,2)+j*count+k] = velSEDY; + (* velocityZ)[i*std::pow(count,2)+j*count+k] = velSEDZ; (* pressure)[i*std::pow(count,2)+j*count+k] = preSED; } else @@ -200,10 +212,12 @@ setInitialCondition( const Config::ParameterContainer& parameters, (* uRho)[i*std::pow(count,2)+j*count+k] = rhoNWD; (* uRhoVelocityX)[i*std::pow(count,2)+j*count+k] = rhoNWD * velNWDX; (* uRhoVelocityY)[i*std::pow(count,2)+j*count+k] = rhoNWD * velNWDY; + (* uRhoVelocityZ)[i*std::pow(count,2)+j*count+k] = rhoNWD * velNWDZ; (* uEnergy)[i*std::pow(count,2)+j*count+k] = eNWD; - (* velocity)[i*std::pow(count,2)+j*count+k] = std::sqrt(std::pow(velNWDX,2)+std::pow(velNWDY,2)); + (* velocity)[i*std::pow(count,2)+j*count+k] = std::sqrt(std::pow(velNWDX,2)+std::pow(velNWDY,2)+std::pow(velNWDZ,2)); (* velocityX)[i*std::pow(count,2)+j*count+k] = velNWDX; (* velocityY)[i*std::pow(count,2)+j*count+k] = velNWDY; + (* velocityZ)[i*std::pow(count,2)+j*count+k] = velNWDZ; (* pressure)[i*std::pow(count,2)+j*count+k] = preNWD; } else @@ -212,10 +226,12 @@ setInitialCondition( const Config::ParameterContainer& parameters, (* uRho)[i*std::pow(count,2)+j*count+k] = rhoNED; (* uRhoVelocityX)[i*std::pow(count,2)+j*count+k] = rhoNED * velNEDX; (* uRhoVelocityY)[i*std::pow(count,2)+j*count+k] = rhoNED * velNEDY; + (* uRhoVelocityZ)[i*std::pow(count,2)+j*count+k] = rhoNED * velNEDZ; (* uEnergy)[i*std::pow(count,2)+j*count+k] = eNED; - (* velocity)[i*std::pow(count,2)+j*count+k] = std::sqrt(std::pow(velNEDX,2)+std::pow(velNEDY,2)); + (* velocity)[i*std::pow(count,2)+j*count+k] = std::sqrt(std::pow(velNEDX,2)+std::pow(velNEDY,2)+std::pow(velNEDZ,2)); (* velocityX)[i*std::pow(count,2)+j*count+k] = velNEDX; (* velocityY)[i*std::pow(count,2)+j*count+k] = velNEDY; + (* velocityZ)[i*std::pow(count,2)+j*count+k] = velNEDZ; (* pressure)[i*std::pow(count,2)+j*count+k] = preNED; } else @@ -224,10 +240,12 @@ setInitialCondition( const Config::ParameterContainer& parameters, (* uRho)[i*std::pow(count,2)+j*count+k] = rhoSWU; (* uRhoVelocityX)[i*std::pow(count,2)+j*count+k] = rhoSWU * velSWUX; (* uRhoVelocityY)[i*std::pow(count,2)+j*count+k] = rhoSWU * velSWUY; + (* uRhoVelocityZ)[i*std::pow(count,2)+j*count+k] = rhoSWU * velSWUZ; (* uEnergy)[i*std::pow(count,2)+j*count+k] = eSWU; - (* velocity)[i*std::pow(count,2)+j*count+k] = std::sqrt(std::pow(velSWUX,2)+std::pow(velSWUY,2)); + (* velocity)[i*std::pow(count,2)+j*count+k] = std::sqrt(std::pow(velSWUX,2)+std::pow(velSWUY,2)+std::pow(velSWUZ,2)); (* velocityX)[i*std::pow(count,2)+j*count+k] = velSWUX; (* velocityY)[i*std::pow(count,2)+j*count+k] = velSWUY; + (* velocityZ)[i*std::pow(count,2)+j*count+k] = velSWUZ; (* pressure)[i*std::pow(count,2)+j*count+k] = preSWU; } else @@ -236,10 +254,12 @@ setInitialCondition( const Config::ParameterContainer& parameters, (* uRho)[i*std::pow(count,2)+j*count+k] = rhoSEU; (* uRhoVelocityX)[i*std::pow(count,2)+j*count+k] = rhoSEU * velSEUX; (* uRhoVelocityY)[i*std::pow(count,2)+j*count+k] = rhoSEU * velSEUY; + (* uRhoVelocityZ)[i*std::pow(count,2)+j*count+k] = rhoSEU * velSEUZ; (* uEnergy)[i*std::pow(count,2)+j*count+k] = eSEU; - (* velocity)[i*std::pow(count,2)+j*count+k] = std::sqrt(std::pow(velSEUX,2)+std::pow(velSEUY,2)); + (* velocity)[i*std::pow(count,2)+j*count+k] = std::sqrt(std::pow(velSEUX,2)+std::pow(velSEUY,2)+std::pow(velSEUZ,2)); (* velocityX)[i*std::pow(count,2)+j*count+k] = velSEUX; (* velocityY)[i*std::pow(count,2)+j*count+k] = velSEUY; + (* velocityZ)[i*std::pow(count,2)+j*count+k] = velSEUZ; (* pressure)[i*std::pow(count,2)+j*count+k] = preSEU; } else @@ -248,10 +268,12 @@ setInitialCondition( const Config::ParameterContainer& parameters, (* uRho)[i*std::pow(count,2)+j*count+k] = rhoNWU; (* uRhoVelocityX)[i*std::pow(count,2)+j*count+k] = rhoNWU * velNWUX; (* uRhoVelocityY)[i*std::pow(count,2)+j*count+k] = rhoNWU * velNWUY; + (* uRhoVelocityZ)[i*std::pow(count,2)+j*count+k] = rhoNWU * velNWUZ; (* uEnergy)[i*std::pow(count,2)+j*count+k] = eNWU; - (* velocity)[i*std::pow(count,2)+j*count+k] = std::sqrt(std::pow(velNWUX,2)+std::pow(velNWUY,2)); + (* velocity)[i*std::pow(count,2)+j*count+k] = std::sqrt(std::pow(velNWUX,2)+std::pow(velNWUY,2)+std::pow(velNWUZ,2)); (* velocityX)[i*std::pow(count,2)+j*count+k] = velNWUX; (* velocityY)[i*std::pow(count,2)+j*count+k] = velNWUY; + (* velocityZ)[i*std::pow(count,2)+j*count+k] = velNWUZ; (* pressure)[i*std::pow(count,2)+j*count+k] = preNWU; } else @@ -260,10 +282,12 @@ setInitialCondition( const Config::ParameterContainer& parameters, (* uRho)[i*std::pow(count,2)+j*count+k] = rhoNEU; (* uRhoVelocityX)[i*std::pow(count,2)+j*count+k] = rhoNEU * velNEUX; (* uRhoVelocityY)[i*std::pow(count,2)+j*count+k] = rhoNEU * velNEUY; + (* uRhoVelocityZ)[i*std::pow(count,2)+j*count+k] = rhoNEU * velNEUZ; (* uEnergy)[i*std::pow(count,2)+j*count+k] = eNEU; - (* velocity)[i*std::pow(count,2)+j*count+k] = std::sqrt(std::pow(velNEUX,2)+std::pow(velNEUY,2)); + (* velocity)[i*std::pow(count,2)+j*count+k] = std::sqrt(std::pow(velNEUX,2)+std::pow(velNEUY,2)+std::pow(velNEUZ,2)); (* velocityX)[i*std::pow(count,2)+j*count+k] = velNEUX; (* velocityY)[i*std::pow(count,2)+j*count+k] = velNEUY; + (* velocityZ)[i*std::pow(count,2)+j*count+k] = velNEUZ; (* pressure)[i*std::pow(count,2)+j*count+k] = preNEU; }; return true; -- GitLab