30 #include <unordered_map>
35 using std::unordered_map;
125 return mTotalCellsHigh;
145 return mResXParticle;
149 return mResYParticle;
153 return mResZParticle;
185 return mUpresParticle;
223 return mGuideVelocityX;
227 return mGuideVelocityY;
231 return mGuideVelocityZ;
397 return mPhiObsStaticIn;
409 return mPhiOutStaticIn;
426 return (mMeshNodes && !mMeshNodes->empty()) ? mMeshNodes->size() : 0;
430 return (mMeshNodes && !mMeshNodes->empty()) ? mMeshNodes->size() : 0;
434 return (mMeshTriangles && !mMeshTriangles->empty()) ? mMeshTriangles->size() : 0;
440 if (mMeshNodes && !mMeshNodes->empty()) {
441 assert(i < mMeshNodes->
size());
442 return (*mMeshNodes)[i].pos[0];
449 if (mMeshNodes && !mMeshNodes->empty()) {
450 assert(i < mMeshNodes->
size());
451 return (*mMeshNodes)[i].pos[1];
458 if (mMeshNodes && !mMeshNodes->empty()) {
459 assert(i < mMeshNodes->
size());
460 return (*mMeshNodes)[i].pos[2];
468 if (mMeshNodes && !mMeshNodes->empty()) {
469 assert(i < mMeshNodes->
size());
470 return (*mMeshNodes)[i].normal[0];
477 if (mMeshNodes && !mMeshNodes->empty()) {
478 assert(i < mMeshNodes->
size());
479 return (*mMeshNodes)[i].normal[1];
486 if (mMeshNodes && !mMeshNodes->empty()) {
487 assert(i < mMeshNodes->
size());
488 return (*mMeshNodes)[i].normal[2];
496 if (mMeshTriangles && !mMeshTriangles->empty()) {
497 assert(i < mMeshTriangles->
size());
498 return (*mMeshTriangles)[i].c[0];
505 if (mMeshTriangles && !mMeshTriangles->empty()) {
506 assert(i < mMeshTriangles->
size());
507 return (*mMeshTriangles)[i].c[1];
514 if (mMeshTriangles && !mMeshTriangles->empty()) {
515 assert(i < mMeshTriangles->
size());
516 return (*mMeshTriangles)[i].c[2];
524 if (mMeshVelocities && !mMeshVelocities->empty()) {
525 assert(i < mMeshVelocities->
size());
526 return (*mMeshVelocities)[i].pos[0];
533 if (mMeshVelocities && !mMeshVelocities->empty()) {
534 assert(i < mMeshVelocities->
size());
535 return (*mMeshVelocities)[i].pos[1];
542 if (mMeshVelocities && !mMeshVelocities->empty()) {
543 assert(i < mMeshVelocities->
size());
544 return (*mMeshVelocities)[i].pos[2];
553 if (mFlipParticleData && !mFlipParticleData->empty()) {
554 assert(i < mFlipParticleData->
size());
555 return (*mFlipParticleData)[i].flag;
562 if (mParticleData && !mParticleData->empty()) {
563 assert(i < mParticleData->
size());
564 return (*mParticleData)[i].flag;
572 if (mFlipParticleData && !mFlipParticleData->empty()) {
573 assert(i < mFlipParticleData->
size());
574 return (*mFlipParticleData)[i].pos[0];
581 if (mFlipParticleData && !mFlipParticleData->empty()) {
582 assert(i < mFlipParticleData->
size());
583 return (*mFlipParticleData)[i].pos[1];
590 if (mFlipParticleData && !mFlipParticleData->empty()) {
591 assert(i < mFlipParticleData->
size());
592 return (*mFlipParticleData)[i].pos[2];
600 if (mParticleData && !mParticleData->empty()) {
601 assert(i < mParticleData->
size());
602 return (*mParticleData)[i].pos[0];
609 if (mParticleData && !mParticleData->empty()) {
610 assert(i < mParticleData->
size());
611 return (*mParticleData)[i].pos[1];
618 if (mParticleData && !mParticleData->empty()) {
619 assert(i < mParticleData->
size());
620 return (*mParticleData)[i].pos[2];
628 if (mFlipParticleVelocity && !mFlipParticleVelocity->empty()) {
629 assert(i < mFlipParticleVelocity->
size());
630 return (*mFlipParticleVelocity)[i].pos[0];
637 if (mFlipParticleVelocity && !mFlipParticleVelocity->empty()) {
638 assert(i < mFlipParticleVelocity->
size());
639 return (*mFlipParticleVelocity)[i].pos[1];
646 if (mFlipParticleVelocity && !mFlipParticleVelocity->empty()) {
647 assert(i < mFlipParticleVelocity->
size());
648 return (*mFlipParticleVelocity)[i].pos[2];
656 if (mParticleVelocity && !mParticleVelocity->empty()) {
657 assert(i < mParticleVelocity->
size());
658 return (*mParticleVelocity)[i].pos[0];
665 if (mParticleVelocity && !mParticleVelocity->empty()) {
666 assert(i < mParticleVelocity->
size());
667 return (*mParticleVelocity)[i].pos[1];
674 if (mParticleVelocity && !mParticleVelocity->empty()) {
675 assert(i < mParticleVelocity->
size());
676 return (*mParticleVelocity)[i].pos[2];
683 return (mFlipParticleData && !mFlipParticleData->empty()) ?
684 (
float *)&mFlipParticleData->front() :
689 return (mParticleData && !mParticleData->empty()) ? (
float *)&mParticleData->front() :
nullptr;
694 return (mFlipParticleVelocity && !mFlipParticleVelocity->empty()) ?
695 (
float *)&mFlipParticleVelocity->front() :
700 return (mParticleVelocity && !mParticleVelocity->empty()) ?
701 (
float *)&mParticleVelocity->front() :
706 return (mParticleLife && !mParticleLife->empty()) ? (
float *)&mParticleLife->front() :
nullptr;
711 return (mFlipParticleData && !mFlipParticleData->empty()) ? mFlipParticleData->size() : 0;
715 return (mParticleData && !mParticleData->empty()) ? mParticleData->size() : 0;
720 return mFlipFromFile;
724 return mMeshFromFile;
728 return mParticlesFromFile;
741 size_t mTotalCellsHigh;
742 size_t mTotalCellsMesh;
743 size_t mTotalCellsParticles;
745 unordered_map<string, string> mRNAMap;
748 const int mCurrentID;
755 bool mUsingFractions;
760 bool mUsingDiffusion;
761 bool mUsingViscosity;
772 bool mParticlesFromFile;
802 float *mGuideVelocityX;
803 float *mGuideVelocityY;
804 float *mGuideVelocityZ;
852 float *mPhiObsStaticIn;
855 float *mPhiOutStaticIn;
877 void initializeMantaflow();
878 void terminateMantaflow();
880 string getRealValue(
const string &varName);
881 string parseLine(
const string &line);
882 string parseScript(
const string &setup_string,
FluidModifierData *fmd =
nullptr);
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
std::vector< ElementType, Eigen::aligned_allocator< ElementType > > vector
bool exportSmokeScript(struct FluidModifierData *fmd)
float * getFlipParticleData()
int getTriangleXAt(int i)
float * getFlipParticleVelocity()
float * getGuideVelocityZ()
float getVertexZAt(int i)
float getFlipParticlePositionXAt(int i)
float * getGuideVelocityX()
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()
bool initOutflow(FluidModifierData *fmd=nullptr)
float getNormalZAt(int i)
float * getGuideVelocityY()
float getSndParticleVelocityYAt(int i)
bool writeConfiguration(FluidModifierData *fmd, int framenr)
float getSndParticleVelocityXAt(int i)
int getSndParticleFlagAt(int i)
float * getPhiObsStaticIn()
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)
float * getSndParticleVelocity()
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)
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)
float * getSndParticleLife()
bool initCurvature(FluidModifierData *fmd=nullptr)
bool hasGuiding(FluidModifierData *fmd, int framenr, bool sourceDomain)
bool initHeat(struct FluidModifierData *fmd=nullptr)
bool bakeParticles(FluidModifierData *fmd, int framenr)
MANTA(int *res, struct FluidModifierData *fmd)
float * getPhiOutStaticIn()
bool bakeData(FluidModifierData *fmd, int framenr)
float getNormalYAt(int i)
bool initInVelocity(FluidModifierData *fmd=nullptr)
void updatePointers(FluidModifierData *fmd, bool flush=false)
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()