MCPcopy Create free account
hub / github.com/AMReX-Astro/Castro / test_composite_phi

Method test_composite_phi

Source/gravity/Gravity.cpp:1265–1328  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1263}
1264
1265void
1266Gravity::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;

Callers 3

post_restartMethod · 0.80
post_initMethod · 0.80
post_grown_restartMethod · 0.80

Calls

no outgoing calls

Tested by

no test coverage detected