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

Diff of /trunk/dyn3d/geopot.f

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

trunk/libf/dyn3d/geopot.f90 revision 3 by guez, Wed Feb 27 13:16:39 2008 UTC trunk/dyn3d/geopot.f revision 82 by guez, Wed Mar 5 14:57:53 2014 UTC
# Line 1  Line 1 
1  SUBROUTINE geopot(ngrid,teta,pk,pks,phis,phi)  module geopot_m
2    
3    ! From libf/dyn3d/geopot.F,v 1.1.1.1 2004/05/19    IMPLICIT NONE
4    
5    USE dimens_m  contains
   USE paramet_m  
6    
7    IMPLICIT NONE    SUBROUTINE geopot(teta, pk, pks, phis, phi)
8    
9        ! From libf/dyn3d/geopot.F, version 1.1.1.1 2004/05/19
10        ! Author: P. Le Van
11        ! Objet : calcul du géopotentiel aux milieux des couches
12        ! L'intégration se fait de bas en haut.
13    
14        USE dimens_m, ONLY: iim, jjm, llm
15        use nr_util, only: assert
16    
17        REAL, INTENT(IN):: teta(:, :, :) ! (iim + 1, jjm + 1, llm)
18        REAL, INTENT(IN):: pk(:, :, :) ! (iim + 1, jjm + 1, llm)
19        REAL, INTENT(IN):: pks(:, :) ! (iim + 1, jjm + 1)
20        REAL, INTENT(IN):: phis(:, :) ! (iim + 1, jjm + 1)
21        REAL, INTENT(out)::  phi(:, :, :) ! (iim + 1, jjm + 1, llm)
22    
23        ! Local:
24        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 :
36        phi(:, :, 1) = phis + teta(:, :, 1) * (pks - pk(:, :, 1))
37    
38    ! Auteur:  P. Le Van      ! Calcul de phi aux niveaux supérieurs :
39        DO l = 2, llm
40           phi(:, :, l) = phi(:, :, l-1) + 0.5 * (teta(:, :, l) + teta(:, :, l-1)) &
41                * (pk(:, :, l-1) - pk(:, :, l))
42        END DO
43    
44    ! Objet:    END SUBROUTINE geopot
   ! 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  
45    
46  END SUBROUTINE geopot  end module geopot_m

Legend:
Removed from v.3  
changed lines
  Added in v.82

  ViewVC Help
Powered by ViewVC 1.1.21