B:BD[
8.2401] → [
8.2401:2444]
B:BD[
8.2444] → [
9.1862:1973]
      for (int tl = 0; tl < sync_tl; ++tl)
        groupdata.mfab.at(tl)->FillBoundary(
            ghext->amrmesh->Geom(leveldata.level).periodicity());
      if (leveldata.level == 0) {
        // Coarsest level: Copy from adjacent boxes on same level
        for (int tl = 0; tl < sync_tl; ++tl)
          groupdata.mfab.at(tl)->FillBoundary(
              ghext->amrmesh->Geom(leveldata.level).periodicity());
      } else {
        // Refined level: Prolongate from next coarser level, and then
        // copy from adjacent boxes on same level
        const int level = leveldata.level;
        auto &restrict coarsegroupdata =
            ghext->leveldata.at(level - 1).groupdata.at(gi);
        assert(coarsegroupdata.numvars == groupdata.numvars);
        PhysBCFunctNoOp cphysbc;
        PhysBCFunctNoOp fphysbc;
        const IntVect reffact{2, 2, 2};
        CellBilinear interp;
        // periodic boundaries
        const BCRec bcrec(BCType::int_dir, BCType::int_dir, BCType::int_dir,
                          BCType::int_dir, BCType::int_dir, BCType::int_dir);
        const Vector<BCRec> bcs(groupdata.numvars, bcrec);
        for (int tl = 0; tl < sync_tl; ++tl)
          InterpFromCoarseLevel(
              *groupdata.mfab.at(tl), 0.0, *coarsegroupdata.mfab.at(tl), 0, 0,
              groupdata.numvars, ghext->amrmesh->Geom(level - 1),
              ghext->amrmesh->Geom(level), cphysbc, 0, fphysbc, 0, reffact,
              &interp, bcs, 0);
      }