da_read_rand_unit.inc

References to this file elsewhere.
1 subroutine da_read_rand_unit(filename, unit_in,num,obs_type_in, nc)
2 
3    !----------------------------------------------------------------------------   
4    ! Purpose: Program to read diagnostics written on rand_unit by WRF-Var
5    !----------------------------------------------------------------------------   
6 
7    implicit none
8 
9    integer      ,intent (in)    :: unit_in
10    integer      ,intent (inout) :: num
11    character*(*),intent (in)    :: obs_type_in 
12    character*(*),intent (inout) :: filename                    
13    integer      ,intent (in)    :: nc      
14 
15    integer      :: num_obs 
16    character*20 :: ob_type               
17    logical   :: if_write
18    
19    real         :: fld(10), fld1_rad , fld2_rad                         
20    integer      :: n, k, n1,n2, levels, ios
21 
22    open(unit=unit_in,   file=trim(filename), status='old',iostat=ios)
23    if (ios /= 0) Then
24       call da_error(__FILE__,__LINE__, &
25          (/"Cannot open file"//trim(filename)/))
26    end if
27 1  continue
28   
29 
30    read(unit_in,'(a20,i8)', end = 999, err = 1000)ob_type,num_obs                    
31    
32    if_write = .false.
33    if (index(ob_type,OBS_type_in(1:nc)) > 0) if_write = .true.
34 
35    ! If radiance data treat differently
36    if (index(ob_type,'noaa') > 0  .and. index(ob_type,'amsu') > 0) then
37       do n = 1, num_obs
38          if (if_write) num = num + 1
39          read(unit_in,'(2i8,2e15.7)')n1, n2, fld1_rad,fld2_rad
40          if (if_write)write(rand_unit,'(2i8,2e15.7)')num,n2, fld1_rad,fld2_rad
41       end do
42    else
43       do n = 1, num_obs        
44          if (if_write) num = num + 1
45          if (index(ob_type,'bogus')     > 0)  then
46             read(unit_in,'(i8)', err=1000)levels
47             if (if_write) write(rand_unit,'(i8)')levels
48             read(unit_in,'(2i8,10e15.7)', err= 1000) n1, n2, fld
49             if (if_write) write(rand_unit,'(2i8,10e15.7)') num, levels, fld  
50          end if
51          read(unit_in,'(i8)', err=1000)levels
52          if (if_write) write(rand_unit,'(i8)')levels
53          do k = 1, levels
54             read(unit_in,'(2i8,10e15.7)', err= 1000) n1, n2, fld  
55             if (if_write) write(rand_unit,'(2i8,10e15.7)') num, k, fld
56          end do
57       end do
58    end if
59 
60    if (if_write)  goto 999
61    goto 1
62 
63 999 continue
64      close (unit_in)
65      return
66 1000  continue 
67    write(unit=message(1), fmt='(/a,i3/a/)') &
68               'read error on unit: ',unit_in, &
69               'in da_read_rand_unit'
70    call da_warning(__FILE__,__LINE__,message(1:1))
71 
72 end subroutine da_read_rand_unit
73 
74