13#define MPI_COMM_WORLD 1
14#define MPI_Initialized(x)
15#define MPI_Comm_size(x, y) { *y = 0; }
16#define MPI_Comm_rank(x, y) { *y = 0; }
21template <
class distributed_vector>
45 from_json (
const nlohmann::json &j, grid_properties_t &q) {
47 j.at (
"nx").get_to (q.numcols);
48 j.at (
"ny").get_to (q.numrows);
49 j.at (
"hx").get_to (q.hx);
50 j.at (
"hy").get_to (q.hy);
54 q.end_cell_row = q.numrows - 1;
56 q.end_cell_col = q.numcols - 1;
57 q.start_owned_nodes = 0;
58 q.num_owned_nodes = (q.numrows+1)*(q.numcols+1);
64 return (idx / numrows);
69 return (idx % numrows);
74 idx_t bottom_left = 0;
76 bottom_left = ridx + cidx * (numrows + 1);
82 return (bottom_left + 1);
85 return (bottom_left + (numrows + 1));
88 return (bottom_left + (numrows + 2));
118 double bottom_left = 0.0;
121 bottom_left = colidx *
hx;
125 bottom_left = rowidx *
hy;
126 if (inode == 1 || inode == 3)
129 return (bottom_left);
139 return ((
x -
p(0,0,c,r,
hx,
hy))/
hx * (
y -
p(1,0,c,r,
hx,
hy))/
hy);
142 return ((
x -
p(0,0,c,r,
hx,
hy))/
hx * (1. - (
y -
p(1,0,c,r,
hx,
hy))/
hy));
145 return ((1. - (
x -
p(0,0,c,r,
hx,
hy))/
hx) * (
y -
p(1,0,c,r,
hx,
hy))/
hy);
148 return ((1. - (
x -
p(0,0,c,r,
hx,
hy))/
hx) * (1. - (
y -
p(1,0,c,r,
hx,
hy))/
hy));
162 return ((1. /
hx) * ((
y -
p(1,0,c,r,
hx,
hy)) /
hy));
164 else if (idir == 1) {
165 return (((
x -
p(0,0,c,r,
hx,
hy)) /
hx) * (1. /
hy));
170 return ((1. /
hx) * ((1. - (
y -
p(1,0,c,r,
hx,
hy)) /
hy)));
172 else if (idir == 1) {
173 return (((
x -
p(0,0,c,r,
hx,
hy)) /
hx) * (- 1. /
hy));
178 return ((- 1. /
hx) * ((
y -
p(1,0,c,r,
hx,
hy)) /
hy));
180 else if (idir == 1) {
181 return ((1. - (
x -
p(0,0,c,r,
hx,
hy)) /
hx) * (1. /
hy));
186 return ((- 1. /
hx) * (1. - (
y -
p(1,0,c,r,
hx,
hy)) /
hy));
188 else if (idir == 1) {
189 return ((1. - (
x -
p(0,0,c,r,
hx,
hy))/
hx) * (- 1. /
hy));
217 {
return *(this->
data); };
221 {
return *(this->
data); };
225 {
return this->
data; };
229 {
return this->
data; };
237 {
return ! ((*this) == other); }
455 double hx,
double hy);
459 const std::map<std::string,
460 distributed_vector> & f)
const;
464 const std::map<std::string,
465 distributed_vector> & f)
const;
475 {
return cell_iterator (); };
479 {
return cell_iterator (); };
cell_t * data
Definition quadgrid_cpp.h:241
cell_iterator(cell_t *_data=nullptr)
Definition quadgrid_cpp.h:209
Definition quadgrid_cpp.h:270
idx_t start_cell_row() const
Definition quadgrid_cpp.h:355
idx_t end_cell_col() const
Definition quadgrid_cpp.h:343
idx_t sub2gind(idx_t r, idx_t c) const
Definition quadgrid_cpp.h:376
static constexpr idx_t NOT_ON_BOUNDARY
Definition quadgrid_cpp.h:279
idx_t global_cell_idx
Definition quadgrid_cpp.h:406
idx_t row_idx() const
Definition quadgrid_cpp.h:367
idx_t num_rows() const
Definition quadgrid_cpp.h:359
idx_t rowidx
Definition quadgrid_cpp.h:403
static constexpr idx_t edges_per_cell
Definition quadgrid_cpp.h:278
idx_t colidx
Definition quadgrid_cpp.h:404
const neighbor_iterator begin_neighbor_sweep() const
const neighbor_iterator end_neighbor_sweep() const
Definition quadgrid_cpp.h:331
cell_t(const grid_properties_t &_gp)
Definition quadgrid_cpp.h:281
idx_t local_cell_idx
Definition quadgrid_cpp.h:405
idx_t end_cell_row() const
Definition quadgrid_cpp.h:347
void reset()
Definition quadgrid_cpp.h:391
idx_t get_global_cell_idx() const
Definition quadgrid_cpp.h:339
bool is_ghost
Definition quadgrid_cpp.h:402
const grid_properties_t & grid_properties
Definition quadgrid_cpp.h:407
idx_t col_idx() const
Definition quadgrid_cpp.h:371
idx_t gt(idx_t i) const
Definition quadgrid_cpp.h:294
neighbor_iterator end_neighbor_sweep()
Definition quadgrid_cpp.h:327
idx_t gind2col(idx_t idx) const
Definition quadgrid_cpp.h:386
idx_t get_local_cell_idx() const
Definition quadgrid_cpp.h:335
friend class cell_iterator
Definition quadgrid_cpp.h:272
idx_t gind2row(idx_t idx) const
Definition quadgrid_cpp.h:381
friend class quadgrid_t
Definition quadgrid_cpp.h:273
static constexpr idx_t nodes_per_cell
Definition quadgrid_cpp.h:277
idx_t t(idx_t i) const
Definition quadgrid_cpp_imp.h:167
neighbor_iterator begin_neighbor_sweep()
idx_t num_cols() const
Definition quadgrid_cpp.h:363
double shp_new(double x, double y, idx_t inode) const
idx_t start_cell_col() const
Definition quadgrid_cpp.h:351
Definition quadgrid_cpp.h:246
neighbor_iterator(cell_t *_data=nullptr, int _face_idx=-1)
Definition quadgrid_cpp.h:253
cell_t * data
Face index in 0...3 (-1 if not defined).
Definition quadgrid_cpp.h:265
idx_t face_idx
Definition quadgrid_cpp.h:262
int get_face_idx()
Definition quadgrid_cpp.h:258
static double shp(double x, double y, idx_t inode, idx_t c, idx_t r, double hx, double hy)
Definition quadgrid_cpp.h:134
const cell_t & operator[](idx_t tmp) const
Definition quadgrid_cpp_imp.h:60
idx_t sub2gind(idx_t r, idx_t c) const
Definition quadgrid_cpp.h:514
idx_t gind2row(idx_t idx) const
Definition quadgrid_cpp.h:519
idx_t num_local_cells() const
Definition quadgrid_cpp_imp.h:136
cell_t current_cell
Definition quadgrid_cpp.h:537
static double shg(double x, double y, idx_t idir, idx_t inode, idx_t c, idx_t r, double hx, double hy)
Definition quadgrid_cpp.h:157
static idx_t gt(idx_t inode, idx_t cidx, idx_t ridx, idx_t numrows)
Definition quadgrid_cpp.h:73
idx_t num_owned_nodes()
Definition quadgrid_cpp.h:482
static idx_t gind2col(idx_t idx, idx_t numrows)
Definition quadgrid_cpp.h:63
idx_t num_cols() const
Definition quadgrid_cpp.h:502
static double p(idx_t idir, idx_t inode, idx_t colidx, idx_t rowidx, double hx, double hy)
Definition quadgrid_cpp.h:117
double hy() const
Definition quadgrid_cpp.h:510
static idx_t sub2gind(idx_t r, idx_t c, idx_t nr)
Definition quadgrid_cpp.h:198
void vtk_export(const char *filename, const std::map< std::string, distributed_vector > &f) const
Definition quadgrid_cpp_imp.h:345
void set_sizes(idx_t numrows, idx_t numcols, double hx, double hy)
Definition quadgrid_cpp_imp.h:22
double hx() const
Definition quadgrid_cpp.h:506
quadgrid_t & operator=(const quadgrid_t &)=delete
Delete assignment operator.
quadgrid_t(const quadgrid_t &)=delete
Delete copy constructor.
idx_t num_local_nodes() const
Definition quadgrid_cpp_imp.h:160
idx_t num_global_nodes() const
Definition quadgrid_cpp_imp.h:154
const cell_iterator begin_cell_sweep() const
Definition quadgrid_cpp_imp.h:13
MPI_Comm comm
Definition quadgrid_cpp.h:531
idx_t num_rows() const
Definition quadgrid_cpp.h:498
int idx_t
Definition quadgrid_cpp.h:28
int size
Definition quadgrid_cpp.h:533
cell_t current_neighbor
Definition quadgrid_cpp.h:538
cell_iterator begin_cell_sweep()
Definition quadgrid_cpp_imp.h:4
void octave_ascii_export(const char *filename, const std::map< std::string, distributed_vector > &f) const
Definition quadgrid_cpp_imp.h:396
void from_json(const nlohmann::json &j, grid_properties_t &q)
Definition quadgrid_cpp.h:45
quadgrid_t(const nlohmann::json &j, MPI_Comm _comm=MPI_COMM_WORLD)
Ctor that reads grid properties from a json object.
Definition quadgrid_cpp.h:440
const cell_iterator end_cell_sweep() const
Definition quadgrid_cpp.h:478
static idx_t gind2row(idx_t idx, idx_t numrows)
Definition quadgrid_cpp.h:68
grid_properties_t grid_properties
Definition quadgrid_cpp.h:540
quadgrid_t(MPI_Comm _comm=MPI_COMM_WORLD)
Default constructor, set all pointers to nullptr.
Definition quadgrid_cpp.h:413
cell_iterator end_cell_sweep()
Definition quadgrid_cpp.h:474
int rank
Definition quadgrid_cpp.h:532
~quadgrid_t()=default
Destructor.
idx_t gind2col(idx_t idx) const
Definition quadgrid_cpp.h:524
idx_t num_global_cells() const
Definition quadgrid_cpp_imp.h:145
#define MPI_COMM_WORLD
Definition quadgrid_cpp.h:13
#define MPI_Comm_size(x, y)
Definition quadgrid_cpp.h:15
#define MPI_Initialized(x)
Definition quadgrid_cpp.h:14
#define MPI_Comm
Definition quadgrid_cpp.h:12
#define MPI_Comm_rank(x, y)
Definition quadgrid_cpp.h:16
Definition quadgrid_cpp.h:32
idx_t start_cell_row
Definition quadgrid_cpp.h:36
double hy
Definition quadgrid_cpp.h:35
idx_t end_cell_row
Definition quadgrid_cpp.h:37
idx_t end_cell_col
Definition quadgrid_cpp.h:39
double hx
Definition quadgrid_cpp.h:35
idx_t start_cell_col
Definition quadgrid_cpp.h:38
idx_t numcols
Definition quadgrid_cpp.h:34
idx_t numrows
Definition quadgrid_cpp.h:33
idx_t num_owned_nodes
Definition quadgrid_cpp.h:41
idx_t start_owned_nodes
Definition quadgrid_cpp.h:40