]> Pileus Git - ~andy/sunrise/commitdiff
sci-libs/openfoam-src: Update patches for the OpenFOAM sources
authorOliver Borm (oli) <oli.borm@web.de>
Thu, 28 Aug 2008 08:21:36 +0000 (08:21 +0000)
committerOliver Borm (oli) <oli.borm@web.de>
Thu, 28 Aug 2008 08:21:36 +0000 (08:21 +0000)
svn path=/sunrise/; revision=6869

sci-libs/openfoam-src/ChangeLog
sci-libs/openfoam-src/Manifest
sci-libs/openfoam-src/files/openfoam-src-1.4.1_p20080827.patch [new file with mode: 0644]
sci-libs/openfoam-src/files/openfoam-src-compile-1.4.1_p20080827.patch [new file with mode: 0644]
sci-libs/openfoam-src/openfoam-src-1.4.1_p20080827.ebuild [new file with mode: 0644]

index 922052ef9b633ff6676d9028faf364d0aa3e690d..6ca2e901c9bd294897a48fb74632a624d12f4112 100644 (file)
@@ -2,6 +2,12 @@
 # Copyright 1999-2008 Gentoo Foundation; Distributed under the GPL v2
 # $Header: $
 
+  28 Aug 2008; Oliver Borm (boroli) <oli.borm@web.de>
+  +openfoam-src-1.4.1_p20080827.ebuild,
+  +files/openfoam-src-1.4.1_p20080827.patch,
+  +files/openfoam-src-compile-1.4.1_p20080827.patch:
+  Update patches for the OpenFOAM sources
+
   04 Aug 2008; Oliver Borm (boroli) <oli.borm@web.de>
   openfoam-src-1.4.1_p20080131.ebuild, openfoam-src-1.5.ebuild:
   Changed version dependencies
index d1e0e14e0a34f1ec914cd1e09ab055cb581bfc7b..dc1666ffdad82b3d681985b31ae4767b2cf2f6f7 100644 (file)
@@ -1,8 +1,11 @@
 AUX OpenFOAM-1.5-compile.patch 15006 RMD160 ba8423526b5244e3c30d9d38830a2fe79e3c2a1a SHA1 7d275039cea1fe8a3c28fafeda1fef3665360f83 SHA256 6cb940b6c559a846ec65184db8f7c7966d1bef105d5bdad6ca4afd3f1b4d5b89
+AUX openfoam-src-1.4.1_p20080827.patch 31197 RMD160 83bbf48def96090dfe5ba37e702a3ce4ce3f331a SHA1 ece3c78b456ec4e82374c53c82aaa9bc2b45b5bc SHA256 3c3702a7539ca2d54ce09e4cdd14b8425d598d6ff8c811dea7d407c8a5bfa9cd
+AUX openfoam-src-compile-1.4.1_p20080827.patch 6143 RMD160 ab03b9d55ee2d6eb3515fe2430e42f2204177bb9 SHA1 8301b591701f2bf6cb182f1cd415d0348e46d98b SHA256 999098d347d417ff88724ea30c6a18b7cc3a8bbecfcb23b5cfdcbe17afdb58c4
 DIST OpenFOAM-1.4.1.General.gtgz 148526808 RMD160 e25d8bdfa63f15eeeb7b9f1cef09cc26fb7bef74 SHA1 56bbbf5b33c49d08cda35088a65b24d7dc59014f SHA256 c765b36639b42c737bc9ba1ac13c0f66efe20ee4a9f71a6ef987e86ebd50da28
 DIST OpenFOAM-1.5.General.gtgz 117334661 RMD160 bccaa9f8f99d31aa6c791d40b30dd9ad4f534041 SHA1 3577f562dc1f54bb32e1e0ef43f979418212c2f7 SHA256 d4cba2d9475523a53cea80b8d39da70d12bfffb9f46e2d1442946ba4a23efd31
 DIST openfoam-src-1.4.1_p20080131-patches-0.1.tar.bz2 6927 RMD160 5732737a34911ee4060697270cdab90c2d0d0a41 SHA1 1d1449de56aff8b8e8d28645f651ede4f4e9e934 SHA256 24683324d1533c5aee9c067b7b338a49f2d1be7866a4b71127e1bdd6f5b772af
 EBUILD openfoam-src-1.4.1_p20080131.ebuild 1078 RMD160 b77b98b3d6f258f06a4a74fd7c89189e0e5e66e9 SHA1 d80a1313763266eff56e8f3b4d551b379e77a198 SHA256 e895a86991df5cc1962c29c587634fb29fa2c5f38641a8b5a91fedacf7369cf3
+EBUILD openfoam-src-1.4.1_p20080827.ebuild 1008 RMD160 c4e6e82b5428a20ca44dad5ebc93f32b3792101e SHA1 50edb31bb688460f1273f60a04ad3ea4f79d00ff SHA256 a2cbf83832f408dbc4b257bf18eec6ada66b01caaa45db863b1b105be22ca784
 EBUILD openfoam-src-1.5.ebuild 906 RMD160 c69dc78b02d216716f28fbd8a9c785fdbb666638 SHA1 9fdd95c4070f71009414bdbcfaee62840e2d9cef SHA256 f8eb100ad1a018c9b17a8a4c4af727b19b82bab27fd68523a9fbbb934340f776
-MISC ChangeLog 1472 RMD160 b7e61b175fb13e0f3fc16e821727fc95948093f6 SHA1 6cc64cefe8ab87ec09f4af431ddf061d1a71a7a9 SHA256 208d04125f98966223cd6a1a8be34da03866ee51831c8949fbea14ffc7cbe871
+MISC ChangeLog 1707 RMD160 352bb7c2a444ea2f9c66e40e32bbe30242746ebd SHA1 c5148853c5f8c4528fee30bf8333f476f224955e SHA256 060f1359e6d567023c6ca0e52a7ff47961904249302e49c97a44d5fc2c82c6f6
 MISC metadata.xml 170 RMD160 645927a396fdc21cdeb089fe42c5397332420ea6 SHA1 ac7f48a14fec325926f9ce1be8fbf1f311b4f2e4 SHA256 d797a2ec6f9dc516c9f9c1a758ee87ad3e8c43101b5dc76c2f872d5bd4639b42
diff --git a/sci-libs/openfoam-src/files/openfoam-src-1.4.1_p20080827.patch b/sci-libs/openfoam-src/files/openfoam-src-1.4.1_p20080827.patch
new file mode 100644 (file)
index 0000000..ddd5cce
--- /dev/null
@@ -0,0 +1,1003 @@
+Index: LESmodels/compressible/SpalartAllmaras/SpalartAllmaras.C
+===================================================================
+--- src/LESmodels/compressible/SpalartAllmaras/SpalartAllmaras.C       (Revision 30)
++++ src/LESmodels/compressible/SpalartAllmaras/SpalartAllmaras.C       (Revision 784)
+@@ -44,29 +44,38 @@
+ // * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * * //
+ tmp<volScalarField> SpalartAllmaras::fv1() const
+ {
+     volScalarField chi3 = pow(nuTilda_/(mu()/rho()), 3);
+-
+     return chi3/(chi3 + pow(Cv1_, 3));
+ }
+ tmp<volScalarField> SpalartAllmaras::fv2() const
+ {
+     volScalarField chi = nuTilda_/(mu()/rho());
+     return scalar(1) - chi/(scalar(1) + chi*fv1());
+ }
+ tmp<volScalarField> SpalartAllmaras::fw(const volScalarField& Stilda) const
+ {
+-    volScalarField r = nuTilda_/(Stilda*sqr(kappa_*dTilda_));
++    volScalarField r = min
++    (
++        nuTilda_
++       /(
++           max(Stilda, dimensionedScalar("SMALL", Stilda.dimensions(), SMALL))
++          *sqr(kappa_*dTilda_)
++        ),
++        scalar(10.0)
++    );
++    r.boundaryField() == 0.0;
++
+     volScalarField g = r + Cw2_*(pow(r, 6) - r);
+     return g*pow((1.0 + pow(Cw3_, 6))/(pow(g, 6) + pow(Cw3_, 6)), 1.0/6.0);
+ }
+ // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Index: transportModels/interfaceProperties/gammaContactAngle/dynamicGammaContactAngle/dynamicGammaContactAngleFvPatchScalarField.C
+===================================================================
+--- src/transportModels/interfaceProperties/gammaContactAngle/dynamicGammaContactAngle/dynamicGammaContactAngleFvPatchScalarField.C    (Revision 30)
++++ src/transportModels/interfaceProperties/gammaContactAngle/dynamicGammaContactAngle/dynamicGammaContactAngleFvPatchScalarField.C    (Revision 784)
+@@ -60,15 +60,15 @@
+     const fvPatchFieldMapper& mapper
+ )
+ :
+     gammaContactAngleFvPatchScalarField(gcpsf, p, iF, mapper),
+     theta0_(gcpsf.theta0_),
+     uTheta_(gcpsf.uTheta_),
+     thetaA_(gcpsf.thetaA_),
+-    thetaR_(gcpsf.thetaA_)
++    thetaR_(gcpsf.thetaR_)
+ {}
+ dynamicGammaContactAngleFvPatchScalarField::
+ dynamicGammaContactAngleFvPatchScalarField
+ (
+     const fvPatch& p,
+
+Index: dynamicMesh/meshCut/meshModifiers/multiDirRefinement/multiDirRefinement.C
+===================================================================
+--- src/dynamicMesh/meshCut/meshModifiers/multiDirRefinement/multiDirRefinement.C      (Revision 30)
++++ src/dynamicMesh/meshCut/meshModifiers/multiDirRefinement/multiDirRefinement.C      (Revision 784)
+@@ -343,16 +343,16 @@
+             }
+         }
+     }
+     hexRefiner.setRefinement(consistentCells, meshMod);
+-    // Use inflation
+-    autoPtr<mapPolyMesh> morphMapPtr = meshMod.changeMesh(mesh, true, true);
++    // Change mesh, no inflation
++    autoPtr<mapPolyMesh> morphMapPtr = meshMod.changeMesh(mesh, false, true);
+     const mapPolyMesh& morphMap = morphMapPtr();
+     if (morphMap.hasMotionPoints())
+     {
+         mesh.movePoints(morphMap.preMotionPoints());
+     }
+@@ -365,47 +365,31 @@
+     {
+         Pout<< "multiDirRefinement : updated mesh at time "
+             << mesh.time().timeName() << endl;
+     }
+     hexRefiner.updateMesh(morphMap);
+-    // Take over split pattern from hex refiner. (should be empty at this
+-    // point)
+-
+-    // From old cell label to index
+-    Map<label> consistentSet(2*consistentCells.size());
+-
+-    forAll(consistentCells, i)
+-    {
+-        consistentSet.insert(consistentCells[i], i);
+-    }
+-
+     // Collect all cells originating from same old cell (original + 7 extra)
+-    addedCells_.setSize(consistentCells.size());
+-    forAll(addedCells_, i)
++    forAll(consistentCells, i)
+     {
+-        addedCells_[i].setSize(8);
++        addedCells_[consistentCells[i]].setSize(8);
+     }
+-    labelList nAddedCells(consistentCells.size(), 0);
++    labelList nAddedCells(addedCells_.size(), 0);
+     const labelList& cellMap = morphMap.cellMap();
+     forAll(cellMap, cellI)
+     {
+         label oldCellI = cellMap[cellI];
+-        Map<label>::const_iterator iter = consistentSet.find(oldCellI);
+-
+-        if (iter != consistentSet.end())
++        if (addedCells_[oldCellI].size() > 0)
+         {
+-            label index = iter();
+-
+-            addedCells_[nAddedCells[index]++] = cellI;
++            addedCells_[oldCellI][nAddedCells[oldCellI]++] = cellI;
+         }
+     }
+ }
+ void Foam::multiDirRefinement::refineAllDirs
+ (
+
+Index: OpenFOAM/db/error/error.H
+===================================================================
+--- src/OpenFOAM/db/error/error.H      (Revision 30)
++++ src/OpenFOAM/db/error/error.H      (Revision 784)
+@@ -80,14 +80,17 @@
+         //- Construct from title string
+         error(const string& title);
+         //- Construct from dictionary
+         error(const dictionary& errDict);
++        //- Construct as copy
++        error(const error& err);
++
+     // Destructor
+         ~error();
+     // Member functions
+Index: OpenFOAM/db/error/error.C
+===================================================================
+--- src/OpenFOAM/db/error/error.C      (Revision 30)
++++ src/OpenFOAM/db/error/error.C      (Revision 784)
+@@ -76,14 +76,28 @@
+                "cannot open error stream"
+             << endl;
+         ::exit(1);
+     }
+ }
++error::error(const error& err)
++:
++    messageStream(err),
++    functionName_(err.functionName_),
++    sourceFileName_(err.sourceFileName_),
++    sourceFileLineNumber_(err.sourceFileLineNumber_),
++    abort_(err.abort_),
++    throwExceptions_(err.throwExceptions_),
++    messageStreamPtr_(new OStringStream(*err.messageStreamPtr_))
++{
++    //*messageStreamPtr_ << err.message();
++}
++
++
+ error::~error()
+ {
+     delete messageStreamPtr_;
+ }
+ OSstream& error::operator()
+@@ -251,14 +265,15 @@
+     return os;
+ }
+ // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+ // Global error definitions
+-error FatalError ("--> FOAM FATAL ERROR : ");
++error FatalError("--> FOAM FATAL ERROR : ");
+ // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+ } // End namespace Foam
+ // ************************************************************************* //
++
+Index: OpenFOAM/db/Time/findTimes.C
+===================================================================
+--- src/OpenFOAM/db/Time/findTimes.C   (Revision 30)
++++ src/OpenFOAM/db/Time/findTimes.C   (Revision 784)
+@@ -52,21 +52,23 @@
+     fileNameList dirEntries(readDir(directory, fileName::DIRECTORY));
+     // Initialise instant list
+     instantList Times(dirEntries.size() + 1);
+     label nTimes = 0;
+     // Check for "constant"
++    bool haveConstant = false;
+     forAll(dirEntries, i)
+     {
+         if (dirEntries[i] == "constant")
+         {
+             Times[nTimes].value() = 0;
+             Times[nTimes].name() = dirEntries[i];
+             nTimes++;
++            haveConstant = true;
+             break;
+         }
+     }
+     // Read and parse all the entries in the directory
+     forAll(dirEntries, i)
+     {
+@@ -80,17 +82,24 @@
+             nTimes++;
+         }
+     }
+     // Reset the length of the times list
+     Times.setSize(nTimes);
+-    if (nTimes > 1)
++    if (haveConstant)
+     {
+-        std::sort(&Times[1], Times.end(), instant::less());
++        if (nTimes > 2)
++        {
++            std::sort(&Times[1], Times.end(), instant::less());
++        }
++    }
++    else if (nTimes > 1)
++    {
++        std::sort(&Times[0], Times.end(), instant::less());
+     }
+     return Times;
+ }
+ // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+Index: OpenFOAM/db/dictionary/dictionary.C
+===================================================================
+--- src/OpenFOAM/db/dictionary/dictionary.C    (Revision 30)
++++ src/OpenFOAM/db/dictionary/dictionary.C    (Revision 784)
+@@ -119,14 +119,20 @@
+     }
+     else
+     {
+         return -1;
+     }
+ }
++// Clear the Dictionary
++void Foam::dictionary::clear()
++{
++    IDLList<entry>::clear();
++    hashedEntries_.clear();
++}
+ // Find and return entry
+ bool Foam::dictionary::found(const word& keyword) const
+ {
+     return hashedEntries_.found(keyword);
+ }
+Index: OpenFOAM/db/dictionary/dictionary.H
+===================================================================
+--- src/OpenFOAM/db/dictionary/dictionary.H    (Revision 30)
++++ src/OpenFOAM/db/dictionary/dictionary.H    (Revision 784)
+@@ -126,14 +126,16 @@
+         //- Return line number of first token in dictionary
+         label startLineNumber() const;
+         //- Return line number of last token in dictionary
+         label endLineNumber() const;
++        //- Clear the dictionary
++        void clear();
+         // Search and lookup
+             //- Search dictionary for given keyword
+             bool found(const word& keyword) const;
+             //- Find and return an entry data stream
+Index: OpenFOAM/db/IOstreams/StringStreams/OStringStream.H
+===================================================================
+--- src/OpenFOAM/db/IOstreams/StringStreams/OStringStream.H    (Revision 30)
++++ src/OpenFOAM/db/IOstreams/StringStreams/OStringStream.H    (Revision 784)
+@@ -63,21 +63,41 @@
+         (
+             streamFormat format=ASCII,
+             versionNumber version=currentVersion
+         )
+         :
+             OSstream
+             (
+-                *(new std::ostringstream()),
++               *(new std::ostringstream()),
+                 "OStringStream.sinkFile",
+                 format,
+                 version
+             )
+         {}
++        //- Construct as copy
++        OStringStream(const OStringStream& oss)
++        :
++            OSstream
++            (
++               *(
++                    new std::ostringstream
++                    (
++                        dynamic_cast<const std::ostringstream&>
++                        (
++                            oss.stream()
++                        ).str()
++                    )
++                ),
++                oss.name(),
++                oss.format(),
++                oss.version()
++            )
++        {}
++
+     // Destructor
+         ~OStringStream()
+         {
+             delete &dynamic_cast<std::ostringstream&>(stream());
+         }
+Index: OpenFOAM/fields/pointPatchFields/pointPatchField/pointPatchFieldFunctions.H
+===================================================================
+--- src/OpenFOAM/fields/pointPatchFields/pointPatchField/pointPatchFieldFunctions.H    (Revision 30)
++++ src/OpenFOAM/fields/pointPatchFields/pointPatchField/pointPatchFieldFunctions.H    (Revision 784)
+@@ -214,32 +214,28 @@
+ #undef BINARY_TYPE_OPERATOR_FT
+ #define PRODUCT_OPERATOR(product, op, opFunc)                                 \
+                                                                               \
+ template                                                                      \
+ <                                                                             \
+-    template<class> class PatchField,                                         \
+-    class pointPatch,                                                         \
+     class Type1,                                                              \
+     class Type2                                                               \
+ >                                                                             \
+ inline void opFunc                                                            \
+ (                                                                             \
+     pointPatchField                                                           \
+     <typename product<Type1, Type2>::type>& f,                                \
+     const pointPatchField<Type1>& f1,                                         \
+     const pointPatchField<Type2>& f2                                          \
+ )                                                                             \
+ {}                                                                            \
+                                                                               \
+ template                                                                      \
+ <                                                                             \
+-    template<class> class PatchField,                                         \
+-    class pointPatch,                                                         \
+     class Type,                                                               \
+     class Form,                                                               \
+     class Cmpt,                                                               \
+     int nCmpt                                                                 \
+ >                                                                             \
+ inline void opFunc                                                            \
+ (                                                                             \
+@@ -248,16 +244,14 @@
+     const pointPatchField<Type>& f1,                                          \
+     const VectorSpace<Form,Cmpt,nCmpt>& vs                                    \
+ )                                                                             \
+ {}                                                                            \
+                                                                               \
+ template                                                                      \
+ <                                                                             \
+-    template<class> class PatchField,                                         \
+-    class pointPatch,                                                         \
+     class Form,                                                               \
+     class Cmpt,                                                               \
+     int nCmpt,                                                                \
+     class Type                                                                \
+ >                                                                             \
+ inline void opFunc                                                            \
+ (                                                                             \
+@@ -272,112 +266,99 @@
+ PRODUCT_OPERATOR(crossProduct, ^, cross)
+ PRODUCT_OPERATOR(innerProduct, &, dot)
+ PRODUCT_OPERATOR(scalarProduct, &&, dotdot)
+ #undef PRODUCT_OPERATOR
+-template<template<class> class PatchField, class pointPatch>
+-void hdual
++inline void hdual
+ (
+     pointPatchField<vector>&,
+     const pointPatchField<tensor>&
+ )
+ {}
+-template<template<class> class PatchField, class pointPatch>
+-void hdual
++inline void hdual
+ (
+     pointPatchField<tensor>&,
+     const pointPatchField<vector>&
+ )
+ {}
+-template<template<class> class PatchField, class pointPatch>
+-void diag
++inline void diag
+ (
+     pointPatchField<vector>&,
+     const pointPatchField<tensor>&
+ )
+ {}
+-template<template<class> class PatchField, class pointPatch>
+-void tr
++inline void tr
+ (
+     pointPatchField<scalar>&,
+     const pointPatchField<tensor>&
+ )
+ {}
+-template<template<class> class PatchField, class pointPatch>
+-void dev
++inline void dev
+ (
+     pointPatchField<tensor>&,
+     const pointPatchField<tensor>&
+ )
+ {}
+-template<template<class> class PatchField, class pointPatch>
+-void dev2
++inline void dev2
+ (
+     pointPatchField<tensor>&,
+     const pointPatchField<tensor>&
+ )
+ {}
+-template<template<class> class PatchField, class pointPatch>
+-void det
++inline void det
+ (
+     pointPatchField<scalar>&,
+     const pointPatchField<tensor>&
+ )
+ {}
+-template<template<class> class PatchField, class pointPatch>
+-void inv
++inline void inv
+ (
+     pointPatchField<tensor>&,
+     const pointPatchField<tensor>&
+ )
+ {}
+-template<template<class> class PatchField, class pointPatch>
+-void symm
++inline void symm
+ (
+     pointPatchField<tensor>&,
+     const pointPatchField<tensor>&
+ )
+ {}
+-template<template<class> class PatchField, class pointPatch>
+-void twoSymm
++inline void twoSymm
+ (
+     pointPatchField<tensor>&,
+     const pointPatchField<tensor>&
+ )
+ {}
+-template<template<class> class PatchField, class pointPatch>
+-void skew
++inline void skew
+ (
+     pointPatchField<tensor>&,
+     const pointPatchField<tensor>&
+ )
+ {}
+-template<template<class> class PatchField, class pointPatch>
+-void eigenValues
++inline void eigenValues
+ (
+     pointPatchField<vector>&,
+     const pointPatchField<tensor>&
+ )
+ {}
+-template<template<class> class PatchField, class pointPatch>
+-void eigenVectors
++inline void eigenVectors
+ (
+     pointPatchField<tensor>&,
+     const pointPatchField<tensor>&
+ )
+ {}
+Index: OpenFOAM/fields/Fields/symmTensorField/symmTensorField.C
+===================================================================
+--- src/OpenFOAM/fields/Fields/symmTensorField/symmTensorField.C       (Revision 30)
++++ src/OpenFOAM/fields/Fields/symmTensorField/symmTensorField.C       (Revision 784)
+@@ -131,16 +131,15 @@
+ template<>
+ tmp<Field<symmTensor> > transformFieldMask<symmTensor>
+ (
+     const tmp<tensorField>& ttf
+ )
+ {
+-    tmp<Field<symmTensor> > ret =
+-        transformFieldMask<symmTensor>(ttf());
++    tmp<Field<symmTensor> > ret = transformFieldMask<symmTensor>(ttf());
+     ttf.clear();
+     return ret;
+ }
+ template<>
+ tmp<Field<symmTensor> > transformFieldMask<symmTensor>
+@@ -153,18 +152,15 @@
+ template<>
+ tmp<Field<symmTensor> > transformFieldMask<symmTensor>
+ (
+     const tmp<symmTensorField>& tstf
+ )
+ {
+-    tmp<Field<symmTensor> > ret =
+-        transformFieldMask<symmTensor>(tstf());
+-    tstf.clear();
+-    return ret;
++    return tstf;
+ }
+ // * * * * * * * * * * * * * * * global operators  * * * * * * * * * * * * * //
+ UNARY_OPERATOR(vector, symmTensor, *, hdual)
+Index: OpenFOAM/primitives/pTraits/pTraits.H
+===================================================================
+--- src/OpenFOAM/primitives/pTraits/pTraits.H  (Revision 30)
++++ src/OpenFOAM/primitives/pTraits/pTraits.H  (Revision 784)
+@@ -19,15 +19,15 @@
+     for more details.
+     You should have received a copy of the GNU General Public License
+     along with OpenFOAM; if not, write to the Free Software Foundation,
+     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ Class
+-    pTraits
++    Foam::pTraits
+ Description
+     Traits class for primitives.  All primitives need a specialised
+     version of this class
+ \*---------------------------------------------------------------------------*/
+@@ -49,14 +49,19 @@
+ class pTraits
+ :
+     public primitive
+ {
+ public:
++    pTraits(const primitive& p)
++    :
++        primitive(p)
++    {}
++
+     pTraits(Istream& is)
+     :
+         primitive(is)
+     {}
+ };
+Index: OpenFOAM/primitives/Tensor/TensorI.H
+===================================================================
+--- src/OpenFOAM/primitives/Tensor/TensorI.H   (Revision 30)
++++ src/OpenFOAM/primitives/Tensor/TensorI.H   (Revision 784)
+@@ -358,14 +358,23 @@
+         v1.x()*v2.x(), v1.x()*v2.y(), v1.x()*v2.z(),
+         v1.y()*v2.x(), v1.y()*v2.y(), v1.y()*v2.z(),
+         v1.z()*v2.x(), v1.z()*v2.y(), v1.z()*v2.z()
+     );
+ }
++//- Division of a vector by a tensor, i.e. dot-product with the tensor inverse
++template <class Cmpt>
++inline typename innerProduct<Vector<Cmpt>, Tensor<Cmpt> >::type
++operator/(const Vector<Cmpt>& v, const Tensor<Cmpt>& t)
++{
++    return inv(t) & v;
++}
++
++
+ // * * * * * * * * * * * * * * * Global Functions  * * * * * * * * * * * * * //
+ //- Return the trace of a tensor
+ template <class Cmpt>
+ inline Cmpt tr(const Tensor<Cmpt>& t)
+ {
+     return t.xx() + t.yy() + t.zz();
+@@ -707,15 +716,15 @@
+ template <class Cmpt>
+ inline Tensor<Cmpt>
+ operator+(const Tensor<Cmpt>& t1, const SymmTensor<Cmpt>& st2)
+ {
+     return Tensor<Cmpt>
+     (
+         t1.xx() + st2.xx(), t1.xy() + st2.xy(), t1.xz() + st2.xz(),
+-        t1.yx() + st2.xy(), t1.yy() + st2.yy(), t1.yz() + st2.yy(),
++        t1.yx() + st2.xy(), t1.yy() + st2.yy(), t1.yz() + st2.yz(),
+         t1.zx() + st2.xz(), t1.zy() + st2.yz(), t1.zz() + st2.zz()
+     );
+ }
+ template <class Cmpt>
+ inline Tensor<Cmpt>
+@@ -733,15 +742,15 @@
+ template <class Cmpt>
+ inline Tensor<Cmpt>
+ operator-(const Tensor<Cmpt>& t1, const SymmTensor<Cmpt>& st2)
+ {
+     return Tensor<Cmpt>
+     (
+         t1.xx() - st2.xx(), t1.xy() - st2.xy(), t1.xz() - st2.xz(),
+-        t1.yx() - st2.xy(), t1.yy() - st2.yy(), t1.yz() - st2.yy(),
++        t1.yx() - st2.xy(), t1.yy() - st2.yy(), t1.yz() - st2.yz(),
+         t1.zx() - st2.xz(), t1.zy() - st2.yz(), t1.zz() - st2.zz()
+     );
+ }
+ //- Inner-product between a spherical tensor and a tensor
+ template <class Cmpt>
+@@ -790,46 +799,30 @@
+ //- Double-dot-product between a spherical tensor and a tensor
+ template <class Cmpt>
+ inline Cmpt
+ operator&&(const SymmTensor<Cmpt>& st1, const Tensor<Cmpt>& t2)
+ {
+     return
+     (
+-        st1.xx()*t2.xx() + st1.xy()*t2.yx() + st1.xz()*t2.zx() +
+-        st1.xx()*t2.xy() + st1.xy()*t2.yy() + st1.xz()*t2.zy() +
+-        st1.xx()*t2.xz() + st1.xy()*t2.yz() + st1.xz()*t2.zz() +
+-
+-        st1.xy()*t2.xx() + st1.yy()*t2.yx() + st1.yz()*t2.zx() +
+-        st1.xy()*t2.xy() + st1.yy()*t2.yy() + st1.yz()*t2.zy() +
+-        st1.xy()*t2.xz() + st1.yy()*t2.yz() + st1.yz()*t2.zz() +
+-
+-        st1.xz()*t2.xx() + st1.yz()*t2.yx() + st1.zz()*t2.zx() +
+-        st1.xz()*t2.xy() + st1.yz()*t2.yy() + st1.zz()*t2.zy() +
+-        st1.xz()*t2.xz() + st1.yz()*t2.yz() + st1.zz()*t2.zz()
++        st1.xx()*t2.xx() + st1.xy()*t2.xy() + st1.xz()*t2.xz() +
++        st1.xy()*t2.yx() + st1.yy()*t2.yy() + st1.yz()*t2.yz() +
++        st1.xz()*t2.zx() + st1.yz()*t2.zy() + st1.zz()*t2.zz()
+     );
+ }
+ //- Double-dot-product between a tensor and a spherical tensor
+ template <class Cmpt>
+ inline Cmpt
+ operator&&(const Tensor<Cmpt>& t1, const SymmTensor<Cmpt>& st2)
+ {
+     return
+     (
+         t1.xx()*st2.xx() + t1.xy()*st2.xy() + t1.xz()*st2.xz() +
+-        t1.xx()*st2.xy() + t1.xy()*st2.yy() + t1.xz()*st2.yz() +
+-        t1.xx()*st2.xz() + t1.xy()*st2.yz() + t1.xz()*st2.zz() +
+-
+-        t1.yx()*st2.xx() + t1.yy()*st2.xy() + t1.yz()*st2.xz() +
+         t1.yx()*st2.xy() + t1.yy()*st2.yy() + t1.yz()*st2.yz() +
+-        t1.yx()*st2.xz() + t1.yy()*st2.yz() + t1.yz()*st2.zz() +
+-
+-        t1.zx()*st2.xx() + t1.zy()*st2.xy() + t1.zz()*st2.xz() +
+-        t1.zx()*st2.xy() + t1.zy()*st2.yy() + t1.zz()*st2.yz() +
+         t1.zx()*st2.xz() + t1.zy()*st2.yz() + t1.zz()*st2.zz()
+     );
+ }
+ template<class Cmpt>
+ class typeOfSum<SymmTensor<Cmpt>, Tensor<Cmpt> >
+
+Index: finiteVolume/fvMatrices/fvMatrix/fvMatrixSolve.C
+===================================================================
+--- src/finiteVolume/fvMatrices/fvMatrix/fvMatrixSolve.C       (Revision 30)
++++ src/finiteVolume/fvMatrices/fvMatrix/fvMatrixSolve.C       (Revision 784)
+@@ -20,23 +20,18 @@
+     You should have received a copy of the GNU General Public License
+     along with OpenFOAM; if not, write to the Free Software Foundation,
+     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ \*---------------------------------------------------------------------------*/
+-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+-
+-namespace Foam
+-{
+-
+ // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+ template<class Type>
+-void fvMatrix<Type>::setComponentReference
++void Foam::fvMatrix<Type>::setComponentReference
+ (
+     const label patchi,
+     const label facei,
+     const direction cmpt,
+     const scalar value
+ )
+ {
+@@ -52,15 +47,18 @@
+                *value;
+         }
+     }
+ }
+ template<class Type>
+-lduMatrix::solverPerformance fvMatrix<Type>::solve(Istream& solverControls)
++Foam::lduMatrix::solverPerformance Foam::fvMatrix<Type>::solve
++(
++    Istream& solverControls
++)
+ {
+     if (debug)
+     {
+         Info<< "fvMatrix<Type>::solve(Istream& solverControls) : "
+                "solving fvMatrix<Type>"
+             << endl;
+     }
+@@ -70,15 +68,19 @@
+         "fvMatrix<Type>::solve",
+         psi_.name()
+     );
+     scalarField saveDiag = diag();
+     Field<Type> source = source_;
+-    addBoundarySource(source, false);
++
++    // At this point include the boundary source from the coupled boundaries.
++    // This is corrected for the implict part by updateMatrixInterfaces within
++    // the component loop.
++    addBoundarySource(source);
+     typename Type::labelType validComponents
+     (
+         pow
+         (
+             psi_.mesh().directions(),
+             pTraits<typename powProduct<Vector<label>, Type::rank>::type>::zero
+@@ -105,14 +107,35 @@
+         (
+             internalCoeffs_.component(cmpt)
+         );
+         lduInterfaceFieldPtrsList interfaces = 
+             psi_.boundaryField().interfaces();
++        // Use the initMatrixInterfaces and updateMatrixInterfaces to correct
++        // bouCoeffsCmpt for the explicit part of the coupled boundary
++        // conditions
++        initMatrixInterfaces
++        (
++            bouCoeffsCmpt,
++            interfaces,
++            psiCmpt,
++            sourceCmpt,
++            cmpt
++        );
++
++        updateMatrixInterfaces
++        (
++            bouCoeffsCmpt,
++            interfaces,
++            psiCmpt,
++            sourceCmpt,
++            cmpt
++        );
++
+         lduMatrix::solverPerformance solverPerf;
+         // Solver call
+         solverPerf = lduMatrix::solver::New
+         (
+             psi_.name() + pTraits<Type>::componentNames[cmpt],
+             *this,
+@@ -140,35 +163,36 @@
+     psi_.correctBoundaryConditions();
+     return solverPerfVec;
+ }
+ template<class Type>
+-autoPtr<typename fvMatrix<Type>::fvSolver> fvMatrix<Type>::solver()
++Foam::autoPtr<typename Foam::fvMatrix<Type>::fvSolver>
++Foam::fvMatrix<Type>::solver()
+ {
+     return solver(psi_.mesh().solver(psi_.name()));
+ }
+ template<class Type>
+-lduMatrix::solverPerformance fvMatrix<Type>::fvSolver::solve()
++Foam::lduMatrix::solverPerformance Foam::fvMatrix<Type>::fvSolver::solve()
+ {
+     return solve(psi_.mesh().solver(psi_.name()));
+ }
+ template<class Type>
+-lduMatrix::solverPerformance fvMatrix<Type>::solve()
++Foam::lduMatrix::solverPerformance Foam::fvMatrix<Type>::solve()
+ {
+     return solve(psi_.mesh().solver(psi_.name()));
+ }
+ template<class Type>
+-tmp<Field<Type> > fvMatrix<Type>::residual() const
++Foam::tmp<Foam::Field<Type> > Foam::fvMatrix<Type>::residual() const
+ {
+     tmp<Field<Type> > tres(source_);
+     Field<Type>& res = tres();
+     addBoundarySource(res);
+     // Loop over field components
+@@ -198,12 +222,8 @@
+         );
+     }
+     return tres;
+ }
+-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+-
+-} // End namespace Foam
+-
+ // ************************************************************************* //
+Index: finiteVolume/fields/fvPatchFields/derived/timeVaryingMappedFixedValue/timeVaryingMappedFixedValueFvPatchField.C
+===================================================================
+--- src/finiteVolume/fields/fvPatchFields/derived/timeVaryingMappedFixedValue/timeVaryingMappedFixedValueFvPatchField.C        (Revision 30)
++++ src/finiteVolume/fields/fvPatchFields/derived/timeVaryingMappedFixedValue/timeVaryingMappedFixedValueFvPatchField.C        (Revision 784)
+@@ -181,14 +181,15 @@
+ )
+ :
+     fixedValueFvPatchField<Type>(ptf, iF),
+     setAverage_(ptf.setAverage_),
+     referenceCS_(ptf.referenceCS_),
+     nearestVertex_(ptf.nearestVertex_),
+     nearestVertexWeight_(ptf.nearestVertexWeight_),
++    fieldName_(ptf.fieldName_),
+     sampleTimes_(ptf.sampleTimes_),
+     startSampleTime_(ptf.startSampleTime_),
+     startSampledValues_(ptf.startSampledValues_),
+     startAverage_(ptf.startAverage_),
+     endSampleTime_(ptf.endSampleTime_),
+     endSampledValues_(ptf.endSampledValues_),
+     endAverage_(ptf.endAverage_)
+Index: finiteVolume/finiteVolume/ddtSchemes/backwardDdtScheme/backwardDdtScheme.C
+===================================================================
+--- src/finiteVolume/finiteVolume/ddtSchemes/backwardDdtScheme/backwardDdtScheme.C     (Revision 30)
++++ src/finiteVolume/finiteVolume/ddtSchemes/backwardDdtScheme/backwardDdtScheme.C     (Revision 784)
+@@ -323,15 +323,15 @@
+                        *vf.oldTime().internalField()*mesh().V0()
+                       - coefft00*rho.oldTime().oldTime().internalField()
+                        *vf.oldTime().oldTime().internalField()*mesh().V00()
+                     )/mesh().V()
+                 ),
+                 rDeltaT.value()*
+                 (
+-                    coefft*vf.boundaryField() -
++                    coefft*rho.boundaryField()*vf.boundaryField() -
+                     (
+                         coefft0*rho.oldTime().boundaryField()
+                        *vf.oldTime().boundaryField()
+                       - coefft00*rho.oldTime().oldTime().boundaryField()
+                        *vf.oldTime().oldTime().boundaryField()
+                     )
+                 )
+Index: finiteVolume/finiteVolume/gradSchemes/leastSquaresGrad/leastSquaresVectors.C
+===================================================================
+--- src/finiteVolume/finiteVolume/gradSchemes/leastSquaresGrad/leastSquaresVectors.C   (Revision 30)
++++ src/finiteVolume/finiteVolume/gradSchemes/leastSquaresGrad/leastSquaresVectors.C   (Revision 784)
+@@ -150,15 +150,15 @@
+         if (p.coupled())
+         {
+             forAll(pd, patchFacei)
+             {
+                 const vector& d = pd[patchFacei];
+                 dd[faceCells[patchFacei]] +=
+-                    (pw[patchFacei]*pMagSf[patchFacei]/magSqr(d))*sqr(d);
++                    ((1 - pw[patchFacei])*pMagSf[patchFacei]/magSqr(d))*sqr(d);
+             }
+         }
+         else
+         {
+             forAll(pd, patchFacei)
+             {
+                 const vector& d = pd[patchFacei];
+
+Index: turbulenceModels/compressible/kOmegaSST/kOmegaSST.C
+===================================================================
+--- src/turbulenceModels/compressible/kOmegaSST/kOmegaSST.C    (Revision 30)
++++ src/turbulenceModels/compressible/kOmegaSST/kOmegaSST.C    (Revision 784)
+@@ -237,15 +237,15 @@
+     {
+         y_.correct();
+         divU += fvc::div(mesh_.phi());
+     }
+     tmp<volTensorField> tgradU = fvc::grad(U_);
+     volScalarField S2 = magSqr(symm(tgradU()));
+-    volScalarField GbyMu = 2*mut_*(tgradU() && dev(symm(tgradU())));
++    volScalarField GbyMu = 2*(tgradU() && dev(symm(tgradU())));
+     volScalarField G = mut_*GbyMu;
+     tgradU.clear();
+ #   include "kOmegaWallFunctionsI.H"
+     volScalarField CDkOmega =
+         (2*alphaOmega2)*(fvc::grad(k_) & fvc::grad(omega_))/omega_;
+@@ -280,15 +280,15 @@
+     // Turbulent kinetic energy equation
+     tmp<fvScalarMatrix> kEqn
+     (
+         fvm::ddt(rho_, k_)
+       + fvm::div(phi_, k_)
+       - fvm::laplacian(DkEff(F1), k_)
+      ==
+-        min(G, c1*betaStar*k_*omega_)
++        min(G, (c1*betaStar)*rho_*k_*omega_)
+       - fvm::SuSp(2.0/3.0*rho_*divU, k_)
+       - fvm::Sp(rho_*betaStar*omega_, k_)
+     );
+     kEqn().relax();
+     solve(kEqn);
+     bound(k_, k0_);
+
diff --git a/sci-libs/openfoam-src/files/openfoam-src-compile-1.4.1_p20080827.patch b/sci-libs/openfoam-src/files/openfoam-src-compile-1.4.1_p20080827.patch
new file mode 100644 (file)
index 0000000..708c0de
--- /dev/null
@@ -0,0 +1,231 @@
+diff -ur OpenFOAM-1.4.1-src/src/Allwmake OpenFOAM-1.4.1/src/Allwmake
+--- OpenFOAM-1.4.1-src/src/Allwmake    2007-07-27 17:54:28.000000000 +0200
++++ OpenFOAM-1.4.1/src/Allwmake        2007-10-18 21:04:12.000000000 +0200
+@@ -3,103 +3,103 @@
+ (cd $FOAM_SRC/OpenFOAM ; wmakeLnInclude . )
+-wmake libso zlib-1.2.1
+-
+-if [ "$WM_MPLIB" = "OPENMPI" -a ! -r $OPENMPI_ARCH_PATH/lib/libmpi.a -a ! -r $OPENMPI_ARCH_PATH/lib/libmpi.so ]
+-then
+-
+-    cd $OPENMPI_HOME
+-
+-        gmake distclean
+-        rm -rf $OPENMPI_ARCH_PATH
+-
+-        ./configure \
+-            --prefix=$OPENMPI_ARCH_PATH \
+-            --disable-mpirun-prefix-by-default \
+-            --disable-orterun-prefix-by-default \
+-            --enable-shared --disable-static \
+-            --disable-mpi-f77 --disable-mpi-f90 --disable-mpi-cxx \
+-            --disable-mpi-profile
+-
+-        gmake
+-        gmake install
+-        gmake distclean
+-
+-    cd $FOAM_SRC
+-fi
+-
+-if [ "$WM_MPLIB" = "LAM" -a ! -r $LAM_ARCH_PATH/lib/libmpi.a -a ! -r $LAM_ARCH_PATH/lib/libmpi.so ]
+-then
+-
+-    cd $LAMHOME
+-
+-        gmake distclean
+-        rm -rf $LAM_ARCH_PATH
+-
+-        ./configure \
+-            --prefix=$LAM_ARCH_PATH \
+-            --enable-shared \
+-            --disable-static \
+-            --without-romio \
+-            --without-mpi2cpp \
+-            --without-profiling \
+-            --without-fc
+-
+-        gmake
+-        gmake install
+-        gmake distclean
+-
+-    cd $FOAM_SRC
+-fi
+-
+-if [ "$WM_MPLIB" = "MPICH" -a ! -r $MPICH_ARCH_PATH/lib/libmpich.a -a ! -r $MPICH_ARCH_PATH/lib/libmpich.so ]
+-then
+-    
+-    cd $MPICH_PATH
+-
+-        make distclean
+-        rm -rf $MPICH_ARCH_PATH
+-        rm util/machines/machines.*
+-
+-        ./configure \
+-            --without-mpe \
+-            --disable-f77 \
+-            --disable-f90 \
+-            --disable-f90modules \
+-            --disable-c++ \
+-            --disable-mpedbg \
+-            --disable-devdebug \
+-            --disable-debug \
+-            --enable-sharedlib=$MPICH_ARCH_PATH/lib \
+-            --with-device=ch_p4 \
+-            -prefix=$MPICH_ARCH_PATH
+-        make
+-        make install
+-        make distclean
+-
+-        if [ -r $MPICH_ARCH_PATH ]
+-        then
+-            cd $MPICH_ARCH_PATH/bin
+-            for file in *
+-            do
+-                sed s%$MPICH_ARCH_PATH%'$MPICH_ARCH_PATH'%g $file > temp.$$
+-                mv temp.$$ $file
+-                chmod ugo+rx $file
+-            done
+-
+-            cd $MPICH_ARCH_PATH/lib
+-
+-            if [ -r libmpich.so.1.0 ]
+-            then
+-                rm *.so
+-                ln -s libmpich.so.1.0 libmpich.so
+-            fi
+-
+-            cd $MPICH_ARCH_PATH
+-        fi
+-
+-    cd $FOAM_SRC
+-fi
++# wmake libso zlib-1.2.1
++#
++# if [ "$WM_MPLIB" = "OPENMPI" -a ! -r $OPENMPI_ARCH_PATH/lib/libmpi.a -a ! -r $OPENMPI_ARCH_PATH/lib/libmpi.so ]
++# then
++# 
++#     cd $OPENMPI_HOME
++# 
++#         gmake distclean
++#         rm -rf $OPENMPI_ARCH_PATH
++# 
++#         ./configure \
++#             --prefix=$OPENMPI_ARCH_PATH \
++#             --disable-mpirun-prefix-by-default \
++#             --disable-orterun-prefix-by-default \
++#             --enable-shared --disable-static \
++#             --disable-mpi-f77 --disable-mpi-f90 --disable-mpi-cxx \
++#             --disable-mpi-profile
++# 
++#         gmake
++#         gmake install
++#         gmake distclean
++# 
++#     cd $FOAM_SRC
++# fi
++# 
++# if [ "$WM_MPLIB" = "LAM" -a ! -r $LAM_ARCH_PATH/lib/libmpi.a -a ! -r $LAM_ARCH_PATH/lib/libmpi.so ]
++# then
++# 
++#     cd $LAMHOME
++# 
++#         gmake distclean
++#         rm -rf $LAM_ARCH_PATH
++# 
++#         ./configure \
++#             --prefix=$LAM_ARCH_PATH \
++#             --enable-shared \
++#             --disable-static \
++#             --without-romio \
++#             --without-mpi2cpp \
++#             --without-profiling \
++#             --without-fc
++# 
++#         gmake
++#         gmake install
++#         gmake distclean
++# 
++#     cd $FOAM_SRC
++# fi
++# 
++# if [ "$WM_MPLIB" = "MPICH" -a ! -r $MPICH_ARCH_PATH/lib/libmpich.a -a ! -r $MPICH_ARCH_PATH/lib/libmpich.so ]
++# then
++#     
++#     cd $MPICH_PATH
++# 
++#         make distclean
++#         rm -rf $MPICH_ARCH_PATH
++#         rm util/machines/machines.*
++# 
++#         ./configure \
++#             --without-mpe \
++#             --disable-f77 \
++#             --disable-f90 \
++#             --disable-f90modules \
++#             --disable-c++ \
++#             --disable-mpedbg \
++#             --disable-devdebug \
++#             --disable-debug \
++#             --enable-sharedlib=$MPICH_ARCH_PATH/lib \
++#             --with-device=ch_p4 \
++#             -prefix=$MPICH_ARCH_PATH
++#         make
++#         make install
++#         make distclean
++# 
++#         if [ -r $MPICH_ARCH_PATH ]
++#         then
++#             cd $MPICH_ARCH_PATH/bin
++#             for file in *
++#             do
++#                 sed s%$MPICH_ARCH_PATH%'$MPICH_ARCH_PATH'%g $file > temp.$$
++#                 mv temp.$$ $file
++#                 chmod ugo+rx $file
++#             done
++# 
++#             cd $MPICH_ARCH_PATH/lib
++# 
++#             if [ -r libmpich.so.1.0 ]
++#             then
++#                 rm *.so
++#                 ln -s libmpich.so.1.0 libmpich.so
++#             fi
++# 
++#             cd $MPICH_ARCH_PATH
++#         fi
++# 
++#     cd $FOAM_SRC
++# fi
+ (cd Pstream ; ./Allwmake)
+ wmake libso OpenFOAM
+diff -ur OpenFOAM-1.4.1-src/src/Allwmake OpenFOAM-1.4.1/src/Allwmake
+--- OpenFOAM-1.4.1-src/src/Allwmake    2007-07-27 17:54:28.000000000 +0200
++++ OpenFOAM-1.4.1/src/Allwmake        2007-10-18 21:04:12.000000000 +0200
+@@ -141,13 +141,13 @@
+ (cd malloc ; ./Allwmake)
+-if [ ! -r $MICO_ARCH_PATH/lib/libmico${MICO_VERSION}.a ]
+-then
+-    cd $MICO_PATH
+-    gmake distclean
+-    ./configure --prefix=$MICO_ARCH_PATH --disable-shared --without-x
+-    gmake
+-    gmake install
+-    gmake distclean
+-    cd ..
+-fi
++# if [ ! -r $MICO_ARCH_PATH/lib/libmico${MICO_VERSION}.a ]
++# then
++#     cd $MICO_PATH
++#     gmake distclean
++#     ./configure --prefix=$MICO_ARCH_PATH --disable-shared --without-x
++#     gmake
++#     gmake install
++#     gmake distclean
++#     cd ..
++# fi
diff --git a/sci-libs/openfoam-src/openfoam-src-1.4.1_p20080827.ebuild b/sci-libs/openfoam-src/openfoam-src-1.4.1_p20080827.ebuild
new file mode 100644 (file)
index 0000000..89884f3
--- /dev/null
@@ -0,0 +1,40 @@
+# Copyright 1999-2008 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header:  $
+
+inherit eutils versionator multilib
+
+MY_PN="OpenFOAM"
+MY_PV=$(get_version_component_range 1-3 ${PV})
+MY_P="${MY_PN}-${MY_PV}"
+
+DESCRIPTION="OpenFOAM - Kernel Sources"
+HOMEPAGE="http://www.opencfd.co.uk/openfoam/"
+SRC_URI="mirror://sourceforge/foam/${MY_P}.General.gtgz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE=""
+
+DEPEND="|| ( =sci-libs/openfoam-meta-${MY_PV}* =sci-libs/openfoam-${MY_PV}* =sci-libs/openfoam-bin-${MY_PV}* )"
+
+S=${WORKDIR}/${MY_P}
+
+src_unpack() {
+       ln -s "${DISTDIR}"/${MY_P}.General.gtgz ${MY_P}.General.tgz
+       unpack ./${MY_P}.General.tgz
+       unpack ${PN}-${MY_PV}_p20080131-patches-0.1.tar.bz2
+
+       cd "${S}"
+       epatch "${FILESDIR}"/${P}.patch
+       epatch "${FILESDIR}"/${PN}-compile-${PV}.patch
+}
+
+src_install() {
+       rm -rf "${S}"/src/{lam-7.1.2,mico-2.3.12,openmpi-1.2.3,zlib-1.2.1}
+
+       insopts -m0644
+       insinto /usr/$(get_libdir)/${MY_PN}/${MY_P}/src
+       doins -r src/*
+}