package formules;import fr.ifremer.isisfish.entities.*;import org.codelutin.math.matrix.*;import fr.ifremer.isisfish.types.Date;import fr.ifremer.isisfish.types.Month;import fr.ifremer.isisfish.types.RangeOfValues;import fr.ifremer.isisfish.types.TimeUnit;import java.util.*;public class fr_ifremer_isisfish_entities_Equation_1169028645885_0_5994742084746298 implements fr.ifremer.isisfish.equation.PopulationReproductionEquation {public double compute(fr.ifremer.isisfish.simulator.SimulationContext context, org.codelutin.math.matrix.MatrixND N, fr.ifremer.isisfish.entities.Population pop, fr.ifremer.isisfish.types.Month month, double prepro, java.util.List<Zone> zoneRepro, java.util.List<PopulationGroup> groups, java.util.List<Zone> zones, org.codelutin.math.matrix.MatrixND result) throws Exception {//Equation de repro du modele en longueur v3//
//////////////////////////////////////////
/*hypothese : il existe une taille minimum et un declencheur (temp etc) 
la durée de repro depend de la taille en avril
Le declencheur a lieu en avril sauf pour rochebonne en mai*/

double ind = 1;
double tot = 0.0;
//boucle pour implementer le recrutement observé
if (context.getSimulationControl().getDate().getYear() < 3){
double coeffR = 0;
double recru = 0;
		for (Zone zr : zoneRepro) {
		double R = 0 ;
			if ("gironde".equals(zr.getName())){
 				if (Month.APRIL.equals(month)) { coeffR = 0.111;
         		}else if (Month.MAY.equals(month)) { coeffR = 0.272 ;
         		}else if (Month.JUNE.equals(month)) { coeffR = 0.317;
         		}else if (Month.JULY.equals(month)) { coeffR = 0.226 ;
         		}else if (Month.AUGUST.equals(month)) { coeffR = 0.0745;
         		}
				if  (context.getSimulationControl().getDate().getYear() == 0){
				recru = 2.405172e14;
				}else if (context.getSimulationControl().getDate().getYear() == 1){
				recru = 2.04885e14;
				}else if (context.getSimulationControl().getDate().getYear() == 2){
				recru = 3.860327e+14;
			    }else if (context.getSimulationControl().getDate().getYear() == 3){	
				recru = 4.69e+13;
				}else if (context.getSimulationControl().getDate().getYear() == 4){
				recru = 3.196e+14;
			}
			R = recru*coeffR ;
		}
result.setValue(zr,R);
		}
}else{
for(Zone zr : zoneRepro){
	String nomZone = zr.getName();
	tot = 0;
	for (PopulationGroup cr : groups){
	ind = 1;

		if (Month.APRIL.equals(month) && "Rochebonne".equals(nomZone)) {
		ind = 0;
		}else if (Month.JUNE.equals(month)&&!"Rochebonne".equals(nomZone)&&cr.getId() < 13){ //hyp orange A
		//}else if (Month.JUNE.equals(month)&&!"Rochebonne".equals(nomZone)&&cr.getId() < 14){//hyp orange B
		ind = 0;

		}else if (Month.JULY.equals(month)){
			if (!"Rochebonne".equals(nomZone)){
				if (cr.getId() < 15) ind =0;
			}else {
				if (cr.getId() <13 ) ind = 0 ; //hyp orange A
				//if (cr.getId() <14 ) ind = 0 ; //hyp orange B
			}
		}else if (Month.AUGUST.equals(month)){
			if (!"Rochebonne".equals(nomZone)){
				ind =0;
			}else {
				if (cr.getId() <15 ) ind = 0 ;
			}
		}
double fec = cr.getReproductionRate();
//if(context.getSimulationControl().getDate().getYear() == 5 || context.getSimulationControl().getDate().getYear() == 6){		
//fec = fec*0.8 ;
//}

tot += fec*cr.getMeanWeight()*N.getValue(cr,zr)/2.0*ind;
	}// fin de la boucle sur les classes
   
	result.setValue(zr,tot);
	
} // end of boucle for (areas)
}// end of condition on year
return 0;
}
}
