Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'intern/mantaflow/intern/MANTA_main.h')
-rw-r--r--intern/mantaflow/intern/MANTA_main.h177
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