*IF DEF,CONTROL,OR,DEF,MAKEBC UIE3F404.24
C ******************************COPYRIGHT****************************** GTS2F400.4591
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.4592
C GTS2F400.4593
C Use, duplication or disclosure of this code is subject to the GTS2F400.4594
C restrictions as set forth in the contract. GTS2F400.4595
C GTS2F400.4596
C Meteorological Office GTS2F400.4597
C London Road GTS2F400.4598
C BRACKNELL GTS2F400.4599
C Berkshire UK GTS2F400.4600
C RG12 2SZ GTS2F400.4601
C GTS2F400.4602
C If no contract has been raised with this copy of the code, the use, GTS2F400.4603
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.4604
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.4605
C Modelling at the above address. GTS2F400.4606
C ******************************COPYRIGHT****************************** GTS2F400.4607
C GTS2F400.4608
CLL Subroutine IN_INTF ININTF1.3
CLL ININTF1.4
CLL Purpose : Takes as input, codes set by the user interface defining ININTF1.5
CLL the start time, end time, and interval for creating ININTF1.6
CLL interface data for a limited area model, and data ININTF1.7
CLL defining the limited area grid. The source model may also ININTF1.8
CLL be limited area. Sets up fixed length, integer & real ININTF1.9
CLL headers and level dependent constants for the interface ININTF1.10
CLL data set. All prognostic variables for which horizontal ININTF1.11
CLL differencing is performed are included, ie all tracers ININTF1.12
CLL but no surface fields. ININTF1.13
CLL ININTF1.14
CLL Control routine for CRAY YMP ININTF1.15
CLL ININTF1.16
CLL AD, RS, RJ <- programmer of some or all of previous code or changes ININTF1.17
CLL ININTF1.18
CLL Model Modification history from model version 3.0: ININTF1.19
CLL version Date ININTF1.20
CLL 3.1 2/02/93 : added comdeck CHSUNITS to define NUNITS for i/o RS030293.101
CLL 3.1 12/02/93 Correct message for ICODE=2,3,8,9. R.T.H.Barnes. RB120293.4
CLL ININTF1.21
CLL 3.1 15/12/92 Code to calculate interface horz. interpolation DR240293.623
CLL coefficients taken out. Call new routine DR240293.624
CLL INTF_HINTC in place. Adapt routine to cater for DR240293.625
CLL multiple LAM areas. D Robinson. DR240293.626
CLL 3.2 13/07/93 Changed CHARACTER*(*) to CHARACTER*(80) for TS150793.72
CLL portability. Author Tracey Smith. TS150793.73
CLL 3.2 14/05/93 Dynamic allocation changes. D. Robinson. DR141293.1
CLL 3.3 22/11/93 Define Integer Header - Word 15. D. Robinson. DR141293.2
CLL 3.3 08/02/94 Modify calls to TIME2SEC/SEC2TIME to output/input TJ080294.236
CLL elapsed times in days & secs, for portability. TCJ TJ080294.237
CLL 3.4 05/05/94 DEF LBOUTA replaced by LOGICAL LLBOUTA GSS1F304.397
CLL Argument LCAL360 passed to SEC2TIM GSS1F304.398
CLL S.J.Swarbrick GSS1F304.399
CLL 3.4 29/11/94 Add lengths to INTF_HINTC for portable dyn.allocn. ANF1F304.14
CLL 3.5 06/04/95 Sub-Models stage 1: revise History and Control file GDR3F305.117
CLL contents. RTHBarnes. GDR3F305.118
CLL 3.5 24/03/95 Changed OPEN to FILE_OPEN P.Burton GPB1F305.52
! 4.0 11/09/95 Set FIXHD_INTFA(153) to IMDI. D. Robinson GDR1F400.16
! 4.1 19/01/96 Added MPP code. P.Burton APB4F401.481
! 4.4 03/10/97 Changes to make the addresses well-formed for GBC5F404.134
! Cray I/O. GBC5F404.135
! Author: Bob Carruthers, Cray Research GBC5F404.136
!LL 4.4 04/12/97 Set FIXHD(1) to IMDI. D. Robinson UDR2F404.48
!LL 4.5 29/07/98 Rename CINTF to CINTFA. Call INTF_AREA. GDR2F405.102
!LL D. Robinson. GDR2F405.103
CLL DR240293.627
CLL Programming standard; Unified Model Documentation Paper No. 3 ININTF1.22
CLL version no. 1, dated 15/01/90 ININTF1.23
CLL ININTF1.24
CLL Logical components covered : D810 ININTF1.25
CLL ININTF1.26
CLL System task : D81 ININTF1.27
CLL ININTF1.28
CLL Documentation : Unified Model Documentation Paper No D8 ININTF1.29
CLL ININTF1.30
CLLEND ------------------------------------------------------------- ININTF1.31
ININTF1.32
SUBROUTINE IN_INTF ( 6,29@DYALLOC.1322
ININTF1.34
C*L Arguments: ININTF1.35
*CALL ARGSIZE
@DYALLOC.1323
*CALL ARGD1
@DYALLOC.1324
*CALL ARGDUMA
@DYALLOC.1325
*CALL ARGINFA
@DYALLOC.1326
& NFTOUT,ICODE,CMESSAGE) @DYALLOC.1327
ININTF1.37
IMPLICIT NONE ININTF1.38
ININTF1.39
*CALL CMAXSIZE
@DYALLOC.1328
*CALL CINTFA
GDR2F405.104
*CALL TYPSIZE
@DYALLOC.1329
*CALL TYPD1
@DYALLOC.1330
*CALL TYPDUMA
@DYALLOC.1331
*CALL TYPINFA
@DYALLOC.1332
@DYALLOC.1333
INTEGER ININTF1.40
& NFTOUT, ! FTN Number to write interface data DR240293.629
& ICODE ! Return code ININTF1.41
ININTF1.42
CHARACTER*80 TS150793.74
& CMESSAGE ! Error message ININTF1.44
C* ININTF1.45
ININTF1.46
*CALL CHSUNITS
RS030293.102
*CALL CSUBMODL
GDR3F305.119
*CALL CHISTORY
GDR3F305.120
*CALL CCONTROL
ININTF1.50
*CALL CTIME
ININTF1.53
*CALL C_MDI
ININTF1.54
*IF DEF,MPP APB4F401.482
*CALL PARVARS
APB4F401.483
*ENDIF APB4F401.484
*CALL CNTL_IO
GBC5F404.137
ININTF1.55
C Local variables ININTF1.56
INTEGER ININTF1.57
& I,J,IJ, ! DO loop indices ININTF1.58
& ROW, ININTF1.59
& IRIM, ININTF1.60
& DAYS,SECS, ! Time difference relative to reference point TJ080294.238
& LEVEL, ININTF1.62
& LEN_PP, ! Total length of PP headers ININTF1.63
& LEN_IO, ! Total length of data read in ININTF1.64
& NTIMES, ! Number of times for which interface data ININTF1.65
C ! is required. ININTF1.66
& ZERO, ININTF1.67
& JINTF ! Interface area index GDR2F405.105
CL---------------------------------------------------------------------- DR240293.633
ININTF1.73
REAL ININTF1.74
& A_IO DR240293.634
DR240293.635
INTEGER YY,MM,DD,HH,MN,SEC,DAY_NO DR240293.636
INTEGER A_STEPS_PER_HR ! steps per hour for atmos. sub_model GDR3F305.121
ININTF1.85
CHARACTER*80 STRING ! MODEL_FT_UNIT value ININTF1.86
CHARACTER*14 PPNAME ! Boundary data name ININTF1.87
ININTF1.88
CL Subroutines called: DR240293.637
EXTERNAL SEC2TIME,STP2TIME,IOERROR,BUFFIN,BUFFOUT,INTF_HINTC ANF1F304.15
& ,INTF_AREA GDR2F405.106
DR240293.639
CL Internal Structure DR240293.640
DR240293.646
IF (LTIMER) CALL TIMER
('IN_INTF',3) DR240293.647
ININTF1.93
*IF DEF,ATMOS GSS1F304.400
IF (LLBOUTim(A_IM)) THEN GDR3F305.122
ININTF1.95
CALL INTF_AREA
(A_IM,NFTOUT,JINTF) GDR2F405.107
ININTF1.99
IF (A_INTF_FREQ_HR(JINTF).GT.0) THEN DR240293.649
ININTF1.102
IF (LNEWBND(JINTF)) THEN DR240293.650
DR240293.651
CL LNEWBND = true (New dataset to be set up) DR240293.652
DR240293.653
! 1.1 Compute steps per hour for atmosphere sub_model GDR3F305.123
A_STEPS_PER_HR = 3600*STEPS_PER_PERIODim(a_im)/ GDR3F305.124
& SECS_PER_PERIODim(a_im) GDR3F305.125
GDR3F305.126
CL 1.0 Set up headers DR240293.654
ININTF1.104
IF (FT_STEPS(NFTOUT).EQ.0) THEN ININTF1.105
NTIMES = (A_INTF_END_HR(JINTF)-A_INTF_START_HR(JINTF))/ DR240293.655
+ A_INTF_FREQ_HR(JINTF)+1 DR240293.656
ELSE ! reinitialisation ININTF1.107
IF (STEPim(a_im)-1.LE.FT_FIRSTSTEP(NFTOUT)) THEN ! 1st file GDR5F305.59
NTIMES = FT_STEPS(NFTOUT)/A_STEPS_PER_HR/ DR240293.658
+ A_INTF_FREQ_HR(JINTF)+1 DR240293.659
ELSE ! not first file DR240293.660
NTIMES = FT_STEPS(NFTOUT)/A_STEPS_PER_HR/ DR240293.661
+ A_INTF_FREQ_HR(JINTF) DR240293.662
ENDIF DR240293.663
ENDIF ININTF1.113
ININTF1.114
CL 1.1 Fixed length header ININTF1.115
C Copy main dump header as first step DR240293.664
ININTF1.117
DO I=1,LEN_FIXHD DR240293.665
FIXHD_INTFA(I,JINTF)=A_FIXHD(I) DR240293.666
ENDDO DR240293.667
ININTF1.121
C Set boundary data identifiers ININTF1.122
ININTF1.123
FIXHD_INTFA(1,JINTF) = IMDI UDR2F404.49
FIXHD_INTFA(5,JINTF) = 5 DR240293.668
FIXHD_INTFA(10,JINTF) = 1 DR240293.669
ININTF1.126
C Modify individual items ININTF1.127
ININTF1.128
CL Calculate start validity time DR240293.670
DR240293.671
IF (FT_STEPS(NFTOUT).EQ.0) THEN ININTF1.130
SECS = A_INTF_START_HR(JINTF)*3600 DR240293.672
DAYS = 0 TJ080294.240
ELSE ININTF1.132
IF (STEPim(a_im)-1.LE.FT_FIRSTSTEP(NFTOUT)) THEN ! First file GDR5F305.60
CALL STP2TIME
(FT_FIRSTSTEP(NFTOUT),STEPS_PER_PERIODim(a_im), GDR3F305.127
& SECS_PER_PERIODim(a_im),DAYS,SECS) GDR3F305.128
ELSE ! not first file ININTF1.135
CALL STP2TIME
(STEPim(a_im)-1,STEPS_PER_PERIODim(a_im), GDR3F305.129
& SECS_PER_PERIODim(a_im),DAYS,SECS) GDR3F305.130
SECS=SECS+A_INTF_FREQ_HR(JINTF)*3600 TJ080294.245
ENDIF ININTF1.137
ENDIF ININTF1.138
ININTF1.143
CALL SEC2TIME
(DAYS,SECS,BASIS_TIME_DAYS,BASIS_TIME_SECS, TJ080294.246
& YY,MM,DD,HH,MN,SEC,DAY_NO,LCAL360) GSS1F304.402
ININTF1.147
FIXHD_INTFA(21,JINTF) = YY DR240293.676
FIXHD_INTFA(22,JINTF) = MM DR240293.677
FIXHD_INTFA(23,JINTF) = DD DR240293.678
FIXHD_INTFA(24,JINTF) = HH DR240293.679
FIXHD_INTFA(25,JINTF) = MN DR240293.680
FIXHD_INTFA(26,JINTF) = SEC DR240293.681
FIXHD_INTFA(27,JINTF) = DAY_NO DR240293.682
ININTF1.153
C Data interval DR240293.683
FIXHD_INTFA(35,JINTF) = 0 DR240293.684
FIXHD_INTFA(36,JINTF) = 0 DR240293.685
FIXHD_INTFA(37,JINTF) = A_INTF_FREQ_HR(JINTF)/24 DR240293.686
FIXHD_INTFA(38,JINTF) = MOD(A_INTF_FREQ_HR(JINTF),24) DR240293.687
FIXHD_INTFA(39,JINTF) = 0 DR240293.688
FIXHD_INTFA(40,JINTF) = 0 DR240293.689
FIXHD_INTFA(41,JINTF) = A_INTF_FREQ_HR(JINTF)/24 DR240293.690
ININTF1.154
CL Calculate last validity time DR240293.691
ININTF1.156
IF (FT_STEPS(NFTOUT).EQ.0) THEN ININTF1.157
SECS=A_INTF_END_HR(JINTF)*3600 TJ080294.248
DAYS = 0 TJ080294.249
ELSE ININTF1.159
IF (STEPim(a_im)-1.LE.FT_FIRSTSTEP(NFTOUT)) THEN ! First file GDR5F305.61
CALL STP2TIME
(FT_FIRSTSTEP(NFTOUT),STEPS_PER_PERIODim(a_im), GDR3F305.131
& SECS_PER_PERIODim(a_im),DAYS,SECS) GDR3F305.132
SECS=SECS + FT_STEPS(NFTOUT)*3600/A_STEPS_PER_HR TJ080294.252
ELSE ! not first file ININTF1.163
CALL STP2TIME
(STEPim(a_im)-1+FT_STEPS(NFTOUT), GDR3F305.133
& STEPS_PER_PERIODim(a_im),SECS_PER_PERIODim(a_im),DAYS,SECS) GDR3F305.134
ENDIF ININTF1.165
ENDIF ININTF1.166
DR240293.694
CALL SEC2TIME
(DAYS,SECS,BASIS_TIME_DAYS,BASIS_TIME_SECS, TJ080294.255
& YY,MM,DD,HH,MN,SEC,DAY_NO,LCAL360) GSS1F304.403
DR240293.696
FIXHD_INTFA(28,JINTF) = YY DR240293.697
FIXHD_INTFA(29,JINTF) = MM DR240293.698
FIXHD_INTFA(30,JINTF) = DD DR240293.699
FIXHD_INTFA(31,JINTF) = HH DR240293.700
FIXHD_INTFA(32,JINTF) = MN DR240293.701
FIXHD_INTFA(33,JINTF) = SEC DR240293.702
FIXHD_INTFA(34,JINTF) = DAY_NO DR240293.703
ININTF1.171
CL Modify header lengths ININTF1.172
ININTF1.173
FIXHD_INTFA(101,JINTF)=PP_LEN_INTHD DR240293.704
FIXHD_INTFA(105,JINTF) = DR240293.705
&FIXHD_INTFA(100,JINTF)+FIXHD_INTFA(101,JINTF) DR240293.706
FIXHD_INTFA(106,JINTF)=PP_LEN_REALHD DR240293.707
FIXHD_INTFA(110,JINTF)= DR240293.708
&FIXHD_INTFA(105,JINTF)+FIXHD_INTFA(106,JINTF) DR240293.709
ININTF1.178
CL Set length of level dependent constants ININTF1.179
ININTF1.180
FIXHD_INTFA(112,JINTF)=4 DR240293.710
IF (INTF_VERT_INTERP(JINTF)) THEN DR240293.711
FIXHD_INTFA(111,JINTF)=INTF_P_LEVELS(JINTF) DR240293.712
ELSE ININTF1.184
FIXHD_INTFA(111,JINTF)=P_LEVELS DR240293.713
END IF ININTF1.186
ININTF1.187
C NO row and column dependent constants ININTF1.188
FIXHD_INTFA(115,JINTF)=IMDI DR240293.714
FIXHD_INTFA(116,JINTF)=IMDI DR240293.715
FIXHD_INTFA(117,JINTF)=IMDI DR240293.716
FIXHD_INTFA(120,JINTF)=IMDI DR240293.717
FIXHD_INTFA(121,JINTF)=IMDI DR240293.718
FIXHD_INTFA(122,JINTF)=IMDI DR240293.719
ININTF1.195
C NO field_constants,extra constants,temp_historyfile or compressed ININTF1.196
C indexes ININTF1.197
DO I=125,145 ININTF1.198
FIXHD_INTFA(I,JINTF)=IMDI DR240293.720
ENDDO ININTF1.200
ININTF1.201
C Start address and length of look up table DR240293.721
FIXHD_INTFA(150,JINTF) = FIXHD_INTFA(110,JINTF) + DR240293.722
& FIXHD_INTFA(111,JINTF) * FIXHD_INTFA(112,JINTF) DR240293.723
FIXHD_INTFA(152,JINTF) = NTIMES*INTF_LOOKUPSA DR240293.724
FIXHD_INTFA(153,JINTF) = IMDI GDR1F400.17
ININTF1.203
C Start address and length of data section DR240293.725
c--make sure the data starts on a sector bndry GBC5F404.138
fixhd_intfa(160, jintf)=((fixhd_intfa(150, jintf)+ GBC5F404.139
2 fixhd_intfa(151, jintf)*fixhd_intfa(152, jintf)+ GBC5F404.140
3 um_sector_size-1)/um_sector_size)*um_sector_size+1 GBC5F404.141
FIXHD_INTFA(161,JINTF) = 0 DR240293.728
ININTF1.206
CL 1.2 Integer header DR240293.729
ININTF1.210
DO I=1,PP_LEN_INTHD DR240293.730
INTHD_INTFA(I,JINTF) = A_INTHD(I) DR240293.731
ENDDO DR240293.732
ININTF1.212
INTHD_INTFA(1,JINTF) = INTERFACE_FSTEPim(JINTF,a_im) GDR5F305.62
INTHD_INTFA(2,JINTF) = A_INTF_FREQ_HR(JINTF) DR240293.734
INTHD_INTFA(3,JINTF) = NTIMES DR240293.735
INTHD_INTFA(6,JINTF) = INTF_ROW_LENGTH(JINTF) DR240293.736
INTHD_INTFA(7,JINTF) = INTF_P_ROWS(JINTF) DR240293.737
INTHD_INTFA(8,JINTF) = INTF_P_LEVELS(JINTF) DR240293.738
INTHD_INTFA(9,JINTF) = INTF_Q_LEVELS(JINTF) DR240293.739
INTHD_INTFA(15,JINTF)= INTF_LOOKUPSA DR141293.3
DR240293.740
CL 1.3 Real header DR240293.741
DR240293.742
DO I=1,PP_LEN_REALHD DR240293.743
REALHD_INTFA(I,JINTF) = A_REALHD(I) DR240293.744
ENDDO DR240293.745
DR240293.746
REALHD_INTFA(1,JINTF) = INTF_EWSPACE(JINTF) DR240293.747
REALHD_INTFA(2,JINTF) = INTF_NSSPACE(JINTF) DR240293.748
REALHD_INTFA(3,JINTF) = INTF_FIRSTLAT(JINTF) DR240293.749
REALHD_INTFA(4,JINTF) = INTF_FIRSTLONG(JINTF) DR240293.750
REALHD_INTFA(5,JINTF) = INTF_POLELAT(JINTF) DR240293.751
REALHD_INTFA(6,JINTF) = INTF_POLELONG(JINTF) DR240293.752
DR240293.753
CL 1.4 Level dependent constants DR240293.754
DR240293.755
IF (INTF_VERT_INTERP(JINTF)) THEN DR240293.756
CL Set level dependent constants from namelist INTFCNST if DR240293.757
CL vertical interpolation required DR240293.758
DR240293.759
DO LEVEL=1,INTF_P_LEVELS(JINTF) DR240293.760
LEVDEPC_INTFA(LEVEL,1,JINTF) = INTF_AK(LEVEL,JINTF) DR240293.761
LEVDEPC_INTFA(LEVEL,2,JINTF) = INTF_BK(LEVEL,JINTF) DR240293.762
LEVDEPC_INTFA(LEVEL,3,JINTF) = DR240293.763
& INTF_AKH(LEVEL+1,JINTF)-INTF_AKH(LEVEL,JINTF) DR240293.764
LEVDEPC_INTFA(LEVEL,4,JINTF) = DR240293.765
& INTF_BKH(LEVEL+1,JINTF)-INTF_BKH(LEVEL,JINTF) DR240293.766
ENDDO DR240293.767
DR240293.768
ELSE DR240293.769
DR240293.770
C Copy level dependent constants from source model DR240293.771
DR240293.772
DO I=1,4 DR240293.773
DO LEVEL=1,P_LEVELS DR240293.774
LEVDEPC_INTFA(LEVEL,I,JINTF) = DR240293.775
& A_LEVDEPC(LEVEL+(I-1)*P_LEVELS) DR240293.776
ENDDO DR240293.777
ENDDO DR240293.778
DR240293.779
END IF DR240293.780
DR240293.781
CL 2.0 Write out headers DR240293.782
DR240293.783
CL 2.1 Fixed length header DR240293.784
DR240293.785
CALL BUFFOUT
(NFTOUT,FIXHD_INTFA(1,JINTF),LEN_FIXHD,LEN_IO,A_IO) DR240293.786
ININTF1.214
C Check for I/O Errors ININTF1.215
ININTF1.216
IF(A_IO.NE.-1.0.OR.LEN_IO.NE.LEN_FIXHD) THEN ININTF1.217
CALL IOERROR
('buffer out of fixed length header',A_IO,LEN_IO, ININTF1.218
& LEN_FIXHD) ININTF1.219
CMESSAGE='IN_INTF:I/O ERROR' ININTF1.220
ICODE=1 ININTF1.221
RETURN ININTF1.222
END IF ININTF1.223
ININTF1.224
CL 2.2 Integer header DR240293.787
ININTF1.226
CALL BUFFOUT
(NFTOUT,INTHD_INTFA(1,JINTF), DR240293.788
& PP_LEN_INTHD,LEN_IO,A_IO) DR240293.789
ININTF1.230
C Check for I/O Errors DR240293.790
ININTF1.242
IF(A_IO.NE.-1.0.OR.LEN_IO.NE.PP_LEN_INTHD) THEN ININTF1.243
CALL IOERROR
('buffer out of integer header',A_IO,LEN_IO, RB120293.5
& PP_LEN_INTHD) ININTF1.245
CMESSAGE='IN_INTF:I/O ERROR' ININTF1.246
ICODE=2 ININTF1.247
RETURN ININTF1.248
END IF ININTF1.249
ININTF1.250
CL 2.3 Real header DR240293.791
ININTF1.252
CALL BUFFOUT
(NFTOUT,REALHD_INTFA(1,JINTF), DR240293.792
& PP_LEN_REALHD,LEN_IO,A_IO) DR240293.793
ININTF1.256
C Check for I/O Errors DR240293.794
ININTF1.269
IF(A_IO.NE.-1.0.OR.LEN_IO.NE.PP_LEN_REALHD) THEN ININTF1.270
CALL IOERROR
('buffer out of real header',A_IO,LEN_IO, RB120293.6
& PP_LEN_REALHD) ININTF1.272
CMESSAGE='IN_INTF:I/O ERROR' ININTF1.273
ICODE=3 ININTF1.274
RETURN ININTF1.275
END IF ININTF1.276
ININTF1.277
CL 2.4 Level dependent constants DR240293.795
ININTF1.278
C Write out each variable separately as second dimension DR240293.796
C of LEVDEPC_INTFA is now a maximum dimension for all DR240293.797
C interface areas being generated DR240293.798
ININTF1.280
DO I=1,4 DR240293.799
ININTF1.284
CALL BUFFOUT
(NFTOUT,LEVDEPC_INTFA(1,I,JINTF), DR240293.800
& FIXHD_INTFA(111,JINTF),LEN_IO,A_IO) DR240293.801
ININTF1.291
C Check for I/O Errors DR240293.802
ININTF1.293
IF (A_IO.NE.-1.0.OR.LEN_IO.NE.FIXHD_INTFA(111,JINTF)) THEN DR240293.803
CALL IOERROR
('buffer out of level dependent constants',A_IO, ININTF1.313
& LEN_IO,FIXHD_INTFA(111,JINTF)) DR240293.804
CMESSAGE='IN_INTF : I/O ERROR' ININTF1.315
ICODE=4 ININTF1.316
RETURN ININTF1.317
END IF ININTF1.318
ININTF1.319
ENDDO DR240293.805
ININTF1.320
CL 2.5 Write dummy record to reserve space for PP headers DR240293.806
ININTF1.322
LEN_PP=INTHD_INTFA(3,JINTF)*INTF_LOOKUPSA+1 DR240293.807
IF(LEN_PP.GT.LEN_TOT) THEN ININTF1.324
CMESSAGE='IN_INTF:Insufficient space for PP headers' ININTF1.325
ICODE=5 ININTF1.326
RETURN ININTF1.327
END IF ININTF1.328
DR240293.808
CALL BUFFOUT
(NFTOUT,D1(1),LEN_PP,LEN_IO,A_IO) ININTF1.330
ININTF1.331
C Check for I/O Errors ININTF1.332
ININTF1.333
IF(A_IO.NE.-1.0.OR.LEN_IO.NE.LEN_PP) THEN ININTF1.334
CALL IOERROR
('buffer out of dummy PP headers',A_IO,LEN_IO, ININTF1.335
& LEN_PP) ININTF1.336
CMESSAGE='IN_INTF=I/O ERROR' ININTF1.337
ICODE=6 ININTF1.338
RETURN ININTF1.339
END IF ININTF1.340
ININTF1.341
C Remainder of headers not used ININTF1.343
ININTF1.344
ELSE ININTF1.345
CL LNEWBND = False (dataset exists) DR240293.809
ININTF1.347
CL 3.0 Read in headers DR240293.810
CL If reinitialised boundary output file to be processed DR240293.811
CL then open it. DR240293.812
CL ININTF1.350
IF (FT_STEPS(NFTOUT).GT.0) THEN DR240293.813
STRING=MODEL_FT_UNIT(NFTOUT) ININTF1.353
PPNAME=STRING(18:31) ININTF1.354
CALL FILE_OPEN
(NFTOUT,PPNAME,14,1,1,ICODE) GPB1F305.53
IF (ICODE.NE.0) THEN DR240293.814
CMESSAGE="IN_INTF: Error opening preassigned boundary file" DR240293.815
GO TO 999 ! Return DR240293.816
ENDIF DR240293.817
C ININTF1.357
ENDIF ININTF1.358
ININTF1.361
CL 3.1 Fixed length header DR240293.818
DR240293.819
CALL BUFFIN
(NFTOUT,FIXHD_INTFA(1,JINTF),LEN_FIXHD,LEN_IO,A_IO) DR240293.820
C Check for I/O Errors ININTF1.363
IF(A_IO.NE.-1.0.OR.LEN_IO.NE.LEN_FIXHD) THEN ININTF1.364
CALL IOERROR
('buffer in of fixed length header',A_IO,LEN_IO, ININTF1.365
& LEN_FIXHD) ININTF1.366
CMESSAGE='IN_INTF:I/O ERROR' ININTF1.367
ICODE=7 ININTF1.368
RETURN ININTF1.369
ENDIF DR240293.821
ININTF1.372
CL 3.2 Integer header DR240293.822
DR240293.823
CALL BUFFIN
(NFTOUT,INTHD_INTFA(1,JINTF),PP_LEN_INTHD, DR240293.824
& LEN_IO,A_IO) DR240293.825
ININTF1.374
C Check for I/O Errors ININTF1.375
ININTF1.376
IF(A_IO.NE.-1.0.OR.LEN_IO.NE.PP_LEN_INTHD) THEN ININTF1.377
CALL IOERROR
('buffer in of integer header',A_IO,LEN_IO, RB120293.7
& PP_LEN_INTHD) ININTF1.379
CMESSAGE='IN_INTF:I/O ERROR' ININTF1.380
ICODE=8 ININTF1.381
RETURN ININTF1.382
END IF ININTF1.383
ININTF1.384
CL 3.3 Real header DR240293.826
DR240293.827
CALL BUFFIN
(NFTOUT,REALHD_INTFA(1,JINTF),PP_LEN_REALHD, DR240293.828
& LEN_IO,A_IO) DR240293.829
ININTF1.386
C Check for I/O Errors ININTF1.387
ININTF1.388
IF(A_IO.NE.-1.0.OR.LEN_IO.NE.PP_LEN_REALHD) THEN ININTF1.389
CALL IOERROR
('buffer in of real header',A_IO,LEN_IO, RB120293.8
& PP_LEN_REALHD) ININTF1.391
CMESSAGE='IN_INTF:I/O ERROR' ININTF1.392
ICODE=9 ININTF1.393
RETURN ININTF1.394
END IF ININTF1.395
ININTF1.396
CL Reset LNEWBND to true after reading in header information to allow DR240293.830
CL writing of new headers for subsequent reinitialised files. DR240293.831
C ININTF1.397
LNEWBND(JINTF) = .TRUE. DR240293.832
END IF ININTF1.402
ININTF1.403
CL 4.0 Calculate the interpolation cofficients for interface area JINTF DR240293.833
IF (LTIMER) CALL TIMER
('INTF_HIC',3) DR240293.834
CALL INTF_HINTC
( @DYALLOC.1334
*IF -DEF,MPP APB4F401.485
& P_ROWS, U_ROWS, ROW_LENGTH, U_FIELD, ANF1F304.16
*ELSE APB4F401.486
& glsize(2), glsize(2)-1, glsize(1), glsize(1)*(glsize(2)-1), APB4F401.487
*ENDIF APB4F401.488
*CALL ARGSIZE
@DYALLOC.1335
*CALL ARGDUMA
@DYALLOC.1336
*CALL ARGINFA
@DYALLOC.1337
& JINTF,LEN_INTFA_P(JINTF),LEN_INTFA_U(JINTF), @DYALLOC.1338
& ICODE,CMESSAGE,LLBOUTim(A_IM)) GDR3F305.135
IF (LTIMER) CALL TIMER
('INTF_HIC',4) DR240293.839
ININTF1.405
IF (ICODE.NE.0) THEN DR240293.840
CMESSAGE = 'IN_INTF : Error in routine INTF_HINTC' DR240293.841
GO TO 999 ! Return DR240293.842
ENDIF DR240293.843
ININTF1.408
END IF DR240293.844
ININTF1.599
END IF ! LLBOUTim(A_IM) GDR3F305.136
*ENDIF GSS1F304.406
ININTF1.601
*IF DEF,OCEAN ININTF1.602
ININTF1.603
C Ocean code not yet available ININTF1.604
ININTF1.605
*ENDIF ININTF1.606
ININTF1.607
CL 5.0 End of routine DR240293.845
ININTF1.609
IF (LTIMER) CALL TIMER
('IN_INTF',4) DR240293.846
999 RETURN DR240293.847
END ININTF1.614
ININTF1.615
*----------------------------------------------------------------------- ININTF1.616
ININTF1.617
ININTF1.618
*ENDIF ININTF1.619