*IF DEF,CONTROL SINDX1.2 C ******************************COPYRIGHT****************************** GTS2F400.12837 C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.12838 C GTS2F400.12839 C Use, duplication or disclosure of this code is subject to the GTS2F400.12840 C restrictions as set forth in the contract. GTS2F400.12841 C GTS2F400.12842 C Meteorological Office GTS2F400.12843 C London Road GTS2F400.12844 C BRACKNELL GTS2F400.12845 C Berkshire UK GTS2F400.12846 C RG12 2SZ GTS2F400.12847 C GTS2F400.12848 C If no contract has been raised with this copy of the code, the use, GTS2F400.12849 C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.12850 C to do so must first be obtained in writing from the Head of Numerical GTS2F400.12851 C Modelling at the above address. GTS2F400.12852 C GTS2F400.12853 !+Constructs STASH index array SINDX1.3 ! SINDX1.4 ! Subroutine Interface: SINDX1.5 SINDX1.6SUBROUTINE SINDX(NRECS) 3SINDX1.7 IMPLICIT NONE SINDX1.8 SINDX1.9 ! Description: SINDX1.10 ! The STASH list (LIST_S) is input to this routine. The output from SINDX1.11 ! the routine is the STASH index (INDX_S) consistent with LIST_S. SINDX1.12 ! Called by STPROC, DUPLIC. SINDX1.13 ! SINDX1.14 ! Method: SINDX1.15 ! Before this routine is executed, LIST_S has been ordered by SINDX1.16 ! model, section, item, input code. In this routine, INDX_S is SINDX1.17 ! set up as follows: SINDX1.18 ! INDX_S(1,m,s,i)= position of 1st. occurrence of m,s,i in LIST_S SINDX1.19 ! INDX_S(2,m,s,i)= no. of occurrences of m,s,i in LIST_S SINDX1.20 ! SINDX1.21 ! Current code owner: S.J.Swarbrick SINDX1.22 ! SINDX1.23 ! History: SINDX1.24 ! Version Date Comment SINDX1.25 ! ======= ==== ======= SINDX1.26 ! 3.5 Mar. 95 Original code. S.J.Swarbrick SINDX1.27 ! SINDX1.28 ! Code description: SINDX1.29 ! FORTRAN 77 + common Fortran 90 extensions. SINDX1.30 ! Written to UM programming standards version 7. SINDX1.31 ! SINDX1.32 ! System component covered: SINDX1.33 ! System task: Sub-Models Project SINDX1.34 ! SINDX1.35 ! Global variables: SINDX1.36 SINDX1.37 *CALL CSUBMODL
SINDX1.38 *CALL VERSION
SINDX1.39 *CALL CSTASH
GRB0F401.24 *CALL STEXTEND
SINDX1.41 *CALL STPARAM
SINDX1.42 SINDX1.43 ! Subroutine Arguments: SINDX1.44 SINDX1.45 ! Scalar Argument with intent(in): SINDX1.46 SINDX1.47 INTEGER NRECS ! No. of records in LIST_S SINDX1.48 SINDX1.49 ! Local variables: SINDX1.50 SINDX1.51 INTEGER II SINDX1.52 INTEGER IITM SINDX1.53 INTEGER IM SINDX1.54 INTEGER IREC SINDX1.55 INTEGER IS SINDX1.56 INTEGER ISEC SINDX1.57 INTEGER LSTART SINDX1.58 INTEGER MODL SINDX1.59 SINDX1.60 ! Local arrays: SINDX1.61 SINDX1.62 !- End of Header ------------------------------------------------------- SINDX1.63 SINDX1.64 SINDX1.65 ! Initialise Index array SINDX1.66 SINDX1.67 DO IM = 1,N_INTERNAL_MODEL_MAX SINDX1.68 DO IS = 0,NSECTP SINDX1.69 DO II= 1,NITEMP SINDX1.70 INDX_S(1,IM,IS,II)=0 SINDX1.71 INDX_S(2,IM,IS,II)=0 SINDX1.72 END DO SINDX1.73 END DO SINDX1.74 END DO SINDX1.75 SINDX1.76 ! Set up index SINDX1.77 SINDX1.78 IF(NRECS.GE.1) THEN SINDX1.79 SINDX1.80 MODL=LIST_S(st_model_code ,1) SINDX1.81 ISEC=LIST_S(st_sect_no_code,1) SINDX1.82 IITM=LIST_S(st_item_code ,1) SINDX1.83 SINDX1.84 LSTART=1 SINDX1.85 SINDX1.86 INDX_S(2,MODL,ISEC,IITM) = 1 SINDX1.87 INDX_S(1,MODL,ISEC,IITM) = 1 SINDX1.88 SINDX1.89 IF(NRECS.GE.2) THEN ! More than one record in LIST_S SINDX1.90 SINDX1.91 DO IREC=2,NRECS SINDX1.92 IF((LIST_S(st_model_code ,IREC).EQ.MODL).AND. ! Same model, SINDX1.93 & (LIST_S(st_sect_no_code,IREC).EQ.ISEC).AND. ! sec,item, SINDX1.94 & (LIST_S(st_item_code ,IREC).EQ.IITM))THEN ! as before SINDX1.95 SINDX1.96 LSTART=LSTART+1 SINDX1.97 SINDX1.98 INDX_S(2,MODL,ISEC,IITM) = INDX_S(2,MODL,ISEC,IITM)+1 SINDX1.99 SINDX1.100 ELSE ! New model, section, item SINDX1.101 SINDX1.102 MODL=LIST_S(st_model_code ,IREC) SINDX1.103 ISEC=LIST_S(st_sect_no_code,IREC) SINDX1.104 IITM=LIST_S(st_item_code ,IREC) SINDX1.105 SINDX1.106 LSTART=LSTART+1 SINDX1.107 SINDX1.108 INDX_S(1,MODL,ISEC,IITM) = LSTART SINDX1.109 INDX_S(2,MODL,ISEC,IITM) = 1 SINDX1.110 SINDX1.111 END IF SINDX1.112 END DO SINDX1.113 SINDX1.114 ELSE ! Only one record SINDX1.115 SINDX1.116 INDX_S(1,LIST_S(st_model_code ,1), SINDX1.117 & LIST_S(st_sect_no_code,1), SINDX1.118 & LIST_S(st_item_code ,1)) = 1 SINDX1.119 SINDX1.120 INDX_S(2,LIST_S(st_model_code ,1), SINDX1.121 & LIST_S(st_sect_no_code,1), SINDX1.122 & LIST_S(st_item_code ,1)) = 1 SINDX1.123 SINDX1.124 END IF SINDX1.125 END IF SINDX1.126 SINDX1.127 RETURN SINDX1.128 END SINDX1.129 *ENDIF SINDX1.130