From 9e11b5e845d7a085d1966ec01b08f5ef907e7d80 Mon Sep 17 00:00:00 2001 From: Francisco Salas Date: Mon, 2 Sep 2024 09:28:40 +0200 Subject: [PATCH] aw6355: undo this new solution... --- CarbonCalculation.cs | 92 +++++++++++++++----------------------------- 1 file changed, 32 insertions(+), 60 deletions(-) diff --git a/CarbonCalculation.cs b/CarbonCalculation.cs index ae32069..c39a96b 100644 --- a/CarbonCalculation.cs +++ b/CarbonCalculation.cs @@ -102,19 +102,19 @@ namespace FarmMapsAPI.Carbon } } - var allGreenManure = farmInput.CropFields.SelectMany(s => s.GreenManures.SelectMany(x=>x.GreenManureTypes)).Distinct(); + var allGreenManure = farmInput.CropFields.SelectMany(s => s.GreenManures.SelectMany(x => x.GreenManureTypes)).Distinct(); foreach (var greenManure in allGreenManure) { - if (!yieldGreenManureConfig.Any(x=>x.ManureName.ToLower() == greenManure.Type.ToLower())) + if (!yieldGreenManureConfig.Any(x => x.ManureName.ToLower() == greenManure.Type.ToLower())) { return $"Unknown green manure {greenManure.Type}"; } } - var allOrgManure = farmInput.CropFields.SelectMany(x => x.HistoricalCropData.SelectMany(s => s.Crops.Where(w=>w.OrganicManures != null).SelectMany(y=>y.OrganicManures.Select(r=>r.Type)))).Distinct(); + var allOrgManure = farmInput.CropFields.SelectMany(x => x.HistoricalCropData.SelectMany(s => s.Crops.Where(w => w.OrganicManures != null).SelectMany(y => y.OrganicManures.Select(r => r.Type)))).Distinct(); foreach (var orgManure in allOrgManure) { - if (!manCcontConfig.Any(x=>x.ManCcont == orgManure)) + if (!manCcontConfig.Any(x => x.ManCcont == orgManure)) { return $"Unknown organic manure {orgManure}"; } @@ -141,9 +141,9 @@ namespace FarmMapsAPI.Carbon SoilType = MapSoil(cropField.SoilType), SoilProperty = new SoilProperty { Clay_Content = cropField.SoilProperty.Clay_Content, OM_Const = cropField.SoilProperty.OM_Const, Depth10 = cropField.SoilProperty.Depth10, Depth = cropField.SoilProperty.Depth, OM_Choice = cropField.SoilProperty.OM_Choice }, GreenManures = greenManures - }); + }); foreach (var crops in cropField.HistoricalCropData) - { + { foreach (var cropYear in crops.Crops) { if (!string.IsNullOrEmpty(cropYear.MiterraCropName)) @@ -159,7 +159,7 @@ namespace FarmMapsAPI.Carbon cropYear.OrganicManures.Where(y=>y.Quantity > 0 && !string.IsNullOrEmpty(y.Type)).Select(x => new OrganicManureType { Type = x.Type, Quantity = x.Quantity.HasValue? x.Quantity.Value : 0 }).ToList(), CropYield = cropYear.CropYield, Irrigation = crops.Irrigations} } - }); + }); } else { @@ -206,7 +206,7 @@ namespace FarmMapsAPI.Carbon { greenManures.Add(new GreenManure { Year = crops.Year, GreenManureTypes = new List { new GreenManureType { Type = greenManure, Quality = cropYear.Quality == QualityFarmMaps.Good ? Quality.Good : cropYear.Quality == QualityFarmMaps.Bad ? Quality.Bad : Quality.Average } } }); } - } + } } } return mappedInput; @@ -225,18 +225,6 @@ namespace FarmMapsAPI.Carbon { var knmiFile = Helper.GetPlatformIndependentDirectoryPath(Path.Combine(configPath, "KNMI_data.csv")); - if (farmInput.CropFields[0].SoilProperty.OM_Choice == "c") - { - //carbon_organicmatter_factor = 1; - farmInput.CropFields[0].SoilProperty.C_Const = farmInput.CropFields[0].SoilProperty.OM_Const; - farmInput.CropFields[0].SoilProperty.OM_Const = 0; - } - else - { - farmInput.CropFields[0].SoilProperty.C_Const = farmInput.CropFields[0].SoilProperty.OM_Const * 0.54; - } - - // soilTypeData (external input) var soilTypeData = GetSoilTypeData(farmInput); @@ -251,7 +239,6 @@ namespace FarmMapsAPI.Carbon var year = GetYears(farmInputSet, farmInput); - //var carbon_organicmatter_factor = 0.54; ////////////////////////////////////////////// // precalculations @@ -266,18 +253,14 @@ namespace FarmMapsAPI.Carbon { var soilProps = soilPropSoilType.Keys.Where(x => x.Item1 == item.Key).ToList(); var sumCorr = 0.0; - var sumC_Corr = 0.0; foreach (var soilProp in soilProps) { sumCorr += soilPropSoilType[soilProp].OM_Corr; - sumC_Corr += soilPropSoilType[soilProp].C_Corr; } item.Value.OM_Corr = sumCorr; - item.Value.C_Corr = sumC_Corr; } - var oM_corr_SoilType = new Dictionary<(string,string), double>(); - var C_corr_SoilType = new Dictionary<(string, string), double>(); + var oM_corr_SoilType = new Dictionary<(string, string), double>(); foreach (var item in soilPropertiesField) { var soilOfItem = soilTypeData[item.Key].FirstOrDefault(); @@ -290,38 +273,28 @@ namespace FarmMapsAPI.Carbon } // Different corrections for depth (10, 25, 30 cm) // depth of 10cm has same result as previous checkbox (sample taken at 10cm) - parameterSet.LayerDepth = item.Value.Depth.HasValue? item.Value.Depth.Value : parameterSet.LayerDepth; + parameterSet.LayerDepth = item.Value.Depth.HasValue ? item.Value.Depth.Value : parameterSet.LayerDepth; if (initialSoil == "Temp_gras" && soilPropertyDepth10) { - oM_corr_SoilType.Add((item.Key, soilOfItem), item.Value.OM_Cont * 0.97 * (1 / 0.54)); - C_corr_SoilType.Add((item.Key, soilOfItem), item.Value.OM_Cont * 0.97); - } + oM_corr_SoilType.Add((item.Key, soilOfItem), item.Value.OM_Cont * 0.97); + } else if (cropSet.Grass_nat.Contains(initialSoil) && soilPropertyDepth10 && (soilOfItem == "Klei" || soilOfItem == "Zand")) { if (soilOfItem == "Klei") { - oM_corr_SoilType.Add((item.Key, soilOfItem), item.Value.OM_Cont * 0.67 * (1/0.54)); - C_corr_SoilType.Add((item.Key, soilOfItem), item.Value.OM_Cont * 0.67); + oM_corr_SoilType.Add((item.Key, soilOfItem), item.Value.OM_Cont * 0.67); } else { - oM_corr_SoilType.Add((item.Key, soilOfItem), item.Value.OM_Cont * 0.81 * (1 / 0.54)); - C_corr_SoilType.Add((item.Key, soilOfItem), item.Value.OM_Cont * 0.81); + oM_corr_SoilType.Add((item.Key, soilOfItem), item.Value.OM_Cont * 0.81); } } else { - oM_corr_SoilType.Add((item.Key, soilOfItem), item.Value.OM_Cont * (1 / 0.54)); - C_corr_SoilType.Add((item.Key, soilOfItem), item.Value.OM_Cont); + oM_corr_SoilType.Add((item.Key, soilOfItem), item.Value.OM_Cont); } } - var C_Corr = new Dictionary(); - foreach (var item in C_corr_SoilType) - { - C_Corr.Add(item.Key.Item1, item.Value); - } - var oM_Corr = new Dictionary(); foreach (var item in oM_corr_SoilType) { @@ -368,7 +341,7 @@ namespace FarmMapsAPI.Carbon // loop rothc ////////////////////////////////////////// - var soc_Field = new Dictionary>(); + var soc_Field = new Dictionary>(); var cropAreaField1 = new Dictionary<(string, int), List>(); var carbonInputs = new GamsThreeKeyParameter(); @@ -485,7 +458,7 @@ namespace FarmMapsAPI.Carbon carbonInputManure2[(field.Name, cropData.Crop)].Add(new ColumnValue(compost.Type, result)); } else - { + { carbonInputManure2.Add((field.Name, cropData.Crop), new List { new ColumnValue(compost.Type, result) }); } } @@ -756,7 +729,7 @@ namespace FarmMapsAPI.Carbon } tempModFactor.Add(climateVar.Key, valueList); } - + // CoverModFactor // input sheet var coverModFactor = new Dictionary>(); @@ -797,7 +770,7 @@ namespace FarmMapsAPI.Carbon { if (i == 0) { - + /* smdMax met factor maand corrigeren SMDmax(Field,Crop,AllMonths) = ifthen(CropCoverMonths(Crop,AllMonths)=1, SMDmax(Field,Crop,AllMonths),SMDmax(Field,Crop,AllMonths)/1.8); @@ -926,8 +899,7 @@ namespace FarmMapsAPI.Carbon foreach (var field in cropAreaField1.Where(x => x.Key.Item2 == loopYear)) { var valueList = new List(); - //var result = parameterSet.LayerDepth * bulkDens[field.Key.Item1] * oM_Corr[field.Key.Item1];// * 0.54; //carbon_organicmatter_factor - var result = parameterSet.LayerDepth * bulkDens[field.Key.Item1] * C_Corr[field.Key.Item1];// * 0.54; //carbon_organicmatter_factor + var result = parameterSet.LayerDepth * bulkDens[field.Key.Item1] * oM_Corr[field.Key.Item1] * 0.54; //carbon_organicmatter_factor foreach (var crop in field.Value) { valueList.Add(new ColumnValue(crop.Key, result)); @@ -965,7 +937,7 @@ namespace FarmMapsAPI.Carbon var carbonGreenManure = carbonInput.Value.SingleOrDefault(x => x.Key == "CarbonGreenManure")?.Value ?? 0; var resultRpm = 0.0; var resultDpm = 0.0; - if (cropSet.Perennial.Any(x=>x.ToLower() == carbonInput.Key.Item3.ToLower())) + if (cropSet.Perennial.Any(x => x.ToLower() == carbonInput.Key.Item3.ToLower())) { resultRpm = (carbonResidues) * 0.6; resultDpm = (carbonResidues) * 0.4; @@ -1460,7 +1432,7 @@ namespace FarmMapsAPI.Carbon // DPMss // RPMss // IOMss - + var dpmSs = new Dictionary<(string, int), List>(); var rpmSs = new Dictionary<(string, int), List>(); var iomSs = new Dictionary<(string, int), List>(); @@ -1673,7 +1645,7 @@ namespace FarmMapsAPI.Carbon summary.Initial = sum; } - foreach(var item in bulkDens) + foreach (var item in bulkDens) { var result = item.Value; foreach (var lYear in allYears) @@ -1736,7 +1708,7 @@ namespace FarmMapsAPI.Carbon var iniValue = item.Value.SingleOrDefault(x => x.Key == "IniCcontent")?.Value ?? 0; var balanceValue = item.Value.SingleOrDefault(x => x.Key == "Balance")?.Value ?? 0; - var resultOmIni = iniValue;// / 0.54; //carbon_organicmatter_factor + var resultOmIni = iniValue / 0.54; //carbon_organicmatter_factor var resultCo2 = balanceValue * (44.0 / 12.0); item.Value.Add(new ColumnValue("OM_ini", resultOmIni)); @@ -1755,7 +1727,7 @@ namespace FarmMapsAPI.Carbon var greenManure = item.SOC_CarbonGreenManure; var compost = item.SOC_CarbonCompost; - item.OM_ini = iniValue;// / 0.54; //carbon_organicmatter_factor + item.OM_ini = iniValue / 0.54; //carbon_organicmatter_factor item.CO2seq = balanceValue * (44.0 / 12.0); var emision = -1 * (manure + residues + greenManure + compost - balanceValue); @@ -1784,7 +1756,7 @@ namespace FarmMapsAPI.Carbon var sumIni = 0.0; var sumInicc = 0.0; - foreach (var item in soc_Summary.Where(x=>x.Key.Item2 == farm.Key.Item2)) + foreach (var item in soc_Summary.Where(x => x.Key.Item2 == farm.Key.Item2)) { var cropfieldArea = item.Value.SingleOrDefault(x => x.Key == "Total_crop_area")?.Value ?? 0; sumCarbonMan += item.Value.SingleOrDefault(x => x.Key == "SOC_CarbonManure")?.Value ?? 0; @@ -1809,7 +1781,7 @@ namespace FarmMapsAPI.Carbon var resultBal = sumBal / farmArea.Total_crop_area; var resultIni = sumIni / farmArea.Total_crop_area; var resultiniCc = sumInicc / farmArea.Total_crop_area; - var resultOm_Ini = resultiniCc;// / 0.54; //carbon_organicmatter_factor + var resultOm_Ini = resultiniCc / 0.54; //carbon_organicmatter_factor var resultCo2 = resultBal * (44.0 / 12.0); var resultCo2Tot = resultCo2 * farmArea.Total_crop_area; @@ -1838,7 +1810,7 @@ namespace FarmMapsAPI.Carbon private List GetYears(FarmInputsetsModel farmInputSet, CarbonRequest farmInput) { // assume for all cropfields the same years apply - return farmInput.CropFields.First().HistoricalCropData.Select(x => x.Year).Distinct().OrderBy(o=>o).ToList(); + return farmInput.CropFields.First().HistoricalCropData.Select(x => x.Year).Distinct().OrderBy(o => o).ToList(); } private Dictionary> GetSoilTypeData(CarbonRequest farmInput) @@ -1856,7 +1828,7 @@ namespace FarmMapsAPI.Carbon var soilPropertiesField = new Dictionary(); foreach (var field in farmInput.CropFields) { - soilPropertiesField.Add(field.Name, new SoilPropertyType { OM_Cont = field.SoilProperty.OM_Const.Value, Clay_Content = field.SoilProperty.Clay_Content.Value, OM_Corr = field.SoilProperty.OM_Const.Value <= 20 ? field.SoilProperty.OM_Const.Value : 0, C_Cont = field.SoilProperty.C_Const.Value, C_Corr = field.SoilProperty.C_Const.Value <= 20 ? field.SoilProperty.C_Const.Value : 0, Depth10 = field.SoilProperty.Depth10.Value, Depth = field.SoilProperty.Depth }); + soilPropertiesField.Add(field.Name, new SoilPropertyType { OM_Cont = field.SoilProperty.OM_Choice.ToLower() == "c" ? field.SoilProperty.OM_Const.Value * 1.85185 : field.SoilProperty.OM_Const.Value, Clay_Content = field.SoilProperty.Clay_Content.Value, OM_Corr = field.SoilProperty.OM_Const.Value <= 20 ? field.SoilProperty.OM_Const.Value : 0, Depth10 = field.SoilProperty.Depth10.Value, Depth = field.SoilProperty.Depth }); } return soilPropertiesField; @@ -1869,7 +1841,7 @@ namespace FarmMapsAPI.Carbon { foreach (var item2 in item.Value) { - soilPropSoilType.Add((item.Key, item2), new SoilPropertyType { Bulk_Density = soilPropertiesField[item.Key].Bulk_Density, Clay_Content = soilPropertiesField[item.Key].Clay_Content, OM_Cont = soilPropertiesField[item.Key].OM_Cont, OM_Corr = soilPropertiesField[item.Key].OM_Corr, C_Cont = soilPropertiesField[item.Key].C_Cont, C_Corr = soilPropertiesField[item.Key].C_Corr }); // soilPropertiesField[item.Key]); + soilPropSoilType.Add((item.Key, item2), new SoilPropertyType { Bulk_Density = soilPropertiesField[item.Key].Bulk_Density, Clay_Content = soilPropertiesField[item.Key].Clay_Content, OM_Cont = soilPropertiesField[item.Key].OM_Cont, OM_Corr = soilPropertiesField[item.Key].OM_Corr }); // soilPropertiesField[item.Key]); } } return soilPropSoilType; @@ -1937,7 +1909,7 @@ namespace FarmMapsAPI.Carbon } - var farmPostalCode = farmInput.PostalCode; + var farmPostalCode = farmInput.PostalCode; if (farmInput.geometry != null) { // determine poatalcode from geometry @@ -1961,7 +1933,7 @@ namespace FarmMapsAPI.Carbon var climateVariable = new Dictionary>(); - foreach (var field in farmInput.CropFields.Select(s=>s.Name)) + foreach (var field in farmInput.CropFields.Select(s => s.Name)) { var monthClimateList = new List(); foreach (var month in gisSoilSet.AllMonths)