{"id":48590581,"url":"https://github.com/ludvdber/gem-mars-rpn2netcdf","last_synced_at":"2026-04-08T19:03:24.753Z","repository":{"id":318881146,"uuid":"1075423742","full_name":"ludvdber/gem-mars-rpn2netcdf","owner":"ludvdber","description":"Convert GEM-Mars RPN outputs (dm+pm pairs) to CF-compliant NetCDF4 with vertical interpolation and compute diurnal mean cycles.","archived":false,"fork":false,"pushed_at":"2025-11-26T11:38:55.000Z","size":178,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-28T07:27:12.492Z","etag":null,"topics":["atmospheric-modeling","climate-science","data-conversion","fstdc","gem-mars","mars","netcdf","netcdf4","numba","planetary-science","python","rpn","xarray"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ludvdber.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-13T13:34:28.000Z","updated_at":"2025-11-26T11:39:00.000Z","dependencies_parsed_at":"2025-10-17T01:14:30.035Z","dependency_job_id":"72de5daa-6ca8-443d-afd5-cd06e369a216","html_url":"https://github.com/ludvdber/gem-mars-rpn2netcdf","commit_stats":null,"previous_names":["ludvdber/gem-mars-rpn2netcdf"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ludvdber/gem-mars-rpn2netcdf","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ludvdber%2Fgem-mars-rpn2netcdf","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ludvdber%2Fgem-mars-rpn2netcdf/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ludvdber%2Fgem-mars-rpn2netcdf/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ludvdber%2Fgem-mars-rpn2netcdf/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ludvdber","download_url":"https://codeload.github.com/ludvdber/gem-mars-rpn2netcdf/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ludvdber%2Fgem-mars-rpn2netcdf/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31569401,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"ssl_error","status_checked_at":"2026-04-08T14:31:17.202Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["atmospheric-modeling","climate-science","data-conversion","fstdc","gem-mars","mars","netcdf","netcdf4","numba","planetary-science","python","rpn","xarray"],"created_at":"2026-04-08T19:03:08.784Z","updated_at":"2026-04-08T19:03:24.735Z","avatar_url":"https://github.com/ludvdber.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Python Version](https://img.shields.io/badge/python-3.11+-blue.svg)\n![License](https://img.shields.io/badge/license-MIT-green.svg)\n![CF Conventions](https://img.shields.io/badge/CF-1.10-orange.svg)\n![Status](https://img.shields.io/badge/status-production-brightgreen.svg)\n![Platform](https://img.shields.io/badge/platform-Linux%20%7C%20Windows-lightgrey.svg)\n![NetCDF](https://img.shields.io/badge/format-NetCDF--4-blue.svg)\n![Mars](https://img.shields.io/badge/planet-Mars-red.svg)\n\n\u003e 🌍 **English version** | **[Version française](README_FR.md)**\n\n**CLI tools for GEM-Mars atmospheric model:** Convert RPN/FSTD files to CF-compliant NetCDF-4 + compute diurnal mean cycles with Mars Year/Ls indexing.\n\n## 📑 Table of Contents\n\n- [convert_dm_pm_to_nc.py](#convert_dm_pm_to_nc--readme)\n  - [What it does](#what-it-does-default-behavior)\n  - [Folder layout](#folder-layout-expected)\n  - [Installation](#installation)\n  - [Usage](#usage)\n  - [Selecting variables](#selecting-variables)\n  - [Output \u0026 logging](#output--logging)\n  - [Troubleshooting](#troubleshooting)\n- [compute_diurnal_mean.py](#computing-diurnal-mean-cycles)\n  - [What it does](#what-it-does)\n  - [Installation](#installation-1)\n  - [Basic Usage](#basic-usage)\n  - [Advanced Options](#advanced-options)\n  - [Mars Year Lookup](#mars-year-lookup-advanced)\n  - [Command Reference](#command-reference)\n- [Related Resources](#related-resources)\n\n---\n\n# convert_dm_pm_to_nc — README\n\nA tiny CLI tool to convert GEM-Mars RPN files (dm + pm) to NetCDF4, with sane defaults for science usage and batch processing across many subfolders.\n\n## What it does (default behavior)\n\n- **Paired file processing**: Reads dm + pm RPN files via fstd2nc\n- **Time coordinate**: Computes `time = reftime + leadtime`\n- **Unit conversions**:\n  - TT: °C → K (+273.15)\n  - PX, P0: hPa → Pa (×100)\n  - GZ: decametre → m (×10)\n  - UU, VV: knots → m s⁻¹ (×0.5144)\n  - WW: already in Pa s⁻¹ (unchanged)\n- **Vertical interpolation**:\n  - Thermodynamic variables (TT, PX, GZ, etc.) interpolated to 103 common altitude levels\n  - Momentum variables (UU, VV) interpolated to 102 common altitude levels\n  - GZ set to height above surface (GZ_surface = 0)\n- **Optimized output**:\n  - NetCDF-4 format with lossless compression\n  - float32 precision (reduces file size)\n  - CF-1.10 compliant metadata\n- **Progress tracking**: Optional tqdm progress bar\n\n## Folder layout (expected)\n\nYour project root (e.g., `hl-b274`) should contain:\n\n```\nhl-b274/\n├── dm/\n│   ├── 000960/\n│   │   ├── hl-b274_dm_000000p_ls000.0000\n│   │   ├── hl-b274_dm_000001p_ls000.0100\n│   │   └── ...\n│   ├── 001920/\n│   └── ...\n├── pm/\n│   ├── 000960/\n│   │   ├── hl-b274_pm_000000p_ls000.0000\n│   │   ├── hl-b274_pm_000001p_ls000.0100\n│   │   └── ...\n│   ├── 001920/\n│   └── ...\n└── netcdf/           # outputs will be created here\n    ├── 000960/\n    │   ├── hl-b274_000000p_ls000_0000.nc\n    │   ├── hl-b274_000001p_ls000_0100.nc\n    │   └── ...\n    └── ...\n```\n\nFor each `dm/SUBDIR/file`, the script looks for the matching `pm/SUBDIR/file` and writes to `netcdf/SUBDIR/`.\n\n**Output naming**: Keeps the numbers from the RPN extension:\n\n```\nhl-b274_dm_000000p_ls000.0000  →  netcdf/000960/hl-b274_000000p_ls000_0000.nc\n```\n\n## Installation\n\n- Python 3.11+ recommended.\n  - xarray\n  - netCDF4\n  - fstd2nc\n  - tqdm\n  - numpy\n\ntqdm is optional (nice progress bar).\n\n```\npip install numpy xarray netCDF4 fstd2nc tqdm\n```\n\nLinux system libs (if needed)\n\nDebian/Ubuntu:\n\n```\nsudo apt-get install libhdf5-dev libnetcdf-dev\n```\n\n## Usage\n\nDefine your ROOT (path to the folder that contains dm/, pm/, netcdf/)\n\n- ### Linux\n\n    ```\n    ROOT=\"$HOME/hl-b274\"\n    cd /path/to/your/repo  #folder where convert_dm_pm_to_nc.py lives\n    ```\n\n  - ### Windows PowerShell\n\n      ```\n      $ROOT = \"$env:USERPROFILE\\Desktop\\hl-b274\"\n      Set-Location C:\\Users\\USERPROFILE\\PythonFile\n     ```\n  \n  1. All subfolders and all files\n\n  - ### Linux\n\n      ```\n      python convert_dm_pm_to_nc.py --root \"$ROOT\" --all\n     ```\n\n  - ### Windows PowerShell\n\n      ```\n      python .\\convert_dm_pm_to_nc.py --root \"$ROOT\" --all\n     ```\n  \n1. One specific subfolder (e.g., 000960)\n\n```\npython convert_dm_pm_to_nc.py --root \"$ROOT\" --dir 000960\n```\n\n1. A range of subfolders (inclusive, lexical order)\n\n```\npython convert_dm_pm_to_nc.py --root \"$ROOT\" --dir-range 000960 003840\n```\n\n1. Within selected subfolders: only one file index (e.g., index 7. index starts from 0)\n\n```\npython convert_dm_pm_to_nc.py --root \"$ROOT\" --dir 000960 --one 7\n```\n\n1. Within selected subfolders: a range of file indices (inclusive)\n\n```\npython convert_dm_pm_to_nc.py --root \"$ROOT\" --dir 000960 --range 0 3\n```\n\nNotes\n\n“file index” refers to the ```*_dm_000007p_*``` number → 7.\n\nIf the matching pm file is missing, the script logs SKIP and continues.\n\nWith tqdm installed, you get a progress bar and a ```[i/total] WROTE \u003cpath\u003e``` line per output.\n\n## Selecting variables\n\nBy default, the script loads exactly the variables requested in the project spec:\n\n### Default variables (28 total)\n\n**3D Thermodynamic** (103 levels):\n\n- `TT` - Temperature (K)\n- `PX` - Pressure (Pa)\n- `GZ` - Geopotential height (m above surface)\n- `WW` - Vertical velocity (Pa/s)\n- `H2O`, `CO2`, `O3`, `CO` - Trace gases\n- `T9` - Temperature perturbation\n- `DVM1`, `DVM2`, `DVM3` - Dust moments\n- `RWIC` - Ice particle radius\n\n**3D Momentum** (102 levels):\n\n- `UU` - Eastward wind (m/s)\n- `VV` - Northward wind (m/s)\n\n**2D Surface**:\n\n- `P0` - Surface pressure (Pa)\n- `MTSF` - Surface temperature (K)\n- `MLOC` - Local time\n- `MALO`, `MCZ`, `MH`, `MCO2`, `MSN` - Additional surface fields\n\n### Output dimensions\n\n- `time`: 1 (unlimited dimension)\n- `lat`: 45 (latitudes, -88° to 88°)\n- `lon`: 91 (longitudes, 0° to 360°)\n- `altitudeT`: 103 (thermodynamic vertical levels)\n- `altitudeM`: 102 (momentum vertical levels)\n\nYou can override:\n\n- Keep all variables present:\n\n```\npython convert_dm_pm_to_nc.py --root \"$ROOT\" --dir 000960 --all-vars\n```\n\n- Keep a custom list (comma-separated, no spaces):\n\n```\npython convert_dm_pm_to_nc.py --root \"$ROOT\" --dir 000960 --vars \"TT,PX,GZ,WW,P0,UU,VV\"\n```\n\n## Output \u0026 logging\n\nNetCDF written to ```netcdf/\u003cSUBDIR\u003e/...nc``` with zlib level 6 (lossless) and shuffle.\n\nConsole output is minimal:\n\nWith tqdm: ```progress bar + [i/total] WROTE \u003coutput_path\u003e```per file.\n\nWithout tqdm: ```[i/total] progress lines with ETA and WROTE``` lines.\n\n## Troubleshooting\n\nMissing pm counterpart → file is SKIPped; check ```pm/\u003cSUBDIR\u003e/``` has the same filenames as ```dm/\u003cSUBDIR\u003e/ (with _pm_)```.\n\nPermissions / disk → ensure netcdf/ is writable and has enough space.\n\nLinux build errors for netCDF4/HDF5 → install system dev libraries (see Install).\n\n---\n\n## Computing Diurnal Mean Cycles\n\nAfter converting RPN files to NetCDF, you can compute mean diurnal cycles (averaged over N Martian sols) using `compute_diurnal_mean.py`.\n\n### What it does\n\n- Groups NetCDF files by hour of day (48 timesteps: 0.0h, 0.5h, ..., 23.5h)\n- Averages each hour across multiple Martian days\n- Outputs one file with 48 timesteps representing a typical 24-hour cycle\n- Uses optimized numba JIT compilation for fast processing\n- Preserves all variables and metadata\n\n### Installation\n\nRequires `numba` in addition to previous dependencies:\n\n```bash\npip install numba\n```\n\n### Basic Usage\n\n**1. Single directory, N days:**\n\n```bash\npython compute_diurnal_mean.py \\\n  --netcdf \"$ROOT/netcdf\" \\\n  --output \"$ROOT/netcdf_mean\" \\\n  --dir 000960 \\\n  --n-days 5\n```\n\n**2. All directories, 10 days each:**\n\n```bash\npython compute_diurnal_mean.py \\\n  --netcdf \"$ROOT/netcdf\" \\\n  --output \"$ROOT/netcdf_mean\" \\\n  --all \\\n  --n-days 10\n```\n\n**3. Range of directories:**\n\n```bash\npython compute_diurnal_mean.py \\\n  --netcdf \"$ROOT/netcdf\" \\\n  --output \"$ROOT/netcdf_mean\" \\\n  --dir-range 000960 003840 \\\n  --n-days 20\n```\n\n### Advanced Options\n\n#### Limit number of means (`--max-means`)\n\nCreate only the first N means (useful for testing or limiting output):\n\n```bash\n# Create only 5 means of 5 days each (= 25 days total)\npython compute_diurnal_mean.py \\\n  --netcdf \"$ROOT/netcdf\" \\\n  --output \"$ROOT/netcdf_mean\" \\\n  --dir 000960 \\\n  --n-days 5 \\\n  --max-means 5\n```\n\n**Output:** 5 files (sols 0-4, 5-9, 10-14, 15-19, 20-24)\n\n#### Filter by Ls range (`--ls-range`)\n\nProcess only files within a specific solar longitude (Ls) range:\n\n```bash\n# Only process Ls 0 to 15°\npython compute_diurnal_mean.py \\\n  --netcdf \"$ROOT/netcdf\" \\\n  --output \"$ROOT/netcdf_mean\" \\\n  --all \\\n  --n-days 10 \\\n  --ls-range 0 15\n```\n\n#### Cross-directory mode (`--cross-dirs`)\n\nAllow means to span across multiple directories (treats all selected directories as one continuous dataset):\n\n```bash\n# 30-day means that can span across directory boundaries\npython compute_diurnal_mean.py \\\n  --netcdf \"$ROOT/netcdf\" \\\n  --output \"$ROOT/netcdf_mean\" \\\n  --dir-range 000960 001920 \\\n  --n-days 30 \\\n  --cross-dirs\n```\n\n**Without `--cross-dirs`:** Each directory processed separately  \n**With `--cross-dirs`:** All files treated as continuous timeline\n\n**Output location:** `netcdf_mean/cross_dirs/`\n\n#### Single mean mode (`--single-mean`)\n\nCreate ONE single mean from ALL files in the specified range (ignores `--n-days` and `--max-means`):\n\n```bash\n# Create one mean Ls 0 to 90°\npython compute_diurnal_mean.py \\\n  --netcdf \"$ROOT/netcdf\" \\\n  --output \"$ROOT/netcdf_mean\" \\\n  --all \\\n  --ls-range 0 90 \\\n  --single-mean\n```\n\n**Output:** One file  \n**Output location:** `netcdf_mean/single_mean/`\n\n### Combined Examples\n\n**Example 1: First directory complete + 5 days from second**\n\n```bash\n# Process first directory completely\npython compute_diurnal_mean.py \\\n  --netcdf \"$ROOT/netcdf\" \\\n  --output \"$ROOT/netcdf_mean\" \\\n  --dir 000960 \\\n  --n-days 5\n\n# Process only first mean (5 days) from second directory\npython compute_diurnal_mean.py \\\n  --netcdf \"$ROOT/netcdf\" \\\n  --output \"$ROOT/netcdf_mean\" \\\n  --dir 001920 \\\n  --n-days 5 \\\n  --max-means 1\n```\n\n**Example 2: Cross-directory with filters**\n\n```bash\n# 5 means of 5 days, only Ls 0-30°, spanning multiple directories\npython compute_diurnal_mean.py \\\n  --netcdf \"$ROOT/netcdf\" \\\n  --output \"$ROOT/netcdf_mean\" \\\n  --dir-range 000960 003840 \\\n  --n-days 5 \\\n  --max-means 5 \\\n  --ls-range 0 30 \\\n  --cross-dirs\n```\n\n### Output naming\n\n**Standard mode:**\n\n```\nInput:  netcdf/000960/hl-b274_000000p_ls000_0000.nc\nOutput: netcdf_mean/000960/hl-b274_000000p_ls000_0000_sol000to004_5days_mean.nc\n```\n\n**Cross-directory mode:**\n\n```\nOutput: netcdf_mean/cross_dirs/hl-b274_000000p_ls000_0000_sol000to029_30days_mean_crossdir.nc\n```\n\n**Single mean mode:**\n\n```\nOutput: netcdf_mean/single_mean/hl-b274_000000p_ls000_0000_to_ls090_0000_sol000to500_501days_single_mean.nc\n```\n\nThe filename includes:\n\n- Starting file index (`000000p`)\n- Ls range (`ls000_0000` or `ls000_0000_to_ls090_0000`)\n- Sol range (`sol000to004`)\n- Number of days averaged (`5days`)\n- Mode indicator (`mean`, `crossdir`, or `single_mean`)\n\n### Command Reference\n\n```\nusage: compute_diurnal_mean.py --netcdf PATH --output PATH \n                               [--dir DIR | --all | --dir-range START END]\n                               [--n-days N] [--max-means N] \n                               [--ls-range MIN MAX] [--mars-year MY] [--ls-start LS]\n                               [--lookup FILE] [--cross-dirs] [--single-mean]\n\nRequired arguments:\n  --netcdf PATH          Root directory containing NetCDF subdirs\n  --output PATH          Output directory for mean files\n  \nDirectory selection (required unless using --mars-year):\n  --dir DIR              Process single subdirectory\n  --all                  Process all subdirectories\n  --dir-range START END  Process range of subdirectories\n\nOptional arguments:\n  --n-days N            Number of days to average per mean (default: 1)\n                        Ignored with --single-mean\n  --max-means N         Maximum number of means to compute (default: all)\n                        Ignored with --single-mean\n  --ls-range MIN MAX    Filter files by Ls range (e.g., --ls-range 0 15)\n                        Example: 0 90 for spring, 90 180 for summer\n  --cross-dirs          Allow means to span across directories\n                        Treats all selected directories as continuous dataset\n  --single-mean         Create ONE mean from ALL files in range\n                        Useful for seasonal/period averages\n\nMars Year arguments (advanced):\n  --mars-year MY        Mars Year number (e.g., 34, 35)\n                        Automatically enables cross-directory search\n                        Makes directory selection optional\n  --ls-start LS         Starting Ls for Mars Year mode (e.g., 9.61)\n  --lookup FILE         Mars Year lookup file (.xlsx or .csv)\n                        Required when using --mars-year\n```\n\n### Mars Year Lookup (Advanced)\n\nAutomatically find starting directories using Mars Year and Ls!\n\n**Simplified usage** - no need to specify `--all` when using `--mars-year`:\n\n```bash\npython compute_diurnal_mean.py \\\n  --netcdf \"$ROOT/netcdf\" \\\n  --output \"$ROOT/netcdf_mean\" \\\n  --lookup Mars_year_Ls_timestep_list.xlsx \\\n  --mars-year 34 \\\n  --ls-start 9.61 \\\n  --n-days 2 \\\n  --max-means 1\n```\n\n**What it does:**\n\n- Reads Excel/CSV lookup table with Mars Year, Ls ranges, and directories\n- Automatically finds the starting directory for your Mars Year + Ls\n- **Automatically searches all directories** (no need for `--all`)\n- Computes means starting from that Ls\n- Adds `MY34` to output filename for easy identification\n\n**Requirements:**\n\n```bash\npip install pandas openpyxl\n```\n\n**Lookup file format:**\nThe lookup file should have columns:\n\n- `MY` - Mars Year (e.g., 34, 35)\n- `Ls start` - Starting Ls for this range\n- `Ls end` - Ending Ls for this range  \n- `timestep start` - First timestep in range\n- `timestep end` - Last timestep in range\n- `directory start` - Directory containing these timesteps\n\n**Mars Year parameters:**\n\n- `--mars-year MY` - Mars Year number (e.g., 34, 35) - **automatically enables cross-directory search**\n- `--ls-start LS` - Starting Ls (e.g., 9.61, 30.0)\n- `--lookup FILE` - Path to Excel (.xlsx) or CSV lookup file (required with --mars-year)\n\n**Example outputs:**\n\n```\n# Without Mars Year\nhl-b274_000000p_ls007_1234_sol000to004_5days_mean.nc\n\n# With Mars Year\nhl-b274_000000p_ls007_1234_MY34_sol000to004_5days_mean.nc\n```\n\n**Notes:**\n\n- `--mars-year` automatically enables cross-directory search (searches all directories for matching timesteps)\n- Can combine with `--max-means` to limit output\n- Can combine with `--ls-range` for additional filtering\n- `--lookup` is required when using `--mars-year`\n\n### Help\n\nFor full help including examples:\n\n```bash\npython compute_diurnal_mean.py --help\n```\n\n---\n\n## Related Resources\n\n### This Project\n\n- **Source Code:** [github.com/ludvdber/gem-mars-rpn2netcdf](https://github.com/ludvdber/gem-mars-rpn2netcdf)\n- **Institution:** [Royal Belgian Institute for Space Aeronomy (BIRA-IASB)](https://www.aeronomie.be/)\n\n### GEM-Mars Model \u0026 Tools\n\n- **fstd2nc Library:** [github.com/neishm/fstd2nc](https://github.com/neishm/fstd2nc) - Read RPN/FSTD files\n- **xarray Documentation:** [docs.xarray.dev](https://docs.xarray.dev/) - NetCDF manipulation in Python\n\n### NetCDF \u0026 CF Conventions\n\n- **CF-1.10 Conventions:** [cfconventions.org](http://cfconventions.org/) - Climate and Forecast metadata standard\n- **NetCDF Documentation:** [unidata.ucar.edu/software/netcdf](https://www.unidata.ucar.edu/software/netcdf/) - NetCDF format specs\n\n### Visualization Tools\n\n- **Paraview:** [paraview.org](https://www.paraview.org/) - 3D scientific visualization\n- **Panoply:** [giss.nasa.gov/tools/panoply](https://www.giss.nasa.gov/tools/panoply/) - NetCDF/HDF viewer from NASA\n\n### Performance Tools\n\n- **Numba:** [numba.pydata.org](https://numba.pydata.org/) - JIT compiler (used in compute_diurnal_mean.py)\n- **Dask:** [dask.org](https://dask.org/) - Parallel computing library\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fludvdber%2Fgem-mars-rpn2netcdf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fludvdber%2Fgem-mars-rpn2netcdf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fludvdber%2Fgem-mars-rpn2netcdf/lists"}