1

I'm interested in numerically studying vortex solutions to PDEs. By this I mean solutions for PDEs for a field $\theta$ which satisfy $\oint\nabla\theta\cdot d\vec{\ell}=2\pi m$ where $m=...,-2,-1,0,1,2,...$ and $d\vec{\ell}=rd\phi$ is a vector along a curve made of a circle of fixed radius $r$ where $\phi\in(0,2\pi)$. A solution to this is $\theta=m\phi$. As a first step in this direction, I asked about the vortex solution to the Laplace equation for $\theta$ here: Numerically solving the Laplace equation in a 2d cylinder.

The next step I'm hoping to learn is how to code two coupled, nonlinear PDEs for two fields where one of them has two opposite vortex solutions. Hopefully, after understanding, this I could generalize the code and my understanding to other similar problems.

Here I've chosen, as a toy model, the stationary equations for two fields: $\theta$, whose vortex solutions are of interest, and an additional field $\rho$ that's coupled to $\theta$. The two nonlinear PDEs are $$0=\nabla\rho\cdot\nabla\theta+\frac{\rho}{2}\nabla^{2}\theta$$ and $$0=\nabla^{2}\rho(1-(\nabla\theta)^{2})-2\rho(\nabla^{2}\theta)^{2}.$$

These are derived from the Hamiltonian $\mathcal{H}=\int dr^{2}[\frac{1}{2}\rho^{2}((\nabla\theta)^{2}-1)]$.

To avoid singularities, I want to solve them on a domain that looks like this enter image description here

where the outer radius is $R$, the inner radii are the same and equal to $R_0$, the origin is dead center between the two inner circles and the distance from the origin to the center of either of the inner circles is $d$.

The boundary conditions I'm interested in are: $$\theta(x,y)=\arctan(\frac{y}{x})$$ for $(x-d)^2+y^2=R_{0}^2$ and $$\theta(x,y)=-\arctan(\frac{y}{x})$$ for $(x+d)^2+y^2=R_{0}^2$ and $$\rho(x,y)=\rho_{0}$$ for $x^2+y^2=R^2$ where $\rho_0$ is a constant (which can be set to 1). If additional conditions are required on $\rho$ on the two inner circles then these should be two different constants.

user21
  • 39,710
  • 8
  • 110
  • 167
Asaf Miron
  • 347
  • 1
  • 9
  • Have you tried anything yourself, at least to reproduce your equation in Mathematica code? – MarcoB Feb 18 '19 at 23:34
  • How did this problem arise? It is necessary to indicate the beginning of the discussion on https://mathematica.stackexchange.com/questions/191456/numerically-solving-the-laplace-equation-in-a-2d-cylinder/191492?noredirect=1#comment499327_191492 – Alex Trounev Feb 18 '19 at 23:55
  • Thanks @AlexTrounev, you're absolutely right. I've clarified the background in an edit to my original post. – Asaf Miron Feb 19 '19 at 08:23
  • The boundary conditions are erroneous. Apparently, it is necessary to set the angle in local coordinates on each circle. – Alex Trounev Feb 19 '19 at 20:41
  • I wonder why people on the forum do not have the habit of voting for the questions and answers they read. The people at TeX.stackexchange.com are much more welcoming. – Igor Kotelnikov Apr 15 '21 at 05:49

1 Answers1

5

To solve a system of nonlinear equations with FEM we need to build a converging iterative process. I use the method of the false transient.The solution of the problem converges quickly, but at the first step instability arises.

R = 4; r = 1/2; d = 1; A = 
 ImplicitRegion[
  x^2 + y^2 <= R^2 && (x - d)^2 + y^2 >= r^2 && (x + d)^2 + y^2 >= 
    r^2, {x, y}];
DiscretizeRegion[A]

rho[0][x_, y_] := 1;
theta[0][x_, y_] := 0;
t0 = 1/5; k = 5;
Do[{theta[i], rho[i]} = 
NDSolveValue[{Laplacian[u[x, y], {x, y}] + 
    2*Grad[rho[i - 1][x, y], {x, y}].Grad[
        theta[i - 1][x, y], {x, y}]/rho[i - 1][x, y] == (u[x, y] -
       theta[i - 1][x, y])/t0, 
  Laplacian[v[x, y], {x, y}] - 
    2*rho[i - 1][x, 
      y]*(2*Grad[rho[i - 1][x, y], {x, y}].Grad[
            theta[i - 1][x, y], {x, y}]/rho[i - 1][x, y])^2/(1 - 
        Norm[Grad[theta[i - 1][x, y], {x, y}]]^2) == (v[x, y] - 
      rho[i - 1][x, y])/t0, 
  DirichletCondition[v[x, y] == 1, x^2 + y^2 == R^2], 
  DirichletCondition[
   u[x, y] == ArcTan[x - d, y], (x - d)^2 + y^2 == r^2], 
  DirichletCondition[
   u[x, y] == -ArcTan[x + d, y], (x + d)^2 + y^2 == r^2]}, {u, 
  v}, {x, y} \[Element] A, 
 Method -> {"FiniteElement", 
   "InterpolationOrder" -> {u -> 2, v -> 2}, 
   "MeshOptions" -> {"MaxCellMeasure" -> 0.001}}], {i, 1, 
k}]; // Quiet




{ContourPlot[theta[k][x, y], {x, y} \[Element] A, Contours -> 20, 
  ColorFunction -> Hue, PlotRange -> All, PlotLegends -> Automatic], 
 ContourPlot[rho[k][x, y], {x, y} \[Element] A, Contours -> 20, 
  ColorFunction -> Hue, PlotRange -> All, PlotPoints -> 50, 
  PlotLegends -> Automatic]}

Table[DensityPlot[theta[i][x, y], {x, y} \[Element] A, 
  ColorFunction -> Hue, PlotRange -> All], {i, 1, k}]
Table[DensityPlot[rho[i][x, y], {x, y} \[Element] A, 
  ColorFunction -> Hue, PlotRange -> All, PlotPoints -> 50], {i, 1, 
  k}]

fig1

{Plot[theta[k][-d, y], {y, r, R}, PlotRange -> All, 
  AxesLabel -> {"y", "\[Theta]"}], 
 Plot[rho[k][-d, y], {y, r, R}, PlotRange -> All, 
  AxesLabel -> {"y", "\[Rho]"}], 
 Plot[theta[k][d, y], {y, r, R}, PlotRange -> All, 
  AxesLabel -> {"y", "\[Theta]"}], 
 Plot[rho[k][d, y], {y, r, R}, PlotRange -> All, 
  AxesLabel -> {"y", "\[Rho]"}]}

fig2

Alex Trounev
  • 44,369
  • 3
  • 48
  • 106
  • What are you using "InterpolationOrder" -> {u -> 2, v -> 2} for? – user21 Feb 20 '19 at 07:08
  • What version are you using? – user21 Feb 20 '19 at 07:21
  • @AlexTrounev, Thank you very much! I'll go over this carefully. Just a quick follow up question: Suppose I want to find how this solution decays with $r$ (suppose $r=0$ at the origin and I go along $\hat{y}$). How would I extract this information from the solution? – Asaf Miron Feb 20 '19 at 15:12
  • 1
    @user21 In[1]:= $Version Out[1]= "11.3.0 for Microsoft Windows (64-bit) (March 7, 2018)". My algorithm needs an option "InterpolationOrder" -> {u -> 2, v -> 2} – Alex Trounev Feb 20 '19 at 16:30
  • 1
    @AsafMiron I updated the code, corrected Norm[]->Norm[]^2 and added fig. 2. – Alex Trounev Feb 20 '19 at 17:10
  • Your algorithm does not need "InterpolationOrder" -> {u -> 2, v -> 2} because that is the default. Unfortunately, I get messages and the result does not look like anything you have provided here. – user21 Feb 21 '19 at 06:07
  • @user21 What is your version? – Alex Trounev Feb 21 '19 at 11:58
  • "11.3.0 for Linux x86 (64-bit) (March 7, 2018)"; Have tried to run your code without the InterpolationOrder? Another improvement would be to create the mesh once before you use it in the loop. – user21 Feb 21 '19 at 12:26
  • @AlexTrounev It seems that the second equation you're solving isn't the equation in my original post. The last term in my second equation is $(\nabla^{2}\theta)^{2}$. – Asaf Miron Feb 21 '19 at 12:40
  • @AlexTrounev Also, do you have any good resources on this method? Preferably something light on jargon. – Asaf Miron Feb 21 '19 at 12:59
  • @AsafMiron You're right. There is a typo. Using the first equation, I changed the second equation and changed the code. The solution of the equations has changed in the boundary layer, but this is not noticeable in the pictures. – Alex Trounev Feb 21 '19 at 13:15
  • @AsafMiron There are a lot of resources, see for example, G. D. Mallinson and G. de Vahl Davis, 'The method of the false transient for the solution of coupled partial differential equations', J. Comp. Phys., 12, 435 (1973). – Alex Trounev Feb 21 '19 at 13:40
  • @AlexTrounev Perfect, thank you. Two last questions: (1) Could you please explain the parameters k and t0 and why you set rho[0][x_, y_] := 1; theta[0][x_, y_] := 0;? (2) What would one do if the convergence isn't as fast as in this example? – Asaf Miron Feb 21 '19 at 15:29
  • 1
    @AsafMiron 1) I chose the parameters based on the experiences. 2) There are methods for accelerating convergence. In this forum, I posted several examples of the use of the method of the false transient, see https://mathematica.stackexchange.com/search?q=method+of+the+false+transient – Alex Trounev Feb 21 '19 at 16:08
  • I wonder why people on the forum do not have the habit of voting for the questions and answers they read. The people at TeX.stackexchange, com are much more welcoming. – Igor Kotelnikov Apr 15 '21 at 05:50