Program Listing for File calcParabolicFlux.hpp
↰ Return to documentation for file (hydro/calcParabolicFlux.hpp
)
// ***********************************************************************************
// Idefix MHD astrophysical code
// Copyright(C) 2020-2022 Geoffroy R. J. Lesur <geoffroy.lesur@univ-grenoble-alpes.fr>
// and other code contributors
// Licensed under CeCILL 2.1 License, see COPYING for more information
// ***********************************************************************************
#ifndef HYDRO_CALCPARABOLICFLUX_HPP_
#define HYDRO_CALCPARABOLICFLUX_HPP_
#include "hydro.hpp"
#include "dataBlock.hpp"
#include "addNonIdealMHDFlux.hpp"
// Compute parabolic fluxes
template <int dir>
void Hydro::CalcParabolicFlux(const real t) {
idfx::pushRegion("Hydro::CalcParabolicFlux");
IdefixArray3D<real> dMax = this->dMax;
// Reset Max diffusion coefficient
idefix_for("HydroParabolicResetStage",0,data->np_tot[KDIR],
0,data->np_tot[JDIR],
0,data->np_tot[IDIR],
KOKKOS_LAMBDA (int k, int j, int i) {
dMax(k,j,i) = ZERO_F;
}
);
if( (resistivityStatus.isExplicit && (! data->rklCycle))
|| (resistivityStatus.isRKL && ( data->rklCycle))
|| (ambipolarStatus.isExplicit && (! data->rklCycle))
|| (ambipolarStatus.isRKL && ( data->rklCycle)) ) {
this->AddNonIdealMHDFlux<dir>(t);
}
if( (viscosityStatus.isExplicit && (!data->rklCycle))
|| (viscosityStatus.isRKL && data->rklCycle)) {
// Add fargo velocity if using fargo
if(data->haveFargo && viscosityStatus.isExplicit) {
data->fargo.AddVelocity(t);
}
this->viscosity.AddViscousFlux(dir,t);
// Remove back Fargo velocity
if(data->haveFargo && viscosityStatus.isExplicit) {
data->fargo.SubstractVelocity(t);
}
}
// Add thermal diffusion
if( (thermalDiffusionStatus.isExplicit && (!data->rklCycle))
|| (thermalDiffusionStatus.isRKL && data->rklCycle)) {
this->thermalDiffusion.AddDiffusiveFlux(dir,t);
}
idfx::popRegion();
}
#endif //HYDRO_CALCPARABOLICFLUX_HPP_