*IF DEF,CONTROL INITDUM1.2
C ******************************COPYRIGHT****************************** GTS2F400.4717
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.4718
C GTS2F400.4719
C Use, duplication or disclosure of this code is subject to the GTS2F400.4720
C restrictions as set forth in the contract. GTS2F400.4721
C GTS2F400.4722
C Meteorological Office GTS2F400.4723
C London Road GTS2F400.4724
C BRACKNELL GTS2F400.4725
C Berkshire UK GTS2F400.4726
C RG12 2SZ GTS2F400.4727
C GTS2F400.4728
C If no contract has been raised with this copy of the code, the use, GTS2F400.4729
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.4730
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.4731
C Modelling at the above address. GTS2F400.4732
C ******************************COPYRIGHT****************************** GTS2F400.4733
C GTS2F400.4734
CLL Subroutine INITDUMP ------------------------------------------- INITDUM1.3
CLL INITDUM1.4
CLL Purpose:To read atmosphere or ocean dumps, and to calculate INITDUM1.5
CLL additional constants based on the dump header information. INITDUM1.6
CLL INITDUM1.7
CLL Extra constants needed for cloud types calulated within SETDCFLD INITDUM1.8
CLL INITDUM1.9
CLL Level 2 control routine for Cray YMP INITDUM1.10
CLL INITDUM1.11
CLL RS AD PA OA <- programmer of some or all of previous code or changes INITDUM1.12
CLL INITDUM1.13
CLL Model Modification history from model version 3.0: INITDUM1.14
CLL version Date INITDUM1.15
CLL 3.1 22/01/93 Add debugging code under *DEF BITCOM00 to assist TJ270193.1
CLL bit compare tests across new releases of the model. TJ270193.2
CLL 3.1 8/02/93 : added comdeck CHSUNITS to define NUNITS for RS030293.244
CLL comdeck CCONTROL RS030293.245
CLL 3.2 13/07/93 Changed CHARACTER*(*) to CHARACTER*(80) for TS150793.81
CLL portability. Author Tracey Smith. TS150793.82
CLL 3.2 12/05/93 : Adapt to read in prognostic fields only or all @DYALLOC.1499
CLL fields from dumps. D Robinson. @DYALLOC.1500
CLL 3.2 27/03/93 Dynamic allocation of main data arrays. R. Rawlins @DYALLOC.1501
CLL 3.2 13/08/93 : Initialise non-prognostic space in D1. M.CARTER. @DYALLOC.1502
CLL 3.3 08/04/94 : Remove redundant variable BUFLEN. T JOHNS TJ300394.115
CLL 3.3 8/12/93 CORRECTIONS TO CALL TO REMLND O. ALVES JA081293.1
CLL 3.4 06/06/94 DEF BITCOM00 replaced by logical L_WRIT_INIT GSS1F304.1367
CLL S.J.Swarbrick GSS1F304.1368
CLL 3.4 21/09/94 : Get no of prog fields from FIXHD(153). Check GDR2F304.1
CLL against A/O_PROG_LOOKUP. Abort if mismatch. GDR2F304.2
CLL D. Robinson GDR2F304.3
CLL 3.4 18/05/94 Add sin_u_latitude to call to SETCONA. J Thomson GJT1F304.22
CLL 3.5 04/04/95 Sub-model changes : Remove run time constants ADR1F305.98
CLL from Atmos dump headers. D. Robinson ADR1F305.99
CLL 3.5 May 95 Submodels project. Inserted *CALL CPPXREF, GSS1F305.474
CLL *CALL ARGPPX, *CALL PPXLOOK to pass ppxref lookup GSS1F305.475
CLL arrays to ADDRESS_CHECK. GSS1F305.476
CLL S.J.Swarbrick GSS1F305.477
CLL 3.5 28/03/95 MPP code: Take account of the difference between GPB0F305.70
CLL local and global data sizes. P.Burton GPB0F305.71
CLL 3.5 16/02/95 Removal of *IFs from Ocean Code. R.Hill ORH1F305.4754
!LL 4.0 06/09/95 Fill atmos and ocean stash arrays. K Rogers GKR0F400.58
CLL 4.0 06/09/95 Changes to read in correct no of prognostic fields GDR5F400.17
CLL for ATMOS/SLAB runs. D Robinson GDR5F400.18
CLL 4.0 05/01/96 Pass correct no and length of prognostic fields to GDR8F400.36
CLL ADDRESS_CHECK. D Robinson GDR8F400.37
CLL 4.1 26/03/96 Introduce Wave sub-model. RTHBarnes. WRB1F401.233
CLL 4.1 23/05/96 Remove internal model from arguments to WRB1F401.234
CLL ADDRESS_CHECK. D Robinson WRB1F401.235
CLL WRB1F401.236
!LL 4.1 21/03/96 Add A/O_MPP_DUMP_ADDR/LEN argument to READDUMP GPB0F401.195
!LL and ADDRESS_CHECK for MPP code. P.Burton GPB0F401.196
!LL 4.1 26/04/96 Set dump part of D1 to zeros for MPP code GPB0F401.197
!LL to ensure no junk in halos P.Burton GPB0F401.198
! 4.1 18/06/96 Changes to cope with changes in STASH addressing GDG0F401.807
! Author D.M. Goddard. GDG0F401.808
! 4.2 29/11/96 MPP code : Added resetting of FIXHD(161) GPB1F402.318
! P.Burton GPB1F402.319
CLL 4.2 05/11/96 Chages to allow uncompressed dumps. SI OSI0F402.1
CLL 4.3 22/01/97 Use MPP_LOOKUP array when on MPP GSM1F403.60
CLL S.D.Mullerworth GSM1F403.61
!LL 4.3 17/03/97 Changed READDUMP to UM_READDUMP and added GPB4F403.27
!LL D1_ADDRESSING arguments P.Burton GPB4F403.28
!LL 4.3 14/04/97 Remove WRITD1 calls - now in INITIAL. K Rogers GKR4F403.314
!LL 4.3 10/04/97 Add READHDR argument to READDUMP. K Rogers GKR3F403.19
!LL 4.3 14/04/97 Pass L_OLD_PWTS (HADCM2 switch) to SETCONA. T Johns ATJ0F403.6
!LL 4.3 06/03/97 Reposition data for multi-level land fields. ADR2F403.3
!LL (Interim fix) D. Robinson. ADR2F403.4
CLL 4.3 30/01/97 Ensure that domain decomposition is consistent GRR0F403.1
CLL with submodel. R.Rawlins GRR0F403.2
!LL 4.4 05/09/97 Initialise D1 - previously not done at start of GSM1F404.9
!LL CRUN. S.D.Mullerworth GSM1F404.10
CLL 4.4 24/10/97 Remove *CALL CENVIRDT C.P. Jones GCJ1F404.6
!LL 4.4 08/10/97 Reposition data for new multi-level land fields. ABX1F404.82
!LL (Interim fix) R.A.Betts ABX1F404.83
CLL 4.4 Sept 97 Place L_LSPICE in argument list for SETCONA. ADM2F404.229
CLL Damian Wilson. ADM2F404.230
!LL 4.5 13/05/98 Pass to SETCONA the variables needed for the ASK1F405.39
!LL RHcrit parametrization. S. Cusack ASK1F405.40
!LL 4.5 15/04/98 Remove interim fixes. D. Robinson. GDR5F405.37
!LL 4.5 19/01/98 Replace JSOIL_FLDS(n) with new pointers. GDR6F405.12
!LL Remove SOIL_VARS and VEG_VARS. D. Robinson GDR6F405.13
CLL OSI0F402.2
CLL Programming Standard : UM documentation paper no. 3 INITDUM1.17
CLL version no. 1, dated 15/01/90 INITDUM1.18
CLL INITDUM1.19
CLL System components covered : R30,C26 INITDUM1.20
CLL System task : P0 INITDUM1.21
CLL INITDUM1.22
CLL Documentation : U.M. Documentation Paper no. P0. INITDUM1.23
CLL U.M. Documentation paper no F3,draft version INITDUM1.24
CLL number 3, dated 18/12/89 INITDUM1.25
CLL INITDUM1.26
CLLEND-------------------------------------------------------------- INITDUM1.27
C INITDUM1.28
C*L Arguments INITDUM1.29
INITDUM1.30
SUBROUTINE INITDUMP( 1,42@DYALLOC.1503
*CALL ARGSIZE
@DYALLOC.1504
*CALL ARGD1
@DYALLOC.1505
*CALL ARGDUMA
@DYALLOC.1506
*CALL ARGDUMO
@DYALLOC.1507
*CALL ARGDUMW
WRB1F401.237
*CALL ARGSTS
@DYALLOC.1508
*CALL ARGPTRA
@DYALLOC.1509
*CALL ARGPTRO
@DYALLOC.1510
*CALL ARGPTRW
WRB1F401.238
*CALL ARGCONA
@DYALLOC.1511
*CALL ARGCONO
@DYALLOC.1512
*CALL ARGCONW
WRB1F401.239
*CALL ARGPPX
GSS1F305.478
& sm_ident,ICODE,CMESSAGE) WRB1F401.240
IMPLICIT NONE INITDUM1.32
INITDUM1.33
C*L Arguments @DYALLOC.1514
CL @DYALLOC.1515
*CALL OARRYSIZ
ORH6F401.26
*CALL CMAXSIZE
@DYALLOC.1516
*CALL CSUBMODL
GSS1F305.479
*CALL TYPSIZE
@DYALLOC.1517
*CALL NSTYPES
ABX1F404.84
*CALL TYPD1
@DYALLOC.1518
*CALL TYPDUMA
@DYALLOC.1519
*CALL TYPDUMO
@DYALLOC.1520
*CALL TYPDUMW
WRB1F401.241
*CALL TYPSTS
! Contains *CALL CPPXREF GSS1F305.480
*CALL TYPPTRA
@DYALLOC.1522
*CALL TYPPTRO
@DYALLOC.1523
*CALL TYPPTRW
WRB1F401.242
*CALL TYPCONA
@DYALLOC.1524
*CALL TYPCONO
@DYALLOC.1525
*CALL TYPCONW
WRB1F401.243
INTEGER I ! Temporary pointer count INITDUM1.34
INTEGER sm_ident ! Sub-model indicator WRB1F401.244
INTEGER ICODE ! Return code INITDUM1.36
INTEGER NFTIN ! FTN number for read INITDUM1.37
INTEGER NFTSWAP ! FTN number for swapping radiation incrs INITDUM1.38
INTEGER SEGSTART ! Pointer to start of radiation incrs INITDUM1.39
INTEGER SEGEND ! Pointer to end of radiation incrs INITDUM1.40
INTEGER LEN_IO ! Length of data transferred INITDUM1.41
INTEGER ERROR ! Error code returned by OPEN INITDUM1.43
INTEGER ocnrow_length ! Ocean row length GKR0F400.59
INITDUM1.44
REAL A_IO ! IO completion code INITDUM1.45
INITDUM1.46
CHARACTER*80 TS150793.83
& CMESSAGE ! Error message INITDUM1.48
INITDUM1.49
*CALL TYPOCDPT
@DYALLOC.1526
*CALL TYPWVDPT
WRB1F401.245
@DYALLOC.1527
*CALL CHSUNITS
RS030293.246
*CALL CCONTROL
INITDUM1.53
*CALL CENVIR
GGH1F305.1
*CALL CHISTORY
GDR3F305.138
*CALL C_MDI
@DYALLOC.1529
*CALL CLOOKADD
TJ300394.116
*CALL C_GLOBAL
GSS1F304.1369
*CALL C_WRITD
GSS1F304.1370
*CALL CRUNTIMC
ADR1F305.100
@DYALLOC.1530
*CALL PPXLOOK
GSS1F305.481
GSS1F305.482
LOGICAL @DYALLOC.1531
* L_A_DUMP ! ) Switches to indicate whether @DYALLOC.1532
* ,L_O_DUMP,L_W_DUMP ! ) atmos, ocean or wave dump. WRB1F401.246
& ,L_A_PROG_ONLY ! ) Switches set if only prognostic @DYALLOC.1534
& ,L_O_PROG_ONLY ! ) fields to be read in. @DYALLOC.1535
& ,L_W_PROG_ONLY WRB1F401.247
INTEGER @DYALLOC.1536
& LEN2_LOOKUP @DYALLOC.1537
& ,LEN_DATA @DYALLOC.1538
& ,N_PROG_FLDS ! No of prognostic fields in dumps GDR2F304.4
& ,N_PROG_LOOKUP GDR5F400.20
& ,LEN_PROG GDR5F400.21
& ,TOT_LEN_DATA GDR5F400.22
& ,D1_ADDR_SUBMODEL_ID ! submodel id in D1_ADDR array GPB4F403.29
& ,JEXP_PTR ! Pointer to Exponent Field GDR6F405.14
*IF DEF,MPP GSM1F403.62
*IF DEF,ATMOS GSM1F403.63
& ,A_MPP_ADDR(A_LEN2_LOOKUP) GSM1F403.64
& ,A_MPP_LEN(A_LEN2_LOOKUP) GSM1F403.65
*ENDIF GSM1F403.66
*IF DEF,OCEAN GSM1F403.67
& ,O_MPP_ADDR(O_LEN2_LOOKUP) GSM1F403.68
& ,O_MPP_LEN(O_LEN2_LOOKUP) GSM1F403.69
*ENDIF GSM1F403.70
*ENDIF GSM1F403.71
*CALL COMOCASZ
@DYALLOC.1540
*IF DEF,MPP GPB0F305.72
*CALL PARVARS
GPB0F305.73
*CALL DECOMPTP
GRR0F403.3
INTEGER info ! return code from GC operations GPB0F401.199
*ENDIF GPB0F305.74
INITDUM1.55
CL Subroutines called INITDUM1.56
*IF DEF,ATMOS,OR,DEF,OCEAN,OR,DEF,WAVE WRB1F401.248
EXTERNAL INITDUM1.58
& UM_READDUMP,TIMER,READ_FLH,SETPOS,ADDRESS_CHECK GPB4F403.30
*ENDIF INITDUM1.60
*IF DEF,ATMOS INITDUM1.61
& ,PR_INHDA,PR_REHDA,SETCONA,SET_ATM_POINTERS,READLSTA INITDUM1.62
*ENDIF INITDUM1.63
*IF DEF,OCEAN INITDUM1.64
& ,SET_OCN_POINTERS,SET_CONSTANTS_OCEAN,READNLST_OCEAN INITDUM1.65
& ,REMLND INITDUM1.66
& ,DATASWAP INITDUM1.67
*ENDIF INITDUM1.68
*IF DEF,WAVE WRB1F401.250
& ,SET_WAV_POINTERS,SET_CONSTANTS_WAV WRB1F401.251
*ENDIF WRB1F401.252
INITDUM1.69
C*--------------------------------------------------------------------- INITDUM1.70
CL Internal Structure INITDUM1.71
INITDUM1.76
*IF DEF,ATMOS INITDUM1.77
CL 1.0 Read atmosphere dump and initialise atmosphere model. INITDUM1.78
IF (sm_ident.EQ.atmos_sm) THEN WRB1F401.253
INITDUM1.80
CL 1.1 Open unit for atmosphere dump, read fixed length header @DYALLOC.1542
CL and set buffer length @DYALLOC.1543
NFTIN = 21 INITDUM1.82
CALL FILE_OPEN
(NFTIN,FT_ENVIRON(NFTIN), GGH1F305.3
& LEN_FT_ENVIR(NFTIN),0,0,ERROR) GGH1F305.4
@DYALLOC.1544
CALL READ_FLH
(NFTIN,A_FIXHD,LEN_FIXHD,ICODE,CMESSAGE) @DYALLOC.1545
IF (ICODE.GT.0) RETURN @DYALLOC.1546
@DYALLOC.1547
CALL SETPOS
(NFTIN,0,ICODE) GTD0F400.88
@DYALLOC.1549
C Test if atmos dump. @DYALLOC.1550
L_A_DUMP = A_FIXHD(5).EQ.1 .AND. A_FIXHD(2).EQ.atmos_sm WRB1F401.254
@DYALLOC.1552
C Test if only prognostic fields to be read in @DYALLOC.1553
L_A_PROG_ONLY = L_A_DUMP .AND. H_STEPim(a_im).EQ.0 GDR3F305.139
@DYALLOC.1555
C Get no of prognostic fields in atmos dump GDR2F304.5
N_PROG_FLDS = A_FIXHD(153) GDR2F304.6
GDR2F304.7
C Check N_PROG_FLDS has been set. GDR2F304.8
IF (N_PROG_FLDS.EQ.IMDI) THEN GDR2F304.9
WRITE (6,*) ' ' GDR2F304.10
WRITE (6,*) ' No of prognostic fields not set in FIXHD(153)' GDR2F304.11
WRITE (6,*) ' Run RECONFIGURATION to set FIXHD(153)' GDR2F304.12
CMESSAGE = 'INITDUMP: FIXHD(153) not set in atmos dump' GDR2F304.13
ICODE = 101 GDR2F304.14
GO TO 9999 ! Return GDR2F304.15
ENDIF GDR2F304.16
GDR2F304.17
C Check N_PROG_FLDS matches with A_PROG_LOOKUP set up by the UI GDR2F304.18
N_PROG_LOOKUP = A_PROG_LOOKUP GDR5F400.23
*IF DEF,SLAB GDR5F400.24
! Get total no of prognostic fields (atmos + slab) GDR5F400.25
N_PROG_LOOKUP = N_PROG_LOOKUP + S_PROG_LOOKUP GDR5F400.26
*ENDIF GDR5F400.27
IF (N_PROG_FLDS.NE.N_PROG_LOOKUP) THEN GDR5F400.28
WRITE (6,*) ' ' GDR2F304.20
WRITE (6,*) ' Mismatch in no of prognostic fields.' GDR2F304.21
WRITE (6,*) ' No of prog fields in Atmos dump ',N_PROG_FLDS GDR2F304.22
WRITE (6,*) ' No of prog fields expected ',N_PROG_LOOKUP GDR5F400.29
WRITE (6,*) ' ' GDR2F304.24
WRITE (6,*) ' Run RECONFIGURATION to get correct no of', GDR2F304.25
& ' prognostic fields in atmos dump' GDR2F304.26
WRITE (6,*) ' or' GDR2F304.27
WRITE (6,*) ' Check/Reset experiment in User Interface' GDR2F304.28
WRITE (6,*) ' ' GDR2F304.29
CMESSAGE = 'INITDUMP: Wrong no of atmos prognostic fields' GDR2F304.30
ICODE = 102 GDR2F304.31
GO TO 9999 ! Return GDR2F304.32
ENDIF GDR2F304.33
GDR2F304.34
*IF DEF,MPP GSM1F404.11
! Initialise D1 to prevent uninitialised data in unused rows of U fields GSM1F404.12
! *DIR$ CACHE_BYPASS D1 GPB0F405.203
DO I = 1,LEN_TOT GSM1F404.14
D1(I)=0.0 GSM1F404.15
ENDDO GSM1F404.16
*ENDIF GSM1F404.17
C Determine no of fields to be read in @DYALLOC.1556
IF (L_A_PROG_ONLY) THEN @DYALLOC.1557
@DYALLOC.1558
C Prognostic fields only @DYALLOC.1559
LEN2_LOOKUP = N_PROG_FLDS GDR2F304.35
LEN_PROG = A_PROG_LEN GDR5F400.30
TOT_LEN_DATA = A_LEN_DATA GDR5F400.31
*IF DEF,SLAB GDR5F400.32
! Get total length of prognostic data GDR5F400.33
LEN_PROG = A_PROG_LEN + S_PROG_LEN GDR5F400.34
TOT_LEN_DATA = A_LEN_DATA + S_LEN_DATA GDR5F400.35
GDR5F400.36
write (6,*) ' ' GDR5F400.37
write (6,*) ' n_prog_lookup = ',n_prog_lookup GDR5F400.38
write (6,*) ' len_prog = ',len_prog GDR5F400.39
write (6,*) ' tot_len_data = ',tot_len_data GDR5F400.40
GDR5F400.41
*ENDIF GDR5F400.42
GDR5F400.43
LEN_DATA = LEN_PROG GDR5F400.44
@DYALLOC.1562
WRITE (6,*) ' ' GDR2F304.36
WRITE (6,*) ' Read in ',N_PROG_FLDS,' prognostic fields.' GDR2F304.37
@DYALLOC.1566
GSM1F404.18
C INITIALISE DIAGNOSTIC AREA OF D1 TO RMDI @DYALLOC.1567
DO I = LEN_DATA+1, TOT_LEN_DATA GDR5F400.45
D1(I)=RMDI @DYALLOC.1569
END DO @DYALLOC.1570
@DYALLOC.1571
ELSE @DYALLOC.1572
@DYALLOC.1573
C All fields. @DYALLOC.1574
LEN2_LOOKUP = A_LEN2_LOOKUP @DYALLOC.1575
LEN_DATA = A_LEN_DATA @DYALLOC.1576
@DYALLOC.1577
WRITE (6,*) ' ' GDR2F304.38
WRITE (6,*) ' Read in all ',LEN2_LOOKUP,' fields.' GDR5F400.46
@DYALLOC.1581
ENDIF @DYALLOC.1582
INITDUM1.84
*IF DEF,SLAB GDR5F400.47
write (6,*) ' ' GDR5F400.48
write (6,*) ' a_prog_lookup = ',a_prog_lookup GDR5F400.49
write (6,*) ' s_prog_lookup = ',s_prog_lookup GDR5F400.50
write (6,*) ' a_len2_lookup = ',a_len2_lookup GDR5F400.51
write (6,*) ' s_len2_lookup = ',s_len2_lookup GDR5F400.52
write (6,*) ' a_prog_len = ',a_prog_len GDR5F400.53
write (6,*) ' s_prog_len = ',s_prog_len GDR5F400.54
write (6,*) ' a_len_data = ',a_len_data GDR5F400.55
write (6,*) ' s_len_data = ',s_len_data GDR5F400.56
write (6,*) ' len_data = ',len_data GDR5F400.57
*ENDIF GDR5F400.58
*IF DEF,MPP GRR0F403.4
! Ensure that domain decomposition is consistent with submodel GRR0F403.5
GRR0F403.6
CALL CHANGE_DECOMPOSITION
(decomp_standard_atmos,ICODE) GRR0F403.7
GRR0F403.8
*ENDIF GRR0F403.9
GDR5F400.59
CL 1.2 Call READDUMP to read atmosphere dump. INITDUM1.93
IF (LTIMER) THEN INITDUM1.94
CALL TIMER
('READDUMP',3) INITDUM1.95
INITDUM1.96
END IF INITDUM1.97
INITDUM1.98
GPB4F403.31
D1_ADDR_SUBMODEL_ID = SUBMODEL_FOR_SM(atmos_sm) GPB4F403.32
GPB4F403.33
CALL UM_READDUMP
(NFTIN, A_FIXHD, LEN_FIXHD, GPB4F403.34
& A_INTHD, A_LEN_INTHD, INITDUM1.100
& A_REALHD, A_LEN_REALHD, INITDUM1.101
& A_LEVDEPC, A_LEN1_LEVDEPC, A_LEN2_LEVDEPC, INITDUM1.102
& A_ROWDEPC, A_LEN1_ROWDEPC, A_LEN2_ROWDEPC, INITDUM1.103
& A_COLDEPC, A_LEN1_COLDEPC, A_LEN2_COLDEPC, INITDUM1.104
& A_FLDDEPC, A_LEN1_FLDDEPC, A_LEN2_FLDDEPC, INITDUM1.105
& A_EXTCNST, A_LEN_EXTCNST, INITDUM1.106
& A_DUMPHIST, LEN_DUMPHIST, INITDUM1.107
& A_CFI1, A_LEN_CFI1, INITDUM1.108
& A_CFI2, A_LEN_CFI2, INITDUM1.109
& A_CFI3, A_LEN_CFI3, INITDUM1.110
& A_LOOKUP,LEN1_LOOKUP,LEN2_LOOKUP, GSM1F403.72
*IF DEF,MPP GSM1F403.73
& A_MPP_LOOKUP,MPP_LEN1_LOOKUP, GSM1F403.74
*ENDIF GPB0F401.50
& atmos_sm, GPB4F403.35
& NO_OBJ_D1(D1_ADDR_SUBMODEL_ID), GPB4F403.36
& D1_ADDR(1,1,D1_ADDR_SUBMODEL_ID), GPB4F403.37
& LEN_DATA,D1, GDG0F401.810
*CALL ARGPPX
GDG0F401.811
& .TRUE.,ICODE,CMESSAGE) GKR3F403.20
*IF DEF,MPP GPB0F401.205
! Broadcast return code to all processors. GPB0F401.206
CALL GC_IBCAST(
666,1,0,nproc,info,ICODE) GPB0F401.207
*ENDIF GPB0F401.208
INITDUM1.114
IF (LTIMER) THEN INITDUM1.115
CALL TIMER
('READDUMP',4) INITDUM1.116
INITDUM1.117
END IF INITDUM1.118
INITDUM1.119
CALL FILE_CLOSE
(NFTIN,FT_ENVIRON(NFTIN), GGH1F305.5
& LEN_FT_ENVIR(NFTIN),0,0,ICODE) GTD0F400.5
INITDUM1.121
IF (ICODE .GT. 0) RETURN INITDUM1.122
INITDUM1.123
C Check validity of integer header data and print out information. INITDUM1.124
*IF -DEF,MPP GPB0F305.75
CALL PR_INHDA
(A_INTHD, A_LEN_INTHD, ROW_LENGTH, INITDUM1.125
& P_ROWS, P_LEVELS, Q_LEVELS, TR_LEVELS, AJS1F401.1563
& ST_LEVELS, SM_LEVELS, BL_LEVELS, AJS1F401.1564
& TR_VARS, ICODE, CMESSAGE) GDR6F405.15
*ELSE GPB0F305.76
! Pass through the global numbers so the validity check works GPB0F305.77
! glsize(1) is the global ROW_LENGTH GPB0F305.78
! glsize(2) is the global P_ROWS GPB0F305.79
CALL PR_INHDA
(A_INTHD, A_LEN_INTHD, glsize(1), GPB0F305.80
& glsize(2),P_LEVELS,Q_LEVELS,TR_LEVELS, AJS1F401.1565
& ST_LEVELS, SM_LEVELS, BL_LEVELS, AJS1F401.1566
& TR_VARS, ICODE, CMESSAGE) GDR6F405.16
*ENDIF GPB0F305.83
INITDUM1.128
IF (ICODE.GT.0) RETURN @DYALLOC.1585
INITDUM1.129
C Check validity of real header data and print out information. @DYALLOC.1586
CALL PR_REHDA
(A_REALHD, A_LEN_REALHD) @DYALLOC.1587
INITDUM1.130
IF (ICODE.GT.0) RETURN INITDUM1.131
INITDUM1.132
IF (L_A_PROG_ONLY) THEN @DYALLOC.1588
INITDUM1.135
*IF -DEF,MPP GPB0F401.51
CALL ADDRESS_CHECK
(A_LOOKUP,LEN1_LOOKUP,LEN2_LOOKUP, GDR8F400.38
*ELSE GPB0F401.52
C Need to pass field address and length info to ADDRESS_CHECK GSM1F403.75
DO I=1,LEN2_LOOKUP GSM1F403.76
A_MPP_ADDR(I) = A_MPP_LOOKUP(P_NADDR,I) GSM1F403.77
A_MPP_LEN(I) = A_MPP_LOOKUP(P_LBLREC,I) GSM1F403.78
ENDDO GSM1F403.79
CALL ADDRESS_CHECK
(A_LOOKUP,A_MPP_ADDR, GSM1F403.80
& A_MPP_LEN,LEN1_LOOKUP,LEN2_LOOKUP, GSM1F403.81
*ENDIF GPB0F401.55
& SI,NITEMS,NSECTS,LEN_DATA, GDR8F400.39
*CALL ARGPPX
GSS1F305.483
& ICODE,CMESSAGE) WRB1F401.255
IF (ICODE.GT.0) RETURN @DYALLOC.1592
INITDUM1.136
ENDIF @DYALLOC.1593
@DYALLOC.1594
C Reset A_FIXHD to correspond to Output Dump @DYALLOC.1595
A_FIXHD(152) = A_LEN2_LOOKUP @DYALLOC.1596
A_FIXHD(160) = A_FIXHD(150) + LEN1_LOOKUP*A_LEN2_LOOKUP @DYALLOC.1597
*IF -DEF,MPP GPB0F305.84
A_FIXHD(161) = A_LEN_DATA @DYALLOC.1598
*ELSE GPB0F305.85
A_FIXHD(161) = global_A_LEN_DATA GPB1F402.320
*ENDIF GPB0F305.87
INITDUM1.138
CL 1.3 Call SET_ATM_POINTERS to set integer pointers to data in INITDUM1.139
CL atmosphere dump and secondary storage area in D1 array. INITDUM1.140
CALL SET_ATM_POINTERS
( @DYALLOC.1599
*CALL ARGSIZE
@DYALLOC.1600
*CALL ARGDUMA
@DYALLOC.1601
*CALL ARGSTS
@DYALLOC.1602
*CALL ARGPTRA
@DYALLOC.1603
& ICODE,CMESSAGE) @DYALLOC.1604
INITDUM1.144
CL Call READLSTA to read namelists to control atmosphere integration INITDUM1.145
CL and diagnostic point print. INITDUM1.146
REWIND 5 INITDUM1.147
CALL READLSTA
( @DYALLOC.1605
*CALL ARGSIZE
@DYALLOC.1606
*CALL ARGDUMA
@DYALLOC.1607
*CALL ARGPTRA
@DYALLOC.1610
*CALL ARGCONA
@DYALLOC.1611
& ICODE,CMESSAGE) @DYALLOC.1612
INITDUM1.149
IF (ICODE.GT.0) RETURN INITDUM1.150
INITDUM1.151
IF (LSINGLE_HYDROL) THEN GDR6F405.17
JEXP_PTR = JEAGLE_EXP ! Eagleson's Exponent GDR6F405.18
ENDIF GDR6F405.19
IF (LMOSES) THEN GDR6F405.20
JEXP_PTR = JCLAPP_HORN ! Clapp-Hornberger B Coefficient GDR6F405.21
ENDIF GDR6F405.22
CL 1.5 Call SETCONA to initialise additional fields for atmosphere INITDUM1.152
CL model using dump information. INITDUM1.153
CALL SETCONA
(A_LEVDEPC(JAK),A_LEVDEPC(JBK), INITDUM1.154
& A_LEVDEPC(JDELTA_AK),A_LEVDEPC(JDELTA_BK),D1(JPSTAR), INITDUM1.155
& D1(JTHETA(1)),D1(JQ(1)),RHCRIT, ADR1F305.101
& D1(JSAT_SOIL_COND),D1(JVOL_SMC_SAT),D1(JVOL_SMC_WILT), GDR6F405.23
& D1(JEXP_PTR), D1(JLAND), L_LSPICE, GDR6F405.24
& D1(JRHC(1)), D1(JICE_FRACTION), BL_LEVELS, L_RHCPT, ASK1F405.41
& P_FIELD,P_LEVELS,P_ROWS,U_ROWS,U_FIELD,ROW_LENGTH, INITDUM1.159
& LAND_FIELD,Q_LEVELS, INITDUM1.160
& A_REALHD(1),A_REALHD(2),A_REALHD(3),A_REALHD(4), INITDUM1.161
& A_REALHD(5),A_REALHD(6), INITDUM1.162
& L_OLD_PWTS, ATJ0F403.7
& AKH,BKH,AK_TO_THE_KAPPA,BK_TO_THE_KAPPA, INITDUM1.163
& AKH_TO_THE_KAPPA,BKH_TO_THE_KAPPA, INITDUM1.164
& COS_U_LATITUDE,SEC_U_LATITUDE,SIN_U_LATITUDE, GJT1F304.23
& TAN_U_LATITUDE, GJT1F304.24
& COS_P_LATITUDE,SEC_P_LATITUDE, INITDUM1.166
& SIN_LONGITUDE,COS_LONGITUDE,TRUE_LONGITUDE, INITDUM1.167
& F1,F2,F3,F3_P,TRIGS,IFAX,D1(JP_EXNER(1)), INITDUM1.168
& TWO_D_GRID_CORRECTION, INITDUM1.169
& D1(JQCL(1)),D1(JQCF(1)),SOILB,LAND_LIST,CLOUD_LEVELS, INITDUM1.170
& ETA_SPLIT,NUM_CLOUD_TYPES,LOW_BOT_LEVEL,LOW_TOP_LEVEL, INITDUM1.171
& MED_BOT_LEVEL,MED_TOP_LEVEL,HIGH_BOT_LEVEL,HIGH_TOP_LEVEL, INITDUM1.172
& ETA_MATRIX_INV,MATRIX_POLY_ORDER,ICODE,CMESSAGE) INITDUM1.173
INITDUM1.174
C Set ELF flag INITDUM1.175
ELF=(A_FIXHD(4).EQ.3.OR.A_FIXHD(4).EQ.103) INITDUM1.176
INITDUM1.177
END IF INITDUM1.178
INITDUM1.179
! Fill atmosphere stash array GKR0F400.60
GKR0F400.61
do i = 1, p_levels GKR0F400.62
a_spsts(a_ixsts(1) + i-1) = a_levdepc(jak + i-1) GKR0F400.63
a_spsts(a_ixsts(2) + i-1) = a_levdepc(jbk + i-1) GKR0F400.64
a_spsts(a_ixsts(3) + i-1) = akh(i) GKR0F400.65
a_spsts(a_ixsts(4) + i-1) = bkh(i) GKR0F400.66
a_spsts(a_ixsts(5) + i-1) = a_levdepc(jdelta_ak + i-1) GKR0F400.67
a_spsts(a_ixsts(6) + i-1) = a_levdepc(jdelta_bk + i-1) GKR0F400.68
end do GKR0F400.69
a_spsts(a_ixsts(3) + p_levels) = akh( p_levels+1) GKR0F400.70
a_spsts(a_ixsts(4) + p_levels) = bkh( p_levels+1) GKR0F400.71
GKR0F400.72
GKR0F400.73
a_spsts(a_ixsts(7)) = jp_exner(1) ! pexner GKR0F400.74
a_spsts(a_ixsts(8)) = jpstar ! pstar GKR0F400.75
GKR0F400.76
do i = 1, ROW_LENGTH * U_ROWS GKR0F400.77
a_spsts(a_ixsts(10)+ i-1) = COS_U_LATITUDE(i) GKR0F400.78
end do GKR0F400.79
GKR0F400.80
do i = 1, ROW_LENGTH * P_ROWS GKR0F400.81
a_spsts(a_ixsts(9)+ i-1) = COS_P_LATITUDE(i) GKR0F400.82
a_spsts(a_ixsts(11)+ i-1) = D1(JLAND + i-1) GKR0F400.83
end do GKR0F400.84
GKR0F400.85
*ENDIF INITDUM1.180
*IF DEF,OCEAN INITDUM1.181
INITDUM1.182
CL 2.0 Read ocean dump and initialise ocean model. INITDUM1.183
IF (sm_ident.EQ.ocean_sm) THEN WRB1F401.256
CL 2.1 Open unit for ocean dump and read in fixed length header @DYALLOC.1614
NFTIN=41 INITDUM1.186
CALL FILE_OPEN
(NFTIN,FT_ENVIRON(NFTIN), GGH1F305.7
& LEN_FT_ENVIR(NFTIN),0,0,ERROR) GGH1F305.8
@DYALLOC.1615
CALL READ_FLH
(NFTIN,O_FIXHD,LEN_FIXHD,ICODE,CMESSAGE) @DYALLOC.1616
IF (ICODE.GT.0) RETURN @DYALLOC.1617
@DYALLOC.1618
CALL SETPOS
(NFTIN,0,ICODE) GTD0F400.89
@DYALLOC.1620
C Test if ocean dump. @DYALLOC.1621
L_O_DUMP = O_FIXHD(5).EQ.1 .AND. O_FIXHD(2).EQ.ocean_sm WRB1F401.257
@DYALLOC.1623
C Test if only prognostic fields to be read in @DYALLOC.1624
L_O_PROG_ONLY = L_O_DUMP .AND. H_STEPim(o_im).EQ.0 GDR3F305.140
@DYALLOC.1626
C Get no of prognostic fields in ocean dump GDR2F304.40
N_PROG_FLDS = O_FIXHD(153) GDR2F304.41
GDR2F304.42
C Check N_PROG_FLDS has been set. GDR2F304.43
IF (N_PROG_FLDS.EQ.IMDI) THEN GDR2F304.44
WRITE (6,*) ' ' GDR2F304.45
WRITE (6,*) ' No of prognostic fields not set in FIXHD(153)' GDR2F304.46
WRITE (6,*) ' Run RECONFIGURATION to set FIXHD(153)' GDR2F304.47
CMESSAGE = 'INITDUMP: FIXHD(153) not set in ocean dump' GDR2F304.48
ICODE = 201 GDR2F304.49
GO TO 9999 ! Return GDR2F304.50
ENDIF GDR2F304.51
GDR2F304.52
C Check N_PROG_FLDS matches with O_PROG_LOOKUP set up by the UI GDR2F304.53
IF (N_PROG_FLDS.NE.O_PROG_LOOKUP) THEN GDR2F304.54
WRITE (6,*) ' ' GDR2F304.55
WRITE (6,*) ' Mismatch in no of prognostic fields.' GDR2F304.56
WRITE (6,*) ' No of prog fields in ocean dump ',N_PROG_FLDS GDR2F304.57
WRITE (6,*) ' No of prog fields set up by UI ',O_PROG_LOOKUP GDR2F304.58
WRITE (6,*) ' ' GDR2F304.59
WRITE (6,*) ' Run RECONFIGURATION to get correct no of', GDR2F304.60
& ' prognostic fields in ocean dump' GDR2F304.61
WRITE (6,*) ' or' GDR2F304.62
WRITE (6,*) ' Check/Reset experiment in User Interface' GDR2F304.63
WRITE (6,*) ' ' GDR2F304.64
CMESSAGE = 'INITDUMP: Wrong no of ocean prognostic fields' GDR2F304.65
ICODE = 202 GDR2F304.66
GO TO 9999 ! Return GDR2F304.67
ENDIF GDR2F304.68
GDR2F304.69
*IF DEF,MPP GSM1F404.19
! Initialise D1 to 0 to prevent NaNs in halos GSM1F404.20
! *DIR$ CACHE_BYPASS D1 GPB0F405.204
DO I = 1,LEN_TOT GSM1F404.22
D1(I)=0.0 GSM1F404.23
ENDDO GSM1F404.24
*ENDIF GSM1F404.25
C Set up no of fields to be read in @DYALLOC.1627
IF (L_O_PROG_ONLY) THEN @DYALLOC.1628
@DYALLOC.1629
C Prognostic fields only @DYALLOC.1630
LEN2_LOOKUP = N_PROG_FLDS GDR2F304.70
LEN_DATA = O_PROG_LEN @DYALLOC.1632
@DYALLOC.1633
WRITE (6,*) ' ' GDR2F304.71
WRITE (6,*) ' Read in ',N_PROG_FLDS,' prognostic fields.' GDR2F304.72
@DYALLOC.1637
C INITIALISE DIAGNOSTIC AREA OF D1 TO RMDI GSM7F403.7
DO I=LEN_DATA+1,O_LEN_DATA @DYALLOC.1639
D1(I)=RMDI @DYALLOC.1640
END DO @DYALLOC.1641
@DYALLOC.1642
ELSE @DYALLOC.1643
@DYALLOC.1644
C All fields. @DYALLOC.1645
LEN2_LOOKUP = O_LEN2_LOOKUP @DYALLOC.1646
LEN_DATA = O_LEN_DATA @DYALLOC.1647
@DYALLOC.1648
WRITE (6,*) ' ' GDR2F304.73
WRITE (6,*) ' Read in all ',O_LEN2_LOOKUP,' fields.' GDR2F304.74
@DYALLOC.1652
ENDIF @DYALLOC.1653
@DYALLOC.1654
*IF DEF,MPP GRR0F403.10
! Ensure that domain decomposition is consistent with submodel GRR0F403.11
GRR0F403.12
CALL CHANGE_DECOMPOSITION
(decomp_standard_ocean,ICODE) GRR0F403.13
GRR0F403.14
*ENDIF GRR0F403.15
CL 2.2 Call READ DUMP to read ocean dump. INITDUM1.192
INITDUM1.193
IF (LTIMER) THEN INITDUM1.194
CALL TIMER
('READDUMP',3) INITDUM1.195
INITDUM1.196
END IF INITDUM1.197
INITDUM1.198
GPB4F403.38
D1_ADDR_SUBMODEL_ID = SUBMODEL_FOR_SM(ocean_sm) GPB4F403.39
GPB4F403.40
CALL UM_READDUMP
(NFTIN,O_FIXHD,LEN_FIXHD, GPB4F403.41
& O_INTHD,O_LEN_INTHD, INITDUM1.200
& O_REALHD,O_LEN_REALHD, INITDUM1.201
& O_LEVDEPC,O_LEN1_LEVDEPC,O_LEN2_LEVDEPC, INITDUM1.202
& O_ROWDEPC,O_LEN1_ROWDEPC,O_LEN2_ROWDEPC, INITDUM1.203
& O_COLDEPC,O_LEN1_COLDEPC,O_LEN2_COLDEPC, INITDUM1.204
& O_FLDDEPC,O_LEN1_FLDDEPC,O_LEN2_FLDDEPC, INITDUM1.205
& O_EXTCNST,O_LEN_EXTCNST, INITDUM1.206
& O_DUMPHIST,LEN_DUMPHIST, INITDUM1.207
& O_CFI1,O_LEN_CFI1, INITDUM1.208
& O_CFI2,O_LEN_CFI2, INITDUM1.209
& O_CFI3,O_LEN_CFI3, INITDUM1.210
& O_LOOKUP,LEN1_LOOKUP,LEN2_LOOKUP, @DYALLOC.1656
*IF DEF,MPP GSM1F403.82
& O_MPP_LOOKUP,MPP_LEN1_LOOKUP, GSM1F403.83
*ENDIF GPB0F401.60
& ocean_sm, GPB4F403.42
& NO_OBJ_D1(D1_ADDR_SUBMODEL_ID), GPB4F403.43
& D1_ADDR(1,1,D1_ADDR_SUBMODEL_ID), GPB4F403.44
& LEN_DATA,D1, GDG0F401.813
*CALL ARGPPX
GDG0F401.814
& .TRUE.,ICODE,CMESSAGE) GKR3F403.21
INITDUM1.214
INITDUM1.215
IF (LTIMER) THEN INITDUM1.216
CALL TIMER
('READDUMP',4) INITDUM1.217
INITDUM1.218
END IF INITDUM1.219
INITDUM1.220
CALL FILE_CLOSE
(NFTIN,FT_ENVIRON(NFTIN), GGH1F305.9
& LEN_FT_ENVIR(NFTIN),0,0,ICODE) GTD0F400.6
INITDUM1.222
IF (ICODE.GT.0) RETURN @DYALLOC.1658
@DYALLOC.1659
IF (L_O_PROG_ONLY) THEN @DYALLOC.1660
@DYALLOC.1661
*IF -DEF,MPP GPB0F401.61
CALL ADDRESS_CHECK
(O_LOOKUP,LEN1_LOOKUP,O_PROG_LOOKUP, @DYALLOC.1662
*ELSE GPB0F401.62
C Need to pass field address and length info to ADDRESS_CHECK GSM1F403.84
DO I=1,LEN2_LOOKUP GSM1F403.85
O_MPP_ADDR(I) = O_MPP_LOOKUP(P_NADDR,I) GSM1F403.86
O_MPP_LEN(I) = O_MPP_LOOKUP(P_LBLREC,I) GSM1F403.87
ENDDO GSM1F403.88
CALL ADDRESS_CHECK
(O_LOOKUP,O_MPP_ADDR, GSM1F403.89
& O_MPP_LEN,LEN1_LOOKUP,LEN2_LOOKUP, GSM1F403.90
*ENDIF GPB0F401.65
& SI,NITEMS,NSECTS,O_PROG_LEN, @DYALLOC.1663
*CALL ARGPPX
GSS1F305.485
& ICODE,CMESSAGE) WRB1F401.258
IF (ICODE.GT.0) RETURN @DYALLOC.1665
@DYALLOC.1666
ENDIF @DYALLOC.1667
@DYALLOC.1668
C Reset O_FIXHD to correspond to Output Dump @DYALLOC.1669
O_FIXHD(152) = O_LEN2_LOOKUP @DYALLOC.1670
O_FIXHD(160) = O_FIXHD(150) + LEN1_LOOKUP*O_LEN2_LOOKUP @DYALLOC.1671
*IF DEF,MPP ORH6F402.1
O_FIXHD(161) = global_O_LEN_DATA GPB0F403.16
*ELSE ORH6F402.3
O_FIXHD(161) = O_LEN_DATA @DYALLOC.1672
*ENDIF ORH6F402.4
ORH6F402.5
@DYALLOC.1673
CL 2.3 Call SET_OCEAN_POINTERS to set integer pointers to ocean INITDUM1.223
CL data in dump and D1 array. INITDUM1.224
INITDUM1.225
CALL SET_OCN_POINTERS
( @DYALLOC.1674
*CALL ARGSIZE
@DYALLOC.1675
*CALL ARGPTRO
@DYALLOC.1676
*CALL ARGSTS
@DYALLOC.1677
*CALL ARGDUMO
@DYALLOC.1678
& ICODE, CMESSAGE) @DYALLOC.1679
INITDUM1.227
INITDUM1.228
IF (LTIMER) THEN INITDUM1.229
CALL TIMER
('NLIST ',3) INITDUM1.230
INITDUM1.231
END IF INITDUM1.232
INITDUM1.233
CALL READNLST_OCEAN
( @DYALLOC.1680
*CALL ARGSIZE
@DYALLOC.1681
*CALL ARGOCTOP
@DYALLOC.1682
& ICODE, CMESSAGE, O_EXTCNST) @DYALLOC.1683
INITDUM1.235
IF (LTIMER) THEN INITDUM1.236
CALL TIMER
('NLIST ',4) INITDUM1.237
INITDUM1.238
END IF INITDUM1.239
INITDUM1.240
IF (LTIMER) THEN INITDUM1.241
CALL TIMER
('CONFIG ',3) INITDUM1.242
INITDUM1.243
END IF INITDUM1.244
INITDUM1.245
CALL SET_CONSTANTS_OCEAN
( @DYALLOC.1684
*CALL ARGSIZE
@DYALLOC.1685
*CALL ARGOCTOP
@DYALLOC.1686
& ICODE, CMESSAGE, O_REALHD(7),O_LEVDEPC,O_ROWDEPC, @DYALLOC.1687
& O_REALHD(5),O_REALHD(8), INITDUM1.247
& O_COLDEPC,O_FLDDEPC,O_SPSTS(O_IXSTS(11)) ORH2F405.14
&,IMT_CLN,JMT_CLN,IMT_BIO, ORH2F405.15
& ltimer) ORH1F305.4759
INITDUM1.249
IF (LTIMER) THEN INITDUM1.250
CALL TIMER
('CONFIG ',4) INITDUM1.251
INITDUM1.252
END IF INITDUM1.253
SI061093.32
IF (ICODE.GT.0) RETURN SI061093.33
INITDUM1.254
GKR0F400.86
! Fill ocean stash array. joc_tracer, joc_u and joc_v are not OKR1F402.19
! set here because they are set every timestep in OCN_FOR_STEP. OKR1F402.20
GKR0F400.88
o_spsts(o_ixsts(4)) = JOC_NO_SEAPTS GKR0F400.98
o_spsts(o_ixsts(5)) = JOC_NO_SEGS GKR0F400.99
GKR0F400.100
do i = 1, o_len_cfi1 GKR0F400.101
o_spsts(o_ixsts(6)+i-1) = O_CFI1(i) GKR0F400.102
end do GKR0F400.103
GKR0F400.104
do i = 1, o_len_cfi2 GKR0F400.105
o_spsts(o_ixsts(7)+i-1) = O_CFI2(i) GKR0F400.106
end do GKR0F400.107
GKR0F400.108
do i = 1, o_len_cfi3 GKR0F400.109
o_spsts(o_ixsts(8)+i-1) = O_CFI3(i) GKR0F400.110
end do GKR0F400.111
GKR0F400.112
IF (CYCLIC_OCEAN) THEN GKR0F400.113
ocnrow_length=IMTM2 GKR0F400.114
ELSE GKR0F400.115
ocnrow_length=IMT GKR0F400.116
ENDIF GKR0F400.117
o_spsts(o_ixsts(9)) = ocnrow_length * jmt * km GKR0F400.118
GKR0F400.119
GKR0F400.120
INITDUM1.269
IF (ICODE .NE. 0) RETURN INITDUM1.270
INITDUM1.271
C Copy ocean data for forward timestep on startup INITDUM1.272
CALL DATASWAP
(O_LEN_DUALDATA, OSI0F402.4
& D1(joc_tracer(1,2)), D1(joc_tracer(1,1))) INITDUM1.274
INITDUM1.275
END IF WRB1F401.259
WRB1F401.260
*ENDIF WRB1F401.261
*IF DEF,WAVE WRB1F401.262
WRB1F401.263
CL 4.0 Read wave dump and initialise wave model. WRB1F401.264
IF (sm_ident.EQ.wave_sm) THEN WRB1F401.265
CL 4.1 Open unit for wave dump and read in fixed length header WRB1F401.266
NFTIN=131 WRB1F401.267
CALL FILE_OPEN
(NFTIN,FT_ENVIRON(NFTIN), WRB1F401.268
& LEN_FT_ENVIR(NFTIN),0,0,ERROR) WRB1F401.269
WRB1F401.270
CALL READ_FLH
(NFTIN,W_FIXHD,LEN_FIXHD,ICODE,CMESSAGE) WRB1F401.271
IF (ICODE.GT.0) RETURN WRB1F401.272
WRB1F401.273
CALL SETPOS
(NFTIN,0,ICODE) WRB1F401.274
WRB1F401.275
C Test if wave dump. WRB1F401.276
L_W_DUMP = W_FIXHD(5).EQ.1 .AND. W_FIXHD(2).EQ.wave_sm WRB1F401.277
WRB1F401.278
C Test if only prognostic fields to be read in WRB1F401.279
L_W_PROG_ONLY = L_W_DUMP .AND. H_STEPim(w_im).EQ.0 WRB1F401.280
WRB1F401.281
C Get no of prognostic fields in ocean dump WRB1F401.282
N_PROG_FLDS = W_FIXHD(153) WRB1F401.283
WRB1F401.284
C Check N_PROG_FLDS has been set. WRB1F401.285
IF (N_PROG_FLDS.EQ.IMDI) THEN WRB1F401.286
WRITE (6,*) ' ' WRB1F401.287
WRITE (6,*) ' No of prognostic fields not set in FIXHD(153)' WRB1F401.288
WRITE (6,*) ' Remake Wave dump to set FIXHD(153)' WRB1F401.289
CMESSAGE = 'INITDUMP: FIXHD(153) not set in wave dump' WRB1F401.290
ICODE = 201 WRB1F401.291
GO TO 9999 ! Return WRB1F401.292
ENDIF WRB1F401.293
WRB1F401.294
C Check N_PROG_FLDS matches with W_PROG_LOOKUP set up by the UI WRB1F401.295
IF (N_PROG_FLDS.NE.W_PROG_LOOKUP) THEN WRB1F401.296
WRITE (6,*) ' ' WRB1F401.297
WRITE (6,*) ' Mismatch in no of prognostic fields.' WRB1F401.298
WRITE (6,*) ' No of prog fields in wave dump ',N_PROG_FLDS WRB1F401.299
WRITE (6,*) ' No of prog fields set up by UI ',W_PROG_LOOKUP WRB1F401.300
WRITE (6,*) ' ' WRB1F401.301
WRITE (6,*) ' Remake wave dump to get correct no of', WRB1F401.302
& ' prognostic fields' WRB1F401.303
WRITE (6,*) ' or' WRB1F401.304
WRITE (6,*) ' Check/Reset experiment in User Interface' WRB1F401.305
WRITE (6,*) ' ' WRB1F401.306
CMESSAGE = 'INITDUMP: Wrong no of wave prognostic fields' WRB1F401.307
ICODE = 202 WRB1F401.308
GO TO 9999 ! Return WRB1F401.309
ENDIF WRB1F401.310
WRB1F401.311
C Set up no of fields to be read in WRB1F401.312
IF (L_W_PROG_ONLY) THEN WRB1F401.313
WRB1F401.314
C Prognostic fields only WRB1F401.315
LEN2_LOOKUP = N_PROG_FLDS WRB1F401.316
LEN_DATA = W_PROG_LEN WRB1F401.317
WRB1F401.318
WRITE (6,*) ' ' WRB1F401.319
WRITE (6,*) ' Read in ',N_PROG_FLDS,' prognostic fields.' WRB1F401.320
WRB1F401.321
C Initialise diagnostic area of D1 to RMDI WRB1F401.322
DO I=LEN_DATA+1,O_LEN_DATA WRB1F401.323
D1(I)=RMDI WRB1F401.324
END DO WRB1F401.325
WRB1F401.326
ELSE WRB1F401.327
WRB1F401.328
C All fields. WRB1F401.329
LEN2_LOOKUP = W_LEN2_LOOKUP WRB1F401.330
LEN_DATA = W_LEN_DATA WRB1F401.331
WRB1F401.332
WRITE (6,*) ' ' WRB1F401.333
WRITE (6,*) ' Read in all ',W_LEN2_LOOKUP,' fields.' WRB1F401.334
WRB1F401.335
ENDIF WRB1F401.336
WRB1F401.337
CL 4.2 Call READ DUMP to read wave dump. WRB1F401.338
WRB1F401.339
IF (LTIMER) THEN WRB1F401.340
CALL TIMER
('READDUMP',3) WRB1F401.341
WRB1F401.342
END IF WRB1F401.343
WRB1F401.344
GPB4F403.45
D1_ADDR_SUBMODEL_ID = SUBMODEL_FOR_SM(wave_sm) GPB4F403.46
GPB4F403.47
CALL UM_READDUMP
(NFTIN,W_FIXHD,LEN_FIXHD, GPB4F403.48
& W_INTHD,W_LEN_INTHD, WRB1F401.346
& W_REALHD,W_LEN_REALHD, WRB1F401.347
& W_LEVDEPC,W_LEN1_LEVDEPC,W_LEN2_LEVDEPC, WRB1F401.348
& W_ROWDEPC,W_LEN1_ROWDEPC,W_LEN2_ROWDEPC, WRB1F401.349
& W_COLDEPC,W_LEN1_COLDEPC,W_LEN2_COLDEPC, WRB1F401.350
& W_FLDDEPC,W_LEN1_FLDDEPC,W_LEN2_FLDDEPC, WRB1F401.351
& W_EXTCNST,W_LEN_EXTCNST, WRB1F401.352
& W_DUMPHIST,LEN_DUMPHIST, WRB1F401.353
& W_CFI1,W_LEN_CFI1, WRB1F401.354
& W_CFI2,W_LEN_CFI2, WRB1F401.355
& W_CFI3,W_LEN_CFI3, WRB1F401.356
& w_LOOKUP,LEN1_LOOKUP,LEN2_LOOKUP, WRB1F401.357
& wave_sm, GPB4F403.49
& NO_OBJ_D1(D1_ADDR_SUBMODEL_ID), GPB4F403.50
& D1_ADDR(1,1,D1_ADDR_SUBMODEL_ID), GPB4F403.51
& LEN_DATA,D1, WRB1F401.358
*CALL ARGPPX
WRB1F401.359
& .TRUE.,ICODE,CMESSAGE) GKR3F403.22
WRB1F401.361
WRB1F401.365
IF (LTIMER) THEN WRB1F401.366
CALL TIMER
('READDUMP',4) WRB1F401.367
WRB1F401.368
END IF WRB1F401.369
WRB1F401.370
CALL FILE_CLOSE
(NFTIN,FT_ENVIRON(NFTIN), WRB1F401.371
& LEN_FT_ENVIR(NFTIN),0,0,ICODE) WRB1F401.372
WRB1F401.373
IF (ICODE.GT.0) RETURN WRB1F401.374
WRB1F401.375
IF (L_W_PROG_ONLY) THEN WRB1F401.376
WRB1F401.377
CALL ADDRESS_CHECK
(W_LOOKUP,LEN1_LOOKUP,W_PROG_LOOKUP, WRB1F401.378
& SI,NITEMS,NSECTS,W_PROG_LEN, WRB1F401.379
*CALL ARGPPX
WRB1F401.380
& ICODE,CMESSAGE) WRB1F401.381
IF (ICODE.GT.0) RETURN WRB1F401.382
WRB1F401.383
ENDIF WRB1F401.384
WRB1F401.385
C Reset W_FIXHD to correspond to Output Dump WRB1F401.386
W_FIXHD(152) = W_LEN2_LOOKUP WRB1F401.387
W_FIXHD(160) = W_FIXHD(150) + LEN1_LOOKUP*W_LEN2_LOOKUP WRB1F401.388
W_FIXHD(161) = W_LEN_DATA WRB1F401.389
WRB1F401.390
CL 4.3 Call SET_WAVE_POINTERS to set integer pointers to wave WRB1F401.391
CL data in dump and D1 array. WRB1F401.392
WRB1F401.393
CALL SET_WAV_POINTERS (
WRB1F401.394
*CALL ARGSIZE
WRB1F401.395
*CALL ARGDUMW
WRB1F401.396
*CALL ARGSTS
WRB1F401.397
*CALL ARGPTRW
WRB1F401.398
& ICODE, CMESSAGE) WRB1F401.399
WRB1F401.400
WRB1F401.401
CALL SET_CONSTANTS_WAV(
WRB1F401.402
*CALL ARGSIZE
WRB1F401.403
*CALL ARGD1
WRB1F401.404
*CALL ARGDUMW
WRB1F401.405
*CALL ARGPTRW
WRB1F401.406
*CALL ARGCONW
WRB1F401.407
& ICODE, CMESSAGE) WRB1F401.408
WRB1F401.409
WRB1F401.410
IF (ICODE.GT.0) RETURN WRB1F401.411
WRB1F401.412
WRB1F401.413
! Fill wave stash array WRB1F401.414
WRB1F401.415
do i = 1, NGX * NGY WRB1F401.416
w_spsts(w_ixsts(1)+ i-1) = D1(jwv_lsmask + i-1) !land sea mask WRB1F401.417
end do WRB1F401.418
WRB1F401.419
w_spsts(w_ixsts(2)) = ngx*ngy ! size of fie WRB1F401.420
w_spsts(w_ixsts(3)) = 0 ! dummy WRB1F401.421
w_spsts(w_ixsts(4)) = 0 ! dummy WRB1F401.422
w_spsts(w_ixsts(5)) = 0 ! dummy WRB1F401.423
w_spsts(w_ixsts(6)) = 0 ! dummy WRB1F401.424
w_spsts(w_ixsts(7)) = 0 ! dummy WRB1F401.425
w_spsts(w_ixsts(8)) = 0 ! dummy WRB1F401.426
w_spsts(w_ixsts(9)) = 0 ! dummy WRB1F401.427
w_spsts(w_ixsts(10)) = 0 ! dummy WRB1F401.428
w_spsts(w_ixsts(11)) = 0 ! dummy WRB1F401.429
WRB1F401.430
! WRB1F401.431
END IF INITDUM1.276
INITDUM1.277
*ENDIF INITDUM1.278
INITDUM1.279
INITDUM1.280
GDR2F304.75
9999 CONTINUE GDR2F304.76
INITDUM1.285
RETURN INITDUM1.286
END INITDUM1.287
INITDUM1.288
INITDUM1.289
*ENDIF INITDUM1.290