ClearAll[o, f, vecFofXY, bold, fs, bxOfa, dxu,dxv, bxOfaDa, bxOfaDb, p, p2, pa, pb, g, x, y, dx, plotVecFvaryYfixedX, plotVecFvaryXfixedY]
o = {0,0, 0};
f[x_, y_] = -4+ x^6  + 2 y^6 ;
vecFofXY[x_, y_] = {x,y,f[x,y]} ;
bold = Style[ #, Bold] &;
fs = 14;
bxOfa = Style[Row[{bold[x],"(u, v)"}], FontSize-> fs] ;
bxOfaDa = Style[Row[{bold[x],"(u + Δu, v)"}], FontSize-> fs] ;
bxOfaDb = Style[Row[{bold[x],"(u, v + Δv)"}], FontSize-> fs] ;

t = Style[ #, FontSize-> fs] &;
dx[v_,e_ : "", s_:""] := Row[{s //t, t["d"],Subscript[bold[x]// t,v//t], e // t}] ;
dxu = dx["u"];
dxv = dx["v"];


p = Plot3D[
f[x, y], {x,0,2}, {y, 0,2},
PlotTheme->"ThickLines" , 
Axes-> None,Mesh -> None,PlotStyle->Directive[Opacity[0.8] ]
] ;
 
plotVecFvaryYfixedX[l_, h_, x_] := ParametricPlot3D[ vecFofXY[x, y],{y, l, h}, PlotTheme->"ThickLines", PlotStyle -> Directive[Green // Darker// Darker]];
plotVecFvaryXfixedY[l_, h_, y_]:= ParametricPlot3D[ vecFofXY[x, y],{x,l,h}, PlotTheme->"ThickLines", PlotStyle -> Directive[Green // Darker// Darker]];
pa = plotVecFvaryYfixedX[0.5, 1.5, 0.5];
pb = plotVecFvaryXfixedY[0.5, 1.5, 0.5];
pah = plotVecFvaryYfixedX[0.5, 1.5, 1.5];
pbh = plotVecFvaryXfixedY[0.5, 1.5, 1.5];

(*Callout doesn't appear to work for 3D plot*)
p2 = ListPointPlot3D[{
(*Callout[lowlow,bxOfa, Above],
Callout[highlow,bxOfaDa, Above],
Callout[lowhigh,bxOfaDb, Above]*)
lowlow,
highlow,
lowhigh,
o 
},
PlotStyle->Directive[Black,PointSize[Large]]
] ;

low = 0.5;
high = 1.5;
lowlow = vecFofXY[low, low];
lowhigh = vecFofXY[low, high];
highlow = vecFofXY[high, low];
highhigh = vecFofXY[high, high];
g = Show[p,p2, pa, pb,
Graphics3D[{
Thick,Arrowheads[0.001],
Arrow[{o,lowlow}],
Arrow[{o,highlow}],
Arrow[{o,lowhigh}],
Blue // Darker,
(*Arrowheads[0.01],*)
Arrow[{lowlow, vecFofXY[0.5,0.9]}],
Arrow[{lowlow, vecFofXY[0.9,0.5]}],
Text[bxOfa,lowlow + {-1,1,0.1}0.2],
Text[bxOfaDa,highlow+ {1,1,0}0.3],
Text[bxOfaDb,lowhigh+ {1,1,0}0.3],
Text[dxv,vecFofXY[0.5,0.9]+ {1,0,0}0.15],
Text[dxu,vecFofXY[0.9,0.5]+ {0,1,0}0.15]
}]
]



g2 = Show[p,pa, pb,pah, pbh,
Graphics3D[{
Thick,Arrowheads[0.001],

Arrow[{lowhigh, vecFofXY[low + 0.3,high]}],
Arrow[{highhigh, vecFofXY[high,high-0.3]}],
Arrow[{lowlow, vecFofXY[low,low+0.3]}],
Arrow[{highlow, vecFofXY[high-0.3,low]}],

Text[ dx["u","(v=1)"],vecFofXY[low + 0.3,high]+{0,1,0}0.2],
Text[dx["v","(u=1)","-"], vecFofXY[high,high-0.3]-0.3{1,0,0}],
Text[ dx["v","(u=0)", ""],vecFofXY[low,low+0.3] +0.3 {1,0,0}],
Text[dx["u","(v=0)", "-"],vecFofXY[high-0.3,low] - 0.2{0,1,0}]

}]
]

<<peeters` ;
peeters`setGitDir[ "../project/figures/GAelectrodynamics" ]

peeters`exportForLatex["twoParameterDifferentialFig1", g]
peeters`exportForLatex["twoParameterDifferentialBoundaryFig2", g2]

g3 = Module[{r},
r = (Range[5]+1)/4;
Show[{p,plotVecFvaryYfixedX[0.5, 1.5, #]& /@ r,
plotVecFvaryXfixedY[0.5, 1.5, #]& /@ r} // Flatten]
]

peeters`exportForLatex["twoParameterDifferentialBoundaryFig3", g3]