Interactive Web App¶
Application Overview¶
This Streamlit application (app.py) provides an interactive interface for simulating the hydrodynamic behavior of multiple bodies using the OpenFLASH engine. Users can adjust various parameters to visualize potential fields for a single frequency or compute and plot hydrodynamic coefficients over a range of frequencies.
Running the App¶
There are two ways to run the Streamlit application:
Option 1: Use the Web-Based App (Recommended)
The app is deployed and can be run directly in your web browser, with no installation required. This is the easiest way to get started.
Interactive Streamlit App: Launch App
Option 2: Run the App Locally
Ensure that you have Streamlit and the openflash package installed.
pip install streamlit
To launch the app, run the following command from your project’s root directory:
streamlit run docs/app.py
Key Features:
Interactive Parameters: Adjust water depth, body radii, step depths, and the number of harmonics.
Object-Oriented Setup: Defines the geometry by creating SteppedBody objects, reflecting the modern API.
Single Frequency Analysis: Solves the system for a single wave frequency and visualizes the total potential field in real time.
Frequency Sweep Analysis: Efficiently runs the simulation across a range of frequencies to compute and plot how added mass and damping coefficients change.
Functions¶
- app.main()[source]
The main function that sets up and runs the Streamlit application.
It configures the sidebar for user inputs, parses them, and sets up the problem geometry using the object-oriented API (SteppedBody, ConcentricBodyGroup, BasicRegionGeometry). The interface is split into two main actions: a single frequency test and a frequency sweep.
User Inputs (Sidebar):
Water Depth (h): Overall depth of the water.
Body Step Depths (d): Comma-separated list of submerged depths, one for each body.
Body Radii (a): Comma-separated list of radii, one for each body.
Heaving Bodies (1/0): Comma-separated binary list (1=True, 0=False) indicating if each body is heaving.
Harmonics (NMK): Comma-separated list specifying the number of series approximation terms for each fluid domain (number of bodies + 1).
- Single Frequency Test:
Angular Frequency (omega): The specific frequency for the potential field visualization.
Plot Spatial Resolution: Controls the grid density for the potential plots.
- Frequency Sweep for Coefficients:
Start Omega: The beginning of the frequency range.
End Omega: The end of the frequency range.
Number of Steps: The number of frequencies to simulate within the range.
Simulation Workflows:
The application logic is divided into two distinct workflows, triggered by buttons in the main interface.
Run Single Test & Plot Potentials:
Calculates the non-dimensional wavenumber (m0) from the user-provided omega.
Configures the MEEMProblem with the single frequency and the active modes of motion.
Initializes the MEEMEngine and calls solve_linear_system_multi to get the solution vector X.
Computes and displays the hydrodynamic coefficient matrices for that single frequency.
Calls calculate_potentials to compute the total potential field.
Visualizes the real and imaginary parts of the potential field using Matplotlib.
Run Frequency Sweep & Plot Coefficients:
Creates an array of frequencies based on the user’s start, end, and step inputs.
Configures the MEEMProblem with the full array of frequencies and active modes.
Initializes the MEEMEngine and calls the highly efficient run_and_store_results method. This single method handles the entire simulation loop internally.
Extracts the computed added_mass and damping coefficients from the resulting xarray.Dataset.
Generates and displays Matplotlib plots showing how the added mass and damping coefficients vary across the simulated frequency range.