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

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

  ViewVC Help
Powered by ViewVC 1.1.21