Skip to content

BOP-DMD ModeTuner.select() and stabilize() are applied on continuous eigs #571

@hafezmg48

Description

@hafezmg48

Describe the bug
Doing some tests I realized that when applying the (simple) DMD the resulted object dmd.eigs will give us the discrete-time eigenvalues. In contrast to that when applying BOPDMD the bopdmd.eigs gives us the continuous-time eigenvalues.
This difference is fine, until when using the ModesTuner.select() the function will apply the unity norm distance to the continuous-time eigenvalues for the BOPDMD which will cutoff almost all of the data incorrectly.
The same issue happens with the ModesTuner.stabilize() which will normalize the continuous-time eigenvalues to 1.

To Reproduce

dmd = BOPDMD(
            svd_rank=svd_rank,                        
            eig_sort="abs"
            varpro_opts_dict={"tol":0.05, "maxiter":100, "verbose":True},
        )

from pydmd.dmd_modes_tuner import ModesTuner

mtuner = ModesTuner(dmd)
# select more stable modes
mtuner.select('stable_modes', max_distance_from_unity_inside=1.e-1,
        max_distance_from_unity_outside=1.e-1, nullify_amplitudes=True)

# stabilize the more stable nodes
mtuner.stabilize(inner_radius=1)

dmd_stabilized = mtuner.copy()

print(dmd_stabilized.eigs)

Expected behavior
The expected behaviour is that the stabilize() and select() functions would convert the continuous-time eigenvalues to discrete-time eigenvalue counterparts and apply the stability and selection on those values and then convert them back to the continuous-time eigenvalues

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions