You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
232 lines
9.1 KiB
Python
232 lines
9.1 KiB
Python
5 years ago
|
|
||
|
#==========================================================#
|
||
|
#Load packages
|
||
|
#==========================================================#
|
||
|
# Set working direcotry where python code is located and results are to be stored
|
||
|
import os
|
||
|
os.chdir('J:/Project/wrl2018064 Fisheries RAP/04_Working/05_Modelling/RMA/HEMIP/RMA_result_explorer_code')
|
||
|
from py_rmatools_v02 import rma
|
||
|
import geopandas as gpd
|
||
|
import pandas as pd
|
||
|
import glob
|
||
|
from pyrma import pyrma
|
||
|
#==========================================================#
|
||
|
|
||
|
#==========================================================#
|
||
|
#Input parameters
|
||
|
#==========================================================#
|
||
|
#set beginning and end years and corresponding scenario code
|
||
|
#River = 'Shoalhaven'
|
||
|
#foldernames = ['base_case_2005']# , 'SLR_1m_2005'] #['TWD_HYD_CAL_05', 'TWD_HYD_CAL_06'] #'base_case_2005' #SLR_1m_2005
|
||
|
#Order_ID = 'Core_order' #choose order column name
|
||
|
#
|
||
|
#startyear=2005 #it's critical that this matches the year of the run since the code will overwrite the year from the rma file with this one
|
||
|
#endyear=2005 #this is technically only needed when multiple years have been run (for which the code needs to be adusted below)
|
||
|
#year=range(startyear, endyear+1)
|
||
|
|
||
|
#set beginning and end years and corresponding scenario code
|
||
|
River = 'Clarence'
|
||
|
foldernames =['046_CLA_CAL_01' , 'basecase_2008'] #['TWD_HYD_CAL_05', 'TWD_HYD_CAL_06'] #'base_case_2005' #SLR_1m_2005
|
||
|
Order_ID = 'Core_ord_2' #choose order column name
|
||
|
|
||
|
startyear=2008 #it's critical that this matches the year of the run since the code will overwrite the year from the rma file with this one
|
||
|
endyear=2008 #this is technically only needed when multiple years have been run (for which the code needs to be adusted below)
|
||
|
year=range(startyear, endyear+1)
|
||
|
#==========================================================#
|
||
|
|
||
|
|
||
|
|
||
|
#==========================================================#
|
||
|
#After here should be mostly automated
|
||
|
#==========================================================#
|
||
|
for foldername in foldernames:
|
||
|
#foldername = foldernames[0]
|
||
|
#set run directory where RMA results are located
|
||
|
run_directory = 'J:/Project/wrl2018064 Fisheries RAP/04_Working/05_Modelling/RMA/HEMIP/Models/' + River + '/03_Simulations/RAP_SLR/' + foldername +'/'
|
||
|
#set directory path for output files
|
||
|
output_directory = 'J:/Project/wrl2018064 Fisheries RAP/04_Working/05_Modelling/RMA/HEMIP/Models/' + River + '/04_Results/Output/'+ foldername + '_' + Order_ID + '/'
|
||
|
if not os.path.exists(output_directory):
|
||
|
os.makedirs(output_directory)
|
||
|
|
||
|
#load MHL gauge shapefile to store the results of the statistics
|
||
|
MHL_gauges_df = gpd.read_file('J:/Project/wrl2018064 Fisheries RAP/04_Working/05_Modelling/RMA/HEMIP/Global_Data/GIS/MHL_gauges_received_MGA56.shp')
|
||
|
MHL_gauges_df = MHL_gauges_df.loc[MHL_gauges_df['River'] == River]
|
||
|
MHL_gauges_df = MHL_gauges_df.loc[MHL_gauges_df[Order_ID].notnull()]
|
||
|
MHL_gauges_df = pd.DataFrame(MHL_gauges_df)
|
||
|
MHL_gauges_df = MHL_gauges_df.reset_index()
|
||
|
MHL_gauges_df['NrstNode'] = 0
|
||
|
|
||
|
# Load RMA mesh and find nearest node for each MHL gauge as basis for the data extraction
|
||
|
print('Reading RMA mesh file and finding the nearest node for the following XY locations of input points')
|
||
|
meshpath = glob.glob(run_directory + '*v2.rm1')
|
||
|
nodes, elements = pyrma.loadMesh(meshpath[0])
|
||
|
mesh = pd.DataFrame(elements, index=[0]).transpose()
|
||
|
mesh.columns = ['name']
|
||
|
mesh['centroid'] = [e.centroid for e in elements.values()]
|
||
|
mesh['nodeIDs'] = [e.nodes for e in elements.values()]
|
||
|
#trying to make it work for nodes rather than elements (not working yet)
|
||
|
# elements.values()[0].centroid
|
||
|
# nodedf['centroid'] =
|
||
|
# [e.location() for e in elements.values()]
|
||
|
# nodedf = pd.DataFrame(elements, index=[0]).transpose()
|
||
|
# nodes1 = pyrma.loadNodes(meshpath[0])
|
||
|
# nodes1.values()[0].location
|
||
|
# type(elements.values()[0])
|
||
|
# nodes.keys().location()
|
||
|
# elements.values()[0].nodes
|
||
|
# nodes.values().location()
|
||
|
# nodes.values()[0].location()
|
||
|
node = []
|
||
|
for i in range(0,len(MHL_gauges_df),1):
|
||
|
# Find nearest element in RMA mesh
|
||
|
x = MHL_gauges_df['Easting'][i]
|
||
|
y = MHL_gauges_df['Northing'][i]
|
||
|
print(x,y)
|
||
|
mesh['calc'] = [pyrma.point(x, y).dist(c) for c in mesh['centroid']]
|
||
|
#idx = mesh['calc'].idxmin()
|
||
|
#node.append(idx)
|
||
|
node.append(mesh['nodeIDs'][mesh['calc'].idxmin()][0].ID)
|
||
|
MHL_gauges_df['NrstNode'] = node
|
||
|
MHL_gauges_df.to_csv(output_directory + '_Gauges_with_nodes.csv')
|
||
|
#==========================================================#
|
||
|
|
||
|
#==========================================================#
|
||
|
#100% automated part of the code doing the data extraction
|
||
|
#==========================================================#
|
||
|
#define rma file from which data will be extracted
|
||
|
f = os.path.basename(glob.glob(run_directory + '*'+ str(startyear) + '*.rma')[0])[:-4] #rma file name without .rma ending
|
||
|
|
||
|
#output_directory = 'J:/Project wrl2016032/NARCLIM_Raw_Data/Extracted'
|
||
|
if not os.path.exists(output_directory):
|
||
|
os.makedirs(output_directory)
|
||
|
print('-------------------------------------------')
|
||
|
print("output directory folder didn't exist and was generated")
|
||
|
print('-------------------------------------------')
|
||
|
|
||
|
time=[]
|
||
|
xvel=[]
|
||
|
yvel=[]
|
||
|
totvel=[]
|
||
|
elevation=[]
|
||
|
depth=[]
|
||
|
#
|
||
|
#==========================================================#
|
||
|
#exctract elevation
|
||
|
#==========================================================#
|
||
|
print('Extracting RM2 results for' + f)
|
||
|
filename1= output_directory + foldername +'_elev'+ '_' + Order_ID + '.txt'
|
||
|
print(filename1)
|
||
|
target = open(filename1, 'w')
|
||
|
target.write("Year Hour ")
|
||
|
for inode in node:
|
||
|
target.write("%i " % inode)
|
||
|
target.write('\n')
|
||
|
for jj in year:
|
||
|
f1=run_directory + f #+ '_%d' %jj
|
||
|
R=rma()
|
||
|
print(f1)
|
||
|
R.open(f1)
|
||
|
print (jj)
|
||
|
|
||
|
while R.next():
|
||
|
time.append(R.time)
|
||
|
target.write("%.0f %r " %(jj,R.time))
|
||
|
for inode in node:
|
||
|
target.write("%f " % R.elevation[inode])
|
||
|
target.write('\n')
|
||
|
|
||
|
#print (" Press any ENTER to exit")
|
||
|
target.close()
|
||
|
#f=input()
|
||
|
#==========================================================#
|
||
|
|
||
|
# #==========================================================#
|
||
|
# #exctract depth
|
||
|
# #==========================================================#
|
||
|
# filename1= output_directory + foldername+'_depth'+ '_' + Order_ID + '.txt'
|
||
|
# print(filename1)
|
||
|
# target = open(filename1, 'w')
|
||
|
# target.write("Year Hour ")
|
||
|
# for inode in node:
|
||
|
# target.write("%i " % inode)
|
||
|
# target.write('\n')
|
||
|
# for jj in year:
|
||
|
# print(jj)
|
||
|
# f1=run_directory + f #+ '_%d' %jj
|
||
|
# R=rma()
|
||
|
# print(f1)
|
||
|
# R.open(f1)
|
||
|
# print (jj)
|
||
|
#
|
||
|
# while R.next():
|
||
|
# time.append(R.time)
|
||
|
# target.write("%.0f %r " %(jj,R.time))
|
||
|
# for inode in node:
|
||
|
# target.write("%f " % R.depth[inode])
|
||
|
# target.write('\n')
|
||
|
#
|
||
|
# #print (" Press any ENTER to exit")
|
||
|
# target.close()
|
||
|
# #f=input()
|
||
|
# #==========================================================#
|
||
|
|
||
|
# #==========================================================#
|
||
|
# #exctract xvel
|
||
|
# #==========================================================#
|
||
|
# filename1= output_directory + foldername+'_xvel'+ '_' + Order_ID + '.txt'
|
||
|
# print(filename1)
|
||
|
# target = open(filename1, 'w')
|
||
|
#
|
||
|
# target.write("Year Hour ")
|
||
|
# for inode in node:
|
||
|
# target.write("%i " % inode)
|
||
|
# target.write('\n')
|
||
|
# print (filename1)
|
||
|
# for jj in year:
|
||
|
# f1=run_directory + f #+ '_%d' %jj
|
||
|
# R=rma()
|
||
|
# print(f1)
|
||
|
# R.open(f1)
|
||
|
# print (jj)
|
||
|
#
|
||
|
# while R.next():
|
||
|
# time.append(R.time)
|
||
|
# target.write("%.0f %r " %(jj,R.time))
|
||
|
# for inode in node:
|
||
|
# target.write("%f " % R.xvel[inode])
|
||
|
# target.write('\n')
|
||
|
# #print (" Press any ENTER to exit")
|
||
|
# target.close()
|
||
|
# #f=input()
|
||
|
# #==========================================================#
|
||
|
#
|
||
|
# #==========================================================#
|
||
|
# #yvel
|
||
|
# #==========================================================#
|
||
|
# filename1= output_directory + foldername+'_yvel'+ '_' + Order_ID + '.txt'
|
||
|
# print(filename1)
|
||
|
# target = open(filename1, 'w')
|
||
|
#
|
||
|
# target.write("Year Hour ")
|
||
|
# for inode in node:
|
||
|
# target.write("%i " % inode)
|
||
|
# target.write('\n')
|
||
|
# print (filename1)
|
||
|
# for jj in year:
|
||
|
# f1=run_directory + f #+ '_%d' %jj
|
||
|
# R=rma()
|
||
|
# print(f1)
|
||
|
# R.open(f1)
|
||
|
# print (jj)
|
||
|
#
|
||
|
# while R.next():
|
||
|
# time.append(R.time)
|
||
|
# target.write("%.0f %r " %(jj,R.time))
|
||
|
# for inode in node:
|
||
|
# target.write("%f " % R.yvel[inode])
|
||
|
# target.write('\n')
|
||
|
#
|
||
|
# #print (" Press any ENTER to exit")
|
||
|
# target.close()
|
||
|
# #f=input()
|
||
|
# #==========================================================#
|