Search Site | Contact Details | FAQ

ADAS Subroutine c1spln

      SUBROUTINE C1SPLN(         LOSEL ,
     &                   NENER , IEVAL , NPSPL  ,
     &                   ENERA , EOA   , EOSA   ,
     &                   SIGA  , SIGOA , SIGOSA ,
     &                   LERNG
     &                 )
C-----------------------------------------------------------------------
C
C  ****************** FORTRAN77 SUBROUTINE: C1SPLN *********************
C
C  (IDENTICAL TO: B1SPLN (EXCEPT SOME VARIABLE NAMES ARE CHANGED))
C
C  PURPOSE:
C         1) PERFORMS CUBIC SPLINE ON LOG(ENERGY) VERSUS LOG(X-SECTION)
C            INPUT DATA, ('ENERA' VERSUS 'SIGA' , NENER DATA PAIRS),
C            FOR A GIVEN SUB-BLOCK.
C
C         2) INTERPOLATES 'IEVAL' X-SECT. VALUES USING  ABOVE  SPLINES
C            AT ENERGIES READ IN FROM ISPF PANELS FOR TABULAR  OUTPUT.
C            (ANY ENERGIES VALUES WHICH REQUIRED EXTRAPOLATION ARE SET
C             TO ZERO).
C                 - THIS STEP ONLY TAKES PLACE IF 'LOSEL=.TRUE.' -
C
C         3) INTERPOLATES 'NPSPL' X-SECT VALUES USING ABOVE SPLINES AT
C            ENERGIES EQUI-DISTANCE  ON RANGE OF LOG(ENERGIES)  STORED
C            IN INPUT 'ENERA' ARRAY.
C
C  CALLING PROGRAM: ADAS301
C
C
C  SUBROUTINE:
C
C  INPUT : (L*4)  LOSEL   = .TRUE.  => CALCULATE X-SECS FOR INPUT ENGYS.
C                                      READ FROM ISPF PANEL.
C                           .FALSE. => - DO NOT DO THE ABOVE -
C
C  INPUT : (I*4)  NENER   = INPUT DATA FILE: NO. OF VALID ENERGY/X-SECT.
C                           PAIRS READ FOR THE SUB-BLOCK BEING ASSESSED
C  INPUT : (I*4)  IEVAL   = NUMBER OF  ISPF  ENTERED  ENERGY  VALUES  AT
C                           WHICH INTERPOLATED X-SEC VALUES ARE REQUIRED
C                           FOR TABULAR OUTPUT.
C  INPUT : (I*4)  NPSPL   = NUMBER OF  SPLINE  INTERPOLATED  ENGY/X-SECT
C                           REQUIRED FOR GRAPHICAL DISPLAY.
C
C  INPUT : (I*4)  ENERA() = INPUT DATA FILE: ENERGIES (EV/AMU)
C  INPUT : (I*4)  EOA()   = ISPF PANEL ENTERED ENERGIES (EV/AMU)
C  OUTPUT: (I*4)  EOSA()  = 'NPSPL' ENERGIES FOR GRAPHICAL OUTPUT
C                           (EV/AMU).
C
C  INPUT : (R*8)  SIGA()  = INPUT DATA FILE: SELECTED SUB-BLOCK -
C                           X-SECTION VALUES AT 'ENERA()'. (CM**2)
C  OUTPUT: (I*4)  SIGOA() = SPLINE INTERPOLATED X-SEC VALUES AT 'EOA()'
C                           (EXTRAPOLATED VALUES = 0.0).
C  OUTPUT: (R*8)  SIGOSA()= SPLINE INTERPOLATED X-SEC VALUES AT 'EOSA()'
C
C  OUTPUT: (L*4)  LERNG() = .TRUE.  => OUTPUT   SPLINE    VALUE    WAS
C                                      INTERPOLATED FOR 'DLOG(EOA()'.
C                           .FALSE. => OUTPUT   SPLINE    VALUE    WAS
C                                      EXTRAPOLATED FOR 'DLOG(EOA()'.
C                                      (NOTE: 'YOUT()=0' AS 'IOPT < 0').
C
C          (I*4)  NIN     = PARAMETER = MAX. NO. OF  INPUT  ENGY/X-SEC
C                                      PAIRS MUST BE >= 'NENER'
C          (I*4)  NOUT    = PARAMETER = MAX. NO. OF 'OUTPUT ENGY/X-SEC
C                                      PAIRS MUST BE >= 'IEVAL' &'NPSPL'
C          (R*8)  ZERO    = PARAMETER = EFFECTIVE ZERO (1.0D-72)
C          (R*8)  ZEROL   = PARAMETER = LN(ZERO) APPROX.  = -165.7
C
C          (I*4)  IARR    = ARRAY SUBSCRIPT USED FOR ENGY/X-SEC PAIRS
C          (I*4)  IOPT    = DEFINES THE BOUNDARY DERIVATIVES FOR THE
C                           SPLINE ROUTINE 'XXSPLE', SEE 'XXSPLE'.
C                           (VALID VALUES = <0, 0, 1, 2, 3, 4)
C
C          (R*8)  ESTEP   = THE SIZE OF STEP BETWEEN 'XOUT()' VALUES FOR
C                           GRAPHICAL  OUTPUT  ENGY/X-SEC  PAIRS  TO  BE
C                           CALCULATED USING SPLINES.
C
C          (L*4)  LSETX   = .TRUE.  => SET UP SPLINE PARAMETERS RELATING
C                                      TO 'XIN' AXIS.
C                           .FALSE. => DO NOT SET UP SPLINE PARAMETERS
C                                      RELATING TO 'XIN' AXIS.
C                                      (I.E. THEY WERE SET IN A PREVIOUS
C                                            CALL )
C                           (VALUE SET TO .FALSE. BY 'XXSPLE')
C
C          (R*8)  XIN()   = LOG( 'ENERA()' )
C          (R*8)  YIN()   = LOG( 'SIGA()' )
C          (R*8)  XOUT()  = LOG(ENERGIES AT WHICH SPLINES REQUIRED)
C          (R*8)  YOUT()  = LOG(OUTPUT SPLINE INTERPOLATED X-SEC VALUES)
C          (R*8)  DF()    = SPLINE INTERPOLATED DERIVATIVES
C
C          (L*4)  LDUMP() = .TRUE.  => OUTPUT SPLINE VALUE INTRPOLATED
C                                      FOR 'YOUT()'.
C                           .FALSE. => OUTPUT SPLINE VALUE EXTRAPOLATED
C                                      FOR 'YOUT()'.
C                                      (NOTE: USED AS A DUMMY ARGUMENT.
C                                             ALL VALUES WILL BE TRUE.)
C
C NOTE:
C
C ROUTINES:
C          ROUTINE    SOURCE    BRIEF DESCRIPTION
C          ------------------------------------------------------------
C          XXSPLE     ADAS      SPLINE SUBROUTINE (EXTENDED DIAGNOSTICS)
C          R8FUN1     ADAS      REAL*8 FUNCTION: ( X -> X )
C
C AUTHOR:  PAUL E. BRIDEN (TESSELLA SUPPORT SERVICES PLC)
C          K1/0/81
C          JET EXT. 4569
C
C DATE:    07/02/91
C
C UPDATE:  30/11/93 - J NASH    - ADAS91:
C          INCREASED MAX NUMBER OF INPUT ENERGIES ('NIN') FROM 24 TO 30.
C
C UPDATE:  19/04/95   H P SUMMERS - ADDED TRAP FOR ZERO INPUTS
C
C-----------------------------------------------------------------------
C
C-----------------------------------------------------------------------
      INTEGER             IEVAL,       NENER,       NPSPL
      LOGICAL             LERNG(IEVAL),             LOSEL
      REAL*8              ENERA(NENER),             EOA(IEVAL)
      REAL*8              EOSA(NPSPL), SIGA(NENER), SIGOA(IEVAL)
      REAL*8              SIGOSA(NPSPL)
© Copyright 1995-2024 The ADAS Project
Comments and questions to: adas-at-adas.ac.uk