function ctli = rnt_grid2grid(grdin, grd, ctl, irec, fileout, pmap, pmap_psi) % Begin record interpolation tempin=rnt_loadvar(ctl,irec,'temp'); saltin=rnt_loadvar(ctl,irec,'salt'); zeta=rnt_loadvar(ctl,irec,'zeta'); grdin.zr=rnt_setdepth(zeta,grdin); mask3din=repmat(grdin.maskr, [1 1 grdin.N]); mask3d=repmat(grd.maskr, [1 1 grd.N]); % Do the 3D OA Mapping a=10; b=10; % decorrelation length scale in lon, lat. Keep large in this case. tic [zeta2,zeta2_err]=rnt_oa2d(grdin.lonr, grdin.latr, zeta.*grdin.maskr, ... grd.lonr, grd.latr, a,b,pmap); toc zeta2=zeta2.*grd.maskr; zeta2(isnan(zeta2))=0; grd.zr=rnt_setdepth(zeta2,grd); % If the volume of the CHILD is NOT fully contained in the PARENT use this: disp('Doing Temperature ... '); tic [temp2,temp2_err]=rnt_oa3d_bdc(grdin.lonr, grdin.latr, grdin.zr, tempin.*mask3din, ... grd.lonr, grd.latr, grd.zr ,a,b,pmap); toc temp2=temp2.*mask3d; temp2(isnan(temp2))=0; disp('Doing Salinity ... '); tic [salt2,salt2_err]=rnt_oa3d_bdc(grdin.lonr, grdin.latr, grdin.zr, saltin.*mask3din, ... grd.lonr, grd.latr, grd.zr ,a,b,pmap); toc salt2=salt2.*mask3d; salt2(isnan(salt2))=0; % velocity vectors disp('Rotating velocity ... '); u=rnt_loadvar(ctl, irec, 'u'); v=rnt_loadvar(ctl, irec, 'v'); up=rnt_2grid(u,'u','p'); vp=rnt_2grid(v,'v','p'); angler=rnt_2grid(grdin.angle, 'r', 'p'); [ urot, vrot ] = rnt_rotate(up,vp,-angler); grdin.zrp=rnt_2grid(grdin.zr, 'r','p'); mask3dpin=rnt_2grid(mask3din, 'r','p'); disp('Doing u ...'); tic [u2,u2_err]=rnt_oa3d_bdc(grdin.lonp, grdin.latp, grdin.zrp, up.*mask3dpin, ... grd.lonr, grd.latr, grd.zr ,a,b,pmap_psi); toc u2=u2.*mask3d; u2(isnan(u2))=0; disp('Doing v ...'); tic [v2,v2_err]=rnt_oa3d_bdc(grdin.lonp, grdin.latp, grdin.zrp, vp.*mask3dpin, ... grd.lonr, grd.latr, grd.zr ,a,b,pmap_psi); toc v2=v2.*mask3d; v2(isnan(v2))=0; [un,vn]=rnt_rotate(u2,v2,grd.angle); un=rnt_2grid(un,'r','u'); vn=rnt_2grid(vn,'r','v'); disp(['Saving file ',fileout]); opt.time=1; opt.timeval=ctl.time(irec); rnc_CreateIniFile(grd,fileout, opt); ctli=rnt_timectl({fileout}, 'ocean_time'); rnt_savevar(ctli, 1, 'temp', temp2); rnt_savevar(ctli, 1, 'salt', salt2); rnt_savevar(ctli, 1, 'u', un); rnt_savevar(ctli, 1, 'v', vn); rnt_savevar(ctli, 1, 'zeta', zeta2); [zr,zw,Hz]=rnt_setdepth(zeta2, grd); hzu=rnt_2grid(Hz, 'r','u'); hzv=rnt_2grid(Hz, 'r','v'); ubar=sum(un.*hzu,3)./sum(hzu,3); vbar=sum(vn.*hzv,3)./sum(hzv,3); rnt_savevar(ctli, 1, 'ubar', ubar); rnt_savevar(ctli, 1, 'vbar', vbar);