Skip to content
Extraits de code Groupes Projets
param.py 3,88 ko
Newer Older
  • Learn to ignore specific revisions
  • 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("==============================================================")