HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
GAS_ProjectNonDivergentAdaptive.h
Go to the documentation of this file.
1 #ifndef _GAS_ProjectNonDivergentAdaptive_
2 #define _GAS_ProjectNonDivergentAdaptive_
3 
4 #include "GAS_SubSolver.h"
5 #include "GAS_Utils.h"
6 
8 
9 #include <UT/UT_Array.h>
11 #include <UT/UT_SparseMatrix.h>
12 
13 class SIM_RawField;
14 class SIM_ScalarField;
15 class SIM_VectorField;
16 
18 {
22 
25 
26 public:
27 
28  static constexpr int FLUID_CELL = 0;
29  static constexpr int UNASSIGNED_CELL = -1;
30 
31  static constexpr int INVALID_FACE = 0;
32  static constexpr int VALID_FACE = 1;
33 
35  GET_DATA_FUNC_I("maxiterations", MaxIterations);
36 
37  GET_DATA_FUNC_B("usesharpcollisions", UseSharpCollisions);
38 
39  GET_DATA_FUNC_I("octreelevels", OctreeLevels);
40  GET_DATA_FUNC_I("finebandwidth", FineBandwidth);
41 
42  GET_DATA_FUNC_B("generateoctree", GenerateOctree);
43  GET_DATA_FUNC_B("onlygenerateoctree", OnlyGenerateOctree);
44  GET_DATA_FUNC_I("smootheriterations", SmootherIterations);
45  GET_DATA_FUNC_B("usegaussseidelsmoother", UseGaussSeidelSmoother);
46 
47  GET_DATA_FUNC_F("extrapolation", Extrapolation);
48 
49  GET_DATA_FUNC_B("useoldpressure", UseOldPressure);
50 
51  GET_DATA_FUNC_F("waterline", Waterline);
52  GET_DATA_FUNC_B("usewaterline", UseWaterline);
53  GET_DATA_FUNC_V3("waterlinedirection", WaterlineDirection);
54 
57 
58 protected:
59  explicit GAS_ProjectNonDivergentAdaptive(const SIM_DataFactory *factory);
61 
62  // Used to determine if the field is complicated enough to justify
63  // the overhead of multithreading.
64  bool shouldMultiThread(const SIM_RawField *field) const
65  {
66  return field->field()->numTiles() > 1;
67  }
68 
69  // The overloaded callback that GAS_SubSolver will invoke to
70  // perform our actual computation. We are giving a single object
71  // at a time to work on.
72  bool solveGasSubclass(SIM_Engine &engine, SIM_Object *obj,
73  SIM_Time time, SIM_Time timestep) override;
74 
75 private:
76  // We define this to be a DOP_Auto node which means we do not
77  // need to implement a DOP_Node derivative for this data. Instead,
78  // this description is used to define the interface.
79  static const SIM_DopDescription *getDopDescription();
80  /// These macros are necessary to bind our node to the factory and
81  /// ensure useful constants like BaseClass are defined.
84  "GAS Project Non Divergent Adaptive", getDopDescription());
85 
87  boundary_weights.shouldMultiThread(),
88  enforceVolumeLimitBoundaries,
89  SIM_RawField &, boundary_weights,
90  SIM_RawField &, valid_faces,
91  const SIM_RawField &, velocity,
92  const SIM_RawField &, cutcell_weights,
93  const SIM_BoundaryLine &, index_boundary_line,
94  const int, axis)
95 
96  void enforceVolumeLimitBoundariesPartial(SIM_RawField &boundary_weights,
97  SIM_RawField &valid_faces,
98  const SIM_RawField &velocity,
99  const SIM_RawField &cutcell_weights,
100  const SIM_BoundaryLine &index_boundary_line,
101  const int axis,
102  const UT_JobInfo &info) const;
103 
105  surface.shouldMultiThread(),
106  classifyRegularLiquidCells,
107  SIM_RawIndexField &, regular_liquid_cell_labels,
108  const SIM_RawField &, surface,
109  const SIM_RawField &, collision,
110  const SIM_RawField **, cutcell_weights,
111  const SIM_RawField *, boundary_weights,
112  const fpreal, extrapolation)
113 
114  void classifyRegularLiquidCellsPartial(SIM_RawIndexField &regular_liquid_cell_labels,
115  const SIM_RawField &surface,
116  const SIM_RawField &collision,
117  const SIM_RawField **cutcell_weights,
118  const SIM_RawField *boundary_weights,
119  const fpreal extrapolation,
120  const UT_JobInfo &info) const;
121 
122  bool
123  checkForFineLiquidCells(const SIM_RawIndexField &regular_liquid_cell_labels) const;
124 
125  //
126  // Helper functions for building octree labels
127  //
128 
130  regular_liquid_cell_labels.shouldMultiThread(),
131  setFineCellMaskInterior,
132  UT_Array<UT_Array<UT_Vector3I>> &, parallel_boundary_cell_list,
133  UT_VoxelArrayF &, fine_cell_mask,
134  const SIM_RawIndexField &, regular_liquid_cell_labels,
135  const SIM_RawField **, cutcell_weights)
136 
137  void setFineCellMaskInteriorPartial(UT_Array<UT_Array<UT_Vector3I>> &parallel_boundary_cell_list,
138  UT_VoxelArrayF &fine_cell_mask,
139  const SIM_RawIndexField &regular_liquid_cell_labels,
140  const SIM_RawField **cutcell_weights,
141  const UT_JobInfo &info) const;
142 
143  void findOccupiedFineTiles(UT_Array<bool> &is_tile_occupied_list,
144  const UT_Array<UT_Vector3I> &fine_cell_list,
145  const UT_VoxelArrayF &fine_cell_mask) const;
146 
147  void uncompressFineTiles(UT_VoxelArrayF &fine_cell_mask,
148  const UT_Array<bool> &is_tile_occupied_list) const;
149 
150  void setFineCells(UT_VoxelArrayF &fine_cell_mask,
151  const UT_Array<UT_Vector3I> &fine_cell_list) const;
152 
153  void setCustomFineCells(UT_VoxelArrayF &fine_cell_mask,
154  const SIM_RawField &custom_fine_cells) const;
155 
157  old_cell_list.size() > 1000,
158  loadNextOutsideFineCellLayer,
159  UT_Array<UT_Array<UT_Vector3I>> &, parallel_next_cell_list,
160  const UT_Array<UT_Vector3I> &, old_cell_list,
161  const UT_VoxelArrayF &, fine_cell_mask,
162  const SIM_RawIndexField &, regular_liquid_cell_labels)
163 
164  void loadNextOutsideFineCellLayerPartial(UT_Array<UT_Array<UT_Vector3I>> &parallel_next_cell_list,
165  const UT_Array<UT_Vector3I> &old_cell_list,
166  const UT_VoxelArrayF &fine_cell_mask,
167  const SIM_RawIndexField &regular_liquid_cell_labels,
168  const UT_JobInfo &info) const;
169 
171  old_cell_list.size() > 1000,
172  loadNextInsideFineCellLayer,
173  UT_Array<UT_Array<UT_Vector3I>> &, parallel_next_cell_list,
174  const UT_Array<UT_Vector3I> &, old_cell_list,
175  const UT_VoxelArrayF &, fine_cell_mask,
176  const SIM_RawIndexField &, regular_liquid_cell_labels)
177 
178  void loadNextInsideFineCellLayerPartial(UT_Array<UT_Array<UT_Vector3I>> &parallel_next_cell_list,
179  const UT_Array<UT_Vector3I> &old_cell_list,
180  const UT_VoxelArrayF &fine_cell_mask,
181  const SIM_RawIndexField &regular_liquid_cell_labels,
182  const UT_JobInfo &info) const;
183 
184  void buildOctreeCellLabels(UT_FaceGradedOctreeLabels &octree_labels,
185  const SIM_RawIndexField &regular_liquid_cell_labels,
186  const SIM_RawField *custom_fine_cells,
187  const SIM_RawField **cutcell_weights,
188  const int levels,
189  const int inside_fine_width,
190  const int outside_fine_width) const;
191 
192  //
193  // Build octree cell indices
194  //
195 
197  octree_labels.numTiles() > 100,
198  classifyOctreeLiquidCells,
199  SIM_RawIndexField &,liquid_indices,
200  const UT_VoxelArray<int> &, octree_labels,
201  const SIM_RawIndexField &, regular_liquid_cell_labels,
202  const int, level)
203 
204  void classifyOctreeLiquidCellsPartial(SIM_RawIndexField &liquid_indices,
205  const UT_VoxelArray<int> &octree_labels,
206  const SIM_RawIndexField &regular_liquid_cell_labels,
207  const int level,
208  const UT_JobInfo &info) const;
209 
210  exint buildOctreeCellIndices(UT_Array<SIM_RawIndexField> &liquid_indices,
211  const UT_FaceGradedOctreeLabels &octree_labels,
212  const SIM_RawIndexField &regular_liquid_cell_labels,
213  const UT_Vector3 &octree_grid_size) const;
214 
216  connected_component_field.shouldMultiThread(),
217  findFreeSurfacePerRegion,
218  UT_Array<bool> &, region_has_free_surface,
219  const SIM_RawIndexField &, connected_component_field,
220  const SIM_RawIndexField &, regular_liquid_cell_labels,
221  const SIM_RawField **, cutcell_weights)
222 
223  void findFreeSurfacePerRegionPartial(UT_Array<bool> &region_has_free_surface,
224  const SIM_RawIndexField &connected_component_field,
225  const SIM_RawIndexField &regular_liquid_cell_labels,
226  const SIM_RawField **cutcell_weights,
227  const UT_JobInfo &info) const;
228 
230  connected_liquid_components.shouldMultiThread(),
231  computeDivergencePerRegion,
232  UT_Array<UT_Array<fpreal>> &, parallel_region_divergence,
233  UT_Array<UT_Array<fpreal>> &, parallel_region_cell_count,
234  const SIM_RawIndexField &, connected_liquid_components,
235  const SIM_RawIndexField &, regular_liquid_cell_labels,
236  const SIM_RawField &, divergence,
237  const UT_Array<bool> &, region_has_free_surface)
238 
239  void computeDivergencePerRegionPartial(UT_Array<UT_Array<fpreal>> &parallel_region_divergence,
240  UT_Array<UT_Array<fpreal>> &parallel_region_cell_count,
241  const SIM_RawIndexField &connected_liquid_components,
242  const SIM_RawIndexField &regular_liquid_cell_labels,
243  const SIM_RawField &divergence,
244  const UT_Array<bool> &region_has_free_surface,
245  const UT_JobInfo &info) const;
246 
248  connected_liquid_components.shouldMultiThread(),
249  removeAverageDivergence,
251  const SIM_RawIndexField &, connected_liquid_components,
252  const SIM_RawIndexField &, regular_liquid_cell_labels,
253  const UT_Array<fpreal> &, region_divergence,
254  const UT_Array<bool> &, region_has_free_surface)
255 
256  void removeAverageDivergencePartial(SIM_RawField &divergence,
257  const SIM_RawIndexField &connected_liquid_components,
258  const SIM_RawIndexField &regular_liquid_cell_labels,
259  const UT_Array<fpreal> &region_divergence,
260  const UT_Array<bool> &region_has_free_surface,
261  const UT_JobInfo &info) const;
262 
264  octree_labels.numTiles() > 100,
265  buildOccupiedOctreeFaceTiles,
266  UT_Array<bool> &, occupied_tile_list,
267  const SIM_RawField &, valid_faces,
268  const UT_VoxelArray<int> &, octree_labels,
269  const int, axis)
270 
271  void buildOccupiedOctreeFaceTilesPartial(UT_Array<bool> &occupied_tile_list,
272  const SIM_RawField &valid_faces,
273  const UT_VoxelArray<int> &octree_labels,
274  const int axis,
275  const UT_JobInfo &info) const;
276 
278  occupied_tile_list.entries() > 20,
279  uncompressTiles,
280  SIM_RawField &, grid,
281  const UT_Array<bool> &, occupied_tile_list)
282 
283  void uncompressTilesPartial(SIM_RawField &grid,
284  const UT_Array<bool> &occupied_tile_list,
285  const UT_JobInfo &info) const;
286 
288  valid_faces.shouldMultiThread(),
289  classifyValidOctreeFaces,
290  SIM_RawField &, valid_faces,
291  const UT_FaceGradedOctreeLabels &, octree_labels,
292  const SIM_RawField &, surface,
293  const SIM_RawIndexField &, liquid_cell_indices,
294  const SIM_RawField **, cutcell_weights,
295  const int, axis, const int, level)
296 
297  void classifyValidOctreeFacesPartial(SIM_RawField &valid_faces,
298  const UT_FaceGradedOctreeLabels &octree_labels,
299  const SIM_RawField &surface,
300  const SIM_RawIndexField &liquid_cell_indices,
301  const SIM_RawField **cutcell_weights,
302  const int axis, const int level,
303  const UT_JobInfo &info) const;
304 
305  void buildValidOctreeFaces(UT_Array<UT_Array<SIM_RawField>> &valid_octree_faces,
306  const UT_Array<SIM_RawIndexField> &liquid_indices,
307  const UT_FaceGradedOctreeLabels &octree_labels,
308  const SIM_RawField **cutcell_weights,
309  const SIM_RawField &surface,
310  const UT_Vector3 &octree_grid_size) const;
311 
313  regular_liquid_cell_labels.field()->numTiles() > 100,
314  findOccupiedRegularGridFaceTiles,
315  UT_Array<bool> &, occupied_tile_list,
316  const SIM_RawIndexField &, regular_liquid_cell_labels,
317  const SIM_RawField &, valid_faces,
318  const int, axis)
319 
320  void findOccupiedRegularGridFaceTilesPartial(UT_Array<bool> &occupied_tile_list,
321  const SIM_RawIndexField &regular_liquid_cell_labels,
322  const SIM_RawField &valid_faces,
323  const int axis,
324  const UT_JobInfo &info) const;
325 
327  valid_faces.shouldMultiThread(),
328  classifyValidRegularGridFaces,
329  SIM_RawField &, valid_faces,
330  const SIM_RawIndexField &, regular_liquid_cell_labels,
331  const SIM_RawField &, cutcell_weights,
332  const int, axis)
333 
334  void classifyValidRegularGridFacesPartial(SIM_RawField &valid_faces,
335  const SIM_RawIndexField &regular_liquid_cell_labels,
336  const SIM_RawField &cutcell_weights,
337  const int axis,
338  const UT_JobInfo &info) const;
339 
340  void buildValidRegularGridFaces(SIM_VectorField &valid_faces,
341  const SIM_RawIndexField &regular_liquid_cell_labels,
342  const SIM_RawField **cutcell_weights) const;
343 
345  divergence.shouldMultiThread(),
346  buildFineCutCellDivergence,
348  const SIM_VectorField &, velocity,
349  const SIM_RawField **, cutcell_weights,
350  const SIM_VectorField *, collision_velocity,
351  const SIM_RawIndexField &, regular_liquid_cell_labels,
352  const bool, use_cutcell_boundaries)
353 
354  void buildFineCutCellDivergencePartial(SIM_RawField &divergence,
355  const SIM_VectorField &velocity,
356  const SIM_RawField **cutcell_weights,
357  const SIM_VectorField *collision_velocity,
358  const SIM_RawIndexField &regular_liquid_cell_labels,
359  const bool use_cutcell_boundaries,
360  const UT_JobInfo &info) const;
361 
363  divergence[level].shouldMultiThread(),
364  buildCoarseDivergence,
366  const UT_FaceGradedOctreeLabels &, octree_labels,
367  const int, level)
368 
369  void buildCoarseDivergencePartial(UT_Array<SIM_RawField> &divergence,
370  const UT_FaceGradedOctreeLabels &octree_labels,
371  const int level,
372  const UT_JobInfo &info) const;
373 
375  liquid_cell_indices.shouldMultiThread(),
376  buildRHS,
377  Vector &, rhs_vector,
378  const SIM_RawField &, divergence,
379  const SIM_RawIndexField &, liquid_cell_indices)
380 
381  void buildRHSPartial(Vector &rhs_vector,
382  const SIM_RawField &divergence,
383  const SIM_RawIndexField &liquid_cell_indices,
384  const UT_JobInfo &info) const;
385 
386  THREADED_METHOD9_CONST(GAS_ProjectNonDivergentAdaptive,
387  valid_faces.shouldMultiThread(),
388  integrateSurfacePressure,
389  SIM_RawField &, velocity,
390  const SIM_RawField &, valid_faces,
391  const SIM_RawField &, surface_pressure,
392  const SIM_RawField &, surface,
393  const SIM_RawField &, density,
394  const SIM_RawIndexField &, regular_liquid_cell_labels,
395  const SIM_VectorField *, surface_weights,
396  const fpreal, dt,
397  const int, axis)
398 
399  void integrateSurfacePressurePartial(SIM_RawField &velocity,
400  const SIM_RawField &valid_faces,
401  const SIM_RawField &surface_pressure,
402  const SIM_RawField &surface,
403  const SIM_RawField &density,
404  const SIM_RawIndexField &regular_liquid_cell_labels,
405  const SIM_VectorField *surface_weights,
406  const fpreal dt,
407  const int axis,
408  const UT_JobInfo &info) const;
409 
410  THREADED_METHOD3_CONST(GAS_ProjectNonDivergentAdaptive,
411  source_pressure.shouldMultiThread(),
412  buildFinePressure,
413  SIM_RawField &, adaptive_pressure,
414  const SIM_RawField &, source_pressure,
415  const SIM_RawIndexField &, regular_liquid_cell_labels)
416 
417  void buildFinePressurePartial(SIM_RawField &adaptive_pressure,
418  const SIM_RawField &source_pressure,
419  const SIM_RawIndexField &regular_liquid_cell_labels,
420  const UT_JobInfo &info) const;
421 
422  THREADED_METHOD3_CONST(GAS_ProjectNonDivergentAdaptive,
423  pressure_pyramid[level].shouldMultiThread(),
424  buildCoarsePressure,
425  UT_Array<SIM_RawField> &, pressure_pyramid,
426  const UT_FaceGradedOctreeLabels &, octree_labels,
427  const int, level)
428 
429  void buildCoarsePressurePartial(UT_Array<SIM_RawField> &pressure_pyramid,
430  const UT_FaceGradedOctreeLabels &octree_labels,
431  const int level,
432  const UT_JobInfo &info) const;
433 
434  THREADED_METHOD3_CONST(GAS_ProjectNonDivergentAdaptive,
435  pressure.shouldMultiThread(),
436  applyWarmStart,
437  Vector &, solution_vector,
438  const SIM_RawField &, pressure,
439  const SIM_RawIndexField &, liquid_cell_indices)
440 
441  void applyWarmStartPartial(Vector &solution_vector,
442  const SIM_RawField &pressure,
443  const SIM_RawIndexField &liquid_cell_indices,
444  const UT_JobInfo &info) const;
445 
446 
447  struct OctreeSystemParms
448  {
449  OctreeSystemParms(const SIM_RawField **cutcell_weights,
450  const SIM_RawField *boundary_weights,
451  const SIM_RawField &density,
452  const SIM_RawField &surface,
453  const SIM_VectorField *surface_weights)
454  : m_cutcell_weights(cutcell_weights)
455  , m_boundary_weights(boundary_weights)
456  , m_density(density)
457  , m_surface(surface)
458  , m_surface_weights(surface_weights)
459  {}
460 
461  const SIM_RawField **m_cutcell_weights;
462  const SIM_RawField *m_boundary_weights;
463  const SIM_RawField &m_density;
464  const SIM_RawField &m_surface;
465  const SIM_VectorField *m_surface_weights;
466  };
467 
469  liquid_cell_indices[level].shouldMultiThread(),
470  buildOctreePressureSystem,
471  UT_Array<SparseMatrix> &, parallel_sparse_matrix,
472  const UT_Array<SIM_RawIndexField> &, liquid_cell_indices,
473  const UT_Array<UT_Array<SIM_RawField>> &, valid_octree_faces,
474  const UT_FaceGradedOctreeLabels &, octree_labels,
475  const OctreeSystemParms &, octree_parms,
476  const int, level)
477 
478  void buildOctreePressureSystemPartial(UT_Array<SparseMatrix> &parallel_sparse_matrix,
479  const UT_Array<SIM_RawIndexField> &liquid_cell_indices,
480  const UT_Array<UT_Array<SIM_RawField>> &valid_octree_faces,
481  const UT_FaceGradedOctreeLabels &octree_labels,
482  const OctreeSystemParms &octree_parms,
483  const int level,
484  const UT_JobInfo &info) const;
485 
486  void applySolutionPressure(SIM_RawField &pressure,
487  const Vector &solution_vector,
488  const SIM_RawIndexField &liquid_cell_indices) const;
489 
490  void samplePressureFromParent(UT_Array<SIM_RawField> &pressure_pyramid,
491  const UT_FaceGradedOctreeLabels &octree_labels,
492  const int level) const;
493 
495  pressure.shouldMultiThread(),
496  dampedJacobiSmoother,
497  SIM_RawField &, pressure,
498  const SIM_RawField &, temp_pressure,
499  const SIM_RawField &, divergence,
500  const UT_VoxelArray<int> &, octree_labels)
501 
502  void dampedJacobiSmootherPartial(SIM_RawField &pressure,
503  const SIM_RawField &temp_pressure,
504  const SIM_RawField &divergence,
505  const UT_VoxelArray<int> &octree_labels,
506  const UT_JobInfo &info) const;
507 
508  void tiledGaussSeidelSmoother(SIM_RawField &pressure,
509  const SIM_RawField &divergence,
510  const UT_VoxelArray<int> &octree_labels,
511  const bool apply_odd_tiles,
512  const bool apply_forward_iteration) const;
513 
514  void applyOutputPressure(SIM_RawField &pressure,
515  const SIM_RawField &source_pressure,
516  const SIM_RawIndexField &regular_liquid_cell_labels) const;
517 
518  THREADED_METHOD9_CONST(GAS_ProjectNonDivergentAdaptive,
519  valid_faces.shouldMultiThread(),
520  applyRegularGridPressure,
521  SIM_RawField &, velocity,
522  const SIM_RawField &, pressure,
523  const SIM_RawField &, valid_faces,
524  const SIM_RawField &, surface,
525  const SIM_RawField & ,density,
526  const SIM_RawIndexField &, regular_liquid_cell_labels,
527  const SIM_RawField *, boundary_weights,
528  const SIM_VectorField *, surface_weights,
529  const int, axis)
530 
531  void applyRegularGridPressurePartial(SIM_RawField &velocity,
532  const SIM_RawField &pressure,
533  const SIM_RawField &valid_faces,
534  const SIM_RawField &surface,
535  const SIM_RawField &density,
536  const SIM_RawIndexField &regular_liquid_cell_labels,
537  const SIM_RawField *boundary_weights,
538  const SIM_VectorField *surface_weights,
539  const int axis,
540  const UT_JobInfo &info) const;
541 };
542 
543 #endif
#define DECLARE_STANDARD_GETCASTTOTYPE()
Definition: SIM_DataUtils.h:50
typedef int(APIENTRYP RE_PFNGLXSWAPINTERVALSGIPROC)(int)
#define THREADED_METHOD4_CONST(CLASSNAME, DOMULTI, METHOD, PARMTYPE1, PARMNAME1, PARMTYPE2, PARMNAME2, PARMTYPE3, PARMNAME3, PARMTYPE4, PARMNAME4)
#define SIM_NAME_TOLERANCE
Definition: SIM_Names.h:202
#define THREADED_METHOD9_CONST(CLASSNAME, DOMULTI, METHOD, PARMTYPE1, PARMNAME1, PARMTYPE2, PARMNAME2, PARMTYPE3, PARMNAME3, PARMTYPE4, PARMNAME4, PARMTYPE5, PARMNAME5, PARMTYPE6, PARMNAME6, PARMTYPE7, PARMNAME7, PARMTYPE8, PARMNAME8, PARMTYPE9, PARMNAME9)
#define GET_DATA_FUNC_V3(DataName, FuncName)
void
Definition: png.h:1083
GT_API const UT_StringHolder time
#define GAS_NAME_USETIMESTEP
Definition: GAS_Utils.h:39
#define GAS_API
Definition: GAS_API.h:10
int64 exint
Definition: SYS_Types.h:125
GLint level
Definition: glcorearb.h:108
virtual bool solveGasSubclass(SIM_Engine &engine, SIM_Object *obj, SIM_Time time, SIM_Time timestep)=0
#define THREADED_METHOD5_CONST(CLASSNAME, DOMULTI, METHOD, PARMTYPE1, PARMNAME1, PARMTYPE2, PARMNAME2, PARMTYPE3, PARMNAME3, PARMTYPE4, PARMNAME4, PARMTYPE5, PARMNAME5)
#define DECLARE_DATAFACTORY(DataClass, SuperClass, Description, DopParms)
Definition: SIM_DataUtils.h:63
#define GET_DATA_FUNC_I(DataName, FuncName)
int numTiles() const
#define THREADED_METHOD7_CONST(CLASSNAME, DOMULTI, METHOD, PARMTYPE1, PARMNAME1, PARMTYPE2, PARMNAME2, PARMTYPE3, PARMNAME3, PARMTYPE4, PARMNAME4, PARMTYPE5, PARMNAME5, PARMTYPE6, PARMNAME6, PARMTYPE7, PARMNAME7)
GLsizei levels
Definition: glcorearb.h:2224
#define THREADED_METHOD2_CONST(CLASSNAME, DOMULTI, METHOD, PARMTYPE1, PARMNAME1, PARMTYPE2, PARMNAME2)
fpreal64 fpreal
Definition: SYS_Types.h:277
#define GET_DATA_FUNC_B(DataName, FuncName)
THREADED_METHOD6_CONST(GAS_SubSolver, gdp->getNumPoints() > 2048, applyForces, GU_Detail *, gdp, const GA_PointGroup *, ptgrp, SIM_Time, timestep, bool, densityscale, bool, doorient, bool, updatepos) void applyForcesPartial(GU_Detail *gdp
#define GET_DATA_FUNC_F(DataName, FuncName)
This class holds a three dimensional scalar field.
#define GAS_NAME_TIMESCALE
Definition: GAS_Utils.h:40
VectorToScalarConverter< GridType >::Type::Ptr divergence(const GridType &grid, bool threaded, InterruptT *interrupt)
Compute the divergence of the given vector-valued grid.
#define THREADED_METHOD3_CONST(CLASSNAME, DOMULTI, METHOD, PARMTYPE1, PARMNAME1, PARMTYPE2, PARMNAME2, PARMTYPE3, PARMNAME3)
This class holds a three dimensional vector field.
bool shouldMultiThread(const SIM_RawField *field) const
UT_VoxelArrayF UT_VoxelArrayF & field