docs:tutorial

# Differences

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

 docs:tutorial [2009/02/10 16:57]wikiadmin docs:tutorial [2010/02/02 07:55] (current) Both sides previous revision Previous revision 2009/02/25 15:23 dspieker Fixed small typo that was bothering me.2009/02/13 07:59 gibson 2009/02/13 07:58 gibson 2009/02/13 07:58 gibson 2009/02/13 07:28 gibson 2009/02/11 09:33 gibson 2009/02/10 19:08 wikiadmin 2009/02/10 16:57 wikiadmin 2009/01/31 17:37 john_h Changed "Arnolid" to "Arnoldi2009/01/30 07:51 gibson 2009/01/29 12:39 gibson 2009/01/28 10:06 wikiadmin 2008/12/22 08:35 gibson created Next revision Previous revision 2009/02/25 15:23 dspieker Fixed small typo that was bothering me.2009/02/13 07:59 gibson 2009/02/13 07:58 gibson 2009/02/13 07:58 gibson 2009/02/13 07:28 gibson 2009/02/11 09:33 gibson 2009/02/10 19:08 wikiadmin 2009/02/10 16:57 wikiadmin 2009/01/31 17:37 john_h Changed "Arnolid" to "Arnoldi2009/01/30 07:51 gibson 2009/01/29 12:39 gibson 2009/01/28 10:06 wikiadmin 2008/12/22 08:35 gibson created Line 1: Line 1: ====== Channelflow Tutorial ====== ====== Channelflow Tutorial ====== - - ===== Intro ===== So you've installed channelflow. Now what? Well, computational fluid So you've installed channelflow. Now what? Well, computational fluid Line 19: Line 17: of my own research. Probably the best way to get started with of my own research. Probably the best way to get started with channelflow is to step through a few examples of run-of-the-mill channelflow is to step through a few examples of run-of-the-mill - calculations using these utilities. If you want to get right to these + calculations using these utilities. ​ - examples, skip to Section 3. + - + - + - ===== Overview of channelflow utility programs ===== + - + - Here's a list of current channelflow utilities. The first three + - are taken out of alphabetical order because they'​re featured in + - Section 3, Example Calculations. + - + - ^ program name ^ purpose ^ + - | randomfield ​  | build a random initial velocity field, save to disk | + - | couette ​      | integrate an initial condition, save results to disk | + - | fieldprops ​   | print out norms, symmetries, geometrical data of a stored field | + - | makemovie ​    | extract slices of fields in order to make a movie | + - | addfields ​    | compute sum a_n u_n and store result to disk | + - | arnoldi ​      | compute the eigenvalues and eigenfunctions of eqbs and orbits | + - | ascii2field ​  | convert a file of ASCII data to a channelflow FlowField | + - | changegrid ​   | change the discretization or box size of a field | + - | field2ascii ​  | convert a channelflow FlowField to a file of ASCII data | + - | fieldplots ​   | extract a number of 2D slices of the 3D field, good for plots | + - | findorbit ​    | compute an equilibrium or periodic orbit of plane Couette | + - | L2Dist ​       | compute the L2 distance between two fields | + - | L2IP          | compute the L2 inner product | + - | makebasis ​    | construct an orthonormal basis from a set of fields | + - | makeheatmode ​ | construct a field that decays in time according to Laplace eqn | + - | makestokesmode | construct a stokes eigenfunction of laminar equilibrium | + - | perturbfield ​ | add random perturbations to a given field | + - | projectfields | project a set of fields onto a given basis | + - | projectseries | project a sequence of fields onto a given basis | + - | seriesprops ​  | compute statistics on a sequence of data | + - | symmetrize ​   | find the phase shift of a field that optimizes symmetries | + - + - The utilities are stand-alone command-line programs that are run from + - the Unix shell. You can get brief built-in help information on each + - utility by running it with a -h or --help option. For example, running + - "​couette --help"​ produces + - + - gibson@akbar$couette --help + - couette : + - integrate an initial condition and save velocity fields to disk. + - + - options : + - -T0 ​--T0 ​ <​real> ​ ​default == 0 start time + - -T1 ​--T1 ​ <​real> ​ ​default == 100 end time + - -vdt --variabledt ​ ​adjust dt for CFL + - -dt ​--dt ​ <​real> ​ ​default == 0.03125 timestep + - -dtmin ​ --dtmin ​ <​real> ​ ​default == 0.001 ​minimum time step + - -dtmax ​ --dtmax ​ <​real> ​ ​default == 0.05 maximum time step + - -dT ​--dT ​ <​real> ​ ​default == 1 save interval + - -CFLmin ​ ​--CFLmin ​ <​real> ​ ​default == 0.4 ​minimum CFL number + - -CFLmax ​ ​--CFLmax ​ <​real> ​ ​default == 0.6 ​maximum CFL number + - -ts ​--timestepping <​string>​ default == sbdf3 ​timestepping algorithm + - ... + - ​-p ​ --pressure ​ print pressure grad + - <​flowfield> ​ (trailing arg 1) initial condition + - + - The built-in help gives a brief description of each utility'​s purpose + - + - and a list of its command-line options and arguments. Channelflow + - utilities are invoked at the command line with syntax like + - + - ​utility -opt1 value -opt2 value -flag1 arg3 arg2 arg1 + - + - or concretely + - + - ​couette -T0 0 -T1 -vdt -dt 0.02 -ts sbdf4 u0.ff + - + - + - "​Options"​ (e.g. -opt1 value) are used to reset default values + - of parameters. For options, the first two columns in the built-in + - help give the short and long form of the option (e.g. -ts and + - --timestepping),​ the third column indicates the type of parameter + - expected (e.g. real, int, bool, string), and the fourth gives the + - the default value. For example, "​couette -dt 0.02 -ts cnab2" sets + - the time stepping method to 2nd order Crank-Nicolson Adams-Bashforth + - with dt=0.02. + - + - "​Flags"​ simply turn on boolean options that would otherwise be set + - to false. For example, calling "​couette -vdt" turns on variable-dt + - timestepping,​ which adjusts dt at fixed intervals to keep the CFL + - number within bounds. For flags the third and fourth columns of + - built-in help are left blank. + - "​Arguments"​ always come after all options ​and flags. Arguments usually + Please refer to [[:​docs#​utilities|Utilities]] and [[docs:​utils:​options|Utility Options]] - specify the filenames ​of binary velocity fields that the utility will + for a detailed guide of individual utilities ​and their options. You can also run any - load and operate on. Most channelflow programs have one required + utility with a ''-h''​ or ''​--help'' ​option ​to get a brief description of the - argument (e.g. "​couette u0.ff"​) some two (e.g. "​L2Dist u0.ff u2.ff"​). + utility'​s purpose ​and options, e.g - Others take a variable number of arguments (e.g. makebasis u0 u1 u2"​). + - Unfortunately it's difficult to document variable-number arguments + - properly in the four-column ​option ​system, so variable-number arguments + - are usually documented with a "​usage:​ line right after the description + - of the utility'​s purpose. + - So, as you read work through the Example Calculations,​ you can run the + <​code>​ - suggested command with a --help ​option to clarify what the options are + ​couette ​--help - doing and what other options are possible. + ​ - ===== Example Calculations ===== + ====== Example Calculations ​====== - ==== Making a movie ==== + ===== Making a movie ===== - === 1. Generate an initial condition and examine its properties === + ===1. Generate an initial condition and examine its properties === - gibson@akbar$ randomfield -Nx 48 -Ny 35 -Nz 48 -lx 0.875 -lz 0.6 -m 0.20 u0.ff + gibson@akbar\$ randomfield -Nx 48 -Ny 33 -Nz 48 -lx 2 -lz 1 -m 0.20 u0.ff This command generates a no-slip, divergence-free velocity field with This command generates a no-slip, divergence-free velocity field with - random spectral coefficients on a 48 x 35 x 48 grid, on [0, 2pi] x + random spectral coefficients on a 48 x 33 x 48 grid, on [0, 2pi] x [-1, 1] x [0, pi], with magnitude 1/V \integral_V |u|^2 dx = 0.2. The [-1, 1] x [0, pi], with magnitude 1/V \integral_V |u|^2 dx = 0.2. The field is a perturbation from the laminar flow --by default, velocity field is a perturbation from the laminar flow --by default, velocity Line 227: Line 138: Adjust the bitrate to balance filesize and video quality. Adjust the bitrate to balance filesize and video quality. - ==== Computing a 1d unstable manifold ==== + ===== Computing a 1d unstable manifold ​===== The Nagata (1990) "​lower-branch"​ equilibrium has a one-dimensional unstable manifold. The Nagata (1990) "​lower-branch"​ equilibrium has a one-dimensional unstable manifold. Line 246: Line 157: * ''​projectseries''​ * ''​projectseries''​ - === Download the Nagata lower-branch solution === + === 1. Download the Nagata lower-branch solution === ...from the [[http://​www.channelflow.org/​database|channelflow database]]. ''​LB''​ stands for '​lower-branch'​. ​ ...from the [[http://​www.channelflow.org/​database|channelflow database]]. ''​LB''​ stands for '​lower-branch'​. ​ Line 252: Line 163: wget http://​channelflow.org/​database/​a1.14_g2.5_Re400/​LB.ff wget http://​channelflow.org/​database/​a1.14_g2.5_Re400/​LB.ff - === Examine the solution'​s properties === + === 2. Examine the solution'​s properties === The ''​fieldprops''​ utility will print out basic information about the field. For example, The ''​fieldprops''​ utility will print out basic information about the field. For example, Line 262: Line 173: if you leave it off. if you leave it off. - === Plot the solution === + === 3. Plot the solution === Visualization of fluid velocity fields is an art in itself. Channelflow provides a Visualization of fluid velocity fields is an art in itself. Channelflow provides a Line 283: Line 194: - === Compute the eigenfunctions === + === 4. Compute the eigenfunctions === The Nagata lower-branch solution is an equilibrium of plane Couette dynamics. You can The Nagata lower-branch solution is an equilibrium of plane Couette dynamics. You can Line 295: Line 206: - === Perturb along the unstable manifold === + === 5. Perturb along the unstable manifold === The Nagata lower branch has a single unstable eigenvalue, so its unstable manifold is 1d The Nagata lower branch has a single unstable eigenvalue, so its unstable manifold is 1d Line 306: Line 217: - === Integrate the perturbations === + === 6. Integrate the perturbations === couette -T0 0 -T1 400 -o data-LBp01 LBp01ef1 couette -T0 0 -T1 400 -o data-LBp01 LBp01ef1 - couette -T1 0 -T1 400 -o data-LBm01 LBm01ef1 + couette -T0 0 -T1 400 -o data-LBm01 LBm01ef1 - === Produce input vs dissipation curves === + === 7. Produce input vs dissipation curves === The ''​seriesprops''​ utility computes a few quantities like energy dissipation D and The ''​seriesprops''​ utility computes a few quantities like energy dissipation D and Line 323: Line 234: - === Make movies === + === 8. Make movies === ​movieframes -T0 0 -T1 100 -d data-LBp01ef1 -o frames-LBp01ef1 ​movieframes -T0 0 -T1 100 -d data-LBp01ef1 -o frames-LBp01ef1 Line 329: Line 240: From here you can adapt the [[#​make_a_movie_from_extracted_data|movie-making instructions]] from above. From here you can adapt the [[#​make_a_movie_from_extracted_data|movie-making instructions]] from above. - ==== Project movie data onto state-space coordinates ==== + + ===== Project movie data onto state-space coordinates ​===== It can be useful to look at the temporal evolution of a fluid as It can be useful to look at the temporal evolution of a fluid as Line 344: Line 256: outline how the computation is done using channelflow. outline how the computation is done using channelflow. - === Make a low-d basis === + === 1. Make a low-d basis === Make a subdirectory and descend into it, so that the following steps Make a subdirectory and descend into it, so that the following steps Line 350: Line 262: mkdir basis-UBtrans mkdir basis-UBtrans - cd basisUBtrans + cd basis-UBtrans Download an equilibrium solution of plane Couette flow from the Download an equilibrium solution of plane Couette flow from the Line 405: Line 317: - === Project a series of fields onto the basis === + === 2. Project a series of fields onto the basis === + + Ok. Suppose you have a series of velocity fields u0.ff, u1.ff, etc for t=0,​1,​2,​...1000 + in a data/ directory and a set of basis elements e0.ff, e1.ff, e2.ff, e3.ff in a + basis-UBtrans/​ directory. To project the fields onto the basis, run + + projectseries -T0 0 -T1 1000 -d data -b basis-UBtrans -Nb 4 -o a.asc + + That will produce an ASCII file a.asc with 4 columns and 1001 rows. The t-th row and jth + column is the value of (u(t), ej), where ( , ) signifies the L2 inner product + + <​latex>​ + (f,g) = 1/V \int_V f \cdot g dx dy dz + ​ + ​ - + ​