*IF DEF,CONTROL OAINIT1.2
*IF DEF,OCEAN GSH1F403.3
C ******************************COPYRIGHT****************************** GTS2F400.6481
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.6482
C GTS2F400.6483
C Use, duplication or disclosure of this code is subject to the GTS2F400.6484
C restrictions as set forth in the contract. GTS2F400.6485
C GTS2F400.6486
C Meteorological Office GTS2F400.6487
C London Road GTS2F400.6488
C BRACKNELL GTS2F400.6489
C Berkshire UK GTS2F400.6490
C RG12 2SZ GTS2F400.6491
C GTS2F400.6492
C If no contract has been raised with this copy of the code, the use, GTS2F400.6493
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.6494
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.6495
C Modelling at the above address. GTS2F400.6496
C ******************************COPYRIGHT****************************** GTS2F400.6497
C GTS2F400.6498
CLL Routine: OC_AC_INIT OAINIT1.4
CLL OAINIT1.5
CLL Purpose: Reads in user choices, ACOBS files and auxillary files OAINIT1.6
CLL OAINIT1.7
CLL Tested under compilers: VAX Fortran 5.4 CRAY: cf77 OAINIT1.8
CLL Tested under operating systems: VAX/VMS V5.3 CRAY: Unicos 5.0 OAINIT1.9
CLL OAINIT1.10
CLL Author: M. J. Bell Date: 2 July 1992 OAINIT1.11
CLL OAINIT1.12
CLL Model Modification history from model version 3.0: OAINIT1.13
CLL version date OAINIT1.14
CLL 3.1 19/02/93 Sections 3 & 4: OA_DG_NML called to modify MB180293.1
CLL choices for diagnostics MB180293.2
CLL 3.1 19/02/93 Section 5: Length of obs data (LEN_DATA) MB180293.3
CLL determined before calling OA_IN_RD_OBS MB180293.4
CLL and ACOBS files explicitly opened/closed MB180293.5
CLL 3.2 Argument lists changed for dynamic allocation @DYALLOC.2520
CLL 3.2 28/07/93 Error message if OBS array too small M. Bell @DYALLOC.2521
CLL 3.3 01/12/93 Changes to argument list of call to OA_IN_SET_GRPS FR011293.67
CLL Addition of NO_TYP_MAX to OA_IN_PRMI arg. list FR011293.68
CLL 3.3 05/12/93 Loop over input ACOBS files added to set LEN_DATA FR011293.69
CLL OAINIT1.15
CLL 3.3 Declare, as EXTERNAL, OA_TIM_INIT. MB051293.37
CLL 3.4 20/06/94 Argument LCAL360 passed to OA_IN_RD_OBS GSS1F304.479
CLL S.J.Swarbrick GSS1F304.480
CLL 3.4 01/09/94 Correction to internal i/o statements OFR1F304.23
CLL 3.5 24/03/95 Changed OPEN to FILE_OPEN and GPB1F305.95
CLL CLOSE to FILE_CLOSE P.Burton GPB1F305.96
CLL 4.1 Include NO_CSF_MAX in call OA_IN_PRMI OFR1F401.60
CLL 4.1 Included call to OA_IN_RD_AUX OFR1F401.61
CLL 4.1 I_HGRID_HD used instead of I_GLBL_HD, I_CYC_HD OFR1F401.62
! 4.1 18/06/96 Changes to cope with changes in STASH addressing GDG0F401.1115
! Author D.M. Goddard. GDG0F401.1116
CLL 4.1 15/05/96 Calls OA_OBS_FRSH to read obs files M. J. Bell OMB1F401.63
CLL 4.3 17/04/97 Tidy DEFS and code so that blank source is not GSH1F403.4
CLL produced (A. Brady) GSH1F403.5
CLL 4.4 Pass ARGOINDX through to OA_IN_PRMI OFR1F404.9
CLL MB051293.38
CLL 4.4 01/06/97 Argument list change (OC_AC_INIT and OA_IN_PRMI) OFR6f404.5
CLL I_HGRID_HD replaced by L_OGLOBAL and L_OCYCLIC OFR6f404.6
CLL OFR6f404.7
CLL External documentation: FOAM doc paper 5/2/2 OAINIT1.16
CLL OAINIT1.17
CLL Logical components covered: T1A OAINIT1.18
CLL OAINIT1.19
CLL Programming standard: FOAM Doc Paper 3/2/1 version 1.0 OAINIT1.20
CLL OAINIT1.21
C----------------------------------------------------------------------- OAINIT1.22
C*L OAINIT1.23
SUBROUTINE OC_AC_INIT(ICODE, CMESSAGE, LL_AC_TIM, 1OAINIT1.24
*CALL MOCACSZE
@DYALLOC.2522
*CALL ARGOINDX
OFR1F404.10
*CALL MOCGM
@DYALLOC.2523
*CALL ARGPPX
GDG0F401.1117
# O_OBS, O_COV, LEN_FIXHD, @DYALLOC.2524
& NO_COLS_HD, NO_ROWS_HD, NO_LEVS_HD, OFR6f404.8
# D_FIX_LON_HD, D_FIX_LAT_HD, OAINIT1.26
# POL_LAT_HD, POL_LON_HD, OAINIT1.27
# RLAT_S_HD, RLON_W_HD, OAINIT1.28
& DEP_LEV_HD, D_LAT_HD, D_LON_HD, L_OGLOBAL, L_OCYCLIC, LCAL360 OFR6f404.9
& ) OFR6f404.10
C* OAINIT1.30
IMPLICIT NONE OAINIT1.31
C OAINIT1.32
C*L ARGUMENT LIST OAINIT1.33
C OAINIT1.34
INTEGER ICODE ! (IN/OUT) return code OAINIT1.35
CHARACTER*256 CMESSAGE ! (OUT) message accompanying return code OAINIT1.36
C OAINIT1.37
LOGICAL LL_AC_TIM ! (IN) T => TIMER called during OA routines
OAINIT1.38
C @DYALLOC.2525
*CALL ROCACSZE
! (IN) OA dimensions @DYALLOC.2526
*CALL TYPOINDX
! (IN) ocean grid index variables OFR1F404.11
*CALL ROCGM
! (OUT) model grid description @DYALLOC.2527
C Main obs arrays @DYALLOC.2528
REAL O_OBS(MAX_OBS_VAL) ! IN observation values @DYALLOC.2529
REAL O_COV(LEN_COV) ! IN covariance fields @DYALLOC.2530
INTEGER LEN_FIXHD ! IN length of fixed header @DYALLOC.2531
C dimensions of model grid OAINIT1.42
INTEGER NO_COLS_HD ! (IN) number of columns in (expanded) grid OAINIT1.43
INTEGER NO_ROWS_HD ! (IN) number of rows in (expanded) grid OAINIT1.44
INTEGER NO_LEVS_HD ! (IN) number of levels in (expanded) grid OAINIT1.45
C model grid spacing OAINIT1.46
REAL D_FIX_LON_HD ! (IN) first longitude spacing in grid OAINIT1.47
REAL D_FIX_LAT_HD ! (IN) first latitude spacing in grid OAINIT1.48
REAL POL_LAT_HD ! (IN) true latitude of pole of rotated grid OAINIT1.49
REAL POL_LON_HD ! (IN) true longitude of pole of rotated grid OAINIT1.50
REAL RLAT_S_HD ! (IN) latitude of 'southern' edge of tracer gri OAINIT1.51
REAL RLON_W_HD ! (IN) longitude of 'western' edge of tracer gri OAINIT1.52
REAL DEP_LEV_HD(NO_LEVS_HD) ! (IN) depth levels OAINIT1.53
REAL D_LAT_HD(NO_ROWS_HD) ! (IN) latitude spacings OAINIT1.54
REAL D_LON_HD(NO_COLS_HD) ! (IN) longitude spacings OAINIT1.55
C OFR6f404.11
LOGICAL L_OGLOBAL ! (IN) T=> ocean grid is global OFR6f404.12
LOGICAL L_OCYCLIC ! (IN) T=> ocean grid is cyclic OFR6f404.13
LOGICAL LCAL360 ! (IN) T=> 360 day calendar OFR6f404.14
C* OAINIT1.56
CL PARAMETERS OAINIT1.57
C OAINIT1.58
*CALL POCACNST
@DYALLOC.2532
*CALL CENVIR
MB180293.6
*CALL CSUBMODL
GDG0F401.1118
*CALL CPPXREF
GDG0F401.1119
*CALL PPXLOOK
GDG0F401.1120
C OAINIT1.60
CL COMDECKS amended by this routine OAINIT1.61
C OAINIT1.62
*CALL COCAUX
OAINIT1.63
*CALL COCACDG
OAINIT1.64
*CALL COCGRP
OAINIT1.66
*CALL COCIOF
OAINIT1.67
*CALL COCLAY
OAINIT1.68
*CALL COCMTL
OAINIT1.69
*CALL COCNOB
OAINIT1.70
*CALL COCPMA
OAINIT1.72
*CALL COCPMB
OAINIT1.73
*CALL COCPMC
OAINIT1.74
*CALL COCTIM
OAINIT1.75
C OAINIT1.76
*IF DEF,OCNASSM ORH1F305.485
CL SUBROUTINES CALLED OAINIT1.77
C OAINIT1.78
EXTERNAL OA_TIM_INIT MB051293.39
EXTERNAL OA_DG_DEF, OA_DG_NML, OA_IN_PRMI, OA_IN_NMLI MB180293.7
EXTERNAL OA_IN_PRMD, OA_IN_NMLD, OA_OBS_FRSH OMB1F401.64
C MB180293.10
CL NO LOCAL ARRAYS MB180293.11
C OAINIT1.81
CL OTHER VARIABLES OAINIT1.82
INTEGER I_UNT_IN ! main input stream's unit number OAINIT1.84
INTEGER IG ! loop index over ACOBS files FR051293.165
C OAINIT1.85
LOGICAL LL_FRST ! T => first read of NAMELISTS (output defaults OAINIT1.86
LOGICAL LL_LAST ! T => last read of NAMELISTS (check / set valu OAINIT1.87
C @DYALLOC.2533
C* OAINIT1.88
C----------------------------------------------------------------------- OAINIT1.89
C OAINIT1.90
CL 0. Preliminaries OAINIT1.91
C OAINIT1.92
I_UNT_IN = 5 ! main input stream's unit number OAINIT1.93
C OAINIT1.94
CL 0.1 Find start and end of assimilation period OAINIT1.95
C OAINIT1.96
CALL OA_TIM_INIT(
O_TIM_FIN_ASS, O_TIM_STR_ASS, O_EDG_ASS_PER) OAINIT1.97
C OAINIT1.98
CL 1. Set defaults for choices for diagnostic MB180293.17
C OAINIT1.100
CALL OA_DG_DEF(
ICODE, CMESSAGE) OAINIT1.101
C OAINIT1.102
CL 2. Set defaults for main "parameters" set by NAMELISTS MB180293.18
C OAINIT1.104
CL 2.1 for "parameters" independent of input data OAINIT1.105
C OAINIT1.106
CALL OA_IN_PRMI(
ICODE,CMESSAGE, OAINIT1.107
# MAX_LEVS_M, MAX_ROWS_M, MAX_COLS_M, @DYALLOC.2535
& NO_CAT_MAX, NO_GRP_MAX, NO_TYP_MAX, NO_CSF_MAX, OFR2F401.235
*CALL ARGOINDX
OFR1F404.12
*CALL MOCGM
@DYALLOC.2537
*CALL AOCPMA
OAINIT1.111
*CALL AOCPMB
OAINIT1.112
*CALL AOCPMC
OAINIT1.113
& LL_AC_TIM, L_OGLOBAL, L_OCYCLIC, OFR6f404.15
# NO_COLS_HD, NO_ROWS_HD, NO_LEVS_HD, OAINIT1.115
# D_FIX_LON_HD, D_FIX_LAT_HD, OAINIT1.116
# POL_LAT_HD, POL_LON_HD, RLAT_S_HD, RLON_W_HD, OAINIT1.117
# DEP_LEV_HD, D_LAT_HD, D_LON_HD) OAINIT1.118
C OAINIT1.119
IF(ICODE .GT. 0) GO TO 999 OAINIT1.120
C OAINIT1.121
CL 2.2 for "parameters" determining or dependent on input data OAINIT1.122
C OAINIT1.123
CALL OA_IN_PRMD(
ICODE, CMESSAGE) OAINIT1.124
IF(ICODE .GT. 0) GO TO 999 OAINIT1.125
C OAINIT1.126
CL 3. First read of NAMELISTS (writing defaults to diagnostics file) OAINIT1.127
C OAINIT1.128
LL_FRST = .TRUE. OAINIT1.129
LL_LAST = .FALSE. OAINIT1.130
C OAINIT1.131
REWIND I_UNT_IN OFR4F404.691
CL 3.0 for diagnostic choices MB180293.19
C MB180293.20
CALL OA_DG_NML(
ICODE,CMESSAGE,I_UNT_IN,JO_UNT_DG, MB180293.21
* LL_FRST, LL_LAST) MB180293.22
IF(ICODE .GT. 0) GO TO 999 MB180293.23
C MB180293.24
CL 3.1 for "parameters" independent of input data OAINIT1.132
C OAINIT1.133
CALL OA_IN_NMLI(
ICODE, CMESSAGE, I_UNT_IN, JO_UNT_DG, OAINIT1.134
# LL_FRST, LL_LAST) OAINIT1.135
IF(ICODE .GT. 0) GO TO 999 OAINIT1.136
C OAINIT1.137
CL 3.2 for "parameters" determining or dependent on input data OAINIT1.138
C OAINIT1.139
CALL OA_IN_NMLD(
ICODE,CMESSAGE,I_UNT_IN,JO_UNT_DG, OAINIT1.140
# LL_FRST, LL_LAST) OAINIT1.141
IF(ICODE .GT. 0) GO TO 999 OAINIT1.142
C OAINIT1.143
CL 4. Last read of NAMELISTS (checking values set; setting OAINIT1.144
CL any values dependent on namelist; and writing namelists OAINIT1.145
CL to diagnostics file) OAINIT1.146
C OAINIT1.147
LL_FRST = .FALSE. OAINIT1.148
LL_LAST = .TRUE. OAINIT1.149
C OAINIT1.150
CL 4.0 for diagnostic choices MB180293.25
C MB180293.26
CALL OA_DG_NML(
ICODE,CMESSAGE,I_UNT_IN,JO_UNT_DG, MB180293.27
* LL_FRST, LL_LAST) MB180293.28
IF(ICODE .GT. 0) GO TO 999 MB180293.29
C MB180293.30
CL 4.1 for "parameters" independent of input data OAINIT1.151
C OAINIT1.152
CALL OA_IN_NMLI(
ICODE, CMESSAGE, I_UNT_IN, JO_UNT_DG, OAINIT1.153
# LL_FRST, LL_LAST) OAINIT1.154
IF(ICODE .GT. 0) GO TO 999 OAINIT1.155
C OAINIT1.156
CL 4.2 for "parameters" determining or dependent on input data OAINIT1.157
C OAINIT1.158
CALL OA_IN_NMLD(
ICODE,CMESSAGE,I_UNT_IN,JO_UNT_DG, OAINIT1.159
# LL_FRST, LL_LAST) OAINIT1.160
IF(ICODE .GT. 0) GO TO 999 OAINIT1.161
C OAINIT1.162
C OAINIT1.164
CL 6. Read in ACOBS files and index input data MB180293.54
CALL OA_OBS_FRSH(
ICODE, CMESSAGE,LL_AC_TIM,.TRUE.,LEN_FIXHD, OMB1F401.65
*CALL MOCACSZE
@DYALLOC.2548
*CALL ARGPPX
ORH0F402.1
& O_OBS) OMB1F401.66
C OAINIT1.180
IF(ICODE .GT. 0) GO TO 999 OAINIT1.181
C OAINIT1.182
CL 8. Read in auxillary data MB180293.58
C OAINIT1.184
CALL OA_IN_RD_AUX
OFR1F401.63
C OAINIT1.186
CL 9. Check and amend input choices according to data available MB180293.59
C OAINIT1.188
999 CONTINUE OAINIT1.189
*ENDIF OCNASSM ORH1F305.486
RETURN OAINIT1.190
END OAINIT1.191
C----------------------------------------------------------------------- GSH1F403.6
*ENDIF ! OCNASSM OAINIT1.192
*ENDIF ! CONTROL OAINIT1.193