rom_nc_fcns

Section: Convention\ COARDS,CF-1.0,ROM-1.1 (3)
Updated: 11 fevrier 2009
Index  

NOM

rom_nc_fcns - module fortran 90 regroupant un ensemble de fonctions permettant de produire des sorties du modele ROM au format de fichiers NetCDF de Unidata.  

SYNOPSIS

use rom_nc_fcns
f90 -L/usr/local/lib -M/usr/local/lib -lrom_nc -lnetcdf

 

DEFINITION DES TERMES

variable ROM
Dans cette documentation, le terme variable ROM s'applique aux variables telles qu'elles sont connues du modele. A chaque variable connue du modele, le modele associe une etiquette de quatre lettres (TAG) permettant d'en controler la sortie. Une variable ROM n'est connue que du modele et existe donc toujours sur le domaine complet du modele. Par exemple, le champ de salinite salt(ilo,m,n) est une variable du modele a laquelle est associee l'etiquette 'SALT'. Pour effectuer une sortie de la salinite, le modele fait un appel a la fonction d'ecriture write_rom_var() de la facon suivante:
write_rom_var('SALT',kstep,salt,ilo,m,n)

pseudo-variable
Le terme pseudo-variable sert a designer une variable ROM pour laquelle on desire faire une sortie sur un certain domaine et a une certaine frequence.
Par exemple, la pseudo-variable 'SAL1' pourrait servir a demander une sortie de la variable ROM 'SALT' (i.e., le champ salt) sur un certain sous-domaine de la grille a chaque pas de temps alors que la pseudo-variable 'SAL2' pourrait indiquer de faire des sorties de 'SALT' sur tout le domaine a chaque heure. Pour effectuer une sortie de la salinite, le modele fait un appel a la fonction d'ecriture write_rom_var() de la facon suivante:
write_rom_var('SALT',kstep,salt,ilo,m,n)
ce qui provoquera la sortie des variables SAL1 et SAL2 sur leurs domaines respectifs.
La correspondance entre une pseudo-variable et une variable ROM est faite dans la section du parrun servant a controler les sorties (namelist nc_out_dir ).

parrun
Le parrun est un fichier texte qui contient toutes les directives necessaires pour effectuer les sorties des pseudo-variables. Le parrun se divise en deux grandes sections: une premiere section composee d'un seul namelist Fortran servant a decrire les parametres d'execution du modele et une deuxieme section regroupant un ensemble de namelist Fortran servant a decrire les pseudo-variables a sortir. Dans la seconde section, on retrouve un namelist par pseudo-variable a sortir. Le format du fichier parrun est decrit dans la manuel parrun(5).

 

DESCRIPTION

La bibliotheque rom_nc_fcns est composee d'un ensemble de fonctions qui permettent de lire le fichier de directives parrun du modele Regional Oceanic Model (ROM) afin d'en extraire toute l'information necessaire a la prodruction de solutions qui seront conservees en format NetCDF. En plus des fonctions de lecture du parrun et de creation des fichiers NetCdf, le module contient les fonctions necessaires a la creation des meta-donnees et a l'ecriture des pseudo-variables desirees. Chaque fichier NetCdf produit ne contient qu'une seule pseudo-variable. Tous les fichier NetCdf sont auto-documentes et contiennent toutes les donnees et meta-donnees necessaires au post-traitement et a l'analyse de la pseudo-variable qu'ils contiennent. La description complete des fichiers de sortie est disponible dans le manuel a l'adresse http://demeter.uqar.qc.ca/modeles/specifications_netcdf.html Les fonctions decrites ici sont les suivantes: FONCTIONS DE HAUT NIVEAU Ces fonctions sont directement appelable par le modele ROM et agissent sur toutes les pseudo-variables simultanement ou sur l'ensemble des pseudo-variables associees a une variable ROM. Pour ces fonctions, nomvar fait reference a une variable ROM.

rom_nc_debug(drapeau)
read_parrun_vars(fichier)
create_rom_var_nc_files(nomvar,parrun)
create_all_var_nc_files(parrun)
write_rom_var(nomvar,kstep,champ,dim1,dim2,dim3)
set_rom_var_lat_lon(nomvar,lat,lon,m,n)
set_all_var_lat_lon(lat,lon,m,n)
set_rom_var_ldep(nomvar,ldep,m,n)
set_all_var_ldep(ldep,m,n)
set_rom_var_mask(nomvar,nommask,descr,mask,m,n)
set_all_var_mask(nommask,descr,mask,m,n)
set_rom_var_nlayer(nomvar,nlayer,m,n)
set_all_var_nlayer(nlayer,m,n)
set_rom_var_totaldepth(nomvar,totaldepth,m,n)
set_all_var_totaldepth(totaldepth,m,n)
set_rom_var_wet_axis(nomvar,mask,nlayer,m,n)
set_all_var_wet_axis(mask,nlayer,m,n)
set_rom_var_xp_yp(nomvar,centered_x,centered_y)
set_all_var_xp_yp(centered_x,centered_y)
set_rom_var_zrom_axis(nomvar,dz,n)
set_all_var_zrom_axis(dz,n)
rom_var_step_wanted(nomvar,kstep)

FONCTIONS SECONDAIRES

Ces fonctions de deuxieme niveau sont appellees par les fonctions de haut niveau. Toutes ces fonctions agissent uniquement sur les pseudo-variables. Elle sont donc utilisable par le modele a la condition que le nom de la pseudo-variable soit identique au nom de la variable ROM correspondante. Pour ces fonctions, nomvar fait reference a une pseudo-variable.

NOTE: Seules les fonctions de second niveau les plus succeptibles d'etre utilisees sont decrites dans ce manuel.

set_var_lat_lon(nomvar,lat,lon,m,n)
set_var_ldep(nomvar,ldep,m,n)
set_var_mask(nomvar,nommask,descr,mask,m,n)
set_var_nlayer(nomvar,nlayer,m,n)
set_var_totaldepth(nomvar,totaldepth,m,n)
set_var_wet_axis(nomvar,mask,nlayer,m,n)
set_var_xp_yp(nomvar,centered_x,centered_y)
set_var_zrom_axis(nomvar,dz,n)
set_rom_var_dim_rom(nomvar,nomdim,value)
create_nc_file(nomvar,parrun)
write_var(nomvar,kstep,champ,dim1,dim2,dim3)
write_var_2d(nomvar,kstep,champ,m,n)
write_var_3d(nomvar,kstep,champ,ilo,m,n)
create_int_var_1d(nomvar,nomvar_nc,dim)
create_output_var(ncid,nomvar)
create_scalar_var(ncid,nomscalar,value)
create_var_time_axis(nomvar)
open_write_var_nc_file(nomvar)
add_parrun_metadata(ncid,parrun)
add_var_parrun_scalar_data(nomvar,parrun)
Chaque fonction du module rom_nc_fcns (sauf rom_var_step_wanted et rom_nc_debug) est de type entier (integer) et retourne la valeur 0 en cas de succes et -1 lorsqu'une erreur s'est produite. rom_var_step_wanted et rom_nc_debug sont de type logique. Les fonctions qui agissent sur des pseudo-variables sont disponibles en trois versions: une premiere version agit sur une pseudo-variable precise. Ces fonctions ont pour prefixe 'set_var_'. Une seconde version agit sur toutes les pseudo-variables associees a une variable ROM. Ces fonctions ont alors pour prefixe 'set_rom_var_'. Finalement une troisieme version des fonctions permet d'agir sur toutes les pseudo-variables. Ces fonctions ont pour prefixe 'set_all_var'. Par exemple:
set_var_lat_lon(pseudo_variable,lat,lon,m,n)
set_rom_var_lat_lon(variable_rom,lat,lon,m,n)
set_all_var_lat_lon(lat,lon,m,n)
La vaste majorite des fonctions de creation de fichiers ou de variables ne fait aucun travail si le fichier ou la variable existe deja. Seules les fonctions servant a ecrire le pas de temps d'une variable a sortir ecraseront un pas de temps deja existant dans le fichier.

 

DESCRIPTION DES FONCTIONS

logical rom_nc_debug(valeur)
Initialiser la variable de debogage de la bibliotheque rom_nc_lib. Cette variable controle l'affichage des messages de creation des fichiers et variables. Par defaut la variable est egale a .false. et aucune information n'est affichee a l'ecran.

logical :: valeur - (entree) : valeur a attribuer a la variable de debogage (.true. | .false.)

Valeur de retour:

valeur attribuee a la variable de debogage (.true. | .false.)

integer read_parrun_vars(fichier)
Lire le fichier parrun et en extraire toutes les information necessaire a la gestion des sorties des pseudo-variables.

character*(*) :: fichier - (entree) : nom du fichier parrun a lire

Valeur de retour:


 0 : succes
-1 : erreur

Note: La fonction read_parrun_vars cree les structures de gestion des pseudo-variables. Elle doit donc etre appelle avant toutes les autres fonctions de la bibliotheque.

integer create_nc_file(nomvar,parrun)
Creer le fichier Netcdf d'une pseudo-variable. Cette fonction cree le ficier et y insere les dimensions IROM,KROM et TROM ainsi que toutes les meta-donnees disponibles a partir du parrun.

character*(*) :: nomvar - (entree) : nom de la pseudo-variable pour laquelle on veut creer le fichier

character*(*) :: parrun - (entree) : nom du fichier parrun a lire

Valeur de retour:


 0 : succes
-1 : erreur

Notes: La fonction create_nc_file (ou ses variantes create_rom_var_nc_files ou create_all_var_nc_files) cree le fichier Netcdf d'une pseudo-variable. Elle doit donc etre appelle immediatement apres read_parrun_vars().
 Si le fichier existe deja, la fonction ne fait rien.

integer create_rom_var_nc_files(nomvar,parrun)
Creer le fichier Netcdf de chacune des pseudo-variables associees a la variable ROM nomvar pour lesquelles on demande une sortie dans le fichier parrun.

character*(*) :: nomvar - (entree) : nom de la variable ROM pour laquelle on veut creer les fichiers des pseudo-variables

character*(*) :: parrun - (entree) : nom du fichier parrun a lire

Valeur de retour:


 0 : succes
-1 : erreur

Note: La fonction create_rom_var_nc_files (ou ses variantes create_nc_file ou create_all_var_nc_files cree le fichier Netcdf d'une pseudo-variable. Elle doit donc etre appelle immediatement apres read_parrun_vars(). Si le fichier existe deja, la fonction ne fait rien.

integer create_all_var_nc_files(parrun)
Creer le fichier Netcdf de toutes les pseudo-variables pour lesquelles on demande une sortie dans le fichier parrun.

character*(*) :: parrun - (entree) : nom du fichier parrun a lire

Valeur de retour:


 0 : succes
-1 : erreur

Note: La fonction create_all_var_nc_files (ou ses variantes create_nc_file ou create_rom_var_nc_files ) cree le fichier Netcdf d'une pseudo-variable. Elle doit donc etre appelle immediatement apres read_parrun_vars() Si le fichier existe deja, la fonction ne fait rien.

integer set_var_wet_axis(nomvar,mask,nlayer,m,n)
Initialiser les variables INDEXVALID2D et INDEXVALID3D associes a une pseudo-variable. set_var_wet_axis ecrit les enregistrements NVALID2D,INDEXVALID2D et NVALID3D,INDEXVALID3D dans le fichier NetCdf de la pseudo-variable nomvar

character*(*) :: nomvar - (entree) : nom de la pseudo-variable pour laquelle on produit des indexwet2d et indexwet3d

integer :: mask - (entree) : champ contenant le masque terre-mer du modele

integer*2 :: nlayer - (entree) : champs contenant le nombre couches par point de grille

integer :: m,n - (entree) : dimensions de lat et nlayer

Valeur de retour:


 0 : succes
-1 : erreur

integer set_rom_var_wet_axis(nomvar,mask,nlayer,m,n)
Initialiser les variables INDEXVALID2D et INDEXVALID3D de chacune des pseudo-variables associees a la variable ROM nomvar. set_rom_var_wet_axis ecrit les enregistrements NVALID2D,INDEXVALID2D et NVALID3D,INDEXVALID3D dans le fichier NetCdf de chacune des pseudo-variables associee a la variable ROM nomvar

character*(*) :: nomvar - (entree) : nom de la variable ROM pour laquelle on produit des indexwet2d et indexwet3d

integer :: mask - (entree) : champ contenant le masque terre-mer du modele

integer*2 :: nlayer - (entree) : champs contenant le nombre couches par point de grille

integer :: m,n - (entree) : dimensions de mask et nlayer

Valeur de retour:


 0 : succes
-1 : erreur

integer set_all_var_wet_axis(mask,nlayer,m,n)
Initialiser les variables INDEXVALID2D et INDEXVALID3D de chacune des pseudo-variables definies dans le fichier parrun set_all_var_wet_axis ecrit les enregistrements NVALID2D,INDEXVALID2D et NVALID3D,INDEXVALID3D dans le fichier NetCdf de toutes les pseudo-variables.

integer :: mask - (entree) : champ contenant le masque terre-mer du modele

integer*2 :: nlayer - (entree) : champs contenant le nombre couches par point de grille

integer :: m,n - (entree) : dimensions de mask et nlayer

Valeur de retour:


 0 : succes
-1 : erreur

integer set_var_lat_lon(nomvar,lat,lon,m,n)
Initialiser les variables LATITUDES et LONGITUDES associes a une pseudo-variable. set_var_lat_lon ecrit les enregistrements LATITUDES et LONGITUDES dans le fichier NetCdf de la pseudo-variable nomvar

character*(*) :: nomvar - (entree) : nom de la pseudo-variable pour laquelle on produit des latitudes et longitudes

real :: lat - (entree) : champs des latitudes

real :: lon - (entree) : champs des longitudes

integer :: m,n - (entree) : dimensions de lat et lon

Valeur de retour:


 0 : succes
-1 : erreur

integer set_rom_var_lat_lon(nomvar,lat,lon,m,n)
Initialiser les variables LATITUDES et LONGITUDES de chacune des pseudo-variables associees a la variable ROM nomvar. set_rom_var_lat_lon ecrit les enregistrements LATITUDES et LONGITUDES dans le fichier NetCdf de chacune des pseudo-variables associee a la variable ROM nomvar

character*(*) :: nomvar - (entree) : nom de la variable ROM pour laquelle on produit des latitudes et longitudes

real :: lat - (entree) : champs des latitudes

real :: lon - (entree) : champs des longitudes

integer :: m,n - (entree) : dimensions de lat et lon

Valeur de retour:


 0 : succes
-1 : erreur

integer set_all_var_lat_lon(lat,lon,m,n)
Initialiser les variables LATITUDES et LONGITUDES de chacune des pseudo-variables definies dans le fichier parrun set_all_var_lat_lon ecrit les enregistrements LATITUDES et LONGITUDES dans le fichier NetCdf de toutes les pseudo-variables.

real :: lat - (entree) : champs des latitudes

real :: lon - (entree) : champs des longitudes

integer :: m,n - (entree) : dimensions de lat et lon

Valeur de retour:


 0 : succes
-1 : erreur

integer set_var_ldep(nomvar,ldep,m,n)
Initialiser la variable LDEP associes a une pseudo-variable. set_var_ldep ecrit l'enregistrement LDEP dans le fichier NetCdf de la pseudo-variable nomvar

character*(*) :: nomvar - (entree) : nom de la pseudo-variable pour laquelle on produit des ldep

integer*2 :: ldep - (entree) : champs des ldep

integer :: m,n - (entree) : dimensions de ldep

Valeur de retour:


 0 : succes
-1 : erreur

integer set_rom_var_ldep(nomvar,ldep,m,n)
Initialiser la variable LDEP de chacune des pseudo-variables associees a la variable ROM nomvar. set_rom_var_ldep ecrit l'enregistrement LDEP dans le fichier NetCdf de chacune des pseudo-variables associee a la variable ROM nomvar

character*(*) :: nomvar - (entree) : nom de la variable ROM pour laquelle on produit des ldep

integer*2 :: ldep - (entree) : champs des ldep

integer :: m,n - (entree) : dimensions de ldep

Valeur de retour:


 0 : succes
-1 : erreur

integer set_all_var_ldep(ldep,m,n)
Initialiser la variable LDEP de chacune des pseudo-variables definies dans le fichier parrun set_all_var_ldep ecrit l'enregistrement LDEP dans le fichier NetCdf de toutes les pseudo-variables.

integer*2 :: ldep - (entree) : champs des ldep

integer :: m,n - (entree) : dimensions de ldep

Valeur de retour:


 0 : succes
-1 : erreur

integer set_var_mask(nomvar,nommask,description,mask,m,n)
Initialiser une variable de type masque (e.g., JC, JCATMOS) associes a une pseudo-variable. set_var_mask ecrit l'enregistrement dans le fichier NetCdf de la pseudo-variable nomvar

character*(*) :: nomvar - (entree) : nom de la pseudo-variable pour laquelle on produit un masque

character*(*) :: nommask - (entree) : nom du masque (JC, JCATMOS)

character*(*) :: description - (entree) : breve description du masque

integer*2 :: mask - (entree) : champ du masque

integer :: m,n - (entree) : dimensions de mask

Valeur de retour:


 0 : succes
-1 : erreur

integer set_rom_var_mask(nomvar,nommask,description,mask,m,n)
Initialiser une variable de type masque pour chacune des pseudo-variables associees a la variable ROM nomvar. set_rom_var_mask ecrit l'enregistrement dans le fichier NetCdf de chacune des pseudo-variables associee a la variable ROM nomvar

character*(*) :: nomvar - (entree) : nom de la variable ROM pour laquelle on produit un masque

character*(*) :: nommask - (entree) : nom du masque (JC, JCATMOS)

character*(*) :: description - (entree) : breve description du masque

integer*2 :: mask - (entree) : champ du masque

integer :: m,n - (entree) : dimensions de mask

Valeur de retour:


 0 : succes
-1 : erreur

integer set_all_var_mask(nommask,description,mask,m,n)
Initialiser une variable de type masque pour chacune des pseudo-variables definies dans le fichier parrun set_all_var_mask ecrit l'enregistrement dans le fichier NetCdf de toutes les pseudo-variables.

character*(*) :: nommask - (entree) : nom du masque (JC, JCATMOS)

character*(*) :: description - (entree) : breve description du masque

integer*2 :: mask - (entree) : champ du masque

integer :: m,n - (entree) : dimensions de mask

Valeur de retour:


 0 : succes
-1 : erreur

integer set_var_nlayer(nomvar,nlayer,m,n)
Initialiser la variable NLAYER associes a une pseudo-variable. set_var_nlayer ecrit l'enregistrement NLAYER dans le fichier NetCdf de la pseudo-variable nomvar

character*(*) :: nomvar - (entree) : nom de la pseudo-variable pour laquelle on produit des nlayer

integer*2 :: nlayer - (entree) : champs des nlayer

integer :: m,n - (entree) : dimensions de nlayer

Valeur de retour:


 0 : succes
-1 : erreur

integer set_rom_var_nlayer(nomvar,nlayer,m,n)
Initialiser la variable NLAYER de chacune des pseudo-variables associees a la variable ROM nomvar. set_rom_var_nlayer ecrit l'enregistrement NLAYER dans le fichier NetCdf de chacune des pseudo-variables associee a la variable ROM nomvar

character*(*) :: nomvar - (entree) : nom de la variable ROM pour laquelle on produit des nlayer

integer*2 :: nlayer - (entree) : champs des nlayer

integer :: m,n - (entree) : dimensions de nlayer

Valeur de retour:


 0 : succes
-1 : erreur

integer set_all_var_nlayer(nlayer,m,n)
Initialiser la variable NLAYER de chacune des pseudo-variables definies dans le fichier parrun set_all_var_nlayer ecrit l'enregistrement NLAYER dans le fichier NetCdf de toutes les pseudo-variables.

integer*2 :: nlayer - (entree) : champs des nlayer

integer :: m,n - (entree) : dimensions de nlayer

Valeur de retour:


 0 : succes
-1 : erreur

integer set_var_totaldepth(nomvar,totaldepth,m,n)
Initialiser la variable TOTALDEPTH associee a une pseudo-variable. set_var_totaldepth ecrit l'enregistrement TOTALDEPTH dans le fichier NetCdf de la pseudo-variable nomvar

character*(*) :: nomvar - (entree) : nom de la pseudo-variable pour laquelle on produit des totaldepth

real :: totaldepth - (entree) : champs des totaldepth

integer :: m,n - (entree) : dimensions de totaldepth

Valeur de retour:


 0 : succes
-1 : erreur

integer set_rom_var_totaldepth(nomvar,totaldepth,m,n)
Initialiser la variable TOTALDEPTH de chacune des pseudo-variables associees a la variable ROM nomvar. set_rom_var_totaldepth ecrit l'enregistrement TOTALDEPTH dans le fichier NetCdf de chacune des pseudo-variables associee a la variable ROM nomvar

character*(*) :: nomvar - (entree) : nom de la variable ROM pour laquelle on produit des totaldepth

real :: totaldepth - (entree) : champs des totaldepth

integer :: m,n - (entree) : dimensions de totaldepth

Valeur de retour:


 0 : succes
-1 : erreur

integer set_all_var_totaldepth(totaldepth,m,n)
Initialiser la variable TOTALDEPTH de chacune des pseudo-variables definies dans le fichier parrun set_all_var_totaldepth ecrit l'enregistrement TOTALDEPTH dans le fichier NetCdf de toutes les pseudo-variables.

real :: totaldepth - (entree) : champs des totaldepth

integer :: m,n - (entree) : dimensions de totaldepth

Valeur de retour:


 0 : succes
-1 : erreur

integer set_var_zrom_axis(nomvar,dz,nz)
Initialiser les variables de coordonnees ZROM et ZROMEDGES ainsi que la variable des indices de couches INDEXJ associes a une pseudo-variable 3D. set_var_zrom_axis ecrit les enregistrements ZROM , ZROMEDGES et INDEXJ dans le fichier NetCdf de la pseudo-variable nomvar.
Si la pseudo-variable est 2D, aucun calcul n'est fait et la fonction retourne immediatement avec un code egal a 0 (pas d'erreur). Une variable est consideree comme etant 2D lorsque l'attribut nlayers est absent du fichier de directives parrun.

character*(*) :: nomvar - (entree) : nom de la pseudo-variable pour laquelle on produit des ldep

real :: dz - (entree) : champs des profondeurs du centre des couches

integer :: nz - (entree) : dimension de dz (nombre de couches)

Valeur de retour:


 0 : succes
-1 : erreur

integer set_rom_var_zrom_axis(nomvar,dz,nz)
Initialiser les variables de coordonnees ZROM et ZROMEDGES ainsi que la variable des indices de couches INDEXJ de toutes les pseudo-variables associees a la variable ROM 3D nomvar. set_rom_var_zrom_axis ecrit les enregistrements ZROM , ZROMEDGES et INDEXJ dans le fichier NetCdf de chaque pseudo-variable associee a nomvar.
Si la variable ROM est 2D, aucun calcul n'est fait et la fonction retourne immediatement avec un code egal a 0 (pas d'erreur). Une variable est consideree comme etant 2D lorsque l'attribut nlayers est absent du fichier de directives parrun.

character*(*) :: nomvar - (entree) : nom de la variable ROM pour laquelle on produit des ldep

real :: dz - (entree) : champs des profondeurs du centre des couches

integer :: nz - (entree) : dimensions de dz (nombre de couches)

Valeur de retour:


 0 : succes
-1 : erreur

integer set_all_var_zrom_axis(dz,nz)
Initialiser les variables de coordonnees ZROM et ZROMEDGES ainsi que la variable des indices de couches INDEXJ de toutes les pseudo-variables demandees dans le fichier parrun. set_all_var_zrom_axis ecrit les enregistrements ZROM , ZROMEDGES et INDEXJ dans le fichier NetCdf de chaque pseudo-variable si celle-ci est 3D.
Si une pseudo-variable est 2D, aucun calcul n'est fait et il n'y a pas d'erreur. Une pseudo-variable est consideree comme etant 2D lorsque l'attribut nlayers est absent du fichier de directives parrun.

real :: dz - (entree) : champs des profondeurs du centre des couches

integer :: nz - (entree) : dimensions de dz (nombre de couches)

Valeur de retour:


 0 : succes
-1 : erreur

integer set_var_xp_yp(nomvar,centered_x,centered_y)
Initialiser les variables de coordonnees XP et YP associees a une pseudo-variable. set_var_xp_yp ecrit les enregistrements XP et YP dans le fichier NetCdf de la pseudo-variable nomvar.

character*(*) :: nomvar - (entree) : nom de la pseudo-variable pour laquelle on produit des xp yp

logical :: centered_x - (entree) : indique si la variable est au centre ou a la frontiere de la cellule selon la direction X (KROM)

logical :: centered_y - (entree) : indique si la variable est au centre ou a la frontiere de la cellule selon la direction Y (IROM)

Valeur de retour:


 0 : succes
-1 : erreur

integer set_rom_var_xp_yp(nomvar,centered_x,centered_y)
Initialiser les variables de coordonnees XP et YP de toutes les pseudo-variables associees a la variable ROM nomvar. set_rom_var_xp_yp ecrit les enregistrements XP et YP dans le fichier NetCdf de chaque pseudo-variable associee a nomvar.

character*(*) :: nomvar - (entree) : nom de la variable ROM pour laquelle on produit des xp yp

logical :: centered_x - (entree) : indique si la variable est au centre ou a la frontiere de la cellule selon la direction X (KROM)

logical :: centered_y - (entree) : indique si la variable est au centre ou a la frontiere de la cellule selon la direction Y (IROM)

Valeur de retour:


 0 : succes
-1 : erreur

integer set_all_var_xp_yp(centered_x,centered_y)
Initialiser les variables de coordonnees XP et YP de toutes les pseudo-variables demandees dans le fichier parrun. set_all_var_xp_yp ecrit les enregistrements XP et YP dans le fichier NetCdf de chaque pseudo-variable.

logical :: centered_x - (entree) : indique si la variable est au centre ou a la frontiere de la cellule selon la direction X (KROM)

logical :: centered_y - (entree) : indique si la variable est au centre ou a la frontiere de la cellule selon la direction Y (IROM)

Valeur de retour:


 0 : succes
-1 : erreur

integer write_rom_var(nomvar,kstep,champ,dim1,dim2[,dim3])
Ecrire la variable 2D ou 3D champ dans le fichier de chacune des pseudo-variables associees a la variable ROM nomvar pour le pas de temps kstep.

Pour chaque pseudo-variable associee a la variable ROM nomvarwrite_rom_var() verifie si une sortie doit etre faite pour le pas de temps kstep et le cas echeant, la fonction extrait le sous-domaine necessaire, le compresse sur l'axe approprie (NVALID2D ou NVALID3D) et ecrit le resultat dans le fichier NetCDF de la pseudo-variable. Si le pas de temps existe deja, il est recrit.

character*(*) :: nomvar - (entree) : nom de la variable ROM pour laquelle on ecrit une sortie

integer :: kstep - (entree) : numero du pas de temps du modele

real :: champ - (entree) : variable du modele a ecrire dans les fichiers de sortie

integer :: dim1,dim2,dim3 - (entree) : dimensions du champ 2D ou 3D (dim3 est optionnel)

Valeur de retour:


 0 : succes
-1 : erreur

logical rom_var_step_wanted(nomvar,kstep)
Verifier si une sortie doit etre faite pour une ou plusieurs des pseudo-variables associees a la variable ROM nomvar pour le pas de temps kstep.

character*(*) :: nomvar - (entree) : nom de la variable ROM

integer :: kstep - (entree) : numero du pas de temps du modele

Valeur de retour:


 .TRUE. : au moins une  pseudo-variable a sortir

 .FALSE. : acune  pseudo-variable a sortir

 

EXEMPLE

Exemple complet utilisant uniquement les fonctions de haut niveau de type rom_var ou all_var

C
C
      program test_all_var

      use rom_nc_fcns

      integer :: retour,i,ilo,m,n

      parameter (ilo = 73, m = 150, n = 236)

      integer*2 :: nlayers(m,n),ldep(m,n)

      integer*2 :: jc(m,n)

      integer :: mask(m,n)

      real :: totaldepth(m,n)

      real :: dz(ilo)

      real :: latitudes(m,n),longitudes(m,n)

      real :: champ_uwat(ilo,m,n),champ_salt(ilo,m,n)

      real :: champ_icec(m,n)
C
C Initialisation de tous les champs
C (code absent)
C ...



            
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C Initialisation des structures de controle
C du module de sortie
C


      retour = read_parrun_vars('parrun')

      retour = create_all_var_nc_files('parrun')


      retour = set_all_var_wet_axis(mask,nlayers,m,n)


      retour = set_all_var_zrom_axis(dz,ilo)

      retour = set_all_var_xp_yp(.true.,.true.)

      retour = set_all_var_lat_lon(latitudes,longitudes,m,n)

      retour = set_all_var_mask('JC',

     1     'Ocean model grid properties',jc,m,n)



      retour = set_all_var_mask('JCATMOS',

     1     'Atmospheric forcing grid properties',jc,m,n)

      
      retour = set_all_var_ldep(ldep,m,n)


      retour = set_all_var_nlayer(nlayers,m,n)


      retour = set_all_var_totaldepth(totaldepth,m,n)


C
C Fin initialisation des structure de controle
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C



CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C Boucle sur les pas de temps




      write(6,*)' Boucle sur les pas de temps'

      do i =0 ,endstep
C On fait une tonne de calculs
C ...
C On fait nos sorties a la fin du pas de temps
C
C Pour la variable UWAT on doit faire un
C pre traitement avant de faire une sortie
C On verifie avant de faire le pre-traitement
C si une sortie est necessaire


         if(rom_var_step_wanted('UWAT',i)) then

            call pre-traitement(champ_uwat,ilo,m,n)

            retour = write_rom_var('SALT',i,champ_uwat,ilo,m,n)

         endif
C
C Pour les variables SALT et ICEC aucun pre-traitement requis
C on appelle le module de sortie qui gere le tout
C SALT est 3D et ICEC est 2D

         retour = write_rom_var('SALT',i,champ_salt,ilo,m,n)

         retour = write_rom_var('ICEC',i,champ_icec,m,n)
       


      enddo



      





      end program test_all_var

 

AUTEUR

James Caveen, UQAR/ISMER, novembre 2007
Derniere mise a jour: fevrier 2009 pour l'implantation de la convention COARDS,CF-1.0,ROM-1.1.
Code ecrit a partir des specifications des fichiers de sorties du modele ROM elaborees par Simon Senneville, Frederic Maps et James Caveen en septembre 2007 et revues en janvier 2009.  

VOIR AUSSI

parrun(5), rom_var_name(5) Consultez le fichier
http://demeter.uqar.qc.ca/modeles/specifications_netcdf.html
pour une description complete du format NetCDF du modele ROM.


 

Index

NOM
SYNOPSIS
DEFINITION DES TERMES
DESCRIPTION
DESCRIPTION DES FONCTIONS
EXEMPLE
AUTEUR
VOIR AUSSI

This document was created by man2html, using the manual pages.
Time: 21:06:01 GMT, February 11, 2009