diff --git a/src/meshTools/AMIInterpolation/patches/cyclic/cyclicAMIPointPatchField/cyclicAMIPointPatchField.C b/src/meshTools/AMIInterpolation/patches/cyclic/cyclicAMIPointPatchField/cyclicAMIPointPatchField.C
new file mode 100644
index 0000000000..8aa29db5cb
--- /dev/null
+++ b/src/meshTools/AMIInterpolation/patches/cyclic/cyclicAMIPointPatchField/cyclicAMIPointPatchField.C
@@ -0,0 +1,210 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenFOAM. If not, see .
+
+\*---------------------------------------------------------------------------*/
+
+#include "cyclicAMIPointPatchField.H"
+#include "Swap.H"
+#include "transformField.H"
+#include "pointFields.H"
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+template
+Foam::cyclicAMIPointPatchField::cyclicAMIPointPatchField
+(
+ const pointPatch& p,
+ const DimensionedField& iF
+)
+:
+ coupledPointPatchField(p, iF),
+ cyclicAMIPatch_(refCast(p)),
+ ppiPtr_(NULL),
+ nbrPpiPtr_(NULL)
+{}
+
+
+template
+Foam::cyclicAMIPointPatchField::cyclicAMIPointPatchField
+(
+ const pointPatch& p,
+ const DimensionedField& iF,
+ const dictionary& dict
+)
+:
+ coupledPointPatchField(p, iF, dict),
+ cyclicAMIPatch_(refCast(p)),
+ ppiPtr_(NULL),
+ nbrPpiPtr_(NULL)
+{
+ if (!isType(p))
+ {
+ FatalIOErrorIn
+ (
+ "cyclicAMIPointPatchField::cyclicAMIPointPatchField\n"
+ "(\n"
+ " const pointPatch&,\n"
+ " const DimensionedField&,\n"
+ " const dictionary&\n"
+ ")\n",
+ dict
+ ) << "patch " << this->patch().index() << " not cyclicAMI type. "
+ << "Patch type = " << p.type()
+ << exit(FatalIOError);
+ }
+}
+
+
+template
+Foam::cyclicAMIPointPatchField::cyclicAMIPointPatchField
+(
+ const cyclicAMIPointPatchField& ptf,
+ const pointPatch& p,
+ const DimensionedField& iF,
+ const pointPatchFieldMapper& mapper
+)
+:
+ coupledPointPatchField(ptf, p, iF, mapper),
+ cyclicAMIPatch_(refCast(p)),
+ ppiPtr_(NULL),
+ nbrPpiPtr_(NULL)
+{
+ if (!isType(this->patch()))
+ {
+ FatalErrorIn
+ (
+ "cyclicAMIPointPatchField::cyclicAMIPointPatchField\n"
+ "(\n"
+ " const cyclicAMIPointPatchField&,\n"
+ " const pointPatch&,\n"
+ " const DimensionedField&,\n"
+ " const pointPatchFieldMapper&\n"
+ ")\n"
+ ) << "Field type does not correspond to patch type for patch "
+ << this->patch().index() << "." << endl
+ << "Field type: " << typeName << endl
+ << "Patch type: " << this->patch().type()
+ << exit(FatalError);
+ }
+}
+
+
+template
+Foam::cyclicAMIPointPatchField::cyclicAMIPointPatchField
+(
+ const cyclicAMIPointPatchField& ptf,
+ const DimensionedField& iF
+)
+:
+ coupledPointPatchField(ptf, iF),
+ cyclicAMIPatch_(ptf.cyclicAMIPatch_),
+ ppiPtr_(NULL),
+ nbrPpiPtr_(NULL)
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+template
+void Foam::cyclicAMIPointPatchField::swapAddSeparated
+(
+ const Pstream::commsTypes,
+ Field& pField
+) const
+{
+ if (cyclicAMIPatch_.cyclicAMIPatch().owner())
+ {
+ // We inplace modify pField. To prevent the other side (which gets
+ // evaluated at a later date) using already changed values we do
+ // all swaps on the side that gets evaluated first.
+
+ // Get neighbouring pointPatch
+ const cyclicAMIPointPatch& nbrPatch = cyclicAMIPatch_.neighbPatch();
+
+ // Get neighbouring pointPatchField
+ const GeometricField& fld =
+ refCast >
+ (
+ this->dimensionedInternalField()
+ );
+
+ const cyclicAMIPointPatchField& nbr =
+ refCast >
+ (
+ fld.boundaryField()[nbrPatch.index()]
+ );
+
+
+ Field ptFld(this->patchInternalField(pField));
+ Field nbrPtFld(nbr.patchInternalField(pField));
+
+
+ if (doTransform())
+ {
+ const tensor& forwardT = this->forwardT()[0];
+ const tensor& reverseT = this->reverseT()[0];
+
+ transform(ptFld, reverseT, ptFld);
+ transform(nbrPtFld, forwardT, nbrPtFld);
+ }
+
+ // convert point field to face field, AMI interpolate, then
+ // face back to point
+ {
+ // add neighbour side contribution to owner
+ Field nbrFcFld(nbrPpi().pointToFaceInterpolate(nbrPtFld));
+
+ // interpolate to owner
+ nbrFcFld = cyclicAMIPatch_.cyclicAMIPatch().interpolate(nbrFcFld);
+
+ // add to internal field
+ this->addToInternalField
+ (
+ pField,
+ ppi().faceToPointInterpolate(nbrFcFld)()
+ );
+ }
+
+ {
+ // add owner side contribution to neighbour
+ Field fcFld(ppi().pointToFaceInterpolate(ptFld));
+
+ // interpolate to neighbour
+ fcFld =
+ cyclicAMIPatch_.cyclicAMIPatch().neighbPatch().interpolate
+ (
+ fcFld
+ );
+
+ // add to internal field
+ nbr.addToInternalField
+ (
+ pField,
+ nbrPpi().faceToPointInterpolate(fcFld)()
+ );
+ }
+ }
+}
+
+
+// ************************************************************************* //
diff --git a/src/meshTools/AMIInterpolation/patches/cyclic/cyclicAMIPointPatchField/cyclicAMIPointPatchField.H b/src/meshTools/AMIInterpolation/patches/cyclic/cyclicAMIPointPatchField/cyclicAMIPointPatchField.H
new file mode 100644
index 0000000000..845ecb46a2
--- /dev/null
+++ b/src/meshTools/AMIInterpolation/patches/cyclic/cyclicAMIPointPatchField/cyclicAMIPointPatchField.H
@@ -0,0 +1,241 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenFOAM. If not, see .
+
+Class
+ Foam::cyclicAMIPointPatchField
+
+Description
+ Cyclic AMI front and back plane patch field
+
+SourceFiles
+ cyclicAMIPointPatchField.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef cyclicAMIPointPatchField_H
+#define cyclicAMIPointPatchField_H
+
+#include "coupledPointPatchField.H"
+#include "cyclicAMIPointPatch.H"
+#include "PrimitivePatchInterpolation.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+ Class cyclicAMIPointPatchField Declaration
+\*---------------------------------------------------------------------------*/
+
+template
+class cyclicAMIPointPatchField
+:
+ public coupledPointPatchField
+{
+ // Private data
+
+ //- Local reference cast into the cyclicAMI patch
+ const cyclicAMIPointPatch& cyclicAMIPatch_;
+
+ //- Owner side patch interpolation pointer
+ mutable autoPtr > ppiPtr_;
+
+ //- Neighbour side patch interpolation pointer
+ mutable autoPtr >
+ nbrPpiPtr_;
+
+
+ // Private Member Functions
+
+ //- Owner side patch interpolation
+ const PrimitivePatchInterpolation& ppi() const
+ {
+ if (!ppiPtr_.valid())
+ {
+ ppiPtr_.reset
+ (
+ new PrimitivePatchInterpolation
+ (
+ cyclicAMIPatch_.cyclicAMIPatch()
+ )
+ );
+ }
+
+ return ppiPtr_();
+ }
+
+ //- Neighbour side patch interpolation
+ const PrimitivePatchInterpolation& nbrPpi() const
+ {
+ if (!nbrPpiPtr_.valid())
+ {
+ nbrPpiPtr_.reset
+ (
+ new PrimitivePatchInterpolation
+ (
+ cyclicAMIPatch_.cyclicAMIPatch().neighbPatch()
+ )
+ );
+ }
+
+ return nbrPpiPtr_();
+ }
+
+
+public:
+
+ //- Runtime type information
+ TypeName(cyclicAMIPointPatch::typeName_());
+
+
+ // Constructors
+
+ //- Construct from patch and internal field
+ cyclicAMIPointPatchField
+ (
+ const pointPatch&,
+ const DimensionedField&
+ );
+
+ //- Construct from patch, internal field and dictionary
+ cyclicAMIPointPatchField
+ (
+ const pointPatch&,
+ const DimensionedField&,
+ const dictionary&
+ );
+
+ //- Construct by mapping given patchField onto a new patch
+ cyclicAMIPointPatchField
+ (
+ const cyclicAMIPointPatchField&,
+ const pointPatch&,
+ const DimensionedField&,
+ const pointPatchFieldMapper&
+ );
+
+ //- Construct and return a clone
+ virtual autoPtr > clone() const
+ {
+ return autoPtr >
+ (
+ new cyclicAMIPointPatchField
+ (
+ *this
+ )
+ );
+ }
+
+ //- Construct as copy setting internal field reference
+ cyclicAMIPointPatchField
+ (
+ const cyclicAMIPointPatchField&,
+ const DimensionedField&
+ );
+
+ //- Construct and return a clone setting internal field reference
+ virtual autoPtr > clone
+ (
+ const DimensionedField& iF
+ ) const
+ {
+ return autoPtr >
+ (
+ new cyclicAMIPointPatchField
+ (
+ *this, iF
+ )
+ );
+ }
+
+
+ // Member functions
+
+ // Constraint handling
+
+ //- Return the constraint type this pointPatchField implements
+ virtual const word& constraintType() const
+ {
+ return cyclicAMIPointPatch::typeName;
+ }
+
+
+ // Cyclic AMI coupled interface functions
+
+ //- Does the patch field perform the transfromation
+ virtual bool doTransform() const
+ {
+ return
+ !(
+ cyclicAMIPatch_.parallel()
+ || pTraits::rank == 0
+ );
+ }
+
+ //- Return face transformation tensor
+ virtual const tensorField& forwardT() const
+ {
+ return cyclicAMIPatch_.forwardT();
+ }
+
+ //- Return neighbour-cell transformation tensor
+ virtual const tensorField& reverseT() const
+ {
+ return cyclicAMIPatch_.reverseT();
+ }
+
+
+ // Evaluation functions
+
+ //- Evaluate the patch field
+ virtual void evaluate
+ (
+ const Pstream::commsTypes commsType=Pstream::blocking
+ )
+ {}
+
+ //- Complete swap of patch point values and add to local values
+ virtual void swapAddSeparated
+ (
+ const Pstream::commsTypes commsType,
+ Field&
+ ) const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#ifdef NoRepository
+# include "cyclicAMIPointPatchField.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/meshTools/AMIInterpolation/patches/cyclic/cyclicAMIPointPatchField/cyclicAMIPointPatchFields.C b/src/meshTools/AMIInterpolation/patches/cyclic/cyclicAMIPointPatchField/cyclicAMIPointPatchFields.C
new file mode 100644
index 0000000000..56e1aef405
--- /dev/null
+++ b/src/meshTools/AMIInterpolation/patches/cyclic/cyclicAMIPointPatchField/cyclicAMIPointPatchFields.C
@@ -0,0 +1,43 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenFOAM. If not, see .
+
+\*---------------------------------------------------------------------------*/
+
+#include "cyclicAMIPointPatchFields.H"
+#include "pointPatchFields.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+makePointPatchFields(cyclicAMI);
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// ************************************************************************* //
diff --git a/src/meshTools/AMIInterpolation/patches/cyclic/cyclicAMIPointPatchField/cyclicAMIPointPatchFields.H b/src/meshTools/AMIInterpolation/patches/cyclic/cyclicAMIPointPatchField/cyclicAMIPointPatchFields.H
new file mode 100644
index 0000000000..0fb94a64c7
--- /dev/null
+++ b/src/meshTools/AMIInterpolation/patches/cyclic/cyclicAMIPointPatchField/cyclicAMIPointPatchFields.H
@@ -0,0 +1,49 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenFOAM. If not, see .
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef cyclicAMIPointPatchFields_H
+#define cyclicAMIPointPatchFields_H
+
+#include "cyclicAMIPointPatchField.H"
+#include "fieldTypes.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+makePointPatchFieldTypedefs(cyclicAMI);
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/meshTools/Make/files b/src/meshTools/Make/files
index e1c9854902..d8687b042b 100644
--- a/src/meshTools/Make/files
+++ b/src/meshTools/Make/files
@@ -169,6 +169,7 @@ $(AMICycPatches)/cyclicAMILduInterfaceField/cyclicAMILduInterface.C
$(AMICycPatches)/cyclicAMILduInterfaceField/cyclicAMILduInterfaceField.C
$(AMICycPatches)/cyclicAMIPolyPatch/cyclicAMIPolyPatch.C
$(AMICycPatches)/cyclicAMIPointPatch/cyclicAMIPointPatch.C
+$(AMICycPatches)/cyclicAMIPointPatchField/cyclicAMIPointPatchFields.C
mappedPatches/mappedPolyPatch/mappedPatchBase.C
mappedPatches/mappedPolyPatch/mappedPolyPatch.C