source: LMDZ6/branches/IPSLCM6.0.15/libf/dyn3dmem/leapfrog_mod.F90

Last change on this file was 2021, checked in by lguez, 10 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.