# Filter out eigenvalues in NDEigenfunction [duplicate]

I am going to solve TISE for logarithmic potential in two dimensions. For bound state solution, the energy eigenvalues are to come negative. This is my code:

h = 1/10;
V[x_?NumericQ, y_?NumericQ] := Log[(x^2 + y^2)^(0.5)];
ℒ = -h^2*Laplacian[u[x, y], {x, y}] + V[x, y]*u[x, y];

{vals, funs} =
NDEigensystem[
ℒ, u[x, y], {x, y} ∈ Disk[{0, 0}, 40], 30,
Method ->
{"SpatialDiscretization" ->
{"FiniteElement", {"MeshOptions" -> {MaxCellMeasure -> 0.05}}}}
];

vals


The output is:

{-0.00198732, 0.00539817, -0.0661666, 0.104999, 0.10756, -0.127353,
0.12829, -0.128495, 0.159509, 0.209388, 0.210758, -0.222747,
-0.257318, 0.270692, 0.295442, 0.296305, 0.309708, 0.316885,
0.380771, 0.382971, 0.407733, 0.434397, -0.439298, -0.444706,
0.456338, 0.458949, 0.46411, 0.467077, 0.518833, 0.525313}


Now, when I plot the eigenfunctions with negative eigenvalues I get the desired wavefunction, but when I plot those with positive eigenvalues, as expected, the resultant wavefunction is not square-integrable and does not tend to zero at infinity. Now, as I require only the bound state eigenenergies and eigenfunctions, what can I do to get only the eigenfunctions with negative eigenvalues, arranged in proper order of increasing energy (i.e., firstly the most bound one with most negative eigenenergy, then 2nd most and so on)?

ord = Ordering[vals, Count[vals, z_ /; z < 0]]
(* {24, 23, 14, 13, 8, 7, 3, 1} *)


determines the positions of the negative eigenvalues in vals, sorted from most to least negative. Then

vals[[ord]]
(* {-0.440585, -0.437867, -0.267061, -0.253709,
-0.131002, -0.129766, -0.0845056, -0.000911545} *)


gives the sorted negative eigenvalues themselves, and

funs[[ord]]


gives the corresponding eigenfunctions in the same order.