2022-03-03 11:49:59 +01:00
import logging
import sys
import argparse
2022-03-02 14:41:27 +01:00
import pathlib
import subprocess
import configparser
import shutil
import tempfile
2022-03-03 11:49:59 +01:00
parser = argparse . ArgumentParser ( description = " Run swash model " )
parser . add_argument ( " -v " , " --verbose " , action = " count " , default = 0 )
args = parser . parse_args ( )
logging . basicConfig ( level = max ( ( 10 , 20 - 10 * args . verbose ) ) )
log = logging . getLogger ( " swash " )
log . info ( " Starting swash model " )
2022-03-02 14:41:27 +01:00
config = configparser . ConfigParser ( )
config . read ( " config.ini " )
inp = pathlib . Path ( config . get ( " swash " , " input " ) )
out = pathlib . Path ( config . get ( " swash " , " out " ) )
2022-03-03 11:49:59 +01:00
if out . exists ( ) :
log . error ( f " Swash output ' { out } ' already exists " )
sys . exit ( 1 )
2022-03-02 14:41:27 +01:00
2022-03-02 16:03:00 +01:00
with tempfile . TemporaryDirectory ( prefix = " swash_ " , dir = " . " ) as tmp_raw :
2022-03-02 14:41:27 +01:00
tmpdir = pathlib . Path ( tmp_raw )
2022-03-03 11:49:59 +01:00
log . info ( f " Copying files to ' { tmpdir } ' " )
2022-03-02 14:41:27 +01:00
shutil . copy2 ( inp , tmpdir )
shutil . copytree (
2022-03-03 10:58:49 +01:00
pathlib . Path ( config . get ( " data " , " out " ) ) , tmpdir , dirs_exist_ok = True
2022-03-02 14:41:27 +01:00
)
2022-03-03 12:18:46 +01:00
if config . has_option ( " swash " , " mpi " ) :
mpi = ( " -mpi " , config . get ( " swash " , " mpi " ) )
log . info ( f " Using mpi with { mpi } " )
else :
mpi = ( )
2022-03-03 11:49:59 +01:00
with open ( tmpdir . joinpath ( " sws.log " ) , " w " ) as logfile :
log . info ( f " Runing swash in ' { tmpdir } ' " )
2022-03-03 12:18:46 +01:00
cmd = ( config . get ( " swash " , " swashrun " ) , " -input " , inp . name , * mpi )
log . info ( f " Running { cmd } " )
2022-03-03 11:49:59 +01:00
subprocess . run (
2022-03-03 12:18:46 +01:00
cmd ,
2022-03-03 11:49:59 +01:00
cwd = tmpdir ,
stdout = logfile ,
stderr = logfile ,
)
2022-03-02 14:41:27 +01:00
2022-03-03 11:49:59 +01:00
log . info ( f " Moving swash output to ' { out } ' " )
2022-03-02 16:03:00 +01:00
shutil . move ( tmpdir , out )
2022-03-03 11:49:59 +01:00
log . info ( f " Swash model finished successfully " )