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

Contents of /MITgcm_contrib/gag_subduction_scripts/mldepth.m

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


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

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