Added specific volume anomaly (svan) function with pressure=0 case

This commit is contained in:
Daniele Tricoli 2011-01-14 01:44:48 +01:00
parent da253867e3
commit ccc8b31ffc
3 changed files with 42 additions and 0 deletions

View File

@ -66,3 +66,31 @@ double conductivity(double salinity, double temperature, double pressure)
return 0.5 * r / A(temperature);
}
double specific_volume_anomaly(double salinity, double temperature,
double pressure, double *sigma)
{
double sig, sr, r1, r2, r3, r4;
double a, b, c, d, e, a1, b1, aw, bw, k, ko, kw, k35, v350p, sva;
double r3500 = 1028.1063;
double dr350 = 28.106331;
r4 = 4.8314e-4;
pressure = pressure / 10.;
sr = sqrt(fabs(salinity));
r1 = ((((6.536332e-9 * temperature - 1.120083e-6) * temperature +
1.001685e-4) * temperature - 9.095290e-3) * temperature +
6.793952e-2) * temperature - 28.263737;
r2 = (((5.3875e-9 * temperature - 8.2467e-7) * temperature + 7.6438e-5) *
temperature - 4.0899e-3) * temperature + 8.24493e-1;
r3 = (-1.6546e-6 * temperature + 1.0227e-4) * temperature - 5.72466e-3;
sig = (r4 * salinity + r3 * sr + r2) * salinity + r1;
v350p = 1.0 / r3500;
sva = -sig * v350p / (r3500 + sig);
*sigma = sig + dr350;
if (pressure == 0.0)
return sva * 1.0e+8;
}

View File

@ -3,5 +3,7 @@
double salinity(double conductivity, double temperature, double pressure);
double conductivity(double salinity, double temperature, double pressure);
double specific_volume_anomaly(double salinity, double temperature,
double pressure, double *sigma);
#endif

View File

@ -35,12 +35,24 @@ START_TEST(test_conductivity)
}
END_TEST
START_TEST(test_specific_volume_anomaly)
{
double sigma;
ck_assert(cmp_double(specific_volume_anomaly(0, 0, 0, &sigma),
2749.539368));
ck_assert(cmp_double(sigma, -0.1574));
}
END_TEST
Suite *oceanography_suite(void)
{
Suite *s = suite_create("Oceanography");
TCase *tc_core = tcase_create("Core");
tcase_add_test(tc_core, test_salinity);
tcase_add_test(tc_core, test_conductivity);
tcase_add_test(tc_core, test_specific_volume_anomaly);
suite_add_tcase(s, tc_core);
return s;