Blender V4.3
MANTA_main.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2016 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#ifndef MANTA_A_H
10#define MANTA_A_H
11
12#include <atomic>
13#include <cassert>
14#include <string>
15#include <unordered_map>
16#include <vector>
17
18using std::atomic;
19using std::string;
20using std::unordered_map;
21using std::vector;
22
23struct MANTA {
24 public:
25 MANTA(int *res, struct FluidModifierData *fmd);
26 virtual ~MANTA();
27
28 /* Mirroring Mantaflow structures for particle data (pVel also used for mesh vert vels). */
29 typedef struct PData {
30 float pos[3];
31 int flag;
33 typedef struct PVel {
34 float pos[3];
36
37 /* Mirroring Mantaflow structures for meshes. */
38 typedef struct Node {
39 int flags;
40 float pos[3], normal[3];
42 typedef struct Triangle {
43 int c[3];
44 int flags;
46
47 /* Grid initialization functions. */
48 bool initHeat(struct FluidModifierData *fmd = nullptr);
49 bool initFire(struct FluidModifierData *fmd = nullptr);
50 bool initColors(struct FluidModifierData *fmd = nullptr);
51 bool initFireHigh(struct FluidModifierData *fmd = nullptr);
52 bool initColorsHigh(struct FluidModifierData *fmd = nullptr);
53 bool initLiquid(FluidModifierData *fmd = nullptr);
54 bool initLiquidMesh(FluidModifierData *fmd = nullptr);
55 bool initLiquidViscosity(FluidModifierData *fmd = nullptr);
56 bool initObstacle(FluidModifierData *fmd = nullptr);
57 bool initCurvature(FluidModifierData *fmd = nullptr);
58 bool initGuiding(FluidModifierData *fmd = nullptr);
59 bool initFractions(FluidModifierData *fmd = nullptr);
60 bool initInVelocity(FluidModifierData *fmd = nullptr);
61 bool initOutflow(FluidModifierData *fmd = nullptr);
62 bool initSndParts(FluidModifierData *fmd = nullptr);
63 bool initLiquidSndParts(FluidModifierData *fmd = nullptr);
64
65 /* Pointer transfer: Mantaflow -> Blender. Use flush to reset all pointers to nullptr. */
66 void updatePointers(FluidModifierData *fmd, bool flush = false);
67
68 /* Write cache. */
69 bool writeConfiguration(FluidModifierData *fmd, int framenr);
70 bool writeData(FluidModifierData *fmd, int framenr);
71 bool writeNoise(FluidModifierData *fmd, int framenr);
72 /* Write calls for mesh and particles were left in bake calls for now. */
73
74 /* Read cache (via Python). */
75 bool readConfiguration(FluidModifierData *fmd, int framenr);
76 bool readData(FluidModifierData *fmd, int framenr, bool resumable);
77 bool readNoise(FluidModifierData *fmd, int framenr, bool resumable);
78 bool readMesh(FluidModifierData *fmd, int framenr);
79 bool readParticles(FluidModifierData *fmd, int framenr, bool resumable);
80 bool readGuiding(FluidModifierData *fmd, int framenr, bool sourceDomain);
81
82 /* Propagate variable changes from RNA to Python. */
84
85 /* Bake cache. */
86 bool bakeData(FluidModifierData *fmd, int framenr);
87 bool bakeNoise(FluidModifierData *fmd, int framenr);
88 bool bakeMesh(FluidModifierData *fmd, int framenr);
89 bool bakeParticles(FluidModifierData *fmd, int framenr);
90 bool bakeGuiding(FluidModifierData *fmd, int framenr);
91
92 /* IO for Mantaflow scene script. */
93 bool exportSmokeScript(struct FluidModifierData *fmd);
94 bool exportLiquidScript(struct FluidModifierData *fmd);
95
96 /* Check cache status by frame. */
97 bool hasConfig(FluidModifierData *fmd, int framenr);
98 bool hasData(FluidModifierData *fmd, int framenr);
99 bool hasNoise(FluidModifierData *fmd, int framenr);
100 bool hasMesh(FluidModifierData *fmd, int framenr);
101 bool hasParticles(FluidModifierData *fmd, int framenr);
102 bool hasGuiding(FluidModifierData *fmd, int framenr, bool sourceDomain);
103
104 inline size_t getTotalCells()
105 {
106 return mTotalCells;
107 }
108 inline size_t getTotalCellsHigh()
109 {
110 return mTotalCellsHigh;
111 }
112 inline bool usingNoise()
113 {
114 return mUsingNoise;
115 }
116 inline int getResX()
117 {
118 return mResX;
119 }
120 inline int getResY()
121 {
122 return mResY;
123 }
124 inline int getResZ()
125 {
126 return mResZ;
127 }
128 inline int getParticleResX()
129 {
130 return mResXParticle;
131 }
132 inline int getParticleResY()
133 {
134 return mResYParticle;
135 }
136 inline int getParticleResZ()
137 {
138 return mResZParticle;
139 }
140 inline int getMeshResX()
141 {
142 return mResXMesh;
143 }
144 inline int getMeshResY()
145 {
146 return mResYMesh;
147 }
148 inline int getMeshResZ()
149 {
150 return mResZMesh;
151 }
152 inline int getResXHigh()
153 {
154 return mResXNoise;
155 }
156 inline int getResYHigh()
157 {
158 return mResYNoise;
159 }
160 inline int getResZHigh()
161 {
162 return mResZNoise;
163 }
164 inline int getMeshUpres()
165 {
166 return mUpresMesh;
167 }
168 inline int getParticleUpres()
169 {
170 return mUpresParticle;
171 }
172
173 /* Smoke getters. */
174 inline float *getDensity()
175 {
176 return mDensity;
177 }
178 inline float *getHeat()
179 {
180 return mHeat;
181 }
182 inline float *getVelocityX()
183 {
184 return mVelocityX;
185 }
186 inline float *getVelocityY()
187 {
188 return mVelocityY;
189 }
190 inline float *getVelocityZ()
191 {
192 return mVelocityZ;
193 }
194 inline float *getObVelocityX()
195 {
196 return mObVelocityX;
197 }
198 inline float *getObVelocityY()
199 {
200 return mObVelocityY;
201 }
202 inline float *getObVelocityZ()
203 {
204 return mObVelocityZ;
205 }
206 inline float *getGuideVelocityX()
207 {
208 return mGuideVelocityX;
209 }
210 inline float *getGuideVelocityY()
211 {
212 return mGuideVelocityY;
213 }
214 inline float *getGuideVelocityZ()
215 {
216 return mGuideVelocityZ;
217 }
218 inline float *getInVelocityX()
219 {
220 return mInVelocityX;
221 }
222 inline float *getInVelocityY()
223 {
224 return mInVelocityY;
225 }
226 inline float *getInVelocityZ()
227 {
228 return mInVelocityZ;
229 }
230 inline float *getForceX()
231 {
232 return mForceX;
233 }
234 inline float *getForceY()
235 {
236 return mForceY;
237 }
238 inline float *getForceZ()
239 {
240 return mForceZ;
241 }
242 inline int *getFlags()
243 {
244 return mFlags;
245 }
246 inline float *getNumObstacle()
247 {
248 return mNumObstacle;
249 }
250 inline float *getNumGuide()
251 {
252 return mNumGuide;
253 }
254 inline float *getFlame()
255 {
256 return mFlame;
257 }
258 inline float *getFuel()
259 {
260 return mFuel;
261 }
262 inline float *getReact()
263 {
264 return mReact;
265 }
266 inline float *getColorR()
267 {
268 return mColorR;
269 }
270 inline float *getColorG()
271 {
272 return mColorG;
273 }
274 inline float *getColorB()
275 {
276 return mColorB;
277 }
278 inline float *getShadow()
279 {
280 return mShadow;
281 }
282 inline float *getDensityIn()
283 {
284 return mDensityIn;
285 }
286 inline float *getHeatIn()
287 {
288 return mHeatIn;
289 }
290 inline float *getColorRIn()
291 {
292 return mColorRIn;
293 }
294 inline float *getColorGIn()
295 {
296 return mColorGIn;
297 }
298 inline float *getColorBIn()
299 {
300 return mColorBIn;
301 }
302 inline float *getFuelIn()
303 {
304 return mFuelIn;
305 }
306 inline float *getReactIn()
307 {
308 return mReactIn;
309 }
310 inline float *getEmissionIn()
311 {
312 return mEmissionIn;
313 }
314
315 inline float *getDensityHigh()
316 {
317 return mDensityHigh;
318 }
319 inline float *getFlameHigh()
320 {
321 return mFlameHigh;
322 }
323 inline float *getFuelHigh()
324 {
325 return mFuelHigh;
326 }
327 inline float *getReactHigh()
328 {
329 return mReactHigh;
330 }
331 inline float *getColorRHigh()
332 {
333 return mColorRHigh;
334 }
335 inline float *getColorGHigh()
336 {
337 return mColorGHigh;
338 }
339 inline float *getColorBHigh()
340 {
341 return mColorBHigh;
342 }
343 inline float *getTextureU()
344 {
345 return mTextureU;
346 }
347 inline float *getTextureV()
348 {
349 return mTextureV;
350 }
351 inline float *getTextureW()
352 {
353 return mTextureW;
354 }
355 inline float *getTextureU2()
356 {
357 return mTextureU2;
358 }
359 inline float *getTextureV2()
360 {
361 return mTextureV2;
362 }
363 inline float *getTextureW2()
364 {
365 return mTextureW2;
366 }
367
368 inline float *getPhiIn()
369 {
370 return mPhiIn;
371 }
372 inline float *getPhiStaticIn()
373 {
374 return mPhiStaticIn;
375 }
376 inline float *getPhiObsIn()
377 {
378 return mPhiObsIn;
379 }
380 inline float *getPhiObsStaticIn()
381 {
382 return mPhiObsStaticIn;
383 }
384 inline float *getPhiGuideIn()
385 {
386 return mPhiGuideIn;
387 }
388 inline float *getPhiOutIn()
389 {
390 return mPhiOutIn;
391 }
392 inline float *getPhiOutStaticIn()
393 {
394 return mPhiOutStaticIn;
395 }
396 inline float *getPhi()
397 {
398 return mPhi;
399 }
400 inline float *getPressure()
401 {
402 return mPressure;
403 }
404
405 static atomic<int> solverID;
406 static int with_debug; /* On or off (1 or 0), also sets manta debug level. */
407
408 /* Mesh getters. */
409 inline int getNumVertices()
410 {
411 return (mMeshNodes && !mMeshNodes->empty()) ? mMeshNodes->size() : 0;
412 }
413 inline int getNumNormals()
414 {
415 return (mMeshNodes && !mMeshNodes->empty()) ? mMeshNodes->size() : 0;
416 }
417 inline int getNumTriangles()
418 {
419 return (mMeshTriangles && !mMeshTriangles->empty()) ? mMeshTriangles->size() : 0;
420 }
421
422 inline float getVertexXAt(int i)
423 {
424 assert(i >= 0);
425 if (mMeshNodes && !mMeshNodes->empty()) {
426 assert(i < mMeshNodes->size());
427 return (*mMeshNodes)[i].pos[0];
428 }
429 return 0.0f;
430 }
431 inline float getVertexYAt(int i)
432 {
433 assert(i >= 0);
434 if (mMeshNodes && !mMeshNodes->empty()) {
435 assert(i < mMeshNodes->size());
436 return (*mMeshNodes)[i].pos[1];
437 }
438 return 0.0f;
439 }
440 inline float getVertexZAt(int i)
441 {
442 assert(i >= 0);
443 if (mMeshNodes && !mMeshNodes->empty()) {
444 assert(i < mMeshNodes->size());
445 return (*mMeshNodes)[i].pos[2];
446 }
447 return 0.0f;
448 }
449
450 inline float getNormalXAt(int i)
451 {
452 assert(i >= 0);
453 if (mMeshNodes && !mMeshNodes->empty()) {
454 assert(i < mMeshNodes->size());
455 return (*mMeshNodes)[i].normal[0];
456 }
457 return 0.0f;
458 }
459 inline float getNormalYAt(int i)
460 {
461 assert(i >= 0);
462 if (mMeshNodes && !mMeshNodes->empty()) {
463 assert(i < mMeshNodes->size());
464 return (*mMeshNodes)[i].normal[1];
465 }
466 return 0.0f;
467 }
468 inline float getNormalZAt(int i)
469 {
470 assert(i >= 0);
471 if (mMeshNodes && !mMeshNodes->empty()) {
472 assert(i < mMeshNodes->size());
473 return (*mMeshNodes)[i].normal[2];
474 }
475 return 0.0f;
476 }
477
478 inline int getTriangleXAt(int i)
479 {
480 assert(i >= 0);
481 if (mMeshTriangles && !mMeshTriangles->empty()) {
482 assert(i < mMeshTriangles->size());
483 return (*mMeshTriangles)[i].c[0];
484 }
485 return 0;
486 }
487 inline int getTriangleYAt(int i)
488 {
489 assert(i >= 0);
490 if (mMeshTriangles && !mMeshTriangles->empty()) {
491 assert(i < mMeshTriangles->size());
492 return (*mMeshTriangles)[i].c[1];
493 }
494 return 0;
495 }
496 inline int getTriangleZAt(int i)
497 {
498 assert(i >= 0);
499 if (mMeshTriangles && !mMeshTriangles->empty()) {
500 assert(i < mMeshTriangles->size());
501 return (*mMeshTriangles)[i].c[2];
502 }
503 return 0;
504 }
505
506 inline float getVertVelXAt(int i)
507 {
508 assert(i >= 0);
509 if (mMeshVelocities && !mMeshVelocities->empty()) {
510 assert(i < mMeshVelocities->size());
511 return (*mMeshVelocities)[i].pos[0];
512 }
513 return 0.0f;
514 }
515 inline float getVertVelYAt(int i)
516 {
517 assert(i >= 0);
518 if (mMeshVelocities && !mMeshVelocities->empty()) {
519 assert(i < mMeshVelocities->size());
520 return (*mMeshVelocities)[i].pos[1];
521 }
522 return 0.0f;
523 }
524 inline float getVertVelZAt(int i)
525 {
526 assert(i >= 0);
527 if (mMeshVelocities && !mMeshVelocities->empty()) {
528 assert(i < mMeshVelocities->size());
529 return (*mMeshVelocities)[i].pos[2];
530 }
531 return 0.0f;
532 }
533
534 // Particle getters
535 inline int getFlipParticleFlagAt(int i)
536 {
537 assert(i >= 0);
538 if (mFlipParticleData && !mFlipParticleData->empty()) {
539 assert(i < mFlipParticleData->size());
540 return (*mFlipParticleData)[i].flag;
541 }
542 return 0;
543 }
544 inline int getSndParticleFlagAt(int i)
545 {
546 assert(i >= 0);
547 if (mParticleData && !mParticleData->empty()) {
548 assert(i < mParticleData->size());
549 return (*mParticleData)[i].flag;
550 }
551 return 0;
552 }
553
554 inline float getFlipParticlePositionXAt(int i)
555 {
556 assert(i >= 0);
557 if (mFlipParticleData && !mFlipParticleData->empty()) {
558 assert(i < mFlipParticleData->size());
559 return (*mFlipParticleData)[i].pos[0];
560 }
561 return 0.0f;
562 }
563 inline float getFlipParticlePositionYAt(int i)
564 {
565 assert(i >= 0);
566 if (mFlipParticleData && !mFlipParticleData->empty()) {
567 assert(i < mFlipParticleData->size());
568 return (*mFlipParticleData)[i].pos[1];
569 }
570 return 0.0f;
571 }
572 inline float getFlipParticlePositionZAt(int i)
573 {
574 assert(i >= 0);
575 if (mFlipParticleData && !mFlipParticleData->empty()) {
576 assert(i < mFlipParticleData->size());
577 return (*mFlipParticleData)[i].pos[2];
578 }
579 return 0.0f;
580 }
581
582 inline float getSndParticlePositionXAt(int i)
583 {
584 assert(i >= 0);
585 if (mParticleData && !mParticleData->empty()) {
586 assert(i < mParticleData->size());
587 return (*mParticleData)[i].pos[0];
588 }
589 return 0.0f;
590 }
591 inline float getSndParticlePositionYAt(int i)
592 {
593 assert(i >= 0);
594 if (mParticleData && !mParticleData->empty()) {
595 assert(i < mParticleData->size());
596 return (*mParticleData)[i].pos[1];
597 }
598 return 0.0f;
599 }
600 inline float getSndParticlePositionZAt(int i)
601 {
602 assert(i >= 0);
603 if (mParticleData && !mParticleData->empty()) {
604 assert(i < mParticleData->size());
605 return (*mParticleData)[i].pos[2];
606 }
607 return 0.0f;
608 }
609
610 inline float getFlipParticleVelocityXAt(int i)
611 {
612 assert(i >= 0);
613 if (mFlipParticleVelocity && !mFlipParticleVelocity->empty()) {
614 assert(i < mFlipParticleVelocity->size());
615 return (*mFlipParticleVelocity)[i].pos[0];
616 }
617 return 0.0f;
618 }
619 inline float getFlipParticleVelocityYAt(int i)
620 {
621 assert(i >= 0);
622 if (mFlipParticleVelocity && !mFlipParticleVelocity->empty()) {
623 assert(i < mFlipParticleVelocity->size());
624 return (*mFlipParticleVelocity)[i].pos[1];
625 }
626 return 0.0f;
627 }
628 inline float getFlipParticleVelocityZAt(int i)
629 {
630 assert(i >= 0);
631 if (mFlipParticleVelocity && !mFlipParticleVelocity->empty()) {
632 assert(i < mFlipParticleVelocity->size());
633 return (*mFlipParticleVelocity)[i].pos[2];
634 }
635 return 0.0f;
636 }
637
638 inline float getSndParticleVelocityXAt(int i)
639 {
640 assert(i >= 0);
641 if (mParticleVelocity && !mParticleVelocity->empty()) {
642 assert(i < mParticleVelocity->size());
643 return (*mParticleVelocity)[i].pos[0];
644 }
645 return 0.0f;
646 }
647 inline float getSndParticleVelocityYAt(int i)
648 {
649 assert(i >= 0);
650 if (mParticleVelocity && !mParticleVelocity->empty()) {
651 assert(i < mParticleVelocity->size());
652 return (*mParticleVelocity)[i].pos[1];
653 }
654 return 0.0f;
655 }
656 inline float getSndParticleVelocityZAt(int i)
657 {
658 assert(i >= 0);
659 if (mParticleVelocity && !mParticleVelocity->empty()) {
660 assert(i < mParticleVelocity->size());
661 return (*mParticleVelocity)[i].pos[2];
662 }
663 return 0.0f;
664 }
665
666 inline float *getFlipParticleData()
667 {
668 return (mFlipParticleData && !mFlipParticleData->empty()) ?
669 (float *)&mFlipParticleData->front() :
670 nullptr;
671 }
672 inline float *getSndParticleData()
673 {
674 return (mParticleData && !mParticleData->empty()) ? (float *)&mParticleData->front() : nullptr;
675 }
676
678 {
679 return (mFlipParticleVelocity && !mFlipParticleVelocity->empty()) ?
680 (float *)&mFlipParticleVelocity->front() :
681 nullptr;
682 }
684 {
685 return (mParticleVelocity && !mParticleVelocity->empty()) ?
686 (float *)&mParticleVelocity->front() :
687 nullptr;
688 }
689 inline float *getSndParticleLife()
690 {
691 return (mParticleLife && !mParticleLife->empty()) ? (float *)&mParticleLife->front() : nullptr;
692 }
693
695 {
696 return (mFlipParticleData && !mFlipParticleData->empty()) ? mFlipParticleData->size() : 0;
697 }
699 {
700 return (mParticleData && !mParticleData->empty()) ? mParticleData->size() : 0;
701 }
702
703 inline bool usingFlipFromFile()
704 {
705 return mFlipFromFile;
706 }
707 inline bool usingMeshFromFile()
708 {
709 return mMeshFromFile;
710 }
712 {
713 return mParticlesFromFile;
714 }
715
716 /* Direct access to solver time attributes. */
717 int getFrame();
718 float getTimestep();
719 void adaptTimestep();
720
722
723 private:
724 /* Simulation constants. */
725 size_t mTotalCells;
726 size_t mTotalCellsHigh;
727 size_t mTotalCellsMesh;
728 size_t mTotalCellsParticles;
729
730 unordered_map<string, string> mRNAMap;
731
732 /* The ID of the solver objects will be incremented for every new object. */
733 const int mCurrentID;
734
735 bool mUsingHeat;
736 bool mUsingColors;
737 bool mUsingFire;
738 bool mUsingObstacle;
739 bool mUsingGuiding;
740 bool mUsingFractions;
741 bool mUsingInvel;
742 bool mUsingOutflow;
743 bool mUsingNoise;
744 bool mUsingMesh;
745 bool mUsingDiffusion;
746 bool mUsingViscosity;
747 bool mUsingMVel;
748 bool mUsingLiquid;
749 bool mUsingSmoke;
750 bool mUsingDrops;
751 bool mUsingBubbles;
752 bool mUsingFloats;
753 bool mUsingTracers;
754
755 bool mFlipFromFile;
756 bool mMeshFromFile;
757 bool mParticlesFromFile;
758 bool mSmokeFromFile;
759 bool mNoiseFromFile;
760
761 int mResX;
762 int mResY;
763 int mResZ;
764 const int mMaxRes;
765
766 int mResXNoise;
767 int mResYNoise;
768 int mResZNoise;
769 int mResXMesh;
770 int mResYMesh;
771 int mResZMesh;
772 int mResXParticle;
773 int mResYParticle;
774 int mResZParticle;
775 int *mResGuiding;
776
777 int mUpresMesh;
778 int mUpresParticle;
779
780 /* Fluid grids. */
781 float *mVelocityX;
782 float *mVelocityY;
783 float *mVelocityZ;
784 float *mObVelocityX;
785 float *mObVelocityY;
786 float *mObVelocityZ;
787 float *mGuideVelocityX;
788 float *mGuideVelocityY;
789 float *mGuideVelocityZ;
790 float *mInVelocityX;
791 float *mInVelocityY;
792 float *mInVelocityZ;
793 float *mForceX;
794 float *mForceY;
795 float *mForceZ;
796 int *mFlags;
797 float *mNumObstacle;
798 float *mNumGuide;
799 float *mPressure;
800
801 /* Smoke grids. */
802 float *mDensity;
803 float *mHeat;
804 float *mFlame;
805 float *mFuel;
806 float *mReact;
807 float *mColorR;
808 float *mColorG;
809 float *mColorB;
810 float *mShadow;
811 float *mDensityIn;
812 float *mHeatIn;
813 float *mFuelIn;
814 float *mReactIn;
815 float *mEmissionIn;
816 float *mColorRIn;
817 float *mColorGIn;
818 float *mColorBIn;
819 float *mDensityHigh;
820 float *mFlameHigh;
821 float *mFuelHigh;
822 float *mReactHigh;
823 float *mColorRHigh;
824 float *mColorGHigh;
825 float *mColorBHigh;
826 float *mTextureU;
827 float *mTextureV;
828 float *mTextureW;
829 float *mTextureU2;
830 float *mTextureV2;
831 float *mTextureW2;
832
833 /* Liquid grids. */
834 float *mPhiIn;
835 float *mPhiStaticIn;
836 float *mPhiObsIn;
837 float *mPhiObsStaticIn;
838 float *mPhiGuideIn;
839 float *mPhiOutIn;
840 float *mPhiOutStaticIn;
841 float *mPhi;
842
843 /* Mesh fields. */
844 vector<Node> *mMeshNodes;
845 vector<Triangle> *mMeshTriangles;
846 vector<pVel> *mMeshVelocities;
847
848 /* Particle fields. */
849 vector<pData> *mFlipParticleData;
850 vector<pVel> *mFlipParticleVelocity;
851
852 vector<pData> *mParticleData;
853 vector<pVel> *mParticleVelocity;
854 vector<float> *mParticleLife;
855
856 void initializeRNAMap(struct FluidModifierData *doRnaRefresh = nullptr);
857 bool initDomain(struct FluidModifierData *doRnaRefresh = nullptr);
858 bool initNoise(struct FluidModifierData *doRnaRefresh = nullptr);
859 bool initMesh(struct FluidModifierData *doRnaRefresh = nullptr);
860 bool initSmoke(struct FluidModifierData *doRnaRefresh = nullptr);
861 bool initSmokeNoise(struct FluidModifierData *doRnaRefresh = nullptr);
862 void initializeMantaflow();
863 void terminateMantaflow();
864 bool runPythonString(vector<string> commands);
865 string getRealValue(const string &varName);
866 string parseLine(const string &line);
867 string parseScript(const string &setup_string, FluidModifierData *fmd = nullptr);
868 string getDirectory(struct FluidModifierData *fmd, string subdirectory);
869 string getFile(struct FluidModifierData *fmd,
870 string subdirectory,
871 string fname,
872 string extension,
873 int framenr);
874};
875
876#endif
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition btDbvt.cpp:52
float pos[3]
Definition MANTA_main.h:40
float pos[3]
Definition MANTA_main.h:30
float pos[3]
Definition MANTA_main.h:34
bool exportSmokeScript(struct FluidModifierData *fmd)
int getMeshResX()
Definition MANTA_main.h:140
float * getPhiOutIn()
Definition MANTA_main.h:388
float * getDensity()
Definition MANTA_main.h:174
int getParticleResZ()
Definition MANTA_main.h:136
float * getPhi()
Definition MANTA_main.h:396
int * getFlags()
Definition MANTA_main.h:242
float * getColorG()
Definition MANTA_main.h:270
float * getFuelIn()
Definition MANTA_main.h:302
float * getVelocityY()
Definition MANTA_main.h:186
int getTriangleXAt(int i)
Definition MANTA_main.h:478
float getVertexZAt(int i)
Definition MANTA_main.h:440
int getNumVertices()
Definition MANTA_main.h:409
float getFlipParticlePositionXAt(int i)
Definition MANTA_main.h:554
bool bakeNoise(FluidModifierData *fmd, int framenr)
bool writeNoise(FluidModifierData *fmd, int framenr)
float getSndParticlePositionXAt(int i)
Definition MANTA_main.h:582
bool initFireHigh(struct FluidModifierData *fmd=nullptr)
bool hasNoise(FluidModifierData *fmd, int framenr)
float * getColorGIn()
Definition MANTA_main.h:294
bool exportLiquidScript(struct FluidModifierData *fmd)
bool readData(FluidModifierData *fmd, int framenr, bool resumable)
int getNumFlipParticles()
Definition MANTA_main.h:694
float * getSndParticleLife()
Definition MANTA_main.h:689
bool initOutflow(FluidModifierData *fmd=nullptr)
float getNormalZAt(int i)
Definition MANTA_main.h:468
size_t getTotalCells()
Definition MANTA_main.h:104
float * getTextureU()
Definition MANTA_main.h:343
float getSndParticleVelocityYAt(int i)
Definition MANTA_main.h:647
float * getHeatIn()
Definition MANTA_main.h:286
float * getObVelocityZ()
Definition MANTA_main.h:202
bool writeConfiguration(FluidModifierData *fmd, int framenr)
float * getFlameHigh()
Definition MANTA_main.h:319
float * getForceY()
Definition MANTA_main.h:234
int getParticleUpres()
Definition MANTA_main.h:168
float * getColorR()
Definition MANTA_main.h:266
float getSndParticleVelocityXAt(int i)
Definition MANTA_main.h:638
int getSndParticleFlagAt(int i)
Definition MANTA_main.h:544
float * getTextureV2()
Definition MANTA_main.h:359
float * getPhiStaticIn()
Definition MANTA_main.h:372
float * getObVelocityX()
Definition MANTA_main.h:194
bool initFire(struct FluidModifierData *fmd=nullptr)
float * getObVelocityY()
Definition MANTA_main.h:198
float * getVelocityZ()
Definition MANTA_main.h:190
float * getColorRHigh()
Definition MANTA_main.h:331
bool writeData(FluidModifierData *fmd, int framenr)
float getVertVelXAt(int i)
Definition MANTA_main.h:506
float getSndParticlePositionZAt(int i)
Definition MANTA_main.h:600
float * getInVelocityY()
Definition MANTA_main.h:222
float getVertVelYAt(int i)
Definition MANTA_main.h:515
float getFlipParticleVelocityYAt(int i)
Definition MANTA_main.h:619
float * getTextureU2()
Definition MANTA_main.h:355
static int with_debug
Definition MANTA_main.h:406
bool needsRealloc(FluidModifierData *fmd)
float * getFlame()
Definition MANTA_main.h:254
int getResZHigh()
Definition MANTA_main.h:160
bool readParticles(FluidModifierData *fmd, int framenr, bool resumable)
float * getReact()
Definition MANTA_main.h:262
bool readMesh(FluidModifierData *fmd, int framenr)
bool readGuiding(FluidModifierData *fmd, int framenr, bool sourceDomain)
bool initLiquidViscosity(FluidModifierData *fmd=nullptr)
float getSndParticlePositionYAt(int i)
Definition MANTA_main.h:591
bool bakeMesh(FluidModifierData *fmd, int framenr)
bool initLiquid(FluidModifierData *fmd=nullptr)
float * getPhiIn()
Definition MANTA_main.h:368
int getNumSndParticles()
Definition MANTA_main.h:698
float * getVelocityX()
Definition MANTA_main.h:182
bool initFractions(FluidModifierData *fmd=nullptr)
bool initLiquidMesh(FluidModifierData *fmd=nullptr)
bool usingMeshFromFile()
Definition MANTA_main.h:707
float getVertexXAt(int i)
Definition MANTA_main.h:422
float * getShadow()
Definition MANTA_main.h:278
float * getColorBIn()
Definition MANTA_main.h:298
int getMeshResY()
Definition MANTA_main.h:144
float * getDensityHigh()
Definition MANTA_main.h:315
float * getForceZ()
Definition MANTA_main.h:238
bool hasMesh(FluidModifierData *fmd, int framenr)
float * getDensityIn()
Definition MANTA_main.h:282
int getTriangleZAt(int i)
Definition MANTA_main.h:496
int getMeshResZ()
Definition MANTA_main.h:148
float getNormalXAt(int i)
Definition MANTA_main.h:450
float * getNumGuide()
Definition MANTA_main.h:250
bool initGuiding(FluidModifierData *fmd=nullptr)
int getResYHigh()
Definition MANTA_main.h:156
float * getTextureW2()
Definition MANTA_main.h:363
float * getColorRIn()
Definition MANTA_main.h:290
int getResZ()
Definition MANTA_main.h:124
float * getInVelocityZ()
Definition MANTA_main.h:226
bool readConfiguration(FluidModifierData *fmd, int framenr)
virtual ~MANTA()
int getFlipParticleFlagAt(int i)
Definition MANTA_main.h:535
float getFlipParticleVelocityXAt(int i)
Definition MANTA_main.h:610
int getParticleResX()
Definition MANTA_main.h:128
bool bakeGuiding(FluidModifierData *fmd, int framenr)
size_t getTotalCellsHigh()
Definition MANTA_main.h:108
float getSndParticleVelocityZAt(int i)
Definition MANTA_main.h:656
int getResX()
Definition MANTA_main.h:116
float getFlipParticleVelocityZAt(int i)
Definition MANTA_main.h:628
static atomic< int > solverID
Definition MANTA_main.h:405
struct MANTA::Triangle Triangle
bool hasParticles(FluidModifierData *fmd, int framenr)
float * getTextureV()
Definition MANTA_main.h:347
bool usingNoise()
Definition MANTA_main.h:112
float * getColorGHigh()
Definition MANTA_main.h:335
bool initColorsHigh(struct FluidModifierData *fmd=nullptr)
bool initObstacle(FluidModifierData *fmd=nullptr)
float * getPhiOutStaticIn()
Definition MANTA_main.h:392
float getTimestep()
bool initColors(struct FluidModifierData *fmd=nullptr)
bool readNoise(FluidModifierData *fmd, int framenr, bool resumable)
float * getInVelocityX()
Definition MANTA_main.h:218
float getVertVelZAt(int i)
Definition MANTA_main.h:524
int getTriangleYAt(int i)
Definition MANTA_main.h:487
float * getPressure()
Definition MANTA_main.h:400
bool initSndParts(FluidModifierData *fmd=nullptr)
float * getReactIn()
Definition MANTA_main.h:306
struct MANTA::Node Node
bool initCurvature(FluidModifierData *fmd=nullptr)
float * getGuideVelocityY()
Definition MANTA_main.h:210
bool hasGuiding(FluidModifierData *fmd, int framenr, bool sourceDomain)
float * getGuideVelocityZ()
Definition MANTA_main.h:214
float * getFlipParticleData()
Definition MANTA_main.h:666
bool initHeat(struct FluidModifierData *fmd=nullptr)
int getParticleResY()
Definition MANTA_main.h:132
bool bakeParticles(FluidModifierData *fmd, int framenr)
float * getTextureW()
Definition MANTA_main.h:351
MANTA(int *res, struct FluidModifierData *fmd)
float * getSndParticleVelocity()
Definition MANTA_main.h:683
bool bakeData(FluidModifierData *fmd, int framenr)
float getNormalYAt(int i)
Definition MANTA_main.h:459
bool initInVelocity(FluidModifierData *fmd=nullptr)
float * getHeat()
Definition MANTA_main.h:178
float * getFuelHigh()
Definition MANTA_main.h:323
float * getColorB()
Definition MANTA_main.h:274
float * getReactHigh()
Definition MANTA_main.h:327
float * getFuel()
Definition MANTA_main.h:258
int getNumNormals()
Definition MANTA_main.h:413
int getNumTriangles()
Definition MANTA_main.h:417
float * getEmissionIn()
Definition MANTA_main.h:310
void adaptTimestep()
int getResY()
Definition MANTA_main.h:120
float * getPhiGuideIn()
Definition MANTA_main.h:384
bool usingFlipFromFile()
Definition MANTA_main.h:703
float * getColorBHigh()
Definition MANTA_main.h:339
float * getPhiObsStaticIn()
Definition MANTA_main.h:380
int getFrame()
void updatePointers(FluidModifierData *fmd, bool flush=false)
int getMeshUpres()
Definition MANTA_main.h:164
struct MANTA::PVel pVel
float * getForceX()
Definition MANTA_main.h:230
float * getFlipParticleVelocity()
Definition MANTA_main.h:677
float * getGuideVelocityX()
Definition MANTA_main.h:206
float getFlipParticlePositionYAt(int i)
Definition MANTA_main.h:563
struct MANTA::PData pData
bool hasData(FluidModifierData *fmd, int framenr)
int getResXHigh()
Definition MANTA_main.h:152
float getVertexYAt(int i)
Definition MANTA_main.h:431
bool updateVariables(FluidModifierData *fmd)
float getFlipParticlePositionZAt(int i)
Definition MANTA_main.h:572
float * getPhiObsIn()
Definition MANTA_main.h:376
bool hasConfig(FluidModifierData *fmd, int framenr)
bool initLiquidSndParts(FluidModifierData *fmd=nullptr)
bool usingParticleFromFile()
Definition MANTA_main.h:711
float * getNumObstacle()
Definition MANTA_main.h:246
float * getSndParticleData()
Definition MANTA_main.h:672