/[MITgcm]/MITgcm/pkg/opps/opps_interface.F
ViewVC logotype

Contents of /MITgcm/pkg/opps/opps_interface.F

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


Revision 1.5 - (show annotations) (download)
Sun Jan 3 19:11:43 2010 UTC (14 years, 4 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64y, checkpoint64x, checkpoint64z, checkpoint64q, checkpoint64p, checkpoint64s, checkpoint64r, checkpoint64u, checkpoint64t, checkpoint64w, checkpoint64v, checkpoint64i, checkpoint64h, checkpoint64k, checkpoint64j, checkpoint64m, checkpoint64l, checkpoint64o, checkpoint64n, checkpoint64a, checkpoint64c, checkpoint64b, checkpoint64e, checkpoint64d, checkpoint64g, checkpoint64f, checkpoint63p, checkpoint63q, checkpoint63r, checkpoint63s, checkpoint63l, checkpoint63m, checkpoint63n, checkpoint63o, checkpoint63h, checkpoint63i, checkpoint63j, checkpoint63k, checkpoint63d, checkpoint63e, checkpoint63f, checkpoint63g, checkpoint63a, checkpoint63b, checkpoint63c, checkpoint64, checkpoint65, checkpoint63, checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65r, checkpoint65s, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint65j, checkpoint65k, checkpoint65h, checkpoint65i, checkpoint65n, checkpoint65o, checkpoint65l, checkpoint65m, checkpoint65b, checkpoint65c, checkpoint65a, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e, checkpoint62c, checkpoint62b, checkpoint62a, checkpoint62g, checkpoint62f, checkpoint62e, checkpoint62d, checkpoint62k, checkpoint62j, checkpoint62i, checkpoint62h, checkpoint62o, checkpoint62n, checkpoint62m, checkpoint62l, checkpoint62s, checkpoint62r, checkpoint62q, checkpoint62p, checkpoint62w, checkpoint62v, checkpoint62u, checkpoint62t, checkpoint62z, checkpoint62y, checkpoint62x, HEAD
Changes since 1.4: +13 -20 lines
avoid unused variables

1 C $Header: /u/gcmpack/MITgcm/pkg/opps/opps_interface.F,v 1.4 2007/11/05 19:15:04 jmc Exp $
2 C $Name: $
3
4 #include "OPPS_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: OPPS_INTERFACE
8 C !INTERFACE:
9 SUBROUTINE OPPS_INTERFACE(
10 I bi, bj, iMin, iMax, jMin, jMax,
11 I myTime, myIter, myThid )
12 C !DESCRIPTION: \bv
13 C *================================================================*
14 C | SUBROUTINE OPPS_INTERFACE |
15 C | o Driver for OPPS mixing scheme that can be called |
16 C | instead of convective_adjustment. |
17 C | Reference: Paluszkiewicz+Romea, Dynamics of Atmospheres and |
18 C | Oceans (1997) 26, pp. 95-130 |
19 C | o Support for passive tracers by joint treatment of |
20 C | active (theta, salt) and passive tracers. The array |
21 C | tracerLoc(Nr,2+PTRACERS_num) contains |
22 C | theta = tracerLoc(:,1), |
23 C | salt = tracerLoc(:,2), and |
24 C | ptracers = tracerLoc(:,3:PTRACERS_num+2). For this to |
25 C | work, the routine opps_calc had to be modified |
26 C | considerably. opps_calc is based on nlopps.F but there is |
27 C | is little left of the original (see opps_calc.F) |
28 C *================================================================*
29 C \ev
30
31 C !USES:
32 IMPLICIT NONE
33 C == Global data ==
34 #include "SIZE.h"
35 #include "EEPARAMS.h"
36 #include "PARAMS.h"
37 #include "DYNVARS.h"
38 #include "GRID.h"
39 #include "OPPS.h"
40 #ifdef ALLOW_PTRACERS
41 #include "PTRACERS_SIZE.h"
42 #include "PTRACERS_PARAMS.h"
43 #include "PTRACERS_FIELDS.h"
44 #endif
45
46 C !INPUT/OUTPUT PARAMETERS:
47 C == Routine arguments ==
48 C bi,bj,iMin,iMax,jMin,jMax,K - Loop counters
49 C myTime - Current time in simulation
50 C myIter - Current iteration in simulation
51 C myThid - Thread number of this instance of S/R CONVECT
52 INTEGER bi,bj,iMin,iMax,jMin,jMax
53 _RL myTime
54 INTEGER myIter
55 INTEGER myThid
56
57 #ifdef ALLOW_OPPS
58
59 C !LOCAL VARIABLES:
60 C == Local variables ==
61 C msgBuf - Informational/error meesage buffer
62 INTEGER nTracer
63 #ifdef ALLOW_PTRACERS
64 PARAMETER( nTracer = 2+PTRACERS_num )
65 INTEGER itr
66 #else /* not ALLOW_PTRACERS */
67 PARAMETER( nTracer = 2 )
68 #endif /* ALLOW_PTRACERS */
69 INTEGER I, J, K, kMax
70 INTEGER nTracerInUse
71 _RL tMin, tMax, sMin, sMax
72 _RL tMinNew, tMaxNew, sMinNew, sMaxNew
73 _RL wVelLoc(Nr)
74 _RL tracerLoc(Nr,nTracer)
75 CHARACTER*(MAX_LEN_MBUF) msgBuf
76 CEOP
77
78 C initialization
79 #ifdef ALLOW_PTRACERS
80 nTracerInUse = 2+PTRACERS_numInUse
81 #else
82 nTracerInUse = 2
83 #endif /* ALLOW_PTRACERS */
84 tMax = -1. _d 23
85 tMin = 1. _d 23
86 sMax = -1. _d 23
87 sMin = 1. _d 23
88 tMaxNew = -1. _d 23
89 tMinNew = 1. _d 23
90 sMaxNew = -1. _d 23
91 sMinNew = 1. _d 23
92 tMinNew = 1. _d 23
93 C re-initialize convection counter
94 DO K=1,Nr
95 DO J=1-Oly,sNy+Oly
96 DO I=1-Olx,sNx+Olx
97 OPPSconvectCount(I,J,K,bi,bj) = 0. _d 0
98 ENDDO
99 ENDDO
100 ENDDO
101
102 C
103 DO J=jMin,jMax
104 DO I=iMin,iMax
105 IF ( kSurfC(I,J,bi,bj) .LE. Nr ) THEN
106 IF ( useGCMwVel ) THEN
107 DO K=1,Nr
108 tracerLoc(K,1) = theta(I,J,K,bi,bj)
109 tracerLoc(K,2) = salt(I,J,K,bi,bj)
110 wVelLoc(K) = wVel(I,J,K,bi,bj)
111 ENDDO
112 ELSE
113 DO K=1,Nr
114 tracerLoc(K,1) = theta(I,J,K,bi,bj)
115 tracerLoc(K,2) = salt(I,J,K,bi,bj)
116 wVelLoc(K) = - VERTICAL_VELOCITY
117 ENDDO
118 ENDIF
119 #ifdef ALLOW_PTRACERS
120 DO itr = 3, nTracerInUse
121 DO K=1,Nr
122 tracerLoc(K,itr) = ptracer(I,J,K,bi,bj,itr-2)
123 ENDDO
124 ENDDO
125 #endif /* ALLOW_PTRACERS */
126 #ifdef ALLOW_OPPS_DEBUG
127 IF ( OPPSdebugLevel .GE. debLevA ) THEN
128 C determine range of temperature and salinity
129 tMax = -1. d 23
130 tMin = 1. d 23
131 sMax = -1. d 23
132 sMin = 1. d 23
133 DO K=1,Nr
134 tMax = MAX(tracerLoc(K,1),tMax)
135 tMin = MAX(tracerLoc(K,1),tMin)
136 sMax = MAX(tracerLoc(K,2),sMax)
137 sMin = MAX(tracerLoc(K,2),sMin)
138 ENDDO
139 ENDIF
140 #endif /* ALLOW_OPPS_DEBUG */
141 kMax = kLowC(I,J,bi,bj)
142 CALL OPPS_CALC(
143 U tracerLoc,
144 I wVelLoc,kMax,nTracer,nTracerInUse,
145 I I,J,bi,bj,myTime,myIter,myThid)
146 #ifdef ALLOW_OPPS_DEBUG
147 IF ( OPPSdebugLevel .GE. debLevA ) THEN
148 C determine range of temperature and salinity
149 tMaxNew = -1. d 23
150 tMinNew = 1. d 23
151 sMaxNew = -1. d 23
152 sMinNew = 1. d 23
153 DO K=1,Nr
154 tMaxNew = MAX(tracerLoc(K,1),tMaxNew)
155 tMinNew = MAX(tracerLoc(K,1),tMinNew)
156 sMaxNew = MAX(tracerLoc(K,2),sMaxNew)
157 sMinNew = MAX(tracerLoc(K,2),sMinNew)
158 ENDDO
159 IF ( tMaxNew.GT.tMax .OR. tMinNew.LT.tMin .OR.
160 & sMaxNew.GT.sMax .OR. sMinNew.LT.sMIN ) THEN
161 WRITE(msgBuf,'(A,A)') 'OPPS_INTERFACE: theta or S-range is',
162 & ' larger than before mixing'
163 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
164 & SQUEEZE_RIGHT , myThid )
165 WRITE(msgBuf,'(A,2I5)') ' for (i,j) = ', I,J
166 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
167 & SQUEEZE_RIGHT , myThid )
168 ENDIF
169 ENDIF
170 #endif /* ALLOW_OPPS_DEBUG */
171 DO K=1,Nr
172 theta(I,J,K,bi,bj) = tracerLoc(K,1)
173 salt(I,J,K,bi,bj) = tracerLoc(K,2)
174 ENDDO
175 #ifdef ALLOW_PTRACERS
176 DO itr = 3, nTracerInUse
177 DO K=1,Nr
178 ptracer(I,J,K,bi,bj,itr-2) = tracerLoc(K,itr)
179 ENDDO
180 ENDDO
181 #endif /* ALLOW_PTRACERS */
182 ENDIF
183 ENDDO
184 ENDDO
185 #endif /* ALLOW_OPPS */
186
187 RETURN
188 END

  ViewVC Help
Powered by ViewVC 1.1.22