diff --git a/src/lagrangian/intermediate/Make/files b/src/lagrangian/intermediate/Make/files index d29f2c32bfac3fc619e7cca8c2af55479ead6007..ab3933d123056df6031137fba97cb49f07253b93 100755 --- a/src/lagrangian/intermediate/Make/files +++ b/src/lagrangian/intermediate/Make/files @@ -48,4 +48,8 @@ submodels/addOns/radiation/scatter/cloudScatter/cloudScatter.C IntegrationScheme/makeIntegrationSchemes.C +/* Data entries */ +submodels/IO/DataEntry/makeDataEntries.C + + LIB = $(FOAM_LIBBIN)/liblagrangianIntermediate diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C index c68238a28f944681cda6add3c301578ce71d393c..1ddd9342751f06edb1f322a7a9eeb885428e1a13 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C @@ -437,7 +437,13 @@ void Foam::KinematicCloud<ParcelType>::inject ); // Velocity of parcels - vector pU = this->injection().velocity(iParcel, timeInj); + vector pU = this->injection().velocity + ( + iParcel, + timeInj, + this->meshInfo(), + rndGen_ + ); // Determine the injection cell label pCell = -1; @@ -496,8 +502,9 @@ void Foam::KinematicCloud<ParcelType>::postInjectCheck() { if (nParcelsAdded_) { - Pout<< "\n--> Cloud: " << this->name() << nl << - " Added " << nParcelsAdded_ << " new parcels" << nl << endl; + Pout<< "\n--> Cloud: " << this->name() << nl + << " Added " << nParcelsAdded_ + << " new parcels" << nl << endl; } // Reset parcel counters diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C index 5251907c13035264f0be18f6ce39aefa70ac4d79..e787c5f41b5fd3b60786dffdac5313aec40778fb 100644 --- a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C @@ -277,7 +277,12 @@ void Foam::ReactingCloud<ParcelType>::inject ); // Velocity of parcels - vector pU = this->injection().velocity(iParcel, timeInj); + vector pU = this->injection().velocity + ( + iParcel, + timeInj, + this->meshInfo() + ); // Determine the injection cell label pCell = -1; diff --git a/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelInjectionModels.C b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelInjectionModels.C index 7b72076611baaf8ad74f867e97754b6ffcdf3a65..ce0444a05c6ed5d67f0a399e092fcff595fb1374 100644 --- a/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelInjectionModels.C +++ b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelInjectionModels.C @@ -26,8 +26,9 @@ License #include "basicKinematicParcel.H" #include "KinematicCloud.H" -#include "ManualInjection.H" #include "NoInjection.H" +#include "ManualInjection.H" +#include "ConeInjection.H" namespace Foam { @@ -35,6 +36,12 @@ namespace Foam // Add instances of injection model to the table makeInjectionModelType + ( + NoInjection, + KinematicCloud, + basicKinematicParcel + ); + makeInjectionModelType ( ManualInjection, KinematicCloud, @@ -42,7 +49,7 @@ namespace Foam ); makeInjectionModelType ( - NoInjection, + ConeInjection, KinematicCloud, basicKinematicParcel ); diff --git a/src/lagrangian/intermediate/submodels/IO/DataEntry/Constant/Constant.C b/src/lagrangian/intermediate/submodels/IO/DataEntry/Constant/Constant.C new file mode 100644 index 0000000000000000000000000000000000000000..9b896215ef0b75481dada33e344d500b07856571 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/IO/DataEntry/Constant/Constant.C @@ -0,0 +1,90 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2007 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 "Constant.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class Type> +Foam::Constant<Type>::Constant +( + const word& entryName, + const dictionary& dict +) +: + DataEntry<Type>(typeName, entryName, dict), + value_(this->dict_.lookup("value")) +{} + + +template<> +Foam::Constant<Foam::label>::Constant +( + const word& entryName, + const dictionary& dict +) +: + DataEntry<label>(typeName, entryName, dict), + value_(readLabel(this->dict_.lookup("value"))) +{} + + +template<> +Foam::Constant<Foam::scalar>::Constant +( + const word& entryName, + const dictionary& dict +) +: + DataEntry<scalar>(typeName, entryName, dict), + value_(readScalar(this->dict_.lookup("value"))) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template<class Type> +Foam::Constant<Type>::~Constant() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class Type> +Type Foam::Constant<Type>::value(const scalar x) const +{ + return value_; +} + + +template<class Type> +Type Foam::Constant<Type>::integrate(const scalar x1, const scalar x2) const +{ + return (x2 - x1)*value_; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/IO/DataEntry/Constant/Constant.H b/src/lagrangian/intermediate/submodels/IO/DataEntry/Constant/Constant.H new file mode 100644 index 0000000000000000000000000000000000000000..ee8c0757528bdd1566773ab49445df6e3132b85a --- /dev/null +++ b/src/lagrangian/intermediate/submodels/IO/DataEntry/Constant/Constant.H @@ -0,0 +1,129 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2007 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::Constant + +Description + Templated basic entry that holds a constant value. + + @verbatim + entry Constant + entryCoeffs + { + value 100.0; // Constant value + } + @endverbatim + +SourceFiles + Constant.C + +\*---------------------------------------------------------------------------*/ + +#ifndef Constant_H +#define Constant_H + +#include "DataEntry.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class Constant Declaration +\*---------------------------------------------------------------------------*/ + +template<class Type> +class Constant +: + public DataEntry<Type> +{ + // Private data + + Type value_; + + + // Private Member Functions + + //- Disallow default bitwise copy construct + Constant(const Constant<Type>&); + + //- Disallow default bitwise assignment + void operator=(const Constant<Type>&); + + +public: + + // Runtime type information + TypeName("Constant"); + + + // Constructors + + //- Construct from dictionary + Constant + ( + const word& entryName, + const dictionary& dict + ); + + + //- Destructor + + ~Constant(); + + + // Member Functions + + //- Return constant value + Type value(const scalar) const; + + //- Integrate between two values + Type integrate(const scalar x1, const scalar x2) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +template<> +Constant<label>::Constant(const word& entryName, const dictionary& dict); + +template<> +Constant<scalar>::Constant(const word& entryName, const dictionary& dict); + + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "Constant.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/IO/DataEntry/DataEntry/DataEntry.C b/src/lagrangian/intermediate/submodels/IO/DataEntry/DataEntry/DataEntry.C new file mode 100644 index 0000000000000000000000000000000000000000..7d189f2d84c9d6d9df8eefd72a45bed707ff72e9 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/IO/DataEntry/DataEntry/DataEntry.C @@ -0,0 +1,60 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2007 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 "DataEntry.H" + +// * * * * * * * * * * * * * * * * Constructor * * * * * * * * * * * * * * * // + +template<class Type> +Foam::DataEntry<Type>::DataEntry +( + const word& typeName, + const word& entryName, + const dictionary& dict +) +: + dict_(dict.subDict(entryName + "Coeffs")), + entry_(entryName) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template<class Type> +Foam::DataEntry<Type>::~DataEntry() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class Type> +const Foam::dictionary& Foam::DataEntry<Type>::dict() const +{ + return dict_; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/IO/DataEntry/DataEntry/DataEntry.H b/src/lagrangian/intermediate/submodels/IO/DataEntry/DataEntry/DataEntry.H new file mode 100644 index 0000000000000000000000000000000000000000..ec9aee03e18e1da5159a8d35c718cbcac0351a03 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/IO/DataEntry/DataEntry/DataEntry.H @@ -0,0 +1,167 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2007 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::DataEntry + +Description + +SourceFiles + DataEntry.C + NewDataEntry.C + +\*---------------------------------------------------------------------------*/ + +#ifndef DataEntry_H +#define DataEntry_H + +#include "dictionary.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class DataEntry Declaration +\*---------------------------------------------------------------------------*/ + +template<class Type> +class DataEntry +{ + // Private Member Functions + + //- Disallow default bitwise copy construct + DataEntry(const DataEntry<Type>&); + + //- Disallow default bitwise assignment + void operator=(const DataEntry<Type>&); + + +protected: + + // Protected data + + //- Coefficients dictionary + const dictionary dict_; + + //- Name of entry + const word entry_; + + +public: + + //- Runtime type information + TypeName("DataEntry") + + //- Declare runtime constructor selection table + declareRunTimeSelectionTable + ( + autoPtr, + DataEntry, + dictionary, + ( + const word& entryName, + const dictionary& dict + ), + (entryName, dict) + ); + + + // Constructor + + //- Construct from type name and dictionary + DataEntry + ( + const word& TypeName, + const word& entryName, + const dictionary& dict + ); + + + //- Selector + static autoPtr<DataEntry<Type> > New + ( + const word& entryName, + const dictionary& dict + ); + + + //- Destructor + + virtual ~DataEntry(); + + + // Member Functions + + // Access + + //- Return the dictionary + const dictionary& dict() const; + + //- Return value as a function of (scalar) independent variable + virtual Type value(const scalar x) const = 0; + + //- Integrate between two (scalar) values + virtual Type integrate(const scalar x1, const scalar x2) const = 0; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define makeDataEntry(Type) \ + \ + defineNamedTemplateTypeNameAndDebug(DataEntry<Type>, 0); \ + \ + defineTemplateRunTimeSelectionTable \ + ( \ + DataEntry<Type>, \ + dictionary \ + ); + + +#define makeDataEntryType(SS, Type) \ + \ + defineNamedTemplateTypeNameAndDebug(SS<Type>, 0); \ + \ + DataEntry<Type>::adddictionaryConstructorToTable<SS<Type> > \ + add##SS##Type##ConstructorToTable_; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "DataEntry.C" +# include "NewDataEntry.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/IO/DataEntry/DataEntry/NewDataEntry.C b/src/lagrangian/intermediate/submodels/IO/DataEntry/DataEntry/NewDataEntry.C new file mode 100644 index 0000000000000000000000000000000000000000..fccb831b1433eb86bcd9c59f781bd3d48ef9f928 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/IO/DataEntry/DataEntry/NewDataEntry.C @@ -0,0 +1,62 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2007 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 "DataEntry.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +template<class Type> +Foam::autoPtr<Foam::DataEntry<Type> > Foam::DataEntry<Type>::New +( + const word& entryName, + const dictionary& dict +) +{ + word DataEntryType(dict.lookup(entryName)); + + // Info<< "Selecting DataEntry " << DataEntryType << endl; + + typename dictionaryConstructorTable::iterator cstrIter = + dictionaryConstructorTablePtr_->find(DataEntryType); + + if (cstrIter == dictionaryConstructorTablePtr_->end()) + { + FatalErrorIn + ( + "DataEntry<Type>::New(const dictionary&" + ) << "Unknown DataEntry type " + << DataEntryType << " for " << entryName + << ", constructor not in hash table" << nl << nl + << " Valid DataEntry types are :" << nl + << dictionaryConstructorTablePtr_->toc() << nl + << exit(FatalError); + } + + return autoPtr<DataEntry<Type> >(cstrIter()(entryName, dict)); +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/IO/DataEntry/Table/Table.C b/src/lagrangian/intermediate/submodels/IO/DataEntry/Table/Table.C new file mode 100644 index 0000000000000000000000000000000000000000..507d0b154bcf71cf72c785f31298995a54ddfcc1 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/IO/DataEntry/Table/Table.C @@ -0,0 +1,151 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2007 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 "Table.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class Type> +Foam::Table<Type>::Table +( + const word& entryName, + const dictionary& dict +) +: + DataEntry<Type>(typeName, entryName, dict), + table_(this->dict_.lookup("table")) +{ + if (!table_.size()) + { + FatalErrorIn + ( + "Foam::Table<Type>::Table" + "(" + "const word& entryName," + "const dictionary& dict" + ")" + ) << "Table is invalid (empty)" << nl + << exit(FatalError); + } + Info<< table_; +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template<class Type> +Foam::Table<Type>::~Table() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class Type> +Type Foam::Table<Type>::value(const scalar x) const +{ + // Return zero if out of bounds + if ((x > table_[table_.size()-1].first()) || (x < table_[0].first())) + { + return pTraits<Type>::zero; + } + + label i = 0; + while ((table_[i].first() < x) && (i < table_.size())) + { + i++; + } + + if (i == 0) + { + return table_[0].second(); + } + else if (i == table_.size() - 1) + { + return table_[i-1].second(); + } + else + { + return + (x - table_[i-1].first())/(table_[i].first() - table_[i-1].first()) + * (table_[i].second() - table_[i-1].second()) + + table_[i-1].second(); + } +} + + +template<class Type> +Type Foam::Table<Type>::integrate(const scalar x1, const scalar x2) const +{ + // Initialise return value + Type sum = pTraits<Type>::zero; + + // Return zero if out of bounds + if ((x1 > table_[table_.size()-1].first()) || (x2 < table_[0].first())) + { + return sum; + } + + // Find start index + label id1 = 0; + while ((table_[id1].first() < x1) && (id1 < table_.size())) + { + id1++; + } + + // Find end index + label id2 = table_.size() - 1; + while ((table_[id2].first() > x2) && (id2 >= 1)) + { + id2--; + } + + // Integrate table body + for (label i=id1; i<id2; i++) + { + sum += + (table_[i].second() + table_[i+1].second()) + * (table_[i+1].first() - table_[i].first()); + } + sum *= 0.5; + + // Add table ends + if (id1 > 0) + { + sum += 0.5 + * (value(x1) + table_[id1].second()) + * (table_[id1].first() - x1); + } + if (id2 < table_.size() - 1) + { + sum += 0.5 + * (table_[id2].second() + value(x2)) + * (x2 - table_[id2].first()); + } + + return sum; +} + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/IO/DataEntry/Table/Table.H b/src/lagrangian/intermediate/submodels/IO/DataEntry/Table/Table.H new file mode 100644 index 0000000000000000000000000000000000000000..a7edcce3cd0b7cf72564c421b3f540ede3896be3 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/IO/DataEntry/Table/Table.H @@ -0,0 +1,130 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2007 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::Table + +Description + Templated table container data entry. Items are stored in a list of + Tuple2's. First column is always stored as scalar entries. Data is read + in the form, e.g. for (scalar, vector): + + @verbatim + entry Table + entryCoeffs + { + table + ( + 0.0 (1 2 3) + 1.0 (4 5 6) + ) + } + @endverbatim + +SourceFiles + Table.C + +\*---------------------------------------------------------------------------*/ + +#ifndef Table_H +#define Table_H + +#include "DataEntry.H" +#include "Tuple2.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class Table Declaration +\*---------------------------------------------------------------------------*/ + +template<class Type> +class Table +: + public DataEntry<Type> +{ + // Private data + + //- Table data + List<Tuple2<scalar, Type> > table_; + + + // Private Member Functions + + //- Disallow default bitwise copy construct + Table(const Table<Type>&); + + //- Disallow default bitwise assignment + void operator=(const Table<Type>&); + + +public: + + // Runtime type information + TypeName("Table"); + + + // Constructors + + //- Construct from dictionary + Table + ( + const word& entryName, + const dictionary& dict + ); + + + //- Destructor + + ~Table(); + + + // Member Functions + + //- Return Table value + Type value(const scalar x) const; + + //- Integrate between two (scalar) values + Type integrate(const scalar x1, const scalar x2) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "Table.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/IO/DataEntry/makeDataEntries.C b/src/lagrangian/intermediate/submodels/IO/DataEntry/makeDataEntries.C new file mode 100644 index 0000000000000000000000000000000000000000..0035e1bf22409248162e357798a4fc96ded6841e --- /dev/null +++ b/src/lagrangian/intermediate/submodels/IO/DataEntry/makeDataEntries.C @@ -0,0 +1,51 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2007 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 "DataEntry.H" +#include "Constant.H" +#include "Table.H" + +#include "label.H" +#include "scalar.H" +#include "vector.H" + +namespace Foam +{ + makeDataEntry(label); + makeDataEntryType(Constant, label); + makeDataEntryType(Table, label); + + makeDataEntry(scalar); + makeDataEntryType(Constant, scalar); + makeDataEntryType(Table, scalar); + + makeDataEntry(vector); + makeDataEntryType(Constant, vector); + makeDataEntryType(Table, vector); +}; + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.C new file mode 100644 index 0000000000000000000000000000000000000000..ff7c81eff7e1652fd0ba01eea1c1f9044740f09d --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.C @@ -0,0 +1,270 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2007 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 "ConeInjection.H" +#include "DataEntry.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::ConeInjection<CloudType>::ConeInjection +( + const dictionary& dict, + CloudType& owner +) +: + InjectionModel<CloudType>(dict, owner), + coeffDict_(dict.subDict(typeName + "Coeffs")), + SOI_(readScalar(coeffDict_.lookup("SOI"))), + duration_(readScalar(coeffDict_.lookup("duration"))), + position_(coeffDict_.lookup("position")), + direction_(coeffDict_.lookup("direction")), + parcelsPerSecond_(readScalar(coeffDict_.lookup("parcelsPerSecond"))), + volumeFlowRate_ + ( + DataEntry<scalar>::New + ( + "volumeFlowRate", + coeffDict_ + ) + ), + Umag_ + ( + DataEntry<scalar>::New + ( + "Umag", + coeffDict_ + ) + ), + thetaInner_ + ( + DataEntry<scalar>::New + ( + "thetaInner", + coeffDict_ + ) + ), + thetaOuter_ + ( + DataEntry<scalar>::New + ( + "thetaOuter", + coeffDict_ + ) + ), + parcelPDF_ + ( + pdf::New + ( + coeffDict_.subDict("parcelPDF"), + owner.rndGen() + ) + ), + tanVec1_(vector::zero), + tanVec2_(vector::zero) +// nParticlesPerParcel_(0.0) +{ + // Normalise direction vector + direction_ /= mag(direction_); + + // Determine direction vectors tangential to direction + vector tangent = vector::zero; + scalar magTangent = 0.0; + + Random rnd(label(0)); + + while (magTangent < SMALL) + { + vector v = rnd.vector01(); + + tangent = v - (v & direction_)*direction_; + magTangent = mag(tangent); + } + + tanVec1_ = tangent/magTangent; + tanVec2_ = direction_^tanVec1_; + + Info<< "tanVec1_ = " << tanVec1_ << endl; + Info<< "tanVec2_ = " << tanVec2_ << endl; +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::ConeInjection<CloudType>::~ConeInjection() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class CloudType> +bool Foam::ConeInjection<CloudType>::active() const +{ + return true; +} + + +template<class CloudType> +Foam::scalar Foam::ConeInjection<CloudType>::timeStart() const +{ + return SOI_; +} + + +template<class CloudType> +Foam::scalar Foam::ConeInjection<CloudType>::timeEnd() const +{ + return SOI_ + duration_; +} + + +template<class CloudType> +Foam::vector Foam::ConeInjection<CloudType>::position +( + const label, + const scalar, + const polyMeshInfo& meshInfo, + Random& +) const +{ + vector pos = position_; + if (meshInfo.caseIs2d()) + { + if (meshInfo.caseIs2dWedge()) + { + pos.component(meshInfo.emptyComponent()) = 0.0; + } + else if (meshInfo.caseIs2dSlab()) + { + pos.component(meshInfo.emptyComponent()) = + meshInfo.centrePoint().component(meshInfo.emptyComponent()); + } + else + { + FatalErrorIn + ( + "Foam::vector Foam::ConeInjection<CloudType>::position" + ) << "Could not determine 2-D case geometry" << nl + << abort(FatalError); + } + } + + return pos; +} + + +template<class CloudType> +Foam::label Foam::ConeInjection<CloudType>::nParcelsToInject +( + const label, + const scalar time0, + const scalar time1 +) const +{ + scalar t0 = time0 - SOI_; + scalar t1 = time1 - SOI_; + + return round((t1 - t0)*parcelsPerSecond_); +} + + +template<class CloudType> +Foam::scalar Foam::ConeInjection<CloudType>::volume +( + const scalar time0, + const scalar time1, + const polyMeshInfo& +) const +{ + scalar t0 = time0 - SOI_; + scalar t1 = time1 - SOI_; + + return volumeFlowRate_().integrate(t0, t1); +} + + +template<class CloudType> +Foam::scalar Foam::ConeInjection<CloudType>::volumeFraction +( + const scalar time0, + const scalar time1 +) const +{ + scalar t0 = time0 - SOI_; + scalar t1 = time1 - SOI_; + + return + volumeFlowRate_().integrate(t0, t1) + /volumeFlowRate_().integrate(SOI_, SOI_ + duration_); +} + + +template<class CloudType> +Foam::scalar Foam::ConeInjection<CloudType>::d0 +( + const label, + const scalar +) const +{ + return parcelPDF_().sample(); +} + + +template<class CloudType> +Foam::vector Foam::ConeInjection<CloudType>::velocity +( + const label, + const scalar time, + const polyMeshInfo& meshInfo, + Random& rndGen +) const +{ + const scalar deg2Rad = mathematicalConstant::pi/180.0; + scalar t = time - SOI_; + scalar ti = thetaInner_().value(t); + scalar to = thetaOuter_().value(t); + scalar coneAngle = deg2Rad*(rndGen.scalar01()*(to - ti) + ti); + + scalar alpha = sin(coneAngle); + scalar dcorr = cos(coneAngle); + scalar beta = 2.0*mathematicalConstant::pi*rndGen.scalar01(); + + vector normal = alpha*(tanVec1_*cos(beta) + tanVec2_*sin(beta)); + vector dirVec = dcorr*direction_; + dirVec += normal; + if (meshInfo.caseIs2dSlab()) + { + dirVec.component(meshInfo.emptyComponent()) = 0.0; + } + + dirVec /= mag(dirVec); + + return Umag_().value(t)*dirVec; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.H new file mode 100644 index 0000000000000000000000000000000000000000..901d3880a6553c7d78ff27c58f6f0f156692e6af --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.H @@ -0,0 +1,205 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2007 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::ConeInjection + +Description + Cone injection + - User specifies + - time of start of injection + - total mass to inject + - injector position + - parcel velocity + - inner and outer cone angles + - Parcel diameters obtained by PDF model + +SourceFiles + ConeInjection.C + + ******************************************************************** + TODO: Need to include 'lost' parcels - i.e. if nParcels = 0 due to + rounding error, but volume to introduce is > 0 + ******************************************************************** +\*---------------------------------------------------------------------------*/ + +#ifndef ConeInjection_H +#define ConeInjection_H + +#include "InjectionModel.H" +#include "pdf.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +template<class Type> +class DataEntry; + +/*---------------------------------------------------------------------------*\ + Class ConeInjection Declaration +\*---------------------------------------------------------------------------*/ + +template<class CloudType> +class ConeInjection +: + public InjectionModel<CloudType> +{ + + // Private data + + //- Coefficients dictionary + dictionary coeffDict_; + + //- Start of injection [s] + const scalar SOI_; + + //- Injection duration [s] + const scalar duration_; + + //- Injector position [m] + const vector position_; + + //- Injector direction [] + vector direction_; + + //- Number of parcels to introduce per second [] + const label parcelsPerSecond_; + + //- Volume flow rate of parcels to introduce relative to SOI [m^3] + const autoPtr<DataEntry<scalar> > volumeFlowRate_; + + //- Parcel velocity magnitude relative to SOI [m/s] + const autoPtr<DataEntry<scalar> > Umag_; + + //- Inner cone angle relative to SOI [deg] + const autoPtr<DataEntry<scalar> > thetaInner_; + + //- Outer cone angle relative to SOI [deg] + const autoPtr<DataEntry<scalar> > thetaOuter_; + + //- Parcel size PDF to SOI model + const autoPtr<pdf> parcelPDF_; + + //- Number of particles represented by each parcel +// scalar nParticlesPerParcel_; + + + // Tangential vectors to the direction vector + + //- First tangential vector + vector tanVec1_; + + //- Second tangential vector + vector tanVec2_; + +public: + + //- Runtime type information + TypeName("ConeInjection"); + + + // Constructors + + //- Construct from dictionary + ConeInjection + ( + const dictionary& dict, + CloudType& owner + ); + + + // Destructor + + ~ConeInjection(); + + + // Member Functions + + bool active() const; + + scalar timeStart() const; + + scalar timeEnd() const; + + vector position + ( + const label iParcel, + const scalar time, + const polyMeshInfo& meshInfo, + Random& + ) const; + + label nParcelsToInject + ( + const label, + const scalar time0, + const scalar time1 + ) const; + + scalar volume + ( + const scalar, + const scalar, + const polyMeshInfo& + ) const; + + scalar volumeFraction + ( + const scalar time0, + const scalar time1 + ) const; + + scalar d0 + ( + const label, + const scalar + ) const; + + vector velocity + ( + const label, + const scalar time, + const polyMeshInfo& meshInfo, + Random& rndGen + ) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "ConeInjection.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C index d2c26f96b273f10ed87683926d565278bce7ba25..6048db84bf44e1f40a5fea343f5f6ebb8eede7e3 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C @@ -35,8 +35,7 @@ Foam::InjectionModel<CloudType>::InjectionModel CloudType& owner ) : dict_(dict), - owner_(owner), - rndGen_(label(0)) + owner_(owner) {} @@ -63,13 +62,6 @@ const Foam::dictionary& Foam::InjectionModel<CloudType>::dict() const } -template<class CloudType> -Foam::Random& Foam::InjectionModel<CloudType>::rndGen() -{ - return rndGen_; -} - - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #include "NewInjectionModel.C" diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H index 2a7e8c4a0e5f7f096f92a9e7fa8f2caf0aed9e32..519e63127303d0c72d531f686379feb29efa5a6b 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H @@ -63,9 +63,6 @@ class InjectionModel // Reference to the owner cloud class CloudType& owner_; - //- Random number generator - Random rndGen_; - public: @@ -118,9 +115,6 @@ public: //- Return the dictionary const dictionary& dict() const; - //- Return reference to random number - inline Random& rndGen(); - // Member Functions @@ -176,7 +170,9 @@ public: virtual vector velocity ( const label iParcel, - const scalar time + const scalar time, + const polyMeshInfo& meshInfo, + Random& rndGen ) const = 0; }; diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.C index dc8541525b593e69099b4a736d1c053d3d2d6c28..ff8c864cb1bb2a19366396f11e7f2024556166a9 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.C @@ -129,8 +129,10 @@ Foam::vector Foam::ManualInjection<CloudType>::position } else { - FatalErrorIn("Foam::vector Foam::ManualInjection<CloudType>::position") - << "Could not determine 2-D case geometry" << nl + FatalErrorIn + ( + "Foam::vector Foam::ManualInjection<CloudType>::position" + ) << "Could not determine 2-D case geometry" << nl << abort(FatalError); } } @@ -205,10 +207,19 @@ template<class CloudType> Foam::vector Foam::ManualInjection<CloudType>::velocity ( const label, - const scalar + const scalar, + const polyMeshInfo& meshInfo, + Random& ) const { - return U0_; + vector vel = U0_; + if (meshInfo.caseIs2dSlab()) + { + vel.component(meshInfo.emptyComponent()) = + meshInfo.centrePoint().component(meshInfo.emptyComponent()); + } + + return vel; } diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.H index 77059c857027a6a69db1828b53c17fc3e9584456..05879a57a03a6a6593a122578e80a812bf60f2ad 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.H @@ -159,7 +159,9 @@ public: vector velocity ( const label, - const scalar + const scalar, + const polyMeshInfo& meshInfo, + Random& ) const; }; diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.C index 1815694c3f7b097930605548f2d1b7b0a9e262ee..9461d06b2d0894c5df48eaca1935c3fd51314670 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.C @@ -135,7 +135,9 @@ template<class CloudType> Foam::vector Foam::NoInjection<CloudType>::velocity ( const label, - const scalar + const scalar, + const polyMeshInfo&, + Random& ) const { return vector::zero; diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.H index 82028a10225cbb119829c01aa177b61c0afdd81d..e2571839cb6668c02897381a2777bfee702508a5 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.H @@ -119,7 +119,9 @@ public: vector velocity ( const label, - const scalar + const scalar, + const polyMeshInfo&, + Random& ) const; }; diff --git a/tutorials/rhoTurbTwinParcelFoam/simplifiedSiwek/constant/kinematicCloud1Properties b/tutorials/rhoTurbTwinParcelFoam/simplifiedSiwek/constant/kinematicCloud1Properties index 3d652853607546d2299e6b1cfbd0eedbb8094897..fbb8d703481ae2c1c066735cdeaee950bd16caa1 100644 --- a/tutorials/rhoTurbTwinParcelFoam/simplifiedSiwek/constant/kinematicCloud1Properties +++ b/tutorials/rhoTurbTwinParcelFoam/simplifiedSiwek/constant/kinematicCloud1Properties @@ -23,7 +23,7 @@ FoamFile // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // Particle sub-models -InjectionModel ManualInjection; +InjectionModel ConeInjection; DragModel SphereDrag; DispersionModel StochasticDispersionRAS; WallInteractionModel StandardWallInteraction; @@ -76,6 +76,46 @@ ManualInjectionCoeffs } } +ConeInjectionCoeffs +{ + SOI 0.001; + duration 0.005; + position (0.025 0.25 0.05); + direction (0 -1 0); + parcelsPerSecond 1000000; + volumeFlowRate Constant; + volumeFlowRateCoeffs + { + value 0.01; + } + Umag Constant; + UmagCoeffs + { + value 50.0; + } + thetaInner Constant; + thetaInnerCoeffs + { + value 0.0; + } + thetaOuter Constant; + thetaOuterCoeffs + { + value 30.0; + } + parcelPDF + { + pdfType RosinRammler; + RosinRammlerPDF + { + minValue 50.0e-06; + maxValue 100.0e-06; + d (75.0e-06); + n (0.5); + } + } +} + StandardWallInteractionCoeffs { e e [ 0 0 0 0 0] 1; diff --git a/tutorials/rhoTurbTwinParcelFoam/simplifiedSiwek/constant/polyMesh/blockMeshDict b/tutorials/rhoTurbTwinParcelFoam/simplifiedSiwek/constant/polyMesh/blockMeshDict index 26ea6f0982bf65f1dd8c723e8dfaa507bff37fdf..04869c9a1502e484abc466eab99799b5b367cc7f 100644 --- a/tutorials/rhoTurbTwinParcelFoam/simplifiedSiwek/constant/polyMesh/blockMeshDict +++ b/tutorials/rhoTurbTwinParcelFoam/simplifiedSiwek/constant/polyMesh/blockMeshDict @@ -57,11 +57,11 @@ edges patches ( - patch top + wall top ( (13 15 14 12) ) - patch bottom + wall bottom ( (0 1 5 4) (1 8 10 5)