Ignore:
Timestamp:
Mar 30, 2013, 2:44:52 PM (13 years ago)
Author:
Julian Iseringhausen <isering@…>
Children:
8180d8
Parents:
d13e27
git-author:
Julian Iseringhausen <isering@…> (06/11/12 14:02:16)
git-committer:
Julian Iseringhausen <isering@…> (03/30/13 14:44:52)
Message:

Open boundary conditions.

Conflicts:

lib/vmg/src/Makefile.am
lib/vmg/src/base/factory.cpp
lib/vmg/test/unit_test/library/dirichlet_fas_lr_mpi.cpp

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/grid/tempgrid.cpp

    rd13e27 rf57182  
    7171  global.LocalFinerEnd() = 0;
    7272  global.LocalFinerSize() = 0;
    73   global.FinestAbsBegin() = 0;
    74   global.FinestAbsEnd() = size;
    75   global.FinestAbsSize() = size;
    7673  global.GlobalSize() = size;
    7774  global.BoundaryType() = BTUndefined;
     
    113110  const Index off = GridIndexTranslations::EndOffset(boundary);
    114111
     112  /*
     113   * Set global grid attributes
     114   */
     115
    115116  level = grid.Level() + 1;
     117
     118  global.BoundaryType() = grid_finer.Global().BoundaryType();
    116119
    117120  global.GlobalFinerBegin() = 0;
     
    123126  global.LocalFinerSize() = 0;
    124127
    125   global.FinestAbsBegin() = grid_finer.Global().FinestAbsBegin();
    126   global.FinestAbsEnd() = grid_finer.Global().FinestAbsEnd();
    127   global.FinestAbsSize() = grid_finer.Global().FinestAbsSize();
     128  global.LocalBegin() = 2 * (grid.Global().LocalFinerBegin() - grid.Global().GlobalFinerBegin());
     129  global.LocalEnd() = 2 * (grid.Global().LocalFinerEnd() - grid.Global().GlobalFinerBegin() - off) + off;
     130  global.LocalSize() = global.LocalEnd() - global.LocalBegin();
    128131
    129132  global.GlobalSize() = 2 * (grid.Global().GlobalFinerSize() - off) + off;
    130   global.BoundaryType() = grid_finer.Global().BoundaryType();
    131 
    132   global.LocalBegin() = 2 * grid.Global().LocalBegin().Clamp(grid.Global().GlobalFinerBegin(), grid.Global().GlobalFinerEnd());
    133   global.LocalEnd() = 2 * grid.Global().LocalEnd().Clamp(grid.Global().GlobalFinerBegin(), grid.Global().GlobalFinerEnd()) - off;
     133
     134  for (int j=0; j<3; ++j) {
     135
     136    if (boundary[j] == Dirichlet ||
     137        boundary[j] == Open) {
     138
     139      if (grid.Global().BoundaryType() == LocallyRefined) {
     140
     141        global.GlobalSize()[j] += 2;
     142        global.LocalBegin()[j] += 1;
     143        global.LocalEnd()[j] +=1;
     144
     145      } else if (grid.Global().BoundaryType() == GlobalMax) {
     146
     147        global.GlobalSize()[j] += 2;
     148        global.LocalBegin()[j] += 1;
     149        global.LocalEnd()[j] +=1;
     150
     151      }
     152
     153    } else {
     154
     155    }
     156
     157  }
    134158
    135159  global.LocalSize() = global.LocalEnd() - global.LocalBegin();
     
    168192    }
    169193
    170     if (grid.Local().BoundarySize1()[i] > 0) {
     194    if (grid.Local().BoundarySize1()[i] > 0 && global.BoundaryType() != LocallyRefined) {
     195      local.Size()[i] -= grid.Local().BoundarySize1()[i];
    171196      local.Begin()[i] += grid.Local().BoundarySize1()[i];
    172197      local.BoundaryEnd1()[i] = grid.Local().BoundarySize1()[i];
     
    178203    }
    179204
    180     if (grid.Local().BoundarySize2()[i] > 0) {
     205    if (grid.Local().BoundarySize2()[i] > 0 && global.BoundaryType() != LocallyRefined) {
     206      local.Size()[i] -= grid.Local().BoundarySize2()[i];
    181207      local.End()[i] -= grid.Local().BoundarySize2()[i];
    182208      local.BoundaryBegin2()[i] = local.End()[i];
    183       local.BoundaryEnd2()[i] = local.End()[i]+grid.Local().BoundarySize2()[i];
     209      local.BoundaryEnd2()[i] = local.End()[i] + grid.Local().BoundarySize2()[i];
    184210    }
    185211
     
    195221    local.BoundarySize1() + local.BoundarySize2();
    196222
    197   extent.Size() = grid.Extent().Size();
    198   extent.Begin() = grid.Extent().Begin();
    199   extent.End() = grid.Extent().End();
    200   extent.MeshWidth() = 0.5 * grid.Extent().MeshWidth();
     223  extent = grid_finer.Extent();
    201224
    202225  iterators.SetSubgrids(local);
     
    218241  global.GlobalFinerEnd() = grid_coarser.Global().GlobalFinerEnd();
    219242  global.GlobalFinerSize() = grid_coarser.Global().GlobalFinerSize();
    220 
    221   global.FinestAbsBegin() = grid.Global().FinestAbsBegin();
    222   global.FinestAbsEnd() = grid.Global().FinestAbsEnd();
    223   global.FinestAbsSize() = grid.Global().FinestAbsSize();
    224243
    225244  global.GlobalSize() = (grid.Global().GlobalSize() - off)/2 + off;
     
    326345  for (iter=Iterators().Local().Begin(); iter!=Iterators().Local().End(); ++iter)
    327346    (*this)(*iter) = rhs.GetVal(*iter) - prefactor * A.Apply(sol, *iter);
     347
     348  this->ClearBoundary();
    328349}
    329350
Note: See TracChangeset for help on using the changeset viewer.