diff options
Diffstat (limited to 'intern/mantaflow/intern/MANTA_main.h')
-rw-r--r-- | intern/mantaflow/intern/MANTA_main.h | 177 |
1 files changed, 110 insertions, 67 deletions
diff --git a/intern/mantaflow/intern/MANTA_main.h b/intern/mantaflow/intern/MANTA_main.h index dd003d13f51..6a8484c75d9 100644 --- a/intern/mantaflow/intern/MANTA_main.h +++ b/intern/mantaflow/intern/MANTA_main.h @@ -24,10 +24,16 @@ #ifndef MANTA_A_H #define MANTA_A_H -#include <string> -#include <vector> #include <atomic> #include <cassert> +#include <string> +#include <unordered_map> +#include <vector> + +using std::atomic; +using std::string; +using std::unordered_map; +using std::vector; struct MANTA { public: @@ -54,60 +60,83 @@ struct MANTA { int flags; } Triangle; + // Cache helper typedefs + typedef struct GridItem { + void **pointer; /* Array of pointers for this grid.*/ + int type; + int *res; + string name; + } GridItem; + + typedef struct FileItem { + string filename; + vector<GridItem> grids; + } FileItem; + // Manta step, handling everything void step(struct FluidModifierData *mmd, int startFrame); // Grid initialization functions - void initHeat(struct FluidModifierData *mmd); - void initFire(struct FluidModifierData *mmd); - void initColors(struct FluidModifierData *mmd); - void initFireHigh(struct FluidModifierData *mmd); - void initColorsHigh(struct FluidModifierData *mmd); - void initLiquid(FluidModifierData *mmd); - void initLiquidMesh(FluidModifierData *mmd); - void initObstacle(FluidModifierData *mmd); - void initGuiding(FluidModifierData *mmd); - void initFractions(FluidModifierData *mmd); - void initInVelocity(FluidModifierData *mmd); - void initOutflow(FluidModifierData *mmd); - void initSndParts(FluidModifierData *mmd); - void initLiquidSndParts(FluidModifierData *mmd); + void initHeat(struct FluidModifierData *mmd = NULL); + void initFire(struct FluidModifierData *mmd = NULL); + void initColors(struct FluidModifierData *mmd = NULL); + void initFireHigh(struct FluidModifierData *mmd = NULL); + void initColorsHigh(struct FluidModifierData *mmd = NULL); + void initLiquid(FluidModifierData *mmd = NULL); + void initLiquidMesh(FluidModifierData *mmd = NULL); + void initObstacle(FluidModifierData *mmd = NULL); + void initCurvature(FluidModifierData *mmd = NULL); + void initGuiding(FluidModifierData *mmd = NULL); + void initFractions(FluidModifierData *mmd = NULL); + void initInVelocity(FluidModifierData *mmd = NULL); + void initOutflow(FluidModifierData *mmd = NULL); + void initSndParts(FluidModifierData *mmd = NULL); + void initLiquidSndParts(FluidModifierData *mmd = NULL); // Pointer transfer: Mantaflow -> Blender void updatePointers(); // Write cache - int writeConfiguration(FluidModifierData *mmd, int framenr); - int writeData(FluidModifierData *mmd, int framenr); - // write call for noise, mesh and particles were left in bake calls for now + bool writeConfiguration(FluidModifierData *mmd, int framenr); + bool writeData(FluidModifierData *mmd, int framenr); + bool writeNoise(FluidModifierData *mmd, int framenr); + // write calls for mesh and particles were left in bake calls for now // Read cache (via Manta save/load) - int readConfiguration(FluidModifierData *mmd, int framenr); - int readData(FluidModifierData *mmd, int framenr); - int readNoise(FluidModifierData *mmd, int framenr); - int readMesh(FluidModifierData *mmd, int framenr); - int readParticles(FluidModifierData *mmd, int framenr); - int readGuiding(FluidModifierData *mmd, int framenr, bool sourceDomain); + bool readConfiguration(FluidModifierData *mmd, int framenr); + bool readData(FluidModifierData *mmd, int framenr); + bool readNoise(FluidModifierData *mmd, int framenr); + bool readMesh(FluidModifierData *mmd, int framenr); + bool readParticles(FluidModifierData *mmd, int framenr); + bool readGuiding(FluidModifierData *mmd, int framenr, bool sourceDomain); // Read cache (via file read functions in MANTA - e.g. read .bobj.gz meshes, .uni particles) - int updateMeshStructures(FluidModifierData *mmd, int framenr); - int updateFlipStructures(FluidModifierData *mmd, int framenr); - int updateParticleStructures(FluidModifierData *mmd, int framenr); - int updateSmokeStructures(FluidModifierData *mmd, int framenr); - int updateNoiseStructures(FluidModifierData *mmd, int framenr); - void updateVariables(FluidModifierData *mmd); + bool updateMeshStructures(FluidModifierData *mmd, int framenr); + bool updateFlipStructures(FluidModifierData *mmd, int framenr); + bool updateParticleStructures(FluidModifierData *mmd, int framenr); + bool updateSmokeStructures(FluidModifierData *mmd, int framenr); + bool updateNoiseStructures(FluidModifierData *mmd, int framenr); + bool updateVariables(FluidModifierData *mmd); // Bake cache - int bakeData(FluidModifierData *mmd, int framenr); - int bakeNoise(FluidModifierData *mmd, int framenr); - int bakeMesh(FluidModifierData *mmd, int framenr); - int bakeParticles(FluidModifierData *mmd, int framenr); - int bakeGuiding(FluidModifierData *mmd, int framenr); + bool bakeData(FluidModifierData *mmd, int framenr); + bool bakeNoise(FluidModifierData *mmd, int framenr); + bool bakeMesh(FluidModifierData *mmd, int framenr); + bool bakeParticles(FluidModifierData *mmd, int framenr); + bool bakeGuiding(FluidModifierData *mmd, int framenr); // IO for Mantaflow scene script void exportSmokeScript(struct FluidModifierData *mmd); void exportLiquidScript(struct FluidModifierData *mmd); + // Check cache status by frame + bool hasConfig(FluidModifierData *mmd, int framenr); + bool hasData(FluidModifierData *mmd, int framenr); + bool hasNoise(FluidModifierData *mmd, int framenr); + bool hasMesh(FluidModifierData *mmd, int framenr); + bool hasParticles(FluidModifierData *mmd, int framenr); + bool hasGuiding(FluidModifierData *mmd, int framenr, bool sourceDomain); + inline size_t getTotalCells() { return mTotalCells; @@ -396,13 +425,16 @@ struct MANTA { { return mPhiOutIn; } + inline float *getPhiOutStaticIn() + { + return mPhiOutStaticIn; + } inline float *getPhi() { return mPhi; } - static std::atomic<bool> mantaInitialized; - static std::atomic<int> solverID; + static atomic<int> solverID; static int with_debug; // on or off (1 or 0), also sets manta debug level // Mesh getters @@ -729,6 +761,8 @@ struct MANTA { size_t mTotalCellsMesh; size_t mTotalCellsParticles; + unordered_map<string, string> mRNAMap; + int mCurrentID; bool mUsingHeat; @@ -741,6 +775,7 @@ struct MANTA { bool mUsingOutflow; bool mUsingNoise; bool mUsingMesh; + bool mUsingDiffusion; bool mUsingMVel; bool mUsingLiquid; bool mUsingSmoke; @@ -836,42 +871,50 @@ struct MANTA { float *mPhiObsStaticIn; float *mPhiGuideIn; float *mPhiOutIn; + float *mPhiOutStaticIn; float *mPhi; // Mesh fields - std::vector<Node> *mMeshNodes; - std::vector<Triangle> *mMeshTriangles; - std::vector<pVel> *mMeshVelocities; + vector<Node> *mMeshNodes; + vector<Triangle> *mMeshTriangles; + vector<pVel> *mMeshVelocities; // Particle fields - std::vector<pData> *mFlipParticleData; - std::vector<pVel> *mFlipParticleVelocity; - - std::vector<pData> *mSndParticleData; - std::vector<pVel> *mSndParticleVelocity; - std::vector<float> *mSndParticleLife; - - void initDomain(struct FluidModifierData *mmd); - void initNoise(struct FluidModifierData *mmd); - void initMesh(struct FluidModifierData *mmd); - void initSmoke(struct FluidModifierData *mmd); - void initSmokeNoise(struct FluidModifierData *mmd); + vector<pData> *mFlipParticleData; + vector<pVel> *mFlipParticleVelocity; + + vector<pData> *mSndParticleData; + vector<pVel> *mSndParticleVelocity; + vector<float> *mSndParticleLife; + + void initializeRNAMap(struct FluidModifierData *mmd = NULL); + void initDomain(struct FluidModifierData *mmd = NULL); + void initNoise(struct FluidModifierData *mmd = NULL); + void initMesh(struct FluidModifierData *mmd = NULL); + void initSmoke(struct FluidModifierData *mmd = NULL); + void initSmokeNoise(struct FluidModifierData *mmd = NULL); void initializeMantaflow(); void terminateMantaflow(); - void runPythonString(std::vector<std::string> commands); - std::string getRealValue(const std::string &varName, FluidModifierData *mmd); - std::string parseLine(const std::string &line, FluidModifierData *mmd); - std::string parseScript(const std::string &setup_string, FluidModifierData *mmd = NULL); - void updateMeshFromBobj(const char *filename); - void updateMeshFromObj(const char *filename); - void updateMeshFromUni(const char *filename); - void updateParticlesFromUni(const char *filename, bool isSecondarySys, bool isVelData); - int updateGridFromUni(const char *filename, float *grid, bool isNoise); - int updateGridFromVDB(const char *filename, float *grid, bool isNoise); - int updateGridFromRaw(const char *filename, float *grid, bool isNoise); - void updateMeshFromFile(const char *filename); - void updateParticlesFromFile(const char *filename, bool isSecondarySys, bool isVelData); - int updateGridFromFile(const char *filename, float *grid, bool isNoise); + bool runPythonString(vector<string> commands); + string getRealValue(const string &varName); + string parseLine(const string &line); + string parseScript(const string &setup_string, FluidModifierData *mmd = NULL); + bool updateMeshFromBobj(string filename); + bool updateMeshFromObj(string filename); + bool updateMeshFromUni(string filename); + bool updateParticlesFromUni(string filename, bool isSecondarySys, bool isVelData); + bool updateGridsFromUni(string filename, vector<GridItem> grids); + bool updateGridsFromVDB(string filename, vector<GridItem> grids); + bool updateGridsFromRaw(string filename, vector<GridItem> grids); + bool updateMeshFromFile(string filename); + bool updateParticlesFromFile(string filename, bool isSecondarySys, bool isVelData); + bool updateGridsFromFile(string filename, vector<GridItem> grids); + string getDirectory(struct FluidModifierData *mmd, string subdirectory); + string getFile(struct FluidModifierData *mmd, + string subdirectory, + string fname, + string extension, + int framenr); }; #endif |