| 700 | } |
| 701 | |
| 702 | void HypreMultiABec::addLevel(int level, |
| 703 | const Geometry& _geom, |
| 704 | const BoxArray& _grids, |
| 705 | const DistributionMapping& _dmap, |
| 706 | IntVect _fine_ratio) |
| 707 | { |
| 708 | int part = level - crse_level; |
| 709 | |
| 710 | geom[level] = _geom; |
| 711 | grids[level] = _grids; |
| 712 | dmap[level] = _dmap; |
| 713 | fine_ratio[level] = _fine_ratio; |
| 714 | |
| 715 | #if (AMREX_SPACEDIM == 1) |
| 716 | |
| 717 | if (geom[level].isAnyPeriodic()) { |
| 718 | BL_ASSERT(geom[level].isPeriodic(0)); |
| 719 | BL_ASSERT(geom[level].Domain().smallEnd(0) == 0); |
| 720 | |
| 721 | int is_periodic[2]; |
| 722 | is_periodic[0] = geom[level].period(0); |
| 723 | is_periodic[1] = 0; |
| 724 | BL_ASSERT(ispow2(is_periodic[0])); |
| 725 | |
| 726 | HYPRE_SStructGridSetPeriodic(hgrid, part, is_periodic); |
| 727 | } |
| 728 | |
| 729 | #else |
| 730 | |
| 731 | if (geom[level].isAnyPeriodic()) { |
| 732 | int is_periodic[AMREX_SPACEDIM]; |
| 733 | for (int i = 0; i < AMREX_SPACEDIM; i++) { |
| 734 | is_periodic[i] = 0; |
| 735 | if (geom[level].isPeriodic(i)) { |
| 736 | is_periodic[i] = geom[level].period(i); |
| 737 | BL_ASSERT(ispow2(is_periodic[i])); |
| 738 | BL_ASSERT(geom[level].Domain().smallEnd(i) == 0); |
| 739 | } |
| 740 | } |
| 741 | HYPRE_SStructGridSetPeriodic(hgrid, part, is_periodic); |
| 742 | } |
| 743 | |
| 744 | #endif |
| 745 | |
| 746 | int myid = ParallelDescriptor::MyProc(); |
| 747 | |
| 748 | subgrids[level].resize(grids[level].size()); |
| 749 | |
| 750 | if (!use_subgrids || level == fine_level || grids[level+1].size() == 0) { |
| 751 | for (int i = 0; i < grids[level].size(); i++) { |
| 752 | if (dmap[level][i] == myid) { |
| 753 | HYPRE_SStructGridSetExtents(hgrid, part, |
| 754 | loV(grids[level][i]), |
| 755 | hiV(grids[level][i])); |
| 756 | } |
| 757 | } |
| 758 | } |
| 759 | else { |