da_read_iv_rad_binary.inc

References to this file elsewhere.
1 subroutine da_read_iv_rad_binary (xp, ob, iv)
2 
3    !---------------------------------------------------------------------------
4    ! Purpose: write out innovation vector structure for radiance data.
5    !
6    ! METHOD: write out for separated PEs 
7    !---------------------------------------------------------------------------
8 
9    implicit none
10 
11    type (xpose_type), intent(in)     :: xp       ! Domain decomposition vars.
12    type (y_type),     intent(inout)  :: ob       ! Observation structure.
13    type (ob_type),    intent(inout)  :: iv       ! O-B structure.
14 
15    integer                        :: n        ! Loop counter.
16    integer                        :: i, j, k  ! Index dimension.
17    integer                        :: num_levs ! Number of obs levels.
18 
19    integer            :: iv_rad_binary_unit, ios
20    character(len=30)  :: filename
21    integer            :: ndomain
22 
23    if (trace_use) call da_trace_entry("da_read_iv_rad_binary")
24 
25    do i = 1, iv%num_inst
26 
27 #ifdef DM_PARALLEL
28       write(filename, '(a,i2.2)') trim(iv%instid(i)%rttovid_string)//'.inv_bin_', myproc
29 #else
30       write(filename, '(a)') trim(iv%instid(i)%rttovid_string)//'.inv_bin'
31 #endif
32       call da_get_unit(iv_rad_binary_unit)
33       open(iv_rad_binary_unit,file=trim(filename),form='unformatted',iostat=ios)
34       if (ios /= 0 ) Then
35          call da_warning(__FILE__,__LINE__,(/"cannot open the file "//trim(filename)/))
36          iv%instid(i)%num_rad = 0
37          cycle
38       Endif
39 
40       read(iv_rad_binary_unit) iv%instid(i)%num_rad, iv%instid(i)%nchan,iv%instid(i)%ichan
41       do n =1,iv%instid(i)%num_rad
42             read(iv_rad_binary_unit) ndomain, &
43                                 iv%instid(i)%rad(n)%info%date_char, &
44                                 iv%instid(i)%rad(n)%scanpos,   &
45                                 iv%instid(i)%rad(n)%landsea_mask, &
46                                 iv%instid(i)%rad(n)%info%elv,  &
47                                 iv%instid(i)%rad(n)%info%lat,  &
48                                 iv%instid(i)%rad(n)%info%lon, &
49                                 iv%instid(i)%rad(n)%satzen,    &
50                                 iv%instid(i)%rad(n)%satazi
51             read(iv_rad_binary_unit) &
52                                 iv%instid(i)%rad(n)%t2m, &
53                                 iv%instid(i)%rad(n)%mr2m,   &
54                                 iv%instid(i)%rad(n)%u10, &
55                                 iv%instid(i)%rad(n)%v10,  &
56                                 iv%instid(i)%rad(n)%ps,  &
57                                 iv%instid(i)%rad(n)%ts,  &
58                                 iv%instid(i)%rad(n)%smois,  &
59                                 iv%instid(i)%rad(n)%tslb,  &
60                                 iv%instid(i)%rad(n)%snowh, &
61                                 iv%instid(i)%rad(n)%isflg, &
62                                 nint(iv%instid(i)%rad(n)%soiltyp), &
63                                 nint(iv%instid(i)%rad(n)%vegtyp), &
64                                 iv%instid(i)%rad(n)%vegfra, &
65                                 iv%instid(i)%rad(n)%elevation, &
66                                 iv%instid(i)%rad(n)%clwp
67 
68             read(iv_rad_binary_unit)  ob%instid(i)%rad(n)%tb(:)
69             read(iv_rad_binary_unit)  iv%instid(i)%rad(n)%tb(:)%inv
70             read(iv_rad_binary_unit)  iv%instid(i)%rad(n)%emiss(1:iv%instid(i)%nchan)
71 
72             read(iv_rad_binary_unit)  iv%instid(i)%rad(n)%tb(:)%error
73             read(iv_rad_binary_unit)  iv%instid(i)%rad(n)%tb(:)%qc
74 
75             if (write_profile) then
76                read(iv_rad_binary_unit) num_levs, &
77                   coefs(i) % ref_prfl_p(1:num_levs) , &
78                   iv%instid(i)%rad(n)%t(1:num_levs) , &
79                   iv%instid(i)%rad(n)%mr(1:num_levs)
80 
81                read(iv_rad_binary_unit) num_model_levs, &
82                   iv%instid(i)%rad(n)%pm(xp%kts:xp%kte) , &
83                   iv%instid(i)%rad(n)%tm(xp%kts:xp%kte) , &
84                   iv%instid(i)%rad(n)%qm(xp%kts:xp%kte) , &
85                   iv%instid(i)%rad(n)%qcw(xp%kts:xp%kte), &
86                   iv%instid(i)%rad(n)%qrn(xp%kts:xp%kte)
87             end if   ! end if write_profile
88          end if    ! end if proc_domain
89       end do     ! end do pixels
90       close(iv_rad_binary_unit)
91       call da_free_unit(iv_rad_binary_unit)
92    end do    !! end do instruments
93 
94    if (trace_use) call da_trace_exit("da_read_iv_rad_binary")
95  
96 end subroutine da_read_iv_rad_binary
97 
98