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

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

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

revision 26 by guez, Tue Mar 9 15:27:15 2010 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,v 1.1.1.1 2004/05/19 12:53:05  
   ! Avec nouveaux operateurs star :  gradiv2 , divgrad2, nxgraro2  ...  
   ! Auteur:  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        dh = 0.
43       DO ij = 1, iip1  
44          gdx(ij,l) = 0.      ! Calcul de la dissipation:
45          gdx(ij+ip1jm,l) = 0.  
46       END DO      ! Calcul de la partie grad (div) :
47    
48       DO ij = iip2, ip1jm      IF (lstardis) THEN
49          du(ij,l) = du(ij,l) - te1dt(l)*gdx(ij,l)         CALL gradiv2(llm, ucov, vcov, nitergdiv, gdx, gdy, cdivu)
50       END DO      ELSE
51       DO ij = 1, ip1jm         CALL gradiv(llm, ucov, vcov, nitergdiv, gdx, gdy, cdivu)
52          dv(ij,l) = dv(ij,l) - te1dt(l)*gdy(ij,l)      END IF
53       END DO  
54    END DO      DO l = 1, llm
55           DO ij = 1, iip1
56    !   calcul de la partie   n X grad ( rot ):                                        gdx(ij, l) = 0.
57              gdx(ij+(iim + 1) * jjm, l) = 0.
58    IF (lstardis) THEN         END DO
59       CALL nxgraro2(llm,ucov,vcov,nitergrot,grx,gry)  
60    ELSE         DO ij = iip2, (iim + 1) * jjm
61       CALL nxgrarot(llm,ucov,vcov,nitergrot,grx,gry)            du(ij, l) = du(ij, l) - te1dt(l) * gdx(ij, l)
62    END IF         END DO
63           DO ij = 1, (iim + 1) * jjm
64              dv(ij, l) = dv(ij, l) - te1dt(l) * gdy(ij, l)
65    DO l = 1, llm         END DO
66       DO ij = 1, iip1      END DO
67          grx(ij,l) = 0.  
68       END DO      ! calcul de la partie n X grad (rot) :
69    
70       DO ij = iip2, ip1jm      IF (lstardis) THEN
71          du(ij,l) = du(ij,l) - te2dt(l)*grx(ij,l)         CALL nxgraro2(llm, ucov, vcov, nitergrot, grx, gry, crot)
72       END DO      ELSE
73       DO ij = 1, ip1jm         CALL nxgrarot(llm, ucov, vcov, nitergrot, grx, gry, crot)
74          dv(ij,l) = dv(ij,l) - te2dt(l)*gry(ij,l)      END IF
75       END DO  
76    END DO  
77        DO l = 1, llm
78    !   calcul de la partie   div ( grad ):                                         DO ij = 1, iip1
79              grx(ij, l) = 0.
80    IF (lstardis) THEN         END DO
81    
82       DO l = 1, llm         DO ij = iip2, (iim + 1) * jjm
83          DO ij = 1, ip1jmp1            du(ij, l) = du(ij, l) - te2dt(l) * grx(ij, l)
84             deltapres(ij,l) = amax1(0.,p(ij,l)-p(ij,l+1))         END DO
85          END DO         DO ij = 1, (iim + 1) * jjm
86       END DO            dv(ij, l) = dv(ij, l) - te2dt(l) * gry(ij, l)
87           END DO
88       CALL divgrad2(llm,teta,deltapres,niterh,gdx)      END DO
89    ELSE  
90       CALL divgrad(llm,teta,niterh,gdx)      ! calcul de la partie div (grad) :
91    END IF  
92        IF (lstardis) THEN
93    DO l = 1, llm         DO l = 1, llm
94       DO ij = 1, ip1jmp1            DO ij = 1, ip1jmp1
95          dh(ij,l) = dh(ij,l) - te3dt(l)*gdx(ij,l)               deltapres(ij, l) = max(0., p(ij, l) - p(ij, l + 1))
96       END DO            END DO
97    END DO         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.26  
changed lines
  Added in v.54

  ViewVC Help
Powered by ViewVC 1.1.21