diff --git a/.gitignore b/.gitignore index e89eb583c2b427fc0e033303043c1881c0d22bd1..d4e8d4fe167cfaba5eb993c0cd09fd313665d82d 100644 --- a/.gitignore +++ b/.gitignore @@ -102,3 +102,4 @@ target org.* /src/main/java/miscellaneous/Essai.java >>>>>>> master +/exploration/R/.Rhistory diff --git a/data/input/fishTryRealBV_CC.xml b/data/input/fishTryRealBV_CC.xml index aabc3bd8a71e74945a23766b604df10a207f6ec5..b1b4fbd21d925e02e06822d01860467b2ebad682 100644 --- a/data/input/fishTryRealBV_CC.xml +++ b/data/input/fishTryRealBV_CC.xml @@ -229,18 +229,13 @@ <outputPath>data/output/</outputPath> <fileNameFluxes>nutrientFluxes</fileNameFluxes> <lengthAtHatching>2.0</lengthAtHatching> - <linfVonBertForFemale>70.0</linfVonBertForFemale> - <linfVonBertForMale>70.0</linfVonBertForMale> + <linfVonBertForFemale>80.0</linfVonBertForFemale> + <linfVonBertForMale>80.0</linfVonBertForMale> <lFirstMaturityForFemale>55.0</lFirstMaturityForFemale> <lFirstMaturityForMale>40.0</lFirstMaturityForMale> <processes> <processesAtBegin> - <species.PopulateBasinNetwork> - <synchronisationMode>ASYNCHRONOUS</synchronisationMode> - <nbSIPerBasin>200</nbSIPerBasin> - <initialLength>20.0</initialLength> - <nbFishPerSI>2500</nbFishPerSI> - </species.PopulateBasinNetwork> + </processesAtBegin> <processesEachStep> @@ -252,6 +247,15 @@ <temporisation>0</temporisation> </species.PlopProcess> + <species.PopulateBasinNetworkSeveralTimes> + <synchronisationMode>ASYNCHRONOUS</synchronisationMode> + <nbSIPerBasin>200</nbSIPerBasin> + <nbFishPerSI>2500</nbFishPerSI> + <initialLength>20.0</initialLength> + <timesOfPopulate>5</timesOfPopulate> + <populateSeason>SPRING</populateSeason> + </species.PopulateBasinNetworkSeveralTimes> + <species.Age> <synchronisationMode>ASYNCHRONOUS</synchronisationMode> </species.Age> @@ -261,8 +265,8 @@ <tempMinGrow>3.0</tempMinGrow> <tempMaxGrow>26.0</tempMaxGrow> <tempOptGrow>17.0</tempOptGrow> - <kOptForFemale>0.20323011454056628</kOptForFemale> - <kOptForMale>0.3004992503785338</kOptForMale> + <kOptForFemale>0.29</kOptForFemale> + <kOptForMale>0.21</kOptForMale> <sigmaDeltaLVonBert>0.2</sigmaDeltaLVonBert> </species.Grow> @@ -287,7 +291,7 @@ <species.Survive> <synchronisationMode>ASYNCHRONOUS</synchronisationMode> - <tempMinSurvivalSpawnerInRiv>10.0</tempMinSurvivalSpawnerInRiv> + <tempMinSurvivalSpawnerInRiv>9.0</tempMinSurvivalSpawnerInRiv> <tempMaxSurvivalSpawnerInRiv>23.0</tempMaxSurvivalSpawnerInRiv> <!-- <tempOptSurvivalSpawnerInRiv>20.0</tempOptSurvivalSpawnerInRiv> --> <survivalProbOptSpawnerInRiv>1.0</survivalProbOptSpawnerInRiv> @@ -312,7 +316,7 @@ <species.ReproduceAndSurviveAfterReproductionWithDiagnose> <synchronisationMode>ASYNCHRONOUS</synchronisationMode> <reproductionSeason>SPRING</reproductionSeason> - <tempMinRep>10.443039492695249</tempMinRep> + <tempMinRep>9.8</tempMinRep> <tempMaxRep>26.0</tempMaxRep> <tempOptRep>20.0</tempOptRep> <eta>2.4</eta> diff --git a/data/input/obsTryReal.xml b/data/input/obsTryReal.xml index 651c6ae2334017a349b70749108bbe99ae6fe920..9449e8037a7a2620e4096031678bc8d83e88a3f6 100644 --- a/data/input/obsTryReal.xml +++ b/data/input/obsTryReal.xml @@ -31,6 +31,30 @@ <variableName>getFishEffective</variableName> </fr.cemagref.observation.observers.jfreechart.TemporalSerieChart> + <fr.cemagref.observation.observers.jfreechart.TemporalSerieChart> + <graphType>LINE</graphType> + <title>Abundance of spawners</title> + <xAxisLabel>Time (season)</xAxisLabel> + <yAxisLabel>number of fishes</yAxisLabel> + <variableName>getSpawnerEffective</variableName> + </fr.cemagref.observation.observers.jfreechart.TemporalSerieChart> + + <fr.cemagref.observation.observers.jfreechart.TemporalSerieChart> + <graphType>LINE</graphType> + <title>Abundance of male spawners</title> + <xAxisLabel>Time (season)</xAxisLabel> + <yAxisLabel>number of fishes</yAxisLabel> + <variableName>getMaleSpawnerEffective</variableName> + </fr.cemagref.observation.observers.jfreechart.TemporalSerieChart> + + <fr.cemagref.observation.observers.jfreechart.TemporalSerieChart> + <graphType>LINE</graphType> + <title>Abundance of female spawners</title> + <xAxisLabel>Time (season)</xAxisLabel> + <yAxisLabel>number of fishes</yAxisLabel> + <variableName>getFemaleSpawnerEffective</variableName> + </fr.cemagref.observation.observers.jfreechart.TemporalSerieChart> + <miscellaneous.TemporalRangeSerieChart> <title>Range distribution</title> <xAxisLabel>Time (season)</xAxisLabel> @@ -59,7 +83,7 @@ <graphType>LINE</graphType> <title>Statistic for male spawners age</title> <xAxisLabel>Time (season)</xAxisLabel> - <yAxisLabel>age (year)</yAxisLabel> + <yAxisLabel></yAxisLabel> <variableName>computeMaleSpawnerForFirstTimeSummaryStatistic</variableName> </fr.cemagref.observation.observers.jfreechart.TemporalSerieChart> @@ -67,7 +91,7 @@ <graphType>LINE</graphType> <title>Statistic for female spawners age</title> <xAxisLabel>Time (season)</xAxisLabel> - <yAxisLabel>age (year)</yAxisLabel> + <yAxisLabel></yAxisLabel> <variableName>computeFemaleSpawnerForFirstTimeSummaryStatistic</variableName> </fr.cemagref.observation.observers.jfreechart.TemporalSerieChart> diff --git a/exploration/scriptR/BruchPrg.R b/exploration/scriptR/BruchPrg.R new file mode 100644 index 0000000000000000000000000000000000000000..55b9e4ebc8dccb8b7a3f45c48b35a76cb0ad4ab1 --- /dev/null +++ b/exploration/scriptR/BruchPrg.R @@ -0,0 +1,194 @@ +library(openxlsx) +# ============================================================ + +dataBruch = read.xlsx("BDalosesBruch.xlsx") +dataBruch$`M.gonades.(g)` = as.numeric(dataBruch$`M.gonades.(g)`) + +head(dataBruch) + + +tapply(dataBruch$`Lf.(cm)`, dataBruch[,c('Année', 'Sexe')],min, na.rm = TRUE) + +tapply(dataBruch$`Lf.(cm)`, dataBruch[,c('Année', 'Sexe')],min, na.rm = TRUE) +tapply(dataBruch$`Lf.(cm)`, dataBruch[,c('Année', 'Sexe')],quantile, na.rm = TRUE, probs=.05) + +tapply(dataBruch$`Lf.(cm)`, dataBruch[,c('Année', 'Sexe')],max, na.rm = TRUE) +tapply(dataBruch$`Lf.(cm)`, dataBruch[,c('Année', 'Sexe')],quantile, na.rm = TRUE, probs=.95) + +tapply(dataBruch$`Lf.(cm)`, dataBruch[,c('Année', 'Sexe')],quantile, na.rm = TRUE, probs=.5) + +sel = dataBruch$Année==2013 & dataBruch$Sexe =='F' + +hist(dataBruch$`Lt.(cm)`[sel]) + +abline(v=quantile(dataBruch$`Lt.(cm)`[sel], probs = 0.05)) + +sel = dataBruch$Sexe=='M' +lm (dataBruch$`Lt.(cm)`[sel]~dataBruch$`Lf.(cm)`[sel]) + +summary(lm (dataBruch$`Lt.(cm)`~dataBruch$`Lf.(cm)`)) +summary(lm (dataBruch$`Lt.(cm)`~dataBruch$`Lf.(cm)` * dataBruch$Sexe)) + +# ==================================================== +# fecundity +# Taverny 1991 +# ==================================================== +(41*172895+33*202902+74*186424)/(41+33+74) +(41*98390+33*110386+74*104325)/(41+33+74) + +# ============================================================ +# maximal production of recruit in GR3D for the Garonne basin +# ============================================================ +bj=-log(1.7e-3) /.33 +cj= 4.1e-4 / (84810*.5356) +(alphaj = bj*exp(-bj*.33)/(cj*(1-exp(-bj*.33)))) + +# ================================================ +# growth in GR3D +# ================================================ + +# ------------------------------------------------ +# temperature effect on growth +# ------------------------------------------------ +temperatureEffect= function(temp, Tmin, Topt, Tmax){ +# if (temp<=Tmin | temp >= Tmax) +# return(0) +# else + response=(temp-Tmin)*(temp-Tmax)/((temp-Tmin)*(temp-Tmax)-(temp-Topt)^2) + + response[temp<=Tmin | temp >= Tmax] = 0 + return(response) + + } +temperature=seq(8,30,.1) +# temperature effect on spawner survival +plot(temperature, temperatureEffect(temperature, 10, 20, 23), type='l') +# temperature effect on recruit survival +lines(temperature, temperatureEffect(temperature, 9.75, 20, 26), , col='red') + + +lines(temperature, temperatureEffect(temperature, 9.75, 20, 26) * temperatureEffect(temperature, 10, 20, 23), type='l', col='green') +lines(temperature, temperatureEffect(temperature, 9.75, 20, 26) * temperatureEffect(temperature, 10, 20, 23) * exp(-.4*5), type='l', col='blue') +tempData=read.csv("/home/patrick.lambert/Documents/workspace/GR3D/data/input/reality/SeasonTempBVFacAtlant1801_2100_newCRU_RCP85.csv", sep=";") +sel = tempData$NOM=="Garonne" & tempData$Year>=2008 & tempData$Year<=2018 +plot(tempData$Year[sel], tempData$Winter[sel], type='l') +Tref=colMeans(tempData[sel, c("Winter", "Spring", "summer", "Autumn")]) +points(Tref, temperatureEffect(Tref, 9.75, 20, 26), col="red") +text(Tref, temperatureEffect(Tref, 9.75, 20, 26), c("Winter", "Spring", "Summer", "Autumn"), pos=1) + +mean( temperatureEffect(Tref, 9.75, 20, 26)) +# ---------------------------------------------- +# growth simulation +# ---------------------------------------------- +vonBertalaffyGrowth = function(age, L0, Linf, K){ + t0=log(1-L0/Linf)/K + return(Linf*(1-exp(-K*(age-t0)))) +} + +Pauly= function(age, t0, Linf, K, D){ + return(Linf/10*((1-exp(-K*D*(age-t0)))^(1/D))) +} + +vonBertalaffyIncrement = function(nStep, L0, Linf, K, deltaT, sigma, withTempEffect=FALSE){ + tempEffect = temperatureEffect( c(7.753891, 14.979708, 19.782974, 11.108207) , 3, 17, 26) + L=matrix(nrow=nStep+1) + L[1]=L0 + for (i in 1:nStep) { + mu = log((Linf-L[i])*(1-exp(-K*deltaT))) - sigma*sigma/2 + increment = exp(rnorm(1, mu, sigma)) + if (withTempEffect){ + increment = increment * tempEffect[((i-1) %% 4)+1] + } + L[i+1]=L[i]+increment + } + return(L) +} + +vonBertalaffyIncrement(6/.25, 0, 60, 0.3900707, .25, .2) + +age=seq(0,6,.25) +plot(age,vonBertalaffyGrowth(age, 2, 60, 0.3900707), type="l") +for (i in 1:100) { + lines(age, vonBertalaffyIncrement(6/.25, 2, 60, 0.3900707, .25, .2), col='red') +} +lines(age, vonBertalaffyGrowth(age, 2, 60, 0.3900707), lwd=3, col='black') +abline(h=40) +for (i in 1:100) { + lines(age, vonBertalaffyIncrement(6/.25, 2, 60, 0.3900707, .25, .2, withTempEffect = TRUE), col='green') +} + lines(age, vonBertalaffyGrowth(age, 2, 60, 0.3900707*mean(temperatureEffect(Tref, 3, 17, 26))), lty=2, lwd = 2) + +abline(h=40) + + + +nbRep=1000 +res=matrix(nrow=nbRep) +for (i in 1:nbRep) { + prov = vonBertalaffyIncrement(24, 2, 60, 0.3900707, .25, .2) + res[i] = prov[max(which(prov < 40))+4] +} +mean(res) +hist(res,20) +abline(v=mean(res), col='red') + +res2=matrix(nrow=nbRep) +for (i in 1:nbRep) { + res2[i] = vonBertalaffyIncrement(4, 40, 60, 0.3900707, .25, .2)[5] +} +mean(res2) +hist(res2,20) +abline(v=mean(res2), col='red') + + +# ====================================================================== +# exploration of growth for male and female +# ====================================================================== +correction=mean(temperatureEffect(Tref, 3, 17, 26)) + +age=seq(0,10,.25) +present = vonBertalaffyGrowth(age, 2, 60, 0.3900707 * correction) +plot(age, present, type='l', lwd=3, ylim =c(0,80)) +present[age == 5] +abline(v=5) + +male = vonBertalaffyGrowth(age, 2, 65, 0.3900707 * correction) +lines(age, male, type='l', lwd=3, ylim =c(0,80), col='blue') +abline(h=40, col='blue', lwd=2, lty=2) +male[age == 5] + +female = vonBertalaffyGrowth(age, 2, 75, 0.3900707*55/40 * correction) +lines(age, female, lwd=3, col='red') +abline(h=55, col='red', lwd=2, lty=2) +female[age == 5] + +## a partir d'individus en mer donc à croissance de plus lente à mesure qu'ils sont agées +(taverny = Pauly(age,t0=-0.7294, Linf=701.59, K=0.4491, D=.5912)) +lines (age, taverny, lwd=2, col ='green') +taverny[age == 5] + +# =================================================================== +# GR3D outputs +# ===================================================================== +simData=read.csv("/home/patrick.lambert/Documents/workspace/GR3D/data/output/lengthAgeDistribution_1-RCP85.csv", sep=";", row.names = NULL) + +simGaronne= simData[simData$basin =="Garonne",] +sel=simGaronne$nbSpawn == 0 +tapply(simGaronne$length[sel], simGaronne[sel,c('year')],quantile, na.rm = TRUE, probs=.5) + + +# masse des gonades avant +sel = (dataBruch$LOT =='Tuilières' | dataBruch$LOT =='Golfech') & !is.na(dataBruch$`M.gonades.(g)`) & dataBruch$Sexe =='F' +mean(dataBruch$`M.gonades.(g)`[sel]/dataBruch$`M.tot.(g)`[sel]) + + + +sel = (dataBruch$LOT =='Tuilières' | dataBruch$LOT =='Golfech') & dataBruch$Sexe =='F' +sum(sel) +Wpre = mean(dataBruch$`M.tot.(g)`[sel]) +Wgonad =mean(dataBruch$`M.gonades.(g)`[sel], na.rm = TRUE) + +sel = (! (dataBruch$LOT =='Tuilières' | dataBruch$LOT =='Golfech')) & dataBruch$Sexe =='F' +Wpost= mean(dataBruch$`M.tot.(g)`[sel]) +WgonadSpent =mean(dataBruch$`M.gonades.(g)`[sel], na.rm = TRUE) +(Wloss=(Wpre - Wpost)/Wpre) diff --git a/src/main/java/environment/Time.java b/src/main/java/environment/Time.java index a955a394bb6ce5b2c68403b5f78d26d12f64bfe0..cd9977b8d4dbf6b740b955a46315150f17672eeb 100644 --- a/src/main/java/environment/Time.java +++ b/src/main/java/environment/Time.java @@ -20,9 +20,15 @@ public final class Time { ((BasinNetwork) pilot.getAquaticWorld().getEnvironment()).getYearOfTheBegin(); } + public static long getNbYearFromBegin(Pilot pilot){ + return getNbYearFromBegin(pilot.getCurrentTime()); + + } + public static long getNbYearFromBegin(long time){ return (long) Math.floor(time / Season.values().length); } + /** * @return the duration of season (time step) diff --git a/src/main/java/species/Calibrate.java b/src/main/java/species/Calibrate.java index 171ff54dfabcadbb1bf6db4152c487713701a554..ad00e366fed8698a6a7060a162c00154e4f55a36 100644 --- a/src/main/java/species/Calibrate.java +++ b/src/main/java/species/Calibrate.java @@ -164,13 +164,13 @@ class GR3DObjeciveFunction implements IObjectiveFunction { try { pilot.load(); - ReflectUtils.setFieldValueFromPath(pilot, "aquaticWorld.aquaNismsGroupsList.0.processes.processesEachStep.6.tempMinRep", par[0]); + ReflectUtils.setFieldValueFromPath(pilot, "aquaticWorld.aquaNismsGroupsList.0.processes.processesEachStep.7.tempMinRep", par[0]); //System.out.println("tempMinRep: " + (double) ReflectUtils.getValueFromPath(pilot, "aquaticWorld.aquaNismsGroupsList.0.processes.processesEachStep.6.getTempMinRep")); - ReflectUtils.setFieldValueFromPath(pilot, "aquaticWorld.aquaNismsGroupsList.0.processes.processesEachStep.3.kOptForFemale", par[1]); + ReflectUtils.setFieldValueFromPath(pilot, "aquaticWorld.aquaNismsGroupsList.0.processes.processesEachStep.4.kOptForFemale", par[1]); //System.out.println("KOptFemale: " + (double) ReflectUtils.getValueFromPath(pilot, "aquaticWorld.aquaNismsGroupsList.0.processes.processesEachStep.3.getkOptForFemale")); - ReflectUtils.setFieldValueFromPath(pilot, "aquaticWorld.aquaNismsGroupsList.0.processes.processesEachStep.3.kOptForMale",par[2]); + ReflectUtils.setFieldValueFromPath(pilot, "aquaticWorld.aquaNismsGroupsList.0.processes.processesEachStep.4.kOptForMale",par[2]); //System.out.println("KOptMale: " + (double) ReflectUtils.getValueFromPath(pilot, "aquaticWorld.aquaNismsGroupsList.0.processes.processesEachStep.3.getkOptForMale")); } catch (Exception e1) { diff --git a/src/main/java/species/DiadromousFishGroup.java b/src/main/java/species/DiadromousFishGroup.java index 185f758d4e4b4350123f95ec0d875149c8a447e2..b8df6fdd6d393ac769966b8c9226bbe59e7a37ba 100644 --- a/src/main/java/species/DiadromousFishGroup.java +++ b/src/main/java/species/DiadromousFishGroup.java @@ -33,6 +33,7 @@ import java.util.regex.Pattern; import miscellaneous.Duo; import miscellaneous.TreeMapForCentile; import species.DiadromousFish.Gender; +import species.DiadromousFish.Stage; import org.openide.util.lookup.ServiceProvider; @@ -915,6 +916,56 @@ public class DiadromousFishGroup extends AquaNismsGroup< DiadromousFish, BasinNe return eff; } + /** + * @return sum of spawner effectives in all the river basins + */ + @Observable(description = "Number of spawners in river basins") + public double getSpawnerEffective() { + long eff = 0; + for (RiverBasin basin : this.getEnvironment().getRiverBasins()){ + if (basin.getFishs(this) != null) { + for (DiadromousFish fish : basin.getFishs(this)) { + if (fish.getStage() == Stage.MATURE) + eff += fish.getAmount(); + } + } + } + return eff; + } + + /** + * @return sum of male spawner effectives in all the river basins + */ + @Observable(description = "Number of male spawners in all basins") + public double getMaleSpawnerEffective() { + long eff = 0; + for (Basin basin : this.getEnvironment().getBasins()){ + if (basin.getFishs(this) != null) { + for (DiadromousFish fish : basin.getFishs(this)) { + if (fish.getStage() == Stage.MATURE && fish.getGender() == Gender. MALE) + eff += fish.getAmount(); + } + } + } + return eff; + } + + /** + * @return sum of female spawner effectives in all the river basins + */ + @Observable(description = "Number of female spawners in all basins") + public double getFemaleSpawnerEffective() { + long eff = 0; + for (Basin basin : this.getEnvironment().getBasins()){ + if (basin.getFishs(this) != null) { + for (DiadromousFish fish : basin.getFishs(this)) { + if (fish.getStage() == Stage.MATURE && fish.getGender() == Gender. FEMALE) + eff += fish.getAmount(); + } + } + } + return eff; + } @Override public void addAquaNism(DiadromousFish fish) { diff --git a/src/main/java/species/PopulateBasinNetworkSeveralTimes.java b/src/main/java/species/PopulateBasinNetworkSeveralTimes.java new file mode 100644 index 0000000000000000000000000000000000000000..1aef6a148e5dbad67468363bc8132a4c882b0bc3 --- /dev/null +++ b/src/main/java/species/PopulateBasinNetworkSeveralTimes.java @@ -0,0 +1,47 @@ +package species; + +import com.thoughtworks.xstream.XStream; +import com.thoughtworks.xstream.io.xml.DomDriver; + +import environment.Basin; +import environment.Time; +import environment.Time.Season; +import fr.cemagref.simaqualife.kernel.processes.AquaNismsGroupProcess; +import species.DiadromousFish.Gender; + +import org.openide.util.lookup.ServiceProvider; + +@ServiceProvider(service = AquaNismsGroupProcess.class) +public class PopulateBasinNetworkSeveralTimes extends AquaNismsGroupProcess<DiadromousFish, DiadromousFishGroup> { + + private int nbSIPerBasin=200; + private int nbFishPerSI=2500; + private double initialLength =20.; + + private int timesOfPopulate = 10; + private Season populateSeason = Season.SPRING; + + public static void main(String[] args) { System.out.println((new + XStream(new DomDriver())) .toXML(new PopulateBasinNetworkSeveralTimes())); } + + @Override + public void doProcess(DiadromousFishGroup group) { + + if (Time.getNbYearFromBegin(group.getPilot()) <= timesOfPopulate && Time.getSeason(group.getPilot()) == populateSeason){ + + int nbFemaleSIPerBasin = nbSIPerBasin / 2; + int nbMaleSIPerBasin = nbSIPerBasin - nbFemaleSIPerBasin; + + for (Basin basin : group.getEnvironment().getRiverBasins()){ + for (int i=0; i < nbFemaleSIPerBasin; i++){ + group.addAquaNism(new DiadromousFish(group.getPilot(), basin, initialLength, nbFishPerSI, Gender.FEMALE)); + } + for (int i=0; i < nbMaleSIPerBasin; i++){ + group.addAquaNism(new DiadromousFish(group.getPilot(), basin, initialLength, nbFishPerSI, Gender.MALE)); + } + } + } + + System.out.println("fem: "+ group. getFemaleSpawnerEffective()+ " \tmal"+group.getMaleSpawnerEffective()); + } +} diff --git a/src/main/java/species/ReproduceAndSurviveAfterReproductionWithDiagnose.java b/src/main/java/species/ReproduceAndSurviveAfterReproductionWithDiagnose.java index 4da22e426d1c5ea87575f5a333313e7122def5bb..2248a8019404ff07b6b33464d487e26bb594dd6a 100644 --- a/src/main/java/species/ReproduceAndSurviveAfterReproductionWithDiagnose.java +++ b/src/main/java/species/ReproduceAndSurviveAfterReproductionWithDiagnose.java @@ -152,6 +152,7 @@ public class ReproduceAndSurviveAfterReproductionWithDiagnose extends AquaNismsG // effective temperature for reproduction (priority to the ANG value) double tempEffectRep; + double currentTemp = riverBasin.getCurrentTemperature(group.getPilot()); if (Double.isNaN(group.getTempMinRep())){ tempEffectRep = Miscellaneous.temperatureEffect(riverBasin.getCurrentTemperature(group.getPilot()), tempMinRep, tempOptRep, tempMaxRep); } diff --git a/src/main/java/species/Survive.java b/src/main/java/species/Survive.java index 112e973e4655756794dff4d70ebd35d016eafcaa..8d60732bad3b53ea0724afe8af4d834a80e55c24 100644 --- a/src/main/java/species/Survive.java +++ b/src/main/java/species/Survive.java @@ -24,7 +24,7 @@ public class Survive extends AquaNismsGroupProcess<DiadromousFish, DiadromousFis public double tempOptSurvivalSpawnerInRiv = 20.; public double survivalProbOptSpawnerInRiv = 1.; - public double mortalityRateInRiver = 0.4; + //public double mortalityRateInRiver = 0.4; public double mortalityRateInSea = 0.4; public double mortalityRateInOffshore = 0.4;