26using IntegrationSchemeEnum [[deprecated(
"Use SpatialSchemeEnum instead")]] =
38template <
class T,
int D>
class Advect;
47 bool updateLowerLayers =
true) {
48 if (kernel.currentTimeStep < 0. || kernel.storedRates.empty())
49 kernel.computeRates(maxTimeStep);
51 kernel.updateLevelSet(kernel.currentTimeStep);
55 if (updateLowerLayers)
56 kernel.adjustLowerLayers();
58 return kernel.currentTimeStep;
65 if (kernel.initialLevelSets.size() != kernel.levelSets.size()) {
66 kernel.initialLevelSets.resize(kernel.levelSets.size());
67 for (
auto &
ls : kernel.initialLevelSets)
70 kernel.initialLevelSets.back()->deepCopy(kernel.levelSets.back());
74 if (kernel.velocityUpdateCallback) {
75 for (
size_t i = 0; i < kernel.levelSets.size() - 1; ++i) {
76 kernel.initialLevelSets[i]->deepCopy(kernel.levelSets[i]);
83 kernel.velocityUpdateCallback !=
nullptr);
88 if (kernel.velocityUpdateCallback)
89 kernel.velocityUpdateCallback(kernel.levelSets.back());
97 bool etched = kernel.combineLevelSets(0.5, 0.5);
100 if (etched && kernel.velocityUpdateCallback) {
101 for (
size_t i = 0; i < kernel.levelSets.size() - 1; ++i) {
102 kernel.levelSets[i]->deepCopy(kernel.initialLevelSets[i]);
105 kernel.adjustLowerLayers();
107 return 0.5 * dt1 + 0.5 * dt2;
112 if (kernel.initialLevelSets.size() != kernel.levelSets.size()) {
113 kernel.initialLevelSets.resize(kernel.levelSets.size());
114 for (
auto &
ls : kernel.initialLevelSets)
117 for (
size_t i = 0; i < kernel.levelSets.size(); ++i) {
118 kernel.initialLevelSets[i]->deepCopy(kernel.levelSets[i]);
124 kernel.velocityUpdateCallback !=
nullptr);
129 if (kernel.velocityUpdateCallback)
130 kernel.velocityUpdateCallback(kernel.levelSets.back());
137 bool etched1 = kernel.combineLevelSets(0.75, 0.25);
140 if (etched1 && kernel.velocityUpdateCallback) {
141 for (
size_t i = 0; i < kernel.levelSets.size() - 1; ++i) {
142 kernel.levelSets[i]->deepCopy(kernel.initialLevelSets[i]);
146 kernel.adjustLowerLayers();
148 if (kernel.velocityUpdateCallback) {
149 kernel.velocityUpdateCallback(kernel.levelSets.back());
157 bool etched2 = kernel.combineLevelSets(1.0 / 3.0, 2.0 / 3.0);
161 for (
size_t i = 0; i < kernel.levelSets.size() - 1; ++i) {
162 kernel.levelSets[i]->deepCopy(kernel.initialLevelSets[i]);
165 kernel.adjustLowerLayers();
167 return (dt1 + dt2 + 4.0 * dt3) / 6.0;
This class is used to advance level sets over time. Level sets are passed to the constructor in a std...
Definition lsAdvect.hpp:54
static auto New(Args &&...args)
Definition lsDomain.hpp:112
Definition lsAdvectIntegrationSchemes.hpp:41
Definition lsAdvect.hpp:41
SpatialSchemeEnum
Enumeration for the different spatial discretization schemes used by the advection kernel.
Definition lsAdvectIntegrationSchemes.hpp:10
@ LOCAL_LOCAL_LAX_FRIEDRICHS_2ND_ORDER
Definition lsAdvectIntegrationSchemes.hpp:17
@ STENCIL_LOCAL_LAX_FRIEDRICHS_1ST_ORDER
Definition lsAdvectIntegrationSchemes.hpp:20
@ LOCAL_LOCAL_LAX_FRIEDRICHS_1ST_ORDER
Definition lsAdvectIntegrationSchemes.hpp:16
@ LAX_FRIEDRICHS_2ND_ORDER
Definition lsAdvectIntegrationSchemes.hpp:14
@ LOCAL_LAX_FRIEDRICHS_1ST_ORDER
Definition lsAdvectIntegrationSchemes.hpp:18
@ ENGQUIST_OSHER_2ND_ORDER
Definition lsAdvectIntegrationSchemes.hpp:12
@ LAX_FRIEDRICHS_1ST_ORDER
Definition lsAdvectIntegrationSchemes.hpp:13
@ LOCAL_LAX_FRIEDRICHS_2ND_ORDER
Definition lsAdvectIntegrationSchemes.hpp:19
@ WENO_3RD_ORDER
Definition lsAdvectIntegrationSchemes.hpp:21
@ ENGQUIST_OSHER_1ST_ORDER
Definition lsAdvectIntegrationSchemes.hpp:11
@ LOCAL_LAX_FRIEDRICHS_ANALYTICAL_1ST_ORDER
Definition lsAdvectIntegrationSchemes.hpp:15
@ WENO_5TH_ORDER
Definition lsAdvectIntegrationSchemes.hpp:22
TemporalSchemeEnum
Enumeration for the different time integration schemes used to select the advection kernel.
Definition lsAdvectIntegrationSchemes.hpp:31
@ RUNGE_KUTTA_2ND_ORDER
Definition lsAdvectIntegrationSchemes.hpp:33
@ RUNGE_KUTTA_3RD_ORDER
Definition lsAdvectIntegrationSchemes.hpp:34
@ FORWARD_EULER
Definition lsAdvectIntegrationSchemes.hpp:32
Definition lsAdvectIntegrationSchemes.hpp:43
viennals::Advect< T, D > AdvectType
Definition lsAdvectIntegrationSchemes.hpp:44
static double evolveRungeKutta3(AdvectType &kernel, double maxTimeStep)
Definition lsAdvectIntegrationSchemes.hpp:110
static double evolveForwardEuler(AdvectType &kernel, double maxTimeStep, bool updateLowerLayers=true)
Definition lsAdvectIntegrationSchemes.hpp:46
static double evolveRungeKutta2(AdvectType &kernel, double maxTimeStep)
Definition lsAdvectIntegrationSchemes.hpp:61