diff --git a/applications/utilities/miscellaneous/foamHelp/helpTypes/helpBoundary/helpBoundary.C b/applications/utilities/miscellaneous/foamHelp/helpTypes/helpBoundary/helpBoundary.C
new file mode 100644
index 0000000000..3d1c995018
--- /dev/null
+++ b/applications/utilities/miscellaneous/foamHelp/helpTypes/helpBoundary/helpBoundary.C
@@ -0,0 +1,185 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2012 OpenCFD Ltd.
+ \\/ 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 "helpBoundary.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+ namespace helpTypes
+ {
+ defineTypeNameAndDebug(helpBoundary, 0);
+ addNamedToRunTimeSelectionTable
+ (
+ helpType,
+ helpBoundary,
+ dictionary,
+ boundary
+ );
+ }
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+Foam::helpTypes::helpBoundary::helpBoundary()
+{}
+
+
+// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
+
+Foam::helpTypes::helpBoundary::~helpBoundary()
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+void Foam::helpTypes::helpBoundary::init()
+{
+ helpType::init();
+
+ argList::validArgs.append("boundary");
+
+ argList::addOption
+ (
+ "field",
+ "word",
+ "list available conditions for field"
+ );
+ argList::addBoolOption
+ (
+ "constraint",
+ "list constraint patches"
+ );
+ argList::addBoolOption
+ (
+ "fixedValue",
+ "list fixed value patches (use with -field option)"
+ );
+}
+
+
+void Foam::helpTypes::helpBoundary::execute
+(
+ const argList& args,
+ const fvMesh& mesh
+)
+{
+ bool abortVar(env("FOAM_ABORT"));
+ if (abortVar)
+ {
+ FatalErrorIn
+ (
+ "void Foam::helpTypes::helpBoundary::execute"
+ "("
+ "const argList&, "
+ "const fvMesh&"
+ ")"
+ )
+ << "Please unset FOAM_ABORT to use this utlity"
+ << exit(FatalError);
+ }
+
+ word condition(word::null);
+ word fieldName(word::null);
+
+ if (args.optionReadIfPresent("browse", condition))
+ {
+ // TODO: strip scoping info if present?
+ // e.g. conditions with leading "compressible::" will not be found
+ // ".*[fF]vPatchField.*" + className + ".*"
+ displayDoc(condition, ".*[fF]vPatchField.*", false);
+ }
+ else if (args.optionFound("constraint"))
+ {
+ HashSet constraintTypes(fvPatch::constraintTypes());
+ Info<< "Constraint types:" << nl;
+ forAllConstIter(HashSet, constraintTypes, iter)
+ {
+ Info<< " " << iter.key() << nl;
+ }
+ Info<< endl;
+ }
+ else if (args.optionReadIfPresent("field", fieldName))
+ {
+ IOobject fieldHeader
+ (
+ fieldName,
+ mesh.time().timeName(),
+ mesh,
+ IOobject::MUST_READ
+ );
+
+ if (fieldHeader.headerOk())
+ {
+ if (args.optionFound("fixedValue"))
+ {
+ fixedValueFieldConditions(fieldHeader);
+ fixedValueFieldConditions(fieldHeader);
+ fixedValueFieldConditions(fieldHeader);
+ fixedValueFieldConditions(fieldHeader);
+ fixedValueFieldConditions(fieldHeader);
+ }
+ else
+ {
+ (void)fieldConditions(fieldHeader, true);
+ (void)fieldConditions(fieldHeader, true);
+ (void)fieldConditions(fieldHeader, true);
+ (void)fieldConditions(fieldHeader, true);
+ (void)fieldConditions(fieldHeader, true);
+ }
+ }
+ else
+ {
+ FatalErrorIn
+ (
+ "void Foam::helpTypes::helpBoundary::execute"
+ "("
+ "const argList&, "
+ "const fvMesh&"
+ ")"
+ )
+ << "Unable to read field " << fieldName << exit(FatalError);
+ }
+ }
+ else if (args.optionReadIfPresent("fixedValue", fieldName))
+ {
+ FatalErrorIn
+ (
+ "void Foam::helpTypes::helpBoundary::execute"
+ "("
+ "const argList&, "
+ "const fvMesh&"
+ ")"
+ )
+ << "-field option must be specified when using the -fixedValue "
+ << "option" << exit(FatalError);
+ }
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/miscellaneous/foamHelp/helpTypes/helpBoundary/helpBoundary.H b/applications/utilities/miscellaneous/foamHelp/helpTypes/helpBoundary/helpBoundary.H
new file mode 100644
index 0000000000..515425b7bc
--- /dev/null
+++ b/applications/utilities/miscellaneous/foamHelp/helpTypes/helpBoundary/helpBoundary.H
@@ -0,0 +1,109 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2012 OpenCFD Ltd.
+ \\/ 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::helpBoundary
+
+Description
+
+
+SourceFiles
+ helpBoundary.C
+ helpBoundaryTemplates.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef helpBoundary_H
+#define helpBoundary_H
+
+#include "helpType.H"
+#include "IOobject.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace helpTypes
+{
+
+/*---------------------------------------------------------------------------*\
+ Class helpBoundary Declaration
+\*---------------------------------------------------------------------------*/
+
+class helpBoundary
+:
+ public helpType
+{
+
+protected:
+
+ // Protected Member Functions
+
+ //- Return/output the available boundary conditions for fields of Type
+ template
+ wordList fieldConditions(const IOobject& io, const bool write) const;
+
+ //- Output the available fixed boundary conditions for fields of Type
+ template
+ void fixedValueFieldConditions(const IOobject& io) const;
+
+
+public:
+
+ //- Runtime type information
+ TypeName("helpBoundary");
+
+ //- Constructor
+ helpBoundary();
+
+ //- Destructor
+ virtual ~helpBoundary();
+
+
+ // Member Functions
+
+ //- Initialise - typically setting static variables,
+ // e.g. command line arguments
+ virtual void init();
+
+ //- Execute the help
+ virtual void execute(const argList& args, const fvMesh& mesh);
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace helpTypes
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#ifdef NoRepository
+ #include "helpBoundaryTemplates.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/miscellaneous/foamHelp/helpTypes/helpBoundary/helpBoundaryTemplates.C b/applications/utilities/miscellaneous/foamHelp/helpTypes/helpBoundary/helpBoundaryTemplates.C
new file mode 100644
index 0000000000..d9ee2c92f1
--- /dev/null
+++ b/applications/utilities/miscellaneous/foamHelp/helpTypes/helpBoundary/helpBoundaryTemplates.C
@@ -0,0 +1,160 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2012 OpenCFD Ltd.
+ \\/ 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 "GeometricField.H"
+#include "fvPatchField.H"
+#include "volMesh.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+template
+Foam::wordList Foam::helpTypes::helpBoundary::fieldConditions
+(
+ const IOobject& io,
+ const bool write
+) const
+{
+ typedef GeometricField fieldType;
+
+ if (io.headerClassName() == fieldType::typeName)
+ {
+ wordList types
+ (
+ fvPatchField::dictionaryConstructorTablePtr_->sortedToc()
+ );
+
+ if (write)
+ {
+ Info<< "Available boundary conditions for "
+ << pTraits::typeName << " field: " << io.name() << nl;
+
+ forAll(types, i)
+ {
+ Info<< " " << types[i] << nl;
+ }
+
+ Info<< endl;
+ }
+
+ return types;
+ }
+
+ return wordList();
+}
+
+
+template
+void Foam::helpTypes::helpBoundary::fixedValueFieldConditions
+(
+ const IOobject& io
+) const
+{
+ wordList types(fieldConditions(io, false));
+
+ if (!types.size())
+ {
+ return;
+ }
+
+ typedef GeometricField fieldType;
+
+ const fvMesh& mesh = dynamic_cast(io.db());
+
+ fieldType fld
+ (
+ IOobject
+ (
+ "dummy",
+ mesh.time().timeName(),
+ mesh,
+ IOobject::NO_READ,
+ IOobject::NO_WRITE,
+ false
+ ),
+ mesh,
+ dimensioned("zero", dimless, pTraits::zero)
+ );
+
+
+ Info<< "Fixed value boundary conditions for "
+ << pTraits::typeName << " field: " << io.name() << nl;
+
+ // throw exceptions to avoid fatal errors when casting from generic patch
+ // type to incompatible patch type
+ FatalIOError.throwExceptions();
+ FatalError.throwExceptions();
+
+ bool foundFixed = false;
+ forAll(types, i)
+ {
+ const word& patchType = types[i];
+
+ try
+ {
+ polyPatch pp
+ (
+ "defaultFaces",
+ 0,
+ mesh.nInternalFaces(),
+ 0,
+ mesh.boundaryMesh()
+ );
+
+ fvPatch fvp(pp, mesh.boundary());
+
+ tmp > pf
+ (
+ fvPatchField::New
+ (
+ patchType,
+ fvp,
+ fld
+ )
+ );
+
+ if (pf().fixesValue())
+ {
+ Info<< " " << patchType << nl;
+ foundFixed = true;
+ }
+ }
+ catch (...)
+ {
+ // do nothing
+ }
+ }
+
+ if (!foundFixed)
+ {
+ // no conditions???
+ Info<< " none" << nl;
+ }
+
+ Info<< endl;
+}
+
+
+// ************************************************************************* //