/[MITgcm]/MITgcm_contrib/gag_subduction_scripts/mldepth.m
ViewVC logotype

Annotation of /MITgcm_contrib/gag_subduction_scripts/mldepth.m

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


Revision 1.1 - (hide annotations) (download)
Wed Apr 21 21:12:13 2004 UTC (20 years, 1 month ago) by gebbie
Branch: MAIN
CVS Tags: HEAD
Added some diagnostics for Eulerian maps, and some utilities.

1 gebbie 1.1 function [mld,rho] = mldepth(T,S,depth,epsilon)
2     %function [mld,rho] = mldepth(T,S,depth,epsilon)
3     %
4     % Solve for mixed layer depth on a 1-meter resolution grid.
5     %
6     % Handles input temperature and salinity of any dimension, i.e. 2-D, 3-D,
7     % 4-D, with time and space in any order.
8     %
9     % Returns mixed layer depth in same dimension as T,S, except without
10     % the vertical dimension.
11     %
12     % depth = depths on which theta and S are defined.
13     % epsilon = threshold for density difference, surface to mixld.
14     %
15     % Method: Solve for potential density with the surface reference pressure.
16     % Interpolate density onto a 1-meter resolution grid.
17     % Search for the depth where surface density differs by some
18     % threshold. This depth is the mixed layer depth.
19     %
20     % G. Gebbie, MIT-WHOI, August 22, 2001. on board the R/V Oceanus.
21     %
22     % Vectorized for Matlab, November 2003. GG. MIT-WHOI.
23     %
24     % required: seawater toolbox. WARNING: SEAWATER TOOLBOX SYNTAX
25     % MAY HAVE CHANGED.
26    
27     mldlimit = 500 ;% a priori maximum limit of mixed layer depth
28    
29     S( S == 0) = NaN;
30     T( T == 0) = NaN;
31    
32     % mldlimit is the limit of mixed layer depth here.
33     grrid = (2*depth(1)):1:mldlimit;
34    
35     % Set reference pressure to zero. Should not make a difference if mixld < 500.
36     pr =0;
37    
38     %% The vertical direction is special. Its dimension is specified by "depth".
39     nz = length(depth);
40    
41     nn = size(T);
42    
43     %% Find vertical dimension.
44     zindex = find(nn==nz);
45    
46     oindex = 1:ndims(T);
47     oindex(oindex==zindex)=[];
48     nx = prod(nn(oindex));
49    
50     %% Put the vertical direction at the end. Squeeze the rest.
51     temp = permute(T,[oindex zindex]);
52     temp = reshape(temp,nx,nz);
53     % temp (temp==0) = nan;
54    
55     salt = permute(S,[1 2 4 3]);
56     salt = reshape(salt,nx,nz);
57     % salt (salt==0) = nan;
58    
59     pden = sw_pden(salt,temp,depth,pr);
60    
61     if nargout ==2
62     rho = reshape(pden,[nn(oindex) nz]) ;
63     rho = permute(rho,[1 2 4 3]);
64     end
65    
66     temphi = interp1( depth', pden', grrid);
67     differ = cumsum(diff(temphi));
68    
69     %% preallocate memory.
70     mld = zeros(nx,1);
71    
72     % how would one vectorize this section?
73     for i = 1:nx
74     index =find(differ(:,i)> epsilon);
75     if( isempty ( index) ==1)
76     tmpmld = NaN;
77     else
78     tmpmld = grrid( index(1));
79     end
80     mld(i) = tmpmld;
81     end
82    
83     % Make the user happy. Return mixed layer depth in the same form as the
84     % input T,S, except vertical dimension is gone.
85    
86     mld = reshape(mld,[nn(oindex) 1]);
87     mld = squeeze(mld);
88    
89     mld(isnan(mld)) = 0;
90    
91     return
92    
93    
94    
95    
96    
97    

  ViewVC Help
Powered by ViewVC 1.1.22