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/sibylengthonstep.cc
[mareframe] / trunk / gadget / sibylengthonstep.cc Repository:
ViewVC logotype

View of /trunk/gadget/sibylengthonstep.cc

Parent Directory Parent Directory | Revision Log Revision Log


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

SIByLengthOnStep::SIByLengthOnStep(CommentStream& infile, const IntMatrix& areas,
  const DoubleVector& lengths, const CharPtrVector& areaindex,
  const CharPtrVector& lenindex, const TimeClass* const TimeInfo,
  const char* datafilename, const char* givenname, int bio)
  : SIOnStep(infile, datafilename, areaindex, TimeInfo, areas, lenindex, givenname, bio, SILENGTH) {

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

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

void SIByLengthOnStep::setFleetsAndStocks(FleetPtrVector& Fleets, StockPtrVector& Stocks) {
  int i, found, minage, maxage;

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

  minage = Stocks[0]->minAge();
  maxage = Stocks[0]->maxAge();
  if (Stocks.Size() > 1) {
    for (i = 1; i < Stocks.Size(); i++) {
      minage = min(Stocks[i]->minAge(), minage);
      maxage = max(Stocks[i]->maxAge(), maxage);
    }
  }

  Ages.AddRows(1, maxage - minage + 1, 0);
  for (i = 0; i < Ages.Ncol(); i++)
    Ages[0][i] = i + minage;

  //check stock lengths
  if (handle.getLogLevel() >= LOGWARN) {
    found = 0;
    for (i = 0; i < Stocks.Size(); i++)
      if (LgrpDiv->maxLength(0) > Stocks[i]->getLengthGroupDiv()->minLength())
        found++;
    if (found == 0)
      handle.logMessage(LOGWARN, "Warning in surveyindex - minimum length group less than stock length");

    found = 0;
    for (i = 0; i < Stocks.Size(); i++)
      if (LgrpDiv->minLength(LgrpDiv->numLengthGroups()) < Stocks[i]->getLengthGroupDiv()->maxLength())
        found++;
    if (found == 0)
      handle.logMessage(LOGWARN, "Warning in surveyindex - maximum length group greater than stock length");
  }

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

void SIByLengthOnStep::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 age group
  for (a = 0; a < Areas.Nrow(); a++)
    for (i = 0; i < LgrpDiv->numLengthGroups(); i++)
      (*modelIndex[timeindex])[a][i] = (*alptr)[a][0][i].N;

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

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

Powered By FusionForge