diff --git a/.gitignore b/.gitignore
index c5f2c33740a1f552d746ddc3d50e7608e54fa272..d318f8caa52a07cd619561d1a79be474c5d9f2e1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
 .ipynb_checkpoints/
+*jitfailure*
 .DS_Store
 __pycache__/
 *~
diff --git a/@Ternary_model/Ternary_model.m b/@Ternary_model/Ternary_model.m
index aa39745ecf0c188ebae5a6ae5f10b0da8ead9e3d..0d53ba46c6213bb0a1b3531b34d4af39158f35cf 100644
--- a/@Ternary_model/Ternary_model.m
+++ b/@Ternary_model/Ternary_model.m
@@ -5,7 +5,7 @@ classdef Ternary_model < handle
     % conditions are introduced. Integration of model via pdepe.
 
     properties
-        pa = '~/Desktop/DropletFRAP/Latex/Figures/FigModel/';
+        pa = '~/Desktop/DropletFRAP/Latex/Figures/Fig2/';
         geometry = 2; % 2 ... Radial, 1 ... Cylindrical, 0 ... Slab
         ic %'FRAP', 'Gauss', 'Uniform'
         mode % 'Constituent': LLPS molecules move. 'Client': client moves
@@ -52,7 +52,7 @@ classdef Ternary_model < handle
             T.calc_real_params;
         end
         create_mesh(T)
-        plot_sim(T, mode, nth, color)
+        plot_sim(T, mode, nth, color, N, i)
         solve_tern_frap(T)
         calc_time_scales(T);
         calc_real_params(T);
diff --git a/@Ternary_model/solve_tern_frap.m b/@Ternary_model/solve_tern_frap.m
index 7d519c8dbb086f45985e72ebb5c38ea2a72a3618..837fdbcc4c57f31a5eb233ce1dbe59d3129da102 100644
--- a/@Ternary_model/solve_tern_frap.m
+++ b/@Ternary_model/solve_tern_frap.m
@@ -10,25 +10,7 @@ T.sol = pdepe(T.geometry, fh_pde, fh_ic, fh_bc, T.x, T.t);
 end
 
 %% Function definitions for pde solver
-function [c, f ,s] = flory_hugg_pde(x, t, u, dudx, a, b, e, u0,...
-                                    e_g0, u_g0, v, mode)
-% Solve with full ternary model. Analytical derivatives.
-% pt ... phi_tot
-% gra_a ... analytical gradient of phi_tot
 
-pt = Ternary_model.phi_tot(x, a, b, e, u0, v*t);
-gra_a = Ternary_model.gradient_analytical(x, a, b, e, v*t);
-s = 0;
-c = 1;
-if strcmp(mode, 'Constituent')
-    g0 = Ternary_model.gamma0(x, a+t*v, b, e_g0, u_g0, v*t);
-    f = g0*(1-pt)/pt*(pt*dudx-u*gra_a);
-elseif strcmp(mode, 'Client')
-    g0 = 0.5;
-    chi_phi = -4.530864768482371;
-    f = g0*(dudx+chi_phi*u*gra_a);
-end
-end
 
 function u = flory_ic(x, a, b, u0, e, ic, x0)
 if strcmp(ic, 'FRAP')
diff --git a/FloryHugg_DiffUnbleached.ipynb b/FloryHugg_DiffUnbleached.ipynb
index 6aa45f9771ab894030b8bbfd3941e2c8dfa77a08..c87251276bca4db12ab6ed1f416f557d9c8822bb 100644
--- a/FloryHugg_DiffUnbleached.ipynb
+++ b/FloryHugg_DiffUnbleached.ipynb
@@ -13,49 +13,306 @@
     "import time\n",
     "df.set_log_level(40)\n",
     "\n",
-    "domain = ms.Sphere(df.Point(0, 0, 0), 1.0)\n",
-    "# mesh = ms.generate_mesh(domain, 35)\n",
-    "mesh = df.UnitSquareMesh(50,50)\n",
-    "dt = 0.01\n",
+    "# domain = ms.Sphere(df.Point(0, 0, 0), 1.0)\n",
+    "# mesh = ms.generate_mesh(domain, 50)\n",
+    "mesh = df.UnitIntervalMesh(10000)\n",
+    "F = df.FunctionSpace(mesh, 'CG', 1)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def calc_sim(c0, c_tot, Ga0, dt, n_t, sym):\n",
+    "    tc = df.TestFunction(F)\n",
+    "    c = df.Function(F)\n",
+    "    X = df.SpatialCoordinate(mesh)\n",
+    "#     X.interpolate(df.Expression('x[0]', degree=1))\n",
+    "    if sym == 0:\n",
+    "    # Weak form 1D:\n",
+    "#         form = (df.inner((c-c0)/dt, tc) +\n",
+    "#              df.inner(df.grad(c), df.grad((1-c_tot)*Ga0*tc)) -\n",
+    "#              df.inner(df.grad(c_tot), df.grad((1-c_tot)*Ga0/c_tot*c*tc))-\n",
+    "#              tc*df.inner(df.grad(c), df.grad((1-c_tot)*Ga0))+\n",
+    "#              tc*df.inner(df.grad(c_tot), df.grad((1-c_tot)/c_tot*c*Ga0))) * df.dx\n",
+    "#     # Weak form 1D short:\n",
+    "        form = ((c-c0)/dt*tc + (1-c_tot)*Ga0*\n",
+    "                df.inner((df.grad(c)-c/c_tot*df.grad(c_tot)),\n",
+    "                          df.grad(tc))) * df.dx\n",
+    "    elif sym == 2:\n",
+    "    # Weak form radial symmetry:\n",
+    "#         form = (df.inner((c-c0)/dt, tc*X[0]*X[0]) +\n",
+    "#              df.inner(df.grad(c), df.grad((1-c_tot)*Ga0*tc*X[0]*X[0])) -\n",
+    "#              df.inner(df.grad(c_tot), df.grad((1-c_tot)*Ga0/c_tot*c*tc*X[0]*X[0]))-\n",
+    "#              tc*df.inner(df.grad(c), df.grad((1-c_tot)*Ga0*X[0]*X[0]))+\n",
+    "#              tc*df.inner(df.grad(c_tot), df.grad((1-c_tot)/c_tot*c*Ga0*X[0]*X[0]))-\n",
+    "#              (1-c_tot)*Ga0*2*X[0]*c.dx(0)*tc+\n",
+    "#              (1-c_tot)*Ga0/c_tot*c*2*X[0]*c_tot.dx(0)*tc) * df.dx\n",
+    "#     # Weak form radial symmetry:\n",
+    "#         form = ((c-c0)/dt*tc*X[0]**2 +\n",
+    "#                 (1-c_tot)*Ga0*(c.dx(0)-c/c_tot*c_tot.dx(0))*\n",
+    "#                          tc.dx(0)*X[0]**2) * df.dx\n",
+    "        form = ((c-c0)/dt*tc + (1-c_tot)*Ga0*\n",
+    "                df.inner((df.grad(c)-c/c_tot*df.grad(c_tot)),\n",
+    "                          df.grad(tc)))*X[0]*X[0]*df.dx\n",
+    "    t = 0\n",
+    "    # Solve in time\n",
+    "    ti = time.time()\n",
+    "    for i in range(n_t):\n",
+    "#         print(np.sum([x*x*c0([x]) for x in np.linspace(0, 1, 1000)]))\n",
+    "        df.solve(form == 0, c)\n",
+    "        df.assign(c0, c)\n",
+    "        t += dt\n",
+    "    print(time.time() - ti)\n",
+    "    return c0\n",
     "\n",
-    "F = df.FunctionSpace(mesh, 'CG', 1)\n",
+    "def p_tot(p_i, p_o):\n",
+    "    return str(p_i-p_o)+'*(-0.5*tanh(3500*(x[0]-0.1))+0.5)+'+str(p_o)\n",
+    "#     return '(x[0]<0.1 ? '+str(p_i)+':'+ str(p_o)+')'\n",
+    "\n",
+    "def create_func(f_space, expr_str, deg):\n",
+    "    f = df.Function(f_space)\n",
+    "    f.interpolate(df.Expression(expr_str, degree=deg))\n",
+    "    return f\n",
+    "\n",
+    "def eval_func(func, x):\n",
+    "    return np.array([func([x]) for x in x])\n",
+    "\n",
+    "def eval_P(func, x):\n",
+    "    return func(x[0])/func(x[1])\n",
+    "\n",
+    "def eval_D(func_ga, func_tot, x):\n",
+    "    return(func_ga(x)*(1-func_tot(x)))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "bp = 0.1 # Boundary position at IC\n",
+    "sym = 2 # Symmetry of the problem\n",
+    "dt = 0.0001\n",
+    "\n",
+    "c_tot_1 = create_func(F, p_tot(0.9, 0.9), 1)\n",
+    "c0_1 = create_func(F, 'x[0]<'+str(bp)+'? 0 :' + p_tot(0.9, 0.9), 1)\n",
+    "Ga0_1 = create_func(F, p_tot(1, 1/9), 1)\n",
+    "\n",
+    "c_tot_2 = create_func(F, p_tot(0.9, 0.45), 1)\n",
+    "c0_2 = create_func(F, 'x[0]<'+str(bp)+'? 0 :' +p_tot(0.9, 0.45), 1)\n",
+    "Ga0_2 = create_func(F,p_tot(1, 0.08), 1)\n",
+    "\n",
+    "c_tot_3 = create_func(F, p_tot(0.9, 0.3), 1)\n",
+    "c0_3 = create_func(F, 'x[0]<'+str(bp)+'? 0 :' +p_tot(0.9, 0.3), 1)\n",
+    "Ga0_3 = create_func(F,p_tot(1, 0.145), 1)\n",
+    "\n",
+    "c_tot_5 = create_func(F, p_tot(0.9, 0.18), 1)\n",
+    "c0_5 = create_func(F, 'x[0]<'+str(bp)+'? 0 :' +p_tot(0.9, 0.18), 1)\n",
+    "Ga0_5 = create_func(F,p_tot(1, 0.34), 1)\n",
+    "\n",
+    "c_tot_8 = create_func(F, p_tot(0.9, 0.1125), 1)\n",
+    "c0_8 = create_func(F, 'x[0]<'+str(bp)+'? 0 :' +p_tot(0.9, 0.1125), 1)\n",
+    "Ga0_8 = create_func(F,p_tot(1, 0.8), 1)\n",
+    "\n",
+    "c_tot_9 = create_func(F, p_tot(0.9, 0.1), 1)\n",
+    "c0_9 = create_func(F, 'x[0]<'+str(bp)+'? 0 :' +p_tot(0.9, 0.1), 1)\n",
+    "Ga0_9 = create_func(F,p_tot(1, 1), 1)\n",
+    "\n",
+    "c0_1 = calc_sim(c0_1, c_tot_1, Ga0_1, dt, 10, sym)\n",
+    "c0_2 = calc_sim(c0_2, c_tot_2, Ga0_2, dt, 10, sym)\n",
+    "c0_3 = calc_sim(c0_3, c_tot_3, Ga0_3, dt, 10, sym)\n",
+    "c0_5 = calc_sim(c0_5, c_tot_5, Ga0_5, dt, 10, sym)\n",
+    "c0_8 = calc_sim(c0_8, c_tot_8, Ga0_8, dt, 10, sym)\n",
+    "c0_9 = calc_sim(c0_9, c_tot_9, Ga0_9, dt, 10, sym)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "x = np.linspace(0, 1, 10000)\n",
+    "plt.plot(x, eval_func(c0_1, x))\n",
+    "plt.plot(x, eval_func(c0_2, x))\n",
+    "plt.plot(x, eval_func(c0_3, x))\n",
+    "plt.plot(x, eval_func(c0_5, x))\n",
+    "plt.plot(x, eval_func(c0_8, x))\n",
+    "plt.plot(x, eval_func(c0_9, x))\n",
+    "# plt.xlim(0.08, 0.125125)\n",
+    "# plt.ylim(0., 0.325125)\n",
+    "plt.show()\n",
+    "# Diffusion versus partitioning\n",
+    "list_Ga = [Ga0_1, Ga0_2, Ga0_3, Ga0_5, Ga0_8, Ga0_9]\n",
+    "list_Tot = [c_tot_1, c_tot_2, c_tot_3, c_tot_5, c_tot_8, c_tot_9]\n",
+    "D = [eval_D(Ga, Tot, 1) for (Ga, Tot) in zip (list_Ga, list_Tot)]\n",
+    "P = [eval_P(Tot, [0, 1]) for Tot in list_Tot]\n",
+    "plt.plot(D, P)\n",
+    "plt.ylim(0, 11); plt.xlim(0, 1)\n",
+    "plt.ylabel('P'); plt.xlabel('Diffusion coefficient')\n",
+    "plt.plot(np.linspace(0, 1, 100), 9.5*(np.linspace(0, 1, 100))**(1/2))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# Plot outside, check invariance\n",
+    "x = np.linspace(bp, 1, 1000)\n",
+    "y1 = eval_func(c0_1, x)\n",
+    "y2 = eval_func(c0_2, x)\n",
+    "y3 = eval_func(c0_3, x)\n",
+    "y9 = eval_func(c0_9, x)\n",
+    "plt.plot((x-bp), y1)\n",
+    "plt.plot((x-bp)/2, 2*y2)\n",
+    "plt.plot((x-bp)/3, 3*y3)\n",
+    "plt.plot((x-bp)/9, 9*y9)\n",
+    "plt.xlim(0.0, 0.02)\n",
+    "plt.ylim(0.2, 1)\n",
+    "plt.show()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# Plot inside, check invariance\n",
+    "x = np.linspace(0, 0.1, 1000)\n",
+    "y1 = eval_func(c0_1, x)-np.min(eval_func(c0_1, x))\n",
+    "y2 = eval_func(c0_2, x)-np.min(eval_func(c0_2, x))\n",
+    "y3 = eval_func(c0_3, x)-np.min(eval_func(c0_3, x))\n",
+    "y9 = eval_func(c0_9, x)-np.min(eval_func(c0_9, x))\n",
+    "plt.plot((x-np.min(x)), y1/eval_func(c0_1, [0.08]))\n",
+    "plt.plot((x-np.min(x)), y2/eval_func(c0_2, [0.08]))\n",
+    "plt.plot((x-np.min(x)), y3/eval_func(c0_3, [0.08]))\n",
+    "plt.plot((x-np.min(x)), y9/eval_func(c0_9, [0.08]))\n",
+    "plt.xlim(0.08, bp)\n",
+    "plt.show()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# Check partitioning\n",
+    "cp = eval_func(c0_9, x)\n",
+    "print('Partitioning: ' + str(np.max(cp[1:1050])/np.min(cp[999:1050])))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# Set B=1\n",
+    "pi = 0.8\n",
+    "po = 0.5 - np.sqrt(0.25 + (pi**2-pi))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "p1_i = 0.9; p1_o = 0.1\n",
+    "p2_i = 0.8; p2_o = 0.2\n",
+    "p3_i = 0.7; p3_o = 0.3\n",
+    "p4_i = 0.9; p4_o = 0.9\n",
+    "\n",
+    "ct_1 = create_func(F, p_tot(p1_i, p1_o), 1)\n",
+    "ct_2 = create_func(F, p_tot(p2_i, p2_o), 1)\n",
+    "ct_3 = create_func(F, p_tot(p3_i, p3_o), 1)\n",
+    "ct_4 = create_func(F, p_tot(p4_i, p4_o), 1)\n",
     "\n",
+    "g_1= create_func(F, '1', 1)\n",
+    "g_2= create_func(F, '0.5', 1)\n",
+    "g_3= create_func(F, '0.33333333333333333333', 1)\n",
+    "g_4= create_func(F, '1', 1)\n",
+    "\n",
+    "c0_1 = create_func(F, 'x[0]<0.081 ? 0 :'+p_tot(p1_i, p1_o), 1)\n",
+    "c0_2 = create_func(F, 'x[0]<0.081 ? 0 :'+p_tot(p2_i, p2_o), 1)\n",
+    "c0_3 = create_func(F, 'x[0]<0.081 ? 0 :'+p_tot(p3_i, p3_o), 1)\n",
+    "c0_4 = create_func(F, 'x[0]<0.081 ? 0 :'+p_tot(p4_i, p4_o), 1)\n",
+    "for i in range(10):\n",
+    "    c0_1 = calc_sim(c0_1, ct_1, g_1, 0.001, 2, 2)\n",
+    "#     c0_2 = calc_sim(c0_2, ct_2, g_2, 0.01, 2, 2)\n",
+    "#     c0_3 = calc_sim(c0_3, ct_3, g_3, 0.01, 2, 2)\n",
+    "    c0_4 = calc_sim(c0_4, ct_4, g_4, 0.001, 2, 2)\n",
+    "    plt.plot(x, eval_func(c0_1, x), 'r')#/eval_func(c0_1, [0.099])\n",
+    "#     plt.plot(x, eval_func(c0_2, x), 'g')\n",
+    "#     plt.plot(x, eval_func(c0_3, x)/eval_func(c0_3, [0.099]), 'b')\n",
+    "    plt.plot(x, eval_func(c0_4, x), 'k')\n",
+    "    plt.xlim(0.0, 0.625)\n",
+    "    plt.ylim(0, 1.1)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "plt.plot(x, eval_func(c0_1, x)/0.9)\n",
+    "plt.plot(x, eval_func(c0_2, x)/0.8)\n",
+    "plt.plot(x, eval_func(c0_3, x)/0.7)\n",
+    "plt.xlim(0.0, 0.125)\n",
+    "plt.ylim(0, 1.1)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Radial diffusion equation"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "mesh = df.UnitIntervalMesh(1000)\n",
+    "dt = 0.001\n",
+    "F = df.FunctionSpace(mesh, 'CG', 1)\n",
     "c0 = df.Function(F)\n",
-    "c_tot = df.Function(F)\n",
+    "c0.interpolate(df.Expression('x[0]<0.5 && x[0]>0.2 ? 1:0', degree=1))\n",
+    "q = df.TestFunction(F)\n",
     "c = df.Function(F)\n",
-    "tc = df.TestFunction(F)\n",
-    "\n",
-    "# Interpolate c_tot and initial conditions\n",
-    "# c_tot.interpolate(df.Expression('-0.4*tanh((sqrt((x[0]-0.5)*(x[0]-0.5)+(x[1]-0.5)*(x[1]-0.5))/0.1-0.5)) ', degree=1))\n",
-    "c_tot.interpolate(df.Expression('0.4*tanh(-35*(sqrt((x[0]-0.5)*(x[0]-0.5)+(x[1]-0.5)*(x[1]-0.5))-0.2)) +0.5', degree=1))\n",
-    "# tanh from left to right initial conditions\n",
-    "# c_tot.interpolate(df.Expression('0.4*tanh(5*(x[0]-0.5)) - 1', degree=1))\n",
-    "# Step function left to right initial condition\n",
-    "# c0.interpolate(df.Expression('(x[0]<0.5) ? 0 : 1.0', degree=1))\n",
-    "# Somewhat realistic half FRAP\n",
-    "c0.interpolate(df.Expression(('(x[0]<0.5) && sqrt((x[0]-0.5)*(x[0]-0.5)+(x[1]-0.5)*(x[1]-0.5))<0.2 ? 0 :'\n",
-    "                              '0.4*tanh(-35*(sqrt((x[0]-0.5)*(x[0]-0.5)+(x[1]-0.5)*(x[1]-0.5))-0.2)) +0.5'),\n",
-    "                             degree=1))\n",
-    "\n",
-    "# Weak form\n",
-    "form = ((df.inner((c-c0)/dt, tc) + (1-c_tot)* df.inner(df.grad(c), df.grad(tc))) -\n",
-    "        (1-c_tot)/c_tot* c*df.inner(df.grad(c_tot), df.grad(tc))) * df.dx\n",
-    "\n",
-    "# Open file for writing\n",
-    "cFile = df.XDMFFile('conc.xdmf')\n",
+    "X = df.SpatialCoordinate(mesh)\n",
+    "g = df.Expression('.00', degree=1)\n",
+    "u_D = df.Expression('1', degree=1)\n",
+    "def boundary(x, on_boundary):\n",
+    "    return on_boundary\n",
+    "bc = df.DirichletBC(F, u_D, boundary)\n",
+    "# Weak form spherical symmetry\n",
+    "form = ((c-c0)/dt*q*X[0]*X[0] +\n",
+    "        X[0]*X[0]*df.inner(df.grad(c), df.grad(q))-\n",
+    "        c.dx(0)*2*X[0]*q) * df.dx\n",
+    "# Weak form 1D\n",
+    "# form = ((c-c0)/dt* q + df.inner(df.grad(c), df.grad(q))) * df.dx\n",
+    "# Weak form 1D with .dx(0) notation for derivative in 1st direction.\n",
+    "# form = ((c-c0)/dt*q + c.dx(0)*q.dx(0)) * df.dx\n",
     "t = 0\n",
-    "cFile.write(c0, t)\n",
     "\n",
     "# Solve in time\n",
-    "ti = time.time()\n",
-    "for i in range(80):\n",
-    "    print(t)\n",
+    "for i in range(60):\n",
+    "    print(np.sum([x*x*c0([x]) for x in np.linspace(0, 1, 1000)]))\n",
     "    df.solve(form == 0, c)\n",
     "    df.assign(c0, c)\n",
     "    t += dt\n",
-    "    cFile.write(c0, t)\n",
-    "cFile.close()\n",
-    "print(time.time() - ti)"
+    "    plt.plot(np.linspace(0, 1, 1000), [c0([x]) for x in np.linspace(0, 1, 1000)])"
    ]
   },
   {
@@ -63,11 +320,7 @@
    "execution_count": null,
    "metadata": {},
    "outputs": [],
-   "source": [
-    "# c_tot.interpolate(df.Expression('-0.4*tanh((sqrt((x[0]-0.5)*(x[0]-0.5)+(x[1]-0.5)*(x[1]-0.5))/0.1-0.1)) ', degree=1))\n",
-    "c_tot.interpolate(df.Expression('0.4*tanh(-35*(sqrt((x[0]-0.5)*(x[0]-0.5)+(x[1]-0.5)*(x[1]-0.5))-0.2)) +0.5', degree=1))\n",
-    "plt.plot(np.linspace(0, 1, 100), [c_tot([x, 0.5]) for x in np.linspace(0, 1, 100)])"
-   ]
+   "source": []
   }
  ],
  "metadata": {
diff --git a/Plots_Droplet_FRAP.ipynb b/Plots_Droplet_FRAP.ipynb
index 434198bad2cd687014854c82aeb14bc89c6a9844..0e860b07cd52a0996a3f98cf0461347e39bb1d45 100644
--- a/Plots_Droplet_FRAP.ipynb
+++ b/Plots_Droplet_FRAP.ipynb
@@ -72,7 +72,7 @@
     "G_in = [1, 1, 1, .1, .1, .1]\n",
     "G_out = [1, 1, 1, 0.99/0.9, 0.99/0.9, 0.99/0.9]\n",
     "\n",
-    "f_i_01 = []\n",
+    "f_i = []\n",
     "\n",
     "for p, m, p_i, p_e, G_i, G_o in zip(point_lists, me, phi_tot_int,\n",
     "                                    phi_tot_ext, G_in, G_out):\n",
diff --git a/flory_hugg_pde.m b/flory_hugg_pde.m
new file mode 100644
index 0000000000000000000000000000000000000000..981342d5b0103ffc060535b5ab61394ad33ef77b
--- /dev/null
+++ b/flory_hugg_pde.m
@@ -0,0 +1,19 @@
+function [c, f ,s, g0, pt] = flory_hugg_pde(x, t, u, dudx, a, b, e, u0,...
+                                    e_g0, u_g0, v, mode)
+% Solve with full ternary model. Analytical derivatives.
+% pt ... phi_tot
+% gra_a ... analytical gradient of phi_tot
+
+pt = Ternary_model.phi_tot(x, a, b, e, u0, v*t);
+gra_a = Ternary_model.gradient_analytical(x, a, b, e, v*t);
+s = 0;
+c = 1;
+if strcmp(mode, 'Constituent')
+    g0 = Ternary_model.gamma0(x, a+t*v, b, e_g0, u_g0, v*t);
+    f = g0.*(1-pt)./pt.*(pt.*dudx-u.*gra_a);
+elseif strcmp(mode, 'Client')
+    g0 = 0.5;
+    chi_phi = -4.530864768482371;
+    f = g0*(dudx+chi_phi*u*gra_a);
+end
+end
\ No newline at end of file
diff --git a/prob_laplace.m b/prob_laplace.m
index 9bcb17baf3e19133edf416468de63a901199991a..be323698344900ac22ef6f980cf3eae7de26f770 100644
--- a/prob_laplace.m
+++ b/prob_laplace.m
@@ -2,7 +2,7 @@
 % Define parameters for tanh, according to Weber, Zwicker, Julicher, Lee.
 b = @(chi, nu) nu^(1/3)*sqrt(chi/(chi-2));
 e = @(chi) sqrt(3/8*(chi-2));
-t = [0, 0.01, 0.05, 50];
+t = [0, 0.0001, 0.02, 0.05, 0.1, 1, 50];
 %% Try out different precisions
 % prec = [0.5, 0.5, 1, 2, 3.5, 5];
 fac = [1, 5, 10];%, 10, 100];
@@ -27,24 +27,56 @@ end
 
 %% Test partitioning == 1 compared to natural no mobility case.
 % Tg1: g0 = 1 everywhere. 
-
-Tpt1 = Ternary_model(0, 'FRAP', {-1, b(7/3, 10^-18), 0.5, e(7/3),...
+prec = linspace(0.2, 3, 6);
+parfor i = 1:length(prec)
+Tpt1(i) = Ternary_model(0, 'FRAP', {-1, b(7/3, 10^-18), 0.5, e(7/3),...
                                 0, 1, 300, 7, 0, 'Constituent'},...
-                     t, 1);
-Tpt1.solve_tern_frap();
+                     t, prec(i));
+Tpt1(i).solve_tern_frap();
+end
 %%
 % Rescale mobility, such that phi_tot=1 everywhere achieves same flux
-Gi = (1-Tpt1.phi_t(1))/(1-Tpt1.phi_t(1));
-Go = Tpt1.phi_t(1)/Tpt1.phi_t(end)*(1-Tpt1.phi_t(end));
+Gi = 1;%(1-Tpt1.phi_t(1))/(1-Tpt1.phi_t(1));
+% Go = Tpt1.phi_t(1)/Tpt1.phi_t(end)*(1-Tpt1.phi_t(end));
+Go = Tpt1.phi_t(end)/Tpt1.phi_t(1)*2;
 %%
-Tga1 = Ternary_model(0, 'FRAP', {-1, b(7/3, 10^-18), Tpt1.phi_t(1), 0,...
-                                 (Go-Gi), Gi, 300, 7, 0, 'Constituent'},...
-                                 t, 1);
-Tga1.solve_tern_frap();
+parfor i = 1:length(prec)
+    Tga1(i) = Ternary_model(0, 'FRAP', {-1, b(7/3, 10^-18), Tpt1(i).phi_t(1), 0,...
+                                     -0.83, Gi, 300, 7, 0, 'Constituent'},...
+                                     t, prec(i));
+    Tga1(i).solve_tern_frap();
+end
 %%
-Tpt1.plot_sim('plot', 1, 'g')
+for i = 1:length(prec)
+Tpt1(i).plot_sim('plot', 1, 'g', 1, i)
+Tga1(i).plot_sim('plot', 1, 'k', 1.0, i)
+end
+%% Calculate flux for Tpt1 at t=0
+i = 6; ti=3;
+fac = 1;%0.585;
+[dudx, x, sol, flux, g0, pt] = calc_flux(Tpt1(i), ti);
+[dudx1, x1, sol1, flux1, g01, pt1] = calc_flux(Tga1(i), ti);
+figure; hold on; title('flux');
+plot(x, flux); 
+plot(x1, fac*flux1);
+axis([0.90, 1.11, 0, inf]);
+% figure; hold on; title('flux stretched');
+% plot(fac*(x-1), flux); 
+% plot(x1-1, fac*flux1);
+% axis([-0.1, 0.11, 0, inf]);
+% % figure; hold on; title('dudx');
+% % plot(x, dudx); 
+% % plot(x1, dudx1);
+% % axis([0.99, 1.01, 0, inf]);
+figure; hold on; title('Diffusion coefficients');
+plot(x, g0.*(1-pt));
+plot(x1, g01.*(1-pt1));
+axis([0.99, 1.01, 0, inf]);
 %%
-Tga1.plot_sim('plot', 1, 'k')
+figure; hold on; title('sol');
+plot(x, sol); 
+plot(x1, sol1);
+axis([0.90, 1.11, 0, inf]);
 %%
 figure(3); hold on; 
 % fact = [0.9965, 0.94, 1.01, 1.98];fact(i)*
@@ -353,4 +385,14 @@ for i = 1:length(delta_x0)
     end
 end
 p = sum(p_i);
+end
+
+function [dudx, x, sol, flux, g0, pt] = calc_flux(Temp, t_ind)
+
+dudx = diff(Temp.sol(t_ind, :))./diff(Temp.x);
+x = (Temp.x(1:end-1)+Temp.x(2:end))/2;
+sol = (Temp.sol(t_ind, 1:end-1)+Temp.sol(t_ind, 2:end))/2;
+
+[~, flux ,~, g0, pt] = flory_hugg_pde(x, 0, sol, dudx, Temp.a, Temp.b, Temp.e, ...
+               Temp.u0, Temp.e_g0, Temp.u_g0, Temp.v, Temp.mode);
 end
\ No newline at end of file
diff --git a/ternary_frap.m b/ternary_frap.m
index b05f8825fd45b0849e00aa3e48f3820af2fdb5a5..0a8cb286b2437f34acef58ad2eac2487563d7dd1 100644
--- a/ternary_frap.m
+++ b/ternary_frap.m
@@ -10,12 +10,12 @@ make_graph_pretty('time', 'ratio outside/inside', 'bleached component');
 %% Figures
 % Time course
 figure; hold on;
-xlim([0, 3]); ylim([0, 0.5]); 
+xlim([0, 3]); ylim([0, 1]); 
 ax = gca;
 ax.FontSize = 16;
 xlabel('x [\mum]'); ylabel('volume fraction'); 
-plot(T.x, T.sol(1:2:200, :), 'LineWidth', 2, 'Color', [135/255  204/255 250/255]);
-plot(T.x, Ternary_model.phi_tot(T.x, T.a, T.b, T.e, T.u0), 'LineWidth', 4,...
+plot(T.x, T.sol(1:1:100, :), 'LineWidth', 2, 'Color', [135/255  204/255 250/255]);
+plot(T.x, Ternary_model.phi_tot(T.x, T.a, T.b, T.e, T.u0, 0), 'LineWidth', 4,...
     'LineStyle', '--', 'Color', [247/255, 139/255, 7/255]);
 print([T.pa, 'ternary_time_course'], '-depsc');
 %% Plot and check derivatives of pt
@@ -32,14 +32,16 @@ plot(Ternary_model.gamma0(T.x, T.a, T.b, T.e_g0, T.o_g0),...
      Ternary_model.spacing(Ternary_model.gamma0(T.x, T.a, T.b, T.e_g0, T.o_g0),...
      T.a, T.b, T.e_g0, T.o_g0));
 %% Fit with experimental BCs
-T = Ternary_model(2, 'FRAP', [], linspace(0.0, 400, 5000));
+T = Ternary_model(2, 'FRAP', {-1, b(7/3, 10^-6), 0.5, e(7/3),...
+                   0, 1, 100, 0, 0, 'Constituent'},...
+                   linspace(0.0, 4000, 5000), 1);
 T.solve_tern_frap();
-x_seed = 60;
-s = T.sol(1:end, 1:30)./max(T.sol(1:end, 1:30))/1.022;
-ts = T.t(1:end)';
-f_min = @(x) to_minimize(s, ts, x, 'simple_drop', s(:, end));
-opt = optimset('MaxFunEvals', 2000, 'PlotFcns',@optimplotfval);
-x_seed = fminsearch(f_min, x_seed, opt);
+% x_seed = 60;
+% s = T.sol(1:end, 1:30)./max(T.sol(1:end, 1:30))/1.022;
+% ts = T.t(1:end)';
+% f_min = @(x) to_minimize(s, ts, x, 'simple_drop', s(:, end));
+% opt = optimset('MaxFunEvals', 2000, 'PlotFcns',@optimplotfval);
+% x_seed = fminsearch(f_min, x_seed, opt);
 %%
 [cost, v_fit, r_n, v_fit_end] = to_minimize(s, ts, x_seed, 'simple_drop', s(:, end));
 %% Plot for