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;
 

Le 14 décembre 2017 à 15:28, Eric Chatellier <chatellier@codelutin.com> a écrit :

> Question technique :
> quelles differences entre Manager, Storage et Monitor ?
> par exemple dans :
>
> MatrixND ab = context.getResultManager().getMatrix(date,pop,name).copy();
> et
> MatrixND ab =
> context.getSimulationStorage().getResultStorage().getMatrix(date, p,
> name).copy();

Dans ce cas c'est ResultManager qu'il faut utiliser, même si en réalité,
lui appele le SimulationStorage().getResultStorage.
Le ResultManager permet de gerer les résultats pour la simulation,
d'ajouter du cache, d'avoir des accès plus simples.

> et entre
>
> List<Population> pops =
> context.getSimulationStorage().getParameter().getPopulations();
> et
> List<Population> pops = context.getPopulationMonitor().getPopulations();

Idem, ce sont les mêmes données, mais PopulationMonitor est une classe
utilitaire qui permet de gerer plusieurs choses pendant la simulation
(biomass, rejet...)

Globalement, il faut utiliser Manager et Monitor.
Les storages, c'est techniquement lié au stockage et ça pourrait être
amené à évoluer dans les futures versions d'Isis.
--
Éric Chatellier

_______________________________________________
Isis-fish-users mailing list
Isis-fish-users@list.isis-fish.org
http://list.isis-fish.org/cgi-bin/mailman/listinfo/isis-fish-users