source: trunk/src/readcommand.f90 @ 30

Last change on this file since 30 was 30, checked in by hasod, 7 years ago

ADD: Optional (compressed) netcdf output added. Activated via COMMAND
file. During compile time switches -DNETCDF_OUTPUT -cpp need to be
invoked. Compliation and linking is shown in makefile.netcdf

File size: 22.4 KB
Line 
1!**********************************************************************
2! Copyright 1998,1999,2000,2001,2002,2005,2007,2008,2009,2010         *
3! Andreas Stohl, Petra Seibert, A. Frank, Gerhard Wotawa,             *
4! Caroline Forster, Sabine Eckhardt, John Burkhart, Harald Sodemann   *
5!                                                                     *
6! This file is part of FLEXPART.                                      *
7!                                                                     *
8! FLEXPART is free software: you can redistribute it and/or modify    *
9! it under the terms of the GNU General Public License as published by*
10! the Free Software Foundation, either version 3 of the License, or   *
11! (at your option) any later version.                                 *
12!                                                                     *
13! FLEXPART is distributed in the hope that it will be useful,         *
14! but WITHOUT ANY WARRANTY; without even the implied warranty of      *
15! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the       *
16! GNU General Public License for more details.                        *
17!                                                                     *
18! You should have received a copy of the GNU General Public License   *
19! along with FLEXPART.  If not, see <http://www.gnu.org/licenses/>.   *
20!**********************************************************************
21
22subroutine readcommand
23
24  !*****************************************************************************
25  !                                                                            *
26  !     This routine reads the user specifications for the current model run.  *
27  !                                                                            *
28  !     Author: A. Stohl                                                       *
29  !                                                                            *
30  !     18 May 1996                                                            *
31  !     HSO, 1 July 2014                                                       *
32  !     Added optional namelist input                                          *
33  !                                                                            *
34  !*****************************************************************************
35  !                                                                            *
36  ! Variables:                                                                 *
37  ! bdate                beginning date as Julian date                         *
38  ! ctl                  factor by which time step must be smaller than        *
39  !                      Lagrangian time scale                                 *
40  ! ibdate,ibtime        beginnning date and time (YYYYMMDD, HHMISS)           *
41  ! ideltas [s]          modelling period                                      *
42  ! iedate,ietime        ending date and time (YYYYMMDD, HHMISS)               *
43  ! ifine                reduction factor for vertical wind time step          *
44  ! outputforeachrel     for forward runs it is possible either to create      *
45  !                      one outputfield or several for each releasepoint      *
46  ! iflux                switch to turn on (1)/off (0) flux calculations       *
47  ! iout                 1 for conc. (residence time for backward runs) output,*
48  !                      2 for mixing ratio output, 3 both, 4 for plume        *
49  !                      trajectory output, 5 = options 1 and 4                *
50  ! ipin                 1 continue simulation with dumped particle data, 0 no *
51  ! ipout                0 no particle dump, 1 every output time, 3 only at end*
52  ! itsplit [s]          time constant for particle splitting                  *
53  ! loutaver [s]         concentration output is an average over loutaver      *
54  !                      seconds                                               *
55  ! loutsample [s]       average is computed from samples taken every [s]      *
56  !                      seconds                                               *
57  ! loutstep [s]         time interval of concentration output                 *
58  ! lsynctime [s]        synchronisation time interval for all particles       *
59  ! lagespectra          switch to turn on (1)/off (0) calculation of age      *
60  !                      spectra                                               *
61  ! lconvection          value of either 0 and 1 indicating mixing by          *
62  !                      convection                                            *
63  !                      = 0 .. no convection                                  *
64  !                      + 1 .. parameterisation of mixing by subgrid-scale    *
65  !                              convection = on                               *
66  ! lsubgrid             switch to turn on (1)/off (0) subgrid topography      *
67  !                      parameterization                                      *
68  ! method               method used to compute the particle pseudovelocities  *
69  ! mdomainfill          1 use domain-filling option, 0 not, 2 use strat. O3   *
70  !                                                                            *
71  ! Constants:                                                                 *
72  ! unitcommand          unit connected to file COMMAND                        *
73  !                                                                            *
74  !*****************************************************************************
75
76  use par_mod
77  use com_mod
78
79  implicit none
80
81  real(kind=dp) :: juldate
82  character(len=50) :: line
83  logical :: old
84  integer :: readerror
85
86  namelist /command/ &
87  ldirect, &
88  ibdate,ibtime, &
89  iedate,ietime, &
90  loutstep, &
91  loutaver, &
92  loutsample, &
93  itsplit, &
94  lsynctime, &
95  ctl, &
96  ifine, &
97  iout, &
98  ipout, &
99  lsubgrid, &
100  lconvection, &
101  lagespectra, &
102  ipin, &
103  ioutputforeachrelease, &
104  iflux, &
105  mdomainfill, &
106  ind_source, &
107  ind_receptor, &
108  mquasilag, &
109  nested_output, &
110  linit_cond, &
111  lnetcdfout, &
112  surf_only   
113
114  ! Presetting namelist command
115  ldirect=0
116  ibdate=20000101
117  ibtime=0
118  iedate=20000102
119  ietime=0
120  loutstep=10800
121  loutaver=10800
122  loutsample=900
123  itsplit=999999999
124  lsynctime=900
125  ctl=-5.0
126  ifine=4
127  iout=3
128  ipout=0
129  lsubgrid=1
130  lconvection=1
131  lagespectra=0
132  ipin=1
133  ioutputforeachrelease=1
134  iflux=1
135  mdomainfill=0
136  ind_source=1
137  ind_receptor=1
138  mquasilag=0
139  nested_output=0
140  linit_cond=0
141  lnetcdfout=0
142  surf_only=0
143
144  ! Open the command file and read user options
145  ! Namelist input first: try to read as namelist file
146  !**************************************************************************
147  open(unitcommand,file=path(1)(1:length(1))//'COMMAND',status='old',form='formatted',err=999)
148
149  ! try namelist input (default)
150  read(unitcommand,command,iostat=readerror)
151  close(unitcommand)
152
153  ! distinguish namelist from fixed text input
154  if ((readerror.ne.0).or.(ldirect.eq.0)) then ! parse as text file format
155 
156    open(unitcommand,file=path(1)(1:length(1))//'COMMAND',status='old', err=999)
157
158    ! Check the format of the COMMAND file (either in free format,
159    ! or using formatted mask)
160    ! Use of formatted mask is assumed if line 10 contains the word 'DIRECTION'
161    !**************************************************************************
162
163    call skplin(9,unitcommand)
164    read (unitcommand,901) line
165  901   format (a)
166    if (index(line,'LDIRECT') .eq. 0) then
167      old = .false.
168      write(*,*) 'COMMAND in old short format, please update to namelist format'
169    else
170      old = .true.
171      write(*,*) 'COMMAND in old long format, please update to namelist format'
172    endif
173    rewind(unitcommand)
174
175
176    ! Read parameters
177    !****************
178
179    call skplin(7,unitcommand)
180    if (old) call skplin(1,unitcommand)
181    read(unitcommand,*) ldirect
182    if (old) call skplin(3,unitcommand)
183    read(unitcommand,*) ibdate,ibtime
184    if (old) call skplin(3,unitcommand)
185    read(unitcommand,*) iedate,ietime
186    if (old) call skplin(3,unitcommand)
187    read(unitcommand,*) loutstep
188    if (old) call skplin(3,unitcommand)
189    read(unitcommand,*) loutaver
190    if (old) call skplin(3,unitcommand)
191    read(unitcommand,*) loutsample
192    if (old) call skplin(3,unitcommand)
193    read(unitcommand,*) itsplit
194    if (old) call skplin(3,unitcommand)
195    read(unitcommand,*) lsynctime
196    if (old) call skplin(3,unitcommand)
197    read(unitcommand,*) ctl
198    if (old) call skplin(3,unitcommand)
199    read(unitcommand,*) ifine
200    if (old) call skplin(3,unitcommand)
201    read(unitcommand,*) iout
202    if (old) call skplin(3,unitcommand)
203    read(unitcommand,*) ipout
204    if (old) call skplin(3,unitcommand)
205    read(unitcommand,*) lsubgrid
206    if (old) call skplin(3,unitcommand)
207    read(unitcommand,*) lconvection
208    if (old) call skplin(3,unitcommand)
209    read(unitcommand,*) lagespectra
210    if (old) call skplin(3,unitcommand)
211    read(unitcommand,*) ipin
212    if (old) call skplin(3,unitcommand)
213    read(unitcommand,*) ioutputforeachrelease
214    if (old) call skplin(3,unitcommand)
215    read(unitcommand,*) iflux
216    if (old) call skplin(3,unitcommand)
217    read(unitcommand,*) mdomainfill
218    if (old) call skplin(3,unitcommand)
219    read(unitcommand,*) ind_source
220    if (old) call skplin(3,unitcommand)
221    read(unitcommand,*) ind_receptor
222    if (old) call skplin(3,unitcommand)
223    read(unitcommand,*) mquasilag
224    if (old) call skplin(3,unitcommand)
225    read(unitcommand,*) nested_output
226    if (old) call skplin(3,unitcommand)
227    read(unitcommand,*) linit_cond
228    if (old) call skplin(3,unitcommand)
229    read(unitcommand,*) surf_only
230    close(unitcommand)
231
232  endif ! input format
233
234  ! write command file in namelist format to output directory if requested
235  if (nmlout.eqv..true.) then
236    open(unitcommand,file=path(2)(1:length(2))//'COMMAND.namelist',err=1000)
237    write(unitcommand,nml=command)
238    close(unitcommand)
239  endif
240
241  ifine=max(ifine,1)
242
243  ! Determine how Markov chain is formulated (for w or for w/sigw)
244  !***************************************************************
245
246  if (ctl.ge.0.1) then
247    turbswitch=.true.
248  else
249    turbswitch=.false.
250    ifine=1
251  endif
252  fine=1./real(ifine)
253  ctl=1./ctl
254
255  ! Set the switches required for the various options for input/output units
256  !*************************************************************************
257  !AF Set the switches IND_REL and IND_SAMP for the release and sampling
258  !Af switches for the releasefile:
259  !Af IND_REL =  1 : xmass * rho
260  !Af IND_REL =  0 : xmass * 1
261
262  !Af switches for the conccalcfile:
263  !AF IND_SAMP =  0 : xmass * 1
264  !Af IND_SAMP = -1 : xmass / rho
265
266  !AF IND_SOURCE switches between different units for concentrations at the source
267  !Af   NOTE that in backward simulations the release of computational particles
268  !Af   takes place at the "receptor" and the sampling of p[articles at the "source".
269  !Af          1 = mass units
270  !Af          2 = mass mixing ratio units
271  !Af IND_RECEPTOR switches between different units for concentrations at the receptor
272  !Af          1 = mass units
273  !Af          2 = mass mixing ratio units
274
275  if ( ldirect .eq. 1 ) then  ! FWD-Run
276  !Af set release-switch
277     if (ind_source .eq. 1 ) then !mass
278        ind_rel = 0
279     else ! mass mix
280        ind_rel = 1
281     endif
282  !Af set sampling switch
283     if (ind_receptor .eq. 1) then !mass
284        ind_samp = 0
285     else ! mass mix
286        ind_samp = -1
287     endif
288  elseif (ldirect .eq. -1 ) then !BWD-Run
289  !Af set sampling switch
290     if (ind_source .eq. 1 ) then !mass
291        ind_samp = -1
292     else ! mass mix
293        ind_samp = 0
294     endif
295  !Af set release-switch
296     if (ind_receptor .eq. 1) then !mass
297        ind_rel = 1
298     else ! mass mix
299        ind_rel = 0
300     endif
301  endif
302
303  !*************************************************************
304  ! Check whether valid options have been chosen in file COMMAND
305  !*************************************************************
306
307  ! Check options for initial condition output: Switch off for forward runs
308  !************************************************************************
309
310  if (ldirect.eq.1) linit_cond=0
311  if ((linit_cond.lt.0).or.(linit_cond.gt.2)) then
312    write(*,*) ' #### FLEXPART MODEL ERROR! INVALID OPTION    #### '
313    write(*,*) ' #### FOR LINIT_COND IN FILE "COMMAND".       #### '
314    stop
315  endif
316
317  ! Check input dates
318  !******************
319
320  if (iedate.lt.ibdate) then
321    write(*,*) ' #### FLEXPART MODEL ERROR! BEGINNING DATE    #### '
322    write(*,*) ' #### IS LARGER THAN ENDING DATE. CHANGE      #### '
323    write(*,*) ' #### EITHER POINT 2 OR POINT 3 IN FILE       #### '
324    write(*,*) ' #### "COMMAND".                              #### '
325    stop
326  else if (iedate.eq.ibdate) then
327    if (ietime.lt.ibtime) then
328    write(*,*) ' #### FLEXPART MODEL ERROR! BEGINNING TIME    #### '
329    write(*,*) ' #### IS LARGER THAN ENDING TIME. CHANGE      #### '
330    write(*,*) ' #### EITHER POINT 2 OR POINT 3 IN FILE       #### '
331    write(*,*) ' #### "COMMAND".                              #### '
332    stop
333    endif
334  endif
335
336
337  ! Determine kind of dispersion method
338  !************************************
339
340  if (ctl.gt.0.) then
341    method=1
342    mintime=minstep
343  else
344    method=0
345    mintime=lsynctime
346  endif
347
348!  check for netcdf output switch (use for non-namelist input only!)
349  if (iout.ge.8) then
350     lnetcdfout = 1
351     iout = iout - 8
352#ifndef NETCDF_OUTPUT
353     print*,'ERROR: netcdf output not activated during compile time but used in COMMAND file!'
354     print*,'Please recompile with netcdf library or use standard output format.'
355     stop
356#endif
357  endif
358
359  ! Check whether a valid option for gridded model output has been chosen
360  !**********************************************************************
361
362  if ((iout.lt.1).or.(iout.gt.5)) then
363    write(*,*) ' #### FLEXPART MODEL ERROR! FILE COMMAND:     #### '
364    write(*,*) ' #### IOUT MUST BE 1, 2, 3, 4, OR 5 FOR       #### '
365    write(*,*) ' #### STANDARD FLEXPART OUTPUT OR  9 - 13     #### '
366    write(*,*) ' #### FOR NETCDF OUTPUT                       #### '
367    stop
368  endif
369
370  !AF check consistency between units and volume mixing ratio
371  if ( ((iout.eq.2).or.(iout.eq.3)).and. &
372       (ind_source.gt.1 .or.ind_receptor.gt.1) ) then
373    write(*,*) ' #### FLEXPART MODEL ERROR! FILE COMMAND:     #### '
374    write(*,*) ' #### VOLUME MIXING RATIO ONLY SUPPORTED      #### '
375    write(*,*) ' #### FOR MASS UNITS (at the moment)          #### '
376    stop
377  endif
378
379
380  ! For quasilag output for each release is forbidden
381  !*****************************************************************************
382
383  if ((ioutputforeachrelease.eq.1).and.(mquasilag.eq.1)) then
384      write(*,*) '#### FLEXPART MODEL ERROR! FILE COMMAND:     ####'
385      write(*,*) '#### OUTPUTFOREACHRELEASE AND QUASILAGRANGIAN####'
386      write(*,*) '#### MODE IS NOT POSSIBLE   !                ####'
387      stop
388  endif
389
390
391  ! For quasilag backward is forbidden
392  !*****************************************************************************
393
394  if ((ldirect.lt.0).and.(mquasilag.eq.1)) then
395      write(*,*) '#### FLEXPART MODEL ERROR! FILE COMMAND:     ####'
396      write(*,*) '#### FOR BACKWARD RUNS, QUASILAGRANGIAN MODE ####'
397      write(*,*) '#### IS NOT POSSIBLE   !                     ####'
398      stop
399  endif
400
401
402  ! For backward runs one releasefield for all releases makes no sense,
403  ! For quasilag and domainfill ioutputforechrelease is forbidden
404  !*****************************************************************************
405
406  if ((ldirect.lt.0).and.(ioutputforeachrelease.eq.0)) then
407      write(*,*) '#### FLEXPART MODEL ERROR! FILE COMMAND:     ####'
408      write(*,*) '#### FOR BACKWARD RUNS, IOUTPUTFOREACHRLEASE ####'
409      write(*,*) '#### MUST BE SET TO ONE!                     ####'
410      stop
411  endif
412
413
414  ! For backward runs one releasefield for all releases makes no sense,
415  ! and is "forbidden"
416  !*****************************************************************************
417
418  if ((mdomainfill.eq.1).and.(ioutputforeachrelease.eq.1)) then
419      write(*,*) '#### FLEXPART MODEL ERROR! FILE COMMAND:     ####'
420      write(*,*) '#### FOR DOMAIN FILLING RUNS OUTPUT FOR      ####'
421      write(*,*) '#### EACH RELEASE IS FORBIDDEN !             ####'
422      stop
423  endif
424
425
426  ! For domain-filling trajectories, a plume centroid trajectory makes no sense,
427  ! For backward runs, only residence time output (iout=1) or plume trajectories (iout=4),
428  ! or both (iout=5) makes sense; other output options are "forbidden"
429  !*****************************************************************************
430
431  if (ldirect.lt.0) then
432    if ((iout.eq.2).or.(iout.eq.3)) then
433      write(*,*) '#### FLEXPART MODEL ERROR! FILE COMMAND:     ####'
434      write(*,*) '#### FOR BACKWARD RUNS, IOUT MUST BE 1,4,OR 5####'
435      stop
436    endif
437  endif
438
439
440  ! For domain-filling trajectories, a plume centroid trajectory makes no sense,
441  ! and is "forbidden"
442  !*****************************************************************************
443
444  if (mdomainfill.ge.1) then
445    if ((iout.eq.4).or.(iout.eq.5)) then
446      write(*,*) '#### FLEXPART MODEL ERROR! FILE COMMAND:     ####'
447      write(*,*) '#### FOR DOMAIN-FILLING TRAJECTORY OPTION,   ####'
448      write(*,*) '#### IOUT MUST NOT BE SET TO 4 OR 5.         ####'
449      stop
450    endif
451  endif
452
453
454
455  ! Check whether a valid options for particle dump has been chosen
456  !****************************************************************
457
458  if ((ipout.ne.0).and.(ipout.ne.1).and.(ipout.ne.2)) then
459    write(*,*) ' #### FLEXPART MODEL ERROR! FILE COMMAND:     #### '
460    write(*,*) ' #### IPOUT MUST BE 1, 2 OR 3!                #### '
461    stop
462  endif
463
464  if(lsubgrid.ne.1.and.verbosity.eq.0) then
465    write(*,*) '             ----------------               '
466    write(*,*) ' INFORMATION: SUBGRIDSCALE TERRAIN EFFECT IS'
467    write(*,*) ' NOT PARAMETERIZED DURING THIS SIMULATION.  '
468    write(*,*) '             ----------------               '
469  endif
470
471
472  ! Check whether convection scheme is either turned on or off
473  !***********************************************************
474
475  if ((lconvection.ne.0).and.(lconvection.ne.1)) then
476    write(*,*) ' #### FLEXPART MODEL ERROR! FILE COMMAND:     #### '
477    write(*,*) ' #### LCONVECTION MUST BE SET TO EITHER 1 OR 0#### '
478    stop
479  endif
480
481
482  ! Check whether synchronisation interval is sufficiently short
483  !*************************************************************
484
485  if (lsynctime.gt.(idiffnorm/2)) then
486    write(*,*) ' #### FLEXPART MODEL ERROR! SYNCHRONISATION   #### '
487    write(*,*) ' #### TIME IS TOO LONG. MAKE IT SHORTER.      #### '
488    write(*,*) ' #### MINIMUM HAS TO BE: ', idiffnorm/2
489    stop
490  endif
491
492
493  ! Check consistency of the intervals, sampling periods, etc., for model output
494  !*****************************************************************************
495
496  if (loutaver.eq.0) then
497    write(*,*) ' #### FLEXPART MODEL ERROR! TIME AVERAGE OF   #### '
498    write(*,*) ' #### CONCENTRATION FIELD OUTPUT MUST NOT BE  #### '
499    write(*,*) ' #### ZERO.                                   #### '
500    write(*,*) ' #### CHANGE INPUT IN FILE COMMAND.           #### '
501    stop
502  endif
503
504  if (loutaver.gt.loutstep) then
505    write(*,*) ' #### FLEXPART MODEL ERROR! TIME AVERAGE OF   #### '
506    write(*,*) ' #### CONCENTRATION FIELD OUTPUT MUST NOT BE  #### '
507    write(*,*) ' #### GREATER THAN INTERVAL OF OUTPUT.        #### '
508    write(*,*) ' #### CHANGE INPUT IN FILE COMMAND.           #### '
509    stop
510  endif
511
512  if (loutsample.gt.loutaver) then
513    write(*,*) ' #### FLEXPART MODEL ERROR! SAMPLING TIME OF  #### '
514    write(*,*) ' #### CONCENTRATION FIELD OUTPUT MUST NOT BE  #### '
515    write(*,*) ' #### GREATER THAN TIME AVERAGE OF OUTPUT.    #### '
516    write(*,*) ' #### CHANGE INPUT IN FILE COMMAND.           #### '
517    stop
518  endif
519
520  if (mod(loutaver,lsynctime).ne.0) then
521    write(*,*) ' #### FLEXPART MODEL ERROR! AVERAGING TIME OF #### '
522    write(*,*) ' #### CONCENTRATION FIELD MUST BE A MULTIPLE  #### '
523    write(*,*) ' #### OF THE SYNCHRONISATION INTERVAL         #### '
524    stop
525  endif
526
527  if ((loutaver/lsynctime).lt.2) then
528    write(*,*) ' #### FLEXPART MODEL ERROR! AVERAGING TIME OF #### '
529    write(*,*) ' #### CONCENTRATION FIELD MUST BE AT LEAST    #### '
530    write(*,*) ' #### TWICE THE SYNCHRONISATION INTERVAL      #### '
531    stop
532  endif
533
534  if (mod(loutstep,lsynctime).ne.0) then
535    write(*,*) ' #### FLEXPART MODEL ERROR! INTERVAL BETWEEN  #### '
536    write(*,*) ' #### CONCENTRATION FIELDS MUST BE A MULTIPLE #### '
537    write(*,*) ' #### OF THE SYNCHRONISATION INTERVAL         #### '
538    stop
539  endif
540
541  if ((loutstep/lsynctime).lt.2) then
542    write(*,*) ' #### FLEXPART MODEL ERROR! INTERVAL BETWEEN  #### '
543    write(*,*) ' #### CONCENTRATION FIELDS MUST BE AT LEAST   #### '
544    write(*,*) ' #### TWICE THE SYNCHRONISATION INTERVAL      #### '
545    stop
546  endif
547
548  if (mod(loutsample,lsynctime).ne.0) then
549    write(*,*) ' #### FLEXPART MODEL ERROR! SAMPLING TIME OF  #### '
550    write(*,*) ' #### CONCENTRATION FIELD MUST BE A MULTIPLE  #### '
551    write(*,*) ' #### OF THE SYNCHRONISATION INTERVAL         #### '
552    stop
553  endif
554
555  if (itsplit.lt.loutaver) then
556    write(*,*) ' #### FLEXPART MODEL ERROR! SPLITTING TIME FOR#### '
557    write(*,*) ' #### PARTICLES IS TOO SHORT. PLEASE INCREASE #### '
558    write(*,*) ' #### SPLITTING TIME CONSTANT.                #### '
559    stop
560  endif
561
562  if ((mquasilag.eq.1).and.(iout.ge.4)) then
563    write(*,*) ' #### FLEXPART MODEL ERROR! CONFLICTING       #### '
564    write(*,*) ' #### OPTIONS: IF MQUASILAG=1, PLUME          #### '
565    write(*,*) ' #### TRAJECTORY OUTPUT IS IMPOSSIBLE.        #### '
566    stop
567  endif
568
569  ! Compute modeling time in seconds and beginning date in Julian date
570  !*******************************************************************
571
572  outstep=real(abs(loutstep))
573  if (ldirect.eq.1) then
574    bdate=juldate(ibdate,ibtime)
575    edate=juldate(iedate,ietime)
576    ideltas=nint((edate-bdate)*86400.)
577  else if (ldirect.eq.-1) then
578    loutaver=-1*loutaver
579    loutstep=-1*loutstep
580    loutsample=-1*loutsample
581    lsynctime=-1*lsynctime
582    bdate=juldate(iedate,ietime)
583    edate=juldate(ibdate,ibtime)
584    ideltas=nint((edate-bdate)*86400.)
585  else
586    write(*,*) ' #### FLEXPART MODEL ERROR! DIRECTION IN      #### '
587    write(*,*) ' #### FILE "COMMAND" MUST BE EITHER -1 OR 1.  #### '
588    stop
589  endif
590
591  return
592
593999   write(*,*) ' #### FLEXPART MODEL ERROR! FILE "COMMAND"    #### '
594  write(*,*) ' #### CANNOT BE OPENED IN THE DIRECTORY       #### '
595  write(*,'(a)') path(1)(1:length(1))
596  stop
597
5981000   write(*,*) ' #### FLEXPART MODEL ERROR! FILE "COMMAND"    #### '
599  write(*,*) ' #### CANNOT BE OPENED IN THE DIRECTORY       #### '
600  write(*,'(a)') path(2)(1:length(1))
601  stop
602end subroutine readcommand
Note: See TracBrowser for help on using the repository browser.
hosted by ZAMG