Opened 6 years ago

Closed 6 years ago

#2 closed enhancement (fixed)

Updated radial velocities operator.

Reported by: arango Owned by:
Priority: major Milestone:
Component: component1 Version:
Keywords: Cc:

Description

The radial velocity operator was modified to include radar observations processed with the heading angle for math and navigations conventions. A new C-preprocessing option RADIAL_ANGLE_CCW_EAST is introduced for radial observations as an azimuth counterclockwise from EAST. The default is to have radial observations as an azimuth clockwise from NORTH.

In obs_write.F, we now have:

!  Radial Velocity. The observations are in terms of radial speed and
!  angle (stored in obs_meta).  The observation angle converts the
!  velocity components to geographical EAST and North components.
#  ifdef RADIAL_ANGLE_CCW_EAST  
!  The radial velocity observations are processed as magnitude and
!  heading angle (obs_meta; radians) in the math convention: an
!  azimuth that is counterclockwise from TRUE East. 
!
!  In curvilinear coordinates, the radial forward problem is:
!
!     radial = u * COS(obs_meta - angler) + v * SIN(obs_meta - angler)
#  else
!  By default, the radial velocity observations are processed as
!  magnitude and heading angle (obs_meta; radians) in the navigation
!  convention: an azimuth that is clockwise from TRUE North.
!
!  In curvilinear coordinates, the radial forward problem is:
!
!     radial = u * SIN(obs_meta + angler) + v * COS(obs_meta + angler)
#  endif
!
...
          DO iobs=Mstr,Mend
            IF (ObsType(iobs).eq.ObsState2Type(isRadial)) THEN
#   ifdef RADIAL_ANGLE_CCW_EAST  
#    ifdef CURVGRID
              angle=ObsMeta(iobs)-ObsAngler(iobs)
              NLmodVal(iobs)=uradial(iobs)*COS(angle)+                  &
     &                       vradial(iobs)*SIN(angle)         
#    else
              NLmodVal(iobs)=uradial(iobs)*COS(ObsMeta(iobs))+          &
     &                       vradial(iobs)*SIN(ObsMeta(iobs))         
#    endif
#   else
#    ifdef CURVGRID
              angle=ObsMeta(iobs)+ObsAngler(iobs)
              NLmodVal(iobs)=uradial(iobs)*SIN(angle)+                  &
     &                       vradial(iobs)*COS(angle)         
#    else
              NLmodVal(iobs)=uradial(iobs)*SIN(ObsMeta(iobs))+          &
     &                       vradial(iobs)*COS(ObsMeta(iobs))         
#    endif
#   endif
#   ifdef BGQC
              BgErr(iobs)=MAX(uBgErr(iobs), vBgErr(iobs))
#   endif
            END IF
          END DO
        END IF
#  endif

Many thanks to John Wilkin and Ann Kristin Sperrevik for testing the new default convention.

Change History (1)

comment:1 by arango, 6 years ago

Resolution: fixed
Status: newclosed
Note: See TracTickets for help on using tickets.