*IF DEF,A70_1A,OR,DEF,A70_1B APB4F405.17 *IF DEF,A01_3A,OR,DEF,A02_3A DFPLN3A.2 C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.13195 C GTS2F400.13196 C Use, duplication or disclosure of this code is subject to the GTS2F400.13197 C restrictions as set forth in the contract. GTS2F400.13198 C GTS2F400.13199 C Meteorological Office GTS2F400.13200 C London Road GTS2F400.13201 C BRACKNELL GTS2F400.13202 C Berkshire UK GTS2F400.13203 C RG12 2SZ GTS2F400.13204 C GTS2F400.13205 C If no contract has been raised with this copy of the code, the use, GTS2F400.13206 C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.13207 C to do so must first be obtained in writing from the Head of Numerical GTS2F400.13208 C Modelling at the above address. GTS2F400.13209 C ******************************COPYRIGHT****************************** GTS2F400.13210 C GTS2F400.13211 !+ Subroutine to calculate differences in source functions. DFPLN3A.3 ! DFPLN3A.4 ! Method: DFPLN3A.5 ! Using the polynomial fit to the Planck function, values DFPLN3A.6 ! of this function at the boundaries of layers are found DFPLN3A.7 ! and differences across layers are determined. If the DFPLN3A.8 ! Planckian is being taken to vary quadratically across DFPLN3A.9 ! the layer second differences are found. DFPLN3A.10 ! DFPLN3A.11 ! Current Owner of Code: J. M. Edwards DFPLN3A.12 ! DFPLN3A.13 ! History: DFPLN3A.14 ! Version Date Comment DFPLN3A.15 ! 4.0 27-07-95 Original Code DFPLN3A.16 ! (J. M. Edwards) DFPLN3A.17 ! 4.1 14-03-95 Explicit formulation ADB1F401.52 ! for sea ice introduced. ADB1F401.53 ! DFPLN3A.18 ! Description of Code: DFPLN3A.19 ! FORTRAN 77 with extensions listed in documentation. DFPLN3A.20 ! DFPLN3A.21 !- --------------------------------------------------------------------- DFPLN3A.22SUBROUTINE DIFF_PLANCK_SOURCE(N_PROFILE, N_LAYER 1DFPLN3A.23 & , N_DEG_FIT, THERMAL_COEFFICIENT DFPLN3A.24 & , T_REF_PLANCK, T_LEVEL, T_GROUND DFPLN3A.25 & , PLANCK_SOURCE, DIFF_PLANCK, PLANCK_GROUND DFPLN3A.26 & , L_IR_SOURCE_QUAD, T, DIFF_PLANCK_2 DFPLN3A.27 & , N_FRAC_ICE_POINT, I_FRAC_ICE_POINT, ICE_FRACTION ADB1F401.54 & , PLANCK_FREEZE_SEA ADB1F401.55 & , NPD_PROFILE, NPD_LAYER, NPD_THERMAL_COEFF DFPLN3A.28 & ) DFPLN3A.29 ! DFPLN3A.30 ! DFPLN3A.31 IMPLICIT NONE DFPLN3A.32 ! DFPLN3A.33 ! DFPLN3A.34 ! DUMMY ARRAY SIZES DFPLN3A.35 INTEGER !, INTENT(IN) DFPLN3A.36 & NPD_PROFILE DFPLN3A.37 ! MAXIMUM NUMBER OF PROFILES DFPLN3A.38 & , NPD_LAYER DFPLN3A.39 ! MAXIMUM NUMBER OF LAYERS DFPLN3A.40 & , NPD_THERMAL_COEFF DFPLN3A.41 ! NUMBER OF THERMAL COEFFICIENTS DFPLN3A.42 ! DFPLN3A.43 ! COMDECKS INCLUDED. ADB1F401.56 *CALL C_0_DG_C
ADB1F401.57 ! ADB1F401.58 ! DUMMY ARGUMENTS. DFPLN3A.44 INTEGER !, INTENT(IN) DFPLN3A.45 & N_PROFILE DFPLN3A.46 ! NUMBER OF PROFILES DFPLN3A.47 & , N_LAYER DFPLN3A.48 ! NUMBER OF LAYERS DFPLN3A.49 & , N_DEG_FIT DFPLN3A.50 ! DEGREE OF FITTING FUNCTION DFPLN3A.51 LOGICAL !, INTENT(IN) DFPLN3A.52 & L_IR_SOURCE_QUAD DFPLN3A.53 ! IR-SOURCE QUADRATIC DFPLN3A.54 REAL !, INTENT(IN) DFPLN3A.55 & THERMAL_COEFFICIENT(0: NPD_THERMAL_COEFF-1) DFPLN3A.56 ! COEFFICIENTS OF FIT TO PLANCK FNC DFPLN3A.57 & , T_REF_PLANCK DFPLN3A.58 ! PLANCKIAN REFERENCE TEMPERATURE DFPLN3A.59 & , T_LEVEL(NPD_PROFILE, 0: NPD_LAYER) DFPLN3A.60 ! TEMPERATURES ON LEVELS DFPLN3A.61 & , T_GROUND(NPD_PROFILE) DFPLN3A.62 ! TEMPERATURES AT GROUND DFPLN3A.63 REAL !, INTENT(OUT) DFPLN3A.64 & PLANCK_SOURCE(NPD_PROFILE, 0: NPD_LAYER) DFPLN3A.65 ! PLANCK FUNCTION ON LEVELS DFPLN3A.66 & , DIFF_PLANCK(NPD_PROFILE, NPD_LAYER) DFPLN3A.67 ! DIFFERENCES IN PLANCKIAN FNC DFPLN3A.68 & , DIFF_PLANCK_2(NPD_PROFILE, NPD_LAYER) DFPLN3A.69 ! TWICE 2ND DIFFERENCES IN PLANCKIAN FUNCTION DFPLN3A.70 & , T(NPD_PROFILE, 0: NPD_LAYER) DFPLN3A.71 ! TEMPERATURES AT CENTRES OF LAYERS DFPLN3A.72 & , PLANCK_GROUND(NPD_PROFILE) DFPLN3A.73 ! PLANCKIAN FUNCTION AT GROUND DFPLN3A.74 ! DFPLN3A.75 ! ARGUMENTS RELATING TO SEA ICE. ADB1F401.59 INTEGER !, INTENT(IN) ADB1F401.60 & N_FRAC_ICE_POINT ADB1F401.61 ! NUMBER OF POINTS WITH FRACTIONAL ICE COVER ADB1F401.62 & , I_FRAC_ICE_POINT(NPD_PROFILE) ADB1F401.63 ! INDICES OF POINTS WITH FRACTIONAL ICE COVER ADB1F401.64 REAL !, INTENT(IN) ADB1F401.65 & ICE_FRACTION(NPD_PROFILE) ADB1F401.66 ! ICE FRACTION ADB1F401.67 ! ADB1F401.68 REAL !, INTENT(OUT) ADB1F401.69 & PLANCK_FREEZE_SEA ADB1F401.70 ! PLANCK FUNCTION OVER FREEZING SEA ADB1F401.71 ! ADB1F401.72 ! ADB1F401.73 ! LOCAL VARIABLES. DFPLN3A.76 INTEGER DFPLN3A.77 & I DFPLN3A.78 ! LOOP VARIABLE DFPLN3A.79 & , J DFPLN3A.80 ! LOOP VARIABLE DFPLN3A.81 & , L DFPLN3A.82 ! LOOP VARIABLE DFPLN3A.83 REAL DFPLN3A.84 & T_RATIO(NPD_PROFILE) DFPLN3A.85 ! TEMPERATURE RATIO DFPLN3A.86 ! ADB1F401.74 ! VARIABLES FOR FRACTIONAL ICE COVER. ADB1F401.75 INTEGER ADB1F401.76 & LG ADB1F401.77 ! GATHERED LOOP VARIABLE ADB1F401.78 REAL ADB1F401.79 & T_ICE_G(NPD_PROFILE) ADB1F401.80 ! TEMPERATURE OF ICE SURFACE (GATHERED OVER SEA-ICE POINTS) ADB1F401.81 & , PLANCK_GROUND_G(NPD_PROFILE) ADB1F401.82 ! PLANCKIAN OF ICE SURFACE (GATHERED OVER SEA-ICE POINTS) ADB1F401.83 ADB1F401.84 ADB1F401.85 ! ADB1F401.86 ! DFPLN3A.87 ! DFPLN3A.88 ! CALCULATE THE CHANGE IN THE THERMAL SOURCE FUNCTION DFPLN3A.89 ! ACROSS EACH LAYER FOR THE INFRA-RED PART OF THE SPECTRUM. DFPLN3A.90 DO L=1, N_PROFILE DFPLN3A.91 T_RATIO(L)=T_LEVEL(L, 0)/T_REF_PLANCK DFPLN3A.92 PLANCK_SOURCE(L, 0) DFPLN3A.93 & =THERMAL_COEFFICIENT(N_DEG_FIT) DFPLN3A.94 ENDDO DFPLN3A.95 DO J=N_DEG_FIT-1, 0, -1 DFPLN3A.96 DO L=1, N_PROFILE DFPLN3A.97 PLANCK_SOURCE(L, 0) DFPLN3A.98 & =PLANCK_SOURCE(L, 0) DFPLN3A.99 & *T_RATIO(L)+THERMAL_COEFFICIENT(J) DFPLN3A.100 ENDDO DFPLN3A.101 ENDDO DFPLN3A.102 DO I=1, N_LAYER DFPLN3A.103 DO L=1, N_PROFILE DFPLN3A.104 T_RATIO(L)=T_LEVEL(L, I)/T_REF_PLANCK DFPLN3A.105 PLANCK_SOURCE(L, I) DFPLN3A.106 & =THERMAL_COEFFICIENT(N_DEG_FIT) DFPLN3A.107 ENDDO DFPLN3A.108 DO J=N_DEG_FIT-1, 0, -1 DFPLN3A.109 DO L=1, N_PROFILE DFPLN3A.110 PLANCK_SOURCE(L, I) DFPLN3A.111 & =PLANCK_SOURCE(L, I) DFPLN3A.112 & *T_RATIO(L)+THERMAL_COEFFICIENT(J) DFPLN3A.113 ENDDO DFPLN3A.114 ENDDO DFPLN3A.115 DO L=1, N_PROFILE DFPLN3A.116 DIFF_PLANCK(L, I)=PLANCK_SOURCE(L, I) DFPLN3A.117 & -PLANCK_SOURCE(L, I-1) DFPLN3A.118 ENDDO DFPLN3A.119 ENDDO DFPLN3A.120 ! CALCULATE THE SECOND DIFFERENCE IF REQUIRED. DFPLN3A.121 IF (L_IR_SOURCE_QUAD) THEN DFPLN3A.122 DO I=1, N_LAYER DFPLN3A.123 ! USE THE SECOND DIFFERENCE FOR TEMPORARY STORAGE. DFPLN3A.124 ! OF THE PLANCKIAN AT THE MIDDLE OF THE LAYER. DFPLN3A.125 DO L=1, N_PROFILE DFPLN3A.126 T_RATIO(L)=T(L, I)/T_REF_PLANCK DFPLN3A.127 DIFF_PLANCK_2(L, I) DFPLN3A.128 & =THERMAL_COEFFICIENT(N_DEG_FIT) DFPLN3A.129 ENDDO DFPLN3A.130 DO J=N_DEG_FIT-1, 0, -1 DFPLN3A.131 DO L=1, N_PROFILE DFPLN3A.132 DIFF_PLANCK_2(L, I) DFPLN3A.133 & =DIFF_PLANCK_2(L, I) DFPLN3A.134 & *T_RATIO(L)+THERMAL_COEFFICIENT(J) DFPLN3A.135 ENDDO DFPLN3A.136 ENDDO DFPLN3A.137 DO L=1, N_PROFILE DFPLN3A.138 DIFF_PLANCK_2(L, I)=2.0E+00*(PLANCK_SOURCE(L, I) DFPLN3A.139 & +PLANCK_SOURCE(L, I-1)-2.0E+00*DIFF_PLANCK_2(L, I)) DFPLN3A.140 ENDDO DFPLN3A.141 ENDDO DFPLN3A.142 ENDIF DFPLN3A.143 ! DFPLN3A.144 ! SOURCE AT THE SURFACE. DFPLN3A.145 DO L=1, N_PROFILE DFPLN3A.146 T_RATIO(L)=T_GROUND(L)/T_REF_PLANCK DFPLN3A.147 PLANCK_GROUND(L)=THERMAL_COEFFICIENT(N_DEG_FIT) DFPLN3A.148 ENDDO DFPLN3A.149 DO J=N_DEG_FIT-1, 0, -1 DFPLN3A.150 DO L=1, N_PROFILE DFPLN3A.151 PLANCK_GROUND(L)=PLANCK_GROUND(L)*T_RATIO(L) DFPLN3A.152 & +THERMAL_COEFFICIENT(J) DFPLN3A.153 ENDDO DFPLN3A.154 ENDDO DFPLN3A.155 ! ADB1F401.87 ! WHERE THERE IS FRACTIONAL SEA-ICE THE FORMULATION MUST BE ADB1F401.88 ! EXTENDED, BUT IT IS CONVENIENT TO CARRY OUT THE ABOVE OPERATION ADB1F401.89 ! AT ALL POINTS TO AVOID THE USE OF INDIRECT ADDRESSING. ADB1F401.90 ! ADB1F401.91 ! CALCULATE THE SOURCE FUNCTION OVER OPEN SEA, ADOPTING THE MODEL'S ADB1F401.92 ! CONVENTION THAT THE TEMPAERTURE THERE IS FIXED. ADB1F401.93 T_RATIO(1)=TFS/T_REF_PLANCK ADB1F401.94 PLANCK_FREEZE_SEA=THERMAL_COEFFICIENT(N_DEG_FIT) ADB1F401.95 DO J=N_DEG_FIT-1, 0, -1 ADB1F401.96 PLANCK_FREEZE_SEA=PLANCK_FREEZE_SEA*T_RATIO(1) ADB1F401.97 & +THERMAL_COEFFICIENT(J) ADB1F401.98 ENDDO ADB1F401.99 ! ADB1F401.100 ! DETERMINE THE TEMPERATURE OF THE ICE. ADB1F401.101 DO L=1, N_FRAC_ICE_POINT ADB1F401.102 LG=I_FRAC_ICE_POINT(L) ADB1F401.103 T_ICE_G(L)=(T_GROUND(LG) ADB1F401.104 & -TFS*(1.0E+00-ICE_FRACTION(LG)))/ICE_FRACTION(LG) ADB1F401.105 ENDDO ADB1F401.106 ! ADB1F401.107 ! CALCULATE THE SOURCE FUNCTION AT POINTS WITH FRACTIONAL ICE. ADB1F401.108 DO L=1, N_FRAC_ICE_POINT ADB1F401.109 T_RATIO(L)=T_ICE_G(L)/T_REF_PLANCK ADB1F401.110 PLANCK_GROUND_G(L)=THERMAL_COEFFICIENT(N_DEG_FIT) ADB1F401.111 ENDDO ADB1F401.112 DO J=N_DEG_FIT-1, 0, -1 ADB1F401.113 DO L=1, N_FRAC_ICE_POINT ADB1F401.114 PLANCK_GROUND_G(L)=PLANCK_GROUND_G(L)*T_RATIO(L) ADB1F401.115 & +THERMAL_COEFFICIENT(J) ADB1F401.116 ENDDO ADB1F401.117 ENDDO ADB1F401.118 ! ADB1F401.119 ! DETERMINE THE OVERALL PLANCKIAN FUNCTION OF THE SURFACE. ADB1F401.120 DO L=1, N_FRAC_ICE_POINT ADB1F401.121 LG=I_FRAC_ICE_POINT(L) ADB1F401.122 PLANCK_GROUND(LG)=ICE_FRACTION(LG)*PLANCK_GROUND_G(L) ADB1F401.123 & +PLANCK_FREEZE_SEA*(1.0E+00-ICE_FRACTION(LG)) ADB1F401.124 ENDDO ADB1F401.125 ! ADB1F401.126 ! DFPLN3A.156 ! DFPLN3A.157 RETURN DFPLN3A.158 END DFPLN3A.159 *ENDIF DEF,A01_3A,OR,DEF,A02_3A DFPLN3A.160 *ENDIF DEF,A70_1A,OR,DEF,A70_1B APB4F405.18