We can use the properties of the InterpolatingFunction
object produced by NDSolve
to get the list of coordinates:
First we get the interpolating function object from nsol1
:
intF = nsol1[[1, 1, 2, 0]]

Available list of properties for intF
can be obtained using intF["Methods"]
:
intF["Methods"]

We can access the xt-coordinates used in interpolation using
grid = intF["Grid"];
grid // Short[#, 20] &

ListPlot[intF["Grid"]]

Alternatively, we can use intF["Coordinates"]
to the lists of x and t coordinates and construct tuples of them to get the list of xt coordinates:
Join @@ intF["Grid"] == Tuples@intF["Coordinates"]
True
Similarly, we can use the property "ValuesOnGrid"
to get the z values:
zlst = intF["ValuesOnGrid"];
Short[zlst, 20]

We can combine the grid
and zlist
to get the list of 3D coordinates used by intF
:
xtz = Join[grid, Map[List, zlst, {-1}], 3];
Short[xtz, 10]

We get the x and t ranges using the property "Domain"
:
intF["Domain"]
{{0., 5.}, {0., 4.}}
Plot the surface and the coordinates used in interpolation:
Show[Plot3D[intF[x, t], {x, 0, 5}, {t, 0, 4}, PlotStyle -> Opacity[.5], Mesh -> None],
ListPointPlot3D[xtz]]

To get the list of 3D coordinates in a single step, use
coords3D = Join @@ Join[intF["Grid"], Map[List, intF["ValuesOnGrid"], {-1}], 3];