Skip to content

Conversation

@ChengHauYang
Copy link

@ChengHauYang ChengHauYang commented Aug 11, 2025

closes #416

To enhance user-friendliness and improve the convergence of welding simulations, we introduce the following implementations:

  1. Central block-restrictable control
  2. Improved initial condition settings for newly activated elements
  3. A new Action that enables users to simulate the heated material addition process in welding simulations.

Items (1) and (2) build upon existing pull requests in MOOSE, while item (3) is implemented in BlackBear.


Details of the Welding Simulation Action

This new Action allows users to simply specify a few parameters to automatically:

  • Generate the heat source path
  • Apply mesh modifications dynamically
  • Integrate the heat source kernel into the governing equations

The key components are:

  • CSVPiecewiseLinearSpatioTemporalPath
    Defines the time-dependent path of the moving heat source based on a CSV input file.
    This user object interpolates the source location over time for accurate path tracking.

  • SpatioTemporalPathElementSubdomainModifier
    Dynamically modifies element subdomains within a specified distance from the moving path,
    allowing for material activation.

  • ADMatHeatSource
    Inserts the volumetric heat source term into the weak form of the heat equation and
    couples it to the temperature field variable.

  • ADMovingEllipsoidalHeatSource
    Provides an ellipsoidal volumetric heat source centered around the current path position,
    capturing spatial heating effects.


Reference:
OSTI: 2583685

hugary1995 and others added 6 commits October 22, 2025 17:26
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.
…Bear

- Updated all headers and object registrations to use BlackBearApp instead of MalamuteApp
- Replaced copyright/license headers accordingly
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

A Modular action for moving heat source simulation

2 participants