From 66cb5bb4908cc54192aadaa901ac9092861c60f7 Mon Sep 17 00:00:00 2001 From: Adrian Sandu Date: Tue, 1 Sep 2026 14:56:21 -0400 Subject: [PATCH 1/6] Allen Cahn splitting added --- toolboxPackaging.prj | 58 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/toolboxPackaging.prj b/toolboxPackaging.prj index c9ddefa4..b4dd6978 100644 --- a/toolboxPackaging.prj +++ b/toolboxPackaging.prj @@ -1,5 +1,5 @@ - + ODE Test Problems Steven Roberts, Andrey A. Popov, Arash Sarshar, Adrian Sandu @@ -14,7 +14,7 @@ 0970ed36-a788-484f-beca-105eecd2562a - + true @@ -85,5 +85,59 @@ + + /Users/sandu/GIT/GitHub/ODE-Test-Problems/ODE Test Problems.mltbx + + + + /Applications/MATLAB_R2024b.app + + + + + + + + + + true + + + + + true + + + + + true + + + + + true + + + + + true + + + + + true + true + false + false + false + false + false + false + 15.5 + true + false + maci64 + true + \ No newline at end of file From 4b3de2c085abfe04fb92e9c6244f5776959af2dd Mon Sep 17 00:00:00 2001 From: Adrian Sandu Date: Tue, 1 Sep 2026 15:02:10 -0400 Subject: [PATCH 2/6] AS on AllenCahn --- toolbox/+otp/+allencahn/f_diffusion.m | 5 +++++ toolbox/+otp/+allencahn/f_reaction.m | 5 +++++ toolbox/+otp/+allencahn/jacobian_diffusion.m | 5 +++++ toolbox/+otp/+allencahn/jacobian_reaction.m | 5 +++++ 4 files changed, 20 insertions(+) create mode 100644 toolbox/+otp/+allencahn/f_diffusion.m create mode 100644 toolbox/+otp/+allencahn/f_reaction.m create mode 100644 toolbox/+otp/+allencahn/jacobian_diffusion.m create mode 100644 toolbox/+otp/+allencahn/jacobian_reaction.m diff --git a/toolbox/+otp/+allencahn/f_diffusion.m b/toolbox/+otp/+allencahn/f_diffusion.m new file mode 100644 index 00000000..7fe2f16f --- /dev/null +++ b/toolbox/+otp/+allencahn/f_diffusion.m @@ -0,0 +1,5 @@ +function du = f_diffusion(~, u, L, alpha, ~, ~) + +du = alpha*L*u; + +end diff --git a/toolbox/+otp/+allencahn/f_reaction.m b/toolbox/+otp/+allencahn/f_reaction.m new file mode 100644 index 00000000..f9778662 --- /dev/null +++ b/toolbox/+otp/+allencahn/f_reaction.m @@ -0,0 +1,5 @@ +function du = f_reaction(t, u, ~, ~, beta, forcing) + +du = beta * (u - u.^3) + forcing(t); + +end diff --git a/toolbox/+otp/+allencahn/jacobian_diffusion.m b/toolbox/+otp/+allencahn/jacobian_diffusion.m new file mode 100644 index 00000000..de0deabd --- /dev/null +++ b/toolbox/+otp/+allencahn/jacobian_diffusion.m @@ -0,0 +1,5 @@ +function j = jacobian_diffusion(~, ~, L, alpha, ~, ~) + +j = alpha*L; + +end diff --git a/toolbox/+otp/+allencahn/jacobian_reaction.m b/toolbox/+otp/+allencahn/jacobian_reaction.m new file mode 100644 index 00000000..22c54077 --- /dev/null +++ b/toolbox/+otp/+allencahn/jacobian_reaction.m @@ -0,0 +1,5 @@ +function j = jacobian_reaction(~, u, L, ~, beta, ~) + +j = spdiags(beta * (1 - 3*u.^2), 0, size(L, 1), size(L, 2)); + +end From ff2533ce7e6780a365bc3f0188c175b1a1668545 Mon Sep 17 00:00:00 2001 From: Adrian Sandu Date: Tue, 1 Sep 2026 15:38:12 -0400 Subject: [PATCH 3/6] Linear-nonlinear splitting of Allen-Cahn --- toolbox/+otp/+allencahn/f_linear.m | 8 ++++++++ toolbox/+otp/+allencahn/f_nonlinear.m | 8 ++++++++ 2 files changed, 16 insertions(+) create mode 100644 toolbox/+otp/+allencahn/f_linear.m create mode 100644 toolbox/+otp/+allencahn/f_nonlinear.m diff --git a/toolbox/+otp/+allencahn/f_linear.m b/toolbox/+otp/+allencahn/f_linear.m new file mode 100644 index 00000000..52498144 --- /dev/null +++ b/toolbox/+otp/+allencahn/f_linear.m @@ -0,0 +1,8 @@ +% Linear-nonlinear splitting: f = f_linear + f_nonlinear +% f_linear(u) = Jac*u, f_nonlinear(u) = f(u)-Jac*u + +function du = f_linear(~, u, L, alpha, beta, ~) + +du = alpha*L*u + beta * (u - 3*u.^3); + +end diff --git a/toolbox/+otp/+allencahn/f_nonlinear.m b/toolbox/+otp/+allencahn/f_nonlinear.m new file mode 100644 index 00000000..0df35223 --- /dev/null +++ b/toolbox/+otp/+allencahn/f_nonlinear.m @@ -0,0 +1,8 @@ +% Linear-nonlinear splitting: f = f_linear + f_nonlinear +% f_linear(u) = Jac*u, f_nonlinear(u) = f(u)-Jac*u + +function du = f_nonlinear(t, u, ~, ~, beta, forcing) + +du = beta * (u - u.^3) - beta * (u - 3*u.^3) + forcing(t); + +end From 7f5567e5694dd8e699d22fb749f20e642b1ace80 Mon Sep 17 00:00:00 2001 From: Adrian Sandu Date: Tue, 1 Sep 2026 15:44:15 -0400 Subject: [PATCH 4/6] Split Allen-Cahn into diffusion and reaction parts --- toolbox/+otp/+allencahn/f_diffusion.m | 4 ++++ toolbox/+otp/+allencahn/f_reaction.m | 4 ++++ toolbox/+otp/+allencahn/jacobian_diffusion.m | 4 ++++ toolbox/+otp/+allencahn/jacobian_reaction.m | 4 ++++ 4 files changed, 16 insertions(+) diff --git a/toolbox/+otp/+allencahn/f_diffusion.m b/toolbox/+otp/+allencahn/f_diffusion.m index 7fe2f16f..bbbb7778 100644 --- a/toolbox/+otp/+allencahn/f_diffusion.m +++ b/toolbox/+otp/+allencahn/f_diffusion.m @@ -1,3 +1,7 @@ +% Process splitting: +% f = f_diffusion + f_reaction +% Jacobian = Jacobian_diffusion + Jacobian_reaction +% function du = f_diffusion(~, u, L, alpha, ~, ~) du = alpha*L*u; diff --git a/toolbox/+otp/+allencahn/f_reaction.m b/toolbox/+otp/+allencahn/f_reaction.m index f9778662..774d5bbd 100644 --- a/toolbox/+otp/+allencahn/f_reaction.m +++ b/toolbox/+otp/+allencahn/f_reaction.m @@ -1,3 +1,7 @@ +% Process splitting: +% f = f_diffusion + f_reaction +% Jacobian = Jacobian_diffusion + Jacobian_reaction +% function du = f_reaction(t, u, ~, ~, beta, forcing) du = beta * (u - u.^3) + forcing(t); diff --git a/toolbox/+otp/+allencahn/jacobian_diffusion.m b/toolbox/+otp/+allencahn/jacobian_diffusion.m index de0deabd..c6e84cb7 100644 --- a/toolbox/+otp/+allencahn/jacobian_diffusion.m +++ b/toolbox/+otp/+allencahn/jacobian_diffusion.m @@ -1,3 +1,7 @@ +% Process splitting: +% f = f_diffusion + f_reaction +% Jacobian = Jacobian_diffusion + Jacobian_reaction +% function j = jacobian_diffusion(~, ~, L, alpha, ~, ~) j = alpha*L; diff --git a/toolbox/+otp/+allencahn/jacobian_reaction.m b/toolbox/+otp/+allencahn/jacobian_reaction.m index 22c54077..206d3b96 100644 --- a/toolbox/+otp/+allencahn/jacobian_reaction.m +++ b/toolbox/+otp/+allencahn/jacobian_reaction.m @@ -1,3 +1,7 @@ +% Process splitting: +% f = f_diffusion + f_reaction +% Jacobian = Jacobian_diffusion + Jacobian_reaction +% function j = jacobian_reaction(~, u, L, ~, beta, ~) j = spdiags(beta * (1 - 3*u.^2), 0, size(L, 1), size(L, 2)); From bc1e13df0774df52df945ecd7d438e4abb49c3e5 Mon Sep 17 00:00:00 2001 From: Adrian Sandu Date: Wed, 9 Sep 2026 11:26:01 -0400 Subject: [PATCH 5/6] Fixed Allen-Cahn PR feedback --- .../+otp/+allencahn/{f_diffusion.m => fDiffusion.m} | 2 +- toolbox/+otp/+allencahn/fLinear.m | 11 +++++++++++ toolbox/+otp/+allencahn/fNonlinear.m | 10 ++++++++++ toolbox/+otp/+allencahn/{f_reaction.m => fReaction.m} | 2 +- toolbox/+otp/+allencahn/f_linear.m | 8 -------- toolbox/+otp/+allencahn/f_nonlinear.m | 8 -------- .../{jacobian_diffusion.m => jacobianDiffusion.m} | 2 +- .../{jacobian_reaction.m => jacobianReaction.m} | 2 +- 8 files changed, 25 insertions(+), 20 deletions(-) rename toolbox/+otp/+allencahn/{f_diffusion.m => fDiffusion.m} (73%) create mode 100644 toolbox/+otp/+allencahn/fLinear.m create mode 100644 toolbox/+otp/+allencahn/fNonlinear.m rename toolbox/+otp/+allencahn/{f_reaction.m => fReaction.m} (74%) delete mode 100644 toolbox/+otp/+allencahn/f_linear.m delete mode 100644 toolbox/+otp/+allencahn/f_nonlinear.m rename toolbox/+otp/+allencahn/{jacobian_diffusion.m => jacobianDiffusion.m} (70%) rename toolbox/+otp/+allencahn/{jacobian_reaction.m => jacobianReaction.m} (77%) diff --git a/toolbox/+otp/+allencahn/f_diffusion.m b/toolbox/+otp/+allencahn/fDiffusion.m similarity index 73% rename from toolbox/+otp/+allencahn/f_diffusion.m rename to toolbox/+otp/+allencahn/fDiffusion.m index bbbb7778..edce9c95 100644 --- a/toolbox/+otp/+allencahn/f_diffusion.m +++ b/toolbox/+otp/+allencahn/fDiffusion.m @@ -2,7 +2,7 @@ % f = f_diffusion + f_reaction % Jacobian = Jacobian_diffusion + Jacobian_reaction % -function du = f_diffusion(~, u, L, alpha, ~, ~) +function du = fDiffusion(~, u, L, alpha, ~, ~) du = alpha*L*u; diff --git a/toolbox/+otp/+allencahn/fLinear.m b/toolbox/+otp/+allencahn/fLinear.m new file mode 100644 index 00000000..92b6df4d --- /dev/null +++ b/toolbox/+otp/+allencahn/fLinear.m @@ -0,0 +1,11 @@ +% Linear-nonlinear splitting: f = f_linear + f_nonlinear +% f_linear(u) = Jac(uL)*u, f_nonlinear(u) = f(u)-Jac(uL)*u +% uL = linearization point, typically the solution at the beginning of the +% time step + + +function du = fLinear(~, u, L, alpha, beta, ~, uL) + +du = alpha*L*u + beta * (u - 3*uL.^2.*u); + +end diff --git a/toolbox/+otp/+allencahn/fNonlinear.m b/toolbox/+otp/+allencahn/fNonlinear.m new file mode 100644 index 00000000..80a8b93d --- /dev/null +++ b/toolbox/+otp/+allencahn/fNonlinear.m @@ -0,0 +1,10 @@ +% Linear-nonlinear splitting: f = f_linear + f_nonlinear +% f_linear(u) = Jac*u, f_nonlinear(u) = f(u)-Jac*u +% uL = linearization point, typically the solution at the beginning of the +% time step + +function du = fNonlinear(t, u, ~, ~, beta, forcing, uL) + +du = beta * ( - u.^3 + 3*uL.^2.*u ) + forcing(t); + +end diff --git a/toolbox/+otp/+allencahn/f_reaction.m b/toolbox/+otp/+allencahn/fReaction.m similarity index 74% rename from toolbox/+otp/+allencahn/f_reaction.m rename to toolbox/+otp/+allencahn/fReaction.m index 774d5bbd..45a82ff4 100644 --- a/toolbox/+otp/+allencahn/f_reaction.m +++ b/toolbox/+otp/+allencahn/fReaction.m @@ -2,7 +2,7 @@ % f = f_diffusion + f_reaction % Jacobian = Jacobian_diffusion + Jacobian_reaction % -function du = f_reaction(t, u, ~, ~, beta, forcing) +function du = fReaction(t, u, ~, ~, beta, forcing) du = beta * (u - u.^3) + forcing(t); diff --git a/toolbox/+otp/+allencahn/f_linear.m b/toolbox/+otp/+allencahn/f_linear.m deleted file mode 100644 index 52498144..00000000 --- a/toolbox/+otp/+allencahn/f_linear.m +++ /dev/null @@ -1,8 +0,0 @@ -% Linear-nonlinear splitting: f = f_linear + f_nonlinear -% f_linear(u) = Jac*u, f_nonlinear(u) = f(u)-Jac*u - -function du = f_linear(~, u, L, alpha, beta, ~) - -du = alpha*L*u + beta * (u - 3*u.^3); - -end diff --git a/toolbox/+otp/+allencahn/f_nonlinear.m b/toolbox/+otp/+allencahn/f_nonlinear.m deleted file mode 100644 index 0df35223..00000000 --- a/toolbox/+otp/+allencahn/f_nonlinear.m +++ /dev/null @@ -1,8 +0,0 @@ -% Linear-nonlinear splitting: f = f_linear + f_nonlinear -% f_linear(u) = Jac*u, f_nonlinear(u) = f(u)-Jac*u - -function du = f_nonlinear(t, u, ~, ~, beta, forcing) - -du = beta * (u - u.^3) - beta * (u - 3*u.^3) + forcing(t); - -end diff --git a/toolbox/+otp/+allencahn/jacobian_diffusion.m b/toolbox/+otp/+allencahn/jacobianDiffusion.m similarity index 70% rename from toolbox/+otp/+allencahn/jacobian_diffusion.m rename to toolbox/+otp/+allencahn/jacobianDiffusion.m index c6e84cb7..87de41ef 100644 --- a/toolbox/+otp/+allencahn/jacobian_diffusion.m +++ b/toolbox/+otp/+allencahn/jacobianDiffusion.m @@ -2,7 +2,7 @@ % f = f_diffusion + f_reaction % Jacobian = Jacobian_diffusion + Jacobian_reaction % -function j = jacobian_diffusion(~, ~, L, alpha, ~, ~) +function j = jacobianDiffusion(~, ~, L, alpha, ~, ~) j = alpha*L; diff --git a/toolbox/+otp/+allencahn/jacobian_reaction.m b/toolbox/+otp/+allencahn/jacobianReaction.m similarity index 77% rename from toolbox/+otp/+allencahn/jacobian_reaction.m rename to toolbox/+otp/+allencahn/jacobianReaction.m index 206d3b96..be5c1686 100644 --- a/toolbox/+otp/+allencahn/jacobian_reaction.m +++ b/toolbox/+otp/+allencahn/jacobianReaction.m @@ -2,7 +2,7 @@ % f = f_diffusion + f_reaction % Jacobian = Jacobian_diffusion + Jacobian_reaction % -function j = jacobian_reaction(~, u, L, ~, beta, ~) +function j = jacobianReaction(~, u, L, ~, beta, ~) j = spdiags(beta * (1 - 3*u.^2), 0, size(L, 1), size(L, 2)); From dfeb7bde99395bed4eb4d0c3f0b92c9ab99bd4ed Mon Sep 17 00:00:00 2001 From: Andrey A Popov Date: Wed, 9 Sep 2026 07:48:00 -1000 Subject: [PATCH 6/6] Added the alternative RHSs to problem and tests --- tests/+problemtests/validateallencahn.m | 72 +++++++++++++++++++ tests/runalltests.m | 1 + toolbox/+otp/+allencahn/+presets/Canonical.m | 7 +- toolbox/+otp/+allencahn/AllenCahnParameters.m | 3 + toolbox/+otp/+allencahn/AllenCahnProblem.m | 42 ++++++++++- toolbox/+otp/+allencahn/fLinear.m | 2 +- toolbox/+otp/+allencahn/fNonlinear.m | 2 +- toolbox/+otp/+allencahn/fReaction.m | 2 +- toolbox/+otp/+allencahn/jacobianReaction.m | 2 +- 9 files changed, 125 insertions(+), 8 deletions(-) create mode 100644 tests/+problemtests/validateallencahn.m diff --git a/tests/+problemtests/validateallencahn.m b/tests/+problemtests/validateallencahn.m new file mode 100644 index 00000000..eeed6c29 --- /dev/null +++ b/tests/+problemtests/validateallencahn.m @@ -0,0 +1,72 @@ +function validateqg + +fprintf(' Testing Allen-Cahn Equations\n'); + +forcings = {8, @(t, ~, ~) cos(t)}; + +for fi = 1:numel(forcings) + forcing = forcings{fi}; + + model = otp.allencahn.presets.Canonical('Size', 16, 'Forcing', forcing); + model.Parameters.LinearizationPoint = model.Y0; + + %% Linear + [~] = otp.utils.Solver.Nonstiff(model.RHSLinear.F, model.TimeSpan, model.Y0); + fprintf(' Alternate RHSLinear RHS passed\n'); + + %% Non-Linear + [~] = otp.utils.Solver.Nonstiff(model.RHSLinear.F, model.TimeSpan, model.Y0); + fprintf(' Alternate RHSNonlinear RHS passed\n'); + + %% Reaction + [~] = otp.utils.Solver.Nonstiff(model.RHSReaction.F, model.TimeSpan, model.Y0); + fprintf(' Alternate RHSReaction RHS passed\n'); + + tc = model.TimeSpan(1); + y0 = model.Y0; + + f = @(t, y) model.RHSReaction.F(t, y); + japprox = model.RHSReaction.Jacobian(tc, y0); + jtrue = otp.utils.derivatives.jacobian(f, tc, y0); + + normj = norm(jtrue); + + if normj < eps + err = norm(jtrue - japprox); + else + err = norm(jtrue - japprox)/normj; + end + + tol = 1e-6; + assert(err < tol); + + fprintf(' Reaction Jacobian passed\n'); + + %% Diffusion + [~] = otp.utils.Solver.Nonstiff(model.RHSDiffusion.F, model.TimeSpan, model.Y0); + fprintf(' Alternate RHSDiffusion RHS passed\n'); + + tc = model.TimeSpan(1); + y0 = model.Y0; + + f = @(t, y) model.RHSDiffusion.F(t, y); + japprox = model.RHSDiffusion.Jacobian(tc, y0); + jtrue = otp.utils.derivatives.jacobian(f, tc, y0); + + normj = norm(jtrue); + + if normj < eps + err = norm(jtrue - japprox); + else + err = norm(jtrue - japprox)/normj; + end + + tol = 1e-6; + assert(err < tol); + + fprintf(' Diffusion Jacobian passed\n'); + +end + +end + diff --git a/tests/runalltests.m b/tests/runalltests.m index b309e0e3..b7f4a5f4 100644 --- a/tests/runalltests.m +++ b/tests/runalltests.m @@ -24,5 +24,6 @@ function runalltests(varargin) %% Problem specific tests problemtests.validateqg; +problemtests.validateallencahn; end diff --git a/toolbox/+otp/+allencahn/+presets/Canonical.m b/toolbox/+otp/+allencahn/+presets/Canonical.m index 8592f0ab..8550c0aa 100644 --- a/toolbox/+otp/+allencahn/+presets/Canonical.m +++ b/toolbox/+otp/+allencahn/+presets/Canonical.m @@ -3,7 +3,12 @@ methods function obj = Canonical(varargin) - params = otp.allencahn.AllenCahnParameters('Size', 64, 'Alpha', 0.1, 'Beta', 1, 'Forcing', 0, varargin{:}); + params = otp.allencahn.AllenCahnParameters('Size', 64, ... + 'Alpha', 0.1, ... + 'Beta', 1, ... + 'Forcing', 0, ... + 'LinearizationPoint', 0, ... + varargin{:}); x = linspace(0, 1, params.Size); [xs, ys] = meshgrid(x, x); diff --git a/toolbox/+otp/+allencahn/AllenCahnParameters.m b/toolbox/+otp/+allencahn/AllenCahnParameters.m index a8135659..421f345a 100644 --- a/toolbox/+otp/+allencahn/AllenCahnParameters.m +++ b/toolbox/+otp/+allencahn/AllenCahnParameters.m @@ -13,6 +13,9 @@ %Forcing is a forcing function or constant Forcing %MATLAB ONLY: {mustBeA(Forcing, {'numeric', 'function_handle'})} + + %The linearization point for the linear-non-linear splitting + LinearizationPoint %MATLAB ONLY: {otp.utils.validation.mustBeNumerical} end methods diff --git a/toolbox/+otp/+allencahn/AllenCahnProblem.m b/toolbox/+otp/+allencahn/AllenCahnProblem.m index 31bf036a..ccebe77f 100644 --- a/toolbox/+otp/+allencahn/AllenCahnProblem.m +++ b/toolbox/+otp/+allencahn/AllenCahnProblem.m @@ -1,5 +1,12 @@ classdef AllenCahnProblem < otp.Problem %ALLENCAHNPROBLEM + + properties (SetAccess = private) + RHSLinear + RHSNonlinear + RHSReaction + RHSDiffusion + end methods function obj = AllenCahnProblem(timeSpan, y0, parameters) @@ -9,10 +16,11 @@ methods (Access = protected) function onSettingsChanged(obj) - n = obj.Parameters.Size; - alpha = obj.Parameters.Alpha; - beta = obj.Parameters.Beta; + n = obj.Parameters.Size; + alpha = obj.Parameters.Alpha; + beta = obj.Parameters.Beta; forcing = obj.Parameters.Forcing; + uL = obj.Parameters.LinearizationPoint; if obj.NumVars ~= n^2 warning('OTP:inconsistentNumVars', ... @@ -25,16 +33,44 @@ function onSettingsChanged(obj) if ~isa(forcing, 'function_handle') f = @(t, y) otp.allencahn.fConstForce(t, y, L, alpha, beta, forcing); + + ft = @(~) forcing; + + flinear = @(t, y) otp.allencahn.fLinear(t, y, L, alpha, beta, ft, uL); + fnonlinear = @(t, y) otp.allencahn.fNonlinear(t, y, L, alpha, beta, ft, uL); + + freaction = @(t, y) otp.allencahn.fReaction(t, y, L, alpha, beta, ft); + fdiffusion = @(t, y) otp.allencahn.fDiffusion(t, y, L, alpha, beta, ft); + jreaction = @(t, y) otp.allencahn.jacobianReaction(t, y, L, alpha, beta, ft); + jdiffusion = @(t, y) otp.allencahn.jacobianDiffusion(t, y, L, alpha, beta, ft); else [x, y] = meshgrid(linspace(0, 1, n), linspace(0, 1, n)); x = x(:); y = y(:); ft = @(t) forcing(t, x, y); f = @(t, y) otp.allencahn.f(t, y, L, alpha, beta, ft); + + flinear = @(t, y) otp.allencahn.fLinear(t, y, L, alpha, beta, ft, uL); + fnonlinear = @(t, y) otp.allencahn.fNonLinear(t, y, L, alpha, beta, ft, uL); + + freaction = @(t, y) otp.allencahn.fReaction(t, y, L, alpha, beta, ft); + fdiffusion = @(t, y) otp.allencahn.fDiffusion(t, y, L, alpha, beta, ft); + jreaction = @(t, y) otp.allencahn.jacobianReaction(t, y, L, alpha, beta, ft); + jdiffusion = @(t, y) otp.allencahn.jacobianDiffusion(t, y, L, alpha, beta, ft); end obj.RHS = otp.RHS(f, ... 'Jacobian', @(t, u) otp.allencahn.jacobian(t, u, L, alpha, beta, forcing)); + + obj.RHSLinear = otp.RHS(flinear); + + obj.RHSNonlinear = otp.RHS(fnonlinear); + + obj.RHSReaction = otp.RHS(freaction, ... + 'Jacobian', jreaction); + + obj.RHSDiffusion = otp.RHS(fdiffusion, ... + 'Jacobian', jdiffusion); end end diff --git a/toolbox/+otp/+allencahn/fLinear.m b/toolbox/+otp/+allencahn/fLinear.m index 92b6df4d..326c9a89 100644 --- a/toolbox/+otp/+allencahn/fLinear.m +++ b/toolbox/+otp/+allencahn/fLinear.m @@ -6,6 +6,6 @@ function du = fLinear(~, u, L, alpha, beta, ~, uL) -du = alpha*L*u + beta * (u - 3*uL.^2.*u); +du = alpha*L*u + beta*(u - 3*(uL.^2).*u); end diff --git a/toolbox/+otp/+allencahn/fNonlinear.m b/toolbox/+otp/+allencahn/fNonlinear.m index 80a8b93d..ec5adbdd 100644 --- a/toolbox/+otp/+allencahn/fNonlinear.m +++ b/toolbox/+otp/+allencahn/fNonlinear.m @@ -5,6 +5,6 @@ function du = fNonlinear(t, u, ~, ~, beta, forcing, uL) -du = beta * ( - u.^3 + 3*uL.^2.*u ) + forcing(t); +du = beta*( - u.^3 + 3*(uL.^2).*u ) + forcing(t); end diff --git a/toolbox/+otp/+allencahn/fReaction.m b/toolbox/+otp/+allencahn/fReaction.m index 45a82ff4..bbd18fe2 100644 --- a/toolbox/+otp/+allencahn/fReaction.m +++ b/toolbox/+otp/+allencahn/fReaction.m @@ -4,6 +4,6 @@ % function du = fReaction(t, u, ~, ~, beta, forcing) -du = beta * (u - u.^3) + forcing(t); +du = beta*(u - u.^3) + forcing(t); end diff --git a/toolbox/+otp/+allencahn/jacobianReaction.m b/toolbox/+otp/+allencahn/jacobianReaction.m index be5c1686..3a54e6bd 100644 --- a/toolbox/+otp/+allencahn/jacobianReaction.m +++ b/toolbox/+otp/+allencahn/jacobianReaction.m @@ -4,6 +4,6 @@ % function j = jacobianReaction(~, u, L, ~, beta, ~) -j = spdiags(beta * (1 - 3*u.^2), 0, size(L, 1), size(L, 2)); +j = spdiags(beta*(1 - 3*u.^2), 0, size(L, 1), size(L, 2)); end