source: LMDZ5/branches/testing/libf/dyn3dmem/leapfrog_mod.F90 @ 1999

Last change on this file since 1999 was 1999, checked in by Laurent Fairhead, 10 years ago

Merged trunk changes r1920:1997 into testing branch

  • 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.