def do_run(in_fields=None,params_in={}): if in_fields is not None: RUN_OPT = 1 else: RUN_OPT = 0 if len(params_in)>0: warnings.warn('params_in input being ignored - no input arrays') run_dict = {0: 'old version (no in/out)', 1: 'in/out'} print("###################################################") print("Run option:") print(" "+str(RUN_OPT)+' : '+run_dict[RUN_OPT]) print("###################################################") # check directories for outputs exist if (RUN_OPT == 0): outdir = 'out_py' else: outdir = 'out_py_io_1' dirs = [outdir, outdir+'/diagnostics', outdir+'/diagnostics/local', outdir+'/diagnostics/global', outdir+'/binaries', outdir+'/binaries/prog'] # tell fortran where to save the outputs ifd_name = 'infile_dirs.txt' fid = open(ifd_name,'w') fid.write('grid\n') fid.write(outdir+'\n') fid.close() for dirj in dirs: if not os.path.exists(dirj): os.makedirs(dirj) # clear out old progress files dd = os.path.abspath(outdir+"/binaries/prog") files = os.listdir(dd) for f in files: os.remove(dd+"/"+f) if RUN_OPT == 0: # run the non-IO WIM # (can still specify parameters in infile_nonIO.txt) print(" ") print("Running WIM without input/output") print("###################################################") print(" ") Fwim.py_wim2d_run() os.remove(ifd_name) print(" ") print("###################################################") print("Finished call to wim2d_run:") print("###################################################") print(" ") # load results from binary files return Fdat.wim_results(outdir) # out_fields = Fdat.fn_check_out_bin(outdir+'/binaries') else: # run wim2d with inputs and outputs param_dict = default_params() for key in params_in: if key not in param_dict: raise ValueError('Parameter '+key+' invalid') else: param_dict[key] = params_in[key] param_vec = param_dict2vec(param_dict) if 0: print(params_in) print(param_dict) print(param_vec) sys.exit() if in_fields is not None: # 'in_fields' is given as input # - put data into 'in_arrays': keys = ['icec','iceh','dfloe','Hs','Tp','mwd'] nx,ny = in_fields[keys[0]].shape in_arrays = np.zeros((nx,ny,6)) n = 0 for key in keys: in_arrays[:,:,n] = in_fields[key] n = n+1 del in_fields elif 0: # 'in_fields' not given as input # - read in inputs from saved files: in_dir = 'out_py/binaries' grid_prams = Fdat.fn_check_grid(in_dir) ice_fields,wave_fields = Fdat.fn_check_init(in_dir) # merge ice and wave fields: ice_fields.update(wave_fields) in_fields = ice_fields del wave_fields # put data into 'in_arrays': keys = ['icec','iceh','dfloe','Hs','Tp','mwd'] nx,ny = in_fields[keys[0]].shape in_arrays = np.zeros((nx,ny,6)) n = 0 for key in keys: in_arrays[:,:,n] = in_fields[key] n = n+1 del in_fields,ice_fields elif 1: # 'in_fields' not given as input # - specify 'in_arrays' manually in_dir = 'out/binaries' grid_prams = Fdat.fn_check_grid(in_dir) n = grid_prams['nx'] ny = grid_prams['ny'] X = grid_prams['X'] Y = grid_prams['Y'] LANDMASK = grid_prams['LANDMASK'] xmin = X.min() xmax = X.max() # set ice conc/thickness ICE_MASK = np.zeros((nx,ny)) ICE_MASK[np.logical_and(X>0.7*xmin,LANDMASK<1)] = 1 # i>=24 icec = 0.75*ICE_MASK iceh = 2.0*ICE_MASK dfloe = 250*ICE_MASK # set wave fields WAVE_MASK = np.zeros((nx,ny)) WAVE_MASK[X<xmin*0.8] = 1 # i<=15 Hs = 2.0*WAVE_MASK Tp = 12.0*WAVE_MASK mwd = -90.0*WAVE_MASK in_arrays[:,:,0] = icec in_arrays[:,:,1] = iceh in_arrays[:,:,2] = dfloe in_arrays[:,:,3] = Hs in_arrays[:,:,4] = Tp in_arrays[:,:,5] = mwd # run the WIM print(" ") print("###################################################") print("Running WIM with input/output") print("###################################################") print(" ") out_arrays = Fwim.py_wim2d_run_io(in_arrays,param_vec) os.remove(ifd_name) print(" ") print("###################################################") print("Finished call to wim2d_run_io:") print("###################################################") print(" ") # Dmax = out_arrays[:,:,0] # Hs = out_arrays[:,:,1] # Tp = out_arrays[:,:,2] # tau_x = out_arrays[:,:,3] # tau_y = out_arrays[:,:,4] # mwd = out_arrays[:,:,4] # convert out_arrays to dictionary out_fields = Fdat.fn_check_out_arr(out_arrays) del out_arrays return out_fields,Fdat.wim_results(outdir)