J'ai trouvé mon erreur : La matrice de biomass est group x zone (et non zone x group) de plus je reccuperais le semantic de la dimension sommée pas futé... Désolée ! MatrixND biom = recruitmentInputs.get(0). getBiomass(); // zone x group biom = biom.sumOverDim(1); double ssb = 0; for (MatrixIterator i=biom.iterator(); i.hasNext();) { i.next(); Object [] sems = i.getSemanticsCoordinates(); PopulationGroup group = (PopulationGroup)sems[1]; ssb += i.getValue()* group.getMaturityOgive(); } Le 12 février 2016 à 18:48, Sigrid Lehuta <sigridlehuta@gmail.com> a écrit :
Salut,
J'ai une erreur dans mes équations de recrutement (toutes neuves). des que j utilise RecruitmentInputs le recruitment est 0. Simu en PJ.
L'equation compile et dans les tests précédents ça fonctionnait. Voyez vous le probleme?
Merci !
l'equation est la suivante int y = context.getSimulationControl().getStep().getYear(); PopulationGroup g0 = pop.getPopulationGroup().get(0);
// constant Rec boolean constant = true; double val = 19699.71 * 1000; // average 2008-2014
// recruitment TS 2008-2010 //double [] TSRec ={21295,39186,48739}; // from nb at age WGNSSK 2012 double [] TSRec ={19921,31058,10616,25227,11073,14271,25732}; // WGNSSK 2015 (thousands)
if(y<3){ val = TSRec[y] * 1000;
}else if(!constant){ // get SSB MatrixND biom = recruitmentInputs.get(0).getBiomass(); // zone x group biom = biom.sumOverDim(1); double ssb = 0; for (MatrixIterator i=biom.iterator(); i.hasNext();) { i.next(); Object [] sems = i.getSemanticsCoordinates(); PopulationGroup group = (PopulationGroup)sems[1]; ssb += i.getValue()* group.getMaturityOgive(); } //Ricker (Espece/StockRecruit/FitSR.r, update 2015) double alpha = 8.45; double beta = 1.26e-4; double eps = 1; if(context.getValue("Sigma") != null) eps = (double)context.getValue("Sigma");// N(0,0.14) val = alpha * ssb/1000 * Math.exp(-beta*ssb/1000) * 1000 *eps; }
for(Zone z : pop.getRecruitmentZone() ){ result.setValue(g0,z,val); }
return 0;