From 66cb5bb4908cc54192aadaa901ac9092861c60f7 Mon Sep 17 00:00:00 2001 From: Adrian Sandu Date: Tue, 1 Sep 2026 14:56:21 -0400 Subject: [PATCH 1/4] 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/4] 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/4] 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/4] 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));