Saturday, 23 June 2012

chroot jail with ssh

from https://help.ubuntu.com/community/BasicChroot
make the chroot structure somewhere.  




$ sudo debootstrap --variant=buildd --arch amd64 precise /home/me/chroot/ http://ubuntu.virginmedia.com/archive/

Then, follow http://forums.gentoo.org/viewtopic-t-374757.html

sudo apt-get install libpam-chroot

sudo vi /etc/security/chroot.conf.  Add user and chroot directory created above, for example,

# to make user `chrooted' get sent to jail in /home/me/chroots/chroot1
chrooted /home/me/chroots/chroot1  

When `chrooted' logs in they will be jailed as above.

sudo vi /etc/pam.d/login.  Add,

# I added the following from 
# http://forums.gentoo.org/viewtopic-t-374757.html
# to turn on PAM chroot jail logins
# /etc/security/chroot.conf, etc/pam.d/login, /etc/pam.d/su also need editing.
session required /lib/security/pam_chroot.so debug

Now,

sudo vi /etc/pam.d/su

#add this line: 
session    required             pam_chroot.so debug




This doesn't work.  :(  The jailed user on login can navigate up above the new home.

There's a program called, `makejail'.  Install it.  Try it.


Or try 
http://www.howtoforge.com/chrooted-ssh-sftp-tutorial-debian-lenny


Thursday, 21 June 2012

system/fvSchemes: ok but epsilon blows slowly.


FoamFile{version 2.0; format ascii; class dictionary; location "system"; object fvSchemes;}

snGradSchemes {
    default         limited 0.7;  // limited 0.7; for bad meshes;
                                // corrected; for good meshes;
                                // must fit to laplacianSchemes
    }

laplacianSchemes {default none;
   //laplacian(nuEff,U) Gauss linear corrected;          // for good meshes
   laplacian(nuEff,U) Gauss linear limited 0.7;      // for bad meshes

    //laplacian((1|A(U)),p) Gauss linear corrected;      // for good meshes
    laplacian((1|A(U)),p) Gauss linear limited 0.7;  // for bad meshes
//  for turbulent flow only:
//    laplacian(DkEff,k) Gauss linear corrected;
    laplacian(DepsilonEff,epsilon) Gauss linear corrected;
    laplacian(DREff,R) Gauss linear corrected;
//    laplacian(DnuTildaEff,nuTilda) Gauss linear corrected; // SA only
}

fluxRequired {
    default         no;
    p              ;
    phi             ;
    }

gradSchemes { // Gradient calculation.  Gauss linear first, cell Limited Gauss linear 1; for better stability with poor meshes.
    default  Gauss linear;  // Gauss linear or leastSquares
    grad(p)         faceLimited leastSquares 0 1;  
    grad(U)         Gauss linear;              
    }

interpolationSchemes {default  linear;     // linear is fine
   U               linear;
//   interpolate(U) reconCentral phi cellLimited leastSquare 1.0; // new tet mesh interpolator. Use with reconCentral in divSchemes
}

divSchemes {default none; div(phi,U)      Gauss upwind;               // stable: Gauss upwind
//div(phi,U)      Gauss linearUpwind Gauss; // faster linearUpwind Gauss
//    div(phi,U)      Gauss reconCentral cellLimited leastSquares 1.0;    // new, tets mesh setting
//    div(phi,k)      Gauss upwind;             // for turbulent flow only
    div(phi,epsilon) Gauss upwind;            // for turbulent flow only
    div(phi,R)      Gauss upwind;             // for turbulent flow only
    div(R)          Gauss linear;             // for turbulent flow only
//    div(phi,nuTilda) Gauss upwind;            // for turbulent SA flow only
div((nuEff*dev(grad(U).T()))) Gauss upwind; // this scheme is not used for
//div((nuEff*dev(grad(U).T()))) Gauss linear; // this scheme is not used for
                                                // steady and laminar flow, but
                                                // it is read by the solver, so
                                                // it must be defined.
//div((nuEff*dev(T(grad(U))))) Gauss linear; // not advised, taken from motorbike case
div((nuEff*dev(T(grad(U))))) Gauss upwind; // not advised, taken from motorbike case
}

ddtSchemes {default steadyState;}    // no time dependence her

Wednesday, 20 June 2012

reconstructPar then remove

i=`ls processor0`; reconstructPar; for j in $i; do rm -r proc*/$j; done

circular cylinder / sphere analysis with recommendations.

http://www.cfd-online.com/Forums/openfoam-solving/59413-recommended-setup-flow-over-cylinder.html

parallel loading paraView for openFoam

http://www.openfoamwiki.net/index.php/Contrib_Parallelized_Native_OpenFOAM_Reader_for_ParaView

probes

in controlDict:

functions ( probes1 {
        type probes; functionObjectLibs ("libsampling.so");
        outputControl timeStep; // or every N iterations
        outputInterval 1;
        probeLocations (
            ( 0 0 0.1 )
            );
    fields ( U );  // fields to check.
    }
);


This could be interesting; it may replace sample.  Sample needs reconstructPar before use:  time-consuming.
This might not.

bash scripting

A great guide:

http://mywiki.wooledge.org/BashGuide

Monday, 18 June 2012

chroot jail stuff

http://www.cyberciti.biz/tips/howto-linux-unix-rssh-chroot-jail-setup.html

https://help.ubuntu.com/community/BasicChroot

is shorter

sudo apt-get install dchroot debootstrap

sudo mkdir chroot

sudo vi /etc/schroot/schroot.conf


Add:



[precise]
description=Ubuntu Precise
location=/home/me/chroot
priority=3
users=me
groups=sbuild
root-groups=root


sudo debootstrap --variant=buildd --arch 686 precise /home/ms/chroot/ http://mirror.url.com/ubuntu

Surely, I can add a new user, take all its privileges?  This chroot approach uses a new operating system!
It took less than ten minutes anyway.

Enter the jail by,


sudo chroot /home/me/chroot

and note that the root directory is not the root of the machine but things are working ok.  So far.

/etc/passwd:   list of users - user system nuymbers.
/etc/group:  list of groups and system group numbers.


http://www.yolinux.com/TUTORIALS/LinuxTutorialManagingGroups.html

access control lists may be what I'm looking for.

http://www.vanemery.com/Linux/ACL/linux-acl.html

Sunday, 17 June 2012

cfd links to follow up

http://www.cfd-online.com/Forums/openfoam-solving/71733-pisofoam-floating-point-error-gamg.html

Oracle's grid engine sounds interesting.

Friday, 15 June 2012

Working fvSolution with parallel solver

Jobs were running in serial but not in parallel.  Following advice from http://www.cfd-online.com/Forums/openfoam-solving/101321-interfoam-blows-parallel-run.html#post366627 I changed the GAMG smoother from GaussSeidel to DILUGaussSeidel and the job worked immediately.

For completeness I also changes all the relTols to zero and changed the epsilon and R solvers to smoothSolver (with the same smoother as above) from PBiCG.


FoamFile{version 2.0; format ascii; class dictionary; location "system"; object fvSolution;}

SIMPLE {
    nNonOrthogonalCorrectors 4; convergence 1e-5;
    pRefCell 0;  pRefValue 0;
    residualControl{p 1E-5; U 1E-5; R 1E-7; epsilon 1E-7;}
    }

relaxationFactors { // 0.3 good mesh p, 0.7 good mesh U etc.
    p 0.1; U 0.3; R 0.1; epsilon 0.1;
    }

solvers {
   U {
      solver smoothSolver; smoother DILUGaussSeidel; // Essential for parallel.
      tolerance 1e-06; relTol 0; nSweeps 1; maxIter 100; }

   p {
      solver GAMG; tolerance 1e-07; relTol 0;
      minIter 3; maxIter 100; 
      smoother DICGaussSeidel; // Essential for parallel solution.
      nPreSweeps 1;              // 1 for p, set to 0 for all other
      nPostSweeps 2; nFinestSweeps 2; scaleCorrection true;                               
      directSolveCoarsestLevel false; 
      cacheAgglomeration on; // off if dynamic mesh refinement
      nCellsInCoarsestLevel 500; // 500 or sqrt(number of cells)
      agglomerator    faceAreaPair; mergeLevels     1; 
      }
    // epsilon{solver PBiCG; preconditioner DILU; tolerance 1E-9; relTol 0; minIter 1;} 
    epsilon{solver smoothSolver; smoother DILUGaussSeidel; tolerance 1E-6; relTol 0; nSweeps 1; maxIter 100;}
    //    R{solver PBiCG; preconditioner DILU; tolerance 1E-9; relTol 0;}
    R{solver smoothSolver; smoother DILUGaussSeidel; tolerance 1E-6; relTol 0; nSweeps 1; maxIter 100;}
    }



Saturday, 2 June 2012

ongoing

Case 22 solved ok and is stable but epsilon is very large at 45 degrees or so: 38518. Maybe this is ok. It implies a small length scale. The cells ARE very small in the region of high epsilon. It implies a very low turbulence viscosity at this point.

-----------------------------------------------------
FoamFile{version 2.0; format ascii; class dictionary; 
    object transportProperties;}

transportModel Newtonian;
nu nu [0 2 -1 0 0 0 0] 1.5E-5; 
// kinematic viscosity.  We are incompressible so no density required.
// The kinematic pressures generated must be multiplied by density to 
// get actual pressures.

-----------------------------------------------------
FoamFile{version 2.0; format ascii; class dictionary; 
    object RASProperties;}
// Use erroneous RASModel to get list of available models.
RASModel LaunderGibsonRSTM;
// RASModel kOmegaSST;
printCoeffs on;
turbulence on;
// Can define non-standard coeffs.
-----------------------------------------------------
FoamFile{version 2.0; format ascii; class volScalarField; object epsilon;}
internalField uniform 1;
boundaryField{
    in  { type freestream; freestreamValue uniform 0.05; value uniform 0.05; }
    out { type freestream; freestreamValue uniform 0.05; value uniform 0.05; }
    sym { type symmetryPlane; }
    top { type symmetryPlane; }
    wall { type zeroGradient; }
    emptyf { type empty; }
    emptyb { type empty; }
}
--------------------------------------------------------
FoamFile{version 2.0; format ascii; class volScalarField; object k;}
boundaryField {
   in{type freestream; freestreamValue uniform 0.05;}
   out{type freestream; freestreamValue uniform 0.05;}
   top{type symmetryPlane;}
   wall{type zeroGradient;} // zeroGradient? calculated?  fixedValue; value uniform 0? 1E-10?
   sym{type symmetryPlane;}
   emptyf{type empty;}
   emptyb{type empty;}
}
internalField uniform 0;
dimensions [0 2 -2 0 0 0 0];
--------------------------------------------------------
FoamFile{version 2.0; format ascii; class volScalarField; object p;}
boundaryField {   in{type freestreamPressure;}  //  zeroGradient
   out{type freestreamPressure;} // fixedValue; value uniform 0
   top{type symmetryPlane;}
   wall{type zeroGradient;}
   sym{type symmetryPlane;}
   emptyf{type empty;}
   emptyb{type empty;}
}
internalField uniform 0;
dimensions [0 2 -2 0 0 0 0];
-----------------------------------------------------
FoamFile{version 2.0; format ascii; class volVectorField; object U;}

boundaryField{
      wall{  type fixedValue; value uniform (0 0 0);}
      top{  type symmetryPlane;}
      sym{  type symmetryPlane;}
      emptyf{  type empty;}
      emptyb{  type empty;}
      in{  type freestream; freestreamValue uniform (10 0 0); } // fixedValue; value uniform (10 0 0);}
      out{  type freestream; freestreamValue uniform (10 0 0);} // zeroGradient;}
   }
internalField uniform (10 0 0);
dimensions [0 1 -1 0 0 0 0];
-----------------------------------------------------                              
FoamFile{version 2.0; format ascii; class volSymmTensorField; object R;}
boundaryField{
      wall{  type zeroGradient; } // fixedValue; value uniform (0 0 0 0 0 0);}
      top{  type symmetryPlane;}
      sym{  type symmetryPlane;}
      emptyf{  type empty;}
      emptyb{  type empty;}
      in{  type freestream; freestreamValue uniform (0 0 0 0 0 0); } // fixedValue; value uniform (10 0 0);}
      out{  type freestream; freestreamValue uniform (0 0 0 0 0 0);} // zeroGradient;}
   }
internalField uniform (0 0 0 0 0 0);
dimensions [0 2 -2 0 0 0 0];
------------------------------------------------------
FoamFile{version     2.0; format ascii; class dictionary; location    "system"; object fvSolution;}
SIMPLE {
    nNonOrthogonalCorrectors 4;         // Unpredictable. 0/1/2 blows. 3,4,5,6 ok with 2D.
    convergence         1e-5;           // convergence criteria steady state
       pRefCell            0;           // ref cell is 0 in the airfoil tutorial
      pRefValue            0;           // ref value is 0 in the airfoil case.
  residualControl{p 1E-5; U 1E-5; R 1E-7; epsilon 1E-7;}      // added due to airfoil case.
}
relaxationFactors {
    // Critical section.  Steady solutions will diverge with the default
    // 1 setting for a value to make sure they're all in here.
    // p is usually just under 1/2 of U, k, omega.  Not sure about
    // R and epsilon.  p 0.3, U 0.7 for good case.  p 0.1, U 0.3 considered
    // a bad setting by some but slow and steady beats fast and blown...
    p              0.1;                // 0.3 is stable, decrease for bad mesh
    U              0.3;                // 0.7 is stable, decrease for bad mesh
    R              0.1;
    epsilon        0.1;
}
solvers {
    U {                                  // linear equation system solver for U
        solver       smoothSolver;  // solver type.  smoothSolver is more
                                    // robust than some.
        // smoother   GaussSeidel;    // smoother type.  OK serial. Bad parallel.
        smoother DILUGaussSeidel;     // Good parallel.    
        tolerance       1e-06;          // 
        relTol          0.01;           // Some say this should = 0
        nSweeps         1;              // setting for smoothSolver
        maxIter         100;            // limitation of iterations number
    }
    p                                  // linear equation system solver for p
    {
        solver          GAMG;           // very efficient multigrid solver
        tolerance       1e-07;          // solver finishes if this
        relTol          0.001;          // or this is reached 
        // some suggest this should be zero.  Others say 0.1 or 0.01 for
        // poor convergence cases.
        minIter         3;              // minimum number of iterations
        maxIter         100;            // limitation of iterions number
        smoother        DIC;            // setting for GAMG.
        // smoother     DICGaussSeidel; // Good for parallel runs.
        nPreSweeps      1;              // 1 for p, set to 0 for all other!
        nPostSweeps     2;              // 2 is fine
        nFinestSweeps   2;              // 2 is fine
        scaleCorrection true;           // true is fine
        directSolveCoarsestLevel false; // false is fine
        cacheAgglomeration on;          // on is fine; set to off, if dynamic
                                        // mesh refinement is used!
        nCellsInCoarsestLevel 500;      // 500 is fine,
                                        // otherwise sqrt(number of cells)
        agglomerator    faceAreaPair;   // faceAreaPair is fine
        mergeLevels     1;              // 1 is fine
    }
    //epsilon{solver PBiCG; preconditioner DILU; tolerance 1E-9; relTol 0;}
    //R{solver PBiCG; preconditioner DILU; tolerance 1E-9; relTol 0;}
    epsilon{solver smoothSolver; smoother DILUGaussSeidel; tolerance 1E-9; 
        relTol 0; nSweeps 1; maxIter 100;}
    R{solver smoothSolver; smoother DILUGaussSeidel; tolerance 1E-9; 
        relTol 0; nSweeps 1; maxIter 100;}
    }
-------------------------------------------------------------
FoamFile{version 2.0; format ascii; class dictionary; 
    location "system"; object fvSchemes;}
snGradSchemes {  // surface normal gradient on faces calculation methods.
    default         limited 0.7;  // limited 0.7; for bad meshes;
                                  // corrected; for good meshes;
                                  // must fit to laplacianSchemes
    }

laplacianSchemes {   // Diffusion schemes.
    default none; 
    // --------------- The following is my current favourite.
    // default Gauss linear corrected; // low non-orthogonality (<30 deg?)
    // default Gauss linear limited 0.5; // medium non-orthogonality (30 < 45 deg)
    // default Gauss linear limited 0.33; // low non-orthogonality (>45 deg)
 // --------------- or use the following.
    // laplacian(nuEff,U) Gauss linear corrected;          // for good meshes
    laplacian(nuEff,U) Gauss linear limited 0.7;      // for bad meshes
    //laplacian((1|A(U)),p) Gauss linear corrected;      // for good meshes
    laplacian((1|A(U)),p) Gauss linear limited 0.7;  // for bad meshes
    //  for turbulent flow only:
    //  laplacian(DkEff,k) Gauss linear corrected;
    laplacian(DepsilonEff,epsilon) Gauss linear corrected;
    laplacian(DREff,R) Gauss linear corrected;
    // laplacian(DnuTildaEff,nuTilda) Gauss linear corrected; // SA only
    }
fluxRequired {
    default         no;
    p              ;
    phi             ;
    }
gradSchemes {
    default         Gauss linear;  // Gauss linear or leastSquares
    grad(p)         faceLimited leastSquares 0 1;
    grad(U)         Gauss linear;               
    // grad(U)      cellLimited Gauss linear 1;  // Poor quality mesh.
    }
interpolationSchemes { // interpolation used to calculate values on cell faces.
    default  linear;
    U               linear;
    // interpolate(U) reconCentral phi cellLimited leastSquare 1.0; // new tet mesh interpolator. Use with reconCentral in divSchemes
    }
divSchemes { 
    default none; 
    div(phi,U)      Gauss upwind;               // stable: Gauss upwind
    // div(phi,U)    Gauss linearUpwind Gauss; // faster linearUpwind Gauss
    // div(phi,U)    Gauss linearUpwindV Gauss linear; // *
    // div(phi,U)      Gauss reconCentral cellLimited leastSquares 1.0;    // new, tets mesh setting
    // div(phi,k)      Gauss upwind;             // for turbulent flow only
    // div(phi,omega)  Gauss upwind;             // for turbulent flow only
    div(phi,epsilon) Gauss upwind;            // for turbulent flow only
    div(phi,R)      Gauss upwind;             // for turbulent flow only
    div(R)          Gauss linear;             // for turbulent flow only
    // div(phi,nuTilda) Gauss upwind;            // for turbulent SA flow only
    div((nuEff*dev(grad(U).T()))) Gauss linear; // this scheme is not used for
                                                // steady and laminar flow, but
                                                // it is read by the solver, so
                                                // it must be defined.
    div((nuEff*dev(T(grad(U))))) Gauss linear; // not advised, taken from motorbike case
    }
ddtSchemes {default steadyState;}    // no time dependence here
-------------------------------------------------------
In case 23 I calculated k and epsilon for 1% ti. It blew. In case 24 I increased input epsilon from 0.05 to 0.06. Finish epsilon changed from 38800 to 38500. It decreased as I increased the input value. I calculated a new input epsilon using the cylinder diameter instead of the tunnel as 0.017. 24 was updated and restarted at 0.04 s. The out region is not forcing the value after all; it is marked as,
    out
    {
        type            freestream;
        freestreamValue uniform 0.017;
        value           nonuniform List
70
(
17.1646
16.6899
16.1215
15.448
... more items
) ;
)
varying from 18 to 5E-15; so it IS being calculated in spite of me specifying a freeStream value for it. That is the point of the freeStream, perhaps. Outflow is calculated, inflow is specified. The maximum epsilon increased as the input was decreased. -------------------------------------------------------------- I think this is ok. However, starting with other values of k and epsilon resulted in the solution blowing up. Perhaps different solvers would help. Also, what about the k value used at the wall? Zero blows the solution; 1E-6 as used here results in ok results sometimes. First of all, try dropping it to 1E-10 in 25. I'm using smoothSolver for U but PBiCG for epsilon and R. Why not smoothsolver for all? Also, I believe FLUENT uses cellLimited approaches; this might be interesting. Try later. case 25 is as case 24 but with 1E-10 for k on the wall. Inspection of k on the wall shows it is NOT being set; it is being calculated. So that's another experiment gone. Take then, the unstable solution and try with different solvers; looking for stability. 25: ----------------------------------------- Copied from 23 which blew by 0.0005. Solver changes:
epsilon{solver PBiCG; preconditioner DILU; tolerance 1E-9; relTol 0;}

->

epsilon{solver smoothSolver; smoother GaussSeidel; tolerance 1e-6; relTol 0.001; nSweeps 1; maxIter 100;}
This blew by 0.00367. Use same tolerances:
epsilon{solver smoothSolver; smoother GaussSeidel; tolerance 1e-9; relTol 0; nSweeps 1; maxIter 100;}
This blew at 0.000223. Earlier than the relaxed tolerance case. Do the same for R:
R{solver PBiCG; preconditioner DILU; tolerance 1E-9; relTol 0;}

->

R{solver smoothSolver; smoother GaussSeidel; tolerance 1e-9; relTol 0; nSweeps 1; maxIter 100;}
This blew at 0.000233. Time-step continuity errors. Epsilon spent 100 iterations at time=0.000222 and the time-step continuity became poor. I'll try changing nSweeps to 2 for all smooth solved parameters. It ran for longer, to 0.000292. Still blew though. Perhaps it's the p that needs attention...... fvSolution:SIMPLE had residualControl{p 1E-5;} Changed to 1E-7. Blew at the same point. So we still have: high epsilon, low k start and cellLimited solution. The smoother was changed from GaussSeidel to DILUGaussSeidel after an attempt to use the `better with poor meshes, DICGaussSeidel'. This blew, but slowly. Good! cellLimited: This is a change to fvSchemes. interpolationSchemes{default linear; U linear;} was changed to {default linear;} It was not possible to limit this. Note: grad(p) is faceLimited leastSquares 0 1; why? This simulation worked ok with specific turbulence parameters: epsilon in = 0.05; k in = 0.0015; It blew with epsilon in = 0.0007; k in = 0.005, That's progress. Drop k in, increase epsilon in to stabilise.

0/k

FoamFile { version 2.0; format binary; class volScalarField; location "0"; object k; }
dimensions [ 0 2 -2 0 0 0 0 ];
internalField uniform 1;
boundaryField { 
   wall { type compressible::kqRWallFunction; value uniform 1; }
   in  { type turbulentIntensityKineticEnergyInlet; intensity 0.01; value uniform 1; }
   out { type inletOutlet; inletValue uniform 1; value uniform 1; }
   sym { type symmetryPlane; }
   }

0/epsilon

Epsilon is the dissipation factor. Initial epsilon and input epsilon: Set initial epsilon as high to help stability. Calculate epsilon from {http://www.openfoam.org/docs/user/cavity.php#x5-290002.1.7} and http://en.wikipedia.org/wiki/Turbulence_kinetic_energy as,
# turbulent ke
k = lambda ux, uy, uz, ti: 0.5*((ti * ux)**2 + (ti*uy)**2 + (ti*uz)**2) 

# turbulence damping based on mixing length.
epsilon = lambda l, k, Cmu:  Cmu ** 0.75 * k ** 1.5 / l;  

# mu_t http://www.cfd-online.com/Wiki/Standard_k-epsilon_model
turbViscosity = lambda rho, Cmu, k, epsilon: rho * Cmu * k**2 / epsilon 
-------------Calculations-------------------------------
k(10, 0, 0, 0.05) # input turbulent kinetic energy at 5% ti, 10m/s
# 0.125
k(10, 0, 0, 0.01) # input turbulent kinetic energy at 1% ti, 10m/s
# 0.005

Cmu = 0.09 # a constant.
l = 0.07* 0.4; # turbulent mixing length, say 0.07 of the width of the tunnel from the link above.
epsilon(l, k(10, 0, 0, 0.05), Cmu)  # epsilon in noisy tunnel (5% ti)
# 0.26
epsilon(l, k(10, 0, 0, 0.01), Cmu)  # epsilon in quiet tunnel (1% ti)
# 0.0021
l=0.07*0.05 # cylinder diameter.
epsilon(l, k(10, 0, 0, 0.01), Cmu)  # epsilon in quiet free-space using cylinder diameter (1% ti)
# 0.017

So the 1% quiet tunnel has 25 times lower k but 124 times lower epsilon
than the 5% noisy one.  Using the cylinder diameter instead of the
tunnel diameter resulted in epsilon increasing by factor 8.
-----------Examples----------------------------------------------
dimensions [0 2 -3 0 0 0 0];
internalField uniform 1;
boundaryField { 
   in { type fixedValue; value uniform 1; }
   in { type turbulentMixingLengthDissipationRateInlet; value uniform 0.1;}
   out { type fixedValue; value uniform 1; }
   sym { type symmetryPlane; }
   wall { type compressible::epsilonWallFunction; value uniform 1; }
   }
The following converged ok with circularCylinder case 22.
FoamFile{version 2.0; format ascii; class volScalarField; object epsilon;}

boundaryField {
   in{type freestream; freestreamValue uniform 0.05;}
   out{type freestream; freestreamValue uniform 0.05;}
   top{type symmetryPlane;}
   wall{type zeroGradient;} // zeroGradient? calculated?  fixedValue; value uniform 0? 1E-10?
   sym{type symmetryPlane;}
   emptyf{type empty;}
   emptyb{type empty;}
}
internalField uniform 1;
dimensions [0 2 -3 0 0 0 0];