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 : 29/11/2021
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://forge.ird.fr/us191/oceano/-/tree/master/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
[1] codes GF3 utilisés au SISMER
Archive de la distribution Oceano