Skip to content
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

Open
hugary1995 opened this issue Dec 6, 2023 · 0 comments · May be fixed by #117
Open

Spatio-temporal path description #116

hugary1995 opened this issue Dec 6, 2023 · 0 comments · May be fixed by #117
Labels
p: normal t: task Label for general tasks

Comments

@hugary1995
Copy link

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.

@hugary1995 hugary1995 added p: normal t: task Label for general tasks labels Dec 6, 2023
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.
@hugary1995 hugary1995 linked a pull request Dec 6, 2023 that will close this issue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
p: normal t: task Label for general tasks
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant