/[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 44 by guez, Wed Apr 13 12:29:18 2011 UTC revision 54 by guez, Tue Dec 6 15:07:04 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, cdivu, crot, &
18    !-----------------------------------------------------------------------           cdivh
19        use gradiv2_m, only: gradiv2
20    ! initialisations:  
21        ! Arguments:
22    DO l = 1, llm      REAL vcov((iim + 1) * jjm, llm), ucov(ip1jmp1, llm), teta(ip1jmp1, llm)
23       te1dt(l) = tetaudiv(l)*dtdiss      REAL, INTENT (IN) :: p(ip1jmp1, llmp1)
24       te2dt(l) = tetaurot(l)*dtdiss      REAL dv((iim + 1) * jjm, llm), du(ip1jmp1, llm), dh(ip1jmp1, llm)
25       te3dt(l) = tetah(l)*dtdiss  
26    END DO      ! Local:
27    du = 0.      REAL gdx(ip1jmp1, llm), gdy((iim + 1) * jjm, llm)
28    dv = 0.      REAL grx(ip1jmp1, llm), gry((iim + 1) * jjm, llm)
29    dh = 0.      REAL te1dt(llm), te2dt(llm), te3dt(llm)
30        REAL deltapres(ip1jmp1, llm)
31    ! Calcul de la dissipation:  
32        INTEGER l, ij
33    ! Calcul de la partie grad (div) :  
34        !-----------------------------------------------------------------------
35    IF (lstardis) THEN  
36       CALL gradiv2(llm, ucov, vcov, nitergdiv, gdx, gdy)      ! Initializations:
37    ELSE      te1dt = tetaudiv * dtdiss
38       CALL gradiv(llm, ucov, vcov, nitergdiv, gdx, gdy)      te2dt = tetaurot * dtdiss
39    END IF      te3dt = tetah * dtdiss
40        du = 0.
41    DO l = 1, llm      dv = 0.
42       DO ij = 1, iip1      dh = 0.
43          gdx(ij, l) = 0.  
44          gdx(ij+ip1jm, l) = 0.      ! Calcul de la dissipation:
45       END DO  
46        ! Calcul de la partie grad (div) :
47       DO ij = iip2, ip1jm  
48          du(ij, l) = du(ij, l) - te1dt(l)*gdx(ij, l)      IF (lstardis) THEN
49       END DO         CALL gradiv2(llm, ucov, vcov, nitergdiv, gdx, gdy, cdivu)
50       DO ij = 1, ip1jm      ELSE
51          dv(ij, l) = dv(ij, l) - te1dt(l)*gdy(ij, l)         CALL gradiv(llm, ucov, vcov, nitergdiv, gdx, gdy, cdivu)
52       END DO      END IF
53    END DO  
54        DO l = 1, llm
55    ! calcul de la partie n X grad (rot) :         DO ij = 1, iip1
56              gdx(ij, l) = 0.
57    IF (lstardis) THEN            gdx(ij+(iim + 1) * jjm, l) = 0.
58       CALL nxgraro2(llm, ucov, vcov, nitergrot, grx, gry)         END DO
59    ELSE  
60       CALL nxgrarot(llm, ucov, vcov, nitergrot, grx, gry)         DO ij = iip2, (iim + 1) * jjm
61    END IF            du(ij, l) = du(ij, l) - te1dt(l) * gdx(ij, l)
62           END DO
63           DO ij = 1, (iim + 1) * jjm
64    DO l = 1, llm            dv(ij, l) = dv(ij, l) - te1dt(l) * gdy(ij, l)
65       DO ij = 1, iip1         END DO
66          grx(ij, l) = 0.      END DO
67       END DO  
68        ! calcul de la partie n X grad (rot) :
69       DO ij = iip2, ip1jm  
70          du(ij, l) = du(ij, l) - te2dt(l)*grx(ij, l)      IF (lstardis) THEN
71       END DO         CALL nxgraro2(llm, ucov, vcov, nitergrot, grx, gry, crot)
72       DO ij = 1, ip1jm      ELSE
73          dv(ij, l) = dv(ij, l) - te2dt(l)*gry(ij, l)         CALL nxgrarot(llm, ucov, vcov, nitergrot, grx, gry, crot)
74       END DO      END IF
75    END DO  
76    
77    ! calcul de la partie div (grad) :      DO l = 1, llm
78           DO ij = 1, iip1
79    IF (lstardis) THEN            grx(ij, l) = 0.
80       DO l = 1, llm         END DO
81          DO ij = 1, ip1jmp1  
82             deltapres(ij, l) = amax1(0., p(ij, l)-p(ij, l+1))         DO ij = iip2, (iim + 1) * jjm
83          END DO            du(ij, l) = du(ij, l) - te2dt(l) * grx(ij, l)
84       END DO         END DO
85           DO ij = 1, (iim + 1) * jjm
86       CALL divgrad2(llm, teta, deltapres, niterh, gdx)            dv(ij, l) = dv(ij, l) - te2dt(l) * gry(ij, l)
87    ELSE         END DO
88       CALL divgrad(llm, teta, niterh, gdx)      END DO
89    END IF  
90        ! calcul de la partie div (grad) :
91    DO l = 1, llm  
92       DO ij = 1, ip1jmp1      IF (lstardis) THEN
93          dh(ij, l) = dh(ij, l) - te3dt(l)*gdx(ij, l)         DO l = 1, llm
94       END DO            DO ij = 1, ip1jmp1
95    END DO               deltapres(ij, l) = max(0., p(ij, l) - p(ij, l + 1))
96              END DO
97           END DO
98    
99           CALL divgrad2(llm, teta, deltapres, niterh, gdx, cdivh)
100        ELSE
101           CALL divgrad(llm, teta, niterh, gdx, cdivh)
102        END IF
103    
104        forall (l = 1: llm) dh(:, l) = dh(:, l) - te3dt(l) * gdx(:, l)
105    
106      END SUBROUTINE dissip
107    
108  END SUBROUTINE dissip  end module dissip_m

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

  ViewVC Help
Powered by ViewVC 1.1.21