[cig-commits] commit: Various indexing fixes. Seems to work in parallel now.

Mercurial hg at geodynamics.org
Fri Feb 25 14:16:46 PST 2011


changeset:   85:f19b21ac198f
user:        Walter Landry <wlandry at caltech.edu>
date:        Fri Feb 11 12:31:34 2011 -0800
files:       StokesFACOps/smoothErrorByRedBlack.C V_Coarsen.C V_Coarsen_Patch_Strategy.C
description:
Various indexing fixes.  Seems to work in parallel now.


diff -r 6af6700b0187 -r f19b21ac198f StokesFACOps/smoothErrorByRedBlack.C
--- a/StokesFACOps/smoothErrorByRedBlack.C	Thu Feb 10 11:04:29 2011 -0800
+++ b/StokesFACOps/smoothErrorByRedBlack.C	Fri Feb 11 12:31:34 2011 -0800
@@ -138,7 +138,14 @@ void SAMRAI::solv::StokesFACOps::smoothE
                  is fixed. */
               hier::Box gbox=p->getGhostBox();
               std::vector<bool> set_p(gbox.size(),true);
-          
+
+              // tbox::plog << "set_p "
+              //            << gbox.lower(0) << " "
+              //            << gbox.upper(0) << " "
+              //            << gbox.lower(1) << " "
+              //            << gbox.upper(1) << " "
+              //            << "\n";
+
               const tbox::Array<hier::BoundaryBox >&edges
                 =d_cf_boundary[ln]->getEdgeBoundaries(patch->getGlobalId());
               for(int mm=0; mm<edges.size(); ++mm)
@@ -148,7 +155,12 @@ void SAMRAI::solv::StokesFACOps::smoothE
                       i<=edges[mm].getBox().upper(0); ++i)
                     {
                       set_p[(i-gbox.lower(0))
-                            + (gbox.upper(0)+1)*(j-gbox.lower(1))]=false;
+                            + (gbox.upper(0)-gbox.lower(0)+1)*(j-gbox.lower(1))]=false;
+                      // tbox::plog << i << " "
+                      //            << j << " "
+                      //            << (i-gbox.lower(0))
+                      //   + (gbox.upper(0)-gbox.lower(0)+1)*(j-gbox.lower(1)) << " "
+                      //            << "\n";
                     }
 
               const tbox::Array<hier::BoundaryBox >&nodes
@@ -160,27 +172,52 @@ void SAMRAI::solv::StokesFACOps::smoothE
                       i<=nodes[mm].getBox().upper(0); ++i)
                     {
                       set_p[(i-gbox.lower(0))
-                            + (gbox.upper(0)+1)*(j-gbox.lower(1))]=false;
+                            + (gbox.upper(0)-gbox.lower(0)+1)*(j-gbox.lower(1))]=false;
+                      // tbox::plog << i << " "
+                      //            << j << " "
+                      //            << (i-gbox.lower(0))
+                      //   + (gbox.upper(0)-gbox.lower(0)+1)*(j-gbox.lower(1)) << " "
+                      //            << "\n";
                     }
 
               if(geom->getTouchesRegularBoundary(0,0))
                 for(int j=gbox.lower(1); j<=gbox.upper(1); ++j)
-                  set_p[(gbox.upper(0)+1)*(j-gbox.lower(1))]=false;
+                  {
+                  set_p[(gbox.upper(0)-gbox.lower(0)+1)*(j-gbox.lower(1))]=false;
+                      // tbox::plog << gbox.lower(0) << " "
+                      //            << j << " "
+                      //            << "\n";
+                    }
                   
               if(geom->getTouchesRegularBoundary(0,1))
                 for(int j=gbox.lower(1); j<=gbox.upper(1); ++j)
+                  {
                   set_p[(gbox.upper(0)-gbox.lower(0))
-                        + (gbox.upper(0)+1)*(j-gbox.lower(1))]=false;
+                        + (gbox.upper(0)-gbox.lower(0)+1)*(j-gbox.lower(1))]=false;
+                      // tbox::plog << gbox.upper(0) << " "
+                      //            << j << " "
+                      //            << "\n";
+                    }
 
               if(geom->getTouchesRegularBoundary(1,0))
                 for(int i=gbox.lower(0); i<=gbox.upper(0); ++i)
+                  {
                   set_p[i-gbox.lower(0)]=false;
+                      // tbox::plog << i << " "
+                      //            << gbox.lower(1) << " "
+                      //            << "\n";
+                    }
 
               if(geom->getTouchesRegularBoundary(1,1))
                 for(int i=gbox.lower(0); i<=gbox.upper(0); ++i)
+                  {
                   set_p[(i-gbox.lower(0))
-                        + (gbox.upper(0)+1)*(gbox.upper(1)-gbox.lower(1))]=
+                        + (gbox.upper(0)-gbox.lower(0)+1)*(gbox.upper(1)-gbox.lower(1))]=
                     false;
+                      // tbox::plog << i << " "
+                      //            << gbox.upper(1) << " "
+                      //            << "\n";
+                    }
 
               for(int j=pbox.lower(1); j<=pbox.upper(1)+1; ++j)
                 {
@@ -206,14 +243,19 @@ void SAMRAI::solv::StokesFACOps::smoothE
                                  << rb << " "
                                  << i << " "
                                  << j << " "
-                                 << pbox.lower(0) << " "
-                                 << pbox.upper(0) << " "
-                                 << pbox.lower(1) << " "
-                                 << pbox.upper(1) << " ";
+                                 << std::boolalpha
+                                 << set_p[(i-gbox.lower(0))
+                                          + (gbox.upper(0)-gbox.lower(0)+1)*(j-gbox.lower(1))] << " "
+                                 << (i-gbox.lower(0))
+                        + (gbox.upper(0)-gbox.lower(0)+1)*(j-gbox.lower(1)) << " ";
+                                 // << pbox.lower(0) << " "
+                                 // << pbox.upper(0) << " "
+                                 // << pbox.lower(1) << " "
+                                 // << pbox.upper(1) << " ";
 
                       /* Update p */
                       if(set_p[(i-gbox.lower(0))
-                               + (gbox.upper(0)+1)*(j-gbox.lower(1))])
+                               + (gbox.upper(0)-gbox.lower(0)+1)*(j-gbox.lower(1))])
                         {
                           double dvx_dx=
                             ((*v)(pdat::SideIndex(center,pdat::SideIndex::X,
@@ -237,27 +279,28 @@ void SAMRAI::solv::StokesFACOps::smoothE
 
                           tbox::plog << "p "
                                      << (*p)(center) << " "
-                                     << (*p_rhs)(center) << " "
-                                     << dvx_dx << " "
-                                     << dvy_dy << " "
-                                     << delta_R_continuity << " "
-                                     << (*v)(pdat::SideIndex(center,pdat::SideIndex::X,
-                                                             pdat::SideIndex::Upper)) << " "
-                                     << (*v)(pdat::SideIndex(center,pdat::SideIndex::X,
-                                                             pdat::SideIndex::Lower)) << " "
-                                     << dx << " ";
+                                     << maxres << " ";
+                                     // << (*p_rhs)(center) << " "
+                                     // << dvx_dx << " "
+                                     // << dvy_dy << " "
+                                     // << delta_R_continuity << " "
+                                     // << (*v)(pdat::SideIndex(center,pdat::SideIndex::X,
+                                     //                         pdat::SideIndex::Upper)) << " "
+                                     // << (*v)(pdat::SideIndex(center,pdat::SideIndex::X,
+                                     //                         pdat::SideIndex::Lower)) << " "
+                                     // << dx << " ";
                         }
                       /* Update v */
                       if(set_p[(i-gbox.lower(0))
-                               + (gbox.upper(0)+1)*(j-gbox.lower(1))]
-                         || j<pbox.upper(1)+1)
+                               + (gbox.upper(0)-gbox.lower(0)+1)*(j-gbox.lower(1))]
+                         || (i==pbox.upper(0)+1 && j<pbox.upper(1)+1))
                         {
                           Update_V(0,j,pbox,center,left,right,down,up,p,v,v_rhs,
                                    maxres,dx,dy,viscosity,theta_momentum);
                         }
                       if(set_p[(i-gbox.lower(0))
-                               + (gbox.upper(0)+1)*(j-gbox.lower(1))]
-                         || i<pbox.upper(0)+1)
+                               + (gbox.upper(0)-gbox.lower(0)+1)*(j-gbox.lower(1))]
+                         || (i<pbox.upper(0)+1 && j==pbox.upper(1)+1))
                         {
                           Update_V(1,i,pbox,center,down,up,left,right,p,v,v_rhs,
                                    maxres,dy,dx,viscosity,theta_momentum);
@@ -267,7 +310,7 @@ void SAMRAI::solv::StokesFACOps::smoothE
                 }
             }
         }
-      if (residual_tolerance >= 0.0) {
+      // if (residual_tolerance >= 0.0) {
         /*
          * Check for early end of sweeps due to convergence
          * only if it is numerically possible (user gave a
@@ -286,7 +329,7 @@ void SAMRAI::solv::StokesFACOps::smoothE
           tbox::plog
             << d_object_name << "\n"
             << " RBGS sweep #" << sweep << " : " << maxres << "\n";
-      }
+      // }
     }
 }
 
diff -r 6af6700b0187 -r f19b21ac198f V_Coarsen.C
--- a/V_Coarsen.C	Thu Feb 10 11:04:29 2011 -0800
+++ b/V_Coarsen.C	Fri Feb 11 12:31:34 2011 -0800
@@ -108,6 +108,19 @@ void SAMRAI::geom::V_Coarsen::coarsen(hi
    for(int j=coarse_box.lower(1); j<=coarse_box.upper(1)+1; ++j)
      for(int i=coarse_box.lower(0); i<=coarse_box.upper(0)+1; ++i)
        {
+         tbox::plog << "V Coarsen "
+                    << coarse.getPatchLevelNumber() << " "
+                    << i << " "
+                    << j << " "
+                    << fine.getBox().lower(0) << " "
+                    << fine.getBox().upper(0) << " "
+                    << fine.getBox().lower(1) << " "
+                    << fine.getBox().upper(1) << " "
+                    << v_fine->getGhostBox().lower(0) << " "
+                    << v_fine->getGhostBox().upper(0) << " "
+                    << v_fine->getGhostBox().lower(1) << " "
+                    << v_fine->getGhostBox().upper(1) << " ";
+
          if(directions(0) && j!=coarse_box.upper(1)+1)
            {
              pdat::SideIndex coarse(hier::Index(i,j),0,
@@ -124,6 +137,14 @@ void SAMRAI::geom::V_Coarsen::coarsen(hi
                {
                  coarsen_v(coarse,ip,jp,v,v_fine);
                }
+             tbox::plog << "vx "
+                        << (*v)(coarse) << " "
+                        << (*v_fine)(center) << " "
+                        << (*v_fine)(center+jp) << " "
+                        << (*v_fine)(center+ip) << " "
+                        << (*v_fine)(center+jp+ip) << " "
+                        << (*v_fine)(center-ip) << " "
+                        << (*v_fine)(center+jp-ip) << " ";
            }
          if(directions(1) && i!=coarse_box.upper(0)+1)
            {
@@ -133,15 +154,26 @@ void SAMRAI::geom::V_Coarsen::coarsen(hi
              if((j==coarse_box.lower(1)
                  && cgeom->getTouchesRegularBoundary(1,0))
                 || (j==coarse_box.upper(1)+1
-                    && cgeom->getTouchesRegularBoundary(0,0)))
+                    && cgeom->getTouchesRegularBoundary(1,1)))
                {
+                 tbox::plog << "vy bound ";
                  (*v)(coarse)=((*v_fine)(center) + (*v_fine)(center+ip))/2;
                }
              else
                {
+                 tbox::plog << "vy center ";
                  coarsen_v(coarse,jp,ip,v,v_fine);
                }
+             tbox::plog << "vy "
+                        << (*v)(coarse) << " "
+                        << (*v_fine)(center) << " "
+                        << (*v_fine)(center+ip) << " "
+                        << (*v_fine)(center+jp) << " "
+                        << (*v_fine)(center+jp+ip) << " "
+                        << (*v_fine)(center-jp) << " "
+                        << (*v_fine)(center+ip-jp) << " ";
            }
+         tbox::plog << "\n";
        }
 }
 
diff -r 6af6700b0187 -r f19b21ac198f V_Coarsen_Patch_Strategy.C
--- a/V_Coarsen_Patch_Strategy.C	Thu Feb 10 11:04:29 2011 -0800
+++ b/V_Coarsen_Patch_Strategy.C	Fri Feb 11 12:31:34 2011 -0800
@@ -25,34 +25,61 @@ SAMRAI::solv::V_Coarsen_Patch_Strategy::
   TBOX_ASSERT(v_fine->getDepth() == v->getDepth());
   TBOX_ASSERT(v->getDepth() == 1);
 
+  hier::Box gbox(v_fine->getGhostBox());
   hier::Index ip(1,0), jp(0,1);
   for(int mm=0; mm<boundaries.size(); ++mm)
     {
       hier::Box bbox=boundaries[mm].getBox();
       int location_index=boundaries[mm].getLocationIndex();
 
+      // hier::Index unit(1,1);
       hier::Index lower=hier::Index::coarsen(bbox.lower(),hier::Index(2,2)),
         upper=hier::Index::coarsen(bbox.upper(),hier::Index(2,2));
+
+      tbox::plog << "VCPS "
+                 << mm << " "
+                 << bbox.lower(0) << " "
+                 << bbox.upper(0) << " "
+                 << bbox.lower(1) << " "
+                 << bbox.upper(1) << " "
+                 << lower(0) << " "
+                 << upper(0) << " "
+                 << lower(1) << " "
+                 << upper(1) << " "
+                 << v_fine->getGhostBox().lower(0) << " "
+                 << v_fine->getGhostBox().upper(0) << " "
+                 << v_fine->getGhostBox().lower(1) << " "
+                 << v_fine->getGhostBox().upper(1) << " "
+                 << "\n";
 
       for(int j=lower(1); j<=upper(1); ++j)
         for(int i=lower(0); i<=upper(0); ++i)
           {
+            tbox::plog << "V Patch "
+                       << i << " "
+                       << j << " ";
             /* Fix vx */
             if(location_index==0)
               {
                 pdat::SideIndex coarse(hier::Index(i,j),0,
                                        pdat::SideIndex::Upper);
                 pdat::SideIndex center(coarse*2);
-                (*v)(coarse)=((*v_fine)(center) + (*v_fine)(center+jp))/2;
-                tbox::plog << (*v)(coarse) << " ";
+                if(center[1]>=gbox.lower(1) && center[1]<gbox.upper(1))
+                  {
+                    (*v)(coarse)=((*v_fine)(center) + (*v_fine)(center+jp))/2;
+                    tbox::plog << (*v)(coarse) << " ";
+                  }
               }
             else if(location_index==1)
               {
                 pdat::SideIndex coarse(hier::Index(i,j),0,
                                        pdat::SideIndex::Lower);
                 pdat::SideIndex center(coarse*2);
-                (*v)(coarse)=((*v_fine)(center) + (*v_fine)(center+jp))/2;
-                tbox::plog << (*v)(coarse) << " ";
+                if(center[1]>=gbox.lower(1) && center[1]<gbox.upper(1))
+                  {
+                    (*v)(coarse)=((*v_fine)(center) + (*v_fine)(center+jp))/2;
+                    tbox::plog << (*v)(coarse) << " ";
+                  }
               }
             /* Fix vy */
             else if(location_index==2)
@@ -60,16 +87,22 @@ SAMRAI::solv::V_Coarsen_Patch_Strategy::
                 pdat::SideIndex coarse(hier::Index(i,j),1,
                                        pdat::SideIndex::Upper);
                 pdat::SideIndex center(coarse*2);
-                (*v)(coarse)=((*v_fine)(center) + (*v_fine)(center+ip))/2;
-                tbox::plog << (*v)(coarse) << " ";
+                if(center[0]>=gbox.lower(0) && center[0]<gbox.upper(0))
+                  {
+                    (*v)(coarse)=((*v_fine)(center) + (*v_fine)(center+ip))/2;
+                    tbox::plog << (*v)(coarse) << " ";
+                  }
               }
             else if(location_index==3)
               {
                 pdat::SideIndex coarse(hier::Index(i,j),1,
                                        pdat::SideIndex::Lower);
                 pdat::SideIndex center(coarse*2);
-                (*v)(coarse)=((*v_fine)(center) + (*v_fine)(center+ip))/2;
-                tbox::plog << (*v)(coarse) << " ";
+                if(center[0]>=gbox.lower(0) && center[0]<gbox.upper(0))
+                  {
+                    (*v)(coarse)=((*v_fine)(center) + (*v_fine)(center+ip))/2;
+                    tbox::plog << (*v)(coarse) << " ";
+                  }
               }
             else
               {



More information about the CIG-COMMITS mailing list