From 58cddeea4f79baeb6dadb6c95dda32a33c47f4be Mon Sep 17 00:00:00 2001 From: Andrei Punko Date: Wed, 16 Oct 2024 00:23:21 +0300 Subject: [PATCH] Hyperbolic eqn: calculate value on first layer before soultion process start --- .../math/pde/equation/HyperbolicEquation.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/main/java/by/andd3dfx/math/pde/equation/HyperbolicEquation.java b/src/main/java/by/andd3dfx/math/pde/equation/HyperbolicEquation.java index aed3a99..fe596a4 100644 --- a/src/main/java/by/andd3dfx/math/pde/equation/HyperbolicEquation.java +++ b/src/main/java/by/andd3dfx/math/pde/equation/HyperbolicEquation.java @@ -14,10 +14,10 @@ public class HyperbolicEquation extends Equation { /** * Create hyperbolic equation * - * @param x1 left space coordinate - * @param x2 right space coordinate - * @param t2 right time coordinate - * @param leftBorderCondition left border condition + * @param x1 left space coordinate + * @param x2 right space coordinate + * @param t2 right time coordinate + * @param leftBorderCondition left border condition * @param rightBorderCondition right border condition */ public HyperbolicEquation(double x1, double x2, double t2, @@ -50,10 +50,9 @@ public void solve(double h, double tau) { h2_tau = h2 / tau, _2h2_tau2 = 2 * Math.pow(h / tau, 2); - /* TODO: need to determine what values should be populated into these [1,0] and [1,N] cells - arr.set(1, 0, gLU(tau)); //Задание граничных значений на первом слое - arr.set(1, N, gRU(tau)); - */ + // Задание граничных значений на первом слое + arr.set(1, 0, calcFirstLayerValue(tau, arr.get(0, 0), area.x().left())); + arr.set(1, N, calcFirstLayerValue(tau, arr.get(0, N), area.x().right())); // Вычисление значения функции на первом слое для запуска разностной схемы // @@ -125,6 +124,10 @@ public void solve(double h, double tau) { } } + private double calcFirstLayerValue(double tau, double u, double x) { + return u + tau * (gdU_dt(x) + tau / 2. / gM(x, 0, u) * gF(x, 0, u)); + } + /** * Initial condition dU_dt(x,0) at moment t=0 */