*IF DEF,C92_1A TINTC1A.2
C ******************************COPYRIGHT****************************** GTS2F400.10441
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.10442
C GTS2F400.10443
C Use, duplication or disclosure of this code is subject to the GTS2F400.10444
C restrictions as set forth in the contract. GTS2F400.10445
C GTS2F400.10446
C Meteorological Office GTS2F400.10447
C London Road GTS2F400.10448
C BRACKNELL GTS2F400.10449
C Berkshire UK GTS2F400.10450
C RG12 2SZ GTS2F400.10451
C GTS2F400.10452
C If no contract has been raised with this copy of the code, the use, GTS2F400.10453
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.10454
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.10455
C Modelling at the above address. GTS2F400.10456
C ******************************COPYRIGHT****************************** GTS2F400.10457
C GTS2F400.10458
CLL SUBROUTINE T_INT_C------------------------------------------------- TINTC1A.3
CLL TINTC1A.4
CLL Purpose: TINTC1A.5
CLL Carries out linear interpolation in time between two fields at TINTC1A.6
CLL times T1 and T2. If the missing data indicator is present at one TINTC1A.7
CLL of the times, the value at the other time is used. The interpolat TINTC1A.8
CLL is controlled by a field ZI. A prescribed value is inserted where TINTC1A.9
CLL If ZI changes between 0 and non-zero in the period T1 - T2, then TINTC1A.10
CLL the field is linearly interpolated between its value at the time TINTC1A.11
CLL ZI is non-zero and the prescibed value at the time when ZI become TINTC1A.12
CLL The fractional time at which ZI changes between 0 and non-zero in TINTC1A.13
CLL period T1 - T2 must be provided as input. TINTC1A.14
CLL TINTC1A.15
CLL Written by A. Dickinson 30/03/90 TINTC1A.16
CLL TINTC1A.17
CLL Model Modification history from model version 3.0: TINTC1A.18
CLL version date TINTC1A.19
CLL 3.2 17/03/93 : Correct for rounding problem, ie case where alpha RS170393.1
CLL should be exactly equal to frac_time. RS170393.2
CLL Author: R.A Stratton RS170393.3
CLL TINTC1A.20
CLL Programming standard: Unified Model Documentation Paper No 3 TINTC1A.21
CLL Version No 1 15/1/90 TINTC1A.22
CLL TINTC1A.23
CLL System component:S191 TINTC1A.24
CLL TINTC1A.25
CLL System task: S1 TINTC1A.26
CLL TINTC1A.27
CLL Documentation: The interpolation formulae are described in TINTC1A.28
CLL unified model on-line documentation paper S1. TINTC1A.29
CLL TINTC1A.30
CLL ------------------------------------------------------------------- TINTC1A.31
C*L Arguments:--------------------------------------------------------- TINTC1A.32
TINTC1A.33
SUBROUTINE T_INT_C(DATA_T1,T1,DATA_T2,T2,DATA_T3,T3,POINTS 4,1TINTC1A.34
*,FRAC_TIME,ZI_T1,PRES_VALUE) TINTC1A.35
TINTC1A.36
IMPLICIT NONE TINTC1A.37
TINTC1A.38
INTEGER TINTC1A.39
* POINTS !IN No of points to be processed TINTC1A.40
TINTC1A.41
REAL TINTC1A.42
* DATA_T1(POINTS) !IN Data at T1 TINTC1A.43
*,DATA_T2(POINTS) !IN Data at T2 TINTC1A.44
*,DATA_T3(POINTS) !OUT D_ta at T3 TINTC1A.45
*,ZI_T1(POINTS) !IN Value of controlling fieled at T1 TINTC1A.46
*,PRES_VALUE(POINTS) !IN Prescribed value of Data when ZI=0 TINTC1A.47
*,FRAC_TIME(POINTS) !IN Fractional time at which ZI changes betwee TINTC1A.48
* !zero and non-zero in this time range TINTC1A.49
*,T1 !IN Time of first data field TINTC1A.50
*,T2 !In Time of second data field TINTC1A.51
*,T3 !IN Time at which new field is required T1<=T3<=T2 TINTC1A.52
TINTC1A.53
TINTC1A.54
C Local arrays:--------------------------------------------------------- TINTC1A.55
REAL INT_TIME(POINTS) TINTC1A.56
C ---------------------------------------------------------------------- TINTC1A.57
C*L External subroutines called:---------------------------------------- TINTC1A.58
EXTERNAL T_INT TINTC1A.59
C*---------------------------------------------------------------------- TINTC1A.60
C Local variables:------------------------------------------------------ TINTC1A.61
REAL TINTC1A.62
* ALPHA !Fractional time TINTC1A.63
*,EPSILON ! rounding error RS170393.4
*,ALPHA_PLUS ! add rounding error to alpha RS170393.5
*,ALPHA_MINUS ! alpha minus rounding error RS170393.6
TINTC1A.64
INTEGER TINTC1A.65
* I !Loop index TINTC1A.66
C ---------------------------------------------------------------------- TINTC1A.67
*CALL C_MDI
TINTC1A.68
TINTC1A.69
C set rounding error RS170393.7
EPSILON=1.0E-6 RS170393.8
TINTC1A.70
CALL T_INT
(DATA_T1,T1,DATA_T2,T2,DATA_T3,T3,POINTS) TINTC1A.71
TINTC1A.72
ALPHA=(T3-T1)/(T2-T1) TINTC1A.73
ALPHA_PLUS=ALPHA+EPSILON RS170393.9
ALPHA_MINUS=ALPHA-EPSILON RS170393.10
TINTC1A.74
DO 100 I=1,POINTS TINTC1A.75
TINTC1A.76
IF(FRAC_TIME(I).NE.RMDI)THEN TINTC1A.77
IF(ZI_T1(I).EQ.0.0)THEN TINTC1A.78
IF(ALPHA_MINUS.LT.FRAC_TIME(I))THEN RS170393.11
DATA_T3(I)=PRES_VALUE(I) TINTC1A.80
ELSE TINTC1A.81
INT_TIME(I)=(ALPHA-FRAC_TIME(I))/(1.-FRAC_TIME(I)) TINTC1A.82
DATA_T3(I)=PRES_VALUE(I)*(1.-INT_TIME(I)) TINTC1A.83
* +DATA_T2(I)*INT_TIME(I) TINTC1A.84
ENDIF TINTC1A.85
ELSE TINTC1A.86
IF(ALPHA_PLUS.GT.FRAC_TIME(I))THEN RS170393.12
DATA_T3(I)=PRES_VALUE(I) TINTC1A.88
ELSE TINTC1A.89
INT_TIME(I)=(FRAC_TIME(I)-ALPHA)/(FRAC_TIME(I)) TINTC1A.90
DATA_T3(I)=PRES_VALUE(I)*(1.-INT_TIME(I)) TINTC1A.91
* +DATA_T1(I)*INT_TIME(I) TINTC1A.92
ENDIF TINTC1A.93
ENDIF TINTC1A.94
ENDIF TINTC1A.95
TINTC1A.96
100 CONTINUE TINTC1A.97
TINTC1A.98
TINTC1A.99
TINTC1A.100
TINTC1A.101
RETURN TINTC1A.102
END TINTC1A.103
TINTC1A.104
*ENDIF TINTC1A.105