DmitrMakeev commited on
Commit
e721ff8
·
verified ·
1 Parent(s): eae1bb4

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +54 -3
app.py CHANGED
@@ -711,8 +711,32 @@ INPUT_DATA = {
711
 
712
 
713
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
714
  class NutrientCalculator:
715
- def __init__(self, fertilizer_constants, profile_settings, liters, rounding_precision, activation_cacl, enhancement_cacl):
716
  self.fertilizers = fertilizer_constants
717
  self.profile = profile_settings
718
  self.volume = liters
@@ -721,6 +745,8 @@ class NutrientCalculator:
721
  # Новые параметры
722
  self.activation_cacl = float(activation_cacl) # Активация CaCl
723
  self.enhancement_cacl = float(enhancement_cacl) # Усиление CaCl
 
 
724
 
725
  total_parts = self.profile["NO3_RAT"] + 1
726
  self.target = {
@@ -737,14 +763,35 @@ class NutrientCalculator:
737
  self.results = {fert: {'граммы': 0.0} for fert in self.fertilizers}
738
 
739
  def calculate(self):
 
740
  self._apply_fertilizer("Аммоний азотнокислый", "N (NH4+)", self.target["N (NH4+)"])
 
 
741
  self._apply_fertilizer("Монофосфат калия", "P", self.target["P"])
742
- self._apply_fertilizer("Сульфат магния", "Mg", self.target["Mg"])
 
 
 
 
 
 
 
 
 
 
 
 
 
743
  self._balance_k_s()
 
 
744
  self._distribute_calcium()
 
 
745
  no3_needed = self.target["N (NO3-)"] - self.actual["N (NO3-)"]
746
  if no3_needed > 0:
747
  self._apply_fertilizer("Калий азотнокислый", "N (NO3-)", no3_needed)
 
748
  return self._verify_results()
749
 
750
  def _apply_fertilizer(self, name, element, target_ppm):
@@ -847,6 +894,8 @@ liters = profile_settings["liters"]
847
  rounding_precision = 3
848
  activation_cacl = float(profile_settings.get("activation_cacl", 5))
849
  enhancement_cacl = float(profile_settings.get("enhancement_cacl", 0.1))
 
 
850
 
851
  # Создаем калькулятор
852
  calculator = NutrientCalculator(
@@ -855,7 +904,9 @@ calculator = NutrientCalculator(
855
  liters=liters,
856
  rounding_precision=rounding_precision,
857
  activation_cacl=activation_cacl,
858
- enhancement_cacl=enhancement_cacl
 
 
859
  )
860
 
861
  # Запуск расчета
 
711
 
712
 
713
 
714
+ # Входные данные (пример)
715
+ INPUT_DATA = {
716
+ "fertilizerConstants": {
717
+ "Кальциевая селитра": {"N (NO3-)": 0.11863, "Ca": 0.16972},
718
+ "Калий азотнокислый": {"N (NO3-)": 0.13854, "K": 0.36672},
719
+ "Аммоний азотнокислый": {"N (NO3-)": 0.17499, "N (NH4+)": 0.17499},
720
+ "Сульфат магния": {"Mg": 0.10220, "S": 0.13483},
721
+ "Магний азотнокислый": {"Mg": 0.0948, "N (NO3-)": 0.109}, # Новое удобрение
722
+ "Монофосфат калия": {"P": 0.22761, "K": 0.28731},
723
+ "Калий сернокислый": {"K": 0.44874, "S": 0.18401},
724
+ "Кальций хлорид": {"Ca": 0.272, "Cl": 0.483}
725
+ },
726
+ "profileSettings": {
727
+ "P": 60, "K": 194, "Mg": 48.5, "Ca": 89.25, "S": 79.445, "CaCl": 38.5,
728
+ "NO3_RAT": 1.5, "TOTAL_NITROG": 138.57, "liters": 100,
729
+ "activation_cacl": 5, # Добавлено
730
+ "enhancement_cacl": 0.1, # Добавлено
731
+ "use_magnesium_sulfate": 1, # Флаг для использования "Сульфата магния"
732
+ "magnesium_nitrate_ratio": 0.2 # Коэффициент для "Магния азотнокислого"
733
+ }
734
+ }
735
+
736
+ from tabulate import tabulate
737
+
738
  class NutrientCalculator:
739
+ def __init__(self, fertilizer_constants, profile_settings, liters, rounding_precision, activation_cacl, enhancement_cacl, use_magnesium_sulfate, magnesium_nitrate_ratio):
740
  self.fertilizers = fertilizer_constants
741
  self.profile = profile_settings
742
  self.volume = liters
 
745
  # Новые параметры
746
  self.activation_cacl = float(activation_cacl) # Активация CaCl
747
  self.enhancement_cacl = float(enhancement_cacl) # Усиление CaCl
748
+ self.use_magnesium_sulfate = int(use_magnesium_sulfate) # Флаг для использования "Сульфата магния"
749
+ self.magnesium_nitrate_ratio = float(magnesium_nitrate_ratio) # Коэффициент для "Магния азотнокислого"
750
 
751
  total_parts = self.profile["NO3_RAT"] + 1
752
  self.target = {
 
763
  self.results = {fert: {'граммы': 0.0} for fert in self.fertilizers}
764
 
765
  def calculate(self):
766
+ # Добавляем аммонийный азот
767
  self._apply_fertilizer("Аммоний азотнокислый", "N (NH4+)", self.target["N (NH4+)"])
768
+
769
+ # Добавляем фосфор
770
  self._apply_fertilizer("Монофосфат калия", "P", self.target["P"])
771
+
772
+ # Добавляем магний через "Сульфат магния", если флаг включен
773
+ if self.use_magnesium_sulfate == 1:
774
+ mg_needed = self.target["Mg"] - self.actual["Mg"]
775
+ if mg_needed > 0:
776
+ self._apply_fertilizer("Сульфат магния", "Mg", mg_needed * (1 - self.magnesium_nitrate_ratio))
777
+
778
+ # Добавляем магний через "Магний азотнокислый", если коэффициент > 0
779
+ if self.magnesium_nitrate_ratio > 0:
780
+ mg_remaining = self.target["Mg"] - self.actual["Mg"]
781
+ if mg_remaining > 0:
782
+ self._apply_fertilizer("Магний азотнокислый", "Mg", mg_remaining * self.magnesium_nitrate_ratio)
783
+
784
+ # Балансируем калий и серу
785
  self._balance_k_s()
786
+
787
+ # Распределяем кальций
788
  self._distribute_calcium()
789
+
790
+ # Балансируем нитратный азот
791
  no3_needed = self.target["N (NO3-)"] - self.actual["N (NO3-)"]
792
  if no3_needed > 0:
793
  self._apply_fertilizer("Калий азотнокислый", "N (NO3-)", no3_needed)
794
+
795
  return self._verify_results()
796
 
797
  def _apply_fertilizer(self, name, element, target_ppm):
 
894
  rounding_precision = 3
895
  activation_cacl = float(profile_settings.get("activation_cacl", 5))
896
  enhancement_cacl = float(profile_settings.get("enhancement_cacl", 0.1))
897
+ use_magnesium_sulfate = int(profile_settings.get("use_magnesium_sulfate", 1)) # Флаг для "Сульфата магния"
898
+ magnesium_nitrate_ratio = float(profile_settings.get("magnesium_nitrate_ratio", 0.2)) # Коэффициент для "Магния азотнокислого"
899
 
900
  # Создаем калькулятор
901
  calculator = NutrientCalculator(
 
904
  liters=liters,
905
  rounding_precision=rounding_precision,
906
  activation_cacl=activation_cacl,
907
+ enhancement_cacl=enhancement_cacl,
908
+ use_magnesium_sulfate=use_magnesium_sulfate,
909
+ magnesium_nitrate_ratio=magnesium_nitrate_ratio
910
  )
911
 
912
  # Запуск расчета