1 SUBROUTINE INVMRG
(LUBFI
,LUBFJ
)
3 C$$$ SUBPROGRAM DOCUMENTATION BLOCK
6 C PRGMMR: WOOLLEN ORG: NP20 DATE: 1996-10-09
8 C ABSTRACT: THIS SUBROUTINE MERGES "PARTS" OF SUBSETS WHICH HAVE
9 C DUPLICATE SPACE AND TIME COORDINATES BUT DIFFERENT OR UNIQUE
10 C OBSERVATIONAL DATA. IT CANNOT MERGE REPLICATED DATA.
12 C PROGRAM HISTORY LOG:
13 C 1996-10-09 J. WOOLLEN -- ORIGINAL AUTHOR
14 C 1996-11-25 J. WOOLLEN -- MODIFIED FOR RADIOSONDE CALL SIGNS
15 C 1998-07-08 J. WOOLLEN -- REPLACED CALL TO CRAY LIBRARY ROUTINE
16 C "ABORT" WITH CALL TO NEW INTERNAL BUFRLIB
18 C 1999-11-18 J. WOOLLEN -- THE NUMBER OF BUFR FILES WHICH CAN BE
19 C OPENED AT ONE TIME INCREASED FROM 10 TO 32
20 C (NECESSARY IN ORDER TO PROCESS MULTIPLE
21 C BUFR FILES UNDER THE MPI)
22 C 2002-05-14 J. WOOLLEN -- REMOVED OLD CRAY COMPILER DIRECTIVES;
23 C REMOVED ENTRY POINT MRGINV (IT BECAME A
24 C SEPARATE ROUTINE IN THE BUFRLIB TO
25 C INCREASE PORTABILITY TO OTHER PLATFORMS)
26 C 2003-11-04 S. BENDER -- ADDED REMARKS/BUFRLIB ROUTINE
28 C 2003-11-04 D. KEYSER -- MAXJL (MAXIMUM NUMBER OF JUMP/LINK ENTRIES)
29 C INCREASED FROM 15000 TO 16000 (WAS IN
30 C VERIFICATION VERSION); UNIFIED/PORTABLE FOR
31 C WRF; ADDED DOCUMENTATION (INCLUDING
32 C HISTORY); OUTPUTS MORE COMPLETE DIAGNOSTIC
33 C INFO WHEN ROUTINE TERMINATES ABNORMALLY
34 C 2007-01-19 J. ATOR -- USE FUNCTION IBFMS AND SIMPLIFY LOGIC
36 C USAGE: CALL INVMRG (LUBFI, LUBFJ)
37 C INPUT ARGUMENT LIST:
38 C LUBFI - INTEGER: FORTRAN LOGICAL UNIT NUMBER FOR INPUT BUFR
40 C LUBFJ - INTEGER: FORTRAN LOGICAL UNIT NUMBER FOR OUTPUT BUFR
44 C THIS ROUTINE CALLS: BORT IBFMS NWORDS STATUS
45 C THIS ROUTINE IS CALLED BY: None
46 C Normally called only by application
50 C LANGUAGE: FORTRAN 77
51 C MACHINE: PORTABLE TO ALL PLATFORMS
57 COMMON /MRGCOM
/ NRPL
,NMRG
,NAMB
,NTOT
58 COMMON /USRINT
/ NVAL
(NFILES
),INV
(MAXSS
,NFILES
),VAL
(MAXSS
,NFILES
)
59 COMMON /BTABLES
/ MAXTAB
,NTAB
,TAG
(MAXJL
),TYP
(MAXJL
),KNT
(MAXJL
),
60 . JUMP
(MAXJL
),LINK
(MAXJL
),JMPB
(MAXJL
),
61 . IBT
(MAXJL
),IRF
(MAXJL
),ISC
(MAXJL
),
62 . ITP
(MAXJL
),VALI
(MAXJL
),KNTI
(MAXJL
),
63 . ISEQ
(MAXJL
,2),JSEQ
(MAXJL
)
65 CHARACTER*128 BORT_STR
68 LOGICAL HEREI
,HEREJ
,MISSI
,MISSJ
,SAMEI
71 C-----------------------------------------------------------------------
72 C-----------------------------------------------------------------------
77 C GET THE UNIT POINTERS
78 C ---------------------
80 CALL STATUS
(LUBFI
,LUNI
,IL
,IM
)
81 CALL STATUS
(LUBFJ
,LUNJ
,JL
,JM
)
83 C STEP THROUGH THE BUFFERS COMPARING THE INVENTORY AND MERGING DATA
84 C -----------------------------------------------------------------
86 DO WHILE(IS
.LE
.NVAL
(LUNI
))
88 C CHECK TO SEE WE ARE AT THE SAME NODE IN EACH BUFFER
89 C ---------------------------------------------------
93 IF(NODE
.NE
.NODJ
) GOTO 900
97 C FOR TYPE 1 NODES DO AN ENTIRE SEQUENCE REPLACEMENT
98 C --------------------------------------------------
101 IF(TYP
(NODE
).EQ
.'DRB') IOFF
= 0
102 IF(TYP
(NODE
).NE
.'DRB') IOFF
= 1
103 IWRDS
= NWORDS
(IS
,LUNI
)+IOFF
104 JWRDS
= NWORDS
(JS
,LUNJ
)+IOFF
105 IF(IWRDS
.GT
.IOFF
.AND
. JWRDS
.EQ
.IOFF
) THEN
106 DO N
=NVAL
(LUNJ
),JS
+1,-1
107 INV
(N
+IWRDS
-JWRDS
,LUNJ
) = INV
(N
,LUNJ
)
108 VAL
(N
+IWRDS
-JWRDS
,LUNJ
) = VAL
(N
,LUNJ
)
111 INV
(JS
+N
,LUNJ
) = INV
(IS
+N
,LUNI
)
112 VAL
(JS
+N
,LUNJ
) = VAL
(IS
+N
,LUNI
)
114 NVAL
(LUNJ
) = NVAL
(LUNJ
)+IWRDS
-JWRDS
122 C FOR TYPES 2 AND 3 FILL MISSINGS
123 C -------------------------------
125 IF((ITYP
.EQ
.2).OR
.(ITYP
.EQ
.3)) THEN
126 HEREI
= IBFMS
(VAL
(IS
,LUNI
)).EQ
.0
127 HEREJ
= IBFMS
(VAL
(JS
,LUNJ
)).EQ
.0
130 SAMEI
= VAL
(IS
,LUNI
).EQ
.VAL
(JS
,LUNJ
)
131 IF(HEREI
.AND
.MISSJ
) THEN
132 VAL
(JS
,LUNJ
) = VAL
(IS
,LUNI
)
134 ELSEIF
(HEREI
.AND
.HEREJ
.AND
..NOT
.SAMEI
) THEN
139 C BUMP THE COUNTERS AND GO CHECK THE NEXT PAIR
140 C --------------------------------------------
152 900 WRITE(BORT_STR
,'("BUFRLIB: INVMRG - NODE FROM INPUT BUFR FILE '//
153 . '(",I7,") DOES NOT EQUAL NODE FROM OUTPUT BUFR FILE (",I7,"), '//
154 . 'TABULAR MISMATCH")') NODE
,NODJ