[244] | 1 | load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" |
---|
| 2 | load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" |
---|
| 3 | load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" |
---|
| 4 | load "$NCARG_ROOT/lib/ncarg/nclscripts/esmf/ESMF_regridding.ncl" |
---|
| 5 | |
---|
| 6 | begin |
---|
| 7 | |
---|
| 8 | ;; restart.nc obtained by |
---|
| 9 | ;; ncks -A apbp.nc time_counter.nc |
---|
| 10 | ;; ncks -A time_counter.nc ps.nc |
---|
| 11 | ;; ncks -A time_counter.nc ulon.nc |
---|
| 12 | ;; ncks -A time_counter.nc uloat.nc |
---|
| 13 | ;; cdo merge ps.nc ulon.nc ulat.nc merged.nc |
---|
| 14 | ;; cdo seltimestep,121 merged.nc restart.nc |
---|
| 15 | ;; where 121 is the last record |
---|
| 16 | ;; |
---|
| 17 | ;; meshXX.nc is actually Ai.nc generated with nb=XX |
---|
| 18 | |
---|
| 19 | src_file = "restart.nc" |
---|
| 20 | grd_file = "mesh128.nc" |
---|
| 21 | dst_file = "restart128.nc" |
---|
| 22 | varname = "ulon" |
---|
| 23 | |
---|
| 24 | ;; note : one should rather regrid 3D components of velocity |
---|
| 25 | ;; ux = -sin(lon)*ulon - cos(lon)*sin(lat)*ulat |
---|
| 26 | ;; uy = cos(lon)*ulon - sin(lon)*sin(lat)*ulat |
---|
| 27 | ;; uz = cos(lat)*ulat |
---|
| 28 | ;; then convert back to ulon, ulat |
---|
| 29 | ;; ulat = uz*cos(lat) - sin(lat)*(ux*cos(lon)+uy*sin(lon)) |
---|
| 30 | ;; ulon = cos(lonÃ*uy - sin(lon)*ux |
---|
| 31 | |
---|
| 32 | sfile = addfile(src_file,"r") |
---|
| 33 | src_lat = sfile->lat_i |
---|
| 34 | src_lon = sfile->lon_i |
---|
| 35 | printVarSummary(src_lat) |
---|
| 36 | |
---|
| 37 | gfile = addfile(grd_file,"r") |
---|
| 38 | dst_lat = gfile->lat_i |
---|
| 39 | dst_lon = gfile->lon_i |
---|
| 40 | printVarSummary(dst_lat) |
---|
| 41 | |
---|
| 42 | system("rm -f " + dst_file) |
---|
| 43 | system("ls -lth") |
---|
| 44 | dfile = addfile(dst_file,"c") |
---|
| 45 | filedimdef(dfile,"time_counter",-1,True) |
---|
| 46 | dfile->time_counter=sfile->time_counter |
---|
| 47 | dfile->lev=sfile->lev |
---|
| 48 | dfile->lat_i=dst_lat |
---|
| 49 | dfile->lon_i=dst_lon |
---|
| 50 | |
---|
| 51 | var = sfile->$varname$ |
---|
| 52 | printVarSummary(var) |
---|
| 53 | |
---|
| 54 | Opt = True |
---|
| 55 | Opt@InterpMethod = "patch" |
---|
| 56 | Opt@WgtFileName = "remapping.nc" |
---|
| 57 | |
---|
| 58 | Opt@SrcGridType = "unstructured" |
---|
| 59 | Opt@SrcGridLat = src_lat |
---|
| 60 | Opt@SrcGridLon = src_lon |
---|
| 61 | Opt@SrcRegional = False |
---|
| 62 | |
---|
| 63 | Opt@DstGridType = "unstructured" |
---|
| 64 | Opt@DstGridLat = dfile->lat_i |
---|
| 65 | Opt@DstGridLon = dfile->lon_i |
---|
| 66 | Opt@DstRegional = False |
---|
| 67 | |
---|
| 68 | Opt@CopyVarCoords = True |
---|
| 69 | Opt@ForceOverwrite = True |
---|
| 70 | Opt@PrintTimings = True |
---|
| 71 | Opt@Debug = True |
---|
| 72 | |
---|
| 73 | var_regrid = ESMF_regrid(var,Opt) ; Do the regridding |
---|
| 74 | var_regrid!0="time_counter" |
---|
| 75 | var_regrid!2="cell_i" |
---|
| 76 | var_regrid!1="lev" |
---|
| 77 | var_regrid@coordinates = "lon_i lat_i" |
---|
| 78 | delete(var_regrid@lon1d) |
---|
| 79 | delete(var_regrid@lat1d) |
---|
| 80 | printVarSummary(var_regrid) ; Check that everything |
---|
| 81 | printMinMax(var_regrid,0) ; looks okay. |
---|
| 82 | |
---|
| 83 | dfile->$varname$ = var_regrid |
---|
| 84 | |
---|
| 85 | end |
---|