"Compilation OK" merci Sigrid !!

Le mer. 19 févr. 2020 à 18:18, Sigrid LEHUTA <Sigrid.Lehuta@ifremer.fr> a écrit :

En fait l'objet result est une matrice [group, zone de recrutement] disponible dans l'equation de recrutement qui tient déja compte de la mortalité, la connectivité et l'étalement du recrutement.

Il ne te reste plus qu'a appliquer une mortalité densité dépendente.

Un exemple un peu plus compliqué ci dessous car les param de densité dépendence dépendent de la zone considérée.


// Apply here the Density dependent mortality specific to each nursery (july-august) then the age 0 mortality (Archambault et al. 2016)
double M_A0 = -1.5;
// Parameters of the density dependent mortality
// Seine, Veys, UK west, Rye, Somme
// Density dependent mortality in nurseries (Archambault et al. 2016)
// Single pop
double [] Alpha = {0.41,0.5,0.24,0.11,0.25};
double [] K = {120,370,110,190,200};
// Nursery surfaces
double [] Surf = {966.9453,320.2793,1649.987,503.5813,1679.987};
for (MatrixIterator i = result.iterator(); i.hasNext();) { // l'iterateur parcours la matrice case par case
              i.next();
   Object[] sem = i.getSemanticsCoordinates();
   Zone zoneRecru = (Zone) sem[1]; // à une case donnée on peut recuperer ses coordonnées (group pour la dim 0 et zone pour la dim 1)
   int index = 0;
   double L = i.getValue();
   double survLarv = 0;
   if(L != 0){ // Seine, Veys, UK west, Rye, Somme
    if(zoneRecru.getName().equals("Sole_nurs_Seine")){
        index = 0;
    }else if(zoneRecru.getName().equals("Sole_nurs_Veys")){
        index = 1;
    }else if(zoneRecru.getName().equals("Sole_nurs_UKwest")){
        index = 2;
    }else if(zoneRecru.getName().equals("Sole_nurs_Rye")){
        index = 3;
    }else if(zoneRecru.getName().equals("Sole_nurs_Somme")){
        index = 4;
    }
        survLarv = (Alpha[index] *L) / ( 1+ (Alpha[index] * L/(K[index]*1000*Surf[index])) ) * Math.exp(M_A0/3);
   }
    i.setValue(survLarv);
}
return 0;


Le 19/02/2020 à 17:49, Charlotte Sève a écrit :
Merci beaucoup Sigrid ! Ça a l'air de marcher, cependant le reste de mon equation de fonctionne pas...

J'essaye de coder une fonction de recrutement qui me calcule, à partir du nombre d'oeufs produits (calculé dans l'équation de repro) le nombre de recru par zone pop. Sachant qu'il y a une connectivité larvaire et un étalement du recrutement sur plusieurs mois (mais un seul mois de reproduction). Et qu'en plus il y a un recrutement densité-dépendant... 

Pour le moment j'en suis là mais ça ne fonctionne pas du tout ! 
---
// Parameters
double g = 0.5; // half saturation constant
double Rmax = 0.029; // ind.m-2

// Nombre d'oeufs par zone de reproduction 
MatrixND oeufsm = recruitmentInputs.get(0).getRepro().copy(); // copy sinon on modifie la matrice de base
// Matrice de connectivité 
MatrixND Pij = pop.getMappingZoneReproZoneRecru();
// Contribution au recrutement
Double p = recruitmentInputs.get(0).getRecuitementContribution();
// Classe d'âge 0 de la population
double g0  = pop.getPopulationGroup().get(0); // Age 0

// 1. Calcul de DL = nombre de larves par zone pop
DL = oeufsm*p.mult(Pij); // vecteur DLzp pour chaque zone pop

// 2. Calcul de du nombre de recrues 
    for(Zone zone:zonePop){
        Val = result.getValue(g0, zonePop); 
        result.getValue(g0, Val + DL*Rmax/(DL + g*Rmax));
    }
return result;
---
C'est ma première expérience sur JAVA alors j'ai dû faire pas mal d'erreurs - désolée ! S'il y en a quelques unes qui te sautent aux yeux... SInon déjà merci beaucoup pour ta dernière réponse :)!

Charlotte

Le mer. 19 févr. 2020 à 17:35, Sigrid LEHUTA <Sigrid.Lehuta@ifremer.fr> a écrit :

je dirais simplement

pop.getMappingZoneReproZoneRecru()

tu veux donner un peu de contexte pour qu on vérifie?

Le 19/02/2020 à 16:
48, Charlotte Sève a écrit :
Hello,

Est-ce que quelqu'un saurait s'il est possible d'appeler la matrice de connectivité dans ISIS en utilisant : "pop.getBean.getFieldPopulationMappingZoneReproZoneRecru" ?

Merci beaucoup !
Charlotte



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

-- 
NB : Please note that I do not work on Monday mornings and Wednesday afternoons

Sigrid LEHUTA
  ~ ><> ~
Ecologie et Modèles pour l'Halieutique
IFREMER Nantes
Rue de l'Ile d'Yeu - BP 21105, 44311 Nantes Cedex 03, France
Tél : 02 40 37 42 38  (N°  interne : 8238)

Membre de l'Association Française d'Halieutique
https://www.association-francaise-halieutique.fr/
_______________________________________________
Isis-fish-users mailing list
Isis-fish-users@list.isis-fish.org
http://list.isis-fish.org/cgi-bin/mailman/listinfo/isis-fish-users


--

Charlotte Sève, PhD Student
CRIOBE - USR 3278 (CNRS-EPHE-UPVD)

Phone: +33 6 21 10 10 16

Skype: charlotteseve



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

-- 
NB : Please note that I do not work on Monday mornings and Wednesday afternoons

Sigrid LEHUTA
  ~ ><> ~
Ecologie et Modèles pour l'Halieutique
IFREMER Nantes
Rue de l'Ile d'Yeu - BP 21105, 44311 Nantes Cedex 03, France
Tél : 02 40 37 42 38  (N°  interne : 8238)

Membre de l'Association Française d'Halieutique
https://www.association-francaise-halieutique.fr/
_______________________________________________
Isis-fish-users mailing list
Isis-fish-users@list.isis-fish.org
http://list.isis-fish.org/cgi-bin/mailman/listinfo/isis-fish-users


--

Charlotte Sève, PhD Student
CRIOBE - USR 3278 (CNRS-EPHE-UPVD)

Phone: +33 6 21 10 10 16

Skype: charlotteseve