Example #1
0
# create model instance
model = TwoLevel(sp, dt)
print 'pole/equator temp diff = ', model.thetaref.max() - model.thetaref.min()

# vort, div initial conditions
psipert = np.zeros((2, model.nlat, model.nlon), np.float)
psipert[1, :, :] = 5.e6 * np.sin(
    (model.lons - np.pi))**12 * np.sin(2. * model.lats)**12
psipert = np.where(model.lons[np.newaxis, :, :] > 0., 0, psipert)
psipert[1, :, :] += np.random.normal(scale=1.e6, size=(sp.nlats, sp.nlons))
ug = np.zeros((2, model.nlat, model.nlon), np.float)
vg = np.zeros((2, model.nlat, model.nlon), np.float)
ug[1, :, :] = model.umax * np.sin(2. * model.lats)**model.jetexp
vrtspec, divspec = sp.getvrtdivspec(ug, vg)
vrtspec = vrtspec + model.lap * sp.grdtospec(psipert)
thetaspec = model.nlbalance(vrtspec)
divspec = np.zeros(thetaspec.shape, thetaspec.dtype)

# create netcdf file.
nc = Dataset(output_file, 'w', format='NETCDF4_CLASSIC')
nc.rsphere = rsphere
nc.gridtype = gridtype
nc.ntrunc = ntrunc
nc.dt = dt
atts = [
    'grav', 'omega', 'cp', 'rgas', 'p0', 'ptop', 'delth', 'efold', 'ndiss',
    'tdrag', 'tdiab', 'umax', 'jetexp'
]
for att in atts:
    nc.setncattr(att, model.__dict__[att])
Example #2
0
v_modelclim = ncm.variables['v']

nanal=0
for n in indx:
    thetaens[nanal] = theta_modelclim[n]
    uens[nanal] = u_modelclim[n]
    vens[nanal] = v_modelclim[n]
    nanal += 1

# transform initial ensemble to spectral space
vrtspec = np.empty((nanals,2,sp.nlm),np.complex)
divspec = np.empty((nanals,2,sp.nlm),np.complex)
thetaspec = np.empty((nanals,sp.nlm),np.complex)
for nanal in range(nanals):
    vrtspec[nanal], divspec[nanal] = sp.getvrtdivspec(uens[nanal],vens[nanal])
    thetaspec[nanal] = sp.grdtospec(thetaens[nanal])
nvars = 5
ndim1 = sp.nlons*sp.nlats
ndim = nvars*ndim1
xens = np.empty((nanals,ndim),np.float) # empty 1d state vector array

# precompute covariance localization for fixed observation network.
covlocal1 = np.zeros((nobsall,ndim1),np.float)
hcovlocal = np.zeros((nobsall,nobsall),np.float)
modellats = np.degrees(sp.lats)
modellons = np.degrees(sp.lons)
modellons,modellats = np.meshgrid(modellons,modellats)
for nob in range(nobsall):
    r = sp.rsphere*gcdist(np.radians(oblonsall[nob]),np.radians(oblatsall[nob]),
    np.radians(modellons.ravel()),np.radians(modellats.ravel()))
    taper = gaspcohn(r/covlocal_scale,gaussian=gaussian)
Example #3
0
divspec_inc = np.empty((nsteps + 1, nanals, 2, sp.nlm), np.complex)
thetaspec_inc = np.empty((nsteps + 1, nanals, sp.nlm), np.complex)
vrtspec_inc1 = np.empty((nsteps_iau + 1, nanals, 2, sp.nlm), np.complex)
divspec_inc1 = np.empty((nsteps_iau + 1, nanals, 2, sp.nlm), np.complex)
thetaspec_inc1 = np.empty((nsteps_iau + 1, nanals, sp.nlm), np.complex)
indx = rs2.choice(np.arange(len(ncm.variables['t'])), nanals, replace=False)
print '# fhassim,nsteps,nsteps_iau = ', fhassim, nsteps, nsteps_iau

nanal = 0
for n in indx:
    thetag = theta_modelclim[n]
    ug = u_modelclim[n]
    vg = v_modelclim[n]
    vrtspec_fcst[0,nanal,...], divspec_fcst[0,nanal,...] = \
    sp.getvrtdivspec(ug,vg)
    thetaspec_fcst[0, nanal, ...] = sp.grdtospec(thetag)
    for nstep in range(nsteps):
        vrtspec_fcst[nstep+1,nanal,...],divspec_fcst[nstep+1,nanal,...],thetaspec_fcst[nstep+1,nanal,...] = \
        models[nanal].rk4step(vrtspec_fcst[nstep,nanal,...],divspec_fcst[nstep,nanal,...],thetaspec_fcst[nstep,nanal,...])
    nanal += 1
ncm.close()

nvars = 5
ndim = nvars * sp.nlons * sp.nlats
xens = np.empty((nanals, ndim), np.float)  # empty 1d state vector array

# precompute covariance localization for fixed observation network.
ndim1 = sp.nlons * sp.nlats
covlocal1 = np.zeros((nobsall, ndim1), np.float)
hcovlocal = np.zeros((nobsall, nobsall), np.float)
modellats = np.degrees(sp.lats)
Example #4
0
v_modelclim = ncm.variables["v"]

nanal = 0
for n in indx:
    thetaens[nanal] = theta_modelclim[n]
    uens[nanal] = u_modelclim[n]
    vens[nanal] = v_modelclim[n]
    nanal += 1

# transform initial ensemble to spectral space
vrtspec = np.empty((nanals, 2, sp.nlm), np.complex)
divspec = np.empty((nanals, 2, sp.nlm), np.complex)
thetaspec = np.empty((nanals, sp.nlm), np.complex)
for nanal in range(nanals):
    vrtspec[nanal], divspec[nanal] = sp.getvrtdivspec(uens[nanal], vens[nanal])
    thetaspec[nanal] = sp.grdtospec(thetaens[nanal])
nvars = 5
ndim1 = sp.nlons * sp.nlats
ndim = nvars * ndim1
xens = np.empty((nanals, ndim), np.float)  # empty 1d state vector array

# precompute covariance localization for fixed observation network.
covlocal1 = np.zeros((nobsall, ndim1), np.float)
hcovlocal = np.zeros((nobsall, nobsall), np.float)
modellats = np.degrees(sp.lats)
modellons = np.degrees(sp.lons)
modellons, modellats = np.meshgrid(modellons, modellats)
for nob in range(nobsall):
    r = sp.rsphere * gcdist(
        np.radians(oblonsall[nob]),
        np.radians(oblatsall[nob]),
Example #5
0
    rsphere = 6.37122e6 # earth radius
    sp = Spharmt(nlons,nlats,ntrunc,rsphere,gridtype=gridtype)

    # create model instance using default parameters.
    model = TwoLevel(sp,dt)

    # vort, div initial conditions
    psipert = np.zeros((2,model.nlat,model.nlon),np.float)
    psipert[1,:,:] = 5.e6*np.sin((model.lons-np.pi))**12*np.sin(2.*model.lats)**12
    psipert = np.where(model.lons[np.newaxis,:,:] > 0., 0, psipert)
    psipert[1,:,:] += np.random.normal(scale=1.e6,size=(sp.nlats,sp.nlons))
    ug = np.zeros((2,model.nlat,model.nlon),np.float)
    vg = np.zeros((2,model.nlat,model.nlon),np.float)
    ug[1,:,:] = model.umax*np.sin(2.*model.lats)**model.jetexp
    vrtspec, divspec = sp.getvrtdivspec(ug,vg)
    vrtspec = vrtspec + model.lap*sp.grdtospec(psipert)
    thetaspec = model.nlbalance(vrtspec)
    divspec = np.zeros(thetaspec.shape, thetaspec.dtype)

    # animate potential temperature

    fig = plt.figure(figsize=(16,8))
    vrtspec, divspec, thetaspec = model.rk4step(vrtspec, divspec, thetaspec)
    thetamean = (model.theta*model.globalmeanwts).sum()
    varplot = 'theta'
    #varplot = 'w'
    #varplot = 'u'
    if varplot == 'theta':
        data = model.theta - thetamean
        vmax = 50; vmin = -vmax
        cmap = plt.cm.RdBu_r
Example #6
0
divspec_inc = np.empty((nsteps+1,nanals,2,sp.nlm),np.complex)
thetaspec_inc = np.empty((nsteps+1,nanals,sp.nlm),np.complex)
vrtspec_inc1 = np.empty((nsteps_iau+1,nanals,2,sp.nlm),np.complex)
divspec_inc1 = np.empty((nsteps_iau+1,nanals,2,sp.nlm),np.complex)
thetaspec_inc1 = np.empty((nsteps_iau+1,nanals,sp.nlm),np.complex)
indx = rs2.choice(np.arange(len(ncm.variables['t'])),nanals,replace=False)
print '# fhassim,nsteps,nsteps_iau = ',fhassim,nsteps,nsteps_iau

nanal=0
for n in indx:
    thetag = theta_modelclim[n]
    ug = u_modelclim[n]
    vg = v_modelclim[n]
    vrtspec_fcst[0,nanal,...], divspec_fcst[0,nanal,...] = \
    sp.getvrtdivspec(ug,vg)
    thetaspec_fcst[0,nanal,...] = sp.grdtospec(thetag)
    for nstep in range(nsteps):
        vrtspec_fcst[nstep+1,nanal,...],divspec_fcst[nstep+1,nanal,...],thetaspec_fcst[nstep+1,nanal,...] = \
        models[nanal].rk4step(vrtspec_fcst[nstep,nanal,...],divspec_fcst[nstep,nanal,...],thetaspec_fcst[nstep,nanal,...])
    nanal += 1
ncm.close()

nvars = 5
ndim = nvars*sp.nlons*sp.nlats
xens = np.empty((nanals,ndim),np.float) # empty 1d state vector array

# precompute covariance localization for fixed observation network.
ndim1 = sp.nlons*sp.nlats
covlocal1 = np.zeros((nobsall,ndim1),np.float)
hcovlocal = np.zeros((nobsall,nobsall),np.float)
modellats = np.degrees(sp.lats)