From 1ae38ab34bcbdff622c7623119ee54bad419f4ed Mon Sep 17 00:00:00 2001
From: zmk <496160012@qq.com>
Date: 星期三, 28 八月 2024 16:11:08 +0800
Subject: [PATCH] 提交代码
---
CalHead.py | 908 +++++++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 754 insertions(+), 154 deletions(-)
diff --git a/CalHead.py b/CalHead.py
index 55ecad8..162383f 100644
--- a/CalHead.py
+++ b/CalHead.py
@@ -5,78 +5,129 @@
@author: ZMK
"""
-import flopy
import flopy.utils.binaryfile as bf
import csv
import Base as base
import os
import json
+import subprocess
+import re
import ModelPeriod
import numpy as np
+import AchiveReport
-
+#娣诲姞modle
+def addModelJson(model_name,start_time,end_time,remark):
+
+ context=""
+ prediction_path = base.prefix + "\\model_list.json"
+ with open(prediction_path,encoding='utf-8') as f:
+ context = json.load(f)
+ array=[]
+ for item in context:
+ array.append(item)
+
+ dicts={"model_name":model_name,
+ "start_time":start_time,"end_time":end_time,"remark":remark}
+ array.append(dicts)
+
+ with open(prediction_path, "w",encoding='utf-8') as outfile:
+ json.dump(array, outfile,ensure_ascii=False)
+ return "淇濆瓨瀹屾瘯锛�";
+
+#鍒犻櫎model
+def removeModelJson(model_name):
+ context=""
+ prediction_path = base.prefix + "\\model_list.json"
+ with open(prediction_path,encoding='utf-8') as f:
+ context = json.load(f)
+ array=[]
+ for item in context:
+ if item["model_name"] != model_name:
+ array.append(item)
+
+ with open(prediction_path, "w",encoding='utf-8') as outfile:
+ json.dump(array, outfile,ensure_ascii=False)
+
+ return "鍒犻櫎妯″瀷瀹屾瘯锛�";
+
def get_model_json(model_name):
period_json=""
prediction_path = base.model_dir + model_name +"\\prediction.json"
with open(prediction_path,encoding='utf-8') as f:
- period_json = json.load(f)
-
+ period_json = json.load(f)
return period_json;
def get_model_period(model_name):
- period_json=""
- prediction_path = base.model_dir + model_name +"\\prediction.json"
- with open(prediction_path,encoding='utf-8') as f:
- period_json = json.load(f)
-
+ period_json= get_model_json(model_name)
start_time = period_json["start_time"]
- end_time = period_json["end_time"]
-
+ end_time = period_json["end_time"]
months = ModelPeriod.get_months_in_range_ym(start_time, end_time)
return months;
+def is_cloned_model(model_name):
+ paths = base.model_dir + model_name + "\\water_bal.txt"
+ if os.path.exists(paths):
+ return False
+ return True
+
#瑙傛祴浜昪hart
-def obsChartdata(model_name, row, column):
+def obsChartdata(wellId,model_name, row, column):
row = int(row)-1
column = int(column)-1
- dir = base.model_dir + model_name + "\\modflow.head"
-
- head = bf.HeadFile(dir)
- alldata = head.get_alldata()
- period = len(alldata)
-
- layer = 3
-
- xdata = []
- ydata = []
- result = {}
- for per in range(period):
- for lay in range(layer):
- if per % 3 == 0 and lay == 0:
- md = (int)(lay / 3 + 1)
- per_array = alldata[per][lay]
-
- cell_data = (float)(per_array[row][column])
- ydata.append(cell_data)
-
- period_json= get_model_json(model_name)
-
+ dir=""
+ period_json= get_model_json(model_name)
start_time = period_json["start_time"]
end_time = period_json["end_time"]
+ xmonths = ModelPeriod.get_months_in_range_ym(start_time, end_time)
- months = ModelPeriod.get_months_in_range_ym(start_time, end_time)
-
- result = {"y_data": ydata, "x_data": months}
+ if model_name == base.not_allowed_model:
+ dir = base.baseModel2 + "\\modflow.head"
+ else:
+ dir = base.model_dir + model_name + "\\modflow.head"
+ cloned = is_cloned_model(model_name)
+ if cloned ==True:
+ return {"y_data": [],"y_data2":[],"x_data":xmonths }
+
+ head = bf.HeadFile(dir)
+ alldata = head.get_alldata()
+
+ #鍛ㄦ湡鏁�
+ months = int(len(alldata)/3)
+ ydata= []
+ result = {}
+ for month in range(months):
+ z1= alldata[int(month+1)*3-1,0,:,:]
+ cell_data = float(z1[row][column])
+ ydata.append(round(cell_data,2))
+
+ y_data2=[]
+ if model_name == base.not_allowed_model:
+ array_data = np.loadtxt(base.obswell_data_path, dtype=str,encoding='utf-8')
+ y_data2= getObsData(wellId,array_data)
+
+ result = {"y_data": ydata,"y_data2":y_data2,"x_data": xmonths}
return result
-def getRowCloumnById(index_id):
- row = 104
- column =114
- count=0
+def getObsData(wellId,array_data):
+ result =[]
+ new_list =[]
+ for item in array_data:
+ if item[0]==wellId:
+ result.append(item[3])
+ for i in range(0,len(result),3):
+ data =( float(result[i]) +float(result[i+1])+float(result[i+2]))/3
+ data = round(data,2)
+ new_list.append(data)
+
+ return new_list;
+
+def getRowCloumnById(index_id):
+ row,column,count = 104,114,0
for i in range(row):
for j in range(column):
if index_id == count:
@@ -89,116 +140,39 @@
#鍦颁笅姘翠俊鎭�
def earthWaterChart(model_name, index_id):
- row_column = getRowCloumnById(index_id)
-
+ row_column = getRowCloumnById(index_id)
row = row_column[0]
column = row_column[1]
- dir = base.model_dir + model_name + "\\modflow.head"
-
- head = bf.HeadFile(dir)
- alldata = head.get_alldata()
- period = len(alldata)
-
- layer = 3
-
- ydata = []
- result = {}
- for per in range(period):
- for lay in range(layer):
- if per % 3 == 0 and lay == 0:
-
- per_array = alldata[per][lay]
-
- cell_data = (float)(per_array[row][column])
- ydata.append(cell_data)
-
- period_json= get_model_json(model_name)
+ period_json= get_model_json(model_name)
start_time = period_json["start_time"]
end_time = period_json["end_time"]
+ xmonths = ModelPeriod.get_months_in_range_ym(start_time, end_time)
+ dir = ""
+ if model_name == base.not_allowed_model:
+ dir = base.baseModel2 + "\\modflow.head"
+ else:
+ dir = base.model_dir + model_name + "\\modflow.head"
+ cloned = is_cloned_model(model_name)
+ if cloned ==True:
+ return {"y_data": [],"x_data":xmonths }
- months = ModelPeriod.get_months_in_range_ym(start_time, end_time)
+ head = bf.HeadFile(dir)
+ alldata = head.get_alldata()
+
+ #鍛ㄦ湡鏁�
+ months = int(len(alldata)/3)
+ ydata= []
+ result = {}
+ for month in range(months):
+ z1= alldata[int(month+1)*3-1,0,:,:]
+ cell_data = float(z1[row][column])
+ ydata.append(round(cell_data,2))
- result = {"y_data": ydata, "x_data": months}
+ result = {"y_data": ydata, "x_data": xmonths}
return result
-
-def heatmapdata(model_name,period):
- dir = base.model_dir + model_name + "\\modflow.head"
-
- head = bf.HeadFile(dir)
-
- alldata = head.get_alldata()
+
- index = int(period)*3
- return alldata[index][0]
-
-
-#姘村潎琛¤绠�
-def waterEqu(model_name):
- if model_name == '202001_202212':
- water_equ_path = base.prefix + "\\water_equ.json"
- with open(water_equ_path,encoding='utf-8') as f:
- data = json.load(f)
- return data
- else:
- year = model_name[0:4]
- title =[year]
- dict ={"title":title}
-
- celldata = np.array(base.water_equ2022).tolist()
-
- predict_json= get_model_json(model_name)
-
- a1=float(celldata[0])
- a2=float(celldata[1])
- a3=float(celldata[2])
- a4=float(celldata[3])
-
- b1=float(celldata[4])
- b2=float(celldata[5])
- b3=float(celldata[6])
-
- if predict_json["rain"]:
- a1= float(predict_json["rain"]["ratio"]) * float(celldata[0])
- a3= float(predict_json["rain"]["ratio"]) * float(celldata[2])
- a4= float(predict_json["rain"]["ratio"]) * float(celldata[3])
- b2= float(predict_json["rain"]["ratio"]) * float(celldata[5])
- b3= float(predict_json["rain"]["ratio"]) * float(celldata[6])
- if predict_json["river"]:
- a2= float(predict_json["river"]["ratio"]) * float(celldata[1])
-
- if predict_json["mine"]:
- b1= b1
-
- in_data= a1+a2+a3+a4
- out_data= b1 +b2 + b3
- float_data=[a1,a2,a3,a4,in_data,b1,b2,b3,out_data,in_data-out_data]
-
- inarray=[]
- inarray.append({"name":"闄嶆按鍏ユ笚閲�","value":a1})
- inarray.append({"name":"娌虫祦鍏ユ笚閲�","value":a2})
- inarray.append({"name":"L1渚у悜琛ョ粰閲�","value":a3})
- inarray.append({"name":"L3渚у悜琛ョ粰閲�","value":a4})
- outarray=[]
- outarray.append({"name":"浜哄伐寮�閲囬噺","value":b1})
- outarray.append({"name":"L1渚у悜娴佸嚭閲�","value":b2})
- outarray.append({"name":"L3渚у悜娴佸嚭閲�","value":b3})
- pie1={str(year):inarray}
- pie2={str(year):outarray}
-
- dict["pie1"]=pie1
- dict["pie2"]=pie2
-
- array2d=[]
- array2d.append([str(year)])
- for i in range(len(float_data)):
- tmp=[]
- tmp.append(str(float_data[i]))
- array2d.append(tmp)
- dict["data"]=array2d
- return dict
-
-
#瀵煎嚭csv鏂囦欢
def exportCsV(model_name):
@@ -207,26 +181,652 @@
if not os.path.exists(out_path):
os.mkdir(out_path)
- head = bf.HeadFile(dir)
-
+ # z1= alldata[int(per1)*3,0,:,:]
+ head = bf.HeadFile(dir)
alldata = head.get_alldata()
- month = len(alldata)
- layer = 3
-
- for i in range(month):
- for j in range(layer):
- if i % 3 == 0:
- md = (int)(i / 3 + 1)
- filename = out_path + str(md) + '-' + str(j+1) + '.csv'
+ months = int(len(alldata)/3)
+ layers = 3
+ #渚嬪 0-36鏈�
+ for month in range(months):
+ for layer in range (layers):
+ z_last= alldata[(month+1)*3-1,layer,:,:]
+
+ filename = out_path + str(month+1) + '-' + str(layer+1) + '.csv'
f = open(filename, 'w', newline='')
writer = csv.writer(f)
- for p in alldata[i][j]:
+
+ for p in z_last:
writer.writerow(p)
f.close()
-
+
return out_path
+
+#姘村潎琛¤绠�
+def waterEqu(model_name):
+ if model_name == base.not_allowed_model:
+ water_equ_path = base.prefix + "\\water_equ.json"
+ with open(water_equ_path,encoding='utf-8') as f:
+ data = json.load(f)
+ return data
+ else:
+ year = model_name
+ title =[year]
+ dict ={"title":title}
+
+ jx = get_model_json(model_name)
+ dict["start_time"]=jx["start_time"]
+ dict["end_time"]=jx["end_time"]
+
+ paths=base.model_dir + model_name +"\\water_bal.txt"
+ wat = water_balance(model_name, paths)
+
+ in_data= round(wat[0]+ wat[1]+ wat[2]+ wat[3] , 4)
+ out_data= round(wat[4] + wat[5] + wat[6], 4)
+ inout = round(in_data-out_data, 4)
+ float_data=[wat[0],wat[1],wat[2],wat[3],in_data,
+ wat[4],wat[5], wat[6],out_data,inout]
+
+ inarray=[]
+ inarray.append({"name":"闄嶆按鍏ユ笚閲�","value":wat[0]})
+ inarray.append({"name":"娌虫祦鍏ユ笚閲�","value":wat[1]})
+ inarray.append({"name":"涓�灞備晶鍚戣ˉ缁欓噺","value":wat[2]})
+ inarray.append({"name":"涓夊眰渚у悜琛ョ粰閲�","value":wat[3]})
+ outarray=[]
+ outarray.append({"name":"浜哄伐寮�閲囬噺","value":wat[4]})
+ outarray.append({"name":"涓�灞備晶鍚戞祦鍑洪噺","value":wat[5]})
+ outarray.append({"name":"涓夊眰渚у悜娴佸嚭閲�","value":wat[6]})
+ pie1={str(year):inarray}
+ pie2={str(year):outarray}
+
+ dict["pie1"]=pie1
+ dict["pie2"]=pie2
+
+ array2d=[]
+ array2d.append(["鏁版嵁锛堜嚎绔嬫柟绫筹級"])
+ for i in range(len(float_data)):
+ tmp=[]
+ tmp.append(str(float_data[i]))
+ array2d.append(tmp)
+ dict["data"]=array2d
+ return dict
+def run_zonebudget_bal(model_name):
+ # 瀹氫箟exe鏂囦欢鐨勮矾寰勫拰鍙傛暟
+ exe_path = base.ZoneBudget64Exe
+ txt_path = base.model_dir + model_name + "\\water_bal.txt\n"
+ cell_path = base.model_dir + model_name + "\\modflow.flow\n"
+ process = subprocess.Popen([exe_path], stdin=subprocess.PIPE,shell = True)
+ process.stdin.write(txt_path.encode()) # 杈撳叆鍙傛暟1
+ process.stdin.write(cell_path.encode())
+ process.stdin.write(b"title\n")
+ process.stdin.write(base.water_bal_zones.encode())
+ process.stdin.write(b"A\n")
+ output, _ = process.communicate()
+ print(output)
+
+
+def run_zonebudget_res(model_name):
+ # 瀹氫箟exe鏂囦欢鐨勮矾寰勫拰鍙傛暟
+ exe_path = base.ZoneBudget64Exe
+ txt_path = base.model_dir + model_name + "\\water_res.txt\n"
+ cell_path = base.model_dir + model_name + "\\modflow.flow\n"
+ process = subprocess.Popen([exe_path], stdin=subprocess.PIPE,shell = True)
+ process.stdin.write(txt_path.encode()) # 杈撳叆鍙傛暟1
+ process.stdin.write(cell_path.encode())
+ process.stdin.write(b"title\n")
+ process.stdin.write(base.water_res_zones.encode())
+ process.stdin.write(b"A\n")
+ output, _ = process.communicate()
+ print(output)
+
+def reg_find_int(text):
+ numbers = re.findall(r'\d+', text)
+ return numbers
+
+
+def read_txt(path):
+ data =[]
+ with open(path, 'r') as file:
+ lines = file.readlines()
+ for line in lines:
+ data.append(line)
+ return data
+#瑙f瀽姘村潎琛℃暟鎹�
+def water_balance(model_name,paths):
+ data= read_txt(paths)
+ lens = len(data)
+ index = 0
+ segment=[]
+ dicts={}
+ flag = 0
+ title=""
+ while index < lens:
+ strs = data[index].strip()
+ if strs.startswith("Flow Budget for Zone"):
+ segment=[]
+ flag = 1
+ title=strs
+ if strs.startswith("Percent Discrepancy"):
+ segment.append(strs)
+ numbers = reg_find_int(title)
+ key = ','.join(numbers)
+ dicts[key]=segment
+ flag = 0
+ if flag ==1 :
+ segment.append(strs)
+ index=index+1
+
+ recharge = 0
+ for key in dicts:
+ array = dicts[key]
+ temp=[]
+ for item in array:
+ if item.startswith("RECHARGE") :
+ strs = item.replace(" ", "").replace("RECHARGE=", "")
+ temp.append(float(strs))
+
+ recharge += (temp[0]-temp[1])
+
+ #娌虫祦鍏ユ笚閲忥紙姝o級 鎵�鏈夊簲鍔涙湡锛宖or Zone 3鐨刉ELLS椤圭浉鍔�
+ zone3 = 0
+ for key in dicts:
+ if key.startswith("3,"):
+ array = dicts[key]
+ temp=[]
+ for item in array:
+ if item.startswith("WELLS") :
+ strs = item.replace(" ", "").replace("WELLS=", "")
+ temp.append(float(strs))
+
+ zone3 += (temp[0]-temp[1])
+
+ #L1渚у悜琛ョ粰閲忥紙姝o級 鎵�鏈夊簲鍔涙湡锛宖or Zone 4鐨処N-WELLS椤圭浉鍔�
+ Zone4_in_well=0
+ for key in dicts:
+ if key.startswith("4,"):
+ array = dicts[key]
+ for item in array:
+ if item.startswith("WELLS") :
+ strs = item.replace(" ", "").replace("WELLS=", "")
+ data = float(strs)
+ Zone4_in_well +=data
+ break
+
+ #L3渚у悜琛ョ粰閲忥紙姝o級 鎵�鏈夊簲鍔涙湡锛宖or Zone 8鐨処N-WELLS椤圭浉鍔�
+ Zone8_in_well =0
+ for key in dicts:
+ if key.startswith("8,"):
+ array = dicts[key]
+ for item in array:
+ if item.startswith("WELLS") :
+ strs = item.replace(" ", "").replace("WELLS=", "")
+ data = float(strs)
+ Zone8_in_well +=data
+ break
+
+ #浜哄伐寮�閲囬噺锛堣礋锛� 鎵�鏈夊簲鍔涙湡锛宖or Zone 5鐨凮UT-WELLS椤圭浉鍔�
+ zone5out =0
+ for key in dicts:
+ if key.startswith("5,"):
+ array = dicts[key]
+ for item in array:
+ if item.startswith("WELLS") :
+ strs = item.replace(" ", "").replace("WELLS=", "")
+ data = float(strs)
+ zone5out +=data
+
+ #L1渚у悜娴佸嚭閲忥紙璐燂級 鎵�鏈夊簲鍔涙湡锛宖or Zone 4鐨凮UT-WELLS椤圭浉鍔�
+ Zone4_out_well=0
+ for key in dicts:
+ if key.startswith("4,"):
+ array = dicts[key]
+ for item in array:
+ if item.startswith("WELLS") :
+ strs = item.replace(" ", "").replace("WELLS=", "")
+ data = float(strs)
+ Zone4_out_well +=data
+
+ # L3=L3渚у悜娴佸嚭閲忥紙璐燂級
+ L3=0.0
+ result =[recharge,zone3,Zone4_in_well,Zone8_in_well,zone5out,Zone4_out_well,L3]
+ for i in range(len(result)):
+ # 姣忚鏁版嵁瀹為檯涓婅绠� 鐨勬槸 涓�涓猻tep , 1涓猻tep =10澶�
+ result[i]= round(result[i]/100000000*10, 4)
+
+ return result
+
+
+#瑙f瀽姘磋祫婧愰噺鏁版嵁
+def water_res(model_name,paths):
+ data= read_txt(paths)
+ lens = len(data)
+ index = 0
+ segment=[]
+ dicts={}
+ flag = 0
+ title=""
+ while index < lens:
+ strs = data[index].strip()
+ if strs.startswith("Flow Budget for Zone"):
+ segment=[]
+ flag = 1
+ title=strs
+ if strs.startswith("Percent Discrepancy"):
+ segment.append(strs)
+ numbers = reg_find_int(title)
+ key = ','.join(numbers)
+ dicts[key]=segment
+ flag = 0
+ if flag ==1 :
+ segment.append(strs)
+ index=index+1
+
+ # 澶ф皵闄嶆按 for zone1閲屾墍鏈夌殑recharge椤圭浉鍔狅紙鍖呮嫭in鍜宱ut锛�
+ zone1_rechage = 0
+
+ for key in dicts:
+ if key.startswith("1,"):
+ array = dicts[key]
+ temp=[]
+ for item in array:
+ if item.startswith("RECHARGE") :
+ strs = item.replace(" ", "").replace("RECHARGE=", "")
+ temp.append(float(strs))
+
+ zone1_rechage += (temp[0]-temp[1])
+
+ #姘稿畾娌虫笚婕� for zone1閲屾墍鏈夌殑zone2椤圭浉鍔狅紙鍖呮嫭in鍜宱ut锛�
+ zone1_well = 0
+ for key in dicts:
+ if key.startswith("1,"):
+ array = dicts[key]
+ indata,outdata= 0,0
+ for item in array:
+ if item.startswith("Zone 2 to 1") :
+ strs = item.replace(" ", "").replace("Zone2to1=", "")
+ indata = float(strs)
+
+ if item.startswith("Zone 1 to 2") :
+ strs = item.replace(" ", "").replace("Zone1to2=", "")
+ outdata = float(strs)
+
+ zone1_well += (indata-outdata)
+
+ #渚у悜娴佸叆 For zone7 閲屾墍鏈夌殑zone8椤圭浉鍔狅紙鍖呮嫭in鍜宱ut锛�
+ zone7=0
+ for key in dicts:
+ if key.startswith("7,"):
+ array = dicts[key]
+ indata,outdata= 0,0
+ for item in array:
+ if item.startswith("Zone 8 to 7") :
+ strs = item.replace(" ", "").replace("Zone8to7=", "")
+ indata = float(strs)
+
+ if item.startswith("Zone 7 to 8") :
+ strs = item.replace(" ", "").replace("Zone7to8=", "")
+ outdata = float(strs)
+
+ zone7 += (indata-outdata)
+
+ #瓒婃祦鎺掓硠 For zone6 閲屾墍鏈夌殑zone7椤圭浉鍔狅紙鍖呮嫭in鍜宱ut锛�
+ zone6 =0
+ for key in dicts:
+ if key.startswith("6,"):
+ array = dicts[key]
+ indata,outdata= 0,0
+ for item in array:
+ if item.startswith("Zone 7 to 6") :
+ strs = item.replace(" ", "").replace("Zone7to6=", "")
+ indata = float(strs)
+
+ if item.startswith("Zone 6 to 7") :
+ strs = item.replace(" ", "").replace("Zone6to7=", "")
+ outdata = float(strs)
+ zone6 += (indata-outdata)
+
+ result =[zone1_rechage,zone1_well,zone7,zone6]
+ for i in range(len(result)):
+ result[i]= round(result[i]/100000000*10,4)
+ return result
+
+
+ #瑙f瀽姘磋祫婧愰噺鏁版嵁
+def water_res_month(model_name,paths,per):
+ data= read_txt(paths)
+ lens = len(data)
+ index = 0
+ segment=[]
+ dicts={}
+ flag = 0
+ title=""
+ while index < lens:
+ strs = data[index].strip()
+ if strs.startswith("Flow Budget for Zone"):
+ segment=[]
+ flag = 1
+ title=strs
+ if strs.startswith("Percent Discrepancy"):
+ segment.append(strs)
+ numbers = reg_find_int(title)
+ key = ','.join(numbers)
+ dicts[key]=segment
+ flag = 0
+ if flag ==1 :
+ segment.append(strs)
+ index=index+1
+
+ # 澶ф皵闄嶆按 for zone1閲屾墍鏈夌殑recharge椤圭浉鍔狅紙鍖呮嫭in鍜宱ut锛�
+ zone1_rechage = 0
+ zone1_keys=[ "1,1,"+str(per+1),"1,2,"+str(per+1),"1,3,"+str(per+1)]
+ for key in zone1_keys:
+ array = dicts[key]
+ temp=[]
+ for item in array:
+ if item.startswith("RECHARGE") :
+ strs = item.replace(" ", "").replace("RECHARGE=", "")
+ temp.append(float(strs))
+ zone1_rechage += (temp[0]-temp[1])
+
+ #姘稿畾娌虫笚婕� for zone1閲屾墍鏈夌殑zone2椤圭浉鍔狅紙鍖呮嫭in鍜宱ut锛�
+ zone1_well = 0
+ zone1_well_keys=["1,1,"+str(per+1),"1,2,"+str(per+1),"1,3,"+str(per+1)]
+ for key in zone1_well_keys:
+ array = dicts[key]
+ indata,outdata= 0,0
+ for item in array:
+ if item.startswith("Zone 2 to 1") :
+ strs = item.replace(" ", "").replace("Zone2to1=", "")
+ indata = float(strs)
+
+ if item.startswith("Zone 1 to 2") :
+ strs = item.replace(" ", "").replace("Zone1to2=", "")
+ outdata = float(strs)
+
+ zone1_well += (indata-outdata)
+
+ #渚у悜娴佸叆 For zone7 閲屾墍鏈夌殑zone8椤圭浉鍔狅紙鍖呮嫭in鍜宱ut锛�
+ zone7=0
+ zone7_keys=["7,1,"+str(per+1),"7,2,"+str(per+1),"7,3,"+str(per+1)]
+ for key in zone7_keys:
+ array = dicts[key]
+ indata,outdata= 0,0
+ for item in array:
+ if item.startswith("Zone 8 to 7") :
+ strs = item.replace(" ", "").replace("Zone8to7=", "")
+ indata = float(strs)
+
+ if item.startswith("Zone 7 to 8") :
+ strs = item.replace(" ", "").replace("Zone7to8=", "")
+ outdata = float(strs)
+ zone7 += (indata-outdata)
+
+ #瓒婃祦鎺掓硠 For zone6 閲屾墍鏈夌殑zone7椤圭浉鍔狅紙鍖呮嫭in鍜宱ut锛�
+ zone6 =0
+ zone6_keys=["6,1,"+str(per+1),"6,2,"+str(per+1),"6,3,"+str(per+1)]
+ for key in zone6_keys:
+ array = dicts[key]
+ indata,outdata= 0,0
+ for item in array:
+ if item.startswith("Zone 7 to 6") :
+ strs = item.replace(" ", "").replace("Zone7to6=", "")
+ indata = float(strs)
+
+ if item.startswith("Zone 6 to 7") :
+ strs = item.replace(" ", "").replace("Zone6to7=", "")
+ outdata = float(strs)
+ zone6 += (indata-outdata)
+
+ result =[zone1_rechage,zone1_well,zone7,zone6]
+ for i in range(len(result)):
+ result[i]= round(result[i]/100000000*10, 4)
+
+ return result
+
+#澶氭ā鍨嬬殑姘翠綅
+def water_depth(model_name):
+ name_array = model_name.split(",")
+
+ yhyMatrix = np.loadtxt(base.water_yhy_path, dtype=str,encoding='utf-8')
+ lshMatrix = np.loadtxt(base.water_lsh_path, dtype=str,encoding='utf-8')
+ dbwMatrix = np.loadtxt(base.water_dbw_path, dtype=str,encoding='utf-8')
+
+ res ={}
+ #棰愬拰鍥紝鑾茬煶婀栵紝涓滃寳鏃虹殑姘村钩绾垮拰澶氭ā鍨嬬殑澶氭姌绾垮��
+ yhydata=[]
+ base1={"name":"鍦拌〃楂樼▼","data":[52]*12}
+ yhydata.append(base1)
+
+ lshdata=[]
+ base2={"name":"鍦拌〃楂樼▼","data":[80]*12}
+ lshdata.append(base2)
+
+ dbwdata=[]
+ base3={"name":"鍦拌〃楂樼▼","data":[49]*12}
+ dbwdata.append(base3)
+
+ months = ModelPeriod.get_months_in_range_ym("2023-01","2023-12")
+
+ for i in range(len(name_array)):
+ if name_array[i] != '':
+
+ index = muiltyModelIndex(name_array[i])
+ array1 = get_column(yhyMatrix,index)
+ array2 = get_column(lshMatrix,index)
+ array3 = get_column(dbwMatrix,index)
+
+ yhydata.append({"name":name_array[i],"data":convertColumnData(array1)})
+ lshdata.append({"name":name_array[i],"data":convertColumnData(array2)})
+ dbwdata.append({"name":name_array[i],"data":convertColumnData(array3)})
+
+ rchMatrix = np.loadtxt(base.prefix + "base_water.ini", dtype=str,encoding='utf-8')
+ riverMatrix = np.loadtxt(base.prefix + "base_river.ini", dtype=str,encoding='utf-8')
+ pumpMatrix = np.loadtxt(base.prefix + "base_mining.ini", dtype=str,encoding='utf-8')
+
+ rchdata=[]
+ rch_base1 = rchMatrix[1]
+ rch_base1_float =[]
+ for i in range (0,len(rch_base1)):
+ float_data = round(float(rch_base1[i])/9,2)
+ rch_base1_float.append(float_data)
+
+ rchdata.append({"name":"鍩哄噯鍊�","data":rch_base1_float})
+
+ riverdata=[]
+ riverdata.append({"name":"鍩哄噯鍊�","data":riverMatrix.astype(float).tolist()})
+
+ pumpdata=[]
+ pumpX=pumpMatrix[1]
+ pump_float=[]
+ for i in range (0,len(pumpX)):
+ float_data = round(float(pumpX[i]),2)
+ pump_float.append(float_data)
+
+ pumpdata.append({"name":"鍩哄噯鍊�","data":pump_float})
+
+ res["xAxis"] = months
+ res["yhy_line"] = yhydata
+ res["lsh_line"] = lshdata
+ res["dbw_line"] = dbwdata
+
+
+ for i in range(len(name_array)):
+ if name_array[i] != '':
+ rchdata.append(rchBaseResult(rchMatrix,name_array[i]))
+ riverdata.append(riverBaseResult(riverMatrix, name_array[i]))
+ pumpdata.append(pumpBaseResult(pumpMatrix, name_array[i]))
+
+ res["rch_line"] = rchdata
+ res["river_line"] = riverdata
+ res["pump_line"] = pumpdata
+
+ yqsdata=[]
+ pyqdata=[]
+ sqdata=[]
+ for i in range(len(name_array)):
+ if name_array[i] != '':
+ paths = base.muiltyModel + name_array[i] + "\\modflow.head"
+ resdata = AchiveReport.getXs3LineChart(paths)
+ pyqdata.append({"name":name_array[i],"data":resdata["pyq"]})
+ sqdata.append({"name":name_array[i],"data":resdata["sq"]})
+ yqsdata.append({"name":name_array[i],"data":resdata["yqs"]})
+
+ res["yqs_line"] = yqsdata
+ res["sq_line"] = sqdata
+ res["pyq_line"] = pyqdata
+
+ return res
+
+#灏忓満鏅按浣� 鍜屽彉骞�
+def xs_depth(model_name):
+ res={}
+ line1,line2=[],[]
+ paths = base.model_dir + model_name + "\\modflow.head"
+ if model_name == base.not_allowed_model:
+ paths = base.baseModel2 + "\\modflow.head"
+
+ resdata = AchiveReport.getXs3LineChart(paths)
+ line1.append({"name":"骞冲師鍖�","data":roundArray(resdata["pyq"])})
+ line1.append({"name":"灞卞尯","data":roundArray(resdata["sq"])})
+ line1.append({"name":"鐜夋硥灞卞湴鍖�","data":roundArray(resdata["yqs"])})
+ res["depth"] = line1
+
+ line2.append({"name":"骞冲師鍖�","data":xs_bf(resdata["pyq"])})
+ line2.append({"name":"灞卞尯","data":xs_bf(resdata["sq"])})
+ line2.append({"name":"鐜夋硥灞卞湴鍖�","data":xs_bf(resdata["yqs"])})
+ res["bf"] = line2
+ return res
+
+def xs_bf(array):
+ newlist=[]
+ newlist.append(0)
+ lens = len(array)-1
+ for i in range(0,lens):
+ x = array[i+1]-array[i]
+ newlist.append(round(x,2))
+ return newlist
+
+def roundArray(array):
+ newlist=[]
+ for item in array:
+ item = round(item,2)
+ newlist.append(item)
+ return newlist
+
+#rch 鍩哄噯鏁版嵁
+def rchBaseResult(rchMatrix,sp):
+ rchDict ={}
+ rch_base1 = rchMatrix[1]
+ rch_base2 = rchMatrix[2]
+ rch_base3 = rchMatrix[3]
+ trump = getmuiltyModelparam(sp)
+
+ types = trump[0]
+ rch_x = trump[1]
+
+ if types ==1:
+ temp = muiltyArray(rch_base1,rch_x)
+ for i in range(0,len(temp)):
+ temp[i] =round(temp[i]/9,2)
+ rchDict={"name":sp,"data":temp}
+ if types ==2:
+ temp = muiltyArray(rch_base2,rch_x)
+ for i in range(0,len(temp)):
+ temp[i] =round(temp[i]/9,2)
+ rchDict={"name":sp,"data":temp}
+ if types ==3:
+ temp = muiltyArray(rch_base3,rch_x)
+ for i in range(0,len(temp)):
+ temp[i] =round(temp[i]/9,2)
+ rchDict={"name":sp,"data":temp}
+
+ return rchDict
+
+#娌虫祦鍩哄噯 鏁版嵁
+def riverBaseResult(riverMatrix,sp):
+ trump = getmuiltyModelparam(sp)
+ river_x = trump[2]
+ riverDict={"name":sp,"data":muiltyArray(riverMatrix,river_x)}
+ return riverDict
+
+
+#鎶芥按浜曞熀鍑嗘暟鎹�
+def pumpBaseResult(pumpMatrix,sp):
+ trump = getmuiltyModelparam(sp)
+ pump_x =trump[3]
+ pumpDict={"name":sp,"data":muiltyArray(pumpMatrix[1],pump_x)}
+ return pumpDict
+
+
+def muiltyArray(array,scale):
+ result =[]
+ for item in array:
+ x= round(float(item) * scale,2)
+ result.append(x)
+ return result
+
+
+def convertColumnData(array):
+ result =[]
+ new_list=[]
+ for i in range(len(array)):
+ if i!= 0:
+ data = transToNum(array[i])
+ result.append(data)
+ for index in range(len(result)):
+ if index % 3 == 0:
+ new_list.append(result[index])
+ return new_list
+
+def transToNum(str):
+ data = 0
+ try:
+ data= round(float(str),2)
+ return data
+ except ValueError():
+ return 0
+
+
+ #鑾峰彇棰勬祴鍦烘櫙鐨勪笅鏍囧�硷紝 闇�瑕佷粠ini 鏂囦欢涓寜鐓у垪杩涜璇诲彇
+def muiltyModelIndex(name):
+ models= muiltyModelList()
+ indexs = models.index(name)
+ return indexs
+
+#棰勬祴妯″瀷鍒楄〃
+def muiltyModelList():
+ models=["SP0-0","SP1-1","SP1-2","SP1-3","SP2-1","SP2-2","SP2-3","SP3-1",
+ "SP3-2","SP3-4","SP3-5","SP3-6","SP3-7","SP4-1","SP4-7"]
+ return models
+
+
+
+#Np鑾峰彇鏌愪竴鍒楃殑鍊�
+def get_column(matrix, column_number):
+ column = matrix[:, column_number]
+ return column
+
+#鍏冪粍涓� 1=闄嶉洦绫诲瀷 2=鍊嶆暟 3,娌虫祦鍊嶆暟 4,鎶芥按浜曞�嶆暟
+def getmuiltyModelparam(sp):
+ dicts={
+ "SP0-0":(1,1,1,1),
+ "SP1-1":(2,1,1,1),
+ "SP1-2":(3,1,1,1),
+ "SP1-3":(3,1.2,1,1),
+ "SP2-1":(1,1,2,1),
+ "SP2-2":(1,1,5,1),
+ "SP2-3":(1,1,10,1),
+ "SP3-1":(1,1,1,0.25),
+ "SP3-2":(1,1,1,0.5),
+ "SP3-4":(1,1,1,0),
+ "SP3-5":(1,1,1,0.4),
+ "SP3-6":(1,1,1,0.3),
+ "SP3-7":(1,1,1,0.6),
+
+ "SP4-1":(1,1,2,0.5),
+ "SP4-7":(3,1.2,10,0)}
+ return dicts[sp]
--
Gitblit v1.9.1