Changeset 8a65cb0 in flexpart.git for src/readspecies.f90


Ignore:
Timestamp:
Mar 2, 2015, 3:11:55 PM (9 years ago)
Author:
Espen Sollum ATMOS <espen@…>
Branches:
master, 10.4.1_pesei, GFS_025, bugfixes+enhancements, dev, release-10, release-10.4.1, scaling-bug, univie
Children:
1d207bb
Parents:
60403cd
Message:

Added code, makefile for dev branch

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/readspecies.f90

    r43c8684 r8a65cb0  
    3030  !                                                                            *
    3131  !   11 July 1996                                                             *
    32   !
     32  !                                                                            *
    3333  !   Changes:                                                                 *
    3434  !   N. Kristiansen, 31.01.2013: Including parameters for in-cloud scavenging *
     
    4545  ! weta_in              Parameter for determining in-cloud scavenging         *
    4646  ! 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         *
    49   ! ohreact              OH reaction rate                                      *
     47  ! ohcconst             OH reaction rate constant C                           *
     48  ! ohdconst             OH reaction rate constant D                           *
    5049  ! id_spec              SPECIES number as referenced in RELEASE file          *
    5150  ! id_pos               position where SPECIES data shall be stored           *
     
    6766  character(len=16) :: pspecies
    6867  real :: pdecay, pweta, pwetb, preldiff, phenry, pf0, pdensity, pdquer
    69   real :: pdsigma, pdryvel, pweightmolar, pohreact, pspec_ass, pkao
     68  real :: pdsigma, pdryvel, pweightmolar, pohcconst, pohdconst, pspec_ass, pkao
    7069  real :: pweta_in, pwetb_in, pwetc_in, pwetd_in
    7170  integer :: readerror
    7271
    73   ! declare namelist
     72! declare namelist
    7473  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
     74       pspecies, pdecay, pweta, pwetb, &
     75       pweta_in, pwetb_in, pwetc_in, pwetd_in, &
     76       preldiff, phenry, pf0, pdensity, pdquer, &
     77       pdsigma, pdryvel, pweightmolar, pohcconst, pohdconst, pspec_ass, pkao
    7978
    8079  pspecies=" "
     
    8483  pweta_in=-9.9E-09
    8584  pwetb_in=-9.9E-09
    86   pwetc_in=-9.9E-09
    87   pwetd_in=-9.9E-09
     85!  pwetc_in=-9.9E-09
     86!  pwetd_in=-9.9E-09
    8887  preldiff=-9.9
    8988  phenry=0.0
     
    9392  pdsigma=0.0
    9493  pdryvel=-9.99
    95   pohreact=-9.9E-09
     94  pohcconst=-9.99
     95  pohdconst=-9.9E-09
    9696  pspec_ass=-9
    9797  pkao=-99.99
    9898  pweightmolar=-789.0 ! read failure indicator value
    9999
    100   ! Open the SPECIES file and read species names and properties
    101   !************************************************************
     100! Open the SPECIES file and read species names and properties
     101!************************************************************
    102102  specnum(pos_spec)=id_spec
    103103  write(aspecnumb,'(i3.3)') specnum(pos_spec)
    104104  open(unitspecies,file=path(1)(1:length(1))//'SPECIES/SPECIES_'//aspecnumb,status='old',form='formatted',err=998)
    105  
    106   if (verbosity.gt.0) then
    107     write(*,*) 'reading SPECIES',specnum(pos_spec)
    108   endif
     105!write(*,*) 'reading SPECIES',specnum(pos_spec)
    109106
    110107  ASSSPEC=.FALSE.
    111108
    112   ! try namelist input
     109! try namelist input
    113110  read(unitspecies,species_params,iostat=readerror)
    114111  close(unitspecies)
    115    
     112
    116113  if ((pweightmolar.eq.-789.0).or.(readerror.ne.0)) then ! no namelist found
    117114
     
    125122
    126123    read(unitspecies,'(a10)',end=22) species(pos_spec)
    127   !  write(*,*) species(pos_spec)
     124!  write(*,*) species(pos_spec)
    128125    read(unitspecies,'(f18.1)',end=22) decay(pos_spec)
    129   !  write(*,*) decay(pos_spec)
     126!  write(*,*) decay(pos_spec)
    130127    read(unitspecies,'(e18.1)',end=22) weta(pos_spec)
    131   !  write(*,*) weta(pos_spec)
     128!  write(*,*) weta(pos_spec)
    132129    read(unitspecies,'(f18.2)',end=22) wetb(pos_spec)
    133   !  write(*,*) wetb(pos_spec)
    134 
    135   !*** NIK 31.01.2013: including in-cloud scavening parameters
    136    read(unitspecies,'(e18.1)',end=22) weta_in(pos_spec)
    137   !  write(*,*) weta_in(pos_spec)
    138    read(unitspecies,'(f18.2)',end=22) wetb_in(pos_spec)
    139   !  write(*,*) wetb_in(pos_spec)
    140   read(unitspecies,'(f18.2)',end=22) wetc_in(pos_spec)
    141   !  write(*,*) wetc_in(pos_spec)
    142   read(unitspecies,'(f18.2)',end=22) wetd_in(pos_spec)
    143   !  write(*,*) wetd_in(pos_spec)
     130!  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)
    144141
    145142    read(unitspecies,'(f18.1)',end=22) reldiff(pos_spec)
    146   !  write(*,*) reldiff(pos_spec)
     143!  write(*,*) reldiff(pos_spec)
    147144    read(unitspecies,'(e18.1)',end=22) henry(pos_spec)
    148   !  write(*,*) henry(pos_spec)
     145!  write(*,*) henry(pos_spec)
    149146    read(unitspecies,'(f18.1)',end=22) f0(pos_spec)
    150   !  write(*,*) f0(pos_spec)
     147!  write(*,*) f0(pos_spec)
    151148    read(unitspecies,'(e18.1)',end=22) density(pos_spec)
    152   !  write(*,*) density(pos_spec)
     149!  write(*,*) density(pos_spec)
    153150    read(unitspecies,'(e18.1)',end=22) dquer(pos_spec)
    154   !  write(*,*) dquer(pos_spec)
     151!  write(*,*) dquer(pos_spec)
    155152    read(unitspecies,'(e18.1)',end=22) dsigma(pos_spec)
    156   !  write(*,*) dsigma(pos_spec)
     153!  write(*,*) dsigma(pos_spec)
    157154    read(unitspecies,'(f18.2)',end=22) dryvel(pos_spec)
    158   !  write(*,*) dryvel(pos_spec)
     155!  write(*,*) dryvel(pos_spec)
    159156    read(unitspecies,'(f18.2)',end=22) weightmolar(pos_spec)
    160   !  write(*,*) weightmolar(pos_spec)
    161     read(unitspecies,'(e18.1)',end=22) ohreact(pos_spec)
    162   !  write(*,*) ohreact(pos_spec)
     157!  write(*,*) weightmolar(pos_spec)
     158    read(unitspecies,'(e18.2)',end=22) ohcconst(pos_spec)
     159!  write(*,*) ohcconst(pos_spec)
     160    read(unitspecies,'(f8.2)',end=22) ohdconst(pos_spec)
     161!  write(*,*) ohdconst(pos_spec)
    163162    read(unitspecies,'(i18)',end=22) spec_ass(pos_spec)
    164   !  write(*,*) spec_ass(pos_spec)
     163!  write(*,*) spec_ass(pos_spec)
    165164    read(unitspecies,'(f18.2)',end=22) kao(pos_spec)
    166   !       write(*,*) kao(pos_spec)
     165!       write(*,*) kao(pos_spec)
    167166
    168167    pspecies=species(pos_spec)
     
    172171    pweta_in=weta_in(pos_spec)
    173172    pwetb_in=wetb_in(pos_spec)
    174     pwetc_in=wetc_in(pos_spec)
    175     pwetd_in=wetd_in(pos_spec)
     173!    pwetc_in=wetc_in(pos_spec)
     174!    pwetd_in=wetd_in(pos_spec)
    176175    preldiff=reldiff(pos_spec)
    177176    phenry=henry(pos_spec)
     
    182181    pdryvel=dryvel(pos_spec)
    183182    pweightmolar=weightmolar(pos_spec)
    184     pohreact=ohreact(pos_spec)
     183    pohcconst=ohcconst(pos_spec)
     184    pohdconst=ohdconst(pos_spec)
    185185    pspec_ass=spec_ass(pos_spec)
    186186    pkao=kao(pos_spec)
     
    194194    weta_in(pos_spec)=pweta_in
    195195    wetb_in(pos_spec)=pwetb_in
    196     wetc_in(pos_spec)=pwetc_in
    197     wetd_in(pos_spec)=pwetd_in
     196!    wetc_in(pos_spec)=pwetc_in
     197!    wetd_in(pos_spec)=pwetd_in
    198198    reldiff(pos_spec)=preldiff
    199199    henry(pos_spec)=phenry
     
    204204    dryvel(pos_spec)=pdryvel
    205205    weightmolar(pos_spec)=pweightmolar
    206     ohreact(pos_spec)=pohreact
     206    ohcconst(pos_spec)=pohcconst
     207    ohdconst(pos_spec)=pohdconst
    207208    spec_ass(pos_spec)=pspec_ass
    208209    kao(pos_spec)=pkao
     
    212213  i=pos_spec
    213214
     215!NIK 16.02.2015
     216! Check scavenging parameters given in SPECIES file
     217  if (dquer(pos_spec).gt.0) then !is particle
     218    write(*,'(a,f5.2)') '  Particle below-cloud scavenging parameter A &
     219         &(Rain collection efficiency)  ', weta(pos_spec)
     220    write(*,'(a,f5.2)') '  Particle below-cloud scavenging parameter B &
     221         &(Snow collection efficiency)  ', wetb(pos_spec)
     222    if (weta(pos_spec).gt.1.0 .or. wetb(pos_spec).gt.1.0) then
     223      write(*,*) '*******************************************'
     224      write(*,*) ' WARNING: Particle below-cloud scavenging parameter A or B &
     225           &is out of likely range'
     226      write(*,*) '          Likely range is 0.0-1.0'
     227      write(*,*) '*******************************************'
     228    endif
     229    write(*,'(a,f5.2)') '  Particle in-cloud scavenging parameter Ai &
     230         &(CCN efficiency)  ', weta_in(pos_spec)
     231    write(*,'(a,f5.2)') '  Particle in-cloud scavenging parameter Bi &
     232         &(IN efficiency)  ', wetb_in(pos_spec)
     233    if (weta_in(pos_spec).gt.1.0 .or. weta_in(pos_spec).lt.0.7 )then
     234      write(*,*) '*******************************************'
     235      write(*,*) ' WARNING: Particle in-cloud scavenging parameter A is out of likely range'
     236      write(*,*) '          The default value is 0.9 for CCN '
     237      write(*,*) '*******************************************'
     238    endif
     239    if (wetb_in(pos_spec).gt.0.2 .or. wetb_in(pos_spec).lt.0.01) then
     240      write(*,*) '*******************************************'
     241      write(*,*) ' WARNING: Particle in-cloud scavenging parameter B is out of likely range'
     242      write(*,*) '          The default value is 0.1 for IN '
     243      write(*,*) '*******************************************'
     244    endif
     245
     246  else !is gas
     247    write(*,'(a,f5.2)') '  Gas below-cloud scavenging parameter A  ', weta(pos_spec)
     248    write(*,'(a,f5.2)') '  Gas below-cloud scavenging parameter B  ', wetb(pos_spec)
     249    write(*,*) ' Gas in-cloud scavenging uses default values as in Hertel et al 1995'
     250    if (wetb(pos_spec).gt.0.) then !if wet deposition is turned on
     251      if (wetb(pos_spec).gt.0.8 .or. wetb(pos_spec).lt.0.6) then
     252        write(*,*) '*******************************************'
     253        write(*,*) ' WARNING: Gas below-cloud scavenging parameter B is out of likely range'
     254        write(*,*) '          Likely range is 0.6 to 0.8 (see Hertel et al 1995)'
     255        write(*,*) '*******************************************'
     256      endif
     257    end if
     258    if (weta(pos_spec).gt.0.) then !if wet deposition is turned on
     259      if (weta(pos_spec).gt.1E-04 .or. weta(pos_spec).lt.1E-09) then
     260        write(*,*) '*******************************************'
     261        write(*,*) ' WARNING: Gas below-cloud scavenging parameter A is out of likely range'
     262        write(*,*) '          Likely range is 1E-04 to 1E-08 (see Hertel et al 1995)'
     263        write(*,*) '*******************************************'
     264      endif
     265    end if
     266  endif
     267
     268
    214269  if ((weta(pos_spec).gt.0).and.(henry(pos_spec).le.0)) then
    215    if (dquer(pos_spec).le.0) goto 996 ! no particle, no henry set
     270    if (dquer(pos_spec).le.0) goto 996 ! no particle, no henry set
    216271  endif
    217272
     
    240295    stop
    241296  endif
    242 20   continue
     29720 continue
     298
     299
     300! Read in daily and day-of-week variation of emissions, if available
     301!*******************************************************************
     302! HSO: This is not yet implemented as namelist parameters
     303
     304  do j=1,24           ! initialize everything to no variation
     305    area_hour(i,j)=1.
     306    point_hour(i,j)=1.
     307  end do
     308  do j=1,7
     309    area_dow(i,j)=1.
     310    point_dow(i,j)=1.
     311  end do
    243312
    244313  if (readerror.ne.0) then ! text format input
    245 
    246     ! Read in daily and day-of-week variation of emissions, if available
    247     !*******************************************************************
    248     ! HSO: This is not yet implemented as namelist parameters
    249 
    250     do j=1,24           ! initialize everything to no variation
    251       area_hour(i,j)=1.
    252       point_hour(i,j)=1.
    253     end do
    254     do j=1,7
    255       area_dow(i,j)=1.
    256       point_dow(i,j)=1.
    257     end do
    258314
    259315    read(unitspecies,*,end=22)
     
    27032622 close(unitspecies)
    271327
    272   ! namelist output if requested
    273   if (nmlout.eqv..true.) then
    274     open(unitspecies,file=path(2)(1:length(2))//'SPECIES_'//aspecnumb//'.namelist',access='append',status='new',err=1000)
     328! namelist output if requested
     329  if (nmlout.and.lroot) then
     330    open(unitspecies,file=path(2)(1:length(2))//'SPECIES_'//aspecnumb//'.namelist',access='append',status='replace',err=1000)
    275331    write(unitspecies,nml=species_params)
    276332    close(unitspecies)
     
    279335  return
    280336
    281 996   write(*,*) '#####################################################'
     337996 write(*,*) '#####################################################'
    282338  write(*,*) '#### FLEXPART MODEL ERROR!                      #### '
    283339  write(*,*) '#### WET DEPOSITION SWITCHED ON, BUT NO HENRYS  #### '
     
    288344
    289345
    290 997   write(*,*) '#####################################################'
     346997 write(*,*) '#####################################################'
    291347  write(*,*) '#### FLEXPART MODEL ERROR!                      #### '
    292348  write(*,*) '#### THE ASSSOCIATED SPECIES HAS TO BE DEFINED  #### '
     
    298354
    299355
    300 998   write(*,*) '#####################################################'
     356998 write(*,*) '#####################################################'
    301357  write(*,*) '#### FLEXPART MODEL ERROR!                      #### '
    302358  write(*,*) '#### THE SPECIES FILE FOR SPECIES ', id_spec
Note: See TracChangeset for help on using the changeset viewer.
hosted by ZAMG