Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import pandas as pd
import datetime as dt
from osgeo import ogr
import numpy as np
from styx_river_coal_mine.code import param_private
def get_utm_zone(sf):
driver = ogr.GetDriverByName("GPKG")
data = driver.Open(sf, 0)
layer = data.GetLayer()
lon_min, lon_max = None, None
lat_min, lat_max = None, None
for f in layer:
xmin, xmax, ymin, ymax = f.geometry().GetEnvelope()
lon_min = xmin if lon_min is None else min(lon_min, xmin)
lon_max = xmax if lon_max is None else max(lon_max, xmax)
lat_min = ymin if lat_min is None else min(lat_min, ymin)
lat_max = ymax if lat_max is None else max(lat_max, ymax)
mean_lon = 0.5 * (lon_min + lon_max)
mean_lat = 0.5 * (lat_min + lat_max)
utm_zone = int(np.ceil((mean_lon + 180.0) / 6))
hemisphere = " +south" if mean_lat < 0.0 else " +north"
mesh_proj = "+proj=utm +ellps=WGS84 +zone=" + str(utm_zone) + hemisphere
return lon_min, lon_max, lat_min, lat_max, mesh_proj
class parameters:
def __init__(
self,
mesh_setup="gbr_styx",
initial_time=param_private.initial_time,
final_time=param_private.final_time,
):
# --- simu parameters --- #
self.mesh_setup = mesh_setup
self.initial_time = initial_time
self.final_time = final_time
self.dt = 900
self.dt_export = 60 * 60
self.checkpoint_ratio = 24
self.ratio_full_export = int(86400 / self.dt_export) # every day
self.min_depth = 5
# --- Paths --- #
self.local_base_dir = "styx_river_coal_mine/data/"
self.scratch_base_dir = "styx_river_coal_mine/data/"
self.output_directory = f"{self.scratch_base_dir}output/{self.mesh_setup}"
self.full_output_directory = (
f"{self.scratch_base_dir}full_export/{self.mesh_setup}"
)
self.nc_data_dir = f"{self.scratch_base_dir}nc"
self.data_dir = f"{self.scratch_base_dir}prepro"
self.prepro_dir_base = (
self.data_dir[:-1] if self.data_dir[-1] == "/" else self.data_dir
)
self.prepro_dir = f"{self.prepro_dir_base}/{self.mesh_setup}"
self.nc_dir = (
self.nc_data_dir[:-1] if self.nc_data_dir[-1] == "/" else self.nc_data_dir
)
# --- Mesh --- #
self.shape_file = f"{self.local_base_dir}spatial/domain.gpkg" # shape file containing coast lines
self.reef_file = f"{self.local_base_dir}spatial/reefs.gpkg"
self.land_shapefile = f"{self.local_base_dir}spatial/QLD_mainland_islands.gpkg"
self.reef_file_simplified = (
f"{self.local_base_dir}spatial/reefs_simplified.gpkg"
)
self.mesh_file = f"{self.local_base_dir}mesh/{self.mesh_setup}.msh"
# --- region --- #
(
self.lon_min,
self.lon_max,
self.lat_min,
self.lat_max,
self.mesh_proj,
) = get_utm_zone(self.shape_file)
self.open_tags = ["open_shelf", "open_north", "open_south"]
self.closed_tags = ["coast", "coast_zoi"]
# --- misc --- #
self.forcing_names = param_private.forcing_names
self.vec_prepro2D = param_private.vec_prepro2D
def print_info(self):
print("========================= PARAM INFO =========================")
print(f"Date: {dt.datetime.now()}")
print(f"Run on: {self.machine}")
print(f"Mesh: {self.mesh_file}")
print(f"Extent: {self.lon_min, self.lon_max, self.lat_min, self.lat_max}")
print(f"Simu start: {self.initial_time}")
print(f"Simu end: {self.final_time}")
print(f"Proj: {self.mesh_proj}")
print(f"Local dir: {self.local_base_dir}")
print(f"Prepro dir: {self.prepro_dir}")
print(f"NetCDF dir: {self.nc_dir}")
print(f"Output dir: {self.output_directory}")
print("==============================================================")