Date: 14 July 2008
-
HTML generated by org-mode 6.05a in emacs 23
-
-
diff --git a/ReleaseNotes-1.5 b/ReleaseNotes-1.5
index 7a36d0fa3c..faa5dad6b2 100644
--- a/ReleaseNotes-1.5
+++ b/ReleaseNotes-1.5
@@ -2,9 +2,9 @@
#
#+TITLE: *OpenFOAM release notes for version 1.5*
#+AUTHOR: OpenCFD Ltd.
-#+DATE: 14 July 2008
+#+DATE: 26 August 2008
#+LINK: http://www.opencfd.co.uk
-#+OPTIONS: author:nil
+#+OPTIONS: author:nil ^:{}
* Overview
OpenFOAM-1.5 is is a significant upgrade to version 1.4 in ways which are
diff --git a/ReleaseNotes-1.5.html b/ReleaseNotes-1.5.html
index 480775406a..a1805d5e9d 100644
--- a/ReleaseNotes-1.5.html
+++ b/ReleaseNotes-1.5.html
@@ -1,42 +1,27 @@
-
-
-
-
+OpenFOAM release notes for version 1.5
+
+1 Overview
+
+OpenFOAM-1.5 is is a significant upgrade to version 1.4 in ways which are
+outlined below. This release passes all our standard tests and the tutorials
+have been broadly checked. If there are any bugs, please report them using the
+instructions set out in: http://www.openfoam.org/bugs.html.
+
+Most of the developments for this release are in: new applications, e.g. for
+multiphase flow and cavitation, buoyancy-flow and heat transfer, high speed
+flows and even molecular dynamics; new utilities, e.g. for meshing and case
+monitoring; and, new modelling, e.g. in Lagrangian particle tracking,
+radiation and rotating frames of reference. With these new applications come
+numerous new example cases.
+
+2 GNU/Linux version
+
+The 64bit binary packs of the OpenFOAM release were compiled on a machine
+running SuSE GNU/Linux version 10.3 and the 32bit on a machine running Ubuntu
+GNU/Linux version 7.1 and also tested on Ubuntu 8.04. We recommend that users
+run OpenFOAM on one of these or a similar recent version of GNU/Linux. This
+release has also been successfully compiled and tested on older GNU/Linux
+releases but this re
Table of Contents
@@ -54,376 +39,170 @@ lang="en" xml:lang="en">
+quires the installation of Qt 4.3.? for ParaView-3 to run.
-
-
1 Overview
-
+3 C++ Compiler version
-
OpenFOAM-1.5 is is a significant upgrade to version 1.4 in ways which are
-outlined below. This release passes all our standard tests and the tutorials
-have been broadly checked. If there are any bugs, please report them using
-the instructions set out in: http://www.openfoam.org/bugs.html.
-
-
-Most of the developments for this release are in: new applications, e.g. for
-multiphase flow and cavitation, buoyancy-flow and heat transfer, high speed
-flows and even molecular dynamics; new utilities, e.g. for meshing and case
-monitoring; and, new modelling, e.g. in Lagrangian particle tracking,
-radiation and rotating frames of reference. With these new applications come
-numerous new example cases.
-
-
+ * Released compiled with GCC 4.3.1, the latest version.
+ * Built in support for the Intel C++ 10.? compiler (untested).
+ * The choice of the compiler is controlled by the setting of the
+ $WM_COMPILER and $WM_COMPILER_ARCH environment variables in the
+ OpenFOAM-1.5/etc/bashrc (or cshrc) file.
+ * The location of the installation of the compiler is controlled by the
+ $WM_COMPILER_INST environment variable in the OpenFOAM-1.5/etc/settings.sh
+ (or settings.csh) file.
-
+4 Developments to solvers (applications)
-
-
2 GNU/Linux version
-
+ * New rhoCentralFoam solver for high-speed, viscous, compressible flows
+ using non-oscillatory, central-upwind schemes.
+ * New interDyMFoam solver for 2 incompressible, isothermal, immiscible
+ fluids using a VoF phase-fraction based interface capturing approach, with
+ optional mesh motion and mesh topology changes including adaptive mesh
+ (un)refinement. Useful for simulations such as tank filling, sloshing ---
+ using solid body motion e.g. SDA or SKA (6DoF) — and slamming (using the
+ mesh motion solver) and other large-scale applications that benefit from
+ the efficiency gain of adaptive mesh (un)refinement of the interface.
+ * New compressibleInterFoam solver for 2 compressible, isothermal,
+ immiscible fluids using a volume of fluid (VoF) phase-fraction approach
+ for interface-capturing. The momentum and other fluid properties are of
+ the "mixture" and a single momentum equation is solved. Turbulence is
+ modelled using a run-time selectable incompressible LES model.
+ * New interPhaseChangeFoam solver for 2 incompressible, isothermal,
+ immiscible fluids with phase-change, e.g. cavitation. Uses VoF interface
+ capturing, with momentum and other fluid properties described for the
+ ``mixture'' and a single momentum equation is solved. The set of
+ phase-change models provided are designed to simulate cavitation but other
+ mechanisms of phase-change are supported within this solver framework.
+ * New rasCavitatingFoam solver for transient cavitation using a barotropic
+ compressibility model, with RAS turbulence.
+ * New lesCavitatingFoam solver for transient cavitation using a barotropic
+ compressibility model, with LES turbulence.
+ * New chtMultiRegionFoam solver that couples conjugate heat transfer in a
+ solid to a buoyancy-driven flow simulation.
+ * New PDRFoam solver for compressible premixed/partially-premixed turbulent
+ combustion that includes porosity/distributed resistance (PDR) modelling
+ to handle regions containing solid blockages which cannot be resolved by
+ the mesh. Requires the PDR fields.
+ * New lesBuoyantFoam solver for transient, buoyant, turbulent flow of
+ compressible fluids for ventilation and heat-transfer. Turbulence is
+ modelled using a run-time selectable compressible LES model.
+ * New rhoPimpleFoam solver for transient, turbulent flow of compressible
+ fluids for ventilation and heat-transfer. Uses the flexible PIMPLE
+ (PISO-SIMPLE) solution for time-resolved and pseudo-transient simulations.
+ * New buoyantSimpleRadiationFoam solver for steady-state, buoyant, turbulent
+ flow of compressible fluids with radiation, for ventilation and
+ heat-transfer.
+ * New rhoTurbTwinParcelFoam solver for transient for compressible, turbulent
+ flow with two thermo-clouds.
+ * New gnemdFOAM solver for general purpose molecular dynamics that simulates
+ atoms in arbitrary shaped domains and average atomic/molecular quantities
+ to the mesh to create field data.
+ * New mdEqulibrationFoam solver to equilibrates and/or preconditions
+ molecular dynamics systems.
+ * Demonstration SRFSimpleFoam solver based on simpleFoam that incorporates
+ the SRF extensions (see below) for rotating flows.
-
The 64bit binary packs of the OpenFOAM release were compiled on a machine
-running SuSE GNU/Linux version 10.3 and the 32bit on a machine running Ubuntu
-GNU/Linux version 7.1 and also tested on Ubuntu 8.04. We recommend that
-users run OpenFOAM on one of these or a similar recent version of GNU/Linux.
-This release has also been successfully compiled and tested on older GNU/Linux
-releases but this requires the installation of Qt 4.3.? for ParaView-3 to run.
-
-
+5 Automatic mesher
-
+New snappyHexMesh utility that generates split-hex meshes automatically from
+triangulated (STL) surface geometries. The mesh approximately conforms to the
+surface by iteratively refining a starting mesh and morphing the resulting
+split-hex mesh to the surface. An optional phase will shrink back the
+resulting mesh and insert cell layers. It has a flexible specification of mesh
+refinement level and robust surface handling with a pre-specified final mesh
+quality. It runs in parallel with a load balancing step every iteration.
-
-
3 C++ Compiler version
-
+6 Developments to utilities
-
--
-Released compiled with GCC 4.3.1, the latest version.
-
--
-Built in support for the Intel C++ 10.? compiler (untested).
-
--
-The choice of the compiler is controlled by the setting of the $WM_COMPILER
-and $WM_COMPILER_ARCH environment variables in the OpenFOAM-1.5/etc/bashrc
-(or cshrc) file.
-
--
-The location of the installation of the compiler is controlled by the
-$WM_COMPILER_INST environment variable in the OpenFOAM-1.5/etc/settings.sh
-(or settings.csh) file.
+ * New extrude2DMesh utility that extrudes 2D meshes into a 3D mesh. 2D
+ meshes are described by faces with 2 points, so can be used in combination
+ with 2D meshes converted with ccm26ToFoam.
+ * New couplePatches functionality integrated into createPatch, which
+ optionally synchronises ("couples") points and faces of coupled (cyclic,
+ processor) patches.
+ * New applyBoundaryLayer pre-processing utility to apply 1/7th power-law
+ boundary layers at walls, starting from uniform or potential flow
+ solutions.
+ * New execFlowFunctionObjects utility executes functionObjects as a
+ post-processing activity, e.g. probes, sampling, force calculation.
+ * New changeDictionary utility makes batch changes to OpenFOAM input files,
+ e.g. to change boundary conditions of field files.
+ * New foamCalc utility, a generic post-processing field calculator tool
+ * New molConfig pre-processing utility for molecular dynamics cases. Fills
+ zones of a mesh with single crystal lattices of specified structure,
+ density, orientation, alignment and temperature.
+ * Extended splitMeshRegions utility to split multi-zone meshes, e.g. defined
+ through cellZones, into separate meshes.
+ * Extended the foamToVTK, decomposePar, reconstructPar and mapFields
+ utilities to include support for multiple particle clouds in parallel
+ processing.
-
-
-
+7 Migration from ParaView 2.4 to ParaView 3.x
-
+ * Rewritten OpenFOAM Reader Module for version 3, a major redesign of
+ ParaView.
+ * New features include viewing patch names, reading of Lagrangian data,
+ handling of cell, face and point sets, multiple views.
-
-
4 Developments to solvers (applications)
-
+8 Model development
-
--
-New rhoCentralFoam solver for high-speed, viscous, compressible flows using
-non-oscillatory, central-upwind schemes.
-
--
-New interDyMFoam solver for 2 incompressible, isothermal, immiscible fluids
-using a VoF phase-fraction based interface capturing approach, with optional
-mesh motion and mesh topology changes including adaptive mesh
-(un)refinement. Useful for simulations such as tank filling, sloshing ---
-using solid body motion e.g. SDA or SKA (6DoF) — and slamming (using the
-mesh motion solver) and other large-scale applications that benefit from the
-efficiency gain of adaptive mesh (un)refinement of the interface.
-
--
-New compressibleInterFoam solver for 2 compressible, isothermal, immiscible
-fluids using a volume of fluid (VoF) phase-fraction approach for
-interface-capturing. The momentum and other fluid properties are of the
-"mixture" and a single momentum equation is solved. Turbulence is modelled
-using a run-time selectable incompressible LES model.
-
--
-New interPhaseChangeFoam solver for 2 incompressible, isothermal, immiscible
-fluids with phase-change, e.g. cavitation. Uses VoF interface capturing,
-with momentum and other fluid properties described for the ``mixture'' and a
-single momentum equation is solved. The set of phase-change models provided
-are designed to simulate cavitation but other mechanisms of phase-change are
-supported within this solver framework.
-
--
-New rasCavitatingFoam solver for transient cavitation using a barotropic
-compressibility model, with RAS turbulence.
-
--
-New lesCavitatingFoam solver for transient cavitation using a barotropic
-compressibility model, with LES turbulence.
-
--
-New chtMultiRegionFoam solver that couples conjugate heat transfer in a
-solid to a buoyancy-driven flow simulation.
-
--
-New PDRFoam solver for compressible premixed/partially-premixed turbulent
-combustion that includes porosity/distributed resistance (PDR) modelling to
-handle regions containing solid blockages which cannot be resolved by the
-mesh. Requires the PDR fields.
-
--
-New lesBuoyantFoam solver for transient, buoyant, turbulent flow of
-compressible fluids for ventilation and heat-transfer. Turbulence is
-modelled using a run-time selectable compressible LES model.
-
--
-New rhoPimpleFoam solver for transient, turbulent flow of compressible
-fluids for ventilation and heat-transfer. Uses the flexible PIMPLE
-(PISO-SIMPLE) solution for time-resolved and pseudo-transient simulations.
-
--
-New buoyantSimpleRadiationFoam solver for steady-state, buoyant, turbulent
-flow of compressible fluids with radiation, for ventilation and
-heat-transfer.
-
--
-New rhoTurbTwinParcelFoam solver for transient for compressible, turbulent
-flow with two thermo-clouds.
-
--
-New gnemdFOAM solver for general purpose molecular dynamics that simulates
-atoms in arbitrary shaped domains and average atomic/molecular quantities to
-the mesh to create field data.
-
--
-New mdEqulibrationFoam solver to equilibrates and/or preconditions molecular
-dynamics systems.
-
--
-Demonstration SRFSimpleFoam solver based on simpleFoam that incorporates the
-SRF extensions (see below) for rotating flows.
+ * Overhauled the lagrangian library to support multiple clouds.
+ * New lagrangianIntermediate library incorporating a hierarchy of parcel and
+ cloud types, accommodating kinematic, thermodynamic and reacting
+ applications, including coupling to the new radiation library. Sub-models
+ are added at the relevant level of physics, e.g.:
+ + kinematic: injection, wall interaction, drag, dispersion;
+ + thermo: heat transfer;
+ + reacting: reacting composition, mass transfer, surface reactions.
+ * New single rotating frame of reference (SRF) library for rotating flow
+ applications, e.g. turbo-machinery.
+ * New radiation library including the P1 model and associated Marshak
+ boundary conditions for incident radiation.
+ * New displacementInterpolation motion solver for flexible mesh scaling.
+ * New molecularDynamics Lagrangian library to calculate intermolecular
+ forces between spherically symmetrical monatomic species in arbitrary
+ geometries.
-
-
-
+9 New functionObjects
-
+To aid common monitoring and post-processing activities.
-
-
5 Automatic mesher
-
+ * forces: calculate the force and moment on a patch or set of patches, e.g.
+ to calculate the lift, drag and moment of an object in the flow.
+ * forceCoeffs: calculate the normalised force and moment on a patch or set
+ of patches, e.g. to calculate the lift, drag and moment coefficients of an
+ object in the flow.
+ * fieldAverage: calculate field arithmetic mean and prime-squared averages
+ for a list of fields.
+ * foamCalcFunctions: calculate field components, div, mag, magGrad or
+ magSqr.
-
New snappyHexMesh utility that generates split-hex meshes automatically from
-triangulated (STL) surface geometries. The mesh approximately conforms to
-the surface by iteratively refining a starting mesh and morphing the
-resulting split-hex mesh to the surface. An optional phase will shrink back
-the resulting mesh and insert cell layers. It has a flexible specification
-of mesh refinement level and robust surface handling with a pre-specified
-final mesh quality. It runs in parallel with a load balancing step every
-iteration.
-
-
+10 Improvements to boundary conditions
-
+ * Generalised jumpCyclic type: cyclic condition with an additional
+ prescribed jump in value.
+ * fan type: specialisation of jumpCyclic, applying a prescribed jump in
+ pressure to simulate a fan within a mesh.
+ * Generalised advective outflow boundary condition based on solving D/Dt
+ (psi, U) = 0 at the boundary.
+ * Additional turbulent flow inlet to specify mixing length and frequency.
+ * Generalisation of time varying set of boundary conditions.
-
-
6 Developments to utilities
-
+11 Other
-
--
-New extrude2DMesh utility that extrudes 2D meshes into a 3D mesh. 2D meshes
-are described by faces with 2 points, so can be used in combination with 2D
-meshes converted with ccm26ToFoam.
-
--
-New couplePatches functionality integrated into createPatch, which
-optionally synchronises ("couples") points and faces of coupled (cyclic,
-processor) patches.
-
--
-New applyBoundaryLayer pre-processing utility to apply 1/7th power-law
-boundary layers at walls, starting from uniform or potential flow solutions.
-
--
-New execFlowFunctionObjects utility executes functionObjects as a
-post-processing activity, e.g. probes, sampling, force calculation.
-
--
-New changeDictionary utility makes batch changes to OpenFOAM input files,
-e.g. to change boundary conditions of field files.
-
--
-New foamCalc utility, a generic post-processing field calculator tool
-
--
-New molConfig pre-processing utility for molecular dynamics cases. Fills
-zones of a mesh with single crystal lattices of specified structure,
-density, orientation, alignment and temperature.
-
--
-Extended splitMeshRegions utility to split multi-zone meshes, e.g. defined
-through cellZones, into separate meshes.
-
--
-Extended the foamToVTK, decomposePar, reconstructPar and mapFields utilities
-to include support for multiple particle clouds in parallel processing.
+ * New argument-free command execution, e.g typing "icoFoam" without root and
+ case directory arguments.
+ * Extended time command line options.
+ * Many enhancements to dictionary including macro substitution, optional
+ merging and default/overwrite behaviour, enhanced "#include" file handling
+ and the framework to support function evaluation.
+ * Cross-links between applications and Doxygen documentation with the "-doc"
+ argument.
+ * Non-blocking, non-buffered, parallel transfers with potential scaling
+ benefits for larger number of processors.
-
-
-
+Date: 26 August 2008
-
+HTML generated by org-mode 6.06b in emacs 23
-
-
7 Migration from ParaView 2.4 to ParaView 3.x
-
-
-
--
-Rewritten OpenFOAM Reader Module for version 3, a major redesign of
-ParaView.
-
--
-New features include viewing patch names, reading of Lagrangian data,
-handling of cell, face and point sets, multiple views.
-
-
-
-
-
-
-
-
-
8 Model development
-
-
-
--
-Overhauled the lagrangian library to support multiple clouds.
-
--
-New lagrangianIntermediate library incorporating a hierarchy of parcel and
-cloud types, accommodating kinematic, thermodynamic and reacting
-applications, including coupling to the new radiation library. Sub-models
-are added at the relevant level of physics, e.g.:
-
--
-kinematic: injection, wall interaction, drag, dispersion;
-
--
-thermo: heat transfer;
-
--
-reacting: reacting composition, mass transfer, surface reactions.
-
-
-
--
-New single rotating frame of reference (SRF) library for rotating flow
-applications, e.g. turbo-machinery.
-
--
-New radiation library including the P1 model and associated Marshak boundary
-conditions for incident radiation.
-
--
-New displacementInterpolation motion solver for flexible mesh scaling.
-
--
-New molecularDynamics Lagrangian library to calculate intermolecular forces
-between spherically symmetrical monatomic species in arbitrary geometries.
-
-
-
-
-
-
-
-
-
9 New functionObjects
-
-
-
To aid common monitoring and post-processing activities.
-
--
-forces: calculate the force and moment on a patch or set of patches, e.g. to
-calculate the lift, drag and moment of an object in the flow.
-
--
-forceCoeffs: calculate the normalised force and moment on a patch or set of
-patches, e.g. to calculate the lift, drag and moment coefficients of an
-object in the flow.
-
--
-fieldAverage: calculate field arithmetic mean and prime-squared averages for
-a list of fields.
-
--
-foamCalcFunctions: calculate field components, div, mag, magGrad or magSqr.
-
-
-
-
-
-
-
-
-
10 Improvements to boundary conditions
-
-
-
--
-Generalised jumpCyclic type: cyclic condition with an additional prescribed
-jump in value.
-
--
-fan type: specialisation of jumpCyclic, applying a prescribed jump in
-pressure to simulate a fan within a mesh.
-
--
-Generalised advective outflow boundary condition based on solving D/Dt(psi,
-U) = 0 at the boundary.
-
--
-Additional turbulent flow inlet to specify mixing length and frequency.
-
--
-Generalisation of time varying set of boundary conditions.
-
-
-
-
-
-
-
-
-
11 Other
-
-
-
--
-New argument-free command execution, e.g typing "icoFoam" without root and
-case directory arguments.
-
--
-Extended time command line options.
-
--
-Many enhancements to dictionary including macro substitution, optional
-merging and default/overwrite behaviour, enhanced "#include" file handling
-and the framework to support function evaluation.
-
--
-Cross-links between applications and Doxygen documentation with the "-doc"
-argument.
-
--
-Non-blocking, non-buffered, parallel transfers with potential scaling
-benefits for larger number of processors.
-
-
-
-
-
Date: 14 July 2008
-
HTML generated by org-mode 6.05a in emacs 23
-
-
diff --git a/applications/solvers/Lagrangian/kinematicParcelFoam/Make/files b/applications/solvers/Lagrangian/kinematicParcelFoam/Make/files
new file mode 100644
index 0000000000..f98171fc93
--- /dev/null
+++ b/applications/solvers/Lagrangian/kinematicParcelFoam/Make/files
@@ -0,0 +1,3 @@
+kinematicParcelFoam.C
+
+EXE = $(FOAM_USER_APPBIN)/kinematicParcelFoam
diff --git a/applications/solvers/Lagrangian/kinematicParcelFoam/Make/options b/applications/solvers/Lagrangian/kinematicParcelFoam/Make/options
new file mode 100644
index 0000000000..517724be31
--- /dev/null
+++ b/applications/solvers/Lagrangian/kinematicParcelFoam/Make/options
@@ -0,0 +1,21 @@
+EXE_INC = \
+ -I$(LIB_SRC)/lagrangian/basic/lnInclude \
+ -I$(LIB_SRC)/lagrangian/intermediate/lnInclude \
+ -I$(LIB_SRC)/finiteVolume/lnInclude \
+ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
+ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
+ -I$(LIB_SRC)/thermophysicalModels/combustion/lnInclude \
+ -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \
+ -I$(LIB_SRC)/turbulenceModels/RAS
+
+EXE_LIBS = \
+ -llagrangian \
+ -llagrangianIntermediate \
+ -lfiniteVolume \
+ -lmeshTools \
+ -lthermophysicalFunctions \
+ -lbasicThermophysicalModels \
+ /* -lcombustionThermophysicalModels */ \
+ -lspecie \
+ -lradiation \
+ -lcompressibleRASModels
diff --git a/applications/solvers/Lagrangian/kinematicParcelFoam/createFields.H b/applications/solvers/Lagrangian/kinematicParcelFoam/createFields.H
new file mode 100644
index 0000000000..6b87262133
--- /dev/null
+++ b/applications/solvers/Lagrangian/kinematicParcelFoam/createFields.H
@@ -0,0 +1,68 @@
+ Info<< "Reading thermophysical properties\n" << endl;
+
+ autoPtr
thermo
+ (
+ basicThermo::New(mesh)
+ );
+
+ volScalarField rho
+ (
+ IOobject
+ (
+ "rho",
+ runTime.timeName(),
+ mesh,
+ IOobject::NO_READ,
+ IOobject::AUTO_WRITE
+ ),
+ thermo->rho()
+ );
+
+ Info<< "\nReading field U\n" << endl;
+ volVectorField U
+ (
+ IOobject
+ (
+ "U",
+ runTime.timeName(),
+ mesh,
+ IOobject::MUST_READ,
+ IOobject::AUTO_WRITE
+ ),
+ mesh
+ );
+
+# include "compressibleCreatePhi.H"
+
+ Info<< "Creating turbulence model\n" << endl;
+ autoPtr turbulence
+ (
+ compressible::RASModel::New
+ (
+ rho,
+ U,
+ phi,
+ thermo()
+ )
+ );
+
+ pointMesh pMesh(mesh);
+ volPointInterpolation vpi(mesh, pMesh);
+
+ word kinematicCloudName("kinematicCloud");
+
+ if (args.options().found("cloudName"))
+ {
+ kinematicCloudName = args.options()["cloudName"];
+ }
+
+ Info<< "Constructing kinematicCloud " << kinematicCloudName << endl;
+ basicKinematicCloud kinematicCloud
+ (
+ kinematicCloudName,
+ vpi,
+ rho,
+ U,
+ thermo().mu(),
+ g
+ );
diff --git a/applications/solvers/Lagrangian/kinematicParcelFoam/kinematicParcelFoam.C b/applications/solvers/Lagrangian/kinematicParcelFoam/kinematicParcelFoam.C
new file mode 100644
index 0000000000..290480583c
--- /dev/null
+++ b/applications/solvers/Lagrangian/kinematicParcelFoam/kinematicParcelFoam.C
@@ -0,0 +1,78 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 1991-2008 OpenCFD Ltd.
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 2 of the License, or (at your
+ option) any later version.
+
+ OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenFOAM; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+Application
+ kinematicParcelFoam
+
+Description
+ Transient solver a single kinematicCloud.
+
+\*---------------------------------------------------------------------------*/
+
+#include "fvCFD.H"
+#include "basicThermo.H"
+#include "compressible/RASModel/RASModel.H"
+#include "basicKinematicCloud.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+int main(int argc, char *argv[])
+{
+ argList::validOptions.insert("cloudName", "cloud name");
+
+ #include "setRootCase.H"
+ #include "createTime.H"
+ #include "createMesh.H"
+ #include "readEnvironmentalProperties.H"
+ #include "createFields.H"
+ #include "compressibleCourantNo.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+ Info<< "\nStarting time loop\n" << endl;
+
+ while (runTime.run())
+ {
+ runTime++;
+
+ Info<< "Time = " << runTime.timeName() << nl << endl;
+
+ Info<< "Evolving " << kinematicCloud.name() << endl;
+ kinematicCloud.evolve();
+ kinematicCloud.info();
+
+ runTime.write();
+
+ Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
+ << " ClockTime = " << runTime.elapsedClockTime() << " s"
+ << nl << endl;
+ }
+
+ Info<< "End\n" << endl;
+
+ return(0);
+}
+
+
+// ************************************************************************* //
diff --git a/applications/solvers/compressible/rhoSimpleFoam/hEqn.H b/applications/solvers/compressible/rhoSimpleFoam/hEqn.H
index 8eb03f95eb..6a87bbdf11 100644
--- a/applications/solvers/compressible/rhoSimpleFoam/hEqn.H
+++ b/applications/solvers/compressible/rhoSimpleFoam/hEqn.H
@@ -5,7 +5,7 @@
- fvm::Sp(fvc::div(phi), h)
- fvm::laplacian(turbulence->alphaEff(), h)
==
- fvc::div(phi/fvc::interpolate(rho)*fvc::interpolate(p, "div(U,p)"))
+ fvc::div(phi/fvc::interpolate(rho), p, "div(U,p)")
- p*fvc::div(phi/fvc::interpolate(rho))
);
diff --git a/applications/solvers/compressible/rhoSimpleFoam/pEqn.H b/applications/solvers/compressible/rhoSimpleFoam/pEqn.H
index 9f7e576919..e4fbe15aa4 100644
--- a/applications/solvers/compressible/rhoSimpleFoam/pEqn.H
+++ b/applications/solvers/compressible/rhoSimpleFoam/pEqn.H
@@ -1,40 +1,92 @@
-volScalarField AU = UEqn().A();
-U = UEqn().H()/AU;
-UEqn.clear();
-phi = fvc::interpolate(rho*U) & mesh.Sf();
-bool closedVolume = adjustPhi(phi, U, p);
+rho = thermo->rho();
-for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
+volScalarField rUA = 1.0/UEqn().A();
+U = rUA*UEqn().H();
+UEqn.clear();
+
+bool closedVolume = false;
+
+if (transonic)
{
- fvScalarMatrix pEqn
+ surfaceScalarField phid
(
- fvm::laplacian(rho/AU, p) == fvc::div(phi)
+ "phid",
+ fvc::interpolate(thermo->psi())*(fvc::interpolate(U) & mesh.Sf())
);
- pEqn.setReference(pRefCell, pRefValue);
- // retain the residual from the first iteration
- if (nonOrth == 0)
+ for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
{
- eqnResidual = pEqn.solve().initialResidual();
- maxResidual = max(eqnResidual, maxResidual);
- }
- else
- {
- pEqn.solve();
- }
+ fvScalarMatrix pEqn
+ (
+ fvm::div(phid, p)
+ - fvm::laplacian(rho*rUA, p)
+ );
- if (nonOrth == nNonOrthCorr)
- {
- phi -= pEqn.flux();
+ // Relax the pressure equation to ensure diagonal-dominance
+ pEqn.relax(mesh.relaxationFactor("pEqn"));
+
+ pEqn.setReference(pRefCell, pRefValue);
+
+ // retain the residual from the first iteration
+ if (nonOrth == 0)
+ {
+ eqnResidual = pEqn.solve().initialResidual();
+ maxResidual = max(eqnResidual, maxResidual);
+ }
+ else
+ {
+ pEqn.solve();
+ }
+
+ if (nonOrth == nNonOrthCorr)
+ {
+ phi == pEqn.flux();
+ }
}
}
+else
+{
+ phi = fvc::interpolate(rho)*(fvc::interpolate(U) & mesh.Sf());
+ closedVolume = adjustPhi(phi, U, p);
+
+ for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
+ {
+ fvScalarMatrix pEqn
+ (
+ fvm::laplacian(rho*rUA, p) == fvc::div(phi)
+ );
+
+ pEqn.setReference(pRefCell, pRefValue);
+
+ // Retain the residual from the first iteration
+ if (nonOrth == 0)
+ {
+ eqnResidual = pEqn.solve().initialResidual();
+ maxResidual = max(eqnResidual, maxResidual);
+ }
+ else
+ {
+ pEqn.solve();
+ }
+
+ if (nonOrth == nNonOrthCorr)
+ {
+ phi -= pEqn.flux();
+ }
+ }
+}
+
#include "incompressible/continuityErrs.H"
// Explicitly relax pressure for momentum corrector
p.relax();
-U -= fvc::grad(p)/AU;
+rho = thermo->rho();
+rho.relax();
+Info<< "rho max/min : " << max(rho).value() << " " << min(rho).value() << endl;
+
+U -= rUA*fvc::grad(p);
U.correctBoundaryConditions();
bound(p, pMin);
@@ -46,7 +98,3 @@ if (closedVolume)
p += (initialMass - fvc::domainIntegrate(thermo->psi()*p))
/fvc::domainIntegrate(thermo->psi());
}
-
-rho = thermo->rho();
-rho.relax();
-Info<< "rho max/min : " << max(rho).value() << " " << min(rho).value() << endl;
diff --git a/src/finiteVolume/Make/files b/src/finiteVolume/Make/files
index d4a3e0ff78..83dff1819d 100644
--- a/src/finiteVolume/Make/files
+++ b/src/finiteVolume/Make/files
@@ -84,6 +84,7 @@ $(derivedFvPatchFields)/oscillatingFixedValue/oscillatingFixedValueFvPatchFields
$(derivedFvPatchFields)/outletInlet/outletInletFvPatchFields.C
$(derivedFvPatchFields)/partialSlip/partialSlipFvPatchFields.C
$(derivedFvPatchFields)/pressureDirectedInletOutletVelocity/pressureDirectedInletOutletVelocityFvPatchVectorField.C
+$(derivedFvPatchFields)/pressureNormalInletOutletVelocity/pressureNormalInletOutletVelocityFvPatchVectorField.C
$(derivedFvPatchFields)/pressureDirectedInletVelocity/pressureDirectedInletVelocityFvPatchVectorField.C
$(derivedFvPatchFields)/pressureInletOutletVelocity/pressureInletOutletVelocityFvPatchVectorField.C
$(derivedFvPatchFields)/pressureInletUniformVelocity/pressureInletUniformVelocityFvPatchVectorField.C
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/fluxCorrectedVelocity/fluxCorrectedVelocityFvPatchVectorField.C b/src/finiteVolume/fields/fvPatchFields/derived/fluxCorrectedVelocity/fluxCorrectedVelocityFvPatchVectorField.C
index 2908681eb0..7082962d9f 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/fluxCorrectedVelocity/fluxCorrectedVelocityFvPatchVectorField.C
+++ b/src/finiteVolume/fields/fvPatchFields/derived/fluxCorrectedVelocity/fluxCorrectedVelocityFvPatchVectorField.C
@@ -74,20 +74,10 @@ fluxCorrectedVelocityFvPatchVectorField
)
:
zeroGradientFvPatchVectorField(p, iF),
- phiName_("phi"),
- rhoName_("rho")
+ phiName_(dict.lookupOrDefault("phi", "phi")),
+ rhoName_(dict.lookupOrDefault("rho", "rho"))
{
fvPatchVectorField::operator=(patchInternalField());
-
- if (dict.found("phi"))
- {
- dict.lookup("phi") >> phiName_;
- }
-
- if (dict.found("rho"))
- {
- dict.lookup("rho") >> rhoName_;
- }
}
@@ -118,10 +108,8 @@ void fluxCorrectedVelocityFvPatchVectorField::evaluate
zeroGradientFvPatchVectorField::evaluate();
- const surfaceScalarField& phi = db().lookupObject
- (
- phiName_
- );
+ const surfaceScalarField& phi =
+ db().lookupObject(phiName_);
const fvsPatchField& phip =
patch().patchField(phi);
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/fluxCorrectedVelocity/fluxCorrectedVelocityFvPatchVectorField.H b/src/finiteVolume/fields/fvPatchFields/derived/fluxCorrectedVelocity/fluxCorrectedVelocityFvPatchVectorField.H
index 438eb0deb9..239db2cd33 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/fluxCorrectedVelocity/fluxCorrectedVelocityFvPatchVectorField.H
+++ b/src/finiteVolume/fields/fvPatchFields/derived/fluxCorrectedVelocity/fluxCorrectedVelocityFvPatchVectorField.H
@@ -26,7 +26,10 @@ Class
Foam::fluxCorrectedVelocityFvPatchVectorField
Description
- Foam::fluxCorrectedVelocityFvPatchVectorField
+ Velocity outlet boundary condition for patches where the pressure is
+ specified. The outflow velocity is obtained by "zeroGradient" and then
+ corrected from the flux. If reverse flow is possible or expected use
+ the "pressureInletOutletVelocityFvPatchVectorField" BC instead.
SourceFiles
fluxCorrectedVelocityFvPatchVectorField.C
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/inletOutlet/inletOutletFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/derived/inletOutlet/inletOutletFvPatchField.C
index 819807927b..c41d207724 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/inletOutlet/inletOutletFvPatchField.C
+++ b/src/finiteVolume/fields/fvPatchFields/derived/inletOutlet/inletOutletFvPatchField.C
@@ -158,6 +158,22 @@ void inletOutletFvPatchField::write(Ostream& os) const
}
+// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
+
+template
+void inletOutletFvPatchField::operator=
+(
+ const fvPatchField& ptf
+)
+{
+ fvPatchField::operator=
+ (
+ this->valueFraction()*this->refValue()
+ + (1 - this->valueFraction())*ptf
+ );
+}
+
+
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/inletOutlet/inletOutletFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/derived/inletOutlet/inletOutletFvPatchField.H
index 788285ff98..a7c72aa038 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/inletOutlet/inletOutletFvPatchField.H
+++ b/src/finiteVolume/fields/fvPatchFields/derived/inletOutlet/inletOutletFvPatchField.H
@@ -134,6 +134,11 @@ public:
//- Write
virtual void write(Ostream&) const;
+
+
+ // Member operators
+
+ virtual void operator=(const fvPatchField& pvf);
};
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/pressureDirectedInletOutletVelocity/pressureDirectedInletOutletVelocityFvPatchVectorField.C b/src/finiteVolume/fields/fvPatchFields/derived/pressureDirectedInletOutletVelocity/pressureDirectedInletOutletVelocityFvPatchVectorField.C
index 66a535c6a7..afbccbd03a 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/pressureDirectedInletOutletVelocity/pressureDirectedInletOutletVelocityFvPatchVectorField.C
+++ b/src/finiteVolume/fields/fvPatchFields/derived/pressureDirectedInletOutletVelocity/pressureDirectedInletOutletVelocityFvPatchVectorField.C
@@ -45,6 +45,8 @@ pressureDirectedInletOutletVelocityFvPatchVectorField
)
:
mixedFvPatchVectorField(p, iF),
+ phiName_("phi"),
+ rhoName_("rho"),
inletDir_(p.size())
{
refValue() = *this;
@@ -63,6 +65,8 @@ pressureDirectedInletOutletVelocityFvPatchVectorField
)
:
mixedFvPatchVectorField(ptf, p, iF, mapper),
+ phiName_(ptf.phiName_),
+ rhoName_(ptf.rhoName_),
inletDir_(ptf.inletDir_, mapper)
{}
@@ -76,6 +80,8 @@ pressureDirectedInletOutletVelocityFvPatchVectorField
)
:
mixedFvPatchVectorField(p, iF),
+ phiName_(dict.lookupOrDefault("phi", "phi")),
+ rhoName_(dict.lookupOrDefault("rho", "rho")),
inletDir_("inletDirection", dict, p.size())
{
fvPatchVectorField::operator=(vectorField("value", dict, p.size()));
@@ -92,6 +98,8 @@ pressureDirectedInletOutletVelocityFvPatchVectorField
)
:
mixedFvPatchVectorField(pivpvf),
+ phiName_(pivpvf.phiName_),
+ rhoName_(pivpvf.rhoName_),
inletDir_(pivpvf.inletDir_)
{}
@@ -104,6 +112,8 @@ pressureDirectedInletOutletVelocityFvPatchVectorField
)
:
mixedFvPatchVectorField(pivpvf, iF),
+ phiName_(pivpvf.phiName_),
+ rhoName_(pivpvf.rhoName_),
inletDir_(pivpvf.inletDir_)
{}
@@ -129,7 +139,8 @@ void pressureDirectedInletOutletVelocityFvPatchVectorField::rmap
mixedFvPatchVectorField::rmap(ptf, addr);
const pressureDirectedInletOutletVelocityFvPatchVectorField& tiptf =
- refCast(ptf);
+ refCast
+ (ptf);
inletDir_.rmap(tiptf.inletDir_, addr);
}
@@ -143,7 +154,7 @@ void pressureDirectedInletOutletVelocityFvPatchVectorField::updateCoeffs()
}
const surfaceScalarField& phi =
- db().lookupObject("phi");
+ db().lookupObject(phiName_);
const fvsPatchField& phip =
patch().patchField(phi);
@@ -158,7 +169,7 @@ void pressureDirectedInletOutletVelocityFvPatchVectorField::updateCoeffs()
else if (phi.dimensions() == dimDensity*dimVelocity*dimArea)
{
const fvPatchField& rhop =
- patch().lookupPatchField("rho");
+ patch().lookupPatchField(rhoName_);
refValue() = inletDir_*phip/(rhop*ndmagS);
}
@@ -185,11 +196,28 @@ void pressureDirectedInletOutletVelocityFvPatchVectorField::
write(Ostream& os) const
{
fvPatchVectorField::write(os);
+ os.writeKeyword("phi") << phiName_ << token::END_STATEMENT << nl;
+ os.writeKeyword("rho") << rhoName_ << token::END_STATEMENT << nl;
inletDir_.writeEntry("inletDirection", os);
writeEntry("value", os);
}
+// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
+
+void pressureDirectedInletOutletVelocityFvPatchVectorField::operator=
+(
+ const fvPatchField& pvf
+)
+{
+ fvPatchField::operator=
+ (
+ valueFraction()*(inletDir_*(inletDir_ & pvf))
+ + (1 - valueFraction())*pvf
+ );
+}
+
+
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
makePatchTypeField
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/pressureDirectedInletOutletVelocity/pressureDirectedInletOutletVelocityFvPatchVectorField.H b/src/finiteVolume/fields/fvPatchFields/derived/pressureDirectedInletOutletVelocity/pressureDirectedInletOutletVelocityFvPatchVectorField.H
index 8907c1d1af..4eaa0586e6 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/pressureDirectedInletOutletVelocity/pressureDirectedInletOutletVelocityFvPatchVectorField.H
+++ b/src/finiteVolume/fields/fvPatchFields/derived/pressureDirectedInletOutletVelocity/pressureDirectedInletOutletVelocityFvPatchVectorField.H
@@ -26,7 +26,10 @@ Class
Foam::pressureDirectedInletOutletVelocityFvPatchVectorField
Description
- Foam::pressureDirectedInletOutletVelocityFvPatchVectorField
+ Velocity inlet/outlet boundary condition for pressure boundary where the
+ pressure is specified. zero-gradient is applied for outflow (as defined
+ by the flux) and for inflow the velocity is obtained from the flux with
+ the specified `inletDirection'.
SourceFiles
pressureDirectedInletOutletVelocityFvPatchVectorField.C
@@ -53,7 +56,9 @@ class pressureDirectedInletOutletVelocityFvPatchVectorField
public mixedFvPatchVectorField
{
// Private data
-
+
+ word phiName_;
+ word rhoName_;
vectorField inletDir_;
@@ -133,9 +138,35 @@ public:
}
-
// Member functions
+ // Access
+
+ //- Return the name of rho
+ const word& rhoName() const
+ {
+ return rhoName_;
+ }
+
+ //- Return reference to the name of rho to allow adjustment
+ word& rhoName()
+ {
+ return rhoName_;
+ }
+
+ //- Return the name of phi
+ const word& phiName() const
+ {
+ return phiName_;
+ }
+
+ //- Return reference to the name of phi to allow adjustment
+ word& phiName()
+ {
+ return phiName_;
+ }
+
+
// Mapping functions
//- Map (and resize as needed) from self given a mapping object
@@ -157,6 +188,11 @@ public:
//- Write
virtual void write(Ostream&) const;
+
+
+ // Member operators
+
+ virtual void operator=(const fvPatchField& pvf);
};
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/pressureDirectedInletVelocity/pressureDirectedInletVelocityFvPatchVectorField.C b/src/finiteVolume/fields/fvPatchFields/derived/pressureDirectedInletVelocity/pressureDirectedInletVelocityFvPatchVectorField.C
index 1fe26fd649..fa9b68f545 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/pressureDirectedInletVelocity/pressureDirectedInletVelocityFvPatchVectorField.C
+++ b/src/finiteVolume/fields/fvPatchFields/derived/pressureDirectedInletVelocity/pressureDirectedInletVelocityFvPatchVectorField.C
@@ -45,6 +45,8 @@ pressureDirectedInletVelocityFvPatchVectorField
)
:
fixedValueFvPatchVectorField(p, iF),
+ phiName_("phi"),
+ rhoName_("rho"),
inletDir_(p.size())
{}
@@ -59,6 +61,8 @@ pressureDirectedInletVelocityFvPatchVectorField
)
:
fixedValueFvPatchVectorField(ptf, p, iF, mapper),
+ phiName_(ptf.phiName_),
+ rhoName_(ptf.rhoName_),
inletDir_(ptf.inletDir_, mapper)
{}
@@ -72,6 +76,8 @@ pressureDirectedInletVelocityFvPatchVectorField
)
:
fixedValueFvPatchVectorField(p, iF),
+ phiName_(dict.lookupOrDefault("phi", "phi")),
+ rhoName_(dict.lookupOrDefault("rho", "rho")),
inletDir_("inletDirection", dict, p.size())
{
fvPatchVectorField::operator=(vectorField("value", dict, p.size()));
@@ -85,6 +91,8 @@ pressureDirectedInletVelocityFvPatchVectorField
)
:
fixedValueFvPatchVectorField(pivpvf),
+ phiName_(pivpvf.phiName_),
+ rhoName_(pivpvf.rhoName_),
inletDir_(pivpvf.inletDir_)
{}
@@ -97,6 +105,8 @@ pressureDirectedInletVelocityFvPatchVectorField
)
:
fixedValueFvPatchVectorField(pivpvf, iF),
+ phiName_(pivpvf.phiName_),
+ rhoName_(pivpvf.rhoName_),
inletDir_(pivpvf.inletDir_)
{}
@@ -135,8 +145,8 @@ void pressureDirectedInletVelocityFvPatchVectorField::updateCoeffs()
return;
}
- const surfaceScalarField& phi =
- db().lookupObject("phi");
+ const surfaceScalarField& phi =
+ db().lookupObject(phiName_);
const fvsPatchField& phip =
patch().patchField(phi);
@@ -151,7 +161,7 @@ void pressureDirectedInletVelocityFvPatchVectorField::updateCoeffs()
else if (phi.dimensions() == dimDensity*dimVelocity*dimArea)
{
const fvPatchField& rhop =
- patch().lookupPatchField("rho");
+ patch().lookupPatchField(rhoName_);
operator==(inletDir_*phip/(rhop*ndmagS));
}
@@ -174,11 +184,24 @@ void pressureDirectedInletVelocityFvPatchVectorField::updateCoeffs()
void pressureDirectedInletVelocityFvPatchVectorField::write(Ostream& os) const
{
fvPatchVectorField::write(os);
+ os.writeKeyword("phi") << phiName_ << token::END_STATEMENT << nl;
+ os.writeKeyword("rho") << rhoName_ << token::END_STATEMENT << nl;
inletDir_.writeEntry("inletDirection", os);
writeEntry("value", os);
}
+// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
+
+void pressureDirectedInletVelocityFvPatchVectorField::operator=
+(
+ const fvPatchField& pvf
+)
+{
+ fvPatchField::operator=(inletDir_*(inletDir_ & pvf));
+}
+
+
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
makePatchTypeField
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/pressureDirectedInletVelocity/pressureDirectedInletVelocityFvPatchVectorField.H b/src/finiteVolume/fields/fvPatchFields/derived/pressureDirectedInletVelocity/pressureDirectedInletVelocityFvPatchVectorField.H
index a80e7779b2..4de0c84f48 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/pressureDirectedInletVelocity/pressureDirectedInletVelocityFvPatchVectorField.H
+++ b/src/finiteVolume/fields/fvPatchFields/derived/pressureDirectedInletVelocity/pressureDirectedInletVelocityFvPatchVectorField.H
@@ -23,10 +23,14 @@ License
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Class
- Foam::pressureDirectedInletVelocityFvPatchVectorField
+ Foam::pressureDirectedInletVelocityFvPatchVectorField
Description
- Foam::pressureDirectedInletOutletVelocityFvPatchVectorField
+ Velocity inlet boundary condition for patches where the pressure is
+ specified. The inflow velocity is obtained from the flux with the
+ specified "inletDirection" direction. If reverse flow is possible or
+ expected use the "pressureDirectedInletOutletVelocityFvPatchVectorField"
+ BC instead.
SourceFiles
pressureDirectedInletVelocityFvPatchVectorField.C
@@ -53,7 +57,9 @@ class pressureDirectedInletVelocityFvPatchVectorField
public fixedValueFvPatchVectorField
{
// Private data
-
+
+ word phiName_;
+ word rhoName_;
vectorField inletDir_;
@@ -130,9 +136,35 @@ public:
}
-
// Member functions
+ // Access
+
+ //- Return the name of rho
+ const word& rhoName() const
+ {
+ return rhoName_;
+ }
+
+ //- Return reference to the name of rho to allow adjustment
+ word& rhoName()
+ {
+ return rhoName_;
+ }
+
+ //- Return the name of phi
+ const word& phiName() const
+ {
+ return phiName_;
+ }
+
+ //- Return reference to the name of phi to allow adjustment
+ word& phiName()
+ {
+ return phiName_;
+ }
+
+
// Mapping functions
//- Map (and resize as needed) from self given a mapping object
@@ -154,6 +186,11 @@ public:
//- Write
virtual void write(Ostream&) const;
+
+
+ // Member operators
+
+ virtual void operator=(const fvPatchField& pvf);
};
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/pressureInletOutletVelocity/pressureInletOutletVelocityFvPatchVectorField.H b/src/finiteVolume/fields/fvPatchFields/derived/pressureInletOutletVelocity/pressureInletOutletVelocityFvPatchVectorField.H
index 538e17ae18..29eed3bfc3 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/pressureInletOutletVelocity/pressureInletOutletVelocityFvPatchVectorField.H
+++ b/src/finiteVolume/fields/fvPatchFields/derived/pressureInletOutletVelocity/pressureInletOutletVelocityFvPatchVectorField.H
@@ -26,7 +26,10 @@ Class
Foam::pressureInletOutletVelocityFvPatchVectorField
Description
- Foam::pressureInletOutletVelocityFvPatchVectorField
+ Velocity inlet/outlet boundary condition patches for where the pressure is
+ specified. zero-gradient is applied for outflow (as defined by the flux)
+ and for inflow the velocity is obtained from the patch-face normal
+ component of the internal-cell value.
SourceFiles
pressureInletOutletVelocityFvPatchVectorField.C
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/pressureInletUniformVelocity/pressureInletUniformVelocityFvPatchVectorField.C b/src/finiteVolume/fields/fvPatchFields/derived/pressureInletUniformVelocity/pressureInletUniformVelocityFvPatchVectorField.C
index fb2787c164..0acfc62f01 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/pressureInletUniformVelocity/pressureInletUniformVelocityFvPatchVectorField.C
+++ b/src/finiteVolume/fields/fvPatchFields/derived/pressureInletUniformVelocity/pressureInletUniformVelocityFvPatchVectorField.C
@@ -108,6 +108,17 @@ void pressureInletUniformVelocityFvPatchVectorField::updateCoeffs()
}
+// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
+
+void pressureInletUniformVelocityFvPatchVectorField::operator=
+(
+ const fvPatchField& pvf
+)
+{
+ operator==(patch().nf()*sum(patch().Sf() & pvf)/sum(patch().magSf()));
+}
+
+
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
makePatchTypeField
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/pressureInletUniformVelocity/pressureInletUniformVelocityFvPatchVectorField.H b/src/finiteVolume/fields/fvPatchFields/derived/pressureInletUniformVelocity/pressureInletUniformVelocityFvPatchVectorField.H
index 4440cdfbe8..0eadf62472 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/pressureInletUniformVelocity/pressureInletUniformVelocityFvPatchVectorField.H
+++ b/src/finiteVolume/fields/fvPatchFields/derived/pressureInletUniformVelocity/pressureInletUniformVelocityFvPatchVectorField.H
@@ -26,7 +26,9 @@ Class
Foam::pressureInletUniformVelocityFvPatchVectorField
Description
- Foam::pressureInletUniformVelocityFvPatchVectorField
+ Velocity inlet boundary condition for patches where the pressure is
+ specified. The uniform inflow velocity is obtained by averaging the flux
+ over the patch and apply it in the direction normal to the patch faces.
SourceFiles
pressureInletUniformVelocityFvPatchVectorField.C
@@ -124,6 +126,11 @@ public:
//- Update the coefficients associated with the patch field
virtual void updateCoeffs();
+
+
+ // Member operators
+
+ virtual void operator=(const fvPatchField& pvf);
};
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/pressureInletVelocity/pressureInletVelocityFvPatchVectorField.C b/src/finiteVolume/fields/fvPatchFields/derived/pressureInletVelocity/pressureInletVelocityFvPatchVectorField.C
index c349bc3260..75242aabb5 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/pressureInletVelocity/pressureInletVelocityFvPatchVectorField.C
+++ b/src/finiteVolume/fields/fvPatchFields/derived/pressureInletVelocity/pressureInletVelocityFvPatchVectorField.C
@@ -70,20 +70,10 @@ pressureInletVelocityFvPatchVectorField::pressureInletVelocityFvPatchVectorField
)
:
fixedValueFvPatchVectorField(p, iF),
- phiName_("phi"),
- rhoName_("rho")
+ phiName_(dict.lookupOrDefault("phi", "phi")),
+ rhoName_(dict.lookupOrDefault("rho", "rho"))
{
fvPatchVectorField::operator=(vectorField("value", dict, p.size()));
-
- if (dict.found("phi"))
- {
- dict.lookup("phi") >> phiName_;
- }
-
- if (dict.found("rho"))
- {
- dict.lookup("rho") >> rhoName_;
- }
}
@@ -164,6 +154,17 @@ void pressureInletVelocityFvPatchVectorField::write(Ostream& os) const
}
+// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
+
+void pressureInletVelocityFvPatchVectorField::operator=
+(
+ const fvPatchField& pvf
+)
+{
+ fvPatchField::operator=(patch().nf()*(patch().nf() & pvf));
+}
+
+
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
makePatchTypeField
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/pressureInletVelocity/pressureInletVelocityFvPatchVectorField.H b/src/finiteVolume/fields/fvPatchFields/derived/pressureInletVelocity/pressureInletVelocityFvPatchVectorField.H
index 75348775bc..bb7b7f5b9b 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/pressureInletVelocity/pressureInletVelocityFvPatchVectorField.H
+++ b/src/finiteVolume/fields/fvPatchFields/derived/pressureInletVelocity/pressureInletVelocityFvPatchVectorField.H
@@ -26,7 +26,10 @@ Class
Foam::pressureInletVelocityFvPatchVectorField
Description
- Foam::pressureInletVelocityFvPatchVectorField
+ Velocity inlet boundary condition for patches where the pressure is
+ specified. The inflow velocity is obtained from the flux with a direction
+ normal to the patch faces. If reverse flow is possible or expected use
+ the "pressureInletOutletVelocityFvPatchVectorField" BC instead.
SourceFiles
pressureInletVelocityFvPatchVectorField.C
@@ -57,6 +60,7 @@ class pressureInletVelocityFvPatchVectorField
word phiName_;
word rhoName_;
+
public:
//- Runtime type information
@@ -127,6 +131,33 @@ public:
// Member functions
+ // Access
+
+ //- Return the name of rho
+ const word& rhoName() const
+ {
+ return rhoName_;
+ }
+
+ //- Return reference to the name of rho to allow adjustment
+ word& rhoName()
+ {
+ return rhoName_;
+ }
+
+ //- Return the name of phi
+ const word& phiName() const
+ {
+ return phiName_;
+ }
+
+ //- Return reference to the name of phi to allow adjustment
+ word& phiName()
+ {
+ return phiName_;
+ }
+
+
//- Update the coefficients associated with the patch field
virtual void updateCoeffs();
@@ -136,10 +167,7 @@ public:
// Member operators
- virtual void operator=(const fvPatchField& pvf)
- {
- fvPatchField::operator=(pvf);
- }
+ virtual void operator=(const fvPatchField& pvf);
};
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/pressureNormalInletOutletVelocity/pressureNormalInletOutletVelocityFvPatchVectorField.C b/src/finiteVolume/fields/fvPatchFields/derived/pressureNormalInletOutletVelocity/pressureNormalInletOutletVelocityFvPatchVectorField.C
new file mode 100644
index 0000000000..30b7b12ff7
--- /dev/null
+++ b/src/finiteVolume/fields/fvPatchFields/derived/pressureNormalInletOutletVelocity/pressureNormalInletOutletVelocityFvPatchVectorField.C
@@ -0,0 +1,201 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 1991-2008 OpenCFD Ltd.
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 2 of the License, or (at your
+ option) any later version.
+
+ OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenFOAM; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+\*---------------------------------------------------------------------------*/
+
+#include "pressureNormalInletOutletVelocityFvPatchVectorField.H"
+#include "addToRunTimeSelectionTable.H"
+#include "fvPatchFieldMapper.H"
+#include "volFields.H"
+#include "surfaceFields.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+pressureNormalInletOutletVelocityFvPatchVectorField::
+pressureNormalInletOutletVelocityFvPatchVectorField
+(
+ const fvPatch& p,
+ const DimensionedField& iF
+)
+:
+ mixedFvPatchVectorField(p, iF),
+ phiName_("phi"),
+ rhoName_("rho")
+{
+ refValue() = *this;
+ refGrad() = vector::zero;
+ valueFraction() = 0.0;
+}
+
+
+pressureNormalInletOutletVelocityFvPatchVectorField::
+pressureNormalInletOutletVelocityFvPatchVectorField
+(
+ const pressureNormalInletOutletVelocityFvPatchVectorField& ptf,
+ const fvPatch& p,
+ const DimensionedField& iF,
+ const fvPatchFieldMapper& mapper
+)
+:
+ mixedFvPatchVectorField(ptf, p, iF, mapper),
+ phiName_(ptf.phiName_),
+ rhoName_(ptf.rhoName_)
+{}
+
+
+pressureNormalInletOutletVelocityFvPatchVectorField::
+pressureNormalInletOutletVelocityFvPatchVectorField
+(
+ const fvPatch& p,
+ const DimensionedField& iF,
+ const dictionary& dict
+)
+:
+ mixedFvPatchVectorField(p, iF),
+ phiName_(dict.lookupOrDefault("phi", "phi")),
+ rhoName_(dict.lookupOrDefault("rho", "rho"))
+{
+ fvPatchVectorField::operator=(vectorField("value", dict, p.size()));
+ refValue() = *this;
+ refGrad() = vector::zero;
+ valueFraction() = 0.0;
+}
+
+
+pressureNormalInletOutletVelocityFvPatchVectorField::
+pressureNormalInletOutletVelocityFvPatchVectorField
+(
+ const pressureNormalInletOutletVelocityFvPatchVectorField& pivpvf
+)
+:
+ mixedFvPatchVectorField(pivpvf),
+ phiName_(pivpvf.phiName_),
+ rhoName_(pivpvf.rhoName_)
+{}
+
+
+pressureNormalInletOutletVelocityFvPatchVectorField::
+pressureNormalInletOutletVelocityFvPatchVectorField
+(
+ const pressureNormalInletOutletVelocityFvPatchVectorField& pivpvf,
+ const DimensionedField& iF
+)
+:
+ mixedFvPatchVectorField(pivpvf, iF),
+ phiName_(pivpvf.phiName_),
+ rhoName_(pivpvf.rhoName_)
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+void pressureNormalInletOutletVelocityFvPatchVectorField::updateCoeffs()
+{
+ if (updated())
+ {
+ return;
+ }
+
+ const surfaceScalarField& phi =
+ db().lookupObject(phiName_);
+
+ const fvsPatchField& phip =
+ patch().patchField(phi);
+
+ vectorField n = patch().nf();
+ const Field& magS = patch().magSf();
+
+ if (phi.dimensions() == dimVelocity*dimArea)
+ {
+ refValue() = n*phip/magS;
+ }
+ else if (phi.dimensions() == dimDensity*dimVelocity*dimArea)
+ {
+ const fvPatchField& rhop =
+ patch().lookupPatchField(rhoName_);
+
+ refValue() = n*phip/(rhop*magS);
+ }
+ else
+ {
+ FatalErrorIn
+ (
+ "pressureNormalInletOutletVelocityFvPatchVectorField::"
+ "updateCoeffs()"
+ ) << "dimensions of phi are not correct"
+ << "\n on patch " << this->patch().name()
+ << " of field " << this->dimensionedInternalField().name()
+ << " in file " << this->dimensionedInternalField().objectPath()
+ << exit(FatalError);
+ }
+
+ valueFraction() = 1.0 - pos(phip);
+
+ mixedFvPatchVectorField::updateCoeffs();
+}
+
+
+void pressureNormalInletOutletVelocityFvPatchVectorField::
+write(Ostream& os) const
+{
+ fvPatchVectorField::write(os);
+ os.writeKeyword("phi") << phiName_ << token::END_STATEMENT << nl;
+ os.writeKeyword("rho") << rhoName_ << token::END_STATEMENT << nl;
+ writeEntry("value", os);
+}
+
+
+// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
+
+void pressureNormalInletOutletVelocityFvPatchVectorField::operator=
+(
+ const fvPatchField& pvf
+)
+{
+ fvPatchField::operator=
+ (
+ valueFraction()*(patch().nf()*(patch().nf() & pvf))
+ + (1 - valueFraction())*pvf
+ );
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+makePatchTypeField
+(
+ fvPatchVectorField,
+ pressureNormalInletOutletVelocityFvPatchVectorField
+);
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// ************************************************************************* //
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/pressureNormalInletOutletVelocity/pressureNormalInletOutletVelocityFvPatchVectorField.H b/src/finiteVolume/fields/fvPatchFields/derived/pressureNormalInletOutletVelocity/pressureNormalInletOutletVelocityFvPatchVectorField.H
new file mode 100644
index 0000000000..e1f576d012
--- /dev/null
+++ b/src/finiteVolume/fields/fvPatchFields/derived/pressureNormalInletOutletVelocity/pressureNormalInletOutletVelocityFvPatchVectorField.H
@@ -0,0 +1,191 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 1991-2008 OpenCFD Ltd.
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 2 of the License, or (at your
+ option) any later version.
+
+ OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenFOAM; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+Class
+ Foam::pressureNormalInletOutletVelocityFvPatchVectorField
+
+Description
+ Velocity inlet/outlet boundary condition for patches where the pressure is
+ specified. zero-gradient is applied for outflow (as defined by the flux)
+ and for inflow the velocity is obtained from the flux with a direction
+ normal to the patch faces.
+
+SourceFiles
+ pressureNormalInletOutletVelocityFvPatchVectorField.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef pressureNormalInletOutletVelocityFvPatchVectorField_H
+#define pressureNormalInletOutletVelocityFvPatchVectorField_H
+
+#include "fvPatchFields.H"
+#include "mixedFvPatchFields.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+ Class pressureNormalInletOutletVelocityFvPatch Declaration
+\*---------------------------------------------------------------------------*/
+
+class pressureNormalInletOutletVelocityFvPatchVectorField
+:
+ public mixedFvPatchVectorField
+{
+ // Private data
+
+ word phiName_;
+ word rhoName_;
+
+
+public:
+
+ //- Runtime type information
+ TypeName("pressureNormalInletOutletVelocity");
+
+
+ // Constructors
+
+ //- Construct from patch and internal field
+ pressureNormalInletOutletVelocityFvPatchVectorField
+ (
+ const fvPatch&,
+ const DimensionedField&
+ );
+
+ //- Construct from patch, internal field and dictionary
+ pressureNormalInletOutletVelocityFvPatchVectorField
+ (
+ const fvPatch&,
+ const DimensionedField&,
+ const dictionary&
+ );
+
+ //- Construct by mapping given
+ // pressureNormalInletOutletVelocityFvPatchVectorField
+ // onto a new patch
+ pressureNormalInletOutletVelocityFvPatchVectorField
+ (
+ const pressureNormalInletOutletVelocityFvPatchVectorField&,
+ const fvPatch&,
+ const DimensionedField&,
+ const fvPatchFieldMapper&
+ );
+
+ //- Construct as copy
+ pressureNormalInletOutletVelocityFvPatchVectorField
+ (
+ const pressureNormalInletOutletVelocityFvPatchVectorField&
+ );
+
+ //- Construct and return a clone
+ virtual tmp clone() const
+ {
+ return tmp
+ (
+ new pressureNormalInletOutletVelocityFvPatchVectorField
+ (
+ *this
+ )
+ );
+ }
+
+ //- Construct as copy setting internal field reference
+ pressureNormalInletOutletVelocityFvPatchVectorField
+ (
+ const pressureNormalInletOutletVelocityFvPatchVectorField&,
+ const DimensionedField&
+ );
+
+ //- Construct and return a clone setting internal field reference
+ virtual tmp clone
+ (
+ const DimensionedField& iF
+ ) const
+ {
+ return tmp
+ (
+ new pressureNormalInletOutletVelocityFvPatchVectorField
+ (
+ *this,
+ iF
+ )
+ );
+ }
+
+
+ // Member functions
+
+ // Access
+
+ //- Return the name of rho
+ const word& rhoName() const
+ {
+ return rhoName_;
+ }
+
+ //- Return reference to the name of rho to allow adjustment
+ word& rhoName()
+ {
+ return rhoName_;
+ }
+
+ //- Return the name of phi
+ const word& phiName() const
+ {
+ return phiName_;
+ }
+
+
+ //- Return reference to the name of phi to allow adjustment
+ word& phiName()
+ {
+ return phiName_;
+ }
+
+
+ //- Update the coefficients associated with the patch field
+ virtual void updateCoeffs();
+
+ //- Write
+ virtual void write(Ostream&) const;
+
+
+ // Member operators
+
+ virtual void operator=(const fvPatchField& pvf);
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/rotatingPressureInletOutletVelocity/rotatingPressureInletOutletVelocityFvPatchVectorField.H b/src/finiteVolume/fields/fvPatchFields/derived/rotatingPressureInletOutletVelocity/rotatingPressureInletOutletVelocityFvPatchVectorField.H
index e97cb203cf..86ef7a8961 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/rotatingPressureInletOutletVelocity/rotatingPressureInletOutletVelocityFvPatchVectorField.H
+++ b/src/finiteVolume/fields/fvPatchFields/derived/rotatingPressureInletOutletVelocity/rotatingPressureInletOutletVelocityFvPatchVectorField.H
@@ -26,7 +26,10 @@ Class
Foam::rotatingPressureInletOutletVelocityFvPatchVectorField
Description
- Foam::rotatingPressureInletOutletVelocityFvPatchVectorField
+ Velocity inlet/outlet boundary condition in a rotating frame
+ for patches where the pressure is specified. zero-gradient is applied for
+ outflow (as defined by the flux) and for inflow the velocity is obtained
+ from the flux with a direction normal to the patch faces.
SourceFiles
rotatingPressureInletOutletVelocityFvPatchVectorField.C
diff --git a/src/finiteVolume/finiteVolume/convectionSchemes/gaussConvectionScheme/gaussConvectionScheme.C b/src/finiteVolume/finiteVolume/convectionSchemes/gaussConvectionScheme/gaussConvectionScheme.C
index 90b8139264..6b0f66f245 100644
--- a/src/finiteVolume/finiteVolume/convectionSchemes/gaussConvectionScheme/gaussConvectionScheme.C
+++ b/src/finiteVolume/finiteVolume/convectionSchemes/gaussConvectionScheme/gaussConvectionScheme.C
@@ -22,8 +22,6 @@ License
along with OpenFOAM; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-Description
-
\*---------------------------------------------------------------------------*/
#include "gaussConvectionScheme.H"
diff --git a/src/lagrangian/intermediate/IntegrationScheme/Analytical/Analytical.C b/src/lagrangian/intermediate/IntegrationScheme/Analytical/Analytical.C
index 1606e29b07..02471bdc2e 100644
--- a/src/lagrangian/intermediate/IntegrationScheme/Analytical/Analytical.C
+++ b/src/lagrangian/intermediate/IntegrationScheme/Analytical/Analytical.C
@@ -50,7 +50,8 @@ Foam::Analytical::~Analytical()
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
template
-Type Foam::Analytical::integrate
+typename Foam::IntegrationScheme::integrationResult
+Foam::Analytical::integrate
(
const Type phi,
const scalar dt,
@@ -58,7 +59,11 @@ Type Foam::Analytical::integrate
const scalar beta
) const
{
- return alpha + (phi - alpha)*exp(-beta*dt);
+ typename IntegrationScheme::integrationResult retValue;
+ retValue.average() = alpha + (phi - alpha)*(1 - exp(-beta*dt))/(beta*dt);
+ retValue.value() = alpha + (phi - alpha)*exp(-beta*dt);
+
+ return retValue;
}
diff --git a/src/lagrangian/intermediate/IntegrationScheme/Analytical/Analytical.H b/src/lagrangian/intermediate/IntegrationScheme/Analytical/Analytical.H
index ebbb61522c..3c6bdd3b1f 100644
--- a/src/lagrangian/intermediate/IntegrationScheme/Analytical/Analytical.H
+++ b/src/lagrangian/intermediate/IntegrationScheme/Analytical/Analytical.H
@@ -74,7 +74,7 @@ public:
// Member Functions
//- Perform the integration
- virtual Type integrate
+ virtual typename IntegrationScheme::integrationResult integrate
(
const Type phi,
const scalar dt,
diff --git a/src/lagrangian/intermediate/IntegrationScheme/Euler/Euler.C b/src/lagrangian/intermediate/IntegrationScheme/Euler/Euler.C
index 5b9f921819..2b39e9fd68 100644
--- a/src/lagrangian/intermediate/IntegrationScheme/Euler/Euler.C
+++ b/src/lagrangian/intermediate/IntegrationScheme/Euler/Euler.C
@@ -50,7 +50,8 @@ Foam::Euler::~Euler()
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
template
-Type Foam::Euler::integrate
+typename Foam::IntegrationScheme::integrationResult
+Foam::Euler::integrate
(
const Type phi,
const scalar dt,
@@ -58,7 +59,11 @@ Type Foam::Euler::integrate
const scalar beta
) const
{
- return (phi + dt*alpha)/(1.0 + dt/beta);
+ typename IntegrationScheme::integrationResult retValue;
+ retValue.value() = (phi + beta*dt*alpha)/(1.0 + beta*dt);
+ retValue.average() = 0.5*(phi + retValue.value());
+
+ return retValue;
}
diff --git a/src/lagrangian/intermediate/IntegrationScheme/Euler/Euler.H b/src/lagrangian/intermediate/IntegrationScheme/Euler/Euler.H
index 724320a09e..a3c925e9f0 100644
--- a/src/lagrangian/intermediate/IntegrationScheme/Euler/Euler.H
+++ b/src/lagrangian/intermediate/IntegrationScheme/Euler/Euler.H
@@ -74,7 +74,7 @@ public:
// Member Functions
//- Perform the integration
- virtual Type integrate
+ virtual typename IntegrationScheme::integrationResult integrate
(
const Type phi,
const scalar dt,
diff --git a/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.H b/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.H
index b8b3859a0f..bac74a898c 100644
--- a/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.H
+++ b/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.H
@@ -53,6 +53,63 @@ namespace Foam
template
class IntegrationScheme
{
+
+public:
+
+ //- Helper class to supply results of integration
+ class integrationResult
+ {
+ //- Integration value
+ Type value_;
+
+ //- Average value across integration step
+ Type average_;
+
+
+ public:
+
+ //- Constructor
+ integrationResult()
+ :
+ value_(pTraits::zero),
+ average_(pTraits::zero)
+ {}
+
+
+ // Member functions
+
+ // Access
+
+ //- Return const access to the value
+ Type value() const
+ {
+ return value_;
+ }
+
+ //- Return const access to the average
+ Type average() const
+ {
+ return average_;
+ }
+
+
+ // Edit
+
+ //- Return access to the value for changing
+ Type& value()
+ {
+ return value_;
+ }
+
+ //- Return access to the average for changing
+ Type& average()
+ {
+ return average_;
+ }
+ };
+
+
+private:
// Private data
//- Name of the Integration variable
@@ -120,7 +177,7 @@ public:
// Member Functions
//- Perform the Integration
- virtual Type integrate
+ virtual integrationResult integrate
(
const Type phi,
const scalar dt,
@@ -151,7 +208,7 @@ public:
\
defineNamedTemplateTypeNameAndDebug(SS, 0); \
\
- IntegrationScheme::adddictionaryConstructorToTable > \
+ IntegrationScheme::adddictionaryConstructorToTable > \
add##SS##Type##ConstructorToTable_;
diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C
index 05c5dc728f..6ee04f1235 100644
--- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C
+++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C
@@ -332,21 +332,11 @@ void Foam::KinematicCloud::evolve()
inject(td);
- move(td);
-}
-
-
-template
-template
-void Foam::KinematicCloud::move
-(
- TrackingData& td
-)
-{
if (coupled_)
{
resetSourceTerms();
}
+
Cloud::move(td);
}
diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H
index dff0859c53..da0f1738e5 100644
--- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H
+++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H
@@ -109,7 +109,6 @@ private:
//- References to the mesh and time databases
const fvMesh& mesh_;
-// const Time& runTime_;
//- Reference to the interpolation for the carrier phase to the parcels
const volPointInterpolation& vpi_;
@@ -257,19 +256,12 @@ protected:
ParcelType* p
);
- //- Move the parcels
- template
- void move(TrackingData& td);
-
//- Post-injection checks
void postInjectCheck();
public:
- //- Runtime type information
-// TypeName("KinematicCloud");
-
// Constructors
//- Construct given carrier gas fields
@@ -284,9 +276,8 @@ public:
);
- // Destructor
-
- virtual ~KinematicCloud();
+ //- Destructor
+ virtual ~KinematicCloud();
// Member Functions
@@ -395,7 +386,6 @@ public:
inline tmp SU2(volVectorField& U) const;
-
// Check
//- Total mass injected
@@ -436,7 +426,7 @@ public:
//- Reset the spray source terms
void resetSourceTerms();
- //- Evolve the spray (move, inject)
+ //- Evolve the spray (inject, inject)
void evolve();
};
diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C
index f30f70bcb3..dcf4730f7a 100644
--- a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C
+++ b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C
@@ -185,7 +185,12 @@ void Foam::ReactingCloud::evolve()
inject(td);
- this->move(td);
+ if (this->coupled())
+ {
+ resetSourceTerms();
+ }
+
+ Cloud::move(td);
}
diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.H b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.H
index 7afa096c63..6f7bb05e09 100644
--- a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.H
+++ b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.H
@@ -204,7 +204,7 @@ public:
//- Reset the spray source terms
void resetSourceTerms();
- //- Evolve the spray (move, inject)
+ //- Evolve the spray (inject, move)
void evolve();
};
diff --git a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C
index 0e07f89769..ad0d520b74 100644
--- a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C
+++ b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C
@@ -176,7 +176,12 @@ void Foam::ThermoCloud::evolve()
inject(td);
- this->move(td);
+ if (this->coupled())
+ {
+ resetSourceTerms();
+ }
+
+ Cloud::move(td);
}
diff --git a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.H b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.H
index da9c5e4fb5..072c86165b 100644
--- a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.H
+++ b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.H
@@ -209,11 +209,11 @@ public:
// Cloud evolution functions
- //- Evolve the spray (move, inject)
- void evolve();
-
//- Reset the spray source terms
void resetSourceTerms();
+
+ //- Evolve the spray (inject, move)
+ void evolve();
};
diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C
index 9b0dbf45cd..07e20192c8 100644
--- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C
+++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C
@@ -155,15 +155,16 @@ Foam::vector Foam::KinematicParcel::calcVelocity
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Update velocity - treat as 3-D
- const scalar bp = 1.0/(Cud + VSMALL);
- const vector ap = Uc_/bp + rhoc_/rho_*td.g();
+ const vector ap = Uc_ + (1 - rhoc_/rho_)/(Cud + VSMALL)*td.g();
+ const scalar bp = Cud;
- vector Unew = td.cloud().UIntegrator().integrate(U_, dt, ap, bp);
+ vector Unew = td.cloud().UIntegrator().integrate(U_, dt, ap, bp).value();
// Info<< "U_, Unew = " << U_ << ", " << Unew << endl;
// Calculate the momentum transfer to the continuous phase
- dUTrans = -mass()*(Unew - U_);
+ // - do not include gravity impulse
+ dUTrans = -mass()*(Unew - U_ - dt*td.g());
// Make corrections for 2-D cases
if (meshInfo.caseIs2d())
@@ -233,13 +234,17 @@ bool Foam::KinematicParcel::move
// Update cell based properties
p.updateCellQuantities(td, dt, celli);
- if (td.cloud().coupled())
+ // Avoid problems with extremely small timesteps
+ if (dt > ROOTVSMALL)
{
- p.calcCoupled(td, dt, celli);
- }
- else
- {
- p.calcUncoupled(td, dt, celli);
+ if (td.cloud().coupled())
+ {
+ p.calcCoupled(td, dt, celli);
+ }
+ else
+ {
+ p.calcUncoupled(td, dt, celli);
+ }
}
if (p.onBoundary() && td.keepParticle)
diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C
index 98ecd22675..b000ed0237 100644
--- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C
+++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C
@@ -203,7 +203,7 @@ Foam::Ostream& Foam::operator<<
os << static_cast& >(p);
os.write
(
- reinterpret_cast(p.typeId()),
+ reinterpret_cast(&p.typeId_),
sizeof(p.typeId())
+ sizeof(p.d())
+ sizeof(p.U())
diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.C b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.C
index d9d47894a5..5fe3aa1633 100644
--- a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.C
+++ b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.C
@@ -59,6 +59,164 @@ void Foam::ReactingParcel::calcCoupled
const scalar mass0 = this->mass();
const scalar np0 = this->nParticle_;
const scalar T0 = this->T_;
+
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~
+ // Initialise transfer terms
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ // Momentum transfer from the particle to the carrier phase
+ vector dUTrans = vector::zero;
+
+ // Enthalpy transfer from the particle to the carrier phase
+ scalar dhTrans = 0.0;
+
+ // Mass transfer from particle to carrier phase
+ // - components exist in particle already
+ scalarList dMassMT(td.cloud().gases().size(), 0.0);
+
+ // Mass transfer due to surface reactions from particle to carrier phase
+ // - components do not necessarily exist in particle already
+ scalarList dMassSR(td.cloud().gases().size(), 0.0);
+
+
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ // Calculate velocity - update U
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ scalar Cud = 0.0;
+ const vector U1 = calcVelocity(td, dt, Cud, dUTrans);
+
+
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ // Calculate heat transfer - update T
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ scalar htc = 0.0;
+ scalar T1 = calcHeatTransfer(td, dt, celli, htc, dhTrans);
+
+
+ // ~~~~~~~~~~~~~~~~~~~~~~~
+ // Calculate mass transfer
+ // ~~~~~~~~~~~~~~~~~~~~~~~
+ calcMassTransfer(td, dt, T0, T1, dMassMT);
+
+
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ // Calculate surface reactions
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ // Initialise enthalpy retention to zero
+ scalar dhRet = 0.0;
+
+ calcSurfaceReactions(td, dt, celli, T0, T1, dMassMT, dMassSR, dhRet);
+
+ // New total mass
+ const scalar mass1 = mass0 - sum(dMassMT) - sum(dMassSR);
+
+ // Correct particle temperature to account for latent heat of
+ // devolatilisation
+ T1 -=
+ td.constProps().Ldevol()
+ *sum(dMassMT)
+ /(0.5*(mass0 + mass1)*this->cp_);
+
+ // Add retained enthalpy from surface reaction to particle and remove
+ // from gas
+ T1 += dhRet/(0.5*(mass0 + mass1)*this->cp_);
+ dhTrans -= dhRet;
+
+ // Correct dhTrans to account for enthalpy of evolved volatiles
+ dhTrans +=
+ sum(dMassMT)
+ *td.cloud().composition().HGas(YGas_, 0.5*(T0 + T1));
+
+ // Correct dhTrans to account for enthalpy of consumed solids
+ dhTrans +=
+ sum(dMassSR)
+ *td.cloud().composition().HSolid(YSolid_, 0.5*(T0 + T1));
+
+
+ // ~~~~~~~~~~~~~~~~~~~~~~~
+ // Accumulate source terms
+ // ~~~~~~~~~~~~~~~~~~~~~~~
+
+ // Transfer mass lost from particle to carrier mass source
+ forAll(dMassMT, i)
+ {
+ td.cloud().rhoTrans(i)[celli] += np0*(dMassMT[i] + dMassSR[i]);
+ }
+
+ // Update momentum transfer
+ td.cloud().UTrans()[celli] += np0*dUTrans;
+
+ // Accumulate coefficient to be applied in carrier phase momentum coupling
+ td.cloud().UCoeff()[celli] += np0*mass0*Cud;
+
+ // Update enthalpy transfer
+ // - enthalpy of lost solids already accounted for
+ td.cloud().hTrans()[celli] += np0*dhTrans;
+
+ // Accumulate coefficient to be applied in carrier phase enthalpy coupling
+ td.cloud().hCoeff()[celli] += np0*htc*this->areaS();
+
+
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ // Remove the particle when mass falls below minimum threshold
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ if (mass1 < td.constProps().minParticleMass())
+ {
+ td.keepParticle = false;
+
+ // Absorb particle(s) into carrier phase
+ forAll(dMassMT, i)
+ {
+ td.cloud().rhoTrans(i)[celli] += np0*dMassMT[i];
+ }
+ td.cloud().hTrans()[celli] +=
+ np0*mass1
+ *(
+ YMixture_[0]*td.cloud().composition().HGas(YGas_, T1)
+ + YMixture_[2]*td.cloud().composition().HSolid(YSolid_, T1)
+ );
+ td.cloud().UTrans()[celli] += np0*mass1*U1;
+ }
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ // Set new particle properties
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ else
+ {
+ this->U_ = U1;
+ this->T_ = T1;
+ this->cp_ =
+ YMixture_[0]*td.cloud().composition().cpGas(YGas_, T1)
+ + YMixture_[1]*td.cloud().composition().cpLiquid(YLiquid_, pc_, T1)
+ + YMixture_[2]*td.cloud().composition().cpSolid(YSolid_);
+
+ // Update particle density or diameter
+ if (td.constProps().constantVolume())
+ {
+ this->rho_ = mass1/this->volume();
+ }
+ else
+ {
+ this->d_ = cbrt(mass1/this->rho_*6.0/mathematicalConstant::pi);
+ }
+ }
+}
+
+
+template
+template
+void Foam::ReactingParcel::calcUncoupled
+(
+ TrackData& td,
+ const scalar dt,
+ const label celli
+)
+{
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ // Define local properties at beginning of timestep
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ const scalar T0 = this->T_;
+ const scalar mass0 = this->mass();
const scalar cp0 = this->cp_;
// ~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -79,9 +237,12 @@ void Foam::ReactingParcel::calcCoupled
// - components do not necessarily exist in particle already
scalarList dMassSR(td.cloud().gases().size(), 0.0);
- // Total mass lost from particle due to surface reactions
- // - sub-model will adjust component mass fractions
- scalar dMassMTSR = 0.0;
+
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ // Calculate velocity - update U
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ scalar Cud = 0.0;
+ const vector U1 = calcVelocity(td, dt, Cud, dUTrans);
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -91,13 +252,6 @@ void Foam::ReactingParcel::calcCoupled
scalar T1 = calcHeatTransfer(td, dt, celli, htc, dhTrans);
- // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- // Calculate velocity - update U
- // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- scalar Cud = 0.0;
- const vector U1 = calcVelocity(td, dt, Cud, dUTrans);
-
-
// ~~~~~~~~~~~~~~~~~~~~~~~
// Calculate mass transfer
// ~~~~~~~~~~~~~~~~~~~~~~~
@@ -107,186 +261,23 @@ void Foam::ReactingParcel::calcCoupled
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Calculate surface reactions
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
- calcSurfaceReactions(td, dt, celli, T0, T1, dMassMTSR, dMassSR);
+
+ // Initialise enthalpy retention to zero
+ scalar dhRet = 0.0;
+
+ calcSurfaceReactions(td, dt, celli, T0, T1, dMassMT, dMassSR, dhRet);
// New total mass
- const scalar mass1 = mass0 - sum(dMassMT) - dMassMTSR;
+ const scalar mass1 = mass0 - sum(dMassMT) - sum(dMassSR);
- // Ratio of mass devolatilised to the total volatile mass of the particle
- const scalar fVol = 1 -
- (YMixture_[0]*mass1)
- /(td.cloud().composition().YMixture0()[0]*mass0_);
-
- // Specific heat capacity of non-volatile components
- const scalar cpNonVolatile =
- (
- YMixture_[1]*td.cloud().composition().cpLiquid(YLiquid_, pc_, this->Tc_)
- + YMixture_[2]*td.cloud().composition().cpSolid(YSolid_)
- )/(YMixture_[1] + YMixture_[2]);
-
- // New specific heat capacity - linear variation until volatiles
- // have evolved
- const scalar cp1 = (cpNonVolatile - td.constProps().cp0())*fVol
- + td.constProps().cp0();
-
-
- // ~~~~~~~~~~~~~~~~~~~~~~~
- // Accumulate source terms
- // ~~~~~~~~~~~~~~~~~~~~~~~
-
- // Transfer mass lost from particle to carrier mass source
- forAll(dMassMT, i)
- {
- td.cloud().rhoTrans(i)[celli] += np0*(dMassMT[i] + dMassSR[i]);
- }
-
- // Update momentum transfer
- td.cloud().UTrans()[celli] += np0*dUTrans;
-
- // Accumulate coefficient to be applied in carrier phase momentum coupling
- td.cloud().UCoeff()[celli] += np0*mass0*Cud;
-
- // Update enthalpy transfer
-// td.cloud().hTrans()[celli] += np0*(mass0*cp0*T0 - mass1*cp1*T1);
- td.cloud().hTrans()[celli] += np0*((mass0*cp0 - mass1*cp1)*T0 + dhTrans);
-
- // Accumulate coefficient to be applied in carrier phase enthalpy coupling
- td.cloud().hCoeff()[celli] += np0*htc*this->areaS();
-
-
- // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- // Remove the particle when mass falls below minimum threshold
- // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- if (mass1 < td.constProps().minParticleMass())
- {
- td.keepParticle = false;
-
- // Absorb particle(s) into carrier phase
- forAll(dMassMT, i)
- {
- td.cloud().rhoTrans(i)[celli] += np0*dMassMT[i];
- }
- td.cloud().hTrans()[celli] += np0*mass1*cp1*T1;
- td.cloud().UTrans()[celli] += np0*mass1*U1;
- }
- // ~~~~~~~~~~~~~~~~~~~~~~~~~~~
- // Set new particle properties
- // ~~~~~~~~~~~~~~~~~~~~~~~~~~~
- else
- {
- this->U_ = U1;
- this->T_ = T1;
- this->cp_ = cp1;
-
- // Update particle density or diameter
- if (td.cloud().massTransfer().changesVolume())
- {
- this->d_ = cbrt(mass1/this->rho_*6.0/mathematicalConstant::pi);
- }
- else
- {
- this->rho_ = mass1/this->volume();
- }
- }
-}
-
-
-template
-template
-void Foam::ReactingParcel::calcUncoupled
-(
- TrackData& td,
- const scalar dt,
- const label celli
-)
-{
- // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- // Define local properties at beginning of timestep
- // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- const scalar T0 = this->T_;
- const scalar mass0 = this->mass();
-// const scalar cp0 = this->cp();
-
- // ~~~~~~~~~~~~~~~~~~~~~~~~~
- // Initialise transfer terms
- // ~~~~~~~~~~~~~~~~~~~~~~~~~
-
- // Momentum transfer from the particle to the carrier phase
- vector dUTrans = vector::zero;
-
- // Enthalpy transfer from the particle to the carrier phase
- scalar dhTrans = 0.0;
-
- // Mass transfer from particle to carrier phase
- // - components exist in particle already
- scalarList dMassMT(td.cloud().gases().size(), 0.0);
-
- // Mass transfer due to surface reactions from particle to carrier phase
- // - components do not necessarily exist in particle already
- scalarList dMassSR(td.cloud().gases().size(), 0.0);
-
- // Total mass lost from particle due to surface reactions
- // - sub-model will adjust component mass fractions
- scalar dMassMTSR = 0.0;
-
-
- // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- // Calculate heat transfer - update T
- // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- scalar htc = 0.0;
- scalar T1 = calcHeatTransfer(td, dt, celli, htc, dhTrans);
-
- // Limit new temp max by vapourisarion temperature
- T1 = min(td.constProps().Tvap(), T1);
-
-
- // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- // Calculate velocity - update U
- // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- scalar Cud = 0.0;
- const vector U1 = calcVelocity(td, dt, Cud, dUTrans);
-
-
- // ~~~~~~~~~~~~~~~~~~~~~~~
- // Calculate mass transfer
- // ~~~~~~~~~~~~~~~~~~~~~~~
- calcMassTransfer(td, dt, T0, T1, dMassMT);
-
-
- // ~~~~~~~~~~~~~~~~~~~~~~~~~~~
- // Calculate surface reactions
- // ~~~~~~~~~~~~~~~~~~~~~~~~~~~
- calcSurfaceReactions
- (
- td,
- dt,
- celli,
- T0,
- T1,
- dMassMTSR,
- dMassSR
- );
-
- // New total mass
- const scalar mass1 = mass0 - sum(dMassMT) - dMassMTSR;
-
- // Ratio of mass devolatilised to the total volatile mass of the particle
- const scalar fVol = 1 -
- (YMixture_[0]*mass1)
- /(td.cloud().composition().YMixture0()[0]*mass0_);
-
- // Specific heat capacity of non-volatile components
- const scalar cpNonVolatile =
- (
- YMixture_[1]*td.cloud().composition().cpLiquid(YLiquid_, pc_, this->Tc_)
- + YMixture_[2]*td.cloud().composition().cpSolid(YSolid_)
- )/(YMixture_[1] + YMixture_[2]);
-
- // New specific heat capacity - linear variation until volatiles
- // have evolved
- const scalar cp1 = (cpNonVolatile - td.constProps().cp0())*fVol
- + td.constProps().cp0();
+ // New specific heat capacity
+ const scalar cp1 =
+ YMixture_[0]*td.cloud().composition().cpGas(YGas_, T1)
+ + YMixture_[1]*td.cloud().composition().cpLiquid(YLiquid_, pc_, T1)
+ + YMixture_[2]*td.cloud().composition().cpSolid(YSolid_);
+ // Add retained enthalpy to particle
+ T1 += dhRet/(mass0*0.5*(cp0 + cp1));
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Remove the particle when mass falls below minimum threshold
@@ -305,13 +296,13 @@ void Foam::ReactingParcel::calcUncoupled
this->cp_ = cp1;
// Update particle density or diameter
- if (td.cloud().massTransfer().changesVolume())
+ if (td.constProps().constantVolume())
{
- this->d_ = cbrt(mass1/this->rho_*6.0/mathematicalConstant::pi);
+ this->rho_ = mass1/this->volume();
}
else
{
- this->rho_ = mass1/this->volume();
+ this->d_ = cbrt(mass1/this->rho_*6.0/mathematicalConstant::pi);
}
}
}
@@ -389,8 +380,9 @@ void Foam::ReactingParcel::calcSurfaceReactions
const label celli,
const scalar T0,
const scalar T1,
- scalar& dMassMTSR,
- scalarList& dMassMT
+ const scalarList& dMassMT,
+ scalarList& dMassSR,
+ scalar& dhRet
)
{
// Check that model is active
@@ -409,21 +401,20 @@ void Foam::ReactingParcel::calcSurfaceReactions
T0,
T1,
this->Tc_,
+ pc_,
this->rhoc_,
this->mass(),
+ dMassMT,
YGas_,
YLiquid_,
YSolid_,
YMixture_,
- dMassMTSR,
- dMassMT
+ dMassSR,
+ dhRet
);
}
-// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
-
-
// * * * * * * * * * * * * * * * * IOStream operators * * * * * * * * * * * //
#include "ReactingParcelIO.C"
diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H
index 43e125f13b..fc4edfb797 100644
--- a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H
+++ b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H
@@ -89,6 +89,12 @@ public:
//- Boiling point [K]
const scalar Tbp_;
+ //- Latent heat of devolatilisation [J/kg]
+ const scalar Ldevol_;
+
+ //- Constant volume flag - e.g. during mass transfer
+ Switch constantVolume_;
+
public:
@@ -102,6 +108,12 @@ public:
//- Return const access to the boiling point
inline scalar Tbp() const;
+
+ //- Return const access to the latent heat of devolatilisation
+ inline scalar Ldevol() const;
+
+ //- Return const access to the constant volume flag
+ inline Switch constantVolume() const;
};
@@ -210,8 +222,9 @@ protected:
const label celli,
const scalar T0,
const scalar T1,
- scalar& dMassMTSR,
- scalarList& dMassMT
+ const scalarList& dMassMT,
+ scalarList& dMassSR,
+ scalar& dhRet
);
diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelI.H b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelI.H
index 7138666b2e..d84ee3742c 100644
--- a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelI.H
+++ b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelI.H
@@ -34,7 +34,9 @@ inline Foam::ReactingParcel::constantProperties::constantProperties
:
ThermoParcel::constantProperties(dict),
Tvap_(dimensionedScalar(dict.lookup("Tvap")).value()),
- Tbp_(dimensionedScalar(dict.lookup("Tbp")).value())
+ Tbp_(dimensionedScalar(dict.lookup("Tbp")).value()),
+ Ldevol_(dimensionedScalar(dict.lookup("Ldevol")).value()),
+ constantVolume_(dict.lookup("constantVolume"))
{}
@@ -127,6 +129,22 @@ Foam::ReactingParcel::constantProperties::Tbp() const
}
+template
+inline Foam::scalar
+Foam::ReactingParcel::constantProperties::Ldevol() const
+{
+ return Ldevol_;
+}
+
+
+template
+inline Foam::Switch
+Foam::ReactingParcel::constantProperties::constantVolume() const
+{
+ return constantVolume_;
+}
+
+
// * * * * * * * * * * * trackData Member Functions * * * * * * * * * * * * //
template
diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelIO.C b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelIO.C
index ae0dcd0573..b1797b97de 100644
--- a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelIO.C
+++ b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelIO.C
@@ -297,10 +297,7 @@ Foam::Ostream& Foam::operator<<
os << static_cast& >(p);
os.write
(
- reinterpret_cast
- (
- &const_cast&>(p).mass0()
- ),
+ reinterpret_cast(&p.mass0_),
sizeof(p.mass0())
);
os << p.YMixture() << YGasLoc << YLiquidLoc << YSolidLoc;
diff --git a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.C b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.C
index 89c0e4f2e4..75ab727b77 100644
--- a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.C
+++ b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.C
@@ -203,17 +203,17 @@ Foam::scalar Foam::ThermoParcel::calcHeatTransfer
// Set new particle temperature
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- scalar Tnew = td.cloud().TIntegrator().integrate(T_, dt, ap, bp);
+ // Integrate to find the new parcel temperature
+ IntegrationScheme::integrationResult Tres =
+ td.cloud().TIntegrator().integrate(T_, dt, ap, bp);
- dhTrans = -this->mass()*cp_*(Tnew - T_);
+ // Using average parcel temperature for enthalpy transfer calculation
+ dhTrans = dt*this->areaS()*htc*(Tres.average() - Tc_);
- return Tnew;
+ return Tres.value();
}
-// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
-
-
// * * * * * * * * * * * * * * * * IOStream operators * * * * * * * * * * * //
#include "ThermoParcelIO.C"
diff --git a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcelIO.C b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcelIO.C
index 04d444e6bb..d0242e5e51 100644
--- a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcelIO.C
+++ b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcelIO.C
@@ -149,10 +149,7 @@ Foam::Ostream& Foam::operator<<
os << static_cast& >(p);
os.write
(
- reinterpret_cast
- (
- &const_cast&>(p).T()
- ),
+ reinterpret_cast(&p.T_),
sizeof(p.T()) + sizeof(p.cp())
);
}
diff --git a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.H b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.H
index ce85b19a5c..9caea94a34 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.H
+++ b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.H
@@ -209,13 +209,20 @@ public:
//- Return the gas constant for the gas mixture
virtual scalar RGas(const scalarField& YGas) const = 0;
- //- Return enthalpy for the gas mixture
+ //- Return enthalpy for the gas mixture [energy per unit mass]
virtual scalar HGas
(
const scalarField& YGas,
const scalar T
) const = 0;
+ //- Return enthalpy for the solid mixture [energy per unit mass]
+ virtual scalar HSolid
+ (
+ const scalarField& YSolid,
+ const scalar T
+ ) const = 0;
+
//- Return specific heat caparcity for the gas mixture
virtual scalar cpGas
(
diff --git a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SingleMixtureFraction/SingleMixtureFraction.C b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SingleMixtureFraction/SingleMixtureFraction.C
index 350546b5fe..74fb92338c 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SingleMixtureFraction/SingleMixtureFraction.C
+++ b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SingleMixtureFraction/SingleMixtureFraction.C
@@ -519,6 +519,29 @@ const
}
+template
+Foam::scalar Foam::SingleMixtureFraction::HSolid
+(
+ const scalarField& YSolid,
+ const scalar T
+)
+const
+{
+ scalar HMixture = 0.0;
+ forAll(YSolid, i)
+ {
+ label id = solidGlobalIds_[i];
+ HMixture +=
+ YSolid[i]
+ *(
+ this->solids().properties()[id].Hf()
+ + this->solids().properties()[id].cp()*T
+ );
+ }
+ return HMixture;
+}
+
+
template
Foam::scalar Foam::SingleMixtureFraction::cpGas
(
diff --git a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SingleMixtureFraction/SingleMixtureFraction.H b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SingleMixtureFraction/SingleMixtureFraction.H
index bd03d69456..de1fb8daf7 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SingleMixtureFraction/SingleMixtureFraction.H
+++ b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SingleMixtureFraction/SingleMixtureFraction.H
@@ -188,9 +188,12 @@ public:
//- Return the gas constant for the gas mixture
scalar RGas(const scalarField& YGas) const;
- //- Return enthalpy for the gas mixture
+ //- Return enthalpy for the gas mixture [energy per unit mass]
scalar HGas(const scalarField& YGas, const scalar T) const;
+ //- Return enthalpy for the solid mixture [energy per unit mass]
+ scalar HSolid(const scalarField& YSolid, const scalar T) const;
+
//- Return specific heat caparcity for the gas mixture
scalar cpGas(const scalarField& YGas, const scalar T) const;
diff --git a/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/ConstantRateDevolatilisation/ConstantRateDevolatilisation.C b/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/ConstantRateDevolatilisation/ConstantRateDevolatilisation.C
index cb2785d175..304bd6897c 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/ConstantRateDevolatilisation/ConstantRateDevolatilisation.C
+++ b/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/ConstantRateDevolatilisation/ConstantRateDevolatilisation.C
@@ -60,13 +60,6 @@ bool Foam::ConstantRateDevolatilisation::active() const
}
-template
-bool Foam::ConstantRateDevolatilisation::changesVolume() const
-{
- return false;
-}
-
-
template
Foam::scalar Foam::ConstantRateDevolatilisation::calculate
(
diff --git a/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/ConstantRateDevolatilisation/ConstantRateDevolatilisation.H b/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/ConstantRateDevolatilisation/ConstantRateDevolatilisation.H
index 14e7262169..094859cbec 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/ConstantRateDevolatilisation/ConstantRateDevolatilisation.H
+++ b/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/ConstantRateDevolatilisation/ConstantRateDevolatilisation.H
@@ -89,9 +89,6 @@ public:
//- Flag to indicate whether model activates mass transfer model
bool active() const;
- //- Flag to indicate whether model changes particle volume
- bool changesVolume() const;
-
//- Update model
scalar calculate
(
diff --git a/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/MassTransferModel/MassTransferModel.H b/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/MassTransferModel/MassTransferModel.H
index 7b16d3dc35..2c5b5159cf 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/MassTransferModel/MassTransferModel.H
+++ b/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/MassTransferModel/MassTransferModel.H
@@ -130,9 +130,6 @@ public:
//- Flag to indicate whether model activates mass transfer model
virtual bool active() const = 0;
- //- Flag to indicate whether model changes particle volume
- virtual bool changesVolume() const = 0;
-
//- Update model
virtual scalar calculate
(
diff --git a/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/NoMassTransfer/NoMassTransfer.C b/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/NoMassTransfer/NoMassTransfer.C
index 5b21a77250..38cb63ff38 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/NoMassTransfer/NoMassTransfer.C
+++ b/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/NoMassTransfer/NoMassTransfer.C
@@ -55,13 +55,6 @@ bool Foam::NoMassTransfer::active() const
}
-template
-bool Foam::NoMassTransfer::changesVolume() const
-{
- return false;
-}
-
-
template
Foam::scalar Foam::NoMassTransfer::calculate
(
diff --git a/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/NoMassTransfer/NoMassTransfer.H b/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/NoMassTransfer/NoMassTransfer.H
index fb3e30fc61..9415db1dad 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/NoMassTransfer/NoMassTransfer.H
+++ b/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/NoMassTransfer/NoMassTransfer.H
@@ -75,9 +75,6 @@ public:
//- Flag to indicate whether model activates mass transfer model
bool active() const;
- //- Flag to indicate whether model changes particle volume
- bool changesVolume() const;
-
//- Update model
scalar calculate
(
diff --git a/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/SingleKineticRateDevolatilisation/SingleKineticRateDevolatilisation.C b/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/SingleKineticRateDevolatilisation/SingleKineticRateDevolatilisation.C
index c8b5367d50..8cf111b816 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/SingleKineticRateDevolatilisation/SingleKineticRateDevolatilisation.C
+++ b/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/SingleKineticRateDevolatilisation/SingleKineticRateDevolatilisation.C
@@ -62,13 +62,6 @@ bool Foam::SingleKineticRateDevolatilisation::active() const
}
-template
-bool Foam::SingleKineticRateDevolatilisation::changesVolume() const
-{
- return false;
-}
-
-
template
Foam::scalar Foam::SingleKineticRateDevolatilisation::calculate
(
diff --git a/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/SingleKineticRateDevolatilisation/SingleKineticRateDevolatilisation.H b/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/SingleKineticRateDevolatilisation/SingleKineticRateDevolatilisation.H
index a2894e5ece..13d3d4825a 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/SingleKineticRateDevolatilisation/SingleKineticRateDevolatilisation.H
+++ b/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/SingleKineticRateDevolatilisation/SingleKineticRateDevolatilisation.H
@@ -91,9 +91,6 @@ public:
//- Flag to indicate whether model activates mass transfer model
bool active() const;
- //- Flag to indicate whether model changes particle volume
- bool changesVolume() const;
-
//- Update model
scalar calculate
(
diff --git a/src/lagrangian/intermediate/submodels/Reacting/SurfaceReactionModel/NoSurfaceReaction/NoSurfaceReaction.C b/src/lagrangian/intermediate/submodels/Reacting/SurfaceReactionModel/NoSurfaceReaction/NoSurfaceReaction.C
index 8ea8816f04..d164a500c2 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/SurfaceReactionModel/NoSurfaceReaction/NoSurfaceReaction.C
+++ b/src/lagrangian/intermediate/submodels/Reacting/SurfaceReactionModel/NoSurfaceReaction/NoSurfaceReaction.C
@@ -64,16 +64,20 @@ void Foam::NoSurfaceReaction::calculate
const scalar T0,
const scalar T1,
const scalar Tc,
+ const scalar pc,
const scalar rhoc,
const scalar massp,
+ const scalarList& dMassMT,
scalarField& YGas,
scalarField& YLiquid,
scalarField& YSolid,
scalarField& YMixture,
- scalar& dMassMTSR,
- scalarList& dMassSR
+ scalarList& dMassSR,
+ scalar& dhRet
) const
-{}
+{
+ // do nothing
+}
// ************************************************************************* //
diff --git a/src/lagrangian/intermediate/submodels/Reacting/SurfaceReactionModel/NoSurfaceReaction/NoSurfaceReaction.H b/src/lagrangian/intermediate/submodels/Reacting/SurfaceReactionModel/NoSurfaceReaction/NoSurfaceReaction.H
index f3072df598..8a58352b5d 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/SurfaceReactionModel/NoSurfaceReaction/NoSurfaceReaction.H
+++ b/src/lagrangian/intermediate/submodels/Reacting/SurfaceReactionModel/NoSurfaceReaction/NoSurfaceReaction.H
@@ -84,14 +84,16 @@ public:
const scalar T0,
const scalar T1,
const scalar Tc,
+ const scalar pc,
const scalar rhoc,
const scalar massp,
+ const scalarList& dMassMT,
scalarField& YGas,
scalarField& YLiquid,
scalarField& YSolid,
scalarField& YMixture,
- scalar& dMassMTSR,
- scalarList& dMassSR
+ scalarList& dMassSR,
+ scalar& dhRet
) const;
};
diff --git a/src/lagrangian/intermediate/submodels/Reacting/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.H b/src/lagrangian/intermediate/submodels/Reacting/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.H
index b50b5a90b4..a3b3e4e00f 100644
--- a/src/lagrangian/intermediate/submodels/Reacting/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.H
+++ b/src/lagrangian/intermediate/submodels/Reacting/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.H
@@ -141,14 +141,16 @@ public:
const scalar T0,
const scalar T1,
const scalar Tc,
+ const scalar pc,
const scalar rhoc,
const scalar massp,
+ const scalarList& dMassMT,
scalarField& YGas,
scalarField& YLiquid,
scalarField& YSolid,
scalarField& YMixture,
- scalar& dMassMTSR,
- scalarList& dMassSR
+ scalarList& dMassSR,
+ scalar& dhRet
) const = 0;
};
diff --git a/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/NoHeatTransfer/NoHeatTransfer.C b/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/NoHeatTransfer/NoHeatTransfer.C
index edeb799fc0..92ddbd7663 100644
--- a/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/NoHeatTransfer/NoHeatTransfer.C
+++ b/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/NoHeatTransfer/NoHeatTransfer.C
@@ -62,11 +62,6 @@ Foam::scalar Foam::NoHeatTransfer::Nu
const scalar
) const
{
- notImplemented
- (
- "Foam::scalar Foam::NoHeatTransfer::Nu"
- "(const scalar, const scalar)"
- );
return 0.0;
}
@@ -74,8 +69,7 @@ Foam::scalar Foam::NoHeatTransfer::Nu
template
Foam::scalar Foam::NoHeatTransfer::Pr() const
{
- notImplemented("Foam::scalar Foam::NoHeatTransfer::Pr()");
- return 0.0;
+ return 1.0;
}