*IF DEF,FLUXPROC                                                           FPFIELD1.2      
C ******************************COPYRIGHT******************************    FPFIELD1.3      
C (c) CROWN COPYRIGHT 1998, METEOROLOGICAL OFFICE, All Rights Reserved.    FPFIELD1.4      
C                                                                          FPFIELD1.5      
C Use, duplication or disclosure of this code is subject to the            FPFIELD1.6      
C restrictions as set forth in the contract.                               FPFIELD1.7      
C                                                                          FPFIELD1.8      
C                Meteorological Office                                     FPFIELD1.9      
C                London Road                                               FPFIELD1.10     
C                BRACKNELL                                                 FPFIELD1.11     
C                Berkshire UK                                              FPFIELD1.12     
C                RG12 2SZ                                                  FPFIELD1.13     
C                                                                          FPFIELD1.14     
C If no contract has been raised with this copy of the code, the use,      FPFIELD1.15     
C duplication or disclosure of it is strictly prohibited.  Permission      FPFIELD1.16     
C to do so must first be obtained in writing from the Head of Numerical    FPFIELD1.17     
C Modelling at the above address.                                          FPFIELD1.18     
C ******************************COPYRIGHT******************************    FPFIELD1.19     
C                                                                          FPFIELD1.20     
C Programming standard: Unified Model Documentation Paper No 3             FPFIELD1.21     
C                       Version No 1 15/1/90                               FPFIELD1.22     
C History:                                                                 FPFIELD1.23     
C version  date         change                                             FPFIELD1.24     
C 4.5      03/09/98     New code                                           FPFIELD1.25     
C                                                                          FPFIELD1.26     
! Author:     M. J. Bell                                                   FPFIELD1.27     
!----------------------------------------------------------------------    FPFIELD1.28     
! deck: FIELDADD                                                           FPFIELD1.29     
!                                                                          FPFIELD1.30     
! contains routines: FieldAdd, etc. ScalarAdd etc.                         FPFIELD1.31     
!                                                                          FPFIELD1.32     
! Purpose: Flux processing routines.                                       FPFIELD1.33     
!          Simple arithmetic operations on pp fields                       FPFIELD1.34     
!----------------------------------------------------------------------    FPFIELD1.35     

      SUBROUTINE FieldAdd                                                   7FPFIELD1.36     
     &           (nx, ny, rmdi,                                            FPFIELD1.37     
     &            in_field1, in_field2,                                    FPFIELD1.38     
     &            out_field,                                               FPFIELD1.39     
     &            icode, cmessage)                                         FPFIELD1.40     
                                                                           FPFIELD1.41     
                                                                           FPFIELD1.42     
C     FieldAdd: subroutine to add two arrays.                              FPFIELD1.43     
C     --------- Takes account of missing data.                             FPFIELD1.44     
                                                                           FPFIELD1.45     
C     Programmer: S J Foreman                                              FPFIELD1.46     
C     -----------                                                          FPFIELD1.47     
                                                                           FPFIELD1.48     
C     Method:                                                              FPFIELD1.49     
C     -------  loop over all elements, adding unless either is             FPFIELD1.50     
C              missing, in which case result is missing.                   FPFIELD1.51     
                                                                           FPFIELD1.52     
      IMPLICIT NONE                                                        FPFIELD1.53     
                                                                           FPFIELD1.54     
                                                                           FPFIELD1.55     
C     Input:                                                               FPFIELD1.56     
C     ------                                                               FPFIELD1.57     
                                                                           FPFIELD1.58     
      INTEGER                                                              FPFIELD1.59     
     &       nx         ! IN number of columns of array                    FPFIELD1.60     
     &      ,ny         ! IN number of rows in array                       FPFIELD1.61     
                                                                           FPFIELD1.62     
       REAL                                                                FPFIELD1.63     
     &       rmdi       ! IN value of REAL missing data indicator          FPFIELD1.64     
                                                                           FPFIELD1.65     
     &      ,in_field1(nx,ny)  ! IN first array of input values            FPFIELD1.66     
     &      ,in_field2(nx,ny)  ! IN second array of input values           FPFIELD1.67     
                                                                           FPFIELD1.68     
C     Output                                                               FPFIELD1.69     
C     ------                                                               FPFIELD1.70     
                                                                           FPFIELD1.71     
      REAL                                                                 FPFIELD1.72     
     &       out_field(nx,ny)  ! OUT results of addition                   FPFIELD1.73     
                                                                           FPFIELD1.74     
      INTEGER                                                              FPFIELD1.75     
     &       icode      ! OUT Completion code                              FPFIELD1.76     
                                                                           FPFIELD1.77     
      CHARACTER *(*)                                                       FPFIELD1.78     
     &       cmessage   ! OUT Error message                                FPFIELD1.79     
                                                                           FPFIELD1.80     
                                                                           FPFIELD1.81     
C    Local variables                                                       FPFIELD1.82     
C    ---------------                                                       FPFIELD1.83     
                                                                           FPFIELD1.84     
      INTEGER                                                              FPFIELD1.85     
     &        ix        ! Loop counter over columns                        FPFIELD1.86     
     &       ,iy        ! Loop counter over rows                           FPFIELD1.87     
                                                                           FPFIELD1.88     
                                                                           FPFIELD1.89     
C ------------------------------------------------------------------       FPFIELD1.90     
                                                                           FPFIELD1.91     
      icode =0                                                             FPFIELD1.92     
      cmessage="FieldAdd: addition successful."                            FPFIELD1.93     
                                                                           FPFIELD1.94     
      DO iy = 1, ny     ! iy: loop over rows                               FPFIELD1.95     
        DO ix = 1, nx  ! ix: loop over columns                             FPFIELD1.96     
                                                                           FPFIELD1.97     
          IF (       in_field1(ix,iy) .NE. rmdi                            FPFIELD1.98     
     &          .AND. in_field2(ix,iy) .NE. rmdi )                         FPFIELD1.99     
                                                                           FPFIELD1.100    
     &      THEN                                                           FPFIELD1.101    
                                                                           FPFIELD1.102    
              out_field(ix,iy) = in_field1(ix,iy) + in_field2(ix,iy)       FPFIELD1.103    
                                                                           FPFIELD1.104    
            ELSE                                                           FPFIELD1.105    
                                                                           FPFIELD1.106    
              out_field(ix,iy) = rmdi                                      FPFIELD1.107    
                                                                           FPFIELD1.108    
            END IF                                                         FPFIELD1.109    
                                                                           FPFIELD1.110    
         END DO  ! ix: loop over columns                                   FPFIELD1.111    
      END DO     ! iy: loop over columns                                   FPFIELD1.112    
                                                                           FPFIELD1.113    
      RETURN                                                               FPFIELD1.114    
      END         ! Subroutine FieldAdd                                    FPFIELD1.115    
                                                                           FPFIELD1.116    
                                                                           FPFIELD1.117    

      SUBROUTINE FieldSub                                                   5FPFIELD1.118    
     &           (nx, ny, rmdi,                                            FPFIELD1.119    
     &            in_field1, in_field2,                                    FPFIELD1.120    
     &            out_field,                                               FPFIELD1.121    
     &            icode, cmessage)                                         FPFIELD1.122    
                                                                           FPFIELD1.123    
                                                                           FPFIELD1.124    
C     FieldAdd: subroutine to subtract two arrays.                         FPFIELD1.125    
C     --------- Takes account of missing data.                             FPFIELD1.126    
                                                                           FPFIELD1.127    
C     Programmer: S J Foreman                                              FPFIELD1.128    
C     -----------                                                          FPFIELD1.129    
                                                                           FPFIELD1.130    
C     Method:                                                              FPFIELD1.131    
C     -------  loop over all elements, subtracting unless either           FPFIELD1.132    
C              is missing, in which case result is missing.                FPFIELD1.133    
C              in_field1 - in_field2.                                      FPFIELD1.134    
                                                                           FPFIELD1.135    
      IMPLICIT NONE                                                        FPFIELD1.136    
                                                                           FPFIELD1.137    
C     Input:                                                               FPFIELD1.138    
C     ------                                                               FPFIELD1.139    
                                                                           FPFIELD1.140    
      INTEGER                                                              FPFIELD1.141    
     &       nx         ! IN number of columns of array                    FPFIELD1.142    
     &      ,ny         ! IN number of rows in array                       FPFIELD1.143    
                                                                           FPFIELD1.144    
       REAL                                                                FPFIELD1.145    
     &       rmdi       ! IN value of REAL missing data indicator          FPFIELD1.146    
                                                                           FPFIELD1.147    
     &      ,in_field1(nx,ny)  ! IN first array of input values            FPFIELD1.148    
     &      ,in_field2(nx,ny)  ! IN array of input values (subtrahend)     FPFIELD1.149    
                                                                           FPFIELD1.150    
C     Output                                                               FPFIELD1.151    
C     ------                                                               FPFIELD1.152    
                                                                           FPFIELD1.153    
      REAL                                                                 FPFIELD1.154    
     &       out_field(nx,ny)  ! OUT results of subtraction                FPFIELD1.155    
                                                                           FPFIELD1.156    
      INTEGER                                                              FPFIELD1.157    
     &       icode      ! OUT Completion code                              FPFIELD1.158    
                                                                           FPFIELD1.159    
      CHARACTER *(*)                                                       FPFIELD1.160    
     &       cmessage   ! OUT Error message                                FPFIELD1.161    
                                                                           FPFIELD1.162    
                                                                           FPFIELD1.163    
C    Local variables                                                       FPFIELD1.164    
C    ---------------                                                       FPFIELD1.165    
                                                                           FPFIELD1.166    
      INTEGER                                                              FPFIELD1.167    
     &        ix        ! Loop counter over columns                        FPFIELD1.168    
     &       ,iy        ! Loop counter over rows                           FPFIELD1.169    
                                                                           FPFIELD1.170    
                                                                           FPFIELD1.171    
C ------------------------------------------------------------------       FPFIELD1.172    
                                                                           FPFIELD1.173    
      icode = 0                                                            FPFIELD1.174    
      cmessage="FieldSub: subtraction successful."                         FPFIELD1.175    
                                                                           FPFIELD1.176    
      DO iy = 1, ny     ! iy: loop over rows                               FPFIELD1.177    
        DO ix = 1, nx  ! ix: loop over columns                             FPFIELD1.178    
                                                                           FPFIELD1.179    
          IF (       in_field1(ix,iy) .GT. rmdi                            FPFIELD1.180    
     &          .AND. in_field2(ix,iy) .GT. rmdi )                         FPFIELD1.181    
                                                                           FPFIELD1.182    
     &      THEN                                                           FPFIELD1.183    
                                                                           FPFIELD1.184    
              out_field(ix,iy) = in_field1(ix,iy) - in_field2(ix,iy)       FPFIELD1.185    
                                                                           FPFIELD1.186    
            ELSE                                                           FPFIELD1.187    
                                                                           FPFIELD1.188    
              out_field(ix,iy) = rmdi                                      FPFIELD1.189    
                                                                           FPFIELD1.190    
            END IF                                                         FPFIELD1.191    
                                                                           FPFIELD1.192    
         END DO  ! ix: loop over columns                                   FPFIELD1.193    
      END DO     ! iy: loop over columns                                   FPFIELD1.194    
                                                                           FPFIELD1.195    
      RETURN                                                               FPFIELD1.196    
      END         ! Subroutine FieldSub                                    FPFIELD1.197    
                                                                           FPFIELD1.198    
                                                                           FPFIELD1.199    

      SUBROUTINE FieldMult                                                  1FPFIELD1.200    
     &           (nx, ny, rmdi,                                            FPFIELD1.201    
     &            in_field1, in_field2,                                    FPFIELD1.202    
     &            out_field,                                               FPFIELD1.203    
     &            icode, cmessage)                                         FPFIELD1.204    
                                                                           FPFIELD1.205    
                                                                           FPFIELD1.206    
C     FieldMult: subroutine to multiply two arrays.                        FPFIELD1.207    
C     ---------- Takes account of missing data.                            FPFIELD1.208    
                                                                           FPFIELD1.209    
C     Programmer: S J Foreman                                              FPFIELD1.210    
C     -----------                                                          FPFIELD1.211    
                                                                           FPFIELD1.212    
C     Method:                                                              FPFIELD1.213    
C     -------  loop over all elements, adding unless either is             FPFIELD1.214    
C              missing, in which case result is missing.                   FPFIELD1.215    
C              in_field1*in_field2.                                        FPFIELD1.216    
                                                                           FPFIELD1.217    
      IMPLICIT NONE                                                        FPFIELD1.218    
                                                                           FPFIELD1.219    
                                                                           FPFIELD1.220    
C     Input:                                                               FPFIELD1.221    
C     ------                                                               FPFIELD1.222    
                                                                           FPFIELD1.223    
      INTEGER                                                              FPFIELD1.224    
     &       nx         ! IN number of columns of array                    FPFIELD1.225    
     &      ,ny         ! IN number of rows in array                       FPFIELD1.226    
                                                                           FPFIELD1.227    
       REAL                                                                FPFIELD1.228    
     &       rmdi       ! IN value of REAL missing data indicator          FPFIELD1.229    
                                                                           FPFIELD1.230    
     &      ,in_field1(nx,ny)  ! IN first array of input values            FPFIELD1.231    
     &      ,in_field2(nx,ny)  ! IN second array of input values           FPFIELD1.232    
                                                                           FPFIELD1.233    
C     Output                                                               FPFIELD1.234    
C     ------                                                               FPFIELD1.235    
                                                                           FPFIELD1.236    
      REAL                                                                 FPFIELD1.237    
     &       out_field(nx,ny)  ! OUT results of multipication              FPFIELD1.238    
                                                                           FPFIELD1.239    
      INTEGER                                                              FPFIELD1.240    
     &       icode      ! OUT Completion code                              FPFIELD1.241    
                                                                           FPFIELD1.242    
      CHARACTER *(*)                                                       FPFIELD1.243    
     &       cmessage   ! OUT Error message                                FPFIELD1.244    
                                                                           FPFIELD1.245    
                                                                           FPFIELD1.246    
C    Local variables                                                       FPFIELD1.247    
C    ---------------                                                       FPFIELD1.248    
                                                                           FPFIELD1.249    
      INTEGER                                                              FPFIELD1.250    
     &        ix        ! Loop counter over columns                        FPFIELD1.251    
     &       ,iy        ! Loop counter over rows                           FPFIELD1.252    
                                                                           FPFIELD1.253    
                                                                           FPFIELD1.254    
C ------------------------------------------------------------------       FPFIELD1.255    
                                                                           FPFIELD1.256    
      icode =0                                                             FPFIELD1.257    
      cmessage="FieldMult: multiplication successful."                     FPFIELD1.258    
                                                                           FPFIELD1.259    
      DO iy = 1, ny     ! iy: loop over rows                               FPFIELD1.260    
        DO ix = 1, nx  ! ix: loop over columns                             FPFIELD1.261    
                                                                           FPFIELD1.262    
          IF (        in_field1(ix,iy) .NE. rmdi                           FPFIELD1.263    
     &          .AND. in_field2(ix,iy) .NE. rmdi )                         FPFIELD1.264    
                                                                           FPFIELD1.265    
     &      THEN                                                           FPFIELD1.266    
                                                                           FPFIELD1.267    
              out_field(ix,iy) = in_field1(ix,iy) * in_field2(ix,iy)       FPFIELD1.268    
                                                                           FPFIELD1.269    
            ELSE                                                           FPFIELD1.270    
                                                                           FPFIELD1.271    
              out_field(ix,iy) = rmdi                                      FPFIELD1.272    
                                                                           FPFIELD1.273    
            END IF                                                         FPFIELD1.274    
                                                                           FPFIELD1.275    
         END DO  ! ix: loop over columns                                   FPFIELD1.276    
      END DO     ! iy: loop over columns                                   FPFIELD1.277    
                                                                           FPFIELD1.278    
      RETURN                                                               FPFIELD1.279    
      END         ! Subroutine FieldMult                                   FPFIELD1.280    
                                                                           FPFIELD1.281    
                                                                           FPFIELD1.282    

      SUBROUTINE FieldDiv                                                  FPFIELD1.283    
     &           (nx, ny, rmdi,                                            FPFIELD1.284    
     &            in_field1, in_field2,                                    FPFIELD1.285    
     &            out_field,                                               FPFIELD1.286    
     &            icode, cmessage)                                         FPFIELD1.287    
                                                                           FPFIELD1.288    
                                                                           FPFIELD1.289    
C     FieldDiv: subroutine to divide elements of one array by              FPFIELD1.290    
C     --------- corresponding elements of another.                         FPFIELD1.291    
C               Takes account of missing data.                             FPFIELD1.292    
                                                                           FPFIELD1.293    
C     Programmer: S J Foreman                                              FPFIELD1.294    
C     -----------                                                          FPFIELD1.295    
                                                                           FPFIELD1.296    
C     Method:                                                              FPFIELD1.297    
C     -------  loop over all elements, dividing unless either is           FPFIELD1.298    
C              missing or divisor is zero, in which case result            FPFIELD1.299    
C              is missing.                                                 FPFIELD1.300    
C              in_field1 / in_field2.                                      FPFIELD1.301    
                                                                           FPFIELD1.302    
      IMPLICIT NONE                                                        FPFIELD1.303    
                                                                           FPFIELD1.304    
                                                                           FPFIELD1.305    
C     Input:                                                               FPFIELD1.306    
C     ------                                                               FPFIELD1.307    
                                                                           FPFIELD1.308    
      INTEGER                                                              FPFIELD1.309    
     &       nx         ! IN number of columns of array                    FPFIELD1.310    
     &      ,ny         ! IN number of rows in array                       FPFIELD1.311    
                                                                           FPFIELD1.312    
       REAL                                                                FPFIELD1.313    
     &       rmdi       ! IN value of REAL missing data indicator          FPFIELD1.314    
                                                                           FPFIELD1.315    
     &      ,in_field1(nx,ny)  ! IN array of input values (numerator)      FPFIELD1.316    
     &      ,in_field2(nx,ny)  ! IN array of input values (denominator)    FPFIELD1.317    
                                                                           FPFIELD1.318    
C     Output                                                               FPFIELD1.319    
C     ------                                                               FPFIELD1.320    
                                                                           FPFIELD1.321    
      REAL                                                                 FPFIELD1.322    
     &       out_field(nx,ny)  ! OUT results of division                   FPFIELD1.323    
                                                                           FPFIELD1.324    
      INTEGER                                                              FPFIELD1.325    
     &       icode      ! OUT Completion code                              FPFIELD1.326    
                                                                           FPFIELD1.327    
      CHARACTER *(*)                                                       FPFIELD1.328    
     &       cmessage   ! OUT Error message                                FPFIELD1.329    
                                                                           FPFIELD1.330    
                                                                           FPFIELD1.331    
C    Local variables                                                       FPFIELD1.332    
C    ---------------                                                       FPFIELD1.333    
                                                                           FPFIELD1.334    
      INTEGER                                                              FPFIELD1.335    
     &        ix        ! Loop counter over columns                        FPFIELD1.336    
     &       ,iy        ! Loop counter over rows                           FPFIELD1.337    
                                                                           FPFIELD1.338    
                                                                           FPFIELD1.339    
C ------------------------------------------------------------------       FPFIELD1.340    
                                                                           FPFIELD1.341    
      icode =0                                                             FPFIELD1.342    
      cmessage='FieldDiv: division successful.'                            FPFIELD1.343    
                                                                           FPFIELD1.344    
      DO iy = 1, ny     ! iy: loop over rows                               FPFIELD1.345    
        DO ix = 1, nx  ! ix: loop over columns                             FPFIELD1.346    
                                                                           FPFIELD1.347    
          IF (        in_field1(ix,iy) .NE. rmdi                           FPFIELD1.348    
     &          .AND. in_field2(ix,iy) .NE. rmdi )                         FPFIELD1.349    
     &      THEN                                                           FPFIELD1.350    
                                                                           FPFIELD1.351    
              IF ( in_field2(ix,iy) .NE. 0.0 )                             FPFIELD1.352    
                                                                           FPFIELD1.353    
     &          THEN  ! divide                                             FPFIELD1.354    
                  out_field(ix,iy) = in_field1(ix,iy)/in_field2(ix,iy)     FPFIELD1.355    
                                                                           FPFIELD1.356    
                ELSE  ! avoid division by zero                             FPFIELD1.357    
                  icode = 4                                                FPFIELD1.358    
                  out_field(ix,iy) = rmdi                                  FPFIELD1.359    
                END IF                                                     FPFIELD1.360    
                                                                           FPFIELD1.361    
            ELSE      ! set missing data if either input is missing        FPFIELD1.362    
                                                                           FPFIELD1.363    
              out_field(ix,iy) = rmdi                                      FPFIELD1.364    
                                                                           FPFIELD1.365    
            END IF                                                         FPFIELD1.366    
                                                                           FPFIELD1.367    
         END DO  ! ix: loop over columns                                   FPFIELD1.368    
      END DO     ! iy: loop over columns                                   FPFIELD1.369    
                                                                           FPFIELD1.370    
C     Set appropriate error message if division by zero has occurred       FPFIELD1.371    
                                                                           FPFIELD1.372    
      IF (icode .NE. 0) THEN                                               FPFIELD1.373    
         cmessage = 'FieldDiv: division by zero'                           FPFIELD1.374    
      END IF                                                               FPFIELD1.375    
                                                                           FPFIELD1.376    
      RETURN                                                               FPFIELD1.377    
      END         ! Subroutine FieldDiv                                    FPFIELD1.378    
                                                                           FPFIELD1.379    
                                                                           FPFIELD1.380    

      SUBROUTINE FieldCopy                                                 FPFIELD1.381    
     &           (nx, ny, rmdi,                                            FPFIELD1.382    
     &            in_field,                                                FPFIELD1.383    
     &            out_field,                                               FPFIELD1.384    
     &            icode, cmessage)                                         FPFIELD1.385    
                                                                           FPFIELD1.386    
                                                                           FPFIELD1.387    
C     FieldCopy: subroutine to copy one array to another.                  FPFIELD1.388    
C     ----------                                                           FPFIELD1.389    
                                                                           FPFIELD1.390    
C     Programmer: S J Foreman                                              FPFIELD1.391    
C     -----------                                                          FPFIELD1.392    
                                                                           FPFIELD1.393    
C     Method:                                                              FPFIELD1.394    
C     -------  copy one array to another.                                  FPFIELD1.395    
                                                                           FPFIELD1.396    
      IMPLICIT NONE                                                        FPFIELD1.397    
                                                                           FPFIELD1.398    
                                                                           FPFIELD1.399    
C     Input:                                                               FPFIELD1.400    
C     ------                                                               FPFIELD1.401    
                                                                           FPFIELD1.402    
      INTEGER                                                              FPFIELD1.403    
     &       nx         ! IN number of columns of array                    FPFIELD1.404    
     &      ,ny         ! IN number of rows in array                       FPFIELD1.405    
                                                                           FPFIELD1.406    
       REAL                                                                FPFIELD1.407    
     &       rmdi       ! IN value of REAL missing data indicator          FPFIELD1.408    
                                                                           FPFIELD1.409    
     &      ,in_field(nx,ny)  ! IN array of input values                   FPFIELD1.410    
                                                                           FPFIELD1.411    
C     Output                                                               FPFIELD1.412    
C     ------                                                               FPFIELD1.413    
                                                                           FPFIELD1.414    
      REAL                                                                 FPFIELD1.415    
     &       out_field(nx,ny)  ! OUT copy of values in input               FPFIELD1.416    
                                                                           FPFIELD1.417    
      INTEGER                                                              FPFIELD1.418    
     &       icode      ! OUT Completion code                              FPFIELD1.419    
                                                                           FPFIELD1.420    
      CHARACTER *(*)                                                       FPFIELD1.421    
     &       cmessage   ! OUT Error message                                FPFIELD1.422    
                                                                           FPFIELD1.423    
                                                                           FPFIELD1.424    
C    Local variables                                                       FPFIELD1.425    
C    ---------------                                                       FPFIELD1.426    
                                                                           FPFIELD1.427    
      INTEGER                                                              FPFIELD1.428    
     &        ix        ! Loop counter over columns                        FPFIELD1.429    
     &       ,iy        ! Loop counter over rows                           FPFIELD1.430    
                                                                           FPFIELD1.431    
                                                                           FPFIELD1.432    
C ------------------------------------------------------------------       FPFIELD1.433    
                                                                           FPFIELD1.434    
      icode =0                                                             FPFIELD1.435    
      cmessage='FieldCopy: copy successful.'                               FPFIELD1.436    
                                                                           FPFIELD1.437    
      DO iy = 1, ny     ! iy: loop over rows                               FPFIELD1.438    
        DO ix = 1, nx  ! ix: loop over columns                             FPFIELD1.439    
                                                                           FPFIELD1.440    
           out_field(ix,iy) = in_field(ix,iy)                              FPFIELD1.441    
                                                                           FPFIELD1.442    
         END DO  ! ix: loop over columns                                   FPFIELD1.443    
      END DO     ! iy: loop over columns                                   FPFIELD1.444    
                                                                           FPFIELD1.445    
      RETURN                                                               FPFIELD1.446    
      END         ! Subroutine FieldCopy                                   FPFIELD1.447    
                                                                           FPFIELD1.448    
                                                                           FPFIELD1.449    

      SUBROUTINE FieldEQ                                                   FPFIELD1.450    
     &           (nx, ny, rmdi,                                            FPFIELD1.451    
     &            in_field1, in_field2,                                    FPFIELD1.452    
     &            out_field,                                               FPFIELD1.453    
     &            icode, cmessage)                                         FPFIELD1.454    
                                                                           FPFIELD1.455    
                                                                           FPFIELD1.456    
C     FieldEQ: Set MDI where two fields are equal.                         FPFIELD1.457    
C     ---------- Takes account of missing data.                            FPFIELD1.458    
                                                                           FPFIELD1.459    
C     Programmer: S J Foreman                                              FPFIELD1.460    
C     -----------                                                          FPFIELD1.461    
                                                                           FPFIELD1.462    
C     Method:                                                              FPFIELD1.463    
C     -------  loop over all elements, testing unless either is            FPFIELD1.464    
C              missing, in which case result is missing.                   FPFIELD1.465    
C              out_field1 = in_field1.                                     FPFIELD1.466    
                                                                           FPFIELD1.467    
      IMPLICIT NONE                                                        FPFIELD1.468    
                                                                           FPFIELD1.469    
                                                                           FPFIELD1.470    
C     Input:                                                               FPFIELD1.471    
C     ------                                                               FPFIELD1.472    
                                                                           FPFIELD1.473    
      INTEGER                                                              FPFIELD1.474    
     &       nx         ! IN number of columns of array                    FPFIELD1.475    
     &      ,ny         ! IN number of rows in array                       FPFIELD1.476    
                                                                           FPFIELD1.477    
       REAL                                                                FPFIELD1.478    
     &       rmdi       ! IN value of REAL missing data indicator          FPFIELD1.479    
                                                                           FPFIELD1.480    
     &      ,in_field1(nx,ny)  ! IN first array of input values            FPFIELD1.481    
     &      ,in_field2(nx,ny)  ! IN second array of input values           FPFIELD1.482    
                                                                           FPFIELD1.483    
C     Output                                                               FPFIELD1.484    
C     ------                                                               FPFIELD1.485    
                                                                           FPFIELD1.486    
      REAL                                                                 FPFIELD1.487    
     &       out_field(nx,ny)  ! OUT results of multipication              FPFIELD1.488    
                                                                           FPFIELD1.489    
      INTEGER                                                              FPFIELD1.490    
     &       icode      ! OUT Completion code                              FPFIELD1.491    
                                                                           FPFIELD1.492    
      CHARACTER *(*)                                                       FPFIELD1.493    
     &       cmessage   ! OUT Error message                                FPFIELD1.494    
                                                                           FPFIELD1.495    
                                                                           FPFIELD1.496    
C    Local variables                                                       FPFIELD1.497    
C    ---------------                                                       FPFIELD1.498    
                                                                           FPFIELD1.499    
      INTEGER                                                              FPFIELD1.500    
     &        ix        ! Loop counter over columns                        FPFIELD1.501    
     &       ,iy        ! Loop counter over rows                           FPFIELD1.502    
                                                                           FPFIELD1.503    
                                                                           FPFIELD1.504    
C ------------------------------------------------------------------       FPFIELD1.505    
                                                                           FPFIELD1.506    
      icode =0                                                             FPFIELD1.507    
      cmessage="FieldEQ: test successful."                                 FPFIELD1.508    
                                                                           FPFIELD1.509    
      DO iy = 1, ny     ! iy: loop over rows                               FPFIELD1.510    
        DO ix = 1, nx  ! ix: loop over columns                             FPFIELD1.511    
                                                                           FPFIELD1.512    
          IF (       in_field1(ix,iy) .NE. rmdi                            FPFIELD1.513    
     &          .AND. in_field2(ix,iy) .NE. rmdi                           FPFIELD1.514    
     &          .AND. in_field1(ix,iy).NE.in_field2(ix,iy) )               FPFIELD1.515    
                                                                           FPFIELD1.516    
     &      THEN                                                           FPFIELD1.517    
                                                                           FPFIELD1.518    
              out_field(ix,iy) = in_field1(ix,iy)                          FPFIELD1.519    
                                                                           FPFIELD1.520    
            ELSE                                                           FPFIELD1.521    
                                                                           FPFIELD1.522    
              out_field(ix,iy) = rmdi                                      FPFIELD1.523    
                                                                           FPFIELD1.524    
            END IF                                                         FPFIELD1.525    
                                                                           FPFIELD1.526    
         END DO  ! ix: loop over columns                                   FPFIELD1.527    
      END DO     ! iy: loop over columns                                   FPFIELD1.528    
                                                                           FPFIELD1.529    
      RETURN                                                               FPFIELD1.530    
      END         ! Subroutine FieldEQ                                     FPFIELD1.531    
                                                                           FPFIELD1.532    

        SUBROUTINE FieldNE                                                 FPFIELD1.533    
     &           (nx, ny, rmdi,                                            FPFIELD1.534    
     &            in_field1, in_field2,                                    FPFIELD1.535    
     &            out_field,                                               FPFIELD1.536    
     &            icode, cmessage)                                         FPFIELD1.537    
                                                                           FPFIELD1.538    
                                                                           FPFIELD1.539    
C     FieldEQ: Set MDI where two fields are not equal.                     FPFIELD1.540    
C     ---------- Takes account of missing data.                            FPFIELD1.541    
                                                                           FPFIELD1.542    
C     Programmer: S J Foreman                                              FPFIELD1.543    
C     -----------                                                          FPFIELD1.544    
                                                                           FPFIELD1.545    
C     Method:                                                              FPFIELD1.546    
C     -------  loop over all elements, testing unless either is            FPFIELD1.547    
C              missing, in which case result is missing.                   FPFIELD1.548    
C              out_field1 = in_field1.                                     FPFIELD1.549    
                                                                           FPFIELD1.550    
      IMPLICIT NONE                                                        FPFIELD1.551    
                                                                           FPFIELD1.552    
                                                                           FPFIELD1.553    
C     Input:                                                               FPFIELD1.554    
C     ------                                                               FPFIELD1.555    
                                                                           FPFIELD1.556    
      INTEGER                                                              FPFIELD1.557    
     &       nx         ! IN number of columns of array                    FPFIELD1.558    
     &      ,ny         ! IN number of rows in array                       FPFIELD1.559    
                                                                           FPFIELD1.560    
       REAL                                                                FPFIELD1.561    
     &       rmdi       ! IN value of REAL missing data indicator          FPFIELD1.562    
                                                                           FPFIELD1.563    
     &      ,in_field1(nx,ny)  ! IN first array of input values            FPFIELD1.564    
     &      ,in_field2(nx,ny)  ! IN second array of input values           FPFIELD1.565    
                                                                           FPFIELD1.566    
C     Output                                                               FPFIELD1.567    
C     ------                                                               FPFIELD1.568    
                                                                           FPFIELD1.569    
      REAL                                                                 FPFIELD1.570    
     &       out_field(nx,ny)  ! OUT results of multipication              FPFIELD1.571    
                                                                           FPFIELD1.572    
      INTEGER                                                              FPFIELD1.573    
     &       icode      ! OUT Completion code                              FPFIELD1.574    
                                                                           FPFIELD1.575    
      CHARACTER *(*)                                                       FPFIELD1.576    
     &       cmessage   ! OUT Error message                                FPFIELD1.577    
                                                                           FPFIELD1.578    
                                                                           FPFIELD1.579    
C    Local variables                                                       FPFIELD1.580    
C    ---------------                                                       FPFIELD1.581    
                                                                           FPFIELD1.582    
      INTEGER                                                              FPFIELD1.583    
     &        ix        ! Loop counter over columns                        FPFIELD1.584    
     &       ,iy        ! Loop counter over rows                           FPFIELD1.585    
                                                                           FPFIELD1.586    
                                                                           FPFIELD1.587    
C ------------------------------------------------------------------       FPFIELD1.588    
                                                                           FPFIELD1.589    
      icode =0                                                             FPFIELD1.590    
      cmessage="FieldNE: test successful."                                 FPFIELD1.591    
                                                                           FPFIELD1.592    
      DO iy = 1, ny     ! iy: loop over rows                               FPFIELD1.593    
        DO ix = 1, nx  ! ix: loop over columns                             FPFIELD1.594    
                                                                           FPFIELD1.595    
          IF (       in_field1(ix,iy) .NE. rmdi                            FPFIELD1.596    
     &          .AND. in_field2(ix,iy) .NE. rmdi                           FPFIELD1.597    
     &          .AND. in_field1(ix,iy).EQ.in_field2(ix,iy) )               FPFIELD1.598    
                                                                           FPFIELD1.599    
     &      THEN                                                           FPFIELD1.600    
                                                                           FPFIELD1.601    
              out_field(ix,iy) = in_field1(ix,iy)                          FPFIELD1.602    
                                                                           FPFIELD1.603    
            ELSE                                                           FPFIELD1.604    
                                                                           FPFIELD1.605    
              out_field(ix,iy) = rmdi                                      FPFIELD1.606    
                                                                           FPFIELD1.607    
            END IF                                                         FPFIELD1.608    
                                                                           FPFIELD1.609    
         END DO  ! ix: loop over columns                                   FPFIELD1.610    
      END DO     ! iy: loop over columns                                   FPFIELD1.611    
                                                                           FPFIELD1.612    
      RETURN                                                               FPFIELD1.613    
      END         ! Subroutine FieldNE                                     FPFIELD1.614    
                                                                           FPFIELD1.615    

      SUBROUTINE FieldGT                                                   FPFIELD1.616    
     &           (nx, ny, rmdi,                                            FPFIELD1.617    
     &            in_field1, in_field2,                                    FPFIELD1.618    
     &            out_field,                                               FPFIELD1.619    
     &            icode, cmessage)                                         FPFIELD1.620    
                                                                           FPFIELD1.621    
                                                                           FPFIELD1.622    
C     FieldGT: Set MDI where field1 > field2.                              FPFIELD1.623    
C     ---------- Takes account of missing data.                            FPFIELD1.624    
                                                                           FPFIELD1.625    
C     Programmer: S J Foreman                                              FPFIELD1.626    
C     -----------                                                          FPFIELD1.627    
                                                                           FPFIELD1.628    
C     Method:                                                              FPFIELD1.629    
C     -------  loop over all elements, testing unless either is            FPFIELD1.630    
C              missing, in which case result is missing.                   FPFIELD1.631    
C              out_field1 = in_field1.                                     FPFIELD1.632    
                                                                           FPFIELD1.633    
      IMPLICIT NONE                                                        FPFIELD1.634    
                                                                           FPFIELD1.635    
                                                                           FPFIELD1.636    
C     Input:                                                               FPFIELD1.637    
C     ------                                                               FPFIELD1.638    
                                                                           FPFIELD1.639    
      INTEGER                                                              FPFIELD1.640    
     &       nx         ! IN number of columns of array                    FPFIELD1.641    
     &      ,ny         ! IN number of rows in array                       FPFIELD1.642    
                                                                           FPFIELD1.643    
       REAL                                                                FPFIELD1.644    
     &       rmdi       ! IN value of REAL missing data indicator          FPFIELD1.645    
                                                                           FPFIELD1.646    
     &      ,in_field1(nx,ny)  ! IN first array of input values            FPFIELD1.647    
     &      ,in_field2(nx,ny)  ! IN second array of input values           FPFIELD1.648    
                                                                           FPFIELD1.649    
C     Output                                                               FPFIELD1.650    
C     ------                                                               FPFIELD1.651    
                                                                           FPFIELD1.652    
      REAL                                                                 FPFIELD1.653    
     &       out_field(nx,ny)  ! OUT results of multipication              FPFIELD1.654    
                                                                           FPFIELD1.655    
      INTEGER                                                              FPFIELD1.656    
     &       icode      ! OUT Completion code                              FPFIELD1.657    
                                                                           FPFIELD1.658    
      CHARACTER *(*)                                                       FPFIELD1.659    
     &       cmessage   ! OUT Error message                                FPFIELD1.660    
                                                                           FPFIELD1.661    
                                                                           FPFIELD1.662    
C    Local variables                                                       FPFIELD1.663    
C    ---------------                                                       FPFIELD1.664    
                                                                           FPFIELD1.665    
      INTEGER                                                              FPFIELD1.666    
     &        ix        ! Loop counter over columns                        FPFIELD1.667    
     &       ,iy        ! Loop counter over rows                           FPFIELD1.668    
                                                                           FPFIELD1.669    
                                                                           FPFIELD1.670    
C ------------------------------------------------------------------       FPFIELD1.671    
                                                                           FPFIELD1.672    
      icode =0                                                             FPFIELD1.673    
      cmessage="FieldGT: test successful."                                 FPFIELD1.674    
                                                                           FPFIELD1.675    
      DO iy = 1, ny     ! iy: loop over rows                               FPFIELD1.676    
        DO ix = 1, nx  ! ix: loop over columns                             FPFIELD1.677    
                                                                           FPFIELD1.678    
          IF (       in_field1(ix,iy) .NE. rmdi                            FPFIELD1.679    
     &          .AND. in_field2(ix,iy) .NE. rmdi                           FPFIELD1.680    
     &          .AND. in_field1(ix,iy).LE.in_field2(ix,iy) )               FPFIELD1.681    
                                                                           FPFIELD1.682    
     &      THEN                                                           FPFIELD1.683    
                                                                           FPFIELD1.684    
              out_field(ix,iy) = in_field1(ix,iy)                          FPFIELD1.685    
                                                                           FPFIELD1.686    
            ELSE                                                           FPFIELD1.687    
                                                                           FPFIELD1.688    
              out_field(ix,iy) = rmdi                                      FPFIELD1.689    
                                                                           FPFIELD1.690    
            END IF                                                         FPFIELD1.691    
                                                                           FPFIELD1.692    
         END DO  ! ix: loop over columns                                   FPFIELD1.693    
      END DO     ! iy: loop over columns                                   FPFIELD1.694    
                                                                           FPFIELD1.695    
      RETURN                                                               FPFIELD1.696    
      END         ! Subroutine FieldGT                                     FPFIELD1.697    
                                                                           FPFIELD1.698    
                                                                           FPFIELD1.699    

      SUBROUTINE FieldLT                                                   FPFIELD1.700    
     &           (nx, ny, rmdi,                                            FPFIELD1.701    
     &            in_field1, in_field2,                                    FPFIELD1.702    
     &            out_field,                                               FPFIELD1.703    
     &            icode, cmessage)                                         FPFIELD1.704    
                                                                           FPFIELD1.705    
                                                                           FPFIELD1.706    
C     FieldLT: Set MDI where field1 < field2.                              FPFIELD1.707    
C     ---------- Takes account of missing data.                            FPFIELD1.708    
                                                                           FPFIELD1.709    
C     Programmer: S J Foreman                                              FPFIELD1.710    
C     -----------                                                          FPFIELD1.711    
                                                                           FPFIELD1.712    
C     Method:                                                              FPFIELD1.713    
C     -------  loop over all elements, testing unless either is            FPFIELD1.714    
C              missing, in which case result is missing.                   FPFIELD1.715    
C              out_field1 = in_field1.                                     FPFIELD1.716    
                                                                           FPFIELD1.717    
      IMPLICIT NONE                                                        FPFIELD1.718    
                                                                           FPFIELD1.719    
                                                                           FPFIELD1.720    
C     Input:                                                               FPFIELD1.721    
C     ------                                                               FPFIELD1.722    
                                                                           FPFIELD1.723    
      INTEGER                                                              FPFIELD1.724    
     &       nx         ! IN number of columns of array                    FPFIELD1.725    
     &      ,ny         ! IN number of rows in array                       FPFIELD1.726    
                                                                           FPFIELD1.727    
       REAL                                                                FPFIELD1.728    
     &       rmdi       ! IN value of REAL missing data indicator          FPFIELD1.729    
                                                                           FPFIELD1.730    
     &      ,in_field1(nx,ny)  ! IN first array of input values            FPFIELD1.731    
     &      ,in_field2(nx,ny)  ! IN second array of input values           FPFIELD1.732    
                                                                           FPFIELD1.733    
C     Output                                                               FPFIELD1.734    
C     ------                                                               FPFIELD1.735    
                                                                           FPFIELD1.736    
      REAL                                                                 FPFIELD1.737    
     &       out_field(nx,ny)  ! OUT results of multipication              FPFIELD1.738    
                                                                           FPFIELD1.739    
      INTEGER                                                              FPFIELD1.740    
     &       icode      ! OUT Completion code                              FPFIELD1.741    
                                                                           FPFIELD1.742    
      CHARACTER *(*)                                                       FPFIELD1.743    
     &       cmessage   ! OUT Error message                                FPFIELD1.744    
                                                                           FPFIELD1.745    
                                                                           FPFIELD1.746    
C    Local variables                                                       FPFIELD1.747    
C    ---------------                                                       FPFIELD1.748    
                                                                           FPFIELD1.749    
      INTEGER                                                              FPFIELD1.750    
     &        ix        ! Loop counter over columns                        FPFIELD1.751    
     &       ,iy        ! Loop counter over rows                           FPFIELD1.752    
                                                                           FPFIELD1.753    
                                                                           FPFIELD1.754    
C ------------------------------------------------------------------       FPFIELD1.755    
                                                                           FPFIELD1.756    
      icode =0                                                             FPFIELD1.757    
      cmessage="FieldLT: test successful."                                 FPFIELD1.758    
                                                                           FPFIELD1.759    
      DO iy = 1, ny     ! iy: loop over rows                               FPFIELD1.760    
        DO ix = 1, nx  ! ix: loop over columns                             FPFIELD1.761    
                                                                           FPFIELD1.762    
          IF (       in_field1(ix,iy) .NE. rmdi                            FPFIELD1.763    
     &          .AND. in_field2(ix,iy) .NE. rmdi                           FPFIELD1.764    
     &          .AND. in_field1(ix,iy).GE.in_field2(ix,iy) )               FPFIELD1.765    
                                                                           FPFIELD1.766    
     &      THEN                                                           FPFIELD1.767    
                                                                           FPFIELD1.768    
              out_field(ix,iy) = in_field1(ix,iy)                          FPFIELD1.769    
                                                                           FPFIELD1.770    
            ELSE                                                           FPFIELD1.771    
                                                                           FPFIELD1.772    
              out_field(ix,iy) = rmdi                                      FPFIELD1.773    
                                                                           FPFIELD1.774    
            END IF                                                         FPFIELD1.775    
                                                                           FPFIELD1.776    
         END DO  ! ix: loop over columns                                   FPFIELD1.777    
      END DO     ! iy: loop over columns                                   FPFIELD1.778    
                                                                           FPFIELD1.779    
      RETURN                                                               FPFIELD1.780    
      END         ! Subroutine FieldLT                                     FPFIELD1.781    
                                                                           FPFIELD1.782    

      SUBROUTINE FieldLE                                                   FPFIELD1.783    
     &           (nx, ny, rmdi,                                            FPFIELD1.784    
     &            in_field1, in_field2,                                    FPFIELD1.785    
     &            out_field,                                               FPFIELD1.786    
     &            icode, cmessage)                                         FPFIELD1.787    
                                                                           FPFIELD1.788    
                                                                           FPFIELD1.789    
C     FieldLE: Set MDI where field1 <= field2.                             FPFIELD1.790    
C     ---------- Takes account of missing data.                            FPFIELD1.791    
                                                                           FPFIELD1.792    
C     Programmer: S J Foreman                                              FPFIELD1.793    
C     -----------                                                          FPFIELD1.794    
                                                                           FPFIELD1.795    
C     Method:                                                              FPFIELD1.796    
C     -------  loop over all elements, testing unless either is            FPFIELD1.797    
C              missing, in which case result is missing.                   FPFIELD1.798    
C              out_field1 = in_field1.                                     FPFIELD1.799    
                                                                           FPFIELD1.800    
      IMPLICIT NONE                                                        FPFIELD1.801    
                                                                           FPFIELD1.802    
                                                                           FPFIELD1.803    
C     Input:                                                               FPFIELD1.804    
C     ------                                                               FPFIELD1.805    
                                                                           FPFIELD1.806    
      INTEGER                                                              FPFIELD1.807    
     &       nx         ! IN number of columns of array                    FPFIELD1.808    
     &      ,ny         ! IN number of rows in array                       FPFIELD1.809    
                                                                           FPFIELD1.810    
       REAL                                                                FPFIELD1.811    
     &       rmdi       ! IN value of REAL missing data indicator          FPFIELD1.812    
                                                                           FPFIELD1.813    
     &      ,in_field1(nx,ny)  ! IN first array of input values            FPFIELD1.814    
     &      ,in_field2(nx,ny)  ! IN second array of input values           FPFIELD1.815    
                                                                           FPFIELD1.816    
C     Output                                                               FPFIELD1.817    
C     ------                                                               FPFIELD1.818    
                                                                           FPFIELD1.819    
      REAL                                                                 FPFIELD1.820    
     &       out_field(nx,ny)  ! OUT results of multipication              FPFIELD1.821    
                                                                           FPFIELD1.822    
      INTEGER                                                              FPFIELD1.823    
     &       icode      ! OUT Completion code                              FPFIELD1.824    
                                                                           FPFIELD1.825    
      CHARACTER *(*)                                                       FPFIELD1.826    
     &       cmessage   ! OUT Error message                                FPFIELD1.827    
                                                                           FPFIELD1.828    
                                                                           FPFIELD1.829    
C    Local variables                                                       FPFIELD1.830    
C    ---------------                                                       FPFIELD1.831    
                                                                           FPFIELD1.832    
      INTEGER                                                              FPFIELD1.833    
     &        ix        ! Loop counter over columns                        FPFIELD1.834    
     &       ,iy        ! Loop counter over rows                           FPFIELD1.835    
                                                                           FPFIELD1.836    
                                                                           FPFIELD1.837    
C ------------------------------------------------------------------       FPFIELD1.838    
                                                                           FPFIELD1.839    
      icode =0                                                             FPFIELD1.840    
      cmessage="FieldLE: test successful."                                 FPFIELD1.841    
                                                                           FPFIELD1.842    
      DO iy = 1, ny     ! iy: loop over rows                               FPFIELD1.843    
        DO ix = 1, nx  ! ix: loop over columns                             FPFIELD1.844    
                                                                           FPFIELD1.845    
          IF (       in_field1(ix,iy) .NE. rmdi                            FPFIELD1.846    
     &          .AND. in_field2(ix,iy) .NE. rmdi                           FPFIELD1.847    
     &          .AND. in_field1(ix,iy).GT.in_field2(ix,iy) )               FPFIELD1.848    
                                                                           FPFIELD1.849    
     &      THEN                                                           FPFIELD1.850    
                                                                           FPFIELD1.851    
              out_field(ix,iy) = in_field1(ix,iy)                          FPFIELD1.852    
                                                                           FPFIELD1.853    
            ELSE                                                           FPFIELD1.854    
                                                                           FPFIELD1.855    
              out_field(ix,iy) = rmdi                                      FPFIELD1.856    
                                                                           FPFIELD1.857    
            END IF                                                         FPFIELD1.858    
                                                                           FPFIELD1.859    
         END DO  ! ix: loop over columns                                   FPFIELD1.860    
      END DO     ! iy: loop over columns                                   FPFIELD1.861    
                                                                           FPFIELD1.862    
      RETURN                                                               FPFIELD1.863    
      END         ! Subroutine FieldLE                                     FPFIELD1.864    
                                                                           FPFIELD1.865    

      SUBROUTINE FieldGE                                                   FPFIELD1.866    
     &           (nx, ny, rmdi,                                            FPFIELD1.867    
     &            in_field1, in_field2,                                    FPFIELD1.868    
     &            out_field,                                               FPFIELD1.869    
     &            icode, cmessage)                                         FPFIELD1.870    
                                                                           FPFIELD1.871    
                                                                           FPFIELD1.872    
C     FieldGE: Set MDI where field1 >= field2.                             FPFIELD1.873    
C     ---------- Takes account of missing data.                            FPFIELD1.874    
                                                                           FPFIELD1.875    
C     Programmer: S J Foreman                                              FPFIELD1.876    
C     -----------                                                          FPFIELD1.877    
                                                                           FPFIELD1.878    
C     Method:                                                              FPFIELD1.879    
C     -------  loop over all elements, testing unless either is            FPFIELD1.880    
C              missing, in which case result is missing.                   FPFIELD1.881    
C              out_field1 = in_field1.                                     FPFIELD1.882    
                                                                           FPFIELD1.883    
      IMPLICIT NONE                                                        FPFIELD1.884    
                                                                           FPFIELD1.885    
                                                                           FPFIELD1.886    
C     Input:                                                               FPFIELD1.887    
C     ------                                                               FPFIELD1.888    
                                                                           FPFIELD1.889    
      INTEGER                                                              FPFIELD1.890    
     &       nx         ! IN number of columns of array                    FPFIELD1.891    
     &      ,ny         ! IN number of rows in array                       FPFIELD1.892    
                                                                           FPFIELD1.893    
       REAL                                                                FPFIELD1.894    
     &       rmdi       ! IN value of REAL missing data indicator          FPFIELD1.895    
                                                                           FPFIELD1.896    
     &      ,in_field1(nx,ny)  ! IN first array of input values            FPFIELD1.897    
     &      ,in_field2(nx,ny)  ! IN second array of input values           FPFIELD1.898    
                                                                           FPFIELD1.899    
C     Output                                                               FPFIELD1.900    
C     ------                                                               FPFIELD1.901    
                                                                           FPFIELD1.902    
      REAL                                                                 FPFIELD1.903    
     &       out_field(nx,ny)  ! OUT results of multipication              FPFIELD1.904    
                                                                           FPFIELD1.905    
      INTEGER                                                              FPFIELD1.906    
     &       icode      ! OUT Completion code                              FPFIELD1.907    
                                                                           FPFIELD1.908    
      CHARACTER *(*)                                                       FPFIELD1.909    
     &       cmessage   ! OUT Error message                                FPFIELD1.910    
                                                                           FPFIELD1.911    
                                                                           FPFIELD1.912    
C    Local variables                                                       FPFIELD1.913    
C    ---------------                                                       FPFIELD1.914    
                                                                           FPFIELD1.915    
      INTEGER                                                              FPFIELD1.916    
     &        ix        ! Loop counter over columns                        FPFIELD1.917    
     &       ,iy        ! Loop counter over rows                           FPFIELD1.918    
                                                                           FPFIELD1.919    
                                                                           FPFIELD1.920    
C ------------------------------------------------------------------       FPFIELD1.921    
                                                                           FPFIELD1.922    
      icode =0                                                             FPFIELD1.923    
      cmessage="FieldGE: test successful."                                 FPFIELD1.924    
                                                                           FPFIELD1.925    
      DO iy = 1, ny     ! iy: loop over rows                               FPFIELD1.926    
        DO ix = 1, nx  ! ix: loop over columns                             FPFIELD1.927    
                                                                           FPFIELD1.928    
          IF (       in_field1(ix,iy) .NE. rmdi                            FPFIELD1.929    
     &          .AND. in_field2(ix,iy) .NE. rmdi                           FPFIELD1.930    
     &          .AND. in_field1(ix,iy).LT.in_field2(ix,iy) )               FPFIELD1.931    
                                                                           FPFIELD1.932    
     &      THEN                                                           FPFIELD1.933    
                                                                           FPFIELD1.934    
              out_field(ix,iy) = in_field1(ix,iy)                          FPFIELD1.935    
                                                                           FPFIELD1.936    
            ELSE                                                           FPFIELD1.937    
                                                                           FPFIELD1.938    
              out_field(ix,iy) = rmdi                                      FPFIELD1.939    
                                                                           FPFIELD1.940    
            END IF                                                         FPFIELD1.941    
                                                                           FPFIELD1.942    
         END DO  ! ix: loop over columns                                   FPFIELD1.943    
      END DO     ! iy: loop over columns                                   FPFIELD1.944    
                                                                           FPFIELD1.945    
      RETURN                                                               FPFIELD1.946    
      END         ! Subroutine FieldGE                                     FPFIELD1.947    
                                                                           FPFIELD1.948    
                                                                           FPFIELD1.949    
                                                                           FPFIELD1.950    

      SUBROUTINE ScalarAdd                                                  3FPFIELD1.951    
     &           (nx, ny, rmdi,                                            FPFIELD1.952    
     &            scalar, in_field,                                        FPFIELD1.953    
     &            out_field,                                               FPFIELD1.954    
     &            icode, cmessage)                                         FPFIELD1.955    
                                                                           FPFIELD1.956    
                                                                           FPFIELD1.957    
C     ScalarAdd: subroutine to add a scalar to                             FPFIELD1.958    
C     ---------- an array.                                                 FPFIELD1.959    
C                Takes account of missing data.                            FPFIELD1.960    
                                                                           FPFIELD1.961    
C     Programmer: S J Foreman                                              FPFIELD1.962    
C     -----------                                                          FPFIELD1.963    
                                                                           FPFIELD1.964    
C     Method:                                                              FPFIELD1.965    
C     -------  loop over all elements, adding unless either is             FPFIELD1.966    
C              missing, in which case result is missing.                   FPFIELD1.967    
                                                                           FPFIELD1.968    
      IMPLICIT NONE                                                        FPFIELD1.969    
                                                                           FPFIELD1.970    
                                                                           FPFIELD1.971    
C     Input:                                                               FPFIELD1.972    
C     ------                                                               FPFIELD1.973    
                                                                           FPFIELD1.974    
      INTEGER                                                              FPFIELD1.975    
     &       nx         ! IN number of columns of array                    FPFIELD1.976    
     &      ,ny         ! IN number of rows in array                       FPFIELD1.977    
                                                                           FPFIELD1.978    
       REAL                                                                FPFIELD1.979    
     &       rmdi       ! IN value of REAL missing data indicator          FPFIELD1.980    
                                                                           FPFIELD1.981    
     &      ,scalar     ! IN scalar                                        FPFIELD1.982    
     &      ,in_field(nx,ny)   ! IN array of input values                  FPFIELD1.983    
                                                                           FPFIELD1.984    
C     Output                                                               FPFIELD1.985    
C     ------                                                               FPFIELD1.986    
                                                                           FPFIELD1.987    
      REAL                                                                 FPFIELD1.988    
     &       out_field(nx,ny)  ! OUT results of addition                   FPFIELD1.989    
                                                                           FPFIELD1.990    
      INTEGER                                                              FPFIELD1.991    
     &       icode      ! OUT Completion code                              FPFIELD1.992    
                                                                           FPFIELD1.993    
      CHARACTER *(*)                                                       FPFIELD1.994    
     &       cmessage   ! OUT Error message                                FPFIELD1.995    
                                                                           FPFIELD1.996    
                                                                           FPFIELD1.997    
C    Local variables                                                       FPFIELD1.998    
C    ---------------                                                       FPFIELD1.999    
                                                                           FPFIELD1.1000   
      INTEGER                                                              FPFIELD1.1001   
     &        ix        ! Loop counter over columns                        FPFIELD1.1002   
     &       ,iy        ! Loop counter over rows                           FPFIELD1.1003   
                                                                           FPFIELD1.1004   
                                                                           FPFIELD1.1005   
C ------------------------------------------------------------------       FPFIELD1.1006   
                                                                           FPFIELD1.1007   
      icode =0                                                             FPFIELD1.1008   
      cmessage='ScalarAdd: addition successful.'                           FPFIELD1.1009   
                                                                           FPFIELD1.1010   
      DO iy = 1, ny     ! iy: loop over rows                               FPFIELD1.1011   
        DO ix = 1, nx  ! ix: loop over columns                             FPFIELD1.1012   
                                                                           FPFIELD1.1013   
          IF (    scalar .NE. rmdi                                         FPFIELD1.1014   
     &        .AND. in_field(ix,iy) .NE. rmdi )                            FPFIELD1.1015   
     &     THEN                                                            FPFIELD1.1016   
                                                                           FPFIELD1.1017   
             out_field(ix,iy) = scalar + in_field(ix,iy)                   FPFIELD1.1018   
           ELSE      ! set missing data if either input is missing         FPFIELD1.1019   
                                                                           FPFIELD1.1020   
             out_field(ix,iy) = rmdi                                       FPFIELD1.1021   
                                                                           FPFIELD1.1022   
           END IF                                                          FPFIELD1.1023   
                                                                           FPFIELD1.1024   
         END DO  ! ix: loop over columns                                   FPFIELD1.1025   
      END DO     ! iy: loop over columns                                   FPFIELD1.1026   
                                                                           FPFIELD1.1027   
      RETURN                                                               FPFIELD1.1028   
      END         ! Subroutine ScalarAdd                                   FPFIELD1.1029   
                                                                           FPFIELD1.1030   
                                                                           FPFIELD1.1031   
                                                                           FPFIELD1.1032   

      SUBROUTINE ScalarSub                                                 FPFIELD1.1033   
     &           (nx, ny, rmdi,                                            FPFIELD1.1034   
     &            scalar, in_field,                                        FPFIELD1.1035   
     &            out_field,                                               FPFIELD1.1036   
     &            icode, cmessage)                                         FPFIELD1.1037   
                                                                           FPFIELD1.1038   
                                                                           FPFIELD1.1039   
C     ScalarSub: subroutine to subtract an array                           FPFIELD1.1040   
C     ---------- from a scalar.                                            FPFIELD1.1041   
C                Takes account of missing data.                            FPFIELD1.1042   
                                                                           FPFIELD1.1043   
C     Programmer: S J Foreman                                              FPFIELD1.1044   
C     -----------                                                          FPFIELD1.1045   
                                                                           FPFIELD1.1046   
C     Method:                                                              FPFIELD1.1047   
C     -------  loop over all elements, subtracting unless either is        FPFIELD1.1048   
C              missing, in which case result is missing.                   FPFIELD1.1049   
C              Scalar - array.                                             FPFIELD1.1050   
                                                                           FPFIELD1.1051   
      IMPLICIT NONE                                                        FPFIELD1.1052   
                                                                           FPFIELD1.1053   
                                                                           FPFIELD1.1054   
C     Input:                                                               FPFIELD1.1055   
C     ------                                                               FPFIELD1.1056   
                                                                           FPFIELD1.1057   
      INTEGER                                                              FPFIELD1.1058   
     &       nx         ! IN number of columns of array                    FPFIELD1.1059   
     &      ,ny         ! IN number of rows in array                       FPFIELD1.1060   
                                                                           FPFIELD1.1061   
       REAL                                                                FPFIELD1.1062   
     &       rmdi       ! IN value of REAL missing data indicator          FPFIELD1.1063   
                                                                           FPFIELD1.1064   
     &      ,scalar     ! IN scalar                                        FPFIELD1.1065   
     &      ,in_field(nx,ny)   ! IN array of input values (subtrahend)     FPFIELD1.1066   
                                                                           FPFIELD1.1067   
C     Output                                                               FPFIELD1.1068   
C     ------                                                               FPFIELD1.1069   
                                                                           FPFIELD1.1070   
      REAL                                                                 FPFIELD1.1071   
     &       out_field(nx,ny)  ! OUT results of subtraction                FPFIELD1.1072   
                                                                           FPFIELD1.1073   
      INTEGER                                                              FPFIELD1.1074   
     &       icode      ! OUT Completion code                              FPFIELD1.1075   
                                                                           FPFIELD1.1076   
      CHARACTER *(*)                                                       FPFIELD1.1077   
     &       cmessage   ! OUT Error message                                FPFIELD1.1078   
                                                                           FPFIELD1.1079   
                                                                           FPFIELD1.1080   
C    Local variables                                                       FPFIELD1.1081   
C    ---------------                                                       FPFIELD1.1082   
                                                                           FPFIELD1.1083   
      INTEGER                                                              FPFIELD1.1084   
     &        ix        ! Loop counter over columns                        FPFIELD1.1085   
     &       ,iy        ! Loop counter over rows                           FPFIELD1.1086   
                                                                           FPFIELD1.1087   
                                                                           FPFIELD1.1088   
C ------------------------------------------------------------------       FPFIELD1.1089   
                                                                           FPFIELD1.1090   
      icode  = 0                                                           FPFIELD1.1091   
      cmessage='ScalarSub: subtraction successful.'                        FPFIELD1.1092   
                                                                           FPFIELD1.1093   
      DO iy = 1, ny     ! iy: loop over rows                               FPFIELD1.1094   
        DO ix = 1, nx  ! ix: loop over columns                             FPFIELD1.1095   
                                                                           FPFIELD1.1096   
          IF (    scalar .NE. rmdi                                         FPFIELD1.1097   
     &        .AND. in_field(ix,iy) .NE. rmdi )                            FPFIELD1.1098   
     &     THEN                                                            FPFIELD1.1099   
                                                                           FPFIELD1.1100   
             out_field(ix,iy) = scalar - in_field(ix,iy)                   FPFIELD1.1101   
                                                                           FPFIELD1.1102   
           ELSE      ! set missing data if either input is missing         FPFIELD1.1103   
                                                                           FPFIELD1.1104   
             out_field(ix,iy) = rmdi                                       FPFIELD1.1105   
                                                                           FPFIELD1.1106   
           END IF                                                          FPFIELD1.1107   
                                                                           FPFIELD1.1108   
         END DO  ! ix: loop over columns                                   FPFIELD1.1109   
      END DO     ! iy: loop over columns                                   FPFIELD1.1110   
                                                                           FPFIELD1.1111   
      RETURN                                                               FPFIELD1.1112   
      END         ! Subroutine ScalarSub                                   FPFIELD1.1113   
                                                                           FPFIELD1.1114   
                                                                           FPFIELD1.1115   
                                                                           FPFIELD1.1116   

      SUBROUTINE ScalarMult                                                 5FPFIELD1.1117   
     &           (nx, ny, rmdi,                                            FPFIELD1.1118   
     &            scalar, in_field,                                        FPFIELD1.1119   
     &            out_field,                                               FPFIELD1.1120   
     &            icode, cmessage)                                         FPFIELD1.1121   
                                                                           FPFIELD1.1122   
                                                                           FPFIELD1.1123   
C     ScalarMult: subroutine to multiply an array                          FPFIELD1.1124   
C     ----------- by a scalar.                                             FPFIELD1.1125   
C                 Takes account of missing data.                           FPFIELD1.1126   
                                                                           FPFIELD1.1127   
C     Programmer: S J Foreman                                              FPFIELD1.1128   
C     -----------                                                          FPFIELD1.1129   
                                                                           FPFIELD1.1130   
C     Method:                                                              FPFIELD1.1131   
C     -------  loop over all elements, multiplying unless either           FPFIELD1.1132   
C              is missing, in which case result is missing.                FPFIELD1.1133   
C              Scalar*array.                                               FPFIELD1.1134   
                                                                           FPFIELD1.1135   
      IMPLICIT NONE                                                        FPFIELD1.1136   
                                                                           FPFIELD1.1137   
                                                                           FPFIELD1.1138   
C     Input:                                                               FPFIELD1.1139   
C     ------                                                               FPFIELD1.1140   
                                                                           FPFIELD1.1141   
      INTEGER                                                              FPFIELD1.1142   
     &       nx         ! IN number of columns of array                    FPFIELD1.1143   
     &      ,ny         ! IN number of rows in array                       FPFIELD1.1144   
                                                                           FPFIELD1.1145   
       REAL                                                                FPFIELD1.1146   
     &       rmdi       ! IN value of REAL missing data indicator          FPFIELD1.1147   
                                                                           FPFIELD1.1148   
     &      ,scalar     ! IN scalar                                        FPFIELD1.1149   
     &      ,in_field(nx,ny)   ! IN array of input values                  FPFIELD1.1150   
                                                                           FPFIELD1.1151   
C     Output                                                               FPFIELD1.1152   
C     ------                                                               FPFIELD1.1153   
                                                                           FPFIELD1.1154   
      REAL                                                                 FPFIELD1.1155   
     &       out_field(nx,ny)  ! OUT results of multiplication             FPFIELD1.1156   
                                                                           FPFIELD1.1157   
      INTEGER                                                              FPFIELD1.1158   
     &       icode      ! OUT Completion code                              FPFIELD1.1159   
                                                                           FPFIELD1.1160   
      CHARACTER *(*)                                                       FPFIELD1.1161   
     &       cmessage   ! OUT Error message                                FPFIELD1.1162   
                                                                           FPFIELD1.1163   
                                                                           FPFIELD1.1164   
C    Local variables                                                       FPFIELD1.1165   
C    ---------------                                                       FPFIELD1.1166   
                                                                           FPFIELD1.1167   
      INTEGER                                                              FPFIELD1.1168   
     &        ix        ! Loop counter over columns                        FPFIELD1.1169   
     &       ,iy        ! Loop counter over rows                           FPFIELD1.1170   
                                                                           FPFIELD1.1171   
                                                                           FPFIELD1.1172   
C ------------------------------------------------------------------       FPFIELD1.1173   
                                                                           FPFIELD1.1174   
      icode = 0                                                            FPFIELD1.1175   
      cmessage='ScalarMult: multiplication successful.'                    FPFIELD1.1176   
                                                                           FPFIELD1.1177   
      DO iy = 1, ny     ! iy: loop over rows                               FPFIELD1.1178   
        DO ix = 1, nx  ! ix: loop over columns                             FPFIELD1.1179   
          IF (    scalar .NE. rmdi                                         FPFIELD1.1180   
     &        .AND. in_field(ix,iy) .NE. rmdi )                            FPFIELD1.1181   
     &     THEN                                                            FPFIELD1.1182   
                                                                           FPFIELD1.1183   
             out_field(ix,iy) = scalar * in_field(ix,iy)                   FPFIELD1.1184   
                                                                           FPFIELD1.1185   
           ELSE      ! set missing data if either input is missing         FPFIELD1.1186   
                                                                           FPFIELD1.1187   
             out_field(ix,iy) = rmdi                                       FPFIELD1.1188   
                                                                           FPFIELD1.1189   
           END IF                                                          FPFIELD1.1190   
                                                                           FPFIELD1.1191   
         END DO  ! ix: loop over columns                                   FPFIELD1.1192   
      END DO     ! iy: loop over columns                                   FPFIELD1.1193   
                                                                           FPFIELD1.1194   
      RETURN                                                               FPFIELD1.1195   
      END         ! Subroutine ScalarMult                                  FPFIELD1.1196   
                                                                           FPFIELD1.1197   
                                                                           FPFIELD1.1198   
                                                                           FPFIELD1.1199   

      SUBROUTINE ScalarDiv                                                 FPFIELD1.1200   
     &           (nx, ny, rmdi,                                            FPFIELD1.1201   
     &            scalar, in_field,                                        FPFIELD1.1202   
     &            out_field,                                               FPFIELD1.1203   
     &            icode, cmessage)                                         FPFIELD1.1204   
                                                                           FPFIELD1.1205   
                                                                           FPFIELD1.1206   
C     ScalarDiv: subroutine to divide a scalar by                          FPFIELD1.1207   
C     ---------- an array.                                                 FPFIELD1.1208   
C                Takes account of missing data.                            FPFIELD1.1209   
                                                                           FPFIELD1.1210   
C     Programmer: S J Foreman                                              FPFIELD1.1211   
C     -----------                                                          FPFIELD1.1212   
                                                                           FPFIELD1.1213   
C     Method:                                                              FPFIELD1.1214   
C     -------  loop over all elements, dividing unless either is           FPFIELD1.1215   
C              missing or divisor is zero, in which case result            FPFIELD1.1216   
C              is missing.                                                 FPFIELD1.1217   
                                                                           FPFIELD1.1218   
      IMPLICIT NONE                                                        FPFIELD1.1219   
                                                                           FPFIELD1.1220   
                                                                           FPFIELD1.1221   
C     Input:                                                               FPFIELD1.1222   
C     ------                                                               FPFIELD1.1223   
                                                                           FPFIELD1.1224   
      INTEGER                                                              FPFIELD1.1225   
     &       nx         ! IN number of columns of array                    FPFIELD1.1226   
     &      ,ny         ! IN number of rows in array                       FPFIELD1.1227   
                                                                           FPFIELD1.1228   
       REAL                                                                FPFIELD1.1229   
     &       rmdi       ! IN value of REAL missing data indicator          FPFIELD1.1230   
                                                                           FPFIELD1.1231   
     &      ,scalar     ! IN scalar (numerator)                            FPFIELD1.1232   
     &      ,in_field(nx,ny)   ! IN array of input values (denominator)    FPFIELD1.1233   
                                                                           FPFIELD1.1234   
C     Output                                                               FPFIELD1.1235   
C     ------                                                               FPFIELD1.1236   
                                                                           FPFIELD1.1237   
      REAL                                                                 FPFIELD1.1238   
     &       out_field(nx,ny)  ! OUT results of division                   FPFIELD1.1239   
                                                                           FPFIELD1.1240   
      INTEGER                                                              FPFIELD1.1241   
     &       icode      ! OUT Completion code                              FPFIELD1.1242   
                                                                           FPFIELD1.1243   
      CHARACTER *(*)                                                       FPFIELD1.1244   
     &       cmessage   ! OUT Error message                                FPFIELD1.1245   
                                                                           FPFIELD1.1246   
                                                                           FPFIELD1.1247   
C    Local variables                                                       FPFIELD1.1248   
C    ---------------                                                       FPFIELD1.1249   
                                                                           FPFIELD1.1250   
      INTEGER                                                              FPFIELD1.1251   
     &        ix        ! Loop counter over columns                        FPFIELD1.1252   
     &       ,iy        ! Loop counter over rows                           FPFIELD1.1253   
                                                                           FPFIELD1.1254   
                                                                           FPFIELD1.1255   
C ------------------------------------------------------------------       FPFIELD1.1256   
                                                                           FPFIELD1.1257   
      icode =0                                                             FPFIELD1.1258   
      cmessage='ScalarDiv: division successful.'                           FPFIELD1.1259   
                                                                           FPFIELD1.1260   
      DO iy = 1, ny     ! iy: loop over rows                               FPFIELD1.1261   
        DO ix = 1, nx  ! ix: loop over columns                             FPFIELD1.1262   
                                                                           FPFIELD1.1263   
          IF (    scalar .NE. rmdi                                         FPFIELD1.1264   
     &        .AND. in_field(ix,iy) .NE. rmdi )                            FPFIELD1.1265   
     &      THEN                                                           FPFIELD1.1266   
                                                                           FPFIELD1.1267   
              IF ( in_field(ix,iy) .NE. 0.0 )                              FPFIELD1.1268   
                                                                           FPFIELD1.1269   
     &          THEN  ! divide                                             FPFIELD1.1270   
                  out_field(ix,iy) = scalar/in_field(ix,iy)                FPFIELD1.1271   
                                                                           FPFIELD1.1272   
                ELSE  ! avoid division by zero                             FPFIELD1.1273   
                  icode = 4                                                FPFIELD1.1274   
                  out_field(ix,iy) = rmdi                                  FPFIELD1.1275   
                END IF                                                     FPFIELD1.1276   
                                                                           FPFIELD1.1277   
            ELSE      ! set missing data if either input is missing        FPFIELD1.1278   
                                                                           FPFIELD1.1279   
              out_field(ix,iy) = rmdi                                      FPFIELD1.1280   
                                                                           FPFIELD1.1281   
            END IF                                                         FPFIELD1.1282   
                                                                           FPFIELD1.1283   
         END DO  ! ix: loop over columns                                   FPFIELD1.1284   
      END DO     ! iy: loop over columns                                   FPFIELD1.1285   
                                                                           FPFIELD1.1286   
C     Set appropriate error message if division by zero has occurred       FPFIELD1.1287   
                                                                           FPFIELD1.1288   
      IF (icode .NE. 0) THEN                                               FPFIELD1.1289   
         cmessage = 'ScalarDiv: division by zero'                          FPFIELD1.1290   
      END IF                                                               FPFIELD1.1291   
                                                                           FPFIELD1.1292   
      RETURN                                                               FPFIELD1.1293   
      END         ! Subroutine ScalarDiv                                   FPFIELD1.1294   
                                                                           FPFIELD1.1295   

      SUBROUTINE ScalarCopy                                                FPFIELD1.1296   
     &           (nx, ny, rmdi,                                            FPFIELD1.1297   
     &            scalar,                                                  FPFIELD1.1298   
     &            out_field,                                               FPFIELD1.1299   
     &            icode, cmessage)                                         FPFIELD1.1300   
                                                                           FPFIELD1.1301   
                                                                           FPFIELD1.1302   
C     ScalarCopy: subroutine to copy a scalar to                           FPFIELD1.1303   
C     ---------- an array.                                                 FPFIELD1.1304   
                                                                           FPFIELD1.1305   
C     Programmer: S J Foreman                                              FPFIELD1.1306   
C     -----------                                                          FPFIELD1.1307   
                                                                           FPFIELD1.1308   
C     Method:                                                              FPFIELD1.1309   
C     -------  loop over all elements.                                     FPFIELD1.1310   
                                                                           FPFIELD1.1311   
      IMPLICIT NONE                                                        FPFIELD1.1312   
                                                                           FPFIELD1.1313   
                                                                           FPFIELD1.1314   
C     Input:                                                               FPFIELD1.1315   
C     ------                                                               FPFIELD1.1316   
                                                                           FPFIELD1.1317   
      INTEGER                                                              FPFIELD1.1318   
     &       nx         ! IN number of columns of array                    FPFIELD1.1319   
     &      ,ny         ! IN number of rows in array                       FPFIELD1.1320   
                                                                           FPFIELD1.1321   
       REAL                                                                FPFIELD1.1322   
     &       rmdi       ! IN value of REAL missing data indicator          FPFIELD1.1323   
                                                                           FPFIELD1.1324   
     &      ,scalar     ! IN scalar                                        FPFIELD1.1325   
                                                                           FPFIELD1.1326   
C     Output                                                               FPFIELD1.1327   
C     ------                                                               FPFIELD1.1328   
                                                                           FPFIELD1.1329   
      REAL                                                                 FPFIELD1.1330   
     &       out_field(nx,ny)  ! OUT results of addition                   FPFIELD1.1331   
                                                                           FPFIELD1.1332   
      INTEGER                                                              FPFIELD1.1333   
     &       icode      ! OUT Completion code                              FPFIELD1.1334   
                                                                           FPFIELD1.1335   
      CHARACTER *(*)                                                       FPFIELD1.1336   
     &       cmessage   ! OUT Error message                                FPFIELD1.1337   
                                                                           FPFIELD1.1338   
                                                                           FPFIELD1.1339   
C    Local variables                                                       FPFIELD1.1340   
C    ---------------                                                       FPFIELD1.1341   
                                                                           FPFIELD1.1342   
      INTEGER                                                              FPFIELD1.1343   
     &        ix        ! Loop counter over columns                        FPFIELD1.1344   
     &       ,iy        ! Loop counter over rows                           FPFIELD1.1345   
                                                                           FPFIELD1.1346   
                                                                           FPFIELD1.1347   
C ------------------------------------------------------------------       FPFIELD1.1348   
                                                                           FPFIELD1.1349   
      icode =0                                                             FPFIELD1.1350   
      cmessage='ScalarCopy: copy successful.'                              FPFIELD1.1351   
                                                                           FPFIELD1.1352   
      DO iy = 1, ny     ! iy: loop over rows                               FPFIELD1.1353   
        DO ix = 1, nx  ! ix: loop over columns                             FPFIELD1.1354   
                                                                           FPFIELD1.1355   
                                                                           FPFIELD1.1356   
           out_field(ix,iy) = scalar                                       FPFIELD1.1357   
                                                                           FPFIELD1.1358   
         END DO  ! ix: loop over columns                                   FPFIELD1.1359   
      END DO     ! iy: loop over columns                                   FPFIELD1.1360   
                                                                           FPFIELD1.1361   
      RETURN                                                               FPFIELD1.1362   
      END         ! Subroutine ScalarCopy                                  FPFIELD1.1363   
                                                                           FPFIELD1.1364   
                                                                           FPFIELD1.1365   

      SUBROUTINE ScalarEQ                                                  FPFIELD1.1366   
     &           (nx, ny, rmdi,                                            FPFIELD1.1367   
     &            scalar, in_field,                                        FPFIELD1.1368   
     &            out_field,                                               FPFIELD1.1369   
     &            icode, cmessage)                                         FPFIELD1.1370   
                                                                           FPFIELD1.1371   
                                                                           FPFIELD1.1372   
C     ScalarEQ: Set MDI if field equals scalar                             FPFIELD1.1373   
C     -----------                                                          FPFIELD1.1374   
C                 Takes account of missing data.                           FPFIELD1.1375   
                                                                           FPFIELD1.1376   
C     Programmer: S J Foreman                                              FPFIELD1.1377   
C     -----------                                                          FPFIELD1.1378   
                                                                           FPFIELD1.1379   
C     Method:                                                              FPFIELD1.1380   
C     -------  loop over all elements                                      FPFIELD1.1381   
C                                                                          FPFIELD1.1382   
                                                                           FPFIELD1.1383   
      IMPLICIT NONE                                                        FPFIELD1.1384   
                                                                           FPFIELD1.1385   
                                                                           FPFIELD1.1386   
C     Input:                                                               FPFIELD1.1387   
C     ------                                                               FPFIELD1.1388   
                                                                           FPFIELD1.1389   
      INTEGER                                                              FPFIELD1.1390   
     &       nx         ! IN number of columns of array                    FPFIELD1.1391   
     &      ,ny         ! IN number of rows in array                       FPFIELD1.1392   
                                                                           FPFIELD1.1393   
       REAL                                                                FPFIELD1.1394   
     &       rmdi       ! IN value of REAL missing data indicator          FPFIELD1.1395   
                                                                           FPFIELD1.1396   
     &      ,scalar     ! IN scalar                                        FPFIELD1.1397   
     &      ,in_field(nx,ny)   ! IN array of input values                  FPFIELD1.1398   
                                                                           FPFIELD1.1399   
C     Output                                                               FPFIELD1.1400   
C     ------                                                               FPFIELD1.1401   
                                                                           FPFIELD1.1402   
      REAL                                                                 FPFIELD1.1403   
     &       out_field(nx,ny)  ! OUT results of test                       FPFIELD1.1404   
                                                                           FPFIELD1.1405   
      INTEGER                                                              FPFIELD1.1406   
     &       icode      ! OUT Completion code                              FPFIELD1.1407   
                                                                           FPFIELD1.1408   
      CHARACTER *(*)                                                       FPFIELD1.1409   
     &       cmessage   ! OUT Error message                                FPFIELD1.1410   
                                                                           FPFIELD1.1411   
                                                                           FPFIELD1.1412   
C    Local variables                                                       FPFIELD1.1413   
C    ---------------                                                       FPFIELD1.1414   
                                                                           FPFIELD1.1415   
      INTEGER                                                              FPFIELD1.1416   
     &        ix        ! Loop counter over columns                        FPFIELD1.1417   
     &       ,iy        ! Loop counter over rows                           FPFIELD1.1418   
                                                                           FPFIELD1.1419   
                                                                           FPFIELD1.1420   
C ------------------------------------------------------------------       FPFIELD1.1421   
                                                                           FPFIELD1.1422   
      icode =0                                                             FPFIELD1.1423   
      cmessage='ScalarEQ: equality test successful.'                       FPFIELD1.1424   
                                                                           FPFIELD1.1425   
      DO iy = 1, ny     ! iy: loop over rows                               FPFIELD1.1426   
        DO ix = 1, nx  ! ix: loop over columns                             FPFIELD1.1427   
                                                                           FPFIELD1.1428   
          IF (    scalar .NE. in_field(ix,iy) ) THEN                       FPFIELD1.1429   
                                                                           FPFIELD1.1430   
             out_field(ix,iy) = in_field(ix,iy)                            FPFIELD1.1431   
                                                                           FPFIELD1.1432   
           ELSE      ! set missing data if either input is missing         FPFIELD1.1433   
                                                                           FPFIELD1.1434   
             out_field(ix,iy) = rmdi                                       FPFIELD1.1435   
                                                                           FPFIELD1.1436   
           END IF                                                          FPFIELD1.1437   
                                                                           FPFIELD1.1438   
         END DO  ! ix: loop over columns                                   FPFIELD1.1439   
      END DO     ! iy: loop over columns                                   FPFIELD1.1440   
                                                                           FPFIELD1.1441   
      RETURN                                                               FPFIELD1.1442   
      END         ! Subroutine ScalarEQ                                    FPFIELD1.1443   
                                                                           FPFIELD1.1444   

      SUBROUTINE ScalarNE                                                  FPFIELD1.1445   
     &           (nx, ny, rmdi,                                            FPFIELD1.1446   
     &            scalar, in_field,                                        FPFIELD1.1447   
     &            out_field,                                               FPFIELD1.1448   
     &            icode, cmessage)                                         FPFIELD1.1449   
                                                                           FPFIELD1.1450   
                                                                           FPFIELD1.1451   
C     ScalarNE: Set MDI if field not equal to scalar                       FPFIELD1.1452   
C     -----------                                                          FPFIELD1.1453   
C                 Takes account of missing data.                           FPFIELD1.1454   
                                                                           FPFIELD1.1455   
C     Programmer: S J Foreman                                              FPFIELD1.1456   
C     -----------                                                          FPFIELD1.1457   
                                                                           FPFIELD1.1458   
C     Method:                                                              FPFIELD1.1459   
C     -------  loop over all elements                                      FPFIELD1.1460   
C                                                                          FPFIELD1.1461   
                                                                           FPFIELD1.1462   
      IMPLICIT NONE                                                        FPFIELD1.1463   
                                                                           FPFIELD1.1464   
                                                                           FPFIELD1.1465   
C     Input:                                                               FPFIELD1.1466   
C     ------                                                               FPFIELD1.1467   
                                                                           FPFIELD1.1468   
      INTEGER                                                              FPFIELD1.1469   
     &       nx         ! IN number of columns of array                    FPFIELD1.1470   
     &      ,ny         ! IN number of rows in array                       FPFIELD1.1471   
                                                                           FPFIELD1.1472   
       REAL                                                                FPFIELD1.1473   
     &       rmdi       ! IN value of REAL missing data indicator          FPFIELD1.1474   
                                                                           FPFIELD1.1475   
     &      ,scalar     ! IN scalar                                        FPFIELD1.1476   
     &      ,in_field(nx,ny)   ! IN array of input values                  FPFIELD1.1477   
                                                                           FPFIELD1.1478   
C     Output                                                               FPFIELD1.1479   
C     ------                                                               FPFIELD1.1480   
                                                                           FPFIELD1.1481   
      REAL                                                                 FPFIELD1.1482   
     &       out_field(nx,ny)  ! OUT results of test                       FPFIELD1.1483   
                                                                           FPFIELD1.1484   
      INTEGER                                                              FPFIELD1.1485   
     &       icode      ! OUT Completion code                              FPFIELD1.1486   
                                                                           FPFIELD1.1487   
      CHARACTER *(*)                                                       FPFIELD1.1488   
     &       cmessage   ! OUT Error message                                FPFIELD1.1489   
                                                                           FPFIELD1.1490   
                                                                           FPFIELD1.1491   
C    Local variables                                                       FPFIELD1.1492   
C    ---------------                                                       FPFIELD1.1493   
                                                                           FPFIELD1.1494   
      INTEGER                                                              FPFIELD1.1495   
     &        ix        ! Loop counter over columns                        FPFIELD1.1496   
     &       ,iy        ! Loop counter over rows                           FPFIELD1.1497   
                                                                           FPFIELD1.1498   
                                                                           FPFIELD1.1499   
C ------------------------------------------------------------------       FPFIELD1.1500   
                                                                           FPFIELD1.1501   
      icode =0                                                             FPFIELD1.1502   
      cmessage='ScalarNE: non-equality test successful.'                   FPFIELD1.1503   
                                                                           FPFIELD1.1504   
      DO iy = 1, ny     ! iy: loop over rows                               FPFIELD1.1505   
        DO ix = 1, nx  ! ix: loop over columns                             FPFIELD1.1506   
                                                                           FPFIELD1.1507   
          IF (    scalar .EQ. in_field(ix,iy) ) THEN                       FPFIELD1.1508   
                                                                           FPFIELD1.1509   
             out_field(ix,iy) = in_field(ix,iy)                            FPFIELD1.1510   
                                                                           FPFIELD1.1511   
           ELSE      ! set missing data if either input is missing         FPFIELD1.1512   
                                                                           FPFIELD1.1513   
             out_field(ix,iy) = rmdi                                       FPFIELD1.1514   
                                                                           FPFIELD1.1515   
           END IF                                                          FPFIELD1.1516   
                                                                           FPFIELD1.1517   
         END DO  ! ix: loop over columns                                   FPFIELD1.1518   
      END DO     ! iy: loop over columns                                   FPFIELD1.1519   
                                                                           FPFIELD1.1520   
      RETURN                                                               FPFIELD1.1521   
      END         ! Subroutine ScalarNE                                    FPFIELD1.1522   
                                                                           FPFIELD1.1523   

      SUBROUTINE ScalarLE                                                  FPFIELD1.1524   
     &           (nx, ny, rmdi,                                            FPFIELD1.1525   
     &            scalar, in_field,                                        FPFIELD1.1526   
     &            out_field,                                               FPFIELD1.1527   
     &            icode, cmessage)                                         FPFIELD1.1528   
                                                                           FPFIELD1.1529   
                                                                           FPFIELD1.1530   
C     ScalarLE: Set MDI if scalar <= field                                 FPFIELD1.1531   
C     -----------                                                          FPFIELD1.1532   
C                 Takes account of missing data.                           FPFIELD1.1533   
                                                                           FPFIELD1.1534   
C     Programmer: S J Foreman                                              FPFIELD1.1535   
C     -----------                                                          FPFIELD1.1536   
                                                                           FPFIELD1.1537   
C     Method:                                                              FPFIELD1.1538   
C     -------  loop over all elements                                      FPFIELD1.1539   
C                                                                          FPFIELD1.1540   
                                                                           FPFIELD1.1541   
      IMPLICIT NONE                                                        FPFIELD1.1542   
                                                                           FPFIELD1.1543   
                                                                           FPFIELD1.1544   
C     Input:                                                               FPFIELD1.1545   
C     ------                                                               FPFIELD1.1546   
                                                                           FPFIELD1.1547   
      INTEGER                                                              FPFIELD1.1548   
     &       nx         ! IN number of columns of array                    FPFIELD1.1549   
     &      ,ny         ! IN number of rows in array                       FPFIELD1.1550   
                                                                           FPFIELD1.1551   
       REAL                                                                FPFIELD1.1552   
     &       rmdi       ! IN value of REAL missing data indicator          FPFIELD1.1553   
                                                                           FPFIELD1.1554   
     &      ,scalar     ! IN scalar                                        FPFIELD1.1555   
     &      ,in_field(nx,ny)   ! IN array of input values                  FPFIELD1.1556   
                                                                           FPFIELD1.1557   
C     Output                                                               FPFIELD1.1558   
C     ------                                                               FPFIELD1.1559   
                                                                           FPFIELD1.1560   
      REAL                                                                 FPFIELD1.1561   
     &       out_field(nx,ny)  ! OUT results of test                       FPFIELD1.1562   
                                                                           FPFIELD1.1563   
      INTEGER                                                              FPFIELD1.1564   
     &       icode      ! OUT Completion code                              FPFIELD1.1565   
                                                                           FPFIELD1.1566   
      CHARACTER *(*)                                                       FPFIELD1.1567   
     &       cmessage   ! OUT Error message                                FPFIELD1.1568   
                                                                           FPFIELD1.1569   
                                                                           FPFIELD1.1570   
C    Local variables                                                       FPFIELD1.1571   
C    ---------------                                                       FPFIELD1.1572   
                                                                           FPFIELD1.1573   
      INTEGER                                                              FPFIELD1.1574   
     &        ix        ! Loop counter over columns                        FPFIELD1.1575   
     &       ,iy        ! Loop counter over rows                           FPFIELD1.1576   
                                                                           FPFIELD1.1577   
                                                                           FPFIELD1.1578   
C ------------------------------------------------------------------       FPFIELD1.1579   
                                                                           FPFIELD1.1580   
      icode =0                                                             FPFIELD1.1581   
      cmessage='ScalarLE: test successful.'                                FPFIELD1.1582   
                                                                           FPFIELD1.1583   
      DO iy = 1, ny     ! iy: loop over rows                               FPFIELD1.1584   
        DO ix = 1, nx  ! ix: loop over columns                             FPFIELD1.1585   
                                                                           FPFIELD1.1586   
          IF (    scalar .GT. in_field(ix,iy) ) THEN                       FPFIELD1.1587   
                                                                           FPFIELD1.1588   
             out_field(ix,iy) = in_field(ix,iy)                            FPFIELD1.1589   
                                                                           FPFIELD1.1590   
           ELSE      ! set missing data if either input is missing         FPFIELD1.1591   
                                                                           FPFIELD1.1592   
             out_field(ix,iy) = rmdi                                       FPFIELD1.1593   
                                                                           FPFIELD1.1594   
           END IF                                                          FPFIELD1.1595   
                                                                           FPFIELD1.1596   
         END DO  ! ix: loop over columns                                   FPFIELD1.1597   
      END DO     ! iy: loop over columns                                   FPFIELD1.1598   
                                                                           FPFIELD1.1599   
      RETURN                                                               FPFIELD1.1600   
      END         ! Subroutine ScalarLE                                    FPFIELD1.1601   
                                                                           FPFIELD1.1602   

      SUBROUTINE ScalarGE                                                  FPFIELD1.1603   
     &           (nx, ny, rmdi,                                            FPFIELD1.1604   
     &            scalar, in_field,                                        FPFIELD1.1605   
     &            out_field,                                               FPFIELD1.1606   
     &            icode, cmessage)                                         FPFIELD1.1607   
                                                                           FPFIELD1.1608   
                                                                           FPFIELD1.1609   
C     ScalarGE: Set MDI if scalar >= field                                 FPFIELD1.1610   
C     -----------                                                          FPFIELD1.1611   
C                 Takes account of missing data.                           FPFIELD1.1612   
                                                                           FPFIELD1.1613   
C     Programmer: S J Foreman                                              FPFIELD1.1614   
C     -----------                                                          FPFIELD1.1615   
                                                                           FPFIELD1.1616   
C     Method:                                                              FPFIELD1.1617   
C     -------  loop over all elements                                      FPFIELD1.1618   
C                                                                          FPFIELD1.1619   
                                                                           FPFIELD1.1620   
      IMPLICIT NONE                                                        FPFIELD1.1621   
                                                                           FPFIELD1.1622   
                                                                           FPFIELD1.1623   
C     Input:                                                               FPFIELD1.1624   
C     ------                                                               FPFIELD1.1625   
                                                                           FPFIELD1.1626   
      INTEGER                                                              FPFIELD1.1627   
     &       nx         ! IN number of columns of array                    FPFIELD1.1628   
     &      ,ny         ! IN number of rows in array                       FPFIELD1.1629   
                                                                           FPFIELD1.1630   
       REAL                                                                FPFIELD1.1631   
     &       rmdi       ! IN value of REAL missing data indicator          FPFIELD1.1632   
                                                                           FPFIELD1.1633   
     &      ,scalar     ! IN scalar                                        FPFIELD1.1634   
     &      ,in_field(nx,ny)   ! IN array of input values                  FPFIELD1.1635   
                                                                           FPFIELD1.1636   
C     Output                                                               FPFIELD1.1637   
C     ------                                                               FPFIELD1.1638   
                                                                           FPFIELD1.1639   
      REAL                                                                 FPFIELD1.1640   
     &       out_field(nx,ny)  ! OUT results of test                       FPFIELD1.1641   
                                                                           FPFIELD1.1642   
      INTEGER                                                              FPFIELD1.1643   
     &       icode      ! OUT Completion code                              FPFIELD1.1644   
                                                                           FPFIELD1.1645   
      CHARACTER *(*)                                                       FPFIELD1.1646   
     &       cmessage   ! OUT Error message                                FPFIELD1.1647   
                                                                           FPFIELD1.1648   
                                                                           FPFIELD1.1649   
C    Local variables                                                       FPFIELD1.1650   
C    ---------------                                                       FPFIELD1.1651   
                                                                           FPFIELD1.1652   
      INTEGER                                                              FPFIELD1.1653   
     &        ix        ! Loop counter over columns                        FPFIELD1.1654   
     &       ,iy        ! Loop counter over rows                           FPFIELD1.1655   
                                                                           FPFIELD1.1656   
                                                                           FPFIELD1.1657   
C ------------------------------------------------------------------       FPFIELD1.1658   
                                                                           FPFIELD1.1659   
      icode =0                                                             FPFIELD1.1660   
      cmessage='ScalarGE: test successful.'                                FPFIELD1.1661   
                                                                           FPFIELD1.1662   
      DO iy = 1, ny     ! iy: loop over rows                               FPFIELD1.1663   
        DO ix = 1, nx  ! ix: loop over columns                             FPFIELD1.1664   
                                                                           FPFIELD1.1665   
          IF (    scalar .LT. in_field(ix,iy) ) THEN                       FPFIELD1.1666   
                                                                           FPFIELD1.1667   
             out_field(ix,iy) = in_field(ix,iy)                            FPFIELD1.1668   
                                                                           FPFIELD1.1669   
           ELSE      ! set missing data if either input is missing         FPFIELD1.1670   
                                                                           FPFIELD1.1671   
             out_field(ix,iy) = rmdi                                       FPFIELD1.1672   
                                                                           FPFIELD1.1673   
           END IF                                                          FPFIELD1.1674   
                                                                           FPFIELD1.1675   
         END DO  ! ix: loop over columns                                   FPFIELD1.1676   
      END DO     ! iy: loop over columns                                   FPFIELD1.1677   
                                                                           FPFIELD1.1678   
      RETURN                                                               FPFIELD1.1679   
      END         ! Subroutine ScalarGE                                    FPFIELD1.1680   
                                                                           FPFIELD1.1681   

      SUBROUTINE ScalarGT                                                  FPFIELD1.1682   
     &           (nx, ny, rmdi,                                            FPFIELD1.1683   
     &            scalar, in_field,                                        FPFIELD1.1684   
     &            out_field,                                               FPFIELD1.1685   
     &            icode, cmessage)                                         FPFIELD1.1686   
                                                                           FPFIELD1.1687   
                                                                           FPFIELD1.1688   
C     ScalarGT: Set MDI if scalar > field                                  FPFIELD1.1689   
C     -----------                                                          FPFIELD1.1690   
C                 Takes account of missing data.                           FPFIELD1.1691   
                                                                           FPFIELD1.1692   
C     Programmer: S J Foreman                                              FPFIELD1.1693   
C     -----------                                                          FPFIELD1.1694   
                                                                           FPFIELD1.1695   
C     Method:                                                              FPFIELD1.1696   
C     -------  loop over all elements                                      FPFIELD1.1697   
C                                                                          FPFIELD1.1698   
                                                                           FPFIELD1.1699   
      IMPLICIT NONE                                                        FPFIELD1.1700   
                                                                           FPFIELD1.1701   
                                                                           FPFIELD1.1702   
C     Input:                                                               FPFIELD1.1703   
C     ------                                                               FPFIELD1.1704   
                                                                           FPFIELD1.1705   
      INTEGER                                                              FPFIELD1.1706   
     &       nx         ! IN number of columns of array                    FPFIELD1.1707   
     &      ,ny         ! IN number of rows in array                       FPFIELD1.1708   
                                                                           FPFIELD1.1709   
       REAL                                                                FPFIELD1.1710   
     &       rmdi       ! IN value of REAL missing data indicator          FPFIELD1.1711   
                                                                           FPFIELD1.1712   
     &      ,scalar     ! IN scalar                                        FPFIELD1.1713   
     &      ,in_field(nx,ny)   ! IN array of input values                  FPFIELD1.1714   
                                                                           FPFIELD1.1715   
C     Output                                                               FPFIELD1.1716   
C     ------                                                               FPFIELD1.1717   
                                                                           FPFIELD1.1718   
      REAL                                                                 FPFIELD1.1719   
     &       out_field(nx,ny)  ! OUT results of test                       FPFIELD1.1720   
                                                                           FPFIELD1.1721   
      INTEGER                                                              FPFIELD1.1722   
     &       icode      ! OUT Completion code                              FPFIELD1.1723   
                                                                           FPFIELD1.1724   
      CHARACTER *(*)                                                       FPFIELD1.1725   
     &       cmessage   ! OUT Error message                                FPFIELD1.1726   
                                                                           FPFIELD1.1727   
                                                                           FPFIELD1.1728   
C    Local variables                                                       FPFIELD1.1729   
C    ---------------                                                       FPFIELD1.1730   
                                                                           FPFIELD1.1731   
      INTEGER                                                              FPFIELD1.1732   
     &        ix        ! Loop counter over columns                        FPFIELD1.1733   
     &       ,iy        ! Loop counter over rows                           FPFIELD1.1734   
                                                                           FPFIELD1.1735   
                                                                           FPFIELD1.1736   
C ------------------------------------------------------------------       FPFIELD1.1737   
                                                                           FPFIELD1.1738   
      icode =0                                                             FPFIELD1.1739   
      cmessage='ScalarGT: test successful.'                                FPFIELD1.1740   
                                                                           FPFIELD1.1741   
      DO iy = 1, ny     ! iy: loop over rows                               FPFIELD1.1742   
        DO ix = 1, nx  ! ix: loop over columns                             FPFIELD1.1743   
                                                                           FPFIELD1.1744   
          IF (    scalar .LE. in_field(ix,iy) ) THEN                       FPFIELD1.1745   
                                                                           FPFIELD1.1746   
             out_field(ix,iy) = in_field(ix,iy)                            FPFIELD1.1747   
                                                                           FPFIELD1.1748   
           ELSE      ! set missing data if either input is missing         FPFIELD1.1749   
                                                                           FPFIELD1.1750   
             out_field(ix,iy) = rmdi                                       FPFIELD1.1751   
                                                                           FPFIELD1.1752   
           END IF                                                          FPFIELD1.1753   
                                                                           FPFIELD1.1754   
         END DO  ! ix: loop over columns                                   FPFIELD1.1755   
      END DO     ! iy: loop over columns                                   FPFIELD1.1756   
                                                                           FPFIELD1.1757   
      RETURN                                                               FPFIELD1.1758   
      END         ! Subroutine ScalarGT                                    FPFIELD1.1759   
                                                                           FPFIELD1.1760   

      SUBROUTINE ScalarLT                                                  FPFIELD1.1761   
     &           (nx, ny, rmdi,                                            FPFIELD1.1762   
     &            scalar, in_field,                                        FPFIELD1.1763   
     &            out_field,                                               FPFIELD1.1764   
     &            icode, cmessage)                                         FPFIELD1.1765   
                                                                           FPFIELD1.1766   
                                                                           FPFIELD1.1767   
C     ScalarLT: Set MDI if scalar < field                                  FPFIELD1.1768   
C     -----------                                                          FPFIELD1.1769   
C                 Takes account of missing data.                           FPFIELD1.1770   
                                                                           FPFIELD1.1771   
C     Programmer: S J Foreman                                              FPFIELD1.1772   
C     -----------                                                          FPFIELD1.1773   
                                                                           FPFIELD1.1774   
C     Method:                                                              FPFIELD1.1775   
C     -------  loop over all elements                                      FPFIELD1.1776   
C                                                                          FPFIELD1.1777   
                                                                           FPFIELD1.1778   
      IMPLICIT NONE                                                        FPFIELD1.1779   
                                                                           FPFIELD1.1780   
                                                                           FPFIELD1.1781   
C     Input:                                                               FPFIELD1.1782   
C     ------                                                               FPFIELD1.1783   
                                                                           FPFIELD1.1784   
      INTEGER                                                              FPFIELD1.1785   
     &       nx         ! IN number of columns of array                    FPFIELD1.1786   
     &      ,ny         ! IN number of rows in array                       FPFIELD1.1787   
                                                                           FPFIELD1.1788   
       REAL                                                                FPFIELD1.1789   
     &       rmdi       ! IN value of REAL missing data indicator          FPFIELD1.1790   
                                                                           FPFIELD1.1791   
     &      ,scalar     ! IN scalar                                        FPFIELD1.1792   
     &      ,in_field(nx,ny)   ! IN array of input values                  FPFIELD1.1793   
                                                                           FPFIELD1.1794   
C     Output                                                               FPFIELD1.1795   
C     ------                                                               FPFIELD1.1796   
                                                                           FPFIELD1.1797   
      REAL                                                                 FPFIELD1.1798   
     &       out_field(nx,ny)  ! OUT results of test                       FPFIELD1.1799   
                                                                           FPFIELD1.1800   
      INTEGER                                                              FPFIELD1.1801   
     &       icode      ! OUT Completion code                              FPFIELD1.1802   
                                                                           FPFIELD1.1803   
      CHARACTER *(*)                                                       FPFIELD1.1804   
     &       cmessage   ! OUT Error message                                FPFIELD1.1805   
                                                                           FPFIELD1.1806   
                                                                           FPFIELD1.1807   
C    Local variables                                                       FPFIELD1.1808   
C    ---------------                                                       FPFIELD1.1809   
                                                                           FPFIELD1.1810   
      INTEGER                                                              FPFIELD1.1811   
     &        ix        ! Loop counter over columns                        FPFIELD1.1812   
     &       ,iy        ! Loop counter over rows                           FPFIELD1.1813   
                                                                           FPFIELD1.1814   
                                                                           FPFIELD1.1815   
C ------------------------------------------------------------------       FPFIELD1.1816   
                                                                           FPFIELD1.1817   
      icode =0                                                             FPFIELD1.1818   
      cmessage='ScalarLT: test successful.'                                FPFIELD1.1819   
                                                                           FPFIELD1.1820   
      DO iy = 1, ny     ! iy: loop over rows                               FPFIELD1.1821   
        DO ix = 1, nx  ! ix: loop over columns                             FPFIELD1.1822   
                                                                           FPFIELD1.1823   
          IF (    scalar .GE. in_field(ix,iy) ) THEN                       FPFIELD1.1824   
                                                                           FPFIELD1.1825   
             out_field(ix,iy) = in_field(ix,iy)                            FPFIELD1.1826   
                                                                           FPFIELD1.1827   
           ELSE      ! set missing data if either input is missing         FPFIELD1.1828   
                                                                           FPFIELD1.1829   
             out_field(ix,iy) = rmdi                                       FPFIELD1.1830   
                                                                           FPFIELD1.1831   
           END IF                                                          FPFIELD1.1832   
                                                                           FPFIELD1.1833   
         END DO  ! ix: loop over columns                                   FPFIELD1.1834   
      END DO     ! iy: loop over columns                                   FPFIELD1.1835   
                                                                           FPFIELD1.1836   
      RETURN                                                               FPFIELD1.1837   
      END         ! Subroutine ScalarLT                                    FPFIELD1.1838   
!----------------------------------------------------------------------    FPFIELD1.1839   
*ENDIF                                                                     FPFIELD1.1840