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
.domain
s, 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.