80 character(len=50) :: line
88 open(unitcommand,file=path(1)(1:length(1))//
'COMMAND',status=
'old', &
97 read (unitcommand,901) line
99 if (index(line,
'LDIRECT') .eq. 0)
then
109 call
skplin(7,unitcommand)
110 if (old) call
skplin(1,unitcommand)
112 read(unitcommand,*) ldirect
113 if (old) call
skplin(3,unitcommand)
114 read(unitcommand,*) ibdate,ibtime
115 if (old) call
skplin(3,unitcommand)
116 read(unitcommand,*) iedate,ietime
117 if (old) call
skplin(3,unitcommand)
118 read(unitcommand,*) loutstep
119 if (old) call
skplin(3,unitcommand)
120 read(unitcommand,*) loutaver
121 if (old) call
skplin(3,unitcommand)
122 read(unitcommand,*) loutsample
123 if (old) call
skplin(3,unitcommand)
124 read(unitcommand,*) itsplit
125 if (old) call
skplin(3,unitcommand)
126 read(unitcommand,*) lsynctime
127 if (old) call
skplin(3,unitcommand)
128 read(unitcommand,*) ctl
129 if (old) call
skplin(3,unitcommand)
130 read(unitcommand,*) ifine
131 if (old) call
skplin(3,unitcommand)
132 read(unitcommand,*) iout
133 if (old) call
skplin(3,unitcommand)
134 read(unitcommand,*) ipout
135 if (old) call
skplin(3,unitcommand)
136 read(unitcommand,*) lsubgrid
137 if (old) call
skplin(3,unitcommand)
138 read(unitcommand,*) lconvection
139 if (old) call
skplin(3,unitcommand)
140 read(unitcommand,*) lagespectra
141 if (old) call
skplin(3,unitcommand)
142 read(unitcommand,*) ipin
143 if (old) call
skplin(3,unitcommand)
144 read(unitcommand,*) ioutputforeachrelease
145 if (old) call
skplin(3,unitcommand)
146 read(unitcommand,*) iflux
147 if (old) call
skplin(3,unitcommand)
148 read(unitcommand,*) mdomainfill
149 if (old) call
skplin(3,unitcommand)
150 read(unitcommand,*) ind_source
151 if (old) call
skplin(3,unitcommand)
152 read(unitcommand,*) ind_receptor
153 if (old) call
skplin(3,unitcommand)
154 read(unitcommand,*) mquasilag
155 if (old) call
skplin(3,unitcommand)
156 read(unitcommand,*) nested_output
157 if (old) call
skplin(3,unitcommand)
158 read(unitcommand,*) linit_cond
159 if (old) call
skplin(3,unitcommand)
160 read(unitcommand,*) preprocessed_metdata
198 if ( ldirect .eq. 1 )
then
200 if (ind_source .eq. 1 )
then
206 if (ind_receptor .eq. 1)
then
211 elseif (ldirect .eq. -1 )
then
213 if (ind_source .eq. 1 )
then
219 if (ind_receptor .eq. 1)
then
233 if (ldirect.eq.1) linit_cond=0
234 if ((linit_cond.lt.0).or.(linit_cond.gt.2))
then
235 write(*,*)
' #### FLEXPART MODEL ERROR! INVALID OPTION #### '
236 write(*,*)
' #### FOR LINIT_COND IN FILE "COMMAND". #### '
243 if (iedate.lt.ibdate)
then
244 write(*,*)
' #### FLEXPART MODEL ERROR! BEGINNING DATE #### '
245 write(*,*)
' #### IS LARGER THAN ENDING DATE. CHANGE #### '
246 write(*,*)
' #### EITHER POINT 2 OR POINT 3 IN FILE #### '
247 write(*,*)
' #### "COMMAND". #### '
249 else if (iedate.eq.ibdate)
then
250 if (ietime.lt.ibtime)
then
251 write(*,*)
' #### FLEXPART MODEL ERROR! BEGINNING TIME #### '
252 write(*,*)
' #### IS LARGER THAN ENDING TIME. CHANGE #### '
253 write(*,*)
' #### EITHER POINT 2 OR POINT 3 IN FILE #### '
254 write(*,*)
' #### "COMMAND". #### '
274 if ((iout.lt.1).or.(iout.gt.5))
then
275 write(*,*)
' #### FLEXPART MODEL ERROR! FILE COMMAND: #### '
276 write(*,*)
' #### IOUT MUST BE 1, 2, 3, 4, OR 5! #### '
281 if ( ((iout.eq.2).or.(iout.eq.3)).and. &
282 (ind_source.gt.1 .or.ind_receptor.gt.1) )
then
283 write(*,*)
' #### FLEXPART MODEL ERROR! FILE COMMAND: #### '
284 write(*,*)
' #### VOLUME MIXING RATIO ONLY SUPPORTED #### '
285 write(*,*)
' #### FOR MASS UNITS (at the moment) #### '
294 if ((ioutputforeachrelease.eq.1).and.(mquasilag.eq.1))
then
295 write(*,*)
'#### FLEXPART MODEL ERROR! FILE COMMAND: ####'
296 write(*,*)
'#### OUTPUTFOREACHRELEASE AND QUASILAGRANGIAN####'
297 write(*,*)
'#### MODE IS NOT POSSIBLE ! ####'
305 if ((ldirect.lt.0).and.(mquasilag.eq.1))
then
306 write(*,*)
'#### FLEXPART MODEL ERROR! FILE COMMAND: ####'
307 write(*,*)
'#### FOR BACKWARD RUNS, QUASILAGRANGIAN MODE ####'
308 write(*,*)
'#### IS NOT POSSIBLE ! ####'
316 #if defined WITH_CTBTO_PATCHES
324 if ((ldirect.lt.0).and.(ioutputforeachrelease.eq.0))
then
325 write(*,*)
'#### FLEXPART MODEL ERROR! FILE COMMAND: ####'
326 write(*,*)
'#### FOR BACKWARD RUNS, IOUTPUTFOREACHRLEASE ####'
327 write(*,*)
'#### MUST BE SET TO ONE! ####'
337 if ((mdomainfill.eq.1).and.(ioutputforeachrelease.eq.1))
then
338 write(*,*)
'#### FLEXPART MODEL ERROR! FILE COMMAND: ####'
339 write(*,*)
'#### FOR DOMAIN FILLING RUNS OUTPUT FOR ####'
340 write(*,*)
'#### EACH RELEASE IS FORBIDDEN ! ####'
350 if (ldirect.lt.0)
then
351 if ((iout.eq.2).or.(iout.eq.3))
then
352 write(*,*)
'#### FLEXPART MODEL ERROR! FILE COMMAND: ####'
353 write(*,*)
'#### FOR BACKWARD RUNS, IOUT MUST BE 1,4,OR 5####'
363 if (mdomainfill.ge.1)
then
364 if ((iout.eq.4).or.(iout.eq.5))
then
365 write(*,*)
'#### FLEXPART MODEL ERROR! FILE COMMAND: ####'
366 write(*,*)
'#### FOR DOMAIN-FILLING TRAJECTORY OPTION, ####'
367 write(*,*)
'#### IOUT MUST NOT BE SET TO 4 OR 5. ####'
377 if ((ipout.ne.0).and.(ipout.ne.1).and.(ipout.ne.2))
then
378 write(*,*)
' #### FLEXPART MODEL ERROR! FILE COMMAND: #### '
379 write(*,*)
' #### IPOUT MUST BE 1, 2 OR 3! #### '
383 if(lsubgrid.ne.1)
then
384 write(*,*)
' ---------------- '
385 write(*,*)
' INFORMATION: SUBGRIDSCALE TERRAIN EFFECT IS'
386 write(*,*)
' NOT PARAMETERIZED DURING THIS SIMULATION. '
387 write(*,*)
' ---------------- '
394 if ((lconvection.ne.0).and.(lconvection.ne.1))
then
395 write(*,*)
' #### FLEXPART MODEL ERROR! FILE COMMAND: #### '
396 write(*,*)
' #### LCONVECTION MUST BE SET TO EITHER 1 OR 0#### '
404 if (lsynctime.gt.(idiffnorm/2))
then
405 write(*,*)
' #### FLEXPART MODEL ERROR! SYNCHRONISATION #### '
406 write(*,*)
' #### TIME IS TOO LONG. MAKE IT SHORTER. #### '
407 write(*,*)
' #### MINIMUM HAS TO BE: ', idiffnorm/2
415 if (loutaver.eq.0)
then
416 write(*,*)
' #### FLEXPART MODEL ERROR! TIME AVERAGE OF #### '
417 write(*,*)
' #### CONCENTRATION FIELD OUTPUT MUST NOT BE #### '
418 write(*,*)
' #### ZERO. #### '
419 write(*,*)
' #### CHANGE INPUT IN FILE COMMAND. #### '
423 if (loutaver.gt.loutstep)
then
424 write(*,*)
' #### FLEXPART MODEL ERROR! TIME AVERAGE OF #### '
425 write(*,*)
' #### CONCENTRATION FIELD OUTPUT MUST NOT BE #### '
426 write(*,*)
' #### GREATER THAN INTERVAL OF OUTPUT. #### '
427 write(*,*)
' #### CHANGE INPUT IN FILE COMMAND. #### '
431 if (loutsample.gt.loutaver)
then
432 write(*,*)
' #### FLEXPART MODEL ERROR! SAMPLING TIME OF #### '
433 write(*,*)
' #### CONCENTRATION FIELD OUTPUT MUST NOT BE #### '
434 write(*,*)
' #### GREATER THAN TIME AVERAGE OF OUTPUT. #### '
435 write(*,*)
' #### CHANGE INPUT IN FILE COMMAND. #### '
439 if (mod(loutaver,lsynctime).ne.0)
then
440 write(*,*)
' #### FLEXPART MODEL ERROR! AVERAGING TIME OF #### '
441 write(*,*)
' #### CONCENTRATION FIELD MUST BE A MULTIPLE #### '
442 write(*,*)
' #### OF THE SYNCHRONISATION INTERVAL #### '
446 if ((loutaver/lsynctime).lt.2)
then
447 write(*,*)
' #### FLEXPART MODEL ERROR! AVERAGING TIME OF #### '
448 write(*,*)
' #### CONCENTRATION FIELD MUST BE AT LEAST #### '
449 write(*,*)
' #### TWICE THE SYNCHRONISATION INTERVAL #### '
453 if (mod(loutstep,lsynctime).ne.0)
then
454 write(*,*)
' #### FLEXPART MODEL ERROR! INTERVAL BETWEEN #### '
455 write(*,*)
' #### CONCENTRATION FIELDS MUST BE A MULTIPLE #### '
456 write(*,*)
' #### OF THE SYNCHRONISATION INTERVAL #### '
460 if ((loutstep/lsynctime).lt.2)
then
461 write(*,*)
' #### FLEXPART MODEL ERROR! INTERVAL BETWEEN #### '
462 write(*,*)
' #### CONCENTRATION FIELDS MUST BE AT LEAST #### '
463 write(*,*)
' #### TWICE THE SYNCHRONISATION INTERVAL #### '
467 if (mod(loutsample,lsynctime).ne.0)
then
468 write(*,*)
' #### FLEXPART MODEL ERROR! SAMPLING TIME OF #### '
469 write(*,*)
' #### CONCENTRATION FIELD MUST BE A MULTIPLE #### '
470 write(*,*)
' #### OF THE SYNCHRONISATION INTERVAL #### '
474 if (itsplit.lt.loutaver)
then
475 write(*,*)
' #### FLEXPART MODEL ERROR! SPLITTING TIME FOR#### '
476 write(*,*)
' #### PARTICLES IS TOO SHORT. PLEASE INCREASE #### '
477 write(*,*)
' #### SPLITTING TIME CONSTANT. #### '
481 if ((mquasilag.eq.1).and.(iout.ge.4))
then
482 write(*,*)
' #### FLEXPART MODEL ERROR! CONFLICTING #### '
483 write(*,*)
' #### OPTIONS: IF MQUASILAG=1, PLUME #### '
484 write(*,*)
' #### TRAJECTORY OUTPUT IS IMPOSSIBLE. #### '
491 outstep=
real(abs(loutstep))
492 if (ldirect.eq.1)
then
495 ideltas=nint((edate-bdate)*86400.)
496 else if (ldirect.eq.-1)
then
499 loutsample=-1*loutsample
500 lsynctime=-1*lsynctime
503 ideltas=nint((edate-bdate)*86400.)
505 write(*,*)
' #### FLEXPART MODEL ERROR! DIRECTION IN #### '
506 write(*,*)
' #### FILE "COMMAND" MUST BE EITHER -1 OR 1. #### '
512 999
write(*,*)
' #### FLEXPART MODEL ERROR! FILE "COMMAND" #### '
513 write(*,*)
' #### CANNOT BE OPENED IN THE DIRECTORY #### '
514 write(*,
'(a)') path(1)(1:length(1))
subroutine skplin(nlines, iunit)
real(kind=dp) function juldate(yyyymmdd, hhmiss)