diff --git a/src/functionObjects/field/comfort/comfort.C b/src/functionObjects/field/comfort/comfort.C index 5aad71231c..be894e6ed2 100644 --- a/src/functionObjects/field/comfort/comfort.C +++ b/src/functionObjects/field/comfort/comfort.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2019 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2019-2021 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -407,7 +407,7 @@ bool Foam::functionObjects::comfort::execute() Info<< "Calculating the predicted percentage of dissatisfaction (PPD)\n"; - // Equation (5) in EN ISO + // Equation (5) tmp PPD ( volScalarField::New @@ -417,13 +417,68 @@ bool Foam::functionObjects::comfort::execute() ) ); - return store(PMV) && store(PPD); + Info<< "Calculating the draught rating (DR)\n"; + + const dimensionedScalar Umin("Umin", dimVelocity, 0.05); + const dimensionedScalar Umax("Umax", dimVelocity, 0.5); + const dimensionedScalar pre("preU", dimless, 0.37); + const dimensionedScalar C1("C1", dimVelocity, 3.14); + + // Limit the velocity field to the values given in EN ISO 7733 + volScalarField Umag = mag(lookupObject("U")); + Umag.maxMin(Umin, Umax); + + // Calculate the turbulent intensity if turbulent kinetic energy field k + // exists + volScalarField TI + ( + IOobject + ( + "TI", + mesh_.time().timeName(), + mesh_ + ), + mesh_, + dimensionedScalar(dimensionSet(0, 0, 0, 0, 0, 0, 0), 0) + ); + + if (foundObject("k")) + { + const volScalarField& k = lookupObject("k"); + TI = sqrt(2/3*k)/Umag; + } + + // For unit correctness + const dimensionedScalar correctUnit + ( + "correctUnit", + dimensionSet(0,- 1.62, 1.62, -1, 0, 0, 0), + 1 + ); + + // Equation (6) + tmp DR + ( + volScalarField::New + ( + "DR", + correctUnit*(factor12 - T)*pow(Umag - Umin, 0.62)*(pre*Umag*TI + C1) + ) + ); + + return + store(PMV) + && store(PPD) + && store(DR); } bool Foam::functionObjects::comfort::write() { - return writeObject("PMV") && writeObject("PPD"); + return + writeObject("PMV") + && writeObject("PPD") + && writeObject("DR"); } diff --git a/src/functionObjects/field/comfort/comfort.H b/src/functionObjects/field/comfort/comfort.H index c0d3803256..a1839ffdf1 100644 --- a/src/functionObjects/field/comfort/comfort.H +++ b/src/functionObjects/field/comfort/comfort.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2019-2020 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2019-2021 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,8 +25,14 @@ Class Foam::functionObjects::comfort Description - Calculates the thermal comfort quantities predicted mean vote (PMV) and - predicted percentage of dissatisfaction (PPD) based on DIN ISO EN 7730:2005. + Calculates the thermal comfort quantities predicted mean vote (PMV), + predicted percentage of dissatisfaction (PPD) and the draught rate (DR) + based on DIN ISO EN 7730:2005. + + The draught rate is defined for velocities between 0 m/s and 0.5 m/s. Values + larger than 0.5 m/s will be set to 0.5 m/s. Furthermore, the draught rate is + defined between 20 degC and 26 degC. A temperature limitation is not + implemented. The draught rate is mainly used for HVAC analysis in rooms. Usage \table @@ -34,11 +40,11 @@ Usage clothing | The insulation value of the cloth | no | 0 metabolicRate | The metabolic rate | no | 0.8 extWork | The external work | no | 0 - Trad | Radiation temperature | no | -1 - relHumidity | Relative humidity of the air | no | 50 + Trad | Radiation temperature | no | 0 + relHumidity | Relative humidity of the air | no | 0.5 pSat | Saturation pressure of water | no | -1 - tolerance | Residual control for the cloth temperature | no | 1e-5 - maxClothIter | Maximum number of iterations | no | 0 + tolerance | Residual control for the cloth temperature | no | 1e-4 + maxClothIter | Maximum number of iterations | no | 100 meanVelocity | Use a constant mean velocity in the whole domain | no |\ false \endtable