| 2384 | } |
| 2385 | |
| 2386 | void |
| 2387 | Castro::post_init (Real /*stop_time*/) |
| 2388 | { |
| 2389 | BL_PROFILE("Castro::post_init()"); |
| 2390 | |
| 2391 | if (level > 0) { |
| 2392 | return; |
| 2393 | } |
| 2394 | |
| 2395 | // |
| 2396 | // Average data down from finer levels |
| 2397 | // so that conserved data is consistent between levels. |
| 2398 | // |
| 2399 | int finest_level = parent->finestLevel(); |
| 2400 | for (int k = finest_level-1; k>= 0; k--) { |
| 2401 | getLevel(k).avgDown(); |
| 2402 | } |
| 2403 | |
| 2404 | #ifdef GRAVITY |
| 2405 | |
| 2406 | if (do_grav) { |
| 2407 | |
| 2408 | Real cur_time = state[State_Type].curTime(); |
| 2409 | |
| 2410 | if (gravity->get_gravity_type() == "PoissonGrav") { |
| 2411 | |
| 2412 | // Update the maximum density, used in setting the solver tolerance. |
| 2413 | |
| 2414 | gravity->update_max_rhs(); |
| 2415 | |
| 2416 | // Calculate offset before first multilevel solve. |
| 2417 | gravity->set_mass_offset(cur_time); |
| 2418 | |
| 2419 | gravity->multilevel_solve_for_new_phi(level,finest_level); |
| 2420 | if (gravity->test_results_of_solves() == 1) { |
| 2421 | gravity->test_composite_phi(level); |
| 2422 | } |
| 2423 | } |
| 2424 | |
| 2425 | // Make this call just to fill the initial state data. |
| 2426 | for (int k = 0; k <= parent->finestLevel(); k++) |
| 2427 | { |
| 2428 | BoxArray ba = getLevel(k).boxArray(); |
| 2429 | MultiFab& grav_new = getLevel(k).get_new_data(Gravity_Type); |
| 2430 | gravity->get_new_grav_vector(k,grav_new,cur_time); |
| 2431 | } |
| 2432 | } |
| 2433 | #endif |
| 2434 | |
| 2435 | |
| 2436 | #ifdef RADIATION |
| 2437 | if (do_radiation) { |
| 2438 | // The option of whether to do a multilevel initialization is |
| 2439 | // controlled within the radiation class. |
| 2440 | |
| 2441 | radiation->post_init(level); |
| 2442 | |
| 2443 | for (int k = finest_level-1; k>= 0; k--) { |
no test coverage detected