From 8f4f49d650e420d5620a1550a4617bd564507e16 Mon Sep 17 00:00:00 2001
From: Lars Hubatsch <hubatsch@pks.mpg.de>
Date: Mon, 25 Nov 2019 16:41:39 +0100
Subject: [PATCH] Works nicely. Still missing proper boundary conditions that
 take into account fluxes.

---
 ternary_frap.m | 92 ++++++++------------------------------------------
 1 file changed, 15 insertions(+), 77 deletions(-)

diff --git a/ternary_frap.m b/ternary_frap.m
index 76a120e..66c8867 100644
--- a/ternary_frap.m
+++ b/ternary_frap.m
@@ -4,74 +4,35 @@
 % conditions are introduced. Integration of model via pdepe.
 
 %% Solve pde
-% x = [linspace(0, 40, 100), linspace(40.4, 60, 50), linspace(60.4, 100, 100)];
-x = linspace(40, 60, 300);
-% x = linspace(0.5, 100.5, 1001);
-
-t = linspace(0, 500000, 50);
-% y = linspace(0.3000001, 1.2999999, 500);
-% x = 0.5*atanh(2*y-1.6)+50;
-a = -50;
-b = 0.5;
-% x_t = linspace(0.5, 101.5, 1011);
-% global phi_tot_g
-% phi_tot_g = phi_tot(x_t, b, a);
-% global der_phi 
-% der_phi = gradient_analytical(x_t, a, b);
-% global lapl_phi
-% lapl_phi = laplacian_analytical(x_t, a, b);
-
-% opt = odeset('RelTol',1e-14, 'AbsTol', 1e-16,'MaxStep',1e-2); 
-% sol = pdepe(0,@flory_pde, @flory_ic, @flory_bc,x,t, opt);
+x = linspace(49, 80, 700);
+t = linspace(0, 6, 1000);
 sol = pdepe(0, @flory_hugg_a, @flory_ic, @flory_bc, x, t);
-
 %% Plotting
 figure(1); hold on;
-for i = 1:50 
-    cla; plot(x, phi_tot(x, -50, 1)); plot(x, sol(i, :)); pause(0.1);
+for i = 1:500 
+    cla; xlim([49, 52]); ylim([0, 1.5]);
+    plot(x, phi_tot(x, -50, 0.25)); plot(x, sol(i, :)); pause(0.01);
 end
 
 %% Plot and check derivatives of pt
 figure; hold on;
-% x = linspace(40, 60, 100);
-plot(x, phi_tot(x, -50, 0.5));% plot(x, gra_pt(x, -50, 0.5, 0.001)); plot(x, lap_pt(x, -50, 0.5, 0.001));
-% plot(x, gralap_pt(x, -50, 0.5, 0.001)); plot(x, laplap_pt(x, -50, 0.5, 0.001));
-plot(x, gradient_analytical(x, -50, 0.5));
-plot(x, laplacian_analytical(x, -50, 0.5));
-%%
-phi_tot(x, -50, 1)
+x = linspace(40, 60, 100);
+plot(x, phi_tot(x, -50, 0.25));
+plot(x, gradient_analytical(x, -50, 0.25));
+
 %% Function definitions for pde solver
 function [c, f ,s] = flory_hugg_a(x, t, u, dudx)  
 % Solve with full ternary model. Analytical derivatives.
 % pt ... phi_tot
 % gra_a ... analytical gradient of phi_tot
-% lap_a ... analytical laplacian of phi_tot
 
-pt = @(x) phi_tot(x, -50, 1);
-gra_a = @(x) gradient_analytical(x, -50, 1);
-lap_a = @(x) laplacian_analytical(x, -50, 1);
-% gra_a = @(x) gra_pt(x, -50, 0.5, 0.0001);
-% lap_a = @(x) lap_pt(x, -50, 0.5, 0.0001);
-c = 1/(1.3-pt(x));
-f = dudx;
-s = u/(1.3-pt(x))*(lap_a(x)+(gra_a(x)/pt(x))^2-lap_a(x)/pt(x))...
-    -dudx/(1.3-pt(x))/pt(x)*gra_a(x);
+pt = phi_tot(x, -50, 0.25);
+gra_a = gradient_analytical(x, -50, 0.25);
+c = 1/100;
+f = (1.3-pt)/pt*(pt*dudx-u*gra_a);
+s = 0;
 end
 
-% function [c, f ,s] = flory_hugg_a(x, t, u, dudx)  
-% % Solve with full ternary model. 
-% global phi_tot_g
-% global der_phi 
-% global lapl_phi
-% 
-% i = round(10*x);
-% % disp(i)
-% c = 1/(1-phi_tot_g(i));
-% f = dudx;
-% s = u/(1-phi_tot_g(i))*(lapl_phi(i)+(der_phi(i)/phi_tot_g(i))^2-lapl_phi(i)/phi_tot_g(i))...
-%     -dudx/(1-phi_tot_g(i))/phi_tot_g(i)*der_phi(i);
-% end
-
 function u0 = flory_ic(x)
     if x<50
         u0 = 0.0;
@@ -79,6 +40,7 @@ function u0 = flory_ic(x)
         u0 = 0.3;
     end
 %     u0 = 0.3;
+%  u0 = phi_tot(x, -50, 1);
 end
 
 function [pl,ql,pr,qr] = flory_bc(xl,ul,xr,ur,t)
@@ -92,30 +54,6 @@ function p = phi_tot(x, a, b)
     p = (tanh(-(x+a)/b)+1)/2+0.3;
 end
 
-function gpt = gra_pt(x, a, b, delta)
-    gpt = (phi_tot(x+delta, a, b)-...
-           phi_tot(x-delta, a, b))/(2*delta);
-end
-
-function lpt = lap_pt(x, a, b, delta)
-    lpt = (gra_pt(x+delta, a, b, delta)-...
-           gra_pt(x-delta, a, b, delta))/(2*delta);
-end
-% 
-% function glpt = gralap_pt(x, a, b, delta)
-%     glpt = (lap_pt(x+delta, a, b, delta)-...
-%             lap_pt(x-delta, a, b, delta))/(2*delta);
-% end
-% 
-% function llpt = laplap_pt(x, a, b, delta)
-%     llpt = (gralap_pt(x+delta, a, b, delta)-...
-%             gralap_pt(x-delta, a, b, delta))/(2*delta);
-% end
-
 function grad = gradient_analytical(x, a, b)
     grad = -(1-tanh(-(x+a)/b).^2)*1/b*0.5;
-end
-
-function lap = laplacian_analytical(x, a, b)
-    lap = -2*tanh(-(x+a)/b).*(1-tanh(-(x+a)/b).^2)*1/b^2*0.5;
 end
\ No newline at end of file
-- 
GitLab