1 subroutine da_transform_xtoy(cv_size, cv, grid, iv, y)
3 !-------------------------------------------------------------------------
5 !-------------------------------------------------------------------------
9 integer, intent(in) :: cv_size ! Size of cv array.
10 real, intent(in) :: cv(1:cv_size) ! control variables.
11 type (domain), intent(inout) :: grid
12 type (iv_type), intent(inout) :: iv ! obs. increment vector (o-b).
13 type (y_type), intent(inout) :: y ! y = h (grid%xa)
15 if (trace_use) call da_trace_entry("da_transform_xtoy")
17 !--------------------------------------------------------------------------
18 ! [1.0] observation operator y = H(x):
19 !--------------------------------------------------------------------------
21 if (iv%info(sound)%nlocal > 0) call da_transform_xtoy_sound (grid, iv, y)
22 if (iv%info(sonde_sfc)%nlocal > 0) call da_transform_xtoy_sonde_sfc(grid, iv, y)
23 if (iv%info(mtgirs)%nlocal > 0) call da_transform_xtoy_mtgirs (grid, iv, y)
24 if (iv%info(tamdar)%nlocal > 0) call da_transform_xtoy_tamdar (grid, iv, y)
25 if (iv%info(tamdar_sfc)%nlocal > 0) call da_transform_xtoy_tamdar_sfc(grid, iv, y)
26 if (iv%info(synop)%nlocal > 0) call da_transform_xtoy_synop (grid, iv, y)
27 if (iv%info(geoamv)%nlocal > 0) call da_transform_xtoy_geoamv (grid, iv, y)
28 if (iv%info(polaramv)%nlocal > 0) call da_transform_xtoy_polaramv (grid, iv, y)
29 if (iv%info(airep)%nlocal > 0) call da_transform_xtoy_airep (grid, iv, y)
30 if (iv%info(metar)%nlocal > 0) call da_transform_xtoy_metar (grid, iv, y)
31 if (iv%info(ships)%nlocal > 0) call da_transform_xtoy_ships (grid, iv, y)
32 if (iv%info(gpspw)%nlocal > 0) then
33 if (use_gpspwobs) then
34 call da_transform_xtoy_gpspw (grid, iv, y)
35 else if (use_gpsztdobs) then
36 call da_transform_xtoy_gpsztd (grid, iv, y)
39 if (iv%info(ssmi_tb)%nlocal > 0) call da_transform_xtoy_ssmi_tb (grid, iv, y)
40 if (iv%info(ssmi_rv)%nlocal > 0) call da_transform_xtoy_ssmi_rv (grid, iv, y)
41 if (iv%info(pilot)%nlocal > 0) call da_transform_xtoy_pilot (grid, iv, y)
42 if (iv%info(satem)%nlocal > 0) call da_transform_xtoy_satem (grid, iv, y)
43 if (iv%info(ssmt1)%nlocal > 0) call da_transform_xtoy_ssmt1 (grid, iv, y)
44 if (iv%info(ssmt2)%nlocal > 0) call da_transform_xtoy_ssmt2 (grid, iv, y)
45 if (iv%info(qscat)%nlocal > 0) call da_transform_xtoy_qscat (grid, iv, y)
46 if (iv%info(profiler)%nlocal > 0) call da_transform_xtoy_profiler (grid, iv, y)
47 if (iv%info(buoy)%nlocal > 0) call da_transform_xtoy_buoy (grid, iv, y)
48 if (iv%info(gpsref)%nlocal > 0) call da_transform_xtoy_gpsref (grid, iv, y)
49 if (iv%info(gpseph)%nlocal > 0) call da_transform_xtoy_gpseph (iv, y)
50 if (iv%info(radar)%nlocal > 0) call da_transform_xtoy_radar (grid, iv, y)
51 if (iv%info(bogus)%nlocal > 0) call da_transform_xtoy_bogus (grid, iv, y)
52 if (iv%info(airsr)%nlocal > 0) call da_transform_xtoy_airsr (grid, iv, y)
53 if (iv%info(pseudo)%nlocal > 0) call da_transform_xtoy_pseudo (grid, iv, y)
56 if (iv%info(chemic_surf)%nlocal > 0) &
57 call da_transform_xtoy_chem_sfc (grid, iv, y)
61 if (rtm_option == rtm_option_rttov) then
63 call da_transform_xtoy_rttov (grid, iv, y)
65 elseif (rtm_option == rtm_option_crtm) then
67 !if (use_crtm_kmatrix) then
68 ! call da_transform_xtoy_crtmk (grid, iv, y)
69 !else if (use_crtm_kmatrix_fast) then
70 ! call da_transform_xtoy_crtmk_f (grid, iv, y)
72 call da_transform_xtoy_crtm (cv_size, cv, grid, iv, y)
76 call da_warning(__FILE__,__LINE__,(/"Unknown radiative transfer model"/))
80 if (trace_use) call da_trace_exit("da_transform_xtoy")
82 end subroutine da_transform_xtoy