/[lmdze]/trunk/dyn3d/Dissipation/nxgraro2.f90
ViewVC logotype

Contents of /trunk/dyn3d/Dissipation/nxgraro2.f90

Parent Directory Parent Directory | Revision Log Revision Log


Revision 328 - (show annotations)
Thu Jun 13 14:40:06 2019 UTC (4 years, 11 months ago) by guez
File size: 1710 byte(s)
Change all `.f` suffixes to `.f90`. (The opposite was done in revision
82.)  Because of change of philosopy in GNUmakefile: we already had a
rewritten rule for `.f`, so it does not make the makefile longer to
replace it by a rule for `.f90`. And it spares us options of
makedepf90 and of the compiler. Also we prepare the way for a simpler
`CMakeLists.txt`.

1 module nxgraro2_m
2
3 IMPLICIT NONE
4
5 contains
6
7 SUBROUTINE nxgraro2(xcov, ycov, lr, grx, gry, crot)
8
9 ! From LMDZ4/libf/dyn3d/nxgraro2.F, version 1.1.1.1, 2004/05/19 12:53:06
10
11 ! P. Le Van
12 ! Calcul de nxgrad(rot) du vecteur (xcov, ycov).
13
14 USE filtreg_v_m, ONLY: filtreg_v
15 use nr_util, only: assert, assert_eq
16 use nxgrad_m, only: nxgrad
17 use rotatf_m, only: rotatf
18
19 ! Composantes covariantes :
20 REAL, intent(in):: xcov(:, :, :) ! (iim + 1, jjm + 1, klevel)
21 REAL, intent(in):: ycov(:, :, :) ! (iim + 1, jjm, klevel)
22
23 integer, intent(in):: lr
24 REAL, intent(out):: grx(:, :, :) ! (iim + 1, jjm + 1, klevel)
25 REAL, intent(out):: gry(:, :, :) ! (iim + 1, jjm, klevel)
26 real, intent(in):: crot
27
28 ! Local:
29 INTEGER klevel, iter
30 REAL rot(size(ycov, 1), size(ycov, 2), size(ycov, 3)) , nugradrs
31
32 !----------------------------------------------------------
33
34 call assert(size(xcov, 1) == [size(ycov, 1), size(grx, 1), size(gry, 1)], &
35 "nxgraro2 iim")
36 call assert(size(xcov, 2) - 1 == [size(ycov, 2), size(grx, 2) - 1, &
37 size(gry, 2)], "nxgraro2 jjm")
38 klevel = assert_eq(size(xcov, 3), size(ycov, 3), size(grx, 3), &
39 size(gry, 3), "nxgraro2 klevel")
40
41 grx = xcov
42 gry = ycov
43
44 CALL rotatf(klevel, grx, gry, rot)
45 CALL laplacien_rot(klevel, rot, rot, grx, gry)
46
47 ! Itération de l'opérateur laplacien_rotgam
48 DO iter = 1, lr - 2
49 CALL laplacien_rotgam(klevel, rot, rot)
50 ENDDO
51
52 CALL filtreg_v(rot, intensive = .true.)
53 CALL nxgrad(klevel, rot, grx, gry)
54
55 nugradrs = (-1.)**lr * crot
56 grx = grx * nugradrs
57 gry = gry * nugradrs
58
59 END SUBROUTINE nxgraro2
60
61 end module nxgraro2_m

  ViewVC Help
Powered by ViewVC 1.1.21