From b80a5ab7c791383e9d4fa17e7d72f5e1f1e266b9 Mon Sep 17 00:00:00 2001 From: "patrick.lambert" <patrick.lambert@irstea.fr> Date: Fri, 25 Oct 2019 16:49:05 +0200 Subject: [PATCH] writing nutrient export fluxes --- data/input/fishTryRealBV_CC.xml | 23 ++----- src/main/java/species/MigrateToSea.java | 6 +- .../species/WriteNutrientExportFluxes.java | 68 +++++++++++++++++++ 3 files changed, 78 insertions(+), 19 deletions(-) create mode 100644 src/main/java/species/WriteNutrientExportFluxes.java diff --git a/data/input/fishTryRealBV_CC.xml b/data/input/fishTryRealBV_CC.xml index b5df39b..629e62e 100644 --- a/data/input/fishTryRealBV_CC.xml +++ b/data/input/fishTryRealBV_CC.xml @@ -214,9 +214,9 @@ <processesEachStep> <environment.InformTime> <synchronisationMode>ASYNCHRONOUS</synchronisationMode> - <consoleDisplay>true</consoleDisplay> + <consoleDisplay>true</consoleDisplay> </environment.InformTime> - + <species.PlopProcess> <synchronisationMode>ASYNCHRONOUS</synchronisationMode> <temporisation>0</temporisation> @@ -280,7 +280,7 @@ <exportSeason>SPRING</exportSeason> <fileNameOutput>effectiveBiomassFluxesBeforeReproduction</fileNameOutput> </species.WriteEffectiveAndBiomassFluxes> - + <species.ReproduceAndSurviveAfterReproductionWithDiagnose> <synchronisationMode>ASYNCHRONOUS</synchronisationMode> <reproductionSeason>SPRING</reproductionSeason> @@ -321,21 +321,10 @@ <fileName>fluxes</fileName> </species.WriteImportNutrientFluxes> - <species.IdentifyPopulation> - <synchronisationMode>ASYNCHRONOUS</synchronisationMode> - <consoleDisplay>false</consoleDisplay> - <fluxesSeason>SPRING</fluxesSeason> - <years> - <long>2000</long> - <long>2100</long> - </years> - <fileNameOutput>JeuParam100_2100RCP85_A_essai</fileNameOutput> - </species.IdentifyPopulation> - - <species.TypeTrajectoryCV> + <species.WriteNutrientExportFluxes> <synchronisationMode>ASYNCHRONOUS</synchronisationMode> - <fileNameOutput>JeuParam100_2100RCP85_A_essai</fileNameOutput> - </species.TypeTrajectoryCV> + <fileName>nutrientExportFluxes</fileName> + </species.WriteNutrientExportFluxes> </processesAtEnd> </processes> diff --git a/src/main/java/species/MigrateToSea.java b/src/main/java/species/MigrateToSea.java index 5362bd7..4e16a73 100644 --- a/src/main/java/species/MigrateToSea.java +++ b/src/main/java/species/MigrateToSea.java @@ -42,8 +42,8 @@ public class MigrateToSea extends AquaNismsGroupProcess<DiadromousFish, Diadromo Map<String, Double> totalOutputFluxes = new Hashtable<String, Double>(); List<Duo<DiadromousFish,Basin>> fishesToMove = new ArrayList<Duo<DiadromousFish,Basin>>(); - for (int i = 0; i < group.getEnvironment().getRiverBasins().length; i++) { - RiverBasin basin = group.getEnvironment().getRiverBasins()[i]; + for (RiverBasin basin : group.getEnvironment().getRiverBasins()) { + //Fish move to sea and compute the related export of nutrients List<DiadromousFish> fishes = basin.getFishs(group); @@ -64,6 +64,8 @@ public class MigrateToSea extends AquaNismsGroupProcess<DiadromousFish, Diadromo Map <String, Double> aFluxExportedByJuveniles= group.getNutrientRoutine().computeNutrientsExportForJuveniles(fish); for (String nutrient: aFluxExportedByJuveniles.keySet()) { totalOutputFluxes.put(nutrient,totalOutputFluxes.get(nutrient) + aFluxExportedByJuveniles.get(nutrient) * fish.getAmount()); + + group.getNutrientRoutine().getNutrientExportFluxesCollection().put(Time.getYear(group.getPilot()), nutrient, basin.getName(), aFluxExportedByJuveniles.get(nutrient) * fish.getAmount()); } totalOutputFluxes.put("biomass", totalOutputFluxes.get("biomass") + biomass); diff --git a/src/main/java/species/WriteNutrientExportFluxes.java b/src/main/java/species/WriteNutrientExportFluxes.java new file mode 100644 index 0000000..adf39b3 --- /dev/null +++ b/src/main/java/species/WriteNutrientExportFluxes.java @@ -0,0 +1,68 @@ +package species; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import com.thoughtworks.xstream.XStream; +import com.thoughtworks.xstream.io.xml.DomDriver; + +import fr.cemagref.simaqualife.kernel.processes.AquaNismsGroupProcess; + +public class WriteNutrientExportFluxes extends AquaNismsGroupProcess<DiadromousFish, DiadromousFishGroup> { + + private String fileName= "nutrientExportFluxes"; + + public static void main(String[] args) { + System.out.println((new XStream(new DomDriver())) + .toXML(new WriteNutrientExportFluxes())); + + } + + @Override + public void doProcess(DiadromousFishGroup group) { + + BufferedWriter bW; + + String outputPath = "data/output/" ; + String sep = ";"; + new File(outputPath + fileName).getParentFile().mkdirs(); + try { + bW = new BufferedWriter(new FileWriter(new File(outputPath+ + fileName + group.getSimulationId() + ".csv"))); + + bW.write("year"+sep+"nutrient" + sep + "originBasin" + sep + "value" + "\n"); + + Map<Long, Map <String, Map<String, Double>>> fluxesCollection = group.getNutrientRoutine().getNutrientExportFluxesCollection().getExportFluxesCollection(); + + // to iterate on sorted years + List<Long> years = new ArrayList<Long>(fluxesCollection.keySet()); + Collections.sort(years); + + for (long year :years) { + if (year >= group.getMinYearToWrite()) { + + for (String nutrient : group.getNutrientRoutine().getNutrientsOfInterest()) { + + for (String originBasinName : group.getEnvironment().getRiverBasinNames()) { + bW.write(year+ sep+ nutrient + sep + originBasinName ); + bW.write( sep + fluxesCollection.get(year).get(nutrient).get(originBasinName) + '\n'); + } + + } + } + } + + bW.flush(); + bW.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } +} -- GitLab