From d9c4550c87abd6e80da3f0b6fe6c6eeced7aa74d Mon Sep 17 00:00:00 2001
From: "guillaume.garbay" <guillaume.garbay>
Date: Wed, 2 Sep 2015 08:04:49 +0000
Subject: [PATCH]

---
 data/input/fishLight.xml                      | 11 +--
 src/main/java/pikelake/Grid.java              | 12 ++--
 src/main/java/pikelake/Marnage.java           |  2 +-
 .../pikelake/environment/FichierMarnage.java  | 24 +++----
 .../environment/HoraireLeverCoucher.java      | 29 ++++++--
 src/main/java/pikelake/environment/Time.java  | 69 ++++++++-----------
 6 files changed, 71 insertions(+), 76 deletions(-)

diff --git a/data/input/fishLight.xml b/data/input/fishLight.xml
index 305aa9d..91a7ebd 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 e8fe09c..05b55b7 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 56bcccd..0476204 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 a5ba1b8..aa088f9 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 5102b81..c3e54ea 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 5e59d4c..4ebf84e 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 () {					
-- 
GitLab