diff options
author | Nils Thuerey <nils@thuerey.de> | 2005-10-10 12:52:42 +0400 |
---|---|---|
committer | Nils Thuerey <nils@thuerey.de> | 2005-10-10 12:52:42 +0400 |
commit | d3d8441f678e8bf444a04e7379abc5322e4980b0 (patch) | |
tree | 98f844757059ca5eb1a77f24e1f2fb2e5997e89b /intern/elbeem | |
parent | 328eeaf10b342f3ec1b55e817b20b8742ee8adc8 (diff) |
- fixed fluidsim inflow speed init
- fixed intersecting fluid objects init
- added MSVC6 fixes from bjornmose (thanks!)
Diffstat (limited to 'intern/elbeem')
-rw-r--r-- | intern/elbeem/intern/cfgparser.cpp | 1 | ||||
-rw-r--r-- | intern/elbeem/intern/lbmfsgrsolver.h | 29 | ||||
-rw-r--r-- | intern/elbeem/intern/lbminterface.h | 10 | ||||
-rw-r--r-- | intern/elbeem/intern/ntl_bsptree.cpp | 10 | ||||
-rw-r--r-- | intern/elbeem/intern/ntl_bsptree.h | 2 | ||||
-rw-r--r-- | intern/elbeem/intern/ntl_vector3dim.h | 6 | ||||
-rw-r--r-- | intern/elbeem/intern/parametrizer.cpp | 4 | ||||
-rw-r--r-- | intern/elbeem/intern/simulation_object.h | 6 |
8 files changed, 43 insertions, 25 deletions
diff --git a/intern/elbeem/intern/cfgparser.cpp b/intern/elbeem/intern/cfgparser.cpp index 8984fce107c..22f2af8f962 100644 --- a/intern/elbeem/intern/cfgparser.cpp +++ b/intern/elbeem/intern/cfgparser.cpp @@ -1233,6 +1233,7 @@ yysymprint (yyoutput, yytype, yyvaluep) # endif switch (yytype) { + case 0: default: break; } diff --git a/intern/elbeem/intern/lbmfsgrsolver.h b/intern/elbeem/intern/lbmfsgrsolver.h index d9622fd65ac..febfe5da59c 100644 --- a/intern/elbeem/intern/lbmfsgrsolver.h +++ b/intern/elbeem/intern/lbmfsgrsolver.h @@ -103,6 +103,8 @@ ERROR - define model first! #define FSGR_MAGICNR 0.025 //0.04 +//! maxmimum no. of grid levels +#define FSGR_MAXNOOFLEVELS 5 // helper for comparing floats with epsilon #define GFX_FLOATNEQ(x,y) ( ABS((x)-(y)) > (VECTOR_EPSILON) ) @@ -421,7 +423,11 @@ class LbmFsgrSolver : //bool mStartSymm; //! kepp track of max/min no. of filled cells int mMaxNoCells, mMinNoCells; +#ifndef USE_MSVC6FIXES long long int mAvgNumUsedCells; +#else + _int64 mAvgNumUsedCells; +#endif //! for interactive - how to drop drops? int mDropMode; @@ -441,8 +447,7 @@ class LbmFsgrSolver : // grid coarsening vars /*! vector for the data for each level */ -# define MAX_LEV 5 - FsgrLevelData mLevel[MAX_LEV]; + FsgrLevelData mLevel[FSGR_MAXNOOFLEVELS]; /*! minimal and maximal refinement levels */ int mMaxRefine; @@ -1386,6 +1391,8 @@ LbmFsgrSolver<D>::parseAttrList() // refinement mMaxRefine = D::mpAttrs->readInt("maxrefine", mMaxRefine ,"LbmFsgrSolver", "mMaxRefine", true); + if(mMaxRefine<0) mMaxRefine=0; + if(mMaxRefine>FSGR_MAXNOOFLEVELS) mMaxRefine=FSGR_MAXNOOFLEVELS-1; mDisableStandingFluidInit = D::mpAttrs->readInt("disable_stfluidinit", mDisableStandingFluidInit,"LbmFsgrSolver", "mDisableStandingFluidInit", false); mForceTadapRefine = D::mpAttrs->readInt("forcetadaprefine", mForceTadapRefine,"LbmFsgrSolver", "mForceTadapRefine", false); @@ -1569,10 +1576,7 @@ LbmFsgrSolver<D>::initialize( ntlTree* /*tree*/, vector<ntlGeometryObject*>* /*o // init vectors - if(mMaxRefine >= MAX_LEV) { - errFatal("LbmFsgrSolver::initializeLbmGridref"," error: Too many levels!", SIMWORLD_INITERROR); - return false; - } + //if(mMaxRefine >= FSGR_MAXNOOFLEVELS) { errFatal("LbmFsgrSolver::initializeLbmGridref"," error: Too many levels!", SIMWORLD_INITERROR); return false; } for(int i=0; i<=mMaxRefine; i++) { mLevel[i].id = i; mLevel[i].nodeSize = 0.0; @@ -2043,10 +2047,9 @@ LbmFsgrSolver<D>::initGeometryFlags() { } if(ntype != CFInvalid) { // initDefaultCell - if((ntype == CFMbndInflow) || (ntype == CFMbndOutflow) ) { + if((ntype & CFMbndInflow) || (ntype & CFMbndOutflow) ) { ntype |= (OId<<24); } - initVelocityCell(level, i,j,k, ntype, rhomass, rhomass, mObjectSpeeds[OId] ); } @@ -2058,7 +2061,7 @@ LbmFsgrSolver<D>::initGeometryFlags() { dcnt += dvec[0]; i++; savedNodes++; if(ntype != CFInvalid) { - // rhomass are still inited from above + // rho,mass,OId are still inited from above initVelocityCell(level, i,j,k, ntype, rhomass, rhomass, mObjectSpeeds[OId] ); } } @@ -2699,7 +2702,9 @@ LbmFsgrSolver<D>::stepMain() "mlsups(curr:"<<D::mMLSUPS<< " avg:"<<(mAvgMLSUPS/mAvgMLSUPSCnt)<<"), "<< sepStr<< " totcls:"<<(D::mNumUsedCells)<< sepStr<< +#ifndef USE_MSVC6FIXES " avgcls:"<< (int)(mAvgNumUsedCells/(long long int)D::mStepCnt)<< sepStr<< +#endif " intd:"<<mNumInterdCells<< sepStr<< " invif:"<<mNumInvIfCells<< sepStr<< " invift:"<<mNumInvIfTotal<< sepStr<< @@ -4461,8 +4466,8 @@ LbmFsgrSolver<D>::adaptTimestep() bool rescale = false; // do any rescale at all? LbmFloat scaleFac = -1.0; // timestep scaling - LbmFloat levOldOmega[MAX_LEV]; - LbmFloat levOldStepsize[MAX_LEV]; + LbmFloat levOldOmega[FSGR_MAXNOOFLEVELS]; + LbmFloat levOldStepsize[FSGR_MAXNOOFLEVELS]; for(int lev=mMaxRefine; lev>=0 ; lev--) { levOldOmega[lev] = mLevel[lev].omega; levOldStepsize[lev] = mLevel[lev].stepsize; @@ -6180,8 +6185,8 @@ void LbmFsgrSolver<D>::recalculateObjectSpeeds() { } mObjectSpeeds.resize(numobjs+0); for(int i=0; i<(int)(numobjs+0); i++) { - //errMsg("recalculateObjectSpeeds","id"<<i<<" "<<vec2L(D::mpParam->calculateLattVelocityFromRw( vec2P( (*D::mpGiObjects)[i]->getInitialVelocity() )) )); mObjectSpeeds[i] = vec2L(D::mpParam->calculateLattVelocityFromRw( vec2P( (*D::mpGiObjects)[i]->getInitialVelocity() ))); + //errMsg("recalculateObjectSpeeds","id"<<i<<" set to "<< mObjectSpeeds[i]<<", unscaled:"<< (*D::mpGiObjects)[i]->getInitialVelocity() )); } } diff --git a/intern/elbeem/intern/lbminterface.h b/intern/elbeem/intern/lbminterface.h index 294d6a76627..073558e1309 100644 --- a/intern/elbeem/intern/lbminterface.h +++ b/intern/elbeem/intern/lbminterface.h @@ -294,11 +294,11 @@ class LbmSolverInterface ntlVec3Gfx getGeoMaxInitialVelocity(); /* rt interface functions */ - unsigned int getIsoVertexCount() { return mpIso->getIsoVertexCount(); } - unsigned int getIsoIndexCount() { return mpIso->getIsoIndexCount(); } - char* getIsoVertexArray() { return mpIso->getIsoVertexArray(); } - unsigned int *getIsoIndexArray() { return mpIso->getIsoIndexArray(); } - void triangulateSurface() { return mpIso->triangulate(); } + unsigned int getIsoVertexCount() { return mpIso->getIsoVertexCount(); } + unsigned int getIsoIndexCount() { return mpIso->getIsoIndexCount(); } + char* getIsoVertexArray() { return mpIso->getIsoVertexArray(); } + unsigned int *getIsoIndexArray() { return mpIso->getIsoIndexArray(); } + void triangulateSurface() { mpIso->triangulate(); } /* access functions */ diff --git a/intern/elbeem/intern/ntl_bsptree.cpp b/intern/elbeem/intern/ntl_bsptree.cpp index 43d45130ca6..0c6cdbd3d83 100644 --- a/intern/elbeem/intern/ntl_bsptree.cpp +++ b/intern/elbeem/intern/ntl_bsptree.cpp @@ -886,14 +886,14 @@ gfxReal ntlTree::distanceToPlane(BSPNode *curr, ntlVec3Gfx plane, ntlRay ray) co /****************************************************************************** * return ordering of children nodes relatice to origin point *****************************************************************************/ -void ntlTree::getChildren(BSPNode *curr, ntlVec3Gfx origin, BSPNode *&near, BSPNode *&far) const +void ntlTree::getChildren(BSPNode *curr, ntlVec3Gfx origin, BSPNode *&node_near, BSPNode *&node_far) const { if(curr->child[0]->max[ curr->axis ] >= origin[ curr->axis ]) { - near = curr->child[0]; - far = curr->child[1]; + node_near = curr->child[0]; + node_far = curr->child[1]; } else { - near = curr->child[1]; - far = curr->child[0]; + node_near = curr->child[1]; + node_far = curr->child[0]; } } diff --git a/intern/elbeem/intern/ntl_bsptree.h b/intern/elbeem/intern/ntl_bsptree.h index b2d24fd318a..d9746532fc0 100644 --- a/intern/elbeem/intern/ntl_bsptree.h +++ b/intern/elbeem/intern/ntl_bsptree.h @@ -66,7 +66,7 @@ class ntlTree gfxReal distanceToPlane(BSPNode *curr, ntlVec3Gfx plane, ntlRay ray) const; //! return ordering of children nodes relatice to origin point - void getChildren(BSPNode *curr, ntlVec3Gfx origin, BSPNode *&near, BSPNode *&far) const; + void getChildren(BSPNode *curr, ntlVec3Gfx origin, BSPNode *&node_near, BSPNode *&node_far) const; //! delete a node of the tree with all sub nodes, dont delete root members void deleteNode(BSPNode *curr); diff --git a/intern/elbeem/intern/ntl_vector3dim.h b/intern/elbeem/intern/ntl_vector3dim.h index fe43fab462f..acda16b3bbb 100644 --- a/intern/elbeem/intern/ntl_vector3dim.h +++ b/intern/elbeem/intern/ntl_vector3dim.h @@ -23,19 +23,21 @@ #include <string.h> #include <stdio.h> -// hack for dxxx MSVC6.0 compiler +// hack for MSVC6.0 compiler #ifdef _MSC_VER #if _MSC_VER < 1300 #define for if(false); else for #define map std::map #define vector std::vector #define string std::string +// use this define for MSVC6 stuff hereafter +#define USE_MSVC6FIXES #else // _MSC_VER < 1300 , 7.0 or higher using std::map; using std::vector; using std::string; #endif -#else // MSVC6 +#else // not MSVC6 // for proper compilers... using std::map; using std::vector; diff --git a/intern/elbeem/intern/parametrizer.cpp b/intern/elbeem/intern/parametrizer.cpp index 8b5a9772923..6f6d275aa2f 100644 --- a/intern/elbeem/intern/parametrizer.cpp +++ b/intern/elbeem/intern/parametrizer.cpp @@ -96,6 +96,10 @@ void Parametrizer::parseAttrList() mDomainSize = mpAttrs->readFloat("p_domainsize",mDomainSize, "Parametrizer","mDomainSize", false); if(getAttributeList()->exists("p_domainsize")) seenThis( PARAM_DOMAINSIZE ); + if(mDomainSize<=0.0) { + errMsg("Parametrizer::parseAttrList","Invalid real world domain size:"<<mAniFrameTime<<", resetting to 0.1"); + mDomainSize = 0.1; + } mGravity = mpAttrs->readVec3d("p_gravity",mGravity, "Parametrizer","mGravity", false); if(getAttributeList()->exists("p_gravity")) seenThis( PARAM_GRAVITY ); diff --git a/intern/elbeem/intern/simulation_object.h b/intern/elbeem/intern/simulation_object.h index ec84ab02bd3..84a0fd8222a 100644 --- a/intern/elbeem/intern/simulation_object.h +++ b/intern/elbeem/intern/simulation_object.h @@ -162,7 +162,13 @@ class SimulationObject : bool mShowParticles; /*! debug display settings */ +#ifndef USE_MSVC6FIXES static const int MAX_DEBDISPSET = 10; +#else + // so this is a known and documented MSVC6 bug + // work around + enum {MAX_DEBDISPSET = 10}; +#endif fluidDispSettings mDebDispSet[ MAX_DEBDISPSET ]; /*! pointer to identifier of selected node */ |