diff --git a/.gitignore b/.gitignore index 7ca8f23bc..44dcf1033 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,8 @@ site/ src/Core/_version .DS_Store + +# Files related to Python scripts # +############# +*.egg* +__pycache__ diff --git a/src/Utility/Pre-Processing/STOFS-3D-Atl-shadow-VIMS/Pre_processing/Bathy_loading/regions/minas_inlet_2m.reg b/src/Utility/Pre-Processing/STOFS-3D-Atl-shadow-VIMS/Pre_processing/Bathy_loading/regions/minas_inlet_2m.reg new file mode 100644 index 000000000..0850aac38 --- /dev/null +++ b/src/Utility/Pre-Processing/STOFS-3D-Atl-shadow-VIMS/Pre_processing/Bathy_loading/regions/minas_inlet_2m.reg @@ -0,0 +1,12 @@ +Region written by ACE/gredit +1 +9 1 +-64.443032 45.318950 +-64.511029 45.314985 +-64.534135 45.351003 +-64.493865 45.397595 +-64.391538 45.398586 +-64.310337 45.390986 +-64.295483 45.355959 +-64.335424 45.299124 +-64.401771 45.298463 diff --git a/src/Utility/Pre-Processing/STOFS-3D-Atl-shadow-VIMS/Pre_processing/Bathy_loading/regions/st_lawrence1.reg b/src/Utility/Pre-Processing/STOFS-3D-Atl-shadow-VIMS/Pre_processing/Bathy_loading/regions/st_lawrence1.reg new file mode 100644 index 000000000..b2ed6f3f1 --- /dev/null +++ b/src/Utility/Pre-Processing/STOFS-3D-Atl-shadow-VIMS/Pre_processing/Bathy_loading/regions/st_lawrence1.reg @@ -0,0 +1,48 @@ +Region written by ACE/gredit +1 +45 1 +-60.483012 45.719008 +-60.114531 45.733735 +-60.026095 45.969367 +-60.085052 46.293361 +-60.114531 46.661536 +-60.247184 46.926622 +-60.615666 47.073892 +-61.205236 46.676263 +-61.647414 46.146091 +-61.942199 45.998821 +-62.236985 45.925186 +-62.384377 45.895732 +-62.679163 45.881005 +-63.136080 45.910459 +-63.460344 45.998821 +-63.740390 46.190272 +-63.932000 46.278634 +-64.226785 46.322815 +-64.388917 46.455358 +-64.668963 46.852987 +-64.683702 47.176981 +-64.551049 47.648245 +-64.374178 47.824969 +-64.256264 48.252052 +-64.020436 48.399322 +-64.035175 48.841132 +-64.271003 49.076764 +-64.713181 49.297669 +-65.759669 49.371304 +-66.599807 49.282942 +-67.145159 49.194580 +-67.425205 49.165126 +-68.058994 49.474393 +-68.810696 49.312396 +-70.151969 48.576046 +-71.493242 47.338978 +-71.124760 46.484812 +-69.179178 46.543720 +-67.572598 46.617355 +-65.450144 46.087183 +-64.565788 45.984094 +-63.607736 45.586465 +-62.384377 45.424468 +-61.603196 45.468649 +-60.939930 45.748462 diff --git a/src/Utility/Pre-Processing/STOFS-3D-Atl-shadow-VIMS/Pre_processing/Bathy_loading/regions/st_lawrence2.reg b/src/Utility/Pre-Processing/STOFS-3D-Atl-shadow-VIMS/Pre_processing/Bathy_loading/regions/st_lawrence2.reg new file mode 100644 index 000000000..2feda88a4 --- /dev/null +++ b/src/Utility/Pre-Processing/STOFS-3D-Atl-shadow-VIMS/Pre_processing/Bathy_loading/regions/st_lawrence2.reg @@ -0,0 +1,27 @@ +Region written by ACE/gredit +1 +24 1 +-68.176908 49.459666 +-68.073733 49.047310 +-67.646294 49.076764 +-67.233595 49.253488 +-66.865113 49.651117 +-66.319761 49.975111 +-65.229055 50.092927 +-63.740390 50.137108 +-62.752859 49.960384 +-61.470543 49.842568 +-60.556709 49.872022 +-59.392307 50.196016 +-58.168948 50.726188 +-56.945589 51.256361 +-56.356019 51.609809 +-55.589577 51.830714 +-55.368488 52.125254 +-56.061234 52.360886 +-57.903641 51.771806 +-60.541969 50.961821 +-63.239255 50.785096 +-65.951279 50.755642 +-67.631555 50.092927 +-67.970558 49.665844 diff --git a/src/Utility/Pre-Processing/STOFS-3D-Atl-shadow-VIMS/Pre_processing/Bathy_loading/regions/st_lawrence3.reg b/src/Utility/Pre-Processing/STOFS-3D-Atl-shadow-VIMS/Pre_processing/Bathy_loading/regions/st_lawrence3.reg new file mode 100644 index 000000000..a37e7df78 --- /dev/null +++ b/src/Utility/Pre-Processing/STOFS-3D-Atl-shadow-VIMS/Pre_processing/Bathy_loading/regions/st_lawrence3.reg @@ -0,0 +1,27 @@ +Region written by ACE/gredit +1 +24 1 +-55.397967 51.948530 +-55.854884 51.786533 +-56.341280 51.595082 +-56.842414 51.315269 +-57.476203 50.932366 +-58.404776 49.754206 +-59.392307 48.826405 +-59.657614 48.325687 +-59.598657 47.633518 +-59.171218 47.338978 +-58.198427 47.324251 +-57.446724 47.250616 +-56.827675 47.103346 +-56.429715 46.823533 +-55.958059 46.632082 +-55.545359 46.440631 +-54.867353 46.352269 +-53.997737 46.293361 +-53.319731 46.337542 +-52.848074 46.646809 +-52.892292 47.103346 +-53.452384 47.957512 +-54.454654 50.402194 +-55.132660 51.698171 diff --git a/src/Utility/Pre-Processing/STOFS-3D-Atl-shadow-VIMS/Pre_processing/Gr3/Nudge_gr3/gen_nudge_gr3.py b/src/Utility/Pre-Processing/STOFS-3D-Atl-shadow-VIMS/Pre_processing/Gr3/Nudge_gr3/gen_nudge_gr3.py new file mode 100644 index 000000000..c61d2c017 --- /dev/null +++ b/src/Utility/Pre-Processing/STOFS-3D-Atl-shadow-VIMS/Pre_processing/Gr3/Nudge_gr3/gen_nudge_gr3.py @@ -0,0 +1,83 @@ +from pylib_essentials.schism_file import schism_grid + +def gen_nudge(hgrid:schism_grid, outdir, rlmax = 1.5, rnu_day=0.25): + """ + schism_grid (from pylib) must be in lon/lat coordinates + set up nudge zone within rlmax distance from the ocean boundary; + modify the nudging zone width rlmax. + rlmax can be a uniform value, e.g., rl_max = 1.5, + or a 2D array of the same size as the hgrid's number of nodes, + e.g., rl_max = np.zeros(NP) with further tuning of the nudging zone width. + """ + + rnu_max = 1.0 / rnu_day / 86400.0 + + #get nudge zone + lon = hgrid.x + lat = hgrid.y + nudge_coeff = np.zeros(hgrid.x.shape, dtype=float) + + global_idxs = {} + + t0 = time() + + nudge_coeff = np.array([0.0]*NP, dtype=float) + + for i in self.ocean_bnd_ids: + print(f'boundary {i}') + bnd_idxs = gdf.iloc[i].indexes + + dis = abs((lon + 1j*lat)[:, None] - (lon[bnd_idxs] + 1j*lat[bnd_idxs])[None, :]).min(axis=1) + + out = (1-dis/rlmax)*rnu_max + out[out<0] = 0 + out[out>rnu_max] = rnu_max + fp = out>0 + nudge_coeff[fp] = np.maximum(out[fp], nudge_coeff[fp]) + + idxs_nudge=np.zeros(NP, dtype=int) + idxs=np.where(out > 0)[0] + idxs_nudge[idxs]=1 + + #expand nudging marker to neighbor nodes + i34 = self.hgrid.elements.i34 + fp = i34==3 + idxs=np.where(np.max(out[elnode[fp, 0:3]], axis=1) > 0)[0] + idxs_nudge[elnode[fp,0:3][idxs,:]]=1 + idxs=np.where(np.max(out[elnode[~fp, :]], axis=1) > 0)[0] + idxs_nudge[elnode[~fp,:][idxs,:]]=1 + + idxs=np.where(idxs_nudge == 1)[0] + global_idxs[i] = idxs + + + #logger.info(f'len of nudge idxs is {len(idxs)}') + logger.info(f'It took {time() -t0} sencods to calcuate nudge coefficient') + + nudge = [f"rlmax={rlmax}, rnu_day={rnu_day}"] + nudge.extend("\n") + nudge.append(f"{NE} {NP}") + nudge.extend("\n") + hgrid = self.hgrid.to_dict() + nodes = hgrid['nodes'] + elements = hgrid['elements'] + for idn, (coords, values) in nodes.items(): + line = [f"{idn}"] + line.extend([f"{x:<.7e}" for x in coords]) + line.extend([f"{nudge_coeff[int(idn)-1]:<.7e}"]) + line.extend("\n") + nudge.append(" ".join(line)) + + for id, element in elements.items(): + line = [f"{id}"] + line.append(f"{len(element)}") + line.extend([f"{e}" for e in element]) + line.extend("\n") + nudge.append(" ".join(line)) + + with open(outdir / 'TEM_nudge.gr3','w+') as fid: + fid.writelines(nudge) + + shutil.copy2(outdir / 'TEM_nudge.gr3', outdir / 'SAL_nudge.gr3') + + return global_idxs \ No newline at end of file diff --git a/src/Utility/Pre-Processing/STOFS-3D-Atl-shadow-VIMS/Pre_processing/Nudge/gen_nudge2.py b/src/Utility/Pre-Processing/STOFS-3D-Atl-shadow-VIMS/Pre_processing/Nudge/gen_nudge2.py new file mode 100755 index 000000000..a40a7bcc2 --- /dev/null +++ b/src/Utility/Pre-Processing/STOFS-3D-Atl-shadow-VIMS/Pre_processing/Nudge/gen_nudge2.py @@ -0,0 +1,21 @@ +#! /usr/bin/env python +from datetime import datetime, timedelta +import logging + +from pyschism.mesh import Hgrid, Vgrid +from pyschism.forcing.hycom.hycom2schism import Nudge + + +logging.basicConfig(level=logging.INFO, force=True) + + +if __name__ == '__main__': + + hgrid=Hgrid.open('./hgrid.gr3', crs='epsg:4326') + vgrid='./vgrid.in' + outdir='./' + start_date = datetime(2022, 1, 1) + rnday=171 + + nudge=Nudge() + nudge.fetch_data(outdir, hgrid, vgrid, start_date, rnday) diff --git a/src/Utility/Pre-Processing/STOFS-3D-Atl-shadow-VIMS/Pre_processing/setup.py b/src/Utility/Pre-Processing/STOFS-3D-Atl-shadow-VIMS/Pre_processing/setup.py deleted file mode 100644 index 02a3ed261..000000000 --- a/src/Utility/Pre-Processing/STOFS-3D-Atl-shadow-VIMS/Pre_processing/setup.py +++ /dev/null @@ -1,29 +0,0 @@ -import setuptools -import io - -with io.open('README.md','r', encoding='utf8') as fh: - long_description = fh.read() - - setuptools.setup( - name='stofs3d_atlantic_preproc', - version='0.0.1', - description='Python tools for generating inputs for STOFS3D-ATL', - long_description=long_description, - long_description_content_type="text/markdown", - url='', - project_urls = { - "Issues": "" - }, - license='MIT', - packages=[ - '', - ], - package_data={}, - install_requires=[ - 'numpy', - 'pandas', - 'gdal>=3.6.0', - 'shapely>=2.0.0', - 'geopandas>=0.12.0', - ], -) diff --git a/src/Utility/Pre-Processing/STOFS-3D-Atl-shadow-VIMS/__pycache__/__init__.cpython-39.pyc b/src/Utility/Pre-Processing/STOFS-3D-Atl-shadow-VIMS/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index fa4b8f243..000000000 Binary files a/src/Utility/Pre-Processing/STOFS-3D-Atl-shadow-VIMS/__pycache__/__init__.cpython-39.pyc and /dev/null differ