MTH 212: Functions of 2 and 3 Variables. Level Curves and Contour Curves. 
Level Surfaces. (Section 13.1)

f[x_,y_]:=x^2+y^2 (* function of two variables x and y *)
(* Graph the function *)
ContourPlot3D[z==f[x,y],{x,-10,10},{y,-10,10},{z,0, 100},Mesh->None,AxesLabel->{x,y,z},ContourStyle->Opacity[0.8]]

(* Let us plot level curves for this function (in the xy-plane) *)
ContourPlot[f[x,y],{x,-10,10},{y,-10,10},ContourLabels->True]

ContourPlot[{f[x,y] == 51,f[x,y] == 75,f[x,y] == 100}, {x,-10,10},{y,-10,10}, ContourLabels -> True] 
(* 3 chosen level curves plotted altogether *)

(* Now let us plot some contour curves *) 
Manipulate[
ContourPlot3D[{z==f[x,y],z==a},{x,-10,10},{y,-10,10},{z,0,100},Mesh -> None, ContourStyle->Opacity[0.6]],
{a,0,100}
]

(* intersection of the paraboloid with the planes z=a as a varies gives contour curves *)
ContourPlot3D[z==f[x,y] ,{x,-10,10},{y,-10,10},{z,0,100}, ContourStyle->Opacity[0.5],
Mesh->{{25,51,75}},MeshFunctions->{#3&},MeshStyle->{Thick,Blue},AxesLabel->{"x","y","z"}]

(* Combining level curves and contour curves *)
hill=ContourPlot3D[z==f[x,y] ,{x,-10,10},{y,-10,10},{z,0,100}, ContourStyle->Opacity[0.5],
Mesh->{{25,51,75}},MeshFunctions->{#3&},MeshStyle->{Thick,Blue}];
map=ContourPlot[{f[x,y] == 25,f[x,y] == 51,f[x,y] == 75},{x,-10,10},{y,-10,10},ContourStyle->{Thick,Red}];
map3D=Graphics3D[map[[1]]/.{x:_Real,y:_Real}->{x,y,-2}];
Show[hill,map3D,PlotRange->{Automatic,Automatic}]

g[x_,y_]:=-(5x^2+y^2)Exp[-x^2-y^2] (* another function of two variables *)
ContourPlot3D[z==g[x,y],{x,-2,2},{y,-2,2},{z,0, -2},Mesh->None,AxesLabel->{x,y,z}]
ContourPlot[g[x,y],{x,-2,2},{y,-2,2},ContourLabels -> True]

Manipulate[
ContourPlot3D[{z==g[x,y],z==b},{x,-2,2},{y,-2,2},{z,0,-2},Mesh -> None, ContourStyle->Opacity[0.6]],
{b,0,-2}
]
(* intersection of the surface with the planes z=b as b varies gives contour curves *)

(* Combining level curves and contour curves *)
hills=ContourPlot3D[z==g[x,y] ,{x,-2,2},{y,-2,2},{z,0,-2}, ContourStyle->Opacity[0.5],
Mesh->{{-0.5,-1,-1.5}},MeshFunctions->{#3&},MeshStyle->{Thick,Blue}];
map2=ContourPlot[{g[x,y] == -0.5,g[x,y] == -1,g[x,y] == -1.5},{x,-2,2},{y,-2,2},ContourStyle->{Thick,Red}];
map3D2=Graphics3D[map2[[1]]/.{x:_Real,y:_Real}->{x,y,-2}];
Show[hills,map3D2,PlotRange->{Automatic,Automatic}]

(* one more example with level curves *)
cool[x_, y_] := Sin[x + 2*Cos[y]]
ContourPlot3D[z == cool[x, y], {x, -2*Pi, 2*Pi}, {y, -2*Pi, 2*Pi}, {z, -1, 1}, Mesh -> None, 
  AxesLabel -> {x, y, z}]
ContourPlot[cool[x, y], {x, -2*Pi, 2*Pi}, {y, -2*Pi, 2*Pi}, ContourLabels -> True]
ContourPlot[cool[x, y] == 0.5, {x, -2*Pi, 2*Pi}, {y, -2*Pi, 2*Pi}, ContourLabels -> True]

(* Several LEVEL SURFACES of function of 3 variables w =  x^2+y^2+z^2, chosen automatically by Mathematica *)
ContourPlot3D[x^2+y^2+z^2 ,{x,-15,15},{y,-15,15},{z,-15,15},Mesh->None, ContourStyle->Opacity[0.5]]
(* One way to specify several chosen level surfaces *) 
ContourPlot3D[x^2+y^2+z^2,{x,-5,5},{y,-5,5},{z,-5,5},Mesh->None, Contours->10]

Manipulate[
ContourPlot3D[x^2+y^2+z^2==c,{x,-15,15},{y,-15,15},{z,-15,15},Mesh->None,ContourStyle->Opacity[0.6]],
{c,0,125}]

(* Another example: w = x^2+Sin[y]-z^2 *)
ContourPlot3D[x^2+Sin[y]-z^2 ,{x,-15,15},{y,-15,15},{z,-15,15},Mesh->None, ContourStyle->Opacity[0.5]]
ContourPlot3D[x^2+Sin[y]-z^2,{x,-5,5},{y,-5,5},{z,-5,5},Mesh->None, Contours-> 8]

Manipulate[
ContourPlot3D[x^2+Sin[y]-z^2==c,{x,-15,15},{y,-15,15},{z,-15,15},Mesh->None,ContourStyle->Opacity[0.6]],
{c,-100,100}]