20 "Pressure, reduced by yielding and fracture model (multiplied by 1-damage); always a scalar "
27 "Deviatoric stress tensor, always a traceless tensor stored in components xx, yy, xy, xz, yz." },
34 "Symmetric tensor correcting kernel gradient for linear consistency." },
45 "Triangular (piecewise linear) kernel. Derivatives are not continuous, the kernel is therefore not "
46 "suitable for SPH, but can be useful for non-SPH interpolations, etc." },
50 "Modification of the M4 B-spline kernel by Thomas & Couchman (1992), designed to prevent clustering "
64 "Modified midpoint method with constant number of substeps." },
72 "Time step computed by limiting value-to-derivative ratio of quantities" },
76 "Time step computed from ratio of acceleration and smoothing length." },
82 "Brute-force search by going through each pair of particles (O(N^2) complexity)" },
91 {
BoundaryEnum::NONE,
"none",
"Do not use any boundary conditions (= vacuum conditions)" },
94 "Highest derivatives of all particles close to the boundary are set to zero." },
97 "Create ghosts particles located symmetricaly to the particles near the boundary, in order to keep "
98 "particles inside domain." },
101 "Boundary is created by immovable particles placed along the boundary." },
104 "Simulates a wind tunnel by pushing air particles into the domain and removing them on the other "
105 "side of the domain. The air particles are kept inside the domain using Frozen Particles boundary "
109 "Periodic boundary conditions; particles can interact accross boundaries. When particles leave the "
110 "domain, they re-enter on the other side of the domain. " },
115 "Debug boundary condition, used to emulate 1D SPH solver. While the solver is still "
116 "three-dimensional under the hood, the particles are projected on a line and can move only in one "
117 "dimension. Note that this has to be supplied by correct kernel normalization, etc." },
130 "Use force from stress divergence in the model. Must be used together with pressure gradient. Stress "
131 "tensor is evolved in time using Hooke's equation." },
134 "Stress tensor for the simulation of fluids. Must be used together with pressure gradient, cannot be "
135 "used together with solid stress force." },
138 "Centrifugal force and Coriolis force given by angular frequency of the coordinate frame." },
142 "Surface tension, proportional to the curvature of the surface." },
149 "Standard artificial viscosity term by Monaghan (1989)." },
152 "Artificial viscosity term analogous to Riemann solvers by Monaghan (1997)." },
155 "Time-dependent artificial viscosity by Morris & Monaghan (1997)." },
161 "SPH solver using symmetrized evaluation of derivatives. Cannot be used together with some "
162 "parameters, for example with strain rate correction tensor!" },
165 "SPH solver evaluating all derivatives asymmetrically." },
168 "Solver computing density by direct summation over nearest SPH particles." },
170 "elastic_deformation_solver",
171 "Solver used for extreme elastic deformations." },
173 "density_independent",
174 "Density independent solver by Saitoh & Makino (2013). Experimental!" },
176 "energy_conserving_solver",
177 "Solver advancing internal energy using pair-wise work done by particles, by Owen (2009). "
181 "Simple solver with pressure gradient only, mainly used for supporting purposes (benchmarking, "
188 "Normal continuity equation, using velocity divergence "
189 "computed from all neighbors." },
191 "sum_only_undamaged",
192 "Computes the velocity divergence using only undamaged neighbors. For fully damaged particle, the "
193 "standard continuity equation is used instead." },
195 "damaged_decrease_bulk_density",
196 "Adds bulk density, evolved using continuity equation like material density; however, when damaged "
197 "material expands, only the bulk density decreases, the material density is constant. The material "
198 "density can only grow when it is equal to the bulk density." },
204 "Standard discretization of SPH equations. Equations are obtained from Lagrangian." },
207 "Alternative formulation of SPH, used by Benz & Asphaug (1994, 1995)." },
211 {
YieldingEnum::NONE,
"none",
"No stress tensor, gass or material with no stress tensor" },
221 "Grady-Kipp model of fragmentation using scalar damage" },
224 "Grady-Kipp model of fragmentation using tensor damage" },
229 "continuity_equation",
230 "Smoothing length is evolved using continuity equation." },
232 "sound_speed_enforcing",
233 "Number of neighbours is kept in the specified range by adding additional derivatives of smoothing "
234 "length, scaled by local sound speed." },
239 "pressure_difference",
240 "Signal speed given by the absolute value of pressure difference, as in Price (2008). Cannot be used "
241 "in simulations with gravity." },
244 "velocity_difference",
245 "Signal speed given by relative velocity projected to the positive vector, as in Valdarnini "
252 "No self-gravity, particles only move in spherically symmetric gravitational potential. Can be used "
253 "as an approximate gravity for spherically symmetric simulations." },
256 "Brute-force summation over all particle pairs (O(N^2) complexity)" },
259 "Barnes-Hut algorithm approximating gravity by multipole expansion (up to octupole order)." },
266 "Smoothing kernel associated with selected SPH kernel. For SPH simulations." },
269 "Kernel representing gravity of solid spheres. Useful for N-body simulations where overlaps are "
277 "All collided particles merge, creating larger spherical particles. Particles are merged "
278 "unconditionally, regardless of their relative velocity or their angular frequencies." },
281 "Collided particles bounce with some energy dissipation, specified by the coefficients of "
282 "restitution. No merging, number of particles remains constant." },
285 "If the relative speed of the collided particles is lower than the escape velocity, the particles "
286 "are merged, otherwise the particle bounce. To ensure that the particles are always merged, set the "
287 "collision.merging_limit to zero, on the other hand large values make particles more difficult to "
297 "Particles are either repeled (and bounced) or merged, based on the ratio of their relative velocity "
298 "to the escape velocity (similar to merge_or_bounce collision handler)." },
301 "If the center of the particles are moving towards each other, particles bounce, otherwise nothing "
305 "Overlap is allowed. If the relative velocity of particles is lower than the escape velocity, "
306 "particles are merged, otherwise they simply pass through each other." },
317 {
IoEnum::TEXT_FILE,
"text_file",
"Save output data into formatted human-readable text file" },
320 "Extension of text file, additionally executing given gnuplot script, generating a plot from every "
324 "Save output data into binary file. This data dump is lossless and can be use to restart run from "
325 "saved snapshot. Stores values, all derivatives and materials of the storage." },
328 "Compressed binary output file, containing only few selected quantities. This is the most convenient "
329 "format for storing full simulation in high resolution in time. Cannot be used to continue "
333 "File format used by Visualization Toolkit (VTK). Useful to view the results in Paraview and other "
334 "visualization tools." },
337 "File format for storing scientific data. Currently tailored for files generated by the code "
338 "miluphcuda. Requires to build the code with libhdf5." },
349 return std::string(
"txt");
351 return std::string(
"ssf");
353 return std::string(
"scf");
355 return std::string(
"ss");
357 return std::string(
"vtu");
359 return std::string(
"h5");
361 return std::string(
"dat");
370 }
else if (ext ==
"ssf") {
372 }
else if (ext ==
"scf") {
374 }
else if (ext ==
"ss") {
376 }
else if (ext ==
"vtu") {
378 }
else if (ext ==
"h5") {
380 }
else if (ext ==
"dat") {
392 return "Plain text file";
394 return "Gnuplot image";
396 return "SPH state file";
398 return "SPH compressed file";
400 return "Pkdgrav output files";
402 return "VTK unstructured grid";
404 return "miluphcuda output file";
406 return "mpcorp dump";
444 {
RngEnum::UNIFORM,
"uniform",
"Mersenne Twister PRNG from Standard library." },
445 {
RngEnum::HALTON,
"halton",
"Halton sequence for quasi-random numbers." },
446 {
RngEnum::BENZ_ASPHAUG,
"benz_asphaug",
"RNG used in code SPH5, used for 1-1 comparison of codes." },
459 "User-specified name of the run. Can be stored in the metadata of output files." },
461 "Auxiliary comment of the run. Can be stored in the metadata of output files." },
463 "Name of the person performing this run." },
465 "E-mail of the run author." },
467 "Specifies the type of the simulation. Does not have to be specified to run the simulation; this "
468 "information is saved in output files and taken into account by visualization tools, for example." },
470 "Format of the output files generated by the run. Can be one of the following:\n" + EnumMap::getDesc<IoEnum>() },
472 "Interval of creating output files (in simulation time)." },
474 "Type of output spacing in time. Can be one of the following:\n" + EnumMap::getDesc<OutputSpacing>() },
476 "List of comma-separated output times, used when the output spacing is set to 'custom'" },
478 "Index of the first generated output file. Might not be zero if the simulation is resumed." },
480 "File mask of the created files. It can contain a wildcard %d, which is replaced by the output number and "
481 "%t which is replaced by current simulation time." },
483 "Directory where the output files are saved. Can be either absolute or relative path." },
485 "List of quantities to write to output file. Applicable for text and VTK outputs, binary output always stores "
486 "all quantitites. Can be one or more values from:\n" + EnumMap::getDesc<OutputQuantityFlag>() },
488 "Number of threads used by the simulation. 0 means all available threads are used." },
490 "Number of particles processed by one thread in a single batch. Lower number can help to distribute tasks "
491 "between threads more evenly, higher number means faster processing of particles within single thread." },
493 "Type of a log generated by the simulation. Can be one of the following:\n" + EnumMap::getDesc<LoggerEnum>() },
495 "Specifies the path where the log is saved (if applicable)" },
497 "Number specifying log verbosity. Can be between 0 and 3, going from least to most verbose." },
499 "Enables verbose log of a simulation. The log is written into a file, specified by parameter run.verbose.name." },
501 "Name of a file where the verbose log of the simulation is written." },
503 "Starting time of the simulation in seconds. This is usually 0, although it can be set to a non-zero "
504 "for simulations resumed from saved state." },
506 "End time of the simulation in seconds. For new simulations (not resumed from saved state), this "
507 "corresponds to the total duration of the simulation." },
509 "Number of timesteps performed by the integrator. If zero, the criterion is not used. " },
511 "Maximum wallclock time of the simulation. If zero, the criterion is not used. " },
513 "Random number generator used by the simulation. Can be one of the following:\n" + EnumMap::getDesc<RngEnum>() },
515 "Seed of the random number generator (if applicable)." },
517 "Time period (in run time) of running diagnostics of the run. 0 means the diagnostics are run every time step." },
521 "Selected solver for computing derivatives of physical quantities. Can be one of the following:\n" + EnumMap::getDesc<SolverEnum>() },
523 "Forces included in the physical model of the simulation. Can be one or more values from: \n" + EnumMap::getDesc<ForceEnum>() },
525 "Specifies how smoothing length is evolved in the simulation. Can be one or more values from: \n" + EnumMap::getDesc<SmoothingLengthEnum>() },
527 "Used by summation solver. Specifies the relative difference between densities in subsequenct iterations "
528 "for which the iterative algorithm is terminated. Lower value means more precise evaluation of density "
529 "at a cost of higher computation time. " },
531 "Used by summation solver. Specifies the maximum number of iterations for density computation." },
533 "If true, the SPH solver computes a hash map connecting position in space with required search radius. "
534 "Otherwise, the radius is determined from the maximal smoothing length in the simulation. Used only by "
535 "the AsymmetricSolver." },
537 "Enables the XSPH modification" },
539 "Epsilon parameter of XSPH modification." },
541 "Enables the delta-SPH modification" },
543 "Delta-coefficient of the delta-SPH modification, see Marrone et al. 2011." },
545 "Alpha-coefficient of the delta-SPH modification." },
547 "Alpha parameter of the density-independent SPH solver." },
549 "Whether to enable or disable script evaluation." },
551 "Path to the file containing an arbitrary ChaiScript script evaluated each time step." },
553 "Period or time point to execute the script. Zero means the time step is executed "
554 "immediately or every time step, depending on the value of sph.script.oneshot" },
556 "Whether to execute the script only once or periodically." },
560 "Type of the SPH kernel. Can be one of the following:\n" + EnumMap::getDesc<KernelEnum>() },
562 "Allowed numbers of particle neighbours. Applicable if neighbour enforcing is used for evolution of "
563 "smoothing length. Note that even with this parameter set, it is not guaranteed that the number of "
564 "neighbours will be within the interval for every particle, the code only tries to do so." },
566 "'Strength' of the neighbour enforcing. The higher number means the derivative of the smoothing "
567 "length can be higher, lower values means 'smoother' evolution of smooting length"},
569 "Coefficient alpha_AV of the standard artificial viscosity." },
571 "Coefficient beta_AV of the standard artificial viscosity. "},
573 "Type of the artificial viscosity used by the SPH solver. Can be one of the following:\n" + EnumMap::getDesc<ArtificialViscosityEnum>() },
575 "Specifies if the Balsara switch is used when computing artificial viscosity" },
577 "Debug parameter; if true, Balsara coefficient is stored as a quantity and can be saved to output file. "},
579 "Whether to use artificial stress. "},
581 "Kernel exponent of the artificial stress. "},
583 "Multiplicative factor of the artificial stress. "},
585 "Enables artificial thermal conductivity term" },
587 "Artificial conductivity alpha coefficient." },
589 "Artificial conductivity beta coefficient." },
591 "Type of the signal speed used by artificial conductivity. Can be one of the following:\n" + EnumMap::getDesc<SignalSpeedEnum>() },
593 "Minimal value of the smoothing length (in meters). "},
595 "If true, phase angle of each particle is saved in storage and evolved in time. "},
597 "Acceleration structure used for finding neighbours (Kn queries). Can be one of the following:\n" + EnumMap::getDesc<FinderEnum>() },
599 "If true, correction tensor is applied on gradient when computing strain rate. Essential "
600 "for correct simulation of rotating bodies." },
602 "If true, completely damaged particles (D=1) are excluded when computing strain rate and "
603 "stress divergence. Solver also excludes particles of different bodies; when computing "
604 "strain rate in target, particles in impactor are excluded from the sum." },
606 "Specifies how the density is evolved. Can be one of the following:\n" + EnumMap::getDesc<ContinuityEnum>() },
608 "Specifies a discretization of SPH equations. Can be one of the following:\n" + EnumMap::getDesc<DiscretizationEnum>() },
610 "Specifies the damping coefficient of particle velocities. This is mainly intended for stabilization phase, "
611 "it should not be used in the main simulation." },
615 "If true, each particle has generally non-isotropic inertia tensor. The inertia tensor is evolved using "
616 "Euler's equations. Particle geometry is still spherical though; particles always collide as two spheres "
617 "and merge into a larger sphere, the inertia tensor is summed up using parallel axis theorem." },
619 "Maximum angle of rotation in a single iteration. " },
621 "If true, colliding particles form aggregates, which then move and rotate as rigid bodies. There are no collisions "
622 "between particles belonging to the same aggregate, only collisions of different aggregates need to be handled. Note "
623 "that enabling aggregates overrides handlers of collisions and overlaps." },
625 "Specifies the initial aggregates used in the simulation. Can be one of the following:\n" + EnumMap::getDesc<AggregateEnum>() },
629 "Solver for computing gravitational acceleration. Can be one of the following:\n" + EnumMap::getDesc<GravityEnum>() },
631 "Opening angle (in radians) used in Barnes-Hut algorithm. Larger values means faster gravity evaluation "
632 "at a cost of lower precision." },
634 "Maximum order of gravitational moments. Use 0 for monopole, 2 for quadrupole, etc. " },
636 "Smoothing kernel of gravity. Can be one of the following:\n" + EnumMap::getDesc<GravityKernelEnum>() },
640 "Period of gravity evaluation. If zero, gravity is computed every time step, for any positive value, "
641 "gravitational acceleration is cached for each particle and used each time step until the next "
646 "Specifies a handler used to evaluate the result of particle collisions. Can be one of the following:\n" + EnumMap::getDesc<CollisionHandlerEnum>() },
648 "Specifies a handler used to resolve particle overlaps. Can be one of the following:\n" + EnumMap::getDesc<OverlapEnum>() },
650 "Restitution coefficient of the normal component of velocity. 1 means perfect bounce (no dissipation), "
651 "0 means perfect sticking." },
653 "Restitution coefficient of the tangential component of velocity. Should be 1 to conserve the total "
654 "angular momentum. " },
656 "Maximum relative overlap of particle that is still classified as collision rather than overlap. Needed "
657 "mainly for numerical reasons (floating-point arithmetics). "},
659 "Multiplier of the relative velocity and the angular velocity of the merger, used when determining "
660 "whether to merge the collided particles or reject the collision. If zero, particles are always merged, "
661 "values slightly lower than 1 can be used to simulate strength, holding together a body rotating above "
662 "the breakup limit. Larger values can be used to merge only very slowly moving particles." },
664 "Parameter analogous to collision.bounce_merge_limit, but used for the rotation of the merger. "
665 "Particles can only be merged if the angular frequency multiplied by this parameter is lower than the "
666 "breakup frequency. If zero, particles are always merged, values larger than 1 can be used to avoid "
667 "fast rotators in the simulation." },
672 "Repel strength used by the soft-body solver" },
674 "Friction strength used by the soft-body solver" },
678 "Integrator performing evolution in time. Can be one of the following:\n" + EnumMap::getDesc<TimesteppingEnum>() },
680 "Courant number limiting the time step value. Needed for numerical stability of the integrator. Always keep <= 1!" },
682 "Maximal allowed value of the time step." },
684 "Initial time step of the simulation. "},
686 "Criteria limiting the value of the time step. Can be one or more values from:\n" + EnumMap::getDesc<TimeStepCriterionEnum>() },
688 "Multiplicative factor of the time step computed as a value-to-derivative ratio of time-dependent quantities."},
690 "Multiplicative factor of the time step computed using reciprocal velocity divergence."},
692 "Power of the generalized mean, used to compute the final timestep from timesteps of individual "
693 "particles. Negative infinity means the minimal timestep is used. This value will also set statistics "
694 "of the restricting particle, namely the particle index and the quantity value and corresponding "
695 "derivative of the particle; these statistics are not saved for other powers." },
697 "Maximum relative growth of the time steps in subsequent iterations. Used to 'smooth' the integration and "
698 "to avoid rapid changes of time steps."},
700 "Applicable for modified midpoint method. Specified the number of sub-steps within one time step." },
702 "Required relative accuracy (epsilon value) of the Bulirsch-Stoer integrator." },
706 "Maximal number of particles in the leaf of K-d tree." },
708 "Maximal tree depth to be processed in parallel. A larger value implies better distribution of work "
709 "between threads, but it also comes with performance penalty due to scheduling overhead." },
713 "Used to perform the simulation in rotating (non-inertial) frame. Specifies a global rotation of the coordinate "
714 "system around axis (0, 0, 1) passing through origin. If the solver includes inertial forces, rotating frame "
715 "introduces centrifugal and Coriolis force." },
717 "Used to implement homogeneous gravity field." },
726 "Computational domain of the simulation. Applicable only if boundary conditions are specified. "
727 "Can be one of the following:\n" + EnumMap::getDesc<DomainEnum>() },
729 "Boundary conditions of the simulation. Can be one of the following:\n" + EnumMap::getDesc<BoundaryEnum>() },
731 "Used by GhostParticles boundary condition. Specifies the minimal distance between a particle and its ghost, "
732 "in units of smoothing length. Used to avoid an overlap of particles."},
734 "Used by FrozenParticles boundary condition. Specifies the freezing distance from the boundary, "
735 "in units of smoothing length." },
737 "Center of the computational domain." },
739 "Radius of the computational domain. Used by spherical and cylindrical domain." },
741 "Height of the computational domain. Used by cylindrical domain." },
743 "Dimensions of the computational domain. Used by block and ellipsoidal domain." },
747 "If true, the mapping coordinates will be generated and saved for all bodies in the simulation. "
748 "Useful to visualize the simulation results with surface textures." },
750 "Type of the UV mapping" },
766 "No equation of state. Implies there is no pressure nor stress in the "
767 "body, can be used to simulate "
768 "dust interacting only by friction or gravity." },
770 {
EosEnum::TAIT,
"tait",
"Tait equation of state for simulations of liquids." },
773 "Mie-Gruneisen equation of state. Simple model for solids without any phase transitions." },
779 "ANEOS equation of state, requires look-up table of values for given material." },
787 "Equation of state for this material. Can be one of the following:\n" + EnumMap::getDesc<EosEnum>() },
789 "Adiabatic index of gass, applicable for ideal gass EoS." },
791 "Density exponent of Tait EoS." },
793 "Sound speed used by Tait EoS." },
795 "Tilloson parameter a." },
797 "Tillotson parameter b." },
799 "Tillotson parameter alpha." },
801 "Tillotson parameter beta." },
803 "Tillotsont parameter B." },
805 "Specific energy of sublimation." },
807 "Specific energy of incipient vaporization, used in Tillotson EoS." },
809 "Specific energy of complete vaporization, used in Tillotson EoS." },
811 "Gruneisen gamma, used in Mie-Gruneisen EoS." },
813 "Slope of the Hugoniot curve, used in Mie-Gruneisen EoS." },
815 "Bulk sound speed used in Mie-Gruneisen EoS." },
819 "Specifies the rheology of this material. Can be one of the following:\n" + EnumMap::getDesc<YieldingEnum>() },
821 "Fracture model of this material. Can be one of the following:\n" + EnumMap::getDesc<FractureEnum>() },
823 "Elasticity limit of the von Mises yielding criterion, specifying the stress of transition between elastic "
824 "and plastic deformation." },
826 "Specific melting energy, used by von Mises criterion." },
828 "Cohesion, yield strength at zero pressure. Used by Drucker-Prager rheology." },
830 "Coefficient of friction for undamaged material. Used by Drucker-Prager rheology." },
832 "Coefficient of friction for fully damaged material. Used by Drucker-Prager rheology." },
834 "Whether to use the model of acoustic fludization." },
836 "Characteristic decay time of the acoustic oscillations in the material." },
838 "Regeneration efficiency of the acoustic oscillations." },
840 "Effective kinematic viscosity of acoustic fludization." },
844 "Initial density of the material." },
846 "Allowed range of densities for this material." },
848 "Scale value for density, used to determine the time step value from derivatives of density." },
850 "Initial specific energy of the material." },
852 "Allowed range of specific energy." },
854 "Scale value for specific energy, used to determine the time step value from derivatives of energy." },
856 "Initial damage of the material." },
858 "Allowed range of damage." },
860 "Scale value for damage, used to determine the time step value from derivatives of damage." },
862 "Initial value of the deviatoric stress tensor (components xx, yy, xy, xz, yz)." },
864 "Scale value for deviatoric stress, used to determine the time step value from derivatives of stress." },
866 "Bulk modulus of the material." },
868 "Shear modulus of the material."},
870 "Young modulus of the material."},
872 "Elastic modulus of the material." },
874 "Speed of crack propagation, in units of local sound speed." },
876 "Coefficient k of Weibull distribution." },
878 "Coefficienet m of Weibull distribution." },
880 "If true, flaw counts and activation thresholds are samples from Poisson and exponential distribution, "
881 "respectively. Otherwise, flaws and activation thresholds are accumulated for each particle until all "
882 "particles have at least one flaw, as in Benz and Asphaug (1994). The latter is needed for reproducibility "
883 "of older results and compatibility with SPH5, otherwise the distribution sampling should be used, "
884 "especially for simulation with large (N > 1e7) number of particles." },
886 "Initial value of the material distention, used in the P-alpha model." },
888 "Bulk viscosity of the material. Applicable is internal friction is used." },
890 "Shear viscosity of the material. Applicable is internal friction is used." },
892 "Diffusivity of the material, used in heat diffusion equation." },
894 "Surface tension of the fluid. Not applicable for solids nor gass." },
896 "Bulk (macro)porosity of the material, used when creating a rubble-pile body" },
898 "Specific heat capacity at constant pressure. While it is generally a function of temperature, "
899 "this value can be used to estimate the temperature from the internal energy." },
903 "Initial distribution of the particles in space. Can be one of the following:\n" + EnumMap::getDesc<DistributionEnum>() },
905 "If true, generated particles will be moved so that their center of mass corresponds to the center of "
906 "selected domain. Note that this will potentially move some particles outside of the domain, which can "
907 "clash with some boundary conditions." },
909 "If true, particles are shuffle in storage according to their Morton code, so that locality in space "
910 "implies locality in memory. Reading and writing quantities can be faster because of that." },
912 "Turns on 'SPH5 compatibility' mode when generating particle positions. This allows 1-1 comparison of "
913 "generated arrays, but results in too many generated particles (by about factor 1.4). The option also "
914 "implies center_particles = true." },
916 "Multiplier of the kernel radius. Lower values means the particles are more localized (better spatial resolution), "
917 "but they also have fewer neighbours, so the derivatives are evaluated with lower precision. Values between 1 and 2 "
920 "Magnitude of the particle displacement in a single iteration. Used by Diehl's distribution." },
922 "Maximum allowed difference between the expected number of particles and the actual number of generated "
923 "particles. Higher value speed up the generation of particle positions." },
925 "Number of iterations used to converge particles to their final positions. Higher value means more uniform "
926 "and isotropic distribution, but also longer computation time." },
928 "Required number of particles in the body. Note that the actual number of particles may differ, depending "
929 "on the selected distribution. " },
931 "Minimal number of particles per one body. Used when creating 'sub-bodies' withing one 'parent' body, "
932 "for example when creating rubble-pile asteroids, ice blocks inside an asteroid, etc. Parameter has no "
933 "effect for creation of a single monolithic body; the number of particles from PARTICLE_COUNT is used "
936 "Initial coefficient alpha of the Morris-Monaghan artificial viscosity. Beta coefficient of the viscosity "
937 "is derived as 2*alpha." },
939 "Allowed range of the alpha coefficient. Used by Morris-Monaghan artificial viscosity."},
941 "Center of the body." },
943 "Can be one of the following:\n" + EnumMap::getDesc<DomainEnum>() },
945 "Radius of a spherical body" },
947 "Dimensions of a body." },
949 "Height of a body." },
951 "Spin rate of the body along z-axis in units rev/day." },
955 "Path to the texture used by a renderer. May be empty." },
959 "Arbitrary string identifying this material" },
#define NOT_IMPLEMENTED
Helper macro marking missing implementation.
const EmptyFlags EMPTY_FLAGS
#define NAMESPACE_SPH_END
const NothingType NOTHING
Saving and loading particle data.
@ STRAIN_RATE_CORRECTION_TENSOR
Symmetric tensor correcting kernel gradient for linear consistency.
@ DEVIATORIC_STRESS
Deviatoric stress tensor, always a traceless tensor stored in components xx, yy, xy,...
@ PRESSURE
Pressure, reduced by yielding and fracture model (multiplied by 1-damage); always a scalar quantity.
@ VELOCITY
Current velocities of particles, always a vector quantity.
@ DAMAGE
Damage, reducing the pressure and deviatoric stress.
@ POSITION
Positions of particles, always a vector quantity.
@ ENERGY
Specific internal energy, always a scalar quantity.
@ SMOOTHING_LENGTH
Smoothing lenghts of particles.
@ DENSITY
Density, always a scalar quantity.
@ INDEX
Index of particle.
@ MASS
Particle masses, always a scalar quantity.
@ MATERIAL_ID
ID of material, indexed from 0 to (#bodies - 1).
@ SPH
Main SPH simulation.
BasicVector< Float > Vector
Wrapper of pointer that deletes the resource from destructor.
Wrapper of an integral value providing functions for reading and modifying individual bits.
Object representing a 1D interval of real numbers.
Iterator useful for iterating over all entries in the settings.
Symmetric traceless 2nd order tensor.
Optional< std::string > getIoExtension(const IoEnum type)
Returns the file extension associated with given IO type.
std::string getIoDescription(const IoEnum type)
Returns a short description of the file format.
Flags< IoCapability > getIoCapabilities(const IoEnum type)
Returns the capabilities of given file format.
Optional< IoEnum > getIoEnum(const std::string &ext)
Returns the file type from file extension.
@ NONE
No collision handling.
@ INERTIAL
Use centrifugal force and Coriolis forces given by angular frequency of the coordinate frame.
@ PRESSURE
Use force from pressure gradient in the solver.
@ SELF_GRAVITY
Use gravitational force in the model.
@ SURFACE_TENSION
Surface force proportional to surface curvature.
@ STD_OUT
Print log to standard output.
@ NONE
Do not log anything.
@ ELASTIC
No yielding, just elastic deformations following Hooke's law.
@ NONE
Gass or material with no stress tensor.
@ VON_MISES
Von Mises criterion.
@ DRUCKER_PRAGER
Drucker-Prager pressure dependent yielding stress.
@ UNIFORM_GRID
Partitioning particles into a grid uniform in space.
@ LINKED_LIST
Using linked list.
@ BRUTE_FORCE
Brute-force search by going through each pair of particles (O(N^2) complexity)
@ HASH_MAP
Using hash map.
@ UNIFORM
Mersenne Twister PRNG from Standard library.
@ BENZ_ASPHAUG
Same RNG as used in SPH5, used for 1-1 comparison.
@ DIVERGENCE
Time step computed from velocity divergence.
@ DERIVATIVES
Time step computed by limiting value-to-derivative ratio of quantiites.
@ ALL
Value for using all criteria.
@ COURANT
Time step determined using CFL condition.
@ ACCELERATION
Time step computed from ratio of acceleration and smoothing length.
@ BRUTE_FORCE
Brute-force summation over all particle pairs (O(N^2) complexity)
@ SPHERICAL
Approximated gravity, assuming the matter is a simple homogeneous sphere.
@ BARNES_HUT
Use Barnes-Hut algorithm, approximating gravity by multipole expansion (up to octupole order)
@ PRESSURE_DIFFERENCE
Signal speed given by the absolute value of pressure difference, as in Price (2008)
@ VELOCITY_DIFFERENCE
Signal speed given by relative velocity projected to the positive vector, as in Valdarnini (2018),...
@ CUSTOM
User-defined list of output times.
@ LINEAR
Constant time between consecutive output times.
@ LOGARITHMIC
Constant ratio between consecutive output times.
@ TEXT_FILE
Formatted human-readable text file.
@ PKDGRAV_INPUT
Pkdgrav input file.
@ MPCORP_FILE
Export from Minor Planet Center Orbit Database.
@ LEAP_FROG
Leap-frog 2nd-order integration.
@ MODIFIED_MIDPOINT
Modified midpoint method with constant number of substeps.
@ BULIRSCH_STOER
Bulirsch-Stoer integrator.
@ RUNGE_KUTTA
Runge-Kutta 4-th order integration.
@ PREDICTOR_CORRECTOR
Predictor-corrector scheme.
@ EULER_EXPLICIT
Explicit (forward) 1st-order integration.
@ STANDARD
P_i / rho_i^2 + P_j / rho_j^2.
@ BENZ_ASPHAUG
(P_i + P_j) / (rho_i rho_j)
@ DAMAGED_DECREASE_BULK_DENSITY
@ STANDARD
Normal continuity equation, using velocity divergence computed from all neighbors.
@ SPHERICAL
Spherical mapping.
@ OUTPUT
The format can be used as file output.
@ INPUT
The format can be used as file input.
@ SPH_KERNEL
Use gravity smoothing kernel corresponding to selected SPH kernel.
@ POINT_PARTICLES
Point-like particles with zero radius.
@ INTERNAL_BOUNCE
Particles are allowed to overlap and they bounce if moving towards each other.
@ REPEL
Particles are shifted until no overlap happens.
@ NONE
All overlaps are ignored.
@ FORCE_MERGE
Overlapping particles are merged.
@ SUMMATION_SOLVER
Density is obtained by direct summation over nearest SPH particles.
@ ENERGY_CONSERVING_SOLVER
Solver advancing internal energy using pair-wise work done by particles, by Owen (2009).
@ ELASTIC_DEFORMATION_SOLVER
Special solver used to simulate deformations of perfectly elastic bodies.
@ SYMMETRIC_SOLVER
SPH formulation using symmetrized evaluation of derivatives.
@ DENSITY_INDEPENDENT
Density independent solver by Saitoh & Makino (2013).
@ ASYMMETRIC_SOLVER
Generic solver evaluating all derivatives asymmetrically.
@ RIEMANN
Artificial viscosity term analogous to Riemann solvers by Monaghan (1997)
@ MORRIS_MONAGHAN
Time-dependent artificial viscosity by Morris & Monaghan (1997).
@ STANDARD
Standard artificial viscosity term by Monaghan (1989).
@ NONE
No artificial viscosity.
@ STRATIFIED
Stratified distribution to reduce clustering.
@ RANDOM
Random distribution of particles.
@ PARAMETRIZED_SPIRALING
Parametrized spiraling scheme by Saff & Kuijlaars (1997)
@ HEXAGONAL
Hexagonally close packing.
@ DIEHL_ET_AL
Isotropic uniform distribution by Diehl et al. (2012)
@ CUBIC
Cubic close packing.
@ THOMAS_COUCHMAN
Modification of the standard M4 B-spline kernel, used to avoid particle clustering.
@ GAUSSIAN
Gaussian function.
@ FOURTH_ORDER_SPLINE
M5 B-spline (piecewise 4th-order polynomial)
@ CORE_TRIANGLE
Core Triangle (CT) kernel by Read et al. (2010)
@ WENDLAND_C2
Wendland kernel C2.
@ TRIANGLE
Simple triangle (piecewise linear) kernel.
@ WENDLAND_C6
Wendland kernel C6.
@ WENDLAND_C4
Wendland kernel C4.
@ CUBIC_SPLINE
M4 B-spline (piecewise cubic polynomial)
@ SCALAR_GRADY_KIPP
Grady-Kipp model of fragmentation using scalar damage.
@ TENSOR_GRADY_KIPP
Grady-Kipp model of fragmentation using tensor damage.
@ ANEOS
ANEOS given by look-up table.
@ MIE_GRUNEISEN
Mie-Gruneisen equation of state.
@ TAIT
Tait equation of state for simulations of liquids.
@ IDEAL_GAS
Equation of state for ideal gas.
@ NONE
No equation of state.
@ TILLOTSON
Tillotson (1962) equation of state.
@ MURNAGHAN
Murnaghan equation of state.
@ SIMPLIFIED_TILLOTSON
Simplified version of the Tillotson equation of state.
@ INTERNAL_FRICTION
Coefficient of friction for undamaged material.
@ TILLOTSON_NONLINEAR_B
Coefficient B of the nonlinear compressive term in Tillotson equation.
@ ELASTICITY_LIMIT
Elasticity limit of the von Mises yielding criterion.
@ TILLOTSON_ALPHA
Alpha coefficient in expanded phase of Tillotson equation.
@ FLUIDIZATION_VISCOSITY
Effective viscosity of acoustic fludizations.
@ DRY_FRICTION
Coefficient of friction for fully damaged material.
@ WEIBULL_EXPONENT
Exponent of the Weibull distribution of flaws.
@ BODY_CENTER
Center point of the body. Currently used only by StabilizationSolver.
@ BULK_POROSITY
Bulk (macro)porosity of the body.
@ TILLOTSON_ENERGY_CV
Specific energy of complete vaporization.
@ TILLOTSON_SMALL_B
"Small b" coefficient in Tillotson equation
@ OSCILLATION_REGENERATION
Regeneration efficiency of acoustric oscillations.
@ DIEHL_STRENGTH
Strength parameter of the Diehl's distribution.
@ MELT_ENERGY
Melting energy, used for temperature-dependence of the stress tensor.
@ STRESS_TENSOR
Initial values of the deviatoric stress tensor.
@ ENERGY_MIN
Estimated minimal value of energy used to determine timestepping error.
@ PARTICLE_SORTING
If true, particles are sorted using Morton code, preserving locality in memory.
@ BULK_SOUND_SPEED
Used in Mie-Gruneisen equations of state.
@ USE_ACOUSTIC_FLUDIZATION
Whether to use the acoustic fludization model.
@ DAMAGE_MIN
Estimate minimal value of damage used to determine timestepping error.
@ ELASTIC_MODULUS
Elastic modulus lambda (a.k.a Lame's first parameter) of the material.
@ RHEOLOGY_DAMAGE
Model of fragmentation used within the rheological model.
@ IDENTIFIER
Arbitrary string identifying this material.
@ COHESION
Cohesion, yield strength at zero pressure.
@ TAIT_GAMMA
Exponent of density, representing a compressibility of a fluid. Used in Tait equation of state.
@ INITIAL_DISTRIBUTION
Initial distribution of SPH particles within the domain, see DistributionEnum for options.
@ DIEHL_ITERATION_COUNT
Number of iterations of particle repelling.
@ TILLOTSON_BETA
Beta coefficient in expanded phase of Tillotson equation.
@ DENSITY_RANGE
Allowed range of density. Densities of all particles all clamped to fit in the range.
@ DAMAGE
Initial damage of the body.
@ ENERGY
Initial specific internal energy.
@ SHEAR_MODULUS
Shear modulus mu (a.k.a Lame's second parameter) of the material.
@ YOUNG_MODULUS
Young modulus of the material.
@ ADIABATIC_INDEX
Adiabatic index used by some equations of state (such as ideal gas)
@ TAIT_SOUND_SPEED
Sound speed used in Tait equation of state.
@ BULK_MODULUS
Bulk modulus of the material.
@ PARTICLE_COUNT
Number of SPH particles in the body.
@ DENSITY
Density at zero pressure.
@ SMOOTHING_LENGTH_ETA
Eta-factor between smoothing length and particle concentration (h = eta * n^(-1/d) )
@ AV_ALPHA_RANGE
Lower and upper bound of the alpha coefficient, used only for time-dependent artificial viscosity.
@ WEIBULL_COEFFICIENT
Coefficient (multiplier) of the Weibull distribution of flaws.
@ HEAT_CAPACITY
Heat capacity at constant pressure,.
@ OSCILLATION_DECAY_TIME
Characteristic decay time of acoustic oscillations in the material.
@ TILLOTSON_ENERGY_IV
Specific energy of incipient vaporization.
@ STRESS_TENSOR_MIN
Estimated minial value of stress tensor components used to determined timestepping error.
@ RAYLEIGH_SOUND_SPEED
Speed of crack growth, in units of local sound speed.
@ EOS
Equation of state for this material, see EosEnum for options.
@ ENERGY_RANGE
Allowed range of specific internal energy.
@ RHEOLOGY_YIELDING
Model of stress reducing used within the rheological model.
@ DISTENTION
Initial value of the material distention, used in the P-alpha model.
@ GRUNEISEN_GAMMA
Gruneisen's gamma paraemter used in Mie-Gruneisen equation of state.
@ TILLOTSON_SMALL_A
"Small a" coefficient in Tillotson equation
@ HUGONIOT_SLOPE
Linear Hugoniot slope coefficient used in Mie-Gruneisen equation of state.
@ DAMAGE_RANGE
Allowed range of damage.
@ SURFACE_TENSION
Coefficient of surface tension.
@ TILLOTSON_SUBLIMATION
Specific sublimation energy.
@ WEIBULL_SAMPLE_DISTRIBUTIONS
@ FIXED_PARTICLES
Creates dummy particles along the boundary.
@ SYMMETRIC
Particles are duplicated along the z=0 plane.
@ PROJECT_1D
Project all movement onto a line, effectivelly reducing the simulation to 1D.
@ KILL_ESCAPERS
Removes particles outside the domain.
@ GHOST_PARTICLES
Create ghosts to keep particles inside domain.
@ NONE
Do not use any boundary conditions (= vacuum conditions)
@ FROZEN_PARTICLES
Highest derivatives of all particles close to the boundary are set to zero.
@ PERIODIC
Periodic boundary conditions.
@ WIND_TUNNEL
Extension of Frozen Particles, pushing particles inside the domain and removing them on the other end...
@ CONTINUITY_EQUATION
Smoothing length is evolved using continuity equation.
@ RUN_OUTPUT_QUANTITIES
List of quantities to write to text output. Binary output always stores all quantitites.
@ DOMAIN_CENTER
Center point of the domain.
@ SPH_SCRIPT_FILE
Path of an arbitrary ChaiScript script executed each timestep.
@ SPH_SUMMATION_MAX_ITERATIONS
Maximum number of iterations for self-consistent density computation of summation solver.
@ RUN_AUTHOR
Name of the person running the simulation.
@ SPH_STRAIN_RATE_CORRECTION_TENSOR
@ RUN_OUTPUT_INTERVAL
Time interval of dumping data to disk.
@ SPH_CONTINUITY_MODE
Specifies how the density is evolved, see ContinuityEnum.
@ TIMESTEPPING_MAX_TIMESTEP
@ DOMAIN_HEIGHT
Height of a cylindrical domain.
@ SPH_AV_STRESS_FACTOR
Multiplicative factor of the artificial stress term (= strength of the viscosity)
@ DOMAIN_GHOST_MIN_DIST
Minimal distance between a particle and its ghost, in units of smoothing length.
@ RUN_LOGGER
Selected logger of a run, see LoggerEnum.
@ RUN_EMAIL
E-mail of the person running the simulation.
@ SPH_AV_BALSARA_STORE
If true, Balsara factors will be saved as quantity AV_BALSARA. Mainly for debugging purposes.
@ RUN_VERBOSE_NAME
Path of a file where the verbose log is printed.
@ SPH_AV_STRESS_EXPONENT
Weighting function exponent n in artificial stress term.
@ SPH_NEIGHBOUR_ENFORCING
@ SPH_USE_AC
Enables the artificial thermal conductivity term.
@ FINDER_LEAF_SIZE
Maximum number of particles in a leaf node.
@ SOFT_REPEL_STRENGTH
Magnitude of the repel force for the soft-body solver.
@ SPH_KERNEL
Index of SPH Kernel, see KernelEnum.
@ RUN_OUTPUT_SPACING
Type of output spacing in time, see enum OutputSpacing.
@ GENERATE_UVWS
If true, the mapping coordinates will be computed and saved for all bodies in the simulation.
@ COLLISION_HANDLER
Specifies how the collisions of particles should be handler; see CollisionHandlerEnum.
@ TIMESTEPPING_MEAN_POWER
@ SPH_SOLVER_FORCES
List of forces to compute by the solver.
@ RUN_THREAD_CNT
Number of threads used by the code. If 0, all available threads are used.
@ SPH_AV_TYPE
Type of used artificial viscosity.
@ RUN_LOGGER_FILE
Path of a file where the log is printed, used only when selected logger is LoggerEnum::FILE.
@ SPH_AV_BETA
Artificial viscosity beta coefficient.
@ SPH_AV_ALPHA
Artificial viscosity alpha coefficient.
@ RUN_OUTPUT_PATH
Path where all output files (dumps, logs, ...) will be written.
@ DOMAIN_FROZEN_DIST
Distance to the boundary in units of smoothing length under which the particles are frozen.
@ SPH_SOLVER_TYPE
Selected solver for computing derivatives of physical variables.
@ NBODY_MAX_ROTATION_ANGLE
@ RUN_DIAGNOSTICS_INTERVAL
@ TIMESTEPPING_INITIAL_TIMESTEP
@ COLLISION_BOUNCE_MERGE_LIMIT
@ SPH_ADAPTIVE_SMOOTHING_LENGTH
Solution for evolutions of the smoothing length.
@ SPH_AV_USE_STRESS
Whether to use artificial stress.
@ GRAVITY_SOLVER
Algorithm to compute gravitational acceleration.
@ RUN_OUTPUT_CUSTOM_TIMES
List of comma-separated output times, used when RUN_OUTPUT_SPACING is set to CUSTOM.
@ TIMESTEPPING_DERIVATIVE_FACTOR
Multiplicative factor k for the derivative criterion; dt = k * v / dv.
@ SPH_SMOOTHING_LENGTH_MIN
Minimal value of smoothing length.
@ RUN_COMMENT
User-specified comment.
@ SPH_USE_XSPH
Turn on the XSPH correction.
@ SPH_SUMMATION_DENSITY_DELTA
@ SPH_DI_ALPHA
Alpha parameter of the density-independent solver.
@ FRAME_ANGULAR_FREQUENCY
@ COLLISION_ALLOWED_OVERLAP
@ SPH_DISCRETIZATION
Specifies a discretization of SPH equations; see DiscretizationEnum.
@ SPH_AC_ALPHA
Artificial conductivity alpha coefficient.
@ RUN_OUTPUT_TYPE
Selected format of the output file, see IoEnum.
@ SPH_VELOCITY_DIFFUSION_ALPHA
Alpha-coefficient of the delta-SPH modification.
@ UVW_MAPPING
Type of the UV mapping.
@ RUN_RNG
Selected random-number generator used within the run.
@ RUN_OUTPUT_FIRST_INDEX
Index of the first generated output file. Might not be zero if the simulation is resumed.
@ NBODY_AGGREGATES_SOURCE
Specifies the initial aggregates used in the simulation. See AggregateEnum.
@ TIMESTEPPING_INTEGRATOR
Selected timestepping integrator.
@ TIMESTEPPING_MAX_INCREASE
@ TIMESTEPPING_MIDPOINT_COUNT
Number of sub-steps in the modified midpoint method.
@ COLLISION_RESTITUTION_TANGENT
@ GRAVITY_MULTIPOLE_ORDER
Order of multipole expansion.
@ TIMESTEPPING_COURANT_NUMBER
Courant number.
@ SPH_FINDER
Structure for searching nearest neighbours of particles.
@ COLLISION_ROTATION_MERGE_LIMIT
@ SOFT_FRICTION_STRENGTH
Magnitude of the friction force for the soft-body solver.
@ COLLISION_OVERLAP
Specifies how particle overlaps should be handled.
@ DOMAIN_TYPE
Computational domain, enforced by boundary conditions.
@ SPH_AC_BETA
Artificial conductivity beta coefficient.
@ SPH_DENSITY_DIFFUSION_DELTA
Delta-coefficient of the delta-SPH modification, see Marrone et al. 2011.
@ RUN_LOGGER_VERBOSITY
Number specifying log verbosity. Can be between 0 and 3, going from least to most verbose.
@ SPH_SCRIPT_ENABLE
Enables or disables scripted term.
@ TIMESTEPPING_DIVERGENCE_FACTOR
Multiplicative factor for the divergence criterion.
@ RUN_NAME
User-specified name of the run, used in some output files.
@ RUN_VERBOSE_ENABLE
Enables verbose log of a simulation.
@ TIMESTEPPING_BS_ACCURACY
Required relative accuracy of the Bulirsch-Stoer integrator.
@ GRAVITY_RECOMPUTATION_PERIOD
@ GRAVITY_OPENING_ANGLE
Opening angle Theta for multipole approximation of gravity.
@ SPH_USE_DELTASPH
Turn on the delta-SPH correction.
@ DOMAIN_SIZE
(Vector) size of a block domain
@ SPH_PHASE_ANGLE
Evolve particle phase angle.
@ DOMAIN_BOUNDARY
Type of boundary conditions.
@ GRAVITY_CONSTANT
Gravitational constant. To be generalized.
@ NBODY_AGGREGATES_ENABLE
@ SPH_SCRIPT_ONESHOT
Whether to execute the script only once or periodically.
@ SPH_STABILIZATION_DAMPING
@ GRAVITY_KERNEL
Gravity smoothing kernel.
@ DOMAIN_RADIUS
Radius of a spherical and cylindrical domain.
@ RUN_RNG_SEED
Seed for the random-number generator.
@ FINDER_MAX_PARALLEL_DEPTH
@ SPH_ASYMMETRIC_COMPUTE_RADII_HASH_MAP
@ SPH_AC_SIGNAL_SPEED
Type of the signal speed used by artificial conductivity.
@ FRAME_CONSTANT_ACCELERATION
@ COLLISION_RESTITUTION_NORMAL
@ RUN_OUTPUT_NAME
File name of the output file (including extension), where d is a placeholder for output number.
@ BLOCK
Block with edge sizes given by vector.
@ SPHERICAL
Sphere with given radius.
@ NONE
No computational domain (can only be used with BoundaryEnum::NONE)
@ ELLIPSOIDAL
Axis-aligned ellipsoid.
@ CYLINDER
Cylindrical domain aligned with z axis.
constexpr Float gravity
Gravitational constant (CODATA 2014)
constexpr Float R_earth
Earth radius.
Helper class for adding individual enums to the enum map.