73 '$Id: ODAS_Predictor.f90 60152 2015-08-13 19:19:13Z paul.vandelst@noaa.gov $' 118 REAL(fp),
DIMENSION(0:MAX_N_LAYERS,MAX_N_ABSORBERS) :: a_2 =
zero 119 REAL(fp),
DIMENSION(MAX_N_LAYERS,MAX_N_ABSORBERS) :: factor_1 =
zero 120 REAL(fp),
DIMENSION(MAX_N_LAYERS,MAX_N_ABSORBERS) :: factor_2 =
zero 121 REAL(fp),
DIMENSION(MAX_N_INTEGRATED_PREDICTORS,0:MAX_N_LAYERS,MAX_N_ABSORBERS) :: s
122 REAL(fp),
DIMENSION(MAX_N_LAYERS,MAX_N_ABSORBERS) :: a_level
226 Atmosphere , & ! Input
227 GeometryInfo, & ! Input
228 Max_Order , & ! Input
230 Predictor , & ! Output
235 INTEGER,
INTENT(IN) :: max_order(:)
236 REAL(fp),
INTENT(IN) :: alpha(:,:)
240 INTEGER :: i,j,k,n_layers
241 REAL(fp) :: secant_sensor_zenith
245 secant_trans_zenith = secant_sensor_zenith )
246 predictor%Secant_Sensor_Zenith = secant_sensor_zenith
275 n_layers = atmosphere%n_Layers
276 DO j = 1, predictor%n_Absorbers
278 IF( max_order(j) < 0 )cycle
281 ivar%A_Level(k,j) = log((predictor%aveA(k,j) - alpha(3,j)) / alpha(2,j)) / &
286 predictor%Ap(1:n_layers, 1, j) = ivar%A_Level(1:n_layers,j)
287 DO i = 2, max_order(j)
289 predictor%Ap(k, i, j) = predictor%Ap(k, i-1, j) * ivar%A_Level(k,j)
402 Atmosphere , & ! FWD Input
403 Predictor , & ! FWD Input
404 Atmosphere_TL, & ! TL Input
405 Max_Order , & ! Input
407 Predictor_TL , & ! TL Output
413 INTEGER,
INTENT(IN) :: max_order(:)
414 REAL(fp),
INTENT(IN) :: alpha(:,:)
418 REAL(fp) :: a_level_tl(atmosphere%n_layers)
419 INTEGER :: i, j, k, n_layers
422 predictor_tl%Secant_Sensor_Zenith = predictor%Secant_Sensor_Zenith
447 n_layers = atmosphere%n_Layers
448 DO j = 1, predictor%n_Absorbers
450 IF( max_order(j) < 0 )cycle
454 a_level_tl(k) = predictor_tl%aveA(k,j) / &
456 (alpha(1,j) * (predictor%aveA(k,j) - alpha(3,j)))
459 predictor_tl%Ap(1:n_layers, 1, j) = a_level_tl(1:n_layers)
460 DO i = 2, max_order(j)
462 predictor_tl%Ap(k, i, j) = (predictor_tl%Ap(k,i-1,j)*ivar%A_Level(k,j)) + &
463 (predictor%Ap(k,i-1,j) *a_level_tl(k))
568 Atmosphere , & ! FWD Input
569 Predictor , & ! FWD Input
570 Predictor_AD , & ! AD Input
571 Max_Order , & ! Input
573 Atmosphere_AD, & ! AD Output
579 INTEGER,
INTENT(IN) :: max_order(:)
580 REAL(fp),
INTENT(IN) :: alpha(:,:)
584 REAL(fp):: a_level_ad(atmosphere%n_layers)
585 INTEGER :: i, j, k, n_layers
588 predictor_ad%Secant_Sensor_Zenith = predictor%Secant_Sensor_Zenith
593 n_layers = atmosphere%n_Layers
594 DO j = 1, predictor%n_Absorbers
596 IF( max_order(j) < 0 )cycle
598 DO i = max_order(j), 2, -1
599 DO k = n_layers, 1, -1
601 predictor_ad%Ap(k, i-1, j) = predictor_ad%Ap(k,i-1,j) + &
602 (predictor_ad%Ap(k,i,j)*ivar%A_Level(k,j))
603 a_level_ad(k) = a_level_ad(k) + (predictor%Ap(k,i-1,j)*predictor_ad%Ap(k,i,j))
604 predictor_ad%Ap(k,i,j) =
zero 609 a_level_ad(1:n_layers) = a_level_ad(1:n_layers) + predictor_ad%Ap(1:n_layers,1,j)
610 predictor_ad%Ap(1:n_layers, 1, j) =
zero 612 DO k = n_layers, 1, -1
613 predictor_ad%aveA(k,j) = predictor_ad%aveA(k,j) + &
614 (a_level_ad(k) / (alpha(1,j) * (predictor%aveA(k,j) - alpha(3,j))))
697 TYPE(CRTM_Atmosphere_type),
INTENT(IN) :: Atm
698 TYPE(ODAS_Predictor_type),
INTENT(IN OUT) :: Pred
715 DO k = 1, atm%n_Layers
723 (dpong * atm%Absorber(k,h2o_idx))
727 (dpong * atm%Absorber(k,o3_idx))
732 pred%A = pred%Secant_Sensor_Zenith * pred%A
736 DO j = 1, pred%n_Absorbers
737 DO k = 1, pred%n_Layers
738 pred%dA(k,j) = pred%A(k,j) - pred%A(k-1,j)
739 pred%aveA(k,j) =
point_5 * (pred%A(k,j) + pred%A(k-1,j))
789 TYPE(CRTM_Atmosphere_type),
INTENT(IN) :: Atm
790 TYPE(CRTM_Atmosphere_type),
INTENT(IN) :: Atm_TL
791 TYPE(ODAS_Predictor_type),
INTENT(IN OUT) :: Pred_TL
800 pred_tl%A(0,:) =
zero 807 DO k = 1, atm_tl%n_Layers
811 dpong_tl =
reciprocal_gravity * (atm_tl%Level_Pressure(k) - atm_tl%Level_Pressure(k-1))
816 (dpong * atm_tl%Absorber(k,h2o_idx)) + &
817 (dpong_tl * atm%Absorber(k,h2o_idx))
822 (dpong * atm_tl%Absorber(k,o3_idx)) + &
823 (dpong_tl * atm%Absorber(k,o3_idx))
828 pred_tl%A = pred_tl%Secant_Sensor_Zenith * pred_tl%A
832 DO j = 1, pred_tl%n_Absorbers
833 DO k = 1, pred_tl%n_Layers
834 pred_tl%dA(k,j) = pred_tl%A(k,j) - pred_tl%A(k-1,j)
835 pred_tl%aveA(k,j) =
point_5 * (pred_tl%A(k,j) + pred_tl%A(k-1,j))
889 TYPE(CRTM_Atmosphere_type),
INTENT(IN) :: Atm
890 TYPE(ODAS_Predictor_type),
INTENT(IN OUT) :: Pred_AD
891 TYPE(CRTM_Atmosphere_type),
INTENT(IN OUT) :: Atm_AD
905 DO j = 1, pred_ad%n_Absorbers
906 DO k = pred_ad%n_Layers, 1, -1
907 pred_ad%A(k-1,j) = pred_ad%A(k-1,j) + (
point_5*pred_ad%aveA(k,j))
908 pred_ad%A(k-1,j) = pred_ad%A(k-1,j) - pred_ad%dA(k,j)
909 pred_ad%A(k ,j) = pred_ad%A(k ,j) + (
point_5*pred_ad%aveA(k,j))
910 pred_ad%A(k ,j) = pred_ad%A(k ,j) + pred_ad%dA(k,j)
911 pred_ad%dA( k,j) =
zero 912 pred_ad%aveA(k,j) =
zero 917 pred_ad%A = pred_ad%Secant_Sensor_Zenith * pred_ad%A
920 DO k = atm_ad%n_Layers, 1, -1
926 atm_ad%Absorber(k,o3_idx) = atm_ad%Absorber(k,o3_idx) + &
933 atm_ad%Absorber(k,h2o_idx) = atm_ad%Absorber(k,h2o_idx) + &
941 atm_ad%Level_Pressure(k-1) = atm_ad%Level_Pressure(k-1) - (
reciprocal_gravity * dpong_ad)
942 atm_ad%Level_Pressure( k ) = atm_ad%Level_Pressure( k ) + (
reciprocal_gravity * dpong_ad)
1000 TYPE(CRTM_Atmosphere_type),
INTENT(IN) :: Atm
1001 TYPE(ODAS_Predictor_type),
INTENT(IN OUT) :: Pred
1012 layer_loop:
DO k = 1, atm%n_Layers
1015 p2 = atm%Pressure(k) * atm%Pressure(k)
1016 t2 = atm%Temperature(k) * atm%Temperature(k)
1019 pred%X(k, 1) = atm%Temperature(k)
1020 pred%X(k, 2) = atm%Pressure(k)
1023 pred%X(k, 5) = atm%Temperature(k) * atm%Pressure(k)
1024 pred%X(k, 6) = t2 * atm%Pressure(k)
1025 pred%X(k, 7) = atm%Temperature(k) * p2
1026 pred%X(k, 8) = t2 * p2
1027 pred%X(k, 9) = atm%Pressure(k)**
point_25 1028 pred%X(k,10) = atm%Absorber(k,h2o_idx)
1029 pred%X(k,11) = atm%Absorber(k,h2o_idx) / t2
1078 Pred, & ! Input/output
1081 TYPE(CRTM_Atmosphere_type),
INTENT(IN) :: Atm
1082 TYPE(ODAS_Predictor_type),
INTENT(IN OUT) :: Pred
1083 TYPE(iVar_type),
INTENT(OUT) :: iVar
1085 INTEGER :: i, i1, j, k
1086 REAL(fp) :: Inverse_1
1087 REAL(fp) :: Inverse_2
1088 REAL(fp) :: Inverse_3
1090 REAL(fp),
DIMENSION(MAX_N_INTEGRATED_PREDICTORS,0:Atm%n_Layers) :: xL
1093 absorber_loop:
DO j = 1, pred%n_Absorbers
1099 ivar%A_2(0,j) = pred%A(0,j) * pred%A(0,j)
1100 ivar%s(:,0,j) =
zero 1104 layer_loop:
DO k = 1, pred%n_Layers
1107 ivar%A_2(k,j) = pred%A(k,j)*pred%A(k,j)
1108 ivar%Factor_1(k,j) = (pred%A(k,j) + pred%A(k-1,j) ) * pred%dA(k,j)
1109 ivar%Factor_2(k,j) = (ivar%A_2(k,j) + ivar%A_2(k-1,j)) * pred%dA(k,j)
1112 ivar%s(1,k,j) = ivar%s(1,k-1,j) + ( atm%Temperature(k) * pred%dA(k,j) )
1113 ivar%s(2,k,j) = ivar%s(2,k-1,j) + ( atm%Pressure(k) * pred%dA(k,j) )
1114 ivar%s(3,k,j) = ivar%s(3,k-1,j) + ( atm%Temperature(k) * ivar%Factor_1(k,j) )
1115 ivar%s(4,k,j) = ivar%s(4,k-1,j) + ( atm%Pressure(k) * ivar%Factor_1(k,j) )
1116 ivar%s(5,k,j) = ivar%s(5,k-1,j) + ( atm%Temperature(k) * ivar%Factor_2(k,j) )
1117 ivar%s(6,k,j) = ivar%s(6,k-1,j) + ( atm%Pressure(k) * ivar%Factor_2(k,j) )
1122 inverse_1 =
one / pred%A(k,j)
1126 inverse_2 = inverse_1 * inverse_1
1127 inverse_3 = inverse_2 * inverse_1
1130 xl(1,k) =
point_5 * ivar%s(1,k,j) * inverse_1
1131 xl(2,k) =
point_5 * ivar%s(2,k,j) * inverse_1
1132 xl(3,k) =
point_5 * ivar%s(3,k,j) * inverse_2
1133 xl(4,k) =
point_5 * ivar%s(4,k,j) * inverse_2
1134 xl(5,k) =
point_75 * ivar%s(5,k,j) * inverse_3
1135 xl(6,k) =
point_75 * ivar%s(6,k,j) * inverse_3
1139 pred%X(k,i1+i-1) = xl(i,k) + xl(i,k-1)
1143 END DO absorber_loop
1191 TYPE(CRTM_Atmosphere_type),
INTENT(IN) :: Atm
1192 TYPE(CRTM_Atmosphere_type),
INTENT(IN) :: Atm_TL
1193 TYPE(ODAS_Predictor_type),
INTENT(IN OUT) :: Pred_TL
1196 REAL(fp) :: p2, p2_TL
1197 REAL(fp) :: t2, t2_TL
1204 layer_loop:
DO k = 1, atm%n_Layers
1207 p2 = atm%Pressure(k) * atm%Pressure(k)
1208 t2 = atm%Temperature(k) * atm%Temperature(k)
1211 p2_tl =
two * atm%Pressure(k) * atm_tl%Pressure(k)
1212 t2_tl =
two * atm%Temperature(k) * atm_tl%Temperature(k)
1215 pred_tl%X(k, 1) = atm_tl%Temperature(k)
1216 pred_tl%X(k, 2) = atm_tl%Pressure(k)
1217 pred_tl%X(k, 3) = t2_tl
1218 pred_tl%X(k, 4) = p2_tl
1219 pred_tl%X(k, 5) = ( atm%Temperature(k) * atm_tl%Pressure(k) ) + &
1220 ( atm%Pressure(k) * atm_tl%Temperature(k) )
1221 pred_tl%X(k, 6) = ( atm%Pressure(k) * t2_tl ) + &
1222 ( t2 * atm_tl%Pressure(k) )
1223 pred_tl%X(k, 7) = ( atm%Temperature(k) * p2_tl ) + &
1224 ( p2 * atm_tl%Temperature(k) )
1225 pred_tl%X(k, 8) = ( t2 * p2_tl ) + &
1227 pred_tl%X(k, 9) =
point_25 * (atm%Pressure(k)**(-
point_75)) * atm_tl%Pressure(k)
1228 pred_tl%X(k,10) = atm_tl%Absorber(k,h2o_idx)
1229 pred_tl%X(k,11) = ( atm_tl%Absorber(k,h2o_idx) - &
1230 ( atm%Absorber(k,h2o_idx) * t2_tl / t2 ) ) / t2
1299 TYPE(CRTM_Atmosphere_type),
INTENT(IN) :: Atm
1300 TYPE(ODAS_Predictor_type),
INTENT(IN) :: Pred
1301 TYPE(CRTM_Atmosphere_type),
INTENT(IN) :: Atm_TL
1302 TYPE(ODAS_Predictor_type),
INTENT(IN OUT) :: Pred_TL
1303 TYPE(iVar_type),
INTENT(IN) :: iVar
1305 INTEGER :: i, i1, j, k
1306 REAL(fp) :: Factor_1_TL
1307 REAL(fp) :: Factor_2_TL
1308 REAL(fp) :: Inverse_1
1309 REAL(fp) :: Inverse_2
1310 REAL(fp) :: Inverse_3
1311 REAL(fp) :: Inverse_4
1312 REAL(fp) :: Inverse_1_TL
1313 REAL(fp) :: Inverse_2_TL
1314 REAL(fp) :: Inverse_3_TL
1316 REAL(fp),
DIMENSION(0:Atm%n_Layers) :: A_2_TL
1318 REAL(fp),
DIMENSION(MAX_N_INTEGRATED_PREDICTORS) :: s_TL
1320 REAL(fp),
DIMENSION(MAX_N_INTEGRATED_PREDICTORS,0:Atm%n_Layers) :: xL_TL
1323 absorber_loop:
DO j = 1, pred_tl%n_Absorbers
1329 a_2_tl(0) =
two * pred%A(0,j) * pred_tl%A(0,j)
1334 layer_loop:
DO k = 1, atm%n_Layers
1337 a_2_tl(k) =
two * pred%A(k,j) * pred_tl%A(k,j)
1339 factor_1_tl = ( ( pred%A(k,j) + pred%A(k-1,j) ) * pred_tl%dA(k,j) ) + &
1340 ( ( pred_tl%A(k,j) + pred_tl%A(k-1,j) ) * pred%dA(k,j) )
1342 factor_2_tl = ( ( ivar%A_2(k,j) + ivar%A_2(k-1,j)) * pred_tl%dA(k,j) ) + &
1343 ( ( a_2_tl(k) + a_2_tl(k-1) ) * pred%dA(k,j) )
1346 s_tl(1) = s_tl(1) + ( atm_tl%Temperature(k) * pred%dA(k,j)) + &
1347 ( atm%Temperature(k) * pred_tl%dA(k,j))
1348 s_tl(2) = s_tl(2) + ( atm_tl%Pressure(k) * pred%dA(k,j)) + &
1349 ( atm%Pressure(k) * pred_tl%dA(k,j))
1350 s_tl(3) = s_tl(3) + ( atm_tl%Temperature(k) * ivar%Factor_1(k,j)) + &
1351 ( atm%Temperature(k) * factor_1_tl )
1352 s_tl(4) = s_tl(4) + ( atm_tl%Pressure(k) * ivar%Factor_1(k,j)) + &
1353 ( atm%Pressure(k) * factor_1_tl )
1354 s_tl(5) = s_tl(5) + ( atm_tl%Temperature(k) * ivar%Factor_2(k,j)) + &
1355 ( atm%Temperature(k) * factor_2_tl )
1356 s_tl(6) = s_tl(6) + ( atm_tl%Pressure(k) * ivar%Factor_2(k,j)) + &
1357 ( atm%Pressure(k) * factor_2_tl )
1362 inverse_1 =
one / pred%A(k,j)
1366 inverse_2 = inverse_1 * inverse_1
1367 inverse_3 = inverse_2 * inverse_1
1368 inverse_4 = inverse_3 * inverse_1
1369 inverse_1_tl = -inverse_2 * pred_tl%A(k,j)
1370 inverse_2_tl = -inverse_3 * pred_tl%A(k,j) *
two 1371 inverse_3_tl = -inverse_4 * pred_tl%A(k,j) *
three 1374 xl_tl(1,k) =
point_5 * ( ( s_tl(1) * inverse_1 ) + &
1375 ( ivar%s(1,k,j) * inverse_1_tl ) )
1376 xl_tl(2,k) =
point_5 * ( ( s_tl(2) * inverse_1 ) + &
1377 ( ivar%s(2,k,j) * inverse_1_tl ) )
1378 xl_tl(3,k) =
point_5 * ( ( s_tl(3) * inverse_2 ) + &
1379 ( ivar%s(3,k,j) * inverse_2_tl ) )
1380 xl_tl(4,k) =
point_5 * ( ( s_tl(4) * inverse_2 ) + &
1381 ( ivar%s(4,k,j) * inverse_2_tl ) )
1382 xl_tl(5,k) =
point_75 * ( ( s_tl(5) * inverse_3 ) + &
1383 ( ivar%s(5,k,j) * inverse_3_tl ) )
1384 xl_tl(6,k) =
point_75 * ( ( s_tl(6) * inverse_3 ) + &
1385 ( ivar%s(6,k,j) * inverse_3_tl ) )
1389 pred_tl%X(k,i1+i-1) = xl_tl(i,k) + xl_tl(i,k-1)
1393 END DO absorber_loop
1449 TYPE(CRTM_Atmosphere_type),
INTENT(IN) :: Atm
1450 TYPE(ODAS_Predictor_type),
INTENT(IN OUT) :: Pred_AD
1451 TYPE(CRTM_Atmosphere_type),
INTENT(IN OUT) :: Atm_AD
1454 REAL(fp) :: p2, p2_AD
1455 REAL(fp) :: t2, t2_AD
1464 layer_loop:
DO k = 1, atm%n_Layers
1467 p2 = atm%Pressure(k) * atm%Pressure(k)
1468 t2 = atm%Temperature(k) * atm%Temperature(k)
1472 p2_ad = pred_ad%X(k,4) + &
1473 ( atm%Temperature(k) * pred_ad%X(k,7) ) + &
1474 ( t2 * pred_ad%X(k,8) )
1477 t2_ad = pred_ad%X(k,3) + &
1478 ( atm%Pressure(k) * pred_ad%X(k,6) ) + &
1479 ( p2 * pred_ad%X(k,8) ) + &
1480 (-atm%Absorber(k,h2o_idx) * pred_ad%X(k,11) / t4 )
1483 atm_ad%Absorber(k,h2o_idx) = atm_ad%Absorber(k,h2o_idx) + &
1485 ( pred_ad%X(k,11) / t2 )
1488 atm_ad%Temperature(k) = atm_ad%Temperature(k) + &
1489 (
two * atm%Temperature(k) * t2_ad ) + &
1491 ( atm%Pressure(k) * pred_ad%X(k,5) ) + &
1492 ( p2 * pred_ad%X(k,7) )
1495 atm_ad%Pressure(k) = atm_ad%Pressure(k) + &
1496 (
two * atm%Pressure(k) * p2_ad ) + &
1498 ( atm%Temperature(k) * pred_ad%X(k,5) ) + &
1499 ( t2 * pred_ad%X(k,6) ) + &
1569 Pred_AD, & ! In/Output
1573 TYPE(CRTM_Atmosphere_type),
INTENT(IN) :: Atm
1574 TYPE(ODAS_Predictor_type),
INTENT(IN) :: Pred
1575 TYPE(ODAS_Predictor_type),
INTENT(IN OUT) :: Pred_AD
1576 TYPE(CRTM_Atmosphere_type),
INTENT(IN OUT) :: Atm_AD
1577 TYPE(iVar_type),
INTENT(IN) :: iVar
1579 INTEGER :: i, i1, j, k
1581 REAL(fp) :: Factor_1_AD
1582 REAL(fp) :: Factor_2_AD
1583 REAL(fp) :: Inverse_1
1584 REAL(fp) :: Inverse_2
1585 REAL(fp) :: Inverse_3
1586 REAL(fp) :: Inverse_4
1587 REAL(fp) :: Inverse_1_AD
1588 REAL(fp) :: Inverse_2_AD
1589 REAL(fp) :: Inverse_3_AD
1590 REAL(fp) :: Multiplier
1591 REAL(fp) :: Add_Factor
1593 REAL(fp),
DIMENSION(0:Atm%n_Layers) :: A_2_AD
1595 REAL(fp),
DIMENSION(MAX_N_INTEGRATED_PREDICTORS) :: s_AD
1597 REAL(fp),
DIMENSION(MAX_N_INTEGRATED_PREDICTORS,0:Atm%n_Layers ) :: xL_AD
1600 absorber_loop:
DO j = 1, pred_ad%n_Absorbers
1606 xl_ad(:,atm%n_Layers) =
zero 1608 a_2_ad(atm%n_Layers) =
zero 1611 layer_loop:
DO k = atm%n_Layers, 1, -1
1616 inverse_1 =
one / pred%A(k,j)
1621 inverse_2 = inverse_1 * inverse_1
1622 inverse_3 = inverse_2 * inverse_1
1623 inverse_4 = inverse_3 * inverse_1
1627 xl_ad(i,k) = xl_ad(i,k) + pred_ad%X(k,i1+i-1)
1628 xl_ad(i,k-1) = pred_ad%X(k,i1+i-1)
1639 multiplier =
point_5 * inverse_1
1640 s_ad(1) = s_ad(1) + ( multiplier * xl_ad(1,k) )
1641 s_ad(2) = s_ad(2) + ( multiplier * xl_ad(2,k) )
1642 inverse_1_ad =
point_5 * ( ( ivar%s(1,k,j) * xl_ad(1,k) ) + &
1643 ( ivar%s(2,k,j) * xl_ad(2,k) ) )
1645 multiplier =
point_5 * inverse_2
1646 s_ad(3) = s_ad(3) + ( multiplier * xl_ad(3,k) )
1647 s_ad(4) = s_ad(4) + ( multiplier * xl_ad(4,k) )
1648 inverse_2_ad =
point_5 * ( ( ivar%s(3,k,j) * xl_ad(3,k) ) + &
1649 ( ivar%s(4,k,j) * xl_ad(4,k) ) )
1652 s_ad(5) = s_ad(5) + ( multiplier * xl_ad(5,k) )
1653 s_ad(6) = s_ad(6) + ( multiplier * xl_ad(6,k) )
1654 inverse_3_ad =
point_75 * ( ( ivar%s(5,k,j) * xl_ad(5,k) ) + &
1655 ( ivar%s(6,k,j) * xl_ad(6,k) ) )
1660 pred_ad%A(k,j) = pred_ad%A(k,j) - (inverse_2 * inverse_1_ad ) - &
1661 (
two * inverse_3 * inverse_2_ad ) - &
1662 (
three * inverse_4 * inverse_3_ad )
1665 atm_ad%Pressure(k) = atm_ad%Pressure(k) + &
1666 ( pred%dA(k,j) * s_ad(2) ) + &
1667 ( ivar%Factor_1(k,j) * s_ad(4) ) + &
1668 ( ivar%Factor_2(k,j) * s_ad(6) )
1672 atm_ad%Temperature(k) = atm_ad%Temperature(k) + &
1673 ( pred%dA(k,j) * s_ad(1) ) + &
1674 ( ivar%Factor_1(k,j) * s_ad(3) ) + &
1675 ( ivar%Factor_2(k,j) * s_ad(5) )
1692 factor_1_ad = ( atm%Temperature(k) * s_ad(3) ) + &
1693 ( atm%Pressure(k) * s_ad(4) )
1695 factor_2_ad = ( atm%Temperature(k) * s_ad(5) ) + &
1696 ( atm%Pressure(k) * s_ad(6) )
1707 a_2_ad(k-1) = pred%dA(k,j) * factor_2_ad
1708 a_2_ad( k ) = a_2_ad( k ) + a_2_ad(k-1)
1712 d_a_ad = ( atm%Temperature(k) * s_ad(1) ) + &
1713 ( atm%Pressure(k) * s_ad(2) ) + &
1714 ( ( pred%A(k,j) + pred%A(k-1,j) ) * factor_1_ad ) + &
1715 ( ( ivar%A_2(k,j) + ivar%A_2(k-1,j) ) * factor_2_ad )
1717 add_factor = pred%dA(k,j) * factor_1_ad
1718 pred_ad%A(k-1,j) = pred_ad%A(k-1,j) + add_factor - d_a_ad
1719 pred_ad%A( k ,j) = pred_ad%A( k ,j) + add_factor + d_a_ad + &
1720 (
two * pred%A(k,j) * a_2_ad(k) )
1726 pred_ad%A(0,j) = pred_ad%A(0,j) + (
two * pred%A(0,j) * a_2_ad(0) )
1729 END DO absorber_loop
real(fp), parameter, public point_25
character(*), parameter module_version_id
integer, parameter, public failure
integer, parameter, public max_n_standard_predictors
real(fp), parameter, public ten
elemental subroutine, public odas_predictor_zero(self)
real(fp), parameter, public zero
subroutine compute_intabsorber_tl(Atm, Atm_TL, Pred_TL)
subroutine standard_predictors(Atm, Pred)
elemental subroutine, public odas_predictor_create(self, n_Layers, n_Predictors, n_Absorbers, n_Orders)
subroutine standard_predictors_ad(Atm, Pred_AD, Atm_AD)
integer, parameter, public fp
real(fp), parameter, public three
integer, parameter, public max_n_absorbers
subroutine compute_intabsorber_ad(Atm, Pred_AD, Atm_AD)
integer, parameter, public ozo_absorber_index
integer, parameter, public h2o_id
real(fp), parameter, public toa_pressure
integer, parameter, public max_n_predictors
subroutine integrated_predictors(Atm, Pred, iVar)
integer, parameter, public max_n_orders
real(fp), parameter, public minimum_absorber_amount
real(fp), parameter, public point_75
integer, parameter, public max_n_predictors_used
subroutine integrated_predictors_ad(Atm, Pred, Pred_AD, Atm_AD, iVar)
real(fp), parameter, public one
subroutine integrated_predictors_tl(Atm, Pred, Atm_TL, Pred_TL, iVar)
recursive subroutine, public display_message(Routine_Name, Message, Error_State, Message_Log)
integer, parameter, public o3_id
elemental subroutine, public odas_predictor_destroy(self)
real(fp), parameter, public two
subroutine compute_intabsorber(Atm, Pred)
character(*), dimension(max_n_absorbers), parameter, public absorber_name
subroutine standard_predictors_tl(Atm, Atm_TL, Pred_TL)
subroutine, public odas_assemble_predictors(Atmosphere, GeometryInfo, Max_Order, Alpha, Predictor, iVar)
integer, parameter, public max_n_layers
real(fp), parameter, public point_5
integer, parameter, public max_n_integrated_predictors
integer, dimension(max_n_absorbers), parameter, public absorber_index
elemental logical function, public odas_predictor_associated(self)
real(fp), parameter, public reciprocal_gravity
integer, parameter, public dry_absorber_index
integer, parameter, public wet_absorber_index
integer function, public crtm_get_absorberidx(Atm, AbsorberId)
integer, parameter, public success
elemental subroutine, public crtm_geometryinfo_getvalue(gInfo, Geometry, iFOV, Longitude, Latitude, Surface_Altitude, Sensor_Scan_Angle, Sensor_Zenith_Angle, Sensor_Azimuth_Angle, Source_Zenith_Angle, Source_Azimuth_Angle, Flux_Zenith_Angle, Year, Month, Day, Distance_Ratio, Sensor_Scan_Radian, Sensor_Zenith_Radian, Sensor_Azimuth_Radian, Secant_Sensor_Zenith, Cosine_Sensor_Zenith, Source_Zenith_Radian, Source_Azimuth_Radian, Secant_Source_Zenith, Flux_Zenith_Radian, Secant_Flux_Zenith, Trans_Zenith_Radian, Secant_Trans_Zenith, AU_ratio2)
subroutine, public odas_assemble_predictors_tl(Atmosphere, Predictor, Atmosphere_TL, Max_Order, Alpha, Predictor_TL, iVar)
subroutine, public odas_assemble_predictors_ad(Atmosphere, Predictor, Predictor_AD, Max_Order, Alpha, Atmosphere_AD, iVar)