/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011 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 "TimeActivatedExplicitSource.H" #include "fvMesh.H" #include "volFields.H" // * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * * // template const Foam::wordList Foam::TimeActivatedExplicitSource:: selectionModeTypeNames_ ( IStringStream("(points cellSet cellZone all)")() ); template const Foam::wordList Foam::TimeActivatedExplicitSource:: volumeModeTypeNames_ ( IStringStream("(absolute specific)")() ); // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // template typename Foam::TimeActivatedExplicitSource::selectionModeType Foam::TimeActivatedExplicitSource::wordToSelectionModeType ( const word& smtName ) const { forAll(selectionModeTypeNames_, i) { if (smtName == selectionModeTypeNames_[i]) { return selectionModeType(i); } } FatalErrorIn ( "TimeActivatedExplicitSource::selectionModeType" "TimeActivatedExplicitSource::wordToSelectionModeType" "(" "const word&" ")" ) << "Unknown selectionMode type " << smtName << ". Valid selectionMode types are:" << nl << selectionModeTypeNames_ << exit(FatalError); return selectionModeType(0); } template typename Foam::TimeActivatedExplicitSource::volumeModeType Foam::TimeActivatedExplicitSource::wordToVolumeModeType ( const word& vmtName ) const { forAll(volumeModeTypeNames_, i) { if (vmtName == volumeModeTypeNames_[i]) { return volumeModeType(i); } } FatalErrorIn ( "TimeActivatedExplicitSource::volumeModeType" "TimeActivatedExplicitSource::wordToVolumeModeType(const word&)" ) << "Unknown volumeMode type " << vmtName << ". Valid volumeMode types are:" << nl << volumeModeTypeNames_ << exit(FatalError); return volumeModeType(0); } template Foam::word Foam::TimeActivatedExplicitSource::selectionModeTypeToWord ( const selectionModeType& smtType ) const { if (smtType > selectionModeTypeNames_.size()) { return "UNKNOWN"; } else { return selectionModeTypeNames_[smtType]; } } template Foam::word Foam::TimeActivatedExplicitSource::volumeModeTypeToWord ( const volumeModeType& vmtType ) const { if (vmtType > volumeModeTypeNames_.size()) { return "UNKNOWN"; } else { return volumeModeTypeNames_[vmtType]; } } template void Foam::TimeActivatedExplicitSource::setSelection ( const dictionary& dict ) { switch (selectionMode_) { case smPoints: { dict.lookup("points") >> points_; break; } case smCellSet: { dict.lookup("cellSet") >> cellSetName_; break; } case smCellZone: { dict.lookup("cellZone") >> cellSetName_; break; } case smAll: { break; } default: { FatalErrorIn ( "TimeActivatedExplicitSource::setSelection(const dictionary&)" ) << "Unknown selectionMode " << selectionModeTypeNames_[selectionMode_] << ". Valid selectionMode types are" << selectionModeTypeNames_ << exit(FatalError); } } } template void Foam::TimeActivatedExplicitSource::setFieldData ( const dictionary& dict, const wordList& fieldNames ) { dict.lookup("fieldData") >> fieldData_; labelList localFieldIds(fieldData_.size(), -1); forAll(fieldNames, i) { forAll(fieldData_, j) { const word& fdName = fieldData_[j].first(); if (fdName == fieldNames[i]) { fieldIds_[i] = j; localFieldIds[j] = i; break; } } } forAll(localFieldIds, i) { if (localFieldIds[i] < 0) { FatalErrorIn ( "TimeActivatedExplicitSource::setFieldData" "(" "const dictionary&, " "const wordList&" ")" ) << "Field " << fieldData_[i].first() << " not found in " << "field list. Available fields are: " << nl << fieldNames << exit(FatalError); } } } template void Foam::TimeActivatedExplicitSource::setCellSet() { Info<< incrIndent << indent << "Source: " << name_ << endl; switch (selectionMode_) { case smPoints: { Info<< indent << "- selecting cells using points" << endl; labelHashSet selectedCells; forAll(points_, i) { label cellI = mesh_.findCell ( points_[i], polyMesh::FACEDIAGTETS ); if (cellI >= 0) { selectedCells.insert(cellI); } label globalCellI = returnReduce(cellI, maxOp