source: LMDZ6/trunk/libf/dyn3dmem/leapfrog_mod.f90 @ 5279

Last change on this file since 5279 was 5272, checked in by abarral, 33 hours ago

Turn paramet.h into a module

  • 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.9 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, ONLY: iim, jjm, llm, ndm
42  USE paramet_mod_h, ONLY: iip1, iip2, iip3, jjp1, llmp1, llmp2, llmm1, kftd, ip1jm, ip1jmp1, &
43          ip1jmi1, ijp1llm, ijmllm, mvar, jcfil, jcfllm
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(flxw,llm,d)
82    CALL allocate_u(unat,llm,d)
83    CALL allocate_v(vnat,llm,d)
84   
85    CALL caldyn_allocate
86    CALL integrd_allocate
87    CALL caladvtrac_allocate
88    CALL call_calfis_allocate
89    CALL call_dissip_allocate
90       
91  END SUBROUTINE leapfrog_allocate
92 
93  SUBROUTINE leapfrog_switch_caldyn(dist)
94  USE allocate_field_mod
95  USE bands
96  USE parallel_lmdz
97  USE caldyn_mod,ONLY : caldyn_switch_caldyn
98  USE integrd_mod,ONLY : integrd_switch_caldyn
99  USE caladvtrac_mod,ONLY : caladvtrac_switch_caldyn
100  IMPLICIT NONE
101    TYPE(distrib),INTENT(IN) :: dist
102
103    CALL switch_u(ucov,distrib_caldyn,dist)
104    CALL switch_v(vcov,distrib_caldyn,dist)
105    CALL switch_u(teta,distrib_caldyn,dist)
106    CALL switch_u(ps,distrib_caldyn,dist)
107    CALL switch_u(masse,distrib_caldyn,dist)
108    CALL switch_u(phis,distrib_caldyn,dist,up=halo_max,down=halo_max)
109    CALL switch_u(q,distrib_caldyn,dist)
110    CALL switch_u(p,distrib_caldyn,dist)
111    CALL switch_u(pks,distrib_caldyn,dist)
112    CALL switch_u(pk,distrib_caldyn,dist)
113    CALL switch_u(pkf,distrib_caldyn,dist)
114    CALL switch_u(phi,distrib_caldyn,dist)
115    CALL switch_u(w,distrib_caldyn,dist)
116    CALL switch_u(pbaru,distrib_caldyn,dist)
117    CALL switch_v(pbarv,distrib_caldyn,dist)
118    CALL switch_v(vcovm1,distrib_caldyn,dist)
119    CALL switch_u(ucovm1,distrib_caldyn,dist)
120    CALL switch_u(tetam1,distrib_caldyn,dist)
121    CALL switch_u(psm1,distrib_caldyn,dist)
122    CALL switch_u(massem1,distrib_caldyn,dist)
123    CALL switch_v(dv,distrib_caldyn,dist)
124    CALL switch_u(du,distrib_caldyn,dist)
125    CALL switch_u(dteta,distrib_caldyn,dist)
126    CALL switch_u(dp,distrib_caldyn,dist)
127    CALL switch_u(dq,distrib_caldyn,dist)
128    CALL switch_u(finvmaold,distrib_caldyn,dist)
129    CALL switch_u(flxw,distrib_caldyn,dist)
130    CALL switch_u(unat,distrib_caldyn,dist)
131    CALL switch_v(vnat,distrib_caldyn,dist)
132
133   
134    CALL caldyn_switch_caldyn(dist)
135    CALL integrd_switch_caldyn(dist)
136    CALL caladvtrac_switch_caldyn(dist)
137   
138  END SUBROUTINE leapfrog_switch_caldyn
139 
140  SUBROUTINE leapfrog_switch_dissip(dist)
141  USE allocate_field_mod
142  USE bands
143  USE parallel_lmdz
144  USE call_dissip_mod,ONLY : call_dissip_switch_dissip
145  IMPLICIT NONE
146    TYPE(distrib),INTENT(IN) :: dist
147
148    CALL call_dissip_switch_dissip(dist)
149   
150  END SUBROUTINE leapfrog_switch_dissip
151 
152END MODULE leapfrog_mod 
153
154
155
156
157
158
159
Note: See TracBrowser for help on using the repository browser.