*IF DEF,OCEAN                                                              @DYALLOC.4063   
C ******************************COPYRIGHT******************************    GTS3F400.117    
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS3F400.118    
C                                                                          GTS3F400.119    
C Use, duplication or disclosure of this code is subject to the            GTS3F400.120    
C restrictions as set forth in the contract.                               GTS3F400.121    
C                                                                          GTS3F400.122    
C                Meteorological Office                                     GTS3F400.123    
C                London Road                                               GTS3F400.124    
C                BRACKNELL                                                 GTS3F400.125    
C                Berkshire UK                                              GTS3F400.126    
C                RG12 2SZ                                                  GTS3F400.127    
C                                                                          GTS3F400.128    
C If no contract has been raised with this copy of the code, the use,      GTS3F400.129    
C duplication or disclosure of it is strictly prohibited.  Permission      GTS3F400.130    
C to do so must first be obtained in writing from the Head of Numerical    GTS3F400.131    
C Modelling at the above address.                                          GTS3F400.132    
C ******************************COPYRIGHT******************************    GTS3F400.133    
C ****************************ACKNOWLEDGMENT***************************    GTS3F400.134    
C This code is derived from Public Domain code (the Cox 1984 Ocean         GTS3F400.135    
C Model) distributed by the Geophysical Fluid Dynamics Laboratory.         GTS3F400.136    
C               NOAA                                                       GTS3F400.137    
C               PO Box 308                                                 GTS3F400.138    
C               Princeton                                                  GTS3F400.139    
C               New Jersey USA                                             GTS3F400.140    
C If you wish to obtain a copy of the original code that does not have     GTS3F400.141    
C Crown Copyright use, duplication or disclosure restrictions, please      GTS3F400.142    
C contact them at the above address.                                       GTS3F400.143    
C ****************************ACKNOWLEDGMENT***************************    GTS3F400.144    
C                                                                          GTS3F400.145    
CLL Modification History                                                   OMB1F404.36     
CLL 4.4 New subroutine STATE_T included.                                   OMB1F404.37     
!LL   4.5     17/09/98 Update calls to timer, required because of          GPB8F405.111    
!LL                    new barrier inside timer.         P.Burton          GPB8F405.112    
CLL                                                                        OMB1F404.38     

      SUBROUTINE STATE(TX,SX,RHO,TQ,SQ,IMT,KM,J,JMT)                        5,2ORH7F404.34     
!                                                                          ORH1F305.4926   
!=======================================================================   ORH1F305.4927   
!                                                                    ===   ORH1F305.4928   
!  STATE COMPUTES ONE ROW OF NORMALIZED DENSITIES BY USING A 3RD     ===   ORH1F305.4929   
!        ORDER POLYNOMIAL FIT TO THE KNUDSEN FORMULA, LEVEL BY       ===   ORH1F305.4930   
!        LEVEL, WHERE:                                               ===   ORH1F305.4931   
!          TX =THE INPUT ROW OF TEMPERATURES                         ===   ORH1F305.4932   
!          SX =THE INPUT ROW OF SALINITIES (UNITS: (PPT-35)/1000)    ===   ORH1F305.4933   
!          RHO=THE RETURNED ROW OF NORMALIZED DENSITIES              ===   ORH1F305.4934   
!          TQ =ONE ROW OF WORK SPACE PROVIDED BY THE CALLING ROUTINE ===   ORH1F305.4935   
!          SQ =ONE ROW OF WORK SPACE PROVIDED BY THE CALLING ROUTINE ===   ORH1F305.4936   
!                                                                    ===   ORH1F305.4937   
!                                                                          ORH1F305.4938   
!    Model            Modification history from model version 3.4:         ORH1F305.4939   
!   version  Date                                                          ORH1F305.4940   
!   3.4  16/6/94 : Change CHARACTER*(*) to CHARACTER*(80) N.Farnon         ORH1F305.4941   
!   4.4  15/08/97  Remove SKIPLAND code. R. Hill                           ORH7F404.35     
!                                                                          ORH1F305.4942   
!=======================================================================   ORH1F305.4943   
!                                                                          ORH1F305.4944   
      IMPLICIT NONE                                                        ORH1F305.4945   
!---------------------------------------------------------------------     ORH1F305.4946   
!  DEFINE GLOBAL DATA                                                      ORH1F305.4947   
!---------------------------------------------------------------------     ORH1F305.4948   
!                                                                          ORH1F305.4949   
*CALL OARRYSIZ                                                             ORH6F401.19     
      INTEGER                                                              ORH1F305.4950   
     & IMT      ! In Number of points in row                               ORH1F305.4951   
     &,KM       ! Number of levels                                         ORH1F305.4952   
     &,JMT         ! IN No of rows                                         ORH1F305.4953   
     &,J           ! IN ROW NUMBER                                         ORH1F305.4954   
                                                                           ORH1F305.4962   
!                                                                          ORH1F305.4963   
*CALL COCSTATE                                                             ORH1F305.4964   
*CALL CNTLOCN                                                              ORH1F305.4965   
*CALL OTIMER                                                               ORH1F305.4967   
!----------------------------------------------------------------------    ORH1F305.4968   
!  DEFINE LOCAL DATA                                                       ORH1F305.4969   
!----------------------------------------------------------------------    ORH1F305.4970   
      INTEGER I,             ! Grid point index (Zonal)                    ORH1F305.4971   
     &     K                 ! Grid point index (Vertical TOP DOWN)        ORH1F305.4972   
!                                                                          ORH1F305.4973   
!                                                                          ORH1F305.4974   
!---------------------------------------------------------------------     ORH1F305.4975   
!  DEMENSION LOCAL DATA                                                    ORH1F305.4976   
!---------------------------------------------------------------------     ORH1F305.4977   
!                                                                          ORH1F305.4978   
      REAL      TX(IMT,KM),SX(IMT,KM),RHO(IMT,KM),TQ(IMT,KM),SQ(IMT,KM)    ORH1F305.4979   
                                                                           ORH1F305.4980   
      INTEGER LL   ! LOOP COUNTER                                          ORH1F305.4981   
                                                                           ORH1F305.4982   
!     REAL sigo(KM)  ! Depth-dependent constant usually left off density   ORH1F305.4983   
!                      by STATE but needed when K-theory mixing used       ORH1F305.4984   
!                                                                          ORH1F305.4985   
!      N.B.!!! sigo does not seem to make any difference to the answers    ORH1F305.4986   
!              produced with K-theory mixing. However it was present on    ORH1F305.4987   
!              the Cyber version and has therefore been left in the        ORH1F305.4988   
!              basecode (but with all references to sigo commented out),   ORH1F305.4989   
!              in case anyone remembers why it was there. RAW 24/7/91.     ORH1F305.4990   
!                                                                          ORH1F305.4991   
!                                                                          ORH1F305.4992   
!---------------------------------------------------------------------     ORH1F305.4993   
!  ENTER NORMALIZING TEMPERATURES AND SALINITIES,                          ORH1F305.4994   
!  AND COEFFICIENTS GENERATED BY THE PROGRAM ("KNUDSN") WHICH              ORH1F305.4995   
!  FITS 3RD ORDER POLYNOMIALS TO THE KNUDSEN FORMULA, LEVEL BY LEVEL.      ORH1F305.4996   
!---------------------------------------------------------------------     ORH1F305.4997   
!                                                                          ORH1F305.4998   
!                                                                          ORH1F305.4999   
!---------------------------------------------------------------------     ORH1F305.5000   
!  BEGIN EXECUTABLE CODE                                                   ORH1F305.5001   
!---------------------------------------------------------------------     ORH1F305.5002   
      IF (L_OTIMER) THEN                                                   ORH1F305.5003   
          CALL TIMER('STATE   ',103)                                       GPB8F405.113    
      ENDIF                                                                ORH1F305.5005   
!                                                                          ORH1F305.5006   
!---------------------------------------------------------------------     ORH1F305.5007   
!  SUBTRACT NORMALIZING CONSTANTS FROM TEMPERATURE AND SALINITY            ORH1F305.5008   
!  AND COMPUTE POLYNOMIAL APPROXIMATION OF KNUDSEN DENSITY.                ORH1F305.5009   
!  (..NOTE.. FOR PRECISION PURPOSES, THERE IS A CONSTANT SUBTRACTED        ORH1F305.5010   
!   FROM THE DENSITY RETURNED BY THIS ROUTINE. THIS MAKES NO DIFFERENCE    ORH1F305.5011   
!   HOWEVER, SINCE ONLY HORIZONTAL GRADIENTS ARE USED BY THE MODEL.)       ORH1F305.5012   
!---------------------------------------------------------------------     ORH1F305.5013   
!                                                                          ORH1F305.5014   
      DO K=1,KM                                                            ORH7F404.36     
          DO I=1,IMT                                                       ORH1F305.5033   
               TQ(I,K)=TX(I,K)-TO(K)                                       ORH1F305.5034   
               SQ(I,K)=SX(I,K)-SO(K)                                       ORH1F305.5035   
               RHO(I,K)=(C(K,1)+(C(K,4)+C(K,7)*SQ(I,K))*SQ(I,K)            ORH1F305.5036   
     &         +(C(K,3)+C(K,8)*SQ(I,K)+C(K,6)*TQ(I,K))*TQ(I,K))            ORH1F305.5037   
     &         *TQ(I,K)+(C(K,2)+(C(K,5)+C(K,9)                             ORH1F305.5038   
     &         *SQ(I,K))*SQ(I,K))*SQ(I,K)                                  ORH1F305.5039   
!              IF (L_ORICHARD) THEN                                        ORH1F305.5040   
!                 RHO(I,K) = RHO(I,K)+sigo(K)                              ORH1F305.5041   
!              ENDIF                                                       ORH1F305.5042   
          ENDDO ! over I                                                   ORH1F305.5043   
      ENDDO   ! over K                                                     ORH7F404.37     
                                                                           ORH1F305.5046   
      IF (L_OTIMER) THEN                                                   ORH1F305.5047   
          CALL TIMER('STATE   ',104)                                       GPB8F405.114    
      ENDIF                                                                ORH1F305.5049   
      RETURN                                                               ORH1F305.5050   
      END                                                                  ORH1F305.5051   
!                                                                          ORH1F305.5052   

      SUBROUTINE STATEC(TX,SX,RHO,TQ,SQ,IND,IMT,KM,J,JMT)                   21,2ORH7F404.38     
!                                                                          ORH1F305.5057   
      IMPLICIT NONE                                                        ORH1F305.5058   
*CALL OARRYSIZ                                                             ORH6F401.20     
*CALL COCSTATE                                                             ORH1F305.5059   
*CALL CNTLOCN                                                              ORH1F305.5060   
*CALL OTIMER                                                               ORH1F305.5062   
!---------------------------------------------------------------------     ORH1F305.5063   
!  DEFINE GLOBAL DATA                                                      ORH1F305.5064   
!---------------------------------------------------------------------     ORH1F305.5065   
!                                                                          ORH1F305.5066   
      INTEGER                                                              ORH1F305.5067   
     & IMT      ! IN Number of points in row                               ORH1F305.5068   
     &,KM       ! Number of levels                                         ORH1F305.5069   
     &,JMT         ! IN No of rows                                         ORH1F305.5070   
     &,J           ! IN ROW NUMBER                                         ORH1F305.5071   
!                                                                          ORH1F305.5079   
!                                                                          ORH1F305.5080   
!---------------------------------------------------------------------     ORH1F305.5081   
!  DEMENSION LOCAL DATA                                                    ORH1F305.5082   
!---------------------------------------------------------------------     ORH1F305.5083   
!                                                                          ORH1F305.5084   
      REAL      TX(IMT,KM),SX(IMT,KM),RHO(IMT,KM),TQ(IMT,KM),SQ(IMT,KM)    ORH1F305.5085   
      INTEGER LL   ! SEGMENT COUNTER                                       ORH1F305.5086   
      INTEGER IND                                                          ORH1F305.5087   
     &,    I,                ! Grid point index (Zonal)                    ORH1F305.5088   
     &     L                 ! Ocean level loop control                    ORH1F305.5089   
!                                                                          ORH1F305.5090   
!=======================================================================   ORH1F305.5091   
!                                                                    ===   ORH1F305.5092   
!  STATEC COMPUTES, FOR ONE ROW, THE NORMALIZED DENSITIES BY USING   ===   ORH1F305.5093   
!         A 3RD ORDER POLYNOMIAL FIT TO THE KNUDSEN FORMULA, FOR     ===   ORH1F305.5094   
!         PURPOSES OF CHECKING VERTICAL STABILITY BETWEEN ADJACENT   ===   ORH1F305.5095   
!         LEVELS.  THE REFERENCE DEPTH FOR PRESSURE DEPENDENCE IN    ===   ORH1F305.5096   
!         THE KNUDSEN FORMULA MUST BE HELD CONSTANT FOR THIS PURPOSE.===   ORH1F305.5097   
!         THAT LEVEL IS DETERMINED BY "IND".  THE ARGUMENTS ARE:     ===   ORH1F305.5098   
!       TX =THE INPUT ROW OF TEMPERATURES                            ===   ORH1F305.5099   
!       SX =THE INPUT ROW OF SALINITIES (UNITS: (PPT-35)/1000)       ===   ORH1F305.5100   
!       RHO=THE RETURNED ROW OF NORMALIZED DENSITIES                 ===   ORH1F305.5101   
!       TQ =ONE ROW OF WORK SPACE PROVIDED BY THE CALLING ROUTINE    ===   ORH1F305.5102   
!       SQ =ONE ROW OF WORK SPACE PROVIDED BY THE CALLING ROUTINE    ===   ORH1F305.5103   
!       IND=1 FOR COMPARING LEVELS 1 TO 2, 3 TO 4, ETC.              ===   ORH1F305.5104   
!           --COEFFICIENTS FOR THE LOWER OF THE 2 LEVELS ARE USED    ===   ORH1F305.5105   
!       IND=2 FOR COMPARING LEVELS 2 TO 3, 4 TO 5, ETC.              ===   ORH1F305.5106   
!           --COEFFICIENTS FOR THE LOWER OF THE 2 LEVELS ARE USED    ===   ORH5F400.35     
!           --(NOT THE UPPER LEVEL AS STATED IN ORIGINAL COX CODE)   ===   ORH5F400.36     
!                                                                    ===   ORH1F305.5108   
!=======================================================================   ORH1F305.5109   
!                                                                          ORH1F305.5110   
      IF (L_OTIMER) THEN                                                   ORH1F305.5111   
         CALL TIMER('STATEC  ',103)                                        GPB8F405.115    
      ENDIF                                                                ORH1F305.5113   
      DO L=1,KM                                                            ORH7F404.39     
          DO I=1,IMT                                                       ORH1F305.5129   
               TQ(I,L)=TX(I,L)-TOI(L,IND)                                  ORH1F305.5130   
               SQ(I,L)=SX(I,L)-SOI(L,IND)                                  ORH1F305.5131   
               RHO(I,L)=(CI(L,1,IND)+(CI(L,4,IND)+CI(L,7,IND)              ORH1F305.5132   
     &         *SQ(I,L))*SQ(I,L)+(CI(L,3,IND)+CI(L,8,IND)*SQ(I,L)          ORH1F305.5133   
     &         +CI(L,6,IND)*TQ(I,L))*TQ(I,L))*TQ(I,L)+(CI(L,2,IND)         ORH1F305.5134   
     &         +(CI(L,5,IND)+CI(L,9,IND)*SQ(I,L))*SQ(I,L))*SQ(I,L)         ORH1F305.5135   
          ENDDO ! over I                                                   ORH1F305.5136   
      ENDDO ! over L                                                       ORH7F404.40     
                                                                           ORH1F305.5139   
      IF (L_OTIMER) THEN                                                   ORH1F305.5140   
         CALL TIMER('STATEC  ',104)                                        GPB8F405.116    
      ENDIF                                                                ORH1F305.5142   
      RETURN                                                               ORH1F305.5143   
      END                                                                  ORH1F305.5144   
!                                                                          ORH1F305.5145   

      SUBROUTINE STATED(TX,SX,RHO,TQ,SQ,IMT,MAX_LEV,J,KM,JMT)               18,2ORH7F404.41     
!                                                                          ORH1F305.5152   
!=======================================================================   ORH1F305.5153   
!                                                                      =   ORH1F305.5154   
!                STATED                                                =   ORH1F305.5155   
!                                                                      =   ORH1F305.5156   
! STATED uses surface coefficients to calculate the density at however =   ORH1F305.5157   
! many vertical levels are required by the user. This is currently     =   ORH1F305.5158   
! (Feb. 1991) used by mixed layer, K-theory mixing and thermodynamic   =   ORH1F305.5159   
! ice.                                                                 =   ORH1F305.5160   
!                                                                      =   ORH1F305.5161   
!    TX      = Input row of temperatures                               =   ORH1F305.5162   
!    SX      = Input row of salinities                                 =   ORH1F305.5163   
!    RHO     = Returned row of normalised densities                    =   ORH1F305.5164   
!    TQ,SQ   = Two rows of workspace, provided by calling routine      =   ORH1F305.5165   
!    MAX_LEV = The number of vertical levels at which the calculation  =   ORH1F305.5166   
!              is to be done (starts at top level)                     =   ORH1F305.5167   
!                                                                      =   ORH1F305.5168   
!    HISTORY:                                                              ORH1F305.5169   
!    VERSION    DATE      DESCRIPTION                                      ORH1F305.5170   
!    -------   --------   -------------------------------------            ORH1F305.5171   
!     3.4      28.01.94   MAKE CALL TO TIMER CONDITIONAL. R.Hill           ORH1F305.5172   
!=======================================================================   ORH1F305.5173   
!                                                                          ORH1F305.5174   
      IMPLICIT NONE                                                        ORH1F305.5175   
!                                                                          ORH1F305.5176   
!---------------------------------------------------------------------     ORH1F305.5177   
!  DEFINE GLOBAL DATA                                                      ORH1F305.5178   
!---------------------------------------------------------------------     ORH1F305.5179   
!                                                                          ORH1F305.5180   
*CALL COCSTATE                                                             ORH1F305.5181   
*CALL CNTLOCN                                                              ORH1F305.5182   
*CALL OTIMER                                                               ORH1F305.5183   
*CALL OARRYSIZ                                                             ORH1F305.5184   
      INTEGER                                                              ORH1F305.5185   
     & IMT      ! IN Number of points in row                               ORH1F305.5186   
     &,KM ! IN Number of levels                                            ORH1F305.5187   
     &,JMT         ! IN No of rows                                         ORH1F305.5188   
     &,J           ! IN ROW NUMBER                                         ORH1F305.5189   
!                                                                          ORH1F305.5197   
!                                                                          ORH1F305.5198   
!---------------------------------------------------------------------     ORH1F305.5199   
!  DEMENSION LOCAL DATA                                                    ORH1F305.5200   
!---------------------------------------------------------------------     ORH1F305.5201   
!                                                                          ORH1F305.5202   
      INTEGER MAX_LEV                                                      ORH1F305.5203   
     &,    I                 ! Grid point index (Zonal)                    ORH1F305.5204   
     &,    K                 ! Grid point index (Vertical TOP DOWN)        ORH1F305.5205   
     &,    M                 ! Tracer indicator                            ORH1F305.5206   
      REAL TX(IMT,MAX_LEV),SX(IMT,MAX_LEV),RHO(IMT,MAX_LEV)                ORH1F305.5207   
      REAL TQ(IMT,MAX_LEV),SQ(IMT,MAX_LEV)                                 ORH1F305.5208   
                                                                           ORH1F305.5209   
      INTEGER LL   ! SEGMENT COUNTER                                       ORH1F305.5210   
!                                                                          ORH1F305.5211   
      IF (L_OTIMER) THEN                                                   ORH1F305.5212   
         CALL TIMER('STATED  ',103)                                        GPB8F405.117    
      ENDIF                                                                ORH1F305.5214   
                                                                           ORH1F305.5215   
      M=1                                                                  ORH1F305.5216   
      DO K=1,MAX_LEV                                                       ORH7F404.42     
           DO I=1,IMT                                                      ORH1F305.5232   
               TQ(I,K)=TX(I,K)-TO(M)                                       ORH1F305.5233   
               SQ(I,K)=SX(I,K)-SO(M)                                       ORH1F305.5234   
               RHO(I,K)=(C(M,1)+(C(M,4)+C(M,7)*SQ(I,K))*SQ(I,K)            ORH1F305.5235   
     &         +(C(M,3)+C(M,8)*SQ(I,K)+C(M,6)*TQ(I,K))*TQ(I,K))            ORH1F305.5236   
     &         *TQ(I,K)+(C(M,2)+(C(M,5)+C(M,9)*SQ(I,K))                    ORH1F305.5237   
     &         *SQ(I,K))*SQ(I,K)                                           ORH1F305.5238   
           ENDDO ! K                                                       ORH1F305.5239   
      ENDDO   ! I                                                          ORH7F404.43     
                                                                           ORH1F305.5241   
      IF (L_OTIMER) THEN                                                   ORH1F305.5243   
         CALL TIMER('STATED  ',104)                                        GPB8F405.118    
      ENDIF                                                                ORH1F305.5245   
                                                                           ORH1F305.5246   
      RETURN                                                               ORH1F305.5247   
      END                                                                  ORH1F305.5248   

      SUBROUTINE STATE_T(TX,SX,Temperature,TQ,SQ,IMT,KM                     1,2OMB1F404.39     
     &,J,JMT                                                               OMB1F404.40     
     & )                                                                   OMB1F404.41     
!                                                                          OMB1F404.42     
!=======================================================================   OMB1F404.43     
!                                                                    ===   OMB1F404.44     
!  STATE_T COMPUTES ONE ROW OF TEMPERATURES BY USING A 3RD           ===   OMB1F404.45     
!        ORDER POLYNOMIAL FIT TO THE KNUDSEN FORMULA, LEVEL BY       ===   OMB1F404.46     
!        LEVEL, WHERE:                                               ===   OMB1F404.47     
!          TX =THE INPUT ROW OF POTENTIAL TEMPERATURES               ===   OMB1F404.48     
!          SX =THE INPUT ROW OF SALINITIES (UNITS: (PPT-35)/1000)    ===   OMB1F404.49     
!          Temperature=THE RETURNED ROW OF temperatures              ===   OMB1F404.50     
!          TQ =ONE ROW OF WORK SPACE PROVIDED BY THE CALLING ROUTINE ===   OMB1F404.51     
!          SQ =ONE ROW OF WORK SPACE PROVIDED BY THE CALLING ROUTINE ===   OMB1F404.52     
!                                                                    ===   OMB1F404.53     
!                                                                          OMB1F404.54     
!    Model            Modification history from model version 3.4:         OMB1F404.55     
!   version  Date                                                          OMB1F404.56     
!   4.4  20/5/97 : New routine to enable temperature (rather than          OMB1F404.57     
!                  theta to be output to stash) M. J. Bell                 OMB1F404.58     
!                                                                          OMB1F404.59     
!=======================================================================   OMB1F404.60     
!                                                                          OMB1F404.61     
      IMPLICIT NONE                                                        OMB1F404.62     
!---------------------------------------------------------------------     OMB1F404.63     
!  DEFINE GLOBAL DATA                                                      OMB1F404.64     
!---------------------------------------------------------------------     OMB1F404.65     
!                                                                          OMB1F404.66     
      INTEGER                                                              OMB1F404.67     
     & IMT      ! In Number of points in row                               OMB1F404.68     
     &,KM       ! Number of levels                                         OMB1F404.69     
     &,JMT         ! IN No of rows                                         OMB1F404.70     
     &,J           ! IN ROW NUMBER                                         OMB1F404.71     
                                                                           OMB1F404.72     
!                                                                          OMB1F404.73     
*CALL COCSTATE                                                             OMB1F404.74     
*CALL CNTLOCN                                                              OMB1F404.75     
*CALL OTIMER                                                               OMB1F404.76     
!----------------------------------------------------------------------    OMB1F404.77     
!  DEFINE LOCAL DATA                                                       OMB1F404.78     
!----------------------------------------------------------------------    OMB1F404.79     
      INTEGER I,             ! Grid point index (Zonal)                    OMB1F404.80     
     &     K                 ! Grid point index (Vertical TOP DOWN)        OMB1F404.81     
!                                                                          OMB1F404.82     
!                                                                          OMB1F404.83     
!---------------------------------------------------------------------     OMB1F404.84     
!  DEMENSION LOCAL DATA                                                    OMB1F404.85     
!---------------------------------------------------------------------     OMB1F404.86     
!                                                                          OMB1F404.87     
      REAL TX(IMT,KM),SX(IMT,KM),Temperature(IMT,KM)                       OMB1F404.88     
      REAL TQ(IMT,KM),SQ(IMT,KM)                                           OMB1F404.89     
                                                                           OMB1F404.90     
      INTEGER LL   ! LOOP COUNTER                                          OMB1F404.91     
                                                                           OMB1F404.92     
!     REAL sigo(KM)  ! Depth-dependent constant usually left off density   OMB1F404.93     
!                      by STATE but needed when K-theory mixing used       OMB1F404.94     
!                                                                          OMB1F404.95     
!---------------------------------------------------------------------     OMB1F404.96     
!  BEGIN EXECUTABLE CODE                                                   OMB1F404.97     
!---------------------------------------------------------------------     OMB1F404.98     
      IF (L_OTIMER) THEN                                                   OMB1F404.99     
          CALL TIMER('STATE_T  ',103)                                      GPB8F405.119    
      ENDIF                                                                OMB1F404.101    
!                                                                          OMB1F404.102    
!---------------------------------------------------------------------     OMB1F404.103    
!  SUBTRACT NORMALIZING CONSTANTS FROM TEMPERATURE AND SALINITY            OMB1F404.104    
!  AND COMPUTE POLYNOMIAL APPROXIMATION OF Temperature.                    OMB1F404.105    
!---------------------------------------------------------------------     OMB1F404.106    
!                                                                          OMB1F404.107    
      DO K=1,KM                                                            OMB1F404.108    
         DO I=1,IMT                                                        OMB1F404.109    
            TQ(I,K)=TX(I,K)-TO(K)                                          OMB1F404.110    
            SQ(I,K)=SX(I,K)-SO(K)                                          OMB1F404.111    
                                                                           OMB1F404.112    
            Temperature(I,K)= TempO(K) +                                   OMB1F404.113    
     &                                                                     OMB1F404.114    
     &     TQ(I,K) * ( coeff_T(K,1) +                                      OMB1F404.115    
     &         ( coeff_T(K,4) + coeff_T(K,7)*SQ(I,K) ) * SQ(I,K)           OMB1F404.116    
     &       + ( coeff_T(K,3) + coeff_T(K,8)*SQ(I,K)                       OMB1F404.117    
     &                        + coeff_T(K,6)*TQ(I,K) ) * TQ(I,K) )         OMB1F404.118    
     &                                                                     OMB1F404.119    
     &   + SQ(I,K) * ( coeff_T(K,2) +                                      OMB1F404.120    
     &         ( coeff_T(K,5) + coeff_T(K,9)*SQ(I,K) ) * SQ(I,K) )         OMB1F404.121    
                                                                           OMB1F404.122    
         ENDDO ! over I                                                    OMB1F404.123    
      ENDDO   ! over K                                                     OMB1F404.124    
                                                                           OMB1F404.125    
      IF (L_OTIMER) THEN                                                   OMB1F404.126    
          CALL TIMER('STATE_T  ',104)                                      GPB8F405.120    
      ENDIF                                                                OMB1F404.128    
      RETURN                                                               OMB1F404.129    
      END                                                                  OMB1F404.130    

      SUBROUTINE STINIT (KM, ICODE, CMESSAGE)                               1,2ORH1F305.5249   
!                                                                          ORH1F305.5250   
!=======================================================================   ORH1F305.5251   
!                                                                    ===   ORH1F305.5252   
!  STINIT LOADS THE APPROPRIATE NORMALIZATION CONSTANTS AND COEF-    ===   ORH1F305.5253   
!         FICIENTS INTO ARRAYS OF PROPER DIMENSION TO PERMIT VEC-    ===   ORH1F305.5254   
!         TORIZATION IN THE SUBSEQUENT CALLS TO "STATE" AND "STATEC" ===   ORH1F305.5255   
!                                                                    ===   ORH1F305.5256   
!=======================================================================   ORH1F305.5257   
!                                                                          ORH1F305.5258   
      IMPLICIT NONE                                                        ORH1F305.5259   
*CALL COCSTATE                                                             ORH1F305.5260   
*CALL CNTLOCN                                                              ORH1F305.5261   
*CALL OARRYSIZ                                                             ORH1F305.5262   
*CALL OTIMER                                                               ORH1F305.5263   
!                                                                          ORH1F305.5264   
      INTEGER KM ! Number of levels in model                               ORH1F305.5265   
      INTEGER ICODE ! Error code                                           ORH1F305.5266   
     &,    JND               ! Index used in loading coefficients          ORH1F305.5267   
     &,    K                 ! Grid point index (Vertical)                 ORH1F305.5268   
     &,    KREF              ! Reference level indicator                   ORH1F305.5269   
     &,    N                 ! Control index                               ORH1F305.5270   
      CHARACTER*(80) CMESSAGE                                              ORH1F305.5271   
!                                                                          ORH1F305.5272   
!---------------------------------------------------------------------     ORH1F305.5273   
!  LOAD COEFFICIENTS FOR USE IN STATE                                      ORH1F305.5274   
!---------------------------------------------------------------------     ORH1F305.5275   
!                                                                          ORH1F305.5276   
      IF (L_OTIMER) THEN                                                   ORH1F305.5277   
         CALL TIMER('STINIT  ',103)                                        GPB8F405.121    
      ENDIF                                                                ORH1F305.5279   
!                                                                          ORH1F305.5280   
!      Check arrays are big enough                                         ORH1F305.5281   
!                                                                          ORH1F305.5282   
      IF (MAXLEV .LT. KM ) THEN                                            ORH1F305.5283   
             ICODE=300                                                     ORH1F305.5284   
             CMESSAGE='Error in STINIT: too many levels in model'          ORH1F305.5285   
      END IF                                                               ORH1F305.5286   
!                                                                          ORH1F305.5287   
!---------------------------------------------------------------------     ORH1F305.5288   
!  LOAD COEFFICIENTS FOR USE IN STATEC.                                    ORH1F305.5289   
!  DETERMINE THE REFERENCE LEVEL INDICATOR, "KREF" IN ACCORD WITH          ORH1F305.5290   
!  COMMENT ON "IND" IN INTRODUCTORY STATEMENT FOR SUBROUTINE STATEC.       ORH1F305.5291   
!---------------------------------------------------------------------     ORH1F305.5292   
!                                                                          ORH1F305.5293   
      DO JND=1,2                                                           ORH1F305.5294   
        IF (L_OFILTER) THEN                                                ORH1F305.5295   
CFPP$ SELECT (CONCUR)                                                      ORH1F305.5296   
          DO K=1,KM,2                                                      ORH1F305.5297   
            IF (JND.EQ.1) THEN                                             ORH1F305.5298   
              KREF=K+1                                                     ORH1F305.5299   
              IF(KREF.GT.KM) KREF=KM                                       ORH1F305.5300   
            ELSE                                                           ORH1F305.5301   
              KREF=K                                                       ORH1F305.5302   
            ENDIF                                                          ORH1F305.5303   
            TOI (K,JND)=TO (KREF)                                          ORH1F305.5304   
            SOI (K,JND)=SO (KREF)                                          ORH1F305.5305   
            DO N=1,9                                                       ORH1F305.5306   
               CI (K,N,JND)=C (KREF,N)                                     ORH1F305.5307   
            ENDDO ! N                                                      ORH1F305.5308   
          ENDDO    ! K                                                     ORH1F305.5309   
CFPP$ SELECT (CONCUR)                                                      ORH1F305.5310   
          DO K=2,KM,2                                                      ORH1F305.5311   
            IF (JND.EQ.2) THEN                                             ORH1F305.5312   
              KREF=K+1                                                     ORH1F305.5313   
              IF(KREF.GT.KM) KREF=KM                                       ORH1F305.5314   
            ELSE                                                           ORH1F305.5315   
              KREF=K                                                       ORH1F305.5316   
            ENDIF                                                          ORH1F305.5317   
            TOI (K,JND)=TO (KREF)                                          ORH1F305.5318   
            SOI (K,JND)=SO (KREF)                                          ORH1F305.5319   
            DO N=1,9                                                       ORH1F305.5320   
              CI (K,N,JND)=C (KREF,N)                                      ORH1F305.5321   
            ENDDO ! N                                                      ORH1F305.5322   
          ENDDO   ! K                                                      ORH1F305.5323   
        ELSE      ! Not L_OFILTER                                          ORH1F305.5324   
          DO K=1,KM,2                                                      ORH1F305.5325   
            IF (JND.EQ.1) THEN                                             ORH1F305.5326   
              KREF=K+1                                                     ORH1F305.5327   
              IF(KREF.GT.KM) KREF=KM                                       ORH1F305.5328   
            ELSE                                                           ORH1F305.5329   
              KREF=K                                                       ORH1F305.5330   
            ENDIF                                                          ORH1F305.5331   
            TOI (K,JND)=TO (KREF)                                          ORH1F305.5332   
            SOI (K,JND)=SO (KREF)                                          ORH1F305.5333   
            DO N=1,9                                                       ORH1F305.5334   
              CI (K,N,JND)=C (KREF,N)                                      ORH1F305.5335   
            ENDDO  ! over N                                                ORH1F305.5336   
          ENDDO   ! over K                                                 ORH1F305.5337   
                                                                           ORH1F305.5338   
          DO K=2,KM,2                                                      ORH1F305.5339   
            IF (JND.EQ.2) THEN                                             ORH1F305.5340   
              KREF=K+1                                                     ORH1F305.5341   
              IF(KREF.GT.KM) KREF=KM                                       ORH1F305.5342   
            ELSE                                                           ORH1F305.5343   
              KREF=K                                                       ORH1F305.5344   
            ENDIF                                                          ORH1F305.5345   
            TOI (K,JND)=TO (KREF)                                          ORH1F305.5346   
            SOI (K,JND)=SO (KREF)                                          ORH1F305.5347   
            DO N=1,9                                                       ORH1F305.5348   
              CI (K,N,JND)=C (KREF,N)                                      ORH1F305.5349   
            ENDDO ! over N                                                 ORH1F305.5350   
          ENDDO   ! over K                                                 ORH1F305.5351   
        ENDIF                                                              ORH1F305.5352   
      ENDDO       ! over JND                                               ORH1F305.5353   
      IF (L_OTIMER) THEN                                                   ORH1F305.5354   
         CALL TIMER('STINIT  ',104)                                        GPB8F405.122    
      ENDIF                                                                ORH1F305.5356   
      RETURN                                                               STATE.233    
      END                                                                  STATE.234    
*ENDIF                                                                     @DYALLOC.4146