2222import time as timer
2323from vtools .data .vtime import hours , days
2424import click
25-
26- log_file = "log_nudging.out"
25+ from pathlib import Path
26+ from schimpy .logging_config import resolve_loglevel , configure_logging
27+ import logging
28+ logger = logging .getLogger (__name__ )
2729
2830
2931class Nudging (object ):
@@ -41,7 +43,7 @@ def read_yaml(self):
4143 read yaml and load mesh grid
4244 """
4345
44- write_to_log ("---read_yaml---\n " )
46+ logger . info ("---read_yaml---" )
4547
4648 with open (self .input ) as file :
4749 info = yaml .load (file , Loader = yaml .FullLoader )
@@ -116,7 +118,7 @@ def create_nudging(self, create_file=True):
116118
117119 def organize_nudging (self , weights_comb , values_comb , imap_comb ):
118120
119- write_to_log ("---organize_nudging---\n " )
121+ logger . info ("---organize_nudging---" )
120122
121123 weights_list = [] # dimension [region, var, node]
122124 values_list = [] # dimensino [region, var, time, map_node, nlevel]
@@ -200,7 +202,7 @@ def concatenate_nudge(
200202 self , weights_var , values_var , imap_var , var_newlist , create_file = True
201203 ):
202204
203- write_to_log ("---concatenate_nudge---\n " )
205+ logger . info ("---concatenate_nudge---" )
204206 if len (var_newlist ) == 0 :
205207 print ("No new variables to merge. Exiting.." )
206208 return
@@ -345,7 +347,7 @@ def create_region_nudging(self, region_info):
345347
346348 def gen_nudge_3dfield (self , region_info ):
347349
348- write_to_log ("---gen_nudge_3dfield---\n " )
350+ logger . info ("---gen_nudge_3dfield---" )
349351
350352 rjunk = 9998 # !Define junk value for sid; the test is abs()>rjunk
351353 # used to check area ratios (m) /it used to be 1.e-2 when degree was used as distance.
@@ -417,7 +419,7 @@ def gen_nudge_3dfield(self, region_info):
417419 datetime .date (istart_year , istart_mon , istart_day )
418420 - self .start_date .date ()
419421 ).days + d
420- write_to_log ("Time out (days)=%d\n " % day )
422+ logger . info ("Time out (days)=%d" , day )
421423
422424 ncfile = f'{ ncfile1 } { date .strftime ("%Y%m%d" )} .nc'
423425 ncdata = xr .open_dataset (ncfile )
@@ -477,7 +479,7 @@ def gen_nudge_3dfield(self, region_info):
477479 continue
478480
479481 irecout2 += 1
480- write_to_log ("irecount: %d\n " % irecout )
482+ logger . debug ("irecount: %d" , irecout )
481483
482484 # if 'temp' in var_list:
483485 temp = (
@@ -535,7 +537,7 @@ def gen_nudge_3dfield(self, region_info):
535537 wetj = wetij [1 ]
536538
537539 if wetij [0 ].size == 0 :
538- write_to_log ("no 3dfield data available for: %s\n " % str ( ctime ) )
540+ logger . info ("no 3dfield data available for: %s" , ctime )
539541 salt = - 9999.0 * np .ones_like (salt )
540542 temp = - 9999.0 * np .ones_like (temp )
541543 else :
@@ -549,7 +551,7 @@ def gen_nudge_3dfield(self, region_info):
549551 # vvel(i,j,:ilen)=vvel(weti[m],wetj[m],:ilen)
550552 # ssh(i,j)=ssh(weti[m],wetj[m])
551553
552- write_to_log ("dealing with horizontal nan values!\n " )
554+ logger . debug ("dealing with horizontal nan values!" )
553555
554556 if d == 0 and t == time [0 ]: # the first time step
555557 ixy = np .zeros ((self .nnode , 3 )) * np .nan
@@ -768,10 +770,8 @@ def gen_nudge_3dfield(self, region_info):
768770 idST = np .where ((kbp [ix , iy ] != - 1 ) & (self .z [i_in , :].T > - 10 ))
769771 tempout [idST [0 ], i_in [idST [1 ]]] = tempout [idST [0 ], i_in [idST [1 ]]] - 1
770772
771- write_to_log ("applying spatial interpolation!\n " )
772- write_to_log (
773- f"outputting at day , { dt .total_seconds ()/ 86400 } , { npout } \n "
774- )
773+ logger .debug ("applying spatial interpolation!" )
774+ logger .info ("outputting at day , %s, %s" , dt .total_seconds ()/ 86400 , npout )
775775
776776 # only save the nodes with valid values.
777777 tempout_in = [temp_t [imap [:npout ]] for temp_t in tempout ]
@@ -797,7 +797,7 @@ def gen_nudge_3dfield(self, region_info):
797797 salinity = np .transpose (salinity , (0 , 2 , 1 ))
798798 # Enforce lower bound for temp. for eqstate
799799 temperature [temperature < 0 ] == 0
800- write_to_log ("reorganizing matrix!\n " )
800+ logger . info ("reorganizing matrix!" )
801801 # print("time=%f"%(timer.time() - start))
802802 max_time = self .time [- 1 ].total_seconds () / 3600 / 24
803803 output_day = np .array (output_day )
@@ -827,7 +827,7 @@ def reorder_variables(var_info, var_ordered_list):
827827
828828 def gen_nudge_obs (self , region_info ):
829829
830- write_to_log ("---gen_nudge_obs---\n " )
830+ logger . info ("---gen_nudge_obs---" )
831831
832832 cutoff = 1e3 # when weights are less than cutoff, they will be set to zero
833833 weights , obs_df = self .gen_region_weight (
@@ -1042,7 +1042,7 @@ def read_data(self, data):
10421042
10431043 def gen_region_weight (self , attribute , vertices ):
10441044
1045- write_to_log ("---gen_region_weight---\n " )
1045+ logger . info ("---gen_region_weight---" )
10461046
10471047 if isinstance (attribute , str ):
10481048 if vertices :
@@ -1140,23 +1140,30 @@ def in_vertices(self, vertices):
11401140 return inpoly
11411141
11421142
1143- def write_to_log (message ):
1144- if type (message ) == pd .core .indexes .base .Index :
1145- message = ", " .join (message .to_list ()) + "\n "
1146- elif type (message ) == pd .core .frame .DataFrame :
1147- message = message .to_string () + "\n "
1148- global log_file
1149-
1150- with open (log_file , "a" ) as f :
1151- f .write (message )
1152-
11531143
11541144@click .command ()
11551145@click .argument ('input_file' , required = False )
11561146@click .option ('--input' , 'input_opt' , type = str , default = None , help = 'input yaml file for nudging' )
1157- def create_nudge_cli (input_file , input_opt ):
1147+ @click .option ("--logdir" , type = click .Path (path_type = Path ), default = None )
1148+ @click .option ("--debug" , is_flag = True )
1149+ @click .option ("--quiet" , is_flag = True )
1150+ @click .help_option ("-h" , "--help" )
1151+ def create_nudge_cli (input_file , input_opt , logdir , debug , quiet ):
11581152 """Create nudging for a schism run"""
1153+ level , console = resolve_loglevel (
1154+ debug = debug ,
1155+ quiet = quiet ,
1156+ )
1157+ configure_logging (
1158+ package_name = "schimpy.nudging" ,
1159+ level = level ,
1160+ console = console ,
1161+ logdir = logdir ,
1162+ logfile_prefix = "nudging"
1163+ )
1164+
11591165 input_path = input_opt if input_opt is not None else input_file
1166+
11601167 if input_path is None :
11611168 raise click .UsageError ("Please provide an input file either as an argument or with --input" )
11621169
0 commit comments