r4391 - trunk/src/main/java/fr/ifremer/isisfish/simulator
Author: bpoussin Date: 2017-02-21 18:39:20 +0100 (Tue, 21 Feb 2017) New Revision: 4391 Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/4391 Log: fixes #8968: getRecruitment Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/PopulationMonitor.java Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/PopulationMonitor.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/PopulationMonitor.java 2017-02-10 14:12:31 UTC (rev 4390) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/PopulationMonitor.java 2017-02-21 17:39:20 UTC (rev 4391) @@ -260,6 +260,9 @@ RecruitmentInputMap recruitmentInputMap = null; PopulationSeasonInfo foundReproductionSeasonInfo = null; + // 1er pas de temps de recrutement. + TimeStep stepRecru = null; + // pour chaque for (int e = 0; e < etalement; e++) { // recuperation de la reproduction stucture en zone repro @@ -281,6 +284,8 @@ recruitmentInputMap = new RecruitmentInputMap(monthCount); int pos = reproductionSeasonInfo.getMonths().indexOf(reproMonth); + stepRecru = new TimeStep(step.getStep() - e - pos); + // on remplit toutes les données relativement à la position où la reproduction a été calculé // donc, c'est toujours: // - données 0 : données pour le premier mois de repro @@ -349,25 +354,36 @@ } } - if (pop.getSpecies().isAgeGroupType()) { + // poussin 20170118 ticket #8968 + // Il faut quoi qu'il arrive que les poissons recrutés durant le 1er mois de recrutement finissent + // en classe 0. Il se peut que pour les autres mois de recrutement il y ait besoin de changer de classe + // mais toujours en fonction de ce 1er mois de recrutement. Si le delta entre repro et recru est de 36 mois + // et que l'étalement du recrutement est sur 12 mois. et que la repro a lieu en juin. + // Les 6 premiers de recrutement finisse en classe 0, les 6 dernieres en classe 1. + // ----- implantation + // pour cela il faut remplir usedSeasons seulement avec les mois a partir + // du 2eme mois de recrutement (repro+gap+1) pour garantir que le 1er mois + // de recru finisse bien dans la classe 0. + // + // Pour cela on utilise stepRecru qui est le 1er pas de temps de recrutement + // pour le pas de temps courant, a partir duquel il faut faire le parcours + if (pop.getSpecies().isAgeGroupType() && stepRecru != null) { + log.debug(String.format("Compute CA: Pop %s - Current step is %s(month %s) recru step is %s(month %s)", + pop, step, step.getMonth(), stepRecru, stepRecru.getMonth())); // conversion et retour de la matrice en vecteur MatrixND N = pop.N2DToN1D(result); - // on applique les migrations et le changement d'age sur le resultat - // on suppose que la reproduction est toujours dans une seul saison - TimeStep stepRepro = new TimeStep(step.getStep() - - pop.getMonthGapBetweenReproRecrutement()); // recherche les saisons des differents mois entre les deux dates List<PopulationSeasonInfo> infos = pop.getPopulationSeasonInfo(); List<PopulationSeasonInfo> usedSeasons = new ArrayList<>(); - while (step.after(stepRepro)) { - stepRepro = stepRepro.next(); - Month month = stepRepro.getMonth(); + while (step.after(stepRecru)) { + stepRecru = stepRecru.next(); + Month month = stepRecru.getMonth(); for (PopulationSeasonInfo info : infos) { if (month.equals(info.getFirstMonth())) { usedSeasons.add(info); - stepRepro = new TimeStep(stepRepro.getStep() + stepRecru = new TimeStep(stepRecru.getStep() + info.getMonths().size() - 1); // -1 because, for have next() break; } @@ -374,16 +390,6 @@ } } - // TODO poussin 20170118 #8968 - // Il faut quoi qu'il arrive que les poissons recrutés durant le 1er mois de recrutement finissent - // en classe 0. Il se peut que pour les autres mois de recrutement il y ait besoin de changer de classe - // mais toujours en fonction de ce 1er mois de recrutement. Si le delta entre repro et recru est de 36 mois - // et que l'étalement du recrutement est sur 12 mois. et que la repro a lieu en juin. - // Les 6 premiers de recrutement finisse en classe 0, les 6 dernieres en classe 1. - // ----- implantation - // pour cela il faut remplir usedSeasons seulement avec les mois a partir - // du 2eme mois de recrutement (repro+gap+1) pour garantir que le 1er mois - // de recru finisse bien dans la classe 0. for (PopulationSeasonInfo info : usedSeasons) { Month month = info.getFirstMonth(); MatrixND CA = info.getGroupChangeMatrix(month);
participants (1)
-
bpoussin@users.forge.codelutin.com