*IF DEF,A70_1A,OR,DEF,A70_1B APB4F405.113 *IF DEF,A01_3A,OR,DEF,A02_3A STMTF3A.2 C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.14062 C GTS2F400.14063 C Use, duplication or disclosure of this code is subject to the GTS2F400.14064 C restrictions as set forth in the contract. GTS2F400.14065 C GTS2F400.14066 C Meteorological Office GTS2F400.14067 C London Road GTS2F400.14068 C BRACKNELL GTS2F400.14069 C Berkshire UK GTS2F400.14070 C RG12 2SZ GTS2F400.14071 C GTS2F400.14072 C If no contract has been raised with this copy of the code, the use, GTS2F400.14073 C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.14074 C to do so must first be obtained in writing from the Head of Numerical GTS2F400.14075 C Modelling at the above address. GTS2F400.14076 C ******************************COPYRIGHT****************************** GTS2F400.14077 C GTS2F400.14078 !+ Subroutine to set the matrix equations for the fluxes. ADB1F401.996 ! STMTF3A.4 ! Method: STMTF3A.5 ! Straightforward. STMTF3A.6 ! STMTF3A.7 ! Current Owner of Code: J. M. Edwards STMTF3A.8 ! STMTF3A.9 ! History: STMTF3A.10 ! Version Date Comment STMTF3A.11 ! 4.0 27-07-95 Original Code STMTF3A.12 ! (J. M. Edwards) STMTF3A.13 ! 4.1 05-03-96 Surface albedo and ADB1F401.997 ! reflection coefficients ADB1F401.998 ! perturbed to avoid ADB1F401.999 ! failure above a ADB1F401.1000 ! non-reflecting surface ADB1F401.1001 ! or in a strongly ADB1F401.1002 ! absorbing atmosphere. ADB1F401.1003 ! STMTF3A.14 ! Description of Code: STMTF3A.15 ! FORTRAN 77 with extensions listed in documentation. STMTF3A.16 ! STMTF3A.17 !- --------------------------------------------------------------------- STMTF3A.18SUBROUTINE SET_MATRIX_FULL(N_PROFILE, N_LAYER STMTF3A.19 & , TRANS, REFLECT STMTF3A.20 & , S_DOWN, S_UP STMTF3A.21 & , ALBEDO_SURFACE_DIFF, ALBEDO_SURFACE_DIR STMTF3A.22 & , FLUX_DIRECT_GROUND, FLUX_INC_DOWN STMTF3A.23 & , SOURCE_GROUND STMTF3A.24 & , A3, B STMTF3A.25 & , NPD_PROFILE, NPD_LAYER STMTF3A.26 & ) STMTF3A.27 ! STMTF3A.28 ! STMTF3A.29 IMPLICIT NONE STMTF3A.30 ! STMTF3A.31 ! STMTF3A.32 ! COMDECKS INCLUDED. ADB1F401.1004 *CALL PRMCH3A
ADB1F401.1005 ! ADB1F401.1006 ! SIZES OF DUMMY ARRAYS. STMTF3A.33 INTEGER !, INTENT(IN) STMTF3A.34 & NPD_PROFILE STMTF3A.35 ! MAXIMUM NUMBER OF PROFILES STMTF3A.36 & , NPD_LAYER STMTF3A.37 ! MAXIMUM NUMBER OF LAYERS STMTF3A.38 ! STMTF3A.39 ! DUMMY ARGUMENTS. STMTF3A.40 INTEGER !, INTENT(IN) STMTF3A.41 & N_PROFILE STMTF3A.42 ! NUMBER OF PROFILES STMTF3A.43 & , N_LAYER STMTF3A.44 ! NUMBER OF LAYERS STMTF3A.45 REAL !, INTENT(IN) STMTF3A.46 & TRANS(NPD_PROFILE, NPD_LAYER) STMTF3A.47 ! TRANSMISSION COEFFICIENTS STMTF3A.48 & , REFLECT(NPD_PROFILE, NPD_LAYER) STMTF3A.49 ! REFLECT COEFFICIENTS STMTF3A.50 & , S_UP(NPD_PROFILE, NPD_LAYER) STMTF3A.51 ! UPWARD SOURCE FUNCTION STMTF3A.52 & , S_DOWN(NPD_PROFILE, NPD_LAYER) STMTF3A.53 ! DOWNWARD SOURCE FUNCTION STMTF3A.54 & , ALBEDO_SURFACE_DIFF(NPD_PROFILE) STMTF3A.55 ! DIFFUSE REFLECTION COEFFICIENTS STMTF3A.56 & , ALBEDO_SURFACE_DIR(NPD_PROFILE) STMTF3A.57 ! DIRECT REFLECTION COEFFICIENTS STMTF3A.58 & , FLUX_DIRECT_GROUND(NPD_PROFILE) STMTF3A.59 ! DIRECT FLUX AT SURFACE STMTF3A.60 & , FLUX_INC_DOWN(NPD_PROFILE) STMTF3A.61 ! INCIDENT DOWNWARD FLUX STMTF3A.62 & , SOURCE_GROUND(NPD_PROFILE) STMTF3A.63 ! SOURCE FROM GROUND STMTF3A.64 REAL !, INTENT(OUT) STMTF3A.65 & A3(NPD_PROFILE, 3, 2*NPD_LAYER+2) STMTF3A.66 ! TRIDIAGONAL MATRIX STMTF3A.67 & , B(NPD_PROFILE, 2*NPD_LAYER+2) STMTF3A.68 ! RHS OF EQUATIONS STMTF3A.69 ! STMTF3A.70 ! LOCAL VARIABLES. STMTF3A.71 INTEGER STMTF3A.72 & I STMTF3A.73 ! LOOP VARIABLE STMTF3A.74 & , L STMTF3A.75 ! LOOP VARIABLE STMTF3A.76 REAL ADB1F401.1007 & PERTURBATION ADB1F401.1008 ! PERTURBATION TO RESTORE CONDITIONING ADB1F401.1009 ! STMTF3A.77 ! STMTF3A.78 ! CODE THE EQUATIONS INTO THE MATRIX: STMTF3A.79 ! UPPER SURFACE: STMTF3A.80 DO L=1, N_PROFILE STMTF3A.81 A3(L, 2, 1)=0.0E+00 STMTF3A.82 A3(L, 3, 1)=1.0E+00 STMTF3A.83 B(L, 1)=FLUX_INC_DOWN(L) STMTF3A.84 ENDDO STMTF3A.85 ! THE INTERIOR EQUATIONS: STMTF3A.86 DO I=1, N_LAYER STMTF3A.87 DO L=1, N_PROFILE STMTF3A.88 PERTURBATION=(1.0E+00-TRANS(L, I)-REFLECT(L, I)) ADB1F401.1010 & *TOL_MACHINE/(SQRT_TOL_MACHINE+REFLECT(L, I)) ADB1F401.1011 A3(L, 1, 2*I)=1.0E+00 STMTF3A.89 A3(L, 2, 2*I)=-REFLECT(L, I)-PERTURBATION ADB1F401.1012 A3(L, 3, 2*I)=-TRANS(L, I) STMTF3A.91 B(L, 2*I)=S_UP(L, I) STMTF3A.92 A3(L, 1, 2*I+1)=-TRANS(L, I) STMTF3A.93 A3(L, 2, 2*I+1)=-REFLECT(L, I)-PERTURBATION ADB1F401.1013 A3(L, 3, 2*I+1)=1.0E+00 STMTF3A.95 B(L, 2*I+1)=S_DOWN(L, I) STMTF3A.96 ENDDO STMTF3A.97 ENDDO STMTF3A.98 ! LOWER BOUNDARY STMTF3A.99 DO L=1, N_PROFILE STMTF3A.100 A3(L, 1, 2*N_LAYER+2)=1.0E+00 STMTF3A.101 A3(L, 2, 2*N_LAYER+2)=-ALBEDO_SURFACE_DIFF(L) STMTF3A.102 & -TOL_MACHINE/(ALBEDO_SURFACE_DIFF(L)+SQRT_TOL_MACHINE) ADB1F401.1014 B(L, 2*N_LAYER+2) STMTF3A.103 & =(ALBEDO_SURFACE_DIR(L)-ALBEDO_SURFACE_DIFF(L)) STMTF3A.104 & *FLUX_DIRECT_GROUND(L)+SOURCE_GROUND(L) STMTF3A.105 ENDDO STMTF3A.106 ! STMTF3A.107 ! STMTF3A.108 RETURN STMTF3A.109 END STMTF3A.110 *ENDIF DEF,A01_3A,OR,DEF,A02_3A STMTF3A.111 *ENDIF DEF,A70_1A,OR,DEF,A70_1B APB4F405.114