print("************************************************\n") elif OPT==3: print("\n************************************************") print("Checking progress files...") print("************************************************\n") n_prog = 1 arrays = 2*[0] for j in range(2): outdir = odir[j] bindir = outdir+'/binaries' if OPT==1: # Look at initial fields: ice_fields,wave_fields = Fdat.fn_check_init(bindir) # load initial conditions from binaries arrays[j] = ice_fields arrays[j].update(wave_fields) elif OPT==2: # Look at end results: out_fields = Fdat.fn_check_out_bin(bindir) arrays[j] = out_fields elif OPT==3: # Plot progress files (if they exist) # - as colormaps prog_files = os.listdir(bindir+'/prog') steps = []
########################################################################## elif testing is 2: RUN_OPT = 2 # check passing in of 'in_fields' # - read in inputs from saved files: # (need to run without I/O first) if 1: in_dir = 'out_py/binaries' else: in_dir = 'out_py_io/binaries' gf = Fdat.fn_check_grid(in_dir) grid_prams = gf ice_fields,wave_fields = Fdat.fn_check_init(in_dir) # merge ice and wave fields: ice_fields.update(wave_fields) in_fields = ice_fields # other inputs: int_prams = None # default parameters real_prams = None # default parameters if 1: # check passing in of integer parameters: SCATMOD = 0 ADV_DIM = 2 CHECK_FINAL = 1 CHECK_PROG = 1
def plot_simulation(outdir=".", infile_grid=None, PLOT_INIT=0, PLOT_PROG_OPT=0): import numpy as np import os import sys import shutil import struct # import matplotlib.rcsetup as rc ## ## NB run from 'run' directory !! ## w2d = os.getenv("WIM2D_PATH") dd = w2d + "/fortran" sys.path.append(dd + "/bin") sys.path.append(dd + "/py_funs") import fns_get_data as Fdat import fns_plot_data as Fplt # Make plots bindir = outdir + "/binaries" # wim_init.[ab],wim_out.[ab],"prog" directory with wim_prog???.[ab] figdir = outdir + "/figs" # where to save files if infile_grid is None: grid_prams = Fdat.fn_check_grid(bindir) # load grid from binaries # dictionary with X,Y,... else: import fns_grid_setup as gs # TODO read in infile_grid.txt x0 = 0.0 y0 = 0.0 nx = 150 ny = 4 dx = 4.0e3 dy = 40.0e3 LAND_OPT = 0 # no land grid_arrays, grid_prams = gs.get_grid_arrays(x0=x0, y0=y0, nx=nx, ny=ny, dx=dx, dy=dy, LAND_OPT=LAND_OPT) ########################################################################## if PLOT_INIT == 1: # Look at initial fields: print("Plotting initial conditions...") ice_fields, wave_fields = Fdat.fn_check_init(bindir) # load initial conditions from binaries # figdir1 = figdir + "/init/" Fplt.fn_plot_init(grid_prams, ice_fields, wave_fields, figdir1) # plot initial conditions print("Plots in " + figdir + "/init") print(" ") ########################################################################## ################################################################ # Look at end results: out_fields = Fdat.fn_check_out_bin(bindir) print("Plotting results...") figdir2 = figdir + "/final/" Fplt.fn_plot_final(grid_prams, out_fields, figdir2) print("Plots in " + figdir2 + "\n") print(" ") ################################################################ if PLOT_PROG_OPT == 1: ################################################################ # Plot progress files (if they exist) # - as colormaps figdir3 = figdir + "/prog" prog_files = os.listdir(bindir + "/prog") steps = [] for pf in prog_files: if ".a" == pf[-2:]: stepno = pf[-5:-2] steps.append(stepno) # make dir for progress plots if (not os.path.exists(figdir3)) and len(steps) > 0: os.mkdir(figdir3) # clear old progress plots old_dirs = os.listdir(figdir3) for od in old_dirs: # need this for macs if od != ".DS_Store": # os.rmdir(figdir3+'/'+od) shutil.rmtree(figdir3 + "/" + od) for stepno in steps: print("Plotting results at time step " + stepno + " ...") prog_fields = Fdat.fn_check_prog(outdir, int(stepno)) figdir3_0 = figdir3 + "/" + stepno Fplt.fn_plot_final(grid_prams, prog_fields, figdir3_0) print("Plots in " + figdir3_0 + "\n") ################################################################ print(" ") print("To make a movie of progress images:") print("cd " + figdir + "/prog") print(dd + "/tools/prog2mp4.sh Hs (or Dmax,taux,tauy)") elif PLOT_PROG_OPT == 2: ################################################################ # Plot progress files (if they exist) # - as profiles steps2plot = range(0, 600, 40) # steps2plot = range(0,140,40) cols = ["k", "b", "r", "g", "m", "c"] lstil = ["-", "--", "-.", ":"] Nc = len(cols) loop_c = -1 loop_s = 0 for nstep in steps2plot: out_fields = Fdat.fn_check_prog(outdir, nstep) # load ice/wave conditions from binaries Hs_n = out_fields["Hs"] # if loop_c == Nc - 1: loop_c = 0 loop_s = loop_s + 1 else: loop_c = loop_c + 1 fig = Fplt.plot_1d(xx, Hs_n, labs=labs, f=fig, color=cols[loop_c], linestyle=lstil[loop_s]) # figname = figdir + "/convergence2steady.png" print("saving to " + figname + "...") plt.savefig(figname, bbox_inches="tight", pad_inches=0.05) plt.close() fig.clf()
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)