Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/readspecies.f90

    r4 r28  
    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
    3238  !                                                                            *
    3339  !*****************************************************************************
     
    3642  ! decaytime(maxtable)  half time for radiological decay                      *
    3743  ! specname(maxtable)   names of chemical species, radionuclides              *
    38   ! wetscava, wetscavb   Parameters for determining scavenging coefficient     *
     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         *
    3949  ! ohreact              OH reaction rate                                      *
    4050  ! id_spec              SPECIES number as referenced in RELEASE file          *
     
    5565  logical :: spec_found
    5666
     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
    57100  ! Open the SPECIES file and read species names and properties
    58101  !************************************************************
    59102  specnum(pos_spec)=id_spec
    60103  write(aspecnumb,'(i3.3)') specnum(pos_spec)
    61   open(unitspecies,file= &
    62        path(1)(1:length(1))//'SPECIES/SPECIES_'//aspecnumb,status='old', &
    63        err=998)
     104  open(unitspecies,file=path(1)(1:length(1))//'SPECIES/SPECIES_'//aspecnumb,status='old',form='formatted',err=998)
    64105  !write(*,*) 'reading SPECIES',specnum(pos_spec)
    65106
    66107  ASSSPEC=.FALSE.
    67108
    68   do i=1,6
    69     read(unitspecies,*)
    70   end do
     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
    71122
    72123    read(unitspecies,'(a10)',end=22) species(pos_spec)
     
    78129    read(unitspecies,'(f18.2)',end=22) wetb(pos_spec)
    79130  !  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
    80142    read(unitspecies,'(f18.1)',end=22) reldiff(pos_spec)
    81143  !  write(*,*) reldiff(pos_spec)
     
    100162    read(unitspecies,'(f18.2)',end=22) kao(pos_spec)
    101163  !       write(*,*) kao(pos_spec)
    102     i=pos_spec
    103 
    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
     164
     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)
     184
     185  else
     186
     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
     206
     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
    106226    endif
    107 
    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
    121 
    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
    124 
    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
    131     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
    13223920   continue
    133240
     
    135242  ! Read in daily and day-of-week variation of emissions, if available
    136243  !*******************************************************************
    137 
    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
     244  ! HSO: This is not yet implemented as namelist parameters
     245  ! default values set to 1
     246
     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
    146257
    147258    read(unitspecies,*,end=22)
     
    154265    end do
    155266
    156 22   close(unitspecies)
    157 
    158    return
     267  endif
     268
     26922 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
    159279
    160280996   write(*,*) '#####################################################'
     
    185305  stop
    186306
     3071000 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
    187311
    188312end subroutine readspecies
Note: See TracChangeset for help on using the changeset viewer.
hosted by ZAMG