C$$$  SUBPROGRAM DOCUMENTATION BLOCK
C                .      .    .                                       .
C SUBPROGRAM:    M_COMBQC    COMBINE A PAIR OF QC STRUCTURES INTO ONE
C   PRGMMR: M. BARTH         ORG: FSL        DATE: 02-05-13
C
C ABSTRACT: COMBINE A PAIR OF QC STRUCTURES INTO ONE SET OF STRUCTURES.
C
C PROGRAM HISTORY LOG:
C   02-05-13  M. BARTH    ORIGINAL VERSION
C
C USAGE:    CALL M_COMBQC (QCAIN1,QCAIN2,QCRIN1,QCRIN2,QCDIN1,QCDIN2,
C                          QCAOUT,QCROUT,QCDOUT)
C
C   INPUT ARGUMENT LIST:
C     QCAIN1   - R       QC APPLIED FOR INPUT VARIABLE 1
C     QCAIN2   - R       QC APPLIED FOR INPUT VARIABLE 2
C     QCRIN1   - R       QC RESULTS FOR INPUT VARIABLE 1
C     QCRIN2   - R       QC RESULTS FOR INPUT VARIABLE 2
C     QCDIN1   - C       QC DESCRIPTOR FOR INPUT VARIABLE 1
C     QCDIN2   - C       QC DESCRIPTOR FOR INPUT VARIABLE 2
C
C   OUTPUT ARGUMENT LIST:
C     QCAOUT   - R       OUTPUT QC APPLIED
C     QCROUT   - R       OUTPUT QC RESULTS
C     QCDOUT   - C       OUTPUT QC DESCRIPTOR
C
C SUBPROGRAMS CALLED:
C     UNIQUE:    M_CHCKQC, M_MKDESC, M_SETQC
C
C REMARKS:
C   - THIS ROUTINE WAS ORIGINALLY DEVELOPED FOR COMBINING WIND
C     QC.  HOWEVER, AT FIRST GLANCE THIS SHOULD WORK FOR ANY
C     2->1 LOGIC THAT COMES UP.
C   - THIS ROUTINE IS ASSUMED TO BE CALLED BY A HIGHER-LEVEL MADIS
C     ROUTINE, SO NO ERROR CHECKING IS DONE ON THE INPUT VARIABLES.
C
C ATTRIBUTES:
C   LANGUAGE: FORTRAN-77 + EXTENSIONS
C   MACHINE:  UNIX
C$$$

      SUBROUTINE M_COMBQC(QCAIN1,QCAIN2,QCRIN1,QCRIN2,QCDIN1,QCDIN2,
     1                    QCAOUT,QCROUT,QCDOUT)

C     ------------------------------------------------------------------
C     INCLUDES AND COMMONS
C     ------------------------------------------------------------------
      INCLUDE 'IMPLICIT'
      INCLUDE 'MADISCON'

C     ------------------------------------------------------------------
C     ARGUMENTS
C     ------------------------------------------------------------------
      REAL QCAIN1,QCAIN2,QCRIN1,QCRIN2,QCAOUT,QCROUT
      CHARACTER*1 QCDIN1,QCDIN2,QCDOUT

C     ------------------------------------------------------------------
C     LOCAL
C     ------------------------------------------------------------------
      INTEGER QCA(2),QCR(2),QCARET,QCRRET,VAL,J,STATUS

C     ------------------------------------------------------------------
C     PUT THE QC APPLIED/RESULTS WORDS INTO INTEGER FORMAT (THEIR
C     TRUE NATURE) SO WE CAN EXAMINE THE BITS, AND COMBINE THEM.
C     ------------------------------------------------------------------
      QCA(1) = QCAIN1
      QCA(2) = QCAIN2
      QCR(1) = QCRIN1
      QCR(2) = QCRIN2
      QCARET = 0
      QCRRET = 0

      DO 32 J = 1, MAX_UAPT_QCCHK_P

         CALL M_CHCKQC(QCA(1),J,VAL,STATUS)
         IF(VAL.EQ.1)CALL M_SETQC(QCARET,J,QCARET,STATUS)
         CALL M_CHCKQC(QCA(2),J,VAL,STATUS)
         IF(VAL.EQ.1)CALL M_SETQC(QCARET,J,QCARET,STATUS)
         CALL M_CHCKQC(QCR(1),J,VAL,STATUS)
         IF(VAL.EQ.1)CALL M_SETQC(QCRRET,J,QCRRET,STATUS)
         CALL M_CHCKQC(QCR(2),J,VAL,STATUS)
         IF(VAL.EQ.1)CALL M_SETQC(QCRRET,J,QCRRET,STATUS)

 32   CONTINUE

C     ------------------------------------------------------------------
C     IF EITHER DESCRIPTOR SHOWS SUBJECTIVE QC, USE THAT VALUE.
C     OTHERWISE, TRANSLATE THE NEW QCAPP/QCRES INTO THE DESCRIPTOR TO
C     BE RETURNED.
C     ------------------------------------------------------------------
      IF(QCDIN1.EQ.'G'.OR.QCDIN1.EQ.'B')THEN

         QCDOUT = QCDIN1

      ELSE IF(QCDIN2.EQ.'G'.OR.QCDIN2.EQ.'B')THEN

         QCDOUT = QCDIN2

      ELSE

         CALL M_MKDESC(QCARET,QCRRET,QCDOUT)

      ENDIF

      QCAOUT = QCARET
      QCROUT = QCRRET

      RETURN
      END
C**---------------------------------------------------------------------
C**REQUIRED STANDARD FSL DISCLAIMER (NOVEMBER 2000)
C**---------------------------------------------------------------------
C**  OPEN SOURCE LICENSE/DISCLAIMER,  FORECAST SYSTEMS LABORATORY
C**  NOAA/OAR/FSL, 325 BROADWAY BOULDER, CO 80305
C**
C**  THIS SOFTWARE IS DISTRIBUTED UNDER THE OPEN SOURCE DEFINITION, 
C**  WHICH MAY BE FOUND AT http://www.opensource.org/osd.html.
C**
C**  IN PARTICULAR, REDISTRIBUTION AND USE IN SOURCE AND BINARY FORMS,
C**  WITH OR WITHOUT MODIFICATION, ARE PERMITTED PROVIDED THAT THE 
C**  FOLLOWING CONDITIONS ARE MET:
C**
C**  - REDISTRIBUTIONS OF SOURCE CODE MUST RETAIN THIS NOTICE, THIS LIST
C**    OF CONDITIONS AND THE FOLLOWING DISCLAIMER.
C**
C**  - REDISTRIBUTIONS IN BINARY FORM MUST PROVIDE ACCESS TO THIS 
C**    NOTICE, THIS LIST OF CONDITIONS AND THE FOLLOWING DISCLAIMER, AND
C**    THE UNDERLYING SOURCE CODE.
C**
C**  - ALL MODIFICATIONS TO THIS SOFTWARE MUST BE CLEARLY DOCUMENTED, 
C**    AND ARE SOLELY THE RESPONSIBILITY OF THE AGENT MAKING THE 
C**    MODIFICATIONS.
C**
C**  - IF SIGNIFICANT MODIFICATIONS OR ENHANCEMENTS ARE MADE TO THIS
C**    SOFTWARE, THE FSL SOFTWARE POLICY MANAGER 
C**    (softwaremgr.fsl@noaa.gov) BE NOTIFIED.
C**
C**  THIS SOFTWARE AND ITS DOCUMENTATION ARE IN THE PUBLIC DOMAIN AND 
C**  ARE FURNISHED "AS IS."  THE AUTHORS, THE UNITED STATES GOVERNMENT,
C**  ITS INSTRUMENTALITIES, OFFICERS, EMPLOYEES, AND AGENTS MAKE NO 
C**  WARRANTY, EXPRESS OR IMPLIED, AS TO THE USEFULNESS OF THE SOFTWARE
C**  AND DOCUMENTATION FOR ANY PURPOSE.  THEY ASSUME NO RESPONSIBILITY 
C**  (1) FOR THE USE OF THE SOFTWARE AND DOCUMENTATION; OR (2) TO 
C**  PROVIDE TECHNICAL SUPPORT TO USERS.
C**---------------------------------------------------------------------
