aw6355: undo this new solution...
This commit is contained in:
@@ -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)
|
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}";
|
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)
|
foreach (var orgManure in allOrgManure)
|
||||||
{
|
{
|
||||||
if (!manCcontConfig.Any(x=>x.ManCcont == orgManure))
|
if (!manCcontConfig.Any(x => x.ManCcont == orgManure))
|
||||||
{
|
{
|
||||||
return $"Unknown organic manure {orgManure}";
|
return $"Unknown organic manure {orgManure}";
|
||||||
}
|
}
|
||||||
@@ -225,18 +225,6 @@ namespace FarmMapsAPI.Carbon
|
|||||||
{
|
{
|
||||||
var knmiFile = Helper.GetPlatformIndependentDirectoryPath(Path.Combine(configPath, "KNMI_data.csv"));
|
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)
|
// soilTypeData (external input)
|
||||||
var soilTypeData = GetSoilTypeData(farmInput);
|
var soilTypeData = GetSoilTypeData(farmInput);
|
||||||
|
|
||||||
@@ -251,7 +239,6 @@ namespace FarmMapsAPI.Carbon
|
|||||||
|
|
||||||
var year = GetYears(farmInputSet, farmInput);
|
var year = GetYears(farmInputSet, farmInput);
|
||||||
|
|
||||||
//var carbon_organicmatter_factor = 0.54;
|
|
||||||
|
|
||||||
//////////////////////////////////////////////
|
//////////////////////////////////////////////
|
||||||
// precalculations
|
// precalculations
|
||||||
@@ -266,18 +253,14 @@ namespace FarmMapsAPI.Carbon
|
|||||||
{
|
{
|
||||||
var soilProps = soilPropSoilType.Keys.Where(x => x.Item1 == item.Key).ToList();
|
var soilProps = soilPropSoilType.Keys.Where(x => x.Item1 == item.Key).ToList();
|
||||||
var sumCorr = 0.0;
|
var sumCorr = 0.0;
|
||||||
var sumC_Corr = 0.0;
|
|
||||||
foreach (var soilProp in soilProps)
|
foreach (var soilProp in soilProps)
|
||||||
{
|
{
|
||||||
sumCorr += soilPropSoilType[soilProp].OM_Corr;
|
sumCorr += soilPropSoilType[soilProp].OM_Corr;
|
||||||
sumC_Corr += soilPropSoilType[soilProp].C_Corr;
|
|
||||||
}
|
}
|
||||||
item.Value.OM_Corr = sumCorr;
|
item.Value.OM_Corr = sumCorr;
|
||||||
item.Value.C_Corr = sumC_Corr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var oM_corr_SoilType = new Dictionary<(string,string), double>();
|
var oM_corr_SoilType = new Dictionary<(string, string), double>();
|
||||||
var C_corr_SoilType = new Dictionary<(string, string), double>();
|
|
||||||
foreach (var item in soilPropertiesField)
|
foreach (var item in soilPropertiesField)
|
||||||
{
|
{
|
||||||
var soilOfItem = soilTypeData[item.Key].FirstOrDefault();
|
var soilOfItem = soilTypeData[item.Key].FirstOrDefault();
|
||||||
@@ -290,38 +273,28 @@ namespace FarmMapsAPI.Carbon
|
|||||||
}
|
}
|
||||||
// Different corrections for depth (10, 25, 30 cm)
|
// Different corrections for depth (10, 25, 30 cm)
|
||||||
// depth of 10cm has same result as previous checkbox (sample taken at 10cm)
|
// 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)
|
if (initialSoil == "Temp_gras" && soilPropertyDepth10)
|
||||||
{
|
{
|
||||||
oM_corr_SoilType.Add((item.Key, soilOfItem), item.Value.OM_Cont * 0.97 * (1 / 0.54));
|
oM_corr_SoilType.Add((item.Key, soilOfItem), item.Value.OM_Cont * 0.97);
|
||||||
C_corr_SoilType.Add((item.Key, soilOfItem), item.Value.OM_Cont * 0.97);
|
|
||||||
}
|
}
|
||||||
else if (cropSet.Grass_nat.Contains(initialSoil) && soilPropertyDepth10 && (soilOfItem == "Klei" || soilOfItem == "Zand"))
|
else if (cropSet.Grass_nat.Contains(initialSoil) && soilPropertyDepth10 && (soilOfItem == "Klei" || soilOfItem == "Zand"))
|
||||||
{
|
{
|
||||||
if (soilOfItem == "Klei")
|
if (soilOfItem == "Klei")
|
||||||
{
|
{
|
||||||
oM_corr_SoilType.Add((item.Key, soilOfItem), item.Value.OM_Cont * 0.67 * (1/0.54));
|
oM_corr_SoilType.Add((item.Key, soilOfItem), item.Value.OM_Cont * 0.67);
|
||||||
C_corr_SoilType.Add((item.Key, soilOfItem), item.Value.OM_Cont * 0.67);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
oM_corr_SoilType.Add((item.Key, soilOfItem), item.Value.OM_Cont * 0.81 * (1 / 0.54));
|
oM_corr_SoilType.Add((item.Key, soilOfItem), item.Value.OM_Cont * 0.81);
|
||||||
C_corr_SoilType.Add((item.Key, soilOfItem), item.Value.OM_Cont * 0.81);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
oM_corr_SoilType.Add((item.Key, soilOfItem), item.Value.OM_Cont * (1 / 0.54));
|
oM_corr_SoilType.Add((item.Key, soilOfItem), item.Value.OM_Cont);
|
||||||
C_corr_SoilType.Add((item.Key, soilOfItem), item.Value.OM_Cont);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var C_Corr = new Dictionary<string, double>();
|
|
||||||
foreach (var item in C_corr_SoilType)
|
|
||||||
{
|
|
||||||
C_Corr.Add(item.Key.Item1, item.Value);
|
|
||||||
}
|
|
||||||
|
|
||||||
var oM_Corr = new Dictionary<string, double>();
|
var oM_Corr = new Dictionary<string, double>();
|
||||||
foreach (var item in oM_corr_SoilType)
|
foreach (var item in oM_corr_SoilType)
|
||||||
{
|
{
|
||||||
@@ -926,8 +899,7 @@ namespace FarmMapsAPI.Carbon
|
|||||||
foreach (var field in cropAreaField1.Where(x => x.Key.Item2 == loopYear))
|
foreach (var field in cropAreaField1.Where(x => x.Key.Item2 == loopYear))
|
||||||
{
|
{
|
||||||
var valueList = new List<ColumnValue>();
|
var valueList = new List<ColumnValue>();
|
||||||
//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] * 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
|
|
||||||
foreach (var crop in field.Value)
|
foreach (var crop in field.Value)
|
||||||
{
|
{
|
||||||
valueList.Add(new ColumnValue(crop.Key, result));
|
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 carbonGreenManure = carbonInput.Value.SingleOrDefault(x => x.Key == "CarbonGreenManure")?.Value ?? 0;
|
||||||
var resultRpm = 0.0;
|
var resultRpm = 0.0;
|
||||||
var resultDpm = 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;
|
resultRpm = (carbonResidues) * 0.6;
|
||||||
resultDpm = (carbonResidues) * 0.4;
|
resultDpm = (carbonResidues) * 0.4;
|
||||||
@@ -1673,7 +1645,7 @@ namespace FarmMapsAPI.Carbon
|
|||||||
summary.Initial = sum;
|
summary.Initial = sum;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach(var item in bulkDens)
|
foreach (var item in bulkDens)
|
||||||
{
|
{
|
||||||
var result = item.Value;
|
var result = item.Value;
|
||||||
foreach (var lYear in allYears)
|
foreach (var lYear in allYears)
|
||||||
@@ -1736,7 +1708,7 @@ namespace FarmMapsAPI.Carbon
|
|||||||
var iniValue = item.Value.SingleOrDefault(x => x.Key == "IniCcontent")?.Value ?? 0;
|
var iniValue = item.Value.SingleOrDefault(x => x.Key == "IniCcontent")?.Value ?? 0;
|
||||||
var balanceValue = item.Value.SingleOrDefault(x => x.Key == "Balance")?.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);
|
var resultCo2 = balanceValue * (44.0 / 12.0);
|
||||||
|
|
||||||
item.Value.Add(new ColumnValue("OM_ini", resultOmIni));
|
item.Value.Add(new ColumnValue("OM_ini", resultOmIni));
|
||||||
@@ -1755,7 +1727,7 @@ namespace FarmMapsAPI.Carbon
|
|||||||
var greenManure = item.SOC_CarbonGreenManure;
|
var greenManure = item.SOC_CarbonGreenManure;
|
||||||
var compost = item.SOC_CarbonCompost;
|
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);
|
item.CO2seq = balanceValue * (44.0 / 12.0);
|
||||||
|
|
||||||
var emision = -1 * (manure + residues + greenManure + compost - balanceValue);
|
var emision = -1 * (manure + residues + greenManure + compost - balanceValue);
|
||||||
@@ -1784,7 +1756,7 @@ namespace FarmMapsAPI.Carbon
|
|||||||
var sumIni = 0.0;
|
var sumIni = 0.0;
|
||||||
var sumInicc = 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;
|
var cropfieldArea = item.Value.SingleOrDefault(x => x.Key == "Total_crop_area")?.Value ?? 0;
|
||||||
sumCarbonMan += item.Value.SingleOrDefault(x => x.Key == "SOC_CarbonManure")?.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 resultBal = sumBal / farmArea.Total_crop_area;
|
||||||
var resultIni = sumIni / farmArea.Total_crop_area;
|
var resultIni = sumIni / farmArea.Total_crop_area;
|
||||||
var resultiniCc = sumInicc / 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 resultCo2 = resultBal * (44.0 / 12.0);
|
||||||
var resultCo2Tot = resultCo2 * farmArea.Total_crop_area;
|
var resultCo2Tot = resultCo2 * farmArea.Total_crop_area;
|
||||||
|
|
||||||
@@ -1838,7 +1810,7 @@ namespace FarmMapsAPI.Carbon
|
|||||||
private List<int> GetYears(FarmInputsetsModel farmInputSet, CarbonRequest farmInput)
|
private List<int> GetYears(FarmInputsetsModel farmInputSet, CarbonRequest farmInput)
|
||||||
{
|
{
|
||||||
// assume for all cropfields the same years apply
|
// 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<string, List<string>> GetSoilTypeData(CarbonRequest farmInput)
|
private Dictionary<string, List<string>> GetSoilTypeData(CarbonRequest farmInput)
|
||||||
@@ -1856,7 +1828,7 @@ namespace FarmMapsAPI.Carbon
|
|||||||
var soilPropertiesField = new Dictionary<string, SoilPropertyType>();
|
var soilPropertiesField = new Dictionary<string, SoilPropertyType>();
|
||||||
foreach (var field in farmInput.CropFields)
|
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;
|
return soilPropertiesField;
|
||||||
@@ -1869,7 +1841,7 @@ namespace FarmMapsAPI.Carbon
|
|||||||
{
|
{
|
||||||
foreach (var item2 in item.Value)
|
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;
|
return soilPropSoilType;
|
||||||
@@ -1937,7 +1909,7 @@ namespace FarmMapsAPI.Carbon
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
var farmPostalCode = farmInput.PostalCode;
|
var farmPostalCode = farmInput.PostalCode;
|
||||||
if (farmInput.geometry != null)
|
if (farmInput.geometry != null)
|
||||||
{
|
{
|
||||||
// determine poatalcode from geometry
|
// determine poatalcode from geometry
|
||||||
@@ -1961,7 +1933,7 @@ namespace FarmMapsAPI.Carbon
|
|||||||
|
|
||||||
var climateVariable = new Dictionary<string, List<ClimateVariable>>();
|
var climateVariable = new Dictionary<string, List<ClimateVariable>>();
|
||||||
|
|
||||||
foreach (var field in farmInput.CropFields.Select(s=>s.Name))
|
foreach (var field in farmInput.CropFields.Select(s => s.Name))
|
||||||
{
|
{
|
||||||
var monthClimateList = new List<ClimateVariable>();
|
var monthClimateList = new List<ClimateVariable>();
|
||||||
foreach (var month in gisSoilSet.AllMonths)
|
foreach (var month in gisSoilSet.AllMonths)
|
||||||
|
|||||||
Reference in New Issue
Block a user