{
  "access": {
    "embargo": {
      "active": false,
      "reason": null
    },
    "files": "public",
    "record": "public",
    "status": "open"
  },
  "created": "2026-05-21T07:30:27.840980+00:00",
  "custom_fields": {
    "code:codeRepository": "https://github.com/osmose-model/osmose"
  },
  "deletion_status": {
    "is_deleted": false,
    "status": "P"
  },
  "files": {
    "count": 1,
    "enabled": true,
    "entries": {
      "osmose-model/osmose-v4.4.0.zip": {
        "access": {
          "hidden": false
        },
        "checksum": "md5:ca78789e448b9dac48a969008f431ded",
        "ext": "zip",
        "id": "3c284c2e-426b-4b4f-a904-671eca746dc2",
        "key": "osmose-model/osmose-v4.4.0.zip",
        "links": {
          "container": "https://zenodo.org/api/records/20322216/files/osmose-model/osmose-v4.4.0.zip/container",
          "content": "https://zenodo.org/api/records/20322216/files/osmose-model/osmose-v4.4.0.zip/content",
          "self": "https://zenodo.org/api/records/20322216/files/osmose-model/osmose-v4.4.0.zip"
        },
        "metadata": null,
        "mimetype": "application/zip",
        "size": 35775369,
        "storage_class": "L"
      }
    },
    "order": [],
    "total_bytes": 35775369
  },
  "id": "20322216",
  "is_draft": false,
  "is_published": true,
  "links": {
    "access": "https://zenodo.org/api/records/20322216/access",
    "access_grants": "https://zenodo.org/api/records/20322216/access/grants",
    "access_links": "https://zenodo.org/api/records/20322216/access/links",
    "access_request": "https://zenodo.org/api/records/20322216/access/request",
    "access_users": "https://zenodo.org/api/records/20322216/access/users",
    "archive": "https://zenodo.org/api/records/20322216/files-archive",
    "archive_media": "https://zenodo.org/api/records/20322216/media-files-archive",
    "communities": "https://zenodo.org/api/records/20322216/communities",
    "communities-suggestions": "https://zenodo.org/api/records/20322216/communities-suggestions",
    "doi": "https://doi.org/10.5281/zenodo.20322216",
    "draft": "https://zenodo.org/api/records/20322216/draft",
    "file_modification": "https://zenodo.org/api/records/20322216/file-modification",
    "files": "https://zenodo.org/api/records/20322216/files",
    "latest": "https://zenodo.org/api/records/20322216/versions/latest",
    "latest_html": "https://zenodo.org/records/20322216/latest",
    "media_files": "https://zenodo.org/api/records/20322216/media-files",
    "parent": "https://zenodo.org/api/records/7628348",
    "parent_doi": "https://doi.org/10.5281/zenodo.7628348",
    "parent_doi_html": "https://zenodo.org/doi/10.5281/zenodo.7628348",
    "parent_html": "https://zenodo.org/records/7628348",
    "preview_html": "https://zenodo.org/records/20322216?preview=1",
    "quota_increase": "https://zenodo.org/api/records/20322216/quota-increase",
    "request_deletion": "https://zenodo.org/api/records/20322216/request-deletion",
    "requests": "https://zenodo.org/api/records/20322216/requests",
    "reserve_doi": "https://zenodo.org/api/records/20322216/draft/pids/doi",
    "self": "https://zenodo.org/api/records/20322216",
    "self_doi": "https://doi.org/10.5281/zenodo.20322216",
    "self_doi_html": "https://zenodo.org/doi/10.5281/zenodo.20322216",
    "self_html": "https://zenodo.org/records/20322216",
    "self_iiif_manifest": "https://zenodo.org/api/iiif/record:20322216/manifest",
    "self_iiif_sequence": "https://zenodo.org/api/iiif/record:20322216/sequence/default",
    "versions": "https://zenodo.org/api/records/20322216/versions"
  },
  "media_files": {
    "count": 0,
    "enabled": false,
    "entries": {},
    "order": [],
    "total_bytes": 0
  },
  "metadata": {
    "additional_descriptions": [
      {
        "description": "If you use this software, please cite it as below.",
        "type": {
          "id": "notes",
          "title": {
            "de": "Anmerkungen",
            "en": "Notes"
          }
        }
      }
    ],
    "creators": [
      {
        "person_or_org": {
          "family_name": "Barrier",
          "given_name": "Nicolas",
          "identifiers": [
            {
              "identifier": "0000-0002-1693-4719",
              "scheme": "orcid"
            }
          ],
          "name": "Barrier, Nicolas",
          "type": "personal"
        }
      },
      {
        "person_or_org": {
          "family_name": "Oliveros-Ramos",
          "given_name": "Ricardo",
          "identifiers": [
            {
              "identifier": "0000-0002-8069-2101",
              "scheme": "orcid"
            }
          ],
          "name": "Oliveros-Ramos, Ricardo",
          "type": "personal"
        }
      },
      {
        "person_or_org": {
          "family_name": "Verley",
          "given_name": "Philippe",
          "identifiers": [
            {
              "identifier": "0000-0002-5686-2764",
              "scheme": "orcid"
            }
          ],
          "name": "Verley, Philippe",
          "type": "personal"
        }
      },
      {
        "person_or_org": {
          "family_name": "Ernande",
          "given_name": "Bruno",
          "identifiers": [
            {
              "identifier": "0000-0002-0727-5774",
              "scheme": "orcid"
            }
          ],
          "name": "Ernande, Bruno",
          "type": "personal"
        }
      },
      {
        "person_or_org": {
          "family_name": "Lau-Medrano",
          "given_name": "Wencheng",
          "identifiers": [
            {
              "identifier": "0000-0002-7979-9710",
              "scheme": "orcid"
            }
          ],
          "name": "Lau-Medrano, Wencheng",
          "type": "personal"
        }
      },
      {
        "person_or_org": {
          "family_name": "Luj\u00e1n",
          "given_name": "Criscely",
          "identifiers": [
            {
              "identifier": "0000-0003-2658-7340",
              "scheme": "orcid"
            }
          ],
          "name": "Luj\u00e1n, Criscely",
          "type": "personal"
        }
      },
      {
        "person_or_org": {
          "family_name": "Morell",
          "given_name": "Alaia",
          "identifiers": [
            {
              "identifier": "0000-0003-3719-4462",
              "scheme": "orcid"
            }
          ],
          "name": "Morell, Alaia",
          "type": "personal"
        }
      },
      {
        "person_or_org": {
          "family_name": "Travers-Trolet",
          "given_name": "Morgane",
          "identifiers": [
            {
              "identifier": "0000-0003-1493-662X",
              "scheme": "orcid"
            }
          ],
          "name": "Travers-Trolet, Morgane",
          "type": "personal"
        }
      },
      {
        "person_or_org": {
          "family_name": "Velez",
          "given_name": "Laure",
          "identifiers": [
            {
              "identifier": "0000-0001-9555-6770",
              "scheme": "orcid"
            }
          ],
          "name": "Velez, Laure",
          "type": "personal"
        }
      },
      {
        "person_or_org": {
          "family_name": "Shin",
          "given_name": "Yunne-Jai",
          "identifiers": [
            {
              "identifier": "0000-0002-7259-9265",
              "scheme": "orcid"
            }
          ],
          "name": "Shin, Yunne-Jai",
          "type": "personal"
        }
      }
    ],
    "description": "<p><strong>Full Changelog</strong>: https://github.com/osmose-model/osmose/compare/4.3.3...v4.4.0</p>\n<h1>\ud83c\udf0a OSMOSE 4.4.0 \u2014 Java Release Notes</h1>\n<h2>1. \ud83c\udfaf Overview</h2>\n<p>This release introduces <strong>major architectural improvements</strong>, <strong>new biological capabilities</strong>, <strong>expanded economic modeling</strong>, and <strong>significant refactoring</strong> of internal processes, especially:</p>\n<ul>\n<li><strong>Background species system overhaul</strong></li>\n<li><strong>Region\u2011aware mortality</strong></li>\n<li><strong>Fishing &amp; discards tracked in numbers</strong></li>\n<li><strong>Maturity ogive (stochastic reproduction)</strong> (see <a href=\"https://github.com/osmose-model/osmose/wiki/Reproduction#stochastic-maturity\">here</a> for details)</li>\n<li><strong>New egg size bioenergetics formulation</strong></li>\n<li><strong>Reworked restart logic</strong></li>\n<li><strong>Large configuration key migration</strong></li>\n<li><strong>Simplified bioenergetics computation when lack of data</strong> (see <a href=\"https://github.com/osmose-model/osmose/wiki/Bioenergetic-module:-Simplified-equations\">Simplified Bioenergetics</a>)</li>\n<li><strong>Post-reproduction mortality</strong> (see <a href=\"https://github.com/osmose-model/osmose/wiki/Mortality:-Post%E2%80%90reproduction-mortality\">here</a>)</li>\n</ul>\n<p>These changes modernize the modeling framework and extend its biological, ecological, and economic realism.</p>\n\n\n<h2>1. \u2699\ufe0f Configuration Changes (User Level)</h2>\n<h3>1.1. Renamed (breaking) configuration keys</h3>\n<h4>Module toggles</h4>\n<p>| Old Key                      | New Key                                 |\n|------------------------------|-----------------------------------------|\n| <code>simulation.bioen.enabled</code>   | <code>module.bioenergetics.enabled</code>          |\n| <code>simulation.genetic.enabled</code> | <code>module.genetics.enabled</code>               |\n| <code>fisheries.enabled</code>          | <code>module.multispecies.fisheries.enabled</code> |\n| <code>economy.enabled</code>            | <code>module.bioeconomics.enabled</code>           |</p>\n<h4>Restart system</h4>\n<p>| Old Key | New Key |\n|---------------------------------|---------------------------------------|\n| <code>output.restart.enabled</code> | <code>simulation.restart.enabled</code> |\n| <code>output.restart.recordfrequency.ndt</code> | <code>simulation.restart.recordfrequency.ndt</code> |\n| <code>output.restart.spinup</code> | <code>simulation.restart.spinup.nyear</code> |</p>\n<h4>Bioenergetic module</h4>\n<p>| Old Key | New Key |\n|------------------------------------|------------------------------------|\n| <code>predation.ingestion.rate.max.bioen.spX</code> | <code>predation.ingestion.rate.max.spX</code> |\n| <code>predation.coef.ingestion.rate.max.larvae.bioen.sp</code> | <code>predation.larval.ingestion.rate.increase.ratio.spX</code> |\n| <code>species.bioen.maturity.eta.spX</code> | <code>species.maturity.eta.spX</code> |\n| <code>species.bioen.maturity.r.spX</code> | <code>species.maturity.r.spX</code> |\n| <code>species.bioen.maturity.m0.spX</code> | <code>species.bioen.maturity.m0.spX</code> |\n| <code>species.bioen.maturity.m1.spXX</code> | <code>species.maturity.m1.spX</code> |</p>\n<p>These renames are <strong>mandatory for existing configurations</strong>.</p>\n\n\n<h3>1.2. New configuration keys</h3>\n<h4>Post-reproduction mortality</h4>\n<ul>\n<li><code>species.reproduction.strategy.sp#</code> = <code>iteroparous</code> or <code>semelparous</code></li>\n<li><code>species.reproduction.postspawning.survivaltime.sp#</code> = post-reproduction survival time (in years). Used only for <code>semelparous</code></li>\n</ul>\n<h4>Simulation &amp; reproducibility</h4>\n<ul>\n<li><code>simulation.fixed.seed.enabled</code>: used to control the stochasticity of a simulation and allow replicable runs</li>\n<li><code>simulation.nschool.multiplier</code>: Parameter to multiply the number of schools for all species (default one):</li>\n</ul>\n<h4>Maturity ogive</h4>\n<p>See <a href=\"https://github.com/osmose-model/osmose/wiki/Reproduction#stochastic-maturity\">here</a> for details</p>\n<ul>\n<li><code>species.maturity.mode</code>: controls whether stochastic (<code>stochastic</code>) or deterministic (<code>legacy</code>) production is used.</li>\n<li><code>species.maturity.l50.sp#</code>: mean of the gaussian - <code>species.maturity.l75.sp#</code></li>\n</ul>\n<h4>Egg size (bioenergetics)</h4>\n<ul>\n<li><code>species.egg.density.sp#</code>: density of eggs (in $g.cm^{-3}$) used to compute length from weight.</li>\n</ul>\n<h4>Background species &amp; biomass scaling</h4>\n<ul>\n<li><code>species.multiplier.sp#</code>: multiplier to control background species biomass</li>\n<li><code>species.multiplier.log.sp#</code>: multiplier to control background species biomass (in log value)</li>\n</ul>\n<h4>Background movement &amp; map handling</h4>\n<ul>\n<li><code>movement.randomwalk.range.sp#</code>: allow to specify the range of random walk for background species.</li>\n<li><code>movement.netcdf.enabled</code>: allow map distributions from NetCDF for Background species</li>\n</ul>\n<h4>Bioeconomics module</h4>\n<p>The bioeconomic module is now functional. Parameters are fully described <a href=\"https://github.com/osmose-model/osmose/wiki/Economic-Module\">here</a></p>\n<ul>\n<li><code>species.stock.elasticity.sp#</code></li>\n<li><code>baseline.costs.t0.sp#</code></li>\n<li><code>price.time.trend.sp#</code></li>\n<li><code>species.consumption.elasticity.sp#</code></li>\n<li><code>species.sizeconsumption.elasticity.sp#</code></li>\n<li><code>species.size.preference.sp#</code></li>\n<li><code>weight.fish.consumption</code></li>\n<li><code>substitution.elasticity</code></li>\n<li><code>elasticity.demand.fish</code></li>\n</ul>\n<h4>Gradient based movements</h4>\n<p>See details <a href=\"https://github.com/osmose-model/osmose/wiki/Movement:-gradient-based-movements\">here</a></p>\n<ul>\n<li><code>movement.random.walk.coef.sp#</code>: Random walk coefficient (between 0 and 1)</li>\n<li><code>movement.base.search.radius.sp#</code>: perception (integer, ranging from 1 to 0)</li>\n</ul>\n<h4>Predation on LTL</h4>\n<ul>\n<li><code>simulation.resources.computePercent.legacy</code>: if set to True, the LTL percentage that is eaten by a school is computed based on the original linear relationship. Else, it will use a $\\log$ relationship.</li>\n</ul>\n<h4>Bioenergetics</h4>\n<p>Parameters to control whether a simplified bioenergetic implementation should be used (see <a href=\"https://github.com/osmose-model/osmose/wiki/Bioenergetic-module:-Simplified-equations\">here</a> for details)</p>\n<ul>\n<li><code>species.bioenergetics.model.sp</code>: <code>full</code> or <code>simple</code></li>\n<li><code>predation.efficiency.critical.spX</code></li>\n<li><code>species.temperature.tmin.spX</code></li>\n<li><code>species.temperature.tmax.spX</code></li>\n<li><code>species.temperature.topt.spX</code></li>\n<li><code>predation.ingestion.rate.max.spX</code></li>\n</ul>\n\n\n<h2>3. \u2b50 User\u2011Facing Changes</h2>\n<h3>3.1. Major New Features</h3>\n<h4>Gradient-based movement distribution</h4>\n<ul>\n<li>Gradient based spatial distribution has been included (<a href=\"https://github.com/osmose-model/osmose/wiki/Movement:-gradient-based-movements\">Gradient based movements</a>)</li>\n</ul>\n<h4>LTL predation</h4>\n<ul>\n<li>Possibility to use a log version of the <code>computePercent</code> method</li>\n</ul>\n<h4>\u2714 Region\u2011specific mortality</h4>\n<p>Mortality is now tracked <strong>per output region</strong>. Arrays such as <code>nDead</code> and <code>ageDeath</code> are now 2\u2011dimensional: <code>[region][mortality_cause]</code>.</p>\n<h4>\u2714 Fishing &amp; discards tracked in numbers</h4>\n<p>Fishing/discard tracking moved from <strong>biomass</strong> to <strong>abundance</strong>:</p>\n<ul>\n<li><code>fishedBiomass</code> \u2192 <code>fishedAbundance</code></li>\n<li><code>discardedBiomass</code> \u2192 <code>discardedAbundance</code></li>\n<li>Biomass now computed on demand using abundance \u00d7 mass functions.</li>\n</ul>\n<h4>\u2714 Background species &amp; maps overhaul</h4>\n<p>A new full subsystem handles background species:</p>\n<ul>\n<li>Background schools are now real \"schools\" integrated into the simulation</li>\n<li>Background movement powered by maps (CSV/NetCDF)</li>\n<li>New classes for background distribution and filtering</li>\n<li>Background schools populate the grid using class-based biomass and spatial maps</li>\n<li>Full per-timestep movement/redistribution support</li>\n<li>Consistent inclusion of background schools in outputs</li>\n</ul>\n\n\n<h3>3.2. Biological Process Enhancements</h3>\n<h4>\u2714 Stochastic maturity ogive</h4>\n<p>Optional probabilistic (not deterministic) maturity (see <a href=\"https://github.com/osmose-model/osmose/wiki/Reproduction#stochastic-maturity\">here</a> for details):</p>\n<ul>\n<li>Uses parameters <code>species.maturity.l50.sp#</code> &amp; <code>species.maturity.l75.sp#</code></li>\n<li>A normal CDF calculates probability of maturing between timesteps</li>\n<li>Once mature, always mature</li>\n</ul>\n<h4>\u2714 Improved egg size under bioenergetics</h4>\n<p>Under the bioenergetics module:</p>\n<ul>\n<li>Egg size uses a <strong>spherical egg</strong> model based on density</li>\n<li>New config key: <code>species.egg.density.sp#</code></li>\n</ul>\n<p>This replaces the adult-coefficient-based egg mass\u2013length conversion.</p>\n\n\n<h3>3.3. Expanded Bioeconomics Module</h3>\n<p>Economic modelling expanded significantly:</p>\n<ul>\n<li>Harvesting costs</li>\n<li>Consumer utility of fish consumption</li>\n<li>Species &amp; size\u2011class prices</li>\n<li>Profit and profit margin</li>\n<li>Multi\u2011elasticity modeling</li>\n<li>Multi\u2011dimensional harvested/accessible biomass arrays: <code>[fishery][species][size-class]</code></li>\n</ul>\n<p>New parameters include elasticities, cost time trends, size preferences and more.</p>\n\n\n<h3>3.4. Simulation &amp; Restart Enhancements</h3>\n<h4>\u2714 More robust restart system</h4>\n<ul>\n<li>Restart keys migrated to <code>simulation.restart.*</code></li>\n<li>Intelligent fallback between plain and per-rank files</li>\n<li>Required global attribute in restart NetCDF: <code>step</code></li>\n<li>Improved error messages</li>\n</ul>\n<h4>\u2714 Deterministic simulation mode</h4>\n<p><code>simulation.fixed.seed.enabled</code> enforces reproducible random number generation for:</p>\n<ul>\n<li>Movement</li>\n<li>Reproduction</li>\n<li>Genetics</li>\n<li>Resource forcing</li>\n<li>Fishing selectivity</li>\n</ul>\n\n\n<h3>3.5. Output Behavior Improvements</h3>\n<h4>\u2714 NetCDF chunking default changed</h4>\n<p>Default chunking now uses the <strong>standard NetCDF-4 chunking strategy</strong> for improved performance.</p>\n<h4>\u2714 Background species always included in outputs</h4>\n<p>Refactor ensures consistent treatment of background schools in spatial, fisheries, mortality, and predator-prey outputs.</p>\n\n\n<h2>4. \ud83d\udca5 Breaking Changes</h2>\n<h4>\u26a0 Fishing/discards API changed</h4>\n<ul>\n<li><code>fishedBy()</code> / <code>discardedBy()</code> replaced by <code>fishedNBy()</code> / <code>discardedNBy()</code></li>\n<li>Fishing inputs/outputs now primarily use <strong>numbers</strong>, not <strong>biomass</strong></li>\n</ul>\n<h4>\u26a0 Mortality API changed</h4>\n<p><code>incrementNdead()</code> now requires the timestep:</p>\n<pre><code class=\"language-java\">incrementNdead(MortalityCause cause, double nDead, int timeStep)\n</code></pre>\n<h4>\u26a0 Region indexing mandatory</h4>\n<p><code>nDead</code>, <code>ageDeath</code>, caught fish, discards, mortality outputs and other arrays now include a <strong>region dimension</strong>.</p>\n<h4>\u26a0 Restart NetCDF must include global attribute <code>step</code></h4>\n<p>Restart files missing this field will cause the simulation to abort.</p>\n<h4>\u26a0 Many configuration keys renamed or restructured</h4>\n<p>Old keys <strong>will not work</strong> without migration.</p>\n<h4>\u26a0 Species background biomass reading and scaling logic changed</h4>\n<p>Existing background configurations relying on older semantics may need adjustment.</p>\n\n\n<h2>5. \ud83d\udc68\u200d\ud83d\udcbb Developer\u2011Facing Notes</h2>\n<h3>5.1. Background Species Refactor</h3>\n<p>A very large subsystem rewrite:</p>\n<ul>\n<li><code>BackgroundProcess</code> executes each timestep</li>\n<li><code>BackgroundMapDistribution</code> controls school movement</li>\n<li><code>BackgroundMapSet</code> handles map loading (CSV/NetCDF)</li>\n<li>Schools moved to cells via probability maps</li>\n<li>Schools reinitialized/reset when maps change</li>\n<li>Background species are tracked with real biomass \u00d7 class distributions</li>\n</ul>\n<p>This will impact any tool, plugin, or analysis code accessing background species.</p>\n\n\n<h3>5.2. Aggregation Interface Changes</h3>\n<p>New abstract methods required in <code>AbstractSchool</code> / <code>IAggregation</code>:</p>\n<ul>\n<li><code>isMature()</code></li>\n<li><code>isAlive()</code></li>\n<li><code>getClassIndex()</code></li>\n<li><code>isOut()</code></li>\n</ul>\n<p>Plus new utilities:</p>\n<ul>\n<li><code>resetAccessiblePreyIndex()</code></li>\n<li><code>addAccessiblePreyIndex()</code></li>\n<li><code>getAccessiblePreyIndex()</code></li>\n</ul>\n<p>Internal arrays:</p>\n<ul>\n<li><code>nDead</code> and <code>ageDeath</code> become 2D arrays <code>[region][cause]</code>.</li>\n</ul>\n\n\n<h3>5.3. Configuration Parsing Changes</h3>\n<ul>\n<li>Many key comparisons now use <code>equalsIgnoreCase()</code></li>\n<li>Path resolution uses <code>getAbsolutePath()</code> instead of <code>getCanonicalPath()</code> (fix for Windows)</li>\n<li>Restart key structure updated</li>\n<li>More defensive parsing for command-line arguments</li>\n</ul>\n\n\n<h3>5.4. Bioeconomics Engine Rewrite</h3>\n<p>Developers integrating with the economy module must update:</p>\n<ul>\n<li>New matrices for biomass accessibility and harvest</li>\n<li>New cost and price calculations</li>\n<li>Multi-parameter elasticity and preference models</li>\n<li>Utility &amp; profit functions rewritten</li>\n<li>Many new configuration points</li>\n</ul>\n\n\n<h3>5.5. Initialization &amp; Restart Logic</h3>\n<ul>\n<li>Genetic diversity and trait values may now be restored from restart files</li>\n<li>Population initialization more modular</li>\n<li>Schools created during reproduction have improved genetic initialization logic</li>\n</ul>\n\n\n<h2>6. \ud83d\udc1e Bug Fixes</h2>\n<ul>\n<li>Correction of the <code>BiomassDietStageOutput.write</code> method. There was a bug in the indexing during the conversion from 2D to 1D.</li>\n<li>In <code>SimulationStep</code>, <code>movementProcess.run()</code> is now called before <code>indicators.initStep()</code>. This in order to make sure that the initial biomass is always less than the total predated biomass.</li>\n<li>In spatial outputs (<code>SpatialAbundanceOutput.java</code> and <code>SpatialBiomassOutput.java</code>), only cut-off ages were working, not cut-off length. This has been corrected.</li>\n<li>Correction in MPA initialization when using restart files. In some cases, the <code>isUpToDate</code> variable of the <code>setMPA</code> method was always <code>true</code>, therefore the fishing effort was never modified. Besides, MPA index as defined in the configuration files (<code>.mpaXX</code>) were expected to start from 0 onward. Now any index can work, as for species.</li>\n<li>Correction in the reading of files from regular expressions. Canonical path was replaced by absolute paths to make it work on Windows</li>\n<li>Correct a bug in <code>Surveys</code> and <code>OutputRegion</code>. When school was out of the domain, the code crashed. Fixed by assuming that outside schools are out of the survey region.</li>\n<li>Correct a bug in the <code>NetcdfPopulator.java</code> when genetic is enabled. The genotype was not instanciated.</li>\n<li>Correct a bug in the <code>RelativeBiomassPopulator.java</code> when genetic and/or bioenegetic was on. Genotype was not instanciated and maturity and gonadic weight were not initialized</li>\n<li>Species name validation now supports hyphens</li>\n</ul>\n\n\n<h2>7. \ud83d\udce6 Summary Table</h2>\n<p>| Category | Summary |\n|--------------------|----------------------------------------------------|\n| <strong>New Features</strong> | Region\u2011specific mortality, stochastic maturity ogive, density-based egg size, background movement maps, expanded bioeconomics |\n| <strong>Breaking Changes</strong> | New fishing/discard APIs, mortality API requires timestep, config key renames, restart requirements, region dimension added |\n| <strong>Behavioral Changes</strong> | NetCDF chunking change, background school process rewrite, new maturity logic, numbers-based fishing |\n| <strong>Developer Refactors</strong> | Background species subsystem, economy engine, school interface changes, initialization/restart logic |\n| <strong>Bug Fixes</strong> | Improved validation, safer parsing, corrected map logic, more robust biomass and egg handling |</p>\n\n\n<h2>8. \u2714 Short Summary</h2>\n<ul>\n<li>Region\u2011specific mortality</li>\n<li>Fishing/discards tracked in numbers</li>\n<li>Background school overhaul (movement maps, biomass classes)</li>\n<li>Stochastic maturity ogive (L50/L75)</li>\n<li>Egg size from spherical-density model</li>\n<li>Bioeconomics: costs, utility, prices, profit</li>\n<li>Config key migration to module.* and simulation.restart.*</li>\n<li>Restart requires global attribute 'step'</li>\n<li>NetCDF chunking uses 'standard' by default</li>\n</ul>\n\n\n<h1>\ud83c\udf0a OSMOSE 4.4.0 \u2014 R Release Notes</h1>\n<h2>\ud83d\ude80 Highlights</h2>\n<ul>\n<li><strong>New end-to-end calibration workflow</strong>: add setup, test, run-model, and check utilities for OSMOSE calibrations, including automatic generation of parameter bounds/templates and observed-data scaffolding.</li>\n<li><strong>Much richer output handling</strong>: improved reading/structuring of fishery &amp; survey outputs, including by-fishery-by-species arrays, time/class aggregation, and functional group rollups.</li>\n<li><strong>Major <code>get_var()</code> upgrade</strong>: new subsetting, safer behavior, and replicate sampling features make extraction of outputs more flexible and robust.</li>\n</ul>\n\n\n<h2>\u2728 New Features</h2>\n<h3>1) Calibration framework (new public API)</h3>\n<p>A complete set of calibration utilities was added, centered around:</p>\n<ul>\n<li><p><strong><code>osmose_calibration_setup()</code></strong>\nCreates a calibration directory structure, writes guess/min/max/phase parameter files, installs scripts/templates, runs pre-flight model checks, and creates (or consumes) observed-data templates plus calibration settings.</p>\n</li>\n<li><p><strong><code>osmose_calibration_test()</code></strong>\nRuns automated tests (data compatibility + sequential and parallel \"smoke tests\") to validate that the calibration environment is correctly configured.</p>\n</li>\n<li><p><strong><code>osmose_calibration_runmodel()</code></strong>\nRuns the calibration-ready model using the calibration directory and parameter sets, with safeguards against mixing calibrated vs non-calibrated parameters.</p>\n</li>\n<li><p><strong><code>osmose_calibration_check()</code></strong>\nRe-runs the model with best parameters from results/restart and returns a calibration object combining simulated/observed/settings/cv.</p>\n</li>\n<li><p><strong><code>osmose_calibration_outputs()</code></strong>\nProduces a curated list of calibration-ready outputs (surveys, landings, catch-at-length, penalties for growth/mortality/collapse/outburst, etc.).</p>\n</li>\n</ul>\n\n\n<h3>2) Calibration parameter helpers (new internal + exported utilities)</h3>\n<p>New helpers make it easier to transform, replicate, and write parameter sets:</p>\n<ul>\n<li>Parameter manipulation &amp; transformations:<ul>\n<li><code>set_par()</code>, <code>transform_par()</code>, <code>replicate_par()</code></li>\n<li><code>logit()</code>, <code>ilogit()</code> helpers</li>\n</ul>\n</li>\n<li>Parameter extraction logic for calibration/grouped parameters:<ul>\n<li><code>get_par2()</code>, <code>get_par_phase()</code>, <code>get_calibration_parameters()</code>, <code>get_osmose_parameter()</code></li>\n</ul>\n</li>\n<li>Writers:<ul>\n<li><code>write_osmose_parameter()</code> (writes guess/min/max/phase entries for a parameter block)</li>\n</ul>\n</li>\n<li>Calibration settings creators:<ul>\n<li><code>.create_calibration_settings()</code> plus type-specific helpers (simple/survey)</li>\n</ul>\n</li>\n</ul>\n\n\n<h3>3) New S3 methods for usability (<code>head()</code>/<code>tail()</code> on OSMOSE outputs)</h3>\n<p>New <code>head.*</code> and <code>tail.*</code> methods preserve OSMOSE output class when slicing:</p>\n<ul>\n<li><code>tail.osmose.biomass</code>, <code>tail.osmose.abundance</code>, <code>tail.osmose.yield</code>, <code>tail.osmose.yieldN</code></li>\n<li><code>head.osmose.biomass</code>, <code>head.osmose.abundance</code>, <code>head.osmose.yield</code>, <code>head.osmose.yieldN</code></li>\n</ul>\n\n\n<h3>4) Configuration checks: egg density validation</h3>\n<p>A new internal check warns when egg density appears unrealistic:</p>\n<ul>\n<li><code>.check_density()</code> computes density from egg weight and egg size and emits warnings for \"lower than seawater\", \"abnormal\", or \"wrong\" density ranges.</li>\n</ul>\n\n\n<h2>\ud83d\udcc8 Output &amp; Data Handling Improvements</h2>\n<h3>1) <code>readOsmoseFiles()</code> gains survey-aware grouping and safer behavior</h3>\n<ul>\n<li>New argument <strong><code>bySurvey</code></strong> (in addition to <code>bySpecies</code>) supports more structured output folder parsing.</li>\n<li>Combined grouping (<code>bySpecies + bySurvey</code>) is supported, with logic based on how many \"grouping dimensions\" are requested.</li>\n<li>Returns <strong><code>NULL</code> when no matching files exist</strong>, avoiding downstream failures.</li>\n</ul>\n\n\n<h3>2) Fishery outputs expanded and reshaped</h3>\n<p>New NetCDF-based fishery outputs are supported and integrated:</p>\n<ul>\n<li>Added reading/representation of:<ul>\n<li><code>yieldByFisheryBySpecies</code>, <code>yieldNByFisheryBySpecies</code>, <code>accessibleBiomassByFishery</code></li>\n</ul>\n</li>\n<li>New reshaping and aggregation helpers:<ul>\n<li><code>.reshapeFishery()</code> (with <code>by=&quot;fishery&quot;|&quot;species&quot;</code> and <code>aggregate=TRUE/FALSE</code>)</li>\n<li>Aggregations across time/class/year:<ul>\n<li><code>.aggregate_catch_bytime()</code>, <code>.aggregate_catch_byclass()</code>, <code>.aggregate_catch_byyear()</code></li>\n</ul>\n</li>\n</ul>\n</li>\n<li>New \"observed.*\" fields are produced from reshaped fishery catches (e.g., <code>observed.landings</code>, <code>observed.discards</code>) to feed calibration workflows.</li>\n</ul>\n\n\n<h3>3) Surveys are treated as first-class outputs</h3>\n<ul>\n<li>Survey outputs now support <code>bySurvey</code> and include additional survey datasets (e.g., mortality/predator pressure) where available.</li>\n<li>Survey outputs can be filtered to their target species based on config.</li>\n</ul>\n\n\n<h3>4) More robust CSV/NetCDF reading</h3>\n<ul>\n<li>CSV readers now fail gracefully and return <code>NULL</code> on read errors instead of erroring.</li>\n<li>NetCDF reader <code>.read_osmose_ncdf()</code> was hardened:<ul>\n<li>uses <code>try(nc_open(...))</code> and returns <code>NULL</code> if opening fails</li>\n<li>adds dimension names (<code>time</code>, <code>species</code>, <code>fishery</code>, <code>replicates</code>) and handles <code>species_names</code> / <code>fisheries_names</code> attributes</li>\n</ul>\n</li>\n</ul>\n\n\n<h2>\ud83e\uddf0 API Enhancements &amp; Behavior Changes</h2>\n<h3>1) <code>get_var()</code> is significantly enhanced</h3>\n<p><code>get_var.osmose()</code> now supports:</p>\n<ul>\n<li>hierarchical subsetting:<ul>\n<li><code>sp</code>, <code>srv</code>, <code>fsh</code> arguments for species / survey / fishery selection</li>\n</ul>\n</li>\n<li>safer behavior:<ul>\n<li><code>no.error=TRUE</code> returns <code>NULL</code> instead of throwing when variables are missing</li>\n</ul>\n</li>\n<li>output shaping and replicate sampling:<ul>\n<li><code>drop</code>, <code>size</code>, <code>random</code>, <code>replace</code> for slicing/sampling replicates</li>\n</ul>\n</li>\n<li>new generic helpers/methods:<ul>\n<li><code>get_var.default()</code>, <code>get_var.osmose.calibration()</code>, <code>get_var.list</code>, <code>get_var.NULL</code></li>\n</ul>\n</li>\n</ul>\n<blockquote>\n<p><strong>Potential breaking change</strong>: code that relied on <code>get_var()</code> erroring on missing variables may need updates if <code>no.error=TRUE</code> is used or propagated.</p>\n</blockquote>\n\n\n<h3>2) Plotting behavior improved for <code>plot.osmose()</code></h3>\n<ul>\n<li><code>plot.osmose()</code> now passes derived metadata (<code>initialYear</code>, <code>freq</code>) when plotting extracted variables, improving plot correctness for time axes.</li>\n</ul>\n\n\n<h3>3) Printing <code>osmose</code> objects is more informative</h3>\n<ul>\n<li><code>print.osmose()</code> now prints model name/version from configuration, replicate count, species list, and a compact list of available outputs (excluding empty/system fields).</li>\n</ul>\n\n\n<h2>\ud83d\udee0\ufe0f Refactoring, Maintenance, and Internal Changes</h2>\n<h3>Cache management cleanup</h3>\n<ul>\n<li><code>cacheManager</code>, <code>cachePath</code>, <code>flushCache</code>, <code>updateCache</code> were refactored:<ul>\n<li>consistent <code>TRUE/FALSE</code>, clearer assignments, explicit <code>return(invisible(NULL))</code></li>\n<li>updated jar URL naming consistency for 4.3.2/4.3.3 entries</li>\n</ul>\n</li>\n</ul>\n\n\n<h3>Version parsing supports 4-part versions</h3>\n<ul>\n<li>Version validation now accepts <strong><code>X.Y.Z.W</code></strong> in addition to <code>X</code>, <code>X.Y</code>, <code>X.Y.Z</code>.</li>\n</ul>\n\n\n<h3>Output trimming helper</h3>\n<ul>\n<li>New <code>.trim_matrix()</code> drops trailing all-<code>NA</code> columns more safely when reading some outputs.</li>\n</ul>\n\n\n<h3>Minor consistency/documentation improvements</h3>\n<ul>\n<li>Author name capitalization normalized (e.g., \"Nicolas BARRIER\").</li>\n<li>Roxygen imports expanded (notably <code>utils::relist/as.relistable</code> and several <code>calibrar</code> functions).</li>\n</ul>\n\n\n<h2>\u26a0\ufe0f Notes for Upgraders</h2>\n<h3>Potential breaking/behavioral changes</h3>\n<ul>\n<li><strong>Fishery outputs</strong>: previous <code>yieldByFishery</code> structures are replaced/extended by new arrays and reshaped derivatives (<code>landingsBy*</code>, <code>discardsBy*</code>, etc.). If you depended on legacy fields, update to the new names.</li>\n<li><strong><code>readOsmoseFiles()</code> grouping</strong>: introducing <code>bySurvey</code> changes how files can be grouped/parsed; calling code may need to specify <code>bySpecies</code>/<code>bySurvey</code> explicitly.</li>\n<li><strong><code>get_var()</code> signature expanded</strong>: if you were using <code>...</code> forwarding into <code>get_var.osmose()</code> you may want to ensure no name collisions with new formal args (<code>sp</code>, <code>srv</code>, <code>fsh</code>, <code>size</code>, etc.).</li>\n</ul>\n\n\n<p>&lt;!--\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n# OSMOSE Release Notes - Version 4.4.0\n\nRelease notes capturing changes from OSMOSE 4.3.3 to 4.4.0\n\n## New Features\n\n### Model Capabilities\n\n-   **Single Cell Mode**: Added possibility to run simulations on a single grid cell via `grid.single.cell.enabled` parameter\n-   **Simplified Bioenergetics Module**: Support for simplified bioenergetics for data-poor species (e.g., invertebrates)\n-   **Gradient-based Spatial Distribution**: New spatial distribution method for fish movements\n-   **Marine Ecological Outputs**: Enhanced outputs for Marine project simulations\n-   **Background Species Management**: Improved initialization and management of background and school species using biomass and `species.biomass.nsteps.year.spX` parameters\n-\n\n### Genetics and Allele Frequency\n\n-   **Size Class in Allele Frequency Outputs**: Allele frequency outputs now include size class information\n-   **Observed Heterozygosity (Htz) Output**: Size class tracking in observed heterozygosity outputs\n-   **Early Genetic Transmission**: When no coding traits exist, genetic transmission can now occur earlier than seeding date\n-   **Mean Genotype Outputs**: Averaged genotype outputs with recording frequency control\n\n### Mortality and Energy Dynamics\n\n-   **Mortality Outputs by Region**: Ability to record mortality outputs on different spatial regions\n-   **Additional Mortality Rates in Log Format**: Support for `mortality.additional.rate.log.spX` parameter for flexible mortality specification\n-   **Imax Correction**: Fixed foraging mortality calculation when traits are not present\n-   **Age and Size at Maturity Outputs**: New outputs for tracking maturity dynamics\n-   **CPU Performance Outputs**: Added `output.cpu.performance.enabled` for monitoring computational performance\n\n### Fisheries and Economic Module\n\n-   **Economic Module**: Fully functional economic module implementation (bioeconomics) with:\n    -   Fish price variation outputs\n    -   Harvesting costs computation\n    -   Profit margin calculations\n    -   Fisherman's profit equations\n    -   Net present value (NPV) calculations\n    -   Social optimum analyses\n-   **Fisheries Accessibility Biomass**: Output of fishery accessible biomass and yields in abundance\n-   **Catch by Numbers**: Fishing computation now in abundance rather than biomass (catch, landings, and discards)\n-   **Fishery Outputs by Class**: New outputs by size/TL class with temporal and spatial disaggregation\n\n### Calibration Improvements\n\n-   **New Calibration Functions**:\n    -   `osmose_calibration_outputs`: Process outputs for calibration\n    -   `osmose_calibration_runmodel`: Run OSMOSE as part of calibration workflow\n    -   `osmose_calibration_setup`, `osmose_calibration_test`, `osmose_calibration_demo`\n-   **Multi-phase Calibration**: Support for multiple calibration phases with independent parameter sets\n-   **Penalty Functions**: New penalties for outburst and collapse detection\n-   **Group-based Parameterization**: Parameters can be modeled by species or fishery groups\n-   **Cluster Computing Support**: Scripts for PBS/SLURM job schedulers (DATARMOR support)\n-   **Template-based Workflow**: Survey calibration templates for streamlined setup\n\n### Reproduction and Growth\n\n-   **New Reproduction Modes**: Separate handling of oviparity (SSB-based) and viviparity (SSN-based) modes\n-   **Dynamic Maturity Check**: Maturation check now performed within school objects\n-   **Stochastic Reproduction**: Enhanced stochastic reproduction processes\n-   **Genetic Transmission in Reproduction**: Full integration of genetic transmission during reproduction\n-   **Bioen Spawning Seasonality**: New spawning seasonality mechanisms for bioenergetic module\n\n### Configuration and Parameterization\n\n-   **Class Definition in Outputs**: Flexible class threshold definitions for output distribution\n-   **Species Names with Special Characters**: Support for dashes (`-`) in species names\n-   **Simulation Start and Stop Parameters**: `simulation.time.start` and parameters for controlling temporal scope\n-   **Nschool Multiplier**: New `simulation.nschool.multiplier` parameter to scale schools across focal species\n-   **Dynamic Assignment**: `simulation.nschool` provides default for species not explicitly specified\n\n### NetCDF and Output Processing\n\n-   **NetCDF-based Parameterization**: Support for NetCDF files for movement distribution and species forcing\n-   **Improved Output Format**: Better organization and processing of NetCDF outputs with independent files by variable\n-   **2D Output Support**: Enhanced 2D outputs (by species and size class)\n-   **Output by Regions/Surveys**: Support for regional and survey-based filtering in outputs\n\n### Data Input and File Handling\n\n-   **Regular Expression File Matching**: Use regex patterns to match input files from directories\n-   **Flexible CSV Input Formats**: Better handling of various CSV separators in input files\n-   **Absolute Path Handling**: Windows compatibility fix using absolute paths instead of canonical paths\n-   **Time Series Management**: New `ByClassTimeSeries` for proportions in background species\n\n### Selectivity and Fishery Modeling\n\n-   **Lognormal Distribution for Selectivity**: Support for lognormal selectivity curves\n-   **Discrete Selectivity Values**: Ability to define selectivity using discrete values instead of curves\n-   **Age Selectivity**: Enhanced support for age-based selectivity (though not for calibration)\n-   **Selectivity Type 9**: New selectivity type implementation (non-parametric)\n-   **Relaxed Selectivity Thresholds**: More flexible deltaL75 thresholds (up to 100% of selectivity)\n\n### Data Analysis and R Package Features\n\n-   **Enhanced Output Reading**: `read_osmose` can handle multi-level disaggregation (surveys and species)\n-   **Survey-based Analysis**: `get_var` and other functions accept survey as additional subsetting argument\n-   **Predator Pressure by Survey/Region**: Regional predator pressure output capability\n-   **Calibration Folder Management**: `read_osmose` handles calibration folders with multiple restart/results files\n-   **New Templates**: Function to create R templates for initialization, calibration, and analysis\n\n## Parameter Changes\n\n### Renamed Parameters\n\n-   Homogenization of module names:\n    -   `simulation.bioen.enabled` \u2192 `module.bioenergetics.enabled`\n    -   `simulation.genetic.enabled` \u2192 `module.genetics.enabled`\n    -   `economy.enabled` \u2192 `module.bioeconomics.enabled`\n    -   `fisheries.enabled` \u2192 `module.multispecies.fisheries.enabled`\n-   Bioen-Osmose parameters for consistency with classical Osmose:\n    -   `predation.ingestion.rate.max.bioen.spX` \u2192 `predation.ingestion.rate.max.spX` (consistency)\n    -   `predation.coef.ingestion.rate.max.larvae.bioen.sp` \u2192 `predation.larval.ingestion.rate.increase.ratio.spX`\n    -   `species.bioen.maturity.eta.spX` \u2192 `species.maturity.eta.spX`\n    -   `species.bioen.maturity.r.spX` \u2192 `species.maturity.r.spX`\n-   `output.fishery.*` \u2192 `output.fisheries.*` (output parameters)\n-   `output.restart.*` \u2192 `simulation.restart.*` (output restart parameters)\n-   `fishing.mortality.enabled` \u2192 `simulation.fishing.mortality.enabled` (clarified)\n-   `species.file.spX` renamed in `species.biomass.file.spX`\n\n### New Parameters\n\n-   `grid.single.cell.enabled`: Enable single-cell mode simulation\n-   `output.cpu.performance.enabled`: Output CPU performance metrics\n-   Background species:\n    -   `species.biomass.spX`: Initialize background species biomass by providing a time-series\n    -   `species.biomass.nsteps.year.spX`: Initialize background species biomass by providing a time-series\n-   `mortality.additional.rate.log.spX`: Additional mortality in log format\n-   `simulation.nschool.multiplier`: Scale schools across focal species\n-   `population.initialization.biomass.log.sp#`: Population initialization biomass in log mode.\n-   `reproduction.mode`: Specify reproduction mode (oviparous/viviparous/etc.)\n-   `species.weight.at.larvae.growth.threshold.age` (W0): Optional (default 0)\n-   `predation.success.disabled.sp`: Disable predation success for specific species\n-   `simulation.resource.computePercent.legacy`: Legacy resource computation mode\n-   `simulation.fixed.seed.enabled`: fix the seed for all the stochastic process (easy control for replicability)\n-   Fisheries grouping parameters for disaggregated analysis\n-   Survey selectivity and other survey-specific parameters\n\n### Deprecated Parameters\n\n-   Paramters to fix seeds are now deprecated and replaced by `simulation.fixed.seed.enabled`:\n    -   `population.initialization.randomseed.fixed`\n    -   `genetics.randomseed.fixed`\n    -   `movement.randomseed.fixed`\n    -   `reproduction.randomseed.fixed`\n    -   `stochastic.mortality.randomseed.fixed`\n\n### Modified Parameter Behavior\n\n-   **Annual Larval Mortality**: Now provided in rates/year instead of rates/time-step (multiply original rates by `simulation.time.ndtperyear`)\n-   **Output Parameters**: `lastYear` and `lastAge` are now inclusive (previously exclusive upper bounds)\n-   **Stochasticity Control**: Simulation output now depends on simulation rank index but is reproducible within replicates\n-   **Species Initialization**: All species (focal, background, resource) must have different indexes\n-   **Sex Ratio**: Default value of 0.5\n-   **Year Max Seeding**: Set to zero when population initialization is true\n\n## Bug Fixes\n\n### Core Simulation\n\n-   **Restart Initialization**: Corrected initialization of restarts from NetCDF files\n-   **Trait Reinitialization**: Fixed trait reinitialization from restart files\n-   **Time Index**: Corrected time index initialization from NetCDF\n-   **Time Step Initialization**: Fixed time-step initialization handling\n-   **Mortality with Infinity**: Fixed numerical issues with infinite mortality values\n-   **Dead School Biomass**: Corrected biomass computation for dead schools, now using initial weight\n-   **School Loop**: Simplified and corrected school iteration logic\n\n### Genetics and Traits\n\n-   **Genetic Key Definition**: Fixed key definition in restart diversity loading\n-   **Genotype Instantiation**: Corrected genotype instantiation in relative biomass populator and NetcdfPopulator\n-   **Maturity Check**: Fixed `isMature` vs `isSexuallyMature` inconsistencies\n-   **Foraging Mortality**: Corrected imax calculation when traits are not present\n\n### Movement and Distribution\n\n-   **Movement Process Ordering**: `movementProcess.run()` now called before `indicators.initStep()` for consistent initial biomass\n-   **Spatial Output Index**: Fixed wrong index in write_nc_coords for spatial outputs\n-   **Cutoff Application**: Spatial outputs now correctly apply cutoff by length (previously only age worked)\n-   **Out-of-Domain Schools**: Fixed crashes when schools moved outside domain (Surveys and OutputRegion)\n-   **Map Distribution**: Corrected legacy_fixed map distribution method to avoid indexing bugs\n-   **Movement Map Timing**: Fixed first time-step map comparison indexing\n\n### Mortality and Feeding\n\n-   **Larval Mortality**: Starvation mortality now only applies if species is older than first feeding age\n-   **Foraging Accessibility**: Fixed accessibility matrix reading with non-standard formatting\n-   **Natural Mortality**: Corrected incrementNDead for resources and background species\n-   **Mortality Outputs**: Numerical stability improved for mortality outputs by stage (EGG, JUVENILE, ADULT)\n-   **Mortality Output Indexing**: Fixed `BiomassDietStageOutput.write` method indexing from 2D to 1D conversion\n\n### Fisheries and Catches\n\n-   **Fished Biomass**: Corrected `getFishedBiomass` function to avoid null pointer exceptions\n-   **Discard Biomass**: Fixed calculation of `discardedBiomass` (no longer exists as separate variable)\n-   **Fishing Effort**: Corrected MPA initialization to properly update fishing effort based on restart files\n-   **Fishing Normalization**: Flag to disable fisheries map normalization works with old fishery class\n-   **Catch by Class**: Fixed temporal and spatial output computation for catch by trophic level\n\n### Background and Resource Species\n\n-   **Background Species Position**: Fixed initialization of background species position (was all at 0,0)\n-   **Background Schools in Diet**: Added background schools to diet computation\n-   **Resource Output**: Fixed bug in resource output where background species were managed with ResourceForcing\n-   **Background Species Initialization**: Corrected `getAllSchools` usage, replaced by `getSchools`\n\n### Output and Netcdf\n\n-   **NetCDF Output Tests**: Corrected outputs (especially NetCDF) with comprehensive JUnit testing\n-   **Spatial Output Consistency**: Removed dead schools from spatial outputs to match aggregated CSV outputs\n-   **Relative Biomass Output**: Fixed when genetic and/or bioenergetic modules are enabled\n-   **Netcdf Multithread Mode**: Forced NetCDF3 format (NetCDF4 causes errors in multithread mode)\n-   **Netcdf Chunking**: Updated chunking strategy with standard as default\n-   **Output Distribution**: Fixed `cutOff` parameter not being taken into account in `OutputWholeRegion`\n\n### Configuration and Initialization\n\n-   **Maturity and Gonad Weight**: Corrected initialization of gonad weight and maturity in relative biomass initialization\n-   **Growth and Mortality Penalties**: Reconfiguration of calibration penalty estimates\n-   **Catch-at-Length Validation**: Improved error handling for null or zero catch-at-length data\n-   **File Path Reconstruction**: Fixed resource reading with proper file path handling\n-   **Array Indexing**: Corrected multiple array indexing issues throughout codebase\n-   **Viviparous Initialization**: Corrected initialization logic for viviparous fish species\n\n### R Package Functions\n\n-   **Configuration Reading**: Improved configuration validation and reading\n-   **Parameter Retrieval**: Fixed `.getPar` to `get_par` with proper species offset handling\n-   **Output Reading**: Enhanced robustness when reading calibration results with multiple files\n-   **Yield Calculations**: Corrected yield computations for different output formats\n-   **Predator Pressure**: Fixed predator pressure calculation by region/survey\n\n## Technical Improvements\n\n-   **GitHub Actions**: Automatic testing of R package (build and check) and Java code (Maven build)\n-   **Code Organization**: Extensive refactoring for consistency across modules\n-   **Documentation**: Improved Quarto documentation with MyST parser migration\n-   **Memory Management**: Replaced HashMaps with arrays where possible for performance\n-   **Java Compilation**: Full migration to Maven build system\n-   **NetCDF Library**: Updated to latest NetCDF Java library with compression features\n-   **Error Messages**: Enhanced error reporting and validation messages\n-   **Performance**: Reduced computation time for new fisheries implementation and school management\n\n## Version Information\n\n-   **Java**: Maven-based compilation with updated NetCDF Java library\n-   **R Package**: Enhanced with new calibration functions and analysis capabilities\n-   **Configuration**: Automatic incremental updates from Osmose 3 and 4.x versions\n\n------------------------------------------------------------------------\n\n# Manually written release notes for OSMOSE 4.4.0\n\n## Parameter changes\n\n-   Renaming of output fisheries parameters (`output.fishery.*` to `output.fisheries.*`).\n-   Multispecies fisheries are activated using `process.multispecies.fisheries.enabled` (replaces fisheries.enabled).\n-   **Annual larval mortality is now provided in rates/year instead of rates/time-step. So make sure to update your configuration file accordingly (multiply your original rates by** `simulation.time.ndtperyear`)\n-   Possiblity to provide additional mortality rates in log format using `&quot;mortality.additional.rate.log.spX` and\n-   Parameter `predation.ingestion.rate.max.bioen.spX` has been renamed `predation.ingestion.rate.max.bioen.spX` to be consistent with the classical Osmose parameter names\n-   Parameter `predation.coef.ingestion.rate.max.larvae.bioen.sp` has been renamed `predation.larval.ingestion.rate.increase.ratio.spX`\n-   Parameter `species.bioen.maturity.eta.spX` has been renamed `species.maturity.eta.spX`\n-   Parameter `species.bioen.maturity.r.spX` has been replaced by `species.maturity.r.spX`\n-   Parameter `species.bioen.maturity.m0.spX` has been replaced by `species.bioen.maturity.m0.spX`\n-   Parameter `species.bioen.maturity.m1.spXX` has been replaced by `species.maturity.m1.spX`\n-   Parameter `fisheries.enabled` has been replaced by `module.multispecies.fisheries.enabled`\n-   Parameter `simulation.bioen.enabled` has been replaced by `module.bioenergetics.enabled`\n-   Parameter `simulation.genetic.enabled` has been replaced by `module.genetics.enabled`\n-   Parameter `economy.enabled` has been replaced by `module.bioeconomics.enabled`\n\n## New features\n\n-   Outputs:\n    -   Add the bioenergetic output of size at maturity.\n    -   Adding computation performance outputs (`output.cpu.performance.enabled`)\n    -   Adding additional genetic outputs (allele frequency outputs, observed and expected heterotrophy)\n    -   Output of fishery accessible biomass, yields in abundance and biomass\n    -   Averaged genotype outputs instead of instantaneous outputs.\n    -   Mortality outputs can now be recorded on different regions\n-   Possibility to have simplified bioenergetics for species with lack of data (invertebrates).\n-   Adding some patches to run Osmose on a single cell. This mode is activated by setting `grid.single.cell.enabled` to `True`. **This mode may be much slower than 2d simulations**\n-   Adding gradient based spatial distribution\n-   New management of background species and schools. Their biomass is now initialized with the `species.biomass.spX` and `species.biomass.nsteps.year.spX` parameters. And their schools are managed in the same way as focal species schools, contrary to having one school per grid cell as in the original implementation.\n-   Fishing by fisheries is now computed in abundance rather than biomass (Ricardo Oliveros-Ramos change).\n-   **New**: fully functional economic module (Emy Cottrant's post-doct)\n\n## Bug fix\n\n-   Correction of the `BiomassDietStageOutput.write` method. There was a bug in the indexing during the conversion from 2D to 1D.\n-   In `SimulationStep`, `movementProcess.run()` is now called before `indicators.initStep()`. This in order to make sure that the initial biomass is always less than the total predated biomass.\n-   In spatial outputs (`SpatialAbundanceOutput.java` and `SpatialBiomassOutput.java`), only cut-off ages were working, not cut-off length. This has been corrected.\n-   Correction in MPA initialization when using restart files. In some cases, the `isUpToDate` variable of the `setMPA` method was always `true`, therefore the fishing effort was never modified. Besides, MPA index as defined in the configuration files (`.mpaXX`) were expected to start from 0 onward. Now any index can work, as for species.\n-   Correction in the reading of files from regular expressions. Canonical path was replaced by absolute paths to make it work on Windows\n-   Correct a bug in `Surveys` and `OutputRegion`. When school was out of the domain, the code crashed. Fixed by assuming that outside schools are out of the survey region.\n-   Added the background schools in the computation of diets.\n-   Correct a bug in resource output: background species are no longer managed with `ResourceForcing`.\n\n--&gt;</p>",
    "publication_date": "2026-05-21",
    "publisher": "Zenodo",
    "related_identifiers": [
      {
        "identifier": "https://github.com/osmose-model/osmose/tree/v4.4.0",
        "relation_type": {
          "id": "issupplementto",
          "title": {
            "de": "Erg\u00e4nzt",
            "en": "Is supplement to"
          }
        },
        "resource_type": {
          "id": "software",
          "title": {
            "de": "Software",
            "en": "Software"
          }
        },
        "scheme": "url"
      }
    ],
    "resource_type": {
      "id": "software",
      "title": {
        "de": "Software",
        "en": "Software"
      }
    },
    "rights": [
      {
        "description": {
          "en": ""
        },
        "id": "gpl-3.0-only",
        "props": {
          "scheme": "spdx",
          "url": "https://www.gnu.org/licenses/gpl-3.0-standalone.html"
        },
        "title": {
          "en": "GNU General Public License v3.0 only"
        }
      }
    ],
    "title": "Object-oriented Simulator of Marine ecOSystEms (OSMOSE)",
    "version": "v4.4.0"
  },
  "parent": {
    "access": {
      "owned_by": {
        "user": "104051"
      },
      "settings": {
        "accept_conditions_text": null,
        "allow_guest_requests": false,
        "allow_user_requests": false,
        "secret_link_expiration": 0
      }
    },
    "communities": {
      "default": "ea7888cb-4a58-43c3-b2ed-a77e2115ad96",
      "entries": [
        {
          "access": {
            "member_policy": "open",
            "members_visibility": "public",
            "record_submission_policy": "open",
            "review_policy": "open",
            "visibility": "public"
          },
          "children": {
            "allow": false
          },
          "created": "2023-01-20T17:06:54.349018+00:00",
          "custom_fields": {
            "subjects": [
              {
                "id": "euroscivoc:317"
              },
              {
                "id": "euroscivoc:489"
              },
              {
                "id": "euroscivoc:323"
              }
            ]
          },
          "deletion_status": {
            "is_deleted": false,
            "status": "P"
          },
          "id": "847d19e5-9891-403c-8120-d5d5f8aa208a",
          "links": {},
          "metadata": {
            "curation_policy": "<p>New uploads in this community must contain publicly distributable material related to the activities of the UMR MARBEC and its partners</p>",
            "organizations": [
              {
                "id": "049dk3691"
              },
              {
                "id": "05q3vnk25"
              },
              {
                "id": "00wh4bp03"
              },
              {
                "id": "edmo:2895"
              },
              {
                "id": "edmo:1054"
              }
            ],
            "page": "<p>UMR MARBEC (MARine Biodiversity, Exploitation &amp; Conservation) is a joint research unit that brings together staff from four main institutions, IRD, Ifremer, the University of Montpellier and CNRS, and a secondary institution, INRAE.</p>\n\n<p>UMR MARBEC working on marine biodiversity exploitation and conversion. More details on <a href=\"http://www.umr-marbec.fr/en\">www.umr-marbec.fr</a></p>\n\n<p>This ZENODO community contains open access material published by the UMR MARBEC&nbsp;members, such as raw data, reports, white papers, presentations, videos, codes, etc.</p>",
            "title": "MARBEC - MARine Biodiversity, Exploitation & Conservation",
            "type": {
              "id": "organization"
            },
            "website": "https://www.umr-marbec.fr"
          },
          "revision_id": 14,
          "slug": "umr-marbec",
          "updated": "2025-02-13T12:29:37.839338+00:00"
        },
        {
          "access": {
            "member_policy": "open",
            "members_visibility": "public",
            "record_submission_policy": "open",
            "review_policy": "open",
            "visibility": "public"
          },
          "children": {
            "allow": false
          },
          "created": "2020-11-16T09:16:56.552243+00:00",
          "custom_fields": {},
          "deletion_status": {
            "is_deleted": false,
            "status": "P"
          },
          "id": "ea7888cb-4a58-43c3-b2ed-a77e2115ad96",
          "links": {},
          "metadata": {
            "title": "Osmose model"
          },
          "revision_id": 2,
          "slug": "osmose",
          "updated": "2026-03-31T09:24:04.628926+00:00"
        }
      ],
      "ids": [
        "847d19e5-9891-403c-8120-d5d5f8aa208a",
        "ea7888cb-4a58-43c3-b2ed-a77e2115ad96"
      ]
    },
    "id": "7628348",
    "pids": {
      "doi": {
        "client": "datacite",
        "identifier": "10.5281/zenodo.7628348",
        "provider": "datacite"
      }
    }
  },
  "pids": {
    "doi": {
      "client": "datacite",
      "identifier": "10.5281/zenodo.20322216",
      "provider": "datacite"
    },
    "oai": {
      "identifier": "oai:zenodo.org:20322216",
      "provider": "oai"
    }
  },
  "revision_id": 4,
  "stats": {
    "all_versions": {
      "data_volume": 10901273313.0,
      "downloads": 284,
      "unique_downloads": 272,
      "unique_views": 1181,
      "views": 1231
    },
    "this_version": {
      "data_volume": 393529059.0,
      "downloads": 11,
      "unique_downloads": 11,
      "unique_views": 56,
      "views": 56
    }
  },
  "status": "published",
  "swh": {},
  "updated": "2026-05-21T07:30:28.288053+00:00",
  "versions": {
    "index": 8,
    "is_latest": false
  }
}