# 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])
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)
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)
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]),
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
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)