# -*- coding: utf-8 -*-
|
"""
|
Created on Tue Oct 31 16:12:55 2023
|
|
@author: ZMK
|
"""
|
|
import flopy
|
import flopy.utils.binaryfile as bf
|
import csv
|
import Base as base
|
import os
|
import json
|
import ModelPeriod
|
import numpy as np
|
|
|
|
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=""
|
prediction_path = base.model_dir + model_name +"\\prediction.json"
|
with open(prediction_path,encoding='utf-8') as f:
|
period_json = json.load(f)
|
|
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;
|
|
|
#观测井chart
|
def obsChartdata(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)
|
|
start_time = period_json["start_time"]
|
end_time = period_json["end_time"]
|
|
months = ModelPeriod.get_months_in_range_ym(start_time, end_time)
|
|
result = {"y_data": ydata, "x_data": months}
|
return result
|
|
def getRowCloumnById(index_id):
|
row = 104
|
column =114
|
count=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]
|
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)
|
|
start_time = period_json["start_time"]
|
end_time = period_json["end_time"]
|
|
months = ModelPeriod.get_months_in_range_ym(start_time, end_time)
|
|
result = {"y_data": ydata, "x_data": months}
|
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):
|
|
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)
|
|
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'
|
f = open(filename, 'w', newline='')
|
writer = csv.writer(f)
|
for p in alldata[i][j]:
|
writer.writerow(p)
|
f.close()
|
|
return out_path
|
|
|
|
|
|