/[MITgcm]/MITgcm_contrib/high_res_cube/eddy_flux/c20a/ll_regrid.m
ViewVC logotype

Contents of /MITgcm_contrib/high_res_cube/eddy_flux/c20a/ll_regrid.m

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.1 - (show annotations) (download)
Fri Feb 25 19:21:30 2005 UTC (20 years, 5 months ago) by edhill
Branch: MAIN
CVS Tags: HEAD
 o a simple and reasonably fast cube --> lat/lon converter

1 function [v] = ll_regrid(loni,lati,vi,lon,lat)
2
3 % Function [v] = ll_regrid(loni,lati,vi,lon,lat)
4 %
5 % INPUTS
6 % loni matrix of input lon coords on the interval [0,360)
7 % lati matrix of input lat coords on the interval [0,180)
8 % vi matrix of values on the lati,loni points
9 % lon matrix of output lon coords on the interval [0,360)
10 % lat matrix of output lat coords on the interval [0,180)
11 %
12 % OUTPUTS
13 % v matrix of values on the lat,lon points
14 %
15 % This function implements a very simple regridding method for
16 % projecting scalars defined on general high-res grids
17 % (eg. cubesphere) onto lower-res Lat--Lon grids.
18
19 v = [];
20
21 if nargin ~= 5
22 disp('Error: there must be exactly 5 arguments!');
23 return
24 end
25
26 % Mandatory arguments
27 if (prod(size(lati)) ~= prod(size(loni))) ...
28 || (prod(size(lati)) ~= prod(size(vi)))
29 disp(['Error: the lati, loni, and vi must all ' ...
30 'be the same size']);
31 return
32 end
33
34 % lat = 0:10:350
35 % lon = -80:10:80
36
37 % slon = sort(lon(:));
38 % dlon = diff(slon);
39 % lons = slon(1)-dlon(1)/2;
40 % lone = slon(length(slon))+dlon(length(dlon))/2;
41 % mlon = [ lons ; lons+cumsum(dlon) ; lone ];
42 % klon = [ 1 ; [1:length(dlon)]' ; length(lon) ];
43
44 % slat = sort(lat(:));
45 % dlat = diff(slat);
46 % lats = slat(1)-dlat(1)/2;
47 % late = slat(length(slat))+dlat(length(dlat))/2;
48 % mlat = [ lats ; lats+cumsum(dlat) ; late ];
49 % klat = [ 1 ; [1:length(dlat)]' ; length(lat) ];
50
51 % slon = sort(lon);
52 % slat = sort(lat);
53 % klon = [1:length(slon)];
54 % klat = [1:length(slat)];
55
56 alon = min(lon);
57 blon = max(lon);
58 dlon = blon - alon;
59 nlon = length(lon);
60
61 alat = min(lat);
62 blat = max(lat);
63 dlat = blat - alat;
64 nlat = length(lat);
65
66 vsum = zeros(length(lon),length(lat));
67 vcnt = zeros(length(lon),length(lat));
68
69 for kk = 1:(prod(size(vi)))
70
71 % ii = interp1(slon,klon,loni(kk),'nearest');
72 % jj = interp1(slat,klat,lati(kk),'nearest');
73
74 flon = (loni(kk) - alon) / dlon;
75 flat = (lati(kk) - alat) / dlat;
76
77 if (flon >= 0) && (flon <= 1) && (flat >= 0) && (flat <= 1)
78 ii = 1 + round(flon*(dlon-1));
79 jj = 1 + round(flat*(dlat-1));
80 vcnt(ii,jj) = vcnt(ii,jj) + 1;
81 vsum(ii,jj) = vsum(ii,jj) + vi(kk);
82 end
83
84 end
85
86 inz = find(vcnt ~= 0);
87 vsum(inz) = vsum(inz) ./ vcnt(inz);
88
89 iz = find(vcnt == 0);
90 vsum(iz) = NaN;
91
92 v = vsum;

  ViewVC Help
Powered by ViewVC 1.1.22