ADAS Subroutine d2data
SUBROUTINE D2DATA( DSFULL , TITLF , IFAIL , LRESO ,IPRT , IGRND & , IZ0 , IZ1 , ICLASS , ITMAX , IEVCUT & , ITDIMD , ITMAXD , IDMAXD , IZMAXD & , DTEV , DDENS & , DTEVD , DDENSD , DRCOFD , ZDATA & , DRCOFI , YEAR & ) C----------------------------------------------------------------------- C C PURPOSE : TO EXTRACT adf11 COLLISIONAL DIELECTRONIC DATA C C NOTE : THE SOURCE DATA IS CONTAINED IN CENTRAL (OR USER) ADAS C DATASETS AS: C /home/adas/adas/adf11/<typ><yr>/<typ><yr>_<el>.<fl>.dat C C where, <yr> = nominal year of data C <el> = element name C <typ> = type of data C <fl> = optional filter for power data C C The classes are C iclass = 1 : acd C iclass = 2 : scd C iclass = 3 : ccd C iclass = 4 : prb C iclass = 5 : prc C iclass = 6 : plt C iclass = 7 : pls C C C This routine was originally used to extract data for the SANCO C impurity transport code where filenames were constructed from C a userid, the year and a cutoff energy. The routine was C rewritten so that the full adf11 filename was passed. Hence some C of the inputs are unecessary but are retained for backwards C compatibility in calling codes. C C INPUT : (C*2) YEAR = YEAR OF DATA (not used) C (C*2) YEARDF = DEFAULT YEAR OF DATA IF REQUESTED YEAR C DOES NOT EXIST C (I*4) IZ0 = NUCLEAR CHARGE C (I*4) IZ1 = MINIMUM ION CHARGE + 1 (not used) C (I*4) ICLASS = CLASS OF DATA (1 - 6) C (I*4) ITMAX = NUMBER OF ( DTEV() , DDENS() ) PAIRS C (I*4) IEVCUT = ENERGY CUT-OFF (EV) (not used) C (R*8) DTEV() = DLOG10(ELECTRON TEMPERATURES (EV)) C (R*8) DDENS() = DLOG10(ELECTRON DENSITIES (CM-3)) C (I*4) IPRT = INDEX OF PARENT STATE C (I*4) IGRND = INDEX OF GROUND STATE C (L*4) LRESO = FLAG WHETHER RESOLVED DATA C C OUTPUT : (C*120)TITLF = INFORMATION STRING C (I*4) ITDIMD = MAXIMUM NUMBER OF DATA TEMP & DENS C (I*4) ITMAXD = NUMBER OF DATA DTEVD() C (I*4) IDMAXD = NUMBER OF DATA DDENS() C (I*4) IZMAXD = NUMBER OF DATA ZDATA() C (I*4) ITDIMD = MAXIMUM NUMBER OF DATA TEMP & DENS C (I*4) ZDATA() = Z1 CHARGES IN DATASET C (I*4) IFAIL = -1 IF ROUTINE SUCCESSFUL BUT THE DEFAULT C YEAR FOR THE DATA WAS USED. C = 0 IF ROUTINE SUCCESSFUL - DATA FOT THE C REQUESTED YEAR USED. C = 1 IF ROUTINE OPEN STATEMENT FAILED C (R*8) DTEVD() = DLOG10(DATA ELECTRON TEMPERATURES (EV)) C (R*8) DDENSD() = DLOG10(DATA ELECTRON DENSITIES (CM-3)) C (R*8) DRCOFD() = DLOG10(DATA RATE COEFFICIENTS (CM-3/S)) C (R*8) DRCOFI() = INTERPOLATION OF DRCOFD(,,) FOR C DTEV() & DDENS() C C PROGRAM: (C*80) STRING = GENERAL VARIABLE C (C*80) BLANK = BLANK STRING C (C*2) YEARSV = LAST YEAR USED IN THIS ROUTINE C (I*4) IREAD = INPUT STREAM FOR OPEN STATEMENT C (I*4) IZ0SV = LAST IZ0 USED IN THIS ROUTINE C (I*4) ICLSV = LAST ICLASS USED IN THIS ROUTINE C (I*4) INDXZ1 = LOCATION OF IZ1 IN ZDATA() C (I*4) LCK = MUST BE GREATER THAN 'ITMAXD' & 'IDMAXD' C & 'ITMAX' - ARRAY SIZE FOR SPLINE CALCS. C (R*8) A() = GENERAL ARRAY C (R*8) DRCOF0(,) = INTERPOLATION OF DRCOFD(,,) W.R.T DTEV() C (L*8) LEXIST = TRUE --- FILE TO OPEN EXISTS ELSE NOT C C PE BRIDEN = ADDED VARIABLES (14/01/91) C C (I*4) L1 = PARAMETER = 1 C (I*4) IOPT = DEFINES THE BOUNDARY DERIVATIVES FOR THE C SPLINE ROUTINE 'XXSPLE', SEE 'XXSPLE'. C C (L*4) LSETX = .TRUE. => SET UP SPLINE PARAMETERS RELATING C TO X-AXIS. C .FALSE. => DO NOT SET UP SPLINE PARAMETERS C RELATING TO X-AXIS. C (I.E. THEY WERE SET IN A PREVIOUS C CALL ) C (VALUE SET TO .FALSE. BY 'XXSPLE') C C C (R*8) DY() = SPLINE INTERPOLATED DERIVATIVES C C (R*8 ADAS FUNCTION - 'R8FUN1' ( X -> X) ) C C PE BRIDEN = ADDED VARIABLES (23/04/93) C C (I*4 ADAS FUNCTION - 'I4UNIT' (OUTPUT STREAM)) C C AUTHOR : JAMES SPENCE (TESSELLA SUPPORT SERVICES PLC) C K1/0/80 C JET EXT. 4866 C C DATE : 22/02/90 C C DATE : 21/08/90 PE BRIDEN - REVISION: SEQUA(43) CHANGED ('TE'->'TC') C C DATE : 08/10/90 PE BRIDEN - REVISION: RENAMED SUBROUTINE C C DATE : 12/11/90 PE BRIDEN - CORRECTION: MOVE THE SETTING OF 'INDXZ1' C TO AFTER THE '20 CONTINUE' C STATEMENT. ALSO SAVE THE C VALUE OF 'IZ1MIN'. C C DATE : 14/01/91 PE BRIDEN - ADAS91: CALLS TO NAG SPLINE ROUTINES C 'E01BAF' & 'E02BBF' REPLACED C BY CALLS TO ADAS SPLINE C ROUTINE 'XXSPLE'. C C DATE : 25/06/91 PE BRIDEN - CORRECTION: CHANGED FOLLOWING DIMENSION: C 'DIMENSION DRCOFI(ITDIMD)' C TO C 'DIMENSION DRCOFI(ITMAX)' C C DATE : 07/08/91 PE BRIDEN - ADDED ERROR HANDLING IF THE OPEN STATE- C MENT FAILS. (IFAIL=1 RETURNED) C C DATE : 27/04/92 PE BRIDEN - ADDED DEFAULT YEAR FOR DATA IF REQUESTED C YEAR DOES NOT EXIST. (ADDED 'YEARDF') C INTRODUCED IFAIL = -1 IF DEFAULT YEAR C WAS USED AND NOT THE REQUESTED YEAR. C C DATE : 10/03/93 PE BRIDEN - ALLOWED INPUT DATA SETS TO BE ACCESSED C FROM ANY USERID (DEFAULT = JETSHP) C - INTRODUCED USERID VARIABLE AND CALL C TO XXUID. C C DATE : 23/04/93 PE BRIDEN - ADDED I4UNIT FUNCTION TO WRITE C STATEMENTS FOR SCREEN MESSAGES C C UPDATE: 24/05/93 - PE BRIDEN - ADAS91: CHANGED I4UNIT(0)-> I4UNIT(-1) C C UPDATE: 14/09/94 - PE BRIDEN - ADAS91: ADDED CHECK TO MAKE SURE THAT C ITMAX, ITMAXD AND IDMAXD ARE C IN RANGE (I.E. <= LCK). C C UPDATE: 16/08/96 - PE BRIDEN - ADAS91: MINOR MOD - IF DEFAULT DATA C IS NOT FOUND THEN ASSIGN TITLF C BEFORE EXITING WITH AN ERROR. C C----------------------------------------------------------------------- C C UNIX-IDL PORT: C C VERSION: 1.1 DATE: 28-10-96 C MODIFIED: WILLIAM OSBORN (TESSELLA SUPPORT SERVICES PLC) C - FIRST CONVERTED C C VERSION: 1.2 DATE: 14-02-97 C MODIFIED: RICHARD MARTIN C - CHANGED DEFINITION OF 'BLANKS' TO 80 CHARACTERS ONLY C C VERSION: 1.3 DATE: 26-10-97 C MODIFIED: LORNE HORTON (JET) C - CHANGED EXTRAPOLATION ALGORITHM C C VERSION: 1.4 DATE: 23-07-99 C MODIFIED: Martin O'Mullane (JET) C - Changed the test for checking whether the file was opened. C - Removed commented out code for constructing filenames C - Modified the comments at the top of the file C - Converted code to implicit none C - Increased LCK to 200 C----------------------------------------------------------------------- C----------------------------------------------------------------------- C----------------------------------------------------------------------- CHARACTER*80 DSFULL CHARACTER*120 TITLF CHARACTER*2 YEAR INTEGER ICLASS, IDMAXD, IEVCUT, IFAIL INTEGER IGRND, IPRT, ITDIMD, ITMAX INTEGER ITMAXD, IZ0, IZ1, IZMAXD LOGICAL LRESO REAL*8 DDENS(ITMAX), DDENSD(ITDIMD) REAL*8 DRCOFD(ITDIMD,ITDIMD,ITDIMD) REAL*8 DRCOFI(ITMAX), DTEV(ITMAX) REAL*8 DTEVD(ITDIMD), ZDATA(ITDIMD)