Skip to content

Keep Inter-cell flux #337

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 4 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions src/fluid/RiemannSolver/riemannSolver.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,6 @@ class RiemannSolver {

IdefixArray4D<real> Vc;
IdefixArray4D<real> Vs;
IdefixArray4D<real> Flux;
IdefixArray3D<real> cMax;
Fluid<Phys>* hydro;
DataBlock *data;
Expand All @@ -90,7 +89,6 @@ class RiemannSolver {
template <typename Phys>
RiemannSolver<Phys>::RiemannSolver(Input &input, Fluid<Phys>* hydro) : Vc{hydro->Vc},
Vs{hydro->Vs},
Flux{hydro->FluxRiemann},
cMax{hydro->cMax},
hydro{hydro},
data{hydro->data}
Expand Down Expand Up @@ -148,8 +146,6 @@ RiemannSolver<Phys>::RiemannSolver(Input &input, Fluid<Phys>* hydro) : Vc{hydro-
mySolver = HLL_DUST;
}



// Shock flattening
this->haveShockFlattening = input.CheckEntry(std::string(Phys::prefix),"shockFlattening")>=0;
// Init shock flattening
Expand Down
3 changes: 1 addition & 2 deletions src/fluid/addNonIdealMHDFlux.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,7 @@ void Fluid<Phys>::AddNonIdealMHDFlux(const real t) {

if constexpr(Phys::mhd) {
int ioffset,joffset,koffset;

IdefixArray4D<real> Flux = this->FluxRiemann;
IdefixArray4D<real> Flux = this->FluxRiemann[dir];
IdefixArray4D<real> Vc = this->Vc;
IdefixArray4D<real> Vs = this->Vs;
IdefixArray3D<real> dMax = this->dMax;
Expand Down
8 changes: 4 additions & 4 deletions src/fluid/calcParabolicFlux.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ void Fluid<Phys>::CalcParabolicFlux(const real t) {
if(data->haveFargo && viscosityStatus.isExplicit) {
data->fargo->AddVelocityFluid(t,this);
}
this->viscosity->AddViscousFlux(dir,t, this->FluxRiemann);
this->viscosity->AddViscousFlux(dir,t, this->FluxRiemann[dir]);

// Remove back Fargo velocity
if(data->haveFargo && viscosityStatus.isExplicit) {
Expand All @@ -53,18 +53,18 @@ void Fluid<Phys>::CalcParabolicFlux(const real t) {
// Add thermal diffusion
if( (thermalDiffusionStatus.isExplicit && (!data->rklCycle))
|| (thermalDiffusionStatus.isRKL && data->rklCycle)) {
this->thermalDiffusion->AddDiffusiveFlux(dir,t, this->FluxRiemann);
this->thermalDiffusion->AddDiffusiveFlux(dir,t, this->FluxRiemann[dir]);
}

if( (bragViscosityStatus.isExplicit && (!data->rklCycle))
|| (bragViscosityStatus.isRKL && data->rklCycle)) {
this->bragViscosity->AddBragViscousFlux(dir,t, this->FluxRiemann);
this->bragViscosity->AddBragViscousFlux(dir,t, this->FluxRiemann[dir]);
}

// Add braginskii thermal diffusion
if( (bragThermalDiffusionStatus.isExplicit && (!data->rklCycle))
|| (bragThermalDiffusionStatus.isRKL && data->rklCycle)) {
this->bragThermalDiffusion->AddBragDiffusiveFlux(dir,t, this->FluxRiemann);
this->bragThermalDiffusion->AddBragDiffusiveFlux(dir,t, this->FluxRiemann[dir]);
}

idfx::popRegion();
Expand Down
4 changes: 2 additions & 2 deletions src/fluid/calcRightHandSide.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ struct Fluid_CorrectFluxFunctor {
explicit Fluid_CorrectFluxFunctor (Fluid<Phys> *hydro, real dt) {
Uc = hydro->Uc;
Vc = hydro->Vc;
Flux = hydro->FluxRiemann;
Flux = hydro->FluxRiemann[dir];
A = hydro->data->A[dir];
dV = hydro->data->dV;
x1m = hydro->data->xl[IDIR];
Expand Down Expand Up @@ -205,7 +205,7 @@ struct Fluid_CalcRHSFunctor {
explicit Fluid_CalcRHSFunctor (Fluid<Phys> *hydro, real dt) {
Uc = hydro->Uc;
Vc = hydro->Vc;
Flux = hydro->FluxRiemann;
Flux = hydro->FluxRiemann[dir];
A = hydro->data->A[dir];
dV = hydro->data->dV;
x1m = hydro->data->xl[IDIR];
Expand Down
6 changes: 3 additions & 3 deletions src/fluid/evolveStage.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,20 +14,20 @@ template<typename Phys>
template<int dir>
void Fluid<Phys>::LoopDir(const real t, const real dt) {
// Step 2: compute the intercell flux with our Riemann solver, store the resulting InvDt
this->rSolver->template CalcFlux<dir>(this->FluxRiemann);
this->rSolver->template CalcFlux<dir>(this->FluxRiemann[dir]);

// Step 2.5: compute intercell parabolic flux when needed
if(haveExplicitParabolicTerms) CalcParabolicFlux<dir>(t);

// If we have tracers, compute the tracer intercell flux
if(haveTracer) {
this->tracer->template CalcFlux<dir, Phys>(this->FluxRiemann);
this->tracer->template CalcFlux<dir, Phys>(this->FluxRiemann[dir]);
}

// Step 3: compute the resulting evolution of the conserved variables, stored in Uc
CalcRightHandSide<dir>(t,dt);
if(haveTracer) {
this->tracer->template CalcRightHandSide<dir, Phys>(this->FluxRiemann,t ,dt);
this->tracer->template CalcRightHandSide<dir, Phys>(this->FluxRiemann[dir],t ,dt);
}

// Recursive: do next dimension
Expand Down
12 changes: 8 additions & 4 deletions src/fluid/fluid.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ class Fluid {
void EvolveStage(const real, const real);
void ResetStage();
void ShowConfig();
IdefixArray4D<real> GetFlux() {return this->FluxRiemann;}
IdefixArray4D<real> GetFlux(int dir) {return this->FluxRiemann.at(dir);}
int CheckNan();

// Our boundary conditions
Expand Down Expand Up @@ -182,7 +182,7 @@ class Fluid {
// Required by time integrator
IdefixArray3D<real> InvDt;

IdefixArray4D<real> FluxRiemann;
std::array<IdefixArray4D<real>,DIMENSIONS> FluxRiemann;
IdefixArray3D<real> dMax; // Maximum diffusion speed

std::unique_ptr<RiemannSolver<Phys>> rSolver;
Expand Down Expand Up @@ -539,8 +539,12 @@ Fluid<Phys>::Fluid(Grid &grid, Input &input, DataBlock *datain, int n) {
data->np_tot[KDIR], data->np_tot[JDIR], data->np_tot[IDIR]);
dMax = IdefixArray3D<real>(prefix+"_dMax",
data->np_tot[KDIR], data->np_tot[JDIR], data->np_tot[IDIR]);
FluxRiemann = IdefixArray4D<real>(prefix+"_FluxRiemann", Phys::nvar+nTracer,
data->np_tot[KDIR], data->np_tot[JDIR], data->np_tot[IDIR]);

for(int i = 0 ; i < DIMENSIONS ; i++) {
FluxRiemann[i] = IdefixArray4D<real>(prefix+"_FluxRiemann_X"+std::to_string(i),
Phys::nvar+nTracer,
data->np_tot[KDIR], data->np_tot[JDIR], data->np_tot[IDIR]);
}

if constexpr(Phys::mhd) {
Vs = IdefixArray4D<real>(prefix+"_Vs", DIMENSIONS,
Expand Down
12 changes: 5 additions & 7 deletions src/rkl/rkl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ class RKLegendre {
RKLegendre(Input &, Fluid<Phys>*);
void Cycle();
void ResetStage();
void ResetFlux();
void ResetFlux(int dir);
void EvolveStage(real);
template <int> void CalcParabolicRHS(real);
void ComputeDt();
Expand Down Expand Up @@ -555,9 +555,9 @@ void RKLegendre<Phys>::Cycle() {


template<typename Phys>
void RKLegendre<Phys>::ResetFlux() {
void RKLegendre<Phys>::ResetFlux(int dir) {
idfx::pushRegion("RKLegendre::ResetFlux");
IdefixArray4D<real> Flux = hydro->FluxRiemann;
IdefixArray4D<real> Flux = hydro->FluxRiemann[dir];
IdefixArray1D<int> vars = this->varList;
idefix_for("RKL_ResetFlux",
0,nvarRKL,
Expand All @@ -576,7 +576,6 @@ template<typename Phys>
struct RKLegendre_ResetStageFunctor {
explicit RKLegendre_ResetStageFunctor(RKLegendre<Phys> *rkl) {
dU = rkl->dU;
Flux = rkl->hydro->FluxRiemann;
vars = rkl->varList;
stage = rkl->stage;
nvar = rkl->nvarRKL;
Expand All @@ -596,7 +595,6 @@ struct RKLegendre_ResetStageFunctor {
}

IdefixArray4D<real> dU;
IdefixArray4D<real> Flux;
IdefixArray1D<int> vars;
IdefixArray4D<real> dA, dB;
IdefixArray3D<real> ex,ey,ez;
Expand Down Expand Up @@ -680,7 +678,7 @@ void RKLegendre<Phys>::ComputeDt() {
template<typename Phys>
template<int dir>
void RKLegendre<Phys>::LoopDir(real t) {
ResetFlux();
ResetFlux(dir);

// CalcParabolicFlux
hydro->template CalcParabolicFlux<dir>(t);
Expand Down Expand Up @@ -724,7 +722,7 @@ template <int dir>
void RKLegendre<Phys>::CalcParabolicRHS(real t) {
idfx::pushRegion("RKLegendre::CalcParabolicRHS");

IdefixArray4D<real> Flux = hydro->FluxRiemann;
IdefixArray4D<real> Flux = hydro->FluxRiemann[dir];
IdefixArray3D<real> A = data->A[dir];
IdefixArray3D<real> dV = data->dV;
IdefixArray1D<real> x1m = data->xl[IDIR];
Expand Down
2 changes: 1 addition & 1 deletion test/MHD/AmbipolarWind/setup.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -335,7 +335,7 @@ void EmfBoundary(DataBlock& data, const real t) {
}

void FluxBoundary(DataBlock & data, int dir, BoundarySide side, const real t) {
IdefixArray4D<real> Flux = data.hydro->FluxRiemann;
IdefixArray4D<real> Flux = data.hydro->FluxRiemann[dir];
if( dir==IDIR && side == left) {
int iref = data.beg[IDIR];

Expand Down
2 changes: 1 addition & 1 deletion test/SelfGravity/UniformCollapse/setup.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ void FluxBoundary(Fluid<DefaultPhysics> *hydro, int dir, BoundarySide side, cons
if((dir==IDIR) && (side == left)) {
// Loading needed data
DataBlock &data = *hydro->data;
IdefixArray4D<real> Flux = hydro->FluxRiemann;
IdefixArray4D<real> Flux = hydro->FluxRiemann[dir];
real halfDt = data.dt/2.; // RK2, dt is actually half at each flux calculation
int iref = data.nghost[IDIR];
real rin = data.xbeg[IDIR];
Expand Down