[cig-commits] commit: Make compute residual less dependent on the dimension.

Mercurial hg at geodynamics.org
Mon Mar 14 15:37:41 PDT 2011


changeset:   121:d56361ab02b7
user:        Walter Landry <wlandry at caltech.edu>
date:        Mon Mar 14 15:23:32 2011 -0700
files:       StokesFACOps/computeCompositeResidualOnLevel.C
description:
Make compute residual less dependent on the dimension.


diff -r 10572ae98004 -r d56361ab02b7 StokesFACOps/computeCompositeResidualOnLevel.C
--- a/StokesFACOps/computeCompositeResidualOnLevel.C	Mon Mar 14 15:11:07 2011 -0700
+++ b/StokesFACOps/computeCompositeResidualOnLevel.C	Mon Mar 14 15:23:32 2011 -0700
@@ -100,16 +100,6 @@ void SAMRAI::solv::StokesFACOps::compute
    * S4. Compute residual data from flux.
    */
 
-
-  // /*
-  //  * For the whole level, make sure the internal
-  //  * side-centered data is allocated and note
-  //  * whether that data should be deallocated when done.
-  //  * We do this for the whole level because the data
-  //  * undergoes transfer operations which require the
-  //  * whole level data.
-  //  */
-
   /* S1. Fill solution ghost data. */
 
   set_boundaries(v_id,ln,error_equation_indicator);
@@ -120,28 +110,6 @@ void SAMRAI::solv::StokesFACOps::compute
     /* Fill from current and physical boundary */
     xeqScheduleGhostFillNoCoarse(p_id, v_id, ln);
   }
-
-  // /*
-  //  * S2. Compute flux on patches in level.
-  //  */
-  // for (hier::PatchLevel::Iterator pi(*level); pi; pi++) {
-  //   tbox::Pointer<hier::Patch> patch = *pi;
-
-  //   tbox::Pointer<pdat::CellData<double> >
-  //     soln_data = solution.getComponentPatchData(0, *patch);
-  //   tbox::Pointer<pdat::CellData<double> >
-  //     rhs_data = rhs.getComponentPatchData(0, *patch);
-  //   tbox::Pointer<pdat::CellData<double> >
-  //     residual_data = residual.getComponentPatchData(0, *patch);
-  //   tbox::Pointer<pdat::SideData<double> >
-  //     flux_data = patch->getPatchData(flux_id);
-  //   computeFluxOnPatch(
-  //                      *patch,
-  //                      level->getRatioToCoarserLevel(),
-  //                      *soln_data,
-  //                      *flux_data);
-
-  // }
 
   /*
    * S4. Compute residual on patches in level.
@@ -180,99 +148,79 @@ void SAMRAI::solv::StokesFACOps::compute
     double dx = geom->getDx()[0];
     double dy = geom->getDx()[1];
 
-    for(int j=pbox.lower(1); j<=pbox.upper(1)+1; ++j)
+    pbox.growUpper(hier::IntVector::getOne(d_dim));
+    for(pdat::CellIterator ci(pbox); ci; ci++)
       {
-        for(int i=pbox.lower(0); i<=pbox.upper(0)+1; ++i)
+        pdat::CellIndex center(*ci);
+        pdat::CellIndex up(center), down(center), right(center),
+          left(center);
+
+        ++up[1];
+        --down[1];
+        ++right[0];
+        --left[0];
+
+        const pdat::SideIndex
+          center_x(center,0,pdat::SideIndex::Lower),
+          left_x(left,0,pdat::SideIndex::Lower),
+          right_x(right,0,pdat::SideIndex::Lower),
+          down_x(down,0,pdat::SideIndex::Lower),
+          up_x(up,0,pdat::SideIndex::Lower),
+          center_y(center,1,pdat::SideIndex::Lower),
+          left_y(left,1,pdat::SideIndex::Lower),
+          right_y(right,1,pdat::SideIndex::Lower),
+          down_y(down,1,pdat::SideIndex::Lower),
+          up_y(up,1,pdat::SideIndex::Lower);
+        const pdat::NodeIndex
+          center_e(center,pdat::NodeIndex::LowerLeft),
+          up_e(up,pdat::NodeIndex::LowerLeft),
+          right_e(right,pdat::NodeIndex::LowerLeft);
+
+        /* p */
+        if(center[0]!=pbox.upper(0) && center[1]!=pbox.upper(1))
           {
-            pdat::CellIndex center(tbox::Dimension(2));
-            center[0]=i;
-            center[1]=j;
+            double dvx_dx=(v(right_x) - v(center_x))/dx;
+            double dvy_dy=(v(up_y) - v(center_y))/dy;
+            p_resid(center)=p_rhs(center) - dvx_dx - dvy_dy;
+          }
 
-            pdat::CellIndex up(center), down(center), right(center),
-              left(center);
+        /* vx */
+        if(center[1]!=pbox.upper(1))
+          {
+            /* If x==0 */
+            if((center[0]==pbox.lower(0) && v(left_x)==boundary_value)
+               || (center[0]==pbox.upper(0)
+                   && v(right_x)==boundary_value))
+                       
+              {
+                v_resid(center_x)=0;
+              }
+            else
+              {
+                v_resid(center_x)=v_rhs(center_x)
+                  - v_operator(v,p,cell_viscosity,edge_viscosity,center,
+                               left,center_x,right_x,left_x,up_x,down_x,
+                               center_y,up_y,center_e,up_e,ip,dx,dy);
+              }
+          }
 
-            ++up[1];
-            --down[1];
-            ++right[0];
-            --left[0];
-
-            const pdat::SideIndex
-              center_x(center,0,pdat::SideIndex::Lower),
-              left_x(left,0,pdat::SideIndex::Lower),
-              right_x(right,0,pdat::SideIndex::Lower),
-              down_x(down,0,pdat::SideIndex::Lower),
-              up_x(up,0,pdat::SideIndex::Lower),
-              center_y(center,1,pdat::SideIndex::Lower),
-              left_y(left,1,pdat::SideIndex::Lower),
-              right_y(right,1,pdat::SideIndex::Lower),
-              down_y(down,1,pdat::SideIndex::Lower),
-              up_y(up,1,pdat::SideIndex::Lower);
-            const pdat::NodeIndex
-              center_e(center,pdat::NodeIndex::LowerLeft),
-              up_e(up,pdat::NodeIndex::LowerLeft),
-              right_e(right,pdat::NodeIndex::LowerLeft);
-
-            // tbox::plog << "resid "
-            //            << ln << " "
-            //            << i << " "
-            //            << j << " ";
-            /* p */
-            if(i!=pbox.upper(0)+1 && j!=pbox.upper(1)+1)
+        /* vy */
+        if(center[0]!=pbox.upper(0))
+          {
+            /* If y==0 */
+            if((center[1]==pbox.lower(1) && v(down_y)==boundary_value)
+               || (center[1]==pbox.upper(1) && v(up_y)==boundary_value))
               {
-                double dvx_dx=(v(right_x) - v(center_x))/dx;
-                double dvy_dy=(v(up_y) - v(center_y))/dy;
-                p_resid(center)=p_rhs(center) - dvx_dx - dvy_dy;
-
-                // tbox::plog << "p "
-                //            << p_resid(center) << " ";
+                v_resid(center_y)=0;
               }
-
-            /* vx */
-            if(j!=pbox.upper(1)+1)
+            else
               {
-                /* If x==0 */
-                if((center[0]==pbox.lower(0) && v(left_x)==boundary_value)
-                   || (center[0]==pbox.upper(0)+1
-                       && v(right_x)==boundary_value))
-                       
-                  {
-                    v_resid(center_x)=0;
-                  }
-                else
-                  {
-                    v_resid(center_x)=v_rhs(center_x)
-                      - v_operator(v,p,cell_viscosity,edge_viscosity,center,
-                                   left,center_x,right_x,left_x,up_x,down_x,
-                                   center_y,up_y,center_e,up_e,ip,dx,dy);
-                // tbox::plog << "vx "
-                //            << v_resid(center_x) << " "
-                //            << v(center_x) << " "
-                //            << v(right_x) << " "
-                //            << v(left_x) << " ";
-                  }
+                v_resid(center_y)=v_rhs(center_y)
+                  - v_operator(v,p,cell_viscosity,edge_viscosity,center,
+                               down,center_y,up_y,down_y,right_y,left_y,
+                               center_x,right_x,center_e,right_e,jp,
+                               dy,dx);
               }
-
-            /* vy */
-            if(i!=pbox.upper(0)+1)
-              {
-                /* If y==0 */
-                if((center[1]==pbox.lower(1) && v(down_y)==boundary_value)
-                   || (center[1]==pbox.upper(1)+1 && v(up_y)==boundary_value))
-                  {
-                    v_resid(center_y)=0;
-                  }
-                else
-                  {
-                    v_resid(center_y)=v_rhs(center_y)
-                      - v_operator(v,p,cell_viscosity,edge_viscosity,center,
-                                   down,center_y,up_y,down_y,right_y,left_y,
-                                   center_x,right_x,center_e,right_e,jp,
-                                   dy,dx);
-                  }
-                // tbox::plog << "vy "
-                //            << v_resid(center_y) << " ";
-              }
-            // tbox::plog << "\n";
           }
       }
   }
@@ -283,11 +231,6 @@ void SAMRAI::solv::StokesFACOps::compute
   set_boundaries(v_rhs_id,ln,true);
   xeqScheduleGhostFillNoCoarse(invalid_id, v_rhs_id, ln);
   
-
-  // if (deallocate_flux_data_when_done) {
-  //   level->deallocatePatchData(flux_id);
-  // }
-
   t_compute_composite_residual->stop();
 }
 



More information about the CIG-COMMITS mailing list