par_mod.f90 13.1 KB
Newer Older
Matthias Langer's avatar
 
Matthias Langer committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
!**********************************************************************
! Copyright 1998,1999,2000,2001,2002,2005,2007,2008,2009,2010         *
! Andreas Stohl, Petra Seibert, A. Frank, Gerhard Wotawa,             *
! Caroline Forster, Sabine Eckhardt, John Burkhart, Harald Sodemann   *
!                                                                     *
! This file is part of FLEXPART.                                      *
!                                                                     *
! FLEXPART is free software: you can redistribute it and/or modify    *
! it under the terms of the GNU General Public License as published by*
! the Free Software Foundation, either version 3 of the License, or   *
! (at your option) any later version.                                 *
!                                                                     *
! FLEXPART is distributed in the hope that it will be useful,         *
! but WITHOUT ANY WARRANTY; without even the implied warranty of      *
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the       *
! GNU General Public License for more details.                        *
!                                                                     *
! You should have received a copy of the GNU General Public License   *
! along with FLEXPART.  If not, see <http://www.gnu.org/licenses/>.   *
!**********************************************************************

!*******************************************************************************
!   Include file for calculation of particle trajectories (Program FLEXPART)   *
!        This file contains the parameter statements used in FLEXPART          *
!                                                                              *
!        Author: A. Stohl                                                      *
!                                                                              *
!        1997                                                                  *
!                                                                              *
30
!        Last update 15 August 2013 IP                                         *
Matthias Langer's avatar
 
Matthias Langer committed
31
32
33
34
35
!                                                                              *
!*******************************************************************************

module par_mod

36
37
38
39
! wind_mod: is gfs_mod.f90 for target gfs, ecmwf_mod.f90 for target ecmwf
!************************************************************************
  use wind_mod 

Matthias Langer's avatar
 
Matthias Langer committed
40
41
42
  implicit none

  !****************************************************************
43
  ! Parameters defining KIND parameter for double/single precision
Matthias Langer's avatar
 
Matthias Langer committed
44
45
46
  !****************************************************************

  integer,parameter :: dp=selected_real_kind(P=15)
47
  integer,parameter :: sp=selected_real_kind(6)
48
49
50
51
52
53

  !****************************************************************
  ! dep_prec sets the precision for deposition calculations (sp or 
  ! dp). sp is default, dp can be used for increased precision.
  !****************************************************************

54
  integer,parameter :: dep_prec=sp
Matthias Langer's avatar
 
Matthias Langer committed
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83

  !***********************************************************
  ! Number of directories/files used for FLEXPART input/output
  !***********************************************************

  integer,parameter :: numpath=4

  ! numpath                 Number of different pathnames for input/output files


  !*****************************
  ! Physical and other constants
  !*****************************

  real,parameter :: pi=3.14159265, r_earth=6.371e6, r_air=287.05, ga=9.81
  real,parameter :: cpa=1004.6, kappa=0.286, pi180=pi/180., vonkarman=0.4

  ! pi                      number "pi"
  ! pi180                   pi/180.
  ! r_earth                 radius of earth [m]
  ! r_air                   individual gas constant for dry air [J/kg/K]
  ! ga                      gravity acceleration of earth [m/s**2]
  ! cpa                     specific heat for dry air
  ! kappa                   exponent of formula for potential temperature
  ! vonkarman               von Karman constant

  real,parameter :: karman=0.40, href=15., convke=2.0
  real,parameter :: hmixmin=100., hmixmax=4500., turbmesoscale=0.16
  real,parameter :: d_trop=50., d_strat=0.1
84
  real,parameter :: rho_water=1000. !ZHG 2015 [kg/m3]
Matthias Langer's avatar
 
Matthias Langer committed
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
  ! karman                  Karman's constant
  ! href [m]                Reference height for dry deposition
  ! konvke                  Relative share of kinetic energy used for parcel lifting
  ! hmixmin,hmixmax         Minimum and maximum allowed PBL height
  ! turbmesoscale           the factor by which standard deviations of winds at grid
  !                    points surrounding the particle positions are scaled to
  !                    yield the scales for the mesoscale wind velocity fluctuations
  ! d_trop [m2/s]           Turbulent diffusivity for horizontal components in the troposphere
  ! d_strat [m2/s]          Turbulent diffusivity for vertical component in the stratosphere

  real,parameter :: xmwml=18.016/28.960

  ! xmwml   ratio of molar weights of water vapor and dry air
  !****************************************************
  ! Constants related to the stratospheric ozone tracer
  !****************************************************

  real,parameter :: ozonescale=60., pvcrit=2.0

  ! ozonescale              ppbv O3 per PV unit
  ! pvcrit                  PV level of the tropopause



  !********************
  ! Some time constants
  !********************

  integer,parameter :: idiffnorm=10800, idiffmax=2*idiffnorm, minstep=1

  ! idiffnorm [s]           normal time interval between two wind fields
  ! idiffmax [s]            maximum time interval between two wind fields
  ! minstep [s]             minimum time step to be used within FLEXPART


  !*****************************************************************
  ! Parameters for polar stereographic projection close to the poles
  !*****************************************************************

  real,parameter :: switchnorth=75., switchsouth=-75.

  ! switchnorth    use polar stereographic grid north of switchnorth
  ! switchsouth    use polar stereographic grid south of switchsouth


  !*********************************************
  ! Maximum dimensions of the input mother grids
  !*********************************************
133
  
134
135
136
137
  ! nxmax,nymax,nuvzmax,nwzmax,nzmax:
  ! Moved to ecmwf.f90 (for ECMWF) / gfs.f90 (GFS)
  

138
  !integer,parameter :: nxmax=361,nymax=181,nuvzmax=92,nwzmax=92,nzmax=92 !FNL XF
139
  !integer,parameter :: nxmax=361,nymax=181,nuvzmax=152,nwzmax=152,nzmax=152 !ECMWF new 
140
  !integer,parameter :: nxmax=361,nymax=181,nuvzmax=92,nwzmax=92,nzmax=92 !ECMWF
141
  !integer,parameter :: nxmax=361,nymax=181,nuvzmax=26,nwzmax=26,nzmax=26
Matthias Langer's avatar
 
Matthias Langer committed
142
  !integer,parameter :: nxmax=721,nymax=361,nuvzmax=64,nwzmax=64,nzmax=64
143
144
  !integer,parameter :: nxmax=1201,nymax=235,nuvzmax=58,nwzmax=58,nzmax=58

145
!  integer,parameter :: nxshift=359 ! for ECMWF
146
  !integer,parameter :: nxshift=0     ! for GFS or FNL
Matthias Langer's avatar
 
Matthias Langer committed
147
148
149
150

  integer,parameter :: nconvlevmax = nuvzmax-1
  integer,parameter :: na = nconvlevmax+1

151
152
  ! moved to gfs_mod.f90 / ecmwf_mod.f90
  !
Matthias Langer's avatar
 
Matthias Langer committed
153
154
155
156
157
158
159
160
161
162
  ! nxmax,nymax        maximum dimension of wind fields in x and y
  !                    direction, respectively
  ! nuvzmax,nwzmax     maximum dimension of (u,v) and (w) wind fields in z
  !                    direction (for fields on eta levels)
  ! nzmax              maximum dimension of wind fields in z direction
  !                    for the transformed Cartesian coordinates
  ! nxshift            for global grids (in x), the grid can be shifted by
  !                    nxshift grid points, in order to accomodate nested
  !                    grids, and output grids overlapping the domain "boundary"
  !                    nxshift must not be negative; "normal" setting would be 0
163

Matthias Langer's avatar
 
Matthias Langer committed
164
165
166
167
168
169
170
171
172
  ! ntracermax         maximum number of tracer species in convection
  ! nconvlevmax        maximum number of levels for convection
  ! na                 parameter used in Emanuel's convect subroutine


  !*********************************************
  ! Maximum dimensions of the nested input grids
  !*********************************************

173
  !integer,parameter :: maxnests=0, nxmaxn=0, nymaxn=0
174
  integer,parameter :: maxnests=0,nxmaxn=351,nymaxn=351 !ECMWF
175

176
  !integer,parameter :: maxnests=1, nxmaxn=201, nymaxn=161 ! FNL XF
Matthias Langer's avatar
 
Matthias Langer committed
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
  ! maxnests                maximum number of nested grids
  ! nxmaxn,nymaxn           maximum dimension of nested wind fields in
  !                         x and y direction, respectively


  !*********************************
  ! Parmaters for GRIB file decoding
  !*********************************

  integer,parameter :: jpack=4*nxmax*nymax, jpunp=4*jpack

  ! jpack,jpunp             maximum dimensions needed for GRIB file decoding


  !**************************************
  ! Maximum dimensions of the output grid
  !**************************************

  !integer,parameter :: maxageclass=1,maxzgrid=10,nclassunc=1
  integer,parameter :: maxageclass=1,nclassunc=1

  ! nclassunc               number of classes used to calculate the uncertainty
  !                         of the output
  ! maxageclass             maximum number of age classes used for output

  ! Sabine Eckhardt, June, 2008
  ! the dimensions of the OUTGRID are now set dynamically during runtime
  ! maxxgrid,maxygrid,maxzgrid    maximum dimensions in x,y,z direction
  ! maxxgridn,maxygridn           maximum dimension of the nested grid
  !integer maxxgrid,maxygrid,maxzgrid,maxxgridn,maxygridn
  !integer,parameter :: maxxgrid=361,maxygrid=181,maxxgridn=0,maxygridn=0)

  integer,parameter :: maxreceptor=200

  ! maxreceptor             maximum number of receptor points


  !**************************************************
  ! Maximum number of particles, species, and similar
  !**************************************************

218
  integer,parameter :: maxpart=40000000
Espen Sollum's avatar
Espen Sollum committed
219
  integer,parameter :: maxspec=6
220
  integer,parameter :: minmass=0.0 !0.0001
Matthias Langer's avatar
 
Matthias Langer committed
221
222
223

  ! maxpart                 Maximum number of particles
  ! maxspec                 Maximum number of chemical species per release
224
  ! minmass                 Terminate particles carrying less mass
225

Matthias Langer's avatar
 
Matthias Langer committed
226
227
228
229
230
231
232
  ! maxpoint is also set dynamically during runtime
  ! maxpoint                Maximum number of release locations

  ! ---------
  ! Sabine Eckhardt: change of landuse inventary numclass=13
  ! ---------
  integer,parameter :: maxwf=50000, maxtable=1000, numclass=13, ni=11
233
234
  integer,parameter :: numwfmem=2 ! Serial version/MPI with 2 fields
  !integer,parameter :: numwfmem=3 ! MPI with 3 fields
Matthias Langer's avatar
 
Matthias Langer committed
235
236
237
238
239
240

  ! maxwf                   maximum number of wind fields to be used for simulation
  ! maxtable                Maximum number of chemical species that can be
  !                         tabulated for FLEXPART
  ! numclass                Number of landuse classes available to FLEXPART
  ! ni                      Number of diameter classes of particles
241
242
  ! numwfmem                Number of windfields kept in memory. 2 for serial
  !                         version, 2 or 3 for MPI version
Matthias Langer's avatar
 
Matthias Langer committed
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260

  !**************************************************************************
  ! dimension of the OH field
  !**************************************************************************
  integer,parameter :: maxxOH=72, maxyOH=46, maxzOH=7

  !**************************************************************************
  ! Maximum number of particles to be released in a single atmospheric column
  ! for the domain-filling trajectories option
  !**************************************************************************

  integer,parameter :: maxcolumn=3000


  !*********************************
  ! Dimension of random number field
  !*********************************

261
262
263
!  integer,parameter :: maxrand=120000000
  integer,parameter :: maxrand=200000000
!
Matthias Langer's avatar
 
Matthias Langer committed
264
  ! maxrand                 number of random numbers used
265
  
Matthias Langer's avatar
 
Matthias Langer committed
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284

  !*****************************************************
  ! Number of clusters to be used for plume trajectories
  !*****************************************************

  integer,parameter :: ncluster=5

  !************************************
  ! Unit numbers for input/output files
  !************************************

  integer,parameter :: unitpath=1, unitcommand=1, unitageclasses=1, unitgrid=1
  integer,parameter :: unitavailab=1, unitreleases=88, unitpartout=93
  integer,parameter :: unitpartin=93, unitflux=98, unitouttraj=96
  integer,parameter :: unitvert=1, unitoro=1, unitpoin=1, unitreceptor=1
  integer,parameter :: unitoutgrid=97, unitoutgridppt=99, unitoutinfo=1
  integer,parameter :: unitspecies=1, unitoutrecept=91, unitoutreceptppt=92
  integer,parameter :: unitlsm=1, unitsurfdata=1, unitland=1, unitwesely=1
  integer,parameter :: unitOH=1
285
  integer,parameter :: unitdates=94, unitheader=90,unitheader_txt=100, unitshortpart=95
Matthias Langer's avatar
 
Matthias Langer committed
286
  integer,parameter :: unitboundcond=89
287
  integer,parameter :: unittmp=101
Matthias Langer's avatar
 
Matthias Langer committed
288

289
290
291
292
!******************************************************
! integer code for missing values, used in wet scavenging (PS, 2012)
!******************************************************

293
  integer,parameter ::  icmv=-9999
294
295
296
297
298

! Parameters for testing
!*******************************************
!  integer :: verbosity=0

Matthias Langer's avatar
 
Matthias Langer committed
299
end module par_mod