** Warning **

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
Back to home page

MITgcm

 
 

    


Warning, /verification/natl_box/input/rho.m is written in an unsupported language. File is not indexed.

view on githubraw file Latest commit a7207395 on 2006-01-30 23:51:50 UTC
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
                0014 
                0015 % 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
                0032   
                0033   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
                0043   
                0044   [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
                0051   
                0052 % CONVERT PRESSURE TO BARS AND TAKE SQUARE ROOT SALINITY.
                0053       P=P/10.;
                0054       SR = sqrt(abs(S));
                0055 
                0056 %  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;
                0062 
                0063 % SPECIFIC VOLUME AT ATMOSPHERIC PRESSURE
                0064       V350P = 1.0/1028.1063;
                0065       x = -x*V350P./(1028.1063+x);
                0066 
                0067 % 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;
                0075        
                0076 % 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));