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

Contents of /trunk/dyn3d/Dissipation/gradiv2.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 65 - (show annotations)
Thu Sep 20 09:57:03 2012 UTC (11 years, 8 months ago) by guez
Original Path: trunk/libf/dyn3d/Dissipation/gradiv2.f90
File size: 1965 byte(s)
Removed unused procedure "divgrad".

In procedure "dissip", save memory by using intermediary arrays "gdx"
and "gdy" several times instead of additional array "grx" and "gry".

In procedure "inidissip", write "dtdiss * teta*" instead of "teta*".

In "comvert", change name of s_sampling from "LMD5" to "tropo" and
from "strato2" to "strato".

1 module gradiv2_m
2
3 IMPLICIT NONE
4
5 contains
6
7 SUBROUTINE gradiv2(xcov, ycov, ld, gdx, gdy, cdivu)
8
9 ! From LMDZ4/libf/dyn3d/gradiv2.F, version 1.1.1.1 2004/05/19 12:53:07
10 ! P. Le Van
11 ! Calcul du gradient de la divergence du vecteur v.
12
13 USE comgeom, ONLY: cuvscvgam1, cvuscugam1, unsair_gam1, unsapolnga1, &
14 unsapolsga1
15 USE dimens_m, ONLY: iim, jjm, llm
16 use divergf_m, only: divergf
17 USE filtreg_m, ONLY: filtreg
18 use grad_m, only: grad
19 use laplacien_m, only: laplacien
20 use nr_util, only: assert_eq, assert
21
22 ! Composantes covariantes de v :
23 REAL, intent(in):: xcov(:, :, :) ! (iim + 1, jjm + 1, klevel)
24 REAL, intent(in):: ycov(:, :, :) ! (iim + 1, jjm, klevel)
25
26 integer, intent(in):: ld
27 REAL, intent(out):: gdx(:, :, :) ! (iim + 1, jjm + 1, klevel)
28 REAL, intent(out):: gdy(:, :, :) ! (iim + 1, jjm, klevel)
29 real, intent(in):: cdivu
30
31 ! Variables locales :
32 REAL nugrads, div(iim + 1, jjm + 1, llm)
33 INTEGER iter, klevel
34
35 !--------------------------------------------------------------
36
37 call assert((/size(xcov, 1), size(ycov, 1), size(gdx, 1), size(gdy, 1)/) &
38 == iim + 1, "gradiv2 iim")
39 call assert((/size(xcov, 2) - 1, size(ycov, 2), size(gdx, 2) - 1, &
40 size(gdy, 2)/) == jjm, "gradiv2 iim")
41 klevel = assert_eq(size(xcov, 3), size(ycov, 3), size(gdx, 3), &
42 size(gdy, 3), "gradiv2 klevel")
43
44 CALL divergf(klevel, xcov, ycov, div)
45
46 IF (ld > 1) THEN
47 CALL laplacien(klevel, div)
48
49 ! Itération de l'opérateur laplacien_gam
50 DO iter = 1, ld -2
51 CALL laplacien_gam(klevel, cuvscvgam1, cvuscugam1, unsair_gam1, &
52 unsapolnga1, unsapolsga1, div, div)
53 END DO
54 ENDIF
55
56 CALL filtreg(div, jjm + 1, klevel, 2, 1, .TRUE.)
57 CALL grad(klevel, div, gdx, gdy)
58 nugrads = (-1.)**ld * cdivu
59
60 gdx = gdx * nugrads
61 gdy = gdy * nugrads
62
63 END SUBROUTINE gradiv2
64
65 end module gradiv2_m

  ViewVC Help
Powered by ViewVC 1.1.21