Search Site | Contact Details | FAQ

ADAS Subroutine xxprs1

       subroutine xxprs1(ndmet,string,wno,cpl,npt,ipla,zpla,ifail)

C-----------------------------------------------------------------------
C
C  ****************** fortran77 subroutine: xxprs1 *********************
C
C  purpose:  to analyse the tail character string of an level data line
C            of an adf04 specific ion file into wave-number and sets of
C            (parent identifier, effective zeta for the parent) pairs.
C
C            unified version of baprs1, b9prs1, bbprs1, g5prs1 which is 
C            a replacement for these subroutines
C
C  calling program: various
C
C  notes: detect  -  level wave number which preceeds first '{'
C                 -  sets of   parent index contained in '{.}'
C                              followed by effective zeta
C         nb. 'x' as first parent assignment means exclude ionisation
C             from this level.
C             no parent assignment means take lowest parent with
C             zeta =1.
C             lowest parent but no zeta means take zeta =1.
C             if there is more than one parent then zeta's must be in.
C
C
C  subroutine:
C
C  input : (i*4)  ndmet    =  maximum number of parents
C  input : (c*(*))string   =  string to be parsed
C
C  output: (r*8)  wno      =  excitation wave number of level relative
C                             to lowest parent
C  output: (c*1)  cpl      =  lead parent for ionisation  or 'x'
C  output: (i*4)  npt      =  number of parents detected
C  output: (i*4)  ipla()   =  parent indices.
C  output: (r*8)  zpla()   =  effective zeta for parent ipla()
C  output: (i*4)  ifail    =  0 - subroutine concludes correctly
C                             1 - fault detected in subroutine
C                             2 - single ionisation potential detected
C
C          (i*4)  maxwrd   =  maximum number of words sought initially
C                             initially, finally number actually found
C          (i*4)  nfirst   =  first word to be extracted from string
C          (i*4)  ifirst() =  index of first char. of word () in string
C          (i*4)  ilast()  =  index of last  char. of word () in string
C          (i*4)  iwords   =  number of words found in string
C
C          (l*4)  lset     =  .true.  -  wave number part set
C                             .false. -  wave number part not set
C          (l*4)  lwno     =  .true.  -  in the wave number part
C                             .false. -  not in the wave number part
C          (l*4)  lprnt    =  .true.  -  in a parent specifier
C                             .false. -  not in a parent specifier
C          (l*4)  lzeta    =  .true.  -  in a zeta specifier
C                             .false. -  not in a zeta specifier
C          (i*4)  ic       =  general use
C          (i*4)  iabt     =  failure number from r8fctn
C          (i*4)  nchar    =  number of characters in substring
C          (c*15) sstrng   =  isolated substring
C
C routines:
C          routine    source    brief description
C          -------------------------------------------------------------
C          i4unit     adas      fetch unit number for output of messages
C          r8fctn     adas      converts from character to real variable
C          i4fctn     adas      converts from char. to integer  variable
C          xxword     adas      parses a string into separate words
C                               for ' ()<>{}' delimiters
C
C AUTHOR:  HP Summers
C          JA7.08, University of Strathclyde
C          Tel: 0141-548-4196
C
C DATE:    04/12/02
C
C UPDATE:   :
C
C-----------------------------------------------------------------------
      CHARACTER           CPL
      CHARACTER*(*)       STRING
      INTEGER             IFAIL,       IPLA(NDMET), NDMET,       NPT
      REAL*8              WNO,         ZPLA(NDMET)
© Copyright 1995-2024 The ADAS Project
Comments and questions to: adas-at-adas.ac.uk