*IF DEF,A70_1A,OR,DEF,A70_1B APB4F405.95 *IF DEF,A01_3A,OR,DEF,A02_3A SMTPN3A.2 C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.13909 C GTS2F400.13910 C Use, duplication or disclosure of this code is subject to the GTS2F400.13911 C restrictions as set forth in the contract. GTS2F400.13912 C GTS2F400.13913 C Meteorological Office GTS2F400.13914 C London Road GTS2F400.13915 C BRACKNELL GTS2F400.13916 C Berkshire UK GTS2F400.13917 C RG12 2SZ GTS2F400.13918 C GTS2F400.13919 C If no contract has been raised with this copy of the code, the use, GTS2F400.13920 C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.13921 C to do so must first be obtained in writing from the Head of Numerical GTS2F400.13922 C Modelling at the above address. GTS2F400.13923 C ******************************COPYRIGHT****************************** GTS2F400.13924 C GTS2F400.13925 !+ Subroutine to set the pentadiagonal matrix for the fluxes. SMTPN3A.3 ! SMTPN3A.4 ! Method: SMTPN3A.5 ! Straightforward. SMTPN3A.6 ! SMTPN3A.7 ! Current Owner of Code: J. M. Edwards SMTPN3A.8 ! SMTPN3A.9 ! History: SMTPN3A.10 ! Version Date Comment SMTPN3A.11 ! 4.0 27-07-95 Original Code SMTPN3A.12 ! (J. M. Edwards) SMTPN3A.13 ! SMTPN3A.14 ! Description of Code: SMTPN3A.15 ! FORTRAN 77 with extensions listed in documentation. SMTPN3A.16 ! SMTPN3A.17 !- --------------------------------------------------------------------- SMTPN3A.18SUBROUTINE SET_MATRIX_PENTADIAGONAL(N_PROFILE, N_LAYER 3SMTPN3A.19 & , TRANS, REFLECT SMTPN3A.20 & , S_DOWN, S_UP SMTPN3A.21 & , ALBEDO_SURFACE_DIFF, ALBEDO_SURFACE_DIR SMTPN3A.22 & , FLUX_DIRECT_GROUND, FLUX_INC_DOWN SMTPN3A.23 & , SOURCE_GROUND SMTPN3A.24 & , A5, B SMTPN3A.25 & , NPD_PROFILE, NPD_LAYER SMTPN3A.26 & ) SMTPN3A.27 ! SMTPN3A.28 ! SMTPN3A.29 IMPLICIT NONE SMTPN3A.30 ! SMTPN3A.31 ! SMTPN3A.32 ! SIZES OF DUMMY ARRAYS. SMTPN3A.33 INTEGER !, INTENT(IN) SMTPN3A.34 & NPD_PROFILE SMTPN3A.35 ! MAXIMUM NUMBER OF PROFILES SMTPN3A.36 & , NPD_LAYER SMTPN3A.37 ! MAXIMUM NUMBER OF LAYERS SMTPN3A.38 ! SMTPN3A.39 ! SMTPN3A.40 ! DUMMY ARGUMENTS. SMTPN3A.41 INTEGER !, INTENT(IN) SMTPN3A.42 & N_PROFILE SMTPN3A.43 ! NUMBER OF PROFILES SMTPN3A.44 & , N_LAYER SMTPN3A.45 ! NUMBER OF LAYERS SMTPN3A.46 REAL !, INTENT(IN) SMTPN3A.47 & TRANS(NPD_PROFILE, NPD_LAYER) SMTPN3A.48 ! TRANSMISSION COEFFICIENT SMTPN3A.49 & , REFLECT(NPD_PROFILE, NPD_LAYER) SMTPN3A.50 ! REFLECTION COEFFICIENT SMTPN3A.51 & , S_DOWN(NPD_PROFILE, NPD_LAYER) SMTPN3A.52 ! DOWNWARD DIFFUSE SOURCE SMTPN3A.53 & , S_UP(NPD_PROFILE, NPD_LAYER) SMTPN3A.54 ! UPWARD DIFFUSE SOURCE SMTPN3A.55 & , ALBEDO_SURFACE_DIFF(NPD_PROFILE) SMTPN3A.56 ! DIFFUSE SURFACE ALBEDO SMTPN3A.57 & , ALBEDO_SURFACE_DIR(NPD_PROFILE) SMTPN3A.58 ! DIRECT SURFACE ALBEDO SMTPN3A.59 & , SOURCE_GROUND(NPD_PROFILE) SMTPN3A.60 ! SOURCE FUNCTION OF GROUND SMTPN3A.61 & , FLUX_INC_DOWN(NPD_PROFILE) SMTPN3A.62 ! INCIDENT TOTAL FLUX SMTPN3A.63 & , FLUX_DIRECT_GROUND(NPD_PROFILE) SMTPN3A.64 ! DIRECT FLUX AT SMTPN3A.65 ! GROUND LEVEL SMTPN3A.66 REAL !, INTENT(OUT) SMTPN3A.67 & A5(NPD_PROFILE, 5, 2*NPD_LAYER+2) SMTPN3A.68 ! PENTADIAGONAL MATRIX SMTPN3A.69 & , B(NPD_PROFILE, 2*NPD_LAYER+2) SMTPN3A.70 ! SOURCE TERMS FOR EQUATIONS SMTPN3A.71 ! SMTPN3A.72 ! DECLARATION OF LOCAL VARIABLES. SMTPN3A.73 INTEGER SMTPN3A.74 & I SMTPN3A.75 ! LOOP VARIABLE SMTPN3A.76 & , L SMTPN3A.77 ! LOOP VARIABLE SMTPN3A.78 ! SMTPN3A.79 ! SMTPN3A.80 ! SMTPN3A.81 ! THE TOP BOUNDARY CONDITION: SMTPN3A.82 DO L=1, N_PROFILE SMTPN3A.83 A5(L, 4, 2)=0.0E+00 SMTPN3A.84 A5(L, 3, 2)=1.0E+00 SMTPN3A.85 A5(L, 2, 2)=0.0E+00 SMTPN3A.86 A5(L, 1, 2)=0.0E+00 SMTPN3A.87 B(L, 2)=FLUX_INC_DOWN(L) SMTPN3A.88 ENDDO SMTPN3A.89 ! SMTPN3A.90 ! INTERIOR ROWS: ODD AND EVEN ROWS CORRESPOND TO DIFFERENT BOUNDARY SMTPN3A.91 ! CONDITIONS. SMTPN3A.92 DO I=1, N_LAYER SMTPN3A.93 DO L=1, N_PROFILE SMTPN3A.94 A5(L, 5, 2*I-1)=0.0E+00 SMTPN3A.95 A5(L, 4, 2*I-1)=0.0E+00 SMTPN3A.96 A5(L, 3, 2*I-1)=-1.0E+00 SMTPN3A.97 A5(L, 2, 2*I-1)=REFLECT(L, I) SMTPN3A.98 A5(L, 1, 2*I-1)=TRANS(L, I) SMTPN3A.99 B(L, 2*I-1)=-S_UP(L, I) SMTPN3A.100 A5(L, 5, 2*I+2)=TRANS(L, I) SMTPN3A.101 A5(L, 4, 2*I+2)=REFLECT(L, I) SMTPN3A.102 A5(L, 3, 2*I+2)=-1.0E+00 SMTPN3A.103 A5(L, 2, 2*I+2)=0.0E+00 SMTPN3A.104 A5(L, 1, 2*I+2)=0.0E+00 SMTPN3A.105 B(L, 2*I+2)=-S_DOWN(L, I) SMTPN3A.106 ENDDO SMTPN3A.107 ENDDO SMTPN3A.108 ! SMTPN3A.109 ! THE SURFACE BOUNDARY CONDITION: SMTPN3A.110 DO L=1, N_PROFILE SMTPN3A.111 A5(L, 5, 2*N_LAYER+1)=0.0E+00 SMTPN3A.112 A5(L, 4, 2*N_LAYER+1)=0.0E+00 SMTPN3A.113 A5(L, 3, 2*N_LAYER+1)=1.0E+00 SMTPN3A.114 A5(L, 2, 2*N_LAYER+1)=-ALBEDO_SURFACE_DIFF(L) SMTPN3A.115 B(L, 2*N_LAYER+1)=SOURCE_GROUND(L) SMTPN3A.116 & +(ALBEDO_SURFACE_DIR(L)-ALBEDO_SURFACE_DIFF(L)) SMTPN3A.117 & *FLUX_DIRECT_GROUND(L) SMTPN3A.118 ENDDO SMTPN3A.119 ! SMTPN3A.120 ! SMTPN3A.121 RETURN SMTPN3A.122 END SMTPN3A.123 *ENDIF DEF,A01_3A,OR,DEF,A02_3A SMTPN3A.124 *ENDIF DEF,A70_1A,OR,DEF,A70_1B APB4F405.96