Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNils Thuerey <nils@thuerey.de>2005-10-10 12:52:42 +0400
committerNils Thuerey <nils@thuerey.de>2005-10-10 12:52:42 +0400
commitd3d8441f678e8bf444a04e7379abc5322e4980b0 (patch)
tree98f844757059ca5eb1a77f24e1f2fb2e5997e89b /intern/elbeem
parent328eeaf10b342f3ec1b55e817b20b8742ee8adc8 (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.cpp1
-rw-r--r--intern/elbeem/intern/lbmfsgrsolver.h29
-rw-r--r--intern/elbeem/intern/lbminterface.h10
-rw-r--r--intern/elbeem/intern/ntl_bsptree.cpp10
-rw-r--r--intern/elbeem/intern/ntl_bsptree.h2
-rw-r--r--intern/elbeem/intern/ntl_vector3dim.h6
-rw-r--r--intern/elbeem/intern/parametrizer.cpp4
-rw-r--r--intern/elbeem/intern/simulation_object.h6
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 */