Commit c785da01 authored by Gurecky, William's avatar Gurecky, William
Browse files

preprocess the new cases

parent 38e83475
Loading
Loading
Loading
Loading
+30 −27
Original line number Diff line number Diff line
@@ -74,25 +74,29 @@ class PodCfdModel(object):
        data_name: Name of the field to reconstruct via the POD model.
        n_pod_modes: Number of POD modes to retain in the ROM.  A larger number of retained
            POD modes results in greateer accuracy at the expense of more computation time.
        min_vane_angle:  min vane angle (model only works
                         between min and max CFD vane angle data)
        min_vane_angle:  max vane angle (model only works
                         between min and max CFD vane angle data)
    """
    def __init__(self, snapshot_h5file: str, data_name: str="Static Pressure (Pa)", n_pod_modes: int=7):
    def __init__(self, snapshot_h5file: str, data_name: str="Static Pressure (Pa)", n_pod_modes: int=7, min_vane_angle=11.11, max_vane_angle=13.874, **kwargs):
        pod_model, xyz_points = construct_pod_model(snapshot_h5file, data_name, n_pod_modes)
        self._pod_model = pod_model
        self._xyz_points = xyz_points
        self._min_vane_angle = min_vane_angle
        self._max_vane_angle = max_vane_angle
        self._max_field_value = kwargs.get("max_field_value", 800e3)
        self._min_field_value = kwargs.get("min_field_value", -100e3)

    def predict(self, vane_angle: float, min_vane_angle: float=4., max_vane_angle: float=9.) -> np.ndarray:
    def predict(self, vane_angle: float) -> np.ndarray:
        """
        Evaluate the POD ROM.

        Args:
            vane_angle:  turbine guide vane angle in degrees
            min_vane_angle:  min vane angle (model only works
                             between min and max CFD vane angle data)
            min_vane_angle:  max vane angle (model only works
                             between min and max CFD vane angle data)
        """
        va = np.clip(vane_angle, min_vane_angle, max_vane_angle)
        return self._pod_model.predict(va)
        va = np.clip(vane_angle, self._min_vane_angle, self._max_vane_angle)
        return np.clip(self._pod_model.predict(va), self._min_field_value, self._max_field_value)

    @property
    def xyz_points(self) -> np.ndarray:
@@ -116,32 +120,31 @@ class SegmentedPodCfdModel(object):
        data_name: Name of the field to reconstruct via the POD model.
        n_pod_modes: Number of POD modes to retain in the ROM.  A larger number of retained
            POD modes results in greateer accuracy at the expense of more computation time.
        min_vane_angle:  min vane angle (model only works
                         between min and max CFD vane angle data)
        min_vane_angle:  max vane angle (model only works
                         between min and max CFD vane angle data)
    """
    def __init__(self, snapshot_h5files: List[str], data_name: str="Static Pressure (Pa)", n_pod_modes: int=7):
    def __init__(self, snapshot_h5files: List[str], data_name: str="Static Pressure (Pa)", n_pod_modes: int=7, min_vane_angle=11.11, max_vane_angle=13.874, **kwargs):
        self._pod_cfd_models = []
        if isinstance(data_name, str):
            for i, snapshot_h5file in enumerate(snapshot_h5files):
                self._pod_cfd_models.append(PodCfdModel(snapshot_h5file, data_name, n_pod_modes))
                self._pod_cfd_models.append(PodCfdModel(snapshot_h5file, data_name, n_pod_modes, min_vane_angle, max_vane_angle, **kwargs))
        else:
            assert len(data_name) == len(snapshot_h5files)
            for i, snapshot_h5file in enumerate(snapshot_h5files):
                self._pod_cfd_models.append(PodCfdModel(snapshot_h5file, data_name[i], n_pod_modes))
                self._pod_cfd_models.append(PodCfdModel(snapshot_h5file, data_name[i], n_pod_modes, min_vane_angle, max_vane_angle, **kwargs))

    def predict(self, vane_angle: float, min_vane_angle: float=4., max_vane_angle: float=14.) -> np.ndarray:
    def predict(self, vane_angle: float) -> np.ndarray:
        """
        Evaluate the POD ROM.

        Args:
            vane_angle:  turbine guide vane angle in degrees
            min_vane_angle:  min vane angle (model only works
                             between min and max CFD vane angle data)
            min_vane_angle:  max vane angle (model only works
                             between min and max CFD vane angle data)
        """
        va = np.clip(vane_angle, min_vane_angle, max_vane_angle)
        seg_results = []
        for pod_model in self._pod_cfd_models:
            seg_results.append(pod_model.predict(va, min_vane_angle, max_vane_angle))
            seg_results.append(pod_model.predict(vane_angle))
        return np.concatenate(seg_results, axis=0)

    @property
@@ -173,7 +176,7 @@ def test_pod_cfd_model(use_plotly=True,

    # evaluate the pod model at an vane angle not in training set
    ts = time.time()
    current_vane_angle = 8.02
    current_vane_angle = 12.5
    pred_p = pod_model.predict(current_vane_angle)
    pred_vx = pod_model_vx.predict(current_vane_angle)
    pred_vy = pod_model_vy.predict(current_vane_angle)
@@ -268,7 +271,7 @@ def test_pod_segmented_cfd_model(snapshot_h5files, n_pod_modes=7, rotating_frame

    # evaluate the pod model at an vane angle not in training set
    ts = time.time()
    current_vane_angle = 12.5
    current_vane_angle = 12.8
    pred_p = pod_model.predict(current_vane_angle)
    pred_vx = pod_model_vx.predict(current_vane_angle)
    pred_vy = pod_model_vy.predict(current_vane_angle)
@@ -291,7 +294,7 @@ def test_pod_segmented_cfd_model(snapshot_h5files, n_pod_modes=7, rotating_frame
        y=Y.flatten(),
        z=Z.flatten(),
        mode='markers',
        marker=dict(size=4, color=values, opacity=0.95,
        marker=dict(size=2, color=values, opacity=0.95,
                    colorbar=dict(thickness=5, title="Static Pressure (Pa)")),
        customdata=values,
        hovertemplate=('%{customdata}%'),
@@ -305,8 +308,8 @@ def test_pod_segmented_cfd_model(snapshot_h5files, n_pod_modes=7, rotating_frame
        u=pred_vx,
        v=pred_vy,
        w=pred_vz,
        sizemode="absolute",
        sizeref=150,
        #sizemode="absolute",
        sizeref=25,
        colorbar=dict(thickness=8, title="Velocity (m/s)"),
        ))
    fig_v.show()
@@ -345,9 +348,9 @@ def test_dynamic_pod_model(snapshot_h5file="cfd_pod_snapshots.h5", n_pod_modes=7
    f_db.create_dataset("Z", data=Z)
    f_db.flush()

    current_vane_angle = 4.0
    min_vane_angle = 4.0
    max_vane_angle = 9.0
    current_vane_angle = 12.5
    min_vane_angle = 11.11
    max_vane_angle = 13.874
    def get_test_vane_angle(t):
        """
        Returns a vane angle between min and max val
@@ -406,7 +409,7 @@ if __name__ == "__main__":
    parser.add_argument("-i", help="Input POD snapshot file(s).", type=str, nargs='+', default=["cfd_pod_snapshots.h5"])
    parser.add_argument("--dynamic", help="Run in dynamic test mode with moving vane angle", type=int, default=0)
    parser.add_argument("--n_pod_modes", help="Run in dynamic test mode with moving vane angle", type=int, default=7)
    parser.add_argument("--rotating_frame", help="Use rotating reference frame for velocity data in the runner", type=int, default=1)
    parser.add_argument("--rotating_frame", help="Use rotating reference frame for velocity data in the runner", type=int, default=0)
    args = parser.parse_args()
    if len(args.i) == 1:
        if bool(args.dynamic):
+46 −42
Original line number Diff line number Diff line
@@ -38,49 +38,52 @@ run_parameters = [

# NEW CFD DATA FILES
# run_dir = "./alder_u12_fixed/"
run_dir = "./alder_u12_fixed/"
run_csv_files = [
#         "alpha-01_runner.csv",
#         "alpha-02_runner.csv",
#         "alpha-03_runner.csv",
#         "alpha-04_runner.csv",
#         "alpha-05_runner.csv",
#         "alpha-06_runner.csv",
#         "alpha-07_runner.csv",
#         "alpha-08_runner.csv",
#         "alpha-09_runner.csv",
run_dir = "./alder_u12_sep20/"
# run_csv_files = [
# #         "alpha-01_runner.csv",
# #         "alpha-02_runner.csv",
# #         "alpha-03_runner.csv",
# #         "alpha-04_runner.csv",
# #         "alpha-05_runner.csv",
# #         "alpha-06_runner.csv",
# #         "alpha-07_runner.csv",
# #         "alpha-08_runner.csv",
# #         "alpha-09_runner.csv",
# #         "alpha-10_runner.csv",
#         "alpha-8_runner.csv",
#         "alpha-9_runner.csv",
#         "alpha-10_runner.csv",
        "alpha-9_runner.csv",
        "alpha-10_runner.csv",
        ]
run_csv_files = [
#         "alpha-01_spiral-casing-and-draft-tube.csv",
#         "alpha-02_spiral-casing-and-draft-tube.csv",
#         "alpha-03_spiral-casing-and-draft-tube.csv",
#         "alpha-04_spiral-casing-and-draft-tube.csv",
#         "alpha-05_spiral-casing-and-draft-tube.csv",
#         "alpha-06_spiral-casing-and-draft-tube.csv",
#         "alpha-07_spiral-casing-and-draft-tube.csv",
#         "alpha-08_spiral-casing-and-draft-tube.csv",
#         "alpha-09_spiral-casing-and-draft-tube.csv",
#         "alpha-10_spiral-casing-and-draft-tube.csv",
          "alpha-9_casing-draft_tube.csv",
          "alpha-10_casing-draft_tube.csv",
         ]
#         ]
# run_csv_files = [
#         # "alpha-01_distributor.csv",
#         # "alpha-02_distributor.csv",
#         # "alpha-03_distributor.csv",
#         # "alpha-04_distributor.csv",
#         # "alpha-05_distributor.csv",
#         # "alpha-06_distributor.csv",
#         # "alpha-07_distributor.csv",
#         # "alpha-08_distributor.csv",
#         # "alpha-09_distributor.csv",
#         # "alpha-10_distributor.csv",
#         "alpha-9_distributor.csv",
#         "alpha-10_distributor.csv",
# #         "alpha-01_spiral-casing-and-draft-tube.csv",
# #         "alpha-02_spiral-casing-and-draft-tube.csv",
# #         "alpha-03_spiral-casing-and-draft-tube.csv",
# #         "alpha-04_spiral-casing-and-draft-tube.csv",
# #         "alpha-05_spiral-casing-and-draft-tube.csv",
# #         "alpha-06_spiral-casing-and-draft-tube.csv",
# #         "alpha-07_spiral-casing-and-draft-tube.csv",
# #         "alpha-08_spiral-casing-and-draft-tube.csv",
# #         "alpha-09_spiral-casing-and-draft-tube.csv",
# #         "alpha-10_spiral-casing-and-draft-tube.csv",
#           "alpha-8_casing_draft-tube.csv",
#           "alpha-9_casing_draft-tube.csv",
#           "alpha-10_casing_draft-tube.csv",
#          ]
run_csv_files = [
        # "alpha-01_distributor.csv",
        # "alpha-02_distributor.csv",
        # "alpha-03_distributor.csv",
        # "alpha-04_distributor.csv",
        # "alpha-05_distributor.csv",
        # "alpha-06_distributor.csv",
        # "alpha-07_distributor.csv",
        # "alpha-08_distributor.csv",
        # "alpha-09_distributor.csv",
        # "alpha-10_distributor.csv",
        "alpha-8_distributor.csv",
        "alpha-9_distributor.csv",
        "alpha-10_distributor.csv",
        ]
run_parameters = [
#         [1.3875],
#         [2.775],
@@ -89,7 +92,7 @@ run_parameters = [
#         [6.9375],
#         [8.325],
#         [9.7125],
#         [11.1],
        [11.1],
        [12.4875],
        [13.875],
        ]
@@ -123,6 +126,7 @@ def plot_cfd_vel_field(mesh_x, mesh_y, mesh_z, v_i, v_j, v_k, cbar_label=""):
    # vel * area:  (m/s) * m^2 = m^3/s
    outlet_area = np.pi * (3.0 / 2.) ** 2.
    print("mean y vol flow outlet (m^3/s):", mean_v_j_outlet * outlet_area)
    print("mean y vol flow outlet (ft^3/s):", mean_v_j_outlet * outlet_area * 35.31458)

    fig_v = go.Figure(data=go.Cone(
        x=mesh_x[subsample_idxs].flatten(),
+4 −4
Original line number Diff line number Diff line
@@ -279,10 +279,10 @@ def alder_inelastic(t_end=20., h_in=60., h_out=0.0, pid_control=True, *args, **k
            rom_vane_angle = np.rad2deg(a_turb)
            # NOTE: Current POD ROM snapshot data only valid between
            # 4.0 and 9.0 degrees of vane opening!
            pred_p = pod_model_p.predict(rom_vane_angle, min_vane_angle=4., max_vane_angle=9.)
            pred_vx = pod_model_vx.predict(rom_vane_angle, min_vane_angle=4., max_vane_angle=9.)
            pred_vy = pod_model_vy.predict(rom_vane_angle, min_vane_angle=4., max_vane_angle=9.)
            pred_vz = pod_model_vz.predict(rom_vane_angle, min_vane_angle=4., max_vane_angle=9.)
            pred_p = pod_model_p.predict(rom_vane_angle)
            pred_vx = pod_model_vx.predict(rom_vane_angle)
            pred_vy = pod_model_vy.predict(rom_vane_angle)
            pred_vz = pod_model_vz.predict(rom_vane_angle)
            pred_vmag = np.sqrt(pred_vx**2 + pred_vy**2 + pred_vz**2)
            print("ROM Vane angle (deg): ", rom_vane_angle)
            print("ROM Max, Min 3D P (Pa): ", max(pred_p), min(pred_p))