/[lmdze]/trunk/dyn3d/Dissipation/gradiv2.f
ViewVC logotype

Diff of /trunk/dyn3d/Dissipation/gradiv2.f

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

trunk/libf/dyn3d/gradiv2.f90 revision 54 by guez, Tue Dec 6 15:07:04 2011 UTC trunk/dyn3d/Dissipation/gradiv2.f revision 82 by guez, Wed Mar 5 14:57:53 2014 UTC
# Line 4  module gradiv2_m Line 4  module gradiv2_m
4    
5  contains  contains
6    
7    SUBROUTINE gradiv2(klevel, xcov, ycov, ld, gdx, gdy, cdivu)    SUBROUTINE gradiv2(xcov, ycov, ld, gdx, gdy, cdivu)
8    
9      ! From LMDZ4/libf/dyn3d/gradiv2.F, version 1.1.1.1 2004/05/19 12:53:07      ! From LMDZ4/libf/dyn3d/gradiv2.F, version 1.1.1.1 2004/05/19 12:53:07
   
10      ! P. Le Van      ! P. Le Van
11      ! calcul de grad div du vecteur v      ! Calcul du gradient de la divergence du vecteur v.
     ! xcov et ycov etant les composantes covariantes de v  
     ! xcont, ycont et ld sont des arguments d'entree pour le sous-programme  
     ! gdx et gdy sont des arguments de sortie pour le sous-programme  
   
     use dimens_m  
     use paramet_m  
     use comgeom  
     use filtreg_m, only: filtreg  
12    
13      ! variables en arguments      USE comgeom, ONLY: cuvscvgam1, cvuscugam1, unsair_gam1, unsapolnga1, &
14             unsapolsga1
15        USE dimens_m, ONLY: iim, jjm, llm
16        use divergf_m, only: divergf
17        USE filtreg_m, ONLY: filtreg
18        use grad_m, only: grad
19        use laplacien_m, only: laplacien
20        use nr_util, only: assert_eq, assert
21    
22        ! Composantes covariantes de v :
23        REAL, intent(in):: xcov(:, :, :) ! (iim + 1, jjm + 1, klevel)
24        REAL, intent(in):: ycov(:, :, :) ! (iim + 1, jjm, klevel)
25    
     INTEGER klevel  
     REAL xcov( ip1jmp1,klevel), ycov( ip1jm,klevel)  
26      integer, intent(in):: ld      integer, intent(in):: ld
27      REAL gdx( ip1jmp1,klevel), gdy( ip1jm,klevel)      REAL, intent(out):: gdx(:, :, :) ! (iim + 1, jjm + 1, klevel)
28        REAL, intent(out):: gdy(:, :, :) ! (iim + 1, jjm, klevel)
29      real, intent(in):: cdivu      real, intent(in):: cdivu
30    
31      ! variables locales      ! Variables locales :
32        REAL nugrads, div(iim + 1, jjm + 1, llm)
33      REAL div(ip1jmp1,llm)      INTEGER iter, klevel
     REAL nugrads  
     INTEGER l,ij,iter  
34    
35      !--------------------------------------------------------------      !--------------------------------------------------------------
36    
37      CALL SCOPY( ip1jmp1 * klevel, xcov, 1, gdx, 1)      call assert((/size(xcov, 1), size(ycov, 1), size(gdx, 1), size(gdy, 1)/) &
38      CALL SCOPY( ip1jm * klevel, ycov, 1, gdy, 1)           == iim + 1, "gradiv2 iim")
39        call assert((/size(xcov, 2) - 1, size(ycov, 2), size(gdx, 2) - 1, &
40             size(gdy, 2)/) == jjm, "gradiv2 iim")
41        klevel = assert_eq(size(xcov, 3), size(ycov, 3), size(gdx, 3), &
42             size(gdy, 3), "gradiv2 klevel")
43    
44      CALL divergf( klevel, gdx, gdy, div)      CALL divergf(klevel, xcov, ycov, div)
45    
46      IF( ld.GT.1) THEN      IF (ld > 1) THEN
47         CALL laplacien ( klevel, div, div)         CALL laplacien(klevel, div)
48    
49         ! Iteration de l'operateur laplacien_gam         ! ItĂ©ration de l'opĂ©rateur laplacien_gam
50         DO iter = 1, ld -2         DO iter = 1, ld -2
51            CALL laplacien_gam ( klevel,cuvscvgam1,cvuscugam1,unsair_gam1, &            CALL laplacien_gam(klevel, cuvscvgam1, cvuscugam1, unsair_gam1, &
52                 unsapolnga1, unsapolsga1, div, div)                 unsapolnga1, unsapolsga1, div, div)
53         ENDDO         END DO
54      ENDIF      ENDIF
55    
56      CALL filtreg( div, jjp1, klevel, 2, 1, .TRUE., 1)      CALL filtreg(div, jjm + 1, klevel, 2, 1, .TRUE.)
57      CALL grad ( klevel, div, gdx, gdy)      CALL grad(klevel, div, gdx, gdy)
58      nugrads = (-1.)**ld * cdivu      nugrads = (-1.)**ld * cdivu
59    
60      DO l = 1, klevel      gdx = gdx * nugrads
61         DO ij = 1, ip1jmp1      gdy = gdy * nugrads
           gdx( ij,l) = gdx( ij,l) * nugrads  
        ENDDO  
        DO ij = 1, ip1jm  
           gdy( ij,l) = gdy( ij,l) * nugrads  
        ENDDO  
     ENDDO  
62    
63    END SUBROUTINE gradiv2    END SUBROUTINE gradiv2
64    

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

  ViewVC Help
Powered by ViewVC 1.1.21