[cig-commits] commit: Get edge viscosity by interpolating from cell viscosity, and coarsen cell viscosity using CONSERVATIVE_COARSEN
Mercurial
hg at geodynamics.org
Wed Apr 20 16:56:04 PDT 2011
changeset: 180:949397d18c76
user: Walter Landry <wlandry at caltech.edu>
date: Wed Apr 20 10:33:08 2011 -0700
files: FACStokes/fix_viscosity.C
description:
Get edge viscosity by interpolating from cell viscosity, and coarsen cell viscosity using CONSERVATIVE_COARSEN
diff -r 9a2347e0208a -r 949397d18c76 FACStokes/fix_viscosity.C
--- a/FACStokes/fix_viscosity.C Wed Apr 20 10:30:44 2011 -0700
+++ b/FACStokes/fix_viscosity.C Wed Apr 20 10:33:08 2011 -0700
@@ -25,7 +25,8 @@ void SAMRAI::FACStokes::fix_viscosity()
vdb->mapIndexToVariable(cell_viscosity_id, variable);
cell_viscosity_coarsen_operator =
geometry->lookupCoarsenOperator(variable,
- "CELL_VISCOSITY_COARSEN");
+ "CONSERVATIVE_COARSEN");
+ // "CELL_VISCOSITY_COARSEN");
vdb->mapIndexToVariable(edge_viscosity_id, variable);
edge_viscosity_coarsen_operator =
@@ -100,4 +101,67 @@ void SAMRAI::FACStokes::fix_viscosity()
edge_viscosity_coarsen_algorithm.setNull();
edge_viscosity_coarsen_schedules.setNull();
+
+ 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)
+ {
+ 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++)
+ {
+ 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)=
+ 1/(1/cell_viscosity(c)
+ + 1/cell_viscosity(c-ip)
+ + 1/cell_viscosity(c-jp)
+ + 1/cell_viscosity(c-ip-jp));
+ }
+ }
+ 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++)
+ {
+ pdat::EdgeIndex e=ni();
+ pdat::CellIndex c(e);
+ edge_viscosity(e)=
+ 1/(1/cell_viscosity(c)
+ + 1/cell_viscosity(c-ip)
+ + 1/cell_viscosity(c-jp)
+ + 1/cell_viscosity(c-ip-jp)
+ + 1/cell_viscosity(c-kp)
+ + 1/cell_viscosity(c-ip-kp)
+ + 1/cell_viscosity(c-jp-kp)
+ + 1/cell_viscosity(c-ip-jp-kp));
+ }
+ }
+ }
+ }
+ }
+
+
}
More information about the CIG-COMMITS
mailing list