83 INTEGER,
PARAMETER ::
n_g = 3
204 REAL(fp),
PARAMETER ::
zero = 0.0_fp
205 REAL(fp),
PARAMETER ::
one = 1.0_fp
206 REAL(fp),
PARAMETER ::
two = 2.0_fp
207 REAL(fp),
PARAMETER ::
three = 3.0_fp
208 REAL(fp),
PARAMETER ::
four = 4.0_fp
209 REAL(fp),
PARAMETER ::
ten = 10.0_fp
299 REAL(fp) :: temperature(predictor%n_layers)
300 REAL(fp) :: absorber(predictor%n_layers, tc%n_absorbers)
302 REAL(fp) :: secant_sensor_zenith
312 predictor%User_Level_LnPressure, &
313 predictor%Ref_Level_LnPressure , &
314 predictor%Secant_Zenith , &
321 predictor%Secant_Zenith_Surface = secant_sensor_zenith
329 tc%Ref_Level_Pressure , &
330 tc%Ref_Temperature , &
332 predictor%Secant_Zenith, &
338 absorber(:,h2o_idx) , &
339 tc%Ref_Level_Pressure , &
341 predictor%Secant_Zenith, &
348 IF ( pafv_associated(predictor%PAFV) )
THEN 350 predictor%Ref_Level_LnPressure , &
351 predictor%User_Level_LnPressure, &
352 predictor%PAFV%ODPS2User_Idx)
409 Predictor , & ! Input
418 REAL(fp) :: absorber_tl(predictor%n_layers, tc%n_absorbers)
419 REAL(fp) :: temperature_tl(predictor%n_layers)
434 predictor%PAFV%Temperature, &
435 predictor%PAFV%Absorber , &
436 tc%Ref_Temperature , &
438 predictor%Secant_Zenith , &
446 predictor%PAFV%Temperature , &
447 predictor%PAFV%Absorber(:,predictor%PAFV%H2O_idx), &
449 predictor%Secant_Zenith , &
454 absorber_tl(:,predictor%PAFV%H2O_idx) , &
523 REAL(fp) :: absorber_ad(predictor%n_layers, tc%n_absorbers)
524 REAL(fp) :: temperature_ad(predictor%n_layers)
527 temperature_ad =
zero 535 predictor%PAFV%Temperature , &
536 predictor%PAFV%Absorber(:,predictor%PAFV%H2O_idx), &
538 predictor%Secant_Zenith , &
544 absorber_ad(:,predictor%PAFV%H2O_idx) )
549 predictor%PAFV%Temperature, &
550 predictor%PAFV%Absorber , &
551 tc%Ref_Temperature , &
553 predictor%Secant_Zenith , &
647 Ref_Level_Pressure, &
653 INTEGER,
INTENT(IN) :: group_id
654 REAL(fp),
INTENT(IN) :: temperature(:)
655 REAL(fp),
INTENT(IN) :: absorber(:, :)
656 REAL(fp),
INTENT(IN) :: ref_level_pressure(0:)
657 REAL(fp),
INTENT(IN) :: ref_temperature(:)
658 REAL(fp),
INTENT(IN) :: ref_absorber(:, :)
659 REAL(fp),
INTENT(IN) :: secang(:)
665 CHARACTER(*),
PARAMETER :: routine_name =
'ODPS_Compute_Predictor' 672 REAL(fp) :: tzp(
size(absorber, dim=1))
675 REAL(fp) :: tz(
size(absorber, dim=1))
676 REAL(fp) :: gaz_ref(
size(absorber, dim=2))
677 REAL(fp) :: gaz_sum(
size(absorber, dim=2))
678 REAL(fp) :: gaz(
size(absorber, dim=1),
size(absorber, dim=2))
679 REAL(fp) :: gazp_ref(
size(absorber, dim=2))
680 REAL(fp) :: gazp_sum(
size(absorber, dim=2))
681 REAL(fp) :: gazp(
size(absorber, dim=1),
size(absorber, dim=2))
682 REAL(fp) :: gatzp_ref(
size(absorber, dim=2))
683 REAL(fp) :: gatzp_sum (
size(absorber, dim=2))
684 REAL(fp) :: gatzp(
size(absorber, dim=1),
size(absorber, dim=2))
686 n_layers = predictor%n_Layers
688 predictor%Secant_Zenith = secang
705 layer_loop :
DO k = 1, n_layers
709 pdp = ref_level_pressure(0) * &
710 ( ref_level_pressure(1) - ref_level_pressure(0) )
713 pdp = ref_level_pressure(k) * &
714 ( ref_level_pressure(k) - ref_level_pressure(k-1) )
719 tz_ref = tz_ref + ref_temperature(k)
720 tz_sum = tz_sum + temperature(k)
721 tz(k) = tz_sum / tz_ref
722 tzp_ref = tzp_ref + pdp * ref_temperature(k)
723 tzp_sum = tzp_sum + pdp*temperature(k)
724 tzp(k) = tzp_sum/tzp_ref
728 gaz_ref(j) = gaz_ref(j) + ref_absorber(k, j)
729 gaz_sum(j) = gaz_sum(j) + absorber(k, j)
730 gaz(k, j) = gaz_sum(j) / gaz_ref(j)
731 gazp_ref(j) = gazp_ref(j) + pdp*ref_absorber(k, j)
732 gazp_sum(j) = gazp_sum(j) + pdp*absorber(k, j)
733 gazp(k, j) = gazp_sum(j) / gazp_ref(j)
734 gatzp_ref(j) = gatzp_ref(j) + pdp*ref_absorber(k, j)*ref_temperature(k)
735 gatzp_sum(j) = gatzp_sum(j) + pdp*absorber(k, j)*temperature(k)
736 gatzp(k, j) = gatzp_sum(j) / gatzp_ref(j)
740 IF ( pafv_associated(predictor%PAFV) )
THEN 741 predictor%PAFV%PDP(k) = pdp
742 predictor%PAFV%Tz_ref(k) = tz_ref
743 predictor%PAFV%Tz(k) = tz(k)
744 predictor%PAFV%Tzp_ref(k) = tzp_ref
745 predictor%PAFV%Tzp(k) = tzp(k)
746 predictor%PAFV%GAz_ref(k, :) = gaz_ref
747 predictor%PAFV%GAz_sum(k, :) = gaz_sum
748 predictor%PAFV%GAz(k, :) = gaz(k, :)
749 predictor%PAFV%GAzp_ref(k, :) = gazp_ref
750 predictor%PAFV%GAzp_sum(k, :) = gazp_sum
751 predictor%PAFV%GAzp(k, :) = gazp(k, :)
752 predictor%PAFV%GATzp_ref(k, :) = gatzp_ref
753 predictor%PAFV%GATzp_sum(k, :) = gatzp_sum
754 predictor%PAFV%GATzp(k, :) = gatzp(k, :)
764 SELECT CASE( group_id )
788 REAL(fp) :: H2OdH2OTzp
797 REAL(fp) :: CO_ACOdCOzp
805 REAL(fp) :: CH4_ACH4zp
807 layer_loop :
DO k = 1, n_layers
812 dt = temperature(k) - ref_temperature(k)
813 t = temperature(k) / ref_temperature(k)
826 h2o_a = secang(k)*h2o
827 h2o_r = sqrt( h2o_a )
829 h2o_r4 = sqrt( h2o_r )
840 n2o_a = secang(k)*n2o
841 n2o_r = sqrt( n2o_a )
849 ch4_a = secang(k)*ch4
870 predictor%X(k, 5,
comp_dry_ir) = secang(k) * secang(k)
912 predictor%X(k, 7,
comp_co2_ir) = secang(k) * tzp(k)
915 predictor%X(k, 10,
comp_co2_ir) = secang(k) * tzp(k) * sqrt(t)
937 if_group1:
IF( group_id ==
group_1 )
THEN 956 predictor%X(k, 9,
comp_co_ir) = co_acodcozp/co_r
1014 REAL(fp) :: H2OdH2OTzp
1016 layer_loop :
DO k = 1, n_layers
1021 dt = temperature(k) - ref_temperature(k)
1022 t = temperature(k) / ref_temperature(k)
1033 h2o_a = secang(k)*h2o
1034 h2o_r = sqrt( h2o_a )
1036 h2o_r4 = sqrt( h2o_r )
1053 predictor%X(k, 5,
comp_dry_mw) = secang(k) * secang(k)
1062 predictor%X(k, 3,
comp_wet_mw) = h2o_a/t2 * h2o/t2
1182 INTEGER,
INTENT(IN) :: group_id
1183 REAL(fp),
INTENT(IN) :: temperature(:)
1184 REAL(fp),
INTENT(IN) :: absorber(:, :)
1185 REAL(fp),
INTENT(IN) :: ref_temperature(:)
1186 REAL(fp),
INTENT(IN) :: ref_absorber(:, :)
1187 REAL(fp),
INTENT(IN) :: secang(:)
1188 REAL(fp),
INTENT(IN) :: temperature_tl(:)
1189 REAL(fp),
INTENT(IN) :: absorber_tl(:, :)
1196 CHARACTER(*),
PARAMETER :: routine_name =
'ODPS_Compute_Predictor_TL' 1200 REAL(fp) :: tzp_sum_tl
1201 REAL(fp) :: tzp_tl(
size(absorber, dim=1))
1202 REAL(fp) :: tz_sum_tl
1203 REAL(fp) :: tz_tl(
size(absorber, dim=1))
1204 REAL(fp) :: gaz_sum_tl(
size(absorber, dim=2))
1205 REAL(fp) :: gaz_tl(
size(absorber, dim=1),
size(absorber, dim=2))
1206 REAL(fp) :: gazp_sum_tl(
size(absorber, dim=2))
1207 REAL(fp) :: gazp_tl(
size(absorber, dim=1),
size(absorber, dim=2))
1208 REAL(fp) :: gatzp_sum_tl(
size(absorber, dim=2))
1209 REAL(fp) :: gatzp_tl(
size(absorber, dim=1),
size(absorber, dim=2))
1210 TYPE(pafv_type),
POINTER :: pafv => null()
1213 pafv => predictor%PAFV
1215 n_layers = predictor%n_Layers
1217 predictor_tl%Secant_Zenith = secang
1229 layer_loop :
DO k = 1, n_layers
1232 tz_sum_tl = tz_sum_tl + temperature_tl(k)
1233 tz_tl(k) = tz_sum_tl / pafv%Tz_ref(k)
1234 tzp_sum_tl = tzp_sum_tl + pafv%PDP(k)*temperature_tl(k)
1235 tzp_tl(k) = tzp_sum_tl/pafv%Tzp_ref(k)
1239 gaz_sum_tl(j) = gaz_sum_tl(j) + absorber_tl(k, j)
1240 gaz_tl(k, j) = gaz_sum_tl(j) / pafv%GAz_ref(k,j)
1241 gazp_sum_tl(j) = gazp_sum_tl(j) + pafv%PDP(k)*absorber_tl(k, j)
1242 gazp_tl(k, j) = gazp_sum_tl(j) / pafv%GAzp_ref(k,j)
1243 gatzp_sum_tl(j) = gatzp_sum_tl(j) + pafv%PDP(k)*absorber_tl(k, j)*temperature(k) + &
1244 pafv%PDP(k)*absorber(k, j)*temperature_tl(k)
1245 gatzp_tl(k, j) = gatzp_sum_tl(j) / pafv%GATzp_ref(k,j)
1255 SELECT CASE( group_id )
1272 REAL(fp) :: DT, DT_TL
1274 REAL(fp) :: T2, T2_TL
1275 REAL(fp) :: DT2, DT2_TL
1276 REAL(fp) :: H2O, H2O_TL
1277 REAL(fp) :: H2O_A, H2O_A_TL
1278 REAL(fp) :: H2O_R, H2O_R_TL
1279 REAL(fp) :: H2O_S, H2O_S_TL
1280 REAL(fp) :: H2O_R4, H2O_R4_TL
1281 REAL(fp) :: H2OdH2OTzp, H2OdH2OTzp_TL
1282 REAL(fp) :: CO2, CO2_TL
1283 REAL(fp) :: O3, O3_TL
1284 REAL(fp) :: O3_A, O3_A_TL
1285 REAL(fp) :: O3_R, O3_R_TL
1286 REAL(fp) :: CO, CO_TL
1287 REAL(fp) :: CO_A, CO_A_TL
1288 REAL(fp) :: CO_R, CO_R_TL
1289 REAL(fp) :: CO_S, CO_S_TL
1290 REAL(fp) :: CO_ACOdCOzp, CO_ACOdCOzp_TL
1291 REAL(fp) :: N2O, N2O_TL
1292 REAL(fp) :: N2O_A, N2O_A_TL
1293 REAL(fp) :: N2O_R, N2O_R_TL
1294 REAL(fp) :: N2O_S, N2O_S_TL
1295 REAL(fp) :: CH4, CH4_TL
1296 REAL(fp) :: CH4_A, CH4_A_TL
1297 REAL(fp) :: CH4_R, CH4_R_TL
1298 REAL(fp) :: CH4_ACH4zp, CH4_ACH4zp_TL
1300 layer_loop :
DO k = 1, n_layers
1305 dt = temperature(k) - ref_temperature(k)
1306 t = temperature(k) / ref_temperature(k)
1307 dt_tl = temperature_tl(k)
1308 t_tl = temperature_tl(k) / ref_temperature(k)
1327 dt2_tl =
two*dt*dt_tl
1329 dt2_tl = -
two*dt*dt_tl
1332 h2o_a = secang(k)*h2o
1333 h2o_r = sqrt( h2o_a )
1335 h2o_r4 = sqrt( h2o_r )
1338 h2o_a_tl = secang(k)*h2o_tl
1339 h2o_r_tl = (
point_5 / sqrt(h2o_a)) * h2o_a_tl
1340 h2o_s_tl =
two * h2o_a * h2o_a_tl
1341 h2o_r4_tl = (
point_5 / sqrt(h2o_r)) * h2o_r_tl
1342 h2odh2otzp_tl = h2o_tl/pafv%GATzp(k,
abs_h2o_ir) - &
1348 o3_a_tl = secang(k)*o3_tl
1349 o3_r_tl = (
point_5 / sqrt(o3_a)) * o3_a_tl
1360 n2o_a = secang(k)*n2o
1361 n2o_r = sqrt( n2o_a )
1364 n2o_a_tl = secang(k) * n2o_tl
1365 n2o_r_tl = (
point_5 / sqrt(n2o_a)) * n2o_a_tl
1366 n2o_s_tl =
two * n2o_a * n2o_a_tl
1371 co_acodcozp = co_a*co/pafv%GAzp(k,
abs_co_ir)
1373 co_a_tl = secang(k)*co_tl
1374 co_r_tl = (
point_5 / sqrt(co_a)) * co_a_tl
1375 co_s_tl =
two * co_a * co_a_tl
1376 co_acodcozp_tl = co_a_tl*co/pafv%GAzp(k,
abs_co_ir) + co_a*co_tl/pafv%GAzp(k,
abs_co_ir) &
1379 ch4_a = secang(k)*ch4
1381 ch4_ach4zp = secang(k)*pafv%GAzp(k,
abs_ch4_ir)
1383 ch4_a_tl = secang(k)*ch4_tl
1384 ch4_r_tl = (
point_5 / sqrt(ch4_a)) * ch4_a_tl
1385 ch4_ach4zp_tl = secang(k)*gazp_tl(k,
abs_ch4_ir)
1401 predictor_tl%X(k, 2,
comp_dry_ir) = secang(k) * t_tl
1402 predictor_tl%X(k, 3,
comp_dry_ir) = secang(k) * t2_tl
1411 predictor_tl%X(k, 1,
comp_wco_ir) = h2o_a_tl/t - h2o_a * t_tl/t**2
1412 predictor_tl%X(k, 2,
comp_wco_ir) = h2o_a_tl*h2o/t + h2o_a*h2o_tl/t - h2o_a*h2o*t_tl/t**2
1413 predictor_tl%X(k, 3,
comp_wco_ir) = h2o_a_tl*h2o/t2**2 + h2o_a*h2o_tl/t2**2 - &
1414 two*h2o_a*h2o*t2_tl/t2**3
1415 predictor_tl%X(k, 4,
comp_wco_ir) = h2o_a_tl/t2 - h2o_a * t2_tl/t2**2
1416 predictor_tl%X(k, 5,
comp_wco_ir) = h2o_a_tl*h2o/t2 + h2o_a*h2o_tl/t2 - h2o_a*h2o*t2_tl/t2**2
1417 predictor_tl%X(k, 6,
comp_wco_ir) = h2o_a_tl/t2**2 -
two*h2o_a*t2_tl/t2**3
1424 predictor_tl%X(k, 2,
comp_ozo_ir) = o3_a_tl*dt + o3_a*dt_tl
1432 predictor_tl%X(k, 7,
comp_ozo_ir) = o3_r_tl*dt + o3_r*dt_tl
1444 predictor_tl%X(k, 1,
comp_co2_ir) = secang(k) * t_tl
1445 predictor_tl%X(k, 2,
comp_co2_ir) = secang(k) * t2_tl
1449 predictor_tl%X(k, 6,
comp_co2_ir) = secang(k)*co2_tl
1450 predictor_tl%X(k, 7,
comp_co2_ir) = secang(k)*tzp_tl(k)
1453 predictor_tl%X(k, 10,
comp_co2_ir) = secang(k)*( sqrt(t)*tzp_tl(k) + (
point_5*pafv%Tzp(k)/sqrt(t))*t_tl )
1459 predictor_tl%X(k, 2,
comp_wlo_ir) = h2o_a_tl*dt + h2o_a*dt_tl
1461 predictor_tl%X(k, 4,
comp_wlo_ir) = h2o_a_tl*dt2 + h2o_a*dt2_tl
1463 predictor_tl%X(k, 6,
comp_wlo_ir) = h2o_s_tl*h2o_a + h2o_s*h2o_a_tl
1465 predictor_tl%X(k, 8,
comp_wlo_ir) = h2o_r_tl*dt + h2o_r*dt_tl
1468 predictor_tl%X(k,11,
comp_wlo_ir) = h2o_r_tl*h2odh2otzp + h2o_r*h2odh2otzp_tl
1472 predictor_tl%X(k,15,
comp_wlo_ir) = secang(k)*co2_tl
1475 if_group1:
IF( group_id ==
group_1 )
THEN 1480 predictor_tl%X(k, 17,
comp_wlo_ir) =
two*ch4_a*ch4_a_tl*dt + ch4_a*ch4_a*dt_tl
1487 predictor_tl%X(k, 2,
comp_co_ir) = co_a_tl*dt + co_a*dt_tl
1489 predictor_tl%X(k, 4,
comp_co_ir) = co_r_tl*dt + co_r*dt_tl
1492 predictor_tl%X(k, 7,
comp_co_ir) = co_a_tl*dt2 + co_a*dt2_tl
1493 predictor_tl%X(k, 8,
comp_co_ir) = co_acodcozp_tl
1494 predictor_tl%X(k, 9,
comp_co_ir) = co_acodcozp_tl/co_r - co_acodcozp*co_r_tl/co_r**2
1502 predictor_tl%X(k, 1,
comp_ch4_ir) = ch4_a_tl*dt + ch4_a*dt_tl
1506 predictor_tl%X(k, 5,
comp_ch4_ir) = ch4_tl*dt + ch4*dt_tl
1518 predictor_tl%X(k, 1,
comp_n2o_ir) = n2o_a_tl*dt + n2o_a*dt_tl
1520 predictor_tl%X(k, 3,
comp_n2o_ir) = n2o_tl*dt + n2o*dt_tl
1548 REAL(fp) :: DT, DT_TL
1550 REAL(fp) :: T2, T2_TL
1551 REAL(fp) :: DT2, DT2_TL
1552 REAL(fp) :: H2O, H2O_TL
1553 REAL(fp) :: H2O_A, H2O_A_TL
1554 REAL(fp) :: H2O_R, H2O_R_TL
1555 REAL(fp) :: H2O_S, H2O_S_TL
1556 REAL(fp) :: H2O_R4, H2O_R4_TL
1557 REAL(fp) :: H2OdH2OTzp, H2OdH2OTzp_TL
1559 layer_loop :
DO k = 1, n_layers
1564 dt = temperature(k) - ref_temperature(k)
1565 t = temperature(k) / ref_temperature(k)
1567 dt_tl = temperature_tl(k)
1568 t_tl = temperature_tl(k) / ref_temperature(k)
1582 dt2_tl =
two*dt*dt_tl
1584 dt2_tl = -
two*dt*dt_tl
1587 h2o_a = secang(k)*h2o
1588 h2o_r = sqrt( h2o_a )
1590 h2o_r4 = sqrt( h2o_r )
1593 h2o_a_tl = secang(k)*h2o_tl
1594 h2o_r_tl = (
point_5 / sqrt(h2o_a)) * h2o_a_tl
1595 h2o_s_tl =
two * h2o_a * h2o_a_tl
1596 h2o_r4_tl = (
point_5 / sqrt(h2o_r)) * h2o_r_tl
1597 h2odh2otzp_tl = h2o_tl/pafv%GATzp(k,
abs_h2o_mw) - &
1611 predictor_tl%X(k, 2,
comp_dry_mw) = secang(k) * t_tl
1612 predictor_tl%X(k, 3,
comp_dry_mw) = secang(k) * t2_tl
1621 predictor_tl%X(k, 1,
comp_wet_mw) = h2o_a_tl/t - h2o_a*t_tl/t**2
1622 predictor_tl%X(k, 2,
comp_wet_mw) = h2o_a_tl*h2o/t + h2o_a*h2o_tl/t - h2o_a*h2o*t_tl/t**2
1623 predictor_tl%X(k, 3,
comp_wet_mw) = h2o_a_tl*h2o/t2**2 + h2o_a*h2o_tl/t2**2 - &
1624 two*h2o_a*h2o*t2_tl/t2**3
1625 predictor_tl%X(k, 4,
comp_wet_mw) = h2o_a_tl/t2 - h2o_a * t2_tl/t2**2
1626 predictor_tl%X(k, 5,
comp_wet_mw) = h2o_a_tl*h2o/t2 + h2o_a*h2o_tl/t2 - h2o_a*h2o*t2_tl/t2**2
1627 predictor_tl%X(k, 6,
comp_wet_mw) = h2o_a_tl/t2**2 -
two*h2o_a*t2_tl/t2**3
1629 predictor_tl%X(k, 8,
comp_wet_mw) = h2o_a_tl*dt + h2o_a*dt_tl
1633 predictor_tl%X(k, 12,
comp_wet_mw) = h2o_s_tl*h2o_a + h2o_s*h2o_a_tl
1747 INTEGER,
INTENT(IN) :: group_id
1748 REAL(fp),
INTENT(IN) :: temperature(:)
1749 REAL(fp),
INTENT(IN) :: absorber(:, :)
1750 REAL(fp),
INTENT(IN) :: ref_temperature(:)
1751 REAL(fp),
INTENT(IN) :: ref_absorber(:, :)
1752 REAL(fp),
INTENT(IN) :: secang(:)
1755 REAL(fp),
INTENT(IN OUT) :: temperature_ad(:)
1756 REAL(fp),
INTENT(IN OUT) :: absorber_ad(:, :)
1761 CHARACTER(*),
PARAMETER :: routine_name =
'ODPS_Compute_Predictor_AD' 1765 REAL(fp) :: tzp_sum_ad
1766 REAL(fp) :: tzp_ad(
size(absorber, dim=1))
1767 REAL(fp) :: tz_sum_ad
1768 REAL(fp) :: tz_ad(
size(absorber, dim=1))
1769 REAL(fp) :: gaz_sum_ad(
size(absorber, dim=2))
1770 REAL(fp) :: gaz_ad(
size(absorber, dim=1),
size(absorber, dim=2))
1771 REAL(fp) :: gazp_sum_ad(
size(absorber, dim=2))
1772 REAL(fp) :: gazp_ad(
size(absorber, dim=1),
size(absorber, dim=2))
1773 REAL(fp) :: gatzp_sum_ad(
size(absorber, dim=2))
1774 REAL(fp) :: gatzp_ad(
size(absorber, dim=1),
size(absorber, dim=2))
1775 TYPE(pafv_type),
POINTER :: pafv => null()
1778 pafv => predictor%PAFV
1780 n_layers = predictor%n_Layers
1804 SELECT CASE( group_id )
1811 adjoint_layer_loop :
DO k = n_layers, 1, -1
1816 gatzp_sum_ad(j) = gatzp_sum_ad(j) + gatzp_ad(k, j)/pafv%GATzp_ref(k,j)
1817 gazp_sum_ad(j) = gazp_sum_ad(j) + gazp_ad(k, j)/pafv%GAzp_ref(k,j)
1818 gaz_sum_ad(j) = gaz_sum_ad(j) + gaz_ad(k, j)/pafv%GAz_ref(k,j)
1819 temperature_ad(k) = temperature_ad(k) + gatzp_sum_ad(j)*pafv%PDP(k)*absorber(k, j)
1820 absorber_ad(k, j) = absorber_ad(k, j) + gaz_sum_ad(j) + gazp_sum_ad(j)*pafv%PDP(k) &
1821 + gatzp_sum_ad(j)*pafv%PDP(k)*temperature(k)
1822 gatzp_ad(k, j) =
zero 1823 gazp_ad(k, j) =
zero 1829 tzp_sum_ad = tzp_sum_ad + tzp_ad(k)/pafv%Tzp_ref(k)
1830 tz_sum_ad = tz_sum_ad + tz_ad(k)/pafv%Tz_ref(k)
1831 temperature_ad(k) = temperature_ad(k) + tz_sum_ad + pafv%PDP(k)*tzp_sum_ad
1835 END DO adjoint_layer_loop
1847 REAL(fp) :: DT, DT_AD
1849 REAL(fp) :: T2, T2_AD
1850 REAL(fp) :: DT2, DT2_AD
1851 REAL(fp) :: H2O, H2O_AD
1852 REAL(fp) :: H2O_A, H2O_A_AD
1853 REAL(fp) :: H2O_R, H2O_R_AD
1854 REAL(fp) :: H2O_S, H2O_S_AD
1855 REAL(fp) :: H2O_R4, H2O_R4_AD
1856 REAL(fp) :: H2OdH2OTzp, H2OdH2OTzp_AD
1857 REAL(fp) :: CO2, CO2_AD
1858 REAL(fp) :: O3, O3_AD
1859 REAL(fp) :: O3_A, O3_A_AD
1860 REAL(fp) :: O3_R, O3_R_AD
1861 REAL(fp) :: CO, CO_AD
1862 REAL(fp) :: CO_A, CO_A_AD
1863 REAL(fp) :: CO_R, CO_R_AD
1864 REAL(fp) :: CO_S, CO_S_AD
1865 REAL(fp) :: CO_ACOdCOzp, CO_ACOdCOzp_AD
1866 REAL(fp) :: N2O, N2O_AD
1867 REAL(fp) :: N2O_A, N2O_A_AD
1868 REAL(fp) :: N2O_R, N2O_R_AD
1869 REAL(fp) :: N2O_S, N2O_S_AD
1870 REAL(fp) :: CH4, CH4_AD
1871 REAL(fp) :: CH4_A, CH4_A_AD
1872 REAL(fp) :: CH4_R, CH4_R_AD
1873 REAL(fp) :: CH4_ACH4zp, CH4_ACH4zp_AD
1884 h2odh2otzp_ad =
zero 1893 co_acodcozp_ad =
zero 1901 ch4_ach4zp_ad =
zero 1903 layer_loop :
DO k = n_layers, 1, -1
1908 dt = temperature(k) - ref_temperature(k)
1909 t = temperature(k) / ref_temperature(k)
1922 h2o_a = secang(k)*h2o
1923 h2o_r = sqrt( h2o_a )
1925 h2o_r4 = sqrt( h2o_r )
1936 n2o_a = secang(k)*n2o
1937 n2o_r = sqrt( n2o_a )
1943 co_acodcozp = co_a*co/pafv%GAzp(k,
abs_co_ir)
1945 ch4_a = secang(k)*ch4
1947 ch4_ach4zp = secang(k)*pafv%GAzp(k,
abs_ch4_ir)
1964 tz_ad(k) = tz_ad(k) + predictor_ad%X(k, 7,
comp_dry_ir)
1977 h2o_a_ad = h2o_a_ad &
1987 - predictor_ad%X(k, 2,
comp_wco_ir)*h2o_a*h2o/t**2
1995 - predictor_ad%X(k, 5,
comp_wco_ir)*h2o_a*h2o/t2**2 &
2071 co2_ad = co2_ad + predictor_ad%X(k, 6,
comp_co2_ir)*secang(k)
2073 tzp_ad(k) = tzp_ad(k) &
2076 + predictor_ad%X(k, 10,
comp_co2_ir)*secang(k)*sqrt(t)
2097 h2o_a_ad = h2o_a_ad &
2107 h2o_s_ad = h2o_s_ad &
2112 dt2_ad = dt2_ad + predictor_ad%X(k, 4,
comp_wlo_ir)*h2o_a
2114 h2o_r4_ad= h2o_r4_ad + predictor_ad%X(k, 5,
comp_wlo_ir)
2116 h2o_r_ad = h2o_r_ad &
2121 h2odh2otzp_ad = h2odh2otzp_ad &
2129 co2_ad = co2_ad + predictor_ad%X(k,15,
comp_wlo_ir)*secang(k)
2148 if_group1:
IF( group_id ==
group_1 )
THEN 2150 co_a_ad = co_a_ad + predictor_ad%X(k, 18,
comp_wlo_ir) &
2152 ch4_a_ad = ch4_a_ad &
2155 dt_ad = dt_ad + predictor_ad%X(k, 17,
comp_wlo_ir)*ch4_a*ch4_a
2179 - predictor_ad%X(k, 9,
comp_co_ir)*co_acodcozp/co_r**2
2181 co_s_ad = co_s_ad + predictor_ad%X(k, 5,
comp_co_ir)
2183 dt2_ad = dt2_ad + predictor_ad%X(k, 7,
comp_co_ir)*co_a
2185 co_acodcozp_ad = co_acodcozp_ad &
2209 ch4_a_ad = ch4_a_ad &
2218 ch4_r_ad = ch4_r_ad &
2227 ch4_ach4zp_ad = ch4_ach4zp_ad &
2255 n2o_a_ad = n2o_a_ad &
2264 n2o_r_ad = n2o_r_ad &
2280 n2o_s_ad = n2o_s_ad + predictor_ad%X(k, 8,
comp_n2o_ir)
2282 ch4_a_ad = ch4_a_ad &
2294 + predictor_ad%X(k,14,
comp_n2o_ir)*co_a*secang(k)
2317 ch4_a_ad = ch4_a_ad + (
point_5/sqrt(ch4_a)) * ch4_r_ad
2318 ch4_ad = ch4_ad + secang(k)*ch4_a_ad
2319 ch4_ach4zp_ad =
zero 2324 - co_acodcozp_ad*co_a*co/pafv%GAzp(k,
abs_co_ir)**2
2325 co_a_ad = co_a_ad + co_acodcozp_ad*co/pafv%GAzp(k,
abs_co_ir) &
2326 + co_s_ad*
two * co_a &
2328 co_ad = co_ad + co_acodcozp_ad*co_a/pafv%GAzp(k,
abs_co_ir) &
2330 co_acodcozp_ad =
zero 2335 n2o_a_ad = n2o_a_ad + n2o_r_ad *
point_5 / sqrt(n2o_a) &
2336 + n2o_s_ad *
two * n2o_a
2337 n2o_ad = n2o_ad + n2o_a_ad * secang(k)
2356 o3_a_ad = o3_a_ad + o3_r_ad *
point_5 / sqrt(o3_a)
2357 o3_ad = o3_ad + o3_a_ad * secang(k)
2362 - h2odh2otzp_ad*h2o/pafv%GATzp(k,
abs_h2o_ir)**2
2363 h2o_r_ad = h2o_r_ad + h2o_r4_ad *
point_5 / sqrt(h2o_r)
2364 h2o_a_ad = h2o_a_ad + h2o_s_ad *
two * h2o_a &
2365 + h2o_r_ad *
point_5 / sqrt(h2o_a)
2366 h2o_ad = h2o_ad + h2o_a_ad * secang(k) &
2373 h2odh2otzp_ad =
zero 2376 dt_ad = dt_ad + dt2_ad*
two*dt
2378 dt_ad = dt_ad - dt2_ad*
two*dt
2380 t_ad = t_ad + t2_ad*
two*t
2400 temperature_ad(k) = temperature_ad(k) + t_ad/ref_temperature(k) &
2415 REAL(fp) :: DT, DT_AD
2417 REAL(fp) :: T2, T2_AD
2418 REAL(fp) :: DT2, DT2_AD
2419 REAL(fp) :: H2O, H2O_AD
2420 REAL(fp) :: H2O_A, H2O_A_AD
2421 REAL(fp) :: H2O_R, H2O_R_AD
2422 REAL(fp) :: H2O_S, H2O_S_AD
2423 REAL(fp) :: H2O_R4, H2O_R4_AD
2424 REAL(fp) :: H2OdH2OTzp, H2OdH2OTzp_AD
2435 h2odh2otzp_ad =
zero 2437 layer_loop :
DO k = n_layers, 1, -1
2442 dt = temperature(k) - ref_temperature(k)
2443 t = temperature(k) / ref_temperature(k)
2454 h2o_a = secang(k)*h2o
2455 h2o_r = sqrt( h2o_a )
2457 h2o_r4 = sqrt( h2o_r )
2479 tz_ad(k) = tz_ad(k) + predictor_ad%X(k, 7,
comp_dry_mw)
2493 h2o_a_ad = h2o_a_ad &
2506 - predictor_ad%X(k, 2,
comp_wet_mw)*h2o_a*h2o/t**2
2516 - predictor_ad%X(k, 5,
comp_wet_mw)*h2o_a*h2o/t2**2 &
2519 dt_ad = dt_ad + predictor_ad%X(k, 8,
comp_wet_mw)*h2o_a
2525 h2o_s_ad = h2o_s_ad &
2529 h2odh2otzp_ad = h2odh2otzp_ad + predictor_ad%X(k, 14,
comp_wet_mw)
2553 - h2odh2otzp_ad*h2o/pafv%GATzp(k,
abs_h2o_mw)**2
2554 h2o_r_ad = h2o_r_ad + h2o_r4_ad *
point_5 / sqrt(h2o_r)
2555 h2o_a_ad = h2o_a_ad + h2o_s_ad *
two * h2o_a &
2556 + h2o_r_ad *
point_5 / sqrt(h2o_a)
2557 h2o_ad = h2o_ad + h2o_a_ad * secang(k) &
2563 h2odh2otzp_ad =
zero 2566 dt_ad = dt_ad + dt2_ad*
two*dt
2568 dt_ad = dt_ad - dt2_ad*
two*dt
2570 t_ad = t_ad + t2_ad*
two*t
2581 temperature_ad(k) = temperature_ad(k) + t_ad/ref_temperature(k) &
2673 REAL(fp),
INTENT(IN) :: temperature(:)
2674 REAL(fp),
INTENT(IN) :: vapor(:)
2675 REAL(fp),
INTENT(IN) :: level_pressure(0:)
2676 REAL(fp),
INTENT(IN) :: pressure(:)
2677 REAL(fp),
INTENT(IN) :: secant_angle(:)
2678 REAL(fp),
INTENT(IN) :: alpha
2679 REAL(fp),
INTENT(IN) :: alpha_c1
2680 REAL(fp),
INTENT(IN) :: alpha_c2
2684 REAL(fp),
DIMENSION(0:Predictor%n_Layers) :: xl_t, xl_p
2685 REAL(fp) :: t2, p2, s_t, s_p, inverse, dpong, d_absorber
2686 REAL(fp) :: int_vapor_prev, int_vapor, avea, ap1
2690 DO k = 1, predictor%n_Layers
2691 t2 = temperature(k)*temperature(k)
2692 p2 = pressure(k)*pressure(k)
2693 predictor%OX(k, 1) = temperature(k)
2694 predictor%OX(k, 2) = pressure(k)
2695 predictor%OX(k, 3) = t2
2696 predictor%OX(k, 4) = p2
2697 predictor%OX(k, 5) = temperature(k) * pressure(k)
2698 predictor%OX(k, 6) = t2 * pressure(k)
2699 predictor%OX(k, 7) = temperature(k) * p2
2700 predictor%OX(k, 8) = t2 * p2
2701 predictor%OX(k, 9) = pressure(k)**
point_25 2702 predictor%OX(k, 10) = vapor(k)
2703 predictor%OX(k, 11) = vapor(k)/t2
2704 predictor%OX(k, 14) = secant_angle(k)
2708 int_vapor_prev =
zero 2714 DO k = 1, predictor%n_Layers
2717 d_absorber = dpong*vapor(k)*secant_angle(k)
2718 int_vapor = int_vapor_prev + d_absorber
2719 avea =
point_5 * (int_vapor_prev + int_vapor)
2721 predictor%dA(k) = d_absorber
2723 s_t = s_t + ( temperature( k ) * d_absorber )
2724 s_p = s_p + ( pressure( k ) * d_absorber )
2727 inverse =
one / int_vapor
2732 xl_t(k) =
point_5 * s_t * inverse
2733 xl_p(k) =
point_5 * s_p * inverse
2735 predictor%OX(k, 12) = xl_t(k) + xl_t(k-1)
2736 predictor%OX(k, 13) = xl_p(k) + xl_p(k-1)
2738 ap1 = log((avea - alpha_c2) / alpha_c1) / &
2742 predictor%Ap(k, 1) = ap1
2744 predictor%Ap(k, i) = predictor%Ap(k, i-1) * ap1
2747 int_vapor_prev = int_vapor
2750 IF(predictor%PAFV%OPTRAN)
THEN 2751 predictor%PAFV%dPonG(k) = dpong
2752 predictor%PAFV%d_Absorber(k) = d_absorber
2753 predictor%PAFV%Int_vapor(k) = int_vapor
2754 predictor%PAFV%AveA(k) = avea
2755 predictor%PAFV%Inverse(k) = inverse
2756 predictor%PAFV%s_t(k) = s_t
2757 predictor%PAFV%s_p(k) = s_p
2758 predictor%PAFV%Ap1(k) = ap1
2861 REAL(fp),
INTENT(IN) :: temperature(:)
2862 REAL(fp),
INTENT(IN) :: vapor(:)
2863 REAL(fp),
INTENT(IN) :: pressure(:)
2864 REAL(fp),
INTENT(IN) :: secant_angle(:)
2865 REAL(fp),
INTENT(IN) :: alpha
2866 REAL(fp),
INTENT(IN) :: alpha_c2
2868 REAL(fp),
INTENT(IN) :: temperature_tl(:)
2869 REAL(fp),
INTENT(IN) :: vapor_tl(:)
2873 REAL(fp),
DIMENSION(0:Predictor%n_Layers) :: xl_t_tl, xl_p_tl
2874 REAL(fp) :: t2, p2, &
2875 t2_tl, s_t_tl, s_p_tl, inverse_tl, d_absorber_tl
2876 REAL(fp) :: int_vapor_prev_tl, int_vapor_tl, avea_tl, ap1_tl
2878 TYPE(pafv_type),
POINTER :: pafv => null()
2881 pafv => predictor%PAFV
2884 DO k = 1, predictor%n_Layers
2885 t2 = temperature(k)*temperature(k)
2886 p2 = pressure(k)*pressure(k)
2887 t2_tl =
two*temperature(k)*temperature_tl(k)
2888 predictor_tl%OX(k, 1) = temperature_tl(k)
2889 predictor_tl%OX(k, 2) =
zero 2890 predictor_tl%OX(k, 3) = t2_tl
2891 predictor_tl%OX(k, 4) =
zero 2892 predictor_tl%OX(k, 5) = temperature_tl(k) * pressure(k)
2893 predictor_tl%OX(k, 6) = t2_tl * pressure(k)
2894 predictor_tl%OX(k, 7) = temperature_tl(k) * p2
2895 predictor_tl%OX(k, 8) = t2_tl * p2
2896 predictor_tl%OX(k, 9) =
zero 2897 predictor_tl%OX(k, 10) = vapor_tl(k)
2898 predictor_tl%OX(k, 11) = vapor_tl(k)/t2 - (vapor(k)/t2**2)*t2_tl
2899 predictor_tl%OX(k, 14) =
zero 2904 int_vapor_prev_tl =
zero 2910 DO k = 1, predictor%n_Layers
2912 d_absorber_tl = pafv%dPonG(k)*vapor_tl(k)*secant_angle(k)
2914 int_vapor_tl = int_vapor_prev_tl + d_absorber_tl
2915 avea_tl =
point_5 * (int_vapor_prev_tl + int_vapor_tl)
2917 predictor_tl%dA(k) = d_absorber_tl
2919 s_t_tl = s_t_tl + ( temperature_tl( k )*pafv%d_Absorber(k) + temperature( k )*d_absorber_tl)
2920 s_p_tl = s_p_tl + ( pressure( k )*d_absorber_tl )
2923 inverse_tl = -(
one/pafv%Int_vapor(k)**2)*int_vapor_tl
2928 xl_t_tl(k) =
point_5 * (s_t_tl*pafv%Inverse(k) + pafv%s_t(k)*inverse_tl)
2929 xl_p_tl(k) =
point_5 * (s_p_tl*pafv%Inverse(k) + pafv%s_p(k)*inverse_tl)
2931 predictor_tl%OX(k, 12) = xl_t_tl(k) + xl_t_tl(k-1)
2932 predictor_tl%OX(k, 13) = xl_p_tl(k) + xl_p_tl(k-1)
2934 ap1_tl = avea_tl / &
2936 ( alpha * (pafv%aveA(k) - alpha_c2 ) )
2938 predictor_tl%Ap(k, 1) = ap1_tl
2941 predictor_tl%Ap(k, i) = predictor_tl%Ap(k, i-1)*pafv%Ap1(k) + predictor%Ap(k, i-1)*ap1_tl
2944 int_vapor_prev_tl = int_vapor_tl
3046 REAL(fp),
INTENT(IN) :: temperature(:)
3047 REAL(fp),
INTENT(IN) :: vapor(:)
3048 REAL(fp),
INTENT(IN) :: pressure(:)
3049 REAL(fp),
INTENT(IN) :: secant_angle(:)
3050 REAL(fp),
INTENT(IN) :: alpha
3051 REAL(fp),
INTENT(IN) :: alpha_c2
3054 REAL(fp),
INTENT(IN OUT) :: temperature_ad(:)
3055 REAL(fp),
INTENT(IN OUT) :: vapor_ad(:)
3058 REAL(fp),
DIMENSION(0:Predictor%n_Layers) :: xl_t_ad, xl_p_ad
3060 REAL(fp) :: t2_ad, s_t_ad, s_p_ad, inverse_ad, d_absorber_ad
3061 REAL(fp) :: int_vapor_prev_ad, int_vapor_ad, avea_ad, ap1_ad
3063 TYPE(pafv_type),
POINTER :: pafv => null()
3066 pafv => predictor%PAFV
3071 int_vapor_prev_ad =
zero 3075 xl_t_ad(predictor%n_Layers) =
zero 3076 xl_p_ad(predictor%n_Layers) =
zero 3080 d_absorber_ad =
zero 3081 DO k = predictor%n_Layers, 1, -1
3083 int_vapor_ad = int_vapor_ad + int_vapor_prev_ad
3084 int_vapor_prev_ad =
zero 3087 ap1_ad = ap1_ad + predictor%Ap(k, i-1)*predictor_ad%Ap(k, i)
3088 predictor_ad%Ap(k, i-1) = predictor_ad%Ap(k, i-1) + pafv%Ap1(k)*predictor_ad%Ap(k, i)
3089 predictor_ad%Ap(k, i) =
zero 3092 ap1_ad = ap1_ad + predictor_ad%Ap(k, 1)
3093 predictor_ad%Ap(k, 1) =
zero 3095 avea_ad = avea_ad + &
3098 ( alpha * (pafv%aveA(k) - alpha_c2 ) )
3101 xl_t_ad(k) = xl_t_ad(k) + predictor_ad%OX(k, 12)
3102 xl_t_ad(k-1) = predictor_ad%OX(k, 12)
3103 predictor_ad%OX(k, 12) =
zero 3104 xl_p_ad(k) = xl_p_ad(k) + predictor_ad%OX(k, 13)
3105 xl_p_ad(k-1) = predictor_ad%OX(k, 13)
3106 predictor_ad%OX(k, 13) =
zero 3108 s_p_ad = s_p_ad +
point_5*pafv%Inverse(k)*xl_p_ad(k)
3109 inverse_ad = inverse_ad +
point_5*pafv%s_p(k)*xl_p_ad(k)
3110 s_t_ad = s_t_ad +
point_5*pafv%Inverse(k)*xl_t_ad(k)
3111 inverse_ad = inverse_ad +
point_5*pafv%s_t(k)*xl_t_ad(k)
3116 int_vapor_ad = int_vapor_ad -(
one/pafv%Int_vapor(k)**2)*inverse_ad
3122 d_absorber_ad = d_absorber_ad + pressure( k )*s_p_ad &
3123 + temperature( k )*s_t_ad
3124 temperature_ad( k ) = temperature_ad( k ) + pafv%d_Absorber(k)*s_t_ad
3126 d_absorber_ad = d_absorber_ad + predictor_ad%dA(k)
3127 predictor_ad%dA(k) =
zero 3129 int_vapor_prev_ad = int_vapor_prev_ad +
point_5 * avea_ad
3130 int_vapor_ad = int_vapor_ad +
point_5 * avea_ad
3133 int_vapor_prev_ad = int_vapor_prev_ad + int_vapor_ad
3134 d_absorber_ad = d_absorber_ad + int_vapor_ad
3137 vapor_ad(k) = vapor_ad(k) + pafv%dPonG(k)*d_absorber_ad*secant_angle(k)
3138 d_absorber_ad =
zero 3144 DO k = predictor%n_Layers, 1, -1
3145 t2 = temperature(k)*temperature(k)
3146 p2 = pressure(k)*pressure(k)
3148 temperature_ad(k) = temperature_ad(k) &
3149 + predictor_ad%OX(k, 1) &
3150 + pressure(k)* predictor_ad%OX(k, 5) &
3151 + p2* predictor_ad%OX(k, 7)
3152 t2_ad = predictor_ad%OX(k, 3) &
3153 + pressure(k)* predictor_ad%OX(k, 6) &
3154 + p2* predictor_ad%OX(k, 8) &
3155 - (vapor(k)/t2**2)* predictor_ad%OX(k, 11)
3157 vapor_ad(k) = vapor_ad(k) &
3158 + predictor_ad%OX(k, 10) &
3159 + predictor_ad%OX(k, 11)/t2
3161 predictor_ad%OX(k, 1:11) =
zero 3162 predictor_ad%OX(k, 14) =
zero 3164 temperature_ad(k) = temperature_ad(k) +
two*temperature(k)*t2_ad
3172 INTEGER,
INTENT( IN ) :: group_index
3173 INTEGER :: max_n_predictors
3179 INTEGER,
INTENT( IN ) :: group_index
3180 INTEGER :: n_components
3186 INTEGER,
INTENT( IN ) :: group_index
3187 INTEGER :: n_absorbers
3193 INTEGER,
INTENT( IN ) :: component_index
3194 INTEGER,
INTENT( IN ) :: group_index
3195 INTEGER :: component_id
3196 SELECT CASE( group_index )
3208 INTEGER,
INTENT( IN ) :: absorber_index
3209 INTEGER,
INTENT( IN ) :: group_index
3210 INTEGER :: absorber_id
3211 SELECT CASE( group_index )
3223 INTEGER,
INTENT(IN) :: group_index
3224 INTEGER :: ozone_component_id
3228 ozone_component_id = -1
integer, parameter, public wet_comid
real(fp), parameter one_point_25
integer, parameter, public wlo_comid
integer, parameter co2_id
integer, dimension(5), parameter n_predictors_g2
integer, parameter ch4_comid
subroutine, public odps_compute_predictor_odas_tl(Temperature, Vapor, Pressure, secant_angle, Alpha, Alpha_C2, Predictor, Temperature_TL, Vapor_TL, Predictor_TL)
subroutine odps_compute_predictor_ir_tl()
pure integer function, public odps_get_n_components(Group_Index)
integer, dimension(n_g), parameter n_absorbers_g
integer, parameter wco_comid
integer, dimension(n_g), parameter max_n_predictors_g
integer, parameter, public fp
pure integer function, public odps_get_n_absorbers(Group_Index)
real(fp), parameter point_75
integer, dimension(8), parameter component_id_map_g1
integer, parameter comp_wco_ir
integer, parameter abs_h2o_mw
integer, parameter, public co2_comid
integer, dimension(n_g), parameter n_components_g
integer, parameter abs_o3_ir
integer, parameter, public group_2
subroutine, public odps_assemble_predictors_ad(TC, Predictor, Predictor_AD, Atm_AD)
pure integer function, public odps_get_component_id(Component_Index, Group_Index)
subroutine, public odps_assemble_predictors_tl(TC, Predictor, Atm_TL, Predictor_TL)
subroutine, public odps_compute_predictor_odas(Temperature, Vapor, Level_Pressure, Pressure, secant_angle, Alpha, Alpha_C1, Alpha_C2, Predictor)
integer, dimension(3), parameter absorber_id_map_g2
real(fp), parameter three
subroutine odps_compute_predictor_ir_ad()
integer, dimension(8), parameter n_predictors_g1
integer, parameter comp_ch4_ir
integer, dimension(1), parameter absorber_id_map_g3
integer, parameter n2o_id
real(fp), parameter, public minimum_absorber_amount
integer, parameter abs_ch4_ir
subroutine, public map_input_tl(TC, Atm_TL, Temperature_TL, Absorber_TL, PAFV)
integer, parameter co_comid
integer, parameter n2o_comid
integer, parameter h2o_id
integer, dimension(6), parameter absorber_id_map_g1
integer, parameter comp_co2_ir
integer, parameter, public tot_comid
integer, parameter comp_dry_mw
subroutine, public odps_compute_predictor(Group_ID, Temperature, Absorber, Ref_Level_Pressure, Ref_Temperature, Ref_Absorber, secang, Predictor)
integer, parameter ch4_id
subroutine odps_compute_predictor_mw()
real(fp), parameter point_25
integer, parameter ozo_comid
character(*), parameter, private module_version_id
logical, parameter, public allow_optran
subroutine, public odps_compute_predictor_odas_ad(Temperature, Vapor, Pressure, secant_angle, Alpha, Alpha_C2, Predictor, Predictor_AD, Temperature_AD, Vapor_AD)
subroutine, public map_input_ad(TC, Temperature_AD, Absorber_AD, Atm_AD, PAFV)
integer, dimension(2), parameter component_id_map_g3
subroutine, public compute_interp_index(x, u, interp_index)
pure integer function, public odps_get_ozone_component_id(Group_Index)
real(fp), parameter one_point_5
integer, parameter abs_co_ir
pure integer function, public odps_get_max_n_predictors(Group_Index)
subroutine, public map_input(Atm, TC, GeoInfo, Temperature, Absorber, User_Level_LnPressure, Ref_Level_LnPressure, Secant_Zenith, H2O_idx, PAFV)
integer, parameter comp_dry_ir
************************************************************************GNU Lesser General Public License **This file is part of the GFDL Flexible Modeling System(FMS). ! *! *FMS is free software without even the implied warranty of MERCHANTABILITY or *FITNESS FOR A PARTICULAR PURPOSE See the GNU General Public License *for more details **You should have received a copy of the GNU Lesser General Public *License along with FMS If see< http:! ***********************************************************************subroutine READ_RECORD_CORE_(unit, field, nwords, data, start, axsiz) integer, intent(in) ::unit type(fieldtype), intent(in) ::field integer, intent(in) ::nwords MPP_TYPE_, intent(inout) ::data(nwords) integer, intent(in) ::start(:), axsiz(:) integer(SHORT_KIND) ::i2vals(nwords)!rab used in conjunction with transfer intrinsic to determine size of a variable integer(KIND=1) ::one_byte(8) integer ::word_sz!#ifdef __sgi integer(INT_KIND) ::ivals(nwords) real(FLOAT_KIND) ::rvals(nwords)!#else! integer ::ivals(nwords)! real ::rvals(nwords)!#endif real(DOUBLE_KIND) ::r8vals(nwords) pointer(ptr1, i2vals) pointer(ptr2, ivals) pointer(ptr3, rvals) pointer(ptr4, r8vals) if(mpp_io_stack_size< nwords) call mpp_io_set_stack_size(nwords) call mpp_error(FATAL, 'MPP_READ currently requires use_netCDF option') end subroutine READ_RECORD_CORE_ subroutine READ_RECORD_(unit, field, nwords, data, time_level, domain, position, tile_count, start_in, axsiz_in)!routine that is finally called by all mpp_read routines to perform the read!a non-netCDF record contains:! field ID! a set of 4 coordinates(is:ie, js:je) giving the data subdomain! a timelevel and a timestamp(=NULLTIME if field is static)! 3D real data(stored as 1D)!if you are using direct access I/O, the RECL argument to OPEN must be large enough for the above!in a global direct access file, record position on PE is given by %record.!Treatment of timestamp:! We assume that static fields have been passed without a timestamp.! Here that is converted into a timestamp of NULLTIME.! For non-netCDF fields, field is treated no differently, but is written! with a timestamp of NULLTIME. There is no check in the code to prevent! the user from repeatedly writing a static field. integer, intent(in) ::unit, nwords type(fieldtype), intent(in) ::field MPP_TYPE_, intent(inout) ::data(nwords) integer, intent(in), optional ::time_level type(domain2D), intent(in), optional ::domain integer, intent(in), optional ::position, tile_count integer, intent(in), optional ::start_in(:), axsiz_in(:) integer, dimension(size(field%axes(:))) ::start, axsiz integer ::tlevel !, subdomain(4) integer ::i, error, is, ie, js, je, isg, ieg, jsg, jeg type(domain2d), pointer ::io_domain=> tlevel if(PRESENT(start_in) .AND. PRESENT(axsiz_in)) then if(size(start(! the data domain and compute domain must refer to the subdomain being passed ! In this ! since that attempts to gather all data on PE size(field%axes(:)) axsiz(i)
integer, parameter edry_comid
subroutine odps_compute_predictor_mw_ad()
pure integer function, public odps_get_absorber_id(Absorber_Index, Group_Index)
integer, parameter comp_n2o_ir
integer, dimension(2), parameter n_predictors_g3
integer, parameter dry_comid_g2
integer, parameter comp_ozo_ir
real(fp), parameter, public reciprocal_gravity
integer, parameter, public group_1
subroutine, public odps_compute_predictor_tl(Group_ID, Temperature, Absorber, Ref_Temperature, Ref_Absorber, secang, Predictor, Temperature_TL, Absorber_TL, Predictor_TL)
subroutine, public odps_assemble_predictors(TC, Atm, GeoInfo, Predictor)
pure logical function, public odps_get_savefwvflag()
integer, parameter, public group_3
real(fp), parameter one_point_75
real(fp), parameter point_5
integer, parameter abs_n2o_ir
integer, parameter comp_wet_mw
integer, parameter dry_comid_g1
subroutine, public odps_compute_predictor_ad(Group_ID, Temperature, Absorber, Ref_Temperature, Ref_Absorber, secang, Predictor, Predictor_AD, Temperature_AD, Absorber_AD)
subroutine odps_compute_predictor_mw_tl()
subroutine odps_compute_predictor_ir()
integer, dimension(5), parameter component_id_map_g2
integer, parameter comp_wlo_ir
integer, parameter comp_co_ir
integer, parameter abs_h2o_ir
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)
integer, parameter abs_co2_ir
integer, parameter, public max_optran_order