| # -*- coding: utf-8 -*- | 
| """ | 
| Created on Tue Oct 31 16:12:55 2023 | 
|   | 
| @author: ZMK | 
| """ | 
|   | 
| 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)     | 
|       return period_json;  | 
|    | 
| def get_model_period(model_name): | 
|      period_json= get_model_json(model_name)      | 
|      start_time = period_json["start_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 | 
|      | 
|   | 
| #观测井chart | 
| def obsChartdata(wellId,model_name, row, column): | 
|      | 
|       row = int(row)-1 | 
|       column = int(column)-1 | 
|       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) | 
|        | 
|       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 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: | 
|                 return (i,j) | 
|             count = count +1 | 
|     return ""         | 
|              | 
|      | 
|      | 
| #地下水信息 | 
| def earthWaterChart(model_name, index_id): | 
|      | 
|       row_column =  getRowCloumnById(index_id)   | 
|       row = row_column[0] | 
|       column = row_column[1] | 
|        | 
|       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 } | 
|        | 
|       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": xmonths} | 
|       return result | 
|     | 
|      | 
| #导出csv文件 | 
| def exportCsV(model_name): | 
|      | 
|     dir = base.model_dir + model_name + "\\modflow.head" | 
|     out_path = base.model_dir + model_name + "\\output\\" | 
|     if not os.path.exists(out_path): | 
|          os.mkdir(out_path)   | 
|      | 
|     # z1= alldata[int(per1)*3,0,:,:] | 
|     head = bf.HeadFile(dir)  | 
|     alldata = head.get_alldata() | 
|     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 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   | 
|     | 
| #解析水均衡数据  | 
| 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]) | 
|      | 
|     #河流入渗量(正)    所有应力期,for Zone 3的WELLS项相加 | 
|     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侧向补给量(正)    所有应力期,for Zone 4的IN-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侧向补给量(正)    所有应力期,for Zone 8的IN-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    | 
|      | 
|     #人工开采量(负)    所有应力期,for Zone 5的OUT-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侧向流出量(负)    所有应力期,for Zone 4的OUT-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)): | 
|         # 每行数据实际上计算 的是 一个step , 1个step =10天 | 
|         result[i]= round(result[i]/100000000*10, 4) | 
|      | 
|     return result | 
|   | 
|   | 
| #解析水资源量数据  | 
| 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和out) | 
|     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和out) | 
|     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和out) | 
|     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和out) | 
|     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 | 
|   | 
|   | 
|  #解析水资源量数据  | 
| 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和out) | 
|     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和out) | 
|     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和out) | 
|     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和out) | 
|     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] |