def d3d(tmpdir): # initialize a model rpath = str(tmpdir) + "/d3d/" case.update({"rpath": rpath + "/20181001.00/"}) # use tmpdir for running the model b = pyposeidon.model(**case) b.execute() # creating a time sequence of the runs start_date = pd.to_datetime("2018-10-1 0:0:0") end_date = pd.to_datetime("2018-10-2 0:0:0") date_list = pd.date_range(start_date, end_date, freq="12H") # creating a sequence of folder to store the runs. In this case we name them after the date attribute. # NOTE that the first folder is the fisrt run already perfomed!! rpaths = [rpath + datetime.datetime.strftime(x, "%Y%m%d.%H") + "/" for x in date_list] # set meteo files meteo = [] for date in date_list: end_date = pd.to_datetime(date) + pd.to_timedelta("12H") end_date = end_date.strftime(format="%Y-%m-%d %H:%M:%S") dr = pd.date_range(date, end_date, freq="12H") names = ["uvp_" + datetime.datetime.strftime(x, "%Y%m%d%H") + ".grib" for x in dr] dur = [(DATA_DIR / name).as_posix() for name in names] meteo.append(dur) # set cast for l in range(len(rpaths) - 1): h = cast.cast( solver="d3d", model=b, ppath=rpaths[l], cpath=rpaths[l + 1], meteo=meteo[l + 1], date=date_list[l + 1] ) h.set(execute=True) # execute # Run check case - Total duration check.update({"rpath": rpath + "check/"}) # use tmpdir for running the model c = pyposeidon.model(**check) c.execute() # COMPARE output = data.data(folders=rpaths, solver="d3d") total = data.data(folders=[rpath + "check/"], solver="d3d") test = True rb = [] for var in total.Dataset.data_vars: if not total.Dataset[var].equals(output.Dataset[var]): rb.append(var) if np.abs(total.Dataset[var].values - output.Dataset[var].values).max() > 1.0e-6: test = False print(rb) return test
def schism(tmpdir): #initialize a model rpath = str(tmpdir) + '/schism/' case.update({'rpath': rpath + '20181001.00/'}) # use tmpdir for running the model b = pyposeidon.model(**case) b.execute() #creating a time sequence of the runs start_date = pd.to_datetime('2018-10-1 0:0:0') end_date = pd.to_datetime('2018-10-2 0:0:0') date_list = pd.date_range(start_date, end_date, freq='12H') #creating a sequence of folder to store the runs. In this case we name them after the date attribute. #NOTE that the first folder is the fisrt run already perfomed!! rpaths = [ rpath + datetime.datetime.strftime(x, '%Y%m%d.%H') + '/' for x in date_list ] #creating a sequence of folder from which we read the meteo. meteo = [] for date in date_list: end_date = pd.to_datetime(date) + pd.to_timedelta('12H') end_date = end_date.strftime(format='%Y-%m-%d %H:%M:%S') dr = pd.date_range(date, end_date, freq='12H') names = [ 'uvp_' + datetime.datetime.strftime(x, '%Y%m%d%H') + '.grib' for x in dr ] dur = [(DATA_DIR / name).as_posix() for name in names] meteo.append(dur) #set cast for l in range(len(rpaths) - 1): h = cast.cast(solver='schism', model=b, ppath=rpaths[l], cpath=rpaths[l + 1], meteo=meteo[l + 1], date=date_list[l + 1]) h.set(execute=True) # execute # Run check case - Total duration check.update({'rpath': rpath + 'check/'}) # use tmpdir for running the model c = pyposeidon.model(**check) c.execute() # COMPARE output = data.data(folders=rpaths, solver='schism') total = data.data(folders=[rpath + 'check/'], solver='schism') rb = [] for var in total.Dataset.data_vars: if not total.Dataset[var].equals(output.Dataset[var]): rb.append(var) print(rb) # flag = True TODO # for var in rb: # flag = False # mdif = np.abs(total.results.Dataset[var].values - output.results.Dataset[var].values).max() # if mdif < 1.e-14 : # flag = True # print(mdif) if (rb == ['zcor']) or rb == []: return True else: return False
def schism(tmpdir): # initialize a model rpath = str(tmpdir) + "/schism/" case.update({"rpath": rpath + "20181001.00/"}) # use tmpdir for running the model b = pyposeidon.model(**case) b.execute() # creating a time sequence of the runs start_date = pd.to_datetime("2018-10-1 0:0:0") end_date = pd.to_datetime("2018-10-2 0:0:0") date_list = pd.date_range(start_date, end_date, freq="12H") # creating a sequence of folder to store the runs. In this case we name them after the date attribute. # NOTE that the first folder is the fisrt run already perfomed!! rpaths = [ rpath + datetime.datetime.strftime(x, "%Y%m%d.%H") + "/" for x in date_list ] # creating a sequence of folder from which we read the meteo. meteo = [] for date in date_list: prev_date = pd.to_datetime(date) - pd.to_timedelta("12H") prev_date = prev_date.strftime(format="%Y-%m-%d %H:%M:%S") dr = pd.date_range(prev_date, date, freq="12H") names = [ "uvp_" + datetime.datetime.strftime(x, "%Y%m%d%H") + ".grib" for x in dr ] dur = [(DATA_DIR / name).as_posix() for name in names] meteo.append(dur) # set cast for l in range(len(rpaths) - 1): h = cast.cast(solver="schism", model=b, ppath=rpaths[l], cpath=rpaths[l + 1], meteo=meteo[l + 1], date=date_list[l + 1]) h.set(execute=True) # execute # Run check case - Total duration check.update({"rpath": rpath + "check/"}) # use tmpdir for running the model # Combine meteo appropriately m1 = pm.meteo(meteo_source=METEO_FILES_2[0], meteo_engine="cfgrib") m2 = pm.meteo(meteo_source=METEO_FILES_2[1], meteo_engine="cfgrib") m3 = pm.meteo(meteo_source=METEO_FILES_2[2], meteo_engine="cfgrib") m4 = pm.meteo(meteo_source=METEO_FILES_2[3], meteo_engine="cfgrib") # extract correct chunk w1 = m1.Dataset.isel(time=slice(0, 13)) w2 = m2.Dataset.isel(time=slice( 1, 13)) # note that we keep the 12 hour from the previous file w3 = m3.Dataset.isel(time=slice(1, 13)) w4 = m4.Dataset.isel(time=slice(1, 13)) # combine meteo = xr.combine_by_coords([w1, w2, w3, w4], combine_attrs="override") # saving check.update({"meteo_source": meteo}) c = pyposeidon.model(**check) c.execute() # COMPARE output = data.data(folders=rpaths, solver="schism") total = data.data(folders=[rpath + "check/"], solver="schism") r = output.Dataset.isel(time=slice(0, 36)) rb = [] for var in total.Dataset.data_vars: if not total.Dataset[var].equals(r[var]): rb.append(var) print(rb) # flag = True TODO # for var in rb: # flag = False # mdif = np.abs(total.results.Dataset[var].values - output.results.Dataset[var].values).max() # if mdif < 1.e-14 : # flag = True # print(mdif) if (rb == ["zcor"]) or rb == []: return True else: return False