-
Notifications
You must be signed in to change notification settings - Fork 28
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Spatio-temporal path description #116
Comments
hugary1995
added a commit
to hugary1995/malamute
that referenced
this issue
Dec 6, 2023
close idaholab#116 This PR adds a new system associated with the syntax block `[SpatioTemporalPaths]`. Multiple SpatioTemporalPath-derived objects can be added under that syntax block. I have implemented 3 objects so far: - `PiecewiseLinearSpatioTemporalPath`: This one accepts input file vectors `t`, `x`, `y`, `z` and constructs a spatio-temporal path object. - `CSVPiecewiseLinearSpatioTemporalPath`: This one is similar to the previous one but instead reads from a csv file. - `FunctionSpatioTemporalPath`: This one accepts moose functions for `x`, `y` and `z`. Once a `SpatioTemporalPath` object is constructed, other `MooseObject`s can retrieve path given its name from the warehouse, through the `SpatioTemporalPathInterface` interface. See e.g. `ADMovingHeatSource` for how that coupling works. Each spatio-temporal path objects recomputes several path-related information at every time step: - `SpatioTemporalPath::position()` returns the current path front. - `SpatioTemporalPath::velocity()` returns the current path moving velocity. - `SpatioTemporalPath::direction()` returns the current path direction. Variants of the above methods exist which accepts a time and computes the corresponding path information at the specified time. By default the path-related information is recomputed at every time step, i.e. the path information is "live". The users have control over how often the path-related information is updated by the parameter `update_interval`. There are also methods that retrieve the path-related information from the previous update: - `SpatioTemporalPath::previousPosition()` - `SpatioTemporalPath::previousVelocity()` - `SpatioTemporalPath::previousDirection()` An object deriving from `SpatioTemporalPath` only need to override one single method `Point position(Real t) const`. Default implementations are provided for `RealVectorValue velocity(Real t)` and `RealVectorValue direction(Real t)` which use finite-differencing to compute the derivatives. The developer can optionally override these methods to provide more efficient/accurate implementations. Utility methods are provided to compute the tangential and normal components of the distance between a given point and the path's current position. - `SpatioTemporalPath::tangentialDistance(const Point & p)` - `SpatioTemporalPath::normalDistance(const Point & p)` Similarly, variants of the above methods exist which additionally accepts a specified time. Spatio-temporal paths are useful in many scenarios. I have added two concrete examples for demonstration purposes: - `ADMovingHeatSource` and `ADMovingEllipsoidalHeatSource` - `SpatioTemporalPathElementSubdomainModifier` Their names are self-explanatory. Note that `ADMovingEllipsoidalHeatSource` makes use of the tangential and normal distance to effectively "rotate" the ellipsoidal heat source.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Reason
A generic description of a spatio-temporal path will be useful at various places in MALAMUTE.
Design
I propose to implement a new family of objects with a dedicated input file syntax. The path object can be reused by various mesh generators, element subdomain modifiers, kernels, materials, etc.
Impact
New and more flexible capability.
The text was updated successfully, but these errors were encountered: