[cig-commits] commit: Sync the edge viscosity so that it is correct in parallel
Mercurial
hg at geodynamics.org
Fri Apr 22 12:22:21 PDT 2011
changeset: 184:f883f3778688
tag: tip
user: Walter Landry <wlandry at caltech.edu>
date: Fri Apr 22 12:21:08 2011 -0700
files: FACStokes/fix_viscosity.C
description:
Sync the edge viscosity so that it is correct in parallel
diff -r d31e8b419587 -r f883f3778688 FACStokes/fix_viscosity.C
--- a/FACStokes/fix_viscosity.C Thu Apr 21 02:38:19 2011 -0700
+++ b/FACStokes/fix_viscosity.C Fri Apr 22 12:21:08 2011 -0700
@@ -102,64 +102,78 @@ void SAMRAI::FACStokes::fix_viscosity()
edge_viscosity_coarsen_algorithm.setNull();
edge_viscosity_coarsen_schedules.setNull();
+
+ /* Compute edge_viscosity by averaging the cell viscosities. */
+
hier::Index ip(hier::Index::getZeroIndex(d_dim)), jp(ip), kp(ip);
ip[0]=1;
jp[1]=1;
if(d_dim.getValue()>2)
kp[2]=1;
- for (int ln = 0; ln <= d_hierarchy->getFinestLevelNumber(); ++ln) {
- tbox::Pointer<hier::PatchLevel> level = d_hierarchy->getPatchLevel(ln);
- hier::PatchLevel::Iterator i_p(*level);
- for ( ; i_p; i_p++) {
- tbox::Pointer<hier::Patch> patch = *i_p;
- tbox::Pointer<pdat::CellData<double> >
- cell_viscosity_ptr = patch->getPatchData(cell_viscosity_id);
- pdat::CellData<double> &cell_viscosity(*cell_viscosity_ptr);
- if(d_dim.getValue()==2)
+ for (int ln = 0; ln <= d_hierarchy->getFinestLevelNumber(); ++ln)
+ {
+ tbox::Pointer<hier::PatchLevel> level = d_hierarchy->getPatchLevel(ln);
+ hier::PatchLevel::Iterator i_p(*level);
+ for ( ; i_p; i_p++)
{
- tbox::Pointer<pdat::NodeData<double> >
- edge_viscosity_ptr = patch->getPatchData(edge_viscosity_id);
- pdat::NodeData<double> &edge_viscosity(*edge_viscosity_ptr);
+ tbox::Pointer<hier::Patch> patch = *i_p;
+ tbox::Pointer<pdat::CellData<double> >
+ cell_viscosity_ptr = patch->getPatchData(cell_viscosity_id);
+ pdat::CellData<double> &cell_viscosity(*cell_viscosity_ptr);
+ if(d_dim.getValue()==2)
+ {
+ tbox::Pointer<pdat::NodeData<double> >
+ edge_viscosity_ptr = patch->getPatchData(edge_viscosity_id);
+ pdat::NodeData<double> &edge_viscosity(*edge_viscosity_ptr);
- for(pdat::NodeIterator ni(edge_viscosity.getBox()); ni; ni++)
+ for(pdat::NodeIterator ni(edge_viscosity.getBox()); ni; ni++)
+ {
+ pdat::NodeIndex e=ni();
+ pdat::CellIndex c(e);
+ cell_viscosity(c);
+ cell_viscosity(c-ip);
+ cell_viscosity(c-jp);
+ cell_viscosity(c-ip-jp);
+ edge_viscosity(e)=
+ pow(cell_viscosity(c)*cell_viscosity(c-ip)
+ *cell_viscosity(c-jp)*cell_viscosity(c-ip-jp),0.25);
+ }
+ }
+ else
{
- pdat::NodeIndex e=ni();
- pdat::CellIndex c(e);
- cell_viscosity(c);
- cell_viscosity(c-ip);
- cell_viscosity(c-jp);
- cell_viscosity(c-ip-jp);
- edge_viscosity(e)=
- pow(cell_viscosity(c)*cell_viscosity(c-ip)
- *cell_viscosity(c-jp)*cell_viscosity(c-ip-jp),0.25);
- }
- }
- else
- {
- tbox::Pointer<pdat::EdgeData<double> >
- edge_viscosity_ptr = patch->getPatchData(edge_viscosity_id);
- pdat::EdgeData<double> &edge_viscosity(*edge_viscosity_ptr);
- for(int axis=0;axis<3;++axis)
- {
- for(pdat::EdgeIterator ni(edge_viscosity.getBox(),axis); ni; ni++)
+ tbox::Pointer<pdat::EdgeData<double> >
+ edge_viscosity_ptr = patch->getPatchData(edge_viscosity_id);
+ pdat::EdgeData<double> &edge_viscosity(*edge_viscosity_ptr);
+ for(int axis=0;axis<3;++axis)
{
- pdat::EdgeIndex e=ni();
- pdat::CellIndex c(e);
- edge_viscosity(e)=
- pow(cell_viscosity(c)
- *cell_viscosity(c-ip)
- *cell_viscosity(c-jp)
- *cell_viscosity(c-ip-jp)
- *cell_viscosity(c-kp)
- *cell_viscosity(c-ip-kp)
- *cell_viscosity(c-jp-kp)
- *cell_viscosity(c-ip-jp-kp),0.125);
+ for(pdat::EdgeIterator ni(edge_viscosity.getBox(),axis); ni; ni++)
+ {
+ pdat::EdgeIndex e=ni();
+ pdat::CellIndex c(e);
+ edge_viscosity(e)=
+ pow(cell_viscosity(c)
+ *cell_viscosity(c-ip)
+ *cell_viscosity(c-jp)
+ *cell_viscosity(c-ip-jp)
+ *cell_viscosity(c-kp)
+ *cell_viscosity(c-ip-kp)
+ *cell_viscosity(c-jp-kp)
+ *cell_viscosity(c-ip-jp-kp),0.125);
+ }
}
}
}
+
+ /* Ghost fill */
+ xfer::RefineAlgorithm refiner(d_dim);
+ refiner.registerRefine(edge_viscosity_id,edge_viscosity_id,
+ edge_viscosity_id,
+ tbox::Pointer<xfer::RefineOperator>(0));
+
+ tbox::Pointer<xfer::RefineSchedule> schedule=
+ refiner.createSchedule(d_hierarchy->getPatchLevel(ln));
+
+ schedule->fillData(0.0,false);
}
- }
-
-
}
More information about the CIG-COMMITS
mailing list