Please note: You are viewing the unstyled version of this website. Either your browser does not support CSS (cascading style sheets) or it has been disabled. Skip navigation.

Vector Rotation - Fortran Code

  Email    Print  PDF  Change text to small (default) Change text to medium Change text to large

SUBROUTINE C_FIELD_GEO_TO_MODEL (FIELD_X,
     &                                 FIELD_Y)
 
!-----------------------------------------------------------------------
! purpose: rotate a 2-d vector field from geographic to model coordinates
!          accounting for fact that vectors change orientation
!-----------------------------------------------------------------------
!
! algorithm : project geographic long/lat components onto
!             geographic cartesian x/y/z components, then
!             perform euler angle rotation about three axes obtaining
!             model cartesian x'''/y'''/z''' components, then
!             project model cartesian componets onto
!             model long/lat componets (sorry!)
!
! input :
!
! FIELD_X : x field on model grid but with geographic directions
! FIELD_Y : y field on model grid but with geographic directions
!
! output :
!
! FIELD_X : x field on model grid but with model directions
! FIELD_Y : y field on model grid but with model directions
!
!-----------------------------------------------------------------------

      !passed arguments
      REAL (TYPE_REAL_8),
     &      INTENT (INOUT) ::
     &
     &      FIELD_X (C_NXL:C_NXH, C_NYL:C_NYH),
     &      FIELD_Y (C_NXL:C_NXH, C_NYL:C_NYH)

      !local vars
      REAL (TYPE_REAL_8) ::
     &
     &      LON_GEO,
     &      LAT_GEO,
     &      LON_MOD,
     &      LAT_MOD,
     &      X_GEO,
     &      Y_GEO,
     &      Z_GEO,
     &      X_MOD,
     &      Y_MOD,
     &      Z_MOD


!-----------------------------------------------------------------------

      !perform at one horizontal grid point at a time
      DO J = C_NYL, C_NYH
      DO I = C_NXL, C_NXH

         !the present vector position in model lat/long coords.
         LON_MOD = C_X (I)
         LAT_MOD = C_Y (J)

         !the present vector position in geogr. lat/long coords.
         CALL C_MODEL_TO_GEO (LON_MOD,
     &                        LAT_MOD,
     &                        LON_GEO,
     &                        LAT_GEO)
           
         !convert geogr. long/lat into geogr. cartesian
         X_GEO =-FIELD_X (I,J) * C_SIND (LON_GEO) -
     &           FIELD_Y (I,J) * C_COSD (LON_GEO) * C_SIND (LAT_GEO)
         Y_GEO = FIELD_X (I,J) * C_COSD (LON_GEO) -
     &           FIELD_Y (I,J) * C_SIND (LON_GEO) * C_SIND (LAT_GEO)
         Z_GEO = FIELD_Y (I,J) * C_COSD (LAT_GEO)

         !rotate geogr. cartesian into model cartesian
         X_MOD = C_REVERSE (1,1) * X_GEO
     &         + C_REVERSE (1,2) * Y_GEO
     &         + C_REVERSE (1,3) * Z_GEO
         Y_MOD = C_REVERSE (2,1) * X_GEO
     &         + C_REVERSE (2,2) * Y_GEO
     &         + C_REVERSE (2,3) * Z_GEO
         Z_MOD = C_REVERSE (3,1) * X_GEO
     &         + C_REVERSE (3,2) * Y_GEO
     &         + C_REVERSE (3,3) * Z_GEO

         !convert model cartesian into model long/lat
         FIELD_X (I,J) =-X_MOD * C_SIND (LON_MOD)
     &                 + Y_MOD * C_COSD (LON_MOD)

         FIELD_Y (I,J) =-X_MOD * C_COSD (LON_MOD) * C_SIND (LAT_MOD)
     &                 - Y_MOD * C_SIND (LON_MOD) * C_SIND (LAT_MOD)
     &                 + Z_MOD * C_COSD (LAT_MOD)

      ENDDO
      ENDDO

!-----------------------------------------------------------------------

      END SUBROUTINE C_FIELD_GEO_TO_MODEL 

Last updated: March 5, 2010
 


whoi logo

Copyright ©2007 Woods Hole Oceanographic Institution, All Rights Reserved, Privacy Policy.
Problems or questions about the site, please contact webdev@whoi.edu