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 |
---|