coupledmodeldriver


Namecoupledmodeldriver JSON
Version 1.7.0 PyPI version JSON
download
home_pagehttps://github.com/noaa-ocs-modeling/CoupledModelDriver.git
Summarycoupled model configuration generation
upload_time2023-12-29 13:29:50
maintainer
docs_urlNone
authorZach Burnett
requires_python<3.11
licenseCC0-1.0
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # CoupledModelDriver

[![tests](https://github.com/noaa-ocs-modeling/CoupledModelDriver/workflows/tests/badge.svg)](https://github.com/noaa-ocs-modeling/CoupledModelDriver/actions?query=workflow%3Atests)
[![codecov](https://codecov.io/gh/noaa-ocs-modeling/coupledmodeldriver/branch/main/graph/badge.svg?token=4DwZePHp18)](https://codecov.io/gh/noaa-ocs-modeling/coupledmodeldriver)
[![build](https://github.com/noaa-ocs-modeling/CoupledModelDriver/workflows/build/badge.svg)](https://github.com/noaa-ocs-modeling/CoupledModelDriver/actions?query=workflow%3Abuild)
[![version](https://img.shields.io/pypi/v/CoupledModelDriver)](https://pypi.org/project/CoupledModelDriver)
[![license](https://img.shields.io/github/license/noaa-ocs-modeling/CoupledModelDriver)](https://creativecommons.org/share-your-work/public-domain/cc0)
[![style](https://sourceforge.net/p/oitnb/code/ci/default/tree/_doc/_static/oitnb.svg?format=raw)](https://sourceforge.net/p/oitnb/code)
[![documentation](https://readthedocs.org/projects/coupledmodeldriver/badge/?version=latest)](https://coupledmodeldriver.readthedocs.io/en/latest/?badge=latest)

CoupledModelDriver generates an overlying job submission framework and configuration directories for NEMS-coupled coastal ocean
model ensembles.

```shell
pip install coupledmodeldriver
```

It utilizes [NEMSpy](https://nemspy.readthedocs.io) to generate NEMS configuration files, shares common configurations between
runs, and organizes spinup and mesh partition into separate jobs for dependant submission.

Documentation can be found at https://coupledmodeldriver.readthedocs.io

## supported models and platforms

- **models**
    - circulation models
        - ADCIRC (uses [ADCIRCpy](https://pypi.org/project/adcircpy))
        - SCHISM (uses [PySCHISM](https://github.com/schism-dev/pyschism))
    - forcings
        - ATMESH
        - WW3DATA
        - HURDAT best track
        - OWI
- **platforms**
    - local
    - Slurm
        - Hera
        - Stampede2
        - Orion

## organization / responsibility

CoupledModelDriver is developed for the COASTAL Act project by the [Coastal Marine Modeling Branch (CMMB)](https://coastaloceanmodels.noaa.gov) of the Office of Coast Survey (OCS), a part of the [National Oceanic and Atmospheric Administration (NOAA)](https://www.noaa.gov), an agency of the United States federal government.

- Zachary Burnett (**lead**) - zachary.burnett@noaa.gov
- William Pringle - wpringle@anl.gov
- Saeed Moghimi - saeed.moghimi@noaa.gov

## usage example

### 1. generate JSON configuration files

`initialize_adcirc` creates JSON configuration files according to the given parameters. ADCIRC run options that are not exposed
by this command, such as `runs` or `gwce_solution_scheme`, can be specified by directly modifying the JSON files. The following
creates JSON files for coupling `(ATMESH + WW3DATA) -> ADCIRC` over a small Shinnecock Inlet mesh:

```shell
initialize_adcirc \
    --platform HERA \
    --mesh-directory /scratch2/COASTAL/coastal/save/shared/models/meshes/shinnecock/v1.0 \
    --output-directory hera_shinnecock_ike_spinup_tidal_atmesh_ww3data \
    --modeled-start-time 20080823 \
    --modeled-duration 14:06:00:00 \
    --modeled-timestep 00:00:02 \
    --nems-interval 01:00:00 \
    --adcirc-executable /scratch2/COASTAL/coastal/save/shared/repositories/CoastalApp/ALLBIN_INSTALL/NEMS-adcirc-atmesh-ww3data.x \
    --adcirc-processors 40
    --adcprep-executable /scratch2/COASTAL/coastal/save/shared/repositories/CoastalApp/ALLBIN_INSTALL/adcprep \
    --modulefile /scratch2/COASTAL/coastal/save/shared/repositories/CoastalApp/modulefiles/envmodules_intel.hera \
    --forcings tidal,atmesh,ww3data \
    --tidal-source TPXO \
    --tidal-path /scratch2/COASTAL/coastal/save/shared/models/forcings/tides/h_tpxo9.v1.nc \
    --tidal-spinup-duration 12:06:00:00 \
    --atmesh-path /scratch2/COASTAL/coastal/save/shared/models/forcings/shinnecock/ike/wind_atm_fin_ch_time_vec.nc \
    --ww3data-path /scratch2/COASTAL/coastal/save/shared/models/forcings/shinnecock/ike/ww3.Constant.20151214_sxy_ike_date.nc
```

This will create the directory `hera_shinnecock_ike_spinup_tidal_atmesh_ww3data/` with the following JSON configuration files:

```
📂 hera_shinnecock_ike_spinup_tidal_atmesh_ww3data/
┣ 📜 configure_adcirc.json
┣ 📜 configure_atmesh.json
┣ 📜 configure_modeldriver.json
┣ 📜 configure_nems.json
┣ 📜 configure_slurm.json
┣ 📜 configure_tidal_forcing.json
┗ 📜 configure_ww3data.json
```

These files contain relevant configuration values for an ADCIRC run. You will likely wish to change these values to alter the
resulting run, before generating the actual model configuration. For instance, NEMS connections and the run sequence need to be
manually specified in `configure_nems.json`.

### 2. generate model configuration files

`generate_adcirc` generates an ADCIRC run configuration (`fort.14`, `fort.15`, etc.) using options read from the JSON
configuration files (generated in the previous step).

```shell
cd hera_shinnecock_ike_spinup_tidal_atmesh_ww3data
generate_adcirc
```

The resulting configuration will look like this:

```
📂 hera_shinnecock_ike_spinup_tidal_atmesh_ww3data/
┣ 📜 configure_adcirc.json
┣ 📜 configure_atmesh.json
┣ 📜 configure_modeldriver.json
┣ 📜 configure_nems.json
┣ 📜 configure_slurm.json
┣ 📜 configure_tidal_forcing.json
┣ 📜 configure_ww3data.json
┣ 📂 spinup/
┃  ┣ 📜 fort.13
┃  ┣ 🔗 fort.14 -> ../fort.14
┃  ┣ 📜 fort.15
┃  ┣ 📜 nems.configure
┃  ┣ 📜 model_configure
┃  ┣ 🔗 atm_namelist.rc -> ./model_configure
┃  ┣ 📜 config.rc
┃  ┣ 📜 setup.job
┃  ┗ 📜 adcirc.job
┣ 📂 runs/
┃  ┗ 📂 unperturbed/
┃    ┣ 📜 fort.13
┃    ┣ 🔗 fort.14 -> ../../fort.14
┃    ┣ 📜 fort.15
┃    ┣ 🔗 fort.67.nc -> ../../spinup/fort.67.nc
┃    ┣ 🔗 fort.68.nc -> ../../spinup/fort.68.nc
┃    ┣ 📜 nems.configure
┃    ┣ 📜 model_configure
┃    ┣ 🔗 atm_namelist.rc -> ./model_configure
┃    ┣ 📜 config.rc
┃    ┣ 📜 setup.job
┃    ┗ 📜 adcirc.job
┣ 📜 fort.14
┣ 📜 cleanup.sh
┗ 📜 run_hera.sh
```

### 3. run the model

The previous step will also have generated a script called `./run_hera.sh`. You can run it to submit the model run to the Slurm
job queue:

```shell
./run_hera.sh
``` 

The queue will have the following jobs added:

```
   JOBID CPU NODE DEPENDENCY       NODELIST(REA NAME
20967647 1   1    (null)           (None)       ADCIRC_SETUP_SPINUP
20967648 40  1    afterok:20967647 (Dependency) ADCIRC_COLDSTART_SPINUP
20967649 1   1    (null)           (None)       ADCIRC_SETUP_unperturbed
20967650 42  2    afterok:20967649 (Dependency) ADCIRC_HOTSTART_unperturbed
```

### 4. track model progress

`check_completion` checks the completion status of a running model directory.

```shell
cd hera_shinnecock_ike_spinup_tidal_atmesh_ww3data
check_completion
```

```json
{
    "hera_shinnecock_ike_spinup_tidal_atmesh_ww3data": {
        "spinup": "running - 15%",
        "runs": "not_started - 0%"
    }
}
```

you can also pass a specific directory (or several directories):

```shell
check_completion spinup
```

```json
{
    "spinup": "running - 27%"
}
```

```shell
cd run_20211027_florence_besttrack_250msubset_quadrature
check_completion runs/*_13
```

```json
{
    "vortex_4_variable_perturbation_13": "completed - 100.0%",
    "vortex_4_variable_quadrature_13": "not_started - 0%"
}
```

if a run has an error, you can pass `--verbose` to see detailed logs:

```shell
check_completion spinup
```

```json
{
    "spinup": "error - 0%"
}
```

```shell
check_completion spinup --verbose
```

```json
{
    "spinup": {
        "status": "error",
        "progress": "0%",
        "error": {
            "ADCIRC_SETUP_SPINUP.err.log": [
                "forrtl: severe (24): end-of-file during read, unit -4, file /proc/92195/fd/0\n",
                "Image              PC                Routine            Line        Source             \n",
                "adcprep            000000000069A72E  Unknown               Unknown  Unknown\n",
                "adcprep            00000000006CBAAF  Unknown               Unknown  Unknown\n",
                "adcprep            000000000050A5CB  openprepfiles_           6996  prep.F\n",
                "adcprep            0000000000507F22  prep13_                   753  prep.F\n",
                "adcprep            000000000042E2E9  prepinput_                717  adcprep.F\n",
                "adcprep            000000000042BCDB  MAIN__                    239  adcprep.F\n",
                "adcprep            000000000040B65E  Unknown               Unknown  Unknown\n",
                "libc-2.17.so       00002AAEC02EB555  __libc_start_main     Unknown  Unknown\n",
                "adcprep            000000000040B569  Unknown               Unknown  Unknown\n",
                "srun: error: h24c51: task 0: Exited with exit code 24\n",
                "srun: launch/slurm: _step_signal: Terminating StepId=25366266.1\n"
            ]
        }
    }
}
```

```shell
check_completion runs
```

```json
{
    "spinup": "failed - 0%"
}
```

```shell
check_completion runs --verbose
```

```json
{
    "runs": {
        "status": "failed",
        "progress": "0%",
        "failed": {
            "fort.16": "ADCIRC output file `fort.16` not found"
        },
        "error": {
            "ADCIRC_SETUP_unperturbed.err.log": [
                "slurmstepd: error: execve(): /scratch2/COASTAL/coastal/save/shared/repositories/CoastalApp/ADCIRC/ALLBIN_INSTALL/adcprep: No such file or directory\n",
                "srun: error: h18c49: task 0: Exited with exit code 2\n",
                "srun: launch/slurm: _step_signal: Terminating StepId=25366268.0\n"
            ]
        }
    }
}
```

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/noaa-ocs-modeling/CoupledModelDriver.git",
    "name": "coupledmodeldriver",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "<3.11",
    "maintainer_email": "",
    "keywords": "",
    "author": "Zach Burnett",
    "author_email": "zachary.r.burnett@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/90/d1/76fcc9c5519f7e80aaf11b52d9ad052f9e371216e303faefabe673f6b0e3/coupledmodeldriver-1.7.0.tar.gz",
    "platform": null,
    "description": "# CoupledModelDriver\n\n[![tests](https://github.com/noaa-ocs-modeling/CoupledModelDriver/workflows/tests/badge.svg)](https://github.com/noaa-ocs-modeling/CoupledModelDriver/actions?query=workflow%3Atests)\n[![codecov](https://codecov.io/gh/noaa-ocs-modeling/coupledmodeldriver/branch/main/graph/badge.svg?token=4DwZePHp18)](https://codecov.io/gh/noaa-ocs-modeling/coupledmodeldriver)\n[![build](https://github.com/noaa-ocs-modeling/CoupledModelDriver/workflows/build/badge.svg)](https://github.com/noaa-ocs-modeling/CoupledModelDriver/actions?query=workflow%3Abuild)\n[![version](https://img.shields.io/pypi/v/CoupledModelDriver)](https://pypi.org/project/CoupledModelDriver)\n[![license](https://img.shields.io/github/license/noaa-ocs-modeling/CoupledModelDriver)](https://creativecommons.org/share-your-work/public-domain/cc0)\n[![style](https://sourceforge.net/p/oitnb/code/ci/default/tree/_doc/_static/oitnb.svg?format=raw)](https://sourceforge.net/p/oitnb/code)\n[![documentation](https://readthedocs.org/projects/coupledmodeldriver/badge/?version=latest)](https://coupledmodeldriver.readthedocs.io/en/latest/?badge=latest)\n\nCoupledModelDriver generates an overlying job submission framework and configuration directories for NEMS-coupled coastal ocean\nmodel ensembles.\n\n```shell\npip install coupledmodeldriver\n```\n\nIt utilizes [NEMSpy](https://nemspy.readthedocs.io) to generate NEMS configuration files, shares common configurations between\nruns, and organizes spinup and mesh partition into separate jobs for dependant submission.\n\nDocumentation can be found at https://coupledmodeldriver.readthedocs.io\n\n## supported models and platforms\n\n- **models**\n    - circulation models\n        - ADCIRC (uses [ADCIRCpy](https://pypi.org/project/adcircpy))\n        - SCHISM (uses [PySCHISM](https://github.com/schism-dev/pyschism))\n    - forcings\n        - ATMESH\n        - WW3DATA\n        - HURDAT best track\n        - OWI\n- **platforms**\n    - local\n    - Slurm\n        - Hera\n        - Stampede2\n        - Orion\n\n## organization / responsibility\n\nCoupledModelDriver is developed for the COASTAL Act project by the [Coastal Marine Modeling Branch (CMMB)](https://coastaloceanmodels.noaa.gov) of the Office of Coast Survey (OCS), a part of the [National Oceanic and Atmospheric Administration (NOAA)](https://www.noaa.gov), an agency of the United States federal government.\n\n- Zachary Burnett (**lead**) - zachary.burnett@noaa.gov\n- William Pringle - wpringle@anl.gov\n- Saeed Moghimi - saeed.moghimi@noaa.gov\n\n## usage example\n\n### 1. generate JSON configuration files\n\n`initialize_adcirc` creates JSON configuration files according to the given parameters. ADCIRC run options that are not exposed\nby this command, such as `runs` or `gwce_solution_scheme`, can be specified by directly modifying the JSON files. The following\ncreates JSON files for coupling `(ATMESH + WW3DATA) -> ADCIRC` over a small Shinnecock Inlet mesh:\n\n```shell\ninitialize_adcirc \\\n    --platform HERA \\\n    --mesh-directory /scratch2/COASTAL/coastal/save/shared/models/meshes/shinnecock/v1.0 \\\n    --output-directory hera_shinnecock_ike_spinup_tidal_atmesh_ww3data \\\n    --modeled-start-time 20080823 \\\n    --modeled-duration 14:06:00:00 \\\n    --modeled-timestep 00:00:02 \\\n    --nems-interval 01:00:00 \\\n    --adcirc-executable /scratch2/COASTAL/coastal/save/shared/repositories/CoastalApp/ALLBIN_INSTALL/NEMS-adcirc-atmesh-ww3data.x \\\n    --adcirc-processors 40\n    --adcprep-executable /scratch2/COASTAL/coastal/save/shared/repositories/CoastalApp/ALLBIN_INSTALL/adcprep \\\n    --modulefile /scratch2/COASTAL/coastal/save/shared/repositories/CoastalApp/modulefiles/envmodules_intel.hera \\\n    --forcings tidal,atmesh,ww3data \\\n    --tidal-source TPXO \\\n    --tidal-path /scratch2/COASTAL/coastal/save/shared/models/forcings/tides/h_tpxo9.v1.nc \\\n    --tidal-spinup-duration 12:06:00:00 \\\n    --atmesh-path /scratch2/COASTAL/coastal/save/shared/models/forcings/shinnecock/ike/wind_atm_fin_ch_time_vec.nc \\\n    --ww3data-path /scratch2/COASTAL/coastal/save/shared/models/forcings/shinnecock/ike/ww3.Constant.20151214_sxy_ike_date.nc\n```\n\nThis will create the directory `hera_shinnecock_ike_spinup_tidal_atmesh_ww3data/` with the following JSON configuration files:\n\n```\n\ud83d\udcc2 hera_shinnecock_ike_spinup_tidal_atmesh_ww3data/\n\u2523 \ud83d\udcdc configure_adcirc.json\n\u2523 \ud83d\udcdc configure_atmesh.json\n\u2523 \ud83d\udcdc configure_modeldriver.json\n\u2523 \ud83d\udcdc configure_nems.json\n\u2523 \ud83d\udcdc configure_slurm.json\n\u2523 \ud83d\udcdc configure_tidal_forcing.json\n\u2517 \ud83d\udcdc configure_ww3data.json\n```\n\nThese files contain relevant configuration values for an ADCIRC run. You will likely wish to change these values to alter the\nresulting run, before generating the actual model configuration. For instance, NEMS connections and the run sequence need to be\nmanually specified in `configure_nems.json`.\n\n### 2. generate model configuration files\n\n`generate_adcirc` generates an ADCIRC run configuration (`fort.14`, `fort.15`, etc.) using options read from the JSON\nconfiguration files (generated in the previous step).\n\n```shell\ncd hera_shinnecock_ike_spinup_tidal_atmesh_ww3data\ngenerate_adcirc\n```\n\nThe resulting configuration will look like this:\n\n```\n\ud83d\udcc2 hera_shinnecock_ike_spinup_tidal_atmesh_ww3data/\n\u2523 \ud83d\udcdc configure_adcirc.json\n\u2523 \ud83d\udcdc configure_atmesh.json\n\u2523 \ud83d\udcdc configure_modeldriver.json\n\u2523 \ud83d\udcdc configure_nems.json\n\u2523 \ud83d\udcdc configure_slurm.json\n\u2523 \ud83d\udcdc configure_tidal_forcing.json\n\u2523 \ud83d\udcdc configure_ww3data.json\n\u2523 \ud83d\udcc2 spinup/\n\u2503  \u2523 \ud83d\udcdc fort.13\n\u2503  \u2523 \ud83d\udd17 fort.14 -> ../fort.14\n\u2503  \u2523 \ud83d\udcdc fort.15\n\u2503  \u2523 \ud83d\udcdc nems.configure\n\u2503  \u2523 \ud83d\udcdc model_configure\n\u2503  \u2523 \ud83d\udd17 atm_namelist.rc -> ./model_configure\n\u2503  \u2523 \ud83d\udcdc config.rc\n\u2503  \u2523 \ud83d\udcdc setup.job\n\u2503  \u2517 \ud83d\udcdc adcirc.job\n\u2523 \ud83d\udcc2 runs/\n\u2503  \u2517 \ud83d\udcc2 unperturbed/\n\u2503    \u2523 \ud83d\udcdc fort.13\n\u2503    \u2523 \ud83d\udd17 fort.14 -> ../../fort.14\n\u2503    \u2523 \ud83d\udcdc fort.15\n\u2503    \u2523 \ud83d\udd17 fort.67.nc -> ../../spinup/fort.67.nc\n\u2503    \u2523 \ud83d\udd17 fort.68.nc -> ../../spinup/fort.68.nc\n\u2503    \u2523 \ud83d\udcdc nems.configure\n\u2503    \u2523 \ud83d\udcdc model_configure\n\u2503    \u2523 \ud83d\udd17 atm_namelist.rc -> ./model_configure\n\u2503    \u2523 \ud83d\udcdc config.rc\n\u2503    \u2523 \ud83d\udcdc setup.job\n\u2503    \u2517 \ud83d\udcdc adcirc.job\n\u2523 \ud83d\udcdc fort.14\n\u2523 \ud83d\udcdc cleanup.sh\n\u2517 \ud83d\udcdc run_hera.sh\n```\n\n### 3. run the model\n\nThe previous step will also have generated a script called `./run_hera.sh`. You can run it to submit the model run to the Slurm\njob queue:\n\n```shell\n./run_hera.sh\n``` \n\nThe queue will have the following jobs added:\n\n```\n   JOBID CPU NODE DEPENDENCY       NODELIST(REA NAME\n20967647 1   1    (null)           (None)       ADCIRC_SETUP_SPINUP\n20967648 40  1    afterok:20967647 (Dependency) ADCIRC_COLDSTART_SPINUP\n20967649 1   1    (null)           (None)       ADCIRC_SETUP_unperturbed\n20967650 42  2    afterok:20967649 (Dependency) ADCIRC_HOTSTART_unperturbed\n```\n\n### 4. track model progress\n\n`check_completion` checks the completion status of a running model directory.\n\n```shell\ncd hera_shinnecock_ike_spinup_tidal_atmesh_ww3data\ncheck_completion\n```\n\n```json\n{\n    \"hera_shinnecock_ike_spinup_tidal_atmesh_ww3data\": {\n        \"spinup\": \"running - 15%\",\n        \"runs\": \"not_started - 0%\"\n    }\n}\n```\n\nyou can also pass a specific directory (or several directories):\n\n```shell\ncheck_completion spinup\n```\n\n```json\n{\n    \"spinup\": \"running - 27%\"\n}\n```\n\n```shell\ncd run_20211027_florence_besttrack_250msubset_quadrature\ncheck_completion runs/*_13\n```\n\n```json\n{\n    \"vortex_4_variable_perturbation_13\": \"completed - 100.0%\",\n    \"vortex_4_variable_quadrature_13\": \"not_started - 0%\"\n}\n```\n\nif a run has an error, you can pass `--verbose` to see detailed logs:\n\n```shell\ncheck_completion spinup\n```\n\n```json\n{\n    \"spinup\": \"error - 0%\"\n}\n```\n\n```shell\ncheck_completion spinup --verbose\n```\n\n```json\n{\n    \"spinup\": {\n        \"status\": \"error\",\n        \"progress\": \"0%\",\n        \"error\": {\n            \"ADCIRC_SETUP_SPINUP.err.log\": [\n                \"forrtl: severe (24): end-of-file during read, unit -4, file /proc/92195/fd/0\\n\",\n                \"Image              PC                Routine            Line        Source             \\n\",\n                \"adcprep            000000000069A72E  Unknown               Unknown  Unknown\\n\",\n                \"adcprep            00000000006CBAAF  Unknown               Unknown  Unknown\\n\",\n                \"adcprep            000000000050A5CB  openprepfiles_           6996  prep.F\\n\",\n                \"adcprep            0000000000507F22  prep13_                   753  prep.F\\n\",\n                \"adcprep            000000000042E2E9  prepinput_                717  adcprep.F\\n\",\n                \"adcprep            000000000042BCDB  MAIN__                    239  adcprep.F\\n\",\n                \"adcprep            000000000040B65E  Unknown               Unknown  Unknown\\n\",\n                \"libc-2.17.so       00002AAEC02EB555  __libc_start_main     Unknown  Unknown\\n\",\n                \"adcprep            000000000040B569  Unknown               Unknown  Unknown\\n\",\n                \"srun: error: h24c51: task 0: Exited with exit code 24\\n\",\n                \"srun: launch/slurm: _step_signal: Terminating StepId=25366266.1\\n\"\n            ]\n        }\n    }\n}\n```\n\n```shell\ncheck_completion runs\n```\n\n```json\n{\n    \"spinup\": \"failed - 0%\"\n}\n```\n\n```shell\ncheck_completion runs --verbose\n```\n\n```json\n{\n    \"runs\": {\n        \"status\": \"failed\",\n        \"progress\": \"0%\",\n        \"failed\": {\n            \"fort.16\": \"ADCIRC output file `fort.16` not found\"\n        },\n        \"error\": {\n            \"ADCIRC_SETUP_unperturbed.err.log\": [\n                \"slurmstepd: error: execve(): /scratch2/COASTAL/coastal/save/shared/repositories/CoastalApp/ADCIRC/ALLBIN_INSTALL/adcprep: No such file or directory\\n\",\n                \"srun: error: h18c49: task 0: Exited with exit code 2\\n\",\n                \"srun: launch/slurm: _step_signal: Terminating StepId=25366268.0\\n\"\n            ]\n        }\n    }\n}\n```\n",
    "bugtrack_url": null,
    "license": "CC0-1.0",
    "summary": "coupled model configuration generation",
    "version": "1.7.0",
    "project_urls": {
        "Documentation": "https://coupledmodeldriver.readthedocs.io",
        "Homepage": "https://github.com/noaa-ocs-modeling/CoupledModelDriver.git",
        "Repository": "https://github.com/noaa-ocs-modeling/CoupledModelDriver.git"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9a3e193d0f6fd8fc07474d7d6fa541e71f54c116d624d3035aad41fe646b603a",
                "md5": "227080bcb07b2a3bc9cdd8969f376c7f",
                "sha256": "448660b24d2283ece2b4f51c0670d7057170b1b7efc3c20b943bf1267fe06d8a"
            },
            "downloads": -1,
            "filename": "coupledmodeldriver-1.7.0-py2.py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "227080bcb07b2a3bc9cdd8969f376c7f",
            "packagetype": "bdist_wheel",
            "python_version": "py2.py3",
            "requires_python": "<3.11",
            "size": 76217,
            "upload_time": "2023-12-29T13:29:48",
            "upload_time_iso_8601": "2023-12-29T13:29:48.153915Z",
            "url": "https://files.pythonhosted.org/packages/9a/3e/193d0f6fd8fc07474d7d6fa541e71f54c116d624d3035aad41fe646b603a/coupledmodeldriver-1.7.0-py2.py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "90d176fcc9c5519f7e80aaf11b52d9ad052f9e371216e303faefabe673f6b0e3",
                "md5": "5d7c5fa070b1d1950252e068030e02e2",
                "sha256": "502d430a46bcd08c61b6fb3a27f3d9413ab2ebe09133a258b98cc243e5f9a277"
            },
            "downloads": -1,
            "filename": "coupledmodeldriver-1.7.0.tar.gz",
            "has_sig": false,
            "md5_digest": "5d7c5fa070b1d1950252e068030e02e2",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<3.11",
            "size": 62759,
            "upload_time": "2023-12-29T13:29:50",
            "upload_time_iso_8601": "2023-12-29T13:29:50.434614Z",
            "url": "https://files.pythonhosted.org/packages/90/d1/76fcc9c5519f7e80aaf11b52d9ad052f9e371216e303faefabe673f6b0e3/coupledmodeldriver-1.7.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-12-29 13:29:50",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "noaa-ocs-modeling",
    "github_project": "CoupledModelDriver",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "coupledmodeldriver"
}
        
Elapsed time: 0.22183s