User Tools

Site Tools


docs:classes:fieldsymmetry

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
docs:classes:fieldsymmetry [2009/02/16 06:46]
gibson
docs:classes:fieldsymmetry [2010/02/02 07:55] (current)
Line 14: Line 14:
 Let G be the group generated by these symmetries. Specific choice of boundary conditions at the walls  Let G be the group generated by these symmetries. Specific choice of boundary conditions at the walls 
 might constrain the symmetry group of a specific flow to a subgroup G. But for generality,​the FieldSymmetry ​ might constrain the symmetry group of a specific flow to a subgroup G. But for generality,​the FieldSymmetry ​
-class can represent any symmetry in G. The FieldSymmetry class parameterizes symmetries σ  symmetries as follows. Any element of the symmetry group is defined by six parameters+class can represent any symmetry in G. The FieldSymmetry class parameterizes symmetries σ ⊂ G symmetries ​ 
 +as follows. Any element of the symmetry group is defined by six parameters
  
-  ​sigma = (sxsysxaxaz, s)+<​latex>​ $ \begin{align*} 
 +  \sigma &= (s_xs_ys_xa_xa_z, s)\\ 
 +  s_x, s_y, s_z, s &= \pm 1\\ 
 +  a_x, a_z &\in [-0.5, 0.5) 
 +\end{align*} $ </​latex>​
  
-  sx, sy, sz, s = \pm 1+with the action of σ on a velocity field u as
  
-  ax, az \in [-0.50.5)+<​latex>​ 
 +  ​\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 ys_z z + a_z L_z) 
 +</​latex>​
  
-with the action ​of sigma on velocity field u as+The following is a brief overview ​of FieldSymmetry functionality. For complete description,​ 
 +see the header file {{:​librarycode:​symmetry.h}}. 
 +===== Constructors / Initialization =====
  
-  sigma [u, v, w](x,y,z) = s (sx u, sy v, sz w)(sx x + ax Lx, sy y, sz z + az Lz) +In C++ code, elements of the symmetry group can initialized ​as follows
- +where %%sx,​sy,​sz%% are of type %%int%% and %%ax, az%% are of type %%Real%%. ​
- +
-In C++ code, elements of the symmetry group can be defined ​as follows+
  
 +<code c++>
   FieldSymmetry sigma0(sx, sy, sz, ax, az, s);   FieldSymmetry sigma0(sx, sy, sz, ax, az, s);
  
-  FieldSymmetry sigma1(sx, sy, sz, ax, az);    // s defaults to 1+  FieldSymmetry sigma1(sx, sy, sz, ax, az);  // the s argument ​s defaults to 1
  
-  FieldSymmetry sigma2(sx, sy, sz);            // s defaults to 1; ax,az to 0+  FieldSymmetry sigma2(sx, sy, sz);          // s defaults to 1; ax,az to 0
  
-  FieldSymmetry tau(ax, az);     ​// pure translation:​ s,sx,sy,sz default to 1+  FieldSymmetry tau(ax, az);                 ​// pure translation:​ s,sx,sy,sz default to 1
  
-  FieldSymmetry ​sigma3         // the identity: s defaults to 1; ax,az to 0; sx,sy,sz to 1+  FieldSymmetry ​identity                   // the identity: s defaults to 1; ax,az to 0; sx,sy,sz to 1 
 +</​code>​
  
 +===== Operations =====
  
-where sx,sy,sz are of type int and ax, az are of type Real. FieldSymmetries act on each +FieldSymmetries act on each other and velocity fields as follows
-other and velocity fields as follows+
  
 +<code c++>
   FieldSymmetry sigma4 = sigma2 * sigma1; ​    // group multiplication   FieldSymmetry sigma4 = sigma2 * sigma1; ​    // group multiplication
  
Line 49: Line 59:
   FlowField u("​u"​); ​                          // read velocity field u from disk   FlowField u("​u"​); ​                          // read velocity field u from disk
  
-  FlowField v = sigma1 * u;                   // v+  FlowField v = sigma1 * u;                   // ​Make new field = sigma1 u
  
   v *= sigma2; ​                               // v now equals sigma2 * sigma1 * u   v *= sigma2; ​                               // v now equals sigma2 * sigma1 * u
 +</​code>​
  
 +FieldSymmetries can be saved to / read from disk...
  
-FieldSymmetries can be saved to / read from disk as follows +<code c++>
   sigma1.save("​sigma1"​); ​                     // saves to ASCII file sigma1.asc   sigma1.save("​sigma1"​); ​                     // saves to ASCII file sigma1.asc
-Any element of G is of the form 
  
 +  FieldSymmetry sigma7("​sigma1"​); ​            // make a new symmetry element sigma7 == sigma1
 +</​code>​
 +
 +...compared to each other...
 +
 +<code c++>
 +  if (sigma1 != identity) ​
 +    ...
 +  else if (sigma1 == sigma7)
 +    ...
 +</​code>​
 +===== ASCII IO ===== 
 +
 +==== FieldSymmetry ====
 +
 +The FieldSymmetry uses ASCII input-output. The storage format is 
 +
 +  s sx sy sz ax az
 +
 +Thus, the following C++ channelflow code 
 +
 +<code c++>
 +FieldSymmetry sigma(-1, -1, -1, 0.3, 0.1);
 +sigma.save("​sigma"​);​
 +</​code>​
 +
 +produces the ASCII file ''​sigma.asc''​ with contents
 +
 +  1 -1 -1 -1 0.3 0.1
 +
 +which can then be read back into a channeflow program with 
 +
 +<code c++>
 +FieldSymmetry sigma("​sigma"​);​
 +</​code>​
 +
 +Note that  the order of parameters in the ASCII file is different than the order in the ''​FieldSymmetry''​ constructor:​ the overall multiplicative sign ''​s''​ goes first in the file and last in the C++ constructor. I apologize for this. The reasons for the difference are are historical. The next release of channelflow will have order (s, sx, sy, sz, ax, az) for both.
 +
 +==== SymmetryList ====
 +
 +The ''​SymmetryList''​ class is a essentially an array of ''​FieldSymmetry''​ objects with simple ASCII IO methods. The ASCII format is 
 +
 +   % N
 +   s0 sx0 sy0 sz0 ax0 az0
 +   s1 sx1 sy1 sz1 ax1 az1
 +   ...
 +
 +where N is the number of symmetries listed in the file. Thus the file ''​S.asc''​ with contents ​
  
 +   % 2
 +   ​1 ​ 1  1 -1  0.5  0.0
 +   1 -1 -1  1  0.5  0.5
  
 +represents the symmetries σ0 = (1, 1, 1, -1, 0.5, 0.0) and σ1 = (1, -1, -1,  1,  0.5,  0.5). These are the generators of the S 
 +[[docs:​math:​symmetry#​isotropy_groups_of_known_solutions|S symmetry group]]. The generators can be loaded into channelflow,​ used, and saved as follows
  
 +<code c++>
 +SymmetryList S("​S"​); ​     // load generators from ASCII file
 +FlowField foo = S[0](u); ​ // apply (1,  1,  1, -1, 0.5, 0.0) to u
 +FlowField bar = S[1](u); ​ // apply (1, -1, -1,  1, 0.5, 0.5) to u
 +S.save("​Q"​); ​             // save generators into another file
  
 +SymmetryList P(4);        // Create another symmetry group
 +P[0] = FieldSymmetry(1,​1,​1,​ 0.2, 0.0); 
 +P[1] = etc.;
 +</​code>​
 +  ​
docs/classes/fieldsymmetry.1234795567.txt.gz · Last modified: 2009/02/16 06:46 by gibson