= Amélioration de l'interpolation = == Description == Réduire les temps de projection des cartes en entrée du modèle ORCHIDEE. Cette réduction est particulièrement nécessaire lorsque le forçage (et donc le modèle) ont des grilles très fines. == Modules affectés == Dans ORCHIDEE, pluiseurs modules contiennent des projections : * slowproc, 4 projections : vegetation (5kms vector map and 2D LAND USE maps), LAI, soil texture. * condveg : soil color * routing : rivers, irrigations and floodplains * stomate_io (fonction get_reftemp) Pour l'instant, seuls les trois premiers ont été améliorés. La normalisation de la carte de LAI introduite dans la version LMD a été commentée car tant que l'on a pas travaillé sur les llaimax/llaimin, elle supprime la variation saisonnière des PFTs 2,4,5 et 7. Voyez la note [wiki:DevelopmentActivities/MergeHydro/lai_note#NotedeMartialsurleLAI] pour la justification. == Programmation == Calcul de la résolution de chaque point de la carte lue en latitude et longitude : {{{ ! Resolution in longitude ! coslat = MAX( COS( lat(ip,jp) * pi/180. ), mincos ) IF ( ip .EQ. 1 ) THEN resol_lu(ip,jp,1) = ABS( lon(ip+1,jp) - lon(ip,jp) ) * pi/180. * R_Earth * coslat ELSEIF ( ip .EQ. iml ) THEN resol_lu(ip,jp,1) = ABS( lon(ip,jp) - lon(ip-1,jp) ) * pi/180. * R_Earth * coslat ELSE resol_lu(ip,jp,1) = ABS( lon(ip+1,jp) - lon(ip-1,jp) )/2. * pi/180. * R_Earth * coslat ENDIF ! ! Resolution in latitude ! IF ( jp .EQ. 1 ) THEN resol_lu(ip,jp,2) = ABS( lat(ip,jp) - lat(ip,jp+1) ) * pi/180. * R_Earth ELSEIF ( jp .EQ. jml ) THEN resol_lu(ip,jp,2) = ABS( lat(ip,jp-1) - lat(ip,jp) ) * pi/180. * R_Earth ELSE resol_lu(ip,jp,2) = ABS( lat(ip,jp-1) - lat(ip,jp+1) )/2. * pi/180. * R_Earth ENDIF ! }}} Au lieu de fixer arbitrairement un nombre maximum de recouvrement des points de la grille de la carte lue par rapport aux points de la grille du modèle (nbvmax), on calcule une valeur précise : {{{ ! The number of maximum vegetation map points in the GCM grid is estimated. ! Some lmargin is taken. ! IF (is_root_prc) THEN nix=INT(MAXVAL(resolution_g(:,1))/MAXVAL(resol_lu(:,:,1)))+2 njx=INT(MAXVAL(resolution_g(:,2))/MAXVAL(resol_lu(:,:,2)))+2 nbvmax = nix*njx ENDIF CALL bcast(nbvmax) }}} Après vérification avec un nombre important de correspondances carte/grille de modèle (dont des sites), on pourra supprimer la boucle sur les interpolations utilisées auparavant pour éviter l'arrêt du modèle lorsque les nbvmax était définit avec des valeurs trop petites : {{{ ok_interpol = .FALSE. DO WHILE ( .NOT. ok_interpol ) [...] IF ( .NOT. ok_interpol ) THEN DEALLOCATE(sub_area) DEALLOCATE(sub_index) ENDIF ! nbvmax = nbvmax * 2 ENDDO }}} La procédure get_reftemp doit être réécrite pour utiliser la projection de interpol_help et cette optimisation. == tests == Vérifier que les projections ne sont pas modifiées et évaluer les impacts sur les résultats du modèle en cas de changement (SPINUP et run historique).