I am trying to solve the Stochastic Gross-Pitaevskii equation from this paper https://arxiv.org/pdf/1409.0146.pdf. But I have no idea how to solve adding a noise term. I like to see the wave function after adding a temperature similar to https://arxiv.org/pdf/2107.06680.pdf fig(1). Below is the problem statement from https://arxiv.org/pdf/1409.0146.pdf and the results I want to see.
ClearAll["Global`*"]
xtab = Table[i/10, {i, 1, 300}];
ttab = Table[i/10, {i, 1, 301}];
Noisetab = Table[Random[Real, {-1/5, 1/5}], {301}];
\[Eta] = Interpolation[
Join[Table[{-xtab[[i]], ttab[[i]], Noisetab[[i]]}, {i, 300}],
Table[{0, ttab[[i]], Noisetab[[i]]}, {i, 300}],
Table[{xtab[[i]], ttab[[i]], Noisetab[[i]]}, {i, 300}]]];
hbar = 1; mass = 1;
\[Gamma] = 0.01; g = 0.1; temp = 13.89; \[Mu] = 22.41; \[Omega] = 0.5;
\[Epsilon] = 1 - I*\[Gamma]; kb = 1;
pse[x_, t_] := Exp[-0.2 x^2];
sol = NDSolveValue[{ -
D[u[x, t], t] == -0.5 \[Epsilon] D[u[x, t], {x, 2}] +
0.5 \[Epsilon] \[Omega]^2 x^2 u[x,
t] + \[Epsilon] g Abs[u[x, t]]^2 u[x, t] - \[Epsilon] \[Mu] u[
x, t] + Sqrt[2 \[Gamma] kb temp] \[Eta][x, t], u[x, 0] == 0,
u[30, t] == 0, u[-30, t] == 0},
u, {x, -30, 30}, {t, 0, 20},
Method -> {"MethodOfLines",
"SpatialDiscretization" -> {"TensorProductGrid",
"MinPoints" -> 161, "MaxPoints" -> 201,
"DifferenceOrder" -> 4}}, MaxSteps -> 10^6];
DensityPlot[Abs[sol[x, t]]^2, {t, 0, 20}, {x, -30, 30},
AspectRatio -> 1/2, Frame -> True, FrameTicks -> Automatic,
PlotPoints -> 200, ImageSize -> 1000,
LabelStyle -> {24, Bold, Large, Black},
ColorFunction -> "BlueGreenYellow",
FrameLabel -> {{Style["x", FontFamily -> "Times New Roman",
FontSlant -> "Italic", FontWeight -> Bold, FontSize -> 30],
None}, {Style["t", FontFamily -> "Times New Roman",
FontSlant -> "Italic", FontWeight -> Bold, FontSize -> 30],
None}}]
I tried pseudospectral Method
ClearAll["Global`*"]
xtab = Table[i/10, {i, 1, 800}];
ttab = Table[i/10, {i, 1, 801}];
Noisetab = Table[Random[Real, {-1/5, 1/5}], {801}];
[Eta] = Interpolation[
Join[Table[{-xtab[[i]], ttab[[i]], Noisetab[[i]]}, {i, 800}],
Table[{0, ttab[[i]], Noisetab[[i]]}, {i, 800}],
Table[{xtab[[i]], ttab[[i]], Noisetab[[i]]}, {i, 800}]]];
hbar = 1; mass = 1;
[Gamma] = 0.01; g = 0.1; temp = 13.89; [Mu] = 22.41; [Omega] = 0.5;
[Epsilon] = 1 - I*[Gamma]; kb = 1;
pse[x_, t_] := Exp[-0.2 x^2];
sol = NDSolveValue[{
I D[u[x, t], t] == -0.5 [Epsilon] D[u[x, t], {x, 2}] +
0.5 [Epsilon] [Omega]^2 x^2 u[x,
t] + [Epsilon] g Abs[u[x, t]]^2 u[x, t] - [Epsilon] [Mu] u[
x, t] + Sqrt[2 [Gamma] kb temp] [Eta][x, t], u[x, 0] == 0,
u[30, t] == 0, u[-30, t] == 0},
u, {x, -30, 30}, {t, 0, 80},
Method -> {"MethodOfLines",
"SpatialDiscretization" -> {"TensorProductGrid",
"MinPoints" -> 100, "MaxPoints" -> 161,
"DifferenceOrder" -> "Pseudospectral"}}, MaxSteps -> 10^6];
DensityPlot[Abs[sol[x, t]]^2, {t, 0, 80}, {x, -30, 30},
AspectRatio -> 1/2, Frame -> True, FrameTicks -> Automatic,
PlotPoints -> 200, ImageSize -> 1000,
LabelStyle -> {24, Bold, Large, Black},
ColorFunction -> "BlueGreenYellow",
FrameLabel -> {{Style["x", FontFamily -> "Times New Roman",
FontSlant -> "Italic", FontWeight -> Bold, FontSize -> 30],
None}, {Style["t", FontFamily -> "Times New Roman",
FontSlant -> "Italic", FontWeight -> Bold, FontSize -> 30],
None}}]
The result looks like
Can anyone help me with phase coherence g(x_1,x_2) and its dynamics? Also how to get a ground-state solution like https://arxiv.org/pdf/2107.06680.pdf with the inclusion of temperature? I tried with 2D equation from Solving logarithmic 2D Nonlinear GPE Equation.
ClearAll["Global`*"]
\[Gamma] = 0.01; g = 0.1; temp = 13.89; \[Mu] = 22.41; \[Omega] = 0.02;
\[Epsilon] = 1 - I*\[Gamma]; kb = 1;
data = Flatten[
Table[{{x, y, t}, Random[Real, {-1/100, 1/100}]}, {x, -40,
40}, {y, -40, 40}, {t, 0, 10}], 2];
[Eta] = Interpolation[data, InterpolationOrder -> 1];
boundary = 40; xl = yl = -boundary; xr = yr = boundary;
finalt = 10;
seedwave[x_, y_] :=
Exp[-0.05 (x^2 + y^2) +
Isvalue ArcTan[x, y]] (x^2 + y^2)^(svalue/2);
pnumber =
NIntegrate[
Exp[-0.05 (x^2 +
y^2)], {x, -[Infinity], [Infinity]}, {y, -[Infinity],
[Infinity]}];(particle number check*)
svalue = 0; lvalue = 0;
sol = NDSolveValue[{-D[[Psi][x, y, t],
t] == -0.5 [Epsilon] Laplacian[[Psi][x, y, t], {x,
y}] + [Epsilon] Abs[[Psi][x, y, t]]^2 [Psi][x, y, t] Log[
Abs[[Psi][x, y, t]]^2] - [Epsilon] [Mu] [Psi][x, y, t] +
Sqrt[2 [Gamma] kb temp] [Eta][x, y, t], [Psi][xl, y, t] ==
0, [Psi][xr, y, t] == 0, [Psi][x, yl, t] ==
0, [Psi][x, yr, t] == 0, [Psi][x, y, 0] == 0.1}, [Psi][x, y,
t], {x, xl, xr}, {y, yl, yr}, {t, 0, finalt},
Method -> {"MethodOfLines",
"SpatialDiscretization" -> {"TensorProductGrid",
"MinPoints" -> 40, "MaxPoints" -> 81,
"DifferenceOrder" -> "Pseudospectral"}}, MaxSteps -> 10^6]
Plot3D[Evaluate[Abs[sol]^2 /. t -> finalt], {x, xl, xr}, {y, yl, yr},
PlotRange -> All, MeshStyle -> White, ColorFunction -> "Rainbow",
PlotTheme -> "Marketing", PlotPoints -> 100]
And the phase
Plot3D[Evaluate[Arg[sol] /. t -> finalt], {x, xl, xr}, {y, yl, yr},
PlotRange -> All, MeshStyle -> White, ColorFunction -> "Rainbow",
PlotTheme -> "Marketing", PlotPoints -> 100]








ItoProcessinstead ofNDSolve, which would entail manually discretizing your equation in space. Here's an example applied to a stochastic reaction-diffusion equation. – Chris K Nov 03 '22 at 13:28ItoProcessnow. Did it work or are you still having problems? – Chris K Nov 04 '22 at 13:02