/[MITgcm]/MITgcm/verification/hs94.cs-32x32x5/code/ini_theta.F
ViewVC logotype

Diff of /MITgcm/verification/hs94.cs-32x32x5/code/ini_theta.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.5 by molod, Mon Jul 19 15:13:07 2004 UTC revision 1.6 by jmc, Fri Apr 15 22:10:13 2005 UTC
# Line 1  Line 1 
1  C $Header$  C $Header$
2  C $Name$  C $Name$
3    
4    #include "PACKAGES_CONFIG.h"
5  #include "CPP_OPTIONS.h"  #include "CPP_OPTIONS.h"
6    
7  CStartOfInterface  CBOP
8    C     !ROUTINE: INI_THETA
9    C     !INTERFACE:
10        SUBROUTINE INI_THETA( myThid )        SUBROUTINE INI_THETA( myThid )
11  C     /==========================================================\  C     !DESCRIPTION: \bv
12  C     | SUBROUTINE INI_THETA                                     |  C     *==========================================================*
13  C     | o Set model initial temperature field.                   |  C     | SUBROUTINE INI_THETA                                      
14  C     |==========================================================|  C     | o Set model initial temperature field.                    
15  C     | There are several options for setting the initial        |  C     *==========================================================*
16  C     | temperature file                                         |  C     | There are several options for setting the initial        
17  C     |  1. Inline code                                          |  C     | temperature file                                          
18  C     |  2. Vertical profile ( uniform T in X and Y )            |  C     |  1. Inline code                                          
19  C     |  3. Three-dimensional data from a file. For example from |  C     |  2. Vertical profile ( uniform T in X and Y )            
20  C     |     Levitus or from a checkpoint file from a previous    |  C     |  3. Three-dimensional data from a file. For example from  
21  C     |     integration.                                         |  C     |     Levitus or from a checkpoint file from a previous    
22  C     | In addition to setting the temperature field we also     |  C     |     integration.                                          
23  C     | set the initial temperature tendency term here.          |  C     | In addition to setting the temperature field we also      
24  C     \==========================================================/  C     | set the initial temperature tendency term here.          
25    C     *==========================================================*
26    C     \ev
27    
28    C     !USES:
29        IMPLICIT NONE        IMPLICIT NONE
30    
31  C     === Global variables ===  C     === Global variables ===
# Line 28  C     === Global variables === Line 35  C     === Global variables ===
35  #include "GRID.h"  #include "GRID.h"
36  #include "DYNVARS.h"  #include "DYNVARS.h"
37    
38    C     !INPUT/OUTPUT PARAMETERS:
39  C     == Routine arguments ==  C     == Routine arguments ==
40  C     myThid -  Number of this instance of INI_THETA  C     myThid -  Number of this instance of INI_THETA
41        INTEGER myThid        INTEGER myThid
 CEndOfInterface  
42    
43  C     == Functions ==  C     == Functions ==
44        Real*8  PORT_RAND        real*8  PORT_RAND
45        real *8 seed        real*8  seed
46    
47    C     !LOCAL VARIABLES:
48  C     == Local variables ==  C     == Local variables ==
49  C     bi,bj  - Loop counters  C     bi,bj  - Loop counters
50  C     I,J,K  C     I,J,K
51        INTEGER bi, bj        INTEGER bi, bj
52        INTEGER I, J, K        INTEGER I, J, K, localWarnings
53        _RL     term1,term2,thetaLim,thetaEq        _RL     term1,term2,thetaLim,thetaEq
54          CHARACTER*(MAX_LEN_MBUF) msgBuf
55    CEOP
56    
57        _BARRIER        _BARRIER
58    
# Line 51  c     CALL SRAND( J ) Line 61  c     CALL SRAND( J )
61  c     seed = j  c     seed = j
62    
63        IF ( hydrogThetaFile .EQ. ' ' ) THEN        IF ( hydrogThetaFile .EQ. ' ' ) THEN
64  C--    Initialise temperature field to Held & Suarez equilibrium theta  C--    Initialise temperature field to Held & Saurez equilibrium theta
65         DO bj = myByLo(myThid), myByHi(myThid)         DO bj = myByLo(myThid), myByHi(myThid)
66          DO bi = myBxLo(myThid), myBxHi(myThid)          DO bi = myBxLo(myThid), myBxHi(myThid)
67           DO K=1,Nr           DO K=1,Nr
68            thetaLim = 200. _d 0/((rC(K)/atm_po)**atm_kappa)            thetaLim = 200. _d 0/((rC(K)/atm_po)**atm_kappa)
69            DO J=1,sNy            DO J=1,sNy
70             DO I=1,sNx             DO I=1,sNx
71             term1=60. _d 0*(sin(yC(I,J,bi,bj)*deg2rad)**2)              term1=60. _d 0*(sin(yC(I,J,bi,bj)*deg2rad)**2)
72             term2=10. _d 0*log((rC(K)/atm_po))              term2=10. _d 0*log((rC(K)/atm_po))
73       &              *(cos(yC(I,J,bi,bj)*deg2rad)**2)       &              *(cos(yC(I,J,bi,bj)*deg2rad)**2)
74             thetaEq=315. _d 0-term1-term2              thetaEq=315. _d 0-term1-term2
75              theta(I,J,K,bi,bj) = MAX( thetaLim, thetaEq )              theta(I,J,K,bi,bj) = MAX( thetaLim, thetaEq )
76  c    &                          + 0.01*(RAND()-0.5)  c    &                          + 0.01*(RAND()-0.5)
77  c    &                          + 0.01*(PORT_RAND(seed)-0.5)  c    &                          + 0.01*(PORT_RAND(seed)-0.5)
# Line 69  c           theta(I,J,K,bi,bj) = tRef(K) Line 79  c           theta(I,J,K,bi,bj) = tRef(K)
79             ENDDO             ENDDO
80            ENDDO            ENDDO
81           ENDDO           ENDDO
         ENDDO  
        ENDDO  
82  #ifdef ALLOW_ZONAL_FILT  #ifdef ALLOW_ZONAL_FILT
83  C--   Zonal FFT filter initial conditions  C--   Zonal FFT filter initial conditions
84         DO bj = myByLo(myThid), myByHi(myThid)           IF (useZONAL_FILT) THEN
85          DO bi = myBxLo(myThid), myBxHi(myThid)            CALL ZONAL_FILTER(
          DO K=1,Nr  
           DO J=1,sNy  
            CALL ZONAL_FILTER(  
86       U      theta, hFacC,       U      theta, hFacC,
87       I      1, sNy, k, k, bi, bj, 1, myThid)       I      1, sNy, 1, Nr, bi, bj, 1, myThid)
88            ENDDO           ENDIF
89           ENDDO  #endif /* ALLOW_ZONAL_FILT */
90          ENDDO          ENDDO
91         ENDDO         ENDDO
 #endif /* INCLUDE_LAT_CIRC_FFT_FILTER_CODE */  
92        ELSE        ELSE
93         _BEGIN_MASTER( myThid )         _BEGIN_MASTER( myThid )
94         CALL READ_FLD_XYZ_RL( hydrogThetaFile, ' ', theta, 0, myThid )         CALL READ_FLD_XYZ_RL( hydrogThetaFile, ' ', theta, 0, myThid )
95         _END_MASTER(myThid)         _END_MASTER(myThid)
96        ENDIF        ENDIF
97  C     Set initial tendency terms  C--   Apply mask and test consistency
98          localWarnings=0
99        DO bj = myByLo(myThid), myByHi(myThid)        DO bj = myByLo(myThid), myByHi(myThid)
100         DO bi = myBxLo(myThid), myBxHi(myThid)         DO bi = myBxLo(myThid), myBxHi(myThid)
101          DO K=1,Nr          DO K=1,Nr
102           DO J=1,sNy           DO J=1-Oly,sNy+Oly
103            DO I=1,sNx            DO I=1-Olx,sNx+Olx
104             gt   (I,J,K,bi,bj) = 0. _d 0             IF (maskC(I,J,K,bi,bj).EQ.0.) theta(I,J,K,bi,bj) = 0.
            gtNM1(I,J,K,bi,bj) = 0. _d 0  
            IF (hFacC(I,J,K,bi,bj).EQ.0.) theta(I,J,K,bi,bj) = 0.  
105            ENDDO            ENDDO
106           ENDDO           ENDDO
107             IF ( tRef(k).NE.0. ) THEN
108              DO J=1,sNy
109               DO I=1,sNx
110                IF (  maskC(I,J,K,bi,bj).NE.0.
111         &      .AND. theta(I,J,K,bi,bj).EQ.0. ) THEN
112                  localWarnings=localWarnings+1
113                ENDIF
114               ENDDO
115              ENDDO
116             ENDIF
117          ENDDO          ENDDO
118         ENDDO         ENDDO
119        ENDDO        ENDDO
120  C        IF (localWarnings.NE.0) THEN
121           WRITE(msgBuf,'(A,A)')
122         &  'S/R INI_THETA: theta = 0 identically. If this is intentional',
123         &  'you will need to edit ini_theta.F to avoid this safety check'
124           CALL PRINT_ERROR( msgBuf , myThid)
125           STOP 'ABNORMAL END: S/R INI_THETA'
126          ENDIF
127    
128        _EXCH_XYZ_R8(theta , myThid )        _EXCH_XYZ_R8(theta , myThid )
       _EXCH_XYZ_R8(gt , myThid )  
       _EXCH_XYZ_R8(gtNM1 , myThid )  
129    
130        CALL PLOT_FIELD_XYZRL( theta, 'Initial Temperature' ,        CALL PLOT_FIELD_XYZRL( theta, 'Initial Temperature' ,
131       &                       Nr, 1, myThid )       &                       Nr, 1, myThid )
132    
133        RETURN        RETURN

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.6

  ViewVC Help
Powered by ViewVC 1.1.22