Fluid: Refactored MANTA class

Refactored the caching system so that return values are no longer ignored. The aim of this refactor was to make the caching more robust.
This commit is contained in:
Sebastián Barschkis 2020-04-02 13:48:50 +02:00
parent d1011c9e64
commit bfdc42d990
2 changed files with 407 additions and 305 deletions

File diff suppressed because it is too large Load Diff

@ -24,10 +24,10 @@
#ifndef MANTA_A_H #ifndef MANTA_A_H
#define MANTA_A_H #define MANTA_A_H
#include <string>
#include <vector>
#include <atomic> #include <atomic>
#include <cassert> #include <cassert>
#include <string>
#include <vector>
struct MANTA { struct MANTA {
public: public:
@ -77,32 +77,32 @@ struct MANTA {
void updatePointers(); void updatePointers();
// Write cache // Write cache
int writeConfiguration(FluidModifierData *mmd, int framenr); bool writeConfiguration(FluidModifierData *mmd, int framenr);
int writeData(FluidModifierData *mmd, int framenr); bool writeData(FluidModifierData *mmd, int framenr);
// write call for noise, mesh and particles were left in bake calls for now // write call for noise, mesh and particles were left in bake calls for now
// Read cache (via Manta save/load) // Read cache (via Manta save/load)
int readConfiguration(FluidModifierData *mmd, int framenr); bool readConfiguration(FluidModifierData *mmd, int framenr);
int readData(FluidModifierData *mmd, int framenr); bool readData(FluidModifierData *mmd, int framenr);
int readNoise(FluidModifierData *mmd, int framenr); bool readNoise(FluidModifierData *mmd, int framenr);
int readMesh(FluidModifierData *mmd, int framenr); bool readMesh(FluidModifierData *mmd, int framenr);
int readParticles(FluidModifierData *mmd, int framenr); bool readParticles(FluidModifierData *mmd, int framenr);
int readGuiding(FluidModifierData *mmd, int framenr, bool sourceDomain); bool readGuiding(FluidModifierData *mmd, int framenr, bool sourceDomain);
// Read cache (via file read functions in MANTA - e.g. read .bobj.gz meshes, .uni particles) // Read cache (via file read functions in MANTA - e.g. read .bobj.gz meshes, .uni particles)
int updateMeshStructures(FluidModifierData *mmd, int framenr); bool updateMeshStructures(FluidModifierData *mmd, int framenr);
int updateFlipStructures(FluidModifierData *mmd, int framenr); bool updateFlipStructures(FluidModifierData *mmd, int framenr);
int updateParticleStructures(FluidModifierData *mmd, int framenr); bool updateParticleStructures(FluidModifierData *mmd, int framenr);
int updateSmokeStructures(FluidModifierData *mmd, int framenr); bool updateSmokeStructures(FluidModifierData *mmd, int framenr);
int updateNoiseStructures(FluidModifierData *mmd, int framenr); bool updateNoiseStructures(FluidModifierData *mmd, int framenr);
void updateVariables(FluidModifierData *mmd); bool updateVariables(FluidModifierData *mmd);
// Bake cache // Bake cache
int bakeData(FluidModifierData *mmd, int framenr); bool bakeData(FluidModifierData *mmd, int framenr);
int bakeNoise(FluidModifierData *mmd, int framenr); bool bakeNoise(FluidModifierData *mmd, int framenr);
int bakeMesh(FluidModifierData *mmd, int framenr); bool bakeMesh(FluidModifierData *mmd, int framenr);
int bakeParticles(FluidModifierData *mmd, int framenr); bool bakeParticles(FluidModifierData *mmd, int framenr);
int bakeGuiding(FluidModifierData *mmd, int framenr); bool bakeGuiding(FluidModifierData *mmd, int framenr);
// IO for Mantaflow scene script // IO for Mantaflow scene script
void exportSmokeScript(struct FluidModifierData *mmd); void exportSmokeScript(struct FluidModifierData *mmd);
@ -401,7 +401,6 @@ struct MANTA {
return mPhi; return mPhi;
} }
static std::atomic<bool> mantaInitialized;
static std::atomic<int> solverID; static std::atomic<int> solverID;
static int with_debug; // on or off (1 or 0), also sets manta debug level static int with_debug; // on or off (1 or 0), also sets manta debug level
@ -858,20 +857,20 @@ struct MANTA {
void initSmokeNoise(struct FluidModifierData *mmd); void initSmokeNoise(struct FluidModifierData *mmd);
void initializeMantaflow(); void initializeMantaflow();
void terminateMantaflow(); void terminateMantaflow();
void runPythonString(std::vector<std::string> commands); bool runPythonString(std::vector<std::string> commands);
std::string getRealValue(const std::string &varName, FluidModifierData *mmd); std::string getRealValue(const std::string &varName, FluidModifierData *mmd);
std::string parseLine(const std::string &line, FluidModifierData *mmd); std::string parseLine(const std::string &line, FluidModifierData *mmd);
std::string parseScript(const std::string &setup_string, FluidModifierData *mmd = NULL); std::string parseScript(const std::string &setup_string, FluidModifierData *mmd = NULL);
void updateMeshFromBobj(const char *filename); bool updateMeshFromBobj(const char *filename);
void updateMeshFromObj(const char *filename); bool updateMeshFromObj(const char *filename);
void updateMeshFromUni(const char *filename); bool updateMeshFromUni(const char *filename);
void updateParticlesFromUni(const char *filename, bool isSecondarySys, bool isVelData); bool updateParticlesFromUni(const char *filename, bool isSecondarySys, bool isVelData);
int updateGridFromUni(const char *filename, float *grid, bool isNoise); bool updateGridFromUni(const char *filename, float *grid, bool isNoise);
int updateGridFromVDB(const char *filename, float *grid, bool isNoise); bool updateGridFromVDB(const char *filename, float *grid, bool isNoise);
int updateGridFromRaw(const char *filename, float *grid, bool isNoise); bool updateGridFromRaw(const char *filename, float *grid, bool isNoise);
void updateMeshFromFile(const char *filename); bool updateMeshFromFile(const char *filename);
void updateParticlesFromFile(const char *filename, bool isSecondarySys, bool isVelData); bool updateParticlesFromFile(const char *filename, bool isSecondarySys, bool isVelData);
int updateGridFromFile(const char *filename, float *grid, bool isNoise); bool updateGridFromFile(const char *filename, float *grid, bool isNoise);
}; };
#endif #endif