Log In | Get Help   
Home My Page Projects Code Snippets Project Openings Mareframe
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files
[mareframe] View of /trunk/gadget/sibyageonstep.cc
[mareframe] / trunk / gadget / sibyageonstep.cc Repository:
ViewVC logotype

View of /trunk/gadget/sibyageonstep.cc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1 - (download) (annotate)
Mon Feb 10 17:09:07 2014 UTC (10 years, 3 months ago) by agomez
File size: 3211 byte(s)
Initial version based on Gadget 2.2.00
#include "sibyageonstep.h"
#include "stock.h"
#include "areatime.h"
#include "mathfunc.h"
#include "errorhandler.h"
#include "gadget.h"
#include "global.h"

SIByAgeOnStep::SIByAgeOnStep(CommentStream& infile, const IntMatrix& areas,
  const IntMatrix& ages, const CharPtrVector& areaindex, const CharPtrVector& ageindex,
  const TimeClass* const TimeInfo, const char* datafilename, const char* givenname, int bio)
  : SIOnStep(infile, datafilename, areaindex, TimeInfo, areas, ageindex, givenname, bio, SIAGE) {

  Ages = ages;
}

SIByAgeOnStep::~SIByAgeOnStep() {
  if (aggregator != 0)
    delete aggregator;
}

void SIByAgeOnStep::setFleetsAndStocks(FleetPtrVector& Fleets, StockPtrVector& Stocks) {
  int i, j, found, minage, maxage;
  double minlength, maxlength;

  if (Stocks.Size() == 0)
    handle.logMessage(LOGFAIL, "Error in surveyindex - failed to initialise stock data");

  minlength = Stocks[0]->getLengthGroupDiv()->minLength();
  maxlength = Stocks[0]->getLengthGroupDiv()->maxLength();
  if (Stocks.Size() > 1) {
    for (i = 1; i < Stocks.Size(); i++) {
      minlength = min(Stocks[i]->getLengthGroupDiv()->minLength(), minlength);
      maxlength = max(Stocks[i]->getLengthGroupDiv()->maxLength(), maxlength);
    }
  }

  LgrpDiv = new LengthGroupDivision(minlength, maxlength, maxlength - minlength);
  if (LgrpDiv->Error())
    handle.logMessage(LOGFAIL, "Error in surveyindex - failed to create length group");

  //check stock ages
  if (handle.getLogLevel() >= LOGWARN) {
    minage = 9999;
    maxage = 0;
    for (i = 0; i < Ages.Nrow(); i++) {
      for (j = 0; j < Ages.Ncol(i); j++) {
        minage = min(Ages[i][j], minage);
        maxage = max(Ages[i][j], maxage);
      }
    }

    found = 0;
    for (i = 0; i < Stocks.Size(); i++)
      if (minage >= Stocks[i]->minAge())
        found++;
    if (found == 0)
      handle.logMessage(LOGWARN, "Warning in surveyindex - minimum age less than stock age");

    found = 0;
    for (i = 0; i < Stocks.Size(); i++)
      if (maxage <= Stocks[i]->maxAge())
        found++;
    if (found == 0)
      handle.logMessage(LOGWARN, "Warning in surveyindex - maximum age greater than stock age");
  }

  aggregator = new StockAggregator(Stocks, LgrpDiv, Areas, Ages);
}

void SIByAgeOnStep::Sum(const TimeClass* const TimeInfo) {
  if (!AAT.atCurrentTime(TimeInfo))
    return;

  int a, i;
  timeindex = -1;
  for (i = 0; i < Years.Size(); i++)
    if ((Years[i] == TimeInfo->getYear()) && (Steps[i] == TimeInfo->getStep()))
      timeindex = i;
  if (timeindex == -1)
    handle.logMessage(LOGFAIL, "Error in surveyindex - invalid timestep");

  if (handle.getLogLevel() >= LOGMESSAGE)
    handle.logMessage(LOGMESSAGE, "Calculating index for surveyindex component", this->getName());

  aggregator->Sum();
  alptr = &aggregator->getSum();
  //alptr will only have one length group
  for (a = 0; a < Areas.Nrow(); a++)
    for (i = 0; i < Ages.Nrow(); i++)
      (*modelIndex[timeindex])[a][i] = (*alptr)[a][i][0].N;

  if (biomass)  //JMB experimental survey index based on the biomass
    for (a = 0; a < Areas.Nrow(); a++)
      for (i = 0; i < Ages.Nrow(); i++)
        (*modelIndex[timeindex])[a][i] *= (*alptr)[a][i][0].W;
}

root@forge.cesga.es
ViewVC Help
Powered by ViewVC 1.0.0  

Powered By FusionForge