====== symmetryop ======
''symmetryop'': apply a symmetry operation to a given field
options :
-sn --sn default == 0 apply s1, s2, or s3 symmetry (0 => use sx,sy,sz,ax,az,a)
-sx --x-sign change u,x sign
-sy --y-sign change v,y sign
-sz --z-sign change w,z sign
-ax --axshift default == 0 translate x by ax*Lx
-az --azshift default == 0 translate z by az*Lz
-anti --anti antisymmetry instead of symmetry
-v --verbose print out some diagnostics
(trailing arg 2) input field
(trailing arg 1) output field
The [[:docs:math:symmetry|symmetries of 3D fields]] on x,z periodic, y bounded domains with
Dirichlet or Neumann conditions at the walls can be parameterized as
\sigma [u,v,w](x,y,z) = s [s_x u, s_y v, s_z w](s_x x + a_x L_x , \, s_y y, \, s_z z +a_z L_z)
where s,sx,sy,sz, and are +/-1 and ax,az are real. The options to symmetryop set the values of
these parameters, and the resulting symmetry is applied to the input field and saved to disk as
the output field. The -sx,-sy,-sz options work as flags: using -sx sets sx = -1; otherwise sx = 1.
Likewise the -anti option sets s = -1.
For convenience the -sn option allows application of a few predefined symmetries that
figure prominently in our research, namely
$ \begin{align*}
s_1 [u,v,w](u,v,w) &= [u, v, -w](x + L_x/2 , \, y, \, -z) \\
s_2 [u,v,w](u,v,w) &= [-u, -v, w](-x + L_x/2 , \, -y, \, z+L_z/2) \\
s_3 [u,v,w](u,v,w) &= [-u, -v, -w](-x , \, -y, \, -z+L_z/2)
\end{align*} $
====== Usage examples ======
===== Translation =====
Translate the field g.ff by Lx/2 in x and save it in h.ff
symmetryop -ax 0.5 g h
===== General =====
Apply s1 = [u,v,w] %%->%% [-u, -v, w](-x + L_x/2 , -y, z+L_z/2) to g.ff and save it in h.ff
symmetryop -sx -sy -ax 0.5 -az 0.5 g h
===== Convenience =====
Apply s1 to g.ff and save it in h.ff, using the convenience -sn option
symmetryop -sn 1 g h