diff --git a/data/input/fishLight.xml b/data/input/fishLight.xml index 305aa9d5bc4d95a4816726ab2e87f4b612f25aa9..91a7ebdc11b4e63212f4ab4ddff43d880336499a 100644 --- a/data/input/fishLight.xml +++ b/data/input/fishLight.xml @@ -7,12 +7,13 @@ <processes> <processesAtBegin> - <pikelake.environment.FichierMarnage> - </pikelake.environment.FichierMarnage> - + <pikelake.environment.HoraireLeverCoucher> - </pikelake.environment.HoraireLeverCoucher> - + </pikelake.environment.HoraireLeverCoucher> + + <pikelake.environment.FichierMarnage> + </pikelake.environment.FichierMarnage> + <pikelake.environment.AreaMovement> <choixDist>1</choixDist> <!-- 0 => distMin; 1 => distMoy; 2 => distMax --> </pikelake.environment.AreaMovement> diff --git a/src/main/java/pikelake/Grid.java b/src/main/java/pikelake/Grid.java index e8fe09c53ddd739773e0f17fc6d35449c0e095a8..05b55b79237c0252ebc11187684593c8f558a986 100644 --- a/src/main/java/pikelake/Grid.java +++ b/src/main/java/pikelake/Grid.java @@ -12,6 +12,7 @@ import pikelake.environment.AreaMovement; import pikelake.environment.FichierMarnage; import pikelake.environment.Time; import pikelake.pikes.Pike; + import fr.cemagref.simaqualife.extensions.spatial2D.Grid2D; import fr.cemagref.simaqualife.kernel.AquaNismsGroup; import fr.cemagref.simaqualife.kernel.util.TransientParameters.InitTransientParameters; @@ -19,7 +20,6 @@ import fr.cemagref.simaqualife.pilot.Pilot; public class Grid extends Grid2D<Cell, Individual> { - //public Time temp = new Time(); private String marnageInit = "513_4"; public Grid(int gridWidth, int gridHeight, NeighborsType neighborsType) { @@ -47,12 +47,8 @@ public class Grid extends Grid2D<Cell, Individual> { grid[cptCell] = new Cell(cptCell, -1); } - try { - marnageInit = FichierMarnage.calculMarnage(); - } catch (NullPointerException e) { - //System.out.println ("Err marnage"); - marnageInit = "513_4"; - } + marnageInit = FichierMarnage.dateMarnage[Time.jourMois][Time.mois][Time.heure]; + if (marnageInit == null ) marnageInit = "513_4"; // Lecture fichier contenant les HSI de toutes les mailles String filePath = "data/input/HSI/hsi_BRO" + Time.getSeason() + marnageInit + ".txt"; @@ -179,8 +175,8 @@ public class Grid extends Grid2D<Cell, Individual> { // Calcul des mailles comprises dans le lac for (String liste : listeCoord) { - // Calcul de l'indice de la maille à partir des coordonnees (x,y) String[] coord = liste.split(" "); + // Calcul de l'indice de la maille à partir des coordonnees (x,y) int newCell = xPike + Integer.parseInt(coord[0]) + (yPike + Integer.parseInt(coord[1])) * gridWidth; // Test si l'indice calcule appartient à la grille totale diff --git a/src/main/java/pikelake/Marnage.java b/src/main/java/pikelake/Marnage.java index 56bcccd31e847f7bf57471778ce411d504932bbb..0476204e8486c55c7ee205897d5ce33d9b6b9464 100644 --- a/src/main/java/pikelake/Marnage.java +++ b/src/main/java/pikelake/Marnage.java @@ -20,7 +20,7 @@ public class Marnage extends AquaNismsGroupProcess<Pike,PikesGroup> { Grid grid = (Grid) pilot.getAquaticWorld().getEnvironment(); grid = grid.getGrid(); - marnageNew = FichierMarnage.calculMarnage(); + marnageNew = FichierMarnage.dateMarnage[Time.jourMois][Time.mois][Time.heure]; if (!marnageNew.equals(marnageOld)) majCote(grid); diff --git a/src/main/java/pikelake/environment/FichierMarnage.java b/src/main/java/pikelake/environment/FichierMarnage.java index a5ba1b8489b84d8e2d77508847152379dd41afb8..aa088f951ed2224d029f1104e76efe2d40ee903b 100644 --- a/src/main/java/pikelake/environment/FichierMarnage.java +++ b/src/main/java/pikelake/environment/FichierMarnage.java @@ -2,8 +2,6 @@ package pikelake.environment; import java.io.File; import java.io.FileNotFoundException; -import java.util.ArrayList; -import java.util.List; import java.util.Scanner; import pikelake.pikes.Pike; @@ -12,7 +10,9 @@ import fr.cemagref.simaqualife.kernel.processes.AquaNismsGroupProcess; public class FichierMarnage extends AquaNismsGroupProcess<Pike,PikesGroup> { - public static List<String> dateMarnage = new ArrayList<String>(); // Jour Mois Heure Marnage + //public static List<String> dateMarnage = new ArrayList<String>(); // Jour Mois Heure Marnage + + public static String dateMarnage[][][] = new String[32][13][24]; // [jour] [mois] [heure] @Override public void doProcess (PikesGroup object) { @@ -28,8 +28,9 @@ public class FichierMarnage extends AquaNismsGroupProcess<Pike,PikesGroup> { line = scanner.nextLine(); String temp[] = line.split("[/:\t ]+"); - dateMarnage.add(temp[0] + " " + temp[1] + " " + temp[3] + " " + temp[6].substring(0, temp[6].length()-1).replace(".", "_")); - } + dateMarnage[Integer.parseInt(temp[0])] [Integer.parseInt(temp[1])] [Integer.parseInt(temp[3])] = + temp[6].substring(0, temp[6].length()-1).replace(".", "_"); + } scanner.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block @@ -37,16 +38,7 @@ public class FichierMarnage extends AquaNismsGroupProcess<Pike,PikesGroup> { } } - public static String calculMarnage () { - - String[] donnee = null; - for (String liste : dateMarnage) { - donnee = liste.split(" "); - if (Time.jourMois == Integer.parseInt(donnee[0])) - if (Time.mois == Integer.parseInt(donnee[1])-1) - if (Time.heure == Integer.parseInt(donnee[2])) - break; - } - return donnee[3]; + public static String calculMarnage (int jour, int mois, int heure) { + return dateMarnage[jour][mois][heure]; } } \ No newline at end of file diff --git a/src/main/java/pikelake/environment/HoraireLeverCoucher.java b/src/main/java/pikelake/environment/HoraireLeverCoucher.java index 5102b815861ab6bef29db7da17684b6c888b0020..c3e54eaf8cab3de7367864ecc5a34fc2d6a19ece 100644 --- a/src/main/java/pikelake/environment/HoraireLeverCoucher.java +++ b/src/main/java/pikelake/environment/HoraireLeverCoucher.java @@ -2,21 +2,20 @@ package pikelake.environment; import java.io.File; import java.io.FileNotFoundException; -import java.util.ArrayList; -import java.util.List; import java.util.Scanner; - import pikelake.pikes.Pike; import pikelake.pikes.PikesGroup; import fr.cemagref.simaqualife.kernel.processes.AquaNismsGroupProcess; public class HoraireLeverCoucher extends AquaNismsGroupProcess<Pike,PikesGroup> { -public static List<String> dateLeverCoucher = new ArrayList<String>(); // Jour Mois HeureLever HeureCoucher - +public static int heureLeverCoucher[][][] = new int[2][32][13] ; // [0=lever, 1=coucher] [jour] [mois] +public static String phaseJournee[][][] = new String[32][13][25]; // [jour] [mois] [heure] + @Override public void doProcess (PikesGroup object) { + String temp[] = null, dateCompleteLever[] = null, dateCompleteCoucher[] = null; String jour = null, mois = null, heureLever = null, heureCoucher = null; @@ -42,13 +41,31 @@ public static List<String> dateLeverCoucher = new ArrayList<String>(); // Jour M // Coucher du soleil heureCoucher = dateCompleteCoucher[3]; - dateLeverCoucher.add(jour + " " + mois + " " + heureLever + " " + heureCoucher); + heureLeverCoucher[0][Integer.parseInt(jour)][Integer.parseInt(mois)] = Integer.parseInt(heureLever); + heureLeverCoucher[1][Integer.parseInt(jour)][Integer.parseInt(mois)] = Integer.parseInt(heureCoucher); } scanner.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } + + for (int m=1; m<13 ;m++) + for (int j=1; j<32; j++) + for (int h=0; h<25; h++) { + if (h > heureLeverCoucher[0][j][m] -2 & h < heureLeverCoucher[0][j][m] +2) phaseJournee[j][m][h] = "AUBE"; + else if (h > heureLeverCoucher[0][j][m] +1 & h < heureLeverCoucher[1][j][m] -1) phaseJournee[j][m][h] = "JOUR"; + else if (h > heureLeverCoucher[1][j][m] -2 & h < heureLeverCoucher[1][j][m] +2) phaseJournee[j][m][h] = "CREP"; + else phaseJournee[j][m][h] = "NUIT"; + } } + public static String getPhase (int jour, int mois, int heure) { + return phaseJournee[jour][mois+1][heure]; + } + + public int[][][] getHoraire () { + return heureLeverCoucher ; + } + } diff --git a/src/main/java/pikelake/environment/Time.java b/src/main/java/pikelake/environment/Time.java index 5e59d4cbf5bd8d5db3a967b67c503eb415eed4af..4ebf84e2c7ec66900fac1214c22fb37fa289f2a2 100644 --- a/src/main/java/pikelake/environment/Time.java +++ b/src/main/java/pikelake/environment/Time.java @@ -2,15 +2,16 @@ package pikelake.environment; import pikelake.pikes.Pike; import pikelake.pikes.PikesGroup; +import pikelake.environment.HoraireLeverCoucher; import fr.cemagref.simaqualife.kernel.processes.AquaNismsGroupProcess; public class Time extends AquaNismsGroupProcess<Pike,PikesGroup> { - public static enum PhaseJour {AUBE, JOUR, CREP, NUIT}; + //public static enum PhaseJour {AUBE, JOUR, CREP, NUIT}; public static enum Season {PRINTEMPS, ETE, AUTOMNE, HIVER}; - public static enum Mois {JANVIER, FEVRIER, MARS, AVRIL, MAI, JUIN, JUILLET, AOUT, SEPTEMBRE, OCTOBRE, NOVEMBRE, DECEMBRE}; - public static int mois = 0, jour = 0, jourMois = 1, saison = 0, annee = 2012, phaseJour = 0, heure = 0; - + public static enum Mois {MoisZero, JANVIER, FEVRIER, MARS, AVRIL, MAI, JUIN, JUILLET, AOUT, SEPTEMBRE, OCTOBRE, NOVEMBRE, DECEMBRE}; + public static int mois = 1, jour = 0, jourMois = 1, saison = 0, annee = 2012, phaseJour = 0, heure = 0; + public static String PhaseJour; @Override public void doProcess (PikesGroup group) { @@ -28,55 +29,43 @@ public class Time extends AquaNismsGroupProcess<Pike,PikesGroup> { if (heure == 0) jourMois = jourMois + 1; // RAZ jourMois - if ((mois == 0 | mois == 2 | mois == 4 | mois == 6 | mois == 7 | mois == 9 | mois == 11) & jourMois == 32) jourMois = 1; - else if ((mois == 3 | mois == 5 | mois == 8 | mois == 10) & jourMois == 31) jourMois = 1; - else if (mois == 1 & jourMois == 29) jourMois = 1; + if ((mois == 1 | mois == 3 | mois == 5 | mois == 7 | mois == 8 | mois == 10 | mois == 12) & jourMois == 32) jourMois = 1; + else if ((mois == 4 | mois == 6 | mois == 9 | mois == 11) & jourMois == 31) jourMois = 1; + else if (mois == 2 & jourMois == 29) jourMois = 1; calculMois(); calculSaison(); - calculPhaseJour(); - //System.out.println(annee + " " + Season.values()[saison] + " " + Mois.values()[mois] + " " + jour + " " + jourMois + " " + heure + " " + PhaseJour.values()[phaseJour]); + PhaseJour = HoraireLeverCoucher.phaseJournee[jourMois][mois][heure]; + + //System.out.println(annee + " " + Season.values()[saison] + " " + Mois.values()[mois] + " " + jour + " " + jourMois + " " + heure + " " + PhaseJour); } public void calculMois () { - if (jour <= 31) mois = 0; // Janv - else if (jour <= 59) mois = 1; // Fev - else if (jour <= 90) mois = 2; // Mars - else if (jour <= 120) mois = 3;// Avril - else if (jour <= 151) mois = 4; // Mai - else if (jour <= 181) mois = 5; // Juin - else if (jour <= 212) mois = 6; // Juillet - else if (jour <= 243) mois = 7; // Aout - else if (jour <= 273) mois = 8; // Sept - else if (jour <= 304) mois = 9; // Oct - else if (jour <= 334) mois = 10; // Nov - else if (jour <= 365) mois = 11; // Dec + if (jour <= 31) mois = 1; // Janv + else if (jour <= 59) mois = 2; // Fev + else if (jour <= 90) mois = 3; // Mars + else if (jour <= 120) mois = 4;// Avril + else if (jour <= 151) mois = 5; // Mai + else if (jour <= 181) mois = 6; // Juin + else if (jour <= 212) mois = 7; // Juillet + else if (jour <= 243) mois = 8; // Aout + else if (jour <= 273) mois = 9; // Sept + else if (jour <= 304) mois = 10; // Oct + else if (jour <= 334) mois = 11; // Nov + else if (jour <= 365) mois = 12; // Dec else mois = 0; } public void calculSaison () { - if (mois == 0) saison = 3; - if (mois == 2 & jourMois >= 20) saison = 0; - else if (mois == 5 & jourMois >= 20) saison = 1; - else if (mois == 8 & jourMois >= 22) saison = 2; - else if (mois == 11 & jourMois >= 21) saison = 3; - } - - public void calculPhaseJour () { - for (String liste : HoraireLeverCoucher.dateLeverCoucher) { - String[] temp = liste.split(" "); - if (jourMois == Integer.parseInt(temp[0]) & mois == (Integer.parseInt(temp[1])-1)) { - if (heure > Integer.parseInt(temp[2])-2 & heure < Integer.parseInt(temp[2])+2) phaseJour = 0; - else if (heure > Integer.parseInt(temp[2])+1 & heure < Integer.parseInt(temp[3])-1) phaseJour = 1; - else if (heure > Integer.parseInt(temp[3])-2 & heure < Integer.parseInt(temp[3])+2) phaseJour = 2; - else phaseJour = 3; - break; - } - } + if (mois == 1) saison = 3; + if (mois == 3 & jourMois >= 20) saison = 0; + else if (mois == 6 & jourMois >= 20) saison = 1; + else if (mois == 9 & jourMois >= 22) saison = 2; + else if (mois == 12 & jourMois >= 21) saison = 3; } public static String getPhaseJour () { - return PhaseJour.values()[phaseJour].toString(); + return PhaseJour; } public static String getMois () {