Program Listing for File dataBlock.hpp
↰ Return to documentation for file (dataBlock/dataBlock.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 DATABLOCK_DATABLOCK_HPP_
#define DATABLOCK_DATABLOCK_HPP_
#include <vector>
#include <string>
#include <map>
#include "idefix.hpp"
#include "grid.hpp"
#include "gridHost.hpp"
#include "hydro.hpp"
#include "fargo.hpp"
#include "gravity.hpp"
#include "stateContainer.hpp"
// forward class declaration (used by enrollment functions)
class DataBlock;
using GridCoarseningFunc = void(*) (DataBlock &);
class DataBlock {
public:
// Local grid information
std::vector<IdefixArray1D<real>> x;
std::vector<IdefixArray1D<real>> xr;
std::vector<IdefixArray1D<real>> xl;
std::vector<IdefixArray1D<real>> dx;
std::vector<IdefixArray1D<real>> xgc;
IdefixArray1D<real> rt;
IdefixArray1D<real> sinx2m;
IdefixArray1D<real> tanx2m;
IdefixArray1D<real> sinx2;
IdefixArray1D<real> tanx2;
IdefixArray1D<real> dmu;
std::vector<IdefixArray2D<int>> coarseningLevel;
std::vector<bool> coarseningDirection;
std::vector<real> xbeg;
std::vector<real> xend;
IdefixArray3D<real> dV;
std::vector<IdefixArray3D<real>> A;
std::vector<int> np_tot;
std::vector<int> np_int;
std::vector<int> nghost;
std::vector<BoundaryType> lbound;
std::vector<BoundaryType> rbound;
bool haveAxis{false};
GridCoarsening haveGridCoarsening{GridCoarsening::disabled};
GridCoarseningFunc gridCoarseningFunc{NULL};
std::vector<int> beg;
std::vector<int> end;
std::vector<int> gbeg;
std::vector<int> gend;
real dt;
real t;
Grid *mygrid;
std::map<std::string, StateContainer> states;
Hydro hydro;
void InitFromGrid(Grid &, Input &);
void MakeGeometry();
void DumpToFile(std::string);
int CheckNan();
bool rklCycle{false};
void EvolveStage();
void SetBoundaries();
void Coarsen();
void ShowConfig();
real ComputeTimestep();
void ResetStage();
void EnrollGridCoarseningLevels(GridCoarseningFunc);
void CheckCoarseningLevels();
DataBlock() = default;
// Do we use fargo-like scheme ? (orbital advection)
bool haveFargo{false};
Fargo fargo;
// Do we have Gravity ?
bool haveGravity{false};
Gravity gravity;
private:
void WriteVariable(FILE* , int , int *, char *, void*);
template<int dir> void LoopDir();
void ComputeGridCoarseningLevels();
};
#endif // DATABLOCK_DATABLOCK_HPP_