Ignore:
Timestamp:
Apr 12, 2013, 8:41:41 PM (13 years ago)
Author:
Julian Iseringhausen <isering@…>
Children:
e5d779b
Parents:
b3075a
Message:

Some work...

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/grid/grid_index_translations.cpp

    rb3075a r6e10f33  
    3232
    3333#include "base/helper.hpp"
     34#include "comm/comm.hpp"
    3435#include "grid/grid_double_iterator.hpp"
    3536#include "grid/grid_index_translations.hpp"
     
    5051Index GridIndexTranslations::LocalToGlobal(const Grid& grid, const Index& index_local)
    5152{
    52   return index_local - grid.Local().Begin() + grid.Global().LocalBegin();
     53  return index_local - grid.Local().HaloSize1() + grid.Global().LocalBegin();
    5354}
    5455
     
    6061Index GridIndexTranslations::GlobalToLocal(const Grid& grid, const Index& index_global)
    6162{
    62   return index_global - grid.Global().LocalBegin() + grid.Local().Begin();
     63  return index_global - grid.Global().LocalBegin() + grid.Local().HaloSize1();
    6364}
    6465
     
    9899                                             const Grid& grid_2, GridIteratorSet& bounds_2)
    99100{
     101  const Boundary& boundary = MG::GetComm()->BoundaryConditions();
     102
    100103  if (grid_1.Level() == grid_2.Level()) {
    101     const Index begin_global = grid_1.Global()
    102                                      .LocalBegin()
    103                                      .Clamp(grid_2.Global().LocalBegin(), grid_2.Global().LocalEnd());
     104    Index begin_global = grid_1.Global()
     105                               .LocalBegin()
     106                               .Clamp(grid_2.Global().LocalBegin(), grid_2.Global().LocalEnd());
    104107
    105     const Index end_global = grid_1.Global()
    106                                    .LocalEnd()
    107                                    .Clamp(grid_2.Global().LocalBegin(), grid_2.Global().LocalEnd());
     108    Index end_global = grid_1.Global()
     109                             .LocalEnd()
     110                             .Clamp(grid_2.Global().LocalBegin(), grid_2.Global().LocalEnd());
     111
     112    for (int j=0; j<3; ++j) {
     113      if (boundary[j] == Dirichlet || boundary[j] == Open) {
     114        if (begin_global[j] == grid_1.Global().GlobalBegin()[j] || begin_global[j] == grid_2.Global().GlobalBegin()[j])
     115          begin_global[j] += 1;
     116        if (end_global[j] == grid_1.Global().GlobalEnd()[j] || end_global[j] == grid_2.Global().GlobalEnd()[j])
     117          end_global[j] -= 1;
     118      }
     119    }
    108120
    109121    bounds_1 = GridIteratorSet(GlobalToLocal(grid_1, begin_global), GlobalToLocal(grid_2, end_global));
     
    128140    }
    129141
     142    for (int j=0; j<3; ++j) {
     143      if (boundary[j] == Dirichlet || boundary[j] == Open) {
     144        if (grid_1.Global().LocalBegin()[j] == grid_1.Global().GlobalBegin()[j] || grid_2.Global().LocalBegin()[j] == grid_2.Global().GlobalBegin()[j])
     145          begin_finest[j] += global_mult;
     146        if (grid_1.Global().LocalEnd()[j] == grid_1.Global().GlobalEnd()[j] || grid_2.Global().LocalEnd()[j] == grid_2.Global().GlobalEnd()[j])
     147          end_finest[j] -= global_mult;
     148      }
     149    }
     150
    130151    bounds_1 = GridIteratorSet(GlobalFinestToLocal(grid_1, begin_finest), GlobalFinestToLocal(grid_1, end_finest)+1);
    131152    bounds_2 = GridIteratorSet(GlobalFinestToLocal(grid_2, begin_finest), GlobalFinestToLocal(grid_2, end_finest)+1);
     
    133154  }
    134155}
     156
     157void GridIndexTranslations::GetInnerBoundary(const Grid& grid_c, Index& b1_c, Index& b2_c,
     158                                             const Grid& grid_f,   Index& b1_f, Index& b2_f)
     159{
     160  if (grid_f.Global().BoundaryType() == LocallyRefined) {
     161
     162    const int global_mult = Helper::intpow(2, MG::GetSol()->MaxLevel() - grid_c.Level());
     163
     164    Index begin_finest = GlobalToGlobalFinest(grid_c, grid_c.Global().LocalBegin())
     165                           .Clamp(GlobalToGlobalFinest(grid_f, grid_f.Global().LocalBegin()),
     166                                  GlobalToGlobalFinest(grid_f, grid_f.Global().LocalEnd()-1));
     167
     168    Index end_finest = GlobalToGlobalFinest(grid_c, grid_c.Global().LocalEnd()-1)
     169                         .Clamp(GlobalToGlobalFinest(grid_f, grid_f.Global().LocalBegin()),
     170                                GlobalToGlobalFinest(grid_f, grid_f.Global().LocalEnd()-1));
     171
     172  } else {
     173    b1_c = -1;
     174    b2_c = -1;
     175    b1_f = -1;
     176    b2_f = -1;
     177  }
     178}
Note: See TracChangeset for help on using the changeset viewer.