source: LMDZ6/branches/Amaury_dev/libf/dyn3dmem/leapfrog_mod.F90 @ 5225

Last change on this file since 5225 was 5182, checked in by abarral, 2 months ago

(WIP) Replace REPROBUS CPP KEY by logical
properly name modules

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