15#include <unordered_map>
20using std::unordered_map;
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()) {
427 return (*mMeshNodes)[
i].pos[0];
434 if (mMeshNodes && !mMeshNodes->empty()) {
436 return (*mMeshNodes)[
i].pos[1];
443 if (mMeshNodes && !mMeshNodes->empty()) {
445 return (*mMeshNodes)[
i].pos[2];
453 if (mMeshNodes && !mMeshNodes->empty()) {
455 return (*mMeshNodes)[
i].normal[0];
462 if (mMeshNodes && !mMeshNodes->empty()) {
464 return (*mMeshNodes)[
i].normal[1];
471 if (mMeshNodes && !mMeshNodes->empty()) {
473 return (*mMeshNodes)[
i].normal[2];
481 if (mMeshTriangles && !mMeshTriangles->empty()) {
483 return (*mMeshTriangles)[
i].c[0];
490 if (mMeshTriangles && !mMeshTriangles->empty()) {
492 return (*mMeshTriangles)[
i].c[1];
499 if (mMeshTriangles && !mMeshTriangles->empty()) {
501 return (*mMeshTriangles)[
i].c[2];
509 if (mMeshVelocities && !mMeshVelocities->empty()) {
511 return (*mMeshVelocities)[
i].pos[0];
518 if (mMeshVelocities && !mMeshVelocities->empty()) {
520 return (*mMeshVelocities)[
i].pos[1];
527 if (mMeshVelocities && !mMeshVelocities->empty()) {
529 return (*mMeshVelocities)[
i].pos[2];
538 if (mFlipParticleData && !mFlipParticleData->empty()) {
540 return (*mFlipParticleData)[
i].flag;
547 if (mParticleData && !mParticleData->empty()) {
549 return (*mParticleData)[
i].flag;
557 if (mFlipParticleData && !mFlipParticleData->empty()) {
559 return (*mFlipParticleData)[
i].pos[0];
566 if (mFlipParticleData && !mFlipParticleData->empty()) {
568 return (*mFlipParticleData)[
i].pos[1];
575 if (mFlipParticleData && !mFlipParticleData->empty()) {
577 return (*mFlipParticleData)[
i].pos[2];
585 if (mParticleData && !mParticleData->empty()) {
587 return (*mParticleData)[
i].pos[0];
594 if (mParticleData && !mParticleData->empty()) {
596 return (*mParticleData)[
i].pos[1];
603 if (mParticleData && !mParticleData->empty()) {
605 return (*mParticleData)[
i].pos[2];
613 if (mFlipParticleVelocity && !mFlipParticleVelocity->empty()) {
615 return (*mFlipParticleVelocity)[
i].pos[0];
622 if (mFlipParticleVelocity && !mFlipParticleVelocity->empty()) {
624 return (*mFlipParticleVelocity)[
i].pos[1];
631 if (mFlipParticleVelocity && !mFlipParticleVelocity->empty()) {
633 return (*mFlipParticleVelocity)[
i].pos[2];
641 if (mParticleVelocity && !mParticleVelocity->empty()) {
643 return (*mParticleVelocity)[
i].pos[0];
650 if (mParticleVelocity && !mParticleVelocity->empty()) {
652 return (*mParticleVelocity)[
i].pos[1];
659 if (mParticleVelocity && !mParticleVelocity->empty()) {
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;
725 size_t mTotalCells = -1;
726 size_t mTotalCellsHigh = -1;
727 size_t mTotalCellsMesh = -1;
728 size_t mTotalCellsParticles = -1;
730 unordered_map<string, string> mRNAMap;
733 const int mCurrentID;
735 bool mUsingHeat =
false;
736 bool mUsingColors =
false;
737 bool mUsingFire =
false;
738 bool mUsingObstacle =
false;
739 bool mUsingGuiding =
false;
740 bool mUsingFractions =
false;
741 bool mUsingInvel =
false;
742 bool mUsingOutflow =
false;
743 bool mUsingNoise =
false;
744 bool mUsingMesh =
false;
745 bool mUsingDiffusion =
false;
746 bool mUsingViscosity =
false;
747 bool mUsingMVel =
false;
748 bool mUsingLiquid =
false;
749 bool mUsingSmoke =
false;
750 bool mUsingDrops =
false;
751 bool mUsingBubbles =
false;
752 bool mUsingFloats =
false;
753 bool mUsingTracers =
false;
755 bool mFlipFromFile =
false;
756 bool mMeshFromFile =
false;
757 bool mParticlesFromFile =
false;
758 bool mSmokeFromFile =
false;
759 bool mNoiseFromFile =
false;
772 int mResXParticle = -1;
773 int mResYParticle = -1;
774 int mResZParticle = -1;
775 int *mResGuiding =
nullptr;
778 int mUpresParticle = -1;
781 float *mVelocityX =
nullptr;
782 float *mVelocityY =
nullptr;
783 float *mVelocityZ =
nullptr;
784 float *mObVelocityX =
nullptr;
785 float *mObVelocityY =
nullptr;
786 float *mObVelocityZ =
nullptr;
787 float *mGuideVelocityX =
nullptr;
788 float *mGuideVelocityY =
nullptr;
789 float *mGuideVelocityZ =
nullptr;
790 float *mInVelocityX =
nullptr;
791 float *mInVelocityY =
nullptr;
792 float *mInVelocityZ =
nullptr;
793 float *mForceX =
nullptr;
794 float *mForceY =
nullptr;
795 float *mForceZ =
nullptr;
796 int *mFlags =
nullptr;
797 float *mNumObstacle =
nullptr;
798 float *mNumGuide =
nullptr;
799 float *mPressure =
nullptr;
802 float *mDensity =
nullptr;
803 float *mHeat =
nullptr;
804 float *mFlame =
nullptr;
805 float *mFuel =
nullptr;
806 float *mReact =
nullptr;
807 float *mColorR =
nullptr;
808 float *mColorG =
nullptr;
809 float *mColorB =
nullptr;
810 float *mShadow =
nullptr;
811 float *mDensityIn =
nullptr;
812 float *mHeatIn =
nullptr;
813 float *mFuelIn =
nullptr;
814 float *mReactIn =
nullptr;
815 float *mEmissionIn =
nullptr;
816 float *mColorRIn =
nullptr;
817 float *mColorGIn =
nullptr;
818 float *mColorBIn =
nullptr;
819 float *mDensityHigh =
nullptr;
820 float *mFlameHigh =
nullptr;
821 float *mFuelHigh =
nullptr;
822 float *mReactHigh =
nullptr;
823 float *mColorRHigh =
nullptr;
824 float *mColorGHigh =
nullptr;
825 float *mColorBHigh =
nullptr;
826 float *mTextureU =
nullptr;
827 float *mTextureV =
nullptr;
828 float *mTextureW =
nullptr;
829 float *mTextureU2 =
nullptr;
830 float *mTextureV2 =
nullptr;
831 float *mTextureW2 =
nullptr;
834 float *mPhiIn =
nullptr;
835 float *mPhiStaticIn =
nullptr;
836 float *mPhiObsIn =
nullptr;
837 float *mPhiObsStaticIn =
nullptr;
838 float *mPhiGuideIn =
nullptr;
839 float *mPhiOutIn =
nullptr;
840 float *mPhiOutStaticIn =
nullptr;
841 float *mPhi =
nullptr;
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)
#define assert(assertion)
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
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)
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()