/[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

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

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

  ViewVC Help
Powered by ViewVC 1.1.21