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

  ViewVC Help
Powered by ViewVC 1.1.21