/[MITgcm]/MITgcm_contrib/gael/matlab_class/gcmfaces_calc/calc_UV_conv.m
ViewVC logotype

Contents of /MITgcm_contrib/gael/matlab_class/gcmfaces_calc/calc_UV_conv.m

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


Revision 1.1 - (show annotations) (download)
Wed Feb 5 03:42:14 2014 UTC (11 years, 5 months ago) by gforget
Branch: MAIN
CVS Tags: checkpoint65x, checkpoint65r, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, HEAD
- fix typos.
- rename calc_UV_div as calc_UV_conv.

1 function [fldDIV]=calc_UV_conv(fldU,fldV,varargin);
2 %object: compute flow field convergent part (i.e. minus the divergence)
3 %inputs: fldU and fldV are transport or velocity fields
4 %optional: list_factors is the list of factors that need to
5 % be applied to fldU,fldV. By default it is empty (i.e. {}).
6 % The most complete list would be {'dh','dz','hfac'}.
7 %output: fldDIV is the convergence (integrated, not averaged, over grid cell area)
8 %
9 %notes: fldU,fldV that may be
10 % either [A] a 3D vector field
11 % or [B] a 2D vector field
12 %
13 % in case [A], layer thicknesses = mygrid.DRF; in case [B] layer thickness = 1
14 % in any case, the global variable mygrid is supposed to be available
15
16 global mygrid;
17
18 %initialize output:
19 n3=max(size(fldU.f1,3),1); n4=max(size(fldV.f1,4),1);
20
21 %prepare fldU/fldV:
22 fldU(isnan(fldU))=0; fldV(isnan(fldV))=0;
23
24 %if nargin==3; list_factors=varargin; else; list_factors={'dh','dz','hfac'}; end;
25 if nargin==3; list_factors=varargin{1}; else; list_factors={}; end;
26
27 dxg=mk3D(mygrid.DXG,fldU); dyg=mk3D(mygrid.DYG,fldU);
28 if size(fldU.f1,3)==length(mygrid.DRF); drf=mk3D(mygrid.DRF,fldU);
29 elseif size(fldU.f1,3)==1; drf=fldU; drf(:)=1;
30 else; error('error in calc_UV_conv: non supported field size\n');
31 end;
32 facW=drf; facW(:)=1; facS=facW;
33 for ii=1:length(list_factors);
34 tmp1=list_factors{ii};
35 if strcmp(tmp1,'dh'); facW=facW.*dyg; facS=facS.*dxg;
36 elseif strcmp(tmp1,'dz'); facW=facW.*drf; facS=facS.*drf;
37 elseif strcmp(tmp1,'hfac'); facW=facW.*mygrid.hFacW; facS=facS.*mygrid.hFacS;
38 elseif isempty(tmp1); 1;
39 else; fprintf('error in calc_UV_conv: non supported factor\n'); return;
40 end;
41 end;
42
43 for k4=1:n4;
44 fldU(:,:,:,k4)=fldU(:,:,:,k4).*facW;
45 fldV(:,:,:,k4)=fldV(:,:,:,k4).*facS;
46 end;
47
48 [FLDU,FLDV]=exch_UV(fldU,fldV);
49 FLDU(isnan(FLDU))=0; FLDV(isnan(FLDV))=0;
50
51 fldDIV=fldU;
52 for iFace=1:fldDIV.nFaces;
53 fldDIV{iFace}=FLDU{iFace}(1:end-1,:,:,:)-FLDU{iFace}(2:end,:,:,:)+...
54 FLDV{iFace}(:,1:end-1,:,:)-FLDV{iFace}(:,2:end,:,:);
55 end;
56
57

  ViewVC Help
Powered by ViewVC 1.1.22