SPH
Classes | Namespaces | Functions
Functions.h File Reference
#include "math/rng/Rng.h"
#include "objects/geometry/SymmetricTensor.h"
#include "objects/wrappers/Flags.h"
#include "physics/Constants.h"

Go to the source code of this file.

Classes

class  Analytic::StaticSphere
 Properties of a homogeneous sphere in rest (no temporal derivatives) More...
 
class  ImpactCone
 
class  CollisionMC
 

Namespaces

 Analytic
 Contains analytic solutions of equations.
 
 Rigid
 Physics of rigid body.
 

Functions

INLINE SymmetricTensor Rigid::sphereInertia (const Float m, const Float r)
 Computes the inertia tensor of a homogeneous sphere. More...
 
INLINE SymmetricTensor Rigid::parallelAxisTheorem (const SymmetricTensor &I, const Float m, const Vector &a)
 Computes the inertia tensor with respect to given point. More...
 
INLINE Float getCriticalFrequency (const Float rho)
 Computes the critical (break-up) angular velocity of a body. More...
 
Float evalBenzAsphaugScalingLaw (const Float D, const Float rho)
 Returns the critical energy Q_D^* as a function of body diameter. More...
 
Float getImpactEnergy (const Float R, const Float r, const Float v)
 Computes the impact energy Q from impact parameters. More...
 
Float getEffectiveImpactArea (const Float R, const Float r, const Float phi)
 Returns the the ratio of the cross-sectional area of the impact and the total area of the impactor. More...
 
Float getImpactorRadius (const Float R_pb, const Float v_imp, const Float QOverQ_D, const Float rho)
 Calculates the impactor radius to satisfy required impact parameters. More...
 
Float getImpactorRadius (const Float R_pb, const Float v_imp, const Float phi, const Float Q_effOverQ_D, const Float rho)
 Calculates the impactor radius to satisfy required impact parameters. More...
 

Function Documentation

◆ evalBenzAsphaugScalingLaw()

Float evalBenzAsphaugScalingLaw ( const Float  D,
const Float  rho 
)

Returns the critical energy Q_D^* as a function of body diameter.

The critical energy is a kinetic energy for which half of the target is dispersed into the fragments. In other words, impact with critical energy will produce largest remnant (or fragment), mass of which is 50% mass of the parent body, The relation follows the scaling law of Benz & Asphaug (1999).

Todo:
replace D with units, do not enforce SI

Definition at line 5 of file Functions.cpp.

◆ getCriticalFrequency()

INLINE Float getCriticalFrequency ( const Float  rho)

Computes the critical (break-up) angular velocity of a body.

This value is only based on the ratio of the gravity and centrifugal force. It is a function of density only, is does not depend on the radius of the body. Note that bodies rotating above the break-up limit exist, especially smaller monolithic bodies with D ~ 100m!

Returns
Angular velocity (in rev/s).

Definition at line 82 of file Functions.h.

◆ getEffectiveImpactArea()

Float getEffectiveImpactArea ( const Float  R,
const Float  r,
const Float  phi 
)

Returns the the ratio of the cross-sectional area of the impact and the total area of the impactor.

This value is lower than 1 only at high impact angles, where a part of the impactor misses the target entirely (hit-and-run collision) and does not deliver its kinetic energy into the target. For the same Q/Q_D, oblique impacts will therefore look 'artificially' weaker than the impacts and lower impacts angle. Effective impact area can be used to 'correct' the impact energy, so that impacts at high impact angles are comparable with head-on impats. See Sevecek_2017 for details.

Parameters
QRelative impact energy (kinetic energy of the impactor divided by the impactor mass)
RRadius of the target
rRadius of the impactor
phiImpact angle in radians

Definition at line 22 of file Functions.cpp.

◆ getImpactEnergy()

Float getImpactEnergy ( const Float  R,
const Float  r,
const Float  v 
)

Computes the impact energy Q from impact parameters.

Parameters
RRadius of the target
rRadius of the impactor
vImpact speed.

Definition at line 18 of file Functions.cpp.

◆ getImpactorRadius() [1/2]

Float getImpactorRadius ( const Float  R_pb,
const Float  v_imp,
const Float  phi,
const Float  Q_effOverQ_D,
const Float  rho 
)

Calculates the impactor radius to satisfy required impact parameters.

The radius is computed so that the total relative effective impact energy is equal to the given value, assuming Benz & Asphaug scaling law. The effective impact energy takes into account the projected impact area, see getEffectiveImpactArea.

Parameters
R_pbRadius of the parent body (target)
v_impImpact velocity
phiImpact angle
Q_effOverQ_DRatio of the relative impact energy and the critical energy given by the scaling law
rhoDensity of the parent bod

Definition at line 42 of file Functions.cpp.

◆ getImpactorRadius() [2/2]

Float getImpactorRadius ( const Float  R_pb,
const Float  v_imp,
const Float  QOverQ_D,
const Float  rho 
)

Calculates the impactor radius to satisfy required impact parameters.

The radius is computed so that the total relative impact energy is equal to the given value, assuming Benz & Asphaug scaling law.

Parameters
R_pbRadius of the parent body (target)
v_impImpact velocity
QOverQ_DRatio of the impact energy and the critical energy given by the scaling law
rhoDensity of the parent bod

Definition at line 35 of file Functions.cpp.