25template<
class real_type>
27template<
class real_type>
43template<
class real_type>
56 real_type
x0()
const {
return g.x0();}
62 real_type
x1()
const {
return g.x1(); }
68 real_type
y0()
const {
return g.y0();}
74 real_type
y1()
const {
return g.y1();}
80 real_type
lx()
const {
return g.lx();}
86 real_type
ly()
const {
return g.ly();}
92 real_type
hx()
const {
return g.hx();}
98 real_type
hy()
const {
return g.hy();}
104 unsigned n()
const {
return g.n();}
106 unsigned nx()
const {
return g.nx();}
108 unsigned ny()
const {
return g.ny();}
114 unsigned Nx()
const {
return g.Nx();}
120 unsigned Ny()
const {
return g.Ny();}
147 unsigned size()
const {
return g.size();}
158 void display( std::ostream& os = std::cout)
const
160 os <<
"GLOBAL GRID \n";
162 os <<
"LOCAL GRID \n";
174 int pidOf( real_type x, real_type y)
const;
183 if( fx != 1 || fy != 1)
184 do_set(
nx(), round(fx*(real_type)
Nx()),
ny(), round(fy*(real_type)
Ny()));
187 void set(
unsigned new_n,
unsigned new_Nx,
unsigned new_Ny) {
188 set( new_n, new_Nx, new_n, new_Ny);
191 void set(
unsigned new_nx,
unsigned new_Nx,
unsigned new_ny,
unsigned new_Ny) {
192 check_division( new_Nx, new_Ny, g.bcx(), g.bcy());
193 if( new_nx ==
nx() && new_Nx ==
Nx() && new_ny ==
ny() && new_Ny ==
Ny())
195 do_set( new_nx,new_Nx,new_ny,new_Ny);
207 if( localIdx < 0 || localIdx >= (
int)
size())
return -1;
209 if( MPI_Cart_coords( comm, PID, 2, coords) != MPI_SUCCESS)
211 int lIdx0 = localIdx %(l.nx()*l.Nx());
212 int lIdx1 = localIdx /(l.nx()*l.Nx());
213 int gIdx0 = coords[0]*l.nx()*l.Nx()+lIdx0;
214 int gIdx1 = coords[1]*l.ny()*l.Ny()+lIdx1;
215 globalIdx = gIdx1*g.nx()*g.Nx() + gIdx0;
228 if( globalIdx < 0 || globalIdx >= (
int)g.size())
return -1;
230 int gIdx0 = globalIdx%(g.nx()*g.Nx());
231 int gIdx1 = globalIdx/(g.nx()*g.Nx());
232 coords[0] = gIdx0/(l.nx()*l.Nx());
233 coords[1] = gIdx1/(l.ny()*l.Ny());
234 int lIdx0 = gIdx0%(l.nx()*l.Nx());
235 int lIdx1 = gIdx1%(l.ny()*l.Ny());
236 localIdx = lIdx1*l.nx()*l.Nx() + lIdx0;
237 if( MPI_Cart_rank( comm, coords, &PID) == MPI_SUCCESS )
241 std::cout<<
"Failed "<<PID<<
"\n";
270 check_division( gx.
N(), gy.
N(), gx.
bcx(), gy.
bcx());
278 virtual void do_set(
unsigned new_nx,
unsigned new_Nx,
unsigned new_ny,
unsigned new_Ny)=0;
282 int rank, dims[2], periods[2], coords[2];
283 MPI_Cart_get( comm, 2, dims, periods, coords);
284 MPI_Comm_rank( comm, &rank);
288 std::cerr <<
"Nx "<<
Nx<<
" npx "<<dims[0]<<std::endl;
289 assert(
Nx%dims[0] == 0);
291 std::cerr <<
"Ny "<<
Ny<<
" npy "<<dims[1]<<std::endl;
292 assert(
Ny%dims[1] == 0);
293 if(
bcx ==
dg::PER) assert( periods[0] ==
true);
294 else assert( periods[0] ==
false);
295 if(
bcy ==
dg::PER) assert( periods[1] ==
true);
296 else assert( periods[1] ==
false);
300 int dims[2], periods[2], coords[2];
301 MPI_Cart_get( comm, 2, dims, periods, coords);
302 real_type
x0 = g.x0() + g.lx()/(real_type)dims[0]*(real_type)coords[0];
303 real_type
x1 = g.x0() + g.lx()/(real_type)dims[0]*(real_type)(coords[0]+1);
304 if( coords[0] == dims[0]-1)
306 real_type
y0 = g.y0() + g.ly()/(real_type)dims[1]*(real_type)coords[1];
307 real_type
y1 = g.y0() + g.ly()/(real_type)dims[1]*(real_type)(coords[1]+1);
308 if( coords[1] == dims[1]-1)
310 unsigned Nx = g.Nx()/dims[0];
311 unsigned Ny = g.Ny()/dims[1];
313 {
x0,
x1, g.nx(),
Nx, g.bcx()},
314 {
y0,
y1, g.ny(),
Ny, g.bcy()});
316 RealGrid2d<real_type> g, l;
327template<
class real_type>
340 real_type
x0()
const {
return g.x0();}
346 real_type
x1()
const {
return g.x1();}
352 real_type
y0()
const {
return g.y0();}
358 real_type
y1()
const {
return g.y1();}
364 real_type
z0()
const {
return g.z0();}
370 real_type
z1()
const {
return g.z1();}
376 real_type
lx()
const {
return g.lx();}
382 real_type
ly()
const {
return g.ly();}
388 real_type
lz()
const {
return g.lz();}
394 real_type
hx()
const {
return g.hx();}
400 real_type
hy()
const {
return g.hy();}
406 real_type
hz()
const {
return g.hz();}
412 unsigned n()
const {
return g.n();}
414 unsigned nx()
const {
return g.nx();}
416 unsigned ny()
const {
return g.ny();}
418 unsigned nz()
const {
return g.nz();}
424 unsigned Nx()
const {
return g.Nx();}
430 unsigned Ny()
const {
return g.Ny();}
436 unsigned Nz()
const {
return g.Nz();}
478 unsigned size()
const {
return g.size();}
489 void display( std::ostream& os = std::cout)
const
491 os <<
"GLOBAL GRID \n";
493 os <<
"LOCAL GRID \n";
505 int pidOf( real_type x, real_type y, real_type z)
const;
508 if( fx != 1 || fy != 1)
510 round(fy*(real_type)
Ny()),
nz(),
Nz());
513 void set(
unsigned new_n,
unsigned new_Nx,
unsigned new_Ny,
unsigned new_Nz) {
514 set(new_n,new_Nx,new_n,new_Ny,1,new_Nz);
517 void set(
unsigned new_nx,
unsigned new_Nx,
unsigned new_ny,
unsigned new_Ny,
unsigned new_nz,
unsigned new_Nz) {
518 check_division( new_Nx,new_Ny,new_Nz,g.bcx(),g.bcy(),g.bcz());
519 if( new_nx ==
nx() && new_Nx ==
Nx() && new_ny ==
ny() && new_Ny ==
Ny() && new_nz ==
nz() && new_Nz ==
Nz())
521 do_set(new_nx,new_Nx,new_ny,new_Ny,new_nz,new_Nz);
526 if( localIdx < 0 || localIdx >= (
int)
size())
return false;
528 if( MPI_Cart_coords( comm, PID, 3, coords) != MPI_SUCCESS)
530 int lIdx0 = localIdx %(l.nx()*l.Nx());
531 int lIdx1 = (localIdx /(l.nx()*l.Nx())) % (l.ny()*l.Ny());
532 int lIdx2 = localIdx / (l.nx()*l.ny()*l.Nx()*l.Ny());
533 int gIdx0 = coords[0]*l.nx()*l.Nx()+lIdx0;
534 int gIdx1 = coords[1]*l.ny()*l.Ny()+lIdx1;
535 int gIdx2 = coords[2]*l.nz()*l.Nz()+lIdx2;
536 globalIdx = (gIdx2*g.ny()*g.Ny() + gIdx1)*g.nx()*g.Nx() + gIdx0;
542 if( globalIdx < 0 || globalIdx >= (
int)g.size())
return false;
544 int gIdx0 = globalIdx%(g.nx()*g.Nx());
545 int gIdx1 = (globalIdx/(g.nx()*g.Nx())) % (g.ny()*g.Ny());
546 int gIdx2 = globalIdx/(g.nx()*g.ny()*g.Nx()*g.Ny());
547 coords[0] = gIdx0/(l.nx()*l.Nx());
548 coords[1] = gIdx1/(l.ny()*l.Ny());
549 coords[2] = gIdx2/(l.nz()*l.Nz());
550 int lIdx0 = gIdx0%(l.nx()*l.Nx());
551 int lIdx1 = gIdx1%(l.ny()*l.Ny());
552 int lIdx2 = gIdx2%(l.nz()*l.Nz());
553 localIdx = (lIdx2*l.ny()*l.Ny() + lIdx1)*l.nx()*l.Nx() + lIdx0;
554 if( MPI_Cart_rank( comm, coords, &PID) == MPI_SUCCESS )
570 check_division( gx.
N(), gy.
N(), gz.
N(), gx.
bcx(), gy.
bcx(), gz.
bcx());
572 int remain_dims[] = {
true,
true,
false};
573 MPI_Cart_sub( comm, remain_dims, &planeComm);
581 virtual void do_set(
unsigned new_nx,
unsigned new_Nx,
unsigned new_ny,
unsigned new_Ny,
unsigned new_nz,
unsigned new_Nz)=0;
585 int rank, dims[3], periods[3], coords[3];
586 MPI_Cart_get( comm, 3, dims, periods, coords);
587 MPI_Comm_rank( comm, &rank);
591 std::cerr <<
"Nx "<<
Nx<<
" npx "<<dims[0]<<std::endl;
592 assert(
Nx%dims[0] == 0);
593 if( !(
Ny%dims[1]==0))
594 std::cerr <<
"Ny "<<
Ny<<
" npy "<<dims[1]<<std::endl;
595 assert(
Ny%dims[1] == 0);
596 if( !(
Nz%dims[2]==0))
597 std::cerr <<
"Nz "<<
Nz<<
" npz "<<dims[2]<<std::endl;
598 assert(
Nz%dims[2] == 0);
599 if(
bcx ==
dg::PER) assert( periods[0] ==
true);
600 else assert( periods[0] ==
false);
601 if(
bcy ==
dg::PER) assert( periods[1] ==
true);
602 else assert( periods[1] ==
false);
603 if(
bcz ==
dg::PER) assert( periods[2] ==
true);
604 else assert( periods[2] ==
false);
608 int dims[3], periods[3], coords[3];
609 MPI_Cart_get( comm, 3, dims, periods, coords);
610 real_type
x0 = g.x0() + g.lx()/(real_type)dims[0]*(real_type)coords[0];
611 real_type
x1 = g.x0() + g.lx()/(real_type)dims[0]*(real_type)(coords[0]+1);
612 if( coords[0] == dims[0]-1)
615 real_type
y0 = g.y0() + g.ly()/(real_type)dims[1]*(real_type)coords[1];
616 real_type
y1 = g.y0() + g.ly()/(real_type)dims[1]*(real_type)(coords[1]+1);
617 if( coords[1] == dims[1]-1)
620 real_type
z0 = g.z0() + g.lz()/(real_type)dims[2]*(real_type)coords[2];
621 real_type
z1 = g.z0() + g.lz()/(real_type)dims[2]*(real_type)(coords[2]+1);
622 if( coords[2] == dims[2]-1)
624 unsigned Nx = g.Nx()/dims[0];
625 unsigned Ny = g.Ny()/dims[1];
626 unsigned Nz = g.Nz()/dims[2];
629 {
x0,
x1, g.nx(),
Nx, g.bcx()},
630 {
y0,
y1, g.ny(),
Ny, g.bcy()},
631 {
z0,
z1, g.nz(),
Nz, g.bcz()});
633 RealGrid3d<real_type> g, l;
634 MPI_Comm comm, planeComm;
637template<
class real_type>
640 int dims[2], periods[2], coords[2];
641 MPI_Cart_get( comm, 2, dims, periods, coords);
642 coords[0] = (unsigned)floor( (x-g.x0())/g.lx()*(real_type)dims[0] );
643 coords[1] = (unsigned)floor( (y-g.y0())/g.ly()*(real_type)dims[1] );
645 coords[0]=(coords[0]==dims[0]) ? coords[0]-1 :coords[0];
646 coords[1]=(coords[1]==dims[1]) ? coords[1]-1 :coords[1];
648 if( MPI_Cart_rank( comm, coords, &rank) == MPI_SUCCESS )
653template<
class real_type>
656 int dims[3], periods[3], coords[3];
657 MPI_Cart_get( comm, 3, dims, periods, coords);
658 coords[0] = (unsigned)floor( (x-g.x0())/g.lx()*(real_type)dims[0] );
659 coords[1] = (unsigned)floor( (y-g.y0())/g.ly()*(real_type)dims[1] );
660 coords[2] = (unsigned)floor( (z-g.z0())/g.lz()*(real_type)dims[2] );
662 coords[0]=(coords[0]==dims[0]) ? coords[0]-1 :coords[0];
663 coords[1]=(coords[1]==dims[1]) ? coords[1]-1 :coords[1];
664 coords[2]=(coords[2]==dims[2]) ? coords[2]-1 :coords[2];
666 if( MPI_Cart_rank( comm, coords, &rank) == MPI_SUCCESS )
671template<
class real_type>
676template<
class real_type>
678 g.set(nx,Nx,ny,Ny,nz,Nz);
689template<
class real_type>
707 aRealMPITopology2d<real_type>( {
x0,
x1,
n,
Nx,
bcx}, {
y0,
y1,
n,
Ny,
bcy},comm)
715 virtual void do_set(
unsigned nx,
unsigned Nx,
unsigned ny,
unsigned Ny)
override final{
725template<
class real_type>
730 RealMPIGrid3d( real_type
x0, real_type
x1, real_type
y0, real_type
y1, real_type
z0, real_type
z1,
unsigned n,
unsigned Nx,
unsigned Ny,
unsigned Nz, MPI_Comm comm):
731 aRealMPITopology3d<real_type>( {
x0,
x1,
n,
Nx,
dg::PER}, {
y0,
y1,
n,
Ny,
dg::PER}, {
z0,
z1, 1,
Nz,
dg::PER}, comm )
737 RealMPIGrid3d( real_type
x0, real_type
x1, real_type
y0, real_type
y1, real_type
z0, real_type
z1,
unsigned n,
unsigned Nx,
unsigned Ny,
unsigned Nz,
bc bcx,
bc bcy,
bc bcz, MPI_Comm comm):
738 aRealMPITopology3d<real_type>( {
x0,
x1,
n,
Nx,
bcx}, {
y0,
y1,
n,
Ny,
bcy}, {
z0,
z1, 1,
Nz,
bcz}, comm )
747 virtual void do_set(
unsigned nx,
unsigned Nx,
unsigned ny,
unsigned Ny,
unsigned nz,
unsigned Nz)
override final{
Struct holding coefficients for Discrete Legendre Transformation (DLT) related operations.
Definition: dlt.h:23
bc
Switch between boundary conditions.
Definition: enums.h:15
@ PER
periodic boundaries
Definition: enums.h:16
dg::aRealMPITopology2d< double > aMPITopology2d
Definition: mpi_grid.h:756
dg::RealMPIGrid3d< double > MPIGrid3d
Definition: mpi_grid.h:755
dg::RealMPIGrid2d< double > MPIGrid2d
Definition: mpi_grid.h:754
dg::aRealMPITopology3d< double > aMPITopology3d
Definition: mpi_grid.h:757
This is the namespace for all functions and classes defined and used by the discontinuous Galerkin li...
mpi Vector class
Definition: mpi_vector.h:32
1D grid
Definition: grid.h:80
bc bcx() const
boundary conditions
Definition: grid.h:147
unsigned N() const
number of cells
Definition: grid.h:135
The simplest implementation of aRealTopology2d.
Definition: grid.h:818
The simplest implementation of aRealTopology3d.
Definition: grid.h:844
The simplest implementation of aRealMPITopology2d.
Definition: mpi_grid.h:691
RealMPIGrid2d(real_type x0, real_type x1, real_type y0, real_type y1, unsigned n, unsigned Nx, unsigned Ny, MPI_Comm comm)
Equal polynomial coefficients.
Definition: mpi_grid.h:696
RealMPIGrid2d(const aRealMPITopology2d< real_type > &src)
allow explicit type conversion from any other topology
Definition: mpi_grid.h:713
RealMPIGrid2d(RealGrid1d< real_type > gx, RealGrid1d< real_type > gy, MPI_Comm comm)
Construct a 2d grid as the product of two 1d grids.
Definition: mpi_grid.h:711
RealMPIGrid2d(real_type x0, real_type x1, real_type y0, real_type y1, unsigned n, unsigned Nx, unsigned Ny, bc bcx, bc bcy, MPI_Comm comm)
Equal polynomial coefficients.
Definition: mpi_grid.h:706
The simplest implementation of aRealMPITopology3d.
Definition: mpi_grid.h:727
RealMPIGrid3d(real_type x0, real_type x1, real_type y0, real_type y1, real_type z0, real_type z1, unsigned n, unsigned Nx, unsigned Ny, unsigned Nz, bc bcx, bc bcy, bc bcz, MPI_Comm comm)
Equal polynomial coefficients.
Definition: mpi_grid.h:737
RealMPIGrid3d(real_type x0, real_type x1, real_type y0, real_type y1, real_type z0, real_type z1, unsigned n, unsigned Nx, unsigned Ny, unsigned Nz, MPI_Comm comm)
Equal polynomial coefficients.
Definition: mpi_grid.h:730
RealMPIGrid3d(RealGrid1d< real_type > gx, RealGrid1d< real_type > gy, RealGrid1d< real_type > gz, MPI_Comm comm)
Construct a 3d topology as the product of three 1d grids.
Definition: mpi_grid.h:742
RealMPIGrid3d(const aRealMPITopology3d< real_type > &src)
Definition: mpi_grid.h:745
2D MPI abstract grid class
Definition: mpi_grid.h:45
real_type lx() const
Return global lx.
Definition: mpi_grid.h:80
void set(unsigned new_n, unsigned new_Nx, unsigned new_Ny)
Set the number of polynomials and cells.
Definition: mpi_grid.h:187
real_type x1() const
Return global x1.
Definition: mpi_grid.h:62
real_type ly() const
Return global ly.
Definition: mpi_grid.h:86
unsigned n() const
Return n.
Definition: mpi_grid.h:104
bool global2localIdx(int globalIdx, int &localIdx, int &PID) const
Map a global vector index to a local vector Index and the corresponding PID.
Definition: mpi_grid.h:226
real_type hy() const
Return global hy.
Definition: mpi_grid.h:98
const DLT< real_type > & dltx() const
discrete legendre transformation in x
Definition: mpi_grid.h:140
const RealGrid2d< real_type > & local() const
Return a non-MPI grid local for the calling process.
Definition: mpi_grid.h:252
bc bcy() const
global y boundary
Definition: mpi_grid.h:132
unsigned nx() const
number of polynomial coefficients in x
Definition: mpi_grid.h:106
unsigned ny() const
number of polynomial coefficients in y
Definition: mpi_grid.h:108
void multiplyCellNumbers(real_type fx, real_type fy)
Multiply the number of cells with a given factor.
Definition: mpi_grid.h:182
real_type hx() const
Return global hx.
Definition: mpi_grid.h:92
unsigned size() const
The total global number of points.
Definition: mpi_grid.h:147
real_type y0() const
Return global y0.
Definition: mpi_grid.h:68
unsigned Nx() const
Return the global number of cells.
Definition: mpi_grid.h:114
unsigned Ny() const
Return the global number of cells.
Definition: mpi_grid.h:120
real_type y1() const
Return global y1.
Definition: mpi_grid.h:74
real_type value_type
Definition: mpi_grid.h:46
aRealMPITopology2d & operator=(const aRealMPITopology2d &src)=default
virtual void do_set(unsigned new_nx, unsigned new_Nx, unsigned new_ny, unsigned new_Ny)=0
This function has an implementation.
const DLT< real_type > & dlty() const
discrete legendre transformation in y
Definition: mpi_grid.h:142
int pidOf(real_type x, real_type y) const
Returns the pid of the process that holds the local grid surrounding the given point.
MPI_Comm communicator() const
Return mpi cartesian communicator that is used in this grid.
Definition: mpi_grid.h:138
aRealMPITopology2d(RealGrid1d< real_type > gx, RealGrid1d< real_type > gy, MPI_Comm comm)
Construct a 2d grid as the product of two 1d grids.
Definition: mpi_grid.h:269
~aRealMPITopology2d()=default
disallow deletion through base class pointer
aRealMPITopology2d(const aRealMPITopology2d &src)=default
const RealGrid2d< real_type > & global() const
Return the global non-MPI grid.
Definition: mpi_grid.h:262
bool local2globalIdx(int localIdx, int PID, int &globalIdx) const
Map a local index plus the PID to a global vector index.
Definition: mpi_grid.h:205
void display(std::ostream &os=std::cout) const
Display global and local grid.
Definition: mpi_grid.h:158
void set(unsigned new_nx, unsigned new_Nx, unsigned new_ny, unsigned new_Ny)
Set the number of polynomials and cells.
Definition: mpi_grid.h:191
real_type x0() const
Return global x0.
Definition: mpi_grid.h:56
unsigned local_size() const
The total local number of points.
Definition: mpi_grid.h:152
bc bcx() const
global x boundary
Definition: mpi_grid.h:126
3D MPI Grid class
Definition: mpi_grid.h:329
real_type lz() const
Return global lz.
Definition: mpi_grid.h:388
bc bcz() const
global z boundary
Definition: mpi_grid.h:454
MPI_Comm get_perp_comm() const
MPI Cartesian communicator in the first two dimensions (x and y)
Definition: mpi_grid.h:464
real_type hz() const
Return global hz.
Definition: mpi_grid.h:406
real_type lx() const
Return global lx.
Definition: mpi_grid.h:376
unsigned local_size() const
The total local number of points.
Definition: mpi_grid.h:483
unsigned nz() const
number of polynomial coefficients in z
Definition: mpi_grid.h:418
unsigned Nz() const
Return the global number of cells.
Definition: mpi_grid.h:436
real_type x1() const
Return global x1.
Definition: mpi_grid.h:346
unsigned Ny() const
Return the global number of cells.
Definition: mpi_grid.h:430
aRealMPITopology3d(RealGrid1d< real_type > gx, RealGrid1d< real_type > gy, RealGrid1d< real_type > gz, MPI_Comm comm)
Construct a 3d topology as the product of three 1d grids.
Definition: mpi_grid.h:569
void display(std::ostream &os=std::cout) const
Display global and local grid paramters.
Definition: mpi_grid.h:489
void set(unsigned new_nx, unsigned new_Nx, unsigned new_ny, unsigned new_Ny, unsigned new_nz, unsigned new_Nz)
Set the number of polynomials and cells.
Definition: mpi_grid.h:517
MPI_Comm communicator() const
Return mpi cartesian communicator that is used in this grid.
Definition: mpi_grid.h:459
bool local2globalIdx(int localIdx, int PID, int &globalIdx) const
Map a local index plus the PID to a global vector index.
Definition: mpi_grid.h:524
const DLT< real_type > & dltz() const
Definition: mpi_grid.h:473
bool global2localIdx(int globalIdx, int &localIdx, int &PID) const
Map a global vector index to a local vector Index and the corresponding PID.
Definition: mpi_grid.h:540
real_type y1() const
Return global y1.
Definition: mpi_grid.h:358
int pidOf(real_type x, real_type y, real_type z) const
Returns the pid of the process that holds the local grid surrounding the given point.
const DLT< real_type > & dlt() const
The Discrete Legendre Transformation.
Definition: mpi_grid.h:470
bc bcy() const
global y boundary
Definition: mpi_grid.h:448
const RealGrid3d< real_type > & global() const
Return the global non-MPI grid.
Definition: mpi_grid.h:562
real_type ly() const
Return global ly.
Definition: mpi_grid.h:382
real_type z1() const
Return global z1.
Definition: mpi_grid.h:370
void multiplyCellNumbers(real_type fx, real_type fy)
Multiply the number of cells with a given factor.
Definition: mpi_grid.h:507
const DLT< real_type > & dlty() const
Definition: mpi_grid.h:472
real_type hy() const
Return global hy.
Definition: mpi_grid.h:400
unsigned n() const
Return n.
Definition: mpi_grid.h:412
bc bcx() const
global x boundary
Definition: mpi_grid.h:442
virtual void do_set(unsigned new_nx, unsigned new_Nx, unsigned new_ny, unsigned new_Ny, unsigned new_nz, unsigned new_Nz)=0
aRealMPITopology3d(const aRealMPITopology3d &src)=default
unsigned ny() const
number of polynomial coefficients in y
Definition: mpi_grid.h:416
~aRealMPITopology3d()=default
disallow deletion through base class pointer
real_type z0() const
Return global z0.
Definition: mpi_grid.h:364
const RealGrid3d< real_type > & local() const
Return a non-MPI grid local for the calling process.
Definition: mpi_grid.h:560
real_type hx() const
Return global hx.
Definition: mpi_grid.h:394
unsigned Nx() const
Return the global number of cells.
Definition: mpi_grid.h:424
unsigned nx() const
number of polynomial coefficients in x
Definition: mpi_grid.h:414
real_type y0() const
Return global y0.
Definition: mpi_grid.h:352
real_type x0() const
Return global x0.
Definition: mpi_grid.h:340
real_type value_type
Definition: mpi_grid.h:330
aRealMPITopology3d & operator=(const aRealMPITopology3d &src)=default
unsigned size() const
The total global number of points.
Definition: mpi_grid.h:478
void set(unsigned new_n, unsigned new_Nx, unsigned new_Ny, unsigned new_Nz)
Set the number of polynomials and cells.
Definition: mpi_grid.h:513
const DLT< real_type > & dltx() const
Definition: mpi_grid.h:471