source: flexpart.git/src/com_mod.f90 @ c2bd55e

10.4.1_peseiGFS_025bugfixes+enhancementsdevrelease-10release-10.4.1scaling-bugunivie
Last change on this file since c2bd55e was c2bd55e, checked in by Espen Sollum ATMOS <eso@…>, 6 years ago

Fixed an issue with nested input fields, and nested output fields that have more than 1000 points in x or y (netcdf output)

  • Property mode set to 100644
File size: 36.1 KB
Line 
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:15 August 2013 IP                                         *
10!                                                                              *
11!*******************************************************************************
12
13module 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, numwfmem
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  character(len=256) :: pathfile, flexversion, flexversion_major, arg1, arg2
28  character(len=256) :: ohfields_path
29 
30  ! path                    path names needed for trajectory model
31  ! length                  length of path names needed for trajectory model
32  ! pathfile                file where pathnames are stored
33  ! flexversion             version of flexpart (descriptive long string)
34  ! flexversion_major       version of flexpart (major version number)
35  ! arg                     input arguments from launch at command line
36  ! ohfields_path           path to binary files for OH fields
37
38  !********************************************************
39  ! Variables defining the general model run specifications
40  !********************************************************
41
42  integer :: ibdate,ibtime,iedate,ietime
43  real(kind=dp) :: bdate,edate
44
45
46  ! ibdate                  beginning date (YYYYMMDD)
47  ! ibtime                  beginning time (HHMISS)
48  ! iedate                  ending date (YYYYMMDD)
49  ! ietime                  ending time (HHMISS)
50  ! bdate                   beginning date of simulation (julian date)
51  ! edate                   ending date of simulation (julian date)
52
53
54  integer :: ldirect,ideltas
55
56  ! ldirect                 1 for forward, -1 for backward simulation
57  ! ideltas                 length of trajectory loop from beginning to
58  !                    ending date (s)
59
60  integer :: loutstep,loutaver,loutsample,method,lsynctime
61  real :: outstep
62
63  ! loutstep [s]            gridded concentration output every loutstep seconds
64  ! loutaver [s]            concentration output is an average over [s] seconds
65  ! loutsample [s]          sampling interval of gridded concentration output
66  ! lsynctime [s]           synchronisation time of all particles
67  ! method                  indicator which dispersion method is to be used
68  ! outstep = real(abs(loutstep))
69
70  real :: ctl,fine
71  integer :: ifine,iout,ipout,ipin,iflux,mdomainfill
72  integer :: mquasilag,nested_output,ind_source,ind_receptor
73  integer :: ind_rel,ind_samp,ioutputforeachrelease,linit_cond,surf_only
74  logical :: turbswitch
75  integer :: cblflag !added by mc for cbl
76
77  ! ctl      factor, by which time step must be smaller than Lagrangian time scale
78  ! ifine    reduction factor for time step used for vertical wind
79  !     Langevin equation for the vertical wind component
80  ! ioutputforeachrelease Should each release be a seperate output field?
81  ! iflux    flux calculation options: 1 calculation of fluxes, 2 no fluxes
82  ! iout     output options: 1 conc. output (ng/m3), 2 mixing ratio (pptv), 3 both
83  ! ipout    particle dump options: 0 no, 1 every output interval, 2 only at end
84  ! ipin     read in particle positions from dumped file from a previous run
85  ! fine     real(ifine)
86  ! mdomainfill 0: normal run
87  !        1: particles are initialized according to atmospheric mass distribution
88  ! ind_source switches between different units for concentrations at the source
89  !  NOTE that in backward simulations the release of computational particles
90  !  takes place at the "receptor" and the sampling of particles at the "source".
91  !     1= mass units
92  !     2= mass mixing ratio units
93  ! ind_receptor switches between different units for FLEXPART concentration at the receptor
94  !     1= mass units
95  !     2= mass mixing ratio units
96  ! linit_cond  switch on the output of sensitivity to initial conditions for backward runs
97  !     0=no, 1=mass unit, 2=mass mixing ratio unit
98  ! mquasilag 0: normal run
99  !      1: Particle position output is produced in a condensed format and particles are numbered
100  ! surf_only   switch output in grid_time files for surface only or full vertical resolution
101  !      0=no (full vertical resolution), 1=yes (surface only)
102  ! nested_output: 0 no, 1 yes
103  ! turbswitch              determines how the Markov chain is formulated
104
105  ! ind_rel and ind_samp  are used within the code to change between mass and mass-mix (see readcommand.f)
106  ! cblflag !: 1 activate cbl skewed pdf routines with bi-gaussina pdf whan OL<0 added by mc
107
108
109  integer :: mintime,itsplit
110
111  ! mintime                 minimum time step to be used by FLEXPART
112  ! itsplit                 time constant for splitting particles
113
114  integer :: lsubgrid,lconvection,lagespectra
115
116  ! lsubgrid     1 if subgrid topography parameterization switched on, 2 if not
117  ! lconvection  1 if convection parameterization switched on, 0 if not
118  ! lagespectra  1 if age spectra calculation switched on, 2 if not
119
120  integer :: lnetcdfout
121  ! lnetcdfout   1 for netcdf grid output, 0 if not. Set in COMMAND (namelist input)
122
123  integer :: nageclass,lage(maxageclass)
124
125  ! nageclass               number of ageclasses for the age spectra calculation
126  ! lage [s]                ageclasses for the age spectra calculation
127
128
129  logical :: gdomainfill
130
131  ! gdomainfill             .T., if domain-filling is global, .F. if not
132
133!ZHG SEP 2015 wheather or not to read clouds from GRIB
134  logical :: readclouds=.false.
135!ESO DEC 2015 whether or not both clwc and ciwc are present (if so they are summed)
136  logical :: sumclouds=.false.
137
138!ESO: Disable settling if more than 1 species per release point
139  logical :: lsettling=.true.
140
141  logical,dimension(maxnests) :: readclouds_nest, sumclouds_nest
142 
143
144!NIK 16.02.2015
145  integer(selected_int_kind(16)), dimension(maxspec) :: tot_blc_count=0, &
146       &tot_inc_count=0
147
148
149  !*********************************************************************
150  ! Variables defining the release locations, released species and their
151  ! properties, etc.
152  !*********************************************************************
153
154  !change Sabine Eckhardt, only save the first 1000 identifier for releasepoints
155  character :: compoint(1001)*45
156  integer :: numpoint
157  !sec, now dynamically allocated:
158  ! ireleasestart(maxpoint),ireleaseend(maxpoint)
159  !      real xpoint1(maxpoint),ypoint1(maxpoint)
160  !real xpoint2(maxpoint),ypoint2(maxpoint)
161  !real zpoint1(maxpoint),zpoint2(maxpoint)
162  !integer*2 kindz(maxpoint)
163  integer :: specnum(maxspec)
164  !real xmass(maxpoint,maxspec)
165  real :: decay(maxspec)
166  real :: weta_gas(maxspec),wetb_gas(maxspec)
167  real :: crain_aero(maxspec),csnow_aero(maxspec)
168! NIK: 31.01.2013- parameters for in-cloud scavening
169  real :: ccn_aero(maxspec),in_aero(maxspec)
170  real :: reldiff(maxspec),henry(maxspec),f0(maxspec)
171  real :: density(maxspec),dquer(maxspec),dsigma(maxspec)
172  real :: vsetaver(maxspec),cunningham(maxspec),weightmolar(maxspec)
173  real :: vset(maxspec,ni),schmi(maxspec,ni),fract(maxspec,ni)
174  real :: ri(5,numclass),rac(5,numclass),rcl(maxspec,5,numclass)
175  real :: rgs(maxspec,5,numclass),rlu(maxspec,5,numclass)
176  real :: rm(maxspec),dryvel(maxspec),kao(maxspec)
177  real :: ohcconst(maxspec),ohdconst(maxspec),ohnconst(maxspec)
178  ! se  it is possible to associate a species with a second one to make transfer from gas to aerosol
179  integer :: spec_ass(maxspec)
180
181  real :: area_hour(maxspec,24),point_hour(maxspec,24)
182  real :: area_dow(maxspec,7),point_dow(maxspec,7)
183
184  !integer npart(maxpoint)
185  integer :: nspec,maxpointspec_act
186  character(len=10) :: species(maxspec)
187
188
189  ! compoint                comment, also "name" of each starting point
190  ! numpoint                actual number of trajectory starting/ending points
191  ! ireleasestart,ireleaseend [s] starting and ending time of each release
192  ! xmass                   total mass emitted
193  ! xpoint1,ypoint1         lower left coordinates of release area
194  ! xpoint2,ypoint2         upper right coordinates of release area
195  ! zpoint1,zpoint2         min./max. z-coordinates of release points
196  ! kindz                   1: zpoint is in m agl, 2: zpoint is in m asl
197  ! npart                   number of particles per release point
198  ! nspec                   number of different species allowed for one release
199  ! maxpointspec_act        number of releaspoints for which a different output shall be created
200  ! species                 name of species
201  ! decay                   decay constant of radionuclide
202
203  ! WET DEPOSITION
204  ! weta_gas, wetb_gas     parameters for below-cloud wet scavenging coefficients (gasses)
205  ! crain_aero, csnow_aero parameters for below-cloud wet scavenging coefficients (aerosols)
206  ! ccn_aero, cin_aero     parameters for in-cloud wet scavenging coefficients (aerosols)
207
208  ! GAS DEPOSITION
209  ! reldiff                 diffusivitiy of species relative to diff. of H2O
210  ! henry [M/atm]           Henry constant
211  ! f0                      reactivity relative to that of O3
212  ! ri [s/m]                stomatal resistance
213  ! rcl [s/m]               lower canopy resistance
214  ! rgs [s/m]               ground resistance
215  ! rlu [s/m]               leaf cuticular resistance
216  ! rm [s/m]                mesophyll resistance
217  ! dryvel [m/s]            constant dry deposition velocity
218
219  ! PARTICLE DEPOSITION
220  ! density [kg/m3]         density of particles
221  ! dquer [m]               mean diameter of particles
222  ! dsigma                  dsigma=10 or dsigma=0.1 means that 68% of the
223  !                         mass are between 0.1*dquer and 10*dquer
224
225  ! fract                   mass fraction of each diameter interval
226  ! vset [m/s]              gravitational settling velocity in ni intervals
227  ! cunningham              Cunningham slip correction (strictly valid only near surface)
228  ! vsetaver [m/s]          average gravitational settling velocity
229  ! schmi                   Schmidt number**2/3 of each diameter interval
230  ! weightmolar [g/mol]     molecular weight
231
232  ! TIME VARIATION OF EMISSION
233  ! area_hour, point_hour   daily variation of emission strengths for area and point sources
234  ! area_dow, point_dow     day-of-week variation of emission strengths for area and point sources
235
236
237
238  !**********************************************************
239  ! Variables used for domain-filling trajectory calculations
240  !**********************************************************
241
242  integer :: nx_we(2),ny_sn(2)
243  integer :: numcolumn
244  integer :: numcolumn_we(2,0:nymax-1),numcolumn_sn(2,0:nxmax-1)
245  real :: zcolumn_we(2,0:nymax-1,maxcolumn)
246  real :: zcolumn_sn(2,0:nxmax-1,maxcolumn)
247  real :: xmassperparticle
248  real :: acc_mass_we(2,0:nymax-1,maxcolumn)
249  real :: acc_mass_sn(2,0:nxmax-1,maxcolumn)
250
251  ! nx_we(2)                x indices of western and eastern boundary of domain-filling
252  ! ny_sn(2)                y indices of southern and northern boundary of domain-filling
253  ! numcolumn_we            number of particles to be released within one column
254  !                    at the western and eastern boundary surfaces
255  ! numcolumn_sn            same as numcolumn_we, but for southern and northern domain boundary
256  ! numcolumn               maximum number of particles to be released within a single
257  !                    column
258  ! zcolumn_we              altitudes where particles are to be released
259  !                    at the western and eastern boundary surfaces
260  ! zcolumn_sn              same as zcolumn_we, but for southern and northern domain boundary
261  ! xmassperparticle        air mass per particle in the domain-filling traj. option
262  ! acc_mass_we             mass that has accumulated at the western and eastern boundary;
263  !                    if it exceeds xmassperparticle, a particle is released and
264  !                    acc_mass_we is reduced accordingly
265  ! acc_mass_sn             same as acc_mass_we, but for southern and northern domain boundary
266
267
268
269  !******************************************************************************
270  ! Variables associated with the ECMWF meteorological input data ("wind fields")
271  !******************************************************************************
272
273  integer :: numbwf,wftime(maxwf),lwindinterv
274  character(len=255) :: wfname(maxwf),wfspec(maxwf)
275
276  ! lwindinterv [s]         Interval between wind fields currently in memory
277  ! numbwf                  actual number of wind fields
278  ! wftime(maxwf) [s]       times relative to beginning time of wind fields
279  ! wfname(maxwf)           file names of wind fields
280  ! wfspec(maxwf)           specifications of wind field file, e.g. if on hard
281  !                         disc or on tape
282
283  integer :: memtime(numwfmem),memind(3) ! eso: or memind(numwfmem)
284
285  ! memtime [s]             validation times of wind fields in memory
286  ! memind                  pointer to wind field, in order to avoid shuffling
287  !                         of wind fields
288
289
290
291  !****************************************************************************
292  ! Variables defining actual size and geographical location of the wind fields
293  !****************************************************************************
294
295  integer :: nx,ny,nxmin1,nymin1,nxfield,nuvz,nwz,nz,nmixz,nlev_ec
296  real :: dx,dy,xlon0,ylat0,dxconst,dyconst,height(nzmax)
297
298  ! nx,ny,nz                actual dimensions of wind fields in x,y and z
299  !                    direction, respectively
300  ! nxmin1,nymin1           nx-1, ny-1, respectively
301  ! nuvz,nwz                vertical dimension of original ECMWF data
302  ! nxfield                 same as nx for limited area fields,
303  !                    but for global fields nx=nxfield+1
304  ! nmixz                   number of levels up to maximum PBL height (3500 m)
305
306  ! nuvz is used for u,v components
307  ! nwz is used for w components (staggered grid)
308  ! nz is used for the levels in transformed coordinates (terrain-following Cartesian
309  ! coordinates)
310
311  ! nlev_ec  number of levels ECMWF model
312  ! dx                      grid distance in x direction
313  ! dy                      grid distance in y direction
314  ! dxconst,dyconst         auxiliary variables for utransform,vtransform
315  ! height                  heights of all levels
316  ! xlon0                   geographical longitude and
317  ! ylat0                   geographical latitude of lower left grid point
318
319
320
321  !*************************************************
322  ! Variables used for vertical model discretization
323  !*************************************************
324
325  real :: akm(nwzmax),bkm(nwzmax)
326  real :: akz(nuvzmax),bkz(nuvzmax)
327  real :: aknew(nzmax),bknew(nzmax)
328
329  ! akm,bkm: coeffizients which regulate vertical discretization of ecmwf model
330  !     (at the border of model layers)
331  ! akz,bkz: model discretization coeffizients at the centre of the layers
332  ! aknew,bknew model discretization coeffizients at the interpolated levels
333
334
335
336  ! Fixed fields, unchangeable with time
337  !*************************************
338
339  real :: oro(0:nxmax-1,0:nymax-1)
340  real :: excessoro(0:nxmax-1,0:nymax-1)
341  real :: lsm(0:nxmax-1,0:nymax-1)
342  real :: xlanduse(0:nxmax-1,0:nymax-1,numclass)
343
344  ! oro [m]              orography of the ECMWF model
345  ! excessoro            excess orography mother domain
346  ! lsm                  land sea mask of the ECMWF model
347  ! xlanduse [0-1]       area fractions in percent
348
349  ! 3d fields
350  !**********
351
352  real :: uu(0:nxmax-1,0:nymax-1,nzmax,numwfmem)
353  real :: vv(0:nxmax-1,0:nymax-1,nzmax,numwfmem)
354  real :: uupol(0:nxmax-1,0:nymax-1,nzmax,numwfmem)
355  real :: vvpol(0:nxmax-1,0:nymax-1,nzmax,numwfmem)
356  real :: ww(0:nxmax-1,0:nymax-1,nzmax,numwfmem)
357  real :: tt(0:nxmax-1,0:nymax-1,nzmax,numwfmem)
358  real :: qv(0:nxmax-1,0:nymax-1,nzmax,numwfmem)
359!ZHG adding cloud water
360  real :: clwc(0:nxmax-1,0:nymax-1,nzmax,numwfmem)=0.0 !liquid   [kg/kg]
361  real :: ciwc(0:nxmax-1,0:nymax-1,nzmax,numwfmem)=0.0 !ice      [kg/kg]
362  real :: clw(0:nxmax-1,0:nymax-1,nzmax,numwfmem)=0.0  !combined [m3/m3]
363
364  real :: pv(0:nxmax-1,0:nymax-1,nzmax,numwfmem)
365  real :: rho(0:nxmax-1,0:nymax-1,nzmax,numwfmem)
366  real :: drhodz(0:nxmax-1,0:nymax-1,nzmax,numwfmem)
367  real :: tth(0:nxmax-1,0:nymax-1,nuvzmax,numwfmem)
368  real :: qvh(0:nxmax-1,0:nymax-1,nuvzmax,numwfmem)
369  real :: clwch(0:nxmax-1,0:nymax-1,nuvzmax,numwfmem)=0.0
370  real :: ciwch(0:nxmax-1,0:nymax-1,nuvzmax,numwfmem)=0.0
371
372  real :: pplev(0:nxmax-1,0:nymax-1,nuvzmax,numwfmem)
373  !scavenging NIK, PS
374  integer(kind=1) :: clouds(0:nxmax-1,0:nymax-1,nzmax,numwfmem)
375  integer :: cloudsh(0:nxmax-1,0:nymax-1,numwfmem)
376
377!ZHG Sep 2015 
378!   real :: icloud_stats(0:nxmax-1,0:nymax-1,5,numwfmem)
379   real :: ctwc(0:nxmax-1,0:nymax-1,numwfmem) ! ESO: =icloud_stats(:,:,4,:)
380
381
382  ! uu,vv,ww [m/2]       wind components in x,y and z direction
383  ! uupol,vvpol [m/s]    wind components in polar stereographic projection
384  ! tt [K]               temperature data
385  ! qv                   specific humidity data
386  ! pv (pvu)             potential vorticity
387  ! rho [kg/m3]          air density
388  ! drhodz [kg/m2]       vertical air density gradient
389  ! tth,qvh              tth,qvh on original eta levels
390  ! clouds:   no cloud, no precipitation   0
391  !      cloud, no precipitation      1
392  !      rainout  conv/lsp dominated  2/3
393  !      washout  conv/lsp dominated  4/5
394  ! PS 2013
395  !c icloudbot (m)        cloud bottom height
396  !c icloudthck (m)       cloud thickness     
397
398  ! pplev for the GFS version
399  ! ctwc                 total cloud water content
400
401  ! 2d fields
402  !**********
403
404  real :: ps(0:nxmax-1,0:nymax-1,1,numwfmem)
405  real :: sd(0:nxmax-1,0:nymax-1,1,numwfmem)
406  real :: msl(0:nxmax-1,0:nymax-1,1,numwfmem)
407  real :: tcc(0:nxmax-1,0:nymax-1,1,numwfmem)
408  real :: u10(0:nxmax-1,0:nymax-1,1,numwfmem)
409  real :: v10(0:nxmax-1,0:nymax-1,1,numwfmem)
410  real :: tt2(0:nxmax-1,0:nymax-1,1,numwfmem)
411  real :: td2(0:nxmax-1,0:nymax-1,1,numwfmem)
412  real :: lsprec(0:nxmax-1,0:nymax-1,1,numwfmem)
413  real :: convprec(0:nxmax-1,0:nymax-1,1,numwfmem)
414  real :: sshf(0:nxmax-1,0:nymax-1,1,numwfmem)
415  real :: ssr(0:nxmax-1,0:nymax-1,1,numwfmem)
416  real :: surfstr(0:nxmax-1,0:nymax-1,1,numwfmem)
417  real :: ustar(0:nxmax-1,0:nymax-1,1,numwfmem)
418  real :: wstar(0:nxmax-1,0:nymax-1,1,numwfmem)
419  real :: hmix(0:nxmax-1,0:nymax-1,1,numwfmem)
420  real :: tropopause(0:nxmax-1,0:nymax-1,1,numwfmem)
421  real :: oli(0:nxmax-1,0:nymax-1,1,numwfmem)
422! real :: diffk(0:nxmax-1,0:nymax-1,1,numwfmem) ESO: this is not in use?
423! logical :: beneath_cloud=.true.
424  ! ps                   surface pressure
425  ! sd                   snow depth
426  ! msl                  mean sea level pressure
427  ! tcc                  total cloud cover
428  ! u10                  10 meter u
429  ! v10                  10 meter v
430  ! tt2                  2 meter temperature
431  ! td2                  2 meter dew point
432  ! lsprec [mm/h]        large scale total precipitation
433  ! convprec [mm/h]      convective precipitation
434  ! sshf                 surface sensible heat flux
435  ! ssr                  surface solar radiation
436  ! surfstr              surface stress
437  ! ustar [m/s]          friction velocity
438  ! wstar [m/s]          convective velocity scale
439  ! hmix  [m]            mixing height
440  ! tropopause [m]       altitude of thermal tropopause
441  ! oli [m]              inverse Obukhov length (1/L)
442  ! diffk [m2/s]         diffusion coefficient at reference height
443
444
445  real :: vdep(0:nxmax-1,0:nymax-1,maxspec,numwfmem)
446
447  ! vdep [m/s]           deposition velocities
448
449
450  !********************************************************************
451  ! Variables associated with the ECMWF input data (nested wind fields)
452  !********************************************************************
453
454  ! NOTE: all nested variables have the same name as the variables used
455  ! for the mother domain, except with a 'n' appended at the end
456  !********************************************************************
457
458  integer :: numbnests
459
460  ! numbnests    number of nested grids
461
462  character(len=255) :: wfnamen(maxnests,maxwf)
463  character(len=18) :: wfspecn(maxnests,maxwf)
464
465  ! wfnamen      nested wind field names
466  ! wfspecn      specifications of wind field file, e.g. if on hard
467  !         disc or on tape
468
469
470  !*********************************************************************
471  ! Variables characterizing size and location of the nested wind fields
472  !*********************************************************************
473
474  integer :: nxn(maxnests),nyn(maxnests)
475  real :: dxn(maxnests),dyn(maxnests),xlon0n(maxnests),ylat0n(maxnests)
476
477  ! nxn,nyn      actual dimensions of nested wind fields in x and y direction
478  ! dxn,dyn      grid distances in x,y direction for the nested grids
479  ! xlon0n       geographical longitude of lower left grid point of nested wind fields
480  ! ylat0n       geographical latitude of lower left grid point of nested wind fields
481
482
483  ! Nested fields, unchangeable with time
484  !**************************************
485
486  real :: oron(0:nxmaxn-1,0:nymaxn-1,maxnests)
487  real :: excessoron(0:nxmaxn-1,0:nymaxn-1,maxnests)
488  real :: lsmn(0:nxmaxn-1,0:nymaxn-1,maxnests)
489  real :: xlandusen(0:nxmaxn-1,0:nymaxn-1,numclass,maxnests)
490
491
492  ! 3d nested fields
493  !*****************
494
495  real,allocatable,dimension(:,:,:,:,:) :: uun, vvn, wwn, ttn, qvn, pvn,&
496       & rhon, drhodzn, tthn, qvhn, clwcn, ciwcn, clwn, clwchn, ciwchn
497  real,allocatable,dimension(:,:,:,:) :: ctwcn
498  integer,allocatable,dimension(:,:,:,:) :: cloudshn
499  integer(kind=1),allocatable,dimension(:,:,:,:,:) :: cloudsn
500
501  ! 2d nested fields
502  !*****************
503
504  real :: psn(0:nxmaxn-1,0:nymaxn-1,1,numwfmem,maxnests)
505  real :: sdn(0:nxmaxn-1,0:nymaxn-1,1,numwfmem,maxnests)
506  real :: msln(0:nxmaxn-1,0:nymaxn-1,1,numwfmem,maxnests)
507  real :: tccn(0:nxmaxn-1,0:nymaxn-1,1,numwfmem,maxnests)
508  real :: u10n(0:nxmaxn-1,0:nymaxn-1,1,numwfmem,maxnests)
509  real :: v10n(0:nxmaxn-1,0:nymaxn-1,1,numwfmem,maxnests)
510  real :: tt2n(0:nxmaxn-1,0:nymaxn-1,1,numwfmem,maxnests)
511  real :: td2n(0:nxmaxn-1,0:nymaxn-1,1,numwfmem,maxnests)
512  real :: lsprecn(0:nxmaxn-1,0:nymaxn-1,1,numwfmem,maxnests)
513  real :: convprecn(0:nxmaxn-1,0:nymaxn-1,1,numwfmem,maxnests)
514  real :: sshfn(0:nxmaxn-1,0:nymaxn-1,1,numwfmem,maxnests)
515  real :: ssrn(0:nxmaxn-1,0:nymaxn-1,1,numwfmem,maxnests)
516  real :: surfstrn(0:nxmaxn-1,0:nymaxn-1,1,numwfmem,maxnests)
517  real :: ustarn(0:nxmaxn-1,0:nymaxn-1,1,numwfmem,maxnests)
518  real :: wstarn(0:nxmaxn-1,0:nymaxn-1,1,numwfmem,maxnests)
519  real :: hmixn(0:nxmaxn-1,0:nymaxn-1,1,numwfmem,maxnests)
520  real :: tropopausen(0:nxmaxn-1,0:nymaxn-1,1,numwfmem,maxnests)
521  real :: olin(0:nxmaxn-1,0:nymaxn-1,1,numwfmem,maxnests)
522  ! real :: diffkn(0:nxmaxn-1,0:nymaxn-1,1,numwfmem,maxnests) ! not in use?
523  real :: vdepn(0:nxmaxn-1,0:nymaxn-1,maxspec,numwfmem,maxnests)
524
525
526  !*************************************************
527  ! Certain auxiliary variables needed for the nests
528  !*************************************************
529
530  real :: xresoln(0:maxnests),yresoln(0:maxnests)
531
532  ! xresoln, yresoln   Factors by which the resolutions in the nests
533  !               are enhanced compared to mother grid
534
535  real :: xln(maxnests),yln(maxnests),xrn(maxnests),yrn(maxnests)
536
537  ! xln,yln,xrn,yrn    Corner points of nested grids in grid coordinates
538  !               of mother grid
539
540
541  !******************************************************
542  ! Variables defining the polar stereographic projection
543  !******************************************************
544
545  logical :: xglobal,sglobal,nglobal
546  real :: switchnorthg,switchsouthg
547
548  !xglobal             T for global fields, F for limited area fields
549  !sglobal             T if domain extends towards south pole
550  !nglobal             T if domain extends towards north pole
551  !switchnorthg,switchsouthg   same as parameters switchnorth,
552  !                    switchsouth, but in grid units
553
554  real :: southpolemap(9),northpolemap(9)
555
556  !southpolemap,northpolemap   define stereographic projections
557  !                    at the two poles
558
559
560  !******************
561  ! Landuse inventory
562  ! Sabine Eckhardt Dec 06: change to new landuse inventary - 11 classes, 1200 x 600 global
563  !******************
564
565  integer(kind=1) :: landinvent(1200,600,6)
566  real :: z0(numclass)
567
568  ! landinvent         landuse inventory (numclass=11 classes)
569  ! z0                  roughness length for the landuse classes
570
571
572
573  !**************************************************************************
574  ! Variables characterizing the output grid and containing the model results
575  !**************************************************************************
576
577  integer :: numxgrid,numygrid,numzgrid
578  real :: dxout,dyout,outlon0,outlat0,xoutshift,youtshift
579  integer :: numxgridn,numygridn
580  real :: dxoutn,dyoutn,outlon0n,outlat0n,xoutshiftn,youtshiftn
581  !real outheight(maxzgrid),outheighthalf(maxzgrid)
582
583  logical :: DEP,DRYDEP,DRYDEPSPEC(maxspec),WETDEP,WETDEPSPEC(maxspec),&
584       & OHREA,ASSSPEC
585  logical :: DRYBKDEP,WETBKDEP
586
587  ! numxgrid,numygrid       number of grid points in x,y-direction
588  ! numxgridn,numygridn     number of grid points in x,y-direction for nested output grid
589  ! numzgrid                number of vertical levels of output grid
590  ! dxout,dyout             grid distance of output grid
591  ! dxoutn,dyoutn           grid distance of nested output grid
592  ! outlon0,outlat0         lower left corner of output grid
593  ! outlon0n,outlat0n       lower left corner of nested output grid
594  ! xoutshift,youtshift     xlon0-outlon0, ylat0-outlat0
595  ! xoutshiftn,youtshiftn   xlon0-outlon0n, ylat0-outlat0n
596  ! outheight [m]           upper levels of the output grid
597  ! outheighthalf [m]       half (middle) levels of the output grid cells
598  ! DEP                     .true., if either dry or wet depos. is switched on
599  ! DRYDEP                  .true., if dry deposition is switched on
600  ! DRYDEPSPEC              .true., if dry deposition is switched on for that species
601  ! WETDEP                  .true., if wet deposition is switched on
602  ! WETDEPSPEC              .true., if wet deposition is switched on for that species
603  ! OHREA                   .true., if OH reaction is switched on
604  ! ASSSPEC                 .true., if there are two species asscoiated
605  ! DRYBKDEP,WETBKDEP        .true., for bkwd runs, where mass deposited and source regions is calculated - either for dry or for wet deposition
606  !                    (i.e. transfer of mass between these two occurs
607
608
609
610  !  if output for each releasepoint shall be created maxpointspec=number of releasepoints
611  !  else maxpointspec is 1 -> moved to unc_mod
612  !  the OUTGRID is moved to the module outg_mod
613  !******************************************************************************
614
615  !real gridunc(0:maxxgrid-1,0:maxygrid-1,maxzgrid,maxspec,
616  !    +             maxpointspec_act,nclassunc,maxageclass)
617  !real griduncn(0:maxxgridn-1,0:maxygridn-1,maxzgrid,maxspec,
618  !    +              maxpointspec_act,nclassunc,maxageclass)
619  !real wetgridunc(0:maxxgrid-1,0:maxygrid-1,maxspec,
620  !    +                maxpointspec_act,nclassunc,maxageclass)
621  !real wetgriduncn(0:maxxgridn-1,0:maxygridn-1,maxspec,
622  !    +ct                 maxpointspec,nclassunc,maxageclass)
623  !real drygridunc(0:maxxgrid-1,0:maxygrid-1,maxspec,maxpointspec,
624  !    +                nclassunc,maxageclass)
625  !real drygriduncn(0:maxxgridn-1,0:maxygridn-1,maxspec,
626  !    +                 maxpointspec,nclassunc,maxageclass)
627
628  !real oroout(0:maxxgrid-1,0:maxygrid-1)
629  !real orooutn(0:maxxgridn-1,0:maxygridn-1)
630  !     real area(0:maxxgrid-1,0:maxygrid-1)
631  !real arean(0:maxxgridn-1,0:maxygridn-1)
632  !real volume(0:maxxgrid-1,0:maxygrid-1,maxzgrid)
633  !real volumen(0:maxxgridn-1,0:maxygridn-1,maxzgrid)
634
635  !real areaeast(0:maxxgrid-1,0:maxygrid-1,maxzgrid)
636  !real areanorth(0:maxxgrid-1,0:maxygrid-1,maxzgrid)
637
638
639  ! gridunc,griduncn        uncertainty of outputted concentrations
640  ! wetgridunc,wetgriduncn  uncertainty of accumulated wet deposited mass on output grid
641  ! drygridunc,drygriduncn  uncertainty of accumulated dry deposited mass on output grid
642  ! oroout,orooutn [m]      height of model topography at output grid
643  ! area,arean [m2]         area of each grid cell
644  ! volume,volumen [m3]     volume of each grid cell
645  ! ... field names with n at the end indicate a nested output grid
646
647
648  !***********************************
649  ! Variables defining receptor points
650  !***********************************
651
652  real :: xreceptor(maxreceptor),yreceptor(maxreceptor)
653  real :: receptorarea(maxreceptor)
654  real :: creceptor(maxreceptor,maxspec)
655  character(len=16) :: receptorname(maxreceptor)
656  integer :: numreceptor
657
658  ! xreceptor,yreceptor     receptor position
659  ! creceptor               concentrations at receptor points
660  ! receptorarea            area of 1*1 grid cell at receptor point
661
662
663
664  !***************************************
665  ! Variables characterizing each particle
666  !***************************************
667
668  integer :: numpart=0
669  integer :: numparticlecount
670
671  integer, allocatable, dimension(:) :: itra1, npoint, nclass, idt, itramem, itrasplit
672
673  real(kind=dp), allocatable, dimension(:) :: xtra1, ytra1
674  real, allocatable, dimension(:) :: ztra1
675  real, allocatable, dimension(:,:) :: xmass1
676  real, allocatable, dimension(:,:) :: xscav_frac1
677
678  ! eso: Moved from timemanager
679  real, allocatable, dimension(:) :: uap,ucp,uzp,us,vs,ws
680  integer(kind=2), allocatable, dimension(:) :: cbt
681
682
683  !CGZ-lifetime
684  real, allocatable, dimension(:,:) ::checklifetime, species_lifetime
685  !CGZ-lifetime
686
687  ! numpart                 actual number of particles in memory
688  ! itra1 (maxpart) [s]     temporal positions of the particles
689  ! npoint(maxpart)         indicates the release point of each particle
690  ! nclass (maxpart)        one of nclassunc classes to which the particle is attributed
691  ! itramem (maxpart) [s]   memorized release times of the particles
692  ! itrasplit (maxpart) [s] next time when particle is to be split into two
693  ! idt(maxpart) [s]        time step to be used for next integration
694  ! numparticlecount        counts the total number of particles that have been released
695  ! xtra1,ytra1,ztra1       spatial positions of the particles
696  ! xmass1 [kg]             particle masses
697  ! xscav_frac1             fraction of particle masse which has been scavenged at receptor
698 
699
700
701  !*******************************************************
702  ! Info table on available chemical species/radionuclides
703  !*******************************************************
704
705  !character*10 specname(maxtable)
706  !real decaytime(maxtable),wetscava(maxtable),wetscavb(maxtable)
707  !real drydiff(maxtable),dryhenry(maxtable),dryactiv(maxtable)
708  !real partrho(maxtable),partmean(maxtable),partsig(maxtable)
709  !real dryvelo(maxtable),weightmol(maxtable),ohreact(maxtable)
710
711  ! specname            Name of chemical species/radionuclide
712  ! decaytime           Half time of radionuclides
713  ! wetscava, wetscavb  Parameters for calculating scavenging coefficients
714  ! drydiff             diffusivitiy of species relative to diff. of H2O
715  ! dryhenry [M/atm]    Henry constant
716  ! dryactiv            reactivity relative to that of O3
717  ! partrho [kg/m3]     density of particles
718  ! partmean [m]        mean diameter of particles
719  ! partsig [m]         mean stand. deviation of particle diameter
720  ! dryvelo [cm/s]      constant dry deposition velocity
721  ! weightmol [g/mol]   molecular weight
722  ! ohreact             OH reaction rate
723
724
725  !********************
726  ! Random number field
727  !********************
728
729  real :: rannumb(maxrand)
730
731  ! rannumb                 field of normally distributed random numbers
732 
733  !********************************************************************
734  ! variables to control stability of CBL scheme under variation
735  ! of statistics in time and space
736  !********************************************************************
737  integer :: nan_count,nan_count2,sum_nan_count(3600),maxtl=1200
738  !added by mc , note that for safety sum_nan_count(N) with N>maxtl
739
740  !********************************************************************
741  ! variables to test well-mixed state of CBL scheme not to be included in final release
742  !********************************************************************
743  real :: well_mixed_vector(50),h_well,well_mixed_norm,avg_air_dens(50),avg_ol,avg_wst,avg_h
744  ! modified by mc to test well-mixed for cbl
745
746  !********************
747  ! Verbosity, testing flags, namelist I/O
748  !********************   
749  integer :: verbosity=0
750  integer :: info_flag=0
751  integer :: count_clock, count_clock0,  count_rate, count_max
752  real    :: tins
753  logical, parameter :: nmlout=.true.
754
755  ! These variables are used to avoid having separate versions of
756  ! files in cases where differences with MPI version are minor (eso)
757  !*****************************************************************
758  integer :: mpi_mode=0 ! .gt. 0 if running MPI version
759  logical :: lroot=.true. ! true if serial version, or if MPI .and. root process
760 
761  logical, parameter :: interpolhmix=.false. ! true if the hmix shall be interpolated
762  logical, parameter :: turboff=.false.       ! true if the turbulence shall be switched off
763 
764 
765contains
766  subroutine com_mod_allocate_part(nmpart)
767  !*******************************************************************************   
768  ! Dynamic allocation of arrays
769  !
770  ! For FLEXPART version 9.2 and earlier these arrays were statically declared
771  ! with size maxpart. This function is introduced so that the MPI version
772  ! can declare these arrays with smaller size ("maxpart per process"), while
773  ! the serial version allocate at run-time with size maxpart
774  !
775  !*******************************************************************************
776    implicit none
777
778    integer, intent(in) :: nmpart ! maximum number of particles (per process)
779   
780! Arrays, previously static of size maxpart
781    allocate(itra1(nmpart),npoint(nmpart),nclass(nmpart),&
782         & idt(nmpart),itramem(nmpart),itrasplit(nmpart),&
783         & xtra1(nmpart),ytra1(nmpart),ztra1(nmpart),&
784         & xmass1(nmpart, maxspec),&
785         & checklifetime(nmpart,maxspec), species_lifetime(maxspec,2))!CGZ-lifetime
786
787
788    allocate(uap(nmpart),ucp(nmpart),uzp(nmpart),us(nmpart),&
789         & vs(nmpart),ws(nmpart),cbt(nmpart))
790   
791  end subroutine com_mod_allocate_part
792
793
794  subroutine com_mod_allocate_nests
795  !*******************************************************************************   
796  ! Dynamic allocation of arrays
797  !
798  ! For nested wind fields.
799  !
800  !*******************************************************************************
801    implicit none
802
803    allocate(uun(0:nxmaxn-1,0:nymaxn-1,nzmax,numwfmem,numbnests))
804    allocate(vvn(0:nxmaxn-1,0:nymaxn-1,nzmax,numwfmem,numbnests))
805    allocate(wwn(0:nxmaxn-1,0:nymaxn-1,nzmax,numwfmem,numbnests))
806    allocate(ttn(0:nxmaxn-1,0:nymaxn-1,nzmax,numwfmem,numbnests))
807    allocate(qvn(0:nxmaxn-1,0:nymaxn-1,nzmax,numwfmem,numbnests))
808    allocate(pvn(0:nxmaxn-1,0:nymaxn-1,nzmax,numwfmem,numbnests))
809    allocate(clwcn(0:nxmaxn-1,0:nymaxn-1,nzmax,numwfmem,numbnests))
810    allocate(ciwcn(0:nxmaxn-1,0:nymaxn-1,nzmax,numwfmem,numbnests))
811    allocate(clwn(0:nxmaxn-1,0:nymaxn-1,nzmax,numwfmem,numbnests))
812
813    allocate(cloudsn(0:nxmaxn-1,0:nymaxn-1,nzmax,numwfmem,numbnests))
814    allocate(cloudshn(0:nxmaxn-1,0:nymaxn-1,numwfmem,numbnests))
815    allocate(rhon(0:nxmaxn-1,0:nymaxn-1,nzmax,numwfmem,numbnests))
816    allocate(drhodzn(0:nxmaxn-1,0:nymaxn-1,nzmax,numwfmem,numbnests))
817    allocate(tthn(0:nxmaxn-1,0:nymaxn-1,nuvzmax,numwfmem,numbnests))
818    allocate(qvhn(0:nxmaxn-1,0:nymaxn-1,nuvzmax,numwfmem,numbnests))
819    allocate(clwchn(0:nxmaxn-1,0:nymaxn-1,nuvzmax,numwfmem,numbnests))
820    allocate(ciwchn(0:nxmaxn-1,0:nymaxn-1,nuvzmax,numwfmem,numbnests))
821    allocate(ctwcn(0:nxmaxn-1,0:nymaxn-1,numwfmem,numbnests))
822
823    clwcn(:,:,:,:,:)=0.
824    ciwcn(:,:,:,:,:)=0.
825    clwchn(:,:,:,:,:)=0.
826    ciwchn(:,:,:,:,:)=0.
827   
828  end subroutine com_mod_allocate_nests
829   
830
831end module com_mod
Note: See TracBrowser for help on using the repository browser.
hosted by ZAMG