Skip to main content

differential equations - Unexpected behaviour plotting a PDE solution


I'm solving some coupled PDEs (Eb1 and Ef1) and what I plot for Eb1 appears to be correct. However, for some reason, when I go to plot Ef1, I get nothing. MWE is below (beginning is constants and functions needed to solve PDEs, relevant part near end)


(*Constants needed*)
a = 8.2314*10^-7; omega = 3.0318*10^7; Do2 = 2*10^-9; po = 106;
ro = 235*10^-6; micron = 1*10^-6; qm = 10^-4;
mic = 1*10^-6; De = 5.5*10^-11; eo = 100; j = 0.12; kmn = 4.7;

kme = 2.1; con = (a*omega)/(6*Do2); rl = Sqrt[(6*Do2*po)/(omega*a)];

(*Functions needed*)
rn = Piecewise[{{0, ro <= rl}, {ro*(0.5 - Cos[(ArcCos[1 - (2*rl*rl)/(ro^2)] - 2*Pi)/3]), ro > rl}}];

p[r_] = Piecewise[{{po + con*(r^2 - ro^2 + 2*(rn^3)*(1/r - 1/ro)), r > rn} , {0 , r <= rn}}];

q[r_] = qm*((kme/(kme + p[r]))*(p[r]/(kmn + p[r])) + (kmn/(kmn + p[r]))*j);

(*Equations defined*)

eqnDe = D[Ef1[r, t], t] - De*(D[Ef1[r, t], r, r] + (2/r)*(D[Ef1[r, t], r])) + q[r]*Ef1[r, t];

eqnBo = D[Eb1[r, t], t] - (Ef1[r, t])*q[r];

(*Solving equations*)
x = NDSolve[{eqnBo == 0, Eb1[r, 0] == 0, eqnDe == 0, Ef1[r, 0] == 0, Derivative[1, 0][Ef1][rn, t] == 0, Ef1[ro , t] == eo},
Eb1, {r, rn, ro}, {t, 0, 14400}];

Then it's easy to plot Eb1 between rn and ro with this;


Plot[Eb1[r, 14400] /. x, {r, rn, ro}, PlotRange -> Automatic]


and I get this;


enter image description here


Yet when I try to flow Ef1 with a similar command I get absolutely nothing;


Plot[Ef1[r, 14400] /. x, {r, rn, ro}, PlotRange -> Automatic]

enter image description here


Similarly, I can't seem to evaluate Ef1 at a given value of $r$ or $t$ - any ideas what I'm doing wrong and why this is the case?



Answer



It seems that you're missing a solution of Ef1. Try



y = NDSolve[{eqnBo == 0, Eb1[r, 0] == 0, eqnDe == 0, Ef1[r, 0] == 0, 
Derivative[1, 0][Ef1][rn, t] == 0, Ef1[ro, t] == eo},
Ef1, {r, rn, ro}, {t, 0, 14400}];
Plot[Ef1[r, 14400] /. y, {r, rn, ro}, PlotRange -> Automatic]

enter image description here


Comments

Popular posts from this blog

front end - keyboard shortcut to invoke Insert new matrix

I frequently need to type in some matrices, and the menu command Insert > Table/Matrix > New... allows matrices with lines drawn between columns and rows, which is very helpful. I would like to make a keyboard shortcut for it, but cannot find the relevant frontend token command (4209405) for it. Since the FullForm[] and InputForm[] of matrices with lines drawn between rows and columns is the same as those without lines, it's hard to do this via 3rd party system-wide text expanders (e.g. autohotkey or atext on mac). How does one assign a keyboard shortcut for the menu item Insert > Table/Matrix > New... , preferably using only mathematica? Thanks! Answer In the MenuSetup.tr (for linux located in the $InstallationDirectory/SystemFiles/FrontEnd/TextResources/X/ directory), I changed the line MenuItem["&New...", "CreateGridBoxDialog"] to read MenuItem["&New...", "CreateGridBoxDialog", MenuKey["m", Modifiers-...

How to thread a list

I have data in format data = {{a1, a2}, {b1, b2}, {c1, c2}, {d1, d2}} Tableform: I want to thread it to : tdata = {{{a1, b1}, {a2, b2}}, {{a1, c1}, {a2, c2}}, {{a1, d1}, {a2, d2}}} Tableform: And I would like to do better then pseudofunction[n_] := Transpose[{data2[[1]], data2[[n]]}]; SetAttributes[pseudofunction, Listable]; Range[2, 4] // pseudofunction Here is my benchmark data, where data3 is normal sample of real data. data3 = Drop[ExcelWorkBook[[Column1 ;; Column4]], None, 1]; data2 = {a #, b #, c #, d #} & /@ Range[1, 10^5]; data = RandomReal[{0, 1}, {10^6, 4}]; Here is my benchmark code kptnw[list_] := Transpose[{Table[First@#, {Length@# - 1}], Rest@#}, {3, 1, 2}] &@list kptnw2[list_] := Transpose[{ConstantArray[First@#, Length@# - 1], Rest@#}, {3, 1, 2}] &@list OleksandrR[list_] := Flatten[Outer[List, List@First[list], Rest[list], 1], {{2}, {1, 4}}] paradox2[list_] := Partition[Riffle[list[[1]], #], 2] & /@ Drop[list, 1] RM[list_] := FoldList[Transpose[{First@li...

dynamic - How can I make a clickable ArrayPlot that returns input?

I would like to create a dynamic ArrayPlot so that the rectangles, when clicked, provide the input. Can I use ArrayPlot for this? Or is there something else I should have to use? Answer ArrayPlot is much more than just a simple array like Grid : it represents a ranged 2D dataset, and its visualization can be finetuned by options like DataReversed and DataRange . These features make it quite complicated to reproduce the same layout and order with Grid . Here I offer AnnotatedArrayPlot which comes in handy when your dataset is more than just a flat 2D array. The dynamic interface allows highlighting individual cells and possibly interacting with them. AnnotatedArrayPlot works the same way as ArrayPlot and accepts the same options plus Enabled , HighlightCoordinates , HighlightStyle and HighlightElementFunction . data = {{Missing["HasSomeMoreData"], GrayLevel[ 1], {RGBColor[0, 1, 1], RGBColor[0, 0, 1], GrayLevel[1]}, RGBColor[0, 1, 0]}, {GrayLevel[0], GrayLevel...