(Beta Release) STDMD (i.e. Streaming Total Dynamic Mode Decomposition) is a variant of a data-driven dimensionality reduction method. More...
Public Member Functions | |
TypeName ("STDMD") | |
Runtime type information. More... | |
STDMD ()=delete | |
No default construct. More... | |
STDMD (const word &name, const Time &runTime, const dictionary &dict) | |
Construct from Time and dictionary. More... | |
STDMD (const STDMD &)=delete | |
No copy construct. More... | |
void | operator= (const STDMD &)=delete |
No copy assignment. More... | |
virtual | ~STDMD ()=default |
Destructor. More... | |
virtual bool | read (const dictionary &) |
Read STDMD settings. More... | |
virtual bool | execute () |
Execute STDMD. More... | |
virtual bool | write () |
Write STDMD output. More... | |
Public Member Functions inherited from fvMeshFunctionObject | |
TypeName ("fvMeshFunctionObject") | |
Runtime type information. More... | |
fvMeshFunctionObject (const word &name, const Time &runTime, const dictionary &dict) | |
Construct from Time and dictionary. More... | |
fvMeshFunctionObject (const word &name, const objectRegistry &obr, const dictionary &dict) | |
Construct from the region objectRegistry and dictionary. More... | |
virtual | ~fvMeshFunctionObject ()=default |
Destructor. More... | |
Public Member Functions inherited from regionFunctionObject | |
TypeName ("regionFunctionObject") | |
Runtime type information. More... | |
regionFunctionObject (const word &name, const Time &runTime, const dictionary &dict) | |
Construct from Time and dictionary. More... | |
regionFunctionObject (const word &name, const objectRegistry &obr, const dictionary &dict) | |
Construct from the region objectRegistry and dictionary. More... | |
virtual | ~regionFunctionObject ()=default |
Destructor. More... | |
template<class ObjectType > | |
const ObjectType * | lookupObjectPtr (const word &fieldName) const |
Deprecated(2018-10) More... | |
template<class ObjectType > | |
ObjectType * | lookupObjectRefPtr (const word &fieldName) const |
Deprecated(2018-10) More... | |
Public Member Functions inherited from stateFunctionObject | |
stateFunctionObject (const word &name, const Time &runTime) | |
Construct from components. More... | |
virtual | ~stateFunctionObject ()=default |
Destructor. More... | |
dictionary & | propertyDict () |
Return access to the property dictionary. More... | |
bool | foundProperty (const word &entryName) const |
Return true if the property exists. More... | |
label | getTrigger () const |
Get the current trigger index. More... | |
bool | setTrigger (const label triggeri) |
Set the current trigger index. More... | |
bool | getDict (const word &entryName, dictionary &dict) const |
Set dictionary, return true if set. More... | |
bool | getObjectDict (const word &objectName, const word &entryName, dictionary &dict) const |
Set dictionary from named object, return true if set. More... | |
template<class Type > | |
Type | getProperty (const word &entryName, const Type &defaultValue=Type(Zero)) const |
Retrieve generic property. More... | |
template<class Type > | |
bool | getProperty (const word &entryName, Type &value) const |
Set generic property, return true if set. More... | |
template<class Type > | |
void | setProperty (const word &entryName, const Type &value) |
Add generic property. More... | |
template<class Type > | |
Type | getObjectProperty (const word &objectName, const word &entryName, const Type &defaultValue=Type(Zero)) const |
Retrieve generic property from named object. More... | |
template<class Type > | |
bool | getObjectProperty (const word &objectName, const word &entryName, Type &value) const |
Set generic property from named object, return true if set. More... | |
template<class Type > | |
void | setObjectProperty (const word &objectName, const word &entryName, const Type &value) |
Add generic property from named object. More... | |
template<class Type > | |
void | setResult (const word &entryName, const Type &value) |
Add result. More... | |
template<class Type > | |
void | setObjectResult (const word &objectName, const word &entryName, const Type &value) |
Add result from named object. More... | |
template<class Type > | |
Type | getResult (const word &entryName, const Type &defaultValue=Type(Zero)) const |
Retrieve result. More... | |
template<class Type > | |
Type | getObjectResult (const word &objectName, const word &entryName, const Type &defaultValue=Type(Zero)) const |
Retrieve result from named object. More... | |
template<class Type > | |
bool | getObjectResult (const word &objectName, const word &entryName, Type &value) const |
Set result from named object, return true if set. More... | |
word | resultType (const word &entryName) const |
Retrieve the result type. More... | |
word | objectResultType (const word &objectName, const word &entryName) const |
Return the type of result. More... | |
List< word > | objectResultEntries () const |
Retrieve the result entries. More... | |
List< word > | objectResultEntries (const word &objectName) const |
Return result entries for named object. More... | |
void | writeResultEntries (Ostream &os) const |
Write the results entries for all objects to stream. More... | |
void | writeResultEntries (const word &objectName, Ostream &os) const |
Write the results entries for named object to stream. More... | |
void | writeAllResultEntries (Ostream &os) const |
Write the results entries for all objects to stream. More... | |
Public Member Functions inherited from timeFunctionObject | |
timeFunctionObject (const word &name, const Time &runTime) | |
Construct from Time. More... | |
virtual | ~timeFunctionObject ()=default |
Destructor. More... | |
const Time & | time () const |
Return time database. More... | |
objectRegistry & | storedObjects () |
const objectRegistry & | storedObjects () const |
Public Member Functions inherited from functionObject | |
virtual const word & | type () const =0 |
Runtime type information. More... | |
declareRunTimeSelectionTable (autoPtr, functionObject, dictionary,(const word &name, const Time &runTime, const dictionary &dict),(name, runTime, dict)) | |
functionObject (const word &name) | |
Construct from components. More... | |
autoPtr< functionObject > | clone () const |
Return clone. More... | |
virtual | ~functionObject ()=default |
Destructor. More... | |
const word & | name () const |
Return the name of this functionObject. More... | |
virtual bool | execute (const label subIndex) |
Execute using the specified subIndex. More... | |
virtual bool | end () |
Called when Time::run() determines that the time-loop exits. More... | |
virtual bool | adjustTimeStep () |
Called at the end of Time::adjustDeltaT() if adjustTime is true. More... | |
virtual bool | filesModified () const |
Did any file get changed during execution? More... | |
virtual void | updateMesh (const mapPolyMesh &mpm) |
Update for changes of mesh. More... | |
virtual void | movePoints (const polyMesh &mesh) |
Update for changes of mesh. More... | |
Public Member Functions inherited from writeFile | |
writeFile (const objectRegistry &obr, const fileName &prefix, const word &name="undefined", const bool writeToFile=true) | |
Construct from objectRegistry, prefix, fileName. More... | |
writeFile (const objectRegistry &obr, const fileName &prefix, const word &name, const dictionary &dict, const bool writeToFile=true) | |
writeFile (const writeFile &wf) | |
Construct copy. More... | |
virtual | ~writeFile ()=default |
Destructor. More... | |
virtual OFstream & | file () |
Return access to the file (if only 1) More... | |
virtual bool | writeToFile () const |
Flag to allow writing to file. More... | |
virtual bool | canWriteHeader () const |
Flag to allow writing the header. More... | |
virtual label | charWidth () const |
Return width of character stream output. More... | |
virtual void | writeCommented (Ostream &os, const string &str) const |
Write a commented string to stream. More... | |
virtual void | writeTabbed (Ostream &os, const string &str) const |
Write a tabbed string to stream. More... | |
virtual void | writeHeader (Ostream &os, const string &str) const |
Write a commented header to stream. More... | |
virtual void | writeCurrentTime (Ostream &os) const |
Write the current time to stream. More... | |
virtual void | writeBreak (Ostream &os) const |
Write a break marker to the stream. More... | |
template<class Type > | |
void | writeHeaderValue (Ostream &os, const string &property, const Type &value) const |
Write a (commented) header property and value pair. More... | |
Additional Inherited Members | |
Static Public Member Functions inherited from functionObject | |
static autoPtr< functionObject > | New (const word &name, const Time &runTime, const dictionary &dict) |
Select from dictionary, based on its "type" entry. More... | |
Public Attributes inherited from functionObject | |
bool | log |
Flag to write log into Info. More... | |
Static Public Attributes inherited from functionObject | |
static int | debug |
Flag to execute debug content. More... | |
static bool | postProcess |
Global post-processing mode switch. More... | |
static word | outputPrefix |
Directory prefix. More... | |
Static Public Attributes inherited from writeFile | |
static label | addChars = 8 |
Additional characters for writing. More... | |
Protected Member Functions inherited from fvMeshFunctionObject | |
fvMeshFunctionObject (const fvMeshFunctionObject &)=delete | |
No copy construct. More... | |
void | operator= (const fvMeshFunctionObject &)=delete |
No copy assignment. More... | |
Protected Member Functions inherited from regionFunctionObject | |
virtual const objectRegistry & | obr () const |
The region or sub-region registry being used. More... | |
template<class ObjectType > | |
bool | foundObject (const word &fieldName) const |
Find object (eg, a field) in the (sub) objectRegistry. More... | |
template<class ObjectType > | |
const ObjectType * | cfindObject (const word &fieldName) const |
template<class ObjectType > | |
const ObjectType * | findObject (const word &fieldName) const |
template<class ObjectType > | |
ObjectType * | findObject (const word &fieldName) |
template<class ObjectType > | |
ObjectType * | getObjectPtr (const word &fieldName) const |
template<class ObjectType > | |
const ObjectType & | lookupObject (const word &fieldName) const |
Lookup and return object (eg, a field) from the (sub) objectRegistry. More... | |
template<class ObjectType > | |
ObjectType & | lookupObjectRef (const word &fieldName) const |
Lookup and return object (eg, a field) from the (sub) objectRegistry. More... | |
template<class ObjectType > | |
bool | store (word &fieldName, const tmp< ObjectType > &tfield, bool cacheable=false) |
Store the field in the (sub) objectRegistry under the given name. More... | |
bool | writeObject (const word &fieldName) |
Write field if present in the (sub) objectRegistry. More... | |
bool | clearObject (const word &fieldName) |
Clear field from the (sub) objectRegistry if present. More... | |
void | clearObjects (const wordList &objNames) |
Clear fields from the (sub) objectRegistry if present. More... | |
regionFunctionObject (const regionFunctionObject &)=delete | |
No copy construct. More... | |
void | operator= (const regionFunctionObject &)=delete |
No copy assignment. More... | |
Protected Member Functions inherited from stateFunctionObject | |
const IOdictionary & | stateDict () const |
Return a const reference to the state dictionary. More... | |
IOdictionary & | stateDict () |
Return non-const access to the state dictionary. More... | |
stateFunctionObject (const stateFunctionObject &)=delete | |
No copy construct. More... | |
void | operator= (const stateFunctionObject &)=delete |
No copy assignment. More... | |
Protected Member Functions inherited from timeFunctionObject | |
void | clearOutputObjects (const wordList &objNames) |
Remove specified items from "functionObjectObjects". More... | |
timeFunctionObject (const timeFunctionObject &)=delete | |
No copy construct. More... | |
void | operator= (const timeFunctionObject &)=delete |
No copy assignment. More... | |
Protected Member Functions inherited from functionObject | |
word | scopedName (const word &name) const |
Return a scoped name, e.g. used to construct local field names. More... | |
Protected Member Functions inherited from writeFile | |
void | initStream (Ostream &os) const |
Initialise the output stream for writing. More... | |
fileName | baseFileDir () const |
Return the base directory for output. More... | |
fileName | baseTimeDir () const |
Return the base directory for the current time value. More... | |
virtual autoPtr< OFstream > | createFile (const word &name, scalar timeValue) const |
Return autoPtr to a new file for a given time. More... | |
virtual autoPtr< OFstream > | createFile (const word &name) const |
Return autoPtr to a new file using the simulation start time. More... | |
virtual void | resetFile (const word &name) |
Reset internal file pointer to new file with new name. More... | |
Omanip< int > | valueWidth (const label offset=0) const |
Return the value width when writing to stream with optional offset. More... | |
void | operator= (const writeFile &)=delete |
No copy assignment. More... | |
Protected Attributes inherited from fvMeshFunctionObject | |
const fvMesh & | mesh_ |
Reference to the fvMesh. More... | |
Protected Attributes inherited from regionFunctionObject | |
word | subRegistryName_ |
Name for alternative object registry. More... | |
const objectRegistry & | obr_ |
Reference to the region objectRegistry. More... | |
const objectRegistry * | obrPtr_ |
Pointer to alternative (eg, sub-region) objectRegistry. More... | |
Protected Attributes inherited from timeFunctionObject | |
const Time & | time_ |
Reference to the time database. More... | |
Protected Attributes inherited from writeFile | |
const objectRegistry & | fileObr_ |
Reference to the region objectRegistry. More... | |
const fileName | prefix_ |
Prefix. More... | |
word | fileName_ |
Name of file. More... | |
autoPtr< OFstream > | filePtr_ |
File pointer. More... | |
label | writePrecision_ |
Write precision. More... | |
bool | writeToFile_ |
Flag to enable/disable writing to file. More... | |
bool | updateHeader_ |
bool | writtenHeader_ |
Flag to identify whether the header has been written. More... | |
bool | useUserTime_ |
scalar | startTime_ |
Start time value. More... | |
(Beta Release) STDMD (i.e. Streaming Total Dynamic Mode Decomposition) is a variant of a data-driven dimensionality reduction method.
STDMD is being used as a mathematical post-processing tool to compute a set of dominant modes out of a given flow (or dataset) each of which is associated with a constant frequency and decay rate, so that dynamic features of a given flow may become interpretable, and tractable. Among other Dynamic Mode Decomposition (DMD) variants, STDMD is presumed to provide the general DMD method capabilities alongside economised and feasible memory and CPU usage.
The code implementation corresponds to Figs. 15-16 of the first citation below, more broadly to Section 2.4.
References:
STDMD and mode-sorting algorithms (tags:K, HRDC, KZ, HWR): Kiewat, M. (2019). Streaming modal decomposition approaches for vehicle aerodynamics. PhD thesis. Munich: Technical University of Munich. URL:mediatum.ub.tum.de/doc/1482652/1482652.pdf Hemati, M. S., Rowley, C. W., Deem, E. A., & Cattafesta, L. N. (2017). De-biasing the dynamic mode decomposition for applied Koopman spectral analysis of noisy datasets. Theoretical and Computational Fluid Dynamics, 31(4), 349-368. DOI:10.1007/s00162-017-0432-2 Kou, J., & Zhang, W. (2017). An improved criterion to select dominant modes from dynamic mode decomposition. European Journal of Mechanics-B/Fluids, 62, 109-129. DOI:10.1016/j.euromechflu.2016.11.015 Hemati, M. S., Williams, M. O., & Rowley, C. W. (2014). Dynamic mode decomposition for large and streaming datasets. Physics of Fluids, 26(11), 111701. DOI:10.1063/1.4901016 Parallel classical Gram-Schmidt process (tag:Ka): Katagiri, T. (2003). Performance evaluation of parallel Gram-Schmidt re-orthogonalization methods. In: Palma J. M. L. M., Sousa A. A., Dongarra J., Hernández V. (eds) High Performance Computing for Computational Science — VECPAR 2002. Lecture Notes in Computer Science, vol 2565, p. 302-314. Berlin, Heidelberg: Springer. DOI:10.1007/3-540-36569-9_19 Parallel direct tall-skinny QR decomposition (tags:BGD, DGHL): Benson, A. R., Gleich, D. F., & Demmel, J. (2013). Direct QR factorizations for tall-and-skinny matrices in MapReduce architectures. 2013 IEEE International Conference on Big Data. DOI:10.1109/bigdata.2013.6691583 Demmel, J., Grigori, L., Hoemmen, M., & Langou, J. (2012). Communication-optimal parallel and sequential QR and LU factorizations. SIAM Journal on Scientific Computing, 34(1), A206-A239. DOI:10.1137/080731992 DMD properties: Brunton S. L. (2018). Dynamic mode decomposition overview. Seattle, Washington: University of Washington. youtu.be/sQvrK8AGCAo (Retrieved:24-04-20)
Operands:
Operand | Type | Location |
---|---|---|
input | {vol,surface}<Type>Field | $FOAM_CASE/<time>/<inpField> |
output file | dat | $FOAM_CASE/postProcessing/<FO>/<time>/<file>(s) |
output field | volScalarField(s) | $FOAM_CASE/<time>/<outField>(s) |
where <Type>=Scalar/Vector/SphericalTensor/SymmTensor/Tensor
.
Output fields:
modeReal<modeIndex><field> | Real part of a mode field modeImag<modeIndex><field> | Imaginary part of a mode field
Output files:
uSTDMD.dat | Unfiltered STDMD output STDMD.dat | Filtered STDMD output
wherein for each mode, the following quantities are output into files:
Frequency Magnitude Amplitude (real part) Amplitude (imaginary part) Eigenvalue (real part) Eigenvalue (imaginary part)
wallShearStress
, are currently not available.system/controlDict.functions
: STDMD1 { // Mandatory entries (unmodifiable) type STDMD; libs (fieldFunctionObjects); field <inpField>; // Conditional mandatory entries (unmodifiable) // either of the below stdmdInterval 5.5; executeInterval 10; // Optional entries (unmodifiable) modeSorter kiewat; nModes 50; maxRank 50; nGramSchmidt 5; fMin 0; fMax 1000000000; // Optional entries (run-time modifiable, yet not recommended) testEigen false; dumpEigen false; minBasis 0.00000001; minEVal 0.00000001; absTol 0.001; relTol 0.0001; sortLimiter 500; // Optional (inherited) entries ... }
where the entries mean:
Property | Description | Type | Req'd | Dflt |
---|---|---|---|---|
type | Type name: STDMD | word | yes | - |
libs | Library name: fieldFunctionObjects | word | yes | - |
field | Name of the operand field | word | yes | - |
stdmdInterval | STDMD time-step size [s] | scalar | conditional | executeInterval*(current time-step of the simulation) |
modeSorter | Mode-sorting algorithm variant | word | no | firstSnap |
nModes | Number of output modes in input freq range | label | no | GREAT |
maxRank | Max columns in accumulated matrices | label | no | GREAT |
nGramSchmidt | Number of Gram-Schmidt iterations | label | no | 5 |
fMin | Min (non-negative) output frequency | label | no | 0 |
fMax | Max output frequency | label | no | GREAT |
testEigen | Flag to verify eigendecompositions | bool | no | false |
dumpEigen | Flag to log operands of eigendecomps | bool | no | false |
minBasis | Orthogonal basis expansion threshold | scalar | no | 1e-8 |
minEVal | Min EVal for below EVals are omitted | scalar | no | 1e-8 |
absTol | Min abs tol in eigendecomposition tests | scalar | no | 1e-4 |
relTol | Relative tol in eigendecomposition tests | scalar | no | 1e-6 |
sortLimiter | Maximum allowable magnitude for mag(eigenvalue)*(number of STDMD steps) to be used in modeSorter={kiewat,kouZhang} to avoid overflow errors | scalar | no | 500.0 |
Options for the modeSorter
entry:
kiewat | Modified weighted amplitude scaling method kouZhang | Weighted amplitude scaling method firstSnap | Method of first snapshot amplitude magnitude
The inherited entries are elaborated in:
Usage by postProcess
utility is not available.
stdmdInterval
or executeInterval
must be available (highest to lowest precedence). While stdmdInterval
allows users to directly specify the STDMD time-step size in seconds, in absence of stdmdInterval
, for convenience, executeInterval
allows users to compute the STDMD time-step internally by multiplying itself with the current time-step size of the simulation.modeSorter
algorithms of kiewat
and kouZhang
, there exists a function of \(power(x,y)\) where x
is the magnitude of an eigenvalue, and y
is the number of STDMD snapshots. This function poses a risk of overflow errors since, for example, if x
ends up above 1.5 with 500 snapshots or more, this function automatically throws the floating point error meaning overflow. Therefore, the domain-range of this function is heuristically constrained by the optional entry sortLimiter
which skips the evaluation of this function for a given mag(eigenvalue)*(no. of STDMD steps), i.e. x*y, whose magnitude is larger than sortLimiter
.
|
delete |
No default construct.
STDMD | ( | const word & | name, |
const Time & | runTime, | ||
const dictionary & | dict | ||
) |
Construct from Time and dictionary.
Definition at line 1013 of file STDMD.C.
References Foam::abort(), dict, Foam::endl(), Foam::FatalError, FatalErrorInFunction, Foam::Info, Foam::nl, Foam::read(), runTime, and WarningInFunction.
|
virtualdefault |
Destructor.
TypeName | ( | "STDMD" | ) |
Runtime type information.
|
delete |
No copy assignment.
|
virtual |
Read STDMD settings.
Reimplemented from writeFile.
Definition at line 1135 of file STDMD.C.
References dict, Foam::constant::mathematical::e(), Foam::endl(), MinMax< T >::ge(), Foam::Info, Foam::name(), Foam::nl, Foam::blockMeshTools::read(), and Foam::tab.
|
virtual |
Execute STDMD.
Implements functionObject.
Definition at line 1207 of file STDMD.C.
References Foam::endl(), Log, Foam::name(), Foam::tab, and Foam::type().
|
virtual |
Write STDMD output.
Implements functionObject.
Definition at line 1251 of file STDMD.C.
References Foam::endl(), Foam::Info, Log, Foam::name(), Foam::nl, Foam::type(), and WarningInFunction.