*IF DEF,CONTROL,AND,DEF,OCEAN GSH1F403.18
C ******************************COPYRIGHT****************************** GTS2F400.7021
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.7022
C GTS2F400.7023
C Use, duplication or disclosure of this code is subject to the GTS2F400.7024
C restrictions as set forth in the contract. GTS2F400.7025
C GTS2F400.7026
C Meteorological Office GTS2F400.7027
C London Road GTS2F400.7028
C BRACKNELL GTS2F400.7029
C Berkshire UK GTS2F400.7030
C RG12 2SZ GTS2F400.7031
C GTS2F400.7032
C If no contract has been raised with this copy of the code, the use, GTS2F400.7033
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.7034
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.7035
C Modelling at the above address. GTS2F400.7036
C ******************************COPYRIGHT****************************** GTS2F400.7037
C GTS2F400.7038
*IF DEF,OCEAN OCNSTEP1.3
CLL Routine: OCN_STEP OCNSTEP1.4
CLL OCNSTEP1.5
CLL Purpose: This subroutine is the top level control for OCNSTEP1.6
CLL an ocean forward time step and analysis step. OCNSTEP1.7
CLL It is called from program U_MODEL. OCNSTEP1.8
CLL OCNSTEP1.9
CLL Tested under compiler: VAX Fortran 5.4 CRAY: cf77 OCNSTEP1.10
CLL Tested under operating systems: VAX/VMS V5.3 CRAY: Unicos 5.0 OCNSTEP1.11
CLL OCNSTEP1.12
CLL Author: M. J. Bell Date: 27 June 1992 OCNSTEP1.13
CLL OCNSTEP1.14
CLL Model Modification history from model version 3.0: OCNSTEP1.15
CLL version date OCNSTEP1.16
CLL 3.1 22/01/93 Add debugging code under *DEF BITCOM20 to assist TJ270193.102
CLL bit compare tests across new releases of the model. TJ270193.103
CLL 3.1 8/02/93 : added comdeck CHSUNITS to define NUNITS for RS030293.215
CLL comdeck CCONTROL. RS030293.216
CLL 3.2 Argument lists amended for dynamic allocation @DYALLOC.2791
CLL 3.2 16/07/93 *CALL CSMID added under *DEF BITCOM. @DYALLOC.2792
CLL 3.4 09/06/94 DEF BITCOM20 replaced by LOGICAL L_WRIT_OCNSTEP GSS1F304.77
CLL DEF BITCOM removed GSS1F304.78
CLL Comdeck C_WRITD *CALLed GSS1F304.79
CLL S.J.Swarbrick GSS1F304.80
CLL 3.5 07/06/95 Chgs to STASH_MAXLEN array. RTHBarnes GRB4F305.335
CLL 4.3 17/04/97 Tidy DEFS and code so that blank source is no GSH1F403.19
CLL produced (A. Brady) GSH1F403.20
!LL 4.3 14/04/97 Change WRITD1 to DUMPCTL1 calls for MPP. K Rogers GKR4F403.315
CLL 4.4 Include ARGOINDX in call to OC_AC_CTL OFR1F404.1
! 4.5 Remove ARGPTRA, ARGCONA in calls to OCN_FOR_STEP and ORH3F405.72
! OC_AC_CTL ORH3F405.73
CLL OCNSTEP1.17
CLL External documentation: FOAM doc paper 5/2/1/1 OCNSTEP1.18
CLL OCNSTEP1.19
CLL Logical components covered: top level for ocean assimilation OCNSTEP1.20
CLL OCNSTEP1.21
CLL Programming standard: FOAM Doc Paper 3/2/1 version 1.0 OCNSTEP1.22
CLL OCNSTEP1.23
C---------------------------------------------------------------------- OCNSTEP1.24
C*L OCNSTEP1.25
SUBROUTINE OCN_STEP( 1,3@DYALLOC.2794
*CALL ARGSIZE
@DYALLOC.2795
*CALL ARGDUMA
@DYALLOC.2796
*CALL ARGDUMO
@DYALLOC.2797
*CALL ARGDUMW
GKR1F401.244
*CALL ARGD1
@DYALLOC.2798
*CALL ARGPTRA
@DYALLOC.2799
*CALL ARGPTRO
@DYALLOC.2800
*CALL ARGSTS
@DYALLOC.2801
*CALL ARGCONA
@DYALLOC.2802
*CALL ARGCONO
@DYALLOC.2803
*CALL ARGBND
SI180893.24
*CALL ARGPPX
GKR0F305.970
* ICODE,CMESSAGE) @DYALLOC.2804
C* OCNSTEP1.27
IMPLICIT NONE OCNSTEP1.28
C GSS1F304.81
C*L ARGUMENT LIST OCNSTEP1.30
C GSS1F304.82
INTEGER ICODE ! OUT return code OCNSTEP1.32
CHARACTER*256 CMESSAGE ! OUT message accompanying return code OCNSTEP1.33
C* OCNSTEP1.34
*CALL OARRYSIZ
ORH6F401.14
*CALL COMOCASZ
@DYALLOC.2805
*CALL CSUBMODL
GDR3F305.146
*CALL CMAXSIZE
@DYALLOC.2806
*CALL TYPSIZE
@DYALLOC.2807
*CALL TYPDUMA
@DYALLOC.2808
*CALL TYPDUMO
@DYALLOC.2809
*CALL TYPDUMW
GKR1F401.245
*CALL TYPD1
@DYALLOC.2810
*CALL TYPPTRA
@DYALLOC.2811
*CALL TYPPTRO
@DYALLOC.2812
*CALL TYPSTS
@DYALLOC.2813
*CALL TYPCONA
@DYALLOC.2814
*CALL TYPCONO
@DYALLOC.2815
*CALL TYPBND
SI180893.25
*CALL TYPOCDPT
@DYALLOC.2816
*CALL PPXLOOK
GKR0F305.971
C TJ270193.105
CL When DEF,OCNASSM is False, this routine only calls OCN_FOR_STEP OCNSTEP1.35
C OCNSTEP1.38
C COMDECKS OCNSTEP1.39
C OCNSTEP1.40
*CALL CHSUNITS
! defines NUNITS RS030293.217
*CALL CCONTROL
! stores logicals for top level control OCNSTEP1.41
*CALL CTIME
! Needed for STEPim for time-step control of WRITD1 GDR5F305.131
*CALL C_WRITD
! Declares variables for time-step control of WRITD1 GSS1F304.85
*CALL COCNINDX
! Indices used by ocean to control row-wise loops ORH7F402.68
C OCNSTEP1.48
C PARAMETERS OCNSTEP1.49
INTEGER NO_STSH_OA ! STASH section number for ocean analysis OCNSTEP1.50
PARAMETER ( NO_STSH_OA = 35 ) OCNSTEP1.51
C OCNSTEP1.52
C WORK ARRAYS OCNSTEP1.53
C OCNSTEP1.54
REAL DU_ASS_BTRP(IMT_ASM,JMT_ASM) ! barotrpic current increments ORH1F305.5416
&, DV_ASS_BTRP(IMT_ASM,JMT_ASM) ! calc'd in data analysis step ORH1F305.5417
C OCNSTEP1.57
LOGICAL LL_ASS_BTRP ! T => barotropic current incs made OCNSTEP1.58
C OCNSTEP1.59
C Local Storage GRB4F305.336
INTEGER IM_IDENT ! internal model identifier GRB4F305.337
& ,IM_INDEX ! internal model index for STASH arrays GRB4F305.338
C OCNSTEP1.61
C EXTERNAL SUBROUTINES CALLED OCNSTEP1.62
C OCNSTEP1.63
EXTERNAL OCN_FOR_STEP OCNSTEP1.64
&, OC_AC_CTL ORH1F305.5418
&, OA_ZERO ORH1F305.5419
&, TIMER ORH1F305.5420
&, DUMPCTL GKR4F403.316
GRB4F305.339
C Set up internal model identifier and STASH index GRB4F305.340
im_ident = ocean_im GRB4F305.341
im_index = internal_model_index(im_ident) GRB4F305.342
GRB4F305.343
C GSS1F304.87
C Calc WRITD1_TEST - for time step control of WRITD1 GSS1F304.88
C GSS1F304.89
IF (L_WRIT_OCNSTEP) THEN GSS1F304.90
GSS1F304.91
IF (STEPim(o_im) .EQ. 1) THEN GDR5F305.132
WRITD1_TEST_PREV = 0 GSS1F304.93
END IF GSS1F304.94
GSS1F304.95
WRITD1_TEST = (STEPim(o_im) - T_WRITD1_START)/T_WRITD1_INT GDR5F305.133
GSS1F304.97
IF (STEPim(o_im) .LT. T_WRITD1_START) WRITD1_TEST = 0 GDR5F305.134
GSS1F304.99
END IF GSS1F304.100
C OCNSTEP1.65
IF (L_OCNASSM) THEN ORH1F305.5421
C* OCNSTEP1.70
C----------------------------------------------------------------------- OCNSTEP1.71
GSS1F304.101
CL 0.1 Set barotropic current increments to zero OCNSTEP1.77
C OCNSTEP1.78
CALL OA_ZERO (
IMT*JMT, DU_ASS_BTRP) OCNSTEP1.79
CALL OA_ZERO (
IMT*JMT, DV_ASS_BTRP) OCNSTEP1.80
C OCNSTEP1.81
CL 1. If climate increments to be made then CALL OC_CLM_INC OCNSTEP1.82
C OCNSTEP1.83
IF (LAS_CLM_INC) THEN OCNSTEP1.84
CCC CALL OC_CLM_INC(ICODE,CMESSAGE, IMT, JMT, OCNSTEP1.85
CCC # LL_ASS_BTRP, DU_ASS_BTRP, DV_ASS_BTRP) OCNSTEP1.86
IF (ICODE .GT. 0) GO TO 999 OCNSTEP1.87
END IF OCNSTEP1.88
C OCNSTEP1.89
CL 2. If inside assimilation period then CALL OC_AC_CTL OCNSTEP1.90
C OCNSTEP1.91
IF (LASSIMILATION) THEN OCNSTEP1.92
CALL OC_AC_CTL(
ICODE, CMESSAGE, @DYALLOC.2820
*CALL ARGSIZE
@DYALLOC.2821
*CALL ARGDUMA
@DYALLOC.2822
*CALL ARGDUMO
@DYALLOC.2823
*CALL ARGDUMW
GKR1F401.246
*CALL ARGD1
@DYALLOC.2824
*CALL ARGSTS
@DYALLOC.2825
*CALL ARGPTRO
@DYALLOC.2827
*CALL ARGOCTOP
@DYALLOC.2829
*CALL ARGPPX
GSS1F400.1479
*CALL ARGOINDX
OFR1F404.2
# LL_ASS_BTRP, DU_ASS_BTRP, DV_ASS_BTRP, @DYALLOC.2830
# STASH_MAXLEN(NO_STSH_OA,im_index), NO_STSH_OA) GRB4F305.344
IF (ICODE .GT. 0) GO TO 999 OCNSTEP1.96
END IF ! LASSIMILATION OCNSTEP1.97
C OCNSTEP1.98
CL 3. If analysis steps are less frequent than forecast steps then OCNSTEP1.99
CL CALL OC_ADD_INC OCNSTEP1.100
C OCNSTEP1.101
IF (LAS_ADD_INC) THEN OCNSTEP1.102
CCC CALL OC_ADD_INC(ICODE,CMESSAGE, IMT, JMT, OCNSTEP1.103
CCC # LL_ASS_BTRP, DU_ASS_BTRP, DV_ASS_BTRP) OCNSTEP1.104
IF (ICODE .GT. 0) GO TO 999 OCNSTEP1.105
END IF OCNSTEP1.106
TJ270193.109
IF (L_WRIT_OCNSTEP .AND. GSS1F304.102
& (STEPim(o_im).LE.T_WRITD1_END .OR. T_WRITD1_END .EQ. 0)) THEN GDR5F305.135
GSS1F304.104
IF (STEPim(o_im).EQ.T_WRITD1_START .OR. GDR5F305.136
& WRITD1_TEST.GT.WRITD1_TEST_PREV) THEN GSS1F304.106
GSS1F304.107
CALL DUMPCTL
( GKR4F403.317
*CALL ARGSIZE
GKR4F403.318
*CALL ARGD1
GKR4F403.319
*CALL ARGDUMA
GKR4F403.320
*CALL ARGDUMO
GKR4F403.321
*CALL ARGDUMW
GKR4F403.322
*CALL ARGCONA
GKR4F403.323
*CALL ARGPTRA
GKR4F403.324
*CALL ARGSTS
GKR4F403.325
*CALL ARGPPX
GKR4F403.326
& ocean_sm,0,.TRUE.,'af_oc_ac_c',STEPim(o_im), GIE1F405.15
& ICODE,CMESSAGE) GKR4F403.328
GSS1F304.109
END IF GSS1F304.110
GSS1F304.111
END IF GSS1F304.112
C GSS1F304.113
ELSE ORH1F305.5422
! Initialise dummy vars when Ocean assimilation not used. ORH1F305.5423
LL_ASS_BTRP = .false. ORH1F305.5424
DU_ASS_BTRP(1,1) = 0.0 ORH1F305.5425
DV_ASS_BTRP(1,1) = 0.0 ORH1F305.5426
ENDIF ! L_OCNASSM ORH1F305.5427
C OCNSTEP1.108
CL 4. Perform a forward model time step; CALL OCN_FOR_STEP OCNSTEP1.109
C OCNSTEP1.110
CALL OCN_FOR_STEP
( @DYALLOC.2832
*CALL ARGSIZE
@DYALLOC.2833
*CALL ARGD1
@DYALLOC.2834
*CALL ARGDUMA
@DYALLOC.2835
*CALL ARGDUMO
@DYALLOC.2836
*CALL ARGDUMW
GKR1F401.247
*CALL ARGPTRO
@DYALLOC.2838
*CALL ARGSTS
@DYALLOC.2839
*CALL ARGCONO
@DYALLOC.2841
*CALL ARGOCTOP
@DYALLOC.2842
*CALL ARGBND
SI180893.26
*CALL ARGPPX
GKR0F305.972
*CALL ARGOINDX
ORH7F402.69
& ICODE,CMESSAGE,LL_ASS_BTRP,DU_ASS_BTRP,DV_ASS_BTRP) OOM1F405.337
C OCNSTEP1.116
IF (L_OCNASSM) THEN ORH1F305.5428
C OCNSTEP1.118
IF (ICODE .GT. 0) GO TO 999 OCNSTEP1.119
C OCNSTEP1.124
ENDIF ! L_OCNASSM ORH1F305.5429
999 CONTINUE ORH1F305.5430
C OCNSTEP1.128
IF (L_WRIT_OCNSTEP .AND. GSS1F304.114
& (STEPim(o_im).LE.T_WRITD1_END .OR. T_WRITD1_END .EQ. 0)) THEN GDR5F305.138
C GSS1F304.116
IF (STEPim(o_im).EQ.T_WRITD1_START .OR. GDR5F305.139
& WRITD1_TEST.GT.WRITD1_TEST_PREV) THEN GSS1F304.118
C GSS1F304.119
CALL DUMPCTL
( GKR4F403.329
*CALL ARGSIZE
GKR4F403.330
*CALL ARGD1
GKR4F403.331
*CALL ARGDUMA
GKR4F403.332
*CALL ARGDUMO
GKR4F403.333
*CALL ARGDUMW
GKR4F403.334
*CALL ARGCONA
GKR4F403.335
*CALL ARGPTRA
GKR4F403.336
*CALL ARGSTS
GKR4F403.337
*CALL ARGPPX
GKR4F403.338
& ocean_sm,0,.TRUE.,'endocnstep',STEPim(o_im), GIE1F405.24
& ICODE,CMESSAGE) GKR4F403.340
C GSS1F304.121
END IF GSS1F304.122
C GSS1F304.123
END IF GSS1F304.124
C GSS1F304.125
WRITD1_TEST_PREV = WRITD1_TEST GSS1F304.126
C GSS1F304.127
RETURN OCNSTEP1.129
END OCNSTEP1.130
C OCNSTEP1.131
*ENDIF OCEAN OCNSTEP1.132
*ENDIF CONTROL OCNSTEP1.133