00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011
00012
00013 #ifndef _POLYGEOM_H_
00014 #define _POLYGEOM_H_
00015
00016 #include "REAL.H"
00017 #include "RealVect.H"
00018 #include "Tuple.H"
00019 #include "Vector.H"
00020
00021 #include "VolIndex.H"
00022
00023 #include "NamespaceHeader.H"
00024
00025 class EBISBox;
00027
00034 class PolyGeom
00035 {
00036 public:
00037
00039
00047 static void
00048 pointToLine(RealVect& a_closestPt,
00049 RealVect& a_normal,
00050 const RealVect& a_point,
00051 const RealVect& a_pointOnLine,
00052 const RealVect& a_direction);
00053
00055
00057 static void setTolerance(const Real& a_tolerance);
00058
00060
00062 static void setVectDx(const RealVect& a_vectDx);
00063
00065
00067 static void setVolumeTolerance(const Real& a_tolerance);
00068
00070
00072 static void setAreaTolerance(const Real& a_tolerance);
00073
00075
00077 static void setLengthTolerance(const Real& a_tolerance);
00078
00080
00084 static RealVect cross(const RealVect& a_xvec1,
00085 const RealVect& a_xvec0);
00086
00088
00092 static Real dot(const RealVect& a_xvec1,
00093 const RealVect& a_xvec0);
00094
00096
00098 static const Real& getTolerance();
00099
00101
00103 static const RealVect& getVectDx();
00104
00106
00108 static const Real& getVolumeTolerance();
00109
00111
00113 static const Real& getAreaTolerance();
00114
00116
00118 static const Real& getLengthTolerance();
00119
00121
00126 static RealVect normal(const VolIndex& a_vof,
00127 const EBISBox& a_ebisBox,
00128 const Real& a_bndryArea);
00129
00131
00133 static Real bndryArea(const VolIndex& a_vof,
00134 const EBISBox& a_ebisBox);
00135
00137
00143 static Real computeAlpha(const Real& a_volFrac,
00144 const RealVect& a_normal);
00145
00147
00151 static Real computeVolume(const Real& a_alpha,
00152 const RealVect& a_normal);
00153
00155
00163 static void computeNormalAndAlpha(Real& a_alpha,
00164 RealVect& a_normal,
00165 const int& a_upDir,
00166 const Tuple<RealVect, CH_SPACEDIM>& a_poly);
00167
00168
00169 static Real
00170 matrixSolveComp(const Vector<Vector<Real> >& a_A,
00171 const Vector<Real>& a_rhs,
00172 const int& a_icomp);
00173
00174
00175 static Real
00176 determinant(const Vector< Vector<Real> >& a_A);
00177
00187 static Real sAndZVolume(const Real& a_alpha,
00188 const RealVect& a_normal);
00189
00191 PolyGeom()
00192 {;}
00194 ~PolyGeom()
00195 {;}
00196
00198
00202 static void sortVector(RealVect& vect, IntVect& ivmap);
00203
00205 static void posifyVector(RealVect& vect, IntVect& signs);
00206
00208 static void unifyVector(RealVect& normal, Real& sumSquare);
00209
00211 static Tuple<int, CH_SPACEDIM-1> computeTanDirs(int upDir);
00212
00213 protected:
00214
00215 static Real twoDFunc(const Real& arg);
00216 static Real threeDFunc(const Real& arg);
00217
00218 static Real computeAnyVolume(const Real& a_alpha,
00219 const Real& a_norm0,
00220 const Real& a_norm1,
00221 const Real& a_norm2);
00222
00223 static RealVect s_vectDx;
00224
00225 static Real s_tolerance;
00226
00227 static Real s_lengthtolerance;
00228
00229 static Real s_areatolerance;
00230
00231 static RealVect tetCentroid(const RealVect& normal,
00232 const Real& alpha);
00233
00234 static Real tetVolume(const RealVect& normal,
00235 const Real& alpha);
00236
00237
00238 private:
00239 };
00240
00241 #include "NamespaceFooter.H"
00242 #endif