Merci c'est beaucoup plus clair aprésent.
Cela a finalement fonctionné avec le code ci dessous. Les difficultés concernaient :
- l'appel d'un resultat non selectionné dans l'interface de resultats 8O
- la chronologie (Abundance correspond à la fin du mois precedent la date appelée, utiliser abundanceBegin Month ou la date en cours),
- le resultat à renvoyer par l'equation : un % de la population pour l'emmigration, un nombre d'individus pour l'immigration.
Merci !
// Equation d'immigration
TimeStep date = context.getSimulationControl().getStep();
//List<Population> pops = context.getSimulationStorage().getParameter().getPopulations();
List<Population> pops = context.getPopulationMonitor().getPopulations();
double result = 0;
double newJuv = 0;
for(Population p : pops){
if(p.getSpecies().equals(pop.getSpecies()) && !p.equals(pop)){
String name = "MatrixAbundance";
MatrixND ab = context.getResultManager().getMatrix(date,pop,name).copy();
ab = ab.getSubMatrix(0,1,1); // ages 2
for (MatrixIterator i = ab.iterator(); i.hasNext();) {
i.next();
Object[] sem = i.getSemanticsCoordinates();
Zone zoneRecru = (Zone) sem[1];
if(zoneRecru.getName().equals("Sole_nurs_Rye") || zoneRecru.getName().equals("Sole_nurs_UKwest")){
newJuv+= i.getValue();
}
}
}
}
if (group.getAge() == 2) {
String zoneName = arrivalZone.getName();
if (zoneName.equals("Sole_spawning_UK")) {
result = 0.44*newJuv;
}else if(zoneName.equals("Sole_spawning_WestFR")) {
result = 0.17*newJuv;
} else if(zoneName.equals("Sole_spawning_EastFR")) {
result = 0.39*newJuv;
}
return result;
} else return 0;