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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 57 - (show annotations)
Mon Jan 30 12:54:02 2012 UTC (12 years, 3 months ago) by guez
Original Path: trunk/libf/dyn3d/Dissipation/gradiv2.f90
File size: 1924 byte(s)
Write used namelists to file "" instead of standard output.

Avoid aliasing in "inidissip" in calls to "divgrad2", "divgrad",
"gradiv2", "gradiv", "nxgraro2" and "nxgrarot". Add a degenerate
dimension to arrays so they have rank 3, like the dummy arguments in
"divgrad2", "divgrad", "gradiv2", "gradiv", "nxgraro2" and "nxgrarot".

Extract the initialization part from "bilan_dyn" and make a separate
procedure, "init_dynzon", from it.

Move variables from modules "iniprint" and "logic" to module
"conf_gcm_m".

Promote internal procedures of "fxy" to private procedures of module
"fxy_m".

Extracted documentation from "inigeom". Removed useless "save"
attributes. Removed useless intermediate variables. Extracted
processing of poles from loop on latitudes. Write coordinates to file
"longitude_latitude.txt" instead of standard output.

Do not use ozone tracer for radiative transfer.

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

  ViewVC Help
Powered by ViewVC 1.1.21