9#ifndef FIMS_POPULATION_DYNAMICS_SIZE_GRID_BUILDER_HPP
10#define FIMS_POPULATION_DYNAMICS_SIZE_GRID_BUILDER_HPP
14#include "../size_grid.hpp"
31 if (edges.
size() < 2) {
32 throw std::runtime_error(
33 "SizeGridBuilder requires at least 2 edges to define a size grid");
41 for (std::size_t
i = 0;
i <
grid.n_bins; ++
i) {
45 if (!
grid.IsConsistent()) {
46 throw std::runtime_error(
47 "SizeGridBuilder produced an inconsistent population size grid");
64 throw std::runtime_error(
65 "SizeGridBuilder requires upper_edge > lower_edge");
69 throw std::runtime_error(
"SizeGridBuilder requires bin_width > 0");
109 if (centers.
size() < 2) {
110 throw std::runtime_error(
111 "SizeGridBuilder requires at least 2 observation-bin centers to "
112 "build fleet edges");
118 throw std::runtime_error(
119 "SizeGridBuilder requires observation-bin centers to be strictly "
127 edges[0] = centers[0] - 0.5 * (centers[1] - centers[0]);
135 edges[centers.
size()] =
136 centers[centers.
size() - 1] +
137 0.5 * (centers[centers.
size() - 1] - centers[centers.
size() - 2]);
163 throw std::runtime_error(
164 "SizeGridBuilder requires at least 1 fleet edge vector to build the "
165 "default population size grid");
176 if (edges.
size() < 2) {
177 throw std::runtime_error(
178 "SizeGridBuilder requires each fleet edge vector to contain at "
185 throw std::runtime_error(
186 "SizeGridBuilder requires fleet edge vectors to be strictly "
Definition fims_vector.hpp:27
void emplace_back(Args &&...args)
Constructs an element in-place at the end.
Definition fims_vector.hpp:389
void resize(size_t s)
Changes the number of elements stored.
Definition fims_vector.hpp:401
size_type size() const
Returns the number of elements.
Definition fims_vector.hpp:299
The population dynamics of FIMS.
Definition catch_at_age.hpp:45
std::shared_ptr< AgeToLengthConversionBase< Type > > BuildAgeToLengthConversionFleet(const std::shared_ptr< Population< Type > > &population, const std::shared_ptr< Fleet< Type > > &fleet)
Build the active age-to-length conversion for a fleet from the current population and fleet state.
Definition runtime.hpp:44
Helper for constructing internally consistent population size grids.
Definition size_grid_builder.hpp:24
static SizeGrid BuildFromEdges(const fims::Vector< double > &edges)
Build a size grid from an explicit vector of bin edges.
Definition size_grid_builder.hpp:30
static SizeGrid BuildRegularGrid(double lower_edge, double upper_edge, double bin_width)
Build a regular size grid from lower edge, upper edge, and bin width.
Definition size_grid_builder.hpp:61
static fims::Vector< double > BuildObservationEdgesFromCenters(const fims::Vector< double > ¢ers)
Build one fleet observation-bin edge vector from stored bin centers.
Definition size_grid_builder.hpp:107
static SizeGrid BuildDefaultFromFleetEdges(const fims::Vector< fims::Vector< double > > &fleet_edges)
Build the default population biological size grid from resolved fleet observation-bin edges.
Definition size_grid_builder.hpp:160
Population-level biological size grid.
Definition size_grid.hpp:26
std::size_t n_bins
Definition size_grid.hpp:27