本文整理汇总了C#中Madingley.FunctionalGroupDefinitions类的典型用法代码示例。如果您正苦于以下问题:C# FunctionalGroupDefinitions类的具体用法?C# FunctionalGroupDefinitions怎么用?C# FunctionalGroupDefinitions使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
FunctionalGroupDefinitions类属于Madingley命名空间,在下文中一共展示了FunctionalGroupDefinitions类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: BinCohorts
//Function to bin cohorts according to the mass bins defined for the catch data
/// <summary>
/// Bin cohorts according to the mass bins defined for the catch data
/// Constructs a list of functional group and cohort indices falling within each mass bin
/// as well as the total biomass available to be fished in each
/// </summary>
/// <param name="c">The grid cell cohorts</param>
/// <param name="fishCatch">Fisheries catch data</param>
public void BinCohorts(GridCellCohortHandler c, InputCatchData fishCatch, FunctionalGroupDefinitions cohortFGs)
{
int mb = 0;
int[] FishFGs = cohortFGs.GetFunctionalGroupIndex("Endo/Ectotherm", "Ectotherm",false);
for (int i = 0; i < BinnedCohorts.Length; i++)
{
BinnedCohorts[i] = new List<Tuple<int[], double>>();
}
foreach (int fg in FishFGs)
{
for (int i = 0; i < c[fg].Count(); i++)
{
//Find the mass bin for this cohort
mb = fishCatch.MassBins.ToList().FindIndex(a => a >= c[fg,i].AdultMass);
if (mb < 0) mb = fishCatch.UnknownMassBinIndex - 1;
//Check if the current bodymass is greater than the proportion of the adult mass
if (c[fg, i].IndividualBodyMass >= c[fg, i].AdultMass * AdultMassProportionFished)
{
//Calculate the total biomass of this cohort
double CohortBiomass = (c[fg, i].IndividualBodyMass + c[fg, i].IndividualReproductivePotentialMass) *
c[fg, i].CohortAbundance;
//Add the indices and total biomass to the bins
BinnedCohorts[mb].Add(new Tuple<int[], double>(new int[] { fg, i }, CohortBiomass));
BinnedTotalModelBiomass[mb] += CohortBiomass;
}
}
}
}
开发者ID:pierovisconti,项目名称:C-sharp-version-of-Madingley-Development,代码行数:40,代码来源:ApplyFishingCatches.cs
示例2: GlobalProcessTracker
/// <summary>
/// Constructor for process tracker: Initialises the trackers for individual processes
/// </summary>
/// <param name="numTimesteps">The number of time steps in the model</param>
/// <param name="lats">The latitudes of active grid cells in the model</param>
/// <param name="lons">The longitudes of active grid cells in the model</param>
/// <param name="cellIndices">List of indices of active cells in the model grid</param>
/// <param name="Filenames">The filenames of the output files to write the tracking results to</param>
/// <param name="trackProcesses">Whether to track processes</param>
/// <param name="cohortDefinitions">The definitions for cohort functional groups in the model</param>
/// <param name="missingValue">The missing value to use in process tracking output files</param>
/// <param name="outputFileSuffix">The suffix to be applied to output files from process tracking</param>
/// <param name="outputPath">The path to the folder to be used for process tracking outputs</param>
/// <param name="trackerMassBins">The mass bins to use for categorising output data in the process trackers</param>
/// <param name="specificLocations">Whether the model is being run for specific locations</param>
/// <param name="initialisation">The Madingley Model initialisation</param>
/// <param name="latCellSize">The size of grid cells latitudinally</param>
/// <param name="lonCellSize">The size of grid cells longitudinally</param>
public GlobalProcessTracker(uint numTimesteps,
float[] lats, float[] lons,
List<uint[]> cellIndices,
SortedList<string, string> Filenames,
Boolean trackProcesses,
FunctionalGroupDefinitions cohortDefinitions,
FunctionalGroupDefinitions stockDefinitions,
double missingValue,
string outputFileSuffix,
string outputPath, MassBinsHandler trackerMassBins,
Boolean specificLocations,
MadingleyModelInitialisation initialisation,
float latCellSize,
float lonCellSize)
{
// Initialise trackers for ecological processes
_TrackProcesses = trackProcesses;
if (_TrackProcesses)
{
_TrackNPP = new GlobalNPPTracker(outputPath, lats.Length, lons.Length, lats, lons, latCellSize, lonCellSize,
(int)numTimesteps,stockDefinitions.GetNumberOfFunctionalGroups(),outputFileSuffix);
}
}
开发者ID:pierovisconti,项目名称:C-sharp-version-of-Madingley-Development,代码行数:43,代码来源:GlobalProcessTracker.cs
示例3: InitializeEcologicalProcess
/// <summary>
/// Initializes an implementation of eating
/// </summary>
/// <param name="gridCellCohorts">The cohorts in the current grid cell</param>
/// <param name="gridCellStocks">The stocks in the current grid cell</param>
/// <param name="madingleyCohortDefinitions">The definitions for cohort functional groups in the model</param>
/// <param name="madingleyStockDefinitions">The definitions for stock functional groups in the model</param>
/// <param name="implementationKey">The name of the implementation of eating to initialize</param>
/// <param name="cellEnvironment">The environment in the current grid cell</param>
/// <remarks>Eating needs to be initialized every time step</remarks>
public void InitializeEcologicalProcess(GridCellCohortHandler gridCellCohorts, GridCellStockHandler gridCellStocks,
FunctionalGroupDefinitions madingleyCohortDefinitions, FunctionalGroupDefinitions madingleyStockDefinitions,
string implementationKey, SortedList<string, double[]> cellEnvironment)
{
// Initialize the implementation of the eating process
Implementations[implementationKey].InitializeEatingPerTimeStep(gridCellCohorts, gridCellStocks,
madingleyCohortDefinitions, madingleyStockDefinitions,cellEnvironment);
}
示例4: TrackPredationTrophicFlow
/// <summary>
/// Track the flow of mass between trophic levels during a predation event
/// </summary>
/// <param name="latitudeIndex">The latitudinal index of the current grid cell</param>
/// <param name="longitudeIndex">The longitudinal index of the current grid cell</param>
/// <param name="fromFunctionalGroup">The index of the functional group being eaten</param>
/// <param name="toFunctionalGroup">The index of the functional group that the predator belongs to</param>
/// <param name="cohortFunctionalGroupDefinitions">The functional group definitions of cohorts in the model</param>
/// <param name="massEaten">The mass eaten during the predation event</param>
/// <param name="predatorBodyMass">The body mass of the predator doing the eating</param>
/// <param name="preyBodyMass">The body mass of the prey doing the eating</param>
/// <param name="initialisation">The Madingley Model initialisation</param>
/// <param name="marineCell">Whether the current cell is a marine cell</param>
public void TrackPredationTrophicFlow(uint latitudeIndex, uint longitudeIndex, int fromFunctionalGroup, int toFunctionalGroup,
FunctionalGroupDefinitions cohortFunctionalGroupDefinitions, double massEaten, double predatorBodyMass, double preyBodyMass,
MadingleyModelInitialisation initialisation, Boolean marineCell)
{
foreach (var o in this.ProcessTrackers)
{
o.TrackPredationTrophicFlow((int)latitudeIndex, (int)longitudeIndex, fromFunctionalGroup, toFunctionalGroup, massEaten, predatorBodyMass, preyBodyMass, marineCell);
}
}
示例5: RunMetabolism
/// <summary>
/// Run metabolism for the acting cohort
/// </summary>
/// <param name="gridCellCohorts">The cohorts in the current grid cell</param>
/// <param name="gridCellStocks">The stocks in the current grid cell</param>
/// <param name="actingCohort">The position of the acting cohort in the jagged array of grid cell cohorts</param>
/// <param name="cellEnvironment">The environment in the current grid cell</param>
/// <param name="deltas">The sorted list to track changes in biomass and abundance of the acting cohort in this grid cell</param>
/// <param name="madingleyCohortDefinitions">The definitions for cohort functional groups in the model</param>
/// <param name="madingleyStockDefinitions">The definitions for the stock functional groups in the model</param>
/// <param name="currentTimestep">The current model time step</param>
/// <param name="currentMonth">The current model month</param>
public void RunMetabolism(GridCellCohortHandler gridCellCohorts, GridCellStockHandler gridCellStocks,
int[] actingCohort, SortedList<string, double[]> cellEnvironment, Dictionary<string, Dictionary<string, double>>
deltas, FunctionalGroupDefinitions madingleyCohortDefinitions, FunctionalGroupDefinitions madingleyStockDefinitions,
uint currentTimestep, uint currentMonth)
{
// Calculate metabolic loss for an individual and add the value to the delta biomass for metabolism
deltas["biomass"]["metabolism"] = -CalculateIndividualMetabolicRate(gridCellCohorts[actingCohort].IndividualBodyMass,
cellEnvironment["Temperature"][currentMonth] + _TemperatureUnitsConvert) * _DeltaT;
// If metabolic loss is greater than individual body mass after herbivory and predation, then set equal to individual body mass
deltas["biomass"]["metabolism"] = Math.Max(deltas["biomass"]["metabolism"],-(gridCellCohorts[actingCohort].IndividualBodyMass + deltas["biomass"]["predation"] + deltas["biomass"]["herbivory"]));
// Add total metabolic loss for all individuals in the cohort to delta biomass for metabolism in the respiratory CO2 pool
deltas["respiratoryCO2pool"]["metabolism"] = -deltas["biomass"]["metabolism"] * gridCellCohorts[actingCohort].CohortAbundance;
}
开发者ID:pierovisconti,项目名称:C-sharp-version-of-Madingley-Development,代码行数:27,代码来源:TMetabolismEndotherm.cs
示例6: RunCrossGridCellEcologicalProcess
/// <summary>
/// Run dispersal
/// </summary>
public void RunCrossGridCellEcologicalProcess(uint[] cellIndex, ModelGrid gridForDispersal, bool dispersalOnly, FunctionalGroupDefinitions madingleyCohortDefinitions, FunctionalGroupDefinitions madingleyStockDefinitions, uint currentMonth)
{
// Create a temporary handler for grid cell cohorts
GridCellCohortHandler WorkingGridCellCohorts;
// Get the lat and lon indices
uint ii = cellIndex[0];
uint jj = cellIndex[1];
// A boolean to check that the environmental layer exists
bool varExists;
// Check to see if the cell is marine
double CellRealm = gridForDispersal.GetEnviroLayer("Realm", 0, ii, jj, out varExists);
// Go through all of the cohorts in turn and see if they disperse
WorkingGridCellCohorts = gridForDispersal.GetGridCellCohorts(ii, jj);
// Loop through cohorts, and perform dispersal according to cohort type and status
for (int kk = 0; kk < WorkingGridCellCohorts.Count; kk++)
{
// Work through the list of cohorts
for (int ll = 0; ll < WorkingGridCellCohorts[kk].Count; ll++)
{
// Check to see if the cell is marine and the cohort type is planktonic
if (CellRealm == 2.0 &&
((madingleyCohortDefinitions.GetTraitNames("Mobility", WorkingGridCellCohorts[kk][ll].FunctionalGroupIndex) == "planktonic") || (WorkingGridCellCohorts[kk][ll].IndividualBodyMass <= PlanktonThreshold)))
{
// Run advective dispersal
Implementations["basic advective dispersal"].RunDispersal(cellIndex, gridForDispersal, WorkingGridCellCohorts[kk][ll], kk, ll, currentMonth);
}
// Otherwise, if mature do responsive dispersal
else if (WorkingGridCellCohorts[kk][ll].MaturityTimeStep < uint.MaxValue)
{
// Run diffusive dispersal
Implementations["basic responsive dispersal"].RunDispersal(cellIndex, gridForDispersal, WorkingGridCellCohorts[kk][ll], kk, ll, currentMonth);
}
// If the cohort is immature, run diffusive dispersal
else
{
Implementations["basic diffusive dispersal"].RunDispersal(cellIndex, gridForDispersal, WorkingGridCellCohorts[kk][ll], kk, ll, currentMonth);
}
}
}
}
示例7: RunEcologicalProcess
/// <summary>
/// Run reproduction
/// </summary>
/// <param name="gridCellCohorts">The cohorts in the current grid cell</param>
/// <param name="gridCellStocks">The stocks in the current grid cell</param>
/// <param name="actingCohort">The position of the acting cohort in the jagged array of grid cell cohorts</param>
/// <param name="cellEnvironment">The environment in the current grid cell</param>
/// <param name="deltas">The sorted list to track changes in biomass and abundance of the acting cohort in this grid cell</param>
/// <param name="madingleyCohortDefinitions">The definitions for cohort functional groups in the model</param>
/// <param name="madingleyStockDefinitions">The definitions for stock functional groups in the model</param>
/// <param name="currentTimeStep">The current model time step</param>
/// <param name="processTracker">An instance of ProcessTracker to hold diagnostics for eating</param>
/// <param name="partial">Thread-locked variables for the parallelised version</param>
/// <param name="specificLocations">Whether the model is being run for specific locations</param>
/// <param name="outputDetail">The level of output detail being used for this model run</param>
/// <param name="currentMonth">The current model month</param>
/// <param name="initialisation">The Madingley Model initialisation</param>
public void RunEcologicalProcess(GridCellCohortHandler gridCellCohorts, GridCellStockHandler gridCellStocks,
int[] actingCohort, SortedList<string, double[]> cellEnvironment, Dictionary<string,Dictionary<string,double>> deltas ,
FunctionalGroupDefinitions madingleyCohortDefinitions, FunctionalGroupDefinitions madingleyStockDefinitions,
uint currentTimeStep, ProcessTracker processTracker, ref ThreadLockedParallelVariables partial,
Boolean specificLocations, string outputDetail, uint currentMonth, MadingleyModelInitialisation initialisation)
{
// Holds the reproductive strategy of a cohort
bool _Iteroparous = madingleyCohortDefinitions.GetTraitNames("reproductive strategy", actingCohort[0])=="iteroparity";
// Assign mass to reproductive potential
Implementations["reproduction basic"].RunReproductiveMassAssignment(gridCellCohorts, gridCellStocks, actingCohort, cellEnvironment, deltas,
madingleyCohortDefinitions, madingleyStockDefinitions, currentTimeStep, processTracker);
// Run reproductive events. Note that we can't skip juveniles here as they could conceivably grow to adulthood and get enough biomass to reproduce in a single time step
// due to other ecological processes
Implementations["reproduction basic"].RunReproductionEvents(gridCellCohorts, gridCellStocks, actingCohort, cellEnvironment,
deltas, madingleyCohortDefinitions, madingleyStockDefinitions, currentTimeStep, processTracker, ref partial, _Iteroparous, currentMonth);
}
示例8: RunWithinCellEcology
/// <summary>
/// Run ecological processes that operate on stocks within a single grid cell
/// </summary>
///<param name="gridCellStocks">The stocks in the current grid cell</param>
///<param name="actingStock">The acting stock</param>
///<param name="cellEnvironment">The stocks in the current grid cell</param>
///<param name="environmentalDataUnits">List of units associated with the environmental variables</param>
///<param name="humanNPPScenario">The human appropriation of NPP scenario to apply</param>
///<param name="madingleyStockDefinitions">The functional group definitions for stocks in the model</param>
///<param name="currentTimeStep">The current model time step</param>
///<param name="burninSteps">The number of time steps to spin the model up for before applying human impacts</param>
///<param name="impactSteps">The number of time steps to apply human impacts for</param>
///<param name="globalModelTimeStepUnit">The time step unit used in the model</param>
///<param name="trackProcesses">Whether to track properties of ecological processes</param>
///<param name="tracker">An instance of the ecological process tracker</param>
///<param name="globalTracker">An instance of the global process tracker</param>
///<param name="currentMonth">The current model month</param>
///<param name="outputDetail">The level of detail to use in outputs</param>
///<param name="specificLocations">Whether to run the model for specific locations</param>
///<param name="impactCell">Whether this cell should have human impacts applied</param>
public void RunWithinCellEcology(GridCellStockHandler gridCellStocks, int[] actingStock, SortedList<string, double[]> cellEnvironment,
SortedList<string, string> environmentalDataUnits, Madingley.Common.ScenarioParameter humanNPPScenario,
FunctionalGroupDefinitions madingleyStockDefinitions,
uint currentTimeStep, uint burninSteps, uint impactSteps, uint recoverySteps, uint instantStep, uint numInstantSteps, string globalModelTimeStepUnit, Boolean trackProcesses,
ProcessTracker tracker,
GlobalProcessTracker globalTracker, uint currentMonth,
string outputDetail, bool specificLocations, Boolean impactCell)
{
if (madingleyStockDefinitions.GetTraitNames("Realm", actingStock[0]) == "marine")
{
// Run the autotroph processor
MarineNPPtoAutotrophStock.ConvertNPPToAutotroph(cellEnvironment, gridCellStocks, actingStock, environmentalDataUnits["LandNPP"],
environmentalDataUnits["OceanNPP"], currentTimeStep, globalModelTimeStepUnit, tracker, globalTracker, outputDetail, specificLocations, currentMonth);
}
else if (madingleyStockDefinitions.GetTraitNames("Realm", actingStock[0]) == "terrestrial")
{
// Run the dynamic plant model to update the leaf stock for this time step
double WetMatterNPP = DynamicPlantModel.UpdateLeafStock(cellEnvironment, gridCellStocks, actingStock, currentTimeStep, madingleyStockDefinitions.
GetTraitNames("leaf strategy", actingStock[0]).Equals("deciduous"), globalModelTimeStepUnit, tracker, globalTracker, currentMonth,
outputDetail, specificLocations);
/// <summary>
double fhanpp = HANPP.RemoveHumanAppropriatedMatter(WetMatterNPP, cellEnvironment, humanNPPScenario, gridCellStocks, actingStock,
currentTimeStep, burninSteps, impactSteps, recoverySteps, instantStep, numInstantSteps, impactCell, globalModelTimeStepUnit);
// Apply human appropriation of NPP
gridCellStocks[actingStock].TotalBiomass += WetMatterNPP * (1.0 - fhanpp);
if (globalTracker.TrackProcesses)
{
globalTracker.RecordHANPP((uint)cellEnvironment["LatIndex"][0], (uint)cellEnvironment["LonIndex"][0], (uint)actingStock[0],
fhanpp);
}
if (gridCellStocks[actingStock].TotalBiomass < 0.0) gridCellStocks[actingStock].TotalBiomass = 0.0;
}
else
{
Debug.Fail("Stock must be classified as belonging to either the marine or terrestrial realm");
}
}
示例9: HerbivoryTracker
/// <summary>
/// Set up the herbivory tracker
/// </summary>
/// <param name="numTimeSteps">The total number of timesteps for this simulation</param>
/// <param name="cellIndices">List of indices of active cells in the model grid</param>
/// <param name="massFlowsFilename">Filename for outputs of the flows of mass between predators and prey</param>
/// <param name="cohortDefinitions">The functional group definitions for cohorts in the model</param>
/// <param name="missingValue">The missing value to be used in the output file</param>
/// <param name="outputFileSuffix">The suffix to be applied to the output file</param>
/// <param name="outputPath">The path to write the output file to</param>
/// <param name="trackerMassBins">The mass bin handler containing the mass bins to be used for predation tracking</param>
public HerbivoryTracker(uint numTimeSteps,
List<uint[]> cellIndices,
string massFlowsFilename,
FunctionalGroupDefinitions cohortDefinitions,
double missingValue,
string outputFileSuffix,
string outputPath, MassBinsHandler trackerMassBins)
{
// Assign the missing value
_MissingValue = missingValue;
// Get the mass bins to use for the predation tracker and the number of mass bins that this correpsonds to
_MassBins = trackerMassBins.GetSpecifiedMassBins();
_NumMassBins = trackerMassBins.NumMassBins;
// Initialise the array to hold data on mass flows between mass bins
_MassFlows = new double[_NumMassBins];
// Define the model time steps to be used in the output file
TimeSteps = new float[numTimeSteps];
for (int i = 1; i <= numTimeSteps; i++)
{
TimeSteps[i - 1] = i;
}
// Initialise the data converter
DataConverter = new ArraySDSConvert();
// Initialise the SDS object creator
SDSCreator = new CreateSDSObject();
// Create an SDS object to hold the predation tracker data
MassFlowsDataSet = SDSCreator.CreateSDS("netCDF", massFlowsFilename + outputFileSuffix, outputPath);
// Define the dimensions to be used in the predation tracker output file
string[] dimensions = { "Time step", "Herbivore mass bin" };
// Add the mass flow variable to the predation tracker
DataConverter.AddVariable(MassFlowsDataSet, "Log mass (g)", 2, dimensions, _MissingValue, TimeSteps, _MassBins);
}
示例10: RunReproduction
/// <summary>
/// Generate new cohorts from reproductive potential mass
/// </summary>
/// <param name="gridCellCohorts">The cohorts in the current grid cell</param>
/// <param name="gridCellStocks">The stocks in the current grid cell</param>
/// <param name="actingCohort">The position of the acting cohort in the jagged array of grid cell cohorts</param>
/// <param name="cellEnvironment">The environment of the current grid cell</param>
/// <param name="deltas">The sorted list to track changes in biomass and abundance of the acting cohort in this grid cell</param>
/// <param name="madingleyCohortDefinitions">The definitions of cohort functional groups in the model</param>
/// <param name="madingleyStockDefinitions">The definitions of stock functional groups in the model</param>
/// <param name="currentTimestep">The current model time step</param>
/// <param name="tracker">An instance of ProcessTracker to hold diagnostics for reproduction</param>
/// <param name="partial">Thread-locked variables</param>
public void RunReproduction(GridCellCohortHandler gridCellCohorts, GridCellStockHandler gridCellStocks,
int[] actingCohort, SortedList<string, double[]> cellEnvironment, Dictionary<string, Dictionary<string, double>>
deltas, FunctionalGroupDefinitions madingleyCohortDefinitions, FunctionalGroupDefinitions madingleyStockDefinitions,
uint currentTimestep, ProcessTracker tracker, ref ThreadLockedParallelVariables partial)
{
// Check that the abundance in the cohort to produce is greater than or equal to zero
Debug.Assert(_OffspringCohortAbundance >= 0.0, "Offspring abundance < 0");
// Get the adult and juvenile masses of the cohort to produce
double[] OffspringProperties = GetOffspringCohortProperties(gridCellCohorts, actingCohort,
madingleyCohortDefinitions);
// Update cohort abundance in case juvenile mass has been altered
_OffspringCohortAbundance = (_OffspringCohortAbundance * gridCellCohorts[actingCohort].JuvenileMass) /
OffspringProperties[0];
//Create the offspring cohort
Cohort OffspringCohort = new Cohort((byte)actingCohort[0],
OffspringProperties[0],
OffspringProperties[1],
OffspringProperties[0],
_OffspringCohortAbundance,
(ushort)currentTimestep, ref partial.NextCohortIDThreadLocked);
// Add the offspring cohort to the grid cell cohorts array
gridCellCohorts[actingCohort[0]].Add(OffspringCohort);
// If the cohort has never been merged with another cohort, then add it to the tracker for output as diagnostics
if ((!gridCellCohorts[actingCohort].Merged) && tracker.TrackProcesses)
tracker.RecordNewCohort((uint)cellEnvironment["LatIndex"][0],
(uint)cellEnvironment["LonIndex"][0], currentTimestep, _OffspringCohortAbundance,
gridCellCohorts[actingCohort].AdultMass, gridCellCohorts[actingCohort].FunctionalGroupIndex);
// Subtract all of the reproductive potential mass of the parent cohort, which has been used to generate the new
// cohort, from the delta reproductive potential mass
deltas["reproductivebiomass"]["reproduction"] -= (gridCellCohorts[actingCohort].IndividualReproductivePotentialMass);
}
示例11: RunEcologicalProcess
/// <summary>
/// Run metabolism
/// </summary>
/// <param name="gridCellCohorts">The cohorts in the current grid cell</param>
/// <param name="gridCellStocks">The stocks in the current grid cell</param>
/// <param name="actingCohort">The position of the acting cohort in the jagged array of grid cell cohorts</param>
/// <param name="cellEnvironment">The environment in the current grid cell</param>
/// <param name="deltas">The sorted list to track changes in biomass and abundance of the acting cohort in this grid cell</param>
/// <param name="madingleyCohortDefinitions">The definitions for cohort functional groups in the model</param>
/// <param name="madingleyStockDefinitions">The definitions for stock functional groups in the model</param>
/// <param name="currentTimestep">The current model time step</param>
/// <param name="trackProcesses">An instance of ProcessTracker to hold diagnostics for metabolism</param>
/// <param name="partial">Thread-locked variables</param>
/// <param name="specificLocations">Whether the model is being run for specific locations</param>
/// <param name="outputDetail">The level of output detail being used for the current model run</param>
/// <param name="currentMonth">The current model month</param>
/// <param name="initialisation">The Madingley Model initialisation</param>
public void RunEcologicalProcess(GridCellCohortHandler gridCellCohorts, GridCellStockHandler gridCellStocks,
int[] actingCohort, SortedList<string, double[]> cellEnvironment, Dictionary<string, Dictionary<string, double>> deltas,
FunctionalGroupDefinitions madingleyCohortDefinitions, FunctionalGroupDefinitions madingleyStockDefinitions,
uint currentTimestep, ProcessTracker trackProcesses, ref ThreadLockedParallelVariables partial,
Boolean specificLocations, string outputDetail, uint currentMonth, MadingleyModelInitialisation initialisation)
{
double Realm = cellEnvironment["Realm"][0];
if (madingleyCohortDefinitions.GetTraitNames("Heterotroph/Autotroph", gridCellCohorts[actingCohort].FunctionalGroupIndex) == "heterotroph")
{
if (madingleyCohortDefinitions.GetTraitNames("Endo/Ectotherm", gridCellCohorts[actingCohort].FunctionalGroupIndex) == "endotherm")
{
Implementations["basic endotherm"].RunMetabolism(gridCellCohorts, gridCellStocks, actingCohort, cellEnvironment, deltas, madingleyCohortDefinitions, madingleyStockDefinitions, currentTimestep, currentMonth);
}
else
{
Implementations["basic ectotherm"].RunMetabolism(gridCellCohorts, gridCellStocks, actingCohort, cellEnvironment, deltas, madingleyCohortDefinitions, madingleyStockDefinitions, currentTimestep, currentMonth);
}
}
// If the process tracker is on and output detail is set to high and this cohort has not been merged yet, then record
// the number of individuals that have died
if (trackProcesses.TrackProcesses && (outputDetail == "high"))
{
trackProcesses.TrackTimestepMetabolism((uint)cellEnvironment["LatIndex"][0],
(uint)cellEnvironment["LonIndex"][0],
currentTimestep,
gridCellCohorts[actingCohort].IndividualBodyMass,
actingCohort[0],
cellEnvironment["Temperature"][currentMonth],
deltas["biomass"]["metabolism"]);
}
}
示例12: ProcessTracker
/// <summary>
/// Constructor for process tracker: Initialises the trackers for individual processes
/// </summary>
/// <param name="numTimesteps">The number of time steps in the model</param>
/// <param name="lats">The latitudes of active grid cells in the model</param>
/// <param name="lons">The longitudes of active grid cells in the model</param>
/// <param name="cellIndices">List of indices of active cells in the model grid</param>
/// <param name="Filenames">The filenames of the output files to write the tracking results to</param>
/// <param name="trackProcesses">Whether to track processes</param>
/// <param name="cohortDefinitions">The definitions for cohort functional groups in the model</param>
/// <param name="missingValue">The missing value to use in process tracking output files</param>
/// <param name="outputFileSuffix">The suffix to be applied to output files from process tracking</param>
/// <param name="outputPath">The path to the folder to be used for process tracking outputs</param>
/// <param name="trackerMassBins">The mass bins to use for categorising output data in the process trackers</param>
/// <param name="specificLocations">Whether the model is being run for specific locations</param>
/// <param name="cellIndex">The index of the current cell in the list of all cells to run the model for</param>
/// <param name="initialisation">The Madingley Model initialisation</param>
/// <param name="marineCell">Whether the current cell is a marine cell</param>
/// <param name="latCellSize">The size of grid cells in the latitudinal direction</param>
/// <param name="lonCellSize">The size of grid cells in the longitudinal direction</param>
public ProcessTracker(uint numTimesteps,
float[] lats, float[] lons,
List<uint[]> cellIndices,
SortedList<string,string> Filenames,
Boolean trackProcesses,
FunctionalGroupDefinitions cohortDefinitions,
double missingValue,
string outputFileSuffix,
string outputPath, MassBinsHandler trackerMassBins,
Boolean specificLocations,
int cellIndex,
MadingleyModelInitialisation initialisation,
bool marineCell,
float latCellSize,
float lonCellSize)
{
// Initialise trackers for ecological processes
_TrackProcesses = trackProcesses;
if (_TrackProcesses)
{
_TrackReproduction = new ReproductionTracker(numTimesteps, (uint)lats.Length, (uint)lons.Length, cellIndices, Filenames["NewCohortsOutput"], Filenames["MaturityOutput"], outputFileSuffix, outputPath, cellIndex);
_TrackEating = new EatingTracker((uint)lats.Length, (uint)lons.Length, Filenames["TrophicFlowsOutput"], outputFileSuffix, outputPath, cellIndex, initialisation, marineCell);
_TrackGrowth = new GrowthTracker(numTimesteps, (uint)lats.Length, (uint)lons.Length, cellIndices, Filenames["GrowthOutput"], outputFileSuffix, outputPath, cellIndex);
_TrackMortality = new MortalityTracker(numTimesteps, (uint)lats.Length, (uint)lons.Length, cellIndices, Filenames["MortalityOutput"], outputFileSuffix, outputPath, cellIndex);
_TrackExtinction = new ExtinctionTracker(Filenames["ExtinctionOutput"], outputPath, outputFileSuffix, cellIndex);
_TrackMetabolism = new MetabolismTracker(Filenames["MetabolismOutput"], outputPath, outputFileSuffix, cellIndex);
// Initialise the predation and herbivory trackers only for runs with specific locations
if (specificLocations == true)
{
_TrackPredation = new PredationTracker( numTimesteps, cellIndices, Filenames["PredationFlowsOutput"], cohortDefinitions,
missingValue, outputFileSuffix, outputPath, trackerMassBins, cellIndex);
}
}
}
示例13: InitialFileOutputs
/// <summary>
/// Generates the initial file outputs
/// </summary>
/// <param name="ecosystemModelGrid">The model grid</param>
/// <param name="cohortFunctionalGroupDefinitions">The functional group definitions for cohorts in the model</param>
/// <param name="MarineCell">Whether the current cell is a marine cell</param>
/// <param name="cellIndices">The list of all cells to run the model for</param>
/// <param name="cellIndex">The index of the current cell in the list of all cells to run the model for</param>
private void InitialFileOutputs(ModelGrid ecosystemModelGrid, FunctionalGroupDefinitions cohortFunctionalGroupDefinitions,
Boolean MarineCell, List<uint[]> cellIndices, int cellIndex)
{
Console.WriteLine("Writing initial grid cell outputs to memory...");
//Write the low level outputs first
DataConverter.ValueToSDS1D(TotalLivingBiomassDensity, "Total Biomass density", "Time step",
ecosystemModelGrid.GlobalMissingValue,
BasicOutputMemory, 0);
DataConverter.ValueToSDS1D(TotalHeterotrophAbundanceDensity, "Heterotroph Abundance density", "Time step",
ecosystemModelGrid.GlobalMissingValue,
BasicOutputMemory, 0);
DataConverter.ValueToSDS1D(TotalHeterotrophBiomassDensity, "Heterotroph Biomass density", "Time step",
ecosystemModelGrid.GlobalMissingValue,
BasicOutputMemory, 0);
// File outputs for medium and high detail levels
if ((ModelOutputDetail == OutputDetailLevel.Medium) || (ModelOutputDetail == OutputDetailLevel.High))
{
if (MarineCell)
{
foreach (string TraitValue in CohortTraitIndicesMarine.Keys)
{
// Write densities, biomasses and abundances in different functional groups to the relevant one-dimensional output variables
DataConverter.ValueToSDS1D(TotalDensitiesOut[TraitValue], TraitValue + " density", "Time step",
ecosystemModelGrid.GlobalMissingValue,
BasicOutputMemory, 0);
DataConverter.ValueToSDS1D(TotalBiomassDensitiesOut[TraitValue], TraitValue + " biomass density", "Time step",
ecosystemModelGrid.GlobalMissingValue,
BasicOutputMemory, 0);
}
foreach (string TraitValue in StockTraitIndicesMarine.Keys)
{
DataConverter.ValueToSDS1D(TotalBiomassDensitiesOut[TraitValue], TraitValue + " biomass density", "Time step",
ecosystemModelGrid.GlobalMissingValue,
BasicOutputMemory, 0);
}
}
else
{
foreach (string TraitValue in CohortTraitIndices.Keys)
{
// Write densities, biomasses and abundances in different functional groups to the relevant one-dimensional output variables
DataConverter.ValueToSDS1D(TotalDensitiesOut[TraitValue], TraitValue + " density", "Time step",
ecosystemModelGrid.GlobalMissingValue,
BasicOutputMemory, 0);
DataConverter.ValueToSDS1D(TotalBiomassDensitiesOut[TraitValue], TraitValue + " biomass density", "Time step",
ecosystemModelGrid.GlobalMissingValue,
BasicOutputMemory, 0);
}
foreach (string TraitValue in StockTraitIndices.Keys)
{
DataConverter.ValueToSDS1D(TotalBiomassDensitiesOut[TraitValue], TraitValue + " biomass density", "Time step",
ecosystemModelGrid.GlobalMissingValue,
BasicOutputMemory, 0);
}
}
if (OutputMetrics)
{
DataConverter.ValueToSDS1D(Metrics.CalculateMeanTrophicLevelCell(ecosystemModelGrid,cellIndices,cellIndex),
"Mean Trophic Level", "Time step", ecosystemModelGrid.GlobalMissingValue,
BasicOutputMemory, 0);
DataConverter.ValueToSDS1D(Metrics.CalculateFunctionalEvennessRao(ecosystemModelGrid, cohortFunctionalGroupDefinitions,cellIndices, cellIndex,"trophic index"),
"Trophic Evenness", "Time step", ecosystemModelGrid.GlobalMissingValue,
BasicOutputMemory, 0);
DataConverter.ValueToSDS1D(Metrics.CalculateFunctionalEvennessRao(ecosystemModelGrid, cohortFunctionalGroupDefinitions, cellIndices, cellIndex, "biomass"),
"Biomass Evenness", "Time step", ecosystemModelGrid.GlobalMissingValue,
BasicOutputMemory, 0);
double[] FunctionalDiversity = Metrics.CalculateFunctionalDiversity(ecosystemModelGrid, cohortFunctionalGroupDefinitions,
cellIndices, cellIndex);
DataConverter.ValueToSDS1D(FunctionalDiversity[0],
"Functional Richness", "Time step", ecosystemModelGrid.GlobalMissingValue,
BasicOutputMemory, 0);
DataConverter.ValueToSDS1D(FunctionalDiversity[1],
"Rao Functional Evenness", "Time step", ecosystemModelGrid.GlobalMissingValue,
BasicOutputMemory, 0);
DataConverter.ValueToSDS1D(Metrics.CalculateFunctionalRichness(ecosystemModelGrid, cohortFunctionalGroupDefinitions, cellIndices, cellIndex, "Biomass")[0],
"Biomass Richness", "Time step", ecosystemModelGrid.GlobalMissingValue,
BasicOutputMemory, 0);
DataConverter.ValueToSDS1D(Metrics.CalculateFunctionalRichness(ecosystemModelGrid, cohortFunctionalGroupDefinitions, cellIndices, cellIndex, "Biomass")[1],
"Min Bodymass", "Time step", ecosystemModelGrid.GlobalMissingValue,
BasicOutputMemory, 0);
DataConverter.ValueToSDS1D(Metrics.CalculateFunctionalRichness(ecosystemModelGrid, cohortFunctionalGroupDefinitions, cellIndices, cellIndex, "Biomass")[2],
"Max Bodymass", "Time step", ecosystemModelGrid.GlobalMissingValue,
BasicOutputMemory, 0);
//.........这里部分代码省略.........
示例14: CalculateOutputs
/// <summary>
/// Calculates the variables to output
/// </summary>
/// <param name="ecosystemModelGrid">The model grid to get output data from</param>
/// <param name="cohortFunctionalGroupDefinitions">Definitions of the cohort functional groups in the model</param>
/// <param name="stockFunctionalGroupDefinitions">Definitions of the stock functional groups in the model</param>
/// <param name="cellIndices">List of indices of active cells in the model grid</param>
/// <param name="cellNumber">The number of the current cell in the list of indices of active cells</param>
/// <param name="globalDiagnosticVariables">The sorted list of global diagnostic variables in the model</param>
/// <param name="initialisation">The Madingley Model initialisation</param>
/// <param name="month">The current month in the model run</param>
/// <param name="marineCell">Whether the current cell is a marine cell</param>
private void CalculateOutputs(ModelGrid ecosystemModelGrid, FunctionalGroupDefinitions cohortFunctionalGroupDefinitions,
FunctionalGroupDefinitions stockFunctionalGroupDefinitions, List<uint[]> cellIndices, int cellNumber, SortedList<string, double>
globalDiagnosticVariables, MadingleyModelInitialisation initialisation, uint month, Boolean marineCell)
{
// Calculate low-level outputs
CalculateLowLevelOutputs(ecosystemModelGrid, cellIndices, cellNumber, globalDiagnosticVariables, cohortFunctionalGroupDefinitions,
stockFunctionalGroupDefinitions, initialisation, month, marineCell);
if (ModelOutputDetail == OutputDetailLevel.High)
{
// Calculate high-level outputs
CalculateHighLevelOutputs(ecosystemModelGrid, cellIndices, cellNumber, marineCell);
}
}
示例15: CalculateLowLevelOutputs
/// <summary>
/// Calculate outputs associated with low-level outputs
/// </summary>
/// <param name="ecosystemModelGrid">The model grid</param>
/// <param name="cellIndices">The list of indices of active cells in the model grid</param>
/// <param name="cellIndex">The position of the current cell in the list of active cells</param>
/// <param name="globalDiagnosticVariables">The global diagnostic variables for this model run</param>
/// <param name="cohortFunctionalGroupDefinitions">The functional group definitions of cohorts in the model</param>
/// <param name="stockFunctionalGroupDefinitions">The functional group definitions of stocks in the model</param>
/// <param name="initialisation">The Madingley Model initialisation</param>
/// <param name="month">The current month in the model run</param>
/// <param name="MarineCell">Whether the current cell is a marine cell</param>
private void CalculateLowLevelOutputs(ModelGrid ecosystemModelGrid, List<uint[]> cellIndices, int cellIndex,
SortedList<string,double> globalDiagnosticVariables, FunctionalGroupDefinitions cohortFunctionalGroupDefinitions,
FunctionalGroupDefinitions stockFunctionalGroupDefinitions, MadingleyModelInitialisation initialisation, uint month,
Boolean MarineCell)
{
// Reset the total living biomass
TotalLivingBiomass = 0.0;
string[] Keys;
if (MarineCell)
{
// Get the list of cohort trait combinations to consider
Keys = CohortTraitIndicesMarine.Keys.ToArray();
// Get biomass, abundance and densities for each of the trait combinations. Note that the GetStateVariableDensity function deals with the assessment of whether cohorts contain individuals
// of low enough mass to be considered zooplankton in the marine realm
foreach (string TraitValue in Keys)
{
// Biomass density
TotalBiomassDensitiesOut[TraitValue] = ecosystemModelGrid.GetStateVariableDensity("Biomass", TraitValue, CohortTraitIndicesMarine[TraitValue], cellIndices[cellIndex][0], cellIndices[cellIndex][1], "cohort", initialisation) / 1000.0;
// Density
TotalDensitiesOut[TraitValue] = ecosystemModelGrid.GetStateVariableDensity("Abundance", TraitValue, CohortTraitIndicesMarine[TraitValue], cellIndices[cellIndex][0], cellIndices[cellIndex][1], "cohort", initialisation);
}
}
else
{
// Get the list of cohort trait combinations to consider
Keys = CohortTraitIndices.Keys.ToArray();
// Get biomass, abundance and densities for each of the trait combinations
foreach (string TraitValue in Keys)
{
// Biomass density
TotalBiomassDensitiesOut[TraitValue] = ecosystemModelGrid.GetStateVariableDensity("Biomass", TraitValue, CohortTraitIndices[TraitValue], cellIndices[cellIndex][0], cellIndices[cellIndex][1], "cohort", initialisation) / 1000.0;
// Density
TotalDensitiesOut[TraitValue] = ecosystemModelGrid.GetStateVariableDensity("Abundance", TraitValue, CohortTraitIndices[TraitValue], cellIndices[cellIndex][0], cellIndices[cellIndex][1], "cohort", initialisation);
}
}
// Add the total biomass of all cohorts to the total living biomass variable
TotalLivingBiomass += ecosystemModelGrid.GetStateVariable("Biomass", "NA", cohortFunctionalGroupDefinitions.AllFunctionalGroupsIndex,
cellIndices[cellIndex][0], cellIndices[cellIndex][1], "cohort", initialisation);
TotalLivingBiomassDensity = ecosystemModelGrid.GetStateVariableDensity("Biomass", "NA", cohortFunctionalGroupDefinitions.AllFunctionalGroupsIndex, cellIndices[cellIndex][0], cellIndices[cellIndex][1], "cohort", initialisation) / 1000.0;
TotalHeterotrophAbundanceDensity = ecosystemModelGrid.GetStateVariableDensity("Abundance", "NA", cohortFunctionalGroupDefinitions.AllFunctionalGroupsIndex, cellIndices[cellIndex][0], cellIndices[cellIndex][1], "cohort", initialisation);
TotalHeterotrophBiomassDensity = TotalLivingBiomassDensity;
if (MarineCell)
{
// Get the list of stock trait combinations to consider
Keys = StockTraitIndicesMarine.Keys.ToArray();
// Get biomass and biomass density for each of the trait combinations
foreach (string TraitValue in Keys)
{
// Density
TotalBiomassDensitiesOut[TraitValue] = ecosystemModelGrid.GetStateVariableDensity("Biomass", TraitValue, StockTraitIndicesMarine[TraitValue], cellIndices[cellIndex][0], cellIndices[cellIndex][1], "stock", initialisation) / 1000.0;
}
}
else
{
// Get the list of stock trait combinations to consider
Keys = StockTraitIndices.Keys.ToArray();
// Get biomass and biomass density for each of the trait combinations
foreach (string TraitValue in Keys)
{
// Density
TotalBiomassDensitiesOut[TraitValue] = ecosystemModelGrid.GetStateVariableDensity("Biomass", TraitValue, StockTraitIndices[TraitValue], cellIndices[cellIndex][0], cellIndices[cellIndex][1], "stock", initialisation) / 1000.0;
}
}
// Add the total biomass of all stocks to the total living biomass variable
TotalLivingBiomass += ecosystemModelGrid.GetStateVariable("Biomass", "NA", stockFunctionalGroupDefinitions.AllFunctionalGroupsIndex,
cellIndices[cellIndex][0], cellIndices[cellIndex][1], "stock", initialisation);
TotalLivingBiomassDensity += ecosystemModelGrid.GetStateVariableDensity("Biomass", "NA", stockFunctionalGroupDefinitions.AllFunctionalGroupsIndex, cellIndices[cellIndex][0], cellIndices[cellIndex][1], "stock", initialisation) / 1000.0;
if (TrackMarineSpecifics && MarineCell)
{
bool varExists;
TotalIncomingNPP = ecosystemModelGrid.GetEnviroLayer("NPP", month, cellIndices[cellIndex][0], cellIndices[cellIndex][1], out varExists);
}
}