|
ODT
|
Once downloaded, open the ODT folder. You will see the following set of directories:
build/ — Build filessource/ — ODT source codeinput/ — Input filesrun/ — ODT executables and runtime filesdata/ — Data produced by the ODT codepost/ — Data post-processing toolsdocs/ — Code documentationThe ODT code is structured with a collection of C++ classes.
domain.cc is the main class. It contains all the domain variables (cell positions, velocities, and all scalar profiles). It holds the Cantera objects, solver, eddy, mesh manager, odt case and other basic class objects.v to dv objects (domain variables). This is convenient for treating the collection. There are also explicit pointers to specific domain variable objects, so that these can be conveniently referenced by name. Because they are pointers, they may not all be instantiated though.domainPositionToIndex.domains, the main domain domn, and an eddy domain eddl, which holds fewer variables. The eddy domain object is only used for eddy events.domain objects domn and eddl are instantiated in main.cc, as are many other key classes, such as the solver, mesh manager, cantera objects, random generator.dv_uvw that inherit from a parent: dv.dv class holds the variable name, a vector of its data values on the domain, flags for whether it is transported or output in a data file, and vectors holding its source and transport terms in the case it is a transported quantity.dv_ygas class has nspc that holds the number of gas species (effectively the number of dv_ygas), along with a kMe index so that each dv_ygas object knows its place. This is useful for allowing the first dv_ygas object to set properties for all the others to avoid redundancy. For example, normally all reaction rates for species are computed at once, but that needs special treatment when each species is its own domain variable and computes its own source term.solver class organizes the eddy sampling and diffusive advancement progression.eddy class contains functions for performing triplet maps, eddy time scales, sampling eddy locations and sizes, and applying velocity kernels.micromixer class contains functions for performing the diffusive advancement. This includes the time (for temporal flows) or space (for spatial flows) integration of the governing PDEs, which is done using the method of domains with a finite volume scheme on an adaptive mesh. The micromixer calls the rate functions for all domain variable source and transport terms and performs explicit or semi-implicit time (or space) integration.meshManager class performs mesh adaption, as described in the theory paper below.streams class for defining mixing streams, and performing mixture fraction calculations, the radiation class, which contributes to the enthalpy source term for combustion simulations, the randomGenerator class, the processor class for handling parallel MPI details, and the inputoutput class for I/O.odtparam class holds most of the ODT parameters that are read from input files and used throughout the code.domaincases/ directory, for example domaincase_channel. They inherit from a parent domaincase.pos, posf, rho, dvisc, uvel, vvel, wvel, while others are more specific, such as chi, mixf, temp, hr.domn object, but defines functions like those that set the gas state, or set case specific variables, that are useful for the children. These make it very easy to have generic code that can support multiple cases with multiple domain variables. The defaults allow certain children, such as domaincase_channel to be fairly small. Other classes can specialize as needed.domaincase_* classes also are responsible for initializing the domain variable profiles prior to running. Each domain variable has its own defaults, but the specific case allows for, e.g., initializing a jet velocity profile. This can be done by adding parameters to the input.yaml file and reading those values in the given odt case file. As needed, supporting setup files could be used.