Issuing rollback() due to DESTROY without explicit disconnect() of DBD::mysql::db handle dbname=MITgcm at /usr/local/share/lxr/lib/LXR/Common.pm line 1224.
Last-Modified: Fri, 31 Oct 2024 05:11:45 GMT
Content-Type: text/html; charset=utf-8
MITgcm/MITgcm/verification/natl_box/input/rho.m
a7207395ee Dimi*0001 function x=rho(S,T,P);
0002 % RHO density of seawater (kg/m^3)
0003 %
0004 % x=rho(S,T,P)
0005 %
0006 % given the salinity S (ppt), in situ temperature T (deg C)
0007 % and pressure P (dbars).
0008 %
0009 % Note: D. Menemenlis (MIT 18 jul 94)
0010 % This routine is a leaner version of SWSTATE for large matrices,
0011 % and the user can mix and match scalar, vector, and matrix inputs.
0012 %
0013 % See also SWSTATE
00140015 % check that input arguments are same size, etc.
0016 if length(size(S))>2 | length(size(T))>2 | length(size(P))>2
0017 if length(size(S)) ~= length(size(T)) | length(size(S)) ~= length(size(P))
0018 error('for 3+ dimensioned arrays, S, T, and P must have same dimension')
0019 end
0020 if any(size(S)~=size(T)) | any(size(S)~=size(P))
0021 error('for 3+ dimensioned arrays, S, T, and P must have same size')
0022 end
0023 else
0024 [NS,MS]=size(S); [NT,MT]=size(T);
0025 if ((NS==1 & MS==1) & (NT ~=1 | MT ~=1) ),
0026 S=S*ones(NT,MT);
0027 [NS,MS]=size(S);
0028 elseif ((NT==1 & MT==1) & (NS ~=1 | MS ~=1) ),
0029 T=T*ones(NS,MS);
0030 [NT,MT]=size(T);
0031 end
00320033 if (NT+MT) > (NS+MS)
0034 if (MS==1), S=S*ones(1,MT);
0035 elseif (NS==1), S=S'*ones(1,MT);
0036 end
0037 elseif (NT+MT) < (NS+MS)
0038 if (MT==1), T=T*ones(1,MS);
0039 elseif (NT==1), T=T'*ones(1,MS);
0040 end
0041 [NT,MT]=size(T);
0042 end
00430044 [NP,MP]=size(P);
0045 if max(NP,MP)>1
0046 if (MP==1), P=P*ones(1,MT);
0047 elseif (NP==1), P=P'*ones(1,MT);
0048 end
0049 end
0050 end
00510052 % CONVERT PRESSURE TO BARS AND TAKE SQUARE ROOT SALINITY.
0053 P=P/10.;
0054 SR = sqrt(abs(S));
00550056 % INTERNATIONAL ONE-ATMOSPHERE EQUATION OF STATE OF SEAWATER
0057 x = (4.8314E-4 * S + ...
0058 ((-1.6546E-6*T+1.0227E-4).*T-5.72466E-3) .* SR + ...
0059 (((5.3875E-9*T-8.2467E-7).*T+7.6438E-5).*T-4.0899E-3).*T+8.24493E-1) ...
0060 .*S + ((((6.536332E-9*T-1.120083E-6).*T+1.001685E-4).*T ...
0061 -9.095290E-3).*T+6.793952E-2).*T-28.263737;
00620063 % SPECIFIC VOLUME AT ATMOSPHERIC PRESSURE
0064 V350P = 1.0/1028.1063;
0065 x = -x*V350P./(1028.1063+x);
00660067 % COMPUTE COMPRESSION TERMS
0068 SR = ((((9.1697E-10*T+2.0816E-8).*T-9.9348E-7) .* S + ...
0069 (5.2787E-8*T-6.12293E-6).*T+3.47718E-5) .*P + ...
0070 (1.91075E-4 * SR + (-1.6078E-6*T-1.0981E-5).*T+2.2838E-3) .* ...
0071 S + ((-5.77905E-7*T+1.16092E-4).*T+1.43713E-3).*T-0.1194975) ...
0072 .*P + (((-5.3009E-4*T+1.6483E-2).*T+7.944E-2) .* SR + ...
0073 ((-6.1670E-5*T+1.09987E-2).*T-0.603459).*T+54.6746) .* S + ...
0074 (((-5.155288E-5*T+1.360477E-2).*T-2.327105).*T+148.4206).*T-1930.06;
00750076 % EVALUATE PRESSURE POLYNOMIAL
0077 B = (5.03217E-5*P+3.359406).*P+21582.27;
0078 x = x.*(1.0 - P./B) + (V350P+x).*P.*SR./(B.*(B+SR));
0079 SR = V350P.*(1.0 - P./B);
0080 x= 1028.106331 + P./B./SR - x ./ (SR.*(SR+x));