Temporal Reconstruction from Proper Orthogonal Decomposition

Description

This treatment computes the temporal evolution of modes from a POD decomposition of a given input Base.

Parameters

  • base_pod: Base

    The input base resulting from a treatment antares.treatment.TreatmentPOD, or having the same structure.

  • base_mesh: Base

    The input base containing the mesh of the domain used in the POD treatment. This base must only contain one zone.

  • mode: int, default= 0

    The POD mode number that has to be reconstructed in time. The first mode is the mode 0 and has the highest eigenvalue (largest energy content).

  • variables: list(str), default= []

    The variable names considered for the temporal reconstruction.

  • coordinates: list(str)

    The variable names that define the set of coordinates. If no value is given, the default coordinate system of the base base_mesh is used (see Base.coordinate_names).

Preconditions

The input base base must be issued from the antares.treatment.TreatmentPOD treatment, or it must respect the same structure as the output base of this treatment.

The input base base_mesh must only contain one zone.

Postconditions

The output base will contain one zone for the given mode.

The output base contains the coordinates of base_mesh and the instants that have been reconstructed from the POD mode considered.

Example

import antares
myt = antares.Treatment('PODtoTemporal')
myt['base_pod'] = POD_base
myt['base_mesh'] = mesh_base
myt['mode'] = 0
myt['variables'] = ['psta']
output_base = myt.execute()

Main functions

class antares.treatment.TreatmentPODtoTemporal.TreatmentPODtoTemporal
execute()

Compute the temporal evolution of the considered POD mode.

Returns

The base with reconstructed instants.

Return type

Base

Example

"""
This example illustrates the Proper Orthogonal Decomposition.
"""
import os
import numpy as np
import antares

if not os.path.isdir('OUTPUT'):
    os.makedirs('OUTPUT')

# Create the input Base
time_step = 0.0003
nb_snapshot = 50
nb_space_points = 100

base = antares.Base()
zone = base['zone_0'] = antares.Zone()
for snapshot_idx in range(nb_snapshot):
    instant_name = 'snapshot_%s' % snapshot_idx
    inst = zone[instant_name] = antares.Instant()
    inst['pressure'] = 25.4 * np.cos(2 * np.pi * 250 * snapshot_idx * time_step + np.linspace(0, 2.5 * np.pi, nb_space_points))
    # constant pressure over the space domain evolving in time
    # base[0][instant_name]['pressure'] = np.cos(2 * np.pi * 0.01 * snapshot_idx * 2 + np.zeros((nb_space_points,)))

# ------------------
# Compute the POD
# ------------------
treatment = antares.Treatment('POD')
treatment['base'] = base
treatment['tolerance'] = 0.99
treatment['dim_max'] = 100
treatment['POD_vectors'] = True
treatment['variables'] = ['pressure']
result = treatment.execute()
result.show()
# ------------------
# Get some results
# ------------------
print("POD modes: ", result[0]['modes'][0])
print("POD parameters: ")
for k, v in result.attrs.items():
    print(k, v)

base_mesh = antares.Base()
base_mesh.init()
base_mesh[0][0]['x'] = range(nb_space_points)

t = antares.Treatment('PODtoTemporal')
t['base_mesh'] = base_mesh
t['base_pod'] = result
t['variable'] = ['pressure']
t['mode'] = 0
t['coordinates'] = ['x']
base_pod_temporal = t.execute()

writer = antares.Writer('bin_tp')
writer['base'] = base_pod_temporal
writer['filename'] = os.path.join('OUTPUT', 'ex_mode_0_reconstructed_temporal.plt')
writer.dump()