Beispiel #1
0
    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         = []
Beispiel #2
0
##########################################################################
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
Beispiel #3
0
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()
Beispiel #4
0
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)