*IF DEF,C84_1A,OR,DEF,FLDOP UIE3F404.40
C ******************************COPYRIGHT****************************** GTS2F400.7453
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.7454
C GTS2F400.7455
C Use, duplication or disclosure of this code is subject to the GTS2F400.7456
C restrictions as set forth in the contract. GTS2F400.7457
C GTS2F400.7458
C Meteorological Office GTS2F400.7459
C London Road GTS2F400.7460
C BRACKNELL GTS2F400.7461
C Berkshire UK GTS2F400.7462
C RG12 2SZ GTS2F400.7463
C GTS2F400.7464
C If no contract has been raised with this copy of the code, the use, GTS2F400.7465
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.7466
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.7467
C Modelling at the above address. GTS2F400.7468
C ******************************COPYRIGHT****************************** GTS2F400.7469
C GTS2F400.7470
CLL SUBROUTINE PP_FILE ----------------------------------------- PPFILE1A.3
CLL PPFILE1A.4
CLL Purpose:- To output a field to a PP_FILE PPFILE1A.5
CLL PPFILE1A.6
CLL Tested under compiler CFT77 PPFILE1A.7
CLL Tested under OS version 5.1 PPFILE1A.8
CLL PPFILE1A.9
CLL TJ, RR <- programmer of some or all of previous code or changes PPFILE1A.10
CLL PPFILE1A.11
CLL Model Modification history from model version 3.0: PPFILE1A.12
CLL version Date PPFILE1A.13
CLL 3.2 13/07/93 Changed CHARACTER*(*) to CHARACTER*(80) for TS150793.111
CLL portability. Author Tracey Smith. TS150793.112
CLL 3.2 19/04/93 Code for new real missing data indicator (TCJ). TJ050593.102
CLL 3.4 04/08/94 No packing indicator change from -26 to -99 PJS APS1F304.3
!LL 4.1 22/11/96 Modify I/O calls for MPP use P.Burton GPB1F402.657
!LL 4.3 30/04/97 Added code to use UM_SECTOR_SIZE to make transfers GBC0F403.52
!LL well-formed. GBC0F403.53
!LL B. Carruthers Cray Research. GBC0F403.54
!LL 4.4 16/06/97 Add processing after the write, so GBC3F404.8
!LL that all the processors know the answer GBC3F404.9
!LL Author: Bob Carruthers, Cray Rsearch. GBC3F404.10
!LL 4.5 28/05/98 Code for parallel processing in COEX Packing GBCQF405.1
!LL Author: Paul Burton & Bob Carruthers GBCQF405.2
CLL PPFILE1A.14
CLL Programming standard: U M DOC Paper NO. 4, PPFILE1A.15
CLL PPFILE1A.16
CLL Logical components covered C4 PPFILE1A.17
CLL PPFILE1A.18
CLL Project TASK: C4 PPFILE1A.19
CLL PPFILE1A.20
CLL External documentation C4 PPFILE1A.21
CLL PPFILE1A.22
CLLEND------------------------------------------------------------- PPFILE1A.23
PPFILE1A.24
C PPFILE1A.25
C*L ARGUMENTS:--------------------------------------------------- PPFILE1A.26
SUBROUTINE PP_FILE(PPFIELD,LENBUF,NUM_WORDS,RMDI,COMP_ACCRCY, 5,10TJ050593.103
1PPHORIZ_OUT,UNITPP,IWA,N_COLS_OUT,N_ROWS_OUT,PACKING, PPFILE1A.28
*IF DEF,MPP,AND,DEF,T3E GBCQF405.3
2PACKING_TYPE,current_io_pe,ICODE,CMESSAGE) GBCQF405.4
*ELSE GBCQF405.5
2PACKING_TYPE,ICODE,CMESSAGE) GO261093.57
*ENDIF GBCQF405.6
IMPLICIT NONE PPFILE1A.30
PPFILE1A.31
PPFILE1A.32
CHARACTER*(80) CMESSAGE !OUT OUT MESSAGE FROM ROUTINE TS150793.113
C PPFILE1A.34
LOGICAL PPFILE1A.35
* PACKING !IN OVERALL Packing switch (T if pckng reqd) PPFILE1A.36
PPFILE1A.37
INTEGER PPFILE1A.38
* ICODE !IN RETURN CODE FROM ROUTINE PPFILE1A.39
*, LENBUF !IN LENGTH OFF PP BUFFER PPFILE1A.40
*, UNITPP !IN OUTPUT PP UNIT NUMBER PPFILE1A.41
*, LEN_IO !NOT USED, BUT NEEDED FOR BUFFOUT CALL PPFILE1A.42
*IF DEF,MPP,AND,DEF,T3E GBCQF405.7
*, current_io_pe !IN PE which will do the I/O GBCQF405.8
*ENDIF GBCQF405.9
C PPFILE1A.43
INTEGER PPFILE1A.44
* N_ROWS_OUT !IN PPHORIZ_OUT=N_ROWS_OUT*N_COLS_OUT PPFILE1A.45
*, N_COLS_OUT !IN PPHORIZ_OUT=N_COLS_OUT*N_ROWS_OUT PPFILE1A.46
*, NUM_OUT !IN NUMBER OF COMPRESSED (32 BIT) WORDS PPFILE1A.47
*, COMP_ACCRCY !IN PACKING ACCURACY IN POWER OF 2 PPFILE1A.48
*, U_ROWS !IN NO OF U,V, ROWS PPFILE1A.49
*, P_ROWS !IN PRESS/TEMP ROWS PPFILE1A.50
*, PPHORIZ_OUT !IN SIZE OF OUTPUT FIELD PPFILE1A.51
*, NUM_WORDS !IN NUMBER OF 64 BIT WORDS WORTH OF DATA PPFILE1A.52
*, PACKING_TYPE ! OUT set to 1 if WGDOS packing else set to zero. GO261093.58
C PPFILE1A.53
REAL PPFILE1A.54
* PPFIELD(PPHORIZ_OUT) !INOUT ARRAY TO STORE PPDATA PPFILE1A.55
*, BUFOUT(LENBUF) !OUTPUT PP BUFFER (ROUNDED UP) PPFILE1A.56
*, RMDI !IN Missing data indicator TJ050593.104
C PPFILE1A.58
C PPFILE1A.59
*IF DEF,MPP,AND,DEF,T3E GBCQF405.10
*CALL PARVARS
GBCQF405.11
*ENDIF GBCQF405.12
PPFILE1A.60
C GBC0F403.55
cdir$ cache_align bufout GBC0F403.56
*CALL CNTL_IO
GBC0F403.57
C*--------------------------------------------------------------------- PPFILE1A.61
PPFILE1A.62
C*L WORKSPACE USAGE:------------------------------------------------- PPFILE1A.63
C DEFINE LOCAL WORKSPACE ARRAYS: 1 REAL ARRAY PPFILE1A.64
C AT FULL FIELD LENGTH PPFILE1A.65
C PPFILE1A.66
C*--------------------------------------------------------------------- PPFILE1A.67
C PPFILE1A.68
C*L EXTERNAL SUBROUTINES CALLED--------------------------------------- PPFILE1A.69
EXTERNAL SETPOS,COEX,BUFFOUT PPFILE1A.70
C*------------------------------------------------------------------ PPFILE1A.71
CL MAXIMUM VECTOR LENGTH ASSUMED IS (ROWS-1) * ROWLENGTH PPFILE1A.72
CL--------------------------------------------------------------------- PPFILE1A.73
C---------------------------------------------------------------------- PPFILE1A.74
C DEFINE LOCAL VARIABLES PPFILE1A.75
INTEGER PPFILE1A.76
* ML ! LONGITUDE COUNTER PPFILE1A.77
*, JL ! LATITUDE COUNTER PPFILE1A.78
*, IWA ! RECORD NUMBER PPFILE1A.79
*, II ! COUNTER PPFILE1A.80
*, LENGTH_FULLWRD! LENGTH IN BITS OF FULLWORD VAR PPFILE1A.81
*, LEN_BUF_WORDS ! NUM_WORDS ROUNDED BY 512 AND ACTUALLY PPFILE1A.82
PPFILE1A.83
INTEGER PPFILE1A.84
* JJ ! Local counter PPFILE1A.85
PPFILE1A.86
REAL PPFILE1A.87
* IX ! RETURN VALUE FROM UNIT COMMAND PPFILE1A.88
PPFILE1A.89
LOGICAL PPFILE1A.90
* UV ! PPFILE1A.92
C PPFILE1A.93
C PPFILE1A.94
C REMEMBER THAT BUFFER OUT STARTS AT ADDRESS 0 THUS IPPLOOK GOES PPFILE1A.95
C FROM 0 to 262143 ie THE NEXT ADDRESS SHOULD BE IWA=262144 to PPFILE1A.96
C IWA=325119 then IWA=325120 to 388095 then 388096 etc PPFILE1A.97
C PPFILE1A.98
C====================================================================== PPFILE1A.99
LENGTH_FULLWRD=64 ! LENGTH IN BITS OF FULLWORD VAR PPFILE1A.100
CL At this point packing,if required,will be done using the WGDOS PPFILE1A.101
CL method of packing. PPFILE1A.102
PACKING_TYPE=0 GO261093.59
C Note the value of -26 corresponds to -15 (F) in ppxref. PPFILE1A.104
C The packing acuracy is scaled to allow greater accuracy. PPFILE1A.105
C Packing will only be attempted if there are at least 2 points per row PPFILE1A.106
C in the PPfield. PPFILE1A.107
C PPFILE1A.108
IF(PACKING.AND.COMP_ACCRCY.GT.-99.AND.N_COLS_OUT.GE.2) APS1F304.4
& PACKING_TYPE=1 GO261093.60
C PPFILE1A.111
IF(PACKING_TYPE.EQ.1)THEN GO261093.61
*IF DEF,PRINT84 PPFILE1A.113
WRITE(6,*)'********* PPOUT PACKING REQD*********** ' GIE0F403.500
*ENDIF PPFILE1A.115
*IF DEF,T3E,AND,DEF,MPP GBCQF405.13
CALL MPP_COEX
(PPFIELD,PPHORIZ_OUT,BUFOUT,LENBUF,N_COLS_OUT, GBCQF405.14
& N_ROWS_OUT,NUM_OUT,COMP_ACCRCY,.TRUE.,RMDI, GBCQF405.15
& 1,1,current_io_pe,1) GBCQF405.16
*ELSE GBCQF405.17
CALL COEX
(PPFIELD,PPHORIZ_OUT,BUFOUT,LENBUF,N_COLS_OUT, PPFILE1A.116
& N_ROWS_OUT,NUM_OUT,COMP_ACCRCY,.TRUE.,RMDI,LENGTH_FULLWRD) TJ050593.105
*ENDIF GBCQF405.18
PPFILE1A.118
NUM_WORDS=(NUM_OUT+1)/2 ! Round up to the nearest 64 Bit CRAY Wd PPFILE1A.119
C COEX returns the number of IBM words needed to hold the packed data PPFILE1A.120
C ~~~ PPFILE1A.121
LEN_BUF_WORDS=((NUM_WORDS+um_sector_size-1)/um_sector_size)* GBC0F403.58
2 um_sector_size GBC0F403.59
*IF DEF,PRINT84 PPFILE1A.123
WRITE(6,*)'NUM_OUT',NUM_OUT GIE0F403.501
*ENDIF PPFILE1A.125
ELSE ! No packing required. PPFILE1A.126
*IF DEF,PRINT84 PPFILE1A.127
WRITE(6,*)'FROM PPOUT N_ROWS_OUT N_COLS_OUT' GIE0F403.502
WRITE(6,*)N_ROWS_OUT,N_COLS_OUT GIE0F403.503
*ENDIF PPFILE1A.130
DO 1 JJ=1,PPHORIZ_OUT PPFILE1A.131
BUFOUT(JJ) = PPFIELD(JJ) PPFILE1A.132
1 CONTINUE PPFILE1A.133
NUM_WORDS=PPHORIZ_OUT PPFILE1A.134
LEN_BUF_WORDS=LENBUF PPFILE1A.135
ENDIF PPFILE1A.136
*IF DEF,MPP,AND,DEF,T3E GBCQF405.19
if (mype .eq. current_io_pe) then GBCQF405.20
*ENDIF GBCQF405.21
DO JJ=NUM_WORDS+1,LEN_BUF_WORDS PPFILE1A.137
BUFOUT(JJ)= 0.0 PPFILE1A.138
ENDDO PPFILE1A.139
*IF -DEF,MPP GPB1F402.658
CALL SETPOS
(UNITPP,IWA,ICODE) GTD0F400.114
CALL BUFFOUT
(UNITPP,BUFOUT(1),LEN_BUF_WORDS,LEN_IO,IX) PPFILE1A.141
*ELSE GPB1F402.659
CALL SETPOS_single
(UNITPP,IWA,ICODE) GPB1F402.660
CALL BUFFOUT_single
(UNITPP,BUFOUT(1),LEN_BUF_WORDS,LEN_IO,IX) GPB1F402.661
*ENDIF GPB1F402.662
C WRITE(6,102) IWA,LEN_BUF_WORDS PPFILE1A.142
100 FORMAT(//,32X,' ARRAY BUFOUT AT END OF PPOUT ',//,32(10F8.0/)) PPFILE1A.143
102 FORMAT(' FROM PP_FILE IWA LEN_BUF_WORDS ',2I12) PPFILE1A.144
C GBC3F404.11
IF (IX.NE.-1.0.OR.LEN_IO.NE.LEN_BUF_WORDS) THEN GBC3F404.12
CALL IOERROR
('Buffer out Data Field',IX,LEN_IO, GBC3F404.13
& LEN_BUF_WORDS) GBC3F404.14
CMESSAGE='PPFILE : I/O error - PP Data Field Output' GBC3F404.15
ICODE=7 GBC3F404.16
RETURN GBC3F404.17
ENDIF GBC3F404.18
*IF DEF,MPP,AND,DEF,T3E GBCQF405.22
endif ! (mype .eq. current_io_pe) GBCQF405.23
*ENDIF GBCQF405.24
999 CONTINUE PPFILE1A.145
RETURN PPFILE1A.146
END PPFILE1A.147
*ENDIF PPFILE1A.148