Пример #1
0
	def __init__ (self, nnupar='',nnvpar='',nnhdyn='',
			f0=3.5e-5, beta=2.11e-11, gamma=2e-7, gstar=0.02,rho0=1000, H=500, taux0=0.15, tauy0=0, nu=0.72, dt=1800,
			dx=20e3, dy=20e3, alpha=0.025, nx=80, ny=80 ):
		SWmodel.__init__(self,f0, beta, gamma, gstar,rho0, H, taux0, tauy0, nu, dt,
			dx, dy, alpha, nx, ny )

		if isinstance(nnupar, str):
			self._nnupar = loadmymodel(nnupar)
			self._nnuparname = nnupar
		else:
			self._nnupar = nnupar
			self._nnuparname = ''

		if isinstance(nnvpar, str):
			self._nnvpar = loadmymodel(nnvpar)
			self._nnvparname = nnvpar
		else:
			self._nnvpar = nnvpar
			self._nnvparname = ''

		if isinstance(nnhdyn, str):
			self._nnhdyn = loadmymodel(nnhdyn)
			self._nnhdynname = nnhdyn
		else:
			self._nnhdyn = nnhdyn
			self._nnhdynname = ''
Пример #2
0
	def setUp ( self ):
		"""Initialisation des tests."""
		self.rfile = '../data/restart_10years.nc'
		self.refile = 'test0.nc'
		self.para = {'hphy','hdyn','uphy','udyn','uforc','uparam'}
		self.ds = xr.open_dataset(self.refile)
		SW = SWmodel(nx=80, ny=80)
		SW.inistate_rst(self.rfile)
		SW.set_time(0)
		endtime = 12 * 30 * 12 * 1
		SW.save(time=np.arange(1, endtime, 12 * 7), para=self.para, name='test.nc')
		for i in range(endtime):
			SW.next()
		self.ds2 = xr.open_dataset('test.nc')
Пример #3
0
 def __init__(self,
              f0=3.5e-5,
              beta=2.11e-11,
              gamma=2e-7,
              gstar=0.02,
              rho0=1000,
              H=500,
              taux0=0.15,
              tauy0=0,
              nu=0.72,
              dt=1800,
              dx=20e3,
              dy=20e3,
              alpha=0.025,
              nx=80,
              ny=80):
     SWmodel.__init__(self, f0, beta, gamma, gstar, rho0, H, taux0, tauy0,
                      nu, dt, dx, dy, alpha, nx, ny)
Пример #4
0
	def __init__ (self, nnupar,nnvpar,nout=(1,1),delta=(1,1),
			f0=3.5e-5, beta=2.11e-11, gamma=2e-7, gstar=0.02,rho0=1000, H=500, taux0=0.15, tauy0=0, nu=0.72, dt=1800,
			dx=20e3, dy=20e3, alpha=0.025, nx=80, ny=80 ):
		SWmodel.__init__(self,f0, beta, gamma, gstar,rho0, H, taux0, tauy0, nu, dt,
			dx, dy, alpha, nx, ny )

		if isinstance(nnupar, str):
			self._nnupar = loadmymodel(nnupar)
		else:
			self._nnupar = nnupar
		if isinstance(nnvpar, str):
			self._nnvpar = loadmymodel(nnvpar)
		else:
			self._nnvpar = nnvpar
		self._nout = nout
		self._delta = delta
		self._nin = tuple(n+2*d for (n,d) in zip(self._nout,self._delta))
		#Calculate index of the ouptput image
		self._indout = MakeSmallImages_ind((self.ny,self.nx),
			n=self._nout)
Пример #5
0
 def predictfield(self, data, outfield, infield, forcfield, SW=None):
     if SW is None:
         SW = SWmodel()
     nout = (1, 1)
     delta = (1, 1)
     field = mydata(data,
                    outfield=outfield,
                    infield=infield,
                    forcfield=forcfield,
                    nout=nout,
                    delta=delta,
                    dt=1,
                    SW=SW)
     field.make_base()
     y_predict = self.predict(field._X)
     outfield = MakeBigImage(y_predict,
                             ind=(field._indouty, field._indoutx))
     return outfield
Пример #6
0
	def __init__( self, fname, outfield,infield, forcfield, nout=(1,1),delta=(1,1),dt=1, SW=None):
		self._outfield = outfield
		self._infield = infield
		self._forcfield = forcfield
		self._nout = nout
		self._delta = delta
		self._dt = dt
		if SW is None:
			self._SW = SWmodel()
		else:
			self._SW = SW
		if isinstance(fname,str):
			self._fname = fname
			self._data = xr.open_dataset(self._fname)
		else:
			self._fname = ''
			self._data = fname

		#define times
		self._t = []
		if self.dt == 0:
			tslice = slice(0,None)
		else:
			tslice = slice(0,-self.dt)
		for t in self.data.time[tslice]:
			if int(t+dt) in self.data.time.values:
				self._t.append((t,t+dt))

		self._X = None
		self._y = None
		self._indinx = None
		self._indiny = None
		self._indoutx = None
		self._indouty = None
		self._indint = None
		self._indoutt = None
Пример #7
0
from shalw import SWmodel
import numpy as np
import xarray as xr
try:
	import matplotlib.pyplot as plt
	PLOT = True
except:
	PLOT = False
endtime = 400
midtime = 200
#Run : one step
SW = SWmodel(nx=80,ny=80)
SW.initstate_cst(0,0,0)
SW.save(time=np.arange(0,endtime,1),name='longrun.nc')
for i in range(endtime):
	SW.next()
SW.remove_save('longrun.nc')

#Run : two steps
SW.initstate_cst(0,0,0)
SW.save(time=np.arange(0,midtime,1),name='firstrun.nc')
for i in range(0,midtime):
	SW.next()
SW.save_rst('restart_'+str(midtime)+'.nc')
SW.remove_save('firstrun.nc')
SW.initstate_cst(0,0,0)
SW.save(time=np.arange(midtime,endtime,1),name='secondrun.nc')
SW.inistate_rst('restart_'+str(midtime)+'.nc')
for i in range(midtime,endtime):
 	SW.next()
Пример #8
0

if __name__ == "__main__":
    rfile = '../../data/restart_10years.nc'
    outfile_chg = '../../data/test-z0-change.nc'
    outfile_nochg = '../../data/test-z0-nochange.nc'

    #Run 2 versions of the model
    # - one with the old z limit condition
    # - one with the changed z limit condition
    files2run = {outfile_chg, outfile_nochg}
    #files2run = {} #comment to rerun
    for outfile in files2run:
        para = {'hphy', 'vphy', 'uphy'}
        if 'nochange' in outfile:
            SW = SWmodel(nx=80, ny=80)
        else:
            SW = SWz0(nx=80, ny=80)
        SW.inistate_rst(rfile)
        SW.set_time(0)

        endtime = 12 * 30 * 12 * 10
        SW.save(time=np.arange(0, endtime, 12 * 7), para=para, name=outfile)
        for i in tqdm(range(endtime + 1)):
            SW.next()
    ds_chg = xr.open_dataset(outfile_chg)
    ds_nochg = xr.open_dataset(outfile_nochg)
    out = ds_nochg.assign(dh=ds_chg.hphy - ds_nochg.hphy)
    out = out.assign(du=ds_chg.uphy - ds_nochg.uphy)
    out = out.assign(dv=ds_chg.vphy - ds_nochg.vphy)
    f2plot = {'dh', 'du', 'dv'}
Пример #9
0
from shalw import SWmodel
import numpy as np
import xarray as xr
from tqdm import tqdm

try:
    import matplotlib.pyplot as plt
    PLOT = True
except:
    PLOT = False
endtime = 48 * 30 * 12 * 5  #86400 : 5 years
outname = '../data/restartrun.nc'

#Init model
SW = SWmodel(nx=80, ny=80)
SW.initstate_cst(0, 0, 0)

#Save every month
SW.save(time=np.arange(0, endtime, 12 * 15), name=outname)

#run the model
for i in tqdm(range(endtime)):
    SW.next()

#Save the restart
SW.save_rst('../data/restart_10years.nc')

#Plots
ds = xr.open_dataset(outname)
Пример #10
0
# import xarray as xr
from tqdm import tqdm
try:
	import matplotlib.pyplot as plt
	PLOT = True
except:
	PLOT = False

rfile = '../data/restart_20years_mr.nc'
outfile = '../data/base_40years_mr.nc'
testfile = '../data/test_image.nc'
para = {'ufil', 'vfil', 'hfil',
	'hphy', 'uphy', 'vphy',
	'hdyn', 'udyn', 'vdyn',
	'uparam', 'vparam', 'hdyn'}
SW = SWmodel(nx=80,ny=80)
SW.inistate_rst(rfile)
SW.set_time(0)

nseq = 2
freq = 12*30*1 #1 month
endtime = 12*30*12*40 #10 years
testime = 12*30*10 #one year after test
# Create time vector
starts = np.arange(0, endtime, freq)
time = np.empty(shape=(0,), dtype=int)
for s in starts:
	time = np.concatenate((time, np.arange(s,s+nseq)), axis=0)

SW.save(time=time, para=para,name=outfile)
SW.save(time=range(endtime+testime-nseq,endtime+testime),
Пример #11
0
import xarray as xr
from tqdm import tqdm

try:
	import matplotlib.pyplot as plt
	PLOT = True
except:
	PLOT = False

PLOT = False
rfile = '../data/restart_10years.nc'
nnufile = '../data/nn-uparam-im/model_upar-im.pkl'
nnvfile = '../data/nn-vparam-im/model_vpar-im.pkl'
nhdynfile = '../data/nn-hdynparam-amsgrad-long2/model_hdyn-im.pkl'

SW0 = SWmodel(nx=80, ny=80)
SW = SWparnnim(nnupar=nnufile,nnvpar=nnvfile,nx=80,ny=80)
#SW = SWparnnhdyn(nnupar=nnufile,nnvpar=nnvfile,nnhdyn=nhdynfile, nx=80,ny=80)
SW.inistate_rst(rfile)
SW.set_time(0)
SW0.inistate_rst(rfile)
SW0.set_time(0)
# time of the spinup
# endtime = 12*30*12*10 #10 years
endtime = 48 * 30 * 12 * 15
#endtime = 48 * 30 * 12 *10
# Declare to save all phy parameters (default) every 12*30 time step(1 month)
# 10000 is approximatively 13 months
para = { 'hphy', 'hdyn', 'uphy', 'udyn', 'uparam','vparam','vphy' }
SW.save(time=np.arange(0, endtime,48*7 ), para=para, name='../data/egu/test-nn-new.nc')
SW0.save(time=np.arange(0, endtime,48*7 ), para=para, name='../data/egu/test-00-new.nc')
Пример #12
0
        if not os.path.isfile(rfile) or rewrite:
            if '_hr' in rfile:
                fact = 8
                outname = '../../data/restartrun_20years_hr.nc'
                #SW = SWmodel(nx=320, ny=320, dx=5e3, dy=5e3,nu=0.18,dt=450)
            elif '_lr' in rfile:
                fact = 1
                outname = '../../data/restartrun_20years_lr.nc'
                #SW = SWmodel(nx=40,ny=40,dx = 40e3, dy=40e3, nu=1.44, dt=3600//fact)
            else:
                fact = 2
                outname = '../../data/restartrun_20years_mr.nc'
            SW = SWmodel(nx=40 * fact,
                         ny=40 * fact,
                         dx=40e3 // fact,
                         dy=40e3 // fact,
                         nu=1.44 / fact,
                         dt=3600 // fact,
                         alpha=0.025)
            SW.initstate_cst(0, 0, 0)
            endtime = (fact * 24) * 30 * 12 * 20  #10 years of spinup
            SW.save(time=np.arange(0, endtime, (fact * 24) * 30),
                    name=outname)  #monthly

            #run the model
            for i in tqdm(range(endtime)):
                SW.next()

            #Save the restart
            SW.save_rst(rfile)
Пример #13
0
Файл: etkf.py Проект: brajard/sw
    # starting time
    t0 = 0

    # Generation of the ensemble
    epsb = dict()
    for par in std_b:
        epsb[par] = np.empty(shape=(m, ) + dr[par][0].shape)

        for im in range(m):
            eps = np.random.normal(0, std_b[par], dr[par][0].shape)
            epsb[par][im] = ndimage.convolve(eps, k, mode='constant')
            epsb[par][im] += dr[par][0]

    #Model load:
    SW = SWmodel()
    SW.inistate_rst(rfile)
    SW.set_time(t0)

    #Reference model (to produce obs)
    SW0 = SWmodel()
    SW0.inistate_rst(rfile)
    SW0.set_time(t0)

    #parameters in control state variable (not all ?)
    cparam = {'hphy', 'uphy', 'vphy', 'ufil', 'vfil', 'hfil'}
    epsa = epsb
    endtime = 3
    for t in tqdm(ds.hphy_o.time[:endtime]):
        #forecast
        if t > t0: