From 72c4b3186b1f204c937787a18d801a7043504762 Mon Sep 17 00:00:00 2001 From: Mark Olesen <Mark.Olesen@esi-group.com> Date: Tue, 20 Nov 2018 16:26:44 +0100 Subject: [PATCH] ENH: added dimensionedType::writeEntry method - writing of dictionary entry with the name of the dimensionedType suppressed if it is identical to the keyword. This corresponds to the input requirements. --- .../dimensionedType/Test-dimensionedType.C | 33 ++++++++++++++----- .../dimensionedType/dimensionedType.C | 26 +++++++++++++++ .../dimensionedType/dimensionedType.H | 5 +++ 3 files changed, 55 insertions(+), 9 deletions(-) diff --git a/applications/test/dimensionedType/Test-dimensionedType.C b/applications/test/dimensionedType/Test-dimensionedType.C index 892552fa708..04c7fda5328 100644 --- a/applications/test/dimensionedType/Test-dimensionedType.C +++ b/applications/test/dimensionedType/Test-dimensionedType.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2018 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -41,31 +41,38 @@ int main(int argc, char *argv[]) dimensionedTensor dt2("dt2", dimLength, tensor(1, 1, 2, 3, 4, 5, 6, 7, 8)); - Info<< "cmptMultiply(dt, dt2): " << cmptMultiply(dt, dt2) << endl; - Info<< "cmptDivide(dt, dt2): " << cmptDivide(dt, dt2) << endl; + Info<< nl + << "cmptMultiply(dt, dt2): " << cmptMultiply(dt, dt2) << nl + << "cmptDivide(dt, dt2): " << cmptDivide(dt, dt2) << endl; { - Pout<< "dimensionSet construct from is:" - << dimensionSet(IStringStream("[Pa m^2 s^-2]")()) + string dimString("[Pa m^2 s^-2]"); + IStringStream is("[Pa m^2 s^-2]"); + + Pout<< nl; + Pout<< "dimensionSet construct from (is) with contents " + << dimString << " = " << dimensionSet(is) << endl; - IStringStream is("[Pa m^2 s^-2]"); + is.rewind(); + dimensionSet dset(dimless); is >> dset; Pout<< "dimensionSet read:" << dset << endl; } { - Pout<< "construct from is:" + Pout<< nl + << "construct from (is) = " << dimensionedScalar(IStringStream("bla [Pa mm^2 s^-2] 3.0")()) << endl; - Pout<< "construct from name,is:" + Pout<< "construct from (name,is) = " << dimensionedScalar ( "ABC", IStringStream("[Pa mm^2 s^-2] 3.0")() ) << endl; - Pout<< "construct from name,dimensionSet,is:" + Pout<< "construct from (name,dims,is) = " << dimensionedScalar ( "ABC", @@ -77,6 +84,14 @@ int main(int argc, char *argv[]) dimensionedScalar ds; is >> ds; Pout<< "read:" << ds << endl; + + Info<< "writeEntry:" << nl; + + Info<< "abc> "; ds.writeEntry("abc", Info); + Info<< endl; + + Info<< "bla> "; ds.writeEntry("bla", Info); + Info<< endl; } } diff --git a/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.C b/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.C index 822113e3aa9..20de92e33ef 100644 --- a/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.C +++ b/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.C @@ -405,6 +405,32 @@ Foam::Istream& Foam::dimensioned<Type>::read } +template<class Type> +void Foam::dimensioned<Type>::writeEntry +( + const word& keyword, + Ostream& os +) const +{ + os.writeKeyword(keyword); + + if (keyword != name_) + { + // The name, only if different from keyword + os << name_ << token::SPACE; + } + + // The dimensions + scalar mult(1.0); + dimensions_.write(os, mult); + + // The value + os << token::SPACE << value_/mult << token::END_STATEMENT << endl; + + os.check(FUNCTION_NAME); +} + + // * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // template<class Type> diff --git a/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.H b/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.H index 0b84e6cc62b..472dbc71eef 100644 --- a/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.H +++ b/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.H @@ -248,6 +248,11 @@ public: //- using units from table Istream& read(Istream& is, const HashTable<dimensionedScalar>& readSet); + //- Write as a dictionary entry with keyword. + // The name is not written when it is identical to keyword. + // The dimensions are always written. + void writeEntry(const word& keyword, Ostream& os) const; + // Member Operators -- GitLab