| 25 | }; |
| 26 | |
| 27 | void testParticleMesh (TestParams& parms) |
| 28 | { |
| 29 | Vector<IntVect> rr(parms.nlevs-1); |
| 30 | for (int lev = 1; lev < parms.nlevs; lev++) { |
| 31 | rr[lev-1] = IntVect(AMREX_D_DECL(2,2,2)); |
| 32 | } |
| 33 | |
| 34 | RealBox real_box; |
| 35 | for (int n = 0; n < BL_SPACEDIM; n++) { |
| 36 | real_box.setLo(n, 0.0); |
| 37 | real_box.setHi(n, 1.0); |
| 38 | } |
| 39 | |
| 40 | IntVect domain_lo(AMREX_D_DECL(0, 0, 0)); |
| 41 | IntVect domain_hi(AMREX_D_DECL(parms.nx - 1, parms.ny - 1, parms.nz-1)); |
| 42 | const Box base_domain(domain_lo, domain_hi); |
| 43 | |
| 44 | // This sets the boundary conditions to be doubly or triply periodic |
| 45 | int is_per[] = {AMREX_D_DECL(1,1,1)}; |
| 46 | |
| 47 | Vector<Geometry> geom(parms.nlevs); |
| 48 | geom[0].define(base_domain, &real_box, CoordSys::cartesian, is_per); |
| 49 | for (int lev = 1; lev < parms.nlevs; lev++) { |
| 50 | geom[lev].define(amrex::refine(geom[lev-1].Domain(), rr[lev-1]), |
| 51 | &real_box, CoordSys::cartesian, is_per); |
| 52 | } |
| 53 | |
| 54 | Vector<BoxArray> ba(parms.nlevs); |
| 55 | Vector<DistributionMapping> dm(parms.nlevs); |
| 56 | |
| 57 | Box domain = base_domain; |
| 58 | IntVect size(AMREX_D_DECL(parms.nx, parms.ny, parms.nz)); |
| 59 | for (int lev = 0; lev < parms.nlevs; ++lev) |
| 60 | { |
| 61 | ba[lev].define(domain); |
| 62 | ba[lev].maxSize(parms.max_grid_size); |
| 63 | dm[lev].define(ba[lev]); |
| 64 | domain.grow(-size/4); // fine level cover the middle of the coarse domain |
| 65 | domain.refine(2); |
| 66 | } |
| 67 | |
| 68 | Vector<MultiFab> const_mf(parms.nlevs); |
| 69 | Vector<MultiFab> density1(parms.nlevs); |
| 70 | Vector<MultiFab> density2(parms.nlevs); |
| 71 | for (int lev = 0; lev < parms.nlevs; lev++) { |
| 72 | const_mf[lev].define(ba[lev], dm[lev], 1, 1); |
| 73 | const_mf[lev].setVal(-2.0e8); |
| 74 | density1[lev].define(ba[lev], dm[lev], 1, 1); |
| 75 | density1[lev].setVal(-2.0e8); |
| 76 | density2[lev].define(ba[lev], dm[lev], 1, 1); |
| 77 | density2[lev].setVal(0.0); |
| 78 | } |
| 79 | |
| 80 | MyParticleContainer myPC(geom, dm, ba, rr); |
| 81 | myPC.SetVerbose(false); |
| 82 | |
| 83 | int num_particles = parms.nppc * parms.nx * parms.ny * parms.nz; |
| 84 | amrex::Print() << "Total number of particles : " << num_particles << '\n' << '\n'; |
no test coverage detected