*IF DEF,A70_1A,OR,DEF,A70_1B APB4F405.105
*IF DEF,A01_3A,OR,DEF,A02_3A SPIN3A.2
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.13994
C GTS2F400.13995
C Use, duplication or disclosure of this code is subject to the GTS2F400.13996
C restrictions as set forth in the contract. GTS2F400.13997
C GTS2F400.13998
C Meteorological Office GTS2F400.13999
C London Road GTS2F400.14000
C BRACKNELL GTS2F400.14001
C Berkshire UK GTS2F400.14002
C RG12 2SZ GTS2F400.14003
C GTS2F400.14004
C If no contract has been raised with this copy of the code, the use, GTS2F400.14005
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.14006
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.14007
C Modelling at the above address. GTS2F400.14008
C ******************************COPYRIGHT****************************** GTS2F400.14009
C GTS2F400.14010
!+ Subroutine to read a shortwave spectral namelist. SPIN3A.3
! SPIN3A.4
! Purpose: SPIN3A.5
! To read a shortwave namelist into a spectral array. SPIN3A.6
! SPIN3A.7
! Method: SPIN3A.8
! The spectrum is read into the dynamically allocated array SPIN3A.9
! and then reduced to a more manageable size. SPIN3A.10
! SPIN3A.11
! Current Owner of Code: J. M. Edwards SPIN3A.12
! SPIN3A.13
! History: SPIN3A.14
! Version Date Comment SPIN3A.15
! 4.0 27-07-95 Original Code SPIN3A.16
! (J. M. Edwards) SPIN3A.17
! 4.1 14-05-96 Set lower limits ADB1F401.943
! for reduced dimensions ADB1F401.944
! to ensure that they ADB1F401.945
! may never be 0. ADB1F401.946
! (J. M. Edwards) ADB1F401.947
! 4.4 02-09-97 Aerosol flags passed ADB2F404.1050
! in to the code to ADB2F404.1051
! enable only those ADB2F404.1052
! required to be ADB2F404.1053
! selected. Spectral ADB2F404.1054
! data are now longer ADB2F404.1055
! compressed into a ADB2F404.1056
! single array. ADB2F404.1057
! Actual IOS code put ADB2F404.1058
! into CMESSAGE. ADB2F404.1059
! (J. M. Edwards) ADB2F404.1060
! 4.5 18-05-98 Coding to allow ADB1F405.610
! selection of gases ADB1F405.611
! from the spectral ADB1F405.612
! file. ADB1F405.613
! (J. M. Edwards) ADB1F405.614
! SPIN3A.18
! 4.5 April 1998 Allow soot spectral data to be read. ALR3F405.130
! Luke Robinson. ALR3F405.131
! Description of Code: SPIN3A.19
! FORTRAN 77 with extensions listed in documentation. SPIN3A.20
! SPIN3A.21
!- --------------------------------------------------------------------- SPIN3A.22
SUBROUTINE R2_SW_SPECIN(IERR, CMESSAGE 2,2ADB2F404.1061
& , L_O2 ADB1F405.615
& , L_CLIMAT_AEROSOL, L_USE_SULPC_DIRECT ADB2F404.1062
& , L_USE_SOOT_DIRECT ALR3F405.132
& ) ADB2F404.1063
! SPIN3A.24
! SPIN3A.25
IMPLICIT NONE ADB1F405.616
! ADB1F405.617
! ADB1F405.618
*CALL MXSIZE3A
SPIN3A.26
*CALL ERROR3A
ADB1F405.619
*CALL STDIO3A
ADB1F405.620
! SPIN3A.27
! SPIN3A.28
! DUMMY ARGUMENTS SPIN3A.29
LOGICAL !, INTENT(IN) ADB2F404.1064
& L_O2 ADB1F405.621
! ABSORPTION BY OXYGEN IS TO BE INCLUDED. ADB1F405.622
& , L_CLIMAT_AEROSOL ADB1F405.623
! CLIMATOLOGICAL AEROSOLS ARE TO BE INCLUDED ADB2F404.1066
& , L_USE_SULPC_DIRECT ADB2F404.1067
! THE DIRECT EFFECTS OF SULPHATE AEROSOLS ARE ADB2F404.1068
! TO BE INCLUDED ADB2F404.1069
& , L_USE_SOOT_DIRECT ALR3F405.133
! USE THE DIRECT RAD EFFECTS OF SOOT IN THE SW ALR3F405.134
! SPIN3A.33
INTEGER !, INTENT(OUT) SPIN3A.34
& IERR SPIN3A.35
! ERROR FLAG SPIN3A.36
CHARACTER*80 !, INTENT(OUT) SPIN3A.37
& CMESSAGE SPIN3A.38
! SPIN3A.39
! SPIN3A.43
! SPIN3A.44
! LOCAL VARIABLES. SPIN3A.46
! SPIN3A.47
! ADB1F405.624
! RADIATIVE VARIABLES FOR REDUCING THE SPECTRUM ADB1F405.625
! ADB1F405.626
*CALL AERPRM3A
ADB1F405.627
*CALL AERCMP3A
ADB1F405.628
*CALL GASID3A
ADB1F405.629
! ADB1F405.630
CHARACTER*80 SPIN3A.48
& SW_SPECTRAL_FILE SPIN3A.49
! NAME OF FILE CONTAINING THE SPECTRAL DATA SPIN3A.50
INTEGER SPIN3A.51
& IERR_GET_FILE SPIN3A.52
! ERROR FLAG RETURNED BY GET_FILE (NOT NECESSARILY SPIN3A.53
! CONSISTENT WITH THE FLAGS IN ERROR3A). SPIN3A.54
& , IOS SPIN3A.55
! STATUS OF I/O SPIN3A.56
! SPIN3A.57
LOGICAL ADB1F405.631
& L_RETAIN_ABSORB(NPD_SPECIES) ADB1F405.632
! FLAG SET TO .TRUE. IF THE ABSORBER IS TO BE RETAINED ADB1F405.633
& , L_GAS_INCLUDED(NPD_GASES) ADB1F405.634
! LOGICAL TO TEST FOR ACTUAL GASES INCLUDED ADB1F405.635
INTEGER ADB2F404.1070
& N_ABSORB_RETAIN ADB1F405.636
! NUMBER OF ABSORBERS TO RETAIN ADB1F405.637
& , INDEX_ABSORB_RETAIN(NPD_SPECIES) ADB1F405.638
! INDICES OF ABSORBERS TO BE RETAINED ADB1F405.639
& , COMPRESSED_INDEX(NPD_SPECIES) ADB1F405.640
! MAPPING FROM ORIGINAL TO COMPRESSED INDICES OF ABSORBERS ADB1F405.641
& , N_AEROSOL_RETAIN ADB1F405.642
! NUMBER OF AEROSOLS IN THE SPECTRAL FILE TO BE RETAINED ADB2F404.1072
! FOR THE RADIATIVE CALCULATION ADB2F404.1073
& , INDEX_AEROSOL_RETAIN(NPD_AEROSOL_SPECIES) ADB2F404.1074
! INDEXING NUMBERS OF THE RETAINED AEROSOLS ADB2F404.1075
& , N_AEROSOL_FOUND ADB2F404.1076
! NUMBER OF AEROSOLS FOR THE CURRENT GROUP OF PROCESSES ADB2F404.1077
! FOUND IN THE SPECTRAL FILE ADB2F404.1078
! SPIN3A.58
! ADB2F404.1079
! ADB2F404.1080
! DECLARE THE ELEMENTS OF THE INITIAL SPECTRUM FOR DYNAMIC ADB2F404.1081
! ALLOCATION AND SET UP AN APPROPRIATE NAMELIST. ADB2F404.1082
! ADB2F404.1083
*CALL SPDEC3A
SPIN3A.61
*CALL SWSP3A
SPIN3A.62
! ADB2F404.1084
! ADB2F404.1085
! DECLARE THE REDUCED SW SPECTRAL FILE AND ITS HOLDING COMMON BLOCK. ADB2F404.1086
! ADB2F404.1087
*CALL SWSPDL3A
ADB2F404.1088
*CALL SWSPCM3A
ADB2F404.1089
! ADB2F404.1090
! ADB2F404.1091
! ADB1F405.643
INTEGER SPIN3A.106
& I SPIN3A.107
! LOOP VARIABLE SPIN3A.108
& , J SPIN3A.109
! LOOP VARIABLE SPIN3A.110
! ADB2F404.1096
CHARACTER ADB2F404.1097
& CH_IOS*5 ADB2F404.1098
! CHARACTER STRING FOR IOS ERROR ADB2F404.1099
! SPIN3A.111
! SPIN3A.112
! SUBROUTINES CALLED SPIN3A.113
EXTERNAL SPIN3A.114
& R2_COMPRESS_SPECTRUM SPIN3A.115
! SPIN3A.116
! SPIN3A.117
! EACH BLOCK IS INITIALIZED AS MISSING: SPIN3A.118
DATA L_PRESENT/.FALSE., NPD_TYPE*.FALSE./ SPIN3A.119
! ADB2F404.1100
! INITIALIZE THE RANGE OF VALIDITY OF THE PARAMETRIZATIONS OF ADB2F404.1101
! DROPLETS AND ICE CRYSTALS. OLD SPECTRAL FILES WILL NOT CONTAIN ADB2F404.1102
! SUCH DATA, SO THE LIMITS FOR DROPLETS ARE INITIALIZED TO THOSE ADB2F404.1103
! FORMERLY SET IN THE MICROPHYSICAL SCHEME (MRF/UMIST ADB2F404.1104
! PARAMETRIZATION) TO ENSURE THAT THE RESULTS ARE BIT-REPRODUCIBLE. ADB2F404.1105
! VALUES FOR ICE COVER THE RANGE OF EFFECTIVE RADII USED IN ADB2F404.1106
! GENERATING THE DATA FOR THE ORIGINAL PARAMETRIZATION OF ICE ADB2F404.1107
! CRYSTALS. ADB2F404.1108
! AT SOME FUTURE RELEASE IT MAY BE DESIRABLE TO REMOVE DEFAULT ADB2F404.1109
! SETTINGS. ADB2F404.1110
DATA DROP_PARM_MIN_DIM/NPD_DROP_TYPE*3.5E-07/ ADB2F404.1111
DATA DROP_PARM_MAX_DIM/NPD_DROP_TYPE*3.7E-05/ ADB2F404.1112
DATA ICE_PARM_MIN_DIM/NPD_ICE_TYPE*3.75E-07/ ADB2F404.1113
DATA ICE_PARM_MAX_DIM/NPD_ICE_TYPE*8.0E-05/ ADB2F404.1114
! SPIN3A.120
! SPIN3A.121
! SPIN3A.122
! READ THE SHORTWAVE SPECTRUM AS A NAMELIST. SPIN3A.123
CALL GET_FILE
(57, SW_SPECTRAL_FILE, 80, IERR_GET_FILE) SPIN3A.124
IF (IERR_GET_FILE.NE.0) THEN SPIN3A.125
! CONVERT THE ERROR FLAG FROM GET_FILE TO A FLAG RECOGNISED SPIN3A.126
! BY THE RADIATION CODE. SPIN3A.127
IERR=I_ERR_IO SPIN3A.128
CMESSAGE='Error reading name of shortwave spectral file.' SPIN3A.129
RETURN SPIN3A.130
ENDIF SPIN3A.131
OPEN(UNIT=57, FILE=SW_SPECTRAL_FILE, IOSTAT=IOS, PXNAMLST.15
& DELIM='APOSTROPHE') PXNAMLST.16
IF (IOS.NE.0) THEN SPIN3A.133
IERR=I_ERR_IO SPIN3A.134
WRITE(CH_IOS, '(I5)') IOS ADB2F404.1115
CMESSAGE='Error opening shortwave spectral file.' ADB1F401.948
& //' IOSTAT='//CH_IOS ADB2F404.1116
RETURN SPIN3A.136
ENDIF SPIN3A.137
READ(57, R2SWSP) SPIN3A.138
CLOSE(57) SPIN3A.139
! SPIN3A.140
! TEST FOR MINIMAL REQUISITE INFORMATION. SPIN3A.141
IF ( .NOT.(L_PRESENT(0).AND. SPIN3A.142
& L_PRESENT(2) ) ) THEN SPIN3A.143
CMESSAGE='Shortwave spectrum is deficient.' SPIN3A.144
IERR=I_ERR_FATAL SPIN3A.145
RETURN SPIN3A.146
ENDIF SPIN3A.147
! SPIN3A.148
! SPIN3A.149
! SPIN3A.150
! SET REDUCED DIMENSIONS, EITHER FROM THE SIZES OF THE FIXED ARRAYS SPIN3A.151
! OR FROM THE ARRAYS READ IN. SPIN3A.152
! SPIN3A.153
NPD_TYPE_SW=NPD_TYPE ADB2F404.1117
NPD_BAND_SW=MAX(N_BAND, 1) ADB2F404.1118
NPD_SPECIES_SW=MAX(N_ABSORB, 1) ADB2F404.1119
NPD_ALBEDO_PARM_SW=NPD_ALBEDO_PARM ADB2F404.1120
NPD_SCALE_FNC_SW=NPD_SCALE_FNC ADB2F404.1121
NPD_SCALE_VARIABLE_SW=NPD_SCALE_VARIABLE ADB2F404.1122
NPD_SURFACE_SW=NPD_SURFACE ADB2F404.1123
NPD_CONTINUUM_SW=NPD_CONTINUUM ADB2F404.1124
NPD_CLOUD_PARAMETER_SW=NPD_CLOUD_PARAMETER ADB2F404.1125
NPD_THERMAL_COEFF_SW=1 ADB2F404.1126
! SPIN3A.165
! SPIN3A.166
! SEARCH THE SPECTRUM TO FIND MAXIMUM DIMENSIONS. SPIN3A.167
! SPIN3A.168
NPD_EXCLUDE_SW=1 ADB2F404.1127
IF (L_PRESENT(14)) THEN SPIN3A.170
DO I=1, N_BAND SPIN3A.171
NPD_EXCLUDE_SW=MAX(NPD_EXCLUDE_SW, N_BAND_EXCLUDE(I)) ADB2F404.1128
ENDDO SPIN3A.173
ENDIF SPIN3A.174
! SPIN3A.175
! Search the spectrum to find those gases to be retained. ADB1F405.644
! Water vapour, carbon dioxide and ozone are included ADB1F405.645
! if present, but a warning is printed if they are ADB1F405.646
! not included. ADB1F405.647
DO I=1, NPD_GASES ADB1F405.648
L_GAS_INCLUDED(I)=.FALSE. ADB1F405.649
ENDDO ADB1F405.650
N_ABSORB_RETAIN=0 ADB1F405.651
! ADB1F405.652
DO I=1, N_ABSORB ADB1F405.653
! ADB1F405.654
L_RETAIN_ABSORB(I)=.FALSE. ADB1F405.655
COMPRESSED_INDEX(I)=0 ADB1F405.656
! ADB1F405.657
IF ( (TYPE_ABSORB(I).EQ.IP_H2O).OR. ADB1F405.658
& (TYPE_ABSORB(I).EQ.IP_CO2).OR. ADB1F405.659
& (TYPE_ABSORB(I).EQ.IP_O3).OR. ADB1F405.660
& ( (TYPE_ABSORB(I).EQ.IP_O2).AND.L_O2 ) ) THEN ADB1F405.661
N_ABSORB_RETAIN=N_ABSORB_RETAIN+1 ADB1F405.662
INDEX_ABSORB_RETAIN(N_ABSORB_RETAIN)=I ADB1F405.663
COMPRESSED_INDEX(I)=N_ABSORB_RETAIN ADB1F405.664
L_RETAIN_ABSORB(I)=.TRUE. ADB1F405.665
L_GAS_INCLUDED(TYPE_ABSORB(I))=.TRUE. ADB1F405.666
ENDIF ADB1F405.667
! ADB1F405.668
ENDDO ADB1F405.669
! ADB1F405.670
! ADB1F405.671
! Print warning messages if those gases normally expected ADB1F405.672
! are not present. ADB1F405.673
IF (.NOT.L_GAS_INCLUDED(IP_H2O)) THEN ADB1F405.674
WRITE(IU_ERR, '(/A, /A)') ADB1F405.675
& '*** WARNING: Water vapour is not included in the ' ADB1F405.676
& , 'shortwave spectral file.' ADB1F405.677
ENDIF ADB1F405.678
! ADB1F405.679
IF (.NOT.L_GAS_INCLUDED(IP_CO2)) THEN ADB1F405.680
WRITE(IU_ERR, '(/A, /A)') ADB1F405.681
& '*** WARNING: Carbon dioxide is not included in the ' ADB1F405.682
& , 'shortwave spectral file.' ADB1F405.683
ENDIF ADB1F405.684
! ADB1F405.685
IF (.NOT.L_GAS_INCLUDED(IP_O3)) THEN ADB1F405.686
WRITE(IU_ERR, '(/A, /A)') ADB1F405.687
& '*** WARNING: Ozone is not included in the ' ADB1F405.688
& , 'shortwave spectral file.' ADB1F405.689
ENDIF ADB1F405.690
! ADB1F405.691
IF ((.NOT.L_GAS_INCLUDED(IP_O2)).AND.L_O2) THEN ADB1F405.692
WRITE(IU_ERR, '(/A, /A)') ADB1F405.693
& '*** ERROR: Oxygen is not included in the shortwave ' ADB1F405.694
& , 'spectral file, but was requested in the run.' ADB1F405.695
IERR=I_ERR_FATAL ADB1F405.696
RETURN ADB1F405.697
ENDIF ADB1F405.698
! ADB1F405.699
! Set an appropriate reduced dimension. ADB1F405.700
NPD_SPECIES_SW=MAX(N_ABSORB_RETAIN, 1) ADB1F405.701
! ADB1F405.702
! ADB1F405.703
NPD_ESFT_TERM_SW=1 ADB2F404.1129
IF (L_PRESENT(5)) THEN SPIN3A.177
DO I=1, N_BAND SPIN3A.178
DO J=1, N_BAND_ABSORB(I) SPIN3A.179
IF (L_RETAIN_ABSORB(INDEX_ABSORB(J, I))) ADB1F405.704
& NPD_ESFT_TERM_SW=MAX(NPD_ESFT_TERM_SW ADB1F405.705
& , I_BAND_ESFT(I, INDEX_ABSORB(J, I))) SPIN3A.181
ENDDO SPIN3A.182
ENDDO SPIN3A.183
ENDIF SPIN3A.184
! SPIN3A.185
NPD_DROP_TYPE_SW=1 ADB2F404.1131
IF (L_PRESENT(10)) THEN SPIN3A.187
DO I=1, NPD_DROP_TYPE SPIN3A.188
IF (L_DROP_TYPE(I)) THEN SPIN3A.189
NPD_DROP_TYPE_SW=MAX(NPD_DROP_TYPE_SW, I) ADB2F404.1132
ENDIF SPIN3A.191
ENDDO SPIN3A.192
ENDIF SPIN3A.193
! SPIN3A.194
NPD_ICE_TYPE_SW=1 ADB2F404.1133
IF (L_PRESENT(12)) THEN SPIN3A.196
DO I=1, NPD_ICE_TYPE SPIN3A.197
IF (L_ICE_TYPE(I)) THEN SPIN3A.198
NPD_ICE_TYPE_SW=MAX(NPD_ICE_TYPE_SW, I) ADB2F404.1134
ENDIF SPIN3A.200
ENDDO SPIN3A.201
ENDIF SPIN3A.202
! SPIN3A.203
! ADB2F404.1135
! Aerosols must be treated carefully to allow for various ADB2F404.1136
! different combinations without requiring the spectral file ADB2F404.1137
! to be too constrained. Only those required will be retained. ADB2F404.1138
! ADB2F404.1139
! Basic initialization to safe values. ADB2F404.1140
NPD_HUMIDITIES_SW=1 ADB2F404.1141
N_AEROSOL_RETAIN=0 ADB2F404.1142
! ADB2F404.1143
! Check the spectral file for climatological aerosols ADB2F404.1144
IF (L_CLIMAT_AEROSOL) THEN ADB2F404.1145
! ADB2F404.1146
IF (L_PRESENT(11)) THEN ADB2F404.1147
! ADB2F404.1148
! Search for the aerosols required for this scheme. ADB2F404.1149
N_AEROSOL_FOUND=0 ADB2F404.1150
DO I=1, N_AEROSOL ADB2F404.1151
! ADB2F404.1152
IF ( (TYPE_AEROSOL(I).EQ.IP_WATER_SOLUBLE).OR. ADB2F404.1153
& (TYPE_AEROSOL(I).EQ.IP_DUST_LIKE).OR. ADB2F404.1154
& (TYPE_AEROSOL(I).EQ.IP_OCEANIC).OR. ADB2F404.1155
& (TYPE_AEROSOL(I).EQ.IP_SOOT).OR. ADB2F404.1156
& (TYPE_AEROSOL(I).EQ.IP_SULPHURIC) ) THEN ADB2F404.1157
N_AEROSOL_RETAIN=N_AEROSOL_RETAIN+1 ADB2F404.1158
INDEX_AEROSOL_RETAIN(N_AEROSOL_RETAIN)=I ADB2F404.1159
N_AEROSOL_FOUND=N_AEROSOL_FOUND+1 ADB2F404.1160
ENDIF ADB2F404.1161
ADB2F404.1162
ENDDO ADB2F404.1163
! ADB2F404.1164
IF (N_AEROSOL_FOUND.NE.5) THEN ADB2F404.1165
! ADB2F404.1166
IERR=I_ERR_FATAL ADB2F404.1167
CMESSAGE='The SW Spectral file lacks some ' ADB2F404.1168
& //'climatological aerosols.' ADB2F404.1169
RETURN ADB2F404.1170
! ADB2F404.1171
ENDIF ADB2F404.1172
ADB2F404.1173
ELSE ADB2F404.1174
! ADB2F404.1175
IERR=I_ERR_FATAL ADB2F404.1176
CMESSAGE='SW Spectral file contains no aerosol data.' ADB2F404.1177
RETURN ADB2F404.1178
! ADB2F404.1179
ENDIF ADB2F404.1180
! ADB2F404.1181
ENDIF ADB2F404.1182
ADB2F404.1183
! ADB2F404.1184
! Check the spectral file for sulphate aerosols. (These are ADB2F404.1185
! required only for the direct effect). ADB2F404.1186
! ADB2F404.1187
IF (L_USE_SULPC_DIRECT) THEN ADB2F404.1188
! ADB2F404.1189
IF (L_PRESENT(11)) THEN ADB2F404.1190
! ADB2F404.1191
! Search for the aerosols required for this scheme. ADB2F404.1192
N_AEROSOL_FOUND=0 ADB2F404.1193
DO I=1, N_AEROSOL ADB2F404.1194
! ADB2F404.1195
IF ( (TYPE_AEROSOL(I).EQ.IP_ACCUM_SULPHATE).OR. ADB2F404.1196
& (TYPE_AEROSOL(I).EQ.IP_AITKEN_SULPHATE) ) THEN ADB2F404.1197
N_AEROSOL_RETAIN=N_AEROSOL_RETAIN+1 ADB2F404.1198
INDEX_AEROSOL_RETAIN(N_AEROSOL_RETAIN)=I ADB2F404.1199
N_AEROSOL_FOUND=N_AEROSOL_FOUND+1 ADB2F404.1200
ENDIF ADB2F404.1201
ADB2F404.1202
ENDDO ADB2F404.1203
! ADB2F404.1204
IF (N_AEROSOL_FOUND.NE.2) THEN ADB2F404.1205
! ADB2F404.1206
IERR=I_ERR_FATAL ADB2F404.1207
CMESSAGE='The SW Spectral file lacks some ' ADB2F404.1208
& //'sulphate aerosols.' ADB2F404.1209
RETURN ADB2F404.1210
! ADB2F404.1211
ENDIF ADB2F404.1212
ADB2F404.1213
ELSE ADB2F404.1214
! ADB2F404.1215
IERR=I_ERR_FATAL ADB2F404.1216
CMESSAGE='SW Spectral file contains no aerosol data.' ADB2F404.1217
RETURN ADB2F404.1218
! ADB2F404.1219
ENDIF ADB2F404.1220
! ADB2F404.1221
ENDIF ADB2F404.1222
! ADB2F404.1223
! ALR3F405.135
! Check the spectral file for soot aerosol modes. (Also only ALR3F405.136
! required for the direct effect). ALR3F405.137
! ALR3F405.138
IF (L_USE_SOOT_DIRECT) THEN ALR3F405.139
! ALR3F405.140
IF (L_PRESENT(11)) THEN ! aerosol block present in spec file ALR3F405.141
! ALR3F405.142
! Search for the aerosols required for this scheme. ALR3F405.143
N_AEROSOL_FOUND=0 ALR3F405.144
DO I=1, N_AEROSOL ALR3F405.145
! ALR3F405.146
IF ( (TYPE_AEROSOL(I).EQ.IP_FRESH_SOOT).OR. ALR3F405.147
& (TYPE_AEROSOL(I).EQ.IP_AGED_SOOT) ) THEN ALR3F405.148
N_AEROSOL_RETAIN=N_AEROSOL_RETAIN+1 ALR3F405.149
INDEX_AEROSOL_RETAIN(N_AEROSOL_RETAIN)=I ALR3F405.150
N_AEROSOL_FOUND=N_AEROSOL_FOUND+1 ALR3F405.151
ENDIF ALR3F405.152
! ALR3F405.153
ENDDO ALR3F405.154
! ALR3F405.155
IF (N_AEROSOL_FOUND.NE.2) THEN ALR3F405.156
! ALR3F405.157
IERR=I_ERR_FATAL ALR3F405.158
CMESSAGE='The SW Spectral file lacks some ' ALR3F405.159
& //'soot aerosol.' ALR3F405.160
RETURN ALR3F405.161
! ALR3F405.162
ENDIF ALR3F405.163
ALR3F405.164
ELSE ALR3F405.165
! ALR3F405.166
IERR=I_ERR_FATAL ALR3F405.167
CMESSAGE='SW Spectral file contains no aerosol data.' ALR3F405.168
RETURN ALR3F405.169
! ALR3F405.170
ENDIF ALR3F405.171
! ALR3F405.172
ENDIF ALR3F405.173
! ALR3F405.174
! Set an appropriate reduced dimension. ADB2F404.1224
NPD_AEROSOL_SPECIES_SW=MAX(N_AEROSOL_RETAIN, 1) ADB2F404.1225
! ADB2F404.1226
! Set the allowed number of humidities from the number of ADB2F404.1227
! retained aerosols. ADB2F404.1228
! ADB2F404.1229
IF (L_PRESENT(11)) THEN SPIN3A.205
DO I=1, N_AEROSOL_RETAIN ADB2F404.1230
IF (I_AEROSOL_PARAMETRIZATION(INDEX_AEROSOL_RETAIN(I)).EQ. ADB2F404.1231
& IP_AEROSOL_PARAM_MOIST) THEN SPIN3A.208
NPD_HUMIDITIES_SW=MAX(NPD_HUMIDITIES_SW ADB2F404.1232
& , NHUMIDITY(INDEX_AEROSOL_RETAIN(I))) ADB2F404.1233
ENDIF SPIN3A.210
ENDDO SPIN3A.211
ENDIF SPIN3A.212
! SPIN3A.213
! SPIN3A.214
! SPIN3A.215
! SPIN3A.216
! TRANSFER THE LARGE NAMELIST TO THE REDUCED SPECTRUM. SPIN3A.217
! SPIN3A.218
! SPIN3A.219
CALL R2_COMPRESS_SPECTRUM
( SPIN3A.272
! Spectral Array in Namelist SPIN3A.273
& L_PRESENT SPIN3A.274
& , N_BAND, WAVE_LENGTH_SHORT , WAVE_LENGTH_LONG SPIN3A.275
& , N_BAND_EXCLUDE, INDEX_EXCLUDE SPIN3A.276
& , SOLAR_FLUX_BAND, RAYLEIGH_COEFFICIENT SPIN3A.277
& , N_ABSORB, N_BAND_ABSORB, INDEX_ABSORB, TYPE_ABSORB SPIN3A.278
& , L_RETAIN_ABSORB, N_ABSORB_RETAIN, INDEX_ABSORB_RETAIN ADB1F405.706
& , COMPRESSED_INDEX, I_BAND_ESFT, K_ESFT, W_ESFT, I_SCALE_ESFT ADB1F405.707
& , I_SCALE_FNC, SCALE_VECTOR, P_REFERENCE, T_REFERENCE SPIN3A.280
& , N_DEG_FIT, THERMAL_COEFFICIENT, T_REF_PLANCK SPIN3A.281
& , I_SPEC_SURFACE, L_SURFACE, SURFACE_ALBEDO SPIN3A.282
& , N_DIR_ALBEDO_FIT, DIRECT_ALBEDO_PARM, EMISSIVITY_GROUND SPIN3A.283
& , N_BAND_CONTINUUM, INDEX_CONTINUUM, INDEX_WATER SPIN3A.284
& , K_CONTINUUM, I_SCALE_FNC_CONT, SCALE_CONTINUUM SPIN3A.285
& , P_REF_CONTINUUM, T_REF_CONTINUUM SPIN3A.286
& , L_DROP_TYPE, I_DROP_PARAMETRIZATION, DROP_PARAMETER_LIST SPIN3A.287
& , DROP_PARM_MIN_DIM, DROP_PARM_MAX_DIM ADB2F404.1234
& , L_ICE_TYPE, I_ICE_PARAMETRIZATION, ICE_PARAMETER_LIST SPIN3A.288
& , ICE_PARM_MIN_DIM, ICE_PARM_MAX_DIM ADB2F404.1235
& , N_AEROSOL, TYPE_AEROSOL SPIN3A.289
& , N_AEROSOL_RETAIN, INDEX_AEROSOL_RETAIN ADB2F404.1236
& , L_AEROSOL_SPECIES, AEROSOL_ABSORPTION SPIN3A.290
& , AEROSOL_SCATTERING, AEROSOL_ASYMMETRY SPIN3A.291
& , NHUMIDITY, HUMIDITIES, I_AEROSOL_PARAMETRIZATION SPIN3A.292
& , L_DOPPLER_PRESENT, DOPPLER_CORRECTION SPIN3A.293
! Reduced Spectral Array SPIN3A.302
*CALL SWSARG3A
ADB2F404.1237
& ) SPIN3A.356
! SPIN3A.357
! SPIN3A.358
! SPIN3A.359
RETURN SPIN3A.360
END SPIN3A.361
!+ Subroutine to read a longwave spectral namelist. SPIN3A.362
! SPIN3A.363
! Purpose: SPIN3A.364
! To read a longwave namelist into a spectral array. SPIN3A.365
! SPIN3A.366
! Method: SPIN3A.367
! The spectrum is read into the dynamically allocated array SPIN3A.368
! and then reduced to a more manageable size. SPIN3A.369
! SPIN3A.370
! Current Owner of Code: J. M. Edwards SPIN3A.371
! SPIN3A.372
! History: SPIN3A.373
! Version Date Comment SPIN3A.374
! 4.0 27-07-95 Original Code SPIN3A.375
! (J. M. Edwards) SPIN3A.376
! SPIN3A.377
! 4.4 02-09-97 Aerosol flags passed ADB2F404.1238
! in to the code to ADB2F404.1239
! enable only those ADB2F404.1240
! required to be ADB2F404.1241
! selected. Spectral ADB2F404.1242
! data are no longer ADB2F404.1243
! compressed into a ADB2F404.1244
! single array. ADB2F404.1245
! IOSTAT error code ADB2F404.1246
! returned as part of ADB2F404.1247
! CMESSAGE. ADB2F404.1248
! (J. M. Edwards) ADB2F404.1249
! 4.5 April 1998 Allow soot spectral data to be read. ADB1F405.708
! Luke Robinson. ADB1F405.709
! 4.5 18-05-98 Coding to allow ADB1F405.710
! selection of gases ADB1F405.711
! from the spectral ADB1F405.712
! file. ADB1F405.713
! (J. M. Edwards) ADB1F405.714
! ADB2F404.1250
! Description of Code: SPIN3A.378
! FORTRAN 77 with extensions listed in documentation. SPIN3A.379
! SPIN3A.380
!- --------------------------------------------------------------------- SPIN3A.381
SUBROUTINE R2_LW_SPECIN(IERR, CMESSAGE 2,2ADB2F404.1251
& , L_CH4, L_N2O, L_CFC11, L_CFC12 ADB1F405.715
& , L_CFC113, L_HCFC22, L_HFC125, L_HFC134A ADB1F405.716
& , L_CLIMAT_AEROSOL, L_USE_SULPC_DIRECT ADB2F404.1252
& , L_USE_SOOT_DIRECT ALR3F405.175
& ) ADB2F404.1253
! SPIN3A.383
! SPIN3A.384
IMPLICIT NONE ADB1F405.717
! ADB1F405.718
! ADB1F405.719
*CALL MXSIZE3A
SPIN3A.385
*CALL ERROR3A
ADB1F405.720
*CALL STDIO3A
ADB1F405.721
! SPIN3A.386
! SPIN3A.387
! DUMMY ARGUMENTS SPIN3A.388
LOGICAL !, INTENT(IN) ADB2F404.1254
& L_CH4 ADB1F405.722
! ABSORPTION BY METHANE IS INCLUDED ADB1F405.723
& , L_N2O ADB1F405.724
! ABSORPTION BY NITROUS OXIDE IS INCLUDED ADB1F405.725
& , L_CFC11 ADB1F405.726
! ABSORPTION BY CFC11 IS INCLUDED ADB1F405.727
& , L_CFC12 ADB1F405.728
! ABSORPTION BY CFC12 IS INCLUDED ADB1F405.729
& , L_CFC113 ADB1F405.730
! ABSORPTION BY CFC113 IS INCLUDED ADB1F405.731
& , L_HCFC22 ADB1F405.732
! ABSORPTION BY HCFC22 IS INCLUDED ADB1F405.733
& , L_HFC125 ADB1F405.734
! ABSORPTION BY HFC125 IS INCLUDED ADB1F405.735
& , L_HFC134A ADB1F405.736
! ABSORPTION BY HFC134A IS INCLUDED ADB1F405.737
& , L_CLIMAT_AEROSOL ADB1F405.738
! CLIMATOLOGICAL AEROSOLS ARE TO BE INCLUDED ADB2F404.1256
& , L_USE_SULPC_DIRECT ADB2F404.1257
! THE DIRECT EFFECTS OF SULPHATE AEROSOLS ARE ADB2F404.1258
! TO BE INCLUDED ADB2F404.1259
& , L_USE_SOOT_DIRECT ALR3F405.176
! USE THE DIRECT RAD EFFECTS OF SOOT IN THE LW ALR3F405.177
! SPIN3A.392
INTEGER !, INTENT(OUT) SPIN3A.393
& IERR SPIN3A.394
! ERROR FLAG SPIN3A.395
CHARACTER*80 !, INTENT(OUT) SPIN3A.396
& CMESSAGE SPIN3A.397
! SPIN3A.402
! SPIN3A.403
! SPIN3A.404
! LOCAL VARIABLES. SPIN3A.405
! SPIN3A.406
! ADB1F405.739
! RADIATIVE VARIABLES FOR REDUCING THE SPECTRUM ADB1F405.740
! ADB1F405.741
*CALL AERPRM3A
ADB1F405.742
*CALL AERCMP3A
ADB1F405.743
*CALL GASID3A
ADB1F405.744
! ADB1F405.745
CHARACTER*80 SPIN3A.407
& LW_SPECTRAL_FILE SPIN3A.408
! NAME OF FILE CONTAINING THE SPECTRAL DATA SPIN3A.409
INTEGER SPIN3A.410
& IERR_GET_FILE SPIN3A.411
! ERROR FLAG RETURNED BY GET_FILE (NOT NECESSARILY SPIN3A.412
! CONSISTENT WITH THE FLAGS IN ERROR3A). SPIN3A.413
& , IOS SPIN3A.414
! STATUS OF I/O SPIN3A.415
! SPIN3A.416
LOGICAL ADB1F405.746
& L_RETAIN_ABSORB(NPD_SPECIES) ADB1F405.747
! FLAG SET TO .TRUE. IF THE ABSORBER IS TO BE RETAINED ADB1F405.748
& , L_GAS_INCLUDED(NPD_GASES) ADB1F405.749
! LOGICAL TO TEST FOR ACTUAL GASES INCLUDED ADB1F405.750
INTEGER ADB2F404.1260
& N_ABSORB_RETAIN ADB1F405.751
! NUMBER OF ABSORBERS TO RETAIN ADB1F405.752
& , INDEX_ABSORB_RETAIN(NPD_SPECIES) ADB1F405.753
! INDICES OF ABSORBERS TO BE RETAINED ADB1F405.754
& , N_AEROSOL_RETAIN ADB1F405.755
! NUMBER OF AEROSOLS IN THE SPECTRAL FILE TO BE RETAINED ADB2F404.1262
! FOR THE RADIATIVE CALCULATION ADB2F404.1263
& , INDEX_AEROSOL_RETAIN(NPD_AEROSOL_SPECIES) ADB2F404.1264
! INDEXING NUMBERS OF THE RETAINED AEROSOLS ADB2F404.1265
& , COMPRESSED_INDEX(NPD_SPECIES) ADB1F405.756
! MAPPING FROM OLD TO NEW INDICES OF ABSORBERS ADB1F405.757
& , N_AEROSOL_FOUND ADB2F404.1266
! NUMBER OF AEROSOLS FOR THE CURRENT GROUP OF PROCESSES ADB2F404.1267
! FOUND IN THE SPECTRAL FILE ADB2F404.1268
! SPIN3A.417
! ADB2F404.1269
! DECLARE THE ELEMENTS OF THE INITIAL SPECTRUM FOR DYNAMIC ADB2F404.1270
! ALLOCATION AND SET UP AN APPROPRIATE NAMELIST. ADB2F404.1271
! ADB2F404.1272
*CALL SPDEC3A
SPIN3A.420
*CALL LWSP3A
SPIN3A.421
! ADB2F404.1273
! ADB2F404.1274
! DECLARE THE REDUCED SW SPECTRAL FILE AND ITS HOLDING COMMON BLOCK. ADB2F404.1275
! ADB2F404.1276
*CALL LWSPDL3A
ADB2F404.1277
*CALL LWSPCM3A
ADB2F404.1278
! SPIN3A.424
! SPIN3A.463
! SPIN3A.464
INTEGER SPIN3A.465
& I SPIN3A.466
! LOOP VARIABLE SPIN3A.467
& , J SPIN3A.468
! LOOP VARIABLE SPIN3A.469
! ADB2F404.1284
CHARACTER ADB2F404.1285
& CH_IOS*5 ADB2F404.1286
! CHARACTER STRING FOR IOSTAT ERROR ADB2F404.1287
! SPIN3A.470
! SUBROUTINES CALLED SPIN3A.471
EXTERNAL SPIN3A.472
& R2_COMPRESS_SPECTRUM SPIN3A.473
! SPIN3A.474
! SPIN3A.475
! EACH BLOCK IS INITIALIZED AS MISSING: SPIN3A.476
DATA L_PRESENT/.FALSE., NPD_TYPE*.FALSE./ SPIN3A.477
! ADB2F404.1288
! INITIALIZE THE RANGE OF VALIDITY OF THE PARAMETRIZATIONS OF ADB2F404.1289
! DROPLETS AND ICE CRYSTALS. OLD SPECTRAL FILES WILL NOT CONTAIN ADB2F404.1290
! SUCH DATA, SO THE LIMITS FOR DROPLETS ARE INITIALIZED TO THOSE ADB2F404.1291
! FORMERLY SET IN THE MICROPHYSICAL SCHEME (MRF/UMIST ADB2F404.1292
! PARAMETRIZATION) TO ENSURE THAT THE RESULTS ARE BIT-REPRODUCIBLE. ADB2F404.1293
! VALUES FOR ICE COVER THE RANGE OF EFFECTIVE RADII USED IN ADB2F404.1294
! GENERATING THE DATA FOR THE ORIGINAL PARAMETRIZATION OF ICE ADB2F404.1295
! CRYSTALS. ADB2F404.1296
! AT SOME FUTURE RELEASE IT MAY BE DESIRABLE TO REMOVE DEFAULT ADB2F404.1297
! SETTINGS. ADB2F404.1298
DATA DROP_PARM_MIN_DIM/NPD_DROP_TYPE*3.5E-07/ ADB2F404.1299
DATA DROP_PARM_MAX_DIM/NPD_DROP_TYPE*3.7E-05/ ADB2F404.1300
DATA ICE_PARM_MIN_DIM/NPD_ICE_TYPE*3.75E-07/ ADB2F404.1301
DATA ICE_PARM_MAX_DIM/NPD_ICE_TYPE*8.0E-05/ ADB2F404.1302
! SPIN3A.478
! SPIN3A.479
! SPIN3A.480
! READ THE LONGWAVE SPECTRUM AS A NAMELIST. SPIN3A.481
CALL GET_FILE
(80, LW_SPECTRAL_FILE, 80, IERR_GET_FILE) SPIN3A.482
IF (IERR_GET_FILE.NE.0) THEN SPIN3A.483
! CONVERT THE ERROR FLAG FROM GET_FILE TO A FLAG RECOGNISED SPIN3A.484
! BY THE RADIATION CODE. SPIN3A.485
IERR=I_ERR_IO SPIN3A.486
CMESSAGE='Error reading name of longwave spectral file.' SPIN3A.487
RETURN SPIN3A.488
ENDIF SPIN3A.489
OPEN(UNIT=80, FILE=LW_SPECTRAL_FILE, IOSTAT=IOS, PXNAMLST.17
& DELIM='APOSTROPHE') PXNAMLST.18
IF (IOS.NE.0) THEN SPIN3A.491
IERR=I_ERR_IO SPIN3A.492
WRITE(CH_IOS, '(I5)') IOS ADB2F404.1303
CMESSAGE='Error opening longwave spectral file.' ADB1F401.952
& //' IOSTAT='//CH_IOS ADB2F404.1304
RETURN SPIN3A.494
ENDIF SPIN3A.495
READ(80, R2LWSP) SPIN3A.496
CLOSE(80) SPIN3A.497
! SPIN3A.498
! TEST FOR MINIMAL REQUISITE INFORMATION. SPIN3A.499
IF ( .NOT.(L_PRESENT(0).AND. SPIN3A.500
& L_PRESENT(6) ) ) THEN SPIN3A.501
CMESSAGE='Longwave spectrum is deficient.' SPIN3A.502
IERR=I_ERR_FATAL SPIN3A.503
RETURN SPIN3A.504
ENDIF SPIN3A.505
! SPIN3A.506
! SPIN3A.507
! SPIN3A.508
! SET REDUCED DIMENSIONS, EITHER FROM THE SIZES OF THE FIXED ARRAYS SPIN3A.509
! OR FROM THE ARRAYS READ IN. SPIN3A.510
! SPIN3A.511
NPD_TYPE_LW=NPD_TYPE ADB2F404.1305
NPD_BAND_LW=MAX(N_BAND, 1) ADB2F404.1306
NPD_SPECIES_LW=MAX(N_ABSORB, 1) ADB2F404.1307
NPD_ALBEDO_PARM_LW=NPD_ALBEDO_PARM ADB2F404.1308
NPD_SCALE_FNC_LW=NPD_SCALE_FNC ADB2F404.1309
NPD_SCALE_VARIABLE_LW=NPD_SCALE_VARIABLE ADB2F404.1310
NPD_SURFACE_LW=NPD_SURFACE ADB2F404.1311
NPD_CONTINUUM_LW=NPD_CONTINUUM ADB2F404.1312
NPD_THERMAL_COEFF_LW=N_DEG_FIT+1 ADB2F404.1313
NPD_CLOUD_PARAMETER_LW=NPD_CLOUD_PARAMETER ADB2F404.1314
! SPIN3A.523
! SPIN3A.524
! SEARCH THE SPECTRUM TO FIND MAXIMUM DIMENSIONS. SPIN3A.525
! SPIN3A.526
NPD_EXCLUDE_LW=1 ADB2F404.1315
IF (L_PRESENT(14)) THEN SPIN3A.528
DO I=1, N_BAND SPIN3A.529
NPD_EXCLUDE_LW=MAX(NPD_EXCLUDE_LW, N_BAND_EXCLUDE(I)) ADB2F404.1316
ENDDO SPIN3A.531
ENDIF SPIN3A.532
! SPIN3A.533
! Search the spectrum to find those gases to be retained. ADB1F405.758
! Water vapour, carbon dioxide and ozone are included ADB1F405.759
! if present, but a warning is printed if they are ADB1F405.760
! not included. ADB1F405.761
DO I=1, NPD_GASES ADB1F405.762
L_GAS_INCLUDED(I)=.FALSE. ADB1F405.763
ENDDO ADB1F405.764
N_ABSORB_RETAIN=0 ADB1F405.765
! ADB1F405.766
DO I=1, N_ABSORB ADB1F405.767
! ADB1F405.768
L_RETAIN_ABSORB(I)=.FALSE. ADB1F405.769
COMPRESSED_INDEX(I)=0 ADB1F405.770
! ADB1F405.771
IF ( (TYPE_ABSORB(I).EQ.IP_H2O).OR. ADB1F405.772
& (TYPE_ABSORB(I).EQ.IP_CO2).OR. ADB1F405.773
& (TYPE_ABSORB(I).EQ.IP_O3).OR. ADB1F405.774
& ( (TYPE_ABSORB(I).EQ.IP_CH4).AND.L_CH4 ).OR. ADB1F405.775
& ( (TYPE_ABSORB(I).EQ.IP_N2O).AND.L_N2O ).OR. ADB1F405.776
& ( (TYPE_ABSORB(I).EQ.IP_CFC11).AND.L_CFC11 ).OR. ADB1F405.777
& ( (TYPE_ABSORB(I).EQ.IP_CFC12).AND.L_CFC12 ).OR. ADB1F405.778
& ( (TYPE_ABSORB(I).EQ.IP_CFC113).AND.L_CFC113 ).OR. ADB1F405.779
& ( (TYPE_ABSORB(I).EQ.IP_HCFC22).AND.L_HCFC22 ).OR. ADB1F405.780
& ( (TYPE_ABSORB(I).EQ.IP_HFC125).AND.L_HFC125 ).OR. ADB1F405.781
& ( (TYPE_ABSORB(I).EQ.IP_HFC134A).AND.L_HFC134A ) ) THEN ADB1F405.782
N_ABSORB_RETAIN=N_ABSORB_RETAIN+1 ADB1F405.783
INDEX_ABSORB_RETAIN(N_ABSORB_RETAIN)=I ADB1F405.784
COMPRESSED_INDEX(I)=N_ABSORB_RETAIN ADB1F405.785
L_RETAIN_ABSORB(I)=.TRUE. ADB1F405.786
L_GAS_INCLUDED(TYPE_ABSORB(I))=.TRUE. ADB1F405.787
ENDIF ADB1F405.788
! ADB1F405.789
ENDDO ADB1F405.790
! ADB1F405.791
! ADB1F405.792
! Print warning messages if those gases normally expected ADB1F405.793
! are not present. ADB1F405.794
IF (.NOT.L_GAS_INCLUDED(IP_H2O)) THEN ADB1F405.795
WRITE(IU_ERR, '(/A, /A)') ADB1F405.796
& '*** WARNING: Water vapour is not included in the ' ADB1F405.797
& , 'longwave spectral file.' ADB1F405.798
ENDIF ADB1F405.799
! ADB1F405.800
IF (.NOT.L_GAS_INCLUDED(IP_CO2)) THEN ADB1F405.801
WRITE(IU_ERR, '(/A, /A)') ADB1F405.802
& '*** WARNING: Carbon dioxide is not included in the ' ADB1F405.803
& , 'longwave spectral file.' ADB1F405.804
ENDIF ADB1F405.805
! ADB1F405.806
IF (.NOT.L_GAS_INCLUDED(IP_O3)) THEN ADB1F405.807
WRITE(IU_ERR, '(/A, /A)') ADB1F405.808
& '*** WARNING: Ozone is not included in the ' ADB1F405.809
& , 'longwave spectral file.' ADB1F405.810
ENDIF ADB1F405.811
! ADB1F405.812
IF ((.NOT.L_GAS_INCLUDED(IP_CH4)).AND.L_CH4) THEN ADB1F405.813
WRITE(IU_ERR, '(/A, /A)') ADB1F405.814
& '*** ERROR: Methane is not included in the longwave ' ADB1F405.815
& , 'spectral file, but was requested in the run.' ADB1F405.816
IERR=I_ERR_FATAL ADB1F405.817
RETURN ADB1F405.818
ENDIF ADB1F405.819
! ADB1F405.820
IF ((.NOT.L_GAS_INCLUDED(IP_N2O)).AND.L_N2O) THEN ADB1F405.821
WRITE(IU_ERR, '(/A, /A)') ADB1F405.822
& '*** ERROR: Nitrous oxide is not included in the longwave ' ADB1F405.823
& , 'spectral file, but was requested in the run.' ADB1F405.824
IERR=I_ERR_FATAL ADB1F405.825
RETURN ADB1F405.826
ENDIF ADB1F405.827
! ADB1F405.828
IF ((.NOT.L_GAS_INCLUDED(IP_CFC11)).AND.L_CFC11) THEN ADB1F405.829
WRITE(IU_ERR, '(/A, /A)') ADB1F405.830
& '*** ERROR: CFC11 is not included in the longwave ' ADB1F405.831
& , 'spectral file, but was requested in the run.' ADB1F405.832
IERR=I_ERR_FATAL ADB1F405.833
RETURN ADB1F405.834
ENDIF ADB1F405.835
! ADB1F405.836
IF ((.NOT.L_GAS_INCLUDED(IP_CFC12)).AND.L_CFC12) THEN ADB1F405.837
WRITE(IU_ERR, '(/A, /A)') ADB1F405.838
& '*** ERROR: CFC12 is not included in the longwave ' ADB1F405.839
& , 'spectral file, but was requested in the run.' ADB1F405.840
IERR=I_ERR_FATAL ADB1F405.841
RETURN ADB1F405.842
ENDIF ADB1F405.843
! ADB1F405.844
IF ((.NOT.L_GAS_INCLUDED(IP_CFC113)).AND.L_CFC113) THEN ADB1F405.845
WRITE(IU_ERR, '(/A, /A)') ADB1F405.846
& '*** ERROR: CFC113 is not included in the longwave ' ADB1F405.847
& , 'spectral file, but was requested in the run.' ADB1F405.848
IERR=I_ERR_FATAL ADB1F405.849
RETURN ADB1F405.850
ENDIF ADB1F405.851
! ADB1F405.852
IF ((.NOT.L_GAS_INCLUDED(IP_HCFC22)).AND.L_HCFC22) THEN ADB1F405.853
WRITE(IU_ERR, '(/A, /A)') ADB1F405.854
& '*** ERROR: HCFC22 is not included in the longwave ' ADB1F405.855
& , 'spectral file, but was requested in the run.' ADB1F405.856
IERR=I_ERR_FATAL ADB1F405.857
RETURN ADB1F405.858
ENDIF ADB1F405.859
! ADB1F405.860
IF ((.NOT.L_GAS_INCLUDED(IP_HFC125)).AND.L_HFC125) THEN ADB1F405.861
WRITE(IU_ERR, '(/A, /A)') ADB1F405.862
& '*** ERROR: HFC125 is not included in the longwave ' ADB1F405.863
& , 'spectral file, but was requested in the run.' ADB1F405.864
IERR=I_ERR_FATAL ADB1F405.865
RETURN ADB1F405.866
ENDIF ADB1F405.867
! ADB1F405.868
IF ((.NOT.L_GAS_INCLUDED(IP_HFC134A)).AND.L_HFC134A) THEN ADB1F405.869
WRITE(IU_ERR, '(/A, /A)') ADB1F405.870
& '*** ERROR: HFC134A is not included in the longwave ' ADB1F405.871
& , 'spectral file, but was requested in the run.' ADB1F405.872
IERR=I_ERR_FATAL ADB1F405.873
RETURN ADB1F405.874
ENDIF ADB1F405.875
! ADB1F405.876
! Set an appropriate reduced dimension. ADB1F405.877
NPD_SPECIES_LW=MAX(N_ABSORB_RETAIN, 1) ADB1F405.878
! ADB1F405.879
NPD_ESFT_TERM_LW=1 ADB2F404.1317
IF (L_PRESENT(5)) THEN SPIN3A.535
DO I=1, N_BAND SPIN3A.536
DO J=1, N_BAND_ABSORB(I) SPIN3A.537
IF (L_RETAIN_ABSORB(INDEX_ABSORB(J, I))) ADB1F405.880
& NPD_ESFT_TERM_LW=MAX(NPD_ESFT_TERM_LW ADB1F405.881
& , I_BAND_ESFT(I, INDEX_ABSORB(J, I))) SPIN3A.539
ENDDO SPIN3A.540
ENDDO SPIN3A.541
ENDIF SPIN3A.542
! SPIN3A.543
NPD_DROP_TYPE_LW=1 ADB2F404.1319
IF (L_PRESENT(10)) THEN SPIN3A.545
DO I=1, NPD_DROP_TYPE ADB1F405.882
IF (L_DROP_TYPE(I)) THEN SPIN3A.547
NPD_DROP_TYPE_LW=MAX(NPD_DROP_TYPE_LW, I) ADB2F404.1321
ENDIF SPIN3A.549
ENDDO SPIN3A.550
ENDIF SPIN3A.551
! SPIN3A.552
NPD_ICE_TYPE_LW=1 ADB2F404.1322
IF (L_PRESENT(12)) THEN SPIN3A.554
DO I=1, NPD_ICE_TYPE SPIN3A.555
IF (L_ICE_TYPE(I)) THEN SPIN3A.556
NPD_ICE_TYPE_LW=MAX(NPD_ICE_TYPE_LW, I) ADB2F404.1323
ENDIF SPIN3A.558
ENDDO SPIN3A.559
ENDIF SPIN3A.560
! SPIN3A.561
! ADB2F404.1324
! ADB2F404.1325
! Aerosols must be treated carefully to allow for various ADB2F404.1326
! different combinations without requiring the spectral file ADB2F404.1327
! to be too constrained. Only those required will be retained. ADB2F404.1328
! ADB2F404.1329
! Basic initialization to safe values. ADB2F404.1330
NPD_HUMIDITIES_LW=1 ADB2F404.1331
N_AEROSOL_RETAIN=0 ADB2F404.1332
! ADB2F404.1333
! Check the spectral file for climatological aerosols ADB2F404.1334
IF (L_CLIMAT_AEROSOL) THEN ADB2F404.1335
! ADB2F404.1336
IF (L_PRESENT(11)) THEN ADB2F404.1337
! ADB2F404.1338
! Search for the aerosols required for this scheme. ADB2F404.1339
N_AEROSOL_FOUND=0 ADB2F404.1340
DO I=1, N_AEROSOL ADB2F404.1341
! ADB2F404.1342
IF ( (TYPE_AEROSOL(I).EQ.IP_WATER_SOLUBLE).OR. ADB2F404.1343
& (TYPE_AEROSOL(I).EQ.IP_DUST_LIKE).OR. ADB2F404.1344
& (TYPE_AEROSOL(I).EQ.IP_OCEANIC).OR. ADB2F404.1345
& (TYPE_AEROSOL(I).EQ.IP_SOOT).OR. ADB2F404.1346
& (TYPE_AEROSOL(I).EQ.IP_SULPHURIC) ) THEN ADB2F404.1347
N_AEROSOL_RETAIN=N_AEROSOL_RETAIN+1 ADB2F404.1348
INDEX_AEROSOL_RETAIN(N_AEROSOL_RETAIN)=I ADB2F404.1349
N_AEROSOL_FOUND=N_AEROSOL_FOUND+1 ADB2F404.1350
ENDIF ADB2F404.1351
ADB2F404.1352
ENDDO ADB2F404.1353
! ADB2F404.1354
IF (N_AEROSOL_FOUND.NE.5) THEN ADB2F404.1355
! ADB2F404.1356
IERR=I_ERR_FATAL ADB2F404.1357
CMESSAGE='The LW Spectral file lacks some ' ADB2F404.1358
& //'climatological aerosols.' ADB2F404.1359
RETURN ADB2F404.1360
! ADB2F404.1361
ENDIF ADB2F404.1362
ADB2F404.1363
ELSE ADB2F404.1364
! ADB2F404.1365
IERR=I_ERR_FATAL ADB2F404.1366
CMESSAGE='LW Spectral file contains no aerosol data.' ADB2F404.1367
RETURN ADB2F404.1368
! ADB2F404.1369
ENDIF ADB2F404.1370
! ADB2F404.1371
ENDIF ADB2F404.1372
! Check the spectral file for soot aerosols. ALR3F405.178
IF (L_USE_SOOT_DIRECT) THEN ALR3F405.179
IF (L_PRESENT(11)) THEN ALR3F405.180
! Search for the aerosols required for this scheme. ALR3F405.181
N_AEROSOL_FOUND=0 ALR3F405.182
DO I=1, N_AEROSOL ALR3F405.183
IF ((TYPE_AEROSOL(I).EQ.IP_FRESH_SOOT) .OR. ALR3F405.184
& (TYPE_AEROSOL(I).EQ.IP_AGED_SOOT)) THEN ALR3F405.185
N_AEROSOL_RETAIN=N_AEROSOL_RETAIN+1 ALR3F405.186
INDEX_AEROSOL_RETAIN(N_AEROSOL_RETAIN)=I ALR3F405.187
N_AEROSOL_FOUND=N_AEROSOL_FOUND+1 ALR3F405.188
ENDIF ALR3F405.189
ENDDO ALR3F405.190
! ALR3F405.191
IF (N_AEROSOL_FOUND.NE.2) THEN ALR3F405.192
! ALR3F405.193
IERR=I_ERR_FATAL ALR3F405.194
CMESSAGE='The LW Spectral file lacks some ' ALR3F405.195
& //'soot aerosol data.' ALR3F405.196
RETURN ALR3F405.197
! ALR3F405.198
ENDIF ALR3F405.199
! ALR3F405.200
ELSE ALR3F405.201
! ALR3F405.202
! ALR3F405.203
IERR=I_ERR_FATAL ALR3F405.204
CMESSAGE='LW Spectral file contains no soot data.' ALR3F405.205
RETURN ALR3F405.206
! ALR3F405.207
ENDIF ALR3F405.208
! ALR3F405.209
ENDIF ALR3F405.210
! ALR3F405.211
ADB2F404.1373
! ADB2F404.1374
! Check the spectral file for sulphate aerosols. (These are ADB2F404.1375
! required only for the direct effect). ADB2F404.1376
! ADB2F404.1377
IF (L_USE_SULPC_DIRECT) THEN ADB2F404.1378
! ADB2F404.1379
IF (L_PRESENT(11)) THEN ADB2F404.1380
! ADB2F404.1381
! Search for the aerosols required for this scheme. ADB2F404.1382
N_AEROSOL_FOUND=0 ADB2F404.1383
DO I=1, N_AEROSOL ADB2F404.1384
! ADB2F404.1385
IF ( (TYPE_AEROSOL(I).EQ.IP_ACCUM_SULPHATE).OR. ADB2F404.1386
& (TYPE_AEROSOL(I).EQ.IP_AITKEN_SULPHATE) ) THEN ADB2F404.1387
N_AEROSOL_RETAIN=N_AEROSOL_RETAIN+1 ADB2F404.1388
INDEX_AEROSOL_RETAIN(N_AEROSOL_RETAIN)=I ADB2F404.1389
N_AEROSOL_FOUND=N_AEROSOL_FOUND+1 ADB2F404.1390
ENDIF ADB2F404.1391
ADB2F404.1392
ENDDO ADB2F404.1393
! ADB2F404.1394
IF (N_AEROSOL_FOUND.NE.2) THEN ADB2F404.1395
! ADB2F404.1396
IERR=I_ERR_FATAL ADB2F404.1397
CMESSAGE='The LW Spectral file lacks some ' ADB2F404.1398
& //'sulphate aerosols.' ADB2F404.1399
RETURN ADB2F404.1400
! ADB2F404.1401
ENDIF ADB2F404.1402
ADB2F404.1403
ELSE ADB2F404.1404
! ADB2F404.1405
IERR=I_ERR_FATAL ADB2F404.1406
CMESSAGE='LW Spectral file contains no aerosol data.' ADB2F404.1407
RETURN ADB2F404.1408
! ADB2F404.1409
ENDIF ADB2F404.1410
! ADB2F404.1411
ENDIF ADB2F404.1412
! ADB2F404.1413
! Set an appropriate reduced dimension. ADB2F404.1414
NPD_AEROSOL_SPECIES_LW=MAX(N_AEROSOL_RETAIN, 1) ADB2F404.1415
! ADB2F404.1416
! Set the allowed number of humidities from the number of ADB2F404.1417
! retained aerosols. ADB2F404.1418
! ADB2F404.1419
IF (L_PRESENT(11)) THEN SPIN3A.563
DO I=1, N_AEROSOL_RETAIN ADB2F404.1420
IF (I_AEROSOL_PARAMETRIZATION(INDEX_AEROSOL_RETAIN(I)).EQ. ADB2F404.1421
& IP_AEROSOL_PARAM_MOIST) THEN SPIN3A.566
NPD_HUMIDITIES_LW=MAX(NPD_HUMIDITIES_LW ADB2F404.1422
& , NHUMIDITY(INDEX_AEROSOL_RETAIN(I))) ADB2F404.1423
ENDIF SPIN3A.568
ENDDO SPIN3A.569
ENDIF SPIN3A.570
! SPIN3A.571
! SPIN3A.572
! SPIN3A.573
! SPIN3A.574
! TRANSFER THE LARGE NAMELIST TO THE REDUCED SPECTRUM. SPIN3A.575
! SPIN3A.576
! SPIN3A.577
CALL R2_COMPRESS_SPECTRUM
( SPIN3A.630
! Spectral Array in Namelist SPIN3A.631
& L_PRESENT SPIN3A.632
& , N_BAND, WAVE_LENGTH_SHORT , WAVE_LENGTH_LONG SPIN3A.633
& , N_BAND_EXCLUDE, INDEX_EXCLUDE SPIN3A.634
& , SOLAR_FLUX_BAND, RAYLEIGH_COEFFICIENT SPIN3A.635
& , N_ABSORB, N_BAND_ABSORB, INDEX_ABSORB, TYPE_ABSORB SPIN3A.636
& , L_RETAIN_ABSORB, N_ABSORB_RETAIN, INDEX_ABSORB_RETAIN ADB1F405.883
& , COMPRESSED_INDEX, I_BAND_ESFT, K_ESFT, W_ESFT, I_SCALE_ESFT ADB1F405.884
& , I_SCALE_FNC, SCALE_VECTOR, P_REFERENCE, T_REFERENCE SPIN3A.638
& , N_DEG_FIT, THERMAL_COEFFICIENT, T_REF_PLANCK SPIN3A.639
& , I_SPEC_SURFACE, L_SURFACE, SURFACE_ALBEDO SPIN3A.640
& , N_DIR_ALBEDO_FIT, DIRECT_ALBEDO_PARM, EMISSIVITY_GROUND SPIN3A.641
& , N_BAND_CONTINUUM, INDEX_CONTINUUM, INDEX_WATER SPIN3A.642
& , K_CONTINUUM, I_SCALE_FNC_CONT, SCALE_CONTINUUM SPIN3A.643
& , P_REF_CONTINUUM, T_REF_CONTINUUM SPIN3A.644
& , L_DROP_TYPE, I_DROP_PARAMETRIZATION, DROP_PARAMETER_LIST SPIN3A.645
& , DROP_PARM_MIN_DIM, DROP_PARM_MAX_DIM ADB2F404.1424
& , L_ICE_TYPE, I_ICE_PARAMETRIZATION, ICE_PARAMETER_LIST SPIN3A.646
& , ICE_PARM_MIN_DIM, ICE_PARM_MAX_DIM ADB2F404.1425
& , N_AEROSOL, TYPE_AEROSOL SPIN3A.647
& , N_AEROSOL_RETAIN, INDEX_AEROSOL_RETAIN ADB2F404.1426
& , L_AEROSOL_SPECIES, AEROSOL_ABSORPTION SPIN3A.648
& , AEROSOL_SCATTERING, AEROSOL_ASYMMETRY SPIN3A.649
& , NHUMIDITY, HUMIDITIES, I_AEROSOL_PARAMETRIZATION SPIN3A.650
& , L_DOPPLER_PRESENT, DOPPLER_CORRECTION SPIN3A.651
! Reduced Spectral Array SPIN3A.660
*CALL LWSARG3A
ADB2F404.1427
& ) SPIN3A.712
! SPIN3A.713
! SPIN3A.714
! SPIN3A.715
RETURN SPIN3A.716
END SPIN3A.717
!+ Subroutine to transfer spectrum to reduced array. SPIN3A.718
! SPIN3A.719
! Purpose: SPIN3A.720
! Spectral data from the large dynamically allocated array SPIN3A.721
! are transferred to the reduced array. SPIN3A.722
! SPIN3A.723
! Method: SPIN3A.724
! Elements are copied across. SPIN3A.725
! SPIN3A.726
! Current Owner of Code: J. M. Edwards SPIN3A.727
! SPIN3A.728
! History: SPIN3A.729
! Version Date Comment SPIN3A.730
! 4.0 27-07-95 Original Code SPIN3A.731
! (J. M. Edwards) SPIN3A.732
! 4.4 03-09-97 Coding changes ADB2F404.1428
! associated with the ADB2F404.1429
! removal of pointers ADB2F404.1430
! into the spectral data. ADB2F404.1431
! Capability to select ADB2F404.1432
! aerosols added. ADB2F404.1433
! (J. M. Edwards) ADB2F404.1434
! 4.5 18-05-98 Coding to allow ADB1F405.885
! selection of gases ADB1F405.886
! from the spectral ADB1F405.887
! file. ADB1F405.888
! (J. M. Edwards) ADB1F405.889
! SPIN3A.733
! Description of Code: SPIN3A.734
! FORTRAN 77 with extensions listed in documentation. SPIN3A.735
! SPIN3A.736
!- --------------------------------------------------------------------- SPIN3A.737
SUBROUTINE R2_COMPRESS_SPECTRUM( 2SPIN3A.738
! Original Spectrum SPIN3A.739
& L_PRESENT SPIN3A.740
& , N_BAND, WAVE_LENGTH_SHORT , WAVE_LENGTH_LONG SPIN3A.741
& , N_BAND_EXCLUDE, INDEX_EXCLUDE SPIN3A.742
& , SOLAR_FLUX_BAND, RAYLEIGH_COEFFICIENT SPIN3A.743
& , N_ABSORB, N_BAND_ABSORB, INDEX_ABSORB, TYPE_ABSORB SPIN3A.744
& , L_RETAIN_ABSORB, N_ABSORB_RETAIN, INDEX_ABSORB_RETAIN ADB1F405.890
& , COMPRESSED_INDEX, I_BAND_ESFT, K_ESFT, W_ESFT, I_SCALE_ESFT ADB1F405.891
& , I_SCALE_FNC, SCALE_VECTOR, P_REFERENCE, T_REFERENCE SPIN3A.746
& , N_DEG_FIT, THERMAL_COEFFICIENT, T_REF_PLANCK SPIN3A.747
& , I_SPEC_SURFACE, L_SURFACE, SURFACE_ALBEDO SPIN3A.748
& , N_DIR_ALBEDO_FIT, DIRECT_ALBEDO_PARM, EMISSIVITY_GROUND SPIN3A.749
& , N_BAND_CONTINUUM, INDEX_CONTINUUM, INDEX_WATER SPIN3A.750
& , K_CONTINUUM, I_SCALE_FNC_CONT, SCALE_CONTINUUM SPIN3A.751
& , P_REF_CONTINUUM, T_REF_CONTINUUM SPIN3A.752
& , L_DROP_TYPE, I_DROP_PARAMETRIZATION, DROP_PARAMETER_LIST SPIN3A.753
& , DROP_PARM_MIN_DIM, DROP_PARM_MAX_DIM ADB2F404.1435
& , L_ICE_TYPE, I_ICE_PARAMETRIZATION, ICE_PARAMETER_LIST SPIN3A.754
& , ICE_PARM_MIN_DIM, ICE_PARM_MAX_DIM ADB2F404.1436
& , N_AEROSOL, TYPE_AEROSOL SPIN3A.755
& , N_AEROSOL_RETAIN, INDEX_AEROSOL_RETAIN ADB2F404.1437
& , L_AEROSOL_SPECIES, AEROSOL_ABSORPTION SPIN3A.756
& , AEROSOL_SCATTERING, AEROSOL_ASYMMETRY SPIN3A.757
& , NHUMIDITY, HUMIDITIES, I_AEROSOL_PARAMETRIZATION SPIN3A.758
& , L_DOPPLER_PRESENT, DOPPLER_CORRECTION SPIN3A.759
! Reduced Spectral Array ADB2F404.1438
& , NPDR_TYPE, NPDR_BAND, NPDR_EXCLUDE SPIN3A.761
& , NPDR_SPECIES, NPDR_ESFT_TERM, NPDR_SCALE_FNC SPIN3A.762
& , NPDR_SCALE_VARIABLE, NPDR_THERMAL_COEFF SPIN3A.763
& , NPDR_SURFACE, NPDR_ALBEDO_PARM SPIN3A.764
& , NPDR_CONTINUUM, NPDR_DROP_TYPE, NPDR_ICE_TYPE SPIN3A.765
& , NPDR_CLOUD_PARAMETER, NPDR_AEROSOL_SPECIES SPIN3A.766
& , NPDR_HUMIDITIES SPIN3A.767
& , L_PRESENT_RD SPIN3A.776
& , N_BAND_RD, WAVE_LENGTH_SHORT_RD , WAVE_LENGTH_LONG_RD SPIN3A.777
& , N_BAND_EXCLUDE_RD, INDEX_EXCLUDE_RD SPIN3A.778
& , SOLAR_FLUX_BAND_RD, RAYLEIGH_COEFFICIENT_RD SPIN3A.779
& , N_ABSORB_RD, N_BAND_ABSORB_RD, INDEX_ABSORB_RD SPIN3A.780
& , TYPE_ABSORB_RD SPIN3A.781
& , I_BAND_ESFT_RD, I_SCALE_ESFT_RD, I_SCALE_FNC_RD ADB2F404.1439
& , K_ESFT_RD, W_ESFT_RD, SCALE_VECTOR_RD ADB2F404.1440
& , P_REFERENCE_RD, T_REFERENCE_RD SPIN3A.784
& , N_DEG_FIT_RD, THERMAL_COEFFICIENT_RD, T_REF_PLANCK_RD SPIN3A.785
& , I_SPEC_SURFACE_RD, N_DIR_ALBEDO_FIT_RD ADB2F404.1441
& , L_SURFACE_RD, SURFACE_ALBEDO_RD, DIRECT_ALBEDO_PARM_RD ADB2F404.1442
& , EMISSIVITY_GROUND_RD SPIN3A.788
& , N_BAND_CONTINUUM_RD, INDEX_CONTINUUM_RD, INDEX_WATER_RD SPIN3A.789
& , I_SCALE_FNC_CONT_RD, K_CONTINUUM_RD, SCALE_CONTINUUM_RD ADB2F404.1443
& , P_REF_CONTINUUM_RD, T_REF_CONTINUUM_RD SPIN3A.791
& , I_DROP_PARAMETRIZATION_RD, L_DROP_TYPE_RD ADB2F404.1444
& , DROP_PARAMETER_LIST_RD SPIN3A.793
& , DROP_PARM_MIN_DIM_RD, DROP_PARM_MAX_DIM_RD ADB2F404.1445
& , N_AEROSOL_RD, TYPE_AEROSOL_RD, I_AEROSOL_PARAMETRIZATION_RD ADB2F404.1446
& , NHUMIDITY_RD, HUMIDITIES_RD ADB2F404.1447
& , L_AEROSOL_SPECIES_RD, AEROSOL_ABSORPTION_RD SPIN3A.797
& , AEROSOL_SCATTERING_RD, AEROSOL_ASYMMETRY_RD SPIN3A.798
& , I_ICE_PARAMETRIZATION_RD, L_ICE_TYPE_RD ADB2F404.1448
& , ICE_PARAMETER_LIST_RD ADB2F404.1449
& , ICE_PARM_MIN_DIM_RD, ICE_PARM_MAX_DIM_RD ADB2F404.1450
& , L_DOPPLER_PRESENT_RD, DOPPLER_CORRECTION_RD SPIN3A.800
& ) SPIN3A.801
! SPIN3A.802
! SPIN3A.803
IMPLICIT NONE ADB1F405.892
! ADB1F405.893
! ADB1F405.894
! SPIN3A.804
! ------------------------------------------------------------------ SPIN3A.805
! DECLARATION OF INITIAL SPECTRUM. SPIN3A.806
! ------------------------------------------------------------------ SPIN3A.807
*CALL MXSIZE3A
SPIN3A.808
*CALL SPDEC3A
SPIN3A.809
! ADB2F404.1451
! AUXILIARY VARIABLES USED TO SELECT PARTS OF THE INITIAL SPECTRUM ADB2F404.1452
LOGICAL !, INTENT(IN) ADB1F405.895
& L_RETAIN_ABSORB(NPD_SPECIES) ADB1F405.896
! FLAGS FOR THE RETENTION OF GASES IN THE SPECTRAL FILE ADB1F405.897
INTEGER !, INTENT(IN) ADB2F404.1453
& N_ABSORB_RETAIN ADB1F405.898
! NUMBER OF ABSORBERS TO BE RETAINED ADB1F405.899
& , INDEX_ABSORB_RETAIN(NPD_SPECIES) ADB1F405.900
! INDICES OF ABSORBERS TO BE RETAINED ADB1F405.901
& , COMPRESSED_INDEX(NPD_SPECIES) ADB1F405.902
! MAPPING FROM OLD TO NEW INDICES OF ABSORBERS ADB1F405.903
& , N_AEROSOL_RETAIN ADB1F405.904
! NUMBER OF AEROSOLS IN THE INITIAL SPECTRUM TO BE USED ADB2F404.1455
! IN THE CALCULATION ADB2F404.1456
& , INDEX_AEROSOL_RETAIN(NPD_AEROSOL_SPECIES) ADB2F404.1457
! INDICES OF THE RETAINED AEROSOLS ADB2F404.1458
! SPIN3A.810
! SPIN3A.811
! ------------------------------------------------------------------ SPIN3A.812
! DECLARATION OF REDUCED SPECTRUM. SPIN3A.813
! ------------------------------------------------------------------ SPIN3A.814
! SPIN3A.815
! DIMENSIONS OF REDUCED ARRAY: SPIN3A.816
! SPIN3A.817
INTEGER SPIN3A.818
& NPDR_BAND SPIN3A.819
! NUMBER OF SPECTRAL BANDS SPIN3A.820
& , NPDR_EXCLUDE SPIN3A.821
! NUMER OF EXCLUDED BANDS SPIN3A.822
& , NPDR_ESFT_TERM SPIN3A.823
! NUMBER OF ESFT TERMS SPIN3A.824
& , NPDR_TYPE SPIN3A.825
! NUMBER OF DATA TYPES SPIN3A.826
& , NPDR_SPECIES SPIN3A.827
! NUMBER OF GASEOUS SPECIES SPIN3A.828
& , NPDR_SCALE_FNC SPIN3A.829
! NUMBER OF SCALING FUNCTIONS SPIN3A.830
& , NPDR_SCALE_VARIABLE SPIN3A.831
! NUMBER OF SCALING VARIABLES SPIN3A.832
& , NPDR_SURFACE SPIN3A.833
! NUMBER OF SURFACE TYPES SPIN3A.834
& , NPDR_ALBEDO_PARM SPIN3A.835
! NUMBER OF ALBEDO PARAMETERS SPIN3A.836
& , NPDR_CONTINUUM SPIN3A.837
! NUMBER OF CONTINUA SPIN3A.838
& , NPDR_DROP_TYPE SPIN3A.839
! NUMBER OF DROP TYPES SPIN3A.840
& , NPDR_ICE_TYPE SPIN3A.841
! NUMBER OF ICE CRYSTAL TYPES SPIN3A.842
& , NPDR_AEROSOL_SPECIES SPIN3A.843
! NUMBER OF AEROSOL SPECIES SPIN3A.844
& , NPDR_THERMAL_COEFF SPIN3A.845
! NUMBER OF THERMAL COEFFICIENTS SPIN3A.846
& , NPDR_CLOUD_PARAMETER SPIN3A.847
! MAX NUMBER OF CLOUD PARAMETERS SPIN3A.848
& , NPDR_HUMIDITIES SPIN3A.849
! MAXIMUM NUMBER OF HUMIDITIES SPIN3A.886
! SPIN3A.887
! SPIN3A.888
! SPIN3A.889
! GENERAL FIELDS: SPIN3A.890
! SPIN3A.891
LOGICAL SPIN3A.892
& L_PRESENT_RD(0: NPDR_TYPE) SPIN3A.893
! FLAG FOR TYPES OF DATA PRESENT SPIN3A.894
! SPIN3A.895
! SPIN3A.896
! SPIN3A.897
! PROPERTIES OF THE SPECTRAL BANDS: SPIN3A.898
! SPIN3A.899
INTEGER SPIN3A.900
& N_BAND_RD SPIN3A.901
! NUMBER OF SPECTRAL BANDS SPIN3A.902
! SPIN3A.903
REAL SPIN3A.904
& WAVE_LENGTH_SHORT_RD(NPDR_BAND) SPIN3A.905
! SHORTER WAVELENGTH LIMITS SPIN3A.906
& , WAVE_LENGTH_LONG_RD(NPDR_BAND) SPIN3A.907
! LONGER WAVELENGTH LIMITS SPIN3A.908
! SPIN3A.909
! SPIN3A.910
! SPIN3A.911
! EXCLUSION OF SPECIFIC BANDS FROM PARTS OF THE SPECTRUM: SPIN3A.912
INTEGER SPIN3A.913
& N_BAND_EXCLUDE_RD(NPDR_BAND) SPIN3A.914
! NUMBER OF EXCLUDED BANDS WITHIN EACH SPECTRAL BAND SPIN3A.915
& , INDEX_EXCLUDE_RD(NPDR_EXCLUDE, NPDR_BAND) SPIN3A.916
! INDICES OF EXCLUDED BANDS SPIN3A.917
! SPIN3A.918
! SPIN3A.919
! SPIN3A.920
! FIELDS FOR THE SOLAR FLUX: SPIN3A.921
! SPIN3A.922
REAL SPIN3A.923
& SOLAR_FLUX_BAND_RD(NPDR_BAND) SPIN3A.924
! FRACTION OF THE INCIDENT SOLAR FLUX IN EACH BAND SPIN3A.925
! SPIN3A.926
! SPIN3A.927
! SPIN3A.928
! FIELDS FOR RAYLEIGH SCATTERING: SPIN3A.929
! SPIN3A.930
REAL SPIN3A.931
& RAYLEIGH_COEFFICIENT_RD(NPDR_BAND) SPIN3A.932
! RAYLEIGH COEFFICIENTS SPIN3A.933
! SPIN3A.934
! SPIN3A.935
! SPIN3A.936
! FIELDS FOR GASEOUS ABSORPTION: SPIN3A.937
! SPIN3A.938
INTEGER SPIN3A.939
& N_ABSORB_RD SPIN3A.940
! NUMBER OF ABSORBERS SPIN3A.941
& , N_BAND_ABSORB_RD(NPDR_BAND) SPIN3A.942
! NUMBER OF ABSORBERS IN EACH BAND SPIN3A.943
& , INDEX_ABSORB_RD(NPDR_SPECIES, NPDR_BAND) SPIN3A.944
! LIST OF ABSORBERS IN EACH BAND SPIN3A.945
& , TYPE_ABSORB_RD(NPDR_SPECIES) SPIN3A.946
! TYPES OF EACH GAS IN THE SPECTRAL FILE SPIN3A.947
& , I_BAND_ESFT_RD(NPDR_BAND, NPDR_SPECIES) SPIN3A.948
! NUMBER OF ESFT TERMS IN BAND FOR EACH GAS SPIN3A.949
& , I_SCALE_ESFT_RD(NPDR_BAND, NPDR_SPECIES) SPIN3A.950
! TYPE OF ESFT SCALING SPIN3A.951
& , I_SCALE_FNC_RD(NPDR_BAND, NPDR_SPECIES) SPIN3A.952
! TYPE OF SCALING FUNCTION SPIN3A.953
! SPIN3A.954
REAL SPIN3A.955
& K_ESFT_RD(NPDR_ESFT_TERM, NPDR_BAND, NPDR_SPECIES) SPIN3A.956
! ESFT EXPONENTS SPIN3A.957
& , W_ESFT_RD(NPDR_ESFT_TERM, NPDR_BAND, NPDR_SPECIES) SPIN3A.958
! ESFT WEIGHTS SPIN3A.959
& , SCALE_VECTOR_RD(NPDR_SCALE_VARIABLE, NPDR_ESFT_TERM SPIN3A.960
& , NPDR_BAND, NPDR_SPECIES) SPIN3A.961
! SCALING PARAMETERS FOR EACH ABSORBER AND TERM SPIN3A.962
& , P_REFERENCE_RD(NPDR_SPECIES, NPDR_BAND) SPIN3A.963
! REFERENCE PRESSURE FOR SCALING FUNCTION SPIN3A.964
& , T_REFERENCE_RD(NPDR_SPECIES, NPDR_BAND) SPIN3A.965
! REFERENCE TEMPERATURE FOR SCALING FUNCTION SPIN3A.966
! SPIN3A.967
! SPIN3A.968
! SPIN3A.969
! REPRESENTATION OF THE PLANCKIAN: SPIN3A.970
! SPIN3A.971
INTEGER SPIN3A.972
& N_DEG_FIT_RD SPIN3A.973
! DEGREE OF THERMAL POLYNOMIAL SPIN3A.974
! SPIN3A.975
REAL SPIN3A.976
& THERMAL_COEFFICIENT_RD(0: NPDR_THERMAL_COEFF-1, NPDR_BAND) SPIN3A.977
! COEFFICIENTS IN POLYNOMIAL FIT TO SOURCE FUNCTION SPIN3A.978
& , T_REF_PLANCK_RD SPIN3A.979
! PLANCKIAN REFERENCE TEMPERATURE SPIN3A.980
! SPIN3A.981
! SPIN3A.982
! SPIN3A.983
! SURFACE PROPERTIES: SPIN3A.984
! SPIN3A.985
INTEGER SPIN3A.986
& I_SPEC_SURFACE_RD(NPDR_SURFACE) SPIN3A.987
! METHOD OF SPECIFYING PROPERTIES OF SURFACE SPIN3A.988
& , N_DIR_ALBEDO_FIT_RD(NPDR_SURFACE) SPIN3A.989
! NUMBER OF PARAMETERS FITTING THE DIRECT ALBEDO SPIN3A.990
! SPIN3A.991
LOGICAL SPIN3A.992
& L_SURFACE_RD(NPDR_SURFACE) SPIN3A.993
! SURFACE TYPES INCLUDED SPIN3A.994
! SPIN3A.995
REAL SPIN3A.996
& SURFACE_ALBEDO_RD(NPDR_BAND, NPDR_SURFACE) SPIN3A.997
! SURFACE ALBEDOS SPIN3A.998
& , DIRECT_ALBEDO_PARM_RD(0: NPDR_ALBEDO_PARM SPIN3A.999
& , NPD_BAND, NPD_SURFACE) SPIN3A.1000
! COEFFICIENTS FOR FITTING DIRECT ALBEDO SPIN3A.1001
& , EMISSIVITY_GROUND_RD(NPDR_BAND, NPDR_SURFACE) SPIN3A.1002
! SURFACE EMISSIVITIES SPIN3A.1003
! SPIN3A.1004
! SPIN3A.1005
! SPIN3A.1006
! FIELDS FOR CONTINUA: SPIN3A.1007
! SPIN3A.1008
INTEGER SPIN3A.1009
& N_BAND_CONTINUUM_RD(NPDR_BAND) SPIN3A.1010
! NUMBER OF CONTINUA IN EACH BAND SPIN3A.1011
& , INDEX_CONTINUUM_RD(NPDR_BAND, NPDR_CONTINUUM) SPIN3A.1012
! LIST OF CONTINUA IN EACH BAND ADB1F401.956
& , INDEX_WATER_RD SPIN3A.1014
! INDEX OF WATER VAPOUR SPIN3A.1015
& , I_SCALE_FNC_CONT_RD(NPDR_BAND, NPDR_CONTINUUM) SPIN3A.1016
! TYPE OF SCALING FUNCTION FOR CONTINUUM SPIN3A.1017
! SPIN3A.1018
REAL SPIN3A.1019
& K_CONTINUUM_RD(NPDR_BAND, NPDR_CONTINUUM) SPIN3A.1020
! GREY EXTINCTION COEFFICIENTS FOR CONTINUUM SPIN3A.1021
& , SCALE_CONTINUUM_RD(NPDR_SCALE_VARIABLE SPIN3A.1022
& , NPDR_BAND, NPDR_CONTINUUM) SPIN3A.1023
! SCALING PARAMETERS FOR CONTINUUM SPIN3A.1024
& , P_REF_CONTINUUM_RD(NPDR_CONTINUUM, NPDR_BAND) SPIN3A.1025
! REFERENCE PRESSURE FOR SCALING OF CONTINUUM SPIN3A.1026
& , T_REF_CONTINUUM_RD(NPDR_CONTINUUM, NPDR_BAND) SPIN3A.1027
! REFERENCE TEMPERATURE FOR SCALING OF CONTINUUM SPIN3A.1028
! SPIN3A.1029
! SPIN3A.1030
! SPIN3A.1031
! FIELDS FOR WATER DROPLETS: SPIN3A.1032
! SPIN3A.1033
INTEGER SPIN3A.1034
& I_DROP_PARAMETRIZATION_RD(NPDR_DROP_TYPE) SPIN3A.1035
! PARAMETRIZATION TYPE OF DROPLETS SPIN3A.1036
! SPIN3A.1037
LOGICAL SPIN3A.1038
& L_DROP_TYPE_RD(NPDR_DROP_TYPE) SPIN3A.1039
! TYPES OF DROPLET PRESENT SPIN3A.1040
! SPIN3A.1041
REAL SPIN3A.1042
& DROP_PARAMETER_LIST_RD(NPDR_CLOUD_PARAMETER SPIN3A.1043
& , NPDR_BAND, NPDR_DROP_TYPE) SPIN3A.1044
! PARAMETERS USED TO FIT OPTICAL PROPERTIES OF CLOUDS SPIN3A.1045
& , DROP_PARM_MIN_DIM_RD(NPDR_DROP_TYPE) ADB2F404.1459
! MINIMUM SIZE OF DROPLET PERMITTED IN THE PARAMETRIZATION ADB2F404.1460
& , DROP_PARM_MAX_DIM_RD(NPDR_DROP_TYPE) ADB2F404.1461
! MAXIMUM SIZE OF DROPLET PERMITTED IN THE PARAMETRIZATION ADB2F404.1462
! SPIN3A.1046
! SPIN3A.1047
! SPIN3A.1048
! FIELDS FOR AEROSOLS: SPIN3A.1049
! SPIN3A.1050
INTEGER SPIN3A.1051
& N_AEROSOL_RD SPIN3A.1052
! NUMBER OF SPECIES OF AEROSOL SPIN3A.1053
& , TYPE_AEROSOL_RD(NPDR_AEROSOL_SPECIES) SPIN3A.1054
! TYPES OF AEROSOLS SPIN3A.1055
& , I_AEROSOL_PARAMETRIZATION_RD(NPDR_AEROSOL_SPECIES) SPIN3A.1056
! PARAMETRIZATION OF AEROSOLS SPIN3A.1057
& , NHUMIDITY_RD(NPDR_AEROSOL_SPECIES) SPIN3A.1058
! NUMBERS OF HUMIDITIES SPIN3A.1059
! SPIN3A.1060
LOGICAL SPIN3A.1061
& L_AEROSOL_SPECIES_RD(NPDR_AEROSOL_SPECIES) SPIN3A.1062
! AEROSOL SPECIES INCLUDED SPIN3A.1063
! SPIN3A.1064
REAL SPIN3A.1065
& AEROSOL_ABSORPTION_RD(NPDR_HUMIDITIES, NPDR_AEROSOL_SPECIES SPIN3A.1066
& , NPDR_BAND) SPIN3A.1067
! ABSORPTION BY AEROSOLS SPIN3A.1068
& , AEROSOL_SCATTERING_RD(NPDR_HUMIDITIES, NPDR_AEROSOL_SPECIES SPIN3A.1069
& , NPDR_BAND) SPIN3A.1070
! SCATTERING BY AEROSOLS SPIN3A.1071
& , AEROSOL_ASYMMETRY_RD(NPDR_HUMIDITIES, NPDR_AEROSOL_SPECIES SPIN3A.1072
& , NPDR_BAND) SPIN3A.1073
! ASYMMETRY OF AEROSOLS SPIN3A.1074
& , HUMIDITIES_RD(NPDR_HUMIDITIES, NPDR_AEROSOL_SPECIES) SPIN3A.1075
! HUMIDITIES FOR COMPONENTS SPIN3A.1076
! SPIN3A.1077
! SPIN3A.1078
! SPIN3A.1079
! FIELDS FOR ICE CRYSTALS: SPIN3A.1080
! SPIN3A.1081
INTEGER SPIN3A.1082
& I_ICE_PARAMETRIZATION_RD(NPDR_ICE_TYPE) SPIN3A.1083
! TYPES OF PARAMETRIZATION OF ICE CRYSTALS SPIN3A.1084
! SPIN3A.1085
LOGICAL SPIN3A.1086
& L_ICE_TYPE_RD(NPDR_ICE_TYPE) SPIN3A.1087
! TYPES OF ICE CRYSTAL PRESENT SPIN3A.1088
! SPIN3A.1089
REAL SPIN3A.1090
& ICE_PARAMETER_LIST_RD(NPDR_CLOUD_PARAMETER SPIN3A.1091
& , NPDR_BAND, NPDR_ICE_TYPE) SPIN3A.1092
! PARAMETERS USED TO FIT SINGLE SCATTERING OF ICE CRYSTALS SPIN3A.1093
& , ICE_PARM_MIN_DIM_RD(NPDR_ICE_TYPE) ADB2F404.1463
! MINIMUM SIZE OF ICE CRYSTAL PERMITTED ADB2F404.1464
! IN THE PARAMETRIZATION ADB2F404.1465
& , ICE_PARM_MAX_DIM_RD(NPDR_ICE_TYPE) ADB2F404.1466
! MAXIMUM SIZE OF ICE CRYSTAL PERMITTED ADB2F404.1467
! IN THE PARAMETRIZATION ADB2F404.1468
! SPIN3A.1094
! SPIN3A.1095
! SPIN3A.1096
! FIELDS FOR DOPPLER BROADENING: SPIN3A.1097
! SPIN3A.1098
LOGICAL SPIN3A.1099
& L_DOPPLER_PRESENT_RD(NPDR_SPECIES) SPIN3A.1100
! FLAG FOR DOPPLER BROADENING FOR EACH SPECIES SPIN3A.1101
! SPIN3A.1102
REAL SPIN3A.1103
& DOPPLER_CORRECTION_RD(NPDR_SPECIES) SPIN3A.1104
! DOPPLER CORRECTION TERMS SPIN3A.1105
! SPIN3A.1106
! SPIN3A.1107
! SPIN3A.1108
! LOCAL VARIABLES. SPIN3A.1109
INTEGER SPIN3A.1110
& I SPIN3A.1111
! LOOP VARIABLE SPIN3A.1112
& , J SPIN3A.1113
! LOOP VARIABLE SPIN3A.1114
& , K SPIN3A.1115
! LOOP VARIABLE SPIN3A.1116
& , L SPIN3A.1117
! LOOP VARIABLE SPIN3A.1118
& , N_PARAMETER SPIN3A.1119
! NUMBER OF PARAMETERS IN SCHEME. SPIN3A.1120
& , I_SPECIES SPIN3A.1121
! SPECIES OF GAS SPIN3A.1122
& , I_CONTINUUM ADB1F405.905
! TYPE OF CONTINUUM ADB1F405.906
& , I_INITIAL ADB2F404.1469
! INDEXING NUMBER IN INITIAL SPECTRAL FILE ADB2F404.1470
! SPIN3A.1123
! SPIN3A.1124
*CALL SCLFNC3A
SPIN3A.1125
*CALL WCLPRM3A
SPIN3A.1126
*CALL ICLPRM3A
SPIN3A.1127
*CALL AERPRM3A
SPIN3A.1128
*CALL SCLFND3A
SPIN3A.1129
! SPIN3A.1130
! SPIN3A.1131
! SPIN3A.1132
! SPIN3A.1151
! SPIN3A.1152
! INITAILIZE ALL BLOCKS OF THE COMPRESSED SPECTRUM TO .FALSE. ADB1F401.957
DO I=1, NPDR_TYPE ADB2F404.1471
L_PRESENT_RD(I)=.FALSE. ADB1F401.959
ENDDO ADB1F401.960
! ADB1F401.961
! ADB1F401.962
! PROCEED THROUGH EACH BLOCK OF THE SPECTRAL FILE TRANSFERRING SPIN3A.1153
! THE DATA FROM THE INPUT ARRAY TO THE REDUCED ARRAY. SPIN3A.1154
! SPIN3A.1155
! SPIN3A.1156
! BLOCK 0: SPIN3A.1157
! SPIN3A.1158
IF (L_PRESENT(0)) THEN SPIN3A.1159
L_PRESENT_RD(0)=.TRUE. ADB1F401.963
N_BAND_RD=N_BAND SPIN3A.1160
N_ABSORB_RD=N_ABSORB_RETAIN ADB1F405.907
N_AEROSOL_RD=N_AEROSOL_RETAIN ADB2F404.1472
DO I=1, N_ABSORB_RETAIN ADB1F405.908
TYPE_ABSORB_RD(I)=TYPE_ABSORB(INDEX_ABSORB_RETAIN(I)) ADB1F405.909
ENDDO SPIN3A.1165
DO I=1, N_AEROSOL_RETAIN ADB2F404.1473
TYPE_AEROSOL_RD(I)=TYPE_AEROSOL(INDEX_AEROSOL_RETAIN(I)) ADB2F404.1474
ENDDO SPIN3A.1168
ENDIF SPIN3A.1169
! SPIN3A.1170
! BLOCK 1: SPIN3A.1171
IF (L_PRESENT(1)) THEN SPIN3A.1172
L_PRESENT_RD(1)=.TRUE. ADB1F401.964
DO I=1, N_BAND SPIN3A.1173
WAVE_LENGTH_SHORT_RD(I)=WAVE_LENGTH_SHORT(I) SPIN3A.1174
WAVE_LENGTH_LONG_RD(I)=WAVE_LENGTH_LONG(I) SPIN3A.1175
ENDDO SPIN3A.1176
ENDIF SPIN3A.1177
! SPIN3A.1178
! BLOCK 2: SPIN3A.1179
IF (L_PRESENT(2)) THEN SPIN3A.1180
L_PRESENT_RD(2)=.TRUE. ADB1F401.965
DO I=1, N_BAND SPIN3A.1181
SOLAR_FLUX_BAND_RD(I)=SOLAR_FLUX_BAND(I) SPIN3A.1182
ENDDO SPIN3A.1183
ENDIF SPIN3A.1184
! SPIN3A.1185
! BLOCK 3: SPIN3A.1186
IF (L_PRESENT(3)) THEN SPIN3A.1187
L_PRESENT_RD(3)=.TRUE. ADB1F401.966
DO I=1, N_BAND SPIN3A.1188
RAYLEIGH_COEFFICIENT_RD(I)=RAYLEIGH_COEFFICIENT(I) SPIN3A.1189
ENDDO SPIN3A.1190
ENDIF SPIN3A.1191
! SPIN3A.1192
! BLOCK 4: SPIN3A.1193
IF (L_PRESENT(4)) THEN SPIN3A.1194
L_PRESENT_RD(4)=.TRUE. ADB1F401.967
DO I=1, N_BAND SPIN3A.1195
N_BAND_ABSORB_RD(I)=0 ADB1F405.910
DO J=1, N_BAND_ABSORB(I) SPIN3A.1197
IF (L_RETAIN_ABSORB(INDEX_ABSORB(J, I))) THEN ADB1F405.911
N_BAND_ABSORB_RD(I)=N_BAND_ABSORB_RD(I)+1 ADB1F405.912
INDEX_ABSORB_RD(N_BAND_ABSORB_RD(I), I) ADB1F405.913
& =COMPRESSED_INDEX(INDEX_ABSORB(J, I)) ADB1F405.914
ENDIF ADB1F405.915
ENDDO SPIN3A.1199
ENDDO SPIN3A.1200
ENDIF SPIN3A.1201
! SPIN3A.1202
! BLOCK 5: SPIN3A.1203
IF (L_PRESENT(5)) THEN SPIN3A.1204
L_PRESENT_RD(5)=.TRUE. ADB1F401.968
DO I=1, N_BAND SPIN3A.1205
DO J=1, N_BAND_ABSORB_RD(I) ADB1F405.916
I_SPECIES=INDEX_ABSORB_RD(J, I) SPIN3A.1207
I_INITIAL=INDEX_ABSORB_RETAIN(I_SPECIES) ADB1F405.917
I_BAND_ESFT_RD(I, I_SPECIES)=I_BAND_ESFT(I, I_INITIAL) ADB1F405.918
I_SCALE_ESFT_RD(I, I_SPECIES)=I_SCALE_ESFT(I, I_INITIAL) ADB1F405.919
I_SCALE_FNC_RD(I, I_SPECIES)=I_SCALE_FNC(I, I_INITIAL) ADB1F405.920
P_REFERENCE_RD(I_SPECIES, I)=P_REFERENCE(I_INITIAL, I) ADB1F405.921
T_REFERENCE_RD(I_SPECIES, I)=T_REFERENCE(I_INITIAL, I) ADB1F405.922
DO K=1, I_BAND_ESFT(I, I_INITIAL) ADB1F405.923
K_ESFT_RD(K, I, I_SPECIES)=K_ESFT(K, I, I_INITIAL) ADB1F405.924
W_ESFT_RD(K, I, I_SPECIES)=W_ESFT(K, I, I_INITIAL) ADB1F405.925
DO L=1, N_SCALE_VARIABLE(I_SCALE_FNC(I, I_INITIAL)) ADB1F405.926
SCALE_VECTOR_RD(L, K, I, I_SPECIES) SPIN3A.1217
& =SCALE_VECTOR(L, K, I, I_INITIAL) ADB1F405.927
ENDDO SPIN3A.1219
ENDDO SPIN3A.1220
ENDDO SPIN3A.1221
ENDDO SPIN3A.1222
ENDIF SPIN3A.1223
! SPIN3A.1224
! BLOCK 6: SPIN3A.1225
IF (L_PRESENT(6)) THEN SPIN3A.1226
L_PRESENT_RD(6)=.TRUE. ADB1F401.969
N_DEG_FIT_RD=N_DEG_FIT SPIN3A.1227
T_REF_PLANCK_RD=T_REF_PLANCK SPIN3A.1228
DO I=1, N_BAND SPIN3A.1229
DO J=0, N_DEG_FIT SPIN3A.1230
THERMAL_COEFFICIENT_RD(J, I)=THERMAL_COEFFICIENT(J, I) SPIN3A.1231
ENDDO SPIN3A.1232
ENDDO SPIN3A.1233
ENDIF SPIN3A.1234
! SPIN3A.1235
! BLOCK 7: SPIN3A.1236
! SPIN3A.1237
! OMITTED SINCE SURFACE ALBEDOS ARE PROVIDED BY THE MODEL. SPIN3A.1238
! SPIN3A.1239
! BLOCK 8: SPIN3A.1240
IF (L_PRESENT(8)) THEN SPIN3A.1241
L_PRESENT_RD(8)=.TRUE. ADB1F401.970
DO I=1, N_BAND SPIN3A.1242
N_BAND_CONTINUUM_RD(I)=N_BAND_CONTINUUM(I) SPIN3A.1243
DO J=1, N_BAND_CONTINUUM(I) SPIN3A.1244
INDEX_CONTINUUM_RD(I, J)=INDEX_CONTINUUM(I, J) SPIN3A.1245
ENDDO SPIN3A.1246
ENDDO SPIN3A.1247
! ADB1F405.928
INDEX_WATER_RD=0 ADB1F405.929
DO I=1, N_ABSORB_RETAIN ADB1F405.930
IF (INDEX_ABSORB_RETAIN(I).EQ.INDEX_WATER) THEN ADB1F405.931
INDEX_WATER_RD=I ADB1F405.932
ENDIF ADB1F405.933
ENDDO ADB1F405.934
! ADB1F405.935
ENDIF SPIN3A.1249
! SPIN3A.1250
! BLOCK 9: SPIN3A.1251
IF (L_PRESENT(9)) THEN SPIN3A.1252
L_PRESENT_RD(9)=.TRUE. ADB1F401.971
DO I=1, N_BAND SPIN3A.1253
DO J=1, N_BAND_CONTINUUM(I) SPIN3A.1254
I_CONTINUUM=INDEX_CONTINUUM(I, J) SPIN3A.1255
I_SCALE_FNC_CONT_RD(I, I_CONTINUUM) SPIN3A.1256
& =I_SCALE_FNC_CONT(I, I_CONTINUUM) SPIN3A.1257
P_REF_CONTINUUM_RD(I_CONTINUUM, I) SPIN3A.1258
& =P_REF_CONTINUUM(I_CONTINUUM, I) SPIN3A.1259
T_REF_CONTINUUM_RD(I_CONTINUUM, I) SPIN3A.1260
& =T_REF_CONTINUUM(I_CONTINUUM, I) SPIN3A.1261
K_CONTINUUM_RD(I, I_CONTINUUM) SPIN3A.1262
& =K_CONTINUUM(I, I_CONTINUUM) SPIN3A.1263
DO L=1, N_SCALE_VARIABLE(I_SCALE_FNC_CONT SPIN3A.1264
& (I, I_CONTINUUM)) SPIN3A.1265
SCALE_CONTINUUM_RD(L, I, I_CONTINUUM) SPIN3A.1266
& =SCALE_CONTINUUM(L, I, I_CONTINUUM) SPIN3A.1267
ENDDO SPIN3A.1268
ENDDO SPIN3A.1269
ENDDO SPIN3A.1270
ENDIF SPIN3A.1271
! SPIN3A.1272
! BLOCK 10: SPIN3A.1273
IF (L_PRESENT(10)) THEN SPIN3A.1274
L_PRESENT_RD(10)=.TRUE. ADB1F401.972
DO I=1, NPDR_DROP_TYPE SPIN3A.1275
IF (L_DROP_TYPE(I)) THEN SPIN3A.1276
L_DROP_TYPE_RD(I)=.TRUE. SPIN3A.1277
I_DROP_PARAMETRIZATION_RD(I)=I_DROP_PARAMETRIZATION(I) SPIN3A.1278
DROP_PARM_MIN_DIM_RD(I)=DROP_PARM_MIN_DIM(I) ADB2F404.1475
DROP_PARM_MAX_DIM_RD(I)=DROP_PARM_MAX_DIM(I) ADB2F404.1476
IF (I_DROP_PARAMETRIZATION(I) SPIN3A.1279
& .EQ.IP_SLINGO_SCHRECKER) THEN SPIN3A.1280
N_PARAMETER=6 SPIN3A.1281
ELSE IF (I_DROP_PARAMETRIZATION(I) SPIN3A.1282
& .EQ.IP_ACKERMAN_STEPHENS) THEN SPIN3A.1283
N_PARAMETER=9 SPIN3A.1284
ELSE IF (I_DROP_PARAMETRIZATION(I) ADB1F405.936
& .EQ.IP_DROP_PADE_2) THEN ADB1F405.937
N_PARAMETER=16 ADB1F405.938
ENDIF SPIN3A.1285
! SPIN3A.1286
DO J=1, N_PARAMETER SPIN3A.1287
DO K=1, N_BAND SPIN3A.1288
DROP_PARAMETER_LIST_RD(J, K, I) SPIN3A.1289
& =DROP_PARAMETER_LIST(J, K, I) SPIN3A.1290
ENDDO SPIN3A.1291
ENDDO SPIN3A.1292
ELSE SPIN3A.1293
L_DROP_TYPE_RD(I)=.FALSE. SPIN3A.1294
ENDIF SPIN3A.1295
ENDDO SPIN3A.1296
ENDIF SPIN3A.1297
! SPIN3A.1298
! BLOCK 11: SPIN3A.1299
IF (L_PRESENT(11)) THEN SPIN3A.1300
L_PRESENT_RD(11)=.TRUE. ADB1F401.973
DO I=1, N_AEROSOL_RETAIN ADB2F404.1477
I_INITIAL=INDEX_AEROSOL_RETAIN(I) ADB2F404.1478
IF (L_AEROSOL_SPECIES(I_INITIAL)) THEN ADB2F404.1479
L_AEROSOL_SPECIES_RD(I)=.TRUE. SPIN3A.1303
I_AEROSOL_PARAMETRIZATION_RD(I) SPIN3A.1304
& =I_AEROSOL_PARAMETRIZATION(I_INITIAL) ADB2F404.1480
IF (I_AEROSOL_PARAMETRIZATION(I_INITIAL) ADB2F404.1481
& .EQ.IP_AEROSOL_PARAM_DRY) THEN SPIN3A.1307
NHUMIDITY_RD(I)=0 SPIN3A.1308
DO K=1, N_BAND SPIN3A.1309
AEROSOL_ABSORPTION_RD(1, I, K) SPIN3A.1310
& =AEROSOL_ABSORPTION(1, I_INITIAL, K) ADB2F404.1482
AEROSOL_SCATTERING_RD(1, I, K) SPIN3A.1312
& =AEROSOL_SCATTERING(1, I_INITIAL, K) ADB2F404.1483
AEROSOL_ASYMMETRY_RD(1, I, K) SPIN3A.1314
& =AEROSOL_ASYMMETRY(1, I_INITIAL, K) ADB2F404.1484
ENDDO SPIN3A.1316
ELSE IF (I_AEROSOL_PARAMETRIZATION(I_INITIAL) ADB2F404.1485
& .EQ.IP_AEROSOL_PARAM_MOIST) THEN SPIN3A.1318
INDEX_WATER_RD=INDEX_WATER AWO1F403.37
NHUMIDITY_RD(I)=NHUMIDITY(I_INITIAL) ADB2F404.1486
DO J=1, NHUMIDITY(I_INITIAL) ADB2F404.1487
HUMIDITIES_RD(J, I)=HUMIDITIES(J, I_INITIAL) ADB2F404.1488
DO K=1, N_BAND SPIN3A.1322
AEROSOL_ABSORPTION_RD(J, I, K) SPIN3A.1323
& =AEROSOL_ABSORPTION(J, I_INITIAL, K) ADB2F404.1489
AEROSOL_SCATTERING_RD(J, I, K) SPIN3A.1325
& =AEROSOL_SCATTERING(J, I_INITIAL, K) ADB2F404.1490
AEROSOL_ASYMMETRY_RD(J, I, K) SPIN3A.1327
& =AEROSOL_ASYMMETRY(J, I_INITIAL, K) ADB2F404.1491
ENDDO SPIN3A.1329
ENDDO SPIN3A.1330
ENDIF SPIN3A.1331
! SPIN3A.1332
ELSE SPIN3A.1333
L_AEROSOL_SPECIES_RD(I)=.FALSE. SPIN3A.1334
ENDIF SPIN3A.1335
ENDDO SPIN3A.1336
ENDIF SPIN3A.1337
! SPIN3A.1338
! BLOCK 12: SPIN3A.1339
IF (L_PRESENT(12)) THEN SPIN3A.1340
L_PRESENT_RD(12)=.TRUE. ADB1F401.974
DO I=1, NPDR_ICE_TYPE SPIN3A.1341
IF (L_ICE_TYPE(I)) THEN SPIN3A.1342
L_ICE_TYPE_RD(I)=.TRUE. SPIN3A.1343
ICE_PARM_MIN_DIM_RD(I)=ICE_PARM_MIN_DIM(I) ADB2F404.1492
ICE_PARM_MAX_DIM_RD(I)=ICE_PARM_MAX_DIM(I) ADB2F404.1493
! SPIN3A.1344
I_ICE_PARAMETRIZATION_RD(I)=I_ICE_PARAMETRIZATION(I) SPIN3A.1345
IF (I_ICE_PARAMETRIZATION(I) SPIN3A.1346
& .EQ.IP_SLINGO_SCHRECKER_ICE) THEN SPIN3A.1347
N_PARAMETER=6 SPIN3A.1348
ELSE IF (I_ICE_PARAMETRIZATION(I) SPIN3A.1349
& .EQ.IP_SUN_SHINE_VN2_VIS) THEN SPIN3A.1353
N_PARAMETER=6 SPIN3A.1354
ELSE IF (I_ICE_PARAMETRIZATION(I) SPIN3A.1355
& .EQ.IP_SUN_SHINE_VN2_IR) THEN SPIN3A.1356
N_PARAMETER=0 SPIN3A.1357
ELSE IF (I_ICE_PARAMETRIZATION(I) ADB2F404.1494
& .EQ.IP_ICE_ADT) THEN ADB2F404.1495
N_PARAMETER=30 ADB2F404.1496
ENDIF SPIN3A.1358
! SPIN3A.1359
DO J=1, N_PARAMETER SPIN3A.1360
DO K=1, N_BAND SPIN3A.1361
ICE_PARAMETER_LIST_RD(J, K, I) SPIN3A.1362
& =ICE_PARAMETER_LIST(J, K, I) SPIN3A.1363
ENDDO SPIN3A.1364
ENDDO SPIN3A.1365
ELSE SPIN3A.1366
L_ICE_TYPE_RD(I)=.FALSE. SPIN3A.1367
ENDIF SPIN3A.1368
ENDDO SPIN3A.1369
ENDIF SPIN3A.1370
! SPIN3A.1371
! BLOCK 13: SPIN3A.1372
IF (L_PRESENT(13)) THEN SPIN3A.1373
L_PRESENT_RD(13)=.TRUE. ADB1F401.975
DO I=1, N_ABSORB SPIN3A.1374
IF (L_RETAIN_ABSORB(I)) THEN ADB1F405.939
L_DOPPLER_PRESENT_RD(COMPRESSED_INDEX(I)) ADB1F405.940
& =L_DOPPLER_PRESENT(I) ADB1F405.941
IF (L_DOPPLER_PRESENT(I)) ADB1F405.942
& DOPPLER_CORRECTION_RD(COMPRESSED_INDEX(I)) ADB1F405.943
& =DOPPLER_CORRECTION(I) ADB1F405.944
ENDIF ADB1F405.945
ENDDO SPIN3A.1379
ENDIF SPIN3A.1380
! SPIN3A.1381
! SPIN3A.1382
! BLOCK 14: ADB1F401.976
IF (L_PRESENT(14)) THEN ADB1F401.977
L_PRESENT_RD(14)=.TRUE. ADB1F401.978
DO I=1, N_BAND ADB1F401.979
N_BAND_EXCLUDE_RD(I)=N_BAND_EXCLUDE(I) ADB1F401.980
DO J=1, N_BAND_EXCLUDE(I) ADB1F401.981
INDEX_EXCLUDE_RD(J, I)=INDEX_EXCLUDE(J, I) ADB1F401.982
ENDDO ADB1F401.983
ENDDO ADB1F401.984
ENDIF ADB1F401.985
! SPIN3A.1588
! SPIN3A.1589
! SPIN3A.1590
RETURN SPIN3A.1591
END SPIN3A.1592
*ENDIF DEF,A01_3A,OR,DEF,A02_3A SPIN3A.1593
*ENDIF DEF,A70_1A,OR,DEF,A70_1B APB4F405.106