*IF DEF,C92_1A HINTCTL1.2
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.15252
C GTS2F400.15253
C Use, duplication or disclosure of this code is subject to the GTS2F400.15254
C restrictions as set forth in the contract. GTS2F400.15255
C GTS2F400.15256
C Meteorological Office GTS2F400.15257
C London Road GTS2F400.15258
C BRACKNELL GTS2F400.15259
C Berkshire UK GTS2F400.15260
C RG12 2SZ GTS2F400.15261
C GTS2F400.15262
C If no contract has been raised with this copy of the code, the use, GTS2F400.15263
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.15264
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.15265
C Modelling at the above address. GTS2F400.15266
C ******************************COPYRIGHT****************************** GTS2F400.15267
C GTS2F400.15268
!+ Controls horizontal interpolation HINTCTL1.3
! HINTCTL1.4
! Subroutine Interface: HINTCTL1.5
SUBROUTINE H_INT_CTL(IDIM,LEN_FIELD_OUT 14,6HINTCTL1.6
&, ROW_LENGTH_IN,ROW_LENGTH_OUT HINTCTL1.7
&, ROWS_IN,ROWS_OUT,AW_AREA_BOX HINTCTL1.8
&, GLOBAL,H_INT_TYPE HINTCTL1.9
&, AW_INDEX_TARG_LHS,AW_INDEX_TARG_TOP HINTCTL1.10
&, BL_INDEX_B_L,BL_INDEX_B_R HINTCTL1.11
&, AW_COLAT_T,AW_LONG_L,DATA_IN HINTCTL1.12
&, WEIGHT_T_R,WEIGHT_B_R,WEIGHT_T_L,WEIGHT_B_L HINTCTL1.13
&, DATA_OUT) HINTCTL1.14
HINTCTL1.15
IMPLICIT NONE HINTCTL1.16
! HINTCTL1.17
! Description: HINTCTL1.18
! <Say what this routine does> HINTCTL1.19
! HINTCTL1.20
! Method: HINTCTL1.21
! <Say how it does it: include references to external documentation> HINTCTL1.22
! <If this routine is very complex, then include a "pseudo code" HINTCTL1.23
! description of it to make its structure and method clear> HINTCTL1.24
! HINTCTL1.25
! Current Code Owner: D.M. Goddard HINTCTL1.26
! HINTCTL1.27
! History: HINTCTL1.28
! Version Date Comment HINTCTL1.29
! ------- ---- ------- HINTCTL1.30
! 4.0 160395 Original code. D.M. Goddard HINTCTL1.31
! HINTCTL1.32
! Code Description: HINTCTL1.33
! Language: FORTRAN 77 + common extensions. HINTCTL1.34
! This code is written to UMDP3 v6 programming standards. HINTCTL1.35
! HINTCTL1.36
! System component covered: S121 HINTCTL1.37
! System Task: S1 HINTCTL1.38
! HINTCTL1.39
! Declarations: HINTCTL1.40
! These are of the form:- HINTCTL1.41
! INTEGER ExampleVariable !Description of variable HINTCTL1.42
! HINTCTL1.43
! Global variables (*CALLed COMDECKs etc...): HINTCTL1.44
HINTCTL1.45
! Subroutine arguments HINTCTL1.46
! Scalar arguments with intent(in): HINTCTL1.47
INTEGER IDIM !Second dimension of index arrays HINTCTL1.48
INTEGER LEN_FIELD_OUT !No of points on target grid HINTCTL1.49
INTEGER ROWS_IN !No of rows on source grid HINTCTL1.50
INTEGER ROWS_OUT !No of rows on target grid HINTCTL1.51
INTEGER ROW_LENGTH_IN !No of pts per row on source grid HINTCTL1.52
INTEGER ROW_LENGTH_OUT !No of pts per row on target grid HINTCTL1.53
LOGICAL GLOBAL !True if global area required HINTCTL1.54
LOGICAL H_INT_TYPE !=T Area weighted interpolation; HINTCTL1.55
!=F Bi-linear interpolation HINTCTL1.56
HINTCTL1.57
! Array arguments with intent(in): HINTCTL1.58
REAL AW_AREA_BOX !area of grid box in sq units of HINTCTL1.59
! source grid HINTCTL1.60
INTEGER AW_INDEX_TARG_LHS(ROW_LENGTH_OUT+1) HINTCTL1.61
!Index of source box overlapping HINTCTL1.62
!lhs of target grid-box HINTCTL1.63
INTEGER AW_INDEX_TARG_TOP(ROWS_OUT+1) HINTCTL1.64
!Index of source box overlapping HINTCTL1.65
!top of target grid-box HINTCTL1.66
INTEGER BL_INDEX_B_L(LEN_FIELD_OUT) HINTCTL1.67
!Gather index for bottom l.h.c of HINTCTL1.68
!source grid box. 1=P-pts; 2=UV-pts HINTCTL1.69
INTEGER BL_INDEX_B_R(LEN_FIELD_OUT) HINTCTL1.70
!Gather index for bottom r.h.c of HINTCTL1.71
!source grid box. 1=P-pts; 2=UV-pts HINTCTL1.72
REAL AW_COLAT_T(ROWS_OUT+1) HINTCTL1.73
!Colatitude of top of target grd-box HINTCTL1.74
! (in units of DELTA_LAT_SRCE) HINTCTL1.75
REAL AW_LONG_L(ROW_LENGTH_OUT+1) HINTCTL1.76
!Left longitude of target grid-box HINTCTL1.77
! (in units of DELTA_LONG_SRCE) HINTCTL1.78
REAL DATA_IN(ROW_LENGTH_IN*ROWS_IN) HINTCTL1.79
!Data before interpolation HINTCTL1.80
REAL WEIGHT_T_R(LEN_FIELD_OUT) !\ Weights used in HINTCTL1.81
REAL WEIGHT_B_R(LEN_FIELD_OUT) ! \bilinear horizontal HINTCTL1.82
REAL WEIGHT_T_L(LEN_FIELD_OUT) ! /interpolation HINTCTL1.83
REAL WEIGHT_B_L(LEN_FIELD_OUT) !/ 1=P-pts; 2=U-pts HINTCTL1.84
! 3=V-pts; 4=zonal HINTCTL1.85
! means HINTCTL1.86
! Array arguments with intent(out): HINTCTL1.87
REAL DATA_OUT(ROW_LENGTH_OUT*ROWS_OUT) HINTCTL1.88
!Data after interpolation HINTCTL1.89
HINTCTL1.90
! ErrorStatus <Delete if ErrorStatus not used> HINTCTL1.91
! INTEGER ErrorStatus ! Error flag (0 = OK) HINTCTL1.92
HINTCTL1.93
HINTCTL1.94
! Function & Subroutine calls: HINTCTL1.95
External H_INT_BL,H_INT_AW HINTCTL1.96
HINTCTL1.97
!- End of header HINTCTL1.98
HINTCTL1.99
HINTCTL1.100
IF(.NOT.H_INT_TYPE)THEN HINTCTL1.101
HINTCTL1.102
! 1: Bi-linear interpolation requested HINTCTL1.103
*IF DEF,TIMER HINTCTL1.104
CALL TIMER
('H_INT_BL',3) HINTCTL1.105
*ENDIF HINTCTL1.106
HINTCTL1.107
CALL H_INT_BL
(ROWS_IN,ROW_LENGTH_IN,LEN_FIELD_OUT HINTCTL1.108
&, BL_INDEX_B_L,BL_INDEX_B_R,DATA_IN HINTCTL1.109
&, WEIGHT_B_L,WEIGHT_B_R HINTCTL1.110
&, WEIGHT_T_L,WEIGHT_T_R HINTCTL1.111
&, DATA_OUT) HINTCTL1.112
HINTCTL1.113
*IF DEF,TIMER HINTCTL1.114
CALL TIMER
('H_INT_BL',4) HINTCTL1.115
*ENDIF HINTCTL1.116
ELSE HINTCTL1.117
HINTCTL1.118
! 2: Area weighted interpolation HINTCTL1.119
*IF DEF,TIMER HINTCTL1.120
CALL TIMER
('H_INT_AW',3) HINTCTL1.121
*ENDIF HINTCTL1.122
HINTCTL1.123
CALL H_INT_AW
(ROWS_IN,ROWS_OUT HINTCTL1.124
&, ROW_LENGTH_IN,ROW_LENGTH_OUT,GLOBAL HINTCTL1.125
&, AW_INDEX_TARG_LHS,AW_INDEX_TARG_TOP HINTCTL1.126
&, AW_COLAT_T,AW_LONG_L,DATA_IN,DATA_OUT) HINTCTL1.127
HINTCTL1.128
*IF DEF,TIMER HINTCTL1.129
CALL TIMER
('H_INT_AW',4) HINTCTL1.130
*ENDIF HINTCTL1.131
HINTCTL1.132
ENDIF ! HINTCTL1.133
HINTCTL1.134
RETURN HINTCTL1.135
END HINTCTL1.136
*ENDIF HINTCTL1.137