 
      CALL SEQUENCE...
       gadd  X Y Z OUTPUT
       gmlt  X Y Z OUTPUT
       gdiv  X Y Z OUTPUT
 
 
      AUTHOR - B.Dugas,  15 novembre 95.
      LAST REVISION: $Header: /home/cvs/RMNLIB/utils/rdiag/lspgm/gadd.ptn,v 4.16 2014/09/25 19:32:34 dugas Exp $
 
 
      DESCRIPTION...
       A SET OF CCC FILE ARITHMETIC PROGRAMS WHICH...
 
       ... PRODUCES FILE  Z = X + (FIRST SET OF RECORDS OF) Y (gadd)
       ... PRODUCES FILE  Z = X * (FIRST SET OF RECORDS OF) Y (gmlt)
       ... PRODUCES FILE  Z = X / (FIRST SET OF RECORDS OF) Y (gdiv)
 
       A BARE MINIMALAMOUNT OF CHECKING IS DONE TO ENSURE THAT THE
       OPERATION MAKES SENSE. SPECIFICALLY:
               1) AS IN MLTF, DIVISION BY ZERO YIELDS ZERO.
               2) THE TWO FILES SHOULD HAVE THE SAME TYPE OF RECORDS
                  (I.E. THE SAME GRID DESCRIPTORS FOR CMC/RPN FILES).
               3) a) IF Y HAS MORE THAN ONE LEVEL, IT SHOULD HAVE THE
                  SAME NUMBER AS FOUND IN X. b) IF THE NUMBER OF LEVELS
                  IN THE TWO FILES IS DIFFERNT AND THAT OF Y IS NOT 
                  EQUAL TO ONE, THE PROGRAM ABORTS. FINALLY, c) IF
                  Y ONLY HOLDS ONE LEVEL, IT WILL BE USED WITH ALL
                  LEVELS OF X (I.E. BACKWARD COMPATIBILITY MODE).
 
       NOTES: 1) gadd IS FUNCTIONNALY EQUIVALENT TO THE RCM PROGRAM add2d AND
                 gmlt IS FUNCTIONNALY EQUIVALENT TO THE RCM PROGRAM mlt2d
              2) Operations on arrays that have the same size but different grid
                 descriptor sets (GRTYP,IGi) is possible if using the "-na" argument.
 
            
 
      MISSING VALUE TREATMENT IS SUPPORTED VIA EITHER THE "MISSING_VALUE"
      ENVIRONMENT VARIABLE OR THE "-mvalue" COMMAND-LINE ARGUMENT. HERE
      IS HOW THIS WORKS OUT IN MORE DETAIL: WHEN...
 
         X (not missing) & Y (not missing) => Z = X (operand) Y
         X (    missing) & Y (not missing) => Z = u (operand) Y
         X (not missing) & Y (    missing) => Z = X
         X (    missing) & Y (    missing) => Z = Missing value
 
       where 1) the operand is "+" "*" or "/";
             2) u is the operand unit, such that: u (operand) v = v
     
 
      EXIT CONDITIONS...
        0 NO PROBLEMS
        1 UNABLE TO READ FIRST SET OF Y
        2 RECORDS NOT THE SAME SIZE
        3 PREMATURE EOF ON FILE X
        4 PREMATURE EOF ON FILE X
