CTBTO FLEXPART WO4 (2015-10-15)
 All Classes Files Functions Variables
com_mod.f90
Go to the documentation of this file.
1 !*******************************************************************************
2 ! Include file for particle diffusion model FLEXPART *
3 ! This file contains a global common block used by FLEXPART *
4 ! *
5 ! Author: A. Stohl *
6 ! *
7 ! June 1996 *
8 ! *
9 ! Last update: 9 August 2000 *
10 ! *
11 !*******************************************************************************
12 
13 module com_mod
14 
15  use par_mod, only: dp, numpath, maxnests, maxageclass, maxspec, ni, &
16  numclass, nymax, nxmax, maxcolumn, maxwf, nzmax, nxmaxn, nymaxn, &
17  maxreceptor, maxpart, maxrand, nwzmax, nuvzmax
18 
19  implicit none
20 
21  !****************************************************************
22  ! Variables defining where FLEXPART input/output files are stored
23  !****************************************************************
24 
25  character :: path(numpath+2*maxnests)*120
26  integer :: length(numpath+2*maxnests)
27 
28  ! path path names needed for trajectory model
29  ! length length of path names needed for trajectory model
30 
31 
32  !********************************************************
33  ! Variables defining the general model run specifications
34  !********************************************************
35 
36  integer :: ibdate,ibtime,iedate,ietime
37  real(kind=dp) :: bdate,edate
38 
39 
40  ! ibdate beginning date (YYYYMMDD)
41  ! ibtime beginning time (HHMISS)
42  ! iedate ending date (YYYYMMDD)
43  ! ietime ending time (HHMISS)
44  ! bdate beginning date of simulation (julian date)
45  ! edate ending date of simulation (julian date)
46 
47 
48  integer :: ldirect,ideltas
49 
50  ! ldirect 1 for forward, -1 for backward simulation
51  ! ideltas length of trajectory loop from beginning to
52  ! ending date (s)
53 
54  integer :: loutstep,loutaver,loutsample,method,lsynctime
55  real :: outstep
56 
57  ! loutstep [s] gridded concentration output every loutstep seconds
58  ! loutaver [s] concentration output is an average over [s] seconds
59  ! loutsample [s] sampling interval of gridded concentration output
60  ! lsynctime [s] synchronisation time of all particles
61  ! method indicator which dispersion method is to be used
62  ! outstep = real(abs(loutstep))
63 
64  real :: ctl,fine
65  integer :: ifine,iout,ipout,ipin,iflux,mdomainfill
66  integer :: mquasilag,nested_output,ind_source,ind_receptor
67  integer :: ind_rel,ind_samp,ioutputforeachrelease,linit_cond
68  logical :: turbswitch
69 
70  ! preprocessed metdata switch
71  integer :: preprocessed_metdata
72 
73  ! ctl factor, by which time step must be smaller than Lagrangian time scale
74  ! ifine reduction factor for time step used for vertical wind
75  ! Langevin equation for the vertical wind component
76  ! ioutputforeachrelease Should each release be a seperate output field?
77  ! iflux flux calculation options: 1 calculation of fluxes, 2 no fluxes
78  ! iout output options: 1 conc. output (ng/m3), 2 mixing ratio (pptv), 3 both
79  ! ipout particle dump options: 0 no, 1 every output interval, 2 only at end
80  ! ipin read in particle positions from dumped file from a previous run
81  ! fine real(ifine)
82  ! mdomainfill 0: normal run
83  ! 1: particles are initialized according to atmospheric mass distribution
84  ! ind_source switches between different units for concentrations at the source
85  ! NOTE that in backward simulations the release of computational particles
86  ! takes place at the "receptor" and the sampling of particles at the "source".
87  ! 1= mass units
88  ! 2= mass mixing ratio units
89  ! ind_receptor switches between different units for FLEXPART concentration at the receptor
90  ! 1= mass units
91  ! 2= mass mixing ratio units
92  ! linit_cond switch on the output of sensitivity to initial conditions for backward runs
93  ! 0=no, 1=mass unit, 2=mass mixing ratio unit
94  ! mquasilag 0: normal run
95  ! 1: Particle position output is produced in a condensed format and particles are numbered
96  ! nested_output: 0 no, 1 yes
97  ! turbswitch determines how the Markov chain is formulated
98 
99  ! ind_rel and ind_samp are used within the code to change between mass and mass-mix (see readcommand.f)
100 
101 
102  integer :: mintime,itsplit
103 
104  ! mintime minimum time step to be used by FLEXPART
105  ! itsplit time constant for splitting particles
106 
107  integer :: lsubgrid,lconvection,lagespectra
108 
109  ! lsubgrid 1 if subgrid topography parameterization switched on, 2 if not
110  ! lconvection 1 if convection parameterization switched on, 0 if not
111  ! lagespectra 1 if age spectra calculation switched on, 2 if not
112 
113 
114  integer :: nageclass,lage(maxageclass)
115 
116  ! nageclass number of ageclasses for the age spectra calculation
117  ! lage [s] ageclasses for the age spectra calculation
118 
119 
120  logical :: gdomainfill
121 
122  ! gdomainfill .T., if domain-filling is global, .F. if not
123 
124 
125 
126  !*********************************************************************
127  ! Variables defining the release locations, released species and their
128  ! properties, etc.
129  !*********************************************************************
130 
131  !change Sabine Eckhardt, only save the first 1000 identifier for releasepoints
132  character :: compoint(1001)*45
133  integer :: numpoint
134  !sec, now dynamically allocated:
135  ! ireleasestart(maxpoint),ireleaseend(maxpoint)
136  ! real xpoint1(maxpoint),ypoint1(maxpoint)
137  !real xpoint2(maxpoint),ypoint2(maxpoint)
138  !real zpoint1(maxpoint),zpoint2(maxpoint)
139  !integer*2 kindz(maxpoint)
140  integer :: specnum(maxspec)
141  !real xmass(maxpoint,maxspec)
142  real :: decay(maxspec)
143  real :: weta(maxspec),wetb(maxspec)
144  real :: reldiff(maxspec),henry(maxspec),f0(maxspec)
145  real :: density(maxspec),dquer(maxspec),dsigma(maxspec)
146  real :: vsetaver(maxspec),cunningham(maxspec),weightmolar(maxspec)
147  real :: vset(maxspec,ni),schmi(maxspec,ni),fract(maxspec,ni)
148  real :: ri(5,numclass),rac(5,numclass),rcl(maxspec,5,numclass)
149  real :: rgs(maxspec,5,numclass),rlu(maxspec,5,numclass)
150  real :: rm(maxspec),dryvel(maxspec),kao(maxspec),ohreact(maxspec)
151  ! se it is possible to associate a species with a second one to make transfer from gas to aerosol
152  integer :: spec_ass(maxspec)
153 
154  real :: area_hour(maxspec,24),point_hour(maxspec,24)
155  real :: area_dow(maxspec,7),point_dow(maxspec,7)
156 
157  !integer npart(maxpoint)
158  integer :: nspec,maxpointspec_act
159  character(len=10) :: species(maxspec)
160 
161 
162  ! compoint comment, also "name" of each starting point
163  ! numpoint actual number of trajectory starting/ending points
164  ! ireleasestart,ireleaseend [s] starting and ending time of each release
165  ! xmass total mass emitted
166  ! xpoint1,ypoint1 lower left coordinates of release area
167  ! xpoint2,ypoint2 upper right coordinates of release area
168  ! zpoint1,zpoint2 min./max. z-coordinates of release points
169  ! kindz 1: zpoint is in m agl, 2: zpoint is in m asl
170  ! npart number of particles per release point
171  ! nspec number of different species allowed for one release
172  ! maxpointspec_act number of releaspoints for which a different output shall be created
173  ! species name of species
174  ! decay decay constant of radionuclide
175 
176  ! WET DEPOSITION
177  ! weta, wetb parameters for determining wet scavenging coefficients
178 
179  ! GAS DEPOSITION
180  ! reldiff diffusivitiy of species relative to diff. of H2O
181  ! henry [M/atm] Henry constant
182  ! f0 reactivity relative to that of O3
183  ! ri [s/m] stomatal resistance
184  ! rcl [s/m] lower canopy resistance
185  ! rgs [s/m] ground resistance
186  ! rlu [s/m] leaf cuticular resistance
187  ! rm [s/m] mesophyll resistance
188  ! dryvel [m/s] constant dry deposition velocity
189 
190  ! PARTICLE DEPOSITION
191  ! density [kg/m3] density of particles
192  ! dquer [m] mean diameter of particles
193  ! dsigma dsigma=10 or dsigma=0.1 means that 68% of the
194  ! mass are between 0.1*dquer and 10*dquer
195 
196  ! fract mass fraction of each diameter interval
197  ! vset [m/s] gravitational settling velocity in ni intervals
198  ! cunningham Cunningham slip correction (strictly valid only near surface)
199  ! vsetaver [m/s] average gravitational settling velocity
200  ! schmi Schmidt number**2/3 of each diameter interval
201  ! weightmolar [g/mol] molecular weight
202 
203  ! TIME VARIATION OF EMISSION
204  ! area_hour, point_hour daily variation of emission strengths for area and point sources
205  ! area_dow, point_dow day-of-week variation of emission strengths for area and point sources
206 
207 
208 
209  !**********************************************************
210  ! Variables used for domain-filling trajectory calculations
211  !**********************************************************
212 
213  integer :: nx_we(2),ny_sn(2)
214  integer :: numcolumn
215  integer :: numcolumn_we(2,0:nymax-1),numcolumn_sn(2,0:nxmax-1)
216  real :: zcolumn_we(2,0:nymax-1,maxcolumn)
217  real :: zcolumn_sn(2,0:nxmax-1,maxcolumn)
218  real :: xmassperparticle
219  real :: acc_mass_we(2,0:nymax-1,maxcolumn)
220  real :: acc_mass_sn(2,0:nxmax-1,maxcolumn)
221 
222  ! nx_we(2) x indices of western and eastern boundary of domain-filling
223  ! ny_sn(2) y indices of southern and northern boundary of domain-filling
224  ! numcolumn_we number of particles to be released within one column
225  ! at the western and eastern boundary surfaces
226  ! numcolumn_sn same as numcolumn_we, but for southern and northern domain boundary
227  ! numcolumn maximum number of particles to be released within a single
228  ! column
229  ! zcolumn_we altitudes where particles are to be released
230  ! at the western and eastern boundary surfaces
231  ! zcolumn_sn same as zcolumn_we, but for southern and northern domain boundary
232  ! xmassperparticle air mass per particle in the domain-filling traj. option
233  ! acc_mass_we mass that has accumulated at the western and eastern boundary;
234  ! if it exceeds xmassperparticle, a particle is released and
235  ! acc_mass_we is reduced accordingly
236  ! acc_mass_sn same as acc_mass_we, but for southern and northern domain boundary
237 
238 
239 
240  !******************************************************************************
241  ! Variables associated with the ECMWF meteorological input data ("wind fields")
242  !******************************************************************************
243 
244  integer :: numbwf,wftime(maxwf),lwindinterv
245  character(len=255) :: wfname(maxwf),wfspec(maxwf)
246 
247  ! lwindinterv [s] Interval between wind fields currently in memory
248  ! numbwf actual number of wind fields
249  ! wftime(maxwf) [s] times relative to beginning time of wind fields
250  ! wfname(maxwf) file names of wind fields
251  ! wfspec(maxwf) specifications of wind field file, e.g. if on hard
252  ! disc or on tape
253 
254  integer :: memtime(2),memind(2)
255 
256  ! memtime [s] validation times of wind fields in memory
257  ! memind pointer to wind field, in order to avoid shuffling
258  ! of wind fields
259 
260 
261 
262  !****************************************************************************
263  ! Variables defining actual size and geographical location of the wind fields
264  !****************************************************************************
265 
266  integer :: nx,ny,nxmin1,nymin1,nxfield,nuvz,nwz,nz,nmixz,nlev_ec
267  real :: dx,dy,xlon0,ylat0,dxconst,dyconst,height(nzmax)
268 
269  ! nx,ny,nz actual dimensions of wind fields in x,y and z
270  ! direction, respectively
271  ! nxmin1,nymin1 nx-1, ny-1, respectively
272  ! nuvz,nwz vertical dimension of original ECMWF data
273  ! nxfield same as nx for limited area fields,
274  ! but for global fields nx=nxfield+1
275  ! nmixz number of levels up to maximum PBL height (3500 m)
276 
277  ! nuvz is used for u,v components
278  ! nwz is used for w components (staggered grid)
279  ! nz is used for the levels in transformed coordinates (terrain-following Cartesian
280  ! coordinates)
281 
282  ! nlev_ec number of levels ECMWF model
283  ! dx grid distance in x direction
284  ! dy grid distance in y direction
285  ! dxconst,dyconst auxiliary variables for utransform,vtransform
286  ! height heights of all levels
287  ! xlon0 geographical longitude and
288  ! ylat0 geographical latitude of lower left grid point
289 
290 
291 
292  !*************************************************
293  ! Variables used for vertical model discretization
294  !*************************************************
295 
296  real :: akm(nwzmax),bkm(nwzmax)
297  real :: akz(nuvzmax),bkz(nuvzmax)
298  real :: aknew(nzmax),bknew(nzmax)
299 
300  ! akm,bkm: coeffizients which regulate vertical discretization of ecmwf model
301  ! (at the border of model layers)
302  ! akz,bkz: model discretization coeffizients at the centre of the layers
303  ! aknew,bknew model discretization coeffizients at the interpolated levels
304 
305 
306 
307  ! Fixed fields, unchangeable with time
308  !*************************************
309 
310  real :: oro(0:nxmax-1,0:nymax-1)
311  real :: excessoro(0:nxmax-1,0:nymax-1)
312  real :: lsm(0:nxmax-1,0:nymax-1)
313  real :: xlanduse(0:nxmax-1,0:nymax-1,numclass)
314 
315  ! oro [m] orography of the ECMWF model
316  ! excessoro excess orography mother domain
317  ! lsm land sea mask of the ECMWF model
318  ! xlanduse [0-1] area fractions in percent
319 
320  ! 3d fields
321  !**********
322 
323  real :: uu(0:nxmax-1,0:nymax-1,nzmax,2)
324  real :: vv(0:nxmax-1,0:nymax-1,nzmax,2)
325  real :: uupol(0:nxmax-1,0:nymax-1,nzmax,2)
326  real :: vvpol(0:nxmax-1,0:nymax-1,nzmax,2)
327  real :: ww(0:nxmax-1,0:nymax-1,nzmax,2)
328  real :: tt(0:nxmax-1,0:nymax-1,nzmax,2)
329  real :: qv(0:nxmax-1,0:nymax-1,nzmax,2)
330  real :: pv(0:nxmax-1,0:nymax-1,nzmax,2)
331  real :: rho(0:nxmax-1,0:nymax-1,nzmax,2)
332  real :: drhodz(0:nxmax-1,0:nymax-1,nzmax,2)
333  real :: tth(0:nxmax-1,0:nymax-1,nuvzmax,2)
334  real :: qvh(0:nxmax-1,0:nymax-1,nuvzmax,2)
335  real :: pplev(0:nxmax-1,0:nymax-1,nuvzmax,2)
336  integer(kind=1) :: clouds(0:nxmax-1,0:nymax-1,nzmax,2)
337  integer :: cloudsh(0:nxmax-1,0:nymax-1,2)
338 
339  ! uu,vv,ww [m/2] wind components in x,y and z direction
340  ! uupol,vvpol [m/s] wind components in polar stereographic projection
341  ! tt [K] temperature data
342  ! qv specific humidity data
343  ! pv (pvu) potential vorticity
344  ! rho [kg/m3] air density
345  ! drhodz [kg/m2] vertical air density gradient
346  ! tth,qvh tth,qvh on original eta levels
347  ! clouds: no cloud, no precipitation 0
348  ! cloud, no precipitation 1
349  ! rainout conv/lsp dominated 2/3
350  ! washout conv/lsp dominated 4/5
351  ! pplev for the GFS version
352 
353  ! 2d fields
354  !**********
355 
356  real :: ps(0:nxmax-1,0:nymax-1,1,2)
357  real :: sd(0:nxmax-1,0:nymax-1,1,2)
358  real :: msl(0:nxmax-1,0:nymax-1,1,2)
359  real :: tcc(0:nxmax-1,0:nymax-1,1,2)
360  real :: u10(0:nxmax-1,0:nymax-1,1,2)
361  real :: v10(0:nxmax-1,0:nymax-1,1,2)
362  real :: tt2(0:nxmax-1,0:nymax-1,1,2)
363  real :: td2(0:nxmax-1,0:nymax-1,1,2)
364  real :: lsprec(0:nxmax-1,0:nymax-1,1,2)
365  real :: convprec(0:nxmax-1,0:nymax-1,1,2)
366  real :: sshf(0:nxmax-1,0:nymax-1,1,2)
367  real :: ssr(0:nxmax-1,0:nymax-1,1,2)
368  real :: surfstr(0:nxmax-1,0:nymax-1,1,2)
369  real :: ustar(0:nxmax-1,0:nymax-1,1,2)
370  real :: wstar(0:nxmax-1,0:nymax-1,1,2)
371  real :: hmix(0:nxmax-1,0:nymax-1,1,2)
372  real :: tropopause(0:nxmax-1,0:nymax-1,1,2)
373  real :: oli(0:nxmax-1,0:nymax-1,1,2)
374  real :: diffk(0:nxmax-1,0:nymax-1,1,2)
375 
376  ! ps surface pressure
377  ! sd snow depth
378  ! msl mean sea level pressure
379  ! tcc total cloud cover
380  ! u10 10 meter u
381  ! v10 10 meter v
382  ! tt2 2 meter temperature
383  ! td2 2 meter dew point
384  ! lsprec [mm/h] large scale total precipitation
385  ! convprec [mm/h] convective precipitation
386  ! sshf surface sensible heat flux
387  ! ssr surface solar radiation
388  ! surfstr surface stress
389  ! ustar [m/s] friction velocity
390  ! wstar [m/s] convective velocity scale
391  ! hmix [m] mixing height
392  ! tropopause [m] altitude of thermal tropopause
393  ! oli [m] inverse Obukhov length (1/L)
394  ! diffk [m2/s] diffusion coefficient at reference height
395 
396 
397  real :: vdep(0:nxmax-1,0:nymax-1,maxspec,2)
398 
399  ! vdep [m/s] deposition velocities
400 
401 
402  !********************************************************************
403  ! Variables associated with the ECMWF input data (nested wind fields)
404  !********************************************************************
405 
406  ! NOTE: all nested variables have the same name as the variables used
407  ! for the mother domain, except with a 'n' appended at the end
408  !********************************************************************
409 
410  integer :: numbnests
411 
412  ! numbnests number of nested grids
413 
414  character(len=255) :: wfnamen(maxnests,maxwf)
415  character(len=18) :: wfspecn(maxnests,maxwf)
416 
417  ! wfnamen nested wind field names
418  ! wfspecn specifications of wind field file, e.g. if on hard
419  ! disc or on tape
420 
421 
422  !*********************************************************************
423  ! Variables characterizing size and location of the nested wind fields
424  !*********************************************************************
425 
426  integer :: nxn(maxnests),nyn(maxnests)
427  real :: dxn(maxnests),dyn(maxnests),xlon0n(maxnests),ylat0n(maxnests)
428 
429  ! nxn,nyn actual dimensions of nested wind fields in x and y direction
430  ! dxn,dyn grid distances in x,y direction for the nested grids
431  ! xlon0n geographical longitude of lower left grid point of nested wind fields
432  ! ylat0n geographical latitude of lower left grid point of nested wind fields
433 
434 
435  ! Nested fields, unchangeable with time
436  !**************************************
437 
438  real :: oron(0:nxmaxn-1,0:nymaxn-1,maxnests)
439  real :: excessoron(0:nxmaxn-1,0:nymaxn-1,maxnests)
440  real :: lsmn(0:nxmaxn-1,0:nymaxn-1,maxnests)
441  real :: xlandusen(0:nxmaxn-1,0:nymaxn-1,numclass,maxnests)
442 
443 
444  ! 3d nested fields
445  !*****************
446 
447  real :: uun(0:nxmaxn-1,0:nymaxn-1,nzmax,2,maxnests)
448  real :: vvn(0:nxmaxn-1,0:nymaxn-1,nzmax,2,maxnests)
449  real :: wwn(0:nxmaxn-1,0:nymaxn-1,nzmax,2,maxnests)
450  real :: ttn(0:nxmaxn-1,0:nymaxn-1,nzmax,2,maxnests)
451  real :: qvn(0:nxmaxn-1,0:nymaxn-1,nzmax,2,maxnests)
452  real :: pvn(0:nxmaxn-1,0:nymaxn-1,nzmax,2,maxnests)
453  integer(kind=1) :: cloudsn(0:nxmaxn-1,0:nymaxn-1,0:nzmax,2,maxnests)
454  integer :: cloudsnh(0:nxmaxn-1,0:nymaxn-1,2,maxnests)
455  real :: rhon(0:nxmaxn-1,0:nymaxn-1,nzmax,2,maxnests)
456  real :: drhodzn(0:nxmaxn-1,0:nymaxn-1,nzmax,2,maxnests)
457  real :: tthn(0:nxmaxn-1,0:nymaxn-1,nuvzmax,2,maxnests)
458  real :: qvhn(0:nxmaxn-1,0:nymaxn-1,nuvzmax,2,maxnests)
459 
460  ! 2d nested fields
461  !*****************
462 
463  real :: psn(0:nxmaxn-1,0:nymaxn-1,1,2,maxnests)
464  real :: sdn(0:nxmaxn-1,0:nymaxn-1,1,2,maxnests)
465  real :: msln(0:nxmaxn-1,0:nymaxn-1,1,2,maxnests)
466  real :: tccn(0:nxmaxn-1,0:nymaxn-1,1,2,maxnests)
467  real :: u10n(0:nxmaxn-1,0:nymaxn-1,1,2,maxnests)
468  real :: v10n(0:nxmaxn-1,0:nymaxn-1,1,2,maxnests)
469  real :: tt2n(0:nxmaxn-1,0:nymaxn-1,1,2,maxnests)
470  real :: td2n(0:nxmaxn-1,0:nymaxn-1,1,2,maxnests)
471  real :: lsprecn(0:nxmaxn-1,0:nymaxn-1,1,2,maxnests)
472  real :: convprecn(0:nxmaxn-1,0:nymaxn-1,1,2,maxnests)
473  real :: sshfn(0:nxmaxn-1,0:nymaxn-1,1,2,maxnests)
474  real :: ssrn(0:nxmaxn-1,0:nymaxn-1,1,2,maxnests)
475  real :: surfstrn(0:nxmaxn-1,0:nymaxn-1,1,2,maxnests)
476  real :: ustarn(0:nxmaxn-1,0:nymaxn-1,1,2,maxnests)
477  real :: wstarn(0:nxmaxn-1,0:nymaxn-1,1,2,maxnests)
478  real :: hmixn(0:nxmaxn-1,0:nymaxn-1,1,2,maxnests)
479  real :: tropopausen(0:nxmaxn-1,0:nymaxn-1,1,2,maxnests)
480  real :: olin(0:nxmaxn-1,0:nymaxn-1,1,2,maxnests)
481  real :: diffkn(0:nxmaxn-1,0:nymaxn-1,1,2,maxnests)
482  real :: vdepn(0:nxmaxn-1,0:nymaxn-1,maxspec,2,maxnests)
483 
484 
485  !*************************************************
486  ! Certain auxiliary variables needed for the nests
487  !*************************************************
488 
489  real :: xresoln(0:maxnests),yresoln(0:maxnests)
490 
491  ! xresoln, yresoln Factors by which the resolutions in the nests
492  ! are enhanced compared to mother grid
493 
494  real :: xln(maxnests),yln(maxnests),xrn(maxnests),yrn(maxnests)
495 
496  ! xln,yln,xrn,yrn Corner points of nested grids in grid coordinates
497  ! of mother grid
498 
499 
500  !******************************************************
501  ! Variables defining the polar stereographic projection
502  !******************************************************
503 
504  logical :: xglobal,sglobal,nglobal
505  real :: switchnorthg,switchsouthg
506 
507  !xglobal T for global fields, F for limited area fields
508  !sglobal T if domain extends towards south pole
509  !nglobal T if domain extends towards north pole
510  !switchnorthg,switchsouthg same as parameters switchnorth,
511  ! switchsouth, but in grid units
512 
513  real :: southpolemap(9),northpolemap(9)
514 
515  !southpolemap,northpolemap define stereographic projections
516  ! at the two poles
517 
518 
519  !******************
520  ! Landuse inventory
521  ! Sabine Eckhardt Dec 06: change to new landuse inventary - 11 classes, 1200 x 600 global
522  !******************
523 
524  integer(kind=1) :: landinvent(1200,600,6)
525  real :: z0(numclass)
526 
527  ! landinvent landuse inventory (numclass=11 classes)
528  ! z0 roughness length for the landuse classes
529 
530 
531 
532  !**************************************************************************
533  ! Variables characterizing the output grid and containing the model results
534  !**************************************************************************
535 
536  integer :: numxgrid,numygrid,numzgrid
537  real :: dxout,dyout,outlon0,outlat0,xoutshift,youtshift
538  integer :: numxgridn,numygridn
539  real :: dxoutn,dyoutn,outlon0n,outlat0n,xoutshiftn,youtshiftn
540  !real outheight(maxzgrid),outheighthalf(maxzgrid)
541  logical :: DEP,DRYDEP,DRYDEPSPEC(maxspec),WETDEP,OHREA,ASSSPEC
542 
543  ! numxgrid,numygrid number of grid points in x,y-direction
544  ! numxgridn,numygridn number of grid points in x,y-direction for nested output grid
545  ! numzgrid number of vertical levels of output grid
546  ! dxout,dyout grid distance of output grid
547  ! dxoutn,dyoutn grid distance of nested output grid
548  ! outlon0,outlat0 lower left corner of output grid
549  ! outlon0n,outlat0n lower left corner of nested output grid
550  ! xoutshift,youtshift xlon0-outlon0, ylat0-outlat0
551  ! xoutshiftn,youtshiftn xlon0-outlon0n, ylat0-outlat0n
552  ! outheight [m] upper levels of the output grid
553  ! outheighthalf [m] half (middle) levels of the output grid cells
554  ! DEP .true., if either dry or wet depos. is switched on
555  ! DRYDEP .true., if dry deposition is switched on
556  ! DRYDEPSPEC .true., if dry deposition is switched on for that species
557  ! WETDEP .true., if wet deposition is switched on
558  ! OHREA .true., if OH reaction is switched on
559  ! ASSSPEC .true., if there are two species asscoiated
560  ! (i.e. transfer of mass between these two occurs
561 
562 
563 
564  ! if output for each releasepoint shall be created maxpointspec=number of releasepoints
565  ! else maxpointspec is 1 -> moved to unc_mod
566  ! the OUTGRID is moved to the module outg_mod
567  !******************************************************************************
568 
569  !real gridunc(0:maxxgrid-1,0:maxygrid-1,maxzgrid,maxspec,
570  ! + maxpointspec_act,nclassunc,maxageclass)
571  !real griduncn(0:maxxgridn-1,0:maxygridn-1,maxzgrid,maxspec,
572  ! + maxpointspec_act,nclassunc,maxageclass)
573  !real wetgridunc(0:maxxgrid-1,0:maxygrid-1,maxspec,
574  ! + maxpointspec_act,nclassunc,maxageclass)
575  !real wetgriduncn(0:maxxgridn-1,0:maxygridn-1,maxspec,
576  ! +ct maxpointspec,nclassunc,maxageclass)
577  !real drygridunc(0:maxxgrid-1,0:maxygrid-1,maxspec,maxpointspec,
578  ! + nclassunc,maxageclass)
579  !real drygriduncn(0:maxxgridn-1,0:maxygridn-1,maxspec,
580  ! + maxpointspec,nclassunc,maxageclass)
581 
582  !real oroout(0:maxxgrid-1,0:maxygrid-1)
583  !real orooutn(0:maxxgridn-1,0:maxygridn-1)
584  ! real area(0:maxxgrid-1,0:maxygrid-1)
585  !real arean(0:maxxgridn-1,0:maxygridn-1)
586  !real volume(0:maxxgrid-1,0:maxygrid-1,maxzgrid)
587  !real volumen(0:maxxgridn-1,0:maxygridn-1,maxzgrid)
588 
589  !real areaeast(0:maxxgrid-1,0:maxygrid-1,maxzgrid)
590  !real areanorth(0:maxxgrid-1,0:maxygrid-1,maxzgrid)
591 
592 
593  ! gridunc,griduncn uncertainty of outputted concentrations
594  ! wetgridunc,wetgriduncn uncertainty of accumulated wet deposited mass on output grid
595  ! drygridunc,drygriduncn uncertainty of accumulated dry deposited mass on output grid
596  ! oroout,orooutn [m] height of model topography at output grid
597  ! area,arean [m2] area of each grid cell
598  ! volume,volumen [m3] volume of each grid cell
599  ! ... field names with n at the end indicate a nested output grid
600 
601 
602  !***********************************
603  ! Variables defining receptor points
604  !***********************************
605 
606  real :: xreceptor(maxreceptor),yreceptor(maxreceptor)
607  real :: receptorarea(maxreceptor)
608  real :: creceptor(maxreceptor,maxspec)
609  character(len=16) :: receptorname(maxreceptor)
610  integer :: numreceptor
611 
612  ! xreceptor,yreceptor receptor position
613  ! creceptor concentrations at receptor points
614  ! receptorarea area of 1*1 grid cell at receptor point
615 
616 
617 
618  !***************************************
619  ! Variables characterizing each particle
620  !***************************************
621 
622  integer :: numpart,itra1(maxpart)
623  integer :: npoint(maxpart),nclass(maxpart)
624  integer :: idt(maxpart),itramem(maxpart),itrasplit(maxpart)
625  integer :: numparticlecount
626 
627  real(kind=dp) :: xtra1(maxpart),ytra1(maxpart)
628  real :: ztra1(maxpart),xmass1(maxpart,maxspec)
629 
630  ! numpart actual number of particles in memory
631  ! itra1 (maxpart) [s] temporal positions of the particles
632  ! npoint(maxpart) indicates the release point of each particle
633  ! nclass (maxpart) one of nclassunc classes to which the particle is attributed
634  ! itramem (maxpart) [s] memorized release times of the particles
635  ! itrasplit (maxpart) [s] next time when particle is to be split into two
636  ! idt(maxpart) [s] time step to be used for next integration
637  ! numparticlecount counts the total number of particles that have been released
638  ! xtra1,ytra1,ztra1 spatial positions of the particles
639  ! xmass1 [kg] particle masses
640 
641 
642 
643  !*******************************************************
644  ! Info table on available chemical species/radionuclides
645  !*******************************************************
646 
647  !character*10 specname(maxtable)
648  !real decaytime(maxtable),wetscava(maxtable),wetscavb(maxtable)
649  !real drydiff(maxtable),dryhenry(maxtable),dryactiv(maxtable)
650  !real partrho(maxtable),partmean(maxtable),partsig(maxtable)
651  !real dryvelo(maxtable),weightmol(maxtable),ohreact(maxtable)
652 
653  ! specname Name of chemical species/radionuclide
654  ! decaytime Half time of radionuclides
655  ! wetscava, wetscavb Parameters for calculating scavenging coefficients
656  ! drydiff diffusivitiy of species relative to diff. of H2O
657  ! dryhenry [M/atm] Henry constant
658  ! dryactiv reactivity relative to that of O3
659  ! partrho [kg/m3] density of particles
660  ! partmean [m] mean diameter of particles
661  ! partsig [m] mean stand. deviation of particle diameter
662  ! dryvelo [cm/s] constant dry deposition velocity
663  ! weightmol [g/mol] molecular weight
664  ! ohreact OH reaction rate
665 
666 
667 
668  !********************
669  ! Random number field
670  !********************
671 
672  real :: rannumb(maxrand)
673 
674  ! rannumb field of normally distributed random numbers
675 
676 
677 end module com_mod