source: LMDZ5/branches/IPSLCM6.0.12/libf/dyn3dmem/leapfrog_mod.F90 @ 5080

Last change on this file since 5080 was 2021, checked in by lguez, 11 years ago

Removed unused variables pks, pk, pkf from main program unit gcm.

Encapsulated procedures exner_hyb, exner_hyb_p, exner_hyb_loc,
exner_milieu, exner_milieu_p and exner_milieu_loc into
modules. (Compulsory to allow optional arguments.)

In the procedures exner_hyb, exner_hyb_p, exner_hyb_loc, donwgraded
arguments alpha and beta to local variables. In exner_milieu,
exner_milieu_p and exner_milieu_loc, removed beta altogether. In the
six procedures exner_*, made pkf an optional argument. Made some
cosmetic modifications in order to keep the six procedures exner_* as
close as possible.

In the six procedures exner_*, removed the averaging of pks at the
poles: this is not useful because ps is already the same at all
longitudes at the poles. This modification changes the results of the
program. Motivation: had to do this for exner_hyb because we call it
from test_disvert with a few surface pressure values.

In all the procedures calling exner_*, removed the variables alpha and
beta. Also removed variables alpha and beta from module leapfrog_mod
and from module call_calfis_mod.

Removed actual argument pkf in call to exner_hyb* and exner_milieu*
from guide_interp, guide_main, iniacademic and iniacademic_loc (pkf
was not used in those procedures).

Argument workvar of startget_dyn is used only if varname is tpot or

  1. When varname is tpot or q, the actual argument associated to

workvar in etat0_netcdf is not y. So y in etat0_netcdf is a
place-holder, never used. So we remove optional argument y in the
calls to exner_hyb and exner_milieu from etat0_netcdf.

Created procedure test_disvert, called only by etat0_netcdf. This
procedure tests the order of pressure values at half-levels and full
levels.

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
File size: 4.8 KB
Line 
1MODULE leapfrog_mod
2
3  REAL,POINTER,SAVE :: ucov(:,:) ! zonal covariant wind
4  REAL,POINTER,SAVE :: vcov(:,:) ! meridional covariant wind
5  REAL,POINTER,SAVE :: teta(:,:) ! potential temperature
6  REAL,POINTER,SAVE :: ps(:) ! surface pressure
7  REAL,POINTER,SAVE :: masse(:,:) ! air mass
8  REAL,POINTER,SAVE :: phis(:) ! geopotential at the surface
9  REAL,POINTER,SAVE :: q(:,:,:) ! advected tracers
10  REAL,POINTER,SAVE :: p(:,:) ! interlayer pressure
11  REAL,POINTER,SAVE :: pks(:) ! Exner at the surface
12  REAL,POINTER,SAVE :: pk(:,:) ! Exner at mid-layer
13  REAL,POINTER,SAVE :: pkf(:,:) ! filtered Exner
14  REAL,POINTER,SAVE :: phi(:,:) ! geopotential
15  REAL,POINTER,SAVE :: w(:,:) ! vertical velocity
16  REAL,POINTER,SAVE :: pbaru(:,:)
17  REAL,POINTER,SAVE :: pbarv(:,:)
18  REAL,POINTER,SAVE :: vcovm1(:,:)
19  REAL,POINTER,SAVE :: ucovm1(:,:)
20  REAL,POINTER,SAVE :: tetam1(:,:)
21  REAL,POINTER,SAVE :: psm1(:)
22  REAL,POINTER,SAVE :: massem1(:,:)
23  REAL,POINTER,SAVE :: dv(:,:)
24  REAL,POINTER,SAVE :: du(:,:)
25  REAL,POINTER,SAVE :: dteta(:,:)
26  REAL,POINTER,SAVE :: dp(:)
27  REAL,POINTER,SAVE :: dq(:,:,:)
28  REAL,POINTER,SAVE :: finvmaold(:,:)
29  REAL,POINTER,SAVE :: flxw(:,:)
30  REAL,POINTER,SAVE :: unat(:,:)
31  REAL,POINTER,SAVE :: vnat(:,:)
32 
33
34 
35CONTAINS
36
37  SUBROUTINE leapfrog_allocate
38  USE bands
39  USE allocate_field_mod
40  USE parallel_lmdz
41  USE dimensions_mod
42  USE infotrac
43  USE caldyn_mod,ONLY : caldyn_allocate
44  USE integrd_mod,ONLY : integrd_allocate
45  USE caladvtrac_mod,ONLY : caladvtrac_allocate
46  USE call_calfis_mod,ONLY : call_calfis_allocate
47  USE call_dissip_mod, ONLY : call_dissip_allocate
48  IMPLICIT NONE
49  TYPE(distrib),POINTER :: d
50
51
52    d=>distrib_caldyn
53    CALL allocate_u(ucov,llm,d)
54    CALL allocate_v(vcov,llm,d)
55    CALL allocate_u(teta,llm,d)
56    CALL allocate_u(ps,d)
57    CALL allocate_u(masse,llm,d)
58    CALL allocate_u(phis,d)
59    CALL allocate_u(q,llm,nqtot,d)
60    CALL allocate_u(p,llmp1,d)
61    CALL allocate_u(pks,d)
62    CALL allocate_u(pk,llm,d)
63    CALL allocate_u(pkf,llm,d)
64    CALL allocate_u(phi,llm,d)
65    CALL allocate_u(w,llm,d)
66    CALL allocate_u(pbaru,llm,d)
67    CALL allocate_v(pbarv,llm,d)
68    CALL allocate_v(vcovm1,llm,d)
69    CALL allocate_u(ucovm1,llm,d)
70    CALL allocate_u(tetam1,llm,d)
71    CALL allocate_u(psm1,d)
72    CALL allocate_u(massem1,llm,d)
73    CALL allocate_v(dv,llm,d)
74    CALL allocate_u(du,llm,d)
75    CALL allocate_u(dteta,llm,d)
76    CALL allocate_u(dp,d)
77    CALL allocate_u(dq,llm,nqtot,d)
78    CALL allocate_u(finvmaold,llm,d)
79    CALL allocate_u(flxw,llm,d)
80    CALL allocate_u(unat,llm,d)
81    CALL allocate_v(vnat,llm,d)
82   
83    CALL caldyn_allocate
84    CALL integrd_allocate
85    CALL caladvtrac_allocate
86    CALL call_calfis_allocate
87    CALL call_dissip_allocate
88       
89  END SUBROUTINE leapfrog_allocate
90 
91  SUBROUTINE leapfrog_switch_caldyn(dist)
92  USE allocate_field_mod
93  USE bands
94  USE parallel_lmdz
95  USE caldyn_mod,ONLY : caldyn_switch_caldyn
96  USE integrd_mod,ONLY : integrd_switch_caldyn
97  USE caladvtrac_mod,ONLY : caladvtrac_switch_caldyn
98  IMPLICIT NONE
99    TYPE(distrib),INTENT(IN) :: dist
100
101    CALL switch_u(ucov,distrib_caldyn,dist)
102    CALL switch_v(vcov,distrib_caldyn,dist)
103    CALL switch_u(teta,distrib_caldyn,dist)
104    CALL switch_u(ps,distrib_caldyn,dist)
105    CALL switch_u(masse,distrib_caldyn,dist)
106    CALL switch_u(phis,distrib_caldyn,dist,up=halo_max,down=halo_max)
107    CALL switch_u(q,distrib_caldyn,dist)
108    CALL switch_u(p,distrib_caldyn,dist)
109    CALL switch_u(pks,distrib_caldyn,dist)
110    CALL switch_u(pk,distrib_caldyn,dist)
111    CALL switch_u(pkf,distrib_caldyn,dist)
112    CALL switch_u(phi,distrib_caldyn,dist)
113    CALL switch_u(w,distrib_caldyn,dist)
114    CALL switch_u(pbaru,distrib_caldyn,dist)
115    CALL switch_v(pbarv,distrib_caldyn,dist)
116    CALL switch_v(vcovm1,distrib_caldyn,dist)
117    CALL switch_u(ucovm1,distrib_caldyn,dist)
118    CALL switch_u(tetam1,distrib_caldyn,dist)
119    CALL switch_u(psm1,distrib_caldyn,dist)
120    CALL switch_u(massem1,distrib_caldyn,dist)
121    CALL switch_v(dv,distrib_caldyn,dist)
122    CALL switch_u(du,distrib_caldyn,dist)
123    CALL switch_u(dteta,distrib_caldyn,dist)
124    CALL switch_u(dp,distrib_caldyn,dist)
125    CALL switch_u(dq,distrib_caldyn,dist)
126    CALL switch_u(finvmaold,distrib_caldyn,dist)
127    CALL switch_u(flxw,distrib_caldyn,dist)
128    CALL switch_u(unat,distrib_caldyn,dist)
129    CALL switch_v(vnat,distrib_caldyn,dist)
130
131   
132    CALL caldyn_switch_caldyn(dist)
133    CALL integrd_switch_caldyn(dist)
134    CALL caladvtrac_switch_caldyn(dist)
135   
136  END SUBROUTINE leapfrog_switch_caldyn
137 
138  SUBROUTINE leapfrog_switch_dissip(dist)
139  USE allocate_field_mod
140  USE bands
141  USE parallel_lmdz
142  USE call_dissip_mod,ONLY : call_dissip_switch_dissip
143  IMPLICIT NONE
144    TYPE(distrib),INTENT(IN) :: dist
145
146    CALL call_dissip_switch_dissip(dist)
147   
148  END SUBROUTINE leapfrog_switch_dissip
149 
150END MODULE leapfrog_mod 
151
152
153
154
155
156
157
Note: See TracBrowser for help on using the repository browser.