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[]) { bool allow_userdefined_fields = false; argList::noParallel(); argList::validOptions.insert("rho", "value"); argList::validOptions.insert("allowuserdefinedfields", ""); #if defined EXPORT_CYCLIC_BOUNDARIES argList::validOptions.insert("exportcyclics", ""); #endif // argList::validOptions.insert("help", ""); #if 0 const word fieldTypes[] = { volScalarField::typeName, volVectorField::typeName }; #endif # include "addTimeOptions.H" # include "setRootCase.H" if(args.options().found("help")) { args.printUsage(); exit(0); } #if defined EXPORT_CYCLIC_BOUNDARIES bool exportcyclics = false; if(args.options().found("exportcyclics")) { exportcyclics=true; } #endif # include "createTime.H" # include "createMesh.H" // Dictionnary for foamToCGNS options #if 0 IOdictionary optionsDict ( IOobject( "foamToCGNSDict", mesh.time().constant(), mesh, IOobject::READ_IF_PRESENT, IOobject::NO_WRITE ) ); if ( optionsDict.headerOk() ) { if ( optionsDict.found("SplitMixedCellTypes") ) Info << "Options: Splitting multiple cell into different zones" << endl; if ( optionsDict.found("WriteConvergenceHistory") ) Info << "Options: Writing convergence history found in 'log' file" << endl; if ( optionsDict.found("ConversionPath") ) { const entry& e = optionsDict.lookupEntry( "ConversionPath" ); Info << "Options: Conversion Path is " << e << endl; } } #else foamToCGNSDictionary optionsDict ( IOobject( "foamToCGNSDict", mesh.time().constant(), mesh, IOobject::READ_IF_PRESENT, IOobject::NO_WRITE ) ); if ( optionsDict.headerOk() ) { Info << "foamToCGNSOptions: " << endl; Info << "\tSplitting multiple cell into different zones : " << optionsDict.splitMixed() << endl; Info << "\tWriting convergence history found in 'log' file : " << optionsDict.writeConvergenceHistory() << endl; Info << "\tConversion Path is " << optionsDict.conversionDirectory() << endl; Info << "\tAllow User Defined Fields is " << optionsDict.allowUserDefinedFields() << endl; } #endif if (args.options().found("allowuserdefinedfields") || optionsDict.allowUserDefinedFields() ) { allow_userdefined_fields = true; Info << "User defined fields are allowed" << endl; } // Construct interpolation on the raw mesh volPointInterpolation pInterp(mesh); fileName cgnsDataPath(runTime.path()/"ConversionCGNS"); mkDir(cgnsDataPath); // Get times list instantList Times = runTime.times(); // set startTime and endTime depending on -time and -latestTime options # include "checkTimeOptions.H" // Get a value for the density 'rho' for purpose pour la mise a l'echelle du champs de pression // // First default value: 1.0 // // Then, we check if rho is specified in the dictionary turboMathDict; if it is, we override the default value // // Finally, we allow the user to override the value of rho if the option -rho is provided on the commande line // or if the dictionnary is not present for this specific case. scalar rho_ = 1.0; // Default value; Info << "Default value for rho: " << rho_ << endl; #if 0 // Next we check for the dictionnary turboMathDict IOdictionary turboMathDict( IOobject ( "turboMathDict", mesh.time().constant(), mesh, IOobject::READ_IF_PRESENT, IOobject::NO_WRITE ) ); if(turboMathDict.headerOk()) { dimensionedScalar dimensionedRho(turboMathDict.lookup("rho")); // Read the density value from the turboDictionnary rho_ = dimensionedRho.value(); Info << "\nDictionary turboMathDict: new rho value : " << rho_ << endl; } else { Info << "Warning : no Dictionary turboMathDict" << endl; } #endif // Finally, we allow this ultimate override from the command line if(args.options().found("rho")) { rho_ = readScalar(IStringStream(args.options()["rho"])()); Info << "\nUser specified value for rho: new rho value : " << rho_ << endl; } Info << endl; // What kind of simulation is this? bool steadyState = false; #if defined CGNSTOFOAM_EXTRACT_FlowEquationSet word application( runTime.controlDict().lookup( "application" ) ); if ( application=="simpleFoam" ) { Info << "Solution computed with simpleFoam" << endl; word default_ddtScheme = mesh.ddtScheme("default"); Info << "\tddtScheme = " << default_ddtScheme << endl; steadyState = ( default_ddtScheme == "steadyState" ); // what is the turbulence model ? #include "incompressible/simpleFoam/createFields.H" } else if ( application=="icoFoam" ) { Info << "Solution computed with icoFoam" << endl; } else { Info << "Warning : unknown application : " << application << endl; Info << "Warning : will not include FlowEquationSet in the CGNS file" << endl; } #endif //CGNSTOFOAM_EXTRACT_FlowEquationSet #if 1 std::string logfilename = args.caseName() + "/log"; std::ifstream ifslog( logfilename.c_str() ); if ( !ifslog ) { Info << "Warning : log file not found. No convergence history will be included." << endl; } else { logFile logf( ifslog ); int nsteps = logf.getNSteps(); Info << nsteps << " Steps found in convergence history" << endl; } #endif #if 1 for (label i=startTime; i<endTime; i++) { runTime.setTime(Times[i], i); mesh.readUpdate(); IOobjectList objects(mesh, runTime.timeName()); Info << "----> Timestep: " << Times[i].name() << endl; #include "writeCGNS.H" // write a CGNS file for this time step Info << endl; } #endif Info << "Done" << endl; return 0; }