In this guide, we will walk you through setting up and running FVCOM, one of the built-in simulators available through the Inductiva API.

We will cover:

  • An overview of how we compiled FVCOM (fvcom and fvcom_estuary binaries.)

  • Generating a valid namelist file for configuring your simulations.

  • Example code to help you get started with simulations.

FVCOM#

FVCOM (Finite Volume Community Ocean Model) is a 3D hydrodynamic model specifically designed for simulating coastal and ocean dynamics. It uses an unstructured grid and finite-volume methods, making it highly adaptable for modeling complex coastlines, estuaries, and bathymetry.

FVCOM excels at simulating ocean circulation, tides, and coastal processes, providing high-resolution outputs for water currents, temperature, salinity, and ecosystem interactions. It’s a valuable tool for studying marine ecosystems, coastal environments, and the impacts of climate change on ocean systems.

Running FVCOM Simulations#

We have compiled two versions:

  • fvcom: The standard version for general use.

  • fvcom_estuary: Configured to run the Estuary test case included with FVCOM.

Users can check the compilation modules used in each binary in the respective make.inc files located at /make.inc and /make_estuary.inc.

If you encounter issues with the input namelist file, the following Python script will generate a valid .nml file in your working directory:

import inductiva

# Instantiate machine group
machine_group = inductiva.resources.MachineGroup("c2-standard-4")
machine_group.start()

# Set simulation input directory
input_dir = inductiva.utils.download_from_url(
    "https://storage.googleapis.com/inductiva-api-demo-files/"
    "fvcom-input-example.zip", unzip=True)

# Initialize the Simulator
fvcom = inductiva.simulators.FVCOM()

# Run simulation with config files in the input directory
task = fvcom.run( input_dir=input_dir,
                  working_dir="run/",
                  create_namelist="tst",
                  n_vcpus=1,
                  on=machine_group)

task.wait()
task.download_outputs()

machine_group.terminate()

Example Code#

Below is an example where we run a simple FVCOM test scenario to verify that the simulator is working correctly, using 1 MPI process and a debug level of 7:

"""FVCOM example"""
import inductiva

# Instantiate machine group
machine_group = inductiva.resources.MachineGroup("c2-standard-4")
machine_group.start()

# Set simulation input directory
input_dir = inductiva.utils.download_from_url(
    "https://storage.googleapis.com/inductiva-api-demo-files/"
    "fvcom-input-example.zip",
    unzip=True)

# Initialize the Simulator
fvcom = inductiva.simulators.FVCOM()

# Run simulation with config files in the input directory
task = fvcom.run(input_dir=input_dir,
                 working_dir="run/",
                 case_name="tst",
                 n_vcpus=1,
                 debug=7,
                 on=machine_group)

task.wait()
task.download_outputs()

machine_group.terminate()

Closing Notes: If you encounter issues with the timezone argument in the nml file, please set it to None or UTC as a workaround. For more information, check the bug report.

All simulation parameters were changed to make sure it runs in a reasonable time.