CFD Online Logo CFD Online URL
www.cfd-online.com
[Sponsors]
Home > Forums > OpenFOAM Verification & Validation

OpenFOAM V&V

Register Blogs Members List Search Today's Posts Mark Forums Read

Like Tree5Likes

Reply
 
LinkBack Thread Tools Display Modes
Old   June 22, 2011, 22:56
Default
  #21
Senior Member
 
Martin Hegedus
Join Date: Feb 2011
Posts: 502
Rep Power: 9
Martin Hegedus is on a distinguished road
Interesting, I ran 0 degrees angle of attack on the simpleFoam airfoil2D example and it failed to converge and then ran 2.2e-6 degrees and it converged.

OpenFOAM AirFoil2D example

Not sure what the story is. Maybe I missed a switch or something. Anyone have an idea?
Martin Hegedus is offline   Reply With Quote

Old   June 23, 2011, 04:17
Default
  #22
Senior Member
 
Felix L.
Join Date: Feb 2010
Location: Hamburg
Posts: 165
Rep Power: 9
FelixL is on a distinguished road
Quote:
Originally Posted by Martin Hegedus View Post
Has anyone done a flat plate analysis with OpenFOAM and converged it to machine zero? (Edit: Oh, at low to high reynolds numbers)
Hello, Martin,


I just did a quick simulation of a test case on a 136x96 CVs structured mesh:

http://turbmodels.larc.nasa.gov/flatplate.html

The Reynolds number based on length "1" is 5e6, I used the SpalartAllmaras turbulence model and the simpleFoam algorithm for solving the coupled, steady state incompressible NS-equations.
It's converged below 1e-8 an the residuals decrease is logarithmic (see attached plot).

As for the numerical settings, those are as follows:

fvSolution:

Code:
/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  2.0.0                                 |
|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    location    "system";
    object      fvSolution;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

solvers
{
    p
    {
        solver          PCG;
        preconditioner  DIC;
        tolerance       1e-12;
        relTol          0.01;
    }

     U
    {
        solver          PBiCG;
        preconditioner  DILU;
        tolerance       1e-12;
        relTol          0.01;
    }

     nuTilda
    {
        solver          PBiCG;
        preconditioner  DILU;
        tolerance       1e-12;
        relTol          0.01;
    }
}

SIMPLE
{
    nNonOrthogonalCorrectors 0;
    pRefCell        0;
    pRefValue       0;

     residualControl
    {
        p               1e-8;
        U               1e-8;
        nuTilda         1e-8;
    }
}

relaxationFactors
{
    default         0;
    p               0.3;
    U               0.7;
    nuTilda         0.7;
}


// ************************************************************************* //
fvSchemes:

Code:
/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  2.0.0                                 |
|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    location    "system";
    object      fvSchemes;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

ddtSchemes
{
    default         steadyState;
}

gradSchemes
{
    default         Gauss linear;
    grad(p)         Gauss linear;
    grad(U)         Gauss linear;
}

divSchemes
{
    default         none;

    div(phi,U)      Gauss linearUpwind grad(U);
    div(phi,nuTilda) Gauss linearUpwind grad(nuTilda);

//    div(phi,U)      Gauss upwind;
//    div(phi,nuTilda) Gauss upwind;

    div((nuEff*dev(T(grad(U))))) Gauss linear;
}

laplacianSchemes
{
    default         none;
    laplacian(nuEff,U) Gauss linear corrected;
    laplacian((1|A(U)),p) Gauss linear corrected;
    laplacian(DnuTildaEff,nuTilda) Gauss linear corrected;
    laplacian(1,p)  Gauss linear corrected;
}

interpolationSchemes
{
    default         linear;
    interpolate(U)  linear;
}

snGradSchemes
{
    default         corrected;
}

fluxRequired
{
    default         no;
    p               ;
}


// ************************************************************************* //
If you have further questions, feel free to ask.


Greetings,
Felix.
Attached Images
File Type: png residuals137x97.png (32.7 KB, 139 views)
Ivanet and FrankFlow like this.
FelixL is offline   Reply With Quote

Old   June 23, 2011, 04:57
Default
  #23
Senior Member
 
Martin Hegedus
Join Date: Feb 2011
Posts: 502
Rep Power: 9
Martin Hegedus is on a distinguished road
Thanks, can you post the input decks for the state variables? I'm interested in knowing the boundary conditions you used.
Martin Hegedus is offline   Reply With Quote

Old   June 23, 2011, 06:59
Default
  #24
Senior Member
 
Felix L.
Join Date: Feb 2010
Location: Hamburg
Posts: 165
Rep Power: 9
FelixL is on a distinguished road
You're welcome.

Of course, I will add the boundary conditions later when I come home from work.

So far I can tell you:

INLET:

U: fixedValue (1 0 0)
p: zeroGradient
nuTilda: fixedValue 5e-7 (i guess...)
nut: calculated

OUTLET:

U: zeroGradient
p: fixedValue 0
nuTilda: zeroGradient
nut: calculated

WALL:

U: fixedValue (0 0 0)
p: zeroGradient
nuTilda: fixedValue 0
nut: fixedValue 0

TOP and BOTTOM (in front of the plate):

all: symmetryPlane


I used 2e-7 as viscosity to achieve a reynolds number of 5e6 with the specified inlet velocity.


Greetings,
Felix
FelixL is offline   Reply With Quote

Old   June 23, 2011, 12:44
Default
  #25
Senior Member
 
Felix L.
Join Date: Feb 2010
Location: Hamburg
Posts: 165
Rep Power: 9
FelixL is on a distinguished road
Here are the BC files, as promised.


U:
Code:
/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  2.0.0                                 |
|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       volVectorField;
    object      U;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

dimensions      [0 1 -1 0 0 0 0];

internalField   uniform (1 0 0);

boundaryField
{
    "(bottom|top)"
    {
        type            symmetryPlane;
    }

    outlet
    {
        type            zeroGradient;
    }

    inlet
    {
        type            fixedValue;
        value           $internalField;
    }

    plate
    {
        type            fixedValue;
        value           uniform (0 0 0);
    }

    "(front|back)"
    {
        type            empty;
    }
}

// ************************************************************************* //
p:
Code:
/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  2.0.0                                 |
|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       volScalarField;
    object      p;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

dimensions      [0 2 -2 0 0 0 0];

internalField   uniform 0;

boundaryField
{
    "(bottom|top)"
    {
        type            symmetryPlane;
    }

    outlet
    {
        type            fixedValue;
        value           $internalField;
    }

    inlet
    {
        type            zeroGradient;
    }

    plate
    {
        type            zeroGradient;
    }

    "(front|back)"
    {
        type            empty;
    }
}

// ************************************************************************* //
nuTilda:

Code:
/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  2.0.0                                 |
|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       volScalarField;
    object      nuTilda;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

dimensions      [0 2 -1 0 0 0 0];

internalField   uniform 5.0e-7;

boundaryField
{
    "(bottom|top)"
    {
        type            symmetryPlane;
    }

    outlet
    {
        type            zeroGradient;
    }

    inlet
    {
        type            fixedValue;
        value           $internalField;
    }

    plate
    {
        type            fixedValue;
        value           uniform 0;
    }

    "(front|back)"
    {
        type            empty;
    }
}

// ************************************************************************* //
nut:

Code:
/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  2.0.0                                 |
|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       volScalarField;
    object      nut;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

dimensions      [0 2 -1 0 0 0 0];

internalField   uniform 5.0e-7;

boundaryField
{
    "(bottom|top)"
    {
        type            symmetryPlane;
    }

    "(outlet|inlet)"
    {
        type            calculated;
    }

    plate
    {
        type            fixedValue;
        value           uniform 0;
    }

    "(front|back)"
    {
        type            empty;
    }
}

// ************************************************************************* //
Ivanet likes this.
FelixL is offline   Reply With Quote

Old   June 23, 2011, 17:52
Default
  #26
Senior Member
 
santiagomarquezd's Avatar
 
Santiago Marquez Damian
Join Date: Aug 2009
Location: Santa Fe, Santa Fe, Argentina
Posts: 418
Rep Power: 14
santiagomarquezd will become famous soon enough
Martin, threads I was referring to are:

SimpleFoam convergence problems

Comparison of axisymmetric case, Starccm+ and OpenFOAM


nevertheless today I found this one:

Convergence

where Henry W. explains the topic about p residuals stagnation, in post #2 he states:

"We don't normalise the residuals the same way as other codes and one consequence is that p may appear not to converge adequately. However, we find that so long as U has converged well it doesn't matter that the p residual is higher. The best thing is to look at the way the fields are evolving."

Problem isn't clear for me, though.

Regards
Tushar@cfd likes this.
__________________
Santiago MÁRQUEZ DAMIÁN, Ph.D.
Post-doctoral Fellow
Research Center for Computational Mechanics (CIMEC) - CONICET/FICH-UNL
T.E.: 54-342-4511594 Ext. 1005
Güemes 3450 - (3000) Santa Fe
Santa Fe - Argentina
http://www.cimec.org.ar
santiagomarquezd is offline   Reply With Quote

Old   June 23, 2011, 19:01
Default
  #27
Senior Member
 
Martin Hegedus
Join Date: Feb 2011
Posts: 502
Rep Power: 9
Martin Hegedus is on a distinguished road
Quote:
Originally Posted by santiagomarquezd View Post
Martin, threads I was referring to are:

SimpleFoam convergence problems

Comparison of axisymmetric case, Starccm+ and OpenFOAM


nevertheless today I found this one:

Convergence

where Henry W. explains the topic about p residuals stagnation, in post #2 he states:

"We don't normalise the residuals the same way as other codes and one consequence is that p may appear not to converge adequately. However, we find that so long as U has converged well it doesn't matter that the p residual is higher. The best thing is to look at the way the fields are evolving."

Problem isn't clear for me, though.

Regards
Yes, there are different ways of determining residuals, one can use the L2-norm of the state vector or the right hand side vector. If the L2-norm of the RHS is used, then it can be used in it's raw form or normalized to represent how the solution marches forward for a local time step or constant time step method.

However, if something isn't clear to so many people, then there might be a problem. I know, OpenFOAM has been used by a lot of people and one would expect this issue to be taken care of in the past... So the problem isn't clear for me either. If I didn't know that so many people used the code for such a length of time, from past experience developing my own codes, I'd say there is a good chance there is a bug in the code. Sadly, I have a lot of experience with bugs, more than I want! Thus the strong need for V&V.

However, on this thread FelixL presented residuals that went past 1.e-8 and seemed to keep going. Given that the airfoil2D case residuals, except at zero angle of attack, fell to the region of 1.0e-10 to 1.0e-12, I suspect that FelixL's flat plate will bottom out at 1.0e-12 or a little past that, probably 1.0e-13. Therefore it seems that 1.0e-6 is not machine zero for OpenFOAM.

For the airfoil case I ran 8, 4, 2, 1, 0.5, 0.01, 0.001, 2.2e-6, and 0 degrees angle of attack. For angles of attack greater than 0.01, the residuals dropped below 1.0e-10. Angles less than 0.01 will be a little different because of the fine vertical grid spacing at z=0 and the fact that the wake must exit the back end. There will be a little bit of a convergence battle going on there. However, that does not explain the jump in residual from an angle of attack of 2.2e-6 to 0.
Martin Hegedus is offline   Reply With Quote

Old   June 23, 2011, 19:21
Default
  #28
Senior Member
 
Martin Hegedus
Join Date: Feb 2011
Posts: 502
Rep Power: 9
Martin Hegedus is on a distinguished road
Quote:
Originally Posted by FelixL View Post
Here are the BC files, as promised.
Thanks for the decks. I'm trying to compile OpenFOAM 2.0 now and ran into "calls to overloaded 'XYZ' is ambigous' errors. I guess I'll need to update my version of gcc.

Can you do me a favor and run your flat plate case with the top farfield B.C. as freestream rather than symmetry? If you don't have the time, I understand.

The numerics of the freestream and symmetry boundary are somewhat similar in the sense they both impose a value of p and tangential velocity (which should be somewhat similar since the boundary is sufficiently far away) and the normal velocity is 0. The idea is to see if the airfoil2D issue shows up.
Martin Hegedus is offline   Reply With Quote

Old   June 24, 2011, 02:21
Default
  #29
Senior Member
 
Felix L.
Join Date: Feb 2010
Location: Hamburg
Posts: 165
Rep Power: 9
FelixL is on a distinguished road
Good morning, everyone,

I'm making this quick, will comment later.

I ran the test Martin requested using freestream as the top boundary condition. My experience with this BC isn't really good so I tend to avoid it. The plot below shows, that the pressure-residuals stall at about 1e-5 and the other residuals stall later as a consequence of that.


Greetings,
Felix.
Attached Images
File Type: png reisuals137x97_freestream.png (33.6 KB, 88 views)
FelixL is offline   Reply With Quote

Old   June 24, 2011, 02:49
Default
  #30
Senior Member
 
Martin Hegedus
Join Date: Feb 2011
Posts: 502
Rep Power: 9
Martin Hegedus is on a distinguished road
Quote:
Originally Posted by pbohorquez View Post
Nice thoughts. The flat plane analysis is a good suggestion. If someone knows the answer please share it.

With respect to the shear stress in the cell, figure 16 in Alves, Oliveira & Pinho (2003), www.fe.up.pt/~fpinho/pdfs/ijnmf1.pdf, came to my mind. I don't know if it is a crazy idea but iterations in SIMPLE are analogous to "pseudo-time", so maybe there is some analogy between the asymptotic values for the pressure and for \tau_{xx}.
Patricio, when you ran your bullet case, what did you use as your outer boundary condition? Freestream at zero angle of attack?
Martin Hegedus is offline   Reply With Quote

Old   June 24, 2011, 03:03
Default
  #31
Senior Member
 
Martin Hegedus
Join Date: Feb 2011
Posts: 502
Rep Power: 9
Martin Hegedus is on a distinguished road
Quote:
Originally Posted by FelixL View Post
Good morning, everyone,

I'm making this quick, will comment later.

I ran the test Martin requested using freestream as the top boundary condition. My experience with this BC isn't really good so I tend to avoid it. The plot below shows, that the pressure-residuals stall at about 1e-5 and the other residuals stall later as a consequence of that.


Greetings,
Felix.
Thanks. I assume, based on the 2D airfoil case, if you gave it an epsilon of w velocity it would converge. There is also the possibility that if you set the plate to symmetry the case still would not converge, assuming the interior was initialized to something other than freestream. If the code worked correctly it should converge to freestream.

I have no idea why the code is doing this, other than to say there is a bug.
Martin Hegedus is offline   Reply With Quote

Old   June 24, 2011, 03:27
Default
  #32
Senior Member
 
Felix L.
Join Date: Feb 2010
Location: Hamburg
Posts: 165
Rep Power: 9
FelixL is on a distinguished road
Good morning, Martin,


at first let me comment on your post #28:

Quote:
The numerics of the freestream and symmetry boundary are somewhat similar in the sense they both impose a value of p and tangential velocity (which should be somewhat similar since the boundary is sufficiently far away) and the normal velocity is 0. The idea is to see if the airfoil2D issue shows up.
This is not entirely correct. The freestream boundary condition doesn't set a velocity value tangential to the boundary - basically it just works like an inletOutlet-BC for the velocity (and scalars other than pressure) and zeroGradient for pressure.
It means: when the flux vector at the boundary points inwards, the velocity is set to a fixed value of freestreamValue and the pressure is set to zeroGradient. If the flux vector points outwards, it's vice versa.

According to your experiences there might be an explanation: if the freestream velocity is parallel to the boundary (like in my flat plate case), the flux vector component normal to the boundary is zero. This could be causing all this trouble getting the residuals down to machine precision. This might actually explain why it's working for you when you set a slight velocity component in boundary normal direction. Or is the domain of your airfoil case circular?


Greetings,
Felix.
FelixL is offline   Reply With Quote

Old   June 24, 2011, 04:07
Default
  #33
Senior Member
 
Martin Hegedus
Join Date: Feb 2011
Posts: 502
Rep Power: 9
Martin Hegedus is on a distinguished road
Quote:
Originally Posted by FelixL View Post
Good morning, Martin,


at first let me comment on your post #28:



This is not entirely correct. The freestream boundary condition doesn't set a velocity value tangential to the boundary - basically it just works like an inletOutlet-BC for the velocity (and scalars other than pressure) and zeroGradient for pressure.
It means: when the flux vector at the boundary points inwards, the velocity is set to a fixed value of freestreamValue and the pressure is set to zeroGradient. If the flux vector points outwards, it's vice versa.
Interesting, I didn't realize. So instead one should use fixedValue for actually setting the B.C. values to freestream conditions?

Quote:
According to your experiences there might be an explanation: if the freestream velocity is parallel to the boundary (like in my flat plate case), the flux vector component normal to the boundary is zero. This could be causing all this trouble getting the residuals down to machine precision. This might actually explain why it's working for you when you set a slight velocity component in boundary normal direction. Or is the domain of your airfoil case circular?


Greetings,
Felix.
The airfoil2D case is the one supplied with OpenFOAM. Its a C grid. So, yes, it's got the same condition as the flat plate outer B.C.

Is the switch for in/out for the freestream B.C. based on the local normal velocity or the freestream normal velocity component, i.e. Vinf dot n? The plate example should be forcing the flow outward by a small amount, granted very small.
Martin Hegedus is offline   Reply With Quote

Old   June 24, 2011, 04:18
Default
  #34
Senior Member
 
Felix L.
Join Date: Feb 2010
Location: Hamburg
Posts: 165
Rep Power: 9
FelixL is on a distinguished road
It is common practice to set U, nuTilda, k, epsilon etc. to fixedValue and pressure to zeroGradient everywhere where the flux vector is expected to point inside the domain. Accordingly, U, nuTilda, and so on have to be set to zeroGradient and pressure to a fixedValue everywhere where the flux vector points outside the domain.

Problem is, sometimes (e.g. when you have a vortex shedding problem) you might have regions with inflow at the outlet. That's where the inletOutlet BC comes in handy.


As far as I know, the switch for in/out is determined by the freestream velocity. So the velocity vector should be tangential at the top boundary at my flat plate test case, no outward flow there (i.e. same as symmetry). But to confirm that I would need to check the results which I can't access right now.


Greetings,
Felix.
FelixL is offline   Reply With Quote

Old   June 24, 2011, 09:39
Default
  #35
Member
 
Patricio Bohorquez
Join Date: Mar 2009
Location: Jaén, Spain
Posts: 94
Rep Power: 8
pbohorquez is on a distinguished road
Quote:
Originally Posted by Martin Hegedus View Post
Patricio, when you ran your bullet case, what did you use as your outer boundary condition? Freestream at zero angle of attack?
I employed slip and zeroGradient BCs for velocity and pressure fields, respectively.
pbohorquez is offline   Reply With Quote

Old   June 24, 2011, 11:14
Default
  #36
Member
 
Patricio Bohorquez
Join Date: Mar 2009
Location: Jaén, Spain
Posts: 94
Rep Power: 8
pbohorquez is on a distinguished road
Quote:
Originally Posted by Martin Hegedus View Post
Patricio, when you ran your bullet case, what did you use as your outer boundary condition? Freestream at zero angle of attack?
A better convergence result was found by eliminating the outer domain (which was aligned with the free stream) and by replacing it with a hemisphere. Then, setting as inlet (outlet) boundary condition fixedValue (zeroGradient) for velocity and zeroGradient (fixedValue) for pressure, I reached machine zero.
Attached Images
File Type: jpg residuals.jpg (33.4 KB, 97 views)

Last edited by pbohorquez; June 25, 2011 at 04:50.
pbohorquez is offline   Reply With Quote

Old   June 24, 2011, 15:14
Default
  #37
Senior Member
 
Martin Hegedus
Join Date: Feb 2011
Posts: 502
Rep Power: 9
Martin Hegedus is on a distinguished road
I messed up describing the outer boundary for the airfoil2D case. It is a box with the inlet being the front, top, and bottom sides. Not a C grid. The back side is the outlet.

I changed the inlet condition to a wall and set the values (fixedValue) to the freestream values. It converged. Plot is shown below.

I then took the case above and set the pressure to zero gradient for the inlet boundary, and that converged to.

I then wanted to set the front face to freestream V and zero gradient pressure and the top and bottom to freestream p and zero gradient V, unfortunately I didn't have the time to extract the front face from the inlet boundary. The cell faces for the front face are not a continuous set.
Attached Images
File Type: png resid.png (4.0 KB, 76 views)
Martin Hegedus is offline   Reply With Quote

Old   June 24, 2011, 15:36
Default
  #38
Senior Member
 
Martin Hegedus
Join Date: Feb 2011
Posts: 502
Rep Power: 9
Martin Hegedus is on a distinguished road
Thanks for all the input.
Martin Hegedus is offline   Reply With Quote

Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Superlinear speedup in OpenFOAM 13 msrinath80 OpenFOAM Running, Solving & CFD 18 March 3, 2015 06:36
Cross-compiling OpenFOAM 1.7.0 on Linux for Windows 32 and 64bits with Mingw-w64 wyldckat OpenFOAM Announcements from Other Sources 3 September 8, 2010 06:25
Modified OpenFOAM Forum Structure and New Mailing-List pete Site News & Announcements 0 June 29, 2009 05:56
64bitrhel5 OF installation instructions mirko OpenFOAM Installation 2 August 12, 2008 18:07
OpenFOAM Debian packaging current status problems and TODOs oseen OpenFOAM Installation 9 August 26, 2007 13:50


All times are GMT -4. The time now is 01:09.