From e66c5cbbf1f4fcacfc76e21d1d0ebb9ea5c634af Mon Sep 17 00:00:00 2001 From: Gary Hu Date: Tue, 5 Dec 2023 16:43:47 -0600 Subject: [PATCH] The Spatio-Temporal Path system close #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. --- .../actions/AddSpatioTemporalPathAction.md | 3 + .../ADMovingEllipsoidalHeatSource.md | 11 ++ .../CSVPiecewiseLinearSpatioTemporalPath.md | 11 ++ .../FunctionSpatioTemporalPath.md | 11 ++ .../PiecewiseLinearSpatioTemporalPath.md | 11 ++ ...tioTemporalPathElementSubdomainModifier.md | 11 ++ .../syntax/SpatioTemporalPaths/index.md | 32 ++++ include/actions/AddSpatioTemporalPathAction.h | 25 +++ .../interfaces/SpatioTemporalPathInterface.h | 51 ++++++ .../materials/ADMovingEllipsoidalHeatSource.h | 37 ++++ include/materials/ADMovingHeatSource.h | 41 +++++ .../CSVPiecewiseLinearSpatioTemporalPath.h | 24 +++ .../FunctionSpatioTemporalPath.h | 35 ++++ .../PiecewiseLinearSpatioTemporalPath.h | 23 +++ .../PiecewiseLinearSpatioTemporalPathBase.h | 63 +++++++ .../spatiotemporalpaths/SpatioTemporalPath.h | 132 +++++++++++++++ ...atioTemporalPathElementSubdomainModifier.h | 35 ++++ src/actions/AddSpatioTemporalPathAction.C | 31 ++++ src/base/MalamuteApp.C | 4 +- src/interfaces/SpatioTemporalPathInterface.C | 35 ++++ src/materials/ADMovingEllipsoidalHeatSource.C | 47 ++++++ src/materials/ADMovingHeatSource.C | 50 ++++++ .../CSVPiecewiseLinearSpatioTemporalPath.C | 63 +++++++ .../FunctionSpatioTemporalPath.C | 39 +++++ .../PiecewiseLinearSpatioTemporalPath.C | 35 ++++ .../PiecewiseLinearSpatioTemporalPathBase.C | 155 +++++++++++++++++ src/spatiotemporalpaths/SpatioTemporalPath.C | 158 ++++++++++++++++++ ...atioTemporalPathElementSubdomainModifier.C | 46 +++++ test/tests/spatiotemporal_path/csv.i | 44 +++++ test/tests/spatiotemporal_path/esm.i | 77 +++++++++ test/tests/spatiotemporal_path/function.i | 58 +++++++ test/tests/spatiotemporal_path/gold/csv_out.e | Bin 0 -> 257260 bytes test/tests/spatiotemporal_path/gold/esm_out.e | Bin 0 -> 68596 bytes .../spatiotemporal_path/gold/esm_out.e-s002 | Bin 0 -> 27124 bytes .../spatiotemporal_path/gold/esm_out.e-s003 | Bin 0 -> 27124 bytes .../spatiotemporal_path/gold/esm_out.e-s004 | Bin 0 -> 27124 bytes .../spatiotemporal_path/gold/esm_out.e-s005 | Bin 0 -> 27124 bytes .../spatiotemporal_path/gold/esm_out.e-s006 | Bin 0 -> 27124 bytes .../spatiotemporal_path/gold/esm_out.e-s007 | Bin 0 -> 27124 bytes .../spatiotemporal_path/gold/esm_out.e-s008 | Bin 0 -> 27124 bytes .../spatiotemporal_path/gold/esm_out.e-s009 | Bin 0 -> 27124 bytes .../spatiotemporal_path/gold/function_out.e | Bin 0 -> 260988 bytes .../spatiotemporal_path/gold/manual_out.e | Bin 0 -> 256776 bytes test/tests/spatiotemporal_path/gold/path.csv | 7 + test/tests/spatiotemporal_path/manual.i | 46 +++++ test/tests/spatiotemporal_path/tests | 35 ++++ 46 files changed, 1485 insertions(+), 1 deletion(-) create mode 100644 doc/content/source/actions/AddSpatioTemporalPathAction.md create mode 100644 doc/content/source/materials/ADMovingEllipsoidalHeatSource.md create mode 100644 doc/content/source/spatiotemporalpaths/CSVPiecewiseLinearSpatioTemporalPath.md create mode 100644 doc/content/source/spatiotemporalpaths/FunctionSpatioTemporalPath.md create mode 100644 doc/content/source/spatiotemporalpaths/PiecewiseLinearSpatioTemporalPath.md create mode 100644 doc/content/source/userobjects/SpatioTemporalPathElementSubdomainModifier.md create mode 100644 doc/content/syntax/SpatioTemporalPaths/index.md create mode 100644 include/actions/AddSpatioTemporalPathAction.h create mode 100644 include/interfaces/SpatioTemporalPathInterface.h create mode 100644 include/materials/ADMovingEllipsoidalHeatSource.h create mode 100644 include/materials/ADMovingHeatSource.h create mode 100644 include/spatiotemporalpaths/CSVPiecewiseLinearSpatioTemporalPath.h create mode 100644 include/spatiotemporalpaths/FunctionSpatioTemporalPath.h create mode 100644 include/spatiotemporalpaths/PiecewiseLinearSpatioTemporalPath.h create mode 100644 include/spatiotemporalpaths/PiecewiseLinearSpatioTemporalPathBase.h create mode 100644 include/spatiotemporalpaths/SpatioTemporalPath.h create mode 100644 include/userobjects/SpatioTemporalPathElementSubdomainModifier.h create mode 100644 src/actions/AddSpatioTemporalPathAction.C create mode 100644 src/interfaces/SpatioTemporalPathInterface.C create mode 100644 src/materials/ADMovingEllipsoidalHeatSource.C create mode 100644 src/materials/ADMovingHeatSource.C create mode 100644 src/spatiotemporalpaths/CSVPiecewiseLinearSpatioTemporalPath.C create mode 100644 src/spatiotemporalpaths/FunctionSpatioTemporalPath.C create mode 100644 src/spatiotemporalpaths/PiecewiseLinearSpatioTemporalPath.C create mode 100644 src/spatiotemporalpaths/PiecewiseLinearSpatioTemporalPathBase.C create mode 100644 src/spatiotemporalpaths/SpatioTemporalPath.C create mode 100644 src/userobjects/SpatioTemporalPathElementSubdomainModifier.C create mode 100644 test/tests/spatiotemporal_path/csv.i create mode 100644 test/tests/spatiotemporal_path/esm.i create mode 100644 test/tests/spatiotemporal_path/function.i create mode 100644 test/tests/spatiotemporal_path/gold/csv_out.e create mode 100644 test/tests/spatiotemporal_path/gold/esm_out.e create mode 100644 test/tests/spatiotemporal_path/gold/esm_out.e-s002 create mode 100644 test/tests/spatiotemporal_path/gold/esm_out.e-s003 create mode 100644 test/tests/spatiotemporal_path/gold/esm_out.e-s004 create mode 100644 test/tests/spatiotemporal_path/gold/esm_out.e-s005 create mode 100644 test/tests/spatiotemporal_path/gold/esm_out.e-s006 create mode 100644 test/tests/spatiotemporal_path/gold/esm_out.e-s007 create mode 100644 test/tests/spatiotemporal_path/gold/esm_out.e-s008 create mode 100644 test/tests/spatiotemporal_path/gold/esm_out.e-s009 create mode 100644 test/tests/spatiotemporal_path/gold/function_out.e create mode 100644 test/tests/spatiotemporal_path/gold/manual_out.e create mode 100644 test/tests/spatiotemporal_path/gold/path.csv create mode 100644 test/tests/spatiotemporal_path/manual.i create mode 100644 test/tests/spatiotemporal_path/tests diff --git a/doc/content/source/actions/AddSpatioTemporalPathAction.md b/doc/content/source/actions/AddSpatioTemporalPathAction.md new file mode 100644 index 00000000..81c74372 --- /dev/null +++ b/doc/content/source/actions/AddSpatioTemporalPathAction.md @@ -0,0 +1,3 @@ +# AddSpatioTemporalPathAction + +This action registers objects derived from [`SpatioTemporalPath`](SpatioTemporalPath/index.md) into the current problem. See the linked page for more details on the usage of the `SpatioTemporalPath` system. diff --git a/doc/content/source/materials/ADMovingEllipsoidalHeatSource.md b/doc/content/source/materials/ADMovingEllipsoidalHeatSource.md new file mode 100644 index 00000000..806dd44a --- /dev/null +++ b/doc/content/source/materials/ADMovingEllipsoidalHeatSource.md @@ -0,0 +1,11 @@ +# ADMovingEllipsoidalHeatSource + +!syntax description /Materials/ADMovingEllipsoidalHeatSource + +## Example Input File Syntax + +!syntax parameters /Materials/ADMovingEllipsoidalHeatSource + +!syntax inputs /Materials/ADMovingEllipsoidalHeatSource + +!syntax children /Materials/ADMovingEllipsoidalHeatSource diff --git a/doc/content/source/spatiotemporalpaths/CSVPiecewiseLinearSpatioTemporalPath.md b/doc/content/source/spatiotemporalpaths/CSVPiecewiseLinearSpatioTemporalPath.md new file mode 100644 index 00000000..29dbc1d1 --- /dev/null +++ b/doc/content/source/spatiotemporalpaths/CSVPiecewiseLinearSpatioTemporalPath.md @@ -0,0 +1,11 @@ +# CSVPiecewiseLinearSpatioTemporalPath + +!syntax description /UserObjects/CSVPiecewiseLinearSpatioTemporalPath + +## Example Input File Syntax + +!syntax parameters /UserObjects/CSVPiecewiseLinearSpatioTemporalPath + +!syntax inputs /UserObjects/CSVPiecewiseLinearSpatioTemporalPath + +!syntax children /UserObjects/CSVPiecewiseLinearSpatioTemporalPath diff --git a/doc/content/source/spatiotemporalpaths/FunctionSpatioTemporalPath.md b/doc/content/source/spatiotemporalpaths/FunctionSpatioTemporalPath.md new file mode 100644 index 00000000..b904671c --- /dev/null +++ b/doc/content/source/spatiotemporalpaths/FunctionSpatioTemporalPath.md @@ -0,0 +1,11 @@ +# FunctionSpatioTemporalPath + +!syntax description /UserObjects/FunctionSpatioTemporalPath + +## Example Input File Syntax + +!syntax parameters /UserObjects/FunctionSpatioTemporalPath + +!syntax inputs /UserObjects/FunctionSpatioTemporalPath + +!syntax children /UserObjects/FunctionSpatioTemporalPath diff --git a/doc/content/source/spatiotemporalpaths/PiecewiseLinearSpatioTemporalPath.md b/doc/content/source/spatiotemporalpaths/PiecewiseLinearSpatioTemporalPath.md new file mode 100644 index 00000000..bb959f97 --- /dev/null +++ b/doc/content/source/spatiotemporalpaths/PiecewiseLinearSpatioTemporalPath.md @@ -0,0 +1,11 @@ +# PiecewiseLinearSpatioTemporalPath + +!syntax description /UserObjects/PiecewiseLinearSpatioTemporalPath + +## Example Input File Syntax + +!syntax parameters /UserObjects/PiecewiseLinearSpatioTemporalPath + +!syntax inputs /UserObjects/PiecewiseLinearSpatioTemporalPath + +!syntax children /UserObjects/PiecewiseLinearSpatioTemporalPath diff --git a/doc/content/source/userobjects/SpatioTemporalPathElementSubdomainModifier.md b/doc/content/source/userobjects/SpatioTemporalPathElementSubdomainModifier.md new file mode 100644 index 00000000..412f7713 --- /dev/null +++ b/doc/content/source/userobjects/SpatioTemporalPathElementSubdomainModifier.md @@ -0,0 +1,11 @@ +# SpatioTemporalPathElementSubdomainModifier + +!syntax description /UserObjects/SpatioTemporalPathElementSubdomainModifier + +## Example Input File Syntax + +!syntax parameters /UserObjects/SpatioTemporalPathElementSubdomainModifier + +!syntax inputs /UserObjects/SpatioTemporalPathElementSubdomainModifier + +!syntax children /UserObjects/SpatioTemporalPathElementSubdomainModifier diff --git a/doc/content/syntax/SpatioTemporalPaths/index.md b/doc/content/syntax/SpatioTemporalPaths/index.md new file mode 100644 index 00000000..08a605f7 --- /dev/null +++ b/doc/content/syntax/SpatioTemporalPaths/index.md @@ -0,0 +1,32 @@ +# SpatioTemporalPath System + +The SpatioTemporalPath system offers flexible ways of defining spatio-temporal paths, hereinafter referred to as paths, that are often useful in additive manufacturing simulations. + +## Overview + +A spatio-temporal path is a vector-valued function of time, written as + +\begin{equation} + \begin{aligned} + \boldsymbol{x} = f(t) + \end{aligned} +\end{equation} + +where $\boldsymbol{x}$ is the path front at time $t$. In addition to the path front, the path object also defines the path's moving velocity $\boldsymbol{v}$ and the path's moving direction $\boldsymbol{t}$, defined as + +\begin{equation} + \begin{aligned} + \boldsymbol{v} &= \dfrac{\boldsymbol{x}}{t} + \boldsymbol{t} &= \dfrac{\boldsymbol{v}}{\lVert\boldsymbol{v}\rVert} + \end{aligned} +\end{equation} + +## Example Input File Syntax + +Spatio-temporal paths are defined under the `[SpatioTemporalPaths]` in the input file and can be referenced by other objects in the input file. + +!syntax list /SpatioTemporalPath objects=True actions=False subsystems=False + +!syntax list /SpatioTemporalPath objects=False actions=False subsystems=True + +!syntax list /SpatioTemporalPath objects=False actions=True subsystems=False diff --git a/include/actions/AddSpatioTemporalPathAction.h b/include/actions/AddSpatioTemporalPathAction.h new file mode 100644 index 00000000..dd25a0f9 --- /dev/null +++ b/include/actions/AddSpatioTemporalPathAction.h @@ -0,0 +1,25 @@ +/****************************************************************************/ +/* DO NOT MODIFY THIS HEADER */ +/* */ +/* MALAMUTE: MOOSE Application Library for Advanced Manufacturing UTilitiEs */ +/* */ +/* Copyright 2021 - 2023, Battelle Energy Alliance, LLC */ +/* ALL RIGHTS RESERVED */ +/****************************************************************************/ + +#pragma once + +#include "MooseObjectAction.h" + +/** + * Add SpatioTemporalPath + */ +class AddSpatioTemporalPathAction : public MooseObjectAction +{ +public: + AddSpatioTemporalPathAction(const InputParameters & params); + + static InputParameters validParams(); + + void act() override final; +}; diff --git a/include/interfaces/SpatioTemporalPathInterface.h b/include/interfaces/SpatioTemporalPathInterface.h new file mode 100644 index 00000000..0377bfa3 --- /dev/null +++ b/include/interfaces/SpatioTemporalPathInterface.h @@ -0,0 +1,51 @@ +/****************************************************************************/ +/* DO NOT MODIFY THIS HEADER */ +/* */ +/* MALAMUTE: MOOSE Application Library for Advanced Manufacturing UTilitiEs */ +/* */ +/* Copyright 2021 - 2023, Battelle Energy Alliance, LLC */ +/* ALL RIGHTS RESERVED */ +/****************************************************************************/ + +#pragma once + +#include "MooseTypes.h" +#include "InputParameters.h" + +class FEProblemBase; +class InputParameters; +class MooseObject; +class SpatioTemporalPath; + +/** + * Interface for objects that need to use SpatioTemporalPath + */ +class SpatioTemporalPathInterface +{ +public: + SpatioTemporalPathInterface(const MooseObject * moose_object); + + /** + * Get a SpatioTemporalPath with a given name + * @param name The name of the parameter key of the SpatioTemporalPath to retrieve + * @return The SpatioTemporalPath with name associated with the parameter 'name' + */ + const SpatioTemporalPath & getSpatioTemporalPath(const std::string & name) const; + + /** + * Get a SpatioTemporalPath with a given name + * @param name The name of the SpatioTemporalPath to retrieve + * @return The SpatioTemporalPath with name 'name' + */ + const SpatioTemporalPath & getSpatioTemporalPathByName(const std::string & name) const; + +private: + /// Parameters of the object with this interface + const InputParameters & _stpi_params; + + /// Reference to FEProblemBase instance + FEProblemBase & _stpi_feproblem; + + /// Thread ID + const THREAD_ID _stpi_tid; +}; diff --git a/include/materials/ADMovingEllipsoidalHeatSource.h b/include/materials/ADMovingEllipsoidalHeatSource.h new file mode 100644 index 00000000..adaea245 --- /dev/null +++ b/include/materials/ADMovingEllipsoidalHeatSource.h @@ -0,0 +1,37 @@ +/****************************************************************************/ +/* DO NOT MODIFY THIS HEADER */ +/* */ +/* MALAMUTE: MOOSE Application Library for Advanced Manufacturing UTilitiEs */ +/* */ +/* Copyright 2021 - 2023, Battelle Energy Alliance, LLC */ +/* ALL RIGHTS RESERVED */ +/****************************************************************************/ + +#pragma once + +#include "ADMovingHeatSource.h" + +/** + * @brief A moving ellipsoidal heat source following a SpatioTemporalPath + */ +class ADMovingEllipsoidalHeatSource : public ADMovingHeatSource +{ +public: + static InputParameters validParams(); + + ADMovingEllipsoidalHeatSource(const InputParameters & parameters); + +protected: + virtual ADReal computeHeatSource() override; + + /// Input power + const ADMaterialProperty & _P; + /// Length of the ellipsoid semi-axis along the path direction + const ADMaterialProperty & _a; + /// Length of the ellipsoid semi-axis perpendicular to the path direction + const ADMaterialProperty & _b; + /// Process efficienty + const Real _eta; + /// Scaling factor + const Real _scale; +}; diff --git a/include/materials/ADMovingHeatSource.h b/include/materials/ADMovingHeatSource.h new file mode 100644 index 00000000..126e03bd --- /dev/null +++ b/include/materials/ADMovingHeatSource.h @@ -0,0 +1,41 @@ +/****************************************************************************/ +/* DO NOT MODIFY THIS HEADER */ +/* */ +/* MALAMUTE: MOOSE Application Library for Advanced Manufacturing UTilitiEs */ +/* */ +/* Copyright 2021 - 2023, Battelle Energy Alliance, LLC */ +/* ALL RIGHTS RESERVED */ +/****************************************************************************/ + +#pragma once + +#include "Material.h" +#include "SpatioTemporalPath.h" +#include "SpatioTemporalPathInterface.h" + +/** + * @brief A moving heat source following a SpatioTemporalPath + */ +class ADMovingHeatSource : public Material, public SpatioTemporalPathInterface +{ +public: + static InputParameters validParams(); + + ADMovingHeatSource(const InputParameters & parameters); + +protected: + virtual void computeQpProperties() override; + virtual ADReal computeHeatSource() = 0; + + /// The path + const SpatioTemporalPath & _path; + + /// The heat source + ADMaterialProperty & _volumetric_heat; + + /// Tangential distance from the heat source + MaterialProperty & _tangential_distance; + + /// Normal distance from the heat source + MaterialProperty & _normal_distance; +}; diff --git a/include/spatiotemporalpaths/CSVPiecewiseLinearSpatioTemporalPath.h b/include/spatiotemporalpaths/CSVPiecewiseLinearSpatioTemporalPath.h new file mode 100644 index 00000000..48a297e8 --- /dev/null +++ b/include/spatiotemporalpaths/CSVPiecewiseLinearSpatioTemporalPath.h @@ -0,0 +1,24 @@ +/****************************************************************************/ +/* DO NOT MODIFY THIS HEADER */ +/* */ +/* MALAMUTE: MOOSE Application Library for Advanced Manufacturing UTilitiEs */ +/* */ +/* Copyright 2021 - 2023, Battelle Energy Alliance, LLC */ +/* ALL RIGHTS RESERVED */ +/****************************************************************************/ + +#pragma once + +#include "PiecewiseLinearSpatioTemporalPathBase.h" + +/** + * @brief Construct a piecewise linear path from a csv file + * + */ +class CSVPiecewiseLinearSpatioTemporalPath : public PiecewiseLinearSpatioTemporalPathBase +{ +public: + static InputParameters validParams(); + + CSVPiecewiseLinearSpatioTemporalPath(const InputParameters & params); +}; diff --git a/include/spatiotemporalpaths/FunctionSpatioTemporalPath.h b/include/spatiotemporalpaths/FunctionSpatioTemporalPath.h new file mode 100644 index 00000000..9ec7ac38 --- /dev/null +++ b/include/spatiotemporalpaths/FunctionSpatioTemporalPath.h @@ -0,0 +1,35 @@ +/****************************************************************************/ +/* DO NOT MODIFY THIS HEADER */ +/* */ +/* MALAMUTE: MOOSE Application Library for Advanced Manufacturing UTilitiEs */ +/* */ +/* Copyright 2021 - 2023, Battelle Energy Alliance, LLC */ +/* ALL RIGHTS RESERVED */ +/****************************************************************************/ + +#pragma once + +#include "SpatioTemporalPath.h" + +class Function; + +/** + * @brief A spatiotemporal path whose coordinates are specified using MOOSE functions. + */ +class FunctionSpatioTemporalPath : public SpatioTemporalPath +{ +public: + static InputParameters validParams(); + + FunctionSpatioTemporalPath(const InputParameters & params); + + virtual Point position(Real t) const override; + +protected: + /// The function for the x-coordinate + const Function * _x; + /// The function for the y-coordinate + const Function * _y; + /// The function for the z-coordinate + const Function * _z; +}; diff --git a/include/spatiotemporalpaths/PiecewiseLinearSpatioTemporalPath.h b/include/spatiotemporalpaths/PiecewiseLinearSpatioTemporalPath.h new file mode 100644 index 00000000..ec76be74 --- /dev/null +++ b/include/spatiotemporalpaths/PiecewiseLinearSpatioTemporalPath.h @@ -0,0 +1,23 @@ +/****************************************************************************/ +/* DO NOT MODIFY THIS HEADER */ +/* */ +/* MALAMUTE: MOOSE Application Library for Advanced Manufacturing UTilitiEs */ +/* */ +/* Copyright 2021 - 2023, Battelle Energy Alliance, LLC */ +/* ALL RIGHTS RESERVED */ +/****************************************************************************/ + +#pragma once + +#include "PiecewiseLinearSpatioTemporalPathBase.h" + +/** + * @brief Construct a piecewise linear spatiotemporal path from discrete times and vertices. + */ +class PiecewiseLinearSpatioTemporalPath : public PiecewiseLinearSpatioTemporalPathBase +{ +public: + static InputParameters validParams(); + + PiecewiseLinearSpatioTemporalPath(const InputParameters & params); +}; diff --git a/include/spatiotemporalpaths/PiecewiseLinearSpatioTemporalPathBase.h b/include/spatiotemporalpaths/PiecewiseLinearSpatioTemporalPathBase.h new file mode 100644 index 00000000..a442af4d --- /dev/null +++ b/include/spatiotemporalpaths/PiecewiseLinearSpatioTemporalPathBase.h @@ -0,0 +1,63 @@ +/****************************************************************************/ +/* DO NOT MODIFY THIS HEADER */ +/* */ +/* MALAMUTE: MOOSE Application Library for Advanced Manufacturing UTilitiEs */ +/* */ +/* Copyright 2021 - 2023, Battelle Energy Alliance, LLC */ +/* ALL RIGHTS RESERVED */ +/****************************************************************************/ + +#pragma once + +#include "SpatioTemporalPath.h" + +/** + * @brief A general piecewise linear spatiotemporal description of path. + * + * The path consists of a set of line segments. The line segments must be continuous and are stored + * as a series of times and vertex coordinates. The coordinate (front) and direction of the path can + * be queried using `operator()` with the current time. + */ +class PiecewiseLinearSpatioTemporalPathBase : public SpatioTemporalPath +{ +public: + static InputParameters validParams(); + + PiecewiseLinearSpatioTemporalPathBase(const InputParameters & params); + + virtual Point position(Real t) const override; + + /// Get the times associated with all vertices + const std::vector & times() const { return _times; } + /// Get the times associated with all vertices + const std::vector & times() { return _times; } + + /// Get the coordinates for all vertices + const std::vector & coords() const { return _coords; } + + /// Get the coordinates for all vertices + const std::vector & coords() { return _coords; } + +protected: + /// Set coordinates from components + virtual void + setCoords(const std::vector & x, const std::vector & y, const std::vector & z); + + /// Check the validity of the path + virtual void validate() const; + + /// Get the bounding indices for time \p t + std::pair getIntervalIndices(Real t) const; + + /// Times associated with all vertices, in ascending order + std::vector _times; + + /// Coordinates for all vertices + std::vector _coords; + + /// Tolerance of query time + const Real _t_tol; + + /// Extrapolation method + const MooseEnum _outside; +}; diff --git a/include/spatiotemporalpaths/SpatioTemporalPath.h b/include/spatiotemporalpaths/SpatioTemporalPath.h new file mode 100644 index 00000000..48a6b32d --- /dev/null +++ b/include/spatiotemporalpaths/SpatioTemporalPath.h @@ -0,0 +1,132 @@ +/****************************************************************************/ +/* DO NOT MODIFY THIS HEADER */ +/* */ +/* MALAMUTE: MOOSE Application Library for Advanced Manufacturing UTilitiEs */ +/* */ +/* Copyright 2021 - 2023, Battelle Energy Alliance, LLC */ +/* ALL RIGHTS RESERVED */ +/****************************************************************************/ + +#pragma once + +#include "UserObject.h" +#include "libmesh/vector_value.h" +#include "TransientInterface.h" + +/** + * @brief General abstract description of a spatiotemporal path. + * + * Subclasses must define the query `operator()`. The coordinate (front) and direction of the path + * can be queried using `operator()` with the current time. + */ +class SpatioTemporalPath : public UserObject, public TransientInterface +{ +public: + static InputParameters validParams(); + + SpatioTemporalPath(const InputParameters & params); + + virtual void execute() override final {} + virtual void initialize() override final {} + virtual void finalize() override final {} + virtual void threadJoin(const UserObject &) override final {} + virtual void initialSetup() override; + virtual void timestepSetup() override; + + /// Update the path's current position, velocity, direction, etc. + virtual void update(); + + /// Last time the path front was updated + Real lastUpdated() const { return _last_updated; } + + /** + * @brief Get the path coordinates at time \p t + * + * @param t The time to query + * @return Point The path coordinates at time \p t + */ + virtual Point position(Real t) const = 0; + + /// Get the current coordinates + const Point & position() const { return _current_position; } + + /// Get the previous coordinates + const Point & previousPosition() const { return _previous_position; } + + /** + * @brief Get the path velocity at time \p t + * + * A default implementation is provided to use finite-differencing to compute the path velocity. + * A subclass may choose to override this default implementation, and the input parameters + * "path_FD_abs_eps" and "path_FD_rel_eps" should be suppressed. + * + * @param t The time to query + * @return RealVectorValue The path velocity at time \p t + */ + virtual RealVectorValue velocity(Real t) const; + + /// Get the current velocity + const RealVectorValue & velocity() const { return _current_velocity; } + + /// Get the previous velocity + const RealVectorValue & previousVelocity() const { return _previous_velocity; } + + /** + * @brief Get the path direction at time \p t + * + * A default implementation is provided to use finite-differencing to compute the path direction. + * A subclass may choose to override this default implementation, and the input parameters + * "path_FD_abs_eps" and "path_FD_rel_eps" should be suppressed. + * + * @param t The time to query + * @return RealVectorValue The path direction at time \p t + */ + virtual RealVectorValue direction(Real t) const; + + /// Get the current direction + const RealVectorValue & direction() const { return _current_direction; } + + /// Get the previous direction + const RealVectorValue & previousDirection() const { return _previous_direction; } + + /// Get the tangential component of the distance between the given point \p p and the path's position at time \p t + Real tangentialDistance(Real t, const Point & p) const; + + /// Get the tangential component of the distance between the given point \p p and the path's current position + Real tangentialDistance(const Point & p) const; + + /// Get the normal component of the distance between the given point \p p and the path's position at time \p t + Real normalDistance(Real t, const Point & p) const; + + /// Get the normal component of the distance between the given point \p p and the path's current position + Real normalDistance(const Point & p) const; + +protected: + /// Verbose? + const bool _verbose; + +private: + /// The absolute epsilon to use in finite-differencing + const Real _abs_epsilon; + /// The relative epsilon to use in finite-differencing + const Real _rel_epsilon; + + /// Path update interval + const Real _interval; + /// Last time the path front was updated + Real & _last_updated; + + /// The current position + Point _current_position; + /// The current velocity + RealVectorValue _current_velocity; + /// The current direction + RealVectorValue _current_direction; + + /// The previous position + Point & _previous_position; + /// The current velocity + RealVectorValue & _previous_velocity; + /// The current direction + RealVectorValue & _previous_direction; +}; diff --git a/include/userobjects/SpatioTemporalPathElementSubdomainModifier.h b/include/userobjects/SpatioTemporalPathElementSubdomainModifier.h new file mode 100644 index 00000000..2315906f --- /dev/null +++ b/include/userobjects/SpatioTemporalPathElementSubdomainModifier.h @@ -0,0 +1,35 @@ +/****************************************************************************/ +/* DO NOT MODIFY THIS HEADER */ +/* */ +/* MALAMUTE: MOOSE Application Library for Advanced Manufacturing UTilitiEs */ +/* */ +/* Copyright 2021 - 2023, Battelle Energy Alliance, LLC */ +/* ALL RIGHTS RESERVED */ +/****************************************************************************/ + +#pragma once + +#include "ElementSubdomainModifier.h" +#include "SpatioTemporalPath.h" +#include "SpatioTemporalPathInterface.h" + +class SpatioTemporalPathElementSubdomainModifier : public ElementSubdomainModifier, + public SpatioTemporalPathInterface +{ +public: + static InputParameters validParams(); + + SpatioTemporalPathElementSubdomainModifier(const InputParameters & parameters); + +protected: + virtual SubdomainID computeSubdomainID() override; + + /// The path + const SpatioTemporalPath & _path; + + /// Target subdomain ID + const SubdomainID _subdomain_id; + + /// Radius + const Real _r; +}; diff --git a/src/actions/AddSpatioTemporalPathAction.C b/src/actions/AddSpatioTemporalPathAction.C new file mode 100644 index 00000000..0781d931 --- /dev/null +++ b/src/actions/AddSpatioTemporalPathAction.C @@ -0,0 +1,31 @@ +/****************************************************************************/ +/* DO NOT MODIFY THIS HEADER */ +/* */ +/* MALAMUTE: MOOSE Application Library for Advanced Manufacturing UTilitiEs */ +/* */ +/* Copyright 2021 - 2023, Battelle Energy Alliance, LLC */ +/* ALL RIGHTS RESERVED */ +/****************************************************************************/ + +#include "AddSpatioTemporalPathAction.h" +#include "FEProblem.h" +#include "SpatioTemporalPath.h" + +registerMooseAction("MalamuteApp", AddSpatioTemporalPathAction, "add_userobject"); + +InputParameters +AddSpatioTemporalPathAction::validParams() +{ + return MooseObjectAction::validParams(); +} + +AddSpatioTemporalPathAction::AddSpatioTemporalPathAction(const InputParameters & params) + : MooseObjectAction(params) +{ +} + +void +AddSpatioTemporalPathAction::act() +{ + _problem->addObject(_type, _name, _moose_object_pars); +} diff --git a/src/base/MalamuteApp.C b/src/base/MalamuteApp.C index f1191737..d71c653a 100644 --- a/src/base/MalamuteApp.C +++ b/src/base/MalamuteApp.C @@ -38,7 +38,9 @@ MalamuteApp::registerAll(Factory & f, ActionFactory & af, Syntax & syntax) Registry::registerObjectsTo(f, {"MalamuteApp"}); Registry::registerActionsTo(af, {"MalamuteApp"}); - /* register custom execute flags, action syntax, etc. here */ + // Adds [SpatioTemporalPath] block + registerSyntax("EmptyAction", "SpatioTemporalPaths"); + registerSyntaxTask("AddSpatioTemporalPathAction", "SpatioTemporalPaths/*", "add_user_object"); } void diff --git a/src/interfaces/SpatioTemporalPathInterface.C b/src/interfaces/SpatioTemporalPathInterface.C new file mode 100644 index 00000000..e17f1fd0 --- /dev/null +++ b/src/interfaces/SpatioTemporalPathInterface.C @@ -0,0 +1,35 @@ +/****************************************************************************/ +/* DO NOT MODIFY THIS HEADER */ +/* */ +/* MALAMUTE: MOOSE Application Library for Advanced Manufacturing UTilitiEs */ +/* */ +/* Copyright 2021 - 2023, Battelle Energy Alliance, LLC */ +/* ALL RIGHTS RESERVED */ +/****************************************************************************/ + +#include "SpatioTemporalPathInterface.h" +#include "SubProblem.h" +#include "MooseTypes.h" +#include "FEProblemBase.h" +#include "SpatioTemporalPath.h" + +SpatioTemporalPathInterface::SpatioTemporalPathInterface(const MooseObject * moose_object) + : _stpi_params(moose_object->parameters()), + _stpi_feproblem(*_stpi_params.getCheckedPointerParam("_fe_problem_base")), + _stpi_tid(_stpi_params.have_parameter("_tid") ? _stpi_params.get("_tid") + : 0) +{ +} + +const SpatioTemporalPath & +SpatioTemporalPathInterface::getSpatioTemporalPath(const std::string & param_name) const +{ + return getSpatioTemporalPathByName(_stpi_params.get(param_name)); +} + +const SpatioTemporalPath & +SpatioTemporalPathInterface::getSpatioTemporalPathByName(const std::string & name) const +{ + std::vector objs; + return _stpi_feproblem.getUserObject(name, _stpi_tid); +} diff --git a/src/materials/ADMovingEllipsoidalHeatSource.C b/src/materials/ADMovingEllipsoidalHeatSource.C new file mode 100644 index 00000000..3fc3a88a --- /dev/null +++ b/src/materials/ADMovingEllipsoidalHeatSource.C @@ -0,0 +1,47 @@ +/****************************************************************************/ +/* DO NOT MODIFY THIS HEADER */ +/* */ +/* MALAMUTE: MOOSE Application Library for Advanced Manufacturing UTilitiEs */ +/* */ +/* Copyright 2021 - 2023, Battelle Energy Alliance, LLC */ +/* ALL RIGHTS RESERVED */ +/****************************************************************************/ + +#include "ADMovingEllipsoidalHeatSource.h" + +registerMooseObject("MalamuteApp", ADMovingEllipsoidalHeatSource); + +InputParameters +ADMovingEllipsoidalHeatSource::validParams() +{ + auto params = ADMovingHeatSource::validParams(); + params.addClassDescription("A moving ellipsoidal heat source following a SpatioTemporalPath"); + params.addRequiredParam("power", "Input power of the heat source."); + params.addRequiredParam( + "a", "Length of the ellipsoid semi-axis along the path direction"); + params.addRequiredParam( + "b", "Length of the ellipsoid semi-axis perpendicular to the path direction"); + params.addParam("efficiency", 1.0, "Process efficiency"); + params.addParam("scale", 1.0, "Scaling factor"); + return params; +} + +ADMovingEllipsoidalHeatSource::ADMovingEllipsoidalHeatSource(const InputParameters & params) + : ADMovingHeatSource(params), + _P(getADMaterialProperty("power")), + _a(getADMaterialProperty("a")), + _b(getADMaterialProperty("b")), + _eta(getParam("efficiency")), + _scale(getParam("scale")) +{ +} + +ADReal +ADMovingEllipsoidalHeatSource::computeHeatSource() +{ + auto factor = 2.0 * _P[_qp] * _eta * _scale / libMesh::pi / _a[_qp] / _b[_qp]; + auto dist_t0 = std::sqrt(2.0) * _tangential_distance[_qp] / _a[_qp]; + auto dist_n0 = std::sqrt(2.0) * _normal_distance[_qp] / _b[_qp]; + + return factor * std::exp(-dist_t0 * dist_t0 - dist_n0 * dist_n0); +} diff --git a/src/materials/ADMovingHeatSource.C b/src/materials/ADMovingHeatSource.C new file mode 100644 index 00000000..68bb6087 --- /dev/null +++ b/src/materials/ADMovingHeatSource.C @@ -0,0 +1,50 @@ +/****************************************************************************/ +/* DO NOT MODIFY THIS HEADER */ +/* */ +/* MALAMUTE: MOOSE Application Library for Advanced Manufacturing UTilitiEs */ +/* */ +/* Copyright 2021 - 2023, Battelle Energy Alliance, LLC */ +/* ALL RIGHTS RESERVED */ +/****************************************************************************/ + +#include "ADMovingHeatSource.h" + +InputParameters +ADMovingHeatSource::validParams() +{ + auto params = Material::validParams(); + params.addRequiredParam("path", + "The name of the spatio-temporal path object that describes " + "the moving path of the heat source."); + params.addParam( + "volumetric_heat", + "volumetric_heat", + "The name of the material property used to store the computed heat source value."); + params.addParam("heat_source_tangential_distance", + "heat_source_tangential_distance", + "The name of the material property used to store the " + "tangential distance from the heat source."); + params.addParam("heat_source_normal_distance", + "heat_source_normal_distance", + "The name of the material property used to store the " + "normal distance from the heat source."); + return params; +} + +ADMovingHeatSource::ADMovingHeatSource(const InputParameters & params) + : Material(params), + SpatioTemporalPathInterface(this), + _path(getSpatioTemporalPath("path")), + _volumetric_heat(declareADProperty("volumetric_heat")), + _tangential_distance(declareProperty("heat_source_tangential_distance")), + _normal_distance(declareProperty("heat_source_normal_distance")) +{ +} + +void +ADMovingHeatSource::computeQpProperties() +{ + _tangential_distance[_qp] = _path.tangentialDistance(_q_point[_qp]); + _normal_distance[_qp] = _path.normalDistance(_q_point[_qp]); + _volumetric_heat[_qp] = computeHeatSource(); +} diff --git a/src/spatiotemporalpaths/CSVPiecewiseLinearSpatioTemporalPath.C b/src/spatiotemporalpaths/CSVPiecewiseLinearSpatioTemporalPath.C new file mode 100644 index 00000000..370ebce3 --- /dev/null +++ b/src/spatiotemporalpaths/CSVPiecewiseLinearSpatioTemporalPath.C @@ -0,0 +1,63 @@ +/****************************************************************************/ +/* DO NOT MODIFY THIS HEADER */ +/* */ +/* MALAMUTE: MOOSE Application Library for Advanced Manufacturing UTilitiEs */ +/* */ +/* Copyright 2021 - 2023, Battelle Energy Alliance, LLC */ +/* ALL RIGHTS RESERVED */ +/****************************************************************************/ + +#include "CSVPiecewiseLinearSpatioTemporalPath.h" +#include "DelimitedFileReader.h" + +registerMooseObject("MalamuteApp", CSVPiecewiseLinearSpatioTemporalPath); + +InputParameters +CSVPiecewiseLinearSpatioTemporalPath::validParams() +{ + InputParameters params = PiecewiseLinearSpatioTemporalPathBase::validParams(); + params.addClassDescription("A piecewise linear spatiotemporal path from a csv file."); + params.addRequiredParam( + "file", "CSV file containing information about the spatio-temporal path"); + MooseEnum header_flag("OFF ON AUTO", "AUTO"); + params.addParam("file_header", + header_flag, + "Set the header flag. ON: use the first row has header, OFF: assumes " + "no header, AUTO: attempt to determine if a header exists."); + MooseEnum format_flag("COLUMNS ROWS", "COLUMNS"); + params.addParam("file_format", format_flag, "Set the file format (rows vs. columns)."); + params.addParam("file_ignore_empty_lines", true, "Ignore empty lines in the csv file."); + params.addParam( + "file_comment", "", "Set the comment character, by default no comment character is used."); + params.addParam("t", "t", "Column name for the spatio-temporal path's time"); + params.addParam("x", "x", "Column name for the spatio-temporal path's x-coordinate"); + params.addParam("y", "y", "Column name for the spatio-temporal path's y-coordinate"); + params.addParam("z", "z", "Column name for the spatio-temporal path's z-coordinate"); + return params; +} + +CSVPiecewiseLinearSpatioTemporalPath::CSVPiecewiseLinearSpatioTemporalPath( + const InputParameters & params) + : PiecewiseLinearSpatioTemporalPathBase(params) +{ + using Format = MooseUtils::DelimitedFileReader::FormatFlag; + using Header = MooseUtils::DelimitedFileReader::HeaderFlag; + + auto csv_reader = MooseUtils::DelimitedFileReader(getParam("file")); + csv_reader.setHeaderFlag(getParam("file_header").getEnum
()); + csv_reader.setFormatFlag(getParam("file_format").getEnum()); + csv_reader.setIgnoreEmptyLines(getParam("file_ignore_empty_lines")); + csv_reader.setComment(getParam("file_comment")); + csv_reader.read(); + + // times + _times = csv_reader.getData(getParam("t")); + + // coords + const auto & x = csv_reader.getData(getParam("x")); + const auto & y = csv_reader.getData(getParam("y")); + const auto & z = csv_reader.getData(getParam("z")); + setCoords(x, y, z); + + validate(); +} diff --git a/src/spatiotemporalpaths/FunctionSpatioTemporalPath.C b/src/spatiotemporalpaths/FunctionSpatioTemporalPath.C new file mode 100644 index 00000000..cb83ad9e --- /dev/null +++ b/src/spatiotemporalpaths/FunctionSpatioTemporalPath.C @@ -0,0 +1,39 @@ +/****************************************************************************/ +/* DO NOT MODIFY THIS HEADER */ +/* */ +/* MALAMUTE: MOOSE Application Library for Advanced Manufacturing UTilitiEs */ +/* */ +/* Copyright 2021 - 2023, Battelle Energy Alliance, LLC */ +/* ALL RIGHTS RESERVED */ +/****************************************************************************/ + +#include "FunctionSpatioTemporalPath.h" +#include "Function.h" + +registerMooseObject("MalamuteApp", FunctionSpatioTemporalPath); + +InputParameters +FunctionSpatioTemporalPath::validParams() +{ + auto params = SpatioTemporalPath::validParams(); + params.addClassDescription( + "A spatiotemporal path whose coordinates are specified using MOOSE functions."); + params.addParam("x", "The function for the x-coordinate."); + params.addParam("y", "The function for the y-coordinate."); + params.addParam("z", "The function for the z-coordinate."); + return params; +} + +FunctionSpatioTemporalPath::FunctionSpatioTemporalPath(const InputParameters & params) + : SpatioTemporalPath(params), + _x(isParamValid("x") ? &getFunction("x") : nullptr), + _y(isParamValid("y") ? &getFunction("y") : nullptr), + _z(isParamValid("z") ? &getFunction("z") : nullptr) +{ +} + +Point +FunctionSpatioTemporalPath::position(Real t) const +{ + return Point(_x ? _x->value(t) : 0.0, _y ? _y->value(t) : 0.0, _z ? _z->value(t) : 0.0); +} diff --git a/src/spatiotemporalpaths/PiecewiseLinearSpatioTemporalPath.C b/src/spatiotemporalpaths/PiecewiseLinearSpatioTemporalPath.C new file mode 100644 index 00000000..69cc44a5 --- /dev/null +++ b/src/spatiotemporalpaths/PiecewiseLinearSpatioTemporalPath.C @@ -0,0 +1,35 @@ +/****************************************************************************/ +/* DO NOT MODIFY THIS HEADER */ +/* */ +/* MALAMUTE: MOOSE Application Library for Advanced Manufacturing UTilitiEs */ +/* */ +/* Copyright 2021 - 2023, Battelle Energy Alliance, LLC */ +/* ALL RIGHTS RESERVED */ +/****************************************************************************/ + +#include "PiecewiseLinearSpatioTemporalPath.h" + +registerMooseObject("MalamuteApp", PiecewiseLinearSpatioTemporalPath); + +InputParameters +PiecewiseLinearSpatioTemporalPath::validParams() +{ + InputParameters params = PiecewiseLinearSpatioTemporalPathBase::validParams(); + params.addClassDescription( + "A piecewise linear spatiotemporal path from discrete times and vertices."); + params.addRequiredParam>("t", "Times associated with the path vertices"); + params.addParam>("x", {}, "x-coordinates of the path vertices"); + params.addParam>("y", {}, "y-coordinates of the path vertices"); + params.addParam>("z", {}, "z-coordinates of the path vertices"); + return params; +} + +PiecewiseLinearSpatioTemporalPath::PiecewiseLinearSpatioTemporalPath(const InputParameters & params) + : PiecewiseLinearSpatioTemporalPathBase(params) +{ + _times = getParam>("t"); + setCoords(getParam>("x"), + getParam>("y"), + getParam>("z")); + validate(); +} diff --git a/src/spatiotemporalpaths/PiecewiseLinearSpatioTemporalPathBase.C b/src/spatiotemporalpaths/PiecewiseLinearSpatioTemporalPathBase.C new file mode 100644 index 00000000..50447dec --- /dev/null +++ b/src/spatiotemporalpaths/PiecewiseLinearSpatioTemporalPathBase.C @@ -0,0 +1,155 @@ +/****************************************************************************/ +/* DO NOT MODIFY THIS HEADER */ +/* */ +/* MALAMUTE: MOOSE Application Library for Advanced Manufacturing UTilitiEs */ +/* */ +/* Copyright 2021 - 2023, Battelle Energy Alliance, LLC */ +/* ALL RIGHTS RESERVED */ +/****************************************************************************/ + +#include "PiecewiseLinearSpatioTemporalPathBase.h" + +InputParameters +PiecewiseLinearSpatioTemporalPathBase::validParams() +{ + auto params = SpatioTemporalPath::validParams(); + params.addParam("time_tolerance", 5e-12, "Tolerance of query time"); + MooseEnum outside_behavior("CONSTANT EXTRAPOLATION EXCEPTION", "CONSTANT"); + params.addParam( + "outside", + outside_behavior, + "The method to use when extrapolating the path position outside its temporal support. " + "CONSTANT: Return the closest path point; EXTRAPOLATION: Linear extrapolation; EXCEPTION: " + "Raise an exception when trying to extrapolate."); + return params; +} + +PiecewiseLinearSpatioTemporalPathBase::PiecewiseLinearSpatioTemporalPathBase( + const InputParameters & params) + : SpatioTemporalPath(params), + _t_tol(getParam("time_tolerance")), + _outside(getParam("outside")) +{ +} + +Point +PiecewiseLinearSpatioTemporalPathBase::position(Real t) const +{ + if (t < (_times[0] - _t_tol) || t > (_times.back() + _t_tol)) + { + if (_outside == "EXCEPTION") + mooseException("A spatiotemporal path is queried outside its temporal support."); + else if (_outside == "CONSTANT") + { + if (t < _times[0]) + return _coords[0]; + if (t > _times.back()) + return _coords.back(); + } + else if (_outside == "EXTRAPOLATION") + { + // no-op + } + else + paramError("extrapolation_method", "Unsupported extrapolation method."); + } + + auto [i1, i2] = getIntervalIndices(t); + + // Linearly interpolate the coordinates + auto p1 = _coords[i1]; + auto p2 = _coords[i2]; + auto fraction = (t - _times[i1]) / (_times[i2] - _times[i1]); + auto p = p1 + fraction * (p2 - p1); + + if (std::isnan(p(0)) || std::isnan(p(1)) || std::isnan(p(2))) + mooseException("Encountered NaN when querying a spatiotemporal path."); + + return p; +} + +void +PiecewiseLinearSpatioTemporalPathBase::setCoords(const std::vector & x, + const std::vector & y, + const std::vector & z) +{ + // Size check + auto sz = std::max({x.size(), y.size(), z.size()}); + if (sz == 0 || (!x.empty() && x.size() != sz) || (!x.empty() && x.size() != sz) || + (!x.empty() && x.size() != sz)) + mooseError( + "Error while constructing a spatio-temporal path: At lease one of the x-, y-, and z- " + "coordinates must be non-empty, and the non-zero sizes must match. x-coordinates have " + "size ", + x.size(), + ", y-coordinates have size ", + y.size(), + ", z-coordinates have size ", + z.size(), + "."); + + // Assigne coordinates + _coords.resize(sz); + for (auto i : make_range(sz)) + { + _coords[i](0) = x.empty() ? 0.0 : x[i]; + _coords[i](1) = y.empty() ? 0.0 : y[i]; + _coords[i](2) = z.empty() ? 0.0 : z[i]; + } +} + +void +PiecewiseLinearSpatioTemporalPathBase::validate() const +{ + // Time and coords must have same size + if (_times.size() != _coords.size()) + mooseError("Error while constructing a spatio-temporal path: The time series and the " + "coordinates must have the same size. The time series have size ", + _times.size(), + ", and the coordinates have size ", + _coords.size(), + "."); + + // There must be at least one line segment + if (_times.size() < 2) + mooseError("Error while constructing a spatio-temporal path: There must be at least two " + "vertices on the path, but only ", + _times.size(), + " is provided."); + + // Time must be non-decreasing + for (auto i : index_range(_times)) + if (i > 0 && _times[i] < _times[i - 1]) + mooseError("Error while constructing a spatio-temporal path: The time series must be " + "non-decreasing. The time at index ", + i - 1, + " is ", + _times[i - 1], + ", and the time at index ", + i, + " is ", + _times[i], + "."); +} + +std::pair +PiecewiseLinearSpatioTemporalPathBase::getIntervalIndices(Real t) const +{ + if (t < _times[0]) + return {0, 1}; + + for (auto i : index_range(_times)) + if (t >= _times[i]) + { + if (i == _times.size() - 1) + return {_times.size() - 2, _times.size() - 1}; + else + return {i, i + 1}; + } + + mooseError("Failed to query a spatiotemporal path with time ", + t, + ". If you believe the query is valid, try increasing the time_tolerance as query may " + "fail due to machine precision."); + return {0, 0}; +} diff --git a/src/spatiotemporalpaths/SpatioTemporalPath.C b/src/spatiotemporalpaths/SpatioTemporalPath.C new file mode 100644 index 00000000..951b4152 --- /dev/null +++ b/src/spatiotemporalpaths/SpatioTemporalPath.C @@ -0,0 +1,158 @@ +/****************************************************************************/ +/* DO NOT MODIFY THIS HEADER */ +/* */ +/* MALAMUTE: MOOSE Application Library for Advanced Manufacturing UTilitiEs */ +/* */ +/* Copyright 2021 - 2023, Battelle Energy Alliance, LLC */ +/* ALL RIGHTS RESERVED */ +/****************************************************************************/ + +#include "SpatioTemporalPath.h" + +InputParameters +SpatioTemporalPath::validParams() +{ + auto params = UserObject::validParams(); + params.addParam("FD_abs_eps", + 1e-6, + "The absolute epsilon to use when using finite-differencing to " + "approximate the path's velocity and direction."); + params.addParam("FD_rel_eps", + 1e-6, + "The relative epsilon to use when using finite-differencing to " + "approximate the path's velocity and direction."); + params.addParam( + "verbose", false, "Set to true to print additional information about the path."); + params.addParam( + "update_interval", + 0, + "Time interval betweem path front updates. This parameter controls how often the path front " + "is updated. The default value (0) is equivalent to live update, i.e., at every time step " + "the path position, velocity, and direction are recomputed."); + + // Only execute at INITIAL and TIMESTEP_BEGIN -- that's when the current time changes + ExecFlagEnum execute_options = MooseUtils::getDefaultExecFlagEnum(); + execute_options = {EXEC_INITIAL, EXEC_TIMESTEP_BEGIN}; + params.set("execute_on") = execute_options; + params.suppressParameter("execute_on"); + + return params; +} + +SpatioTemporalPath::SpatioTemporalPath(const InputParameters & params) + : UserObject(params), + TransientInterface(this), + _verbose(getParam("verbose")), + _abs_epsilon(getParam("FD_abs_eps")), + _rel_epsilon(getParam("FD_rel_eps")), + _interval(getParam("update_interval")), + _last_updated(declareRestartableData("last_updated")), + _current_position(std::numeric_limits::quiet_NaN(), + std::numeric_limits::quiet_NaN(), + std::numeric_limits::quiet_NaN()), + _current_velocity(std::numeric_limits::quiet_NaN(), + std::numeric_limits::quiet_NaN(), + std::numeric_limits::quiet_NaN()), + _current_direction(std::numeric_limits::quiet_NaN(), + std::numeric_limits::quiet_NaN(), + std::numeric_limits::quiet_NaN()), + _previous_position(declareRestartableData("previous_position")), + _previous_velocity(declareRestartableData("previous_velocity")), + _previous_direction(declareRestartableData("previous_direction")) +{ +} + +void +SpatioTemporalPath::initialSetup() +{ + update(); +} + +void +SpatioTemporalPath::timestepSetup() +{ + if (_t > _last_updated + _interval) + update(); +} + +void +SpatioTemporalPath::update() +{ + _previous_position = _current_position; + _previous_velocity = _current_velocity; + _previous_direction = _current_direction; + + _current_position = position(_t); + _current_velocity = velocity(_t); + _current_direction = direction(_t); + + _last_updated = _t; + + if (_verbose) + { + _console << "Spatio-temporal path: " << name() << std::endl; + _console << " position: " << position(_t) << std::endl; + _console << " velocity: " << velocity(_t) << std::endl; + _console << " direction: " << direction(_t) << std::endl; + } +} + +RealVectorValue +SpatioTemporalPath::velocity(Real t) const +{ + auto dt = _rel_epsilon * std::abs(t); + if (dt < _abs_epsilon) + dt = _abs_epsilon; + + return (position(t + dt) - position(t)) / dt; +} + +RealVectorValue +SpatioTemporalPath::direction(Real t) const +{ + auto dt = _rel_epsilon * std::abs(t); + if (dt < _abs_epsilon) + dt = _abs_epsilon; + + auto dist = position(t + dt) - position(t); + + return dist.norm() == 0.0 ? RealVectorValue(0, 0, 0) : dist.unit(); +} + +Real +SpatioTemporalPath::tangentialDistance(Real t, const Point & p) const +{ + auto p0 = position(t); + auto d = direction(t); + return (p - p0) * d; +} + +Real +SpatioTemporalPath::tangentialDistance(const Point & p) const +{ + auto p0 = position(); + auto d = direction(); + return (p - p0) * d; +} + +Real +SpatioTemporalPath::normalDistance(Real t, const Point & p) const +{ + auto p0 = position(t); + auto d = direction(t); + auto dp = p - p0; + auto dpt = (p - p0) * d; + auto dpn = dp - dpt * d; + return dpn.norm(); +} + +Real +SpatioTemporalPath::normalDistance(const Point & p) const +{ + auto p0 = position(); + auto d = direction(); + auto dp = p - p0; + auto dpt = (p - p0) * d; + auto dpn = dp - dpt * d; + return dpn.norm(); +} diff --git a/src/userobjects/SpatioTemporalPathElementSubdomainModifier.C b/src/userobjects/SpatioTemporalPathElementSubdomainModifier.C new file mode 100644 index 00000000..49d57358 --- /dev/null +++ b/src/userobjects/SpatioTemporalPathElementSubdomainModifier.C @@ -0,0 +1,46 @@ +/****************************************************************************/ +/* DO NOT MODIFY THIS HEADER */ +/* */ +/* MALAMUTE: MOOSE Application Library for Advanced Manufacturing UTilitiEs */ +/* */ +/* Copyright 2021 - 2023, Battelle Energy Alliance, LLC */ +/* ALL RIGHTS RESERVED */ +/****************************************************************************/ + +#include "SpatioTemporalPathElementSubdomainModifier.h" + +registerMooseObject("MalamuteApp", SpatioTemporalPathElementSubdomainModifier); + +InputParameters +SpatioTemporalPathElementSubdomainModifier::validParams() +{ + InputParameters params = ElementSubdomainModifier::validParams(); + params.addClassDescription("Modify subdomain of elements when the element is within the " + "neighborhood of the path's current position."); + params.addRequiredParam( + "target_subdomain", "The subdomain name/ID to set when the path goes through an element"); + params.addRequiredParam("path", "The name of the spatio-temporal path object."); + params.addRequiredParam("radius", + "The element subdomain is changed to the target subdomain if its " + "centroid is within the radius of the current path front."); + return params; +} + +SpatioTemporalPathElementSubdomainModifier::SpatioTemporalPathElementSubdomainModifier( + const InputParameters & params) + : ElementSubdomainModifier(params), + SpatioTemporalPathInterface(this), + _path(getSpatioTemporalPath("path")), + _subdomain_id(_mesh.getSubdomainID(getParam("target_subdomain"))), + _r(getParam("radius")) +{ +} + +SubdomainID +SpatioTemporalPathElementSubdomainModifier::computeSubdomainID() +{ + if ((_current_elem->centroid() - _path.position()).norm_sq() < _r * _r) + return _subdomain_id; + + return _current_elem->subdomain_id(); +} diff --git a/test/tests/spatiotemporal_path/csv.i b/test/tests/spatiotemporal_path/csv.i new file mode 100644 index 00000000..cd85b0db --- /dev/null +++ b/test/tests/spatiotemporal_path/csv.i @@ -0,0 +1,44 @@ +[Mesh] + [gmg] + type = GeneratedMeshGenerator + dim = 2 + nx = 20 + ny = 20 + [] + use_displaced_mesh = false +[] + +[Problem] + solve = false +[] + +[SpatioTemporalPaths] + [path] + type = CSVPiecewiseLinearSpatioTemporalPath + file = 'gold/path.csv' + verbose = true + [] +[] + +[Materials] + [heat_source] + type = ADMovingEllipsoidalHeatSource + path = path + power = 1 + efficiency = 1 + scale = 1 + a = 0.4 + b = 0.2 + outputs = exodus + [] +[] + +[Executioner] + type = Transient + dt = 0.5 + end_time = 10 +[] + +[Outputs] + exodus = true +[] diff --git a/test/tests/spatiotemporal_path/esm.i b/test/tests/spatiotemporal_path/esm.i new file mode 100644 index 00000000..bc076080 --- /dev/null +++ b/test/tests/spatiotemporal_path/esm.i @@ -0,0 +1,77 @@ +[Mesh] + [gmg] + type = GeneratedMeshGenerator + dim = 2 + nx = 20 + ny = 20 + [] + [solid] + type = SubdomainBoundingBoxGenerator + input = gmg + block_id = 0 + block_name = solid + bottom_left = '0 0 0' + top_right = '1 1 0' + [] + [liquid] + type = SubdomainBoundingBoxGenerator + input = solid + block_id = 1 + block_name = liquid + bottom_left = '0 0 0' + top_right = '0.05 0.05 0' + [] + use_displaced_mesh = false +[] + +[Problem] + solve = false +[] + +[AuxVariables] + [u] + [] +[] + +[Functions] + [path_x] + type = PiecewiseLinear + x = '3 4 5 6 7 8' + y = '0 0.1 0.2 0.3 0.4 0.5' + [] + [path_y] + type = PiecewiseLinear + x = '3 4 5 6 7 8' + y = '0 0.1 0.2 0.3 0.4 0.5' + [] +[] + +[SpatioTemporalPaths] + [path] + type = FunctionSpatioTemporalPath + x = path_x + y = path_y + + verbose = true + [] +[] + +[UserObjects] + [esm] + type = SpatioTemporalPathElementSubdomainModifier + path = 'path' + radius = 0.2 + target_subdomain = 'liquid' + execute_on = 'INITIAL TIMESTEP_END' + [] +[] + +[Executioner] + type = Transient + dt = 1 + end_time = 8 +[] + +[Outputs] + exodus = true +[] diff --git a/test/tests/spatiotemporal_path/function.i b/test/tests/spatiotemporal_path/function.i new file mode 100644 index 00000000..1923508c --- /dev/null +++ b/test/tests/spatiotemporal_path/function.i @@ -0,0 +1,58 @@ +[Mesh] + [gmg] + type = GeneratedMeshGenerator + dim = 2 + nx = 20 + ny = 20 + [] + use_displaced_mesh = false +[] + +[Problem] + solve = false +[] + +[Functions] + [path_x] + type = PiecewiseLinear + x = '3 4 5 6 7 8' + y = '0 0.1 0.2 0.3 0.4 0.5' + [] + [path_y] + type = PiecewiseLinear + x = '3 4 5 6 7 8' + y = '0 0.1 0.2 0.3 0.4 0.5' + [] +[] + +[SpatioTemporalPaths] + [path] + type = FunctionSpatioTemporalPath + x = path_x + y = path_y + verbose = true + [] +[] + +[Materials] + [heat_source] + type = ADMovingEllipsoidalHeatSource + path = path + power = 1 + efficiency = 1 + scale = 1 + a = 0.4 + b = 0.2 + outputs = exodus + [] +[] + +[Executioner] + type = Transient + dt = 0.5 + end_time = 10 +[] + +[Outputs] + exodus = true +[] diff --git a/test/tests/spatiotemporal_path/gold/csv_out.e b/test/tests/spatiotemporal_path/gold/csv_out.e new file mode 100644 index 0000000000000000000000000000000000000000..04e0c9df391b7538a99c46f38617a873a2dff687 GIT binary patch literal 257260 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 literal 0 HcmV?d00001 diff --git a/test/tests/spatiotemporal_path/gold/esm_out.e b/test/tests/spatiotemporal_path/gold/esm_out.e new file mode 100644 index 0000000000000000000000000000000000000000..f071d60359e0e1e4505e556669f5032c520519b6 GIT binary patch literal 68596 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 literal 0 HcmV?d00001 diff --git a/test/tests/spatiotemporal_path/gold/esm_out.e-s002 b/test/tests/spatiotemporal_path/gold/esm_out.e-s002 new file mode 100644 index 0000000000000000000000000000000000000000..89f19bc4d9977f7fc6d4ea48c9729c03482c32d3 GIT binary patch literal 27124 zcmeI3ca&81-G^tT?a~oc>>wc6D1wNhE(lVrpmfk>fdy8!!7kN?g1vx>4IB2}D^U}p zDVk_BYD`Q_M8)2Fjpljoe6R1izP^}q{A1t4%sJ2gKJ%G7znS~oJ9lR>%h z@}Mbf1o>qp6-5=rWFpJ@SgmQNmV`R2}(ecfs&X;-In!Ma`V|E22_U9*~B#=X7+!g*UWV@>)PjfYgAKOQ|1eDbDwBcQe9qDIk%>J z$xhWhdnSr9&FHs=rpdlIe`aMo!8y`-h?&OV`{g#NGd~JSru@%~a^Ge3lHPnDv3$V@ zGs{=asjPC_r_1Ws+%Wr@NZwybWx9QO+$T3_DVWTd&+@fj z&t=#3dg=44Shk@0hp*?pklt#)-eSspmaqMKF8fnoZ#m00o?6KsvVfFz(jZCMAH4S# zk7Q%PD#q-x3zJ5FKeFs5GkHw!>UH06A4s=R`reur4Jj=v8&h01H@l;_jB|P;d)Hf+ zp8U{h?YUC_KXERVdFz_Yg|FIkrEdSrxpr`_rn>uXw(Ofu-}q0QFI~Kc^ELN)TjT+z zyts<{bse)Jjn~q1>y@m_)XIvAlBqTB+fL+uTL9^67kI2Ls##c7>$BK+dwAAU~%i}^B7vOKpDgZa@sdHwINPr5N&$n_au$Ye$)ub(Vm zog7$QcV9QX`MeR?J7Y&N=GQu=|6j{q>9R4e>*cckzDRGi=lz&6op&9}jvMTsH z={~uRw4VfGlkb( z;B93(CZ+xA=+p7x-pQ>n9UqOy(=k4Ah3WWoET4|gPET%y>G)hcKOLWc%-iFI>9{8Q zP72fU#aKQaUyk|Hacw+59bb*tOUKt^zI1#e=1a%7V!m{IJLXHrcVoVEd_U$($Lq55 zW!qZ*>iVkdr>>8>>tA<$>#kqj^{M;*>%QOI`*cICEUdfV)ZI_&?iY3UgWPsccJ;#C z{+ac#I{W$m!SONodCz{{a>u3Q7f9iAv7h9Q^V!c$?)Opl^O5^~l=YDNzLY&qid|Um#pt& zdY-SokLmaS`aY)TN$dNVo`0(EV|t#szK`j@E7bQf{!S{a=VNtcS?RR&kCXLqEGwNo zcYPKxrLv}`GP&$+J>2-L@|@BcGi%n*RZrHsrm|{1Ui(a@tYrH7y!kV^&wuXozdj!T z*7wi<`n>IP>z)|!dcE}8J+E!_T4k>>_S)cl@S57%*TQ=JsMmUWU1n?W+DNZ?^jb!* zPxSi#jbRgL51YbfusLi2Tf$c0_3s^^BWwem!0Qydz_!p8y1{m^J?sEpkGK!NqV1Tnek;GPoSBfGgoDxEij3 zYvDS$9&Uge;U>5lZh>3jHn<(`fIHzXxEt<)dto*F0`7zR;Q{z1{0bg~U&BN2F#HC7 z3%`Tk!z1u0`~m(5kHO>cCwKy$gg?Vm@H9LFe}QM=ukbf`4*m}Rfal?#@Gp1)*1(JK z61)s+;T3olUW3=+4R{mYg16xvco*J-_u&Kh5I%yB;S=~2K7-HU3-}Vgg0JD<@C|$$ zm+Iy*ZU7CSAvA)<&;;_K0GdKGXbvr)CA5Op&;~Yyw$KhXf{kGlXb+phX0SPI0b9aW zur+jmj<5}Mg3izdwuP?H4Yq^rVF%a|c7pEE1A0O)*cp05AJ_%@!miK{c7xraKkNZ} z!d_4a17INR4TE4X>;pq!C=7$)urKTf`@;cnARGiEU?dz2hrlQp4P#&|jDzto0VcvE zI1~jX2Tq)h8ma)^I$$KfQ7IKj({WK zC^#C9fyHnv90yBaDI5Q&=Ty-t)Mm7ncKjIU}tU%?ZD2w5o`>0=1rhI*qJwl&A`sQIcx!T z<}G0>urqHB9l*}q5w?L2kvlPV20L>X*cR-}U7;J;nYV-O!OnGdJ$pir$gXFv=*+I? z&e54&&)(6QUC%zznO)CaqBFameWNqGp1Ve8c0Kz=XLdbzi_Y8ub_YAN>)9Xd%&zAi zU}ttc_XIn$>$w-$nO*lnu0oEp%?z+J>t-g{nRQbNc4J^P91gQ0>!~a{v+l~HGwZG* zIABG{RAcM{l{^>i}Wne}uE*qQZoD%hFzbQ;*1^>jMene}uA*qQaT z4D8H$S`Kz*J)H@5W<8w+c4pn34R(t`Pb=V@$a*?AI4NCYdRiHs zSx*;6XV%k2(V6vhadc)qT@syHPnSk#*3&AmGwbOxSQS}MmxG;IPgj7QSx;Ajomo#; zft^`TSA(5dPuGB*S$Efhoz8T39b6w-cQ-_5*4>TKnRRzlbY|V%9GzKrw?t>w-L27? zb$45IX5HN$omqExL}%91oza**I@XV%kw zU}x6T{a|O--2-5!Gu{0Xeid1F4}zUpcfW=QBkS%VururKVX!mn?l)j(*4=Nx&aAuN zft^`*zXv*=pxXV%l-z|O3v=fKXar@w=pSx^4} zJF}ji2RpN#{t0$wJ^c&p%zAnO?96&v19oOTy$EX}>**!1GwbPPurupvE!dg$^a|LS z_4F#(nRWLX*y&79ufrRW_4HG_AehCJSY`+CG( za_)dGJui{hINPP?D3Wsubm{quynG&S!hJpBDLL0bm!8K+&N~!vUuSqq&OtQIW<4e6 zBbsqvXLw4^O*GGDJtgNUT5w-ycuLM$w9IBbCFd_%abIV+OU`AqChH7$>3NOBBkq#( z8yoVNnISpX(Jr#?Hjd7$yG^1q<0&~GVrSOfrqP)j!Di8!b+>tRW;`Y5PwdRP+cG*c zo|5w_c4j;!=UBFijHkQ~(V6j-*AeW@cuLO0*qQN^*C{$Po|5x3c4j=~b&1a02DXi^ zEhC=tx|1J4R=24?9I?)?N4L%)09lomo#kqcd*-y`nSg zY3Jz7dg>jWd28qsomo%2L}%7hU$8T81G|EqSx^1I&fFPx13R={{idqro~U14-)-3^G&th<5HnRT~!bY|TRiq5RN!O@v@w@-9t-3^J(th=GnnRPcT zIXaGwZG> zIg zyZOim%(`0|omqFsM`zaE3DKE#cVcvA-JKMjS$8K#XV%>*(V2C3YIJ7Zofe&0cc({Z z*4-J=nRT};I-TimIh+|;cV|Us*4^3BnRT}!I+ag<%(}ZSI}38?vBo^yL+ND>+as@%(`2h?UFBd8)Pz> z2G9`9ji52unVUd9*qIBUDcJcOm)ik$jO=ndMQ3)o?$McjZjb1Ej?Wzc10(y~y^umx-hTfx@Q z0Xo7q&dB60n1=HoC#;a*{}l6fpg(JI3F&6m2e?k1bp^#|6Y%S7hny% z2rt3Quohl{SK&2y9o~R9;VpO@-hp@FJ$N5JfDhp#_!vHcPvJB89KL`r;VbwW{te&2 zw;Y=olE2Y6U~B*lp%FBOCXf#W&=i_Mb7%oAp%t`-Hn1VIg?6wJYz&(~d)O2CV^{|wtN`L|QHU-EB?y07y(KbWHt%Ql84kPijW6q-SEXaOyu6|@H5!_SFxb^!LR zX?7M$QdVu^C zyar#hUc5$foa@gx0!qNoDZak@?sygXYPbgQm3*JRp792_5pIH;;TE_RZiCz54!9HU zg1g}!xEEIQ+OE4UcZ7k!u`1cO7c-s%%%A*w!!wL;z&AVv7s;`BPezY*Gr(iXnQ--7 r7FwTg>Ho=FpB?1ZJ!c?iAZH+FAZH+FAZH+FAZH+FAZOtJqk;bb2f;-4 literal 0 HcmV?d00001 diff --git a/test/tests/spatiotemporal_path/gold/esm_out.e-s003 b/test/tests/spatiotemporal_path/gold/esm_out.e-s003 new file mode 100644 index 0000000000000000000000000000000000000000..e3c352d5cc95daee6ca4ac0d4eaff24f3e914f50 GIT binary patch literal 27124 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 q7TTC^{qi>Ewa>15)qHR% literal 0 HcmV?d00001 diff --git a/test/tests/spatiotemporal_path/gold/esm_out.e-s005 b/test/tests/spatiotemporal_path/gold/esm_out.e-s005 new file mode 100644 index 0000000000000000000000000000000000000000..cc2c3bee5f05bfc090caad5ab2693ad16fff08ab GIT binary patch literal 27124 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 BJj?(9 literal 0 HcmV?d00001 diff --git a/test/tests/spatiotemporal_path/gold/esm_out.e-s008 b/test/tests/spatiotemporal_path/gold/esm_out.e-s008 new file mode 100644 index 0000000000000000000000000000000000000000..81eb3740f8cbb1618d8fd678270f6c4ea5890003 GIT binary patch literal 27124 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%0ANcV*^%wa!n^leN8lJnC25+w?lU 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

bdChm3uVPlo{V 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 literal 0 HcmV?d00001 diff --git a/test/tests/spatiotemporal_path/gold/path.csv b/test/tests/spatiotemporal_path/gold/path.csv new file mode 100644 index 00000000..265e9e3f --- /dev/null +++ b/test/tests/spatiotemporal_path/gold/path.csv @@ -0,0 +1,7 @@ +t,x,y,z +3,0,0,0 +4,0.1,0.1,0 +5,0.2,0.2,0 +6,0.3,0.3,0 +7,0.4,0.4,0 +8,0.5,0.5,0 diff --git a/test/tests/spatiotemporal_path/manual.i b/test/tests/spatiotemporal_path/manual.i new file mode 100644 index 00000000..849804eb --- /dev/null +++ b/test/tests/spatiotemporal_path/manual.i @@ -0,0 +1,46 @@ +[Mesh] + [gmg] + type = GeneratedMeshGenerator + dim = 2 + nx = 20 + ny = 20 + [] + use_displaced_mesh = false +[] + +[Problem] + solve = false +[] + +[SpatioTemporalPaths] + [path] + type = PiecewiseLinearSpatioTemporalPath + t = '3 4 5 6 7 8' + x = '0 0.1 0.2 0.3 0.4 0.5' + y = '0 0.1 0.2 0.3 0.4 0.5' + verbose = true + [] +[] + +[Materials] + [heat_source] + type = ADMovingEllipsoidalHeatSource + path = path + power = 1 + efficiency = 1 + scale = 1 + a = 0.4 + b = 0.2 + outputs = exodus + [] +[] + +[Executioner] + type = Transient + dt = 0.5 + end_time = 10 +[] + +[Outputs] + exodus = true +[] diff --git a/test/tests/spatiotemporal_path/tests b/test/tests/spatiotemporal_path/tests new file mode 100644 index 00000000..3f079204 --- /dev/null +++ b/test/tests/spatiotemporal_path/tests @@ -0,0 +1,35 @@ +[Tests] + issues = '#116' + [manual] + type = 'Exodiff' + input = 'manual.i' + exodiff = 'manual_out.e' + design = 'ADMovingEllipsoidalHeatSource.md PiecewiseLinearSpatioTemporalPath.md' + requirement = 'The system shall be able to use a manually defined path to evolve the heat source.' + [] + [csv] + type = 'Exodiff' + input = 'csv.i' + exodiff = 'csv_out.e' + design = 'ADMovingEllipsoidalHeatSource.md CSVPiecewiseLinearSpatioTemporalPath.md' + requirement = 'The system shall be able to use a CSV-defined path to evolve the heat source.' + [] + [function] + type = 'Exodiff' + input = 'function.i' + exodiff = 'function_out.e' + design = 'ADMovingEllipsoidalHeatSource.md FunctionSpatioTemporalPath.md' + requirement = 'The system shall be able to use a function-defined path to evolve the heat source.' + [] + [esm] + type = 'Exodiff' + input = 'esm.i' + exodiff = "esm_out.e + esm_out.e-s002 esm_out.e-s003 esm_out.e-s004 + esm_out.e-s005 esm_out.e-s006 esm_out.e-s007 + esm_out.e-s008 esm_out.e-s009" + design = 'SpatioTemporalPathElementSubdomainModifier.md' + mesh_mode = 'REPLICATED' + requirement = 'The system shall be able to use a SpatioTemporalPath to modify element subdomains.' + [] +[]