FUNCTION NEVN(NODE,LUN,INV1,INV2,I1,I2,I3,USR) C$$$ SUBPROGRAM DOCUMENTATION BLOCK C C SUBPROGRAM: NEVN (docblock incomplete) C PRGMMR: WOOLLEN ORG: NP20 DATE: 2003-11-04 C C ABSTRACT: THIS FUNCTION ACCUMULATES ALL DATA EVENTS FOR A PARTICULAR C DATA VALUE AND LEVEL AND RETURNS THEM TO THE CALLING PROGRAM. THE C VALUE OF THE FUNCTION ITSELF IS THE TOTAL NUMBER OF EVENTS FOUND. C C PROGRAM HISTORY LOG: C 2003-11-04 J. WOOLLEN -- ORIGINAL AUTHOR (WAS IN VERIFICATION C VERSION) C 2003-11-04 D. KEYSER -- UNIFIED/PORTABLE FOR WRF; ADDED C DOCUMENTATION (INCLUDING HISTORY) C (INCOMPLETE); OUTPUTS MORE COMPLETE C DIAGNOSTIC INFO WHEN ROUTINE TERMINATES C ABNORMALLY C C USAGE: NEVN (NODE, LUN, INV1, INV2, I1, I2, I3, USR) C INPUT ARGUMENT LIST: C NODE - INTEGER: .... C LUN - INTEGER: I/O STREAM INDEX INTO INTERNAL MEMORY ARRAYS C INV1 - INTEGER: .... C INV2 - INTEGER: .... C I1 - INTEGER: LENGTH OF FIRST DIMENSION OF USR C I2 - INTEGER: LENGTH OF SECOND DIMENSION OF USR C I3 - INTEGER: LENGTH OF THIRD DIMENSION OF USR C C OUTPUT ARGUMENT LIST: C USR - REAL*8:(I1,I2,I3) STARTING ADDRESS OF DATA VALUES READ C FROM DATA SUBSET, EVENTS ARE RETURNED IN THE THIRD C DIMENSION FOR A PARTICULAR DATA VALUE AND LEVEL IN THE C FIRST AND SECOND DIMENSIONS C NEVN - INTEGER: NUMBER OF EVENTS IN STACK (MUST BE LESS THAN C OR EQUAL TO I3) C C REMARKS: C IMPORTANT: THIS ROUTINE SHOULD ONLY BE CALLED BY ROUTINE UFBIN3, C WHICH, ITSELF, IS CALLED ONLY BY VERIFICATION C APPLICATION PROGRAM GRIDTOBS, WHERE IT WAS PREVIOUSLY C AN IN-LINE SUBROUTINE. IN GENERAL, NEVN DOES NOT WORK C PROPERLY IN OTHER APPLICATION PROGRAMS AT THIS TIME. C C THIS ROUTINE CALLS: BORT INVWIN LSTJPB C THIS ROUTINE IS CALLED BY: UFBIN3 C Should NOT be called by any C application programs!!! C C ATTRIBUTES: C LANGUAGE: FORTRAN 77 C MACHINE: PORTABLE TO ALL PLATFORMS C C$$$ INCLUDE 'bufrlib.prm' COMMON /USRINT/ NVAL(NFILES),INV(MAXJL,NFILES),VAL(MAXJL,NFILES) CHARACTER*128 BORT_STR DIMENSION USR(I1,I2,I3) REAL*8 VAL,USR C---------------------------------------------------------------------- C---------------------------------------------------------------------- NEVN = 0 C FIND THE ENCLOSING EVENT STACK DESCRIPTOR C ----------------------------------------- NDRS = LSTJPB(NODE,LUN,'DRS') IF(NDRS.LE.0) GOTO 100 INVN = INVWIN(NDRS,LUN,INV1,INV2) IF(INVN.EQ.0) GOTO 900 NEVN = VAL(INVN,LUN) IF(NEVN.GT.I3) GOTO 901 C SEARCH EACH STACK LEVEL FOR THE REQUESTED NODE AND COPY THE VALUE C ----------------------------------------------------------------- N2 = INVN + 1 DO L=1,NEVN N1 = N2 N2 = N2 + VAL(N1,LUN) DO N=N1,N2 IF(INV(N,LUN).EQ.NODE) USR(1,1,L) = VAL(N,LUN) ENDDO ENDDO C EXITS C ----- 100 RETURN 900 CALL BORT('BUFRLIB: NEVN - CAN''T FIND THE EVENT STACK!!!!!!') 901 WRITE(BORT_STR,'("BUFRLIB: NEVN - THE NO. OF EVENTS FOR THE '// . 'REQUESTED STACK (",I3,") EXCEEDS THE VALUE OF THE 3RD DIM. OF'// . ' THE USR ARRAY (",I3,")")') NEVN,I3 CALL BORT(BORT_STR) END