/[lmdze]/trunk/libf/dyn3d/dissip.f90
ViewVC logotype

Diff of /trunk/libf/dyn3d/dissip.f90

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

revision 46 by guez, Wed Apr 13 12:29:18 2011 UTC revision 47 by guez, Fri Jul 1 15:00:48 2011 UTC
# Line 1  Line 1 
1  SUBROUTINE dissip(vcov, ucov, teta, p, dv, du, dh)  module dissip_m
   
   ! From dyn3d/dissip.F, version 1.1.1.1 2004/05/19 12:53:05  
   ! Avec nouveaux operateurs star : gradiv2 , divgrad2, nxgraro2  
   ! Author: P. Le Van  
   ! Objet : dissipation horizontale  
   
   USE dimens_m, ONLY : llm  
   USE paramet_m, ONLY : iip1, iip2, ip1jm, ip1jmp1, llmp1  
   USE comdissnew, ONLY : lstardis, nitergdiv, nitergrot, niterh  
   USE inidissip_m, ONLY : dtdiss, tetah, tetaudiv, tetaurot  
2    
3    IMPLICIT NONE    IMPLICIT NONE
4    
5    ! Arguments:  contains
6    REAL vcov(ip1jm, llm), ucov(ip1jmp1, llm), teta(ip1jmp1, llm)  
7    REAL, INTENT (IN) :: p(ip1jmp1, llmp1)    SUBROUTINE dissip(vcov, ucov, teta, p, dv, du, dh)
8    REAL dv(ip1jm, llm), du(ip1jmp1, llm), dh(ip1jmp1, llm)  
9        ! From dyn3d/dissip.F, version 1.1.1.1 2004/05/19 12:53:05
10    ! Local:      ! Avec nouveaux opĂ©rateurs star : gradiv2, divgrad2, nxgraro2
11    REAL gdx(ip1jmp1, llm), gdy(ip1jm, llm)      ! Author: P. Le Van
12    REAL grx(ip1jmp1, llm), gry(ip1jm, llm)      ! Objet : dissipation horizontale
13    REAL te1dt(llm), te2dt(llm), te3dt(llm)  
14    REAL deltapres(ip1jmp1, llm)      USE dimens_m, ONLY : iim, jjm, llm
15        USE paramet_m, ONLY : iip1, iip2, ip1jmp1, llmp1
16    INTEGER l, ij      USE comdissnew, ONLY : lstardis, nitergdiv, nitergrot, niterh
17        USE inidissip_m, ONLY : dtdiss, tetah, tetaudiv, tetaurot
18    !-----------------------------------------------------------------------  
19        ! Arguments:
20    ! initialisations:      REAL vcov((iim + 1) * jjm, llm), ucov(ip1jmp1, llm), teta(ip1jmp1, llm)
21        REAL, INTENT (IN) :: p(ip1jmp1, llmp1)
22    DO l = 1, llm      REAL dv((iim + 1) * jjm, llm), du(ip1jmp1, llm), dh(ip1jmp1, llm)
23       te1dt(l) = tetaudiv(l)*dtdiss  
24       te2dt(l) = tetaurot(l)*dtdiss      ! Local:
25       te3dt(l) = tetah(l)*dtdiss      REAL gdx(ip1jmp1, llm), gdy((iim + 1) * jjm, llm)
26    END DO      REAL grx(ip1jmp1, llm), gry((iim + 1) * jjm, llm)
27    du = 0.      REAL te1dt(llm), te2dt(llm), te3dt(llm)
28    dv = 0.      REAL deltapres(ip1jmp1, llm)
29    dh = 0.  
30        INTEGER l, ij
31    ! Calcul de la dissipation:  
32        !-----------------------------------------------------------------------
33    ! Calcul de la partie grad (div) :  
34        ! Initializations:
35    IF (lstardis) THEN      te1dt = tetaudiv * dtdiss
36       CALL gradiv2(llm, ucov, vcov, nitergdiv, gdx, gdy)      te2dt = tetaurot * dtdiss
37    ELSE      te3dt = tetah * dtdiss
38       CALL gradiv(llm, ucov, vcov, nitergdiv, gdx, gdy)      du = 0.
39    END IF      dv = 0.
40        dh = 0.
41    DO l = 1, llm  
42       DO ij = 1, iip1      ! Calcul de la dissipation:
43          gdx(ij, l) = 0.  
44          gdx(ij+ip1jm, l) = 0.      ! Calcul de la partie grad (div) :
45       END DO  
46        IF (lstardis) THEN
47       DO ij = iip2, ip1jm         CALL gradiv2(llm, ucov, vcov, nitergdiv, gdx, gdy)
48          du(ij, l) = du(ij, l) - te1dt(l)*gdx(ij, l)      ELSE
49       END DO         CALL gradiv(llm, ucov, vcov, nitergdiv, gdx, gdy)
50       DO ij = 1, ip1jm      END IF
51          dv(ij, l) = dv(ij, l) - te1dt(l)*gdy(ij, l)  
52       END DO      DO l = 1, llm
53    END DO         DO ij = 1, iip1
54              gdx(ij, l) = 0.
55    ! calcul de la partie n X grad (rot) :            gdx(ij+(iim + 1) * jjm, l) = 0.
56           END DO
57    IF (lstardis) THEN  
58       CALL nxgraro2(llm, ucov, vcov, nitergrot, grx, gry)         DO ij = iip2, (iim + 1) * jjm
59    ELSE            du(ij, l) = du(ij, l) - te1dt(l) * gdx(ij, l)
60       CALL nxgrarot(llm, ucov, vcov, nitergrot, grx, gry)         END DO
61    END IF         DO ij = 1, (iim + 1) * jjm
62              dv(ij, l) = dv(ij, l) - te1dt(l) * gdy(ij, l)
63           END DO
64    DO l = 1, llm      END DO
65       DO ij = 1, iip1  
66          grx(ij, l) = 0.      ! calcul de la partie n X grad (rot) :
67       END DO  
68        IF (lstardis) THEN
69       DO ij = iip2, ip1jm         CALL nxgraro2(llm, ucov, vcov, nitergrot, grx, gry)
70          du(ij, l) = du(ij, l) - te2dt(l)*grx(ij, l)      ELSE
71       END DO         CALL nxgrarot(llm, ucov, vcov, nitergrot, grx, gry)
72       DO ij = 1, ip1jm      END IF
73          dv(ij, l) = dv(ij, l) - te2dt(l)*gry(ij, l)  
74       END DO  
75    END DO      DO l = 1, llm
76           DO ij = 1, iip1
77    ! calcul de la partie div (grad) :            grx(ij, l) = 0.
78           END DO
79    IF (lstardis) THEN  
80       DO l = 1, llm         DO ij = iip2, (iim + 1) * jjm
81          DO ij = 1, ip1jmp1            du(ij, l) = du(ij, l) - te2dt(l) * grx(ij, l)
82             deltapres(ij, l) = amax1(0., p(ij, l)-p(ij, l+1))         END DO
83          END DO         DO ij = 1, (iim + 1) * jjm
84       END DO            dv(ij, l) = dv(ij, l) - te2dt(l) * gry(ij, l)
85           END DO
86       CALL divgrad2(llm, teta, deltapres, niterh, gdx)      END DO
87    ELSE  
88       CALL divgrad(llm, teta, niterh, gdx)      ! calcul de la partie div (grad) :
89    END IF  
90        IF (lstardis) THEN
91    DO l = 1, llm         DO l = 1, llm
92       DO ij = 1, ip1jmp1            DO ij = 1, ip1jmp1
93          dh(ij, l) = dh(ij, l) - te3dt(l)*gdx(ij, l)               deltapres(ij, l) = max(0., p(ij, l) - p(ij, l + 1))
94       END DO            END DO
95    END DO         END DO
96    
97           CALL divgrad2(llm, teta, deltapres, niterh, gdx)
98        ELSE
99           CALL divgrad(llm, teta, niterh, gdx)
100        END IF
101    
102        forall (l = 1: llm) dh(:, l) = dh(:, l) - te3dt(l) * gdx(:, l)
103    
104      END SUBROUTINE dissip
105    
106  END SUBROUTINE dissip  end module dissip_m

Legend:
Removed from v.46  
changed lines
  Added in v.47

  ViewVC Help
Powered by ViewVC 1.1.21