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 }