/*****************************************************************************/
/* Copyright 2004 MBARI                                                      */
/*****************************************************************************/
/* Summary  : AUV Speed of Sound Calculation                                 */
/* Filename : SoundVelocity.cc                                               */
/* Author   : Karen A. Salamy                                                */
/* Project  : Sea Floor Mapping                                 	     */
/* Version  : Version 1.0                                                    */
/* Created  : 01/28/2004                                                     */
/* Modified :                                                       	     */
/* Archived :                                                                */
/*****************************************************************************/
/* Modification History:                                                     */
/* $Header:
 * $Log:
 */
/*****************************************************************************/

#include "SoundVelocity.h"

float SoundVelocity::calcSndVel(float Temp, float Press, float Lat, float Sal)
{
  float P = Press; //Pressure in decibars
  float P1; //Presure in kg/cm**2
  float T = Temp; //Temperature in degrees C
  float L = Lat; // Latitute
  float c0 = 1402.392; //Unknown constant
  float dltact;
  float dltacs;
  float dltacp;
  float dcstp;
  float sal = Sal; //Salinity
  float sndVel; //Velocity
	
  P1 = P * 0.1019716; //to pressure in kg/cm**2 gauge
	
  dltact = T *
    ( 0.501109398873E1 + T * (-0.550946843172E-1 + T * 0.221535969240E-3) );
  dltacs = sal * (0.132952290781E1 + sal * 0.128955756844E-3);
  dltacp = P1 *
    ( 0.1560592570410E0 + P1 * (0.24499868841E-4 + P1 * (-0.88392332513E-8)) );
  dcstp = T*(-0.127562783426E-1 * sal +
	     P1*(0.635191613389E-2+
		 P1*(0.265484716608E-7*T+
		     -0.159349479045E-5+
		     0.522116437235E-9*P1)+
		 (-0.438031096213E-6)*T*T))+
    sal*((-0.161674495909E-8)*sal*P1*P1+
	 T*(0.968403156410E-4*T+
	    P1*(0.485639620015E-5*sal+
		(-0.340597039004E-3))));

  sndVel = c0+dltact+dltacs+dltacp+dcstp;
	
  return(sndVel);  
}
