Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/readspecies.f90

    r28 r4  
    3030  !                                                                            *
    3131  !   11 July 1996                                                             *
    32   !
    33   !   Changes:                                                                 *
    34   !   N. Kristiansen, 31.01.2013: Including parameters for in-cloud scavenging *
    35   !                                                                            *
    36   !   HSO, 13 August 2013
    37   !   added optional namelist input
    3832  !                                                                            *
    3933  !*****************************************************************************
     
    4236  ! decaytime(maxtable)  half time for radiological decay                      *
    4337  ! specname(maxtable)   names of chemical species, radionuclides              *
    44   ! weta, wetb           Parameters for determining below-cloud scavenging     *
    45   ! weta_in              Parameter for determining in-cloud scavenging         *
    46   ! wetb_in              Parameter for determining in-cloud scavenging         *
    47   ! wetc_in              Parameter for determining in-cloud scavenging         *
    48   ! wetd_in              Parameter for determining in-cloud scavenging         *
     38  ! wetscava, wetscavb   Parameters for determining scavenging coefficient     *
    4939  ! ohreact              OH reaction rate                                      *
    5040  ! id_spec              SPECIES number as referenced in RELEASE file          *
     
    6555  logical :: spec_found
    6656
    67   character(len=16) :: pspecies
    68   real :: pdecay, pweta, pwetb, preldiff, phenry, pf0, pdensity, pdquer
    69   real :: pdsigma, pdryvel, pweightmolar, pohreact, pspec_ass, pkao
    70   real :: pweta_in, pwetb_in, pwetc_in, pwetd_in
    71   integer :: readerror
    72 
    73   ! declare namelist
    74   namelist /species_params/ &
    75    pspecies, pdecay, pweta, pwetb, &
    76    pweta_in, pwetb_in, pwetc_in, pwetd_in, &
    77    preldiff, phenry, pf0, pdensity, pdquer, &
    78    pdsigma, pdryvel, pweightmolar, pohreact, pspec_ass, pkao
    79 
    80   pspecies=" "
    81   pdecay=-999.9
    82   pweta=-9.9E-09
    83   pwetb=0.0
    84   pweta_in=-9.9E-09
    85   pwetb_in=-9.9E-09
    86   pwetc_in=-9.9E-09
    87   pwetd_in=-9.9E-09
    88   preldiff=-9.9
    89   phenry=0.0
    90   pf0=0.0
    91   pdensity=-9.9E09
    92   pdquer=0.0
    93   pdsigma=0.0
    94   pdryvel=-9.99
    95   pohreact=-9.9E-09
    96   pspec_ass=-9
    97   pkao=-99.99
    98   pweightmolar=-789.0 ! read failure indicator value
    99 
    10057  ! Open the SPECIES file and read species names and properties
    10158  !************************************************************
    10259  specnum(pos_spec)=id_spec
    10360  write(aspecnumb,'(i3.3)') specnum(pos_spec)
    104   open(unitspecies,file=path(1)(1:length(1))//'SPECIES/SPECIES_'//aspecnumb,status='old',form='formatted',err=998)
     61  open(unitspecies,file= &
     62       path(1)(1:length(1))//'SPECIES/SPECIES_'//aspecnumb,status='old', &
     63       err=998)
    10564  !write(*,*) 'reading SPECIES',specnum(pos_spec)
    10665
    10766  ASSSPEC=.FALSE.
    10867
    109   ! try namelist input
    110   read(unitspecies,species_params,iostat=readerror)
    111   close(unitspecies)
    112    
    113   if ((pweightmolar.eq.-789.0).or.(readerror.ne.0)) then ! no namelist found
    114 
    115     readerror=1
    116 
    117     open(unitspecies,file=path(1)(1:length(1))//'SPECIES/SPECIES_'//aspecnumb,status='old',err=998)
    118 
    119     do i=1,6
    120       read(unitspecies,*)
    121     end do
     68  do i=1,6
     69    read(unitspecies,*)
     70  end do
    12271
    12372    read(unitspecies,'(a10)',end=22) species(pos_spec)
     
    12978    read(unitspecies,'(f18.2)',end=22) wetb(pos_spec)
    13079  !  write(*,*) wetb(pos_spec)
    131 
    132   !*** NIK 31.01.2013: including in-cloud scavening parameters
    133    read(unitspecies,'(e18.1)',end=22) weta_in(pos_spec)
    134   !  write(*,*) weta_in(pos_spec)
    135    read(unitspecies,'(f18.2)',end=22) wetb_in(pos_spec)
    136   !  write(*,*) wetb_in(pos_spec)
    137    read(unitspecies,'(f18.2)',end=22) wetc_in(pos_spec)
    138   !  write(*,*) wetc_in(pos_spec)
    139    read(unitspecies,'(f18.2)',end=22) wetd_in(pos_spec)
    140   !  write(*,*) wetd_in(pos_spec)
    141 
    14280    read(unitspecies,'(f18.1)',end=22) reldiff(pos_spec)
    14381  !  write(*,*) reldiff(pos_spec)
     
    162100    read(unitspecies,'(f18.2)',end=22) kao(pos_spec)
    163101  !       write(*,*) kao(pos_spec)
     102    i=pos_spec
    164103
    165     pspecies=species(pos_spec)
    166     pdecay=decay(pos_spec)
    167     pweta=weta(pos_spec)
    168     pwetb=wetb(pos_spec)
    169     pweta_in=weta_in(pos_spec)
    170     pwetb_in=wetb_in(pos_spec)
    171     pwetc_in=wetc_in(pos_spec)
    172     pwetd_in=wetd_in(pos_spec)
    173     preldiff=reldiff(pos_spec)
    174     phenry=henry(pos_spec)
    175     pf0=f0(pos_spec)
    176     pdensity=density(pos_spec)
    177     pdquer=dquer(pos_spec)
    178     pdsigma=dsigma(pos_spec)
    179     pdryvel=dryvel(pos_spec)
    180     pweightmolar=weightmolar(pos_spec)
    181     pohreact=ohreact(pos_spec)
    182     pspec_ass=spec_ass(pos_spec)
    183     pkao=kao(pos_spec)
     104    if ((weta(pos_spec).gt.0).and.(henry(pos_spec).le.0)) then
     105       if (dquer(pos_spec).le.0) goto 996 ! no particle, no henry set
     106    endif
    184107
    185   else
     108    if (spec_ass(pos_spec).gt.0) then
     109       spec_found=.FALSE.
     110       do j=1,pos_spec-1
     111          if (spec_ass(pos_spec).eq.specnum(j)) then
     112             spec_ass(pos_spec)=j
     113             spec_found=.TRUE.
     114             ASSSPEC=.TRUE.
     115          endif
     116       end do
     117       if (spec_found.eqv..FALSE.) then
     118          goto 997
     119       endif
     120    endif
    186121
    187     species(pos_spec)=pspecies
    188     decay(pos_spec)=pdecay
    189     weta(pos_spec)=pweta
    190     wetb(pos_spec)=pwetb
    191     weta_in(pos_spec)=pweta_in
    192     wetb_in(pos_spec)=pwetb_in
    193     wetc_in(pos_spec)=pwetc_in
    194     wetd_in(pos_spec)=pwetd_in
    195     reldiff(pos_spec)=preldiff
    196     henry(pos_spec)=phenry
    197     f0(pos_spec)=pf0
    198     density(pos_spec)=pdensity
    199     dquer(pos_spec)=pdquer
    200     dsigma(pos_spec)=pdsigma
    201     dryvel(pos_spec)=pdryvel
    202     weightmolar(pos_spec)=pweightmolar
    203     ohreact(pos_spec)=pohreact
    204     spec_ass(pos_spec)=pspec_ass
    205     kao(pos_spec)=pkao
     122    if (dsigma(i).eq.1.) dsigma(i)=1.0001   ! avoid floating exception
     123    if (dsigma(i).eq.0.) dsigma(i)=1.0001   ! avoid floating exception
    206124
    207   endif
    208 
    209   i=pos_spec
    210 
    211   if ((weta(pos_spec).gt.0).and.(henry(pos_spec).le.0)) then
    212    if (dquer(pos_spec).le.0) goto 996 ! no particle, no henry set
    213   endif
    214 
    215   if (spec_ass(pos_spec).gt.0) then
    216     spec_found=.FALSE.
    217     do j=1,pos_spec-1
    218       if (spec_ass(pos_spec).eq.specnum(j)) then
    219         spec_ass(pos_spec)=j
    220         spec_found=.TRUE.
    221         ASSSPEC=.TRUE.
    222       endif
    223     end do
    224     if (spec_found.eqv..FALSE.) then
    225       goto 997
     125    if ((reldiff(i).gt.0.).and.(density(i).gt.0.)) then
     126      write(*,*) '#### FLEXPART MODEL ERROR! FILE "SPECIES"    ####'
     127      write(*,*) '#### IS CORRUPT. SPECIES CANNOT BE BOTH      ####'
     128      write(*,*) '#### PARTICLE AND GAS.                       ####'
     129      write(*,*) '#### SPECIES NUMBER',aspecnumb
     130      stop
    226131    endif
    227   endif
    228 
    229   if (dsigma(i).eq.1.) dsigma(i)=1.0001   ! avoid floating exception
    230   if (dsigma(i).eq.0.) dsigma(i)=1.0001   ! avoid floating exception
    231 
    232   if ((reldiff(i).gt.0.).and.(density(i).gt.0.)) then
    233     write(*,*) '#### FLEXPART MODEL ERROR! FILE "SPECIES"    ####'
    234     write(*,*) '#### IS CORRUPT. SPECIES CANNOT BE BOTH      ####'
    235     write(*,*) '#### PARTICLE AND GAS.                       ####'
    236     write(*,*) '#### SPECIES NUMBER',aspecnumb
    237     stop
    238   endif
    23913220   continue
    240133
     
    242135  ! Read in daily and day-of-week variation of emissions, if available
    243136  !*******************************************************************
    244   ! HSO: This is not yet implemented as namelist parameters
    245   ! default values set to 1
    246137
    247   do j=1,24           ! initialize everything to no variation
    248     area_hour(i,j)=1.
    249     point_hour(i,j)=1.
    250   end do
    251   do j=1,7
    252     area_dow(i,j)=1.
    253     point_dow(i,j)=1.
    254   end do
    255 
    256   if (readerror.ne.0) then ! text format input
     138    do j=1,24           ! initialize everything to no variation
     139      area_hour(i,j)=1.
     140      point_hour(i,j)=1.
     141    end do
     142    do j=1,7
     143      area_dow(i,j)=1.
     144      point_dow(i,j)=1.
     145    end do
    257146
    258147    read(unitspecies,*,end=22)
     
    265154    end do
    266155
    267   endif
     15622   close(unitspecies)
    268157
    269 22 close(unitspecies)
    270 
    271   ! namelist output if requested
    272   if (nmlout.eqv..true.) then
    273     open(unitspecies,file=path(2)(1:length(2))//'SPECIES_'//aspecnumb//'.namelist',access='append',status='new',err=1000)
    274     write(unitspecies,nml=species_params)
    275     close(unitspecies)
    276   endif
    277 
    278   return
     158   return
    279159
    280160996   write(*,*) '#####################################################'
     
    305185  stop
    306186
    307 1000 write(*,*) ' #### FLEXPART MODEL ERROR! FILE "SPECIES_',aspecnumb,'.namelist'
    308   write(*,*) ' #### CANNOT BE OPENED IN THE DIRECTORY       #### '
    309   write(*,'(a)') path(2)(1:length(2))
    310   stop
    311187
    312188end subroutine readspecies
Note: See TracChangeset for help on using the changeset viewer.
hosted by ZAMG