diff --git a/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/PV4FoamReader/PV4FoamReader_SM.xml b/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/PV4FoamReader/PV4FoamReader_SM.xml
index d2856ad46d..44daa3dcb9 100644
--- a/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/PV4FoamReader/PV4FoamReader_SM.xml
+++ b/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/PV4FoamReader/PV4FoamReader_SM.xml
@@ -167,6 +167,19 @@
+
+
+
+
+ A simple way to cause a reader GUI modification.
+
+
+
diff --git a/etc/config/settings.csh b/etc/config/settings.csh
index 5fdee1186d..af748c57c2 100644
--- a/etc/config/settings.csh
+++ b/etc/config/settings.csh
@@ -2,7 +2,7 @@
# ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration |
-# \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
+# \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation
# \\/ M anipulation |
#------------------------------------------------------------------------------
# License
@@ -224,9 +224,16 @@ case ThirdParty:
set mpfr_version=mpfr-3.1.0
set mpc_version=mpc-0.9
breaksw
+ case Gcc49:
+ case Gcc49++0x:
+ set gcc_version=gcc-4.9.0
+ set gmp_version=gmp-5.1.2
+ set mpfr_version=mpfr-3.1.2
+ set mpc_version=mpc-1.0.1
+ breaksw
case Gcc48:
case Gcc48++0x:
- set gcc_version=gcc-4.8.1
+ set gcc_version=gcc-4.8.2
set gmp_version=gmp-5.1.2
set mpfr_version=mpfr-3.1.2
set mpc_version=mpc-1.0.1
@@ -249,7 +256,7 @@ case ThirdParty:
# using clang - not gcc
setenv WM_CC 'clang'
setenv WM_CXX 'clang++'
- set clang_version=llvm-3.3
+ set clang_version=llvm-3.4
breaksw
default:
echo
diff --git a/etc/config/settings.sh b/etc/config/settings.sh
index 35a6f8dd8d..bc8fd220c5 100644
--- a/etc/config/settings.sh
+++ b/etc/config/settings.sh
@@ -2,7 +2,7 @@
# ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration |
-# \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
+# \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation
# \\/ M anipulation |
#------------------------------------------------------------------------------
# License
@@ -246,8 +246,14 @@ OpenFOAM | ThirdParty)
mpfr_version=mpfr-3.1.0
mpc_version=mpc-0.9
;;
+ Gcc49 | Gcc49++0x)
+ gcc_version=gcc-4.9.0
+ gmp_version=gmp-5.1.2
+ mpfr_version=mpfr-3.1.2
+ mpc_version=mpc-1.0.1
+ ;;
Gcc48 | Gcc48++0x)
- gcc_version=gcc-4.8.1
+ gcc_version=gcc-4.8.2
gmp_version=gmp-5.1.2
mpfr_version=mpfr-3.1.2
mpc_version=mpc-1.0.1
@@ -268,7 +274,7 @@ OpenFOAM | ThirdParty)
# using clang - not gcc
export WM_CC='clang'
export WM_CXX='clang++'
- clang_version=llvm-3.3
+ clang_version=llvm-3.4
;;
*)
echo 1>&2
diff --git a/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.C b/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.C
index 9f451bd772..01dee2c5e4 100644
--- a/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.C
+++ b/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.C
@@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
- \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
+ \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@@ -36,6 +36,7 @@ License
#include "diagTensor.H"
#include "transformField.H"
#include "SubField.H"
+#include "unitConversion.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
@@ -272,10 +273,14 @@ void Foam::cyclicPolyPatch::calcTransforms
if (debug)
{
+ scalar theta = radToDeg(acos(n0 & n1));
+
Pout<< "cyclicPolyPatch::calcTransforms :"
<< " patch:" << name()
<< " Specified rotation :"
- << " n0:" << n0 << " n1:" << n1 << endl;
+ << " n0:" << n0 << " n1:" << n1
+ << " swept angle: " << theta << " [deg]"
+ << endl;
}
// Extended tensor from two local coordinate systems calculated
@@ -432,10 +437,14 @@ void Foam::cyclicPolyPatch::getCentresAndAnchors
if (debug)
{
+ scalar theta = radToDeg(acos(n0 & n1));
+
Pout<< "cyclicPolyPatch::getCentresAndAnchors :"
<< " patch:" << name()
<< " Specified rotation :"
- << " n0:" << n0 << " n1:" << n1 << endl;
+ << " n0:" << n0 << " n1:" << n1
+ << " swept angle: " << theta << " [deg]"
+ << endl;
}
// Extended tensor from two local coordinate systems calculated
diff --git a/src/meshTools/AMIInterpolation/patches/cyclicAMI/cyclicAMIPolyPatch/cyclicAMIPolyPatch.C b/src/meshTools/AMIInterpolation/patches/cyclicAMI/cyclicAMIPolyPatch/cyclicAMIPolyPatch.C
index 52373c438d..98ce25d260 100644
--- a/src/meshTools/AMIInterpolation/patches/cyclicAMI/cyclicAMIPolyPatch/cyclicAMIPolyPatch.C
+++ b/src/meshTools/AMIInterpolation/patches/cyclicAMI/cyclicAMIPolyPatch/cyclicAMIPolyPatch.C
@@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
- \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
+ \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@@ -45,7 +45,7 @@ namespace Foam
// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * //
-Foam::vector Foam::cyclicAMIPolyPatch::findFaceMaxRadius
+Foam::vector Foam::cyclicAMIPolyPatch::findFaceNormalMaxRadius
(
const pointField& faceCentres
) const
@@ -138,45 +138,115 @@ void Foam::cyclicAMIPolyPatch::calcTransforms
{
case ROTATIONAL:
{
- point n0 = vector::zero;
- if (half0Ctrs.size())
+ tensor revT = tensor::zero;
+
+ if (rotationAngleDefined_)
{
- n0 = findFaceMaxRadius(half0Ctrs);
+ tensor T(rotationAxis_*rotationAxis_);
+
+ tensor S
+ (
+ 0, -rotationAxis_.z(), rotationAxis_.y(),
+ rotationAxis_.z(), 0, -rotationAxis_.x(),
+ -rotationAxis_.y(), rotationAxis_.x(), 0
+ );
+
+ tensor RPos
+ (
+ T
+ + cos(rotationAngle_)*(tensor::I + T)
+ + sin(rotationAngle_)*S
+ );
+ tensor RNeg
+ (
+ T
+ + cos(-rotationAngle_)*(tensor::I + T)
+ + sin(-rotationAngle_)*S
+ );
+
+ // check - assume correct angle when difference in face areas
+ // is the smallest
+ vector transformedAreaPos = sum(half0Areas & RPos);
+ vector transformedAreaNeg = sum(half0Areas & RNeg);
+ vector area1 = sum(half1Areas);
+ reduce(transformedAreaPos, sumOp());
+ reduce(transformedAreaNeg, sumOp());
+ reduce(area1, sumOp());
+
+ scalar errorPos = mag(transformedAreaPos - area1);
+ scalar errorNeg = mag(transformedAreaNeg - area1);
+
+ if (errorPos < errorNeg)
+ {
+ revT = RPos;
+ }
+ else
+ {
+ revT = RNeg;
+ rotationAngle_ *= -1;
+ }
+
+ if (debug)
+ {
+ scalar theta = radToDeg(rotationAngle_);
+
+ Pout<< "cyclicAMIPolyPatch::calcTransforms: patch:"
+ << name()
+ << " Specified rotation:"
+ << " swept angle: " << theta << " [deg]"
+ << " reverse transform: " << revT
+ << endl;
+ }
}
- point n1 = vector::zero;
- if (half1Ctrs.size())
+ else
{
- n1 = -findFaceMaxRadius(half1Ctrs);
+ point n0 = vector::zero;
+ point n1 = vector::zero;
+ if (half0Ctrs.size())
+ {
+ n0 = findFaceNormalMaxRadius(half0Ctrs);
+ }
+ if (half1Ctrs.size())
+ {
+ n1 = -findFaceNormalMaxRadius(half1Ctrs);
+ }
+
+ reduce(n0, maxMagSqrOp());
+ reduce(n1, maxMagSqrOp());
+
+ n0 /= mag(n0) + VSMALL;
+ n1 /= mag(n1) + VSMALL;
+
+ // Extended tensor from two local coordinate systems calculated
+ // using normal and rotation axis
+ const tensor E0
+ (
+ rotationAxis_,
+ (n0 ^ rotationAxis_),
+ n0
+ );
+ const tensor E1
+ (
+ rotationAxis_,
+ (-n1 ^ rotationAxis_),
+ -n1
+ );
+ revT = E1.T() & E0;
+
+ if (debug)
+ {
+ scalar theta = radToDeg(acos(n0 & n1));
+
+ Pout<< "cyclicAMIPolyPatch::calcTransforms: patch:"
+ << name()
+ << " Specified rotation:"
+ << " n0:" << n0 << " n1:" << n1
+ << " swept angle: " << theta << " [deg]"
+ << " reverse transform: " << revT
+ << endl;
+ }
}
- reduce(n0, maxMagSqrOp());
- reduce(n1, maxMagSqrOp());
-
- n0 /= mag(n0) + VSMALL;
- n1 /= mag(n1) + VSMALL;
-
- if (debug)
- {
- Pout<< "cyclicAMIPolyPatch::calcTransforms : patch:" << name()
- << " Specified rotation :"
- << " n0:" << n0 << " n1:" << n1 << endl;
- }
-
- // Extended tensor from two local coordinate systems calculated
- // using normal and rotation axis
- const tensor E0
- (
- rotationAxis_,
- (n0 ^ rotationAxis_),
- n0
- );
- const tensor E1
- (
- rotationAxis_,
- (-n1 ^ rotationAxis_),
- -n1
- );
- const tensor revT(E1.T() & E0);
const_cast(forwardT()) = tensorField(1, revT.T());
const_cast(reverseT()) = tensorField(1, revT);
const_cast(separation()).setSize(0);
@@ -395,6 +465,8 @@ Foam::cyclicAMIPolyPatch::cyclicAMIPolyPatch
nbrPatchID_(-1),
rotationAxis_(vector::zero),
rotationCentre_(point::zero),
+ rotationAngleDefined_(false),
+ rotationAngle_(0.0),
separationVector_(vector::zero),
AMIPtr_(NULL),
AMIReverse_(false),
@@ -421,6 +493,8 @@ Foam::cyclicAMIPolyPatch::cyclicAMIPolyPatch
nbrPatchID_(-1),
rotationAxis_(vector::zero),
rotationCentre_(point::zero),
+ rotationAngleDefined_(false),
+ rotationAngle_(0.0),
separationVector_(vector::zero),
AMIPtr_(NULL),
AMIReverse_(dict.lookupOrDefault("flipNormals", false)),
@@ -466,6 +540,17 @@ Foam::cyclicAMIPolyPatch::cyclicAMIPolyPatch
{
dict.lookup("rotationAxis") >> rotationAxis_;
dict.lookup("rotationCentre") >> rotationCentre_;
+ if (dict.readIfPresent("rotationAngle", rotationAngle_))
+ {
+ rotationAngleDefined_ = true;
+ rotationAngle_ = degToRad(rotationAngle_);
+
+ if (debug)
+ {
+ Info<< "rotationAngle: " << rotationAngle_ << " [rad]"
+ << endl;
+ }
+ }
scalar magRot = mag(rotationAxis_);
if (magRot < SMALL)
@@ -516,6 +601,8 @@ Foam::cyclicAMIPolyPatch::cyclicAMIPolyPatch
nbrPatchID_(-1),
rotationAxis_(pp.rotationAxis_),
rotationCentre_(pp.rotationCentre_),
+ rotationAngleDefined_(pp.rotationAngleDefined_),
+ rotationAngle_(pp.rotationAngle_),
separationVector_(pp.separationVector_),
AMIPtr_(NULL),
AMIReverse_(pp.AMIReverse_),
@@ -543,6 +630,8 @@ Foam::cyclicAMIPolyPatch::cyclicAMIPolyPatch
nbrPatchID_(-1),
rotationAxis_(pp.rotationAxis_),
rotationCentre_(pp.rotationCentre_),
+ rotationAngleDefined_(pp.rotationAngleDefined_),
+ rotationAngle_(pp.rotationAngle_),
separationVector_(pp.separationVector_),
AMIPtr_(NULL),
AMIReverse_(pp.AMIReverse_),
@@ -584,6 +673,8 @@ Foam::cyclicAMIPolyPatch::cyclicAMIPolyPatch
nbrPatchID_(-1),
rotationAxis_(pp.rotationAxis_),
rotationCentre_(pp.rotationCentre_),
+ rotationAngleDefined_(pp.rotationAngleDefined_),
+ rotationAngle_(pp.rotationAngle_),
separationVector_(pp.separationVector_),
AMIPtr_(NULL),
AMIReverse_(pp.AMIReverse_),
@@ -874,6 +965,14 @@ void Foam::cyclicAMIPolyPatch::write(Ostream& os) const
<< token::END_STATEMENT << nl;
os.writeKeyword("rotationCentre") << rotationCentre_
<< token::END_STATEMENT << nl;
+
+ if (rotationAngleDefined_)
+ {
+ os.writeKeyword("rotationAngle") << radToDeg(rotationAngle_)
+ << token::END_STATEMENT << nl;
+
+ }
+
break;
}
case TRANSLATIONAL:
diff --git a/src/meshTools/AMIInterpolation/patches/cyclicAMI/cyclicAMIPolyPatch/cyclicAMIPolyPatch.H b/src/meshTools/AMIInterpolation/patches/cyclicAMI/cyclicAMIPolyPatch/cyclicAMIPolyPatch.H
index e3bb1d35d9..fbdffb3dee 100644
--- a/src/meshTools/AMIInterpolation/patches/cyclicAMI/cyclicAMIPolyPatch/cyclicAMIPolyPatch.H
+++ b/src/meshTools/AMIInterpolation/patches/cyclicAMI/cyclicAMIPolyPatch/cyclicAMIPolyPatch.H
@@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
- \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
+ \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@@ -75,9 +75,15 @@ private:
//- Axis of rotation for rotational cyclics
vector rotationAxis_;
- //- point on axis of rotation for rotational cyclics
+ //- Point on axis of rotation for rotational cyclics
point rotationCentre_;
+ //- Flag to show whether the rotation angle is defined
+ bool rotationAngleDefined_;
+
+ //- Rotation angle
+ scalar rotationAngle_;
+
// For translation
@@ -101,7 +107,7 @@ private:
// Private Member Functions
//- Return normal of face at max distance from rotation axis
- vector findFaceMaxRadius(const pointField& faceCentres) const;
+ vector findFaceNormalMaxRadius(const pointField& faceCentres) const;
void calcTransforms
(
diff --git a/src/postProcessing/functionObjects/forces/forces/forces.C b/src/postProcessing/functionObjects/forces/forces/forces.C
index e38c5a4622..831f552667 100644
--- a/src/postProcessing/functionObjects/forces/forces/forces.C
+++ b/src/postProcessing/functionObjects/forces/forces/forces.C
@@ -940,6 +940,8 @@ void Foam::forces::calcForcesMoment()
Pstream::listCombineGather(force_, plusEqOp());
Pstream::listCombineGather(moment_, plusEqOp());
+ Pstream::listCombineScatter(force_);
+ Pstream::listCombineScatter(moment_);
}
diff --git a/tutorials/mesh/foamyHexMesh/mixerVessel/Allrun-pre b/tutorials/mesh/foamyHexMesh/mixerVessel/Allrun-pre
index d65d576cf6..e1314946c8 100755
--- a/tutorials/mesh/foamyHexMesh/mixerVessel/Allrun-pre
+++ b/tutorials/mesh/foamyHexMesh/mixerVessel/Allrun-pre
@@ -101,8 +101,9 @@ runParallel checkMesh $nProcs -allTopology -allGeometry -latestTime
runApplication reconstructParMesh -latestTime
-# Copy the mesh into polyMesh
+# Copy the mesh into polyMesh and delete the 102 directory
\cp -r 102/polyMesh constant
+\rm -rf 102
# ----------------------------------------------------------------- end-of-file
diff --git a/tutorials/multiphase/twoPhaseEulerFoam/RAS/fluidisedBed/0/alpha.air b/tutorials/multiphase/twoPhaseEulerFoam/RAS/fluidisedBed/0/alpha.air
index 9a4d3aea6c..288160cdf0 100644
--- a/tutorials/multiphase/twoPhaseEulerFoam/RAS/fluidisedBed/0/alpha.air
+++ b/tutorials/multiphase/twoPhaseEulerFoam/RAS/fluidisedBed/0/alpha.air
@@ -6027,8 +6027,7 @@ boundaryField
{
inlet
{
- type fixedValue;
- value uniform 1;
+ type zeroGradient;
}
outlet
{
diff --git a/tutorials/multiphase/twoPhaseEulerFoam/RAS/fluidisedBed/0/alpha.air.org b/tutorials/multiphase/twoPhaseEulerFoam/RAS/fluidisedBed/0/alpha.air.org
index 29db06c783..6292e5ffc0 100644
--- a/tutorials/multiphase/twoPhaseEulerFoam/RAS/fluidisedBed/0/alpha.air.org
+++ b/tutorials/multiphase/twoPhaseEulerFoam/RAS/fluidisedBed/0/alpha.air.org
@@ -22,8 +22,7 @@ boundaryField
{
inlet
{
- type fixedValue;
- value uniform 1;
+ type zeroGradient;
}
outlet
diff --git a/wmake/rules/linux64Gcc49/c b/wmake/rules/linux64Gcc49/c
new file mode 100644
index 0000000000..f4114be314
--- /dev/null
+++ b/wmake/rules/linux64Gcc49/c
@@ -0,0 +1,16 @@
+.SUFFIXES: .c .h
+
+cWARN = -Wall
+
+cc = gcc -m64
+
+include $(RULES)/c$(WM_COMPILE_OPTION)
+
+cFLAGS = $(GFLAGS) $(cWARN) $(cOPT) $(cDBUG) $(LIB_HEADER_DIRS) -fPIC
+
+ctoo = $(WM_SCHEDULER) $(cc) $(cFLAGS) -c $$SOURCE -o $@
+
+LINK_LIBS = $(cDBUG)
+
+LINKLIBSO = $(cc) -shared
+LINKEXE = $(cc) -Xlinker --add-needed -Xlinker -z -Xlinker nodefs
diff --git a/wmake/rules/linux64Gcc49/c++ b/wmake/rules/linux64Gcc49/c++
new file mode 100644
index 0000000000..98b25ed1fe
--- /dev/null
+++ b/wmake/rules/linux64Gcc49/c++
@@ -0,0 +1,21 @@
+.SUFFIXES: .C .cxx .cc .cpp
+
+c++WARN = -Wall -Wextra -Wno-unused-parameter -Wold-style-cast
+
+CC = g++ -m64
+
+include $(RULES)/c++$(WM_COMPILE_OPTION)
+
+ptFLAGS = -DNoRepository -ftemplate-depth-100
+
+c++FLAGS = $(GFLAGS) $(c++WARN) $(c++OPT) $(c++DBUG) $(ptFLAGS) $(LIB_HEADER_DIRS) -fPIC
+
+Ctoo = $(WM_SCHEDULER) $(CC) $(c++FLAGS) -c $$SOURCE -o $@
+cxxtoo = $(Ctoo)
+cctoo = $(Ctoo)
+cpptoo = $(Ctoo)
+
+LINK_LIBS = $(c++DBUG)
+
+LINKLIBSO = $(CC) $(c++FLAGS) -shared -Xlinker --add-needed -Xlinker --no-as-needed
+LINKEXE = $(CC) $(c++FLAGS) -Xlinker --add-needed -Xlinker --no-as-needed
diff --git a/wmake/rules/linux64Gcc49/c++Debug b/wmake/rules/linux64Gcc49/c++Debug
new file mode 100644
index 0000000000..19bdb9c334
--- /dev/null
+++ b/wmake/rules/linux64Gcc49/c++Debug
@@ -0,0 +1,2 @@
+c++DBUG = -ggdb3 -DFULLDEBUG
+c++OPT = -O0 -fdefault-inline
diff --git a/wmake/rules/linux64Gcc49/c++Opt b/wmake/rules/linux64Gcc49/c++Opt
new file mode 100644
index 0000000000..2aedabd628
--- /dev/null
+++ b/wmake/rules/linux64Gcc49/c++Opt
@@ -0,0 +1,2 @@
+c++DBUG =
+c++OPT = -O3
diff --git a/wmake/rules/linux64Gcc49/c++Prof b/wmake/rules/linux64Gcc49/c++Prof
new file mode 100644
index 0000000000..3bda4dad55
--- /dev/null
+++ b/wmake/rules/linux64Gcc49/c++Prof
@@ -0,0 +1,2 @@
+c++DBUG = -pg
+c++OPT = -O2
diff --git a/wmake/rules/linux64Gcc49/cDebug b/wmake/rules/linux64Gcc49/cDebug
new file mode 100644
index 0000000000..72b638f458
--- /dev/null
+++ b/wmake/rules/linux64Gcc49/cDebug
@@ -0,0 +1,2 @@
+cDBUG = -ggdb -DFULLDEBUG
+cOPT = -O1 -fdefault-inline -finline-functions
diff --git a/wmake/rules/linux64Gcc49/cOpt b/wmake/rules/linux64Gcc49/cOpt
new file mode 100644
index 0000000000..17318709f1
--- /dev/null
+++ b/wmake/rules/linux64Gcc49/cOpt
@@ -0,0 +1,2 @@
+cDBUG =
+cOPT = -O3
diff --git a/wmake/rules/linux64Gcc49/cProf b/wmake/rules/linux64Gcc49/cProf
new file mode 100644
index 0000000000..ca3ac9bf5f
--- /dev/null
+++ b/wmake/rules/linux64Gcc49/cProf
@@ -0,0 +1,2 @@
+cDBUG = -pg
+cOPT = -O2
diff --git a/wmake/rules/linux64Gcc49/general b/wmake/rules/linux64Gcc49/general
new file mode 100644
index 0000000000..4a42b11b1e
--- /dev/null
+++ b/wmake/rules/linux64Gcc49/general
@@ -0,0 +1,8 @@
+CPP = cpp -traditional-cpp
+
+PROJECT_LIBS = -l$(WM_PROJECT) -ldl
+
+include $(GENERAL_RULES)/standard
+
+include $(RULES)/c
+include $(RULES)/c++
diff --git a/wmake/rules/linux64Gcc49/mplibHPMPI b/wmake/rules/linux64Gcc49/mplibHPMPI
new file mode 100644
index 0000000000..574492a236
--- /dev/null
+++ b/wmake/rules/linux64Gcc49/mplibHPMPI
@@ -0,0 +1,3 @@
+PFLAGS =
+PINC = -I$(MPI_ARCH_PATH)/include -D_MPICC_H
+PLIBS = -L$(MPI_ARCH_PATH)/lib/linux_amd64 -lmpi
diff --git a/wmake/rules/linux64Gcc49/mplibINTELMPI b/wmake/rules/linux64Gcc49/mplibINTELMPI
new file mode 100644
index 0000000000..cf80ec2eaf
--- /dev/null
+++ b/wmake/rules/linux64Gcc49/mplibINTELMPI
@@ -0,0 +1,3 @@
+PFLAGS = -DMPICH_SKIP_MPICXX
+PINC = -I$(MPI_ARCH_PATH)/include64
+PLIBS = -L$(MPI_ARCH_PATH)/lib64 -lmpi
diff --git a/wmake/rules/linuxGcc49/c b/wmake/rules/linuxGcc49/c
new file mode 100644
index 0000000000..d914fcd37d
--- /dev/null
+++ b/wmake/rules/linuxGcc49/c
@@ -0,0 +1,16 @@
+.SUFFIXES: .c .h
+
+cWARN = -Wall
+
+cc = gcc -m32
+
+include $(RULES)/c$(WM_COMPILE_OPTION)
+
+cFLAGS = $(GFLAGS) $(cWARN) $(cOPT) $(cDBUG) $(LIB_HEADER_DIRS) -fPIC
+
+ctoo = $(WM_SCHEDULER) $(cc) $(cFLAGS) -c $$SOURCE -o $@
+
+LINK_LIBS = $(cDBUG)
+
+LINKLIBSO = $(cc) -shared
+LINKEXE = $(cc) -Xlinker --add-needed -Xlinker -z -Xlinker nodefs
diff --git a/wmake/rules/linuxGcc49/c++ b/wmake/rules/linuxGcc49/c++
new file mode 100644
index 0000000000..357f4106e1
--- /dev/null
+++ b/wmake/rules/linuxGcc49/c++
@@ -0,0 +1,21 @@
+.SUFFIXES: .C .cxx .cc .cpp
+
+c++WARN = -Wall -Wextra -Wno-unused-parameter -Wold-style-cast
+
+CC = g++ -m32
+
+include $(RULES)/c++$(WM_COMPILE_OPTION)
+
+ptFLAGS = -DNoRepository -ftemplate-depth-100
+
+c++FLAGS = $(GFLAGS) $(c++WARN) $(c++OPT) $(c++DBUG) $(ptFLAGS) $(LIB_HEADER_DIRS) -fPIC
+
+Ctoo = $(WM_SCHEDULER) $(CC) $(c++FLAGS) -c $$SOURCE -o $@
+cxxtoo = $(Ctoo)
+cctoo = $(Ctoo)
+cpptoo = $(Ctoo)
+
+LINK_LIBS = $(c++DBUG)
+
+LINKLIBSO = $(CC) $(c++FLAGS) -shared -Xlinker --add-needed -Xlinker --no-as-needed
+LINKEXE = $(CC) $(c++FLAGS) -Xlinker --add-needed -Xlinker --no-as-needed
diff --git a/wmake/rules/linuxGcc49/c++Debug b/wmake/rules/linuxGcc49/c++Debug
new file mode 100644
index 0000000000..19bdb9c334
--- /dev/null
+++ b/wmake/rules/linuxGcc49/c++Debug
@@ -0,0 +1,2 @@
+c++DBUG = -ggdb3 -DFULLDEBUG
+c++OPT = -O0 -fdefault-inline
diff --git a/wmake/rules/linuxGcc49/c++Opt b/wmake/rules/linuxGcc49/c++Opt
new file mode 100644
index 0000000000..2aedabd628
--- /dev/null
+++ b/wmake/rules/linuxGcc49/c++Opt
@@ -0,0 +1,2 @@
+c++DBUG =
+c++OPT = -O3
diff --git a/wmake/rules/linuxGcc49/c++Prof b/wmake/rules/linuxGcc49/c++Prof
new file mode 100644
index 0000000000..3bda4dad55
--- /dev/null
+++ b/wmake/rules/linuxGcc49/c++Prof
@@ -0,0 +1,2 @@
+c++DBUG = -pg
+c++OPT = -O2
diff --git a/wmake/rules/linuxGcc49/cDebug b/wmake/rules/linuxGcc49/cDebug
new file mode 100644
index 0000000000..72b638f458
--- /dev/null
+++ b/wmake/rules/linuxGcc49/cDebug
@@ -0,0 +1,2 @@
+cDBUG = -ggdb -DFULLDEBUG
+cOPT = -O1 -fdefault-inline -finline-functions
diff --git a/wmake/rules/linuxGcc49/cOpt b/wmake/rules/linuxGcc49/cOpt
new file mode 100644
index 0000000000..17318709f1
--- /dev/null
+++ b/wmake/rules/linuxGcc49/cOpt
@@ -0,0 +1,2 @@
+cDBUG =
+cOPT = -O3
diff --git a/wmake/rules/linuxGcc49/cProf b/wmake/rules/linuxGcc49/cProf
new file mode 100644
index 0000000000..ca3ac9bf5f
--- /dev/null
+++ b/wmake/rules/linuxGcc49/cProf
@@ -0,0 +1,2 @@
+cDBUG = -pg
+cOPT = -O2
diff --git a/wmake/rules/linuxGcc49/general b/wmake/rules/linuxGcc49/general
new file mode 100644
index 0000000000..4b051e6b98
--- /dev/null
+++ b/wmake/rules/linuxGcc49/general
@@ -0,0 +1,9 @@
+CPP = cpp -traditional-cpp
+LD = ld -melf_i386
+
+PROJECT_LIBS = -l$(WM_PROJECT) -ldl
+
+include $(GENERAL_RULES)/standard
+
+include $(RULES)/c
+include $(RULES)/c++
diff --git a/wmake/rules/linuxGcc49/mplibHPMPI b/wmake/rules/linuxGcc49/mplibHPMPI
new file mode 100644
index 0000000000..8aff40632b
--- /dev/null
+++ b/wmake/rules/linuxGcc49/mplibHPMPI
@@ -0,0 +1,3 @@
+PFLAGS =
+PINC = -I$(MPI_ARCH_PATH)/include -D_MPICC_H
+PLIBS = -L$(MPI_ARCH_PATH)/lib/linux_ia32 -lmpi