function [SVAN,SIGMA]=swstate(S,T,P0,ftn); % SWSTATE State equation for seawater % % [SVAN,SIGMA]=SWSTATE(S,T,P) returns the specific volume % anomaly SVAN (m^3/kg*1e-8) and the density anomaly SIGMA (kg/m^3) % given the salinity S (ppt), temperature T (deg C) and pressure % P (dbars). % % [dVdT,dRdT]=SWSTATE(S,T,P,'dT') returns derivatives w.r.t. % temperature of the volume and density. % % [dVdS,dRdS]=SWSTATE(S,T,P,'dS') returns derivatives w.r.t. % salinity. % % [dVdP,dRdP]=SWSTATE(S,T,P,'dP') returns derivatives w.r.t. % pressure. % % All elements can be scalars, vectors, or matrices but should be % the same size. %Notes: RP (WHOI 2/dec/91) % % This stuff is directly copied from the UNESCO algorithms, with some % minor changes to make it Matlab compatible (like adding ";" and changing % "*" to ".*" when necessary. % % RP (WHOI 3/dec/91) % % Added first derivative calculations. derivT=0; derivS=0; derivP=0; if (nargin==4), if (ftn=='dT'), derivT=1; elseif (ftn=='dS'), derivS=1; elseif (ftn=='dP'), derivP=1; else error('swstate: Unrecognized option!'); end; end; % ****************************************************** % SPECIFIC VOLUME ANOMALY (STERIC ANOMALY) BASED ON 1980 EQUATION % OF STATE FOR SEAWATER AND 1978 PRACTICAL SALINITY SCALE. % REFERENCES % MILLERO, ET AL (1980) DEEP-SEA RES.,27A,255-264 % MILLERO AND POISSON 1981,DEEP-SEA RES.,28A PP 625-629. % BOTH ABOVE REFERENCES ARE ALSO FOUND IN UNESCO REPORT 38 (1981) % UNITS: % PRESSURE P0 DECIBARS % TEMPERATURE T DEG CELSIUS (IPTS-68) % SALINITY S (IPSS-78) % SPEC. VOL. ANA. SVAN M**3/KG *1.0E-8 % DENSITY ANA. SIGMA KG/M**3 % ****************************************************************** % CHECK VALUE: SVAN=981.3021 E-8 M**3/KG. FOR S = 40 (IPSS-78) , % T = 40 DEG C, P0= 10000 DECIBARS. % CHECK VALUE: SIGMA = 59.82037 KG/M**3 FOR S = 40 (IPSS-78) , % T = 40 DEG C, P0= 10000 DECIBARS. %HECK VALUE: FOR S = 40 (IPSS-78) , T = 40 DEG C, P0= 10000 DECIBARS. % DR/DP DR/DT DR/DS % DRV(1,7) DRV(2,3) DRV(1,8) % % FINITE DIFFERENCE WITH 3RD ORDER CORRECTION DONE IN DOUBLE PRECSION % % 3.46969238E-3 -.43311722 .705110777 % % EXPLICIT DIFFERENTIATION SINGLE PRECISION FORMULATION EOS80 % % 3.4696929E-3 -.4331173 .7051107 % % (RP...I think this ---------^^^^^^ should be -.4431173!); % ******************************************************* % DATA R3500=1028.1063; R4=4.8314E-4; DR350=28.106331; % CONVERT PRESSURE TO BARS AND TAKE SQUARE ROOT SALINITY. P=P0/10.; SAL=S; SR = sqrt(abs(S)); % ********************************************************* % PURE WATER DENSITY AT ATMOSPHERIC PRESSURE % BIGG P.H.,(1967) BR. J. APPLIED PHYSICS 8 PP 521-537. % R1 = ((((6.536332E-9*T-1.120083E-6).*T+1.001685E-4).*T ... -9.095290E-3).*T+6.793952E-2).*T-28.263737; % SEAWATER DENSITY ATM PRESS. % COEFFICIENTS INVOLVING SALINITY R2 = (((5.3875E-9*T-8.2467E-7).*T+7.6438E-5).*T-4.0899E-3).*T+8.24493E-1; R3 = (-1.6546E-6*T+1.0227E-4).*T-5.72466E-3; % INTERNATIONAL ONE-ATMOSPHERE EQUATION OF STATE OF SEAWATER SIG = (R4*S + R3.*SR + R2).*S + R1; % SPECIFIC VOLUME AT ATMOSPHERIC PRESSURE V350P = 1.0/R3500; SVA = -SIG*V350P./(R3500+SIG); SIGMA=SIG+DR350; V0 = 1.0./(1000.0 + SIGMA); % SCALE SPECIFIC VOL. ANAMOLY TO NORMALLY REPORTED UNITS SVAN=SVA*1.0E+8; if (derivS), % These are derivatives for (S,T,0). R4S=9.6628E-4; RHO1 = 1000.0 + SIGMA; RHOS=R4S*SAL+1.5.*R3.*SR+R2; V0S=-RHOS./(RHO1.*RHO1); elseif (derivT), R1 =(((3.268166E-8*T-4.480332E-6).*T+3.005055E-4).*T... -1.819058E-2).*T+6.793952E-2; R2 = ((2.155E-8*T-2.47401E-6).*T+1.52876E-4).*T-4.0899E-3; R3 = -3.3092E-6*T+1.0227E-4; RHO1 = 1000.0 + SIGMA; RHOT = (R3.*SR + R2).*SAL + R1; V0T = -RHOT./(RHO1.*RHO1); end; % ****************************************************************** % ****** NEW HIGH PRESSURE EQUATION OF STATE FOR SEAWATER ******** % ****************************************************************** % MILLERO, ET AL , 1980 DSR 27A, PP 255-264 % CONSTANT NOTATION FOLLOWS ARTICLE %******************************************************** % COMPUTE COMPRESSION TERMS E = (9.1697E-10*T+2.0816E-8).*T-9.9348E-7; BW = (5.2787E-8*T-6.12293E-6).*T+3.47718E-5; B = BW + E.*S; % Bulk Modulus (almost) % CORRECT B FOR ANAMOLY BIAS CHANGE Bout = B + 5.03217E-5; if (derivS), DBDS=E; elseif (derivT), BW = 1.05574E-7*T-6.12293E-6; E = 1.83394E-9*T +2.0816E-8; BT = BW + E.*SAL; end; % D = 1.91075E-4; C = (-1.6078E-6*T-1.0981E-5).*T+2.2838E-3; AW = ((-5.77905E-7*T+1.16092E-4).*T+1.43713E-3).*T-0.1194975; A = (D*SR + C).*S + AW; % CORRECT A FOR ANAMOLY BIAS CHANGE Aout = A + 3.3594055; if (derivS), DADS=2.866125E-4*SR+C; elseif (derivT), C = -3.2156E-6*T -1.0981E-5; AW = (-1.733715E-6*T+2.32184E-4).*T+1.43713E-3; AT = C.*SAL + AW; end; B1 = (-5.3009E-4*T+1.6483E-2).*T+7.944E-2; A1 = ((-6.1670E-5*T+1.09987E-2).*T-0.603459).*T+54.6746; KW = (((-5.155288E-5*T+1.360477E-2).*T-2.327105).*T+148.4206).*T-1930.06; K0 = (B1.*SR + A1).*S + KW; if (derivS), K0S=1.5*B1.*SR+A1; KS=(DBDS.*P+DADS).*P+K0S; elseif (derivT), B1 = -1.06018E-3*T+1.6483E-2; % APRIL 9 1984 CORRECT A1 BIAS FROM -.603457 !!! A1 = (-1.8501E-4*T+2.19974E-2).*T-0.603459; KW = ((-2.0621152E-4*T+4.081431E-2).*T-4.65421).*T+148.4206; K0T = (B1.*SR+A1).*SAL + KW; KT = (BT.*P + AT).*P + K0T; end; % EVALUATE PRESSURE POLYNOMIAL % *********************************************** % K EQUALS THE SECANT BULK MODULUS OF SEAWATER % DK=K(S,T,P)-K(35,0,P) % K35=K(35,0,P) % *********************************************** DK = (B.*P + A).*P + K0; K35 = (5.03217E-5*P+3.359406).*P+21582.27; GAM=P./K35; PK = 1.0 - GAM; SVA = SVA.*PK + (V350P+SVA).*P.*DK./(K35.*(K35+DK)); % SCALE SPECIFIC VOL. ANAMOLY TO NORMALLY REPORTED UNITS SVAN=SVA*1.0E+8; % Volume anomaly V350P = V350P.*PK; % **************************************************** % COMPUTE DENSITY ANAMOLY WITH RESPECT TO 1000.0 KG/M**3 % 1) DR350: DENSITY ANAMOLY AT 35 (IPSS-78), 0 DEG. C AND 0 DECIBARS % 2) DR35P: DENSITY ANAMOLY 35 (IPSS-78), 0 DEG. C , PRES. VARIATION % 3) DVAN : DENSITY ANAMOLY VARIATIONS INVOLVING SPECFIC VOL. ANAMOLY % ******************************************************************** % CHECK VALUE: SIGMA = 59.82037 KG/M**3 FOR S = 40 (IPSS-78), % T = 40 DEG C, P0= 10000 DECIBARS. % ******************************************************* DR35P=GAM./V350P; DVAN=SVA./(V350P.*(V350P+SVA)); SIGMA=DR350+DR35P-DVAN; % Density anomaly K=K35+DK; VP=1.0-P./K; V = (1.) ./(SIGMA+1000.0); if (derivS), VS=V0S.*VP+V0.*P.*KS./(K.*K); SVAN=VS; % dVdS SIGMA=-VS./(V.*V); % dRdS elseif (derivT), VT = V0T.*VP + V0.*P.*KT./(K.*K); SVAN=VT; % dVdT SIGMA=-VT./(V.*V); % dRdT elseif (derivP), DKDP = 2.0*Bout.*P + Aout; % CORRECT DVDP TO PER DECIBAR BY MULTIPLE *.1 DVDP = -.1*V0.*(1.0 - P.*DKDP./K)./K; SVAN=DVDP; % dVdP SIGMA=-DVDP./(V.*V); % dRdP end;