/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ 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 3 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, see . \*---------------------------------------------------------------------------*/ #include "phaseModel.H" #include "twoPhaseSystem.H" #include "diameterModel.H" #include "fvMatrix.H" #include "PhaseIncompressibleTurbulenceModel.H" #include "dragModel.H" #include "heatTransferModel.H" #include "fixedValueFvPatchFields.H" #include "slipFvPatchFields.H" #include "partialSlipFvPatchFields.H" #include "surfaceInterpolate.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::phaseModel::phaseModel ( const twoPhaseSystem& fluid, const dictionary& phaseProperties, const word& phaseName ) : volScalarField ( IOobject ( IOobject::groupName("alpha", phaseName), fluid.mesh().time().timeName(), fluid.mesh(), IOobject::READ_IF_PRESENT, IOobject::AUTO_WRITE ), fluid.mesh(), dimensionedScalar("alpha", dimless, 0) ), fluid_(fluid), name_(phaseName), phaseDict_ ( phaseProperties.subDict(name_) ), thermo_(rhoThermo::New(fluid.mesh(), name_)), U_ ( IOobject ( IOobject::groupName("U", name_), fluid.mesh().time().timeName(), fluid.mesh(), IOobject::MUST_READ, IOobject::AUTO_WRITE ), fluid.mesh() ), phiAlpha_ ( IOobject ( IOobject::groupName("alphaPhi", name_), fluid.mesh().time().timeName(), fluid.mesh() ), fluid.mesh(), dimensionedScalar("0", dimensionSet(0, 3, -1, 0, 0), 0) ) { thermo_->validate("phaseModel " + name_, "h", "e"); const word phiName = IOobject::groupName("phi", name_); IOobject phiHeader ( phiName, fluid_.mesh().time().timeName(), fluid_.mesh(), IOobject::NO_READ ); if (phiHeader.headerOk()) { Info<< "Reading face flux field " << phiName << endl; phiPtr_.reset ( new surfaceScalarField ( IOobject ( phiName, fluid_.mesh().time().timeName(), fluid_.mesh(), IOobject::MUST_READ, IOobject::AUTO_WRITE ), fluid_.mesh() ) ); } else { Info<< "Calculating face flux field " << phiName << endl; wordList phiTypes ( U_.boundaryField().size(), calculatedFvPatchScalarField::typeName ); forAll(U_.boundaryField(), i) { if ( isA(U_.boundaryField()[i]) || isA(U_.boundaryField()[i]) || isA(U_.boundaryField()[i]) ) { phiTypes[i] = fixedValueFvPatchScalarField::typeName; } } phiPtr_.reset ( new surfaceScalarField ( IOobject ( phiName, fluid_.mesh().time().timeName(), fluid_.mesh(), IOobject::NO_READ, IOobject::AUTO_WRITE ), fvc::interpolate(U_) & fluid_.mesh().Sf(), phiTypes ) ); } dPtr_ = diameterModel::New ( phaseDict_, *this ); turbulence_ = PhaseIncompressibleTurbulenceModel::New ( *this, U_, phiAlpha_, phi(), *this ); } // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // Foam::phaseModel::~phaseModel() {} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // const Foam::phaseModel& Foam::phaseModel::otherPhase() const { return fluid_.otherPhase(*this); } Foam::tmp Foam::phaseModel::d() const { return dPtr_().d(); } Foam::PhaseIncompressibleTurbulenceModel& Foam::phaseModel::turbulence() { return turbulence_(); } const Foam::PhaseIncompressibleTurbulenceModel& Foam::phaseModel::turbulence() const { return turbulence_(); } void Foam::phaseModel::correct() { return dPtr_->correct(); } bool Foam::phaseModel::read(const dictionary& phaseProperties) { phaseDict_ = phaseProperties.subDict(name_); return dPtr_->read(phaseDict_); } // ************************************************************************* //