2022-03-11 13:04:55 +01:00
import argparse
import configparser
import logging
import pathlib
2022-04-07 15:03:15 +02:00
import sys
2022-03-11 13:04:55 +01:00
import numpy as np
parser = argparse . ArgumentParser ( description = " Pre-process bathymetry " )
parser . add_argument ( " -v " , " --verbose " , action = " count " , default = 0 )
2022-03-29 09:38:11 +02:00
parser . add_argument ( " -c " , " --config " , default = " config.ini " )
2022-03-11 13:04:55 +01:00
args = parser . parse_args ( )
logging . basicConfig ( level = max ( ( 10 , 20 - 10 * args . verbose ) ) )
log = logging . getLogger ( " bathy " )
log . info ( " Starting bathymetry pre-processing " )
config = configparser . ConfigParser ( )
2022-03-29 09:38:11 +02:00
config . read ( args . config )
2022-03-11 13:04:55 +01:00
2022-03-29 09:47:45 +02:00
artha = np . array ( ( config . getfloat ( " artha " , " lon " ) , config . getfloat ( " artha " , " lat " ) ) )
buoy = np . array ( ( config . getfloat ( " buoy " , " lon " ) , config . getfloat ( " buoy " , " lat " ) ) )
2022-03-11 13:04:55 +01:00
log . debug ( f " artha: { artha } " )
log . debug ( f " buoy: { buoy } " )
domain = np . stack ( ( artha , buoy ) )
domain . sort ( axis = 0 )
log . debug ( f " domain: { domain } " )
2022-03-30 10:57:29 +02:00
margin = config . getfloat ( " out " , " margin " , fallback = 0.002 )
2022-03-29 15:24:17 +02:00
domain [ 0 ] - = margin
domain [ 1 ] + = margin
2022-03-11 13:04:55 +01:00
log . debug ( f " domain: { domain } " )
2022-03-11 14:55:16 +01:00
inp_root = pathlib . Path ( config . get ( " inp " , " root " ) )
out_root = pathlib . Path ( config . get ( " out " , " root " ) )
2022-03-28 17:37:08 +02:00
out_root . mkdir ( exist_ok = True )
2022-03-11 14:55:16 +01:00
bathy_inp = inp_root . joinpath ( config . get ( " inp " , " base " ) )
bathy_out = out_root . joinpath ( config . get ( " out " , " sub " ) )
2022-04-07 15:03:15 +02:00
if bathy_out . exists ( ) :
log . error ( f " ' { bathy_out } ' already exists! " )
sys . exit ( 1 )
2022-03-11 13:04:55 +01:00
log . info ( f " Reading bathymetry from ' { bathy_inp } ' " )
2022-03-11 16:02:36 +01:00
raw_bathy = np . loadtxt ( bathy_inp )
2022-03-11 13:04:55 +01:00
log . debug ( f " Initial size: { raw_bathy . shape } " )
bathy = raw_bathy [
2022-03-29 09:47:45 +02:00
( ( raw_bathy [ : , : 2 ] > domain [ 0 ] ) & ( raw_bathy [ : , : 2 ] < domain [ 1 ] ) ) . all ( axis = 1 )
2022-03-11 13:04:55 +01:00
]
2022-03-11 16:02:36 +01:00
del raw_bathy
2022-03-11 13:04:55 +01:00
log . debug ( f " Final size: { bathy . shape } " )
log . info ( f " Saving subdomain to ' bathy ' " )
np . save ( bathy_out , bathy )
2022-04-07 15:03:15 +02:00
bathy_out . chmod ( 0o444 )