source: LMDZ5/trunk/libf/dyn3dmem/leapfrog_mod.F90 @ 1987

Last change on this file since 1987 was 1987, checked in by Ehouarn Millour, 11 years ago

Add updating pressure, mass and Exner function (ie: all variables which depend on surface pressure) after adding physics tendencies (which include a surface pressure tendency).
Note that this change induces slight changes in GCM results with respect to previous svn version of the code, even if surface pressure tendency is zero (because of recomputation of polar values as an average over polar points on the dynamics grid).
EM

  • 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: 5.0 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 :: alpha(:,:)
30  REAL,POINTER,SAVE :: beta(:,:)
31  REAL,POINTER,SAVE :: flxw(:,:)
32  REAL,POINTER,SAVE :: unat(:,:)
33  REAL,POINTER,SAVE :: vnat(:,:)
34 
35
36 
37CONTAINS
38
39  SUBROUTINE leapfrog_allocate
40  USE bands
41  USE allocate_field_mod
42  USE parallel_lmdz
43  USE dimensions_mod
44  USE infotrac
45  USE caldyn_mod,ONLY : caldyn_allocate
46  USE integrd_mod,ONLY : integrd_allocate
47  USE caladvtrac_mod,ONLY : caladvtrac_allocate
48  USE call_calfis_mod,ONLY : call_calfis_allocate
49  USE call_dissip_mod, ONLY : call_dissip_allocate
50  IMPLICIT NONE
51  TYPE(distrib),POINTER :: d
52
53
54    d=>distrib_caldyn
55    CALL allocate_u(ucov,llm,d)
56    CALL allocate_v(vcov,llm,d)
57    CALL allocate_u(teta,llm,d)
58    CALL allocate_u(ps,d)
59    CALL allocate_u(masse,llm,d)
60    CALL allocate_u(phis,d)
61    CALL allocate_u(q,llm,nqtot,d)
62    CALL allocate_u(p,llmp1,d)
63    CALL allocate_u(pks,d)
64    CALL allocate_u(pk,llm,d)
65    CALL allocate_u(pkf,llm,d)
66    CALL allocate_u(phi,llm,d)
67    CALL allocate_u(w,llm,d)
68    CALL allocate_u(pbaru,llm,d)
69    CALL allocate_v(pbarv,llm,d)
70    CALL allocate_v(vcovm1,llm,d)
71    CALL allocate_u(ucovm1,llm,d)
72    CALL allocate_u(tetam1,llm,d)
73    CALL allocate_u(psm1,d)
74    CALL allocate_u(massem1,llm,d)
75    CALL allocate_v(dv,llm,d)
76    CALL allocate_u(du,llm,d)
77    CALL allocate_u(dteta,llm,d)
78    CALL allocate_u(dp,d)
79    CALL allocate_u(dq,llm,nqtot,d)
80    CALL allocate_u(finvmaold,llm,d)
81    CALL allocate_u(alpha,llm,d)
82    CALL allocate_u(beta,llm,d)
83    CALL allocate_u(flxw,llm,d)
84    CALL allocate_u(unat,llm,d)
85    CALL allocate_v(vnat,llm,d)
86   
87    CALL caldyn_allocate
88    CALL integrd_allocate
89    CALL caladvtrac_allocate
90    CALL call_calfis_allocate
91    CALL call_dissip_allocate
92       
93  END SUBROUTINE leapfrog_allocate
94 
95  SUBROUTINE leapfrog_switch_caldyn(dist)
96  USE allocate_field_mod
97  USE bands
98  USE parallel_lmdz
99  USE caldyn_mod,ONLY : caldyn_switch_caldyn
100  USE integrd_mod,ONLY : integrd_switch_caldyn
101  USE caladvtrac_mod,ONLY : caladvtrac_switch_caldyn
102  IMPLICIT NONE
103    TYPE(distrib),INTENT(IN) :: dist
104
105    CALL switch_u(ucov,distrib_caldyn,dist)
106    CALL switch_v(vcov,distrib_caldyn,dist)
107    CALL switch_u(teta,distrib_caldyn,dist)
108    CALL switch_u(ps,distrib_caldyn,dist)
109    CALL switch_u(masse,distrib_caldyn,dist)
110    CALL switch_u(phis,distrib_caldyn,dist,up=halo_max,down=halo_max)
111    CALL switch_u(q,distrib_caldyn,dist)
112    CALL switch_u(p,distrib_caldyn,dist)
113    CALL switch_u(pks,distrib_caldyn,dist)
114    CALL switch_u(pk,distrib_caldyn,dist)
115    CALL switch_u(pkf,distrib_caldyn,dist)
116    CALL switch_u(phi,distrib_caldyn,dist)
117    CALL switch_u(w,distrib_caldyn,dist)
118    CALL switch_u(pbaru,distrib_caldyn,dist)
119    CALL switch_v(pbarv,distrib_caldyn,dist)
120    CALL switch_v(vcovm1,distrib_caldyn,dist)
121    CALL switch_u(ucovm1,distrib_caldyn,dist)
122    CALL switch_u(tetam1,distrib_caldyn,dist)
123    CALL switch_u(psm1,distrib_caldyn,dist)
124    CALL switch_u(massem1,distrib_caldyn,dist)
125    CALL switch_v(dv,distrib_caldyn,dist)
126    CALL switch_u(du,distrib_caldyn,dist)
127    CALL switch_u(dteta,distrib_caldyn,dist)
128    CALL switch_u(dp,distrib_caldyn,dist)
129    CALL switch_u(dq,distrib_caldyn,dist)
130    CALL switch_u(finvmaold,distrib_caldyn,dist)
131    CALL switch_u(alpha,distrib_caldyn,dist)
132    CALL switch_u(beta,distrib_caldyn,dist)
133    CALL switch_u(flxw,distrib_caldyn,dist)
134    CALL switch_u(unat,distrib_caldyn,dist)
135    CALL switch_v(vnat,distrib_caldyn,dist)
136
137   
138    CALL caldyn_switch_caldyn(dist)
139    CALL integrd_switch_caldyn(dist)
140    CALL caladvtrac_switch_caldyn(dist)
141   
142  END SUBROUTINE leapfrog_switch_caldyn
143 
144  SUBROUTINE leapfrog_switch_dissip(dist)
145  USE allocate_field_mod
146  USE bands
147  USE parallel_lmdz
148  USE call_dissip_mod,ONLY : call_dissip_switch_dissip
149  IMPLICIT NONE
150    TYPE(distrib),INTENT(IN) :: dist
151
152    CALL call_dissip_switch_dissip(dist)
153   
154  END SUBROUTINE leapfrog_switch_dissip
155 
156END MODULE leapfrog_mod 
157
158
159
160
161
162
163
Note: See TracBrowser for help on using the repository browser.