forked from bartvdbraak/blender
- fixed fluidsim inflow speed init
- fixed intersecting fluid objects init - added MSVC6 fixes from bjornmose (thanks!)
This commit is contained in:
parent
328eeaf10b
commit
d3d8441f67
@ -1233,6 +1233,7 @@ yysymprint (yyoutput, yytype, yyvaluep)
|
||||
# endif
|
||||
switch (yytype)
|
||||
{
|
||||
case 0:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -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() ));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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 */
|
||||
|
||||
|
@ -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];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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 );
|
||||
|
@ -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 */
|
||||
|
@ -555,13 +555,13 @@ void fluidsimBake(struct Object *ob)
|
||||
" define { \n" ;
|
||||
char *obstacleString =
|
||||
" geoinittype= \"" "%s" /* type */ "\"; #cfgset \n"
|
||||
" geoinit_intersect = 1; \n"
|
||||
" filename= \"" "%s" /* data filename */ "\"; #cfgset \n" ;
|
||||
char *fluidString =
|
||||
" geoinittype= \"" "%s" /* type */ "\"; \n"
|
||||
" filename= \"" "%s" /* data filename */ "\"; #cfgset \n"
|
||||
" initial_velocity= " "%f %f %f" /* vel vector */ "; #cfgset \n" ;
|
||||
char *objectStringEnd =
|
||||
" geoinit_intersect = 1; \n" /* always use accurate init here */
|
||||
" geoinitid= 1; \n"
|
||||
" } \n"
|
||||
" } \n"
|
||||
|
Loading…
Reference in New Issue
Block a user