OFtutorial1.C
源码解析
#include "fvCFD.H"int main(int argc, char *argv[])
{// Initialise OF case#include "setRootCase.H"// These two create the time system (instance called runTime) and fvMesh (instance called mesh).#include "createTime.H"<details>#include "createMesh.H"// ---// Get access to a custom dictionarydictionary customDict;const word dictName("customProperties");#定义一个word对象dictName,用来存放customProperties文件名称// Create and input-output object - this holds the path to the dict and its nameIOobject dictIO(dictName, // name of the filemesh.time().constant(), // path to where the file ismesh, // reference to the mesh needed by the constructorIOobject::MUST_READ // indicate that reading this dictionary is compulsory);// Check the if the dictionary is present and follows the OF formatif (!dictIO.typeHeaderOk<dictionary>(true))FatalErrorIn(args.executable()) << "Cannot open specified refinement dictionary "<< dictName << exit(FatalError);// Initialise the dictionary objectcustomDict = IOdictionary(dictIO);// ---// Read various pieces of information from the main part of the dictionary// Lookup which does not need to be told what type of variable we're looking for and// uses the standard C++ stringstream syntaxword someWord;customDict.lookup("someWord") >> someWord;// This template method needs to know the type of the variable and can provide// a default value if the entry is not found in the dictionaryscalar someScalar( customDict.lookupOrDefault<scalar>("someScalar", 1.0) );#定义一个scalar类对象someScalar, 这个字典对象customDict的lookup函数找到这个对象customDict的关键词"someScalar"的值,然后放入someScalar中去。如果没有,默认为1.// A switch is a neat feature allowing boolean values to be read from a dict,// it supports the OpenFOAM yes/on/true/1 and no/off/false/0 values automatically.bool someBool ( customDict.lookupOrDefault<Switch>("someBool",true) );#定义一个bool类对象someBool,这个对象someBool通过字典对象customDict的lookup函数找到这个对象customDict的关键词" someBool "的值,然后放入someBool中去。// Lists of values may also be read in the same wayList<scalar> someList ( customDict.lookup("someList") );// This type of container is particularly interesting - it associates entries with// given key values (here of word type but can be anything); useful when// associating things by indices in a list is less handyHashTable<vector,word> someHashTable ( customDict.lookup("someHashTable") );// Summarise what's been read and print in the consoleInfo << nl << "Read the following:" << nl << nl<< "someWord " << someWord << nl << nl<< "someScalar " << someScalar << nl << nl<< "someList " << someList << nl << nl<< "someHashTable " << someHashTable << nl << nl<< "someBool " << someBool << nl << nl<< endl;// ---// Create a custom directory and write an output file// Create the output path directoryfileName outputDir = mesh.time().path()/"postProcessing";// Creathe the directorymkDir(outputDir);// File pointer to direct the output toautoPtr<OFstream> outputFilePtr;// Open the file in the newly created directoryoutputFilePtr.reset(new OFstream(outputDir/"customOutputFile.dat"));// Write stuffoutputFilePtr() << "# This is a header" << endl;outputFilePtr() << "0 1 2 3 4 5" << endl;// Append to the imported hash table and wirte it toosomeHashTable.insert("newKey", vector(1., 0., 0.));outputFilePtr() << someHashTable << endl;Info<< "End\n" << endl;return 0;
}
小结
该求解器读取customProperties文件中的内容并将需要的内容输出到customOutputFile.dat中
Make、Allwclean、Allwmake
这三个文件(目录)与上期OFtutorial00_helloWorld解析类似,此处不做赘述
testcase
组成如图所示
与OFtutorial00相同,没有调用system、constant(除customProperties外)中的文件,其内容可以忽略