|
SERiF v0.0.1a
Stellar Evolution and Rotation in Four Dimensions
|
Angular momentum constraint equation, which enforces a global constraint on the total angular momentum of a system. More...
#include <angular_momentum.hpp>
Public Types | |
| using | Density = discretization::blocks::density::mass |
| using | ResidualQuantity = dimensions::AngularMomentum |
| using | AngularVelocity = discretization::blocks::rotation::angular_velocity |
| using | DensityValue = discretization::forms::Operand<Density> |
| using | AngularVelocityValue = discretization::forms::Operand<AngularVelocity> |
| using | Operands = utils::types::TypeList<DensityValue, AngularVelocityValue> |
Public Types inherited from serif::equations::Contribution< discretization::forms::Operand< discretization::blocks::rotation::angular_velocity > > | |
| using | Test |
| The test type of the contribution. | |
| using | TestOperand |
| The operand type of the contribution (associating a test function and a term) | |
| using | Support |
| The domain support of the contribution (which then boils down to the dofs which are supported by the term on that test function) | |
Public Member Functions | |
| AngularMomentumConstraint (const double target_axial_angular_momentum, const RigidRotation::Vector &rotation_axis={0.0, 0.0, 1.0}, const RigidRotation::Vector &axis_origin={}) | |
| Prescribe Jₜ ≥ 0 and the axis through rₐ; Ω remains an unknown and may be signed in trial states. | |
| PointLinearization< Operands > | evaluate (const EquationPoint< Operands > &point) const |
| Evaluate the angular-momentum constraints point-wise integrand and its partial derivatives. | |
| double | residual_offset () const |
| Return the residual offset for the angular-momentum constraint. | |
| const RigidRotation & | rotation () const noexcept |
| Inspect the physical rotation axis and origin. | |
Static Public Member Functions | |
| static int | additional_order (DensityValue, int position_order) |
| Return the additional quadrature degree for the density coupling. | |
| static int | additional_order (AngularVelocityValue, int position_order) |
| Return the additional quadrature degree for the angular-velocity coupling. | |
| static double | validation_integrand (const EquationPoint< Operands > &, const PointLinearization< Operands > &physics) |
| Return the already computed inertia density, \(\rho s^{2}\), for validation. | |
| static void | validate_integral (const double axial_moment_of_inertia) |
| Require the integrated axial moment of inertia to be finite and nonnegative. | |
Static Public Attributes | |
| static constexpr std::string_view | name = "angular momentum" |
Private Attributes | |
| double | m_target_axial_angular_momentum |
| The prescribed total angular momentum along the rotation axis, \( J_{\text{target}} \geq 0 \). | |
| RigidRotation | m_unit_rotation |
| The unit rotation, storing the normalized axis and its origin, used to compute \(s^{2}\) and its gradient. | |
Angular momentum constraint equation, which enforces a global constraint on the total angular momentum of a system.
The point-wise integrand is given by \( j_\parallel = \rho \Omega s^2\), where \(s^2 = |\hat{n} × (r − r_{c})|^2\) is the cylindrical radius squared, and \(\hat{n}\) is the unit rotation axis. The solver will integrate this over the domain and compare it to the target angular momentum to enforce the constraint.
Use this equation in conjunction with a RigidRotation object to constrain the angular momentum of a system to some fixed value. Note that this constraint is weakly applied and therefore should be checked for convergence in the final solution.
| Equation Contributions |
|---|
|
| using serif::equations::AngularMomentumConstraint::AngularVelocity = discretization::blocks::rotation::angular_velocity |
| using serif::equations::AngularMomentumConstraint::AngularVelocityValue = discretization::forms::Operand<AngularVelocity> |
| using serif::equations::AngularMomentumConstraint::DensityValue = discretization::forms::Operand<Density> |
| using serif::equations::AngularMomentumConstraint::Operands = utils::types::TypeList<DensityValue, AngularVelocityValue> |
|
inlineexplicit |
Prescribe Jₜ ≥ 0 and the axis through rₐ; Ω remains an unknown and may be signed in trial states.
|
inlinestaticnodiscard |
Return the additional quadrature degree for the angular-velocity coupling.
At fixed density and position, \(\delta j_{\parallel} = \rho s^{2}\delta \Omega\). The angular-velocity trial function is spatially constant. The remaining coefficient \(\rho s^{2}\) has polynomial degree at most \(p_{\rho} + 2p_{r}\).
| position_order | Polynomial degree bound for physical position expressed in reference-element coordinates. |
|
inlinestaticnodiscard |
Return the additional quadrature degree for the density coupling.
At fixed position and angular velocity, \(\delta j_{\parallel} = \Omega s^{2} \delta \rho\). The backend already counts the density trial degree \(p_{\rho}\). Since \(\Omega\) is spatially constant and \(s^{2}\) is quadratic in position, the remaining coefficient \(\Omega s^{2}\) has polynomial degree at most \(2p_{r}\).
| position_order | Polynomial degree bound for physical position expressed in reference-element coordinates. |
|
inlinenodiscard |
Evaluate the angular-momentum constraints point-wise integrand and its partial derivatives.
The point-wise integrand is calculated as \( j_\parallel = \rho \Omega s^2\) where \(s^2 = |\hat{n} × (r − r_{c})|^2\) is the cylindrical radius squared. The partial derivatives are calculated as:
| point | The point at which to evaluate the integrand and its partial derivatives. |
|
inlinenodiscard |
Return the residual offset for the angular-momentum constraint.
The backend integrates the point-wise residual contributions over the domain. The global constraint is satisfied when the total angular momentum equals the target value. Therefore we subtract the target from the integrated residual to get the actual residual.
|
inlinenodiscardnoexcept |
Inspect the physical rotation axis and origin.
|
inlinestatic |
Require the integrated axial moment of inertia to be finite and nonnegative.
The operator backend supplies the integral of validation_integrand(). Failure rejects preparation of the candidate state. Passing this check does not establish nonnegative density everywhere or satisfaction of \(\Omega I_{\parallel} - J_{\mathrm{target}} = 0\).
| axial_moment_of_inertia | The integrated axial moment of inertia, \(I_{\parallel} = \int_\star \rho s^{2}\,dV\). |
|
inlinestaticnodiscard |
Return the already computed inertia density, \(\rho s^{2}\), for validation.
When an equation provides validate_integral(), the operator backend integrates this quantity over the equation's domain and passes the result to that method. Here the integral is the axial moment of inertia, \(I_{\parallel} = \int_\star \rho s^{2}\,dV\).
The equation defines both the quantity to integrate and its admissibility requirements; the backend performs the integration. Here we require finite, nonnegative inertia as a necessary, but not sufficient, condition for a physically admissible mass distribution.
| physics | The point-wise linearization, whose angular-velocity derivative already contains \(\partial j_{\parallel}/\partial\Omega = \rho s^{2}\). |
|
private |
The prescribed total angular momentum along the rotation axis, \( J_{\text{target}} \geq 0 \).
|
private |
The unit rotation, storing the normalized axis and its origin, used to compute \(s^{2}\) and its gradient.
|
staticconstexpr |