HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SOP_LinearSolver.proto.h
Go to the documentation of this file.
1 /* Automagically Generated by generate_proto.py
2  * Do not Edit
3  */
4 #pragma once
5 
6 #include <SOP/SOP_API.h>
7 #include <SOP/SOP_NodeVerb.h>
8 #include <SOP/SOP_GraphProxy.h>
9 
10 #include <OP/OP_Utils.h>
11 #include <PRM/PRM_Parm.h>
12 #include <UT/UT_IStream.h>
13 #include <UT/UT_NTStreamUtil.h>
14 #include <UT/UT_Ramp.h>
15 #include <UT/UT_SharedPtr.h>
16 #include <UT/UT_StringHolder.h>
17 #include <UT/UT_StringStream.h>
18 #include <UT/UT_VectorTypes.h>
19 #include <UT/UT_EnvControl.h>
20 #include <SYS/SYS_Types.h>
21 
22 class DEP_MicroNode;
23 namespace SOP_LinearSolverEnums
24 {
25  enum class Mode
26  {
28  DECOMPOSE,
30  MULTIPLY
31  };
32  enum class Precision
33  {
34  AUTO = 0,
35  _32,
36  _64
37  };
38  enum class DenseDirectSolver
39  {
40  PARTIALPIVLU = 0,
41  FULLPIVLU,
46  LLT,
47  LDLT,
48  BDCSVD,
49  JACOBISVD,
52  };
53  enum class SparseDirectSolver
54  {
55  LLT = 0,
56  LDLT,
57  LU,
58  QR
59  };
61  {
63  EIGEN
64  };
65  enum class IterativeSolver
66  {
67  GMRES = 0,
68  DGMRES,
69  MINRES,
72  BICGSTAB,
73  IDRS
74  };
76  {
77  IDENTITY = 0,
78  DIAGONAL
79  };
81  {
82  IDENTITY = 0,
83  DIAGONAL,
86  };
87  enum class SpectraEigensolver
88  {
89  GENEIGSSOLVER = 0,
93  };
94  enum class MatrixStorage
95  {
96  VOLUME = 0,
97  POINTS,
98  PRIMITIVES,
99  DETAIL
100  };
101  enum class VolumeEncoding
102  {
103  DENSECOL = 0,
104  DENSEROW
105  };
107  {
108  DENSECOL = 0,
109  DENSEROW,
110  COO,
111  LILCOL,
112  LILROW
113  };
114  enum class DetailEncoding
115  {
116  DENSECOL = 0,
117  DENSEROW,
118  COO
119  };
120  enum class VectorSrcStorage
121  {
122  POINTS = 0,
123  PRIMITIVES,
124  DETAIL
125  };
126  enum class VectorDstStorage
127  {
128  POINTS = 0,
129  PRIMITIVES,
130  DETAIL
131  };
132 }
133 
134 
136 {
137 public:
138  static int version() { return 1; }
139 
141  {
142  myMode = 0;
143  myCookInplace = false;
144  myPrecision = 0;
145  myUseIterativeSolver = false;
146  myIterativeSolver = 5;
147  mySolveWithGuess = false;
148  myUseEigensolver = false;
149  mySpectraEigensolver = 0;
150  myNumEigenpairs = 0;
151  myShift = -0.001;
152  mySolverTolerance = 1e-4;
153  myMatrixStorage = 0;
154  myVolumeEncoding = 0;
155  myPointsPrimsEncoding = 0;
156  myDetailEncoding = 0;
157  mySquareMatrix = false;
158  myRows = 512;
159  myCols = 512;
160  myRowAttribute = "row"_UTsh;
161  myColAttribute = "col"_UTsh;
162  myMatrixValueAttribute = "value"_UTsh;
163  myVectorSrcStorage = 0;
164  myVectorSrcAttribute = "known"_UTsh;
165  myVectorDstStorage = 0;
166  myVectorDstAttribute = "unknown"_UTsh;
167  myPinnedGroup = ""_UTsh;
168  myReduceRows = true;
169  myScale = 1;
170  myAccumulateResult = false;
171  myDenseDirectSolver = 0;
172  mySparseDirectSolver = 1;
173  mySparseDirectSolverBackend = 0;
174  myDensePreconditioner = 1;
175  mySparsePreconditioner = 1;
176 
177  }
178 
179  explicit SOP_LinearSolverParms(const SOP_LinearSolverParms &) = default;
181  SOP_LinearSolverParms(SOP_LinearSolverParms &&) noexcept = default;
182  SOP_LinearSolverParms &operator=(SOP_LinearSolverParms &&) noexcept = default;
183 
184  ~SOP_LinearSolverParms() override {}
185 
187  {
188  if (myMode != src.myMode) return false;
189  if (myCookInplace != src.myCookInplace) return false;
190  if (myPrecision != src.myPrecision) return false;
191  if (myUseIterativeSolver != src.myUseIterativeSolver) return false;
192  if (myIterativeSolver != src.myIterativeSolver) return false;
193  if (mySolveWithGuess != src.mySolveWithGuess) return false;
194  if (myUseEigensolver != src.myUseEigensolver) return false;
195  if (mySpectraEigensolver != src.mySpectraEigensolver) return false;
196  if (myNumEigenpairs != src.myNumEigenpairs) return false;
197  if (myShift != src.myShift) return false;
198  if (mySolverTolerance != src.mySolverTolerance) return false;
199  if (myMatrixStorage != src.myMatrixStorage) return false;
200  if (myVolumeEncoding != src.myVolumeEncoding) return false;
201  if (myPointsPrimsEncoding != src.myPointsPrimsEncoding) return false;
202  if (myDetailEncoding != src.myDetailEncoding) return false;
203  if (mySquareMatrix != src.mySquareMatrix) return false;
204  if (myRows != src.myRows) return false;
205  if (myCols != src.myCols) return false;
206  if (myRowAttribute != src.myRowAttribute) return false;
207  if (myColAttribute != src.myColAttribute) return false;
208  if (myMatrixValueAttribute != src.myMatrixValueAttribute) return false;
209  if (myVectorSrcStorage != src.myVectorSrcStorage) return false;
210  if (myVectorSrcAttribute != src.myVectorSrcAttribute) return false;
211  if (myVectorDstStorage != src.myVectorDstStorage) return false;
212  if (myVectorDstAttribute != src.myVectorDstAttribute) return false;
213  if (myPinnedGroup != src.myPinnedGroup) return false;
214  if (myReduceRows != src.myReduceRows) return false;
215  if (myScale != src.myScale) return false;
216  if (myAccumulateResult != src.myAccumulateResult) return false;
217  if (myDenseDirectSolver != src.myDenseDirectSolver) return false;
218  if (mySparseDirectSolver != src.mySparseDirectSolver) return false;
219  if (mySparseDirectSolverBackend != src.mySparseDirectSolverBackend) return false;
220  if (myDensePreconditioner != src.myDensePreconditioner) return false;
221  if (mySparsePreconditioner != src.mySparsePreconditioner) return false;
222 
223  return true;
224  }
226  {
227  return !operator==(src);
228  }
244 
245 
246 
247  void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
248  {
249  myMode = 0;
250  if (true)
251  graph->evalOpParm(myMode, nodeidx, "mode", time, 0);
252  myCookInplace = false;
253  if (true)
254  graph->evalOpParm(myCookInplace, nodeidx, "cookinplace", time, 0);
255  myPrecision = 0;
256  if (true)
257  graph->evalOpParm(myPrecision, nodeidx, "precision", time, 0);
258  myUseIterativeSolver = false;
259  if (true && ( (true&&!(((int64(getMode())==3))||((int64(getMode())==2))||((int64(getMode())==1)))) ) )
260  graph->evalOpParm(myUseIterativeSolver, nodeidx, "useiterativesolver", time, 0);
261  myIterativeSolver = 5;
262  if (true && ( (true&&!(((int64(getMode())==3))||((int64(getMode())==2))||((getUseIterativeSolver()==0))||((int64(getMode())!=0)))) ) )
263  graph->evalOpParm(myIterativeSolver, nodeidx, "iterativesolver", time, 0);
264  mySolveWithGuess = false;
265  if (true && ( (true&&!(((int64(getMode())==3))||((int64(getMode())==2))||((getUseIterativeSolver()==0))||((int64(getMode())!=0)))) ) )
266  graph->evalOpParm(mySolveWithGuess, nodeidx, "solvewithguess", time, 0);
267  myUseEigensolver = false;
268  if (true && ( (true&&!(((int64(getMode())==3))||((int64(getMode())==2))||((int64(getMode())!=1)))) ) )
269  graph->evalOpParm(myUseEigensolver, nodeidx, "useeigensolver", time, 0);
270  mySpectraEigensolver = 0;
271  if (true && ( (true&&!(((int64(getMode())==3))||((int64(getMode())==2))||((getUseEigensolver()==0))||((int64(getMode())!=1)))) ) )
272  graph->evalOpParm(mySpectraEigensolver, nodeidx, "spectraeigensolver", time, 0);
273  myNumEigenpairs = 0;
274  if (true && ( (true&&!(((int64(getMode())==3))||((int64(getMode())==2))||((getUseEigensolver()==0))||((int64(getMode())!=1)))) ) )
275  graph->evalOpParm(myNumEigenpairs, nodeidx, "numeigenpairs", time, 0);
276  myShift = -0.001;
277  if (true && ( (true&&!(((int64(getMode())==3))||((int64(getMode())==2))||((getUseEigensolver()==0))||((int64(getSpectraEigensolver())!=2)&&(int64(getSpectraEigensolver())!=3))||((int64(getMode())!=1)))) ) )
278  graph->evalOpParm(myShift, nodeidx, "shift", time, 0);
279  mySolverTolerance = 1e-4;
280  if (true && ( (true&&!(((int64(getMode())==3))||((int64(getMode())==2))||((getUseIterativeSolver()==0)&&(getUseEigensolver()==0)))) ) )
281  graph->evalOpParm(mySolverTolerance, nodeidx, "solvertolerance", time, 0);
282  myMatrixStorage = 0;
283  if (true && ( (true&&!(((int64(getMode())==2)))) ) )
284  graph->evalOpParm(myMatrixStorage, nodeidx, "matrixstorage", time, 0);
285  myVolumeEncoding = 0;
286  if (true && ( (true&&!(((int64(getMode())==2))||((int64(getMatrixStorage())!=0)))) ) )
287  graph->evalOpParm(myVolumeEncoding, nodeidx, "volumeencoding", time, 0);
288  myPointsPrimsEncoding = 0;
289  if (true && ( (true&&!(((int64(getMode())==2))||((int64(getMatrixStorage())!=1)&&(int64(getMatrixStorage())!=2)))) ) )
290  graph->evalOpParm(myPointsPrimsEncoding, nodeidx, "pointsprimsencoding", time, 0);
291  myDetailEncoding = 0;
292  if (true && ( (true&&!(((int64(getMode())==2))||((int64(getMatrixStorage())!=3)))) ) )
293  graph->evalOpParm(myDetailEncoding, nodeidx, "detailencoding", time, 0);
294  mySquareMatrix = false;
295  if (true && ( (true&&!(((int64(getMode())==2))||((int64(getMatrixStorage())==0))||((int64(getMatrixStorage())==1)&&(int64(getPointsPrimsEncoding())==0))||((int64(getMatrixStorage())==2)&&(int64(getPointsPrimsEncoding())==0))||((int64(getMatrixStorage())==1)&&(int64(getPointsPrimsEncoding())==1))||((int64(getMatrixStorage())==2)&&(int64(getPointsPrimsEncoding())==1)))) ) )
296  graph->evalOpParm(mySquareMatrix, nodeidx, "squarematrix", time, 0);
297  myRows = 512;
298  if (true && ( (true&&!(((int64(getMode())==2))||((int64(getMatrixStorage())==0))||((int64(getMatrixStorage())==1)&&(int64(getPointsPrimsEncoding())!=3)&&(int64(getPointsPrimsEncoding())!=2))||((int64(getMatrixStorage())==2)&&(int64(getPointsPrimsEncoding())!=3)&&(int64(getPointsPrimsEncoding())!=2))||((getSquareMatrix()==1)&&(int64(getMatrixStorage())==1)&&(int64(getPointsPrimsEncoding())!=2))||((getSquareMatrix()==1)&&(int64(getMatrixStorage())==2)&&(int64(getPointsPrimsEncoding())!=2))||((getSquareMatrix()==1)&&(int64(getMatrixStorage())==3)&&(int64(getDetailEncoding())!=2)))) ) )
299  graph->evalOpParm(myRows, nodeidx, "rows", time, 0);
300  myCols = 512;
301  if (true && ( (true&&!(((int64(getMode())==2))||((int64(getMatrixStorage())==0))||((int64(getMatrixStorage())==1)&&(int64(getPointsPrimsEncoding())!=4)&&(int64(getPointsPrimsEncoding())!=2))||((int64(getMatrixStorage())==2)&&(int64(getPointsPrimsEncoding())!=4)&&(int64(getPointsPrimsEncoding())!=2))||((getSquareMatrix()==1)&&(int64(getMatrixStorage())==1))||((getSquareMatrix()==1)&&(int64(getMatrixStorage())==2))||((getSquareMatrix()==1)&&(int64(getMatrixStorage())==3)))) ) )
302  graph->evalOpParm(myCols, nodeidx, "cols", time, 0);
303  myRowAttribute = "row"_UTsh;
304  if (true && ( (true&&!(((int64(getMode())==2))||((int64(getMatrixStorage())==0))||((int64(getMatrixStorage())==1)&&(int64(getPointsPrimsEncoding())==4))||((int64(getMatrixStorage())==2)&&(int64(getPointsPrimsEncoding())==4))||((int64(getMatrixStorage())==3))||((int64(getMatrixStorage())==1)&&(int64(getPointsPrimsEncoding())==1))||((int64(getMatrixStorage())==2)&&(int64(getPointsPrimsEncoding())==1))||((int64(getMatrixStorage())==1)&&(int64(getPointsPrimsEncoding())==0))||((int64(getMatrixStorage())==2)&&(int64(getPointsPrimsEncoding())==0)))) ) )
305  graph->evalOpParm(myRowAttribute, nodeidx, "rowattr", time, 0);
306  myColAttribute = "col"_UTsh;
307  if (true && ( (true&&!(((int64(getMode())==2))||((int64(getMatrixStorage())==0))||((int64(getMatrixStorage())==1)&&(int64(getPointsPrimsEncoding())==3))||((int64(getMatrixStorage())==2)&&(int64(getPointsPrimsEncoding())==3))||((int64(getMatrixStorage())==3))||((int64(getMatrixStorage())==1)&&(int64(getPointsPrimsEncoding())==1))||((int64(getMatrixStorage())==2)&&(int64(getPointsPrimsEncoding())==1))||((int64(getMatrixStorage())==1)&&(int64(getPointsPrimsEncoding())==0))||((int64(getMatrixStorage())==2)&&(int64(getPointsPrimsEncoding())==0)))) ) )
308  graph->evalOpParm(myColAttribute, nodeidx, "colattr", time, 0);
309  myMatrixValueAttribute = "value"_UTsh;
310  if (true && ( (true&&!(((int64(getMode())==2)))) ) )
311  graph->evalOpParm(myMatrixValueAttribute, nodeidx, "matrixvalueattr", time, 0);
312  myVectorSrcStorage = 0;
313  if (true && ( (true&&!(((int64(getMode())==1)))) ) )
314  graph->evalOpParm(myVectorSrcStorage, nodeidx, "vectorsrcstorage", time, 0);
315  myVectorSrcAttribute = "known"_UTsh;
316  if (true && ( (true&&!(((int64(getMode())==1)))) ) )
317  graph->evalOpParm(myVectorSrcAttribute, nodeidx, "vectorsrcattr", time, 0);
318  myVectorDstStorage = 0;
319  if (true)
320  graph->evalOpParm(myVectorDstStorage, nodeidx, "vectordststorage", time, 0);
321  myVectorDstAttribute = "unknown"_UTsh;
322  if (true && ( (true&&!(((int64(getMode())==1)))) ) )
323  graph->evalOpParm(myVectorDstAttribute, nodeidx, "vectordstattr", time, 0);
324  myPinnedGroup = ""_UTsh;
325  if (true && ( (true&&!(((int64(getVectorDstStorage())==2))||((int64(getMode())==3)))) ) )
326  graph->evalOpParm(myPinnedGroup, nodeidx, "pinnedgroup", time, 0);
327  myReduceRows = true;
328  if (true && ( (true&&!(((int64(getVectorDstStorage())==2))||((int64(getMode())==3))||((getPinnedGroup()=="")))) ) )
329  graph->evalOpParm(myReduceRows, nodeidx, "reducerows", time, 0);
330  myScale = 1;
331  if (true && ( (true&&!(((int64(getMode())==1)))) ) )
332  graph->evalOpParm(myScale, nodeidx, "scale", time, 0);
333  myAccumulateResult = false;
334  if (true && ( (true&&!(((int64(getMode())==1)))) ) )
335  graph->evalOpParm(myAccumulateResult, nodeidx, "accumulateresult", time, 0);
336  myDenseDirectSolver = 0;
337  if (true && ( (true&&!(((int64(getMode())==3))||((int64(getMode())==2))||((int64(getMode())==0)&&(getUseIterativeSolver()==1))||((int64(getMode())==1)&&(getUseEigensolver()==1))||((int64(getMatrixStorage())==3)&&(int64(getDetailEncoding())!=0)&&(int64(getDetailEncoding())!=1))||((int64(getMatrixStorage())==1)&&(int64(getPointsPrimsEncoding())!=0)&&(int64(getPointsPrimsEncoding())!=1))||((int64(getMatrixStorage())==2)&&(int64(getPointsPrimsEncoding())!=0)&&(int64(getPointsPrimsEncoding())!=1)))) ) )
338  graph->evalOpParm(myDenseDirectSolver, nodeidx, "densedirectsolver", time, 0);
339  mySparseDirectSolver = 1;
340  if (true && ( (true&&!(((int64(getMode())==3))||((int64(getMode())==2))||((getUseIterativeSolver()==1))||((getUseEigensolver()==1))||((int64(getMatrixStorage())==0))||((int64(getMatrixStorage())==3)&&(int64(getDetailEncoding())==0))||((int64(getMatrixStorage())==3)&&(int64(getDetailEncoding())==1))||((int64(getMatrixStorage())==1)&&(int64(getPointsPrimsEncoding())==1))||((int64(getMatrixStorage())==2)&&(int64(getPointsPrimsEncoding())==1))||((int64(getMatrixStorage())==1)&&(int64(getPointsPrimsEncoding())==0))||((int64(getMatrixStorage())==2)&&(int64(getPointsPrimsEncoding())==0)))) ) )
341  graph->evalOpParm(mySparseDirectSolver, nodeidx, "sparsedirectsolver", time, 0);
342  mySparseDirectSolverBackend = 0;
343  if (true && ( (true&&!(((int64(getMode())==3))||((int64(getMode())==2))||((int64(getMode())==0)&&(getUseIterativeSolver()==1))||((int64(getMatrixStorage())==0))||((int64(getMatrixStorage())==3)&&(int64(getDetailEncoding())==0))||((int64(getMatrixStorage())==3)&&(int64(getDetailEncoding())==1))||((int64(getMatrixStorage())==1)&&(int64(getPointsPrimsEncoding())==1))||((int64(getMatrixStorage())==2)&&(int64(getPointsPrimsEncoding())==1))||((int64(getMatrixStorage())==1)&&(int64(getPointsPrimsEncoding())==0))||((int64(getMatrixStorage())==2)&&(int64(getPointsPrimsEncoding())==0))||((int64(getMode())==1)))) ) )
344  graph->evalOpParm(mySparseDirectSolverBackend, nodeidx, "sparsedirectsolverbackend", time, 0);
345  myDensePreconditioner = 1;
346  if (true && ( (true&&!(((int64(getMode())==3))||((int64(getMode())==2))||((getUseIterativeSolver()==0))||((int64(getMode())!=0))||((int64(getMatrixStorage())==3)&&(int64(getDetailEncoding())!=0)&&(int64(getDetailEncoding())!=1))||((int64(getMatrixStorage())==1)&&(int64(getPointsPrimsEncoding())!=0)&&(int64(getPointsPrimsEncoding())!=1))||((int64(getMatrixStorage())==2)&&(int64(getPointsPrimsEncoding())!=0)&&(int64(getPointsPrimsEncoding())!=1)))) ) )
347  graph->evalOpParm(myDensePreconditioner, nodeidx, "densepreconditioner", time, 0);
348  mySparsePreconditioner = 1;
349  if (true && ( (true&&!(((int64(getMode())==3))||((int64(getMode())==2))||((getUseIterativeSolver()==0))||((int64(getMode())!=0))||((int64(getMatrixStorage())==0))||((int64(getMatrixStorage())==3)&&(int64(getDetailEncoding())==0))||((int64(getMatrixStorage())==3)&&(int64(getDetailEncoding())==1))||((int64(getMatrixStorage())==1)&&(int64(getPointsPrimsEncoding())==1))||((int64(getMatrixStorage())==2)&&(int64(getPointsPrimsEncoding())==1))||((int64(getMatrixStorage())==1)&&(int64(getPointsPrimsEncoding())==0))||((int64(getMatrixStorage())==2)&&(int64(getPointsPrimsEncoding())==0)))) ) )
350  graph->evalOpParm(mySparsePreconditioner, nodeidx, "sparsepreconditioner", time, 0);
351 
352  }
353 
354 
355  void loadFromOpSubclass(const LoadParms &loadparms) override
356  {
357  buildFromOp(loadparms.graph(), loadparms.nodeIdx(), loadparms.context().getTime(), loadparms.depnode());
358  }
359 
360 
361  void copyFrom(const OP_NodeParms *src) override
362  {
363  *this = *((const SOP_LinearSolverParms *)src);
364  }
365 
366  template <typename T>
367  void
368  doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
369  {
370  if (idx.size() < 1)
371  return;
372  UT_ASSERT(idx.size() == instance.size()+1);
373  if (idx.size() != instance.size()+1)
374  return;
375  switch (idx[0])
376  {
377  case 0:
378  coerceValue(value, myMode);
379  break;
380  case 1:
381  coerceValue(value, myCookInplace);
382  break;
383  case 2:
384  coerceValue(value, myPrecision);
385  break;
386  case 3:
387  coerceValue(value, myUseIterativeSolver);
388  break;
389  case 4:
390  coerceValue(value, myIterativeSolver);
391  break;
392  case 5:
393  coerceValue(value, mySolveWithGuess);
394  break;
395  case 6:
396  coerceValue(value, myUseEigensolver);
397  break;
398  case 7:
399  coerceValue(value, mySpectraEigensolver);
400  break;
401  case 8:
402  coerceValue(value, myNumEigenpairs);
403  break;
404  case 9:
405  coerceValue(value, myShift);
406  break;
407  case 10:
408  coerceValue(value, mySolverTolerance);
409  break;
410  case 11:
411  coerceValue(value, myMatrixStorage);
412  break;
413  case 12:
414  coerceValue(value, myVolumeEncoding);
415  break;
416  case 13:
417  coerceValue(value, myPointsPrimsEncoding);
418  break;
419  case 14:
420  coerceValue(value, myDetailEncoding);
421  break;
422  case 15:
423  coerceValue(value, mySquareMatrix);
424  break;
425  case 16:
426  coerceValue(value, myRows);
427  break;
428  case 17:
429  coerceValue(value, myCols);
430  break;
431  case 18:
432  coerceValue(value, myRowAttribute);
433  break;
434  case 19:
435  coerceValue(value, myColAttribute);
436  break;
437  case 20:
438  coerceValue(value, myMatrixValueAttribute);
439  break;
440  case 21:
441  coerceValue(value, myVectorSrcStorage);
442  break;
443  case 22:
444  coerceValue(value, myVectorSrcAttribute);
445  break;
446  case 23:
447  coerceValue(value, myVectorDstStorage);
448  break;
449  case 24:
450  coerceValue(value, myVectorDstAttribute);
451  break;
452  case 25:
453  coerceValue(value, myPinnedGroup);
454  break;
455  case 26:
456  coerceValue(value, myReduceRows);
457  break;
458  case 27:
459  coerceValue(value, myScale);
460  break;
461  case 28:
462  coerceValue(value, myAccumulateResult);
463  break;
464  case 29:
465  coerceValue(value, myDenseDirectSolver);
466  break;
467  case 30:
468  coerceValue(value, mySparseDirectSolver);
469  break;
470  case 31:
471  coerceValue(value, mySparseDirectSolverBackend);
472  break;
473  case 32:
474  coerceValue(value, myDensePreconditioner);
475  break;
476  case 33:
477  coerceValue(value, mySparsePreconditioner);
478  break;
479 
480  }
481  }
482 
483  bool isParmColorRamp(exint idx) const override
484  {
485  switch (idx)
486  {
487 
488  }
489  return false;
490  }
491 
492  void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
493  { doGetParmValue(idx, instance, value); }
494  void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
495  { doGetParmValue(idx, instance, value); }
496  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
497  { doGetParmValue(idx, instance, value); }
498  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
499  { doGetParmValue(idx, instance, value); }
500  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
501  { doGetParmValue(idx, instance, value); }
502  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
503  { doGetParmValue(idx, instance, value); }
504  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
505  { doGetParmValue(idx, instance, value); }
506  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
507  { doGetParmValue(idx, instance, value); }
508  void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
509  { doGetParmValue(idx, instance, value); }
510  void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr<UT_Ramp> &value) const override
511  { doGetParmValue(idx, instance, value); }
512  void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
513  { doGetParmValue(idx, instance, value); }
514 
515  template <typename T>
516  void
517  doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
518  {
519  if (idx.size() < 1)
520  return;
521  UT_ASSERT(idx.size() == instance.size()+1);
522  if (idx.size() != instance.size()+1)
523  return;
524  switch (idx[0])
525  {
526  case 0:
527  coerceValue(myMode, clampMinValue(0, clampMaxValue(3, value ) ));
528  break;
529  case 1:
530  coerceValue(myCookInplace, ( ( value ) ));
531  break;
532  case 2:
533  coerceValue(myPrecision, clampMinValue(0, clampMaxValue(2, value ) ));
534  break;
535  case 3:
536  coerceValue(myUseIterativeSolver, ( ( value ) ));
537  break;
538  case 4:
539  coerceValue(myIterativeSolver, clampMinValue(0, clampMaxValue(6, value ) ));
540  break;
541  case 5:
542  coerceValue(mySolveWithGuess, ( ( value ) ));
543  break;
544  case 6:
545  coerceValue(myUseEigensolver, ( ( value ) ));
546  break;
547  case 7:
548  coerceValue(mySpectraEigensolver, clampMinValue(0, clampMaxValue(3, value ) ));
549  break;
550  case 8:
551  coerceValue(myNumEigenpairs, clampMinValue(1, ( value ) ));
552  break;
553  case 9:
554  coerceValue(myShift, ( ( value ) ));
555  break;
556  case 10:
557  coerceValue(mySolverTolerance, clampMinValue(0, ( value ) ));
558  break;
559  case 11:
560  coerceValue(myMatrixStorage, clampMinValue(0, clampMaxValue(3, value ) ));
561  break;
562  case 12:
563  coerceValue(myVolumeEncoding, clampMinValue(0, clampMaxValue(1, value ) ));
564  break;
565  case 13:
566  coerceValue(myPointsPrimsEncoding, clampMinValue(0, clampMaxValue(4, value ) ));
567  break;
568  case 14:
569  coerceValue(myDetailEncoding, clampMinValue(0, clampMaxValue(2, value ) ));
570  break;
571  case 15:
572  coerceValue(mySquareMatrix, ( ( value ) ));
573  break;
574  case 16:
575  coerceValue(myRows, clampMinValue(1, ( value ) ));
576  break;
577  case 17:
578  coerceValue(myCols, clampMinValue(1, ( value ) ));
579  break;
580  case 18:
581  coerceValue(myRowAttribute, ( ( value ) ));
582  break;
583  case 19:
584  coerceValue(myColAttribute, ( ( value ) ));
585  break;
586  case 20:
587  coerceValue(myMatrixValueAttribute, ( ( value ) ));
588  break;
589  case 21:
590  coerceValue(myVectorSrcStorage, clampMinValue(0, clampMaxValue(2, value ) ));
591  break;
592  case 22:
593  coerceValue(myVectorSrcAttribute, ( ( value ) ));
594  break;
595  case 23:
596  coerceValue(myVectorDstStorage, clampMinValue(0, clampMaxValue(2, value ) ));
597  break;
598  case 24:
599  coerceValue(myVectorDstAttribute, ( ( value ) ));
600  break;
601  case 25:
602  coerceValue(myPinnedGroup, ( ( value ) ));
603  break;
604  case 26:
605  coerceValue(myReduceRows, ( ( value ) ));
606  break;
607  case 27:
608  coerceValue(myScale, ( ( value ) ));
609  break;
610  case 28:
611  coerceValue(myAccumulateResult, ( ( value ) ));
612  break;
613  case 29:
614  coerceValue(myDenseDirectSolver, clampMinValue(0, clampMaxValue(11, value ) ));
615  break;
616  case 30:
617  coerceValue(mySparseDirectSolver, clampMinValue(0, clampMaxValue(3, value ) ));
618  break;
619  case 31:
620  coerceValue(mySparseDirectSolverBackend, clampMinValue(0, clampMaxValue(1, value ) ));
621  break;
622  case 32:
623  coerceValue(myDensePreconditioner, clampMinValue(0, clampMaxValue(1, value ) ));
624  break;
625  case 33:
626  coerceValue(mySparsePreconditioner, clampMinValue(0, clampMaxValue(3, value ) ));
627  break;
628 
629  }
630  }
631 
632  void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
633  { doSetParmValue(idx, instance, value); }
634  void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
635  { doSetParmValue(idx, instance, value); }
636  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
637  { doSetParmValue(idx, instance, value); }
638  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
639  { doSetParmValue(idx, instance, value); }
640  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
641  { doSetParmValue(idx, instance, value); }
642  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
643  { doSetParmValue(idx, instance, value); }
644  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
645  { doSetParmValue(idx, instance, value); }
646  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
647  { doSetParmValue(idx, instance, value); }
648  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
649  { doSetParmValue(idx, instance, value); }
650  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr<UT_Ramp> &value) override
651  { doSetParmValue(idx, instance, value); }
652  void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
653  { doSetParmValue(idx, instance, value); }
654 
655  exint getNestNumParms(TempIndex idx) const override
656  {
657  if (idx.size() == 0)
658  return 34;
659  switch (idx[0])
660  {
661 
662  }
663  // Invalid
664  return 0;
665  }
666 
667  const char *getNestParmName(TempIndex fieldnum) const override
668  {
669  if (fieldnum.size() < 1)
670  return 0;
671  switch (fieldnum[0])
672  {
673  case 0:
674  return "mode";
675  case 1:
676  return "cookinplace";
677  case 2:
678  return "precision";
679  case 3:
680  return "useiterativesolver";
681  case 4:
682  return "iterativesolver";
683  case 5:
684  return "solvewithguess";
685  case 6:
686  return "useeigensolver";
687  case 7:
688  return "spectraeigensolver";
689  case 8:
690  return "numeigenpairs";
691  case 9:
692  return "shift";
693  case 10:
694  return "solvertolerance";
695  case 11:
696  return "matrixstorage";
697  case 12:
698  return "volumeencoding";
699  case 13:
700  return "pointsprimsencoding";
701  case 14:
702  return "detailencoding";
703  case 15:
704  return "squarematrix";
705  case 16:
706  return "rows";
707  case 17:
708  return "cols";
709  case 18:
710  return "rowattr";
711  case 19:
712  return "colattr";
713  case 20:
714  return "matrixvalueattr";
715  case 21:
716  return "vectorsrcstorage";
717  case 22:
718  return "vectorsrcattr";
719  case 23:
720  return "vectordststorage";
721  case 24:
722  return "vectordstattr";
723  case 25:
724  return "pinnedgroup";
725  case 26:
726  return "reducerows";
727  case 27:
728  return "scale";
729  case 28:
730  return "accumulateresult";
731  case 29:
732  return "densedirectsolver";
733  case 30:
734  return "sparsedirectsolver";
735  case 31:
736  return "sparsedirectsolverbackend";
737  case 32:
738  return "densepreconditioner";
739  case 33:
740  return "sparsepreconditioner";
741 
742  }
743  return 0;
744  }
745 
746  ParmType getNestParmType(TempIndex fieldnum) const override
747  {
748  if (fieldnum.size() < 1)
749  return PARM_UNSUPPORTED;
750  switch (fieldnum[0])
751  {
752  case 0:
753  return PARM_INTEGER;
754  case 1:
755  return PARM_INTEGER;
756  case 2:
757  return PARM_INTEGER;
758  case 3:
759  return PARM_INTEGER;
760  case 4:
761  return PARM_INTEGER;
762  case 5:
763  return PARM_INTEGER;
764  case 6:
765  return PARM_INTEGER;
766  case 7:
767  return PARM_INTEGER;
768  case 8:
769  return PARM_INTEGER;
770  case 9:
771  return PARM_FLOAT;
772  case 10:
773  return PARM_FLOAT;
774  case 11:
775  return PARM_INTEGER;
776  case 12:
777  return PARM_INTEGER;
778  case 13:
779  return PARM_INTEGER;
780  case 14:
781  return PARM_INTEGER;
782  case 15:
783  return PARM_INTEGER;
784  case 16:
785  return PARM_INTEGER;
786  case 17:
787  return PARM_INTEGER;
788  case 18:
789  return PARM_STRING;
790  case 19:
791  return PARM_STRING;
792  case 20:
793  return PARM_STRING;
794  case 21:
795  return PARM_INTEGER;
796  case 22:
797  return PARM_STRING;
798  case 23:
799  return PARM_INTEGER;
800  case 24:
801  return PARM_STRING;
802  case 25:
803  return PARM_STRING;
804  case 26:
805  return PARM_INTEGER;
806  case 27:
807  return PARM_FLOAT;
808  case 28:
809  return PARM_INTEGER;
810  case 29:
811  return PARM_INTEGER;
812  case 30:
813  return PARM_INTEGER;
814  case 31:
815  return PARM_INTEGER;
816  case 32:
817  return PARM_INTEGER;
818  case 33:
819  return PARM_INTEGER;
820 
821  }
822  return PARM_UNSUPPORTED;
823  }
824 
825  // Boiler plate to load individual types.
826  static void loadData(UT_IStream &is, int64 &v)
827  { is.bread(&v, 1); }
828  static void loadData(UT_IStream &is, bool &v)
829  { int64 iv; is.bread(&iv, 1); v = iv; }
830  static void loadData(UT_IStream &is, fpreal64 &v)
831  { is.bread<fpreal64>(&v, 1); }
832  static void loadData(UT_IStream &is, UT_Vector2D &v)
833  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1); }
834  static void loadData(UT_IStream &is, UT_Vector3D &v)
835  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
836  is.bread<fpreal64>(&v.z(), 1); }
837  static void loadData(UT_IStream &is, UT_Vector4D &v)
838  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
839  is.bread<fpreal64>(&v.z(), 1); is.bread<fpreal64>(&v.w(), 1); }
840  static void loadData(UT_IStream &is, UT_Matrix2D &v)
841  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) is.bread<fpreal64>(&v(r, c), 1); }
842  static void loadData(UT_IStream &is, UT_Matrix3D &v)
843  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) is.bread<fpreal64>(&v(r, c), 1); }
844  static void loadData(UT_IStream &is, UT_Matrix4D &v)
845  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) is.bread<fpreal64>(&v(r, c), 1); }
846  static void loadData(UT_IStream &is, UT_Vector2I &v)
847  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1); }
848  static void loadData(UT_IStream &is, UT_Vector3I &v)
849  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
850  is.bread<int64>(&v.z(), 1); }
851  static void loadData(UT_IStream &is, UT_Vector4I &v)
852  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
853  is.bread<int64>(&v.z(), 1); is.bread<int64>(&v.w(), 1); }
855  { is.bread(v); }
857  { UT_StringHolder rampdata;
858  loadData(is, rampdata);
859  if (rampdata.isstring())
860  {
861  v.reset(new UT_Ramp());
862  UT_IStream istr((const char *) rampdata, rampdata.length(), UT_ISTREAM_ASCII);
863  v->load(istr);
864  }
865  else v.reset();
866  }
869  loadData(is, data);
870  if (data.isstring())
871  {
872  // Find the data type.
873  const char *colon = UT_StringWrap(data).findChar(':');
874  if (colon)
875  {
876  int typelen = colon - data.buffer();
878  type.strncpy(data.buffer(), typelen);
879  UT_IStream istr(((const char *) data) + typelen + 1, data.length() - (typelen + 1), UT_ISTREAM_BINARY);
880 
881  v = PRM_DataFactory::parseBinary(type.buffer(), istr);
882  }
883  }
884  else v.reset();
885  }
886 
887  static void saveData(std::ostream &os, int64 v)
888  { UTwrite(os, &v); }
889  static void saveData(std::ostream &os, bool v)
890  { int64 iv = v; UTwrite(os, &iv); }
891  static void saveData(std::ostream &os, fpreal64 v)
892  { UTwrite<fpreal64>(os, &v); }
893  static void saveData(std::ostream &os, UT_Vector2D v)
894  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y()); }
895  static void saveData(std::ostream &os, UT_Vector3D v)
896  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
897  UTwrite<fpreal64>(os, &v.z()); }
898  static void saveData(std::ostream &os, UT_Vector4D v)
899  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
900  UTwrite<fpreal64>(os, &v.z()); UTwrite<fpreal64>(os, &v.w()); }
901  static void saveData(std::ostream &os, UT_Matrix2D v)
903  static void saveData(std::ostream &os, UT_Matrix3D v)
905  static void saveData(std::ostream &os, UT_Matrix4D v)
907  static void saveData(std::ostream &os, UT_StringHolder s)
908  { UT_StringWrap(s).saveBinary(os); }
909  static void saveData(std::ostream &os, UT_SharedPtr<UT_Ramp> s)
911  UT_OStringStream ostr;
912  if (s) s->save(ostr);
913  result = ostr.str();
914  saveData(os, result);
915  }
916  static void saveData(std::ostream &os, PRM_DataItemHandle s)
918  UT_OStringStream ostr;
919  if (s)
920  {
921  ostr << s->getDataTypeToken();
922  ostr << ":";
923  s->saveBinary(ostr);
924  }
925  result = ostr.str();
926  saveData(os, result);
927  }
928 
929 
930  void save(std::ostream &os) const
931  {
932  int32 v = version();
933  UTwrite(os, &v);
934  saveData(os, myMode);
935  saveData(os, myCookInplace);
936  saveData(os, myPrecision);
937  saveData(os, myUseIterativeSolver);
938  saveData(os, myIterativeSolver);
939  saveData(os, mySolveWithGuess);
940  saveData(os, myUseEigensolver);
941  saveData(os, mySpectraEigensolver);
942  saveData(os, myNumEigenpairs);
943  saveData(os, myShift);
944  saveData(os, mySolverTolerance);
945  saveData(os, myMatrixStorage);
946  saveData(os, myVolumeEncoding);
947  saveData(os, myPointsPrimsEncoding);
948  saveData(os, myDetailEncoding);
949  saveData(os, mySquareMatrix);
950  saveData(os, myRows);
951  saveData(os, myCols);
952  saveData(os, myRowAttribute);
953  saveData(os, myColAttribute);
954  saveData(os, myMatrixValueAttribute);
955  saveData(os, myVectorSrcStorage);
956  saveData(os, myVectorSrcAttribute);
957  saveData(os, myVectorDstStorage);
958  saveData(os, myVectorDstAttribute);
959  saveData(os, myPinnedGroup);
960  saveData(os, myReduceRows);
961  saveData(os, myScale);
962  saveData(os, myAccumulateResult);
963  saveData(os, myDenseDirectSolver);
964  saveData(os, mySparseDirectSolver);
965  saveData(os, mySparseDirectSolverBackend);
966  saveData(os, myDensePreconditioner);
967  saveData(os, mySparsePreconditioner);
968 
969  }
970 
971  bool load(UT_IStream &is)
972  {
973  int32 v;
974  is.bread(&v, 1);
975  if (version() != v)
976  {
977  // Fail incompatible versions
978  return false;
979  }
980  loadData(is, myMode);
981  loadData(is, myCookInplace);
982  loadData(is, myPrecision);
983  loadData(is, myUseIterativeSolver);
984  loadData(is, myIterativeSolver);
985  loadData(is, mySolveWithGuess);
986  loadData(is, myUseEigensolver);
987  loadData(is, mySpectraEigensolver);
988  loadData(is, myNumEigenpairs);
989  loadData(is, myShift);
990  loadData(is, mySolverTolerance);
991  loadData(is, myMatrixStorage);
992  loadData(is, myVolumeEncoding);
993  loadData(is, myPointsPrimsEncoding);
994  loadData(is, myDetailEncoding);
995  loadData(is, mySquareMatrix);
996  loadData(is, myRows);
997  loadData(is, myCols);
998  loadData(is, myRowAttribute);
999  loadData(is, myColAttribute);
1000  loadData(is, myMatrixValueAttribute);
1001  loadData(is, myVectorSrcStorage);
1002  loadData(is, myVectorSrcAttribute);
1003  loadData(is, myVectorDstStorage);
1004  loadData(is, myVectorDstAttribute);
1005  loadData(is, myPinnedGroup);
1006  loadData(is, myReduceRows);
1007  loadData(is, myScale);
1008  loadData(is, myAccumulateResult);
1009  loadData(is, myDenseDirectSolver);
1010  loadData(is, mySparseDirectSolver);
1011  loadData(is, mySparseDirectSolverBackend);
1012  loadData(is, myDensePreconditioner);
1013  loadData(is, mySparsePreconditioner);
1014 
1015  return true;
1016  }
1017 
1018  Mode getMode() const { return Mode(myMode); }
1019  void setMode(Mode val) { myMode = int64(val); }
1020  Mode opMode(const SOP_NodeVerb::CookParms &cookparms) const
1021  {
1022  SOP_Node *thissop = cookparms.getNode();
1023  if (!thissop) return getMode();
1024  int64 result;
1025  OP_Utils::evalOpParm(result, thissop, "mode", cookparms.getCookTime(), 0);
1026  return Mode(result);
1027  }
1028  bool getCookInplace() const { return myCookInplace; }
1029  void setCookInplace(bool val) { myCookInplace = val; }
1030  bool opCookInplace(const SOP_NodeVerb::CookParms &cookparms) const
1031  {
1032  SOP_Node *thissop = cookparms.getNode();
1033  if (!thissop) return getCookInplace();
1034  bool result;
1035  OP_Utils::evalOpParm(result, thissop, "cookinplace", cookparms.getCookTime(), 0);
1036  return result;
1037  }
1038  Precision getPrecision() const { return Precision(myPrecision); }
1039  void setPrecision(Precision val) { myPrecision = int64(val); }
1041  {
1042  SOP_Node *thissop = cookparms.getNode();
1043  if (!thissop) return getPrecision();
1044  int64 result;
1045  OP_Utils::evalOpParm(result, thissop, "precision", cookparms.getCookTime(), 0);
1046  return Precision(result);
1047  }
1048  bool getUseIterativeSolver() const { return myUseIterativeSolver; }
1049  void setUseIterativeSolver(bool val) { myUseIterativeSolver = val; }
1050  bool opUseIterativeSolver(const SOP_NodeVerb::CookParms &cookparms) const
1051  {
1052  SOP_Node *thissop = cookparms.getNode();
1053  if (!thissop) return getUseIterativeSolver();
1054  bool result;
1055  OP_Utils::evalOpParm(result, thissop, "useiterativesolver", cookparms.getCookTime(), 0);
1056  return result;
1057  }
1058  IterativeSolver getIterativeSolver() const { return IterativeSolver(myIterativeSolver); }
1059  void setIterativeSolver(IterativeSolver val) { myIterativeSolver = int64(val); }
1061  {
1062  SOP_Node *thissop = cookparms.getNode();
1063  if (!thissop) return getIterativeSolver();
1064  int64 result;
1065  OP_Utils::evalOpParm(result, thissop, "iterativesolver", cookparms.getCookTime(), 0);
1066  return IterativeSolver(result);
1067  }
1068  bool getSolveWithGuess() const { return mySolveWithGuess; }
1069  void setSolveWithGuess(bool val) { mySolveWithGuess = val; }
1070  bool opSolveWithGuess(const SOP_NodeVerb::CookParms &cookparms) const
1071  {
1072  SOP_Node *thissop = cookparms.getNode();
1073  if (!thissop) return getSolveWithGuess();
1074  bool result;
1075  OP_Utils::evalOpParm(result, thissop, "solvewithguess", cookparms.getCookTime(), 0);
1076  return result;
1077  }
1078  bool getUseEigensolver() const { return myUseEigensolver; }
1079  void setUseEigensolver(bool val) { myUseEigensolver = val; }
1080  bool opUseEigensolver(const SOP_NodeVerb::CookParms &cookparms) const
1081  {
1082  SOP_Node *thissop = cookparms.getNode();
1083  if (!thissop) return getUseEigensolver();
1084  bool result;
1085  OP_Utils::evalOpParm(result, thissop, "useeigensolver", cookparms.getCookTime(), 0);
1086  return result;
1087  }
1088  SpectraEigensolver getSpectraEigensolver() const { return SpectraEigensolver(mySpectraEigensolver); }
1089  void setSpectraEigensolver(SpectraEigensolver val) { mySpectraEigensolver = int64(val); }
1091  {
1092  SOP_Node *thissop = cookparms.getNode();
1093  if (!thissop) return getSpectraEigensolver();
1094  int64 result;
1095  OP_Utils::evalOpParm(result, thissop, "spectraeigensolver", cookparms.getCookTime(), 0);
1096  return SpectraEigensolver(result);
1097  }
1098  int64 getNumEigenpairs() const { return myNumEigenpairs; }
1099  void setNumEigenpairs(int64 val) { myNumEigenpairs = val; }
1101  {
1102  SOP_Node *thissop = cookparms.getNode();
1103  if (!thissop) return getNumEigenpairs();
1104  int64 result;
1105  OP_Utils::evalOpParm(result, thissop, "numeigenpairs", cookparms.getCookTime(), 0);
1106  return result;
1107  }
1108  fpreal64 getShift() const { return myShift; }
1109  void setShift(fpreal64 val) { myShift = val; }
1110  fpreal64 opShift(const SOP_NodeVerb::CookParms &cookparms) const
1111  {
1112  SOP_Node *thissop = cookparms.getNode();
1113  if (!thissop) return getShift();
1114  fpreal64 result;
1115  OP_Utils::evalOpParm(result, thissop, "shift", cookparms.getCookTime(), 0);
1116  return result;
1117  }
1118  fpreal64 getSolverTolerance() const { return mySolverTolerance; }
1119  void setSolverTolerance(fpreal64 val) { mySolverTolerance = val; }
1121  {
1122  SOP_Node *thissop = cookparms.getNode();
1123  if (!thissop) return getSolverTolerance();
1124  fpreal64 result;
1125  OP_Utils::evalOpParm(result, thissop, "solvertolerance", cookparms.getCookTime(), 0);
1126  return result;
1127  }
1128  MatrixStorage getMatrixStorage() const { return MatrixStorage(myMatrixStorage); }
1129  void setMatrixStorage(MatrixStorage val) { myMatrixStorage = int64(val); }
1131  {
1132  SOP_Node *thissop = cookparms.getNode();
1133  if (!thissop) return getMatrixStorage();
1134  int64 result;
1135  OP_Utils::evalOpParm(result, thissop, "matrixstorage", cookparms.getCookTime(), 0);
1136  return MatrixStorage(result);
1137  }
1138  VolumeEncoding getVolumeEncoding() const { return VolumeEncoding(myVolumeEncoding); }
1139  void setVolumeEncoding(VolumeEncoding val) { myVolumeEncoding = int64(val); }
1141  {
1142  SOP_Node *thissop = cookparms.getNode();
1143  if (!thissop) return getVolumeEncoding();
1144  int64 result;
1145  OP_Utils::evalOpParm(result, thissop, "volumeencoding", cookparms.getCookTime(), 0);
1146  return VolumeEncoding(result);
1147  }
1148  PointsPrimsEncoding getPointsPrimsEncoding() const { return PointsPrimsEncoding(myPointsPrimsEncoding); }
1149  void setPointsPrimsEncoding(PointsPrimsEncoding val) { myPointsPrimsEncoding = int64(val); }
1151  {
1152  SOP_Node *thissop = cookparms.getNode();
1153  if (!thissop) return getPointsPrimsEncoding();
1154  int64 result;
1155  OP_Utils::evalOpParm(result, thissop, "pointsprimsencoding", cookparms.getCookTime(), 0);
1156  return PointsPrimsEncoding(result);
1157  }
1158  DetailEncoding getDetailEncoding() const { return DetailEncoding(myDetailEncoding); }
1159  void setDetailEncoding(DetailEncoding val) { myDetailEncoding = int64(val); }
1161  {
1162  SOP_Node *thissop = cookparms.getNode();
1163  if (!thissop) return getDetailEncoding();
1164  int64 result;
1165  OP_Utils::evalOpParm(result, thissop, "detailencoding", cookparms.getCookTime(), 0);
1166  return DetailEncoding(result);
1167  }
1168  bool getSquareMatrix() const { return mySquareMatrix; }
1169  void setSquareMatrix(bool val) { mySquareMatrix = val; }
1170  bool opSquareMatrix(const SOP_NodeVerb::CookParms &cookparms) const
1171  {
1172  SOP_Node *thissop = cookparms.getNode();
1173  if (!thissop) return getSquareMatrix();
1174  bool result;
1175  OP_Utils::evalOpParm(result, thissop, "squarematrix", cookparms.getCookTime(), 0);
1176  return result;
1177  }
1178  int64 getRows() const { return myRows; }
1179  void setRows(int64 val) { myRows = val; }
1180  int64 opRows(const SOP_NodeVerb::CookParms &cookparms) const
1181  {
1182  SOP_Node *thissop = cookparms.getNode();
1183  if (!thissop) return getRows();
1184  int64 result;
1185  OP_Utils::evalOpParm(result, thissop, "rows", cookparms.getCookTime(), 0);
1186  return result;
1187  }
1188  int64 getCols() const { return myCols; }
1189  void setCols(int64 val) { myCols = val; }
1190  int64 opCols(const SOP_NodeVerb::CookParms &cookparms) const
1191  {
1192  SOP_Node *thissop = cookparms.getNode();
1193  if (!thissop) return getCols();
1194  int64 result;
1195  OP_Utils::evalOpParm(result, thissop, "cols", cookparms.getCookTime(), 0);
1196  return result;
1197  }
1198  const UT_StringHolder & getRowAttribute() const { return myRowAttribute; }
1199  void setRowAttribute(const UT_StringHolder & val) { myRowAttribute = val; }
1201  {
1202  SOP_Node *thissop = cookparms.getNode();
1203  if (!thissop) return getRowAttribute();
1205  OP_Utils::evalOpParm(result, thissop, "rowattr", cookparms.getCookTime(), 0);
1206  return result;
1207  }
1208  const UT_StringHolder & getColAttribute() const { return myColAttribute; }
1209  void setColAttribute(const UT_StringHolder & val) { myColAttribute = val; }
1211  {
1212  SOP_Node *thissop = cookparms.getNode();
1213  if (!thissop) return getColAttribute();
1215  OP_Utils::evalOpParm(result, thissop, "colattr", cookparms.getCookTime(), 0);
1216  return result;
1217  }
1218  const UT_StringHolder & getMatrixValueAttribute() const { return myMatrixValueAttribute; }
1219  void setMatrixValueAttribute(const UT_StringHolder & val) { myMatrixValueAttribute = val; }
1221  {
1222  SOP_Node *thissop = cookparms.getNode();
1223  if (!thissop) return getMatrixValueAttribute();
1225  OP_Utils::evalOpParm(result, thissop, "matrixvalueattr", cookparms.getCookTime(), 0);
1226  return result;
1227  }
1228  VectorSrcStorage getVectorSrcStorage() const { return VectorSrcStorage(myVectorSrcStorage); }
1229  void setVectorSrcStorage(VectorSrcStorage val) { myVectorSrcStorage = int64(val); }
1231  {
1232  SOP_Node *thissop = cookparms.getNode();
1233  if (!thissop) return getVectorSrcStorage();
1234  int64 result;
1235  OP_Utils::evalOpParm(result, thissop, "vectorsrcstorage", cookparms.getCookTime(), 0);
1236  return VectorSrcStorage(result);
1237  }
1238  const UT_StringHolder & getVectorSrcAttribute() const { return myVectorSrcAttribute; }
1239  void setVectorSrcAttribute(const UT_StringHolder & val) { myVectorSrcAttribute = val; }
1241  {
1242  SOP_Node *thissop = cookparms.getNode();
1243  if (!thissop) return getVectorSrcAttribute();
1245  OP_Utils::evalOpParm(result, thissop, "vectorsrcattr", cookparms.getCookTime(), 0);
1246  return result;
1247  }
1248  VectorDstStorage getVectorDstStorage() const { return VectorDstStorage(myVectorDstStorage); }
1249  void setVectorDstStorage(VectorDstStorage val) { myVectorDstStorage = int64(val); }
1251  {
1252  SOP_Node *thissop = cookparms.getNode();
1253  if (!thissop) return getVectorDstStorage();
1254  int64 result;
1255  OP_Utils::evalOpParm(result, thissop, "vectordststorage", cookparms.getCookTime(), 0);
1256  return VectorDstStorage(result);
1257  }
1258  const UT_StringHolder & getVectorDstAttribute() const { return myVectorDstAttribute; }
1259  void setVectorDstAttribute(const UT_StringHolder & val) { myVectorDstAttribute = val; }
1261  {
1262  SOP_Node *thissop = cookparms.getNode();
1263  if (!thissop) return getVectorDstAttribute();
1265  OP_Utils::evalOpParm(result, thissop, "vectordstattr", cookparms.getCookTime(), 0);
1266  return result;
1267  }
1268  const UT_StringHolder & getPinnedGroup() const { return myPinnedGroup; }
1269  void setPinnedGroup(const UT_StringHolder & val) { myPinnedGroup = val; }
1271  {
1272  SOP_Node *thissop = cookparms.getNode();
1273  if (!thissop) return getPinnedGroup();
1275  OP_Utils::evalOpParm(result, thissop, "pinnedgroup", cookparms.getCookTime(), 0);
1276  return result;
1277  }
1278  bool getReduceRows() const { return myReduceRows; }
1279  void setReduceRows(bool val) { myReduceRows = val; }
1280  bool opReduceRows(const SOP_NodeVerb::CookParms &cookparms) const
1281  {
1282  SOP_Node *thissop = cookparms.getNode();
1283  if (!thissop) return getReduceRows();
1284  bool result;
1285  OP_Utils::evalOpParm(result, thissop, "reducerows", cookparms.getCookTime(), 0);
1286  return result;
1287  }
1288  fpreal64 getScale() const { return myScale; }
1289  void setScale(fpreal64 val) { myScale = val; }
1290  fpreal64 opScale(const SOP_NodeVerb::CookParms &cookparms) const
1291  {
1292  SOP_Node *thissop = cookparms.getNode();
1293  if (!thissop) return getScale();
1294  fpreal64 result;
1295  OP_Utils::evalOpParm(result, thissop, "scale", cookparms.getCookTime(), 0);
1296  return result;
1297  }
1298  bool getAccumulateResult() const { return myAccumulateResult; }
1299  void setAccumulateResult(bool val) { myAccumulateResult = val; }
1300  bool opAccumulateResult(const SOP_NodeVerb::CookParms &cookparms) const
1301  {
1302  SOP_Node *thissop = cookparms.getNode();
1303  if (!thissop) return getAccumulateResult();
1304  bool result;
1305  OP_Utils::evalOpParm(result, thissop, "accumulateresult", cookparms.getCookTime(), 0);
1306  return result;
1307  }
1308  DenseDirectSolver getDenseDirectSolver() const { return DenseDirectSolver(myDenseDirectSolver); }
1309  void setDenseDirectSolver(DenseDirectSolver val) { myDenseDirectSolver = int64(val); }
1311  {
1312  SOP_Node *thissop = cookparms.getNode();
1313  if (!thissop) return getDenseDirectSolver();
1314  int64 result;
1315  OP_Utils::evalOpParm(result, thissop, "densedirectsolver", cookparms.getCookTime(), 0);
1316  return DenseDirectSolver(result);
1317  }
1318  SparseDirectSolver getSparseDirectSolver() const { return SparseDirectSolver(mySparseDirectSolver); }
1319  void setSparseDirectSolver(SparseDirectSolver val) { mySparseDirectSolver = int64(val); }
1321  {
1322  SOP_Node *thissop = cookparms.getNode();
1323  if (!thissop) return getSparseDirectSolver();
1324  int64 result;
1325  OP_Utils::evalOpParm(result, thissop, "sparsedirectsolver", cookparms.getCookTime(), 0);
1326  return SparseDirectSolver(result);
1327  }
1329  void setSparseDirectSolverBackend(SparseDirectSolverBackend val) { mySparseDirectSolverBackend = int64(val); }
1331  {
1332  SOP_Node *thissop = cookparms.getNode();
1333  if (!thissop) return getSparseDirectSolverBackend();
1334  int64 result;
1335  OP_Utils::evalOpParm(result, thissop, "sparsedirectsolverbackend", cookparms.getCookTime(), 0);
1336  return SparseDirectSolverBackend(result);
1337  }
1338  DensePreconditioner getDensePreconditioner() const { return DensePreconditioner(myDensePreconditioner); }
1339  void setDensePreconditioner(DensePreconditioner val) { myDensePreconditioner = int64(val); }
1341  {
1342  SOP_Node *thissop = cookparms.getNode();
1343  if (!thissop) return getDensePreconditioner();
1344  int64 result;
1345  OP_Utils::evalOpParm(result, thissop, "densepreconditioner", cookparms.getCookTime(), 0);
1346  return DensePreconditioner(result);
1347  }
1348  SparsePreconditioner getSparsePreconditioner() const { return SparsePreconditioner(mySparsePreconditioner); }
1349  void setSparsePreconditioner(SparsePreconditioner val) { mySparsePreconditioner = int64(val); }
1351  {
1352  SOP_Node *thissop = cookparms.getNode();
1353  if (!thissop) return getSparsePreconditioner();
1354  int64 result;
1355  OP_Utils::evalOpParm(result, thissop, "sparsepreconditioner", cookparms.getCookTime(), 0);
1356  return SparsePreconditioner(result);
1357  }
1358 
1359 private:
1360  int64 myMode;
1361  bool myCookInplace;
1362  int64 myPrecision;
1363  bool myUseIterativeSolver;
1364  int64 myIterativeSolver;
1365  bool mySolveWithGuess;
1366  bool myUseEigensolver;
1367  int64 mySpectraEigensolver;
1368  int64 myNumEigenpairs;
1369  fpreal64 myShift;
1370  fpreal64 mySolverTolerance;
1371  int64 myMatrixStorage;
1372  int64 myVolumeEncoding;
1373  int64 myPointsPrimsEncoding;
1374  int64 myDetailEncoding;
1375  bool mySquareMatrix;
1376  int64 myRows;
1377  int64 myCols;
1378  UT_StringHolder myRowAttribute;
1379  UT_StringHolder myColAttribute;
1380  UT_StringHolder myMatrixValueAttribute;
1381  int64 myVectorSrcStorage;
1382  UT_StringHolder myVectorSrcAttribute;
1383  int64 myVectorDstStorage;
1384  UT_StringHolder myVectorDstAttribute;
1385  UT_StringHolder myPinnedGroup;
1386  bool myReduceRows;
1387  fpreal64 myScale;
1388  bool myAccumulateResult;
1389  int64 myDenseDirectSolver;
1390  int64 mySparseDirectSolver;
1391  int64 mySparseDirectSolverBackend;
1392  int64 myDensePreconditioner;
1393  int64 mySparsePreconditioner;
1394 
1395 };
Precision opPrecision(const SOP_NodeVerb::CookParms &cookparms) const
void setPointsPrimsEncoding(PointsPrimsEncoding val)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
UT_StringHolder opMatrixValueAttribute(const SOP_NodeVerb::CookParms &cookparms) const
SparseDirectSolverBackend opSparseDirectSolverBackend(const SOP_NodeVerb::CookParms &cookparms) const
VectorDstStorage getVectorDstStorage() const
static void loadData(UT_IStream &is, UT_Vector3I &v)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
static void loadData(UT_IStream &is, int64 &v)
int int32
Definition: SYS_Types.h:39
SOP_Node * getNode() const
Definition: SOP_NodeVerb.h:347
const char * getNestParmName(TempIndex fieldnum) const override
static void saveData(std::ostream &os, UT_Vector3D v)
void setDensePreconditioner(DensePreconditioner val)
SpectraEigensolver getSpectraEigensolver() const
static void loadData(UT_IStream &is, UT_Vector2D &v)
static void loadData(UT_IStream &is, UT_Vector4I &v)
void setIterativeSolver(IterativeSolver val)
T clampMaxValue(fpreal maxvalue, const T &src) const
Definition: OP_NodeParms.h:315
fpreal64 getSolverTolerance() const
bool opCookInplace(const SOP_NodeVerb::CookParms &cookparms) const
exint bread(int32 *buffer, exint asize=1)
GLboolean * data
Definition: glcorearb.h:131
GT_API const UT_StringHolder time
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector4.h:493
const GLdouble * v
Definition: glcorearb.h:837
fpreal getTime() const
Definition: OP_Context.h:62
SparseDirectSolver opSparseDirectSolver(const SOP_NodeVerb::CookParms &cookparms) const
int64 opNumEigenpairs(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
static void loadData(UT_IStream &is, UT_Matrix4D &v)
void doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
const OP_Context & context() const
Definition: OP_NodeParms.h:97
void setPrecision(Precision val)
DensePreconditioner opDensePreconditioner(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector3.h:667
int64 exint
Definition: SYS_Types.h:125
SYS_FORCE_INLINE const char * buffer() const
static void saveData(std::ostream &os, bool v)
DensePreconditioner getDensePreconditioner() const
static void saveData(std::ostream &os, PRM_DataItemHandle s)
static void saveData(std::ostream &os, fpreal64 v)
GLdouble s
Definition: glad.h:3009
void setVectorSrcStorage(VectorSrcStorage val)
VolumeEncoding getVolumeEncoding() const
void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
An output stream object that owns its own string buffer storage.
DenseDirectSolver getDenseDirectSolver() const
static void saveData(std::ostream &os, int64 v)
**But if you need a result
Definition: thread.h:613
void setSolverTolerance(fpreal64 val)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr< UT_Ramp > &value) const override
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
const UT_StringHolder & getMatrixValueAttribute() const
T clampMinValue(fpreal minvalue, const T &src) const
Definition: OP_NodeParms.h:308
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
static void saveData(std::ostream &os, UT_SharedPtr< UT_Ramp > s)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
SpectraEigensolver opSpectraEigensolver(const SOP_NodeVerb::CookParms &cookparms) const
void setSpectraEigensolver(SpectraEigensolver val)
exint nodeIdx() const
Definition: OP_NodeParms.h:95
static PRM_DataItemHandle parseBinary(const char *type, UT_IStream &is)
void setDenseDirectSolver(DenseDirectSolver val)
const UT_WorkBuffer & str()
Returns a read-only reference to the underlying UT_WorkBuffer.
void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
IterativeSolver getIterativeSolver() const
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector4.h:491
IterativeSolver opIterativeSolver(const SOP_NodeVerb::CookParms &cookparms) const
SparseDirectSolver getSparseDirectSolver() const
void setPinnedGroup(const UT_StringHolder &val)
VectorDstStorage opVectorDstStorage(const SOP_NodeVerb::CookParms &cookparms) const
double fpreal64
Definition: SYS_Types.h:201
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector2.h:423
bool isParmColorRamp(exint idx) const override
bool operator==(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
Definition: Dimensions.h:137
DenseDirectSolver opDenseDirectSolver(const SOP_NodeVerb::CookParms &cookparms) const
int64 opCols(const SOP_NodeVerb::CookParms &cookparms) const
void loadFromOpSubclass(const LoadParms &loadparms) override
static void loadData(UT_IStream &is, UT_Vector4D &v)
void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
static void loadData(UT_IStream &is, UT_Vector3D &v)
fpreal64 opSolverTolerance(const SOP_NodeVerb::CookParms &cookparms) const
exint length() const
bool opSolveWithGuess(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getPinnedGroup() const
SYS_FORCE_INLINE const char * buffer() const
std::shared_ptr< T > UT_SharedPtr
Wrapper around std::shared_ptr.
Definition: UT_SharedPtr.h:36
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector4.h:495
static void saveData(std::ostream &os, UT_Vector4D v)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
const OP_GraphProxy * graph() const
Definition: OP_NodeParms.h:94
UT_StringHolder opVectorDstAttribute(const SOP_NodeVerb::CookParms &cookparms) const
SparsePreconditioner opSparsePreconditioner(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opScale(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
DetailEncoding opDetailEncoding(const SOP_NodeVerb::CookParms &cookparms) const
PointsPrimsEncoding opPointsPrimsEncoding(const SOP_NodeVerb::CookParms &cookparms) const
void save(std::ostream &os) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
exint getNestNumParms(TempIndex idx) const override
MatrixStorage opMatrixStorage(const SOP_NodeVerb::CookParms &cookparms) const
void setVectorSrcAttribute(const UT_StringHolder &val)
void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
long long int64
Definition: SYS_Types.h:116
UT_StringHolder opVectorSrcAttribute(const SOP_NodeVerb::CookParms &cookparms) const
VectorSrcStorage getVectorSrcStorage() const
static void loadData(UT_IStream &is, UT_StringHolder &v)
Precision getPrecision() const
const UT_StringHolder & getVectorDstAttribute() const
const UT_StringHolder & getColAttribute() const
static void loadData(UT_IStream &is, PRM_DataItemHandle &v)
SparseDirectSolverBackend getSparseDirectSolverBackend() const
const UT_StringHolder & getRowAttribute() const
bool opReduceRows(const SOP_NodeVerb::CookParms &cookparms) const
void setVectorDstStorage(VectorDstStorage val)
virtual void evalOpParm(int64 &v, NodeIdx node, const char *parmname, fpreal time, DEP_MicroNode *depnode) const =0
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
static void saveData(std::ostream &os, UT_Vector2D v)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr< UT_Ramp > &value) override
static void saveData(std::ostream &os, UT_Matrix2D v)
VectorSrcStorage opVectorSrcStorage(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
void saveBinary(std::ostream &os) const
Save string to binary stream.
Definition: UT_String.h:296
PointsPrimsEncoding getPointsPrimsEncoding() const
void setRowAttribute(const UT_StringHolder &val)
GT_API const UT_StringHolder version
bool load(UT_IStream &is)
void setVolumeEncoding(VolumeEncoding val)
static void loadData(UT_IStream &is, bool &v)
bool operator!=(const SOP_LinearSolverParms &src) const
bool operator==(const SOP_LinearSolverParms &src) const
bool opUseIterativeSolver(const SOP_NodeVerb::CookParms &cookparms) const
bool opAccumulateResult(const SOP_NodeVerb::CookParms &cookparms) const
void setDetailEncoding(DetailEncoding val)
void coerceValue(T &result, const S &src) const
Definition: OP_NodeParms.h:301
UT_StringHolder opPinnedGroup(const SOP_NodeVerb::CookParms &cookparms) const
void setSparseDirectSolver(SparseDirectSolver val)
fpreal64 fpreal
Definition: SYS_Types.h:277
DEP_MicroNode * depnode() const
Definition: OP_NodeParms.h:99
void setSparsePreconditioner(SparsePreconditioner val)
Utility class for containing a color ramp.
Definition: UT_Ramp.h:88
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
constexpr SYS_FORCE_INLINE T & w() noexcept
Definition: UT_Vector4.h:497
void setVectorDstAttribute(const UT_StringHolder &val)
GLuint GLfloat * val
Definition: glcorearb.h:1608
Vec3< typename MatType::value_type > getScale(const MatType &mat)
Return a Vec3 representing the lengths of the passed matrix's upper 3×3's rows.
Definition: Mat.h:633
static void saveData(std::ostream &os, UT_StringHolder s)
fpreal64 opShift(const SOP_NodeVerb::CookParms &cookparms) const
#define SOP_API
Definition: SOP_API.h:10
static void loadData(UT_IStream &is, fpreal64 &v)
DetailEncoding getDetailEncoding() const
fpreal getCookTime() const
Definition: SOP_NodeVerb.h:361
bool opUseEigensolver(const SOP_NodeVerb::CookParms &cookparms) const
MatrixStorage getMatrixStorage() const
static void saveData(std::ostream &os, UT_Matrix3D v)
const char * findChar(int c) const
Definition: UT_String.h:1385
#define UT_ASSERT(ZZ)
Definition: UT_Assert.h:156
Definition: core.h:1131
const UT_StringHolder & getVectorSrcAttribute() const
void setColAttribute(const UT_StringHolder &val)
bool opSquareMatrix(const SOP_NodeVerb::CookParms &cookparms) const
GLboolean r
Definition: glcorearb.h:1222
static void loadData(UT_IStream &is, UT_Matrix2D &v)
UT_StringHolder opColAttribute(const SOP_NodeVerb::CookParms &cookparms) const
void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
UT_StringHolder opRowAttribute(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_SharedPtr< UT_Ramp > &v)
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector3.h:665
type
Definition: core.h:1059
void copyFrom(const OP_NodeParms *src) override
void setMatrixValueAttribute(const UT_StringHolder &val)
int64 opRows(const SOP_NodeVerb::CookParms &cookparms) const
SparsePreconditioner getSparsePreconditioner() const
ParmType getNestParmType(TempIndex fieldnum) const override
void doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
Mode opMode(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Matrix3D &v)
static void saveData(std::ostream &os, UT_Matrix4D v)
UT_SharedPtr< const PRM_DataItem > PRM_DataItemHandle
Definition: PRM_Parm.h:89
void setSparseDirectSolverBackend(SparseDirectSolverBackend val)
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector2.h:425
SYS_FORCE_INLINE bool isstring() const
OP_NodeParms & operator=(const OP_NodeParms &)=default
SYS_FORCE_INLINE void strncpy(const char *src, exint maxlen)
GLenum src
Definition: glcorearb.h:1793
VolumeEncoding opVolumeEncoding(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector3.h:663
static void loadData(UT_IStream &is, UT_Vector2I &v)
void setMatrixStorage(MatrixStorage val)