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_