--- trunk/libf/dyn3d/geopot.f90 2008/02/27 13:16:39 3 +++ trunk/libf/dyn3d/geopot.f90 2011/04/13 12:29:18 44 @@ -1,41 +1,38 @@ -SUBROUTINE geopot(ngrid,teta,pk,pks,phis,phi) +module geopot_m - ! From libf/dyn3d/geopot.F,v 1.1.1.1 2004/05/19 + IMPLICIT NONE - USE dimens_m - USE paramet_m +contains - IMPLICIT NONE + SUBROUTINE geopot(ngrid, teta, pk, pks, phis, phi) + + ! From libf/dyn3d/geopot.F, version 1.1.1.1 2004/05/19 + ! Author: P. Le Van + ! Objet : calcul du géopotentiel aux milieux des couches + ! L'intégration se fait de bas en haut. + + USE dimens_m, ONLY: llm + + INTEGER, INTENT (IN):: ngrid + REAL, INTENT (IN):: teta(ngrid, llm), pks(ngrid) + REAL, INTENT (IN) :: phis(ngrid) + REAL, INTENT (IN) :: pk(ngrid, llm) + REAL, INTENT (out):: phi(ngrid, llm) + + ! Local: + INTEGER l + + ! ----------------------------------------------------------------------- + + ! Calcul de phi au niveau 1 près du sol : + phi(:, 1) = phis + teta(:, 1) * (pks - pk(:, 1)) - ! Auteur: P. Le Van + ! Calcul de phi aux niveaux supérieurs : + DO l = 2, llm + phi(:, l) = phi(:, l-1) + 0.5 * (teta(:, l) + teta(:, l-1)) & + * (pk(:, l-1) - pk(:, l)) + END DO - ! Objet: - ! calcul du geopotentiel aux milieux des couches - ! l'integration se fait de bas en haut - - ! Arguments: - INTEGER, INTENT (IN):: ngrid - REAL, INTENT (IN):: teta(ngrid,llm), pks(ngrid) - REAL, INTENT (IN) :: phis(ngrid) - REAL, INTENT (IN) :: pk(ngrid,llm) - REAL, INTENT (out):: phi(ngrid,llm) - - ! Local: - INTEGER l, ij - - ! ----------------------------------------------------------------------- - - ! calcul de phi au niveau 1 pres du sol ..... - DO ij = 1, ngrid - phi(ij,1) = phis(ij) + teta(ij,1)*(pks(ij)-pk(ij,1)) - end DO - - ! calcul de phi aux niveaux superieurs ....... - DO l = 2, llm - DO ij = 1, ngrid - phi(ij,l) = phi(ij,l-1) + 0.5 * (teta(ij,l) + teta(ij,l-1)) & - * (pk(ij,l-1) - pk(ij,l)) - END DO - END DO + END SUBROUTINE geopot -END SUBROUTINE geopot +end module geopot_m