コード例 #1
0
def symmetric_inner_product_mat(num_states,
                                num_vecs,
                                max_vecs_per_node,
                                verbosity=1):
    """
    Computes symmetric inner product matrix from known vecs (as in POD).
    """
    vec_handles = [
        MR.VecHandlePickle(join(data_dir, row_vec_name % row_num))
        for row_num in range(num_vecs)
    ]

    generate_vecs(data_dir, num_states, vec_handles)

    my_VS = MR.VectorSpaceHandles(N.vdot,
                                  max_vecs_per_node=max_vecs_per_node,
                                  verbosity=verbosity)

    prof = cProfile.Profile()
    start_time = T.time()
    prof.runcall(my_VS.compute_symmetric_inner_product_mat, vec_handles)
    total_time = T.time() - start_time
    prof.dump_stats('IP_symmetric_mat_r%d.prof' % _parallel.get_rank())

    return total_time
コード例 #2
0
import modred as mr

# Create directory for output files
out_dir = 'rom_ex2_out'
if not os.path.isdir(out_dir):
    os.makedirs(out_dir)

# Create random modes and action on modes. Typically this data already exists
# and this section is unnecesary.
nx = 100
ny = 200
num_inputs = 2
num_outputs = 4
num_modes = 40
basis_vecs = [
    mr.VecHandlePickle('%s/dir_mode_%02d.pkl' % (out_dir, i))
    for i in range(num_modes)
]
adjoint_basis_vecs = [
    mr.VecHandlePickle('%s/adj_mode_%02d.pkl' % (out_dir, i))
    for i in range(num_modes)
]
A_on_basis_vecs = [
    mr.VecHandlePickle('%s/A_on_dir_mode_%02d.pkl' % (out_dir, i))
    for i in range(num_modes)
]
B_on_bases = [
    mr.VecHandlePickle('%s/B_on_basis_%02d.pkl' % (out_dir, i))
    for i in range(num_inputs)
]
C_on_basis_vecs = [
コード例 #3
0
import numpy as N
import modred as MR

nx = 100
ny = 200
num_inputs = 2
num_outputs = 4
num_modes = 40

# Create random modes and action on modes. Typically this data already exists and
# this section is unnecesary.
basis_vecs = [
    MR.VecHandlePickle('dir_mode_%02d.pkl' % i) for i in range(num_modes)
]
adjoint_basis_vecs = [
    MR.VecHandlePickle('adj_mode_%02d.pkl' % i) for i in range(num_modes)
]
A_on_basis_vecs = [
    MR.VecHandlePickle('A_on_dir_mode_%02d.pkl' % i) for i in range(num_modes)
]
B_on_bases = [
    MR.VecHandlePickle('B_on_basis_%02d.pkl' % i) for i in range(num_inputs)
]
C_on_basis_vecs = [
    N.sin(N.linspace(0, 0.1 * i, num_outputs)) for i in range(num_modes)
]
parallel = MR.parallel_default_instance
if parallel.is_rank_zero():
    for handle in (basis_vecs + adjoint_basis_vecs + A_on_basis_vecs +
                   B_on_bases):
        handle.put(N.random.random((nx, ny)))
コード例 #4
0
import modred as MR
import numpy as N

num_vecs = 100
# Non-uniform grid and corresponding inner product weights.
nx = 80
ny = 100
x_grid = 1. - N.cos(N.linspace(0, N.pi, nx))
y_grid = N.linspace(0, 1., ny)**2
Y, X = N.meshgrid(y_grid, x_grid)

snapshots = [MR.VecHandlePickle('vec%d.pkl' % i) for i in range(num_vecs)]
parallel = MR.parallel_default_instance
if parallel.is_rank_zero():
    for i, snap in enumerate(snapshots):
        snap.put(N.sin(X * i) + N.cos(Y * i))
parallel.barrier()

weighted_IP = MR.InnerProductTrapz(x_grid, y_grid)

# Calculate DMD modes and save them to pickle files.
my_DMD = MR.DMDHandles(weighted_IP)
my_DMD.compute_decomp(snapshots)
my_DMD.put_decomp('ritz_vals.txt', 'mode_norms.txt', 'build_coeffs.txt')
mode_indices = [1, 4, 5, 0, 10]
modes = [MR.VecHandlePickle('mode%d.pkl' % i) for i in mode_indices]
my_DMD.compute_modes(mode_indices, modes)
コード例 #5
0
from __future__ import print_function
from future.builtins import range
import numpy as np
import modred as mr

num_elements = 2000
num_vecs = 100

# Artificial sample times used as quadrature weights in POD.
quad_weights = np.logspace(1., 3., num=num_vecs)

base_vec_handle = mr.VecHandlePickle('base_vec.pkl')
snapshots = [
    mr.VecHandlePickle('vec%d.pkl' % i,
                       base_vec_handle=base_vec_handle,
                       scale=quad_weights[i]) for i in range(num_vecs)
]

# Save arbitrary data, normally unnecessary.
num_elements = 2000
parallel = mr.parallel_default_instance
if parallel.is_rank_zero():
    for snap in snapshots + [base_vec_handle]:
        snap.put(np.random.random(num_elements))
parallel.barrier()

# Compute and save POD modes.
my_POD = mr.PODHandles(np.vdot)
my_POD.compute_decomp(snapshots)
my_POD.put_decomp('sing_vals.txt', 'sing_vecs.txt')
my_POD.put_correlation_mat('correlation_mat.txt')
コード例 #6
0
import os

import numpy as np

from modred import parallel
import modred as mr

# Create directory for output files
out_dir = 'tutorial_ex5_out'
if not os.path.isdir(out_dir):
    os.makedirs(out_dir)

# Create artificial sample times used as quadrature weights in POD
num_vecs = 100
quad_weights = np.logspace(1., 3., num=num_vecs)
base_vec_handle = mr.VecHandlePickle('%s/base_vec.pkl' % out_dir)
snapshots = [
    mr.VecHandlePickle('%s/vec%d.pkl' % (out_dir, i),
                       base_vec_handle=base_vec_handle,
                       scale=quad_weights[i]) for i in mr.range(num_vecs)
]

# Save arbitrary snapshot data
num_elements = 2000
if parallel.is_rank_zero():
    for snap in snapshots + [base_vec_handle]:
        snap.put(np.random.random(num_elements))
parallel.barrier()

# Compute and save POD modes
my_POD = mr.PODHandles(np.vdot)