SPH
Colorizer.h
Go to the documentation of this file.
1 #pragma once
2 
7 
9 #include "gui/Settings.h"
10 #include "gui/objects/Palette.h"
11 #include "gui/objects/Point.h"
12 #include "gui/objects/Texture.h"
13 #include "gui/renderers/Spectrum.h"
17 #include "post/Analysis.h"
18 #include "quantities/IMaterial.h"
19 #include "quantities/Particle.h"
20 #include "sph/kernel/Kernel.h"
21 #include "system/Factory.h"
22 #include "thread/Scheduler.h"
23 
25 
26 class Particle;
27 
34 class IColorizer : public Polymorphic {
35 public:
37  virtual bool hasData(const Storage& storage) const = 0;
38 
46  virtual void initialize(const Storage& storage, const RefEnum ref) = 0;
47 
49  virtual bool isInitialized() const = 0;
50 
52  virtual Rgba evalColor(const Size idx) const = 0;
53 
57  virtual Optional<float> evalScalar(const Size UNUSED(idx)) const {
58  return NOTHING;
59  }
60 
65  virtual Optional<Vector> evalVector(const Size UNUSED(idx)) const {
66  return NOTHING;
67  }
68 
72  virtual Optional<Particle> getParticle(const Size idx) const = 0;
73 
77  virtual Optional<Palette> getPalette() const = 0;
78 
80  virtual void setPalette(const Palette& newPalette) = 0;
81 
85  virtual std::string name() const = 0;
86 };
87 
93 
94 namespace Detail {
98 template <typename Type>
99 INLINE float getColorizerValue(const Type& value) {
100  SPH_ASSERT(isReal(value));
101  return float(value);
102 }
103 template <>
104 INLINE float getColorizerValue(const Vector& value) {
105  const Float result = getLength(value);
106  SPH_ASSERT(isReal(result), value);
107  return float(result);
108 }
109 template <>
111  return float(sqrt(ddot(value, value)));
112 }
113 template <>
115  return float(sqrt(ddot(value, value)));
116 }
117 
122 template <typename Type>
124  return NOTHING;
125 }
126 template <>
128  return value;
129 }
130 } // namespace Detail
131 
136 enum class ColorizerId {
137  VELOCITY = -1,
138  ACCELERATION = -2,
139  MOVEMENT_DIRECTION = -3,
140  COROTATING_VELOCITY = -4,
141  DISPLACEMENT = -5,
142  DENSITY_PERTURBATION = -6,
143  SUMMED_DENSITY = -7,
144  TOTAL_STRESS = -8,
145  TOTAL_ENERGY = -9,
146  TEMPERATURE = -10,
147  YIELD_REDUCTION = -11,
148  DAMAGE_ACTIVATION = -12,
149  RADIUS = -13,
150  UVW = -15,
151  BOUNDARY = -16,
152  PARTICLE_ID = -17,
153  COMPONENT_ID = -18,
154  BOUND_COMPONENT_ID = -19,
155  AGGREGATE_ID = -20,
156  FLAG = -21,
157  MATERIAL_ID = -22,
158  BEAUTY = -23,
159 };
160 
162 
164 
168 template <typename Type>
169 class TypedColorizer : public IColorizer {
170 protected:
174 
175 public:
177  : id(id)
178  , palette(std::move(palette)) {}
179 
180  virtual bool hasData(const Storage& storage) const override {
181  return storage.has(id);
182  }
183 
184  virtual void initialize(const Storage& storage, const RefEnum ref) override {
185  values = makeArrayRef(storage.getValue<Type>(id), ref);
186  }
187 
188  virtual bool isInitialized() const override {
189  return !values.empty();
190  }
191 
192  virtual Rgba evalColor(const Size idx) const override {
193  return palette(this->evalScalar(idx).value());
194  }
195 
196  virtual Optional<float> evalScalar(const Size idx) const override {
197  SPH_ASSERT(this->isInitialized());
198  return Detail::getColorizerValue(values[idx]);
199  }
200 
201  virtual Optional<Vector> evalVector(const Size idx) const override {
202  return Detail::getColorizerVector(values[idx]);
203  }
204 
205  virtual Optional<Particle> getParticle(const Size idx) const override {
206  return Particle(id, values[idx], idx);
207  }
208 
209  virtual Optional<Palette> getPalette() const override {
210  return palette;
211  }
212 
213  virtual void setPalette(const Palette& newPalette) override {
214  palette = newPalette;
215  }
216 
217  virtual std::string name() const override {
218  return getMetadata(id).quantityName;
219  }
220 };
221 
222 inline bool hasVelocity(const Storage& storage) {
223  return storage.has<Vector>(QuantityId::POSITION, OrderEnum::FIRST) ||
225 }
226 
228 class VelocityColorizer : public TypedColorizer<Vector> {
229 public:
232 
233  virtual bool hasData(const Storage& storage) const override {
234  return hasVelocity(storage);
235  }
236 
237  virtual void initialize(const Storage& storage, const RefEnum ref) override {
239  }
240 
241  virtual Optional<Vector> evalVector(const Size idx) const override {
242  return values[idx];
243  }
244 
245  virtual Optional<Particle> getParticle(const Size idx) const override {
246  return Particle(idx).addDt(QuantityId::POSITION, values[idx]);
247  }
248 
249  virtual std::string name() const override {
250  return "Velocity";
251  }
252 };
253 
255 class AccelerationColorizer : public TypedColorizer<Vector> {
256 public:
259 
260  virtual bool hasData(const Storage& storage) const override {
262  }
263 
264  virtual void initialize(const Storage& storage, const RefEnum ref) override {
266  }
267 
268  virtual Optional<Particle> getParticle(const Size idx) const override {
269  return Particle(idx).addD2t(QuantityId::POSITION, values[idx]);
270  }
271 
272  virtual std::string name() const override {
273  return "Acceleration";
274  }
275 };
276 
279 private:
280  Palette palette;
281  Vector axis;
282  Vector dir1, dir2;
283 
284  ArrayRef<const Vector> values;
285 
286 public:
287  DirectionColorizer(const Vector& axis, const Palette& palette);
288 
289  virtual bool hasData(const Storage& storage) const override {
290  return hasVelocity(storage);
291  }
292 
293  virtual void initialize(const Storage& storage, const RefEnum ref) override {
294  values = makeArrayRef(storage.getDt<Vector>(QuantityId::POSITION), ref);
295  }
296 
297  virtual bool isInitialized() const override {
298  return !values.empty();
299  }
300 
301  virtual Optional<float> evalScalar(const Size idx) const override;
302 
303  virtual Rgba evalColor(const Size idx) const override {
304  return palette(this->evalScalar(idx).value());
305  }
306 
307  virtual Optional<Particle> getParticle(const Size idx) const override {
308  // return velocity of the particle
309  return Particle(idx).addDt(QuantityId::POSITION, values[idx]);
310  }
311 
312  virtual Optional<Palette> getPalette() const override {
313  return palette;
314  }
315 
316  virtual void setPalette(const Palette& newPalette) override {
317  palette = newPalette;
318  }
319 
320  virtual std::string name() const override {
321  return "Direction";
322  }
323 };
324 
327 private:
328  Palette palette;
331  ArrayRef<const Size> matIds;
332 
333  struct BodyMetadata {
334  Vector center;
335  Vector omega;
336  };
337 
338  Array<BodyMetadata> data;
339 
340 public:
342  : palette(std::move(palette)) {}
343 
344  virtual bool hasData(const Storage& storage) const override {
345  return hasVelocity(storage) && storage.has(QuantityId::MATERIAL_ID);
346  }
347 
348  virtual void initialize(const Storage& storage, const RefEnum ref) override;
349 
350  virtual bool isInitialized() const override {
351  return !v.empty();
352  }
353 
354  virtual Rgba evalColor(const Size idx) const override {
355  SPH_ASSERT(!v.empty() && !r.empty());
356  return palette(float(getLength(this->getCorotatingVelocity(idx))));
357  }
358 
359  virtual Optional<Vector> evalVector(const Size idx) const override {
360  return this->getCorotatingVelocity(idx);
361  }
362 
363  virtual Optional<Particle> getParticle(const Size idx) const override {
364  return Particle(idx).addDt(QuantityId::POSITION, this->getCorotatingVelocity(idx));
365  }
366 
367  virtual Optional<Palette> getPalette() const override {
368  return palette;
369  }
370 
371  virtual void setPalette(const Palette& newPalette) override {
372  palette = newPalette;
373  }
374 
375  virtual std::string name() const override {
376  return "Corot. velocity";
377  }
378 
379 private:
380  Vector getCorotatingVelocity(const Size idx) const {
381  const BodyMetadata& body = data[matIds[idx]];
382  return v[idx] - cross(body.omega, r[idx] - body.center);
383  }
384 };
385 
387 private:
388  Palette palette;
390  Array<Float> rho0;
391 
392 public:
394  : palette(std::move(palette)) {}
395 
396  virtual bool hasData(const Storage& storage) const override {
397  return storage.has(QuantityId::DENSITY);
398  }
399 
400  virtual void initialize(const Storage& storage, const RefEnum ref) override {
401  rho = makeArrayRef(storage.getValue<Float>(QuantityId::DENSITY), ref);
402 
403  rho0.resize(rho.size());
404  for (Size i = 0; i < rho.size(); ++i) {
405  rho0[i] = storage.getMaterialOfParticle(i)->getParam<Float>(BodySettingsId::DENSITY);
406  }
407  }
408 
409  virtual bool isInitialized() const override {
410  return !rho.empty();
411  }
412 
413  virtual Rgba evalColor(const Size idx) const override {
414  SPH_ASSERT(this->isInitialized());
415  return palette(float(rho[idx] / rho0[idx] - 1._f));
416  }
417 
418  virtual Optional<Particle> getParticle(const Size idx) const override {
419  return Particle(QuantityId::DENSITY, rho[idx] / rho0[idx] - 1.f, idx);
420  }
421 
422  virtual Optional<Palette> getPalette() const override {
423  return palette;
424  }
425 
426  virtual void setPalette(const Palette& newPalette) override {
427  palette = newPalette;
428  }
429 
430  virtual std::string name() const override {
431  return "Delta Density";
432  }
433 };
434 
436 private:
437  Palette palette;
440 
441  AutoPtr<IBasicFinder> finder;
442 
443  LutKernel<3> kernel;
444 
445 public:
446  SummedDensityColorizer(const RunSettings& settings, Palette palette);
447 
448  virtual bool hasData(const Storage& UNUSED(storage)) const override {
449  // mass and positions must always be present
450  return true;
451  }
452 
453  virtual void initialize(const Storage& storage, const RefEnum ref) override;
454 
455  virtual bool isInitialized() const override {
456  return !m.empty();
457  }
458 
459  virtual Optional<float> evalScalar(const Size idx) const override {
460  return sum(idx);
461  }
462 
463  virtual Rgba evalColor(const Size idx) const override {
464  return palette(sum(idx));
465  }
466 
467  virtual Optional<Particle> getParticle(const Size idx) const override {
468  return Particle(QuantityId::DENSITY, Float(sum(idx)), idx);
469  }
470 
471  virtual Optional<Palette> getPalette() const override {
472  return palette;
473  }
474 
475  virtual void setPalette(const Palette& newPalette) override {
476  palette = newPalette;
477  }
478 
479  virtual std::string name() const override {
480  return "Summed Density";
481  }
482 
483 private:
484  float sum(const Size idx) const;
485 };
486 
487 class StressColorizer : public IColorizer {
488  Palette palette;
491 
492 public:
493  explicit StressColorizer(Palette palette)
494  : palette(std::move(palette)) {}
495 
496  virtual bool hasData(const Storage& storage) const override {
497  return storage.has(QuantityId::DEVIATORIC_STRESS) && storage.has(QuantityId::PRESSURE);
498  }
499 
500  virtual void initialize(const Storage& storage, const RefEnum ref) override {
502  p = makeArrayRef(storage.getValue<Float>(QuantityId::PRESSURE), ref);
503  }
504 
505  virtual bool isInitialized() const override {
506  return !s.empty() && !p.empty();
507  }
508 
509  virtual Rgba evalColor(const Size idx) const override {
510  return palette(this->evalScalar(idx).value());
511  }
512 
513  virtual Optional<float> evalScalar(const Size idx) const override {
514  SPH_ASSERT(this->isInitialized());
515  SymmetricTensor sigma = SymmetricTensor(s[idx]) - p[idx] * SymmetricTensor::identity();
516  // StaticArray<Float, 3> eigens = findEigenvalues(sigma);
517  // return max(abs(eigens[0]), abs(eigens[1]), abs(eigens[2]));
518  return float(sqrt(ddot(sigma, sigma)));
519  }
520 
521  virtual Optional<Vector> evalVector(const Size UNUSED(idx)) const override {
522  return NOTHING;
523  }
524 
525  virtual Optional<Particle> getParticle(const Size idx) const override {
526  SymmetricTensor sigma = SymmetricTensor(s[idx]) - p[idx] * SymmetricTensor::identity();
527  return Particle(QuantityId::DEVIATORIC_STRESS, sigma, idx);
528  }
529 
530  virtual Optional<Palette> getPalette() const override {
531  return palette;
532  }
533 
534  virtual void setPalette(const Palette& newPalette) override {
535  palette = newPalette;
536  }
537 
538  virtual std::string name() const override {
539  return "Total stress";
540  }
541 };
542 
543 class EnergyColorizer : public IColorizer {
544  Palette palette;
547 
548 public:
549  explicit EnergyColorizer(Palette palette)
550  : palette(std::move(palette)) {}
551 
552  virtual bool hasData(const Storage& storage) const override {
553  return hasVelocity(storage) && storage.has(QuantityId::ENERGY);
554  }
555 
556  virtual void initialize(const Storage& storage, const RefEnum ref) override {
557  u = makeArrayRef(storage.getValue<Float>(QuantityId::ENERGY), ref);
558  v = makeArrayRef(storage.getDt<Vector>(QuantityId::POSITION), ref);
559  }
560 
561  virtual bool isInitialized() const override {
562  return !u.empty();
563  }
564 
565  virtual Rgba evalColor(const Size idx) const override {
566  return palette(this->evalScalar(idx).value());
567  }
568 
569  virtual Optional<float> evalScalar(const Size idx) const override {
570  SPH_ASSERT(this->isInitialized());
571  return float(u[idx] + 0.5_f * getSqrLength(v[idx]));
572  }
573 
574  virtual Optional<Vector> evalVector(const Size UNUSED(idx)) const override {
575  return NOTHING;
576  }
577 
578  virtual Optional<Particle> getParticle(const Size idx) const override {
579  const Float value = evalScalar(idx).value();
580  return Particle(QuantityId::ENERGY, value, idx);
581  }
582 
583  virtual Optional<Palette> getPalette() const override {
584  return palette;
585  }
586 
587  virtual void setPalette(const Palette& newPalette) override {
588  palette = newPalette;
589  }
590 
591  virtual std::string name() const override {
592  return "Total energy";
593  }
594 };
595 
596 class TemperatureColorizer : public TypedColorizer<Float> {
597  Float cp;
598 
599 public:
602 
603  virtual bool hasData(const Storage& storage) const override {
604  return storage.has(QuantityId::ENERGY) && storage.getMaterialCnt() > 0;
605  }
606 
607  virtual void initialize(const Storage& storage, const RefEnum ref) override {
608  TypedColorizer<Float>::initialize(storage, ref);
609  cp = storage.getMaterial(0)->getParam<Float>(BodySettingsId::HEAT_CAPACITY);
610  }
611 
612  virtual Optional<float> evalScalar(const Size idx) const override {
613  SPH_ASSERT(this->isInitialized());
614  return float(this->values[idx] / cp);
615  }
616 
617  virtual Optional<Particle> getParticle(const Size idx) const override {
618  return Particle(QuantityId::TEMPERATURE, values[idx] / cp, idx);
619  }
620 
621  virtual Optional<Palette> getPalette() const override {
622  return palette;
623  }
624 
625  virtual void setPalette(const Palette& newPalette) override {
626  palette = newPalette;
627  }
628 
629  virtual std::string name() const override {
630  return "Temperature";
631  }
632 };
633 
634 
636 public:
639 
640  virtual Rgba evalColor(const Size idx) const override {
641  SPH_ASSERT(this->isInitialized());
642  SPH_ASSERT(values[idx] >= 0._f && values[idx] <= 1._f);
643  return palette(float(1._f - values[idx]));
644  }
645 
646  virtual std::string name() const override {
647  return "Yield reduction";
648  }
649 };
650 
652 private:
653  Palette palette;
654  Array<float> ratio;
655 
656 public:
657  explicit DamageActivationColorizer(const Palette& palette)
658  : palette(std::move(palette)) {}
659 
660  virtual bool hasData(const Storage& storage) const override;
661 
662  virtual void initialize(const Storage& storage, const RefEnum ref) override;
663 
664  virtual bool isInitialized() const override {
665  return !ratio.empty();
666  }
667 
668  virtual Rgba evalColor(const Size idx) const override {
669  return palette(ratio[idx]);
670  }
671 
672  virtual Optional<Particle> getParticle(const Size UNUSED(idx)) const override {
673  return NOTHING;
674  }
675 
676  virtual Optional<Palette> getPalette() const override {
677  return palette;
678  }
679 
680  virtual void setPalette(const Palette& newPalette) override {
681  palette = newPalette;
682  }
683 
684  virtual std::string name() const override {
685  return "Damage activation ratio";
686  }
687 };
688 
689 class BeautyColorizer : public IColorizer {
690 private:
692  Palette palette;
693 
694  const float u_0 = 3.e4f;
695  const float u_red = 3.e5f;
696  const float u_glow = 0.5f * u_red;
697  const float u_yellow = 5.e6f;
698 
699  float f_glow;
700 
701 public:
702  BeautyColorizer();
703 
704  virtual bool hasData(const Storage& storage) const override {
705  return storage.has(QuantityId::ENERGY);
706  }
707 
708  virtual void initialize(const Storage& storage, const RefEnum ref) override {
709  u = makeArrayRef(storage.getValue<Float>(QuantityId::ENERGY), ref);
710  }
711 
712  virtual bool isInitialized() const override {
713  return !u.empty();
714  }
715 
716  virtual Rgba evalColor(const Size idx) const override {
717  SPH_ASSERT(this->isInitialized());
718  return palette(float(u[idx]));
719  }
720 
721  virtual Optional<float> evalScalar(const Size idx) const override {
722  const float f = palette.paletteToRelative(u[idx]);
723  return max(0.f, (f - f_glow) / (1.f - f_glow));
724  }
725 
726  virtual Optional<Particle> getParticle(const Size idx) const override {
727  return Particle(idx).addValue(QuantityId::ENERGY, u[idx]);
728  }
729 
730  virtual Optional<Palette> getPalette() const override {
731  return palette;
732  }
733 
734  virtual void setPalette(const Palette& newPalette) override {
735  palette = newPalette;
736  }
737 
738  virtual std::string name() const override {
739  return "Beauty";
740  }
741 };
742 
743 class RadiusColorizer : public TypedColorizer<Vector> {
744 public:
747 
748  virtual void initialize(const Storage& storage, const RefEnum ref) override {
750  }
751 
752  virtual Rgba evalColor(const Size idx) const override {
753  SPH_ASSERT(this->isInitialized());
754  return palette(float(values[idx][H]));
755  }
756 
757  virtual Optional<Particle> getParticle(const Size idx) const override {
759  }
760 
761  virtual bool hasData(const Storage& UNUSED(storage)) const override {
762  // radii are always present
763  return true;
764  }
765 
766  virtual std::string name() const override {
767  return "Radius";
768  }
769 };
770 
771 class UvwColorizer : public IColorizer {
772 private:
774 
775 public:
776  virtual bool hasData(const Storage& storage) const override {
777  return storage.has(QuantityId::UVW);
778  }
779 
780  virtual void initialize(const Storage& storage, const RefEnum ref) override {
781  uvws = makeArrayRef(storage.getValue<Vector>(QuantityId::UVW), ref);
782  }
783 
784  virtual bool isInitialized() const override {
785  return !uvws.empty();
786  }
787 
788  virtual Rgba evalColor(const Size idx) const override {
789  SPH_ASSERT(this->isInitialized());
790  return Rgba(float(uvws[idx][X]), 0.f, float(uvws[idx][Y]));
791  }
792 
793  virtual Optional<Particle> getParticle(const Size UNUSED(idx)) const override {
794  return NOTHING;
795  }
796 
797  virtual Optional<Palette> getPalette() const override {
798  return NOTHING;
799  }
800 
801  virtual void setPalette(const Palette& UNUSED(newPalette)) override {}
802 
803  virtual std::string name() const override {
804  return "Uvws";
805  }
806 };
807 
810 public:
811  enum class Detection {
816 
820  NORMAL_BASED,
821  };
822 
823 private:
824  Detection detection;
825 
826  struct {
829  } normals;
830 
831  struct {
834  } neighbours;
835 
836 public:
837  BoundaryColorizer(const Detection detection, const Float threshold = 15._f);
838 
839  virtual bool hasData(const Storage& storage) const override;
840 
841  virtual void initialize(const Storage& storage, const RefEnum ref) override;
842 
843  virtual bool isInitialized() const override;
844 
845  virtual Rgba evalColor(const Size idx) const override;
846 
847  virtual Optional<Particle> getParticle(const Size UNUSED(idx)) const override {
848  // doesn't really make sense to assign some value to boundary
849  return NOTHING;
850  }
851 
852  virtual Optional<Palette> getPalette() const override {
853  return NOTHING;
854  }
855 
856  virtual void setPalette(const Palette& UNUSED(newPalette)) override {}
857 
858  virtual std::string name() const override {
859  return "Boundary";
860  }
861 
862 private:
863  bool isBoundary(const Size idx) const;
864 };
865 
866 template <typename TDerived>
868 private:
869  Rgba backgroundColor;
870  Size seed = 1;
871 
872 public:
873  explicit IdColorizerTemplate(const GuiSettings& gui) {
874  backgroundColor = gui.get<Rgba>(GuiSettingsId::BACKGROUND_COLOR);
875  }
876 
877  void setSeed(const Size newSeed) {
878  seed = newSeed;
879  }
880 
881  virtual Rgba evalColor(const Size idx) const override;
882 
883  virtual Optional<Particle> getParticle(const Size idx) const override;
884 
885  virtual Optional<Palette> getPalette() const override {
886  return NOTHING;
887  }
888 
889  virtual void setPalette(const Palette& UNUSED(newPalette)) override {}
890 };
891 
892 class ParticleIdColorizer : public IdColorizerTemplate<ParticleIdColorizer> {
893 private:
894  ArrayRef<const Size> persistentIdxs;
895 
896 public:
898 
899  INLINE Optional<Size> evalId(const Size idx) const {
900  if (!persistentIdxs.empty() && idx < persistentIdxs.size()) {
901  return persistentIdxs[idx];
902  } else {
903  return idx;
904  }
905  }
906 
907  virtual bool hasData(const Storage& UNUSED(storage)) const override {
908  return true;
909  }
910 
911  virtual void initialize(const Storage& storage, const RefEnum ref) override;
912 
913  virtual bool isInitialized() const override {
914  return true;
915  }
916 
917  virtual Optional<Particle> getParticle(const Size idx) const override;
918 
919  virtual std::string name() const override {
920  return "Particle ID";
921  }
922 };
923 
924 class ComponentIdColorizer : public IdColorizerTemplate<ComponentIdColorizer> {
925 private:
926  Flags<Post::ComponentFlag> connectivity;
927 
928  Array<Size> components;
929 
932 
933  Optional<Size> highlightIdx;
934 
937  struct {
939  } cached;
940 
941 public:
942  explicit ComponentIdColorizer(const GuiSettings& gui,
943  const Flags<Post::ComponentFlag> connectivity,
944  const Optional<Size> highlightIdx = NOTHING);
945 
946  void setHighlightIdx(const Optional<Size> newHighlightIdx);
947 
949  return highlightIdx;
950  }
951 
952  void setConnectivity(const Flags<Post::ComponentFlag> newConnectivity) {
953  connectivity = newConnectivity;
954  cached.r.clear();
955  }
956 
958  return connectivity;
959  }
960 
961  INLINE Optional<Size> evalId(const Size idx) const {
962  return components[idx];
963  }
964 
965  virtual Rgba evalColor(const Size idx) const override;
966 
967  virtual Optional<Particle> getParticle(const Size idx) const override;
968 
969  virtual bool hasData(const Storage& storage) const override;
970 
971  virtual void initialize(const Storage& storage, const RefEnum ref) override;
972 
973  virtual bool isInitialized() const override {
974  return !components.empty();
975  }
976 
977  virtual std::string name() const override;
978 };
979 
980 class AggregateIdColorizer : public IdColorizerTemplate<AggregateIdColorizer> {
981 private:
983 
984 public:
986 
987  INLINE Optional<Size> evalId(const Size idx) const {
988  if (ids[idx] != Size(-1)) {
989  return ids[idx];
990  } else {
991  return NOTHING;
992  }
993  }
994 
995  virtual bool hasData(const Storage& storage) const override {
996  return storage.has(QuantityId::AGGREGATE_ID) && storage.getUserData() != nullptr;
997  }
998 
999  virtual void initialize(const Storage& storage, const RefEnum UNUSED(ref)) override {
1000  ids = storage.getValue<Size>(QuantityId::AGGREGATE_ID);
1001  }
1002 
1003  virtual bool isInitialized() const override {
1004  return ids != nullptr;
1005  }
1006 
1007  virtual std::string name() const override {
1008  return "Aggregate ID";
1009  }
1010 };
1011 
1012 class IndexColorizer : public IdColorizerTemplate<IndexColorizer> {
1013 private:
1014  QuantityId id;
1015  ArrayRef<const Size> idxs;
1016 
1017 public:
1018  IndexColorizer(const QuantityId id, const GuiSettings& gui)
1020  , id(id) {}
1021 
1022  INLINE Optional<Size> evalId(const Size idx) const {
1023  return idxs[idx];
1024  }
1025 
1026  virtual bool hasData(const Storage& storage) const override {
1027  return storage.has(id);
1028  }
1029 
1030  virtual void initialize(const Storage& storage, const RefEnum ref) override {
1031  idxs = makeArrayRef(storage.getValue<Size>(id), ref);
1032  }
1033 
1034  virtual bool isInitialized() const override {
1035  return !idxs.empty();
1036  }
1037 
1038  virtual std::string name() const override {
1039  return getMetadata(id).quantityName;
1040  }
1041 };
1042 
1044 private:
1045  Array<std::string> eosNames;
1046  Array<std::string> rheoNames;
1047 
1048 public:
1051 
1052  virtual void initialize(const Storage& storage, const RefEnum ref) override;
1053 
1054  virtual Optional<Particle> getParticle(const Size idx) const override;
1055 };
1056 
Various function for interpretation of the results of a simulation.
INLINE bool isReal(const AntisymmetricTensor &t)
INLINE Float ddot(const AntisymmetricTensor &t1, const AntisymmetricTensor &t2)
Double-dot product t1 : t2 = sum_ij t1_ij t2_ij.
RefEnum
Definition: ArrayRef.h:7
ArrayRef< T > makeArrayRef(Array< T > &data, const RefEnum type)
Definition: ArrayRef.h:138
#define SPH_ASSERT(x,...)
Definition: Assert.h:94
NAMESPACE_SPH_BEGIN
Definition: BarnesHut.cpp:13
bool hasVelocity(const Storage &storage)
Definition: Colorizer.h:222
SPH_EXTEND_ENUM(QuantityId, ColorizerId)
ColorizerId
Special colorizers that do not directly correspond to quantities.
Definition: Colorizer.h:136
@ TOTAL_STRESS
Total stress (sigma = S - pI)
@ FLAG
Particles of different bodies are colored differently.
@ COROTATING_VELOCITY
Velocities with a respect to the rotating body.
@ MOVEMENT_DIRECTION
Projected direction of motion.
@ RADIUS
Radii/smoothing lenghts of particles.
@ SUMMED_DENSITY
Density computed from particle masses by direct summation of neighbours.
@ DENSITY_PERTURBATION
Relative difference of density and initial density (rho/rho0 - 1)
@ COMPONENT_ID
Color assigned to each component (group of connected particles)
@ YIELD_REDUCTION
Reduction of stress tensor due to yielding (1 - f_vonMises)
@ PARTICLE_ID
Each particle drawn with different color.
@ TOTAL_ENERGY
Sum of kinetic and internal energy for given particle.
@ BOUND_COMPONENT_ID
Color assigned to each group of gravitationally bound particles.
@ DAMAGE_ACTIVATION
Ratio of the stress and the activation strain.
@ BOUNDARY
Shows boundary particles.
@ BEAUTY
Attempts to show the real-world look.
Object holding a single values of various types.
uint32_t Size
Integral type used to index arrays (by default).
Definition: Globals.h:16
double Float
Precision used withing the code. Use Float instead of float or double where precision is important.
Definition: Globals.h:13
Base class for all particle materials.
SPH kernels.
constexpr INLINE T max(const T &f1, const T &f2)
Definition: MathBasic.h:20
INLINE T sqrt(const T f)
Return a squared root of a value.
Definition: MathUtils.h:78
#define INLINE
Macros for conditional compilation based on selected compiler.
Definition: Object.h:31
#define UNUSED(x)
Definition: Object.h:37
#define NAMESPACE_SPH_END
Definition: Object.h:12
const NothingType NOTHING
Definition: Optional.h:16
@ VELOCITY
Current velocities of particles, always a vector quantity.
@ POSITION
Positions of particles, always a vector quantity.
@ ENERGY
Specific internal energy, always a scalar quantity.
@ SMOOTHING_LENGTH
Smoothing lenghts of particles.
@ MATERIAL_ID
ID of material, indexed from 0 to (#bodies - 1).
QuantityMetadata getMetadata(const QuantityId key)
Returns the quantity information using quantity ID.
Definition: QuantityIds.cpp:27
QuantityId
Unique IDs of basic quantities of SPH particles.
Definition: QuantityIds.h:19
@ DISPLACEMENT
Displacement vector, a solution of the stress analysis.
@ DEVIATORIC_STRESS
Deviatoric stress tensor, always a traceless tensor.
@ PRESSURE
Pressure, affected by yielding and fragmentation model, always a scalar quantity.
@ POSITION
Positions (velocities, accelerations) of particles, always a vector quantity,.
@ ENERGY
Specific internal energy, always a scalar quantity.
@ AGGREGATE_ID
Index of the aggregate containing this particle.
@ DENSITY
Density, always a scalar quantity.
@ TEMPERATURE
Temperature, always a scalar quantity.
@ STRESS_REDUCING
Total stress reduction factor due to damage and yielding. Is always scalar.
@ MATERIAL_ID
Index of material of the particle. Can be generally different than the flag value.
@ UVW
Texture mapping coordinates,.
@ SECOND
Quantity with 1st and 2nd derivative.
@ FIRST
Quantity with 1st derivative.
Interface for executing tasks (potentially) asynchronously.
Palette getEmissionPalette(const Interval range)
Definition: Spectrum.cpp:212
INLINE Float getLength(const Vector &v)
Returns the length of the vector. Enabled only for vectors of floating-point precision.
Definition: Vector.h:579
INLINE Float getSqrLength(const Vector &v)
Definition: Vector.h:574
INLINE BasicVector< float > cross(const BasicVector< float > &v1, const BasicVector< float > &v2)
Cross product between two vectors.
Definition: Vector.h:559
@ H
Definition: Vector.h:25
@ Y
Definition: Vector.h:23
@ X
Definition: Vector.h:22
Displays the magnitudes of accelerations.
Definition: Colorizer.h:255
virtual std::string name() const override
Returns the name of the colorizer.
Definition: Colorizer.h:272
virtual bool hasData(const Storage &storage) const override
Checks if the storage constains all data necessary to initialize the colorizer.
Definition: Colorizer.h:260
virtual void initialize(const Storage &storage, const RefEnum ref) override
Initialize the colorizer before by getting necessary quantities from storage.
Definition: Colorizer.h:264
virtual Optional< Particle > getParticle(const Size idx) const override
Returns the original value of the displayed quantity.
Definition: Colorizer.h:268
AccelerationColorizer(Palette palette)
Definition: Colorizer.h:257
INLINE Optional< Size > evalId(const Size idx) const
Definition: Colorizer.h:987
virtual void initialize(const Storage &storage, const RefEnum UNUSED(ref)) override
Definition: Colorizer.h:999
virtual std::string name() const override
Returns the name of the colorizer.
Definition: Colorizer.h:1007
virtual bool isInitialized() const override
Checks if the colorizer has been initialized.
Definition: Colorizer.h:1003
virtual bool hasData(const Storage &storage) const override
Checks if the storage constains all data necessary to initialize the colorizer.
Definition: Colorizer.h:995
INLINE bool empty() const
Definition: ArrayRef.h:66
INLINE Size size() const
Definition: ArrayRef.h:62
void resize(const TCounter newSize)
Resizes the array to new size.
Definition: Array.h:215
INLINE bool empty() const noexcept
Definition: Array.h:201
virtual void initialize(const Storage &storage, const RefEnum ref) override
Initialize the colorizer before by getting necessary quantities from storage.
Definition: Colorizer.h:708
virtual bool isInitialized() const override
Checks if the colorizer has been initialized.
Definition: Colorizer.h:712
virtual Rgba evalColor(const Size idx) const override
Returns the color of idx-th particle.
Definition: Colorizer.h:716
virtual std::string name() const override
Returns the name of the colorizer.
Definition: Colorizer.h:738
virtual Optional< Palette > getPalette() const override
Returns recommended palette for drawing this colorizer.
Definition: Colorizer.h:730
virtual bool hasData(const Storage &storage) const override
Checks if the storage constains all data necessary to initialize the colorizer.
Definition: Colorizer.h:704
virtual Optional< Particle > getParticle(const Size idx) const override
Returns the original value of the displayed quantity.
Definition: Colorizer.h:726
virtual Optional< float > evalScalar(const Size idx) const override
Definition: Colorizer.h:721
virtual void setPalette(const Palette &newPalette) override
Modifies the palette used by ths colorizer.
Definition: Colorizer.h:734
Shows boundary of bodies in the simulation.
Definition: Colorizer.h:809
ArrayRef< const Size > values
Definition: Colorizer.h:832
virtual void setPalette(const Palette &UNUSED(newPalette)) override
Definition: Colorizer.h:856
virtual Optional< Particle > getParticle(const Size UNUSED(idx)) const override
Definition: Colorizer.h:847
virtual bool isInitialized() const override
Checks if the colorizer has been initialized.
Definition: Colorizer.cpp:138
virtual Optional< Palette > getPalette() const override
Returns recommended palette for drawing this colorizer.
Definition: Colorizer.h:852
virtual std::string name() const override
Returns the name of the colorizer.
Definition: Colorizer.h:858
ArrayRef< const Vector > values
Definition: Colorizer.h:827
virtual Rgba evalColor(const Size idx) const override
Returns the color of idx-th particle.
Definition: Colorizer.cpp:143
virtual bool hasData(const Storage &storage) const override
Checks if the storage constains all data necessary to initialize the colorizer.
Definition: Colorizer.cpp:122
BoundaryColorizer(const Detection detection, const Float threshold=15._f)
Definition: Colorizer.cpp:113
virtual void initialize(const Storage &storage, const RefEnum ref) override
Initialize the colorizer before by getting necessary quantities from storage.
Definition: Colorizer.cpp:130
void setConnectivity(const Flags< Post::ComponentFlag > newConnectivity)
Definition: Colorizer.h:952
virtual std::string name() const override
Returns the name of the colorizer.
Definition: Colorizer.cpp:295
void setHighlightIdx(const Optional< Size > newHighlightIdx)
Definition: Colorizer.cpp:237
Flags< Post::ComponentFlag > getConnectivity() const
Definition: Colorizer.h:957
virtual void initialize(const Storage &storage, const RefEnum ref) override
Initialize the colorizer before by getting necessary quantities from storage.
Definition: Colorizer.cpp:279
ComponentIdColorizer(const GuiSettings &gui, const Flags< Post::ComponentFlag > connectivity, const Optional< Size > highlightIdx=NOTHING)
Definition: Colorizer.cpp:230
INLINE Optional< Size > evalId(const Size idx) const
Definition: Colorizer.h:961
virtual bool isInitialized() const override
Checks if the colorizer has been initialized.
Definition: Colorizer.h:973
Optional< Size > getHighlightIdx() const
Definition: Colorizer.h:948
virtual bool hasData(const Storage &storage) const override
Checks if the storage constains all data necessary to initialize the colorizer.
Definition: Colorizer.cpp:275
virtual Rgba evalColor(const Size idx) const override
Returns the color of idx-th particle.
Definition: Colorizer.cpp:245
Array< Vector > r
Definition: Colorizer.h:938
virtual Optional< Particle > getParticle(const Size idx) const override
Returns the original value of the displayed quantity.
Definition: Colorizer.cpp:257
Shows particle velocities with subtracted corotating component.
Definition: Colorizer.h:326
virtual void setPalette(const Palette &newPalette) override
Modifies the palette used by ths colorizer.
Definition: Colorizer.h:371
virtual Rgba evalColor(const Size idx) const override
Returns the color of idx-th particle.
Definition: Colorizer.h:354
virtual Optional< Vector > evalVector(const Size idx) const override
Definition: Colorizer.h:359
virtual void initialize(const Storage &storage, const RefEnum ref) override
Initialize the colorizer before by getting necessary quantities from storage.
Definition: Colorizer.cpp:53
virtual bool isInitialized() const override
Checks if the colorizer has been initialized.
Definition: Colorizer.h:350
virtual Optional< Palette > getPalette() const override
Returns recommended palette for drawing this colorizer.
Definition: Colorizer.h:367
virtual std::string name() const override
Returns the name of the colorizer.
Definition: Colorizer.h:375
CorotatingVelocityColorizer(Palette palette)
Definition: Colorizer.h:341
virtual Optional< Particle > getParticle(const Size idx) const override
Returns the original value of the displayed quantity.
Definition: Colorizer.h:363
virtual bool hasData(const Storage &storage) const override
Checks if the storage constains all data necessary to initialize the colorizer.
Definition: Colorizer.h:344
virtual Optional< Particle > getParticle(const Size UNUSED(idx)) const override
Definition: Colorizer.h:672
virtual Rgba evalColor(const Size idx) const override
Returns the color of idx-th particle.
Definition: Colorizer.h:668
virtual void setPalette(const Palette &newPalette) override
Modifies the palette used by ths colorizer.
Definition: Colorizer.h:680
virtual bool hasData(const Storage &storage) const override
Checks if the storage constains all data necessary to initialize the colorizer.
Definition: Colorizer.cpp:74
virtual std::string name() const override
Returns the name of the colorizer.
Definition: Colorizer.h:684
virtual bool isInitialized() const override
Checks if the colorizer has been initialized.
Definition: Colorizer.h:664
DamageActivationColorizer(const Palette &palette)
Definition: Colorizer.h:657
virtual void initialize(const Storage &storage, const RefEnum ref) override
Initialize the colorizer before by getting necessary quantities from storage.
Definition: Colorizer.cpp:79
virtual Optional< Palette > getPalette() const override
Returns recommended palette for drawing this colorizer.
Definition: Colorizer.h:676
virtual bool hasData(const Storage &storage) const override
Checks if the storage constains all data necessary to initialize the colorizer.
Definition: Colorizer.h:396
virtual Optional< Palette > getPalette() const override
Returns recommended palette for drawing this colorizer.
Definition: Colorizer.h:422
virtual void initialize(const Storage &storage, const RefEnum ref) override
Initialize the colorizer before by getting necessary quantities from storage.
Definition: Colorizer.h:400
virtual Rgba evalColor(const Size idx) const override
Returns the color of idx-th particle.
Definition: Colorizer.h:413
virtual void setPalette(const Palette &newPalette) override
Modifies the palette used by ths colorizer.
Definition: Colorizer.h:426
DensityPerturbationColorizer(Palette palette)
Definition: Colorizer.h:393
virtual bool isInitialized() const override
Checks if the colorizer has been initialized.
Definition: Colorizer.h:409
virtual std::string name() const override
Returns the name of the colorizer.
Definition: Colorizer.h:430
virtual Optional< Particle > getParticle(const Size idx) const override
Returns the original value of the displayed quantity.
Definition: Colorizer.h:418
Shows direction of particle movement in color.
Definition: Colorizer.h:278
virtual std::string name() const override
Returns the name of the colorizer.
Definition: Colorizer.h:320
virtual bool hasData(const Storage &storage) const override
Checks if the storage constains all data necessary to initialize the colorizer.
Definition: Colorizer.h:289
virtual Rgba evalColor(const Size idx) const override
Returns the color of idx-th particle.
Definition: Colorizer.h:303
virtual bool isInitialized() const override
Checks if the colorizer has been initialized.
Definition: Colorizer.h:297
virtual Optional< Palette > getPalette() const override
Returns recommended palette for drawing this colorizer.
Definition: Colorizer.h:312
virtual void initialize(const Storage &storage, const RefEnum ref) override
Initialize the colorizer before by getting necessary quantities from storage.
Definition: Colorizer.h:293
DirectionColorizer(const Vector &axis, const Palette &palette)
Definition: Colorizer.cpp:5
virtual Optional< Particle > getParticle(const Size idx) const override
Returns the original value of the displayed quantity.
Definition: Colorizer.h:307
virtual void setPalette(const Palette &newPalette) override
Modifies the palette used by ths colorizer.
Definition: Colorizer.h:316
virtual Optional< float > evalScalar(const Size idx) const override
Definition: Colorizer.cpp:21
virtual Rgba evalColor(const Size idx) const override
Returns the color of idx-th particle.
Definition: Colorizer.h:565
virtual Optional< Palette > getPalette() const override
Returns recommended palette for drawing this colorizer.
Definition: Colorizer.h:583
virtual Optional< float > evalScalar(const Size idx) const override
Definition: Colorizer.h:569
virtual bool isInitialized() const override
Checks if the colorizer has been initialized.
Definition: Colorizer.h:561
virtual std::string name() const override
Returns the name of the colorizer.
Definition: Colorizer.h:591
virtual Optional< Vector > evalVector(const Size UNUSED(idx)) const override
Returns the vector representation of the colorized quantity for idx-th particle.
Definition: Colorizer.h:574
virtual bool hasData(const Storage &storage) const override
Checks if the storage constains all data necessary to initialize the colorizer.
Definition: Colorizer.h:552
EnergyColorizer(Palette palette)
Definition: Colorizer.h:549
virtual void initialize(const Storage &storage, const RefEnum ref) override
Initialize the colorizer before by getting necessary quantities from storage.
Definition: Colorizer.h:556
virtual void setPalette(const Palette &newPalette) override
Modifies the palette used by ths colorizer.
Definition: Colorizer.h:587
virtual Optional< Particle > getParticle(const Size idx) const override
Returns the original value of the displayed quantity.
Definition: Colorizer.h:578
Helper type allowing to "derive" from enum class.
Definition: ExtendedEnum.h:24
INLINE TValue get(const GuiSettingsId id) const
Definition: Settings.h:245
Interface for objects assigning colors to particles.
Definition: Colorizer.h:34
virtual Optional< Palette > getPalette() const =0
Returns recommended palette for drawing this colorizer.
virtual std::string name() const =0
Returns the name of the colorizer.
virtual Optional< Particle > getParticle(const Size idx) const =0
Returns the original value of the displayed quantity.
virtual Optional< Vector > evalVector(const Size UNUSED(idx)) const
Returns the vector representation of the colorized quantity for idx-th particle.
Definition: Colorizer.h:65
virtual void initialize(const Storage &storage, const RefEnum ref)=0
Initialize the colorizer before by getting necessary quantities from storage.
virtual bool hasData(const Storage &storage) const =0
Checks if the storage constains all data necessary to initialize the colorizer.
virtual Rgba evalColor(const Size idx) const =0
Returns the color of idx-th particle.
virtual Optional< float > evalScalar(const Size UNUSED(idx)) const
Returns the scalar representation of the colorized quantity for idx-th particle.
Definition: Colorizer.h:57
virtual void setPalette(const Palette &newPalette)=0
Modifies the palette used by ths colorizer.
virtual bool isInitialized() const =0
Checks if the colorizer has been initialized.
virtual Optional< Particle > getParticle(const Size idx) const override
Returns the original value of the displayed quantity.
Definition: Colorizer.cpp:200
virtual Optional< Palette > getPalette() const override
Returns recommended palette for drawing this colorizer.
Definition: Colorizer.h:885
virtual Rgba evalColor(const Size idx) const override
Returns the color of idx-th particle.
Definition: Colorizer.cpp:190
void setSeed(const Size newSeed)
Definition: Colorizer.h:877
virtual void setPalette(const Palette &UNUSED(newPalette)) override
Definition: Colorizer.h:889
IdColorizerTemplate(const GuiSettings &gui)
Definition: Colorizer.h:873
IndexColorizer(const QuantityId id, const GuiSettings &gui)
Definition: Colorizer.h:1018
INLINE Optional< Size > evalId(const Size idx) const
Definition: Colorizer.h:1022
virtual std::string name() const override
Returns the name of the colorizer.
Definition: Colorizer.h:1038
virtual bool isInitialized() const override
Checks if the colorizer has been initialized.
Definition: Colorizer.h:1034
virtual void initialize(const Storage &storage, const RefEnum ref) override
Initialize the colorizer before by getting necessary quantities from storage.
Definition: Colorizer.h:1030
virtual bool hasData(const Storage &storage) const override
Checks if the storage constains all data necessary to initialize the colorizer.
Definition: Colorizer.h:1026
Object representing a 1D interval of real numbers.
Definition: Interval.h:17
MaterialColorizer(const GuiSettings &gui)
Definition: Colorizer.h:1049
virtual void initialize(const Storage &storage, const RefEnum ref) override
Initialize the colorizer before by getting necessary quantities from storage.
Definition: Colorizer.cpp:305
virtual Optional< Particle > getParticle(const Size idx) const override
Returns the original value of the displayed quantity.
Definition: Colorizer.cpp:320
INLINE Type & value()
Returns the reference to the stored value.
Definition: Optional.h:172
Represents a color palette, used for mapping arbitrary number to a color.
Definition: Palette.h:25
float paletteToRelative(const float value) const
Inverse transform to relativeToPalette.
Definition: Palette.cpp:162
INLINE Optional< Size > evalId(const Size idx) const
Definition: Colorizer.h:899
virtual Optional< Particle > getParticle(const Size idx) const override
Returns the original value of the displayed quantity.
Definition: Colorizer.cpp:220
virtual void initialize(const Storage &storage, const RefEnum ref) override
Initialize the colorizer before by getting necessary quantities from storage.
Definition: Colorizer.cpp:214
virtual bool isInitialized() const override
Checks if the colorizer has been initialized.
Definition: Colorizer.h:913
virtual bool hasData(const Storage &UNUSED(storage)) const override
Definition: Colorizer.h:907
virtual std::string name() const override
Returns the name of the colorizer.
Definition: Colorizer.h:919
Object holding information about single particle.
Definition: Particle.h:17
Particle & addD2t(const QuantityId id, const Dynamic &value)
Adds another quantity 2nd derivative or updates the 2nd derivative of quantity previously stored.
Definition: Particle.cpp:84
Particle & addValue(const QuantityId id, const Dynamic &value)
Adds another quantity value or updates the value of quantity previously stored.
Definition: Particle.cpp:68
Particle & addDt(const QuantityId id, const Dynamic &value)
Adds another quantity derivative or updates the derivative of quantity previously stored.
Definition: Particle.cpp:76
RadiusColorizer(Palette palette)
Definition: Colorizer.h:745
virtual bool hasData(const Storage &UNUSED(storage)) const override
Definition: Colorizer.h:761
virtual Rgba evalColor(const Size idx) const override
Returns the color of idx-th particle.
Definition: Colorizer.h:752
virtual void initialize(const Storage &storage, const RefEnum ref) override
Initialize the colorizer before by getting necessary quantities from storage.
Definition: Colorizer.h:748
virtual std::string name() const override
Returns the name of the colorizer.
Definition: Colorizer.h:766
virtual Optional< Particle > getParticle(const Size idx) const override
Returns the original value of the displayed quantity.
Definition: Colorizer.h:757
Definition: Color.h:8
Container storing all quantities used within the simulations.
Definition: Storage.h:230
Size getMaterialCnt() const
Return the number of materials in the storage.
Definition: Storage.cpp:437
MaterialView getMaterialOfParticle(const Size particleIdx) const
Returns material view for material of given particle.
Definition: Storage.cpp:372
Array< TValue > & getDt(const QuantityId key)
Retrieves a quantity derivative from the storage, given its key and value type.
Definition: Storage.cpp:217
SharedPtr< IStorageUserData > getUserData() const
Returns the stored user data.
Definition: Storage.cpp:828
Array< TValue > & getD2t(const QuantityId key)
Retrieves a quantity second derivative from the storage, given its key and value type.
Definition: Storage.cpp:243
MaterialView getMaterial(const Size matIdx) const
Returns an object containing a reference to given material.
Definition: Storage.cpp:366
bool has(const QuantityId key) const
Checks if the storage contains quantity with given key.
Definition: Storage.cpp:130
Array< TValue > & getValue(const QuantityId key)
Retrieves a quantity values from the storage, given its key and value type.
Definition: Storage.cpp:191
virtual bool isInitialized() const override
Checks if the colorizer has been initialized.
Definition: Colorizer.h:505
virtual bool hasData(const Storage &storage) const override
Checks if the storage constains all data necessary to initialize the colorizer.
Definition: Colorizer.h:496
virtual void initialize(const Storage &storage, const RefEnum ref) override
Initialize the colorizer before by getting necessary quantities from storage.
Definition: Colorizer.h:500
virtual void setPalette(const Palette &newPalette) override
Modifies the palette used by ths colorizer.
Definition: Colorizer.h:534
virtual Optional< Particle > getParticle(const Size idx) const override
Returns the original value of the displayed quantity.
Definition: Colorizer.h:525
StressColorizer(Palette palette)
Definition: Colorizer.h:493
virtual Optional< Vector > evalVector(const Size UNUSED(idx)) const override
Returns the vector representation of the colorized quantity for idx-th particle.
Definition: Colorizer.h:521
virtual Optional< float > evalScalar(const Size idx) const override
Definition: Colorizer.h:513
virtual Optional< Palette > getPalette() const override
Returns recommended palette for drawing this colorizer.
Definition: Colorizer.h:530
virtual Rgba evalColor(const Size idx) const override
Returns the color of idx-th particle.
Definition: Colorizer.h:509
virtual std::string name() const override
Returns the name of the colorizer.
Definition: Colorizer.h:538
virtual void setPalette(const Palette &newPalette) override
Modifies the palette used by ths colorizer.
Definition: Colorizer.h:475
virtual Optional< Palette > getPalette() const override
Returns recommended palette for drawing this colorizer.
Definition: Colorizer.h:471
virtual Optional< Particle > getParticle(const Size idx) const override
Returns the original value of the displayed quantity.
Definition: Colorizer.h:467
virtual std::string name() const override
Returns the name of the colorizer.
Definition: Colorizer.h:479
virtual void initialize(const Storage &storage, const RefEnum ref) override
Initialize the colorizer before by getting necessary quantities from storage.
Definition: Colorizer.cpp:37
SummedDensityColorizer(const RunSettings &settings, Palette palette)
Definition: Colorizer.cpp:31
virtual Optional< float > evalScalar(const Size idx) const override
Definition: Colorizer.h:459
virtual Rgba evalColor(const Size idx) const override
Returns the color of idx-th particle.
Definition: Colorizer.h:463
virtual bool isInitialized() const override
Checks if the colorizer has been initialized.
Definition: Colorizer.h:455
virtual bool hasData(const Storage &UNUSED(storage)) const override
Definition: Colorizer.h:448
Symmetric tensor of 2nd order.
static INLINE SymmetricTensor identity()
Returns an identity tensor.
virtual void initialize(const Storage &storage, const RefEnum ref) override
Initialize the colorizer before by getting necessary quantities from storage.
Definition: Colorizer.h:607
virtual Optional< Particle > getParticle(const Size idx) const override
Returns the original value of the displayed quantity.
Definition: Colorizer.h:617
virtual Optional< float > evalScalar(const Size idx) const override
Definition: Colorizer.h:612
virtual bool hasData(const Storage &storage) const override
Checks if the storage constains all data necessary to initialize the colorizer.
Definition: Colorizer.h:603
virtual std::string name() const override
Returns the name of the colorizer.
Definition: Colorizer.h:629
virtual Optional< Palette > getPalette() const override
Returns recommended palette for drawing this colorizer.
Definition: Colorizer.h:621
virtual void setPalette(const Palette &newPalette) override
Modifies the palette used by ths colorizer.
Definition: Colorizer.h:625
Symmetric traceless 2nd order tensor.
Default colorizer simply converting quantity value to color using defined palette.
Definition: Colorizer.h:169
virtual Optional< Particle > getParticle(const Size idx) const override
Returns the original value of the displayed quantity.
Definition: Colorizer.h:205
virtual Optional< Vector > evalVector(const Size idx) const override
Definition: Colorizer.h:201
virtual bool isInitialized() const override
Checks if the colorizer has been initialized.
Definition: Colorizer.h:188
virtual Optional< float > evalScalar(const Size idx) const override
Definition: Colorizer.h:196
virtual bool hasData(const Storage &storage) const override
Checks if the storage constains all data necessary to initialize the colorizer.
Definition: Colorizer.h:180
Palette palette
Definition: Colorizer.h:172
virtual Optional< Palette > getPalette() const override
Returns recommended palette for drawing this colorizer.
Definition: Colorizer.h:209
QuantityId id
Definition: Colorizer.h:171
ArrayRef< const Type > values
Definition: Colorizer.h:173
virtual std::string name() const override
Returns the name of the colorizer.
Definition: Colorizer.h:217
virtual Rgba evalColor(const Size idx) const override
Returns the color of idx-th particle.
Definition: Colorizer.h:192
virtual void setPalette(const Palette &newPalette) override
Modifies the palette used by ths colorizer.
Definition: Colorizer.h:213
TypedColorizer(const QuantityId id, Palette palette)
Definition: Colorizer.h:176
virtual void initialize(const Storage &storage, const RefEnum ref) override
Initialize the colorizer before by getting necessary quantities from storage.
Definition: Colorizer.h:184
virtual void setPalette(const Palette &UNUSED(newPalette)) override
Definition: Colorizer.h:801
virtual std::string name() const override
Returns the name of the colorizer.
Definition: Colorizer.h:803
virtual Optional< Palette > getPalette() const override
Returns recommended palette for drawing this colorizer.
Definition: Colorizer.h:797
virtual Rgba evalColor(const Size idx) const override
Returns the color of idx-th particle.
Definition: Colorizer.h:788
virtual void initialize(const Storage &storage, const RefEnum ref) override
Initialize the colorizer before by getting necessary quantities from storage.
Definition: Colorizer.h:780
virtual bool hasData(const Storage &storage) const override
Checks if the storage constains all data necessary to initialize the colorizer.
Definition: Colorizer.h:776
virtual bool isInitialized() const override
Checks if the colorizer has been initialized.
Definition: Colorizer.h:784
virtual Optional< Particle > getParticle(const Size UNUSED(idx)) const override
Definition: Colorizer.h:793
Displays the magnitudes of particle velocities.
Definition: Colorizer.h:228
virtual bool hasData(const Storage &storage) const override
Checks if the storage constains all data necessary to initialize the colorizer.
Definition: Colorizer.h:233
virtual Optional< Particle > getParticle(const Size idx) const override
Returns the original value of the displayed quantity.
Definition: Colorizer.h:245
virtual std::string name() const override
Returns the name of the colorizer.
Definition: Colorizer.h:249
virtual void initialize(const Storage &storage, const RefEnum ref) override
Initialize the colorizer before by getting necessary quantities from storage.
Definition: Colorizer.h:237
virtual Optional< Vector > evalVector(const Size idx) const override
Definition: Colorizer.h:241
VelocityColorizer(Palette palette)
Definition: Colorizer.h:230
YieldReductionColorizer(Palette palette)
Definition: Colorizer.h:637
virtual std::string name() const override
Returns the name of the colorizer.
Definition: Colorizer.h:646
virtual Rgba evalColor(const Size idx) const override
Returns the color of idx-th particle.
Definition: Colorizer.h:640
Creating code components based on values from settings.
@ ACCELERATION
Time step computed from ratio of acceleration and smoothing length.
@ DENSITY
Density at zero pressure.
@ HEAT_CAPACITY
Heat capacity at constant pressure,.
Simple 2D vector with integer coordinates. Provides conversion from and to wxPoint.
INLINE Optional< Vector > getColorizerVector(const Type &UNUSED(value))
Definition: Colorizer.h:123
INLINE float getColorizerValue(const Type &value)
Definition: Colorizer.h:99
Overload of std::swap for Sph::Array.
Definition: Array.h:578
Base class for all polymorphic objects.
Definition: Object.h:88
std::string quantityName
Full name of the quantity (i.e. 'Density', 'Deviatoric stress', ...)
Definition: QuantityIds.h:242