00001 #include "facefluxwithoutgravity.h"
00002 #include "numericmethods.h"
00003 FaceFluxWithoutGravity::FaceFluxWithoutGravity(OrthoMesh &mesh,Function1D &fMobW,Function1D &DfMobW)
00004 :FaceFluxFunction(1),m_mesh(mesh),m_fMobW(fMobW),m_DfMobW(DfMobW),m_Vn(mesh.numFaces())
00005 {
00006
00007 }
00008
00009
00010
00011
00012
00022 double FaceFluxWithoutGravity::fluxAtFace(OrthoMesh::Face_It &faceIt,int face,int cell1,int cell2,double u1,double u2)
00023 {
00024 return (m_fMobW(u1) + m_fMobW(u2))/2.0*(m_Vn(face));
00025
00026 }
00027
00028
00029
00030 void FaceFluxWithoutGravity::maxGlobalCharVelocity(double vel[3])
00031 {
00032 static VecDouble normalVel(3);
00033 m_mesh.getMaxAbsVelocitiesInFacesByComponents(normalVel,m_Vn);
00034 vel[X]= normalVel(X)*m_DfMobW.getMaxNorm(0,1);
00035 vel[Y]= normalVel(Y)*m_DfMobW.getMaxNorm(0,1);
00036 vel[Z]= normalVel(Z)*m_DfMobW.getMaxNorm(0,1);
00037
00038
00039 }
00040
00041
00042
00043 double FaceFluxWithoutGravity::maxLocalCharVelocity(OrthoMesh::Face_It &faceIt,int face,int cell1,int cell2,double u1,double u2)
00044 {
00045 if (u1 > u2)
00046 std::swap(u1,u2);
00047 return m_Vn(face)*m_DfMobW.getMaxNorm(u1,u2);
00048 }
00049
00050
00051 void FaceFluxWithoutGravity::updateDynamicData(DynamicBase &dynMod)
00052 {
00053 dynMod.getNormalVelocityAtFaces(m_Vn);
00054
00055 }
00056
00057
00058 double FaceFluxWithoutGravity::exactFluxAtFace(OrthoMesh::Face_It &faceIt,int face,int cell1,int cell2,double ul,double ur)
00059 {
00060 assert( (unsigned) face < m_Vn.size());
00061
00062
00063
00064 double v = m_Vn(face);
00065 double fMin,fMax;
00066
00067 if (v > 0)
00068 {
00069 if (ul > ur)
00070 {
00071 m_fMobW.getMinMaxValues(ur,ul,fMin,fMax);
00072 return fMax*v;
00073 }
00074 else
00075 {
00076 m_fMobW.getMinMaxValues(ul,ur,fMin,fMax);
00077 return fMin*v;
00078 }
00079
00080 }
00081 else
00082 {
00083 if (ul > ur)
00084 {
00085 m_fMobW.getMinMaxValues(ur,ul,fMin,fMax);
00086 return fMin*v;
00087 }
00088 else
00089 {
00090 m_fMobW.getMinMaxValues(ul,ur,fMin,fMax);
00091 return fMax*v;
00092 }
00093 }
00094
00095 }