1 |
gforget |
1.1 |
function [vec]=gcmfaces_subset(msk,fld,applyMsk); |
2 |
|
|
%object: extract the subset of points from fld(.*msk) such that msk~=0 |
3 |
|
|
%inputs: msk is the gcmfaces subdomain mask (one vertical level) |
4 |
|
|
% fld is the complete field (gcmfaces or array version) |
5 |
|
|
%optional: applyMsk is a flag that stated whether to multiply with |
6 |
|
|
% msk (applyMsk==1; default) or not (applyMsk==0); |
7 |
|
|
%output: vec is the subset field |
8 |
|
|
% |
9 |
|
|
%note: - if fld is an array, then it must be a result of convert2array |
10 |
|
|
% - for velocity subsets, msk may be -1 or +1, depending on |
11 |
|
|
% directionality, e.g. when msk delineates a transport section. |
12 |
|
|
|
13 |
|
|
if isempty(whos('applyMsk')); applyMsk=1; end; |
14 |
|
|
|
15 |
|
|
if isa(fld,'gcmfaces'); fld=convert2array(fld); end; |
16 |
|
|
nn=size(fld); nn=[nn ones(1,4-length(nn))]; |
17 |
|
|
fld=reshape(fld,nn(1)*nn(2),nn(3)*nn(4)); |
18 |
|
|
|
19 |
gforget |
1.2 |
msk=convert2array(msk); msk=msk(:); |
20 |
gforget |
1.1 |
|
21 |
|
|
ii=find(msk~=0&~isnan(msk)); mm=length(ii); |
22 |
|
|
if mm==0; |
23 |
|
|
vec=zeros(1,nn(3),nn(4)); |
24 |
|
|
else; |
25 |
|
|
if applyMsk; |
26 |
|
|
vec=fld(ii,:).*(msk(ii)*ones(1,nn(3)*nn(4))); |
27 |
|
|
else; |
28 |
|
|
vec=fld(ii,:); |
29 |
|
|
end; |
30 |
|
|
vec=reshape(vec,[mm nn(3) nn(4)]); |
31 |
|
|
end; |
32 |
|
|
|
33 |
|
|
|