/[lmdze]/trunk/dyn3d/geopot.f
ViewVC logotype

Diff of /trunk/dyn3d/geopot.f

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 44 by guez, Wed Apr 13 12:29:18 2011 UTC revision 70 by guez, Mon Jun 24 15:39:52 2013 UTC
# Line 4  module geopot_m Line 4  module geopot_m
4    
5  contains  contains
6    
7    SUBROUTINE geopot(ngrid, teta, pk, pks, phis, phi)    SUBROUTINE geopot(teta, pk, pks, phis, phi)
8    
9      ! From libf/dyn3d/geopot.F, version 1.1.1.1 2004/05/19      ! From libf/dyn3d/geopot.F, version 1.1.1.1 2004/05/19
10      ! Author: P. Le Van      ! Author: P. Le Van
11      ! Objet : calcul du géopotentiel aux milieux des couches      ! Objet : calcul du géopotentiel aux milieux des couches
12      ! L'intégration se fait de bas en haut.      ! L'intégration se fait de bas en haut.
13    
14      USE dimens_m, ONLY: llm      USE dimens_m, ONLY: iim, jjm, llm
15        use nr_util, only: assert
16    
17      INTEGER, INTENT (IN):: ngrid      REAL, INTENT(IN):: teta(:, :, :) ! (iim + 1, jjm + 1, llm)
18      REAL, INTENT (IN):: teta(ngrid, llm), pks(ngrid)      REAL, INTENT(IN):: pk(:, :, :) ! (iim + 1, jjm + 1, llm)
19      REAL, INTENT (IN) :: phis(ngrid)      REAL, INTENT(IN):: pks(:, :) ! (iim + 1, jjm + 1)
20      REAL, INTENT (IN) :: pk(ngrid, llm)      REAL, INTENT(IN):: phis(:, :) ! (iim + 1, jjm + 1)
21      REAL, INTENT (out)::  phi(ngrid, llm)      REAL, INTENT(out)::  phi(:, :, :) ! (iim + 1, jjm + 1, llm)
22    
23      ! Local:      ! Local:
24      INTEGER l      INTEGER l
25    
26      ! -----------------------------------------------------------------------      ! -----------------------------------------------------------------------
27    
28        call assert((/size(teta, 1), size(pk, 1), size(pks, 1), size(phis, 1), &
29             size(phi, 1)/) == iim + 1, "geopot iim")
30        call assert((/size(teta, 2), size(pk, 2), size(pks, 2), size(phis, 2), &
31             size(phi, 2)/) == jjm + 1, "geopot jjm")
32        call assert((/size(teta, 3), size(pk, 3), size(phi, 3)/) == llm, &
33             "geopot llm")
34    
35      ! Calcul de phi au niveau 1 près du sol :      ! Calcul de phi au niveau 1 près du sol :
36      phi(:, 1) = phis + teta(:, 1) * (pks - pk(:, 1))      phi(:, :, 1) = phis + teta(:, :, 1) * (pks - pk(:, :, 1))
37    
38      ! Calcul de phi aux niveaux supérieurs :      ! Calcul de phi aux niveaux supérieurs :
39      DO l = 2, llm      DO l = 2, llm
40         phi(:, l) = phi(:, l-1) + 0.5 * (teta(:, l) + teta(:, l-1)) &         phi(:, :, l) = phi(:, :, l-1) + 0.5 * (teta(:, :, l) + teta(:, :, l-1)) &
41              * (pk(:, l-1) - pk(:, l))              * (pk(:, :, l-1) - pk(:, :, l))
42      END DO      END DO
43    
44    END SUBROUTINE geopot    END SUBROUTINE geopot

Legend:
Removed from v.44  
changed lines
  Added in v.70

  ViewVC Help
Powered by ViewVC 1.1.21