Accueil - Informatique - Programmation - Langages

Module Perl Oceano

Publié le mercredi 25 juillet 2007.


Documentation sur les modules Perl Oceano

ATTENTION : le module Oceano est en développement. Il peut et doit encore être amélioré, ce n’est pas une version stable.

Dernière mise à jour : 04/06/2008

Oceano


Oceano est une distribution Perl de manipulation de données océanographiques qui contient les modules suivants :

- Oceano::Convert pour la conversion de dates, de positions...
- Oceano::Seawater pour le calcul de paramètres océanographiques
- Oceano::Seabird pour le calcul de paramètres océanographiques à partir des sondes CTD (conductivity, Temperature, Depth) du constructeur Sea-Bird

Pour installer la distribution sous Linux, il faut d’abord récupérer l’archive Oceano-X.XX.tar.gz et la décompresser :

$ tar -xzvf Oceano-X.XX.tar.gz

puis taper les commandes suivantes pour la compiler et l’installer :

$ perl Makefile.PL
$ make
$ make test
$ make install

Le module en cours de développement est également disponible sous subversion à l’URL suivante :

https://svn.mpl.ird.fr/us191/oceano/trunk/lib/perl/Oceano/

Avant d’utiliser les modules, Il ne vous reste plus qu’à les charger au début de vos scripts avec l’instruction :

use Oceano::Convert;

Vous trouverez plus d’informations sur l’installation des modules dans l’article sur le langage Perl.
La documentation de chacun des modules est consultable grâce à perldoc :

$ perldoc Oceano::Convert

Oceano::Convert


Ce module contient des fonctions de mise en forme et de conversion de dates en jours juliens et des fonctions de conversion de positions en degrés décimaux et sexagésimaux. Il contient aussi des fonctions de mise en forme de valeurs par rapport à leur code ROSCOP [1].

julian($julien, $heure, $min, $sec)

Calcul le jour julien décimal à partir d’un jour julien et d’une heure.
my $julien = &julian(400, 10, 45, 30);

is_bissex($annee)

Détermine si une année est bissextile.
&is_bissex(2007);

date2julian($anneeRef, $annee, $mois, $jour, $heure, $min, $sec)

Calcul le jour julien décimal à partir d’une date, d’une heure et d’une année de référence. l’origine est le 1 janvier de cette année et vaut 0.
my $julien = date2julian(1999, 2001, 01, 10, 12, 0, 0);

Si le mois, le jour, l’heure, les minutes ou les secondes ne sont pas définis, ils valent 0 ou 1 par défaut. Ainsi &date2julian(1999, 2001, 03) équivaut à &date2julian(1999, 2001, 03, 01, 00, 00, 00).

Si l’année est donnée sur deux chiffres, elle est interprétée selon la règle suivante :
- si $annee >= 70 alors $annee = 19XX
- si $annee < 70 alors $annee = 20XX

&date2julian(99, 01) retourne donc le nombre de jours entre le 01/01/1999 et le 01/01/2001.

julian2date($anneeRef, $julien)

Calcul la date et l’heure à partir du jour julien décimal et d’une année de référence. l’origine est le 1 janvier de cette année et prend la valeur 0 par convention.
my ($an,$mois,$jour,$heure,$min,$sec) = julian2date(1999, 740.5);

dateInit($langue, $timezone)

Initialise la langue et la zone horaire utilisée par &dateFormat. La langue peut être "FR" ou "EN".
&dateInit("FR", "GMT");

Les codes de zones sont les mêmes que ceux du module Date::Manip :

IDLW    -1200    International Date Line West
NT      -1100    Nome
HST     -1000    Hawaii Standard
CAT     -1000    Central Alaska
AHST    -1000    Alaska-Hawaii Standard
AKST    -0900    Alaska Standard
...
WAT     -0100    West Africa
FNST    -0100    Brazil, Fernando de Noronha Daylight
GMT     +0000    Greenwich Mean
UT      +0000    Universal (Coordinated)
UTC     +0000    Universal (Coordinated)
WET     +0000    Western European
CET     +0100    Central European
FWT     +0100    French Winter
MET     +0100    Middle European
MEZ     +0100    Middle European
MEWT    +0100    Middle European Winter
SWT     +0100    Swedish Winter
BST     +0100    British Summer              bst=Brazil standard  -0300
GB      +0100    GMT with daylight savings
WEST    +0000    Western European Daylight
CEST    +0200    Central European Summer
EET     +0200    Eastern Europe, USSR Zone 1
FST     +0200    French Summer
...
EADT    +1100    Eastern Australian Daylight
IDLE    +1200    International Date Line East
NZST    +1200    New Zealand Standard
NZT     +1200    New Zealand
NZDT    +1300    New Zealand Daylight

dateFormat($date, $format)

Changement du format d’affichage d’une date. La date à formater peut-être sous plusieurs formes selon la langue utilisée :

Anglais Français
"NOW" "MAINTENANT"
MM/DD/YY HH:II:SS DD/MM/YY HH:II:SS
Mois DD YY HH:II:SS DD Mois YY HH:II:SS

MM, DD, HH, II, SS correspondent aux mois, jours, heure, minute, seconde et peuvent être des entiers sur 1 ou 2 chiffres. YY correspond à l’année sur 2 ou 4 chiffres. Mois est le mois en toutes lettres.

Le format est une chaine de caractères dans laquelle les options suivantes seront remplacées par la valeur correspondante :

%Y année 0001 à 9999
%y année 00 à 99
%m mois 01 à 12
%B nom du mois janvier à decembre, ou January à December
%b,%h nom du mois jan à dec, ou Jan à Dec
%d jour 01 à 31
%j jour de l’année 001 à 366
%H heure 00 à 23
%M minute 00 à 59
%S seconde 00 à 59
%x %d/%m/%Y ou %m/%d/%Y 25/05/2007, ou 05/25/2007
%R %H :%M 23:59
%T,%X %H :%M :%S 23:59:59
%q %Y%m%d 20070525
%q %Y%m%d%H%M%S 20070525235959

Si $format n’est pas spécifié, le format par défaut est %q. Si $date n’est pas spécifié ou vaut null, la date actuelle est choisie.

Exemple :

&dateInit("FR","GMT");

# 20060728132230
my $date = &dateFormat("28/7/06 13:22:30");

# 08/07/06
my $date = &dateFormat("8/7/2006 13:22:30", "%x");

# 28 juillet 2006, 13:22:00
my $date = &dateFormat("28/07/06 13:22", "%d %B %Y, %H:%M:%S");

&positionDeci($deg, $min, $hemi)

Conversion de degrés sexagésimaux en degrés décimaux. $hemi peut prendre comme valeurs "N", "S", "E" ou "W".
my $pos = positionDeci(121, 8.10, "N");

&positionSexa($deg, $xy)

Conversion de degrés décimaux en degrés sexagésimaux. $deg correspond aux degrés décimaux et $xy peut valoir : "lat", "long" ou "latitude", "longitude".

# ($deg, $min, $hemi) == (121, 8.10, "N")
my ($deg, $min, $hemi) = &positionSexa(121.135, "lat");

roscopFormat($code, $valeur, $sep)
Conversion d’une valeur en une chaîne formatée selon un code ROSCOP. Les paramètres sont le code ROSCOP, la valeur correspondante à formater et éventuellement un séparateur.
my $str = roscopFormat("TEMP", 26.24, ";");

Oceano::Seawater


Le module Seawater est basé sur les routines SEAWATER de MATLAB créées par Phillip P. Morgan CSIRO. Il contient des fonctions de calcul de paramètres physiques océanographiques comme la densité, sigma-t, la vitesse du son, la profondeur...

Les calculs sont fait en IPTS68. Avec IPTS90 utiliser $T68 = $T90 * 1.00024.

Exemples :

$sw_svel    = &sw_svel($S,$T,$P);
$dpth       = &sw_dpth($P,$L);
$adtg       = &sw_adtg($S,$T,$P);
$ptmp       = &sw_ptmp($S,$T,$P,$PR);
$dens       = &sw_dens($S,$T,$P);
$sigmat     = &sw_sigmat($S,$T,$P);
$sigmateta  = &sw_sigmateta($S,$T,$P);
$svan       = &sw_svan($S,$T,$P);
$sal        = &sw_sal($C,$T,$P);

sw_svel($S, $T, $P)

Vitesse du son dans l’eau de mer (UNESCO 1983 polynomial).

ENTRÉE :
- S = salinité [psu (PSS-78)]
- T = température [degree C (IPTS-68)]
- P = pression [db]

SORTIE :
- svel = vitesse du son [m/s]

sw_dpth($P, $L)

Calcul de la profondeur en mètres à partir de la pression en dbars.

ENTRÉE :
- P = Pression [db]
- L = Latitude en degrés décimaux Nord [-90..+90]

SORTIE :
- dpth = profondeur [meters]

RÉFÉRENCES :
Unesco 1983. Algorithms for computation of fundamental properties of seawater, 1983. _Unesco Tech. Pap. in Mar. Sci._, No. 44, 53 pp.

sw_adtg($S, $T, $P)

Calcul du gradient thermique adiabatique (UNESCO 1983 routines).

ENTRÉE :
- S = salinité [psu (PSS-78) ]
- T = température [degree C (IPTS-68)]
- P = pression [db]

SORTIE :
- ADTG = gradient thermique adiabatique [degree_C/db]

RÉFÉRENCES :
Fofonoff, P. and Millard, R.C. Jr Unesco 1983. Algorithms for computation of fundamental properties of seawater. Unesco Tech. Pap. in Mar. Sci., No. 44, 53 pp. Eqn.(31) p.39
Bryden, H. 1973. "New Polynomials for thermal expansion, adiabatic temperature gradient and potential temperature of sea water." DEEP-SEA RES., 1973, Vol20,401-408.

sw_ptmp($S, $T, $P, $PR)
Calcul de la température potentielle (UNESCO 1983 report).
température IPTS68 = teta(s, t, p, pr)
température IPTS90 = teta(s, t, p, pr) / 1.00024

ENTRÉE :
- S = salinité [psu (PSS-78) ]
- T = température [degree C (IPTS-68)]
- P = pression [db]
- PR = pression de référence [db]

SORTIE :
- ptmp = température potentielle relative à PR [degree C (IPTS-68)]

RÉFÉRENCES :
Fofonoff, P. and Millard, R.C. Jr Unesco 1983. Algorithms for computation of fundamental properties of seawater, 1983. _Unesco Tech.
Pap. in Mar. Sci._, No. 44, 53 pp. Eqn.(31) p.39
Bryden, H. 1973. "New Polynomials for thermal expansion, adiabatic temperature gradient and potential temperature of sea water." DEEP-SEA RES., 1973, Vol20,401-408.

sw_dens($S, $T, $P)

Densité de l’eau de mer (UNESCO 1983 (EOS 80) polynomial).

ENTRÉE :
- S = salinité [psu (PSS-78)]
- T = température [degree C (IPTS-68)]
- P = pression [db]

SORTIE :
- dens = densité [kg/m^3]

RÉFÉRENCES :
Fofonoff, P. and Millard, R.C. Jr Unesco 1983. Algorithms for computation of fundamental properties of seawater, 1983. _Unesco Tech. Pap. in Mar. Sci._, No. 44, 53 pp.
Millero, F.J., Chen, C.T., Bradshaw, A., and Schleicher, K. " A new high pressure equation of state for seawater" Deap-Sea Research., 1980, Vol27A, pp255-264.

sw_sigmat($S, $T, $P)

Sigma t = Density(s, t, 0) - 1000.0 of Sea Water cf &sw_dens.

sw_sigmateta($S, $T, $P)

Sigma teta = Density(s, teta(s, t, p, 0), 0) - 1000.0 of SeaWater.

sw_svan($S, $T, $P)

Specific Volume Anomaly calculated as :
svan = 1/sw_dens(s, t, p) - 1/sw_dens(35, 0, p)

ENTRÉE :
- S = salinité [psu (PSS-78) ]
- T = température [degree C (IPTS-68)]
- P = Pression [db]

SORTIE :
- svan = specific volume anomaly [m^3 kg^-1]

RÉFÉRENCES :
Fofonoff, N.P. and Millard, R.C. Jr
Unesco 1983. Algorithms for computation of fundamental properties of seawater, 1983. _Unesco Tech. Pap. in Mar. Sci._, No. 44, 53 pp. Eqn (9) p.15.
S. Pond & G.Pickard 2nd Edition 1986
Introductory Dynamical Oceanogrpahy Pergamon Press Sydney. ISBN 0-08-028728-X

sw_sal($C, $T, $P)

Calcul de la salinité à partir de la conductivité, la température et la pression.

ENTRÉE :
- C = conductivité [Siemens/meters]
- T = température [degree C (IPTS-68)]
- P = Pression [db]

SORTIE :
- sal = salinité [psu (PSS-78)]

Oceano::Seabird


Ce module contient des fonctions de calcul de température, pression, conductivité à partir des valeurs de fréquences délivrées par les capteurs Seabird. Les calculs utilisent les coefficients de calibration Sea-Bird.

Les calculs sont fait en IPTS90. Pour utiliser la température IPTS68, la convertir avec la formule suivante :
$T90 = $T68 / 1.00024;

Exemples :

use Oceano::Seabird;

my $sb = Seabird->new($con_file);

$temp = $sb->temp($F);
$pres = $sb->pres($F, $T);
$cond = $sb->cond($F, $T, $P);
$ox   = $sb->ox($V, $T, $P, $S);

new($con_file, $capteur)

Constructeur à partir d’un fichier de configuration. Les paramètres sont le fichier et éventuellement le numéro du capteur (primaire ou secondaire).
my $sb = Seabird->new($con_file);

new_h($coef1, $coef2...)

Constructeur à partir de tables de hachage des coefficients. Les paramètres sont des références vers les tables de hachage.

my %coefT = (
'g'      =>  4.13773278e-003,
'h'      =>  6.28255735e-004,
'i'      =>  2.06477531e-005,
'j'      =>  2.06792678e-006,
'f0'     =>  1000.000,
);

my $sb = Seabird->new_h(\%coefT);

temp($F)

Calcul de la température.

ENTRÉE :
- F = fréquence [Hz]

SORTIE :
- T = température [degree C (IPTS-90)]

EXEMPLE :
$temp = $sb->temp(3769.251);

pres($F, $T)

Calcul de la pression.

ENTRÉE :
- F = fréquence [Hz]
- T = température [degree C (IPTS-90)]

SORTIE :
- P = pression [db]

EXEMPLE :
$pres = $sb->pres(33409.468, 26.6428);

cond($F, $T, $P)

Calcul de la conductivité.

ENTRÉE :
- F = fréquence [Hz]
- T = température [degree C (IPTS-90)]
- P = pression [db]

SORTIE :
- C = conductivité [Siemens/meters]

EXEMPLE :
$cond = $sb->cond(10613.864, 26.6428, 30.000);

ox($V, $T, $P, $S)

Calcul de l’oxygène.

ENTRÉE :
- V = tension [volts]
- T = température [degree C (IPTS-90)]
- P = pression [db]
- S = salinité [psu (PSS-78)]

SORTIE :
- O = oxygène [ml/l]

EXEMPLE :
$ox = $sb->ox(3.0172, 26.6428, 30.000, 35.1166);

roscop($param, $princ)

Conversion des paramètres Sea-Bird en codes ROSCOP. $param est le paramètre Sea-Bird et $princ un booléen qui indique si l’on doit l’utiliser comme capteur principal :
si $param = "t090C" et $princ = 0, le code ROSCOP est TE01.
si $param = "t090C" et $princ = 1, le code ROSCOP est TEMP.

my $code_roscop = &roscop("t090C");
my $code_roscop = &roscop("sal00", 1);

Références


[1codes GF3 utilisés au SISMER


Oceano-0.03 -

Archive de la distribution Oceano