15#include <unordered_map>
20using std::unordered_map;
40 float pos[3], normal[3];
110 return mTotalCellsHigh;
130 return mResXParticle;
134 return mResYParticle;
138 return mResZParticle;
170 return mUpresParticle;
208 return mGuideVelocityX;
212 return mGuideVelocityY;
216 return mGuideVelocityZ;
382 return mPhiObsStaticIn;
394 return mPhiOutStaticIn;
411 return (mMeshNodes && !mMeshNodes->empty()) ? mMeshNodes->size() : 0;
415 return (mMeshNodes && !mMeshNodes->empty()) ? mMeshNodes->size() : 0;
419 return (mMeshTriangles && !mMeshTriangles->empty()) ? mMeshTriangles->size() : 0;
425 if (mMeshNodes && !mMeshNodes->empty()) {
426 assert(i < mMeshNodes->
size());
427 return (*mMeshNodes)[i].pos[0];
434 if (mMeshNodes && !mMeshNodes->empty()) {
435 assert(i < mMeshNodes->
size());
436 return (*mMeshNodes)[i].pos[1];
443 if (mMeshNodes && !mMeshNodes->empty()) {
444 assert(i < mMeshNodes->
size());
445 return (*mMeshNodes)[i].pos[2];
453 if (mMeshNodes && !mMeshNodes->empty()) {
454 assert(i < mMeshNodes->
size());
455 return (*mMeshNodes)[i].normal[0];
462 if (mMeshNodes && !mMeshNodes->empty()) {
463 assert(i < mMeshNodes->
size());
464 return (*mMeshNodes)[i].normal[1];
471 if (mMeshNodes && !mMeshNodes->empty()) {
472 assert(i < mMeshNodes->
size());
473 return (*mMeshNodes)[i].normal[2];
481 if (mMeshTriangles && !mMeshTriangles->empty()) {
482 assert(i < mMeshTriangles->
size());
483 return (*mMeshTriangles)[i].c[0];
490 if (mMeshTriangles && !mMeshTriangles->empty()) {
491 assert(i < mMeshTriangles->
size());
492 return (*mMeshTriangles)[i].c[1];
499 if (mMeshTriangles && !mMeshTriangles->empty()) {
500 assert(i < mMeshTriangles->
size());
501 return (*mMeshTriangles)[i].c[2];
509 if (mMeshVelocities && !mMeshVelocities->empty()) {
510 assert(i < mMeshVelocities->
size());
511 return (*mMeshVelocities)[i].pos[0];
518 if (mMeshVelocities && !mMeshVelocities->empty()) {
519 assert(i < mMeshVelocities->
size());
520 return (*mMeshVelocities)[i].pos[1];
527 if (mMeshVelocities && !mMeshVelocities->empty()) {
528 assert(i < mMeshVelocities->
size());
529 return (*mMeshVelocities)[i].pos[2];
538 if (mFlipParticleData && !mFlipParticleData->empty()) {
539 assert(i < mFlipParticleData->
size());
540 return (*mFlipParticleData)[i].flag;
547 if (mParticleData && !mParticleData->empty()) {
548 assert(i < mParticleData->
size());
549 return (*mParticleData)[i].flag;
557 if (mFlipParticleData && !mFlipParticleData->empty()) {
558 assert(i < mFlipParticleData->
size());
559 return (*mFlipParticleData)[i].pos[0];
566 if (mFlipParticleData && !mFlipParticleData->empty()) {
567 assert(i < mFlipParticleData->
size());
568 return (*mFlipParticleData)[i].pos[1];
575 if (mFlipParticleData && !mFlipParticleData->empty()) {
576 assert(i < mFlipParticleData->
size());
577 return (*mFlipParticleData)[i].pos[2];
585 if (mParticleData && !mParticleData->empty()) {
586 assert(i < mParticleData->
size());
587 return (*mParticleData)[i].pos[0];
594 if (mParticleData && !mParticleData->empty()) {
595 assert(i < mParticleData->
size());
596 return (*mParticleData)[i].pos[1];
603 if (mParticleData && !mParticleData->empty()) {
604 assert(i < mParticleData->
size());
605 return (*mParticleData)[i].pos[2];
613 if (mFlipParticleVelocity && !mFlipParticleVelocity->empty()) {
614 assert(i < mFlipParticleVelocity->
size());
615 return (*mFlipParticleVelocity)[i].pos[0];
622 if (mFlipParticleVelocity && !mFlipParticleVelocity->empty()) {
623 assert(i < mFlipParticleVelocity->
size());
624 return (*mFlipParticleVelocity)[i].pos[1];
631 if (mFlipParticleVelocity && !mFlipParticleVelocity->empty()) {
632 assert(i < mFlipParticleVelocity->
size());
633 return (*mFlipParticleVelocity)[i].pos[2];
641 if (mParticleVelocity && !mParticleVelocity->empty()) {
642 assert(i < mParticleVelocity->
size());
643 return (*mParticleVelocity)[i].pos[0];
650 if (mParticleVelocity && !mParticleVelocity->empty()) {
651 assert(i < mParticleVelocity->
size());
652 return (*mParticleVelocity)[i].pos[1];
659 if (mParticleVelocity && !mParticleVelocity->empty()) {
660 assert(i < mParticleVelocity->
size());
661 return (*mParticleVelocity)[i].pos[2];
668 return (mFlipParticleData && !mFlipParticleData->empty()) ?
669 (
float *)&mFlipParticleData->front() :
674 return (mParticleData && !mParticleData->empty()) ? (
float *)&mParticleData->front() :
nullptr;
679 return (mFlipParticleVelocity && !mFlipParticleVelocity->empty()) ?
680 (
float *)&mFlipParticleVelocity->front() :
685 return (mParticleVelocity && !mParticleVelocity->empty()) ?
686 (
float *)&mParticleVelocity->front() :
691 return (mParticleLife && !mParticleLife->empty()) ? (
float *)&mParticleLife->front() :
nullptr;
696 return (mFlipParticleData && !mFlipParticleData->empty()) ? mFlipParticleData->size() : 0;
700 return (mParticleData && !mParticleData->empty()) ? mParticleData->size() : 0;
705 return mFlipFromFile;
709 return mMeshFromFile;
713 return mParticlesFromFile;
726 size_t mTotalCellsHigh;
727 size_t mTotalCellsMesh;
728 size_t mTotalCellsParticles;
730 unordered_map<string, string> mRNAMap;
733 const int mCurrentID;
740 bool mUsingFractions;
745 bool mUsingDiffusion;
746 bool mUsingViscosity;
757 bool mParticlesFromFile;
787 float *mGuideVelocityX;
788 float *mGuideVelocityY;
789 float *mGuideVelocityZ;
837 float *mPhiObsStaticIn;
840 float *mPhiOutStaticIn;
862 void initializeMantaflow();
863 void terminateMantaflow();
865 string getRealValue(
const string &varName);
866 string parseLine(
const string &line);
867 string parseScript(
const string &setup_string,
FluidModifierData *fmd =
nullptr);
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
bool exportSmokeScript(struct FluidModifierData *fmd)
int getTriangleXAt(int i)
float getVertexZAt(int i)
float getFlipParticlePositionXAt(int i)
bool bakeNoise(FluidModifierData *fmd, int framenr)
bool writeNoise(FluidModifierData *fmd, int framenr)
float getSndParticlePositionXAt(int i)
bool initFireHigh(struct FluidModifierData *fmd=nullptr)
bool hasNoise(FluidModifierData *fmd, int framenr)
bool exportLiquidScript(struct FluidModifierData *fmd)
bool readData(FluidModifierData *fmd, int framenr, bool resumable)
int getNumFlipParticles()
float * getSndParticleLife()
bool initOutflow(FluidModifierData *fmd=nullptr)
float getNormalZAt(int i)
float getSndParticleVelocityYAt(int i)
bool writeConfiguration(FluidModifierData *fmd, int framenr)
float getSndParticleVelocityXAt(int i)
int getSndParticleFlagAt(int i)
bool initFire(struct FluidModifierData *fmd=nullptr)
bool writeData(FluidModifierData *fmd, int framenr)
float getVertVelXAt(int i)
float getSndParticlePositionZAt(int i)
float getVertVelYAt(int i)
float getFlipParticleVelocityYAt(int i)
bool needsRealloc(FluidModifierData *fmd)
bool readParticles(FluidModifierData *fmd, int framenr, bool resumable)
bool readMesh(FluidModifierData *fmd, int framenr)
bool readGuiding(FluidModifierData *fmd, int framenr, bool sourceDomain)
bool initLiquidViscosity(FluidModifierData *fmd=nullptr)
float getSndParticlePositionYAt(int i)
bool bakeMesh(FluidModifierData *fmd, int framenr)
bool initLiquid(FluidModifierData *fmd=nullptr)
bool initFractions(FluidModifierData *fmd=nullptr)
bool initLiquidMesh(FluidModifierData *fmd=nullptr)
float getVertexXAt(int i)
bool hasMesh(FluidModifierData *fmd, int framenr)
int getTriangleZAt(int i)
float getNormalXAt(int i)
bool initGuiding(FluidModifierData *fmd=nullptr)
bool readConfiguration(FluidModifierData *fmd, int framenr)
int getFlipParticleFlagAt(int i)
float getFlipParticleVelocityXAt(int i)
bool bakeGuiding(FluidModifierData *fmd, int framenr)
size_t getTotalCellsHigh()
float getSndParticleVelocityZAt(int i)
float getFlipParticleVelocityZAt(int i)
static atomic< int > solverID
struct MANTA::Triangle Triangle
bool hasParticles(FluidModifierData *fmd, int framenr)
bool initColorsHigh(struct FluidModifierData *fmd=nullptr)
bool initObstacle(FluidModifierData *fmd=nullptr)
float * getPhiOutStaticIn()
bool initColors(struct FluidModifierData *fmd=nullptr)
bool readNoise(FluidModifierData *fmd, int framenr, bool resumable)
float getVertVelZAt(int i)
int getTriangleYAt(int i)
bool initSndParts(FluidModifierData *fmd=nullptr)
bool initCurvature(FluidModifierData *fmd=nullptr)
float * getGuideVelocityY()
bool hasGuiding(FluidModifierData *fmd, int framenr, bool sourceDomain)
float * getGuideVelocityZ()
float * getFlipParticleData()
bool initHeat(struct FluidModifierData *fmd=nullptr)
bool bakeParticles(FluidModifierData *fmd, int framenr)
MANTA(int *res, struct FluidModifierData *fmd)
float * getSndParticleVelocity()
bool bakeData(FluidModifierData *fmd, int framenr)
float getNormalYAt(int i)
bool initInVelocity(FluidModifierData *fmd=nullptr)
float * getPhiObsStaticIn()
void updatePointers(FluidModifierData *fmd, bool flush=false)
float * getFlipParticleVelocity()
float * getGuideVelocityX()
float getFlipParticlePositionYAt(int i)
struct MANTA::PData pData
bool hasData(FluidModifierData *fmd, int framenr)
float getVertexYAt(int i)
bool updateVariables(FluidModifierData *fmd)
float getFlipParticlePositionZAt(int i)
bool hasConfig(FluidModifierData *fmd, int framenr)
bool initLiquidSndParts(FluidModifierData *fmd=nullptr)
bool usingParticleFromFile()
float * getSndParticleData()