Curl

Code

paddle[p_,theta_]:=(
endpoints=Append[p+{0.2Cos[#],0.2Sin[#]},0]&/@{theta,theta+Pi/2,theta+Pi,theta+3Pi/2};
{Line@{#1,#3},Line@{#2,#4}}&@@endpoints
)

frame[t_]:=(
paddles=If[showPaddles,{Red,Thickness[0.008],paddle[#,t*curl@@#]&/@points},{}];
Show[Graphics3D[{field3D,curlVectors,paddles}],curlSurface,Axes->Automatic,AxesLabel->{x,y,z},BoxRatios->{2,2,3},PlotRange->{{0,3},{0,3},{-15,15}},ViewPoint->{-8,4,-4},ImageSize->Large]
)

graphics:=(
curlExpression=Curl[f[fx,fy],{fx,fy}];
curl:=curlExpression/.{fx->#1,fy->#2}&;

field2D=VectorPlot[Take[f[x,y,0],2],{x,0,3},{y,0,3}];
fieldArrows=Cases[field2D,Arrow[_],Infinity];


field3D={Blue,Thickness[0.001],Arrowheads[0.003,Appearance->"Projected"],fieldArrows/.{x_Real,y_Real}->{x,y,0}};

DarkGreen=RGBColor[0,.75,0];
curlVectors=If[showCurlVectors,{DarkGreen,Thickness[0.005],Arrowheads[0.02],Arrow[{Append[#,0],Append[#,curl@@#]}&/@points]},{}];

curlSurface=If[showCurlSurface,Plot3D[curl[x,y],{x,0,3},{y,0,3},Mesh->None,PlotStyle->Opacity[0.5]],{}];

If[showPaddles,If[precompute,ListAnimate[Table[Image[frame[t]],{t,0,1,1/64}],DefaultDuration->4],Animate[frame[t],{t,0,1,0.01},DefaultDuration->4]],frame[0]]
)

Graphics

Paddles and curl vectors are drawn at each point.
If paddles is True, then the code will generate an animation showing the spinning paddles.
Set precompute=True if you would like to precompute all the frames in the animation so that it plays smoothly.  This will prevent you from rotating or manipulating the animation, however.

f[x_,y_]:={Log[5+x^2]Cos[Pi(x+y)],-Log[2+y^2]Sin[Pi(x-y)]};

points={
{0.7,1.7},
{1,1},
{1.7,1.7},
{2.3,2.3}
};

showPaddles = True;
showCurlVectors = True;
showCurlSurface =True;

precompute=True;

graphics