| 1263 | } |
| 1264 | |
| 1265 | void |
| 1266 | Gravity::test_composite_phi (int crse_level) |
| 1267 | { |
| 1268 | BL_PROFILE("Gravity::test_composite_phi()"); |
| 1269 | |
| 1270 | // the lhas only really been tested with crse_level = 0 |
| 1271 | AMREX_ALWAYS_ASSERT(crse_level == 0); |
| 1272 | |
| 1273 | if (gravity::verbose > 1 && ParallelDescriptor::IOProcessor()) { |
| 1274 | std::cout << " " << '\n'; |
| 1275 | std::cout << "... test_composite_phi at base level " << crse_level << '\n'; |
| 1276 | } |
| 1277 | |
| 1278 | int finest_level_local = parent->finestLevel(); |
| 1279 | int nlevels = finest_level_local - crse_level + 1; |
| 1280 | |
| 1281 | Vector<std::unique_ptr<MultiFab> > phi(nlevels); |
| 1282 | Vector<std::unique_ptr<MultiFab> > g_rhs(nlevels); |
| 1283 | Vector<std::unique_ptr<MultiFab> > res(nlevels); |
| 1284 | for (int ilev = 0; ilev < nlevels; ++ilev) |
| 1285 | { |
| 1286 | int amr_lev = crse_level + ilev; |
| 1287 | |
| 1288 | phi[ilev] = std::make_unique<MultiFab>(grids[amr_lev],dmap[amr_lev],1,1); |
| 1289 | MultiFab::Copy(*phi[ilev], |
| 1290 | LevelData[amr_lev]->get_new_data(PhiGrav_Type), |
| 1291 | 0,0,1,1); |
| 1292 | |
| 1293 | g_rhs[ilev] = std::make_unique<MultiFab>(grids[amr_lev],dmap[amr_lev],1,1); |
| 1294 | MultiFab::Copy(*g_rhs[ilev], |
| 1295 | LevelData[amr_lev]->get_new_data(State_Type), |
| 1296 | URHO, 0,1,0); |
| 1297 | |
| 1298 | res[ilev] = std::make_unique<MultiFab>(grids[amr_lev],dmap[amr_lev],1,0); |
| 1299 | res[ilev]->setVal(0.); |
| 1300 | } |
| 1301 | |
| 1302 | Real time = LevelData[crse_level]->get_state_data(PhiGrav_Type).curTime(); |
| 1303 | |
| 1304 | Vector< Vector<MultiFab*> > grad_phi_null; |
| 1305 | solve_phi_with_mlmg(crse_level, finest_level_local, |
| 1306 | amrex::GetVecOfPtrs(phi), |
| 1307 | amrex::GetVecOfPtrs(g_rhs), |
| 1308 | grad_phi_null, |
| 1309 | amrex::GetVecOfPtrs(res), |
| 1310 | time); |
| 1311 | |
| 1312 | // Average residual from fine to coarse level before printing the norm |
| 1313 | for (int amr_lev = finest_level_local-1; amr_lev >= crse_level; --amr_lev) |
| 1314 | { |
| 1315 | const IntVect& ratio = parent->refRatio(amr_lev); |
| 1316 | int ilev = amr_lev - crse_level; |
| 1317 | amrex::average_down(*res[ilev+1], *res[ilev], |
| 1318 | 0, 1, ratio); |
| 1319 | } |
| 1320 | |
| 1321 | for (int amr_lev = crse_level; amr_lev <= finest_level_local; ++amr_lev) { |
| 1322 | int ilev = amr_lev - crse_level; |
no outgoing calls
no test coverage detected