500 likes | 664 Views
Atelier ADOMOCA Toulouse, 13 novembre 2008. La maquette V4 et son évolution. Andrea Piacentini, Sébastien Massart, Daniel Cariolle. La release V4. La release V4 provient de la validation de 9 versions beta utilisées dans la communauté depuis la release V3 de novembre 2007
E N D
Atelier ADOMOCA Toulouse, 13 novembre 2008 La maquette V4 et son évolution Andrea Piacentini, Sébastien Massart, Daniel Cariolle
La release V4 • La release V4 provient de la validation de 9 versions beta utilisées dans la communauté depuis la release V3 de novembre 2007 • Les développements sont plutôt techniques : nous allons rentrer dans le détail des principaux en examinant les apports des versions V4.01beta … V4.09beta à travers le fichier changes_V4.txt • La release sera disponible sur le site ETHER • Elle est accompagnée d’un document explicatif de 37 pages (html ou pdf) plus un document spécifique sur la signification des constantes PrePALM
V4.01 • BUG FIX in NOVELTIS define_hxy: observations coinciding with the upper extreme of a grid cell or with one of the two extremes of the periodic closure "cell" where not taken into account • Interface pour modèles avec grille en latitude passant par les pôles ou excluant les pôles (ip_lat_no_poles) • Exclusion de la boucle interne d'assimilation et du final forecast si ip_niter = 0 (pour l'utilisation en mode comparaison aux obs) • Création de mocageNetCDF, qui remplace les routines INIT() et MODEL() de MOCAGE Palmé par deux chargeurs de fichiers NetCDF • Creation du cas src_3DFGAT_NETCDF, qui utilise mocageNetCDF pour remplacer MOCAGE. Aucun changement dans le .ppl. Le inst_links est diff. • Modification de jobMCGelf, GETDATES.sh, getdates_AP, getauxi et creation de get_NC pour gérer le cas CNETCDF=1 qui active src_3DFGAT_NETCDF
V4.01 • BUG FIX in NOVELTIS define_hxy: observations coinciding with the upper extreme of a grid cell or with one of the two extremes of the periodic closure "cell" where not taken into account • Interface pour modèles avec grille en latitude passant par les pôles ou excluant les pôles (ip_lat_no_poles) • Exclusion de la boucle interne d'assimilation et du final forecast si ip_niter = 0 (pour l'utilisation en mode comparaison aux obs) • Création de mocageNetCDF, qui remplace les routines INIT() et MODEL() de MOCAGE Palmé par deux chargeurs de fichiers NetCDF • Creation du cas src_3DFGAT_NETCDF, qui utilise mocageNetCDF pour remplacer MOCAGE. Aucun changement dans le .ppl. Le inst_links est diff. • Modification de jobMCGelf, GETDATES.sh, getdates_AP, getauxi et creation de get_NC pour gérer le cas CNETCDF=1 qui active src_3DFGAT_NETCDF
V4.01 • BUG FIX in NOVELTIS define_hxy: observations coinciding with the upper extreme of a grid cell or with one of the two extremes of the periodic closure "cell" where not taken into account • Interface pour modèles avec grille en latitude passant par les pôles ou excluant les pôles (ip_lat_no_poles) • Exclusion de la boucle interne d'assimilation et du final forecast si ip_niter = 0 (pour l'utilisation en mode comparaison aux obs) • Création de mocageNetCDF, qui remplace les routines INIT() et MODEL() de MOCAGE Palmé par deux chargeurs de fichiers NetCDF • Creation du cas src_3DFGAT_NETCDF, qui utilise mocageNetCDF pour remplacer MOCAGE. Aucun changement dans le .ppl. Le inst_links est diff. • Modification de jobMCGelf, GETDATES.sh, getdates_AP, getauxi et creation de get_NC pour gérer le cas CNETCDF=1 qui active src_3DFGAT_NETCDF
V4.01 détail Dans jobMCGelf DATEIN=2003070100 DATEOUT=2003070109 CHEMSCHEME=CARIOLLE NCDF=1 ou NCDF=3 CSHORT=1 SPECIES="CO" CASSIM=1 CNETCDF=1 TYPEOBS=MOPITT ASSIMILATED_SPECIES="CO" PATH_NC=$PATH_HM
V4.02 • BUG FIX: réactivation de la possibilité d'exclure la diffusion horizontale dans B si ip_flsh = 0 • BUG FIX: dimensionnement erroné dans un script Ferret qui limitait le nombre d'observations dans dailystats à <= nombre de points en latitude • Sortie de la température dans les NetCDF "légers" créés par le chargeur NetCDF en modalité src_3DFGAT_NETCDF • Diagnostique Ferret de sigma_o et sigma_b (a la Desroziers) dans deux fichiers ascii, générés par dailystats
V4.02 • BUG FIX: réactivation de la possibilité d'exclure la diffusion horizontale dans B si ip_flsh = 0 • BUG FIX: dimensionnement erroné dans un script Ferret qui limitait le nombre d'observations dans dailystats à <= nombre de points en latitude • Sortie de la température dans les NetCDF "légers" créés par le chargeur NetCDF en modalité src_3DFGAT_NETCDF • Diagnostique Ferret de sigma_o et sigma_b (a la Desroziers) dans deux fichiers ascii, générés par dailystats
V4.03 • Implémentation corrélation horizontale sur grille de Gauss (autoadjonction) N.B. changement des cartes d'identité des certaines unités, y compris INIT -> une comm de plus pour l'envoi de la première longitude discrète • Introduction des unités model2gauss et gauss2model pour le passage de la grille modèle à la grille d'assimilation et vice-versa • Rajout de la fonction trssph dans sphpk.f • Introduction des paramètres ip_lonc1, ip_latc1, ip_lono1, ip_lato1,qui fixent la taille de la grille d'assimilation (elle peut être plus grossière que la grille modèle)
V4.03 • Implémentation corrélation horizontale sur grille de Gauss (autoadjonction) N.B. changement des cartes d'identité des certaines unités, y compris INIT -> une comm de plus pour l'envoi de la première longitude discrète • Introduction des unités model2gauss et gauss2model pour le passage de la grille modèle à la grille d'assimilation et vice-versa • Rajout de la fonction trssph dans sphpk.f • Introduction des paramètres ip_lonc1, ip_latc1, ip_lono1, ip_lato1,qui fixent la taille de la grille d'assimilation (elle peut être plus grossière que la grille modèle)
V4.03 détail rapp. mél Modèle H pression var. Stats incr. analyse l.p. Min Fwd HLT B1/2 Bckwd HADJ BT/2
V4.03 détail rapp. mél Modèle H pression var. Stats incr. analyse l.p. Min Fwd HLT B1/2 Bckwd HADJ BT/2
V4.04 • Implémentation corrélation verticale par éqn de diffusion (sol. explicite) et possibilité d'indiquer un profil vertical de variances (N.B. il faut linker avec la librairie d'algèbre linéaire LAPACK -> Modif des Make.commands • La façon dont le profil de pression est calculé (profile type 1D valable pour tous les points ou profil exact point par point) est reglée par la constante ip_vcor_1Dapprox N.B. l'option 3D (ip_vcor_1Dapprox=0) est très coûteuse en mémoire mais peut donner de meilleurs résultats en tropo si le relief est très accidenté • Correction nom de variable pour filterz dans le NetCDF DX... (mcg2nc.f90) • Correction sqrtB pour le cas filterh=0 : la normalisation par rg_filno doit de toute façon être appliquée • Blindage des allocations (initialisation à 0) pour NEC
V4.04 • Implémentation corrélation verticale par éqn de diffusion (sol. explicite) et possibilité d'indiquer un profil vertical de variances (N.B. il faut linker avec la librairie d'algèbre linéaire LAPACK -> Modif des Make.commands • La façon dont le profil de pression est calculé (profile type 1D valable pour tous les points ou profil exact point par point) est reglée par la constante ip_vcor_1Dapprox N.B. l'option 3D (ip_vcor_1Dapprox=0) est très coûteuse en mémoire mais peut donner de meilleurs résultats en tropo si le relief est très accidenté • Correction nom de variable pour filterz dans le NetCDF DX... (mcg2nc.f90) • Correction sqrtB pour le cas filterh=0 : la normalisation par rg_filno doit de toute façon être appliquée • Blindage des allocations (initialisation à 0) pour NEC
V4.04 • Implémentation corrélation verticale par éqn de diffusion (sol. explicite) et possibilité d'indiquer un profil vertical de variances (N.B. il faut linker avec la librairie d'algèbre linéaire LAPACK -> Modif des Make.commands • La façon dont le profil de pression est calculé (profile type 1D valable pour tous les points ou profil exact point par point) est reglée par la constante ip_vcor_1Dapprox N.B. l'option 3D (ip_vcor_1Dapprox=0) est très coûteuse en mémoire mais peut donner de meilleurs résultats en tropo si le relief est très accidenté • Correction nom de variable pour filterz dans le NetCDF DX... (mcg2nc.f90) • Correction sqrtB pour le cas filterh=0 : la normalisation par rg_filno doit de toute façon être appliquée • Blindage des allocations (initialisation à 0) pour NEC
V4.05 • Introduction de l'unité inistats pour la formation du tableau des variances de B et des longueurs de portée horizontales (pour le moment désactivé) et verticales. • Introduction des constantes PrePALM ip_Bvar_rep, ip_Bhcor_rep, ip_Bvcor_rep, pour le choix entre représentations constantes (comme dans V3) ou valeurs lues dans un fichier NetCDF BKG_ERR_STATS+yyyymm.nc ip_Bvar_rep=0 la variance est calculée comme ip_sigbck% de l'ébaucheip_Bvar_rep=1 un champ 2D de rms est lu et utilise pour ts les nivip_Bvar_rep=2 un champ 3D de rms est luip_Bvcor_rep=0 la corrélation est calculée à partir de ip_flszip_Bvcor_rep=1 un profil 1D des long. est lu et utilisé pour ts les ptsip_Bvcor_rep=2 un champ 3D de long est lu (option très coûteuse)Pour la constante ip_Bhor_rep, pour le moment, seule la valeur 0 est admise (longueur de corrélation horizontale homogène fixée par ip_flsh)
V4.05 • Introduction de l'unité inistats pour la formation du tableau des variances de B et des longueurs de portée horizontales (pour le moment désactivé) et verticales. • Introduction des constantes PrePALM ip_Bvar_rep, ip_Bhcor_rep, ip_Bvcor_rep, pour le choix entre représentations constantes (comme dans V3) ou valeurs lues dans un fichier NetCDF BKG_ERR_STATS+yyyymm.nc ip_Bvar_rep=0 la variance est calculée comme ip_sigbck% de l'ébaucheip_Bvar_rep=1 un champ 2D de rms est lu et utilise pour ts les nivip_Bvar_rep=2 un champ 3D de rms est luip_Bvcor_rep=0 la corrélation est calculée à partir de ip_flszip_Bvcor_rep=1 un profil 1D des long. est lu et utilisé pour ts les ptsip_Bvcor_rep=2 un champ 3D de long est lu (option très coûteuse)Pour la constante ip_Bhor_rep, pour le moment, seule la valeur 0 est admise (longueur de corrélation horizontale homogène fixée par ip_flsh)
V4.05 (suite) • Modification du script MOCAGE_TOOLS/getassim.sh pour rapatrier le fichier NetCDF des statistiques d'erreur. • Création dans MOCAGE_PALM d'un template de fichier .cdl pour la génération "à la main" du fichier NetCDF. Il s'agit d'un ficher ascii, dans lequel,les valeurs des variables sont modifiables. Ensuite le fichier NetCDF est généré par la commande ncgen -o BKG_ERR_STATS+yyyymm.nc fichier.cdl • Utilisation du transposé de la matrice de discrétisation de la dérivée seconde dans vert_corel_adj pour garantir l'adjonction de sqrtB sqrtB_adj • Utilisation de l'interpolation bilinéaire de la bibliothèque SCRIP pour le passage de la grille modèle à la grille de gauss si ip_scrip=1. Si ip_scrip=0 le changement de grille utilise Spherepack. La normalisation des corrélations ne s'effectue pas de la même façon selon l'interpolation utilisée.
V4.05 (suite) • Modification du script MOCAGE_TOOLS/getassim.sh pour rapatrier le fichier NetCDF des statistiques d'erreur. • Création dans MOCAGE_PALM d'un template de fichier .cdl pour la génération "à la main" du fichier NetCDF. Il s'agit d'un ficher ascii, dans lequel,les valeurs des variables sont modifiables. Ensuite le fichier NetCDF est généré par la commande ncgen -o BKG_ERR_STATS+yyyymm.nc fichier.cdl • Utilisation du transposé de la matrice de discrétisation de la dérivée seconde dans vert_corel_adj pour garantir l'adjonction de sqrtB sqrtB_adj • Utilisation de l'interpolation bilinéaire de la bibliothèque SCRIP pour le passage de la grille modèle à la grille de gauss si ip_scrip=1. Si ip_scrip=0 le changement de grille utilise Spherepack. La normalisation des corrélations ne s'effectue pas de la même façon selon l'interpolation utilisée.
V4.05 (suite) • Refonte complète du traitement du type d'obs TOTCOL (qui inclut les colonnes totales et les colonnes partielles - N.B. ce type ne comprend pas les quantités scalaires obtenues a partir d'un profil a priori avec un averaging kernel "ligne", qui sont de type INTQTY) : l'observation colonne est traitée comme un profil sur les mêmes niveaux que le modèle obtenu par modification du profil d'ébauche (e.g. si la colonne mesurée est 10% plus grande que la colonne modélisée, on assimile le profil d'ébauche*1.1). N.B. pour cette raison quand on a un instrument TOTCOL il faut mettre ip_nbnivpresmax=ip_nivm1 • Introduction du seuil ip_enforced_obs_min (en ppb) sur les valeurs d'obs : toutes les observations plus petites que ip_enforced_obs_min ppb sont positionnées à ip_enforced_obs_min ppb • Introduction du seuil ip_enforced_ana_min (en ppb) sur l'espèce analysée : les points ou l'analyse est plus petite que ip_enforced_ana_min ppb sont positionnés à ip_enforced_ana_min ppb
V4.05 (suite) • Refonte complète du traitement du type d'obs TOTCOL (qui inclut les colonnes totales et les colonnes partielles - N.B. ce type ne comprend pas les quantités scalaires obtenues a partir d'un profil a priori avec un averaging kernel "ligne", qui sont de type INTQTY) : l'observation colonne est traitée comme un profil sur les mêmes niveaux que le modèle obtenu par modification du profil d'ébauche (e.g. si la colonne mesurée est 10% plus grande que la colonne modélisée, on assimile le profil d'ébauche*1.1). N.B. pour cette raison quand on a un instrument TOTCOL il faut mettre ip_nbnivpresmax=ip_nivm1 • Introduction du seuil ip_enforced_obs_min (en ppb) sur les valeurs d'obs : toutes les observations plus petites que ip_enforced_obs_min ppb sont positionnées à ip_enforced_obs_min ppb • Introduction du seuil ip_enforced_ana_min (en ppb) sur l'espèce analysée : les points ou l'analyse est plus petite que ip_enforced_ana_min ppb sont positionnés à ip_enforced_ana_min ppb
assim. H assim. écart V4.05 détail H écart
V4.05 (suite) • Refonte complète du traitement du type d'obs TOTCOL (qui inclut les colonnes totales et les colonnes partielles - N.B. ce type ne comprend pas les quantités scalaires obtenues a partir d'un profil a priori avec un averaging kernel "ligne", qui sont de type INTQTY) : l'observation colonne est traitée comme un profil sur les mêmes niveaux que le modèle obtenu par modification du profil d'ébauche (e.g. si la colonne mesurée est 10% plus grande que la colonne modélisée, on assimile le profil d'ébauche*1.1). N.B. pour cette raison quand on a un instrument TOTCOL il faut mettre ip_nbnivpresmax=ip_nivm1 • Introduction du seuil ip_enforced_obs_min (en ppb) sur les valeurs d'obs : toutes les observations plus petites que ip_enforced_obs_min ppb sont positionnées à ip_enforced_obs_min ppb • Introduction du seuil ip_enforced_ana_min (en ppb) sur l'espèce analysée : les points ou l'analyse est plus petite que ip_enforced_ana_min ppb sont positionnés à ip_enforced_ana_min ppb
Rappel types d’obs [PROFIL] : profil sans averaging kernel (e.g. MIPAS) HDAT [, HCOV] AVKERN : profil avec averaging kernel (e.g. MOPITT) HDAT, HAVK [, HCOV] TOTCOL : colonne totale ou colonne(s) partielle(s) (e.g. TOMS, IASI) HDAT, [HCOV] ip_tc_as_prof = 0 traitées comme des scalaires ip_tc_as_prof = 1 traitées comme des profils décalés INTQTY : quantité intégrée scalaire avec averaging kernel (e.g. MOPITT) HDAT, HAVK [, HCOV]
V4.06 • Blindage du manque potentiel de synchronisation entre le modèle et les unités model2gauss sur la branche des observations (passage par buffer) • Réintroduction du traitement des colonnes totales comme scalaires(pour des raisons de mémoire). La constante ip_tc_as_prof=1 indique la conversion en profils décalés (cf v4.05), tandis que ip_tc_as_prof=0 indique le traitement scalaire style V3. Dans le premier cas ip_nbnivpresmax doit être positionné à ip_nivm1, tandis que dans le deuxième ip_nbnivpresmax=1 • Evolution du script Ferret vert_coord pour les tracés en pression partielle
V4.06 • Blindage du manque potentiel de synchronisation entre le modèle et les unités model2gauss sur la branche des observations (passage par buffer) • Réintroduction du traitement des colonnes totales comme scalaires(pour des raisons de mémoire). La constante ip_tc_as_prof=1 indique la conversion en profils décalés (cf v4.05), tandis que ip_tc_as_prof=0 indique le traitement scalaire style V3. Dans le premier cas ip_nbnivpresmax doit être positionné à ip_nivm1, tandis que dans le deuxième ip_nbnivpresmax=1 • Evolution du script Ferret vert_coord pour les tracés en pression partielle
V4.07 • Optimisation de la mémoire pour le traitement des obs avec séparation des dimensionnements avec ou sans av. kernel. Rajout des quelques constantes PrePALM (cf le document html sur les constantes) • Optimisation de la mémoire pour le stockage des covariances d'err. d'observation, pour les avg. kernel et pour l'espace vectobs (réduction au stricte nécessaire pour un slot et pour les niv. vert.)
V4.07 • Optimisation de la mémoire pour le traitement des obs avec séparation des dimensionnements avec ou sans av. kernel. Rajout des quelques constantes PrePALM (cf le document html sur les constantes) • Optimisation de la mémoire pour le stockage des covariances d'err. d'observation, pour les avg. kernel et pour l'espace vectobs (réduction au stricte nécessaire pour un slot et pour les niv. vert.)
V4.08 • Utilisation des modèles linéaires pour O3, Traceur froid, CO, HNO3 (version fournie par Hubert avec configuration verticale a 91 niveaux en option) • Adaptation des scripts de compilation aux nouvelles clés CPP : l'activation générique du schéma linéaire se fait par -DCARIOLLE, le choix de l'espèce par -DLINO_3 -DTFROID -DLINCO -DLINHNO_3 (au moins une et cumulables), le choix des niveaux par -DNIV_47 en alternative à -DMIDATM -DNIV_60 ou à -DMIDATM -DNIV_91 • Angle zénithal pour les schémas linéaires fixé à 87 deg. Si on a besoin de garantir la compatibilité avec les schémas complets ou avec les anciennes versions de l'ozone linéaire, remettre szaseuil=94 dans la routine cariochem.F • Ligne 37 du script getassim.sh effacée. Elle écrasait les fichiers HDAT par les fichiers HOBS de la même date, si présents, tandis que le rapatriement des HOBS est à la charge de getobs.sh
V4.08 • Utilisation des modèles linéaires pour O3, Traceur froid, CO, HNO3 (version fournie par Hubert avec configuration verticale a 91 niveaux en option) • Adaptation des scripts de compilation aux nouvelles clés CPP : l'activation générique du schéma linéaire se fait par -DCARIOLLE, le choix de l'espèce par -DLINO_3 -DTFROID -DLINCO -DLINHNO_3 (au moins une et cumulables), le choix des niveaux par -DNIV_47 en alternative à -DMIDATM -DNIV_60 ou à -DMIDATM -DNIV_91 • Angle zénithal pour les schémas linéaires fixé à 87 deg. Si on a besoin de garantir la compatibilité avec les schémas complets ou avec les anciennes versions de l'ozone linéaire, remettre szaseuil=94 dans la routine cariochem.F • Ligne 37 du script getassim.sh effacée. Elle écrasait les fichiers HDAT par les fichiers HOBS de la même date, si présents, tandis que le rapatriement des HOBS est à la charge de getobs.sh
V4.09 • Initialisation de ALM et BLM modifiée dans src_sv/loadforcage.F pour permettre la prise en compte des forçages à 91 niveaux dans un modèle a 60 niveaux. • Sanity check sur le nombre d'instruments AVKERN ou sans AVKERN pour le dimensionnement de la constante PrePALM ip_ninstmax_avk • Introduction de la clé PATH_STATS dans jobMCGelf pour indiquer le répertoire où se trouvent les fichiers BKG_ERR_STATS+yyyymm.nc • Nouvelle formulation de la diffusion verticale pour la meilleure prise en compte des conditions aux bords - Affecte inivcor, vert_corel, vert_corel_adj • Refonte du parallélisme dans inivcor pour le cas avec vrai champ 3D de pression (ip_vcor_1Dapprox=0)
V4.09 • Initialisation de ALM et BLM modifiée dans src_sv/loadforcage.F pour permettre la prise en compte des forçages à 91 niveaux dans un modèle a 60 niveaux. • Sanity check sur le nombre d'instruments AVKERN ou sans AVKERN pour le dimensionnement de la constante PrePALM ip_ninstmax_avk • Introduction de la clé PATH_STATS dans jobMCGelf pour indiquer le répertoire où se trouvent les fichiers BKG_ERR_STATS+yyyymm.nc • Nouvelle formulation de la diffusion verticale pour la meilleure prise en compte des conditions aux bords - Affecte inivcor, vert_corel, vert_corel_adj • Refonte du parallélisme dans inivcor pour le cas avec vrai champ 3D de pression (ip_vcor_1Dapprox=0)
V4.09 • Initialisation de ALM et BLM modifiée dans src_sv/loadforcage.F pour permettre la prise en compte des forçages à 91 niveaux dans un modèle a 60 niveaux. • Sanity check sur le nombre d'instruments AVKERN ou sans AVKERN pour le dimensionnement de la constante PrePALM ip_ninstmax_avk • Introduction de la clé PATH_STATS dans jobMCGelf pour indiquer le répertoire où se trouvent les fichiers BKG_ERR_STATS+yyyymm.nc • Nouvelle formulation de la diffusion verticale pour la meilleure prise en compte des conditions aux bords - Affecte inivcor, vert_corel, vert_corel_adj • Refonte du parallélisme dans inivcor pour le cas avec vrai champ 3D de pression (ip_vcor_1Dapprox=0)
Pour le futur • Estimation des facteurs de correction sigma_o sigma_b à la Desroziers en ligne • Boucle externe de mise à jour de la linéarisation • Contrôle exprimé dans l’espace spéctral • Minimiseur basé sur CG avec préconditionnement • Solution de l’éqn. De diffusion dans Bhor par méthode implicite en points de grille avec prise en compte de l’anisotropie • Contrôler plusieurs espèces à la fois • Mise en place de l’assimilation en aire limitée