/[lmdze]/trunk/dyn3d/grid_change.f
ViewVC logotype

Contents of /trunk/dyn3d/grid_change.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 168 - (show annotations)
Wed Sep 9 10:41:47 2015 UTC (8 years, 8 months ago) by guez
Original Path: trunk/Sources/dyn3d/grid_change.f
File size: 2806 byte(s)
In order to be able to choose finer resolutions, set large memory
model in compiler options and use dynamic libraries.

Variables rlatd, rlond, cuphy and cvphy of module comgeomphy were
never used. (In LMDZ, they are used only for Orchid.)

There is a bug in PGI Fortran 13.10 that does not accept the
combination of forall, pack and spread in regr_pr_av and
regr_pr_int. In order to circumvent this bug, created the function
gr_dyn_phy.

In program test_inifilr, use a single latitude coordinate for north
and south.

1 module grid_change
2
3 use dimens_m, only: iim, jjm
4
5 IMPLICIT NONE
6
7 logical, save:: dyn_phy(iim + 1, jjm + 1)
8 ! (mask for distinct points in the scalar grid and the "u" grid,
9 ! first index is for longitude, second index is for latitude)
10
11 private iim, jjm
12
13 contains
14
15 subroutine init_dyn_phy
16
17 ! Construct the mask:
18 dyn_phy = .true.
19 dyn_phy(2:, 1) = .false.
20 dyn_phy(2:, jjm + 1) = .false.
21 dyn_phy(iim + 1, 2:jjm) = .false.
22 ! Note that "count(dyn_phy)" equals "klon"
23
24 end subroutine init_dyn_phy
25
26 !********************************************
27
28 function gr_fi_dyn(pfi)
29
30 ! From gr_fi_dyn.F, version 1.1.1.1 2004/05/19 12:53:05
31 ! Passage d'un champ de la grille physique \`a la grille dynamique
32
33 use dimphy, only: klon
34
35 REAL, intent(in):: pfi(:) ! (klon)
36 real gr_fi_dyn(iim + 1, jjm + 1)
37
38 ! Variable local to the procedure:
39 real field(iim + 1, jjm + 1)
40
41 !-----------------------------------------------------------------------
42
43 if (size(pfi) /= klon) stop "gr_fi_dyn"
44
45 ! Traitement des p\^oles :
46 field(2:, 1) = pfi(1)
47 field(2:, jjm + 1) = pfi(klon)
48 ! (We leave undefined elements in "field")
49
50 gr_fi_dyn = unpack(pfi, dyn_phy, field)
51 ! Undefined elements at last longitude in "gr_fi_dyn" come from
52 ! undefined elements in "field".
53 ! Overwrite them now, knowing that last longitude equals first longitude:
54 gr_fi_dyn(iim + 1, 2:jjm) = gr_fi_dyn(1, 2:jjm)
55
56 END function gr_fi_dyn
57
58 !********************************************
59
60 function gr_phy_write_2d(pfi)
61
62 ! From phylmd/physiq.F, version 1.22 2006/02/20 09:38:28
63 ! Transforme une variable de la grille physique \`a la grille d'\'ecriture.
64 ! The grid for output files does not duplicate the first longitude
65 ! in the last longitude.
66
67 use dimphy, only: klon
68
69 REAL, intent(in):: pfi(:) ! (klon)
70 real gr_phy_write_2d(iim, jjm + 1)
71
72 ! Variable local to the procedure:
73 real field(iim, jjm + 1)
74
75 !-----------------------------------------------------------------------
76
77 if (size(pfi) /= klon) stop "gr_phy_write_2d"
78
79 ! Traitement des p\^oles :
80 field(2:, 1) = pfi(1)
81 field(2:, jjm + 1) = pfi(klon)
82
83 gr_phy_write_2d = unpack(pfi, dyn_phy(:iim, :), field)
84
85 END function gr_phy_write_2d
86
87 !********************************************
88
89 function gr_dyn_phy(v)
90
91 ! Passage d'un champ 3D de la grille dynamique \`a la grille physique
92
93 use dimphy, only: klon
94
95 REAL, intent(in):: v(:, :, :) ! (iim + 1, jjm + 1, :)
96 real gr_dyn_phy(klon, size(v, 3))
97
98 ! Local:
99 integer k
100
101 !-----------------------------------------------------------------------
102
103 forall (k = 1:size(v, 3)) gr_dyn_phy(:, k) = pack(v(:, :, k), dyn_phy)
104
105 END function gr_dyn_phy
106
107 end module grid_change

  ViewVC Help
Powered by ViewVC 1.1.21