*IF DEF,A70_1A,OR,DEF,A70_1B                                               APB4F405.117    
*IF DEF,A01_3A,OR,DEF,A02_3A                                               SURFP3A.2      
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.14130  
C                                                                          GTS2F400.14131  
C Use, duplication or disclosure of this code is subject to the            GTS2F400.14132  
C restrictions as set forth in the contract.                               GTS2F400.14133  
C                                                                          GTS2F400.14134  
C                Meteorological Office                                     GTS2F400.14135  
C                London Road                                               GTS2F400.14136  
C                BRACKNELL                                                 GTS2F400.14137  
C                Berkshire UK                                              GTS2F400.14138  
C                RG12 2SZ                                                  GTS2F400.14139  
C                                                                          GTS2F400.14140  
C If no contract has been raised with this copy of the code, the use,      GTS2F400.14141  
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.14142  
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.14143  
C Modelling at the above address.                                          GTS2F400.14144  
C ******************************COPYRIGHT******************************    GTS2F400.14145  
C                                                                          GTS2F400.14146  
!+ Subroutine to set the properties of the surface.                        SURFP3A.3      
!                                                                          SURFP3A.4      
! Method:                                                                  SURFP3A.5      
!       The albedo of the surface and the infra-red source                 SURFP3A.6      
!       function are set according to the parametrization in use.          SURFP3A.7      
!                                                                          SURFP3A.8      
! Current Owner of Code: J. M. Edwards                                     SURFP3A.9      
!                                                                          SURFP3A.10     
! History:                                                                 SURFP3A.11     
!       Version         Date                    Comment                    SURFP3A.12     
!       4.0             27-07-95                Original Code              SURFP3A.13     
!                                               (J. M. Edwards)            SURFP3A.14     
!                                                                          SURFP3A.15     
! Description of Code:                                                     SURFP3A.16     
!   FORTRAN 77  with extensions listed in documentation.                   SURFP3A.17     
!                                                                          SURFP3A.18     
!- ---------------------------------------------------------------------   SURFP3A.19     

      SUBROUTINE SET_SURFACE_PROPERTIES(N_POINT_TYPE, INDEX_SURFACE         1SURFP3A.20     
     &   , I_SPEC_SURFACE                                                  SURFP3A.21     
     &   , ISOLIR, IB                                                      SURFP3A.22     
     &   , SURFACE_ALBEDO, ALBEDO_FIELD_DIFF, ALBEDO_FIELD_DIR             SURFP3A.23     
     &   , N_DIR_ALBEDO_FIT, DIRECT_ALBEDO_PARM, SEC_0                     SURFP3A.24     
     &   , EMISSIVITY_GROUND, EMISSIVITY_FIELD                             SURFP3A.25     
     &   , ALBEDO_SURFACE_DIFF, ALBEDO_SURFACE_DIR                         SURFP3A.26     
     &   , THERMAL_GROUND_BAND                                             SURFP3A.27     
     &   , NPD_PROFILE, NPD_BAND, NPD_SURFACE, NPD_ALBEDO_PARM             SURFP3A.28     
     &   )                                                                 SURFP3A.29     
!                                                                          SURFP3A.30     
!                                                                          SURFP3A.31     
      IMPLICIT NONE                                                        SURFP3A.32     
!                                                                          SURFP3A.33     
!                                                                          SURFP3A.34     
!     SIZES OF DUMMY ARRAYS.                                               SURFP3A.35     
      INTEGER   !, INTENT(IN)                                              SURFP3A.36     
     &     NPD_PROFILE                                                     SURFP3A.37     
!             MAXIMUM NUMBER OF PROFILES                                   SURFP3A.38     
     &   , NPD_SURFACE                                                     SURFP3A.39     
!             MAXIMUM NUMBER OF SURFACES                                   SURFP3A.40     
     &   , NPD_BAND                                                        SURFP3A.41     
!             MAXIMUM NUMBER OF BANDS                                      SURFP3A.42     
     &   , NPD_ALBEDO_PARM                                                 SURFP3A.43     
!             MAXIMUM NUMBER OF ALBEDO PARAMETERS                          SURFP3A.44     
!                                                                          SURFP3A.45     
!     COMDECK CALLS                                                        SURFP3A.46     
*CALL SRFSP3A                                                              SURFP3A.47     
*CALL SPCRG3A                                                              SURFP3A.48     
!                                                                          SURFP3A.49     
!     DUMMY ARGUMENTS.                                                     SURFP3A.50     
      INTEGER   !, INTENT(IN)                                              SURFP3A.51     
     &     N_POINT_TYPE(NPD_SURFACE)                                       SURFP3A.52     
!             NUMBER OF POINTS OF EEACH TYPE                               SURFP3A.53     
     &   , INDEX_SURFACE(NPD_PROFILE, NPD_SURFACE)                         SURFP3A.54     
!             LIST OF POINTS OF EACH TYPE                                  SURFP3A.55     
     &   , I_SPEC_SURFACE(NPD_SURFACE)                                     SURFP3A.56     
!             METHOD OF SPECIFYING SURFACES                                SURFP3A.57     
     &   , ISOLIR                                                          SURFP3A.58     
!             SPECTRAL REGION                                              SURFP3A.59     
     &   , IB                                                              SURFP3A.60     
!             NUMBER OF BAND                                               SURFP3A.61     
     &   , N_DIR_ALBEDO_FIT(NPD_SURFACE)                                   SURFP3A.62     
!             NUMBER OF PARAMETERS IN FIT TO DIRECT ALBEDO                 SURFP3A.63     
      REAL      !, INTENT(IN)                                              SURFP3A.64     
     &     SURFACE_ALBEDO(NPD_BAND, NPD_SURFACE)                           SURFP3A.65     
!             BAND-DEPENDENT SURFACE ALBEDOS                               SURFP3A.66     
     &   , ALBEDO_FIELD_DIFF(NPD_PROFILE)                                  SURFP3A.67     
!             SPECIFIED DIFFUSE ALBEDO FIELD                               SURFP3A.68     
     &   , ALBEDO_FIELD_DIR(NPD_PROFILE)                                   SURFP3A.69     
!             SPECIFIED DIRECT ALBEDO FIELD                                SURFP3A.70     
     &   , DIRECT_ALBEDO_PARM(0: NPD_ALBEDO_PARM, NPD_BAND, NPD_SURFACE)   SURFP3A.71     
!             COEFFICIENTS FOR DIRECT ALBEDOS                              SURFP3A.72     
     &   , SEC_0(NPD_PROFILE)                                              SURFP3A.73     
!             SECANTS OF ZENITH ANGLES                                     SURFP3A.74     
     &   , EMISSIVITY_GROUND(NPD_BAND, NPD_SURFACE)                        SURFP3A.75     
!             BAND-DEPENDENT EMISSIVITIES                                  SURFP3A.76     
     &   , EMISSIVITY_FIELD(NPD_PROFILE)                                   SURFP3A.77     
!             SPECIFIED EMISSIVITIES                                       SURFP3A.78     
      REAL      !, INTENT(INOUT)                                           SURFP3A.79     
     &     THERMAL_GROUND_BAND(NPD_PROFILE)                                SURFP3A.80     
!             THERMAL SOURCE FROM GROUND                                   SURFP3A.81     
      REAL      !, INTENT(OUT)                                             SURFP3A.82     
     &     ALBEDO_SURFACE_DIFF(NPD_PROFILE)                                SURFP3A.83     
!             DIFFUSE SURFACE ALBEDOS                                      SURFP3A.84     
     &   , ALBEDO_SURFACE_DIR(NPD_PROFILE)                                 SURFP3A.85     
!             DIRECT SURFACE ALBEDOS                                       SURFP3A.86     
                                                                           SURFP3A.87     
!                                                                          SURFP3A.88     
!     LOCAL VARIABLES.                                                     SURFP3A.89     
      INTEGER                                                              SURFP3A.90     
     &     J                                                               SURFP3A.91     
!             LOOP VARIABLE                                                SURFP3A.92     
     &   , K                                                               SURFP3A.93     
!             LOOP VARIABLE                                                SURFP3A.94     
     &   , L                                                               SURFP3A.95     
!             LOOP VARIABLE                                                SURFP3A.96     
     &   , IC                                                              SURFP3A.97     
!             LOOP VARIABLE                                                SURFP3A.98     
!                                                                          SURFP3A.99     
!                                                                          SURFP3A.100    
!     SET THE SURFACE ALBEDOS.                                             SURFP3A.101    
      DO K=1, NPD_SURFACE                                                  SURFP3A.102    
!                                                                          SURFP3A.103    
         IF (I_SPEC_SURFACE(K).EQ.IP_SURFACE_SPECIFIED) THEN               SURFP3A.104    
            DO J=1, N_POINT_TYPE(K)                                        SURFP3A.105    
               L=INDEX_SURFACE(J, K)                                       SURFP3A.106    
               ALBEDO_SURFACE_DIFF(L)                                      SURFP3A.107    
     &            =SURFACE_ALBEDO(IB, K)                                   SURFP3A.108    
               ALBEDO_SURFACE_DIR(L)                                       SURFP3A.109    
     &            =SURFACE_ALBEDO(IB, K)                                   SURFP3A.110    
            ENDDO                                                          SURFP3A.111    
         ENDIF                                                             SURFP3A.112    
!                                                                          SURFP3A.113    
         IF (I_SPEC_SURFACE(K).EQ.IP_SURFACE_INTERNAL) THEN                SURFP3A.114    
            DO J=1, N_POINT_TYPE(K)                                        SURFP3A.115    
               L=INDEX_SURFACE(J, K)                                       SURFP3A.116    
               ALBEDO_SURFACE_DIFF(L)=ALBEDO_FIELD_DIFF(L)                 SURFP3A.117    
               ALBEDO_SURFACE_DIR(L)=ALBEDO_FIELD_DIR(L)                   SURFP3A.118    
            ENDDO                                                          SURFP3A.119    
         ENDIF                                                             SURFP3A.120    
!                                                                          SURFP3A.121    
         IF (I_SPEC_SURFACE(K).EQ.IP_SURFACE_POLYNOMIAL) THEN              SURFP3A.122    
            DO J=1, N_POINT_TYPE(K)                                        SURFP3A.123    
               L=INDEX_SURFACE(J, K)                                       SURFP3A.124    
               ALBEDO_SURFACE_DIFF(L)                                      SURFP3A.125    
     &            =SURFACE_ALBEDO(IB, K)                                   SURFP3A.126    
               ALBEDO_SURFACE_DIR(L)                                       SURFP3A.127    
     &            =DIRECT_ALBEDO_PARM(N_DIR_ALBEDO_FIT(K), IB, K)          SURFP3A.128    
            ENDDO                                                          SURFP3A.129    
            DO IC=N_DIR_ALBEDO_FIT(K), 1, -1                               SURFP3A.130    
               DO J=1, N_POINT_TYPE(K)                                     SURFP3A.131    
                  L=INDEX_SURFACE(J, K)                                    SURFP3A.132    
                  ALBEDO_SURFACE_DIR(L)                                    SURFP3A.133    
     &               =ALBEDO_SURFACE_DIR(L)/SEC_0(L)                       SURFP3A.134    
     &               +DIRECT_ALBEDO_PARM(IC-1, IB, K)                      SURFP3A.135    
               ENDDO                                                       SURFP3A.136    
            ENDDO                                                          SURFP3A.137    
         ENDIF                                                             SURFP3A.138    
!                                                                          SURFP3A.139    
         IF (I_SPEC_SURFACE(K).EQ.IP_SURFACE_PAYNE) THEN                   SURFP3A.140    
            DO J=1, N_POINT_TYPE(K)                                        SURFP3A.141    
               L=INDEX_SURFACE(J, K)                                       SURFP3A.142    
               ALBEDO_SURFACE_DIFF(L)=0.06E+00                             SURFP3A.143    
               ALBEDO_SURFACE_DIR(L)=DIRECT_ALBEDO_PARM(1, IB, K)          SURFP3A.144    
     &           /(DIRECT_ALBEDO_PARM(2, IB, K)                            SURFP3A.145    
     &           +DIRECT_ALBEDO_PARM(3, IB, K)                             SURFP3A.146    
     &           *EXP(-DIRECT_ALBEDO_PARM(4, IB, K)*LOG(SEC_0(L))))        SURFP3A.147    
            ENDDO                                                          SURFP3A.148    
         ENDIF                                                             SURFP3A.149    
      ENDDO                                                                SURFP3A.150    
!                                                                          SURFP3A.151    
!     SET THE EMISSIVITY AND MULTIPLY THE SOURCE FUNCTION                  SURFP3A.152    
!     IN THE INFRA-RED.                                                    SURFP3A.153    
      IF (ISOLIR.EQ.IP_INFRA_RED) THEN                                     SURFP3A.154    
         DO K=1, NPD_SURFACE                                               SURFP3A.155    
!                                                                          SURFP3A.156    
            IF (I_SPEC_SURFACE(K).EQ.IP_SURFACE_SPECIFIED) THEN            SURFP3A.157    
               DO J=1, N_POINT_TYPE(K)                                     SURFP3A.158    
                  L=INDEX_SURFACE(J, K)                                    SURFP3A.159    
                  THERMAL_GROUND_BAND(L)=EMISSIVITY_GROUND(IB, K)          SURFP3A.160    
     &               *THERMAL_GROUND_BAND(L)                               SURFP3A.161    
               ENDDO                                                       SURFP3A.162    
            ENDIF                                                          SURFP3A.163    
!                                                                          SURFP3A.164    
            IF (I_SPEC_SURFACE(K).EQ.IP_SURFACE_INTERNAL) THEN             SURFP3A.165    
               DO J=1, N_POINT_TYPE(K)                                     SURFP3A.166    
                  L=INDEX_SURFACE(J, K)                                    SURFP3A.167    
                  THERMAL_GROUND_BAND(L)=EMISSIVITY_FIELD(L)               SURFP3A.168    
     &               *THERMAL_GROUND_BAND(L)                               SURFP3A.169    
               ENDDO                                                       SURFP3A.170    
            ENDIF                                                          SURFP3A.171    
!                                                                          SURFP3A.172    
            IF (I_SPEC_SURFACE(K).EQ.IP_SURFACE_POLYNOMIAL) THEN           SURFP3A.173    
               DO J=1, N_POINT_TYPE(K)                                     SURFP3A.174    
                  L=INDEX_SURFACE(J, K)                                    SURFP3A.175    
                  THERMAL_GROUND_BAND(L)=EMISSIVITY_GROUND(IB, K)          SURFP3A.176    
     &               *THERMAL_GROUND_BAND(L)                               SURFP3A.177    
               ENDDO                                                       SURFP3A.178    
            ENDIF                                                          SURFP3A.179    
!                                                                          SURFP3A.180    
            IF (I_SPEC_SURFACE(K).EQ.IP_SURFACE_PAYNE) THEN                SURFP3A.181    
               DO J=1, N_POINT_TYPE(K)                                     SURFP3A.182    
                  L=INDEX_SURFACE(J, K)                                    SURFP3A.183    
!                 SINCE THE EMISSIVITY IS 1.0 CONTINUE.                    SURFP3A.184    
                  CONTINUE                                                 SURFP3A.185    
               ENDDO                                                       SURFP3A.186    
            ENDIF                                                          SURFP3A.187    
!                                                                          SURFP3A.188    
         ENDDO                                                             SURFP3A.189    
      ENDIF                                                                SURFP3A.190    
!                                                                          SURFP3A.191    
!                                                                          SURFP3A.192    
      RETURN                                                               SURFP3A.193    
      END                                                                  SURFP3A.194    
*ENDIF DEF,A01_3A,OR,DEF,A02_3A                                            SURFP3A.195    
*ENDIF DEF,A70_1A,OR,DEF,A70_1B                                            APB4F405.118