*IF DEF,C92_1A,OR,DEF,MAKEBC UIE3F404.7 C ******************************COPYRIGHT****************************** GTS2F400.2467 C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.2468 C GTS2F400.2469 C Use, duplication or disclosure of this code is subject to the GTS2F400.2470 C restrictions as set forth in the contract. GTS2F400.2471 C GTS2F400.2472 C Meteorological Office GTS2F400.2473 C London Road GTS2F400.2474 C BRACKNELL GTS2F400.2475 C Berkshire UK GTS2F400.2476 C RG12 2SZ GTS2F400.2477 C GTS2F400.2478 C If no contract has been raised with this copy of the code, the use, GTS2F400.2479 C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.2480 C to do so must first be obtained in writing from the Head of Numerical GTS2F400.2481 C Modelling at the above address. GTS2F400.2482 C ******************************COPYRIGHT****************************** GTS2F400.2483 C GTS2F400.2484 CLL Subroutine EQTOLL------------------------------------------------- EQTOLL1A.3 CLL EQTOLL1A.4 CLL Purpose: Calculates latitude and longitude on standard grid EQTOLL1A.5 CLL from input arrays of latitude and longitude on EQTOLL1A.6 CLL equatorial latitude-longitude (eq) grid used EQTOLL1A.7 CLL in regional models. Both input and output latitudes EQTOLL1A.8 CLL and longitudes are in degrees. EQTOLL1A.9 CLL EQTOLL1A.10 CLL Written by A. Dickinson EQTOLL1A.11 CLL EQTOLL1A.12 CLL Model Modification history from model version 3.0: EQTOLL1A.13 CLL version Date EQTOLL1A.14 CLL EQTOLL1A.15 CLL Documentation: The transformation formulae are described in EQTOLL1A.16 CLL unified model on-line documentation paper S1. EQTOLL1A.17 CLL EQTOLL1A.18 CLL Logical components covered : S131 EQTOLL1A.19 CLL EQTOLL1A.20 CLL Project task : EQTOLL1A.21 CLL EQTOLL1A.22 CLL External documentation: EQTOLL1A.23 CLL EQTOLL1A.24 CLLEND----------------------------------------------------------------- EQTOLL1A.25 C EQTOLL1A.26 C*L Arguments:-------------------------------------------------------- EQTOLL1A.27SUBROUTINE EQTOLL 16EQTOLL1A.28 *(PHI_EQ,LAMBDA_EQ,PHI,LAMBDA,PHI_POLE,LAMBDA_POLE,POINTS) EQTOLL1A.29 EQTOLL1A.30 IMPLICIT NONE EQTOLL1A.31 EQTOLL1A.32 INTEGER EQTOLL1A.33 * POINTS !IN Number of points to be processed EQTOLL1A.34 EQTOLL1A.35 REAL EQTOLL1A.36 * PHI(POINTS) !OUT Latitude EQTOLL1A.37 *,LAMBDA(POINTS) !OUT Longitude (0 =< LON < 360) EQTOLL1A.38 *,LAMBDA_EQ(POINTS) !IN Longitude in equatorial lat-lon coords EQTOLL1A.39 *,PHI_EQ(POINTS) !IN Latitude in equatorial lat-lon coords EQTOLL1A.40 *,PHI_POLE !IN Latitude of equatorial lat-lon pole EQTOLL1A.41 *,LAMBDA_POLE !IN Longitude of equatorial lat-lon pole EQTOLL1A.42 EQTOLL1A.43 C Workspace usage:----------------------------------------------------- EQTOLL1A.44 C None EQTOLL1A.45 C---------------------------------------------------------------------- EQTOLL1A.46 C External subroutines called:----------------------------------------- EQTOLL1A.47 C None EQTOLL1A.48 C*--------------------------------------------------------------------- EQTOLL1A.49 C Local varables:------------------------------------------------------ EQTOLL1A.50 REAL E_LAMBDA,E_PHI,A_LAMBDA,ARG,A_PHI,SIN_PHI_POLE,COS_PHI_POLE EQTOLL1A.51 REAL TERM1,TERM2,SMALL,LAMBDA_ZERO EQTOLL1A.52 INTEGER I EQTOLL1A.53 PARAMETER(SMALL=1.0E-6) EQTOLL1A.54 C---------------------------------------------------------------------- EQTOLL1A.55 C Constants from comdecks:--------------------------------------------- EQTOLL1A.56 *CALL C_PI
EQTOLL1A.57 C---------------------------------------------------------------------- EQTOLL1A.58 EQTOLL1A.59 CL 1. Initialise local constants EQTOLL1A.60 C EQTOLL1A.61 C Latitude of zeroth meridian EQTOLL1A.62 LAMBDA_ZERO=LAMBDA_POLE+180. EQTOLL1A.63 C Sine and cosine of latitude of eq pole EQTOLL1A.64 SIN_PHI_POLE=SIN(PI_OVER_180*PHI_POLE) EQTOLL1A.65 COS_PHI_POLE=COS(PI_OVER_180*PHI_POLE) EQTOLL1A.66 EQTOLL1A.67 CL 2. Transform from equatorial to standard latitude-longitude EQTOLL1A.68 EQTOLL1A.69 DO 200 I= 1,POINTS EQTOLL1A.70 EQTOLL1A.71 C Scale eq longitude to range -180 to +180 degs EQTOLL1A.72 EQTOLL1A.73 E_LAMBDA=LAMBDA_EQ(I) EQTOLL1A.74 IF(E_LAMBDA.GT. 180.0) E_LAMBDA=E_LAMBDA-360.0 EQTOLL1A.75 IF(E_LAMBDA.LT.-180.0) E_LAMBDA=E_LAMBDA+360.0 EQTOLL1A.76 EQTOLL1A.77 C Convert eq latitude & longitude to radians EQTOLL1A.78 EQTOLL1A.79 E_LAMBDA=PI_OVER_180*E_LAMBDA EQTOLL1A.80 E_PHI=PI_OVER_180*PHI_EQ(I) EQTOLL1A.81 EQTOLL1A.82 C Compute latitude using equation (4.7) EQTOLL1A.83 EQTOLL1A.84 ARG=COS_PHI_POLE*COS(E_LAMBDA)*COS(E_PHI) EQTOLL1A.85 * +SIN(E_PHI)*SIN_PHI_POLE EQTOLL1A.86 ARG=MIN(ARG, 1.0) EQTOLL1A.87 ARG=MAX(ARG,-1.0) EQTOLL1A.88 A_PHI=ASIN(ARG) EQTOLL1A.89 PHI(I)=RECIP_PI_OVER_180*A_PHI EQTOLL1A.90 EQTOLL1A.91 C Compute longitude using equation (4.8) EQTOLL1A.92 EQTOLL1A.93 TERM1 =(COS(E_PHI)*COS(E_LAMBDA)*SIN_PHI_POLE EQTOLL1A.94 * -SIN(E_PHI)*COS_PHI_POLE) EQTOLL1A.95 TERM2=COS(A_PHI) EQTOLL1A.96 IF(TERM2.LT.SMALL) THEN EQTOLL1A.97 A_LAMBDA=0.0 EQTOLL1A.98 ELSE EQTOLL1A.99 ARG=TERM1/TERM2 EQTOLL1A.100 ARG=MIN(ARG, 1.0) EQTOLL1A.101 ARG=MAX(ARG,-1.0) EQTOLL1A.102 A_LAMBDA=RECIP_PI_OVER_180*ACOS(ARG) EQTOLL1A.103 A_LAMBDA=SIGN(A_LAMBDA,E_LAMBDA) EQTOLL1A.104 A_LAMBDA=A_LAMBDA+LAMBDA_ZERO EQTOLL1A.105 END IF EQTOLL1A.106 EQTOLL1A.107 C Scale longitude to range 0 to 360 degs EQTOLL1A.108 EQTOLL1A.109 IF(A_LAMBDA.GE.360.0) A_LAMBDA=A_LAMBDA-360.0 EQTOLL1A.110 IF(A_LAMBDA.LT.0.0) A_LAMBDA=A_LAMBDA+360.0 EQTOLL1A.111 LAMBDA(I)=A_LAMBDA EQTOLL1A.112 EQTOLL1A.113 200 CONTINUE EQTOLL1A.114 EQTOLL1A.115 RETURN EQTOLL1A.116 END EQTOLL1A.117 *ENDIF EQTOLL1A.118