Пример #1
0
 elif nobsall > nobs:
     obindx = np.random.choice(np.arange(nobsall),size=nobs,replace=False)
     oblats = oblatsall[obindx]; oblons = oblonsall[obindx]
     thetaobs = np.ascontiguousarray(thetaobsall[ntime,obindx])
     if use_letkf:
         covlocal_tmp = np.ascontiguousarray(covlocal1[obindx,:])
     else:
         covlocal_tmp = np.ascontiguousarray(covlocal[obindx,:])
         hcovlocal_tmp = np.ascontiguousarray(hcovlocal[obindx,:][:,obindx])
 else:
     raise ValueError('nobsall must be >= nobs')
 if oberrstdev > 0.: # add observation error
     thetaobs += np.random.normal(scale=oberrstdev,size=nobs) # add ob errors
 for nanal in range(nanals):
     # inverse transform to grid.
     uens[nanal],vens[nanal] = sp.getuv(vrtspec[nanal],divspec[nanal])
     thetaens[nanal] = sp.spectogrd(thetaspec[nanal])
     wens[nanal] =\
     models[nanal].dp*sp.spectogrd(divspec[nanal,1,...]-divspec[nanal,0,...])
     # forward operator calculation.
     theta = thetaens[nanal,::-1,:]
     hxens[nanal] = bilintrp(theta,np.degrees(sp.lons),np.degrees(sp.lats[::-1]),oblons,oblats)
 hxensmean = hxens.mean(axis=0)
 obfits = ((thetaobs-hxensmean)**2).sum(axis=0)/(nobs-1)
 obbias = (thetaobs-hxensmean).mean(axis=0)
 obsprd = (((hxens-hxensmean)**2).sum(axis=0)/(nanals-1)).mean()
 uensmean = uens.mean(axis=0); vensmean = vens.mean(axis=0)
 thetensmean = thetaens.mean(axis=0)
 wensmean = wens.mean(axis=0)
 theterr = (thetatruth[ntime]-thetensmean)**2
 theterrb = np.sqrt((theterr*globalmeanwts).sum())
Пример #2
0
     obindx = np.random.choice(np.arange(nobsall), size=nobs, replace=False)
     oblats = oblatsall[obindx]
     oblons = oblonsall[obindx]
     thetaobs = np.ascontiguousarray(thetaobsall[ntime, obindx])
     if use_letkf:
         covlocal_tmp = np.ascontiguousarray(covlocal1[obindx, :])
     else:
         covlocal_tmp = np.ascontiguousarray(covlocal[obindx, :])
         hcovlocal_tmp = np.ascontiguousarray(hcovlocal[obindx, :][:, obindx])
 else:
     raise ValueError("nobsall must be >= nobs")
 if oberrstdev > 0.0:  # add observation error
     thetaobs += np.random.normal(scale=oberrstdev, size=nobs)  # add ob errors
 for nanal in range(nanals):
     # inverse transform to grid.
     uens[nanal], vens[nanal] = sp.getuv(vrtspec[nanal], divspec[nanal])
     thetaens[nanal] = sp.spectogrd(thetaspec[nanal])
     wens[nanal] = models[nanal].dp * sp.spectogrd(divspec[nanal, 1, ...] - divspec[nanal, 0, ...])
     # forward operator calculation.
     theta = thetaens[nanal, ::-1, :]
     hxens[nanal] = bilintrp(theta, np.degrees(sp.lons), np.degrees(sp.lats[::-1]), oblons, oblats)
 hxensmean = hxens.mean(axis=0)
 obfits = ((thetaobs - hxensmean) ** 2).sum(axis=0) / (nobs - 1)
 obbias = (thetaobs - hxensmean).mean(axis=0)
 obsprd = (((hxens - hxensmean) ** 2).sum(axis=0) / (nanals - 1)).mean()
 uensmean = uens.mean(axis=0)
 vensmean = vens.mean(axis=0)
 thetensmean = thetaens.mean(axis=0)
 wensmean = wens.mean(axis=0)
 theterr = (thetatruth[ntime] - thetensmean) ** 2
 theterrb = np.sqrt((theterr * globalmeanwts).sum())
Пример #3
0
     oblons = oblonsall[obindx]
     thetaobs = np.ascontiguousarray(thetaobsall[ntime, obindx])
     if use_letkf:
         covlocal_tmp = np.ascontiguousarray(covlocal1[obindx, :])
     else:
         covlocal_tmp = np.ascontiguousarray(covlocal[obindx, :])
         hcovlocal_tmp = np.ascontiguousarray(hcovlocal[obindx, :][:,
                                                                   obindx])
 else:
     raise ValueError('nobsall must be >= nobs')
 if oberrstdev > 0.:  # add observation error
     thetaobs += rs1.normal(scale=oberrstdev, size=nobs)  # add ob errors
 for nanal in range(nanals):
     # inverse transform to grid at obs time (center of IAU window).
     uens[nanal], vens[nanal] = sp.getuv(
         vrtspec_fcst[nsteps / 2, nanal, ...], divspec_fcst[nsteps / 2,
                                                            nanal, ...])
     thetaens[nanal] = sp.spectogrd(thetaspec_fcst[nsteps / 2, nanal, ...])
     wens[nanal] = models[nanal].dp * sp.spectogrd(divspec_fcst[
         nsteps / 2, nanal, 1, :] - divspec_fcst[nsteps / 2, nanal, 0, :])
     # forward operator calculation (obs all at center of assim window).
     hxens[nanal] = bilintrp(thetaens[nanal, ::-1, :], np.degrees(sp.lons),
                             np.degrees(sp.lats[::-1]), oblons, oblats)
 hxensmean = hxens.mean(axis=0)
 obfits = ((thetaobs - hxensmean)**2).sum(axis=0) / (nobs - 1)
 obbias = (thetaobs - hxensmean).mean(axis=0)
 obsprd = (((hxens - hxensmean)**2).sum(axis=0) / (nanals - 1)).mean()
 uensmean = uens.mean(axis=0)
 vensmean = vens.mean(axis=0)
 thetensmean = thetaens.mean(axis=0)
 wensmean = wens.mean(axis=0)
Пример #4
0
 elif nobsall > nobs:
     obindx = rs1.choice(np.arange(nobsall),size=nobs,replace=False)
     oblats = oblatsall[obindx]; oblons = oblonsall[obindx]
     thetaobs = np.ascontiguousarray(thetaobsall[ntime,obindx])
     if use_letkf:
         covlocal_tmp = np.ascontiguousarray(covlocal1[obindx,:])
     else:
         covlocal_tmp = np.ascontiguousarray(covlocal[obindx,:])
         hcovlocal_tmp = np.ascontiguousarray(hcovlocal[obindx,:][:,obindx])
 else:
     raise ValueError('nobsall must be >= nobs')
 if oberrstdev > 0.: # add observation error
     thetaobs += rs1.normal(scale=oberrstdev,size=nobs) # add ob errors
 for nanal in range(nanals):
     # inverse transform to grid at obs time (center of IAU window).
     uens[nanal],vens[nanal] = sp.getuv(vrtspec_fcst[nsteps/2,nanal,...],divspec_fcst[nsteps/2,nanal,...])
     thetaens[nanal] = sp.spectogrd(thetaspec_fcst[nsteps/2,nanal,...])
     wens[nanal] = models[nanal].dp*sp.spectogrd(divspec_fcst[nsteps/2,nanal,1,:]-divspec_fcst[nsteps/2,nanal,0,:])
     # forward operator calculation (obs all at center of assim window).
     hxens[nanal] = bilintrp(thetaens[nanal,::-1,:],np.degrees(sp.lons),np.degrees(sp.lats[::-1]),oblons,oblats)
 hxensmean = hxens.mean(axis=0)
 obfits = ((thetaobs-hxensmean)**2).sum(axis=0)/(nobs-1)
 obbias = (thetaobs-hxensmean).mean(axis=0)
 obsprd = (((hxens-hxensmean)**2).sum(axis=0)/(nanals-1)).mean()
 uensmean = uens.mean(axis=0); vensmean = vens.mean(axis=0)
 thetensmean = thetaens.mean(axis=0)
 wensmean = wens.mean(axis=0)
 theterr = (thetatruth[ntime]-thetensmean)**2
 theterr = np.sqrt((theterr*globalmeanwts).sum())
 werr = (wtruth[ntime]-wensmean)**2
 werr = np.sqrt((werr*globalmeanwts).sum())