source: trunk/LMDZ.VENUS/libf/phyvenus/phys_state_var_mod.F90 @ 2560

Last change on this file since 2560 was 2534, checked in by emillour, 4 years ago

Venus GCM:
Some cosmetics in routines, along with adding the possibility to read/write q2 from/to startphy.nc/restartsphy.nc (not really used, but in preparation of future commits).
VB+EM

File size: 7.3 KB
Line 
1!
2! $Id: phys_state_var_mod.F90 1670 2012-10-17 08:42:04Z idelkadi $
3!
4      MODULE phys_state_var_mod
5! Variables sauvegardees pour le startphy.nc
6!======================================================================
7!
8!
9!======================================================================
10! Declaration des variables
11      USE dimphy
12      USE turb_mod
13!      INTEGER, SAVE :: radpas
14!!$OMP THREADPRIVATE(radpas)
15!      REAL, SAVE :: dtime
16!!$OMP THREADPRIVATE(dtime)
17
18      REAL, ALLOCATABLE, SAVE :: ftsol(:) ! surface temperature (K)
19!$OMP THREADPRIVATE(ftsol)
20      REAL, ALLOCATABLE, SAVE :: ftsoil(:,:) ! soil temperatures (K)
21!$OMP THREADPRIVATE(ftsoil)
22      REAL, ALLOCATABLE, SAVE :: falbe(:) ! surface albedo
23!$OMP THREADPRIVATE(falbe)
24
25!clesphy0 param physiq
26!
27! Parametres de l'Orographie a l'Echelle Sous-Maille (OESM):
28!
29      REAL, ALLOCATABLE, SAVE :: zmea(:), zstd(:), zsig(:), zgam(:)
30!$OMP THREADPRIVATE(zmea, zstd, zsig, zgam)
31      REAL, ALLOCATABLE, SAVE :: zthe(:), zpic(:), zval(:)
32!$OMP THREADPRIVATE(zthe, zpic, zval)
33!     REAL tabcntr0(100)
34      REAL, ALLOCATABLE, SAVE :: rugoro(:)
35!$OMP THREADPRIVATE(rugoro)
36      REAL, ALLOCATABLE, SAVE :: t_ancien(:,:), q_ancien(:,:)
37!$OMP THREADPRIVATE(t_ancien, q_ancien)
38      REAL, ALLOCATABLE, SAVE :: u_ancien(:,:), v_ancien(:,:)
39!$OMP THREADPRIVATE(u_ancien, v_ancien)
40      LOGICAL, SAVE :: ancien_ok
41!$OMP THREADPRIVATE(ancien_ok)
42! pressure level
43      REAL,ALLOCATABLE,SAVE :: zuthe(:),zvthe(:)
44!$OMP THREADPRIVATE(zuthe,zvthe)
45!
46! composition for upper atmosphere
47      REAL,ALLOCATABLE,SAVE :: co2vmr_gcm(:,:)   
48!$OMP THREADPRIVATE(co2vmr_gcm)
49      REAL,ALLOCATABLE,SAVE :: ovmr_gcm(:,:)   
50!$OMP THREADPRIVATE(ovmr_gcm)
51      REAL,ALLOCATABLE,SAVE :: n2vmr_gcm(:,:)   
52!$OMP THREADPRIVATE(n2vmr_gcm)
53      REAL,ALLOCATABLE,SAVE :: nvmr_gcm(:,:)   
54!$OMP THREADPRIVATE(nvmr_gcm)
55      REAL,ALLOCATABLE,SAVE :: covmr_gcm(:,:)   
56!$OMP THREADPRIVATE(covmr_gcm)
57
58! photochemistry and microphysics
59      REAL,ALLOCATABLE,SAVE :: d_tr_chem(:,:,:), d_tr_sed(:,:,:)   
60!$OMP THREADPRIVATE(d_tr_chem,d_tr_sed)
61      INTEGER,ALLOCATABLE,SAVE :: iter(:,:)   
62!$OMP THREADPRIVATE(iter)
63
64! Tendencies due to radiative scheme   [K/s]
65! heat : chauffage solaire
66! heat0: chauffage solaire ciel clair
67! cool : refroidissement infrarouge
68! cool0 : refroidissement infrarouge ciel clair
69      REAL,ALLOCATABLE,SAVE :: heat(:,:)   
70!$OMP THREADPRIVATE(heat)
71      REAL,ALLOCATABLE,SAVE :: heat0(:,:)
72!$OMP THREADPRIVATE(heat0)
73      REAL,ALLOCATABLE,SAVE :: cool(:,:)
74!$OMP THREADPRIVATE(cool)
75      REAL,ALLOCATABLE,SAVE :: cool0(:,:)
76!$OMP THREADPRIVATE(cool0)
77     REAL,ALLOCATABLE,SAVE :: dtsw(:,:)   
78!$OMP THREADPRIVATE(dtsw)
79     REAL,ALLOCATABLE,SAVE :: dtlw(:,:)   
80!$OMP THREADPRIVATE(dtlw)
81     REAL,ALLOCATABLE,SAVE :: d_t_rad(:,:),d_t_euv(:,:)   
82!$OMP THREADPRIVATE(d_t_rad,d_t_euv)
83     REAL,ALLOCATABLE,SAVE :: d_t_nirco2(:,:),d_t_nlte(:,:)
84!$OMP THREADPRIVATE(d_t_nirco2,d_t_nlte)
85
86! Case for Newtonian cooling (physideal=.true.)
87     REAL,ALLOCATABLE,SAVE :: zt_eq(:,:)   
88!$OMP THREADPRIVATE(zt_eq)
89
90! Fluxes (W/m2)
91! sollwdown : downward LW flux at surface
92! sollwdownclr : downward CS LW flux at surface
93! toplwdown : downward CS LW flux at TOA
94! toplwdownclr : downward CS LW flux at TOA
95      REAL,ALLOCATABLE,SAVE :: swnet(:,:)   
96!$OMP THREADPRIVATE(swnet)
97      REAL,ALLOCATABLE,SAVE :: lwnet(:,:)   
98!$OMP THREADPRIVATE(lwnet)
99      REAL,ALLOCATABLE,SAVE :: topsw(:), toplw(:)
100!$OMP THREADPRIVATE(topsw,toplw)
101      REAL, ALLOCATABLE, SAVE :: solsw(:), sollw(:)
102!$OMP THREADPRIVATE(solsw, sollw)
103      REAL, ALLOCATABLE, SAVE :: radsol(:)
104!$OMP THREADPRIVATE(radsol)
105      REAL,ALLOCATABLE,SAVE :: sollwdown(:)
106!$OMP THREADPRIVATE(sollwdown)
107      REAL,ALLOCATABLE,SAVE :: sollwdownclr(:)
108!$OMP THREADPRIVATE(sollwdownclr)
109      REAL,ALLOCATABLE,SAVE :: toplwdown(:)
110!$OMP THREADPRIVATE(toplwdown)
111      REAL,ALLOCATABLE,SAVE :: toplwdownclr(:)
112!$OMP THREADPRIVATE(toplwdownclr)
113      REAL,ALLOCATABLE,SAVE :: topsw0(:),toplw0(:),solsw0(:),sollw0(:)
114!$OMP THREADPRIVATE(topsw0,toplw0,solsw0,sollw0)
115      REAL,save,allocatable :: dlw(:)  ! derivee infra rouge
116      REAL,save,allocatable :: fder(:) ! Derive de flux (sensible et latente)
117!$OMP THREADPRIVATE(dlw,fder)
118CONTAINS
119
120!======================================================================
121SUBROUTINE phys_state_var_init(nqmax)
122
123IMPLICIT NONE
124include "dimsoil.h"
125
126      integer :: nqmax
127
128      ALLOCATE(ftsol(klon))            ! temperature de surface
129      ALLOCATE(ftsoil(klon,nsoilmx))   ! temperature dans le sol
130      ALLOCATE(falbe(klon))            ! albedo
131!  Parametres de l'Orographie a l'Echelle Sous-Maille (OESM):
132!
133!zmea(:)   ! orographie moyenne
134!zstd(:)   ! deviation standard de l'OESM
135!zsig(:)   ! pente de l'OESM
136!zgam(:)   ! anisotropie de l'OESM
137!zthe(:)   ! orientation de l'OESM
138!zpic(:)   ! Maximum de l'OESM
139!zval(:)   ! Minimum de l'OESM
140!rugoro(:) ! longueur de rugosite de l'OESM
141      ALLOCATE(zmea(klon), zstd(klon), zsig(klon), zgam(klon))
142      ALLOCATE(zthe(klon), zpic(klon), zval(klon))
143      ALLOCATE(rugoro(klon))
144
145      ALLOCATE(t_ancien(klon,klev), q_ancien(klon,klev))
146      ALLOCATE(u_ancien(klon,klev), v_ancien(klon,klev))
147
148      ALLOCATE(zuthe(klon),zvthe(klon))
149
150      ALLOCATE(ovmr_gcm(klon,klev),covmr_gcm(klon,klev))
151      ALLOCATE(co2vmr_gcm(klon,klev),n2vmr_gcm(klon,klev))
152      ALLOCATE(nvmr_gcm(klon,klev))
153
154      ALLOCATE(d_tr_chem(klon,klev,nqmax),d_tr_sed(klon,klev,nqmax))
155      ALLOCATE(iter(klon,klev))
156
157      ALLOCATE(heat(klon,klev), heat0(klon,klev))
158      ALLOCATE(cool(klon,klev), cool0(klon,klev))
159      ALLOCATE(dtlw(klon,klev),dtsw(klon,klev))
160      ALLOCATE(d_t_rad(klon,klev),d_t_euv(klon,klev))
161      ALLOCATE(d_t_nirco2(klon,klev),d_t_nlte(klon,klev))
162      ALLOCATE(zt_eq(klon,klev))
163
164      ALLOCATE(swnet(klon,klev+1), lwnet(klon,klev+1))
165      ALLOCATE(topsw(klon), toplw(klon))
166      ALLOCATE(solsw(klon), sollw(klon))
167      ALLOCATE(radsol(klon))  ! bilan radiatif au sol calcule par code radiatif
168      ALLOCATE(sollwdown(klon), sollwdownclr(klon))
169      ALLOCATE(toplwdown(klon), toplwdownclr(klon))
170      ALLOCATE(topsw0(klon),toplw0(klon),solsw0(klon),sollw0(klon))
171      ALLOCATE(dlw(klon), fder(klon))
172
173      ! allocate turb_mod module variables
174      CALL ini_turb_mod(klon,klev)
175     
176END SUBROUTINE phys_state_var_init
177
178!======================================================================
179SUBROUTINE phys_state_var_end
180
181IMPLICIT NONE
182
183      deallocate(ftsol, ftsoil, falbe)
184      deallocate(zmea, zstd, zsig, zgam)
185      deallocate(zthe, zpic, zval)
186      deallocate(rugoro, t_ancien, q_ancien)
187      deallocate(        u_ancien, v_ancien)
188      deallocate(zuthe, zvthe)
189
190      deallocate(ovmr_gcm,covmr_gcm)
191      deallocate(co2vmr_gcm,n2vmr_gcm)
192      deallocate(nvmr_gcm)
193
194      deallocate(d_tr_chem,d_tr_sed)
195      deallocate(iter)
196
197      deallocate(heat, heat0)
198      deallocate(cool, cool0)
199      deallocate(dtlw,dtsw)
200      deallocate(d_t_rad,d_t_euv)
201      deallocate(d_t_nirco2,d_t_nlte)
202      deallocate(zt_eq)
203
204      deallocate(swnet, lwnet)
205      deallocate(solsw, sollw, radsol)
206      deallocate(topsw, toplw)
207      deallocate(sollwdown, sollwdownclr)
208      deallocate(toplwdown, toplwdownclr)
209      deallocate(topsw0,toplw0,solsw0,sollw0)
210      deallocate(dlw, fder)
211
212      ! deallocate turb_mod module variables
213      CALL end_turb_mod
214
215END SUBROUTINE phys_state_var_end
216
217      END MODULE phys_state_var_mod
Note: See TracBrowser for help on using the repository browser.