1 |
gforget |
1.1 |
function [mskCedge,mskWedge,mskSedge]=gcmfaces_edge_mask(mskCint); |
2 |
|
|
%object: computes the edge mask corresponding with |
3 |
|
|
% an ocean basin interior mask |
4 |
|
|
%inputs: mskCint is the 0/1 mask defining an ocean basin interior |
5 |
|
|
%outputs: mskCedge is the tracer edge mask (1 point outside interior) |
6 |
|
|
% mskWedge/mskSedge is the U/V velocity mask (1 for entering |
7 |
|
|
% flow, -1 for exiting flow, and 0 otherwise) |
8 |
|
|
|
9 |
|
|
gcmfaces_global; |
10 |
|
|
|
11 |
|
|
%treat the case of blank tiles: |
12 |
|
|
mskCint(mygrid.RAC==0)=NaN; |
13 |
|
|
|
14 |
|
|
%add one point at edges: |
15 |
|
|
mskCplus=exch_T_N(mskCint); |
16 |
|
|
|
17 |
|
|
%edge tracer mask: |
18 |
|
|
mskCedge=mskCint; |
19 |
|
|
for iF=1:mskCint.nFaces; |
20 |
|
|
tmp1=mskCplus{iF}; |
21 |
|
|
tmp2=tmp1(2:end-1,1:end-2)+tmp1(2:end-1,3:end)... |
22 |
|
|
+tmp1(1:end-2,2:end-1)+tmp1(3:end,2:end-1); |
23 |
|
|
mskCedge{iF}=1*(tmp2>0&tmp1(2:end-1,2:end-1)==0); |
24 |
|
|
end; |
25 |
|
|
|
26 |
|
|
%edge velocity mask: |
27 |
|
|
mskWedge=mskCint; mskSedge=mskCint; |
28 |
|
|
for iF=1:mskCplus.nFaces; |
29 |
|
|
mskWedge{iF}=mskCplus{iF}(2:end-1,2:end-1) - mskCplus{iF}(1:end-2,2:end-1); |
30 |
|
|
mskSedge{iF}=mskCplus{iF}(2:end-1,2:end-1) - mskCplus{iF}(2:end-1,1:end-2); |
31 |
|
|
end; |
32 |
|
|
|
33 |
|
|
%treat the case of blank tiles: |
34 |
|
|
mskCedge(isnan(mskCedge))=0; |
35 |
|
|
mskWedge(isnan(mskWedge))=0; |
36 |
|
|
mskSedge(isnan(mskSedge))=0; |