ADAS Subroutine b8splt
C
SUBROUTINE B8SPLT( NTDIM , NDDIM ,
& ITA , IDA , ITVAL , IDVAL ,
& TETA , TEDA , TOUT , DOUT ,
& CINA , COUTA ,
& LTRNG , LDRNG
& )
C-----------------------------------------------------------------------
C
C ****************** FORTRAN77 SUBROUTINE: B8SPLT *********************
C
C PURPOSE:
C PERFORMS CUBIC SPLINE ON LOG(TEMPERATURE AND DENSITY)
C VERSUS LOG(COLLISIONAL-RADIATIVE MATRIX COEFFICIENTS)
C INPUT DATA
C
C USING TWO-WAY SPLINES IT CALCULATES THE INTERPOL. COEFFTS.
C FOR 'ITVAL' ELECTRON TEMPERATURES AND 'IDVAL' DENSITIES
C FROM THE TWO-DIMENSIONAL TABLE OF TEMPERATURES/DENSITIES READ
C IN FROM THE INPUT FILE. IF A VALUE CANNOT BE INTERPOLATED
C USING SPLINES IT IS EXTRAPOLATED VIA 'XXSPLE'.
C
C This is a special version of B8SPLN which examines the input
C data for zeros (effective zeros of 1.0D-72) and eliminates
C these from the spline. This is to avoid NaNQ propagating
C throughout the population calculation. So far only one
C array is affected - PCRMAT in B8GETP. Only do a spline
C fit if at least half of the points are present.
C
C CALLING PROGRAM: ADAS208/B8GETP
C
C
C SUBROUTINE:
C
C INPUT : (I*4) NTDIM = MAX NUMBER OF ELECTRON TEMPERATURES ALLOWED
C INPUT : (I*4) NDDIM = MAX NUMBER OF ELECTRON DENSITIES ALLOWED
C
C INPUT : (I*4) ITA = INPUT DATA : NUMBER OF ELECTRON TEMPERA-
C TURES
C INPUT : (I*4) IDA = INPUT DATA : NUMBER OF ELECTRON DENSIT-
C IES
C INPUT : (I*4) ITVAL = OUTPUT DATA : NUMBER OF TEMPERATURES
C INPUT : (I*4) IDVAL = OUTPUT DATA : NUMBER OF DENSITIES
C
C INPUT : (R*8) TETA() = INPUT DATA : ELECTRON TEMPERATURES (K)
C INPUT : (R*8) TEDA() = INPUT DATA : ELECTRON DENSITIES (CM-3)
C INPUT : (R*8) TOUT() = OUTPUT DATA : ELECTRON TEMPERATURES (K)
C INPUT : (R*8) DOUT() = OUTPUT DATA : ELECTRON DENSITIES (CM-3)
C
C
C INPUT : (R*8) CINA(,) =INPUT DATA FILE: FULL SET OF COLL. RAD.
C COEFFICIENTS FOR THE DATA-BLOCK BEING
C ANALYSED.
C 1ST DIMENSION: ELECTRON TEMPERATURE INDEX
C 2ND DIMENSION: ELECTRON DENSITY INDEX
C OUTPUT: (R*8) COUTA(,)= SPLINE INTERPOLATED COLL. RAD. CEOFFICIENTS
C THE USER ENTERED TEMPERATURES AND DENSITIES
C 1ST DIMENSION: ELECTRON TEMPERATURE INDEX
C 2ND DIMENSION: ELECTRON DENSITY INDEX
C
C OUTPUT: (L*4) LTRNG()= .TRUE. => OUTPUT 'COUTA()' VALUE WAS INTER-
C POLATED FOR THE USER ENTERED
C ELECTRON TEMPERATURE 'TOUT'()'.
C .FALSE. => OUTPUT 'COUTA()' VALUE WAS EXTRA-
C POLATED FOR THE USER ENTERED
C ELECTRON TEMPERATURE 'TOUT'()'.
C DIMENSION: TEMPERATURE/DENSITY PAIR INDEX
C
C OUTPUT: (L*4) LDRNG()= .TRUE. => OUTPUT 'COUTA()' VALUE WAS INTER-
C POLATED FOR THE USER ENTERED
C ELECTRON DENSITY 'DOUT()'.
C .FALSE. => OUTPUT 'COUTA()' VALUE WAS EXTRA-
C POLATED FOR THE USER ENTERED
C ELECTRON DENSITY 'DOUT()'.
C DIMENSION: TEMPERATURE/DENSITY PAIR INDEX
C
C (I*4) NIN = PARAMETER = MAX. NO. OF INPUT TEMP/DENSITY
C VALUES. MUST BE >= 'ITA'&'IDA'
C (I*4) NOUT = PARAMETER = MAX. NO. OF OUTPUT TEMP/DENSITY
C PAIRS. MUST BE >= 'ITVAL'
C (I*4) IED = ARRAY SUBSCRIPT USED INPUT FILE ELECTRON
C DENSITIES.
C (I*4) IET = ARRAY SUBSCRIPT USED INPUT FILE ELECTRON
C TEMPERATURES.
C (I*4) IT = ARRAY SUBSCRIPT USED FOR USER ENTERED
C TEMPERATURES.
C (I*4) IN = ARRAY SUBSCRIPT USED FOR USER ENTERED
C DENSITIES.
C (I*4) IOPT = DEFINES THE BOUNDARY DERIVATIVES FOR THE
C SPLINE ROUTOUT'E 'XXSPLE', SEE 'XXSPLE'.
C (VALID VALUES = <0, 0, 1, 2, 3, 4)
C
C (L*4) LSETX = .TRUE. => SET UP SPLINE PARAMETERS RELATOUT'G
C TO 'XIN' AXIS.
C .FALSE. => DO NOT SET UP SPLINE PARAMETERS
C RELATOUT'G 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) R8FUN1 = FUNCTION - (SEE ROUTOUT'ES SECTION BELOW)
C
C (R*8) XIN() = 1) LOG( DATA FILE ELECTRON DENSITIES )
C 2) LOG( DATA FILE ELECTRON TEMPERATURES )
C (R*8) YIN() = LOG( INPUT COLL. RAD COEFFTS.)
C (R*8) XOUT() = 1) LOG( SCALED USER ENTERED ELECTRON DENS. )
C 2) LOG( SCALED USER ENTERED ELECTRON TEMPS.)
C (R*8) YOUT() = LOG( OUTPUT GENERATED IONIZATIONS/PHOTON )
C (R*8) YPASS(,)= LOG( COL. RAD. COEFFTS.) INTERMEDIATE ARRAY
C WHICH STORES INTERPOLATED/EXTRAPOLATED
C VALUES BETWEEN THE TWO SPLINE SECTIONS.
C SECTIONS.
C (R*8) DF() = SPLINE INTERPOLATED DERIVATIVES
C
C
C NOTE:
C
C ROUTOUT'ES:
C ROUTOUT'E SOURCE BRIEF DESCRIPTION
C ------------------------------------------------------------
C XXSPLE ADAS SPLINE SUBROUTOUT'E (EXTENDED DIAGNOSTICS)
C R8FUN1 ADAS REAL*8 FUNCTION: ( X -> X )
C
C AUTHOR: H.P. SUMMERS
C K1/1/57
C JET EXT. 4941
C
C DATE: 15/07/92
C
C
C
C VERSION : 1.1 DATE: 10/05/96
C MODIFIED: Martin O'Mullane
C - First version
C
C VERSION : 1.2 DATE: 24/09/2004
C MODIFIED: Martin O'Mullane
C - The check to avoid integrating over zeros in the input
C can result in no valid points. This causes xxsple an
C out of bounds error in xxsple. Add a check to avoid
C the call in this case.
C
C-----------------------------------------------------------------------
C
C-----------------------------------------------------------------------
INTEGER IDA, IDVAL, ITA, ITVAL
INTEGER NDDIM, NTDIM
LOGICAL LDRNG(IDVAL), LTRNG(ITVAL)
REAL*8 CINA(NTDIM,NDDIM), COUTA(NTDIM,NDDIM)
REAL*8 DOUT(IDVAL), TEDA(IDA), TETA(ITA)
REAL*8 TOUT(ITVAL)