Aller au contenu. | Aller à la navigation

Outils personnels
Se connecter
Sections
Vous êtes ici : Accueil Utilisateurs FAQ Exécution Comment choisir la résolution ?

Comment choisir la résolution ?

Quelles sont les résolutions standard de LMDZ et quelles sont les degrés de liberté sur le choix de la grille ?

La réponse est de deux ordres :
D'abord, il y a certaines contraintes qu'il est préférable de respecter pour des raisons d'efficacité numérique et qui sont décrites ci-dessous.
Ensuite, il est sans doute souhaitable de se placer au maximum sur des grilles communes, quand c'est possible.

Pour le développement du modèle intégré de l'IPSL par exemple, deux
résolutions sont pour l'instant retenues.
Une résolution très grossière de 72x45.
Une résolution plus fine de 96x71.
Les deux résolutions diffèrent par la parité des latitudes et donc par la répartition des points à l'équateur ce qui peut avoir un impact sur le couplage avec l'océan mais on ne sait pas dans quel mesure.

Pour ceux qui veulent jouer avec d'autres grilles, régulières ou zoomées,

Les contraintes techniques sont les suivantes :

1. Rapport entre le nombre de points en longitude et en latitude.

Pour les grilles régulières au moins, nous privilégions des grilles avec une résolution en degrés plus fine en latitude qu'en longitude afin d'obtenir une résolution relativement isotrope dans les moyennes latitudes.
Une grille régulière 2ox2o, par exemple, correspond à des mailles isotropes à l'équateur mais extrêmement étirées en latitude dans les hautes latitudes.
On peut même envisager d'utiliser des grilles avec le m^eme nombre de points en longitude et en latitude pour resoudre finement les structures latitudinales, essentielles dans les tropiques.

2. Prendre un multiple de 8.

Pour des raisons d'efficacité numérique du schéma de transport, il est préférable de choisir un nombre de point en longitude (iim) multiple de 8 (ou, à défaut 4).
En effet, pour éviter de réduire indéfiniment le pas de temps d'advection pour palier au problème posé par le resserement des mailles en logitude près des pôles, on groupe à partir d'une certaine latitude les mailles 2 par 2 en longitude, puis 4 par 4, puis 8 par 8 en arrivant au pôle.
Ce nombre peut éventuellement être changer en modifiant le paramètre parameter (ngroup=3) dans le sous-programme dyn3d/groupe.F (ngroup=3 pour im multiple de 2**3=8).
Mais, prendre une valeur plus petite de ngroup risque de conduire à devoir diminuer de façon notable le pas de temps d'advection.

3. Choisir une grille physique avec des diviseurs.

Le code radiatif est extrêmement coûteux en taille mémoire notamment parce qu'il contient un grand nombre de tableaux locaux en im*jm*lm*lm.
Pour éviter d'avoir des éxecutables excessivement gros, il est possible de demander au code de calculer le transfert radiatif sur des sous domaines (merci Laurent Li).
Ces sous domaines doivent avoir une dimension diviseur de la dimension totale de la grille horizontale physique, klon.

La grille horizontale de la physique est représentée par une dimension horizontale unique correspondant à tous les points de la grille dynamique sans la duplication des points en -pi et +pi et avec un seul point par pôle soit:
klon=2+iim*(jjm-1)
2 est toujours diviseurs si iim l'est (ce qui est nécessaire pour le point 2).
Mais, à part ça, c'est pas toujours évident...
Une fois qu'un diviseur kdlon de klon est trouvé, il suffit de placer dans le répertoire phylmd un fichier raddim.im.jm.h contenant la valeur de kdlon.
Ce fichier sera automatiquement copié sur raddim.h quand vous effectuerez la compilation avec makegcm.
Par exemple
==> raddim.96.72.h <==
INTEGER kdlon, kflev
PARAMETER (kdlon=487,kflev=klev)
sera copié sur raddim.h si on effectue la comande
makegcm -d 96x72x19 gcm

Si le fichier raddim.im.jm.h n'existe pas pour la résolution demandée, makegcm vous prévient (mais vous ne le verrez pas parce que c'est noyé dans plein d'autres bla bla) et écrase le fichier raddim.h avec le fichier
==> raddim.defaut.h <==

       INTEGER kdlon, kflev
PARAMETER (kdlon=klon,kflev=klev)

Pour les résolutions supérieures à 72x45, je propose de privilégier les grilles suivantes: 96x72, 192x145, 290x180
avec les fichiers suivants
==> raddim.96.72.h <==

       INTEGER kdlon, kflev
PARAMETER (kdlon=487,kflev=klev)

==> raddim.192.145.h <==
INTEGER kdlon, kflev
c      klon=27650=50*553=10*2765
PARAMETER (kdlon=2765,kflev=klev)

==> raddim.290.180.h <==

c      klon=51912=17304*3=12978*4=8652*6=7416*7=6489*8
c     = 5768*9 = 4326*12 = 3708*14 = 2884*18 = 2472*21 = 2163*24
c     = 1854*28 = 1442*36 = 1236*42 = 927*56 = 824*63 = 721*72
c     = 618*84 = 504*103 = 412*126 = 309*168 = 252*206
       INTEGER kdlon, kflev
       PARAMETER (kdlon=1442,kflev=klev)

Mais, n'hésitez pas, en phase de développement, à utiliser des versions beaucoup plus légères, à l'huile végétale, comme 32x24 ou 48x32.

Enfin, pour ceux qui voudraient chosir leur nouvelle grille et trouver des resolutions avec des diviseurs pour raddim, ils peuvent
compiler et executer le petit programme FORTRAN choixdim.F :

      program choixdim
implicit none
integer im, jm, ngrid, div,i

print*,'im=?'
read(*,*) im
print*,'jm=?'
read(*,*) jm
ngrid=im*(jm-1)+2
print*,'ngrid=',ngrid
do i=1,int(sqrt(float(ngrid)))+1
if (mod(ngrid,i).eq.0) then
print*,ngrid/i,i,(ngrid/i)*i
endif
enddo
end