From 43849051f2dddf9320d8b83e1890bfc7a2874139 Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@esi-group.com>
Date: Thu, 18 Apr 2024 12:55:40 +0200
Subject: [PATCH] BUG: fvsPatchFields reading/writing the "value" entry (fixes
 #3144)

- manual revert for 44d0fbd594a9.

  Unless required for post-processing the "value" entry should not
  written if it is not mandatory for reading.

  This is especially crucial with an 'empty' patch field where the
  field (size 0) has a different size from the patch.

- the changes made align fvsPatchField behaviour with fvPatchField
---
 .../fixedValue/fixedValuePointPatchField.H    |  6 ++--
 .../basic/value/valuePointPatchField.H        |  4 +--
 .../porousBafflePressureFvPatchField.C        |  6 ++--
 .../porousBafflePressureFvPatchField.H        |  2 +-
 .../basic/sliced/slicedFaPatchField.H         |  7 ++--
 .../constraint/empty/emptyFaPatchField.C      | 19 +++++-----
 .../constraint/empty/emptyFaPatchField.H      |  7 ++--
 .../clampedPlate/clampedPlateFaPatchField.H   |  2 +-
 .../edgeNormalFixedValueFaPatchVectorField.H  |  2 +-
 .../fixedValueOutflowFaPatchField.H           |  4 +--
 .../inletOutlet/inletOutletFaPatchField.H     |  2 +-
 .../outletInlet/outletInletFaPatchField.H     |  2 +-
 ...timeVaryingUniformFixedValueFaPatchField.H |  2 +-
 .../uniformFixedGradientFaPatchField.H        |  4 +--
 .../uniformFixedValueFaPatchField.H           |  2 +-
 .../uniformMixed/uniformMixedFaPatchField.H   |  2 +-
 .../constraint/empty/emptyFaePatchField.C     | 19 +++++-----
 .../constraint/empty/emptyFaePatchField.H     |  3 +-
 .../basicSymmetry/basicSymmetryFvPatchField.H | 11 +++---
 .../basic/calculated/calculatedFvPatchField.H | 11 ++++--
 .../basic/coupled/coupledFvPatchField.H       | 11 +++---
 .../basic/fixedValue/fixedValueFvPatchField.C | 10 +++---
 .../basic/fixedValue/fixedValueFvPatchField.H | 13 ++++---
 .../basic/transform/transformFvPatchField.H   | 11 +++---
 .../constraint/cyclic/cyclicFvPatchField.C    |  4 +--
 .../constraint/cyclic/cyclicFvPatchField.H    |  8 +++--
 .../cyclicSlip/cyclicSlipFvPatchField.C       |  2 +-
 .../cyclicSlip/cyclicSlipFvPatchField.H       | 10 +++---
 .../constraint/empty/emptyFvPatchField.C      | 25 +++++++------
 .../constraint/empty/emptyFvPatchField.H      |  7 ++--
 .../jumpCyclic/jumpCyclicFvPatchField.C       | 11 +++---
 .../jumpCyclic/jumpCyclicFvPatchField.H       | 12 ++++---
 .../nonuniformTransformCyclicFvPatchField.C   |  2 +-
 .../nonuniformTransformCyclicFvPatchField.H   | 11 +++---
 .../processor/processorFvPatchField.C         |  1 -
 .../processorCyclicFvPatchField.C             |  7 ----
 .../processorCyclicFvPatchField.H             |  6 ++--
 .../symmetry/symmetryFvPatchField.H           |  1 -
 .../constraint/wedge/wedgeFvPatchField.C      | 18 +++++-----
 .../constraint/wedge/wedgeFvPatchField.H      | 12 +++++--
 .../derived/fan/fanFvPatchField.C             |  2 +-
 .../derived/fixedJump/fixedJumpFvPatchField.C |  8 ++---
 .../derived/fixedJump/fixedJumpFvPatchField.H |  2 +-
 .../fixedNormalSlipFvPatchField.C             |  9 +++--
 .../fixedNormalSlipFvPatchField.H             |  9 +++--
 .../partialSlip/partialSlipFvPatchField.C     | 23 ++++++------
 .../partialSlip/partialSlipFvPatchField.H     | 18 ++++++----
 .../uniformJump/uniformJumpFvPatchField.C     |  6 ++--
 .../uniformJump/uniformJumpFvPatchField.H     |  2 +-
 .../fvPatchFields/fvPatchField/fvPatchField.H |  4 +--
 .../calculated/calculatedFvsPatchField.C      | 12 ++++++-
 .../calculated/calculatedFvsPatchField.H      | 24 ++++++++++++-
 .../basic/coupled/coupledFvsPatchField.C      | 17 +++++++--
 .../basic/coupled/coupledFvsPatchField.H      | 31 ++++++++--------
 .../fixedValue/fixedValueFvsPatchField.C      | 22 ++++++++----
 .../fixedValue/fixedValueFvsPatchField.H      | 35 +++++++++++++++----
 .../basic/sliced/slicedFvsPatchField.C        | 12 ++++++-
 .../basic/sliced/slicedFvsPatchField.H        |  9 +++--
 .../constraint/cyclic/cyclicFvsPatchField.H   | 25 +++++++++----
 .../cyclicACMI/cyclicACMIFvsPatchField.C      |  2 +-
 .../cyclicACMI/cyclicACMIFvsPatchField.H      |  9 +++--
 .../cyclicAMI/cyclicAMIFvsPatchField.H        | 11 ++++--
 .../constraint/empty/emptyFvsPatchField.C     | 25 +++++++------
 .../constraint/empty/emptyFvsPatchField.H     | 21 ++++++++---
 .../processor/processorFvsPatchField.C        |  7 ----
 .../processor/processorFvsPatchField.H        | 29 ++++++++++-----
 .../processorCyclicFvsPatchField.C            |  7 ----
 .../processorCyclicFvsPatchField.H            | 23 ++++++------
 .../symmetry/symmetryFvsPatchField.C          | 13 +++----
 .../symmetry/symmetryFvsPatchField.H          | 20 ++++++++---
 .../symmetryPlaneFvsPatchField.C              | 13 +++----
 .../symmetryPlaneFvsPatchField.H              | 24 +++++++++----
 .../constraint/wedge/wedgeFvsPatchField.C     | 13 +++----
 .../constraint/wedge/wedgeFvsPatchField.H     | 23 +++++++++---
 .../fvsPatchField/fvsPatchField.C             |  1 -
 .../fvsPatchField/fvsPatchField.H             |  6 ++--
 ...specularRadiationMixedFvPatchScalarField.C |  2 +-
 77 files changed, 508 insertions(+), 310 deletions(-)

diff --git a/src/OpenFOAM/fields/pointPatchFields/basic/fixedValue/fixedValuePointPatchField.H b/src/OpenFOAM/fields/pointPatchFields/basic/fixedValue/fixedValuePointPatchField.H
index c325c855292..e8f269edbba 100644
--- a/src/OpenFOAM/fields/pointPatchFields/basic/fixedValue/fixedValuePointPatchField.H
+++ b/src/OpenFOAM/fields/pointPatchFields/basic/fixedValue/fixedValuePointPatchField.H
@@ -30,6 +30,8 @@ Class
 Description
     A FixedValue boundary condition for pointField.
 
+    The "value" entry is normally MUST_READ.
+
 SourceFiles
     fixedValuePointPatchField.C
 
@@ -92,13 +94,13 @@ public:
             const pointPatch& p,
             const DimensionedField<Type, pointMesh>& iF,
             const dictionary& dict,
-            const bool valueReqd
+            const bool needValue
         )
         :
             fixedValuePointPatchField
             (
                 p, iF, dict,
-                (valueReqd? IOobjectOption::MUST_READ : IOobjectOption::NO_READ)
+                (needValue? IOobjectOption::MUST_READ : IOobjectOption::NO_READ)
             )
         {}
 
diff --git a/src/OpenFOAM/fields/pointPatchFields/basic/value/valuePointPatchField.H b/src/OpenFOAM/fields/pointPatchFields/basic/value/valuePointPatchField.H
index 377be799304..a4f7c2b205f 100644
--- a/src/OpenFOAM/fields/pointPatchFields/basic/value/valuePointPatchField.H
+++ b/src/OpenFOAM/fields/pointPatchFields/basic/value/valuePointPatchField.H
@@ -123,13 +123,13 @@ public:
             const pointPatch& p,
             const DimensionedField<Type, pointMesh>& iF,
             const dictionary& dict,
-            const bool valueReqd
+            const bool needValue
         )
         :
             valuePointPatchField
             (
                 p, iF, dict,
-                (valueReqd? IOobjectOption::MUST_READ : IOobjectOption::NO_READ)
+                (needValue? IOobjectOption::MUST_READ : IOobjectOption::NO_READ)
             )
         {}
 
diff --git a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/porousBafflePressure/porousBafflePressureFvPatchField.C b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/porousBafflePressure/porousBafflePressureFvPatchField.C
index da66b10349c..46336accf7e 100644
--- a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/porousBafflePressure/porousBafflePressureFvPatchField.C
+++ b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/porousBafflePressure/porousBafflePressureFvPatchField.C
@@ -54,10 +54,10 @@ Foam::porousBafflePressureFvPatchField::porousBafflePressureFvPatchField
     const fvPatch& p,
     const DimensionedField<scalar, volMesh>& iF,
     const dictionary& dict,
-    const bool valueRequired
+    const bool needValue
 )
 :
-    fixedJumpFvPatchField<scalar>(p, iF, dict, false),
+    fixedJumpFvPatchField<scalar>(p, iF, dict, false),  // needValue = false
     phiName_(dict.getOrDefault<word>("phi", "phi")),
     rhoName_(dict.getOrDefault<word>("rho", "rho")),
     D_(Function1<scalar>::New("D", dict, &db())),
@@ -65,7 +65,7 @@ Foam::porousBafflePressureFvPatchField::porousBafflePressureFvPatchField
     length_(dict.get<scalar>("length")),
     uniformJump_(dict.getOrDefault("uniformJump", false))
 {
-    if (valueRequired)
+    if (needValue)
     {
         if (!this->readValueEntry(dict))
         {
diff --git a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/porousBafflePressure/porousBafflePressureFvPatchField.H b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/porousBafflePressure/porousBafflePressureFvPatchField.H
index e99ee74e9ab..ad9c2c60cd3 100644
--- a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/porousBafflePressure/porousBafflePressureFvPatchField.H
+++ b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/porousBafflePressure/porousBafflePressureFvPatchField.H
@@ -163,7 +163,7 @@ public:
             const fvPatch&,
             const DimensionedField<scalar, volMesh>&,
             const dictionary&,
-            const bool valueRequired = true
+            const bool needValue = true
         );
 
         //- Construct by mapping given porousBafflePressureFvPatchField
diff --git a/src/finiteArea/fields/faPatchFields/basic/sliced/slicedFaPatchField.H b/src/finiteArea/fields/faPatchFields/basic/sliced/slicedFaPatchField.H
index dcee956514f..3d31ef2ebe8 100644
--- a/src/finiteArea/fields/faPatchFields/basic/sliced/slicedFaPatchField.H
+++ b/src/finiteArea/fields/faPatchFields/basic/sliced/slicedFaPatchField.H
@@ -95,7 +95,8 @@ public:
             const DimensionedField<Type, areaMesh>&
         );
 
-        //- Construct from patch, internal field and dictionary
+        //- Construct from patch, internal field and dictionary.
+        //- Not implemented
         slicedFaPatchField
         (
             const faPatch&,
@@ -103,8 +104,8 @@ public:
             const dictionary&
         );
 
-        //- Construct by mapping the given sliced patch field
-        //- onto a new patch
+        //- Construct by mapping the given patch field onto a new patch.
+        //- Not implemented
         slicedFaPatchField
         (
             const slicedFaPatchField<Type>&,
diff --git a/src/finiteArea/fields/faPatchFields/constraint/empty/emptyFaPatchField.C b/src/finiteArea/fields/faPatchFields/constraint/empty/emptyFaPatchField.C
index b7cc020fe8b..daeae4a111d 100644
--- a/src/finiteArea/fields/faPatchFields/constraint/empty/emptyFaPatchField.C
+++ b/src/finiteArea/fields/faPatchFields/constraint/empty/emptyFaPatchField.C
@@ -38,7 +38,7 @@ Foam::emptyFaPatchField<Type>::emptyFaPatchField
     const DimensionedField<Type, areaMesh>& iF
 )
 :
-    faPatchField<Type>(p, iF, Field<Type>())
+    faPatchField<Type>(p, iF, Field<Type>())  // zero-sized patch field
 {}
 
 
@@ -51,7 +51,7 @@ Foam::emptyFaPatchField<Type>::emptyFaPatchField
     const faPatchFieldMapper&
 )
 :
-    faPatchField<Type>(p, iF, Field<Type>())
+    faPatchField<Type>(p, iF, Field<Type>())  // zero-sized patch field
 {
     if (!isType<emptyFaPatch>(p))
     {
@@ -74,8 +74,11 @@ Foam::emptyFaPatchField<Type>::emptyFaPatchField
     const dictionary& dict
 )
 :
-    faPatchField<Type>(p, iF, Field<Type>())
+    faPatchField<Type>(p, iF, Field<Type>())  // zero-sized patch field
 {
+    // Empty means empty, so no patchType override
+    // with faPatchFieldBase::readDict(dict);
+
     if (!isA<emptyFaPatch>(p))
     {
         FatalIOErrorInFunction(dict)
@@ -92,21 +95,21 @@ Foam::emptyFaPatchField<Type>::emptyFaPatchField
 template<class Type>
 Foam::emptyFaPatchField<Type>::emptyFaPatchField
 (
-    const emptyFaPatchField<Type>& ptf
+    const emptyFaPatchField<Type>& ptf,
+    const DimensionedField<Type, areaMesh>& iF
 )
 :
-    faPatchField<Type>(ptf.patch(), ptf.internalField(), Field<Type>())
+    faPatchField<Type>(ptf.patch(), iF, Field<Type>())  // zero-sized
 {}
 
 
 template<class Type>
 Foam::emptyFaPatchField<Type>::emptyFaPatchField
 (
-    const emptyFaPatchField<Type>& ptf,
-    const DimensionedField<Type, areaMesh>& iF
+    const emptyFaPatchField<Type>& ptf
 )
 :
-    faPatchField<Type>(ptf.patch(), iF, Field<Type>())
+    emptyFaPatchField<Type>(ptf, ptf.internalField())
 {}
 
 
diff --git a/src/finiteArea/fields/faPatchFields/constraint/empty/emptyFaPatchField.H b/src/finiteArea/fields/faPatchFields/constraint/empty/emptyFaPatchField.H
index de754592beb..ef6b2d9e36a 100644
--- a/src/finiteArea/fields/faPatchFields/constraint/empty/emptyFaPatchField.H
+++ b/src/finiteArea/fields/faPatchFields/constraint/empty/emptyFaPatchField.H
@@ -38,8 +38,8 @@ SourceFiles
 
 \*---------------------------------------------------------------------------*/
 
-#ifndef emptyFaPatchField_H
-#define emptyFaPatchField_H
+#ifndef Foam_emptyFaPatchField_H
+#define Foam_emptyFaPatchField_H
 
 #include "faPatchField.H"
 #include "emptyFaPatch.H"
@@ -74,7 +74,8 @@ public:
             const DimensionedField<Type, areaMesh>&
         );
 
-        //- Construct from patch, internal field and dictionary
+        //- Construct from patch, internal field and dictionary.
+        //- The "value" entry is NO_READ.
         emptyFaPatchField
         (
             const faPatch&,
diff --git a/src/finiteArea/fields/faPatchFields/derived/clampedPlate/clampedPlateFaPatchField.H b/src/finiteArea/fields/faPatchFields/derived/clampedPlate/clampedPlateFaPatchField.H
index 4cb191c158f..ca38463e024 100644
--- a/src/finiteArea/fields/faPatchFields/derived/clampedPlate/clampedPlateFaPatchField.H
+++ b/src/finiteArea/fields/faPatchFields/derived/clampedPlate/clampedPlateFaPatchField.H
@@ -183,7 +183,7 @@ public:
 
         // IO
 
-            //- Write
+            //- Write includes "value" entry
             virtual void write(Ostream&) const;
 };
 
diff --git a/src/finiteArea/fields/faPatchFields/derived/edgeNormalFixedValue/edgeNormalFixedValueFaPatchVectorField.H b/src/finiteArea/fields/faPatchFields/derived/edgeNormalFixedValue/edgeNormalFixedValueFaPatchVectorField.H
index 8a6c8dffb94..8c01ccf6211 100644
--- a/src/finiteArea/fields/faPatchFields/derived/edgeNormalFixedValue/edgeNormalFixedValueFaPatchVectorField.H
+++ b/src/finiteArea/fields/faPatchFields/derived/edgeNormalFixedValue/edgeNormalFixedValueFaPatchVectorField.H
@@ -159,7 +159,7 @@ public:
         //- Update the coefficients associated with the patch field
         virtual void updateCoeffs();
 
-        //- Write
+        //- Write includes "value" entry
         virtual void write(Ostream&) const;
 };
 
diff --git a/src/finiteArea/fields/faPatchFields/derived/fixedValueOutflow/fixedValueOutflowFaPatchField.H b/src/finiteArea/fields/faPatchFields/derived/fixedValueOutflow/fixedValueOutflowFaPatchField.H
index 80b1522c26e..ef3eb57580a 100644
--- a/src/finiteArea/fields/faPatchFields/derived/fixedValueOutflow/fixedValueOutflowFaPatchField.H
+++ b/src/finiteArea/fields/faPatchFields/derived/fixedValueOutflow/fixedValueOutflowFaPatchField.H
@@ -150,11 +150,11 @@ public:
             virtual tmp<Field<Type>> gradientBoundaryCoeffs() const;
 
 
-        //- Write
+        //- Write includes "value" entry
         virtual void write(Ostream&) const;
 
 
-    // Member operators
+    // Member Operators
 
         virtual void operator=(const UList<Type>&) {}
 
diff --git a/src/finiteArea/fields/faPatchFields/derived/inletOutlet/inletOutletFaPatchField.H b/src/finiteArea/fields/faPatchFields/derived/inletOutlet/inletOutletFaPatchField.H
index 02cb6831c73..0464beaa09d 100644
--- a/src/finiteArea/fields/faPatchFields/derived/inletOutlet/inletOutletFaPatchField.H
+++ b/src/finiteArea/fields/faPatchFields/derived/inletOutlet/inletOutletFaPatchField.H
@@ -168,7 +168,7 @@ public:
         //- Update the coefficients associated with the patch field
         virtual void updateCoeffs();
 
-        //- Write
+        //- Write includes "value" entry
         virtual void write(Ostream&) const;
 };
 
diff --git a/src/finiteArea/fields/faPatchFields/derived/outletInlet/outletInletFaPatchField.H b/src/finiteArea/fields/faPatchFields/derived/outletInlet/outletInletFaPatchField.H
index e46a1d25b22..922f27e39be 100644
--- a/src/finiteArea/fields/faPatchFields/derived/outletInlet/outletInletFaPatchField.H
+++ b/src/finiteArea/fields/faPatchFields/derived/outletInlet/outletInletFaPatchField.H
@@ -163,7 +163,7 @@ public:
         //- Update the coefficients associated with the patch field
         virtual void updateCoeffs();
 
-        //- Write
+        //- Write includes "value" entry
         virtual void write(Ostream&) const;
 };
 
diff --git a/src/finiteArea/fields/faPatchFields/derived/timeVaryingUniformFixedValue/timeVaryingUniformFixedValueFaPatchField.H b/src/finiteArea/fields/faPatchFields/derived/timeVaryingUniformFixedValue/timeVaryingUniformFixedValueFaPatchField.H
index 1e56baf866a..2dd84e81da6 100644
--- a/src/finiteArea/fields/faPatchFields/derived/timeVaryingUniformFixedValue/timeVaryingUniformFixedValueFaPatchField.H
+++ b/src/finiteArea/fields/faPatchFields/derived/timeVaryingUniformFixedValue/timeVaryingUniformFixedValueFaPatchField.H
@@ -183,7 +183,7 @@ public:
 
         // IO
 
-            //- Write
+            //- Write includes "value" entry
             virtual void write(Ostream&) const;
 };
 
diff --git a/src/finiteArea/fields/faPatchFields/derived/uniformFixedGradient/uniformFixedGradientFaPatchField.H b/src/finiteArea/fields/faPatchFields/derived/uniformFixedGradient/uniformFixedGradientFaPatchField.H
index 4c049d4f45b..2490f1f6224 100644
--- a/src/finiteArea/fields/faPatchFields/derived/uniformFixedGradient/uniformFixedGradientFaPatchField.H
+++ b/src/finiteArea/fields/faPatchFields/derived/uniformFixedGradient/uniformFixedGradientFaPatchField.H
@@ -161,12 +161,12 @@ public:
         }
 
 
-    // Member functions
+    // Member Functions
 
         //- Update the coefficients associated with the patch field
         virtual void updateCoeffs();
 
-        //- Write
+        //- Write includes "value" entry
         virtual void write(Ostream& os) const;
 };
 
diff --git a/src/finiteArea/fields/faPatchFields/derived/uniformFixedValue/uniformFixedValueFaPatchField.H b/src/finiteArea/fields/faPatchFields/derived/uniformFixedValue/uniformFixedValueFaPatchField.H
index 3bb10274587..cc21bfa0b3b 100644
--- a/src/finiteArea/fields/faPatchFields/derived/uniformFixedValue/uniformFixedValueFaPatchField.H
+++ b/src/finiteArea/fields/faPatchFields/derived/uniformFixedValue/uniformFixedValueFaPatchField.H
@@ -167,7 +167,7 @@ public:
         //- Update the coefficients associated with the patch field
         virtual void updateCoeffs();
 
-        //- Write
+        //- Write includes "value" entry
         virtual void write(Ostream& os) const;
 };
 
diff --git a/src/finiteArea/fields/faPatchFields/derived/uniformMixed/uniformMixedFaPatchField.H b/src/finiteArea/fields/faPatchFields/derived/uniformMixed/uniformMixedFaPatchField.H
index ab3182b3a47..08d3a4a6b29 100644
--- a/src/finiteArea/fields/faPatchFields/derived/uniformMixed/uniformMixedFaPatchField.H
+++ b/src/finiteArea/fields/faPatchFields/derived/uniformMixed/uniformMixedFaPatchField.H
@@ -188,7 +188,7 @@ public:
         //- Update the coefficients associated with the patch field
         virtual void updateCoeffs();
 
-        //- Write
+        //- Write includes "value" entry (for visualisation / restart)
         virtual void write(Ostream& os) const;
 };
 
diff --git a/src/finiteArea/fields/faePatchFields/constraint/empty/emptyFaePatchField.C b/src/finiteArea/fields/faePatchFields/constraint/empty/emptyFaePatchField.C
index 3032a855edb..d77ef591d5d 100644
--- a/src/finiteArea/fields/faePatchFields/constraint/empty/emptyFaePatchField.C
+++ b/src/finiteArea/fields/faePatchFields/constraint/empty/emptyFaePatchField.C
@@ -37,7 +37,7 @@ Foam::emptyFaePatchField<Type>::emptyFaePatchField
     const DimensionedField<Type, edgeMesh>& iF
 )
 :
-    faePatchField<Type>(p, iF, Field<Type>())
+    faePatchField<Type>(p, iF, Field<Type>())  // zero-sized patch field
 {}
 
 
@@ -50,7 +50,7 @@ Foam::emptyFaePatchField<Type>::emptyFaePatchField
     const faPatchFieldMapper&
 )
 :
-    faePatchField<Type>(p, iF, Field<Type>())
+    faePatchField<Type>(p, iF, Field<Type>())  // zero-sized patch field
 {
     if (!isType<emptyFaPatch>(this->patch()))
     {
@@ -72,8 +72,11 @@ Foam::emptyFaePatchField<Type>::emptyFaePatchField
     const dictionary& dict
 )
 :
-    faePatchField<Type>(p, iF, Field<Type>())
+    faePatchField<Type>(p, iF, Field<Type>())  // zero-sized patch field
 {
+    // Empty means empty, so no patchType override
+    // with faePatchFieldBase::readDict(dict);
+
     if (!isType<emptyFaPatch>(p))
     {
         FatalIOErrorInFunction(dict)
@@ -87,21 +90,21 @@ Foam::emptyFaePatchField<Type>::emptyFaePatchField
 template<class Type>
 Foam::emptyFaePatchField<Type>::emptyFaePatchField
 (
-    const emptyFaePatchField<Type>& ptf
+    const emptyFaePatchField<Type>& ptf,
+    const DimensionedField<Type, edgeMesh>& iF
 )
 :
-    faePatchField<Type>(ptf.patch(), ptf.internalField(), Field<Type>())
+    faePatchField<Type>(ptf.patch(), iF, Field<Type>())  // zero-sized
 {}
 
 
 template<class Type>
 Foam::emptyFaePatchField<Type>::emptyFaePatchField
 (
-    const emptyFaePatchField<Type>& ptf,
-    const DimensionedField<Type, edgeMesh>& iF
+    const emptyFaePatchField<Type>& ptf
 )
 :
-    faePatchField<Type>(ptf.patch(), iF, Field<Type>())
+    emptyFaePatchField<Type>(ptf, ptf.internalField())
 {}
 
 
diff --git a/src/finiteArea/fields/faePatchFields/constraint/empty/emptyFaePatchField.H b/src/finiteArea/fields/faePatchFields/constraint/empty/emptyFaePatchField.H
index 6c7004db9f7..3d9afcace46 100644
--- a/src/finiteArea/fields/faePatchFields/constraint/empty/emptyFaePatchField.H
+++ b/src/finiteArea/fields/faePatchFields/constraint/empty/emptyFaePatchField.H
@@ -73,7 +73,8 @@ public:
             const DimensionedField<Type, edgeMesh>&
         );
 
-        //- Construct from patch, internal field and dictionary
+        //- Construct from patch, internal field and dictionary.
+        //- The "value" entry is NO_READ.
         emptyFaePatchField
         (
             const faPatch&,
diff --git a/src/finiteVolume/fields/fvPatchFields/basic/basicSymmetry/basicSymmetryFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/basic/basicSymmetry/basicSymmetryFvPatchField.H
index 33e2c8784e8..9c9fabaf73e 100644
--- a/src/finiteVolume/fields/fvPatchFields/basic/basicSymmetry/basicSymmetryFvPatchField.H
+++ b/src/finiteVolume/fields/fvPatchFields/basic/basicSymmetry/basicSymmetryFvPatchField.H
@@ -30,7 +30,8 @@ Group
     grpConstraintBoundaryConditions
 
 Description
-    A symmetry patch
+    A symmetry patch.
+    The "value" entry is NO_READ, NO_WRITE.
 
 SourceFiles
     basicSymmetryFvPatchField.C
@@ -57,7 +58,6 @@ class basicSymmetryFvPatchField
 :
     public transformFvPatchField<Type>
 {
-
 public:
 
     // Constructors
@@ -69,7 +69,8 @@ public:
             const DimensionedField<Type, volMesh>&
         );
 
-        //- Construct from patch, internal field and dictionary
+        //- Construct from patch, internal field and dictionary.
+        //- The "value" entry is NO_READ.
         basicSymmetryFvPatchField
         (
             const fvPatch&,
@@ -77,8 +78,8 @@ public:
             const dictionary&
         );
 
-        //- Construct by mapping given basicSymmetryFvPatchField onto a new
-        //  patch
+        //- Construct by mapping given basicSymmetry patch field
+        //- onto a new patch
         basicSymmetryFvPatchField
         (
             const basicSymmetryFvPatchField<Type>&,
diff --git a/src/finiteVolume/fields/fvPatchFields/basic/calculated/calculatedFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/basic/calculated/calculatedFvPatchField.H
index ab2abde60d9..89edb5effa1 100644
--- a/src/finiteVolume/fields/fvPatchFields/basic/calculated/calculatedFvPatchField.H
+++ b/src/finiteVolume/fields/fvPatchFields/basic/calculated/calculatedFvPatchField.H
@@ -36,6 +36,11 @@ Description
     e.g. \c updateCoeffs or \c evaluate.
 
 Usage
+    \table
+        Property     | Description             | Required  | Default
+        value        | field value             | yes |
+    \endtable
+
     Example of the boundary condition specification:
     \verbatim
     <patchName>
@@ -99,13 +104,13 @@ public:
             const fvPatch& p,
             const DimensionedField<Type, volMesh>& iF,
             const dictionary& dict,
-            const bool valueReqd
+            const bool needValue
         )
         :
             calculatedFvPatchField
             (
                 p, iF, dict,
-                (valueReqd? IOobjectOption::MUST_READ : IOobjectOption::NO_READ)
+                (needValue? IOobjectOption::MUST_READ : IOobjectOption::NO_READ)
             )
         {}
 
@@ -178,7 +183,7 @@ public:
             tmp<Field<Type>> gradientBoundaryCoeffs() const;
 
 
-        //- Write
+        //- Write includes "value" entry
         virtual void write(Ostream&) const;
 };
 
diff --git a/src/finiteVolume/fields/fvPatchFields/basic/coupled/coupledFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/basic/coupled/coupledFvPatchField.H
index 155a20cb7e7..23ff2481f59 100644
--- a/src/finiteVolume/fields/fvPatchFields/basic/coupled/coupledFvPatchField.H
+++ b/src/finiteVolume/fields/fvPatchFields/basic/coupled/coupledFvPatchField.H
@@ -33,6 +33,8 @@ Group
 Description
     Abstract base class for coupled patches.
 
+    The "value" entry is usually MUST_READ and always WRITE.
+
 SourceFiles
     coupledFvPatchField.C
 
@@ -98,13 +100,13 @@ public:
             const fvPatch& p,
             const DimensionedField<Type, volMesh>& iF,
             const dictionary& dict,
-            const bool valueReqd
+            const bool needValue
         )
         :
             coupledFvPatchField
             (
                 p, iF, dict,
-                (valueReqd? IOobjectOption::MUST_READ : IOobjectOption::NO_READ)
+                (needValue? IOobjectOption::MUST_READ : IOobjectOption::NO_READ)
             )
         {}
 
@@ -144,8 +146,7 @@ public:
 
         // Access
 
-            //- Return true if this patch field is derived from
-            //  coupledFvPatchField<Type>.
+            //- True if this patch field is derived from coupledFvPatchField.
             virtual bool coupled() const
             {
                 return true;
@@ -268,7 +269,7 @@ public:
             ) const = 0;
 
 
-        //- Write
+        //- Write includes "value" entry
         virtual void write(Ostream&) const;
 };
 
diff --git a/src/finiteVolume/fields/fvPatchFields/basic/fixedValue/fixedValueFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/basic/fixedValue/fixedValueFvPatchField.C
index 8a567b71508..7ce790c8290 100644
--- a/src/finiteVolume/fields/fvPatchFields/basic/fixedValue/fixedValueFvPatchField.C
+++ b/src/finiteVolume/fields/fvPatchFields/basic/fixedValue/fixedValueFvPatchField.C
@@ -92,21 +92,21 @@ Foam::fixedValueFvPatchField<Type>::fixedValueFvPatchField
 template<class Type>
 Foam::fixedValueFvPatchField<Type>::fixedValueFvPatchField
 (
-    const fixedValueFvPatchField<Type>& ptf
+    const fixedValueFvPatchField<Type>& ptf,
+    const DimensionedField<Type, volMesh>& iF
 )
 :
-    fvPatchField<Type>(ptf)
+    fvPatchField<Type>(ptf, iF)
 {}
 
 
 template<class Type>
 Foam::fixedValueFvPatchField<Type>::fixedValueFvPatchField
 (
-    const fixedValueFvPatchField<Type>& ptf,
-    const DimensionedField<Type, volMesh>& iF
+    const fixedValueFvPatchField<Type>& ptf
 )
 :
-    fvPatchField<Type>(ptf, iF)
+    fixedValueFvPatchField<Type>(ptf, ptf.internalField())
 {}
 
 
diff --git a/src/finiteVolume/fields/fvPatchFields/basic/fixedValue/fixedValueFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/basic/fixedValue/fixedValueFvPatchField.H
index 1abd1eb2b3c..7c2fa1bcc8e 100644
--- a/src/finiteVolume/fields/fvPatchFields/basic/fixedValue/fixedValueFvPatchField.H
+++ b/src/finiteVolume/fields/fvPatchFields/basic/fixedValue/fixedValueFvPatchField.H
@@ -111,13 +111,13 @@ public:
             const fvPatch& p,
             const DimensionedField<Type, volMesh>& iF,
             const dictionary& dict,
-            const bool valueReqd
+            const bool needValue
         )
         :
             fixedValueFvPatchField
             (
                 p, iF, dict,
-                (valueReqd? IOobjectOption::MUST_READ : IOobjectOption::NO_READ)
+                (needValue? IOobjectOption::MUST_READ : IOobjectOption::NO_READ)
             )
         {}
 
@@ -168,6 +168,9 @@ public:
         //- False: this patch field is not altered by assignment.
         virtual bool assignable() const { return false; }
 
+        //- Write includes "value" entry
+        virtual void write(Ostream&) const;
+
 
         // Evaluation functions
 
@@ -194,11 +197,7 @@ public:
             virtual tmp<Field<Type>> gradientBoundaryCoeffs() const;
 
 
-        //- Write
-        virtual void write(Ostream&) const;
-
-
-    // Member operators
+    // Member Operators
 
         virtual void operator=(const UList<Type>&) {}
 
diff --git a/src/finiteVolume/fields/fvPatchFields/basic/transform/transformFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/basic/transform/transformFvPatchField.H
index 0576d3cccea..9211155c710 100644
--- a/src/finiteVolume/fields/fvPatchFields/basic/transform/transformFvPatchField.H
+++ b/src/finiteVolume/fields/fvPatchFields/basic/transform/transformFvPatchField.H
@@ -30,15 +30,16 @@ Group
     grpGenericBoundaryConditions
 
 Description
-    Foam::transformFvPatchField
+    Intermediate layer (not used directly as a user boundary condition).
+    The "value" entry is NO_READ, NO_WRITE.
 
 SourceFiles
     transformFvPatchField.C
 
 \*---------------------------------------------------------------------------*/
 
-#ifndef transformFvPatchField_H
-#define transformFvPatchField_H
+#ifndef Foam_transformFvPatchField_H
+#define Foam_transformFvPatchField_H
 
 #include "fvPatchField.H"
 
@@ -56,7 +57,6 @@ class transformFvPatchField
 :
     public fvPatchField<Type>
 {
-
 public:
 
     //- Runtime type information
@@ -72,7 +72,8 @@ public:
             const DimensionedField<Type, volMesh>&
         );
 
-        //- Construct from patch, internal field and dictionary
+        //- Construct from patch, internal field and dictionary.
+        //- The "value" entry is NO_READ.
         transformFvPatchField
         (
             const fvPatch&,
diff --git a/src/finiteVolume/fields/fvPatchFields/constraint/cyclic/cyclicFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/constraint/cyclic/cyclicFvPatchField.C
index 487bdb8dff5..40356e5682e 100644
--- a/src/finiteVolume/fields/fvPatchFields/constraint/cyclic/cyclicFvPatchField.C
+++ b/src/finiteVolume/fields/fvPatchFields/constraint/cyclic/cyclicFvPatchField.C
@@ -51,7 +51,7 @@ Foam::cyclicFvPatchField<Type>::cyclicFvPatchField
     const fvPatch& p,
     const DimensionedField<Type, volMesh>& iF,
     const dictionary& dict,
-    const bool valueRequired
+    const bool needValue
 )
 :
     coupledFvPatchField<Type>(p, iF, dict, IOobjectOption::NO_READ),
@@ -68,7 +68,7 @@ Foam::cyclicFvPatchField<Type>::cyclicFvPatchField
             << exit(FatalIOError);
     }
 
-    if (valueRequired)
+    if (needValue)
     {
         this->evaluate(Pstream::commsTypes::blocking);
     }
diff --git a/src/finiteVolume/fields/fvPatchFields/constraint/cyclic/cyclicFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/constraint/cyclic/cyclicFvPatchField.H
index 7b265ce6049..b8199cb28ec 100644
--- a/src/finiteVolume/fields/fvPatchFields/constraint/cyclic/cyclicFvPatchField.H
+++ b/src/finiteVolume/fields/fvPatchFields/constraint/cyclic/cyclicFvPatchField.H
@@ -34,6 +34,8 @@ Description
     This boundary condition enforces a cyclic condition between a pair of
     boundaries.
 
+    The "value" entry is NO_READ.
+
 Usage
     Example of the boundary condition specification:
     \verbatim
@@ -75,7 +77,7 @@ class cyclicFvPatchField
     virtual public cyclicLduInterfaceField,
     public coupledFvPatchField<Type>
 {
-    // Private data
+    // Private Data
 
         //- Local reference cast into the cyclic patch
         const cyclicFvPatch& cyclicPatch_;
@@ -113,7 +115,7 @@ public:
             const fvPatch&,
             const DimensionedField<Type, volMesh>&,
             const dictionary&,
-            const bool valueRequired = true
+            const bool needValue = true  //!< evaluate
         );
 
         //- Construct by mapping given cyclicFvPatchField onto a new patch
@@ -154,7 +156,7 @@ public:
         }
 
 
-    // Member functions
+    // Member Functions
 
         // Access
 
diff --git a/src/finiteVolume/fields/fvPatchFields/constraint/cyclicSlip/cyclicSlipFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/constraint/cyclicSlip/cyclicSlipFvPatchField.C
index 215d3655b82..051ef0b8f89 100644
--- a/src/finiteVolume/fields/fvPatchFields/constraint/cyclicSlip/cyclicSlipFvPatchField.C
+++ b/src/finiteVolume/fields/fvPatchFields/constraint/cyclicSlip/cyclicSlipFvPatchField.C
@@ -61,7 +61,7 @@ Foam::cyclicSlipFvPatchField<Type>::cyclicSlipFvPatchField
     const dictionary& dict
 )
 :
-    cyclicFvPatchField<Type>(p, iF, dict)
+    cyclicFvPatchField<Type>(p, iF, dict)  // needValue (evaluate) = true
 {}
 
 
diff --git a/src/finiteVolume/fields/fvPatchFields/constraint/cyclicSlip/cyclicSlipFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/constraint/cyclicSlip/cyclicSlipFvPatchField.H
index da0eb6fef09..3283b60e5e1 100644
--- a/src/finiteVolume/fields/fvPatchFields/constraint/cyclicSlip/cyclicSlipFvPatchField.H
+++ b/src/finiteVolume/fields/fvPatchFields/constraint/cyclicSlip/cyclicSlipFvPatchField.H
@@ -33,6 +33,8 @@ Description
     This boundary condition is a light wrapper around the cyclicFvPatchField
     condition, providing no new functionality.
 
+    The "value" entry is NO_READ.
+
 Usage
     Example of the boundary condition specification:
     \verbatim
@@ -50,8 +52,8 @@ SourceFiles
 
 \*---------------------------------------------------------------------------*/
 
-#ifndef cyclicSlipFvPatchField_H
-#define cyclicSlipFvPatchField_H
+#ifndef Foam_cyclicSlipFvPatchField_H
+#define Foam_cyclicSlipFvPatchField_H
 
 #include "cyclicFvPatchField.H"
 #include "cyclicSlipFvPatch.H"
@@ -70,7 +72,6 @@ class cyclicSlipFvPatchField
 :
     public cyclicFvPatchField<Type>
 {
-
 public:
 
     //- Runtime type information
@@ -86,7 +87,8 @@ public:
             const DimensionedField<Type, volMesh>&
         );
 
-        //- Construct from patch, internal field and dictionary
+        //- Construct from patch, internal field and dictionary.
+        //- The "value" entry is NO_READ.
         cyclicSlipFvPatchField
         (
             const fvPatch&,
diff --git a/src/finiteVolume/fields/fvPatchFields/constraint/empty/emptyFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/constraint/empty/emptyFvPatchField.C
index 846c33a2165..5bbc2ddd6f2 100644
--- a/src/finiteVolume/fields/fvPatchFields/constraint/empty/emptyFvPatchField.C
+++ b/src/finiteVolume/fields/fvPatchFields/constraint/empty/emptyFvPatchField.C
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2016 OpenFOAM Foundation
+    Copyright (C) 2024 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -37,7 +38,7 @@ Foam::emptyFvPatchField<Type>::emptyFvPatchField
     const DimensionedField<Type, volMesh>& iF
 )
 :
-    fvPatchField<Type>(p, iF, Field<Type>(0))
+    fvPatchField<Type>(p, iF, Field<Type>())  // zero-sized patch field
 {}
 
 
@@ -50,7 +51,7 @@ Foam::emptyFvPatchField<Type>::emptyFvPatchField
     const fvPatchFieldMapper&
 )
 :
-    fvPatchField<Type>(p, iF, Field<Type>(0))
+    fvPatchField<Type>(p, iF, Field<Type>())  // zero-sized patch field
 {
     if (!isType<emptyFvPatch>(p))
     {
@@ -73,8 +74,11 @@ Foam::emptyFvPatchField<Type>::emptyFvPatchField
     const dictionary& dict
 )
 :
-    fvPatchField<Type>(p, iF, Field<Type>(0))
+    fvPatchField<Type>(p, iF, Field<Type>())  // zero-sized patch field
 {
+    // Empty means empty, so no patchType override
+    // with fvPatchFieldBase::readDict(dict);
+
     if (!isType<emptyFvPatch>(p))
     {
         FatalIOErrorInFunction(dict)
@@ -91,26 +95,21 @@ Foam::emptyFvPatchField<Type>::emptyFvPatchField
 template<class Type>
 Foam::emptyFvPatchField<Type>::emptyFvPatchField
 (
-    const emptyFvPatchField<Type>& ptf
+    const emptyFvPatchField<Type>& ptf,
+    const DimensionedField<Type, volMesh>& iF
 )
 :
-    fvPatchField<Type>
-    (
-        ptf.patch(),
-        ptf.internalField(),
-        Field<Type>(0)
-    )
+    fvPatchField<Type>(ptf.patch(), iF, Field<Type>())  // zero-sized
 {}
 
 
 template<class Type>
 Foam::emptyFvPatchField<Type>::emptyFvPatchField
 (
-    const emptyFvPatchField<Type>& ptf,
-    const DimensionedField<Type, volMesh>& iF
+    const emptyFvPatchField<Type>& ptf
 )
 :
-    fvPatchField<Type>(ptf.patch(), iF, Field<Type>(0))
+    emptyFvPatchField<Type>(ptf, ptf.internalField())
 {}
 
 
diff --git a/src/finiteVolume/fields/fvPatchFields/constraint/empty/emptyFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/constraint/empty/emptyFvPatchField.H
index d86c9084cb4..b22e96584c7 100644
--- a/src/finiteVolume/fields/fvPatchFields/constraint/empty/emptyFvPatchField.H
+++ b/src/finiteVolume/fields/fvPatchFields/constraint/empty/emptyFvPatchField.H
@@ -33,7 +33,9 @@ Description
     This boundary condition provides an 'empty' condition for reduced
     dimensions cases, i.e. 1- and 2-D geometries.  Apply this condition to
     patches whose normal is aligned to geometric directions that do not
-    constitue solution directions.
+    constitute solution directions.
+
+    The "value" entry is NO_READ, NO_WRITE.
 
 Usage
     Example of the boundary condition specification:
@@ -84,7 +86,8 @@ public:
             const DimensionedField<Type, volMesh>&
         );
 
-        //- Construct from patch, internal field and dictionary
+        //- Construct from patch, internal field and dictionary.
+        //- The "value" entry is NO_READ.
         emptyFvPatchField
         (
             const fvPatch&,
diff --git a/src/finiteVolume/fields/fvPatchFields/constraint/jumpCyclic/jumpCyclicFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/constraint/jumpCyclic/jumpCyclicFvPatchField.C
index 2b5e3a364bb..fb9a97b3487 100644
--- a/src/finiteVolume/fields/fvPatchFields/constraint/jumpCyclic/jumpCyclicFvPatchField.C
+++ b/src/finiteVolume/fields/fvPatchFields/constraint/jumpCyclic/jumpCyclicFvPatchField.C
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2017 OpenFOAM Foundation
-    Copyright (C) 2019-2021 OpenCFD Ltd.
+    Copyright (C) 2019-2024 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -60,14 +60,11 @@ Foam::jumpCyclicFvPatchField<Type>::jumpCyclicFvPatchField
     const fvPatch& p,
     const DimensionedField<Type, volMesh>& iF,
     const dictionary& dict,
-    const bool valueRequired
+    const bool needValue
 )
 :
-    cyclicFvPatchField<Type>(p, iF, dict, valueRequired)
-{
-    // Call this evaluation in derived classes
-    //this->evaluate(Pstream::commsTypes::blocking);
-}
+    cyclicFvPatchField<Type>(p, iF, dict, needValue)
+{}
 
 
 template<class Type>
diff --git a/src/finiteVolume/fields/fvPatchFields/constraint/jumpCyclic/jumpCyclicFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/constraint/jumpCyclic/jumpCyclicFvPatchField.H
index 28c803b6591..199215c6282 100644
--- a/src/finiteVolume/fields/fvPatchFields/constraint/jumpCyclic/jumpCyclicFvPatchField.H
+++ b/src/finiteVolume/fields/fvPatchFields/constraint/jumpCyclic/jumpCyclicFvPatchField.H
@@ -34,6 +34,8 @@ Description
     This boundary condition provides a base class for coupled-cyclic
     conditions with a specified 'jump' (or offset) between the values
 
+    The "value" entry is NO_READ.
+
 See also
     Foam::cyclicFvPatchField
 
@@ -42,8 +44,8 @@ SourceFiles
 
 \*---------------------------------------------------------------------------*/
 
-#ifndef jumpCyclicFvPatchField_H
-#define jumpCyclicFvPatchField_H
+#ifndef Foam_jumpCyclicFvPatchField_H
+#define Foam_jumpCyclicFvPatchField_H
 
 #include "cyclicFvPatchField.H"
 
@@ -61,7 +63,6 @@ class jumpCyclicFvPatchField
 :
     public cyclicFvPatchField<Type>
 {
-
 public:
 
     //- Runtime type information
@@ -77,13 +78,14 @@ public:
             const DimensionedField<Type, volMesh>&
         );
 
-        //- Construct from patch, internal field and dictionary
+        //- Construct from patch, internal field and dictionary.
+        //- The "value" entry is NO_READ.
         jumpCyclicFvPatchField
         (
             const fvPatch&,
             const DimensionedField<Type, volMesh>&,
             const dictionary&,
-            const bool valueRequired = true
+            const bool needValue = true  //!< evaluate
         );
 
         //- Construct by mapping given jumpCyclicFvPatchField onto a new patch
diff --git a/src/finiteVolume/fields/fvPatchFields/constraint/nonuniformTransformCyclic/nonuniformTransformCyclicFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/constraint/nonuniformTransformCyclic/nonuniformTransformCyclicFvPatchField.C
index f4ac86faf38..04cb2a9220c 100644
--- a/src/finiteVolume/fields/fvPatchFields/constraint/nonuniformTransformCyclic/nonuniformTransformCyclicFvPatchField.C
+++ b/src/finiteVolume/fields/fvPatchFields/constraint/nonuniformTransformCyclic/nonuniformTransformCyclicFvPatchField.C
@@ -50,7 +50,7 @@ nonuniformTransformCyclicFvPatchField
     const dictionary& dict
 )
 :
-    cyclicFvPatchField<Type>(p, iF, dict)
+    cyclicFvPatchField<Type>(p, iF, dict)  // needValue (evaluate) = true
 {}
 
 
diff --git a/src/finiteVolume/fields/fvPatchFields/constraint/nonuniformTransformCyclic/nonuniformTransformCyclicFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/constraint/nonuniformTransformCyclic/nonuniformTransformCyclicFvPatchField.H
index 9f325feb1bd..fa4b6f67017 100644
--- a/src/finiteVolume/fields/fvPatchFields/constraint/nonuniformTransformCyclic/nonuniformTransformCyclicFvPatchField.H
+++ b/src/finiteVolume/fields/fvPatchFields/constraint/nonuniformTransformCyclic/nonuniformTransformCyclicFvPatchField.H
@@ -33,6 +33,8 @@ Description
     This boundary condition enforces a cyclic condition between a pair of
     boundaries, incorporating a non-uniform transformation.
 
+    The "value" entry is NO_READ.
+
 SourceFiles
     nonuniformTransformCyclicFvPatchField.C
     nonuniformTransformCyclicFvPatchFields.H
@@ -41,8 +43,8 @@ SourceFiles
 
 \*---------------------------------------------------------------------------*/
 
-#ifndef nonuniformTransformCyclicFvPatchField_H
-#define nonuniformTransformCyclicFvPatchField_H
+#ifndef Foam_nonuniformTransformCyclicFvPatchField_H
+#define Foam_nonuniformTransformCyclicFvPatchField_H
 
 #include "cyclicFvPatchField.H"
 #include "nonuniformTransformCyclicFvPatch.H"
@@ -61,8 +63,6 @@ class nonuniformTransformCyclicFvPatchField
 :
     public cyclicFvPatchField<Type>
 {
-    // Private data
-
 public:
 
     //- Runtime type information
@@ -78,7 +78,8 @@ public:
             const DimensionedField<Type, volMesh>&
         );
 
-        //- Construct from patch, internal field and dictionary
+        //- Construct from patch, internal field and dictionary.
+        //- The "value" entry is NO_READ.
         nonuniformTransformCyclicFvPatchField
         (
             const fvPatch&,
diff --git a/src/finiteVolume/fields/fvPatchFields/constraint/processor/processorFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/constraint/processor/processorFvPatchField.C
index a4c1e57ea73..793b638cc6e 100644
--- a/src/finiteVolume/fields/fvPatchFields/constraint/processor/processorFvPatchField.C
+++ b/src/finiteVolume/fields/fvPatchFields/constraint/processor/processorFvPatchField.C
@@ -28,7 +28,6 @@ License
 
 #include "processorFvPatchField.H"
 #include "processorFvPatch.H"
-#include "demandDrivenData.H"
 #include "transformField.H"
 
 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
diff --git a/src/finiteVolume/fields/fvPatchFields/constraint/processorCyclic/processorCyclicFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/constraint/processorCyclic/processorCyclicFvPatchField.C
index c03c65b7449..5c3f68ec4b9 100644
--- a/src/finiteVolume/fields/fvPatchFields/constraint/processorCyclic/processorCyclicFvPatchField.C
+++ b/src/finiteVolume/fields/fvPatchFields/constraint/processorCyclic/processorCyclicFvPatchField.C
@@ -135,11 +135,4 @@ Foam::processorCyclicFvPatchField<Type>::processorCyclicFvPatchField
 {}
 
 
-// * * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * //
-
-template<class Type>
-Foam::processorCyclicFvPatchField<Type>::~processorCyclicFvPatchField()
-{}
-
-
 // ************************************************************************* //
diff --git a/src/finiteVolume/fields/fvPatchFields/constraint/processorCyclic/processorCyclicFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/constraint/processorCyclic/processorCyclicFvPatchField.H
index 08e018d2cb7..8287cd43594 100644
--- a/src/finiteVolume/fields/fvPatchFields/constraint/processorCyclic/processorCyclicFvPatchField.H
+++ b/src/finiteVolume/fields/fvPatchFields/constraint/processorCyclic/processorCyclicFvPatchField.H
@@ -73,7 +73,7 @@ class processorCyclicFvPatchField
 :
     public processorFvPatchField<Type>
 {
-    // Private data
+    // Private Data
 
         //- Local reference cast into the processor patch
         const processorCyclicFvPatch& procPatch_;
@@ -146,10 +146,10 @@ public:
 
 
     //- Destructor
-    virtual ~processorCyclicFvPatchField();
+    virtual ~processorCyclicFvPatchField() = default;
 
 
-    // Member functions
+    // Member Functions
 
         // Access
 
diff --git a/src/finiteVolume/fields/fvPatchFields/constraint/symmetry/symmetryFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/constraint/symmetry/symmetryFvPatchField.H
index 0727afe5f81..6f2ec33e0da 100644
--- a/src/finiteVolume/fields/fvPatchFields/constraint/symmetry/symmetryFvPatchField.H
+++ b/src/finiteVolume/fields/fvPatchFields/constraint/symmetry/symmetryFvPatchField.H
@@ -69,7 +69,6 @@ class symmetryFvPatchField
 :
     public basicSymmetryFvPatchField<Type>
 {
-
 public:
 
     //- Runtime type information
diff --git a/src/finiteVolume/fields/fvPatchFields/constraint/wedge/wedgeFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/constraint/wedge/wedgeFvPatchField.C
index e3fd64d58d2..8c2b3eb61c5 100644
--- a/src/finiteVolume/fields/fvPatchFields/constraint/wedge/wedgeFvPatchField.C
+++ b/src/finiteVolume/fields/fvPatchFields/constraint/wedge/wedgeFvPatchField.C
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2016 OpenFOAM Foundation
+    Copyright (C) 2024 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -31,7 +32,6 @@ License
 #include "symmTransform.H"
 #include "diagTensor.H"
 
-
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
 template<class Type>
@@ -41,7 +41,7 @@ Foam::wedgeFvPatchField<Type>::wedgeFvPatchField
     const DimensionedField<Type, volMesh>& iF
 )
 :
-    transformFvPatchField<Type>(p, iF)
+    parent_bctype(p, iF)
 {}
 
 
@@ -54,7 +54,7 @@ Foam::wedgeFvPatchField<Type>::wedgeFvPatchField
     const fvPatchFieldMapper& mapper
 )
 :
-    transformFvPatchField<Type>(ptf, p, iF, mapper)
+    parent_bctype(ptf, p, iF, mapper)
 {
     if (!isType<wedgeFvPatch>(this->patch()))
     {
@@ -77,7 +77,7 @@ Foam::wedgeFvPatchField<Type>::wedgeFvPatchField
     const dictionary& dict
 )
 :
-    transformFvPatchField<Type>(p, iF, dict)
+    parent_bctype(p, iF, dict)  // "value" is NO_READ
 {
     if (!isType<wedgeFvPatch>(p))
     {
@@ -97,21 +97,21 @@ Foam::wedgeFvPatchField<Type>::wedgeFvPatchField
 template<class Type>
 Foam::wedgeFvPatchField<Type>::wedgeFvPatchField
 (
-    const wedgeFvPatchField<Type>& ptf
+    const wedgeFvPatchField<Type>& ptf,
+    const DimensionedField<Type, volMesh>& iF
 )
 :
-    transformFvPatchField<Type>(ptf)
+    parent_bctype(ptf, iF)
 {}
 
 
 template<class Type>
 Foam::wedgeFvPatchField<Type>::wedgeFvPatchField
 (
-    const wedgeFvPatchField<Type>& ptf,
-    const DimensionedField<Type, volMesh>& iF
+    const wedgeFvPatchField<Type>& ptf
 )
 :
-    transformFvPatchField<Type>(ptf, iF)
+    wedgeFvPatchField<Type>(ptf, ptf.internalField())
 {}
 
 
diff --git a/src/finiteVolume/fields/fvPatchFields/constraint/wedge/wedgeFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/constraint/wedge/wedgeFvPatchField.H
index 36c2252e7ec..6d8e34e98b9 100644
--- a/src/finiteVolume/fields/fvPatchFields/constraint/wedge/wedgeFvPatchField.H
+++ b/src/finiteVolume/fields/fvPatchFields/constraint/wedge/wedgeFvPatchField.H
@@ -33,6 +33,8 @@ Description
     This boundary condition is similar to the cyclic condition, except that
     it is applied to 2-D geometries.
 
+    The "value" entry is NO_READ, NO_WRITE.
+
 Usage
     Example of the boundary condition specification:
     \verbatim
@@ -50,8 +52,8 @@ SourceFiles
 
 \*---------------------------------------------------------------------------*/
 
-#ifndef wedgeFvPatchField_H
-#define wedgeFvPatchField_H
+#ifndef Foam_wedgeFvPatchField_H
+#define Foam_wedgeFvPatchField_H
 
 #include "transformFvPatchField.H"
 #include "wedgeFvPatch.H"
@@ -70,6 +72,9 @@ class wedgeFvPatchField
 :
     public transformFvPatchField<Type>
 {
+    //- The parent boundary condition type
+    typedef transformFvPatchField<Type> parent_bctype;
+
 
 public:
 
@@ -86,7 +91,8 @@ public:
             const DimensionedField<Type, volMesh>&
         );
 
-        //- Construct from patch, internal field and dictionary
+        //- Construct from patch, internal field and dictionary.
+        //- The "value" entry is NO_READ.
         wedgeFvPatchField
         (
             const fvPatch&,
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchField.C
index 39b7394febd..921199406e9 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchField.C
+++ b/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchField.C
@@ -67,7 +67,7 @@ Foam::fanFvPatchField<Type>::fanFvPatchField
     const dictionary& dict
 )
 :
-    uniformJumpFvPatchField<Type>(p, iF, dict, false), // Pass no valueRequired
+    uniformJumpFvPatchField<Type>(p, iF, dict, false),  // needValue = false
     phiName_(dict.getOrDefault<word>("phi", "phi")),
     rhoName_(dict.getOrDefault<word>("rho", "rho")),
     uniformJump_(dict.getOrDefault("uniformJump", false)),
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/fixedJump/fixedJumpFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/derived/fixedJump/fixedJumpFvPatchField.C
index e55831b999c..8d62f14c273 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/fixedJump/fixedJumpFvPatchField.C
+++ b/src/finiteVolume/fields/fvPatchFields/derived/fixedJump/fixedJumpFvPatchField.C
@@ -70,10 +70,10 @@ Foam::fixedJumpFvPatchField<Type>::fixedJumpFvPatchField
     const fvPatch& p,
     const DimensionedField<Type, volMesh>& iF,
     const dictionary& dict,
-    const bool valueRequired
+    const bool needValue
 )
 :
-    jumpCyclicFvPatchField<Type>(p, iF, dict, false), // Pass no valueRequired
+    jumpCyclicFvPatchField<Type>(p, iF, dict, false), // needValue = false
     jump_(p.size(), Zero),
     jump0_(p.size(), Zero),
     minJump_(dict.getOrDefault<Type>("minJump", pTraits<Type>::min)),
@@ -82,7 +82,7 @@ Foam::fixedJumpFvPatchField<Type>::fixedJumpFvPatchField
 {
     if (this->cyclicPatch().owner())
     {
-        if (valueRequired)
+        if (needValue)
         {
             jump_.assign("jump", dict, p.size(), IOobjectOption::MUST_READ);
         }
@@ -90,7 +90,7 @@ Foam::fixedJumpFvPatchField<Type>::fixedJumpFvPatchField
         jump0_.assign("jump0", dict, p.size(), IOobjectOption::LAZY_READ);
     }
 
-    if (valueRequired)
+    if (needValue)
     {
         if (!this->readValueEntry(dict))
         {
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/fixedJump/fixedJumpFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/derived/fixedJump/fixedJumpFvPatchField.H
index f9e340bbccd..441b420dea7 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/fixedJump/fixedJumpFvPatchField.H
+++ b/src/finiteVolume/fields/fvPatchFields/derived/fixedJump/fixedJumpFvPatchField.H
@@ -128,7 +128,7 @@ public:
             const fvPatch&,
             const DimensionedField<Type, volMesh>&,
             const dictionary&,
-            const bool valueRequired = true
+            const bool needValue = true
         );
 
         //- Construct by mapping given fixedJumpFvPatchField onto a
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/fixedNormalSlip/fixedNormalSlipFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/derived/fixedNormalSlip/fixedNormalSlipFvPatchField.C
index 557ffce4949..32c993eaa1f 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/fixedNormalSlip/fixedNormalSlipFvPatchField.C
+++ b/src/finiteVolume/fields/fvPatchFields/derived/fixedNormalSlip/fixedNormalSlipFvPatchField.C
@@ -39,7 +39,7 @@ Foam::fixedNormalSlipFvPatchField<Type>::fixedNormalSlipFvPatchField
 )
 :
     parent_bctype(p, iF),
-    fixedValue_(p.size(), Zero),
+    fixedValue_(p.size(), Foam::zero{}),
     writeValue_(false)
 {}
 
@@ -72,6 +72,7 @@ Foam::fixedNormalSlipFvPatchField<Type>::fixedNormalSlipFvPatchField
     writeValue_(dict.getOrDefault("writeValue", false))
 {
     fvPatchFieldBase::readDict(dict);
+
     evaluate();
 }
 
@@ -181,11 +182,13 @@ template<class Type>
 void Foam::fixedNormalSlipFvPatchField<Type>::write(Ostream& os) const
 {
     this->parent_bctype::write(os);
-    fixedValue_.writeEntry("fixedValue", os);
-
     if (writeValue_)
     {
         os.writeEntry("writeValue", "true");
+    }
+    fixedValue_.writeEntry("fixedValue", os);
+    if (writeValue_)
+    {
         fvPatchField<Type>::writeValueEntry(os);
     }
 }
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/fixedNormalSlip/fixedNormalSlipFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/derived/fixedNormalSlip/fixedNormalSlipFvPatchField.H
index 7fe1f594902..8fdfb7e7fd6 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/fixedNormalSlip/fixedNormalSlipFvPatchField.H
+++ b/src/finiteVolume/fields/fvPatchFields/derived/fixedNormalSlip/fixedNormalSlipFvPatchField.H
@@ -36,6 +36,8 @@ Description
     The tangential component is treated as slip, i.e. copied from the internal
     field.
 
+    The "value" entry is NO_READ, optional write.
+
 Usage
     Example of the boundary condition specification:
     \verbatim
@@ -76,8 +78,8 @@ SourceFiles
 
 \*---------------------------------------------------------------------------*/
 
-#ifndef fixedNormalSlipFvPatchField_H
-#define fixedNormalSlipFvPatchField_H
+#ifndef Foam_fixedNormalSlipFvPatchField_H
+#define Foam_fixedNormalSlipFvPatchField_H
 
 #include "transformFvPatchField.H"
 
@@ -123,7 +125,8 @@ public:
             const DimensionedField<Type, volMesh>&
         );
 
-        //- Construct from patch, internal field and dictionary
+        //- Construct from patch, internal field and dictionary.
+        //- The "value" entry is NO_READ.
         fixedNormalSlipFvPatchField
         (
             const fvPatch&,
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/partialSlip/partialSlipFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/derived/partialSlip/partialSlipFvPatchField.C
index cfb77c5732e..b11935b557b 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/partialSlip/partialSlipFvPatchField.C
+++ b/src/finiteVolume/fields/fvPatchFields/derived/partialSlip/partialSlipFvPatchField.C
@@ -39,7 +39,7 @@ Foam::partialSlipFvPatchField<Type>::partialSlipFvPatchField
 )
 :
     parent_bctype(p, iF),
-    refValue_(p.size(), Zero),
+    refValue_(p.size(), Foam::zero{}),
     valueFraction_(p.size(), 1.0),
     writeValue_(false)
 {}
@@ -70,7 +70,7 @@ Foam::partialSlipFvPatchField<Type>::partialSlipFvPatchField
 )
 :
     parent_bctype(p, iF),
-    refValue_(p.size(), Zero),
+    refValue_(p.size(), Foam::zero{}),
     valueFraction_("valueFraction", dict, p.size()),
     writeValue_(dict.getOrDefault("writeValue", false))
 {
@@ -86,10 +86,11 @@ Foam::partialSlipFvPatchField<Type>::partialSlipFvPatchField
 template<class Type>
 Foam::partialSlipFvPatchField<Type>::partialSlipFvPatchField
 (
-    const partialSlipFvPatchField<Type>& ptf
+    const partialSlipFvPatchField<Type>& ptf,
+    const DimensionedField<Type, volMesh>& iF
 )
 :
-    parent_bctype(ptf),
+    parent_bctype(ptf, iF),
     refValue_(ptf.refValue_),
     valueFraction_(ptf.valueFraction_),
     writeValue_(ptf.writeValue_)
@@ -99,14 +100,10 @@ Foam::partialSlipFvPatchField<Type>::partialSlipFvPatchField
 template<class Type>
 Foam::partialSlipFvPatchField<Type>::partialSlipFvPatchField
 (
-    const partialSlipFvPatchField<Type>& ptf,
-    const DimensionedField<Type, volMesh>& iF
+    const partialSlipFvPatchField<Type>& ptf
 )
 :
-    parent_bctype(ptf, iF),
-    refValue_(ptf.refValue_),
-    valueFraction_(ptf.valueFraction_),
-    writeValue_(ptf.writeValue_)
+    partialSlipFvPatchField<Type>(ptf, ptf.internalField())
 {}
 
 
@@ -204,12 +201,14 @@ template<class Type>
 void Foam::partialSlipFvPatchField<Type>::write(Ostream& os) const
 {
     this->parent_bctype::write(os);
+    if (writeValue_)
+    {
+        os.writeEntry("writeValue", "true");
+    }
     refValue_.writeEntry("refValue", os);
     valueFraction_.writeEntry("valueFraction", os);
-
     if (writeValue_)
     {
-        os.writeEntry("writeValue", "true");
         fvPatchField<Type>::writeValueEntry(os);
     }
 }
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/partialSlip/partialSlipFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/derived/partialSlip/partialSlipFvPatchField.H
index eb5ed46922c..a81ce92912c 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/partialSlip/partialSlipFvPatchField.H
+++ b/src/finiteVolume/fields/fvPatchFields/derived/partialSlip/partialSlipFvPatchField.H
@@ -31,8 +31,10 @@ Group
     grpWallBoundaryConditions grpGenericBoundaryConditions
 
 Description
-    This boundary condition provides a partial slip condition.  The amount of
-    slip is controlled by a user-supplied field.
+    This boundary condition provides a partial slip condition.
+    The amount of slip is controlled by a user-supplied field.
+
+    The "value" entry is NO_READ, optional write.
 
 Usage
     \table
@@ -50,7 +52,6 @@ Usage
         type            partialSlip;
         refValue        uniform 0.001;
         valueFraction   uniform 0.1;
-        value           uniform 0;
     }
     \endverbatim
 
@@ -62,8 +63,8 @@ SourceFiles
 
 \*---------------------------------------------------------------------------*/
 
-#ifndef partialSlipFvPatchField_H
-#define partialSlipFvPatchField_H
+#ifndef Foam_partialSlipFvPatchField_H
+#define Foam_partialSlipFvPatchField_H
 
 #include "transformFvPatchField.H"
 
@@ -112,7 +113,8 @@ public:
             const DimensionedField<Type, volMesh>&
         );
 
-        //- Construct from patch, internal field and dictionary
+        //- Construct from patch, internal field and dictionary.
+        //- The "value" entry is NO_READ.
         partialSlipFvPatchField
         (
             const fvPatch&,
@@ -120,7 +122,8 @@ public:
             const dictionary&
         );
 
-        //- Construct by mapping given partialSlipFvPatchField onto a new patch
+        //- Construct by mapping given partialSlip patch field
+        //- onto a new patch
         partialSlipFvPatchField
         (
             const partialSlipFvPatchField<Type>&,
@@ -163,6 +166,7 @@ public:
         //- False: this patch field is not altered by assignment
         virtual bool assignable() const { return false; }
 
+
         // Access
 
             virtual Field<Type>& refValue()
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/uniformJump/uniformJumpFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/derived/uniformJump/uniformJumpFvPatchField.C
index 1f117d268c6..deca4b47322 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/uniformJump/uniformJumpFvPatchField.C
+++ b/src/finiteVolume/fields/fvPatchFields/derived/uniformJump/uniformJumpFvPatchField.C
@@ -62,13 +62,13 @@ Foam::uniformJumpFvPatchField<Type>::uniformJumpFvPatchField
     const fvPatch& p,
     const DimensionedField<Type, volMesh>& iF,
     const dictionary& dict,
-    const bool valueRequired
+    const bool needValue
 )
 :
-    fixedJumpFvPatchField<Type>(p, iF, dict, false), // Pass no valueRequired
+    fixedJumpFvPatchField<Type>(p, iF, dict, false),  // needValue = false
     jumpTable_()
 {
-    if (valueRequired)
+    if (needValue)
     {
         if (this->cyclicPatch().owner())
         {
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/uniformJump/uniformJumpFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/derived/uniformJump/uniformJumpFvPatchField.H
index 09be775aed2..a953274fc93 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/uniformJump/uniformJumpFvPatchField.H
+++ b/src/finiteVolume/fields/fvPatchFields/derived/uniformJump/uniformJumpFvPatchField.H
@@ -118,7 +118,7 @@ public:
             const fvPatch&,
             const DimensionedField<Type, volMesh>&,
             const dictionary&,
-            const bool valueRequired = true
+            const bool needValue = true
         );
 
         //- Construct by mapping given uniformJumpFvPatchField onto a
diff --git a/src/finiteVolume/fields/fvPatchFields/fvPatchField/fvPatchField.H b/src/finiteVolume/fields/fvPatchFields/fvPatchField/fvPatchField.H
index 9056467691a..993433fd61e 100644
--- a/src/finiteVolume/fields/fvPatchFields/fvPatchField/fvPatchField.H
+++ b/src/finiteVolume/fields/fvPatchFields/fvPatchField/fvPatchField.H
@@ -430,13 +430,13 @@ public:
             const fvPatch& p,
             const DimensionedField<Type, volMesh>& iF,
             const dictionary& dict,
-            const bool valueReqd
+            const bool needValue
         )
         :
             fvPatchField
             (
                 p, iF, dict,
-                (valueReqd? IOobjectOption::MUST_READ : IOobjectOption::NO_READ)
+                (needValue? IOobjectOption::MUST_READ : IOobjectOption::NO_READ)
             )
         {}
 
diff --git a/src/finiteVolume/fields/fvsPatchFields/basic/calculated/calculatedFvsPatchField.C b/src/finiteVolume/fields/fvsPatchFields/basic/calculated/calculatedFvsPatchField.C
index ed1536312ce..0cfa7e3ef0f 100644
--- a/src/finiteVolume/fields/fvsPatchFields/basic/calculated/calculatedFvsPatchField.C
+++ b/src/finiteVolume/fields/fvsPatchFields/basic/calculated/calculatedFvsPatchField.C
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2016 OpenFOAM Foundation
-    Copyright (C) 2021-2023 OpenCFD Ltd.
+    Copyright (C) 2021-2024 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -131,4 +131,14 @@ Foam::fvsPatchField<Type>::NewCalculatedType
 }
 
 
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+template<class Type>
+void Foam::calculatedFvsPatchField<Type>::write(Ostream& os) const
+{
+    fvsPatchField<Type>::write(os);
+    fvsPatchField<Type>::writeValueEntry(os);
+}
+
+
 // ************************************************************************* //
diff --git a/src/finiteVolume/fields/fvsPatchFields/basic/calculated/calculatedFvsPatchField.H b/src/finiteVolume/fields/fvsPatchFields/basic/calculated/calculatedFvsPatchField.H
index bd8b64db01a..9d690368d67 100644
--- a/src/finiteVolume/fields/fvsPatchFields/basic/calculated/calculatedFvsPatchField.H
+++ b/src/finiteVolume/fields/fvsPatchFields/basic/calculated/calculatedFvsPatchField.H
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2016 OpenFOAM Foundation
+    Copyright (C) 2024 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -27,7 +28,25 @@ Class
     Foam::calculatedFvsPatchField
 
 Description
-    Foam::calculatedFvsPatchField
+    This boundary condition is not designed to be evaluated; it is assmued
+    that the value is assigned via field assignment.
+
+    The "value" entry is MUST_READ.
+
+Usage
+    \table
+        Property     | Description             | Required  | Default
+        value        | Patch face values       | yes |
+    \endtable
+
+    Example of the boundary condition specification:
+    \verbatim
+    <patchName>
+    {
+        type            calculated;
+        value           uniform (0 0 0);    // Required value entry
+    }
+    \endverbatim
 
 SourceFiles
     calculatedFvsPatchField.C
@@ -118,6 +137,9 @@ public:
 
         //- True: this patch field fixes a value.
         virtual bool fixesValue() const { return true; }
+
+        //- Write includes "value" entry
+        virtual void write(Ostream&) const;
 };
 
 
diff --git a/src/finiteVolume/fields/fvsPatchFields/basic/coupled/coupledFvsPatchField.C b/src/finiteVolume/fields/fvsPatchFields/basic/coupled/coupledFvsPatchField.C
index 5c3d033a66c..2f1d0d712ac 100644
--- a/src/finiteVolume/fields/fvsPatchFields/basic/coupled/coupledFvsPatchField.C
+++ b/src/finiteVolume/fields/fvsPatchFields/basic/coupled/coupledFvsPatchField.C
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2015 OpenFOAM Foundation
+    Copyright (C) 2024 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -57,10 +58,11 @@ Foam::coupledFvsPatchField<Type>::coupledFvsPatchField
 (
     const fvPatch& p,
     const DimensionedField<Type, surfaceMesh>& iF,
-    const dictionary& dict
+    const dictionary& dict,
+    IOobjectOption::readOption requireValue
 )
 :
-    fvsPatchField<Type>(p, iF, dict)
+    fvsPatchField<Type>(p, iF, dict, requireValue)
 {}
 
 
@@ -98,4 +100,15 @@ Foam::coupledFvsPatchField<Type>::coupledFvsPatchField
 {}
 
 
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+template<class Type>
+void Foam::coupledFvsPatchField<Type>::write(Ostream& os) const
+{
+    fvsPatchField<Type>::write(os);
+    fvsPatchField<Type>::writeValueEntry(os);
+}
+
+
+
 // ************************************************************************* //
diff --git a/src/finiteVolume/fields/fvsPatchFields/basic/coupled/coupledFvsPatchField.H b/src/finiteVolume/fields/fvsPatchFields/basic/coupled/coupledFvsPatchField.H
index 221630943f6..b6ce0ea9f0c 100644
--- a/src/finiteVolume/fields/fvsPatchFields/basic/coupled/coupledFvsPatchField.H
+++ b/src/finiteVolume/fields/fvsPatchFields/basic/coupled/coupledFvsPatchField.H
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2016 OpenFOAM Foundation
+    Copyright (C) 2024 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -27,15 +28,17 @@ Class
     Foam::coupledFvsPatchField
 
 Description
-    Foam::coupledFvsPatchField
+    Abstract base class for coupled patches.
+
+    The "value" entry is usually MUST_READ and always WRITE.
 
 SourceFiles
     coupledFvsPatchField.C
 
 \*---------------------------------------------------------------------------*/
 
-#ifndef coupledFvsPatchField_H
-#define coupledFvsPatchField_H
+#ifndef Foam_coupledFvsPatchField_H
+#define Foam_coupledFvsPatchField_H
 
 #include "fvsPatchField.H"
 #include "coupledFvPatch.H"
@@ -46,7 +49,7 @@ namespace Foam
 {
 
 /*---------------------------------------------------------------------------*\
-                           Class coupledFvsPatch Declaration
+                    Class coupledFvsPatchField Declaration
 \*---------------------------------------------------------------------------*/
 
 template<class Type>
@@ -54,7 +57,6 @@ class coupledFvsPatchField
 :
     public fvsPatchField<Type>
 {
-
 public:
 
     //- Runtime type information
@@ -83,7 +85,8 @@ public:
         (
             const fvPatch&,
             const DimensionedField<Type, surfaceMesh>&,
-            const dictionary&
+            const dictionary&,
+            IOobjectOption::readOption requireValue = IOobjectOption::MUST_READ
         );
 
         //- Construct by mapping the given coupledFvsPatchField onto a new patch
@@ -118,16 +121,16 @@ public:
         ) const = 0;
 
 
-    // Member functions
+    // Member Functions
 
-        // Access
+        //- True if this patch field is derived from coupledFvsPatchField
+        virtual bool coupled() const
+        {
+            return true;
+        }
 
-            //- Return true if this patch field is derived from
-            //  coupledFvsPatchField<Type>.
-            virtual bool coupled() const
-            {
-                return true;
-            }
+        //- Write includes "value" entry
+        virtual void write(Ostream&) const;
 };
 
 
diff --git a/src/finiteVolume/fields/fvsPatchFields/basic/fixedValue/fixedValueFvsPatchField.C b/src/finiteVolume/fields/fvsPatchFields/basic/fixedValue/fixedValueFvsPatchField.C
index f457b1d07df..2d061f7ced0 100644
--- a/src/finiteVolume/fields/fvsPatchFields/basic/fixedValue/fixedValueFvsPatchField.C
+++ b/src/finiteVolume/fields/fvsPatchFields/basic/fixedValue/fixedValueFvsPatchField.C
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2016 OpenFOAM Foundation
+    Copyright (C) 2024 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -57,7 +58,8 @@ Foam::fixedValueFvsPatchField<Type>::fixedValueFvsPatchField
 (
     const fvPatch& p,
     const DimensionedField<Type, surfaceMesh>& iF,
-    const dictionary& dict
+    const dictionary& dict,
+    IOobjectOption::readOption requireValue
 )
 :
     fvsPatchField<Type>(p, iF, dict, IOobjectOption::MUST_READ)
@@ -80,21 +82,21 @@ Foam::fixedValueFvsPatchField<Type>::fixedValueFvsPatchField
 template<class Type>
 Foam::fixedValueFvsPatchField<Type>::fixedValueFvsPatchField
 (
-    const fixedValueFvsPatchField<Type>& ptf
+    const fixedValueFvsPatchField<Type>& ptf,
+    const DimensionedField<Type, surfaceMesh>& iF
 )
 :
-    fvsPatchField<Type>(ptf)
+    fvsPatchField<Type>(ptf, iF)
 {}
 
 
 template<class Type>
 Foam::fixedValueFvsPatchField<Type>::fixedValueFvsPatchField
 (
-    const fixedValueFvsPatchField<Type>& ptf,
-    const DimensionedField<Type, surfaceMesh>& iF
+    const fixedValueFvsPatchField<Type>& ptf
 )
 :
-    fvsPatchField<Type>(ptf, iF)
+    fixedValueFvsPatchField<Type>(ptf, ptf.internalField())
 {}
 
 
@@ -138,4 +140,12 @@ Foam::fixedValueFvsPatchField<Type>::gradientBoundaryCoeffs() const
 }
 
 
+template<class Type>
+void Foam::fixedValueFvsPatchField<Type>::write(Ostream& os) const
+{
+    fvsPatchField<Type>::write(os);
+    fvsPatchField<Type>::writeValueEntry(os);
+}
+
+
 // ************************************************************************* //
diff --git a/src/finiteVolume/fields/fvsPatchFields/basic/fixedValue/fixedValueFvsPatchField.H b/src/finiteVolume/fields/fvsPatchFields/basic/fixedValue/fixedValueFvsPatchField.H
index ab5ec9dc427..5934499fe08 100644
--- a/src/finiteVolume/fields/fvsPatchFields/basic/fixedValue/fixedValueFvsPatchField.H
+++ b/src/finiteVolume/fields/fvsPatchFields/basic/fixedValue/fixedValueFvsPatchField.H
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2016 OpenFOAM Foundation
+    Copyright (C) 2024 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -27,15 +28,33 @@ Class
     Foam::fixedValueFvsPatchField
 
 Description
-    Foam::fixedValueFvsPatchField
+    This boundary condition supplies a fixed value constraint, and is the base
+    class for a number of other boundary conditions.
+
+    The "value" entry is MUST_READ.
+
+Usage
+    \table
+        Property     | Description             | Required    | Default
+        value        | Patch face values       | yes         |
+    \endtable
+
+    Example of the boundary condition specification:
+    \verbatim
+    <patchName>
+    {
+        type            fixedValue;
+        value           uniform 0;  // Example for scalar field usage
+    }
+    \endverbatim
 
 SourceFiles
     fixedValueFvsPatchField.C
 
 \*---------------------------------------------------------------------------*/
 
-#ifndef fixedValueFvsPatchField_H
-#define fixedValueFvsPatchField_H
+#ifndef Foam_fixedValueFvsPatchField_H
+#define Foam_fixedValueFvsPatchField_H
 
 #include "fvsPatchField.H"
 
@@ -45,7 +64,7 @@ namespace Foam
 {
 
 /*---------------------------------------------------------------------------*\
-                           Class fixedValueFvsPatch Declaration
+                   Class fixedValueFvsPatchField Declaration
 \*---------------------------------------------------------------------------*/
 
 template<class Type>
@@ -81,7 +100,8 @@ public:
         (
             const fvPatch&,
             const DimensionedField<Type, surfaceMesh>&,
-            const dictionary&
+            const dictionary&,
+            IOobjectOption::readOption requireValue = IOobjectOption::MUST_READ
         );
 
         //- Construct by mapping the given fixedValue patch field
@@ -127,6 +147,9 @@ public:
         //- True: this patch field fixes a value.
         virtual bool fixesValue() const { return true; }
 
+        //- Write includes "value" entry
+        virtual void write(Ostream&) const;
+
 
         // Evaluation functions
 
@@ -153,7 +176,7 @@ public:
             virtual tmp<Field<Type>> gradientBoundaryCoeffs() const;
 
 
-    // Member operators
+    // Member Operators
 
         virtual void operator=(const UList<Type>&) {}
 
diff --git a/src/finiteVolume/fields/fvsPatchFields/basic/sliced/slicedFvsPatchField.C b/src/finiteVolume/fields/fvsPatchFields/basic/sliced/slicedFvsPatchField.C
index 717918883f4..de49ba50a5d 100644
--- a/src/finiteVolume/fields/fvsPatchFields/basic/sliced/slicedFvsPatchField.C
+++ b/src/finiteVolume/fields/fvsPatchFields/basic/sliced/slicedFvsPatchField.C
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2016 OpenFOAM Foundation
-    Copyright (C) 2023 OpenCFD Ltd.
+    Copyright (C) 2023-2024 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -131,4 +131,14 @@ Foam::slicedFvsPatchField<Type>::~slicedFvsPatchField()
 }
 
 
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+template<class Type>
+void Foam::slicedFvsPatchField<Type>::write(Ostream& os) const
+{
+    fvsPatchField<Type>::write(os);
+    fvsPatchField<Type>::writeValueEntry(os);
+}
+
+
 // ************************************************************************* //
diff --git a/src/finiteVolume/fields/fvsPatchFields/basic/sliced/slicedFvsPatchField.H b/src/finiteVolume/fields/fvsPatchFields/basic/sliced/slicedFvsPatchField.H
index 42c92679d92..3a82030519b 100644
--- a/src/finiteVolume/fields/fvsPatchFields/basic/sliced/slicedFvsPatchField.H
+++ b/src/finiteVolume/fields/fvsPatchFields/basic/sliced/slicedFvsPatchField.H
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2016 OpenFOAM Foundation
-    Copyright (C) 2023 OpenCFD Ltd.
+    Copyright (C) 2023-2024 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -89,7 +89,8 @@ public:
             const DimensionedField<Type, surfaceMesh>&
         );
 
-        //- Construct from patch, internal field and dictionary
+        //- Construct from patch, internal field and dictionary.
+        //  Not implemented.
         slicedFvsPatchField
         (
             const fvPatch&,
@@ -98,6 +99,7 @@ public:
         );
 
         //- Construct by mapping the given sliced patch field onto a new patch
+        //  Not implemented.
         slicedFvsPatchField
         (
             const slicedFvsPatchField<Type>&,
@@ -141,6 +143,9 @@ public:
         //- True: this patch field fixes a value.
         virtual bool fixesValue() const { return true; }
 
+        //- Write includes "value" entry
+        virtual void write(Ostream&) const;
+
 
     // Member Operators
 
diff --git a/src/finiteVolume/fields/fvsPatchFields/constraint/cyclic/cyclicFvsPatchField.H b/src/finiteVolume/fields/fvsPatchFields/constraint/cyclic/cyclicFvsPatchField.H
index c609d02df91..384638a7547 100644
--- a/src/finiteVolume/fields/fvsPatchFields/constraint/cyclic/cyclicFvsPatchField.H
+++ b/src/finiteVolume/fields/fvsPatchFields/constraint/cyclic/cyclicFvsPatchField.H
@@ -27,15 +27,27 @@ Class
     Foam::cyclicFvsPatchField
 
 Description
-    Foam::cyclicFvsPatchField
+    This boundary condition enforces a cyclic condition between a pair of
+    boundaries.
+
+    The "value" entry is NO_READ, but is written.
+
+Usage
+    Example of the boundary condition specification:
+    \verbatim
+    <patchName>
+    {
+        type            cyclic;
+    }
+    \endverbatim
 
 SourceFiles
     cyclicFvsPatchField.C
 
 \*---------------------------------------------------------------------------*/
 
-#ifndef cyclicFvsPatchField_H
-#define cyclicFvsPatchField_H
+#ifndef Foam_cyclicFvsPatchField_H
+#define Foam_cyclicFvsPatchField_H
 
 #include "coupledFvsPatchField.H"
 #include "cyclicFvPatch.H"
@@ -46,7 +58,7 @@ namespace Foam
 {
 
 /*---------------------------------------------------------------------------*\
-                           Class cyclicFvsPatch Declaration
+                     Class cyclicFvsPatchField Declaration
 \*---------------------------------------------------------------------------*/
 
 template<class Type>
@@ -54,7 +66,7 @@ class cyclicFvsPatchField
 :
     public coupledFvsPatchField<Type>
 {
-    // Private data
+    // Private Data
 
         //- Local reference cast into the cyclic patch
         const cyclicFvPatch& cyclicPatch_;
@@ -75,7 +87,8 @@ public:
             const DimensionedField<Type, surfaceMesh>&
         );
 
-        //- Construct from patch, internal field and dictionary
+        //- Construct from patch, internal field and dictionary.
+        //- The "value" entry is NO_READ.
         cyclicFvsPatchField
         (
             const fvPatch&,
diff --git a/src/finiteVolume/fields/fvsPatchFields/constraint/cyclicACMI/cyclicACMIFvsPatchField.C b/src/finiteVolume/fields/fvsPatchFields/constraint/cyclicACMI/cyclicACMIFvsPatchField.C
index 1a63a8b7245..96fb0a15bc3 100644
--- a/src/finiteVolume/fields/fvsPatchFields/constraint/cyclicACMI/cyclicACMIFvsPatchField.C
+++ b/src/finiteVolume/fields/fvsPatchFields/constraint/cyclicACMI/cyclicACMIFvsPatchField.C
@@ -117,7 +117,7 @@ bool Foam::cyclicACMIFvsPatchField<Type>::coupled() const
 {
     if
     (
-        Pstream::parRun()
+        UPstream::parRun()
      || (
             this->cyclicACMIPatch_.size()
          && this->cyclicACMIPatch_.cyclicACMIPatch().neighbPatch().size()
diff --git a/src/finiteVolume/fields/fvsPatchFields/constraint/cyclicACMI/cyclicACMIFvsPatchField.H b/src/finiteVolume/fields/fvsPatchFields/constraint/cyclicACMI/cyclicACMIFvsPatchField.H
index da9480eb7fd..b16faeb228f 100644
--- a/src/finiteVolume/fields/fvsPatchFields/constraint/cyclicACMI/cyclicACMIFvsPatchField.H
+++ b/src/finiteVolume/fields/fvsPatchFields/constraint/cyclicACMI/cyclicACMIFvsPatchField.H
@@ -27,7 +27,9 @@ Class
     Foam::cyclicACMIFvsPatchField
 
 Description
-    Foam::cyclicACMIFvsPatchField
+    This boundary condition enforces a cyclic condition between a pair of
+    boundaries, whereby communication between the patches is performed using
+    an arbitrarily coupled mesh interface (ACMI) interpolation.
 
 SourceFiles
     cyclicACMIFvsPatchField.C
@@ -54,7 +56,7 @@ class cyclicACMIFvsPatchField
 :
     public coupledFvsPatchField<Type>
 {
-    // Private data
+    // Private Data
 
         //- Local reference cast into the cyclic patch
         const cyclicACMIFvPatch& cyclicACMIPatch_;
@@ -75,7 +77,8 @@ public:
             const DimensionedField<Type, surfaceMesh>&
         );
 
-        //- Construct from patch, internal field and dictionary
+        //- Construct from patch, internal field and dictionary.
+        //- The "value" entry is MUST_READ.
         cyclicACMIFvsPatchField
         (
             const fvPatch&,
diff --git a/src/finiteVolume/fields/fvsPatchFields/constraint/cyclicAMI/cyclicAMIFvsPatchField.H b/src/finiteVolume/fields/fvsPatchFields/constraint/cyclicAMI/cyclicAMIFvsPatchField.H
index 2550303c730..59bdcab69f2 100644
--- a/src/finiteVolume/fields/fvsPatchFields/constraint/cyclicAMI/cyclicAMIFvsPatchField.H
+++ b/src/finiteVolume/fields/fvsPatchFields/constraint/cyclicAMI/cyclicAMIFvsPatchField.H
@@ -27,7 +27,11 @@ Class
     Foam::cyclicAMIFvsPatchField
 
 Description
-    Foam::cyclicAMIFvsPatchField
+    This boundary condition enforces a cyclic condition between a pair of
+    boundaries, whereby communication between the patches is performed using
+    an arbitrary mesh interface (AMI) interpolation.
+
+    The "value" entry is MUST_READ.
 
 SourceFiles
     cyclicAMIFvsPatchField.C
@@ -54,7 +58,7 @@ class cyclicAMIFvsPatchField
 :
     public coupledFvsPatchField<Type>
 {
-    // Private data
+    // Private Data
 
         //- Local reference cast into the cyclic patch
         const cyclicAMIFvPatch& cyclicAMIPatch_;
@@ -75,7 +79,8 @@ public:
             const DimensionedField<Type, surfaceMesh>&
         );
 
-        //- Construct from patch, internal field and dictionary
+        //- Construct from patch, internal field and dictionary.
+        //- The "value" entry is MUST_READ.
         cyclicAMIFvsPatchField
         (
             const fvPatch&,
diff --git a/src/finiteVolume/fields/fvsPatchFields/constraint/empty/emptyFvsPatchField.C b/src/finiteVolume/fields/fvsPatchFields/constraint/empty/emptyFvsPatchField.C
index 489cb7de84d..5c1d93d7d53 100644
--- a/src/finiteVolume/fields/fvsPatchFields/constraint/empty/emptyFvsPatchField.C
+++ b/src/finiteVolume/fields/fvsPatchFields/constraint/empty/emptyFvsPatchField.C
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2016 OpenFOAM Foundation
+    Copyright (C) 2024 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -38,7 +39,7 @@ Foam::emptyFvsPatchField<Type>::emptyFvsPatchField
     const DimensionedField<Type, surfaceMesh>& iF
 )
 :
-    fvsPatchField<Type>(p, iF, Field<Type>(0))
+    fvsPatchField<Type>(p, iF, Field<Type>())  // zero-sized patch field
 {}
 
 
@@ -50,8 +51,11 @@ Foam::emptyFvsPatchField<Type>::emptyFvsPatchField
     const dictionary& dict
 )
 :
-    fvsPatchField<Type>(p, iF, Field<Type>(0))
+    fvsPatchField<Type>(p, iF, Field<Type>())  // zero-sized patch field
 {
+    // Empty means empty, so no patchType override
+    // with fvsPatchFieldBase::readDict(dict);
+
     if (!isType<emptyFvPatch>(p))
     {
         FatalIOErrorInFunction(dict)
@@ -71,7 +75,7 @@ Foam::emptyFvsPatchField<Type>::emptyFvsPatchField
     const fvPatchFieldMapper&
 )
 :
-    fvsPatchField<Type>(p, iF, Field<Type>(0))
+    fvsPatchField<Type>(p, iF, Field<Type>())  // zero-sized patch field
 {
     if (!isType<emptyFvPatch>(this->patch()))
     {
@@ -88,26 +92,21 @@ Foam::emptyFvsPatchField<Type>::emptyFvsPatchField
 template<class Type>
 Foam::emptyFvsPatchField<Type>::emptyFvsPatchField
 (
-    const emptyFvsPatchField<Type>& ptf
+    const emptyFvsPatchField<Type>& ptf,
+    const DimensionedField<Type, surfaceMesh>& iF
 )
 :
-    fvsPatchField<Type>
-    (
-        ptf.patch(),
-        ptf.internalField(),
-        Field<Type>(0)
-    )
+    fvsPatchField<Type>(ptf.patch(), iF, Field<Type>())  // zero-sized
 {}
 
 
 template<class Type>
 Foam::emptyFvsPatchField<Type>::emptyFvsPatchField
 (
-    const emptyFvsPatchField<Type>& ptf,
-    const DimensionedField<Type, surfaceMesh>& iF
+    const emptyFvsPatchField<Type>& ptf
 )
 :
-    fvsPatchField<Type>(ptf.patch(), iF, Field<Type>(0))
+    emptyFvsPatchField<Type>(ptf, ptf.internalField())
 {}
 
 
diff --git a/src/finiteVolume/fields/fvsPatchFields/constraint/empty/emptyFvsPatchField.H b/src/finiteVolume/fields/fvsPatchFields/constraint/empty/emptyFvsPatchField.H
index 76413218523..6a703550751 100644
--- a/src/finiteVolume/fields/fvsPatchFields/constraint/empty/emptyFvsPatchField.H
+++ b/src/finiteVolume/fields/fvsPatchFields/constraint/empty/emptyFvsPatchField.H
@@ -27,7 +27,19 @@ Class
     Foam::emptyFvsPatchField
 
 Description
-    Foam::emptyFvsPatchField
+    This boundary condition provides an 'empty' condition for reduced
+    dimensions cases.
+
+    The "value" entry is NO_READ, NO_WRITE.
+
+Usage
+    Example of the boundary condition specification:
+    \verbatim
+    <patchName>
+    {
+        type            empty;
+    }
+    \endverbatim
 
 SourceFiles
     emptyFvsPatchField.C
@@ -69,7 +81,8 @@ public:
             const DimensionedField<Type, surfaceMesh>&
         );
 
-        //- Construct from patch, internal field and dictionary
+        //- Construct from patch, internal field and dictionary.
+        //- The "value" entry is NO_READ.
         emptyFvsPatchField
         (
             const fvPatch&,
@@ -115,9 +128,9 @@ public:
         }
 
 
-    // Member functions
+    // Member Functions
 
-        // Mapping functions
+        // Mapping Functions
 
             //- Map (and resize as needed) from self given a mapping object
             virtual void autoMap
diff --git a/src/finiteVolume/fields/fvsPatchFields/constraint/processor/processorFvsPatchField.C b/src/finiteVolume/fields/fvsPatchFields/constraint/processor/processorFvsPatchField.C
index f5a44ebd4cb..4d538caa6b7 100644
--- a/src/finiteVolume/fields/fvsPatchFields/constraint/processor/processorFvsPatchField.C
+++ b/src/finiteVolume/fields/fvsPatchFields/constraint/processor/processorFvsPatchField.C
@@ -122,11 +122,4 @@ Foam::processorFvsPatchField<Type>::processorFvsPatchField
 {}
 
 
-// * * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * //
-
-template<class Type>
-Foam::processorFvsPatchField<Type>::~processorFvsPatchField()
-{}
-
-
 // ************************************************************************* //
diff --git a/src/finiteVolume/fields/fvsPatchFields/constraint/processor/processorFvsPatchField.H b/src/finiteVolume/fields/fvsPatchFields/constraint/processor/processorFvsPatchField.H
index dd96291ee68..8a4fb3a093e 100644
--- a/src/finiteVolume/fields/fvsPatchFields/constraint/processor/processorFvsPatchField.H
+++ b/src/finiteVolume/fields/fvsPatchFields/constraint/processor/processorFvsPatchField.H
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2016 OpenFOAM Foundation
+    Copyright (C) 2024 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -27,15 +28,26 @@ Class
     Foam::processorFvsPatchField
 
 Description
-    Foam::processorFvsPatchField
+    This boundary condition enables processor communication across patches.
+
+    The "value" entry is MUST_READ.
+
+    Example of the boundary condition specification:
+    \verbatim
+    <patchName>
+    {
+        type    processor;
+        value   uniform (0 0 0);   // Mandatory
+    }
+    \endverbatim
 
 SourceFiles
     processorFvsPatchField.C
 
 \*---------------------------------------------------------------------------*/
 
-#ifndef processorFvsPatchField_H
-#define processorFvsPatchField_H
+#ifndef Foam_processorFvsPatchField_H
+#define Foam_processorFvsPatchField_H
 
 #include "coupledFvsPatchField.H"
 #include "processorFvPatch.H"
@@ -54,7 +66,7 @@ class processorFvsPatchField
 :
     public coupledFvsPatchField<Type>
 {
-    // Private data
+    // Private Data
 
         //- Local reference cast into the processor patch
         const processorFvPatch& procPatch_;
@@ -83,7 +95,8 @@ public:
             const Field<Type>&
         );
 
-        //- Construct from patch, internal field and dictionary
+        //- Construct from patch, internal field and dictionary.
+        //- The "value" entry is MUST_READ.
         processorFvsPatchField
         (
             const fvPatch&,
@@ -127,15 +140,15 @@ public:
 
 
     //- Destructor
-    virtual ~processorFvsPatchField();
+    virtual ~processorFvsPatchField() = default;
 
 
     // Member Functions
 
-        //- Return true if running parallel
+        //- True if running parallel
         virtual bool coupled() const
         {
-            return Pstream::parRun();
+            return UPstream::parRun();
         }
 };
 
diff --git a/src/finiteVolume/fields/fvsPatchFields/constraint/processorCyclic/processorCyclicFvsPatchField.C b/src/finiteVolume/fields/fvsPatchFields/constraint/processorCyclic/processorCyclicFvsPatchField.C
index 69dda610a3d..af904a50fbc 100644
--- a/src/finiteVolume/fields/fvsPatchFields/constraint/processorCyclic/processorCyclicFvsPatchField.C
+++ b/src/finiteVolume/fields/fvsPatchFields/constraint/processorCyclic/processorCyclicFvsPatchField.C
@@ -122,11 +122,4 @@ Foam::processorCyclicFvsPatchField<Type>::processorCyclicFvsPatchField
 {}
 
 
-// * * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * //
-
-template<class Type>
-Foam::processorCyclicFvsPatchField<Type>::~processorCyclicFvsPatchField()
-{}
-
-
 // ************************************************************************* //
diff --git a/src/finiteVolume/fields/fvsPatchFields/constraint/processorCyclic/processorCyclicFvsPatchField.H b/src/finiteVolume/fields/fvsPatchFields/constraint/processorCyclic/processorCyclicFvsPatchField.H
index 4368b03621c..8ebb8fbb215 100644
--- a/src/finiteVolume/fields/fvsPatchFields/constraint/processorCyclic/processorCyclicFvsPatchField.H
+++ b/src/finiteVolume/fields/fvsPatchFields/constraint/processorCyclic/processorCyclicFvsPatchField.H
@@ -27,15 +27,18 @@ Class
     Foam::processorCyclicFvsPatchField
 
 Description
-    Foam::processorCyclicFvsPatchField
+    This boundary condition enables processor communication across cyclic
+    patches.
+
+    The "value" entry is MUST_READ.
 
 SourceFiles
     processorCyclicFvsPatchField.C
 
 \*---------------------------------------------------------------------------*/
 
-#ifndef processorCyclicFvsPatchField_H
-#define processorCyclicFvsPatchField_H
+#ifndef Foam_processorCyclicFvsPatchField_H
+#define Foam_processorCyclicFvsPatchField_H
 
 #include "coupledFvsPatchField.H"
 #include "processorCyclicFvPatch.H"
@@ -54,7 +57,7 @@ class processorCyclicFvsPatchField
 :
     public coupledFvsPatchField<Type>
 {
-    // Private data
+    // Private Data
 
         //- Local reference cast into the processor patch
         const processorCyclicFvPatch& procPatch_;
@@ -83,7 +86,8 @@ public:
             const Field<Type>&
         );
 
-        //- Construct from patch, internal field and dictionary
+        //- Construct from patch, internal field and dictionary.
+        //- The "value" entry is MUST_READ.
         processorCyclicFvsPatchField
         (
             const fvPatch&,
@@ -91,8 +95,7 @@ public:
             const dictionary&
         );
 
-        //- Construct by mapping given processorCyclicFvsPatchField onto a
-        //  new patch
+        //- Construct by mapping given patch field onto a new patch
         processorCyclicFvsPatchField
         (
             const processorCyclicFvsPatchField<Type>&,
@@ -128,15 +131,15 @@ public:
 
 
     //- Destructor
-    virtual ~processorCyclicFvsPatchField();
+    virtual ~processorCyclicFvsPatchField() = default;
 
 
     // Member Functions
 
-        //- Return true if running parallel
+        //- True if running parallel
         virtual bool coupled() const
         {
-            return Pstream::parRun();
+            return UPstream::parRun();
         }
 };
 
diff --git a/src/finiteVolume/fields/fvsPatchFields/constraint/symmetry/symmetryFvsPatchField.C b/src/finiteVolume/fields/fvsPatchFields/constraint/symmetry/symmetryFvsPatchField.C
index 1f65f735ce2..071abfefee3 100644
--- a/src/finiteVolume/fields/fvsPatchFields/constraint/symmetry/symmetryFvsPatchField.C
+++ b/src/finiteVolume/fields/fvsPatchFields/constraint/symmetry/symmetryFvsPatchField.C
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2015 OpenFOAM Foundation
+    Copyright (C) 2024 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -48,7 +49,7 @@ Foam::symmetryFvsPatchField<Type>::symmetryFvsPatchField
     const dictionary& dict
 )
 :
-    fvsPatchField<Type>(p, iF, dict)
+    fvsPatchField<Type>(p, iF, dict, IOobjectOption::NO_READ)
 {
     if (!isType<symmetryFvPatch>(p))
     {
@@ -86,21 +87,21 @@ Foam::symmetryFvsPatchField<Type>::symmetryFvsPatchField
 template<class Type>
 Foam::symmetryFvsPatchField<Type>::symmetryFvsPatchField
 (
-    const symmetryFvsPatchField<Type>& ptf
+    const symmetryFvsPatchField<Type>& ptf,
+    const DimensionedField<Type, surfaceMesh>& iF
 )
 :
-    fvsPatchField<Type>(ptf)
+    fvsPatchField<Type>(ptf, iF)
 {}
 
 
 template<class Type>
 Foam::symmetryFvsPatchField<Type>::symmetryFvsPatchField
 (
-    const symmetryFvsPatchField<Type>& ptf,
-    const DimensionedField<Type, surfaceMesh>& iF
+    const symmetryFvsPatchField<Type>& ptf
 )
 :
-    fvsPatchField<Type>(ptf, iF)
+    symmetryFvsPatchField<Type>(ptf, ptf.internalField())
 {}
 
 
diff --git a/src/finiteVolume/fields/fvsPatchFields/constraint/symmetry/symmetryFvsPatchField.H b/src/finiteVolume/fields/fvsPatchFields/constraint/symmetry/symmetryFvsPatchField.H
index 4fa95f96806..4142b0d70fa 100644
--- a/src/finiteVolume/fields/fvsPatchFields/constraint/symmetry/symmetryFvsPatchField.H
+++ b/src/finiteVolume/fields/fvsPatchFields/constraint/symmetry/symmetryFvsPatchField.H
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2016 OpenFOAM Foundation
+    Copyright (C) 2024 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -27,15 +28,26 @@ Class
     Foam::symmetryFvsPatchField
 
 Description
-    Foam::symmetryFvsPatchField
+    This boundary condition enforces a symmetry constraint
+
+    The "value" entry is NO_READ, NO_WRITE.
+
+Usage
+    Example of the boundary condition specification:
+    \verbatim
+    <patchName>
+    {
+        type            symmetry;
+    }
+    \endverbatim
 
 SourceFiles
     symmetryFvsPatchField.C
 
 \*---------------------------------------------------------------------------*/
 
-#ifndef symmetryFvsPatchField_H
-#define symmetryFvsPatchField_H
+#ifndef Foam_symmetryFvsPatchField_H
+#define Foam_symmetryFvsPatchField_H
 
 #include "fvsPatchField.H"
 #include "symmetryFvPatch.H"
@@ -54,7 +66,6 @@ class symmetryFvsPatchField
 :
     public fvsPatchField<Type>
 {
-
 public:
 
     //- Runtime type information
@@ -71,6 +82,7 @@ public:
         );
 
         //- Construct from patch, internal field and dictionary
+        //- The "value" entry is NO_READ.
         symmetryFvsPatchField
         (
             const fvPatch&,
diff --git a/src/finiteVolume/fields/fvsPatchFields/constraint/symmetryPlane/symmetryPlaneFvsPatchField.C b/src/finiteVolume/fields/fvsPatchFields/constraint/symmetryPlane/symmetryPlaneFvsPatchField.C
index 60bf14ab437..80d4b9378d4 100644
--- a/src/finiteVolume/fields/fvsPatchFields/constraint/symmetryPlane/symmetryPlaneFvsPatchField.C
+++ b/src/finiteVolume/fields/fvsPatchFields/constraint/symmetryPlane/symmetryPlaneFvsPatchField.C
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2013-2015 OpenFOAM Foundation
+    Copyright (C) 2024 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -48,7 +49,7 @@ Foam::symmetryPlaneFvsPatchField<Type>::symmetryPlaneFvsPatchField
     const dictionary& dict
 )
 :
-    fvsPatchField<Type>(p, iF, dict)
+    fvsPatchField<Type>(p, iF, dict, IOobjectOption::NO_READ)
 {
     if (!isType<symmetryPlaneFvPatch>(p))
     {
@@ -86,21 +87,21 @@ Foam::symmetryPlaneFvsPatchField<Type>::symmetryPlaneFvsPatchField
 template<class Type>
 Foam::symmetryPlaneFvsPatchField<Type>::symmetryPlaneFvsPatchField
 (
-    const symmetryPlaneFvsPatchField<Type>& ptf
+    const symmetryPlaneFvsPatchField<Type>& ptf,
+    const DimensionedField<Type, surfaceMesh>& iF
 )
 :
-    fvsPatchField<Type>(ptf)
+    fvsPatchField<Type>(ptf, iF)
 {}
 
 
 template<class Type>
 Foam::symmetryPlaneFvsPatchField<Type>::symmetryPlaneFvsPatchField
 (
-    const symmetryPlaneFvsPatchField<Type>& ptf,
-    const DimensionedField<Type, surfaceMesh>& iF
+    const symmetryPlaneFvsPatchField<Type>& ptf
 )
 :
-    fvsPatchField<Type>(ptf, iF)
+    symmetryPlaneFvsPatchField<Type>(ptf, ptf.internalField())
 {}
 
 
diff --git a/src/finiteVolume/fields/fvsPatchFields/constraint/symmetryPlane/symmetryPlaneFvsPatchField.H b/src/finiteVolume/fields/fvsPatchFields/constraint/symmetryPlane/symmetryPlaneFvsPatchField.H
index cf3f253e054..717506e082a 100644
--- a/src/finiteVolume/fields/fvsPatchFields/constraint/symmetryPlane/symmetryPlaneFvsPatchField.H
+++ b/src/finiteVolume/fields/fvsPatchFields/constraint/symmetryPlane/symmetryPlaneFvsPatchField.H
@@ -27,15 +27,26 @@ Class
     Foam::symmetryPlaneFvsPatchField
 
 Description
-    Foam::symmetryPlaneFvsPatchField
+    This boundary condition enforces a symmetryPlane constraint
+
+    The "value" entry is NO_READ, NO_WRITE.
+
+Usage
+    Example of the boundary condition specification:
+    \verbatim
+    <patchName>
+    {
+        type            symmetryPlane;
+    }
+    \endverbatim
 
 SourceFiles
     symmetryPlaneFvsPatchField.C
 
 \*---------------------------------------------------------------------------*/
 
-#ifndef symmetryPlaneFvsPatchField_H
-#define symmetryPlaneFvsPatchField_H
+#ifndef Foam_symmetryPlaneFvsPatchField_H
+#define Foam_symmetryPlaneFvsPatchField_H
 
 #include "fvsPatchField.H"
 #include "symmetryPlaneFvPatch.H"
@@ -54,7 +65,6 @@ class symmetryPlaneFvsPatchField
 :
     public fvsPatchField<Type>
 {
-
 public:
 
     //- Runtime type information
@@ -70,7 +80,8 @@ public:
             const DimensionedField<Type, surfaceMesh>&
         );
 
-        //- Construct from patch, internal field and dictionary
+        //- Construct from patch, internal field and dictionary.
+        //- The "value" entry is NO_READ.
         symmetryPlaneFvsPatchField
         (
             const fvPatch&,
@@ -78,8 +89,7 @@ public:
             const dictionary&
         );
 
-        //- Construct by mapping given symmetryPlaneFvsPatchField
-        //  onto a new patch
+        //- Construct by mapping given patch field onto a new patch
         symmetryPlaneFvsPatchField
         (
             const symmetryPlaneFvsPatchField<Type>&,
diff --git a/src/finiteVolume/fields/fvsPatchFields/constraint/wedge/wedgeFvsPatchField.C b/src/finiteVolume/fields/fvsPatchFields/constraint/wedge/wedgeFvsPatchField.C
index 9c243442b5a..df57e01f614 100644
--- a/src/finiteVolume/fields/fvsPatchFields/constraint/wedge/wedgeFvsPatchField.C
+++ b/src/finiteVolume/fields/fvsPatchFields/constraint/wedge/wedgeFvsPatchField.C
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2015 OpenFOAM Foundation
+    Copyright (C) 2024 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -48,7 +49,7 @@ Foam::wedgeFvsPatchField<Type>::wedgeFvsPatchField
     const dictionary& dict
 )
 :
-    fvsPatchField<Type>(p, iF, dict)
+    fvsPatchField<Type>(p, iF, dict, IOobjectOption::NO_READ)
 {
     if (!isType<wedgeFvPatch>(p))
     {
@@ -86,21 +87,21 @@ Foam::wedgeFvsPatchField<Type>::wedgeFvsPatchField
 template<class Type>
 Foam::wedgeFvsPatchField<Type>::wedgeFvsPatchField
 (
-    const wedgeFvsPatchField<Type>& ptf
+    const wedgeFvsPatchField<Type>& ptf,
+    const DimensionedField<Type, surfaceMesh>& iF
 )
 :
-    fvsPatchField<Type>(ptf)
+    fvsPatchField<Type>(ptf, iF)
 {}
 
 
 template<class Type>
 Foam::wedgeFvsPatchField<Type>::wedgeFvsPatchField
 (
-    const wedgeFvsPatchField<Type>& ptf,
-    const DimensionedField<Type, surfaceMesh>& iF
+    const wedgeFvsPatchField<Type>& ptf
 )
 :
-    fvsPatchField<Type>(ptf, iF)
+    wedgeFvsPatchField<Type>(ptf, ptf.internalField())
 {}
 
 
diff --git a/src/finiteVolume/fields/fvsPatchFields/constraint/wedge/wedgeFvsPatchField.H b/src/finiteVolume/fields/fvsPatchFields/constraint/wedge/wedgeFvsPatchField.H
index 9c5ce9eb72a..aeb04ff0bc3 100644
--- a/src/finiteVolume/fields/fvsPatchFields/constraint/wedge/wedgeFvsPatchField.H
+++ b/src/finiteVolume/fields/fvsPatchFields/constraint/wedge/wedgeFvsPatchField.H
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2016 OpenFOAM Foundation
+    Copyright (C) 2024 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -27,15 +28,27 @@ Class
     Foam::wedgeFvsPatchField
 
 Description
-    Foam::wedgeFvsPatchField
+    This boundary condition is similar to the cyclic condition, except that
+    it is applied to 2-D geometries.
+
+    The "value" entry is NO_READ, NO_WRITE.
+
+Usage
+    Example of the boundary condition specification:
+    \verbatim
+    <patchName>
+    {
+        type            wedge;
+    }
+    \endverbatim
 
 SourceFiles
     wedgeFvsPatchField.C
 
 \*---------------------------------------------------------------------------*/
 
-#ifndef wedgeFvsPatchField_H
-#define wedgeFvsPatchField_H
+#ifndef Foam_wedgeFvsPatchField_H
+#define Foam_wedgeFvsPatchField_H
 
 #include "fvsPatchField.H"
 #include "wedgeFvPatch.H"
@@ -54,7 +67,6 @@ class wedgeFvsPatchField
 :
     public fvsPatchField<Type>
 {
-
 public:
 
     //- Runtime type information
@@ -70,7 +82,8 @@ public:
             const DimensionedField<Type, surfaceMesh>&
         );
 
-        //- Construct from patch, internal field and dictionary
+        //- Construct from patch, internal field and dictionary.
+        //- The "value" entry is NO_READ.
         wedgeFvsPatchField
         (
             const fvPatch&,
diff --git a/src/finiteVolume/fields/fvsPatchFields/fvsPatchField/fvsPatchField.C b/src/finiteVolume/fields/fvsPatchFields/fvsPatchField/fvsPatchField.C
index b197203cb22..027b488214a 100644
--- a/src/finiteVolume/fields/fvsPatchFields/fvsPatchField/fvsPatchField.C
+++ b/src/finiteVolume/fields/fvsPatchFields/fvsPatchField/fvsPatchField.C
@@ -207,7 +207,6 @@ template<class Type>
 void Foam::fvsPatchField<Type>::write(Ostream& os) const
 {
     os.writeEntry("type", type());
-    Field<Type>::writeEntry("value", os);
 }
 
 
diff --git a/src/finiteVolume/fields/fvsPatchFields/fvsPatchField/fvsPatchField.H b/src/finiteVolume/fields/fvsPatchFields/fvsPatchField/fvsPatchField.H
index 26f2f4beb5d..ddb7dfa8b61 100644
--- a/src/finiteVolume/fields/fvsPatchFields/fvsPatchField/fvsPatchField.H
+++ b/src/finiteVolume/fields/fvsPatchFields/fvsPatchField/fvsPatchField.H
@@ -343,13 +343,13 @@ public:
             const fvPatch& p,
             const DimensionedField<Type, surfaceMesh>& iF,
             const dictionary& dict,
-            const bool valueReqd
+            const bool needValue
         )
         :
             fvsPatchField
             (
                 p, iF, dict,
-                (valueReqd? IOobjectOption::MUST_READ : IOobjectOption::NO_READ)
+                (needValue? IOobjectOption::MUST_READ : IOobjectOption::NO_READ)
             )
         {}
 
@@ -541,7 +541,7 @@ public:
             {}
 
 
-        //- Write
+        //- Write the patch "type"
         virtual void write(Ostream& os) const;
 
         //- Check against given patch field
diff --git a/src/thermophysicalModels/radiation/derivedFvPatchFields/specularRadiation/specularRadiationMixedFvPatchScalarField.C b/src/thermophysicalModels/radiation/derivedFvPatchFields/specularRadiation/specularRadiationMixedFvPatchScalarField.C
index d7485533589..7b7f5c100c1 100644
--- a/src/thermophysicalModels/radiation/derivedFvPatchFields/specularRadiation/specularRadiationMixedFvPatchScalarField.C
+++ b/src/thermophysicalModels/radiation/derivedFvPatchFields/specularRadiation/specularRadiationMixedFvPatchScalarField.C
@@ -449,7 +449,7 @@ void specularRadiationMixedFvPatchScalarField::write(Ostream& os) const
 {
     mixedFvPatchScalarField::write(os);
     os.writeEntryIfDifferent<bool>("interpolate", false, interpolate_);
-    this->writeEntry("value", os);
+    this->writeValueEntry(os);
 }
 
 
-- 
GitLab