void getCellTable(const fvMesh & mesh) { cellTableMap_.clear(); cellTableId_.setSize(mesh.nCells(), 1); IOdictionary cellTableDict ( IOobject ( "cellTable", "constant", mesh, IOobject::READ_IF_PRESENT, IOobject::NO_WRITE, false ) ); volScalarField volField ( IOobject ( "cellTableId", mesh.time().timeName(), mesh, IOobject::READ_IF_PRESENT, IOobject::NO_WRITE, false ), mesh, dimensionedScalar("cellTableId", dimless, 1.0) ); // get cellTableId information from the volScalarField if possible if (volField.headerOk()) { const scalarField & field = volField.internalField(); forAll(field, cellI) { cellTableId_[cellI] = static_cast<int>(field[cellI]); } if (cellTableDict.headerOk()) { // convert dictionary to map wordList toc = cellTableDict.toc(); forAll(toc, i) { word keyword = toc[i]; if (!cellTableDict.isDict(keyword)) continue; const dictionary & dict = cellTableDict.subDict(keyword); if (dict.found("Id") && dict.found("MaterialType")) { label Id; dict["Id"] >> Id; dict["MaterialType"] >> keyword; if (keyword == "fluid") { cellTableMap_.insert(Id, 1); } else if (keyword == "solid") { cellTableMap_.insert(Id, 2); } } }
int main(int argc, char *argv[]) { # include "addTimeOptions.H" # include "setRootCase.H" # include "createTime.H" # include "createMesh.H" IOdictionary stlDefs ( IOobject ( "stlDefinitions", runTime.constant(), "triSurface", mesh, IOobject::MUST_READ, IOobject::NO_WRITE ) ); wordList toc = stlDefs.toc(); forAll (toc, item) { if (stlDefs.isDict(toc[item])) { Info << "\nCreates the STL surface for " << toc[item] << endl; pointField pp ( stlDefs.subDict(toc[item]).lookup("points") ); faceList faces( stlDefs.subDict(toc[item]).lookup("faces") ); triFaceList tfl(0); label count(0); if ( stlDefs.subDict(toc[item]) .lookupOrDefault<Switch>("extrude", false ) ) { if (faces.size() <= 1) { extrudeFacesAndPoints ( stlDefs.subDict(toc[item]), faces, pp ); } else { Info << "\nWARNING: Using extrude, but" << " multiple faces are defined\n" << endl; } } forAll (faces, facei) { faceTriangulation triangulation(pp, faces[facei], true ); tfl.setSize( count + triangulation.size() ); forAll (triangulation, triI) { tfl[count++] = triangulation[triI]; } } triSurface ts( tfl, pp ); Info << "Writes the STL surface for " << toc[item] << endl; ts.write( "constant/triSurface/"+toc[item]+".stl" ); }
int main(int argc, char *argv[]) { # include "setRootCase.H" # include "createTime.H" Info << "\nReading g" << endl; uniformDimensionedVectorField g ( IOobject ( "g", runTime.constant(), runTime, IOobject::MUST_READ, IOobject::NO_WRITE ) ); Info << "\nReading waveProperties\n" << endl; IOdictionary waveProperties ( IOobject ( "waveProperties.input", runTime.constant(), runTime, IOobject::MUST_READ, IOobject::NO_WRITE ) ); // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // IOobject wOut ( "waveProperties", runTime.constant(), runTime, IOobject::NO_READ, IOobject::NO_WRITE ); // Write waveProperties with the above computed changes OFstream os ( wOut.objectPath(), #if EXTBRANCH==1 ios_base::out|ios_base::trunc, #elif OFPLUSBRANCH==1 // Nothing to be put here #else #if OFVERSION<170 ios_base::out|ios_base::trunc, #endif #endif IOstream::ASCII, IOstream::currentVersion, IOstream::UNCOMPRESSED ); // Write the OF banner wOut.writeBanner( os ); // Write the file information. Class name is not correct when // using wOut.writeHeader( os ); hence manual entries os << "FoamFile" << nl; os << token::BEGIN_BLOCK << incrIndent << nl; os << indent << "version" << tab << IOstream::currentVersion << token::END_STATEMENT << nl; os << indent << "format" << tab << "ascii;" << nl; os << indent << "class" << tab << "dictionary;" << nl; os << indent << "object" << tab << "waveProperties;" << nl; os << decrIndent << indent << token::END_BLOCK << nl; // Write the divider wOut.writeDivider( os ); os << nl; /* Loop over all subdicts in waveProperties. For each of them compute the wave parameters relevant for that particular wave theory. */ wordList toc = waveProperties.toc(); forAll (toc, item) { // If a sub-dictionary, then compute parameters and write the subdict if (waveProperties.isDict(toc[item])) { dictionary& sd = waveProperties.subDict(toc[item]); autoPtr<setWaveProperties> props ( setWaveProperties::New(runTime, sd, true) ); props->set( os ); } else { label Nspaces = 20; // Read the entry and write to the dummy output file ITstream read = waveProperties.lookup(toc[item]); os << toc[item] << token::SPACE; for (int i=toc[item].size(); i<Nspaces-1; i++) { os << token::SPACE; } forAll (read, ri) { if (ri < read.size() - 1) { os << read[ri] << token::SPACE; } else { os << read[ri]; } } os << token::END_STATEMENT << nl << endl; // Additional level of check, such that the code does not crash at // runTime: if (toc[item] == "seaLevel") { // Read the magnitude of the sea level scalar sL = readScalar(waveProperties.lookup("seaLevel")); // If the Switch seaLevelAsReference is not found _and_ the // magnitude of the sea level differs from 0 (zero), stop the // evaluation of the wave parameters if ( !waveProperties.found("seaLevelAsReference") && SMALL < Foam::mag(sL) ) { // This merely looks up the string, it will not be found // and the user is forced to correct waveProperties.input, // before any execution is possible. waveProperties.lookup("seaLevelAsReference"); } } } } // Write end divider wOut.writeEndDivider(os); // End Info<< "\nEnd\n" << endl; return 0; }