1 |
|
C $Header$ |
2 |
|
C !DESCRIPTION: \bv |
3 |
|
C $Name$ |
4 |
#include "CPP_OPTIONS.h" |
#include "CPP_OPTIONS.h" |
5 |
|
|
6 |
|
CBOP |
7 |
|
C !ROUTINE: CALC_GW |
8 |
|
C !INTERFACE: |
9 |
SUBROUTINE CALC_GW( |
SUBROUTINE CALC_GW( |
10 |
I myThid) |
I myThid) |
11 |
C /==========================================================\ |
C !DESCRIPTION: \bv |
12 |
C | S/R CALC_GW | |
C *==========================================================* |
13 |
C \==========================================================/ |
C | S/R CALC_GW |
14 |
IMPLICIT NONE |
C | o Calculate vert. velocity tendency terms ( NH, QH only ) |
15 |
|
C *==========================================================* |
16 |
|
C | In NH and QH, the vertical momentum tendency must be |
17 |
|
C | calculated explicitly and included as a source term |
18 |
|
C | for a 3d pressure eqn. Calculate that term here. |
19 |
|
C | This routine is not used in HYD calculations. |
20 |
|
C *==========================================================* |
21 |
|
C \ev |
22 |
|
|
23 |
|
C !USES: |
24 |
|
IMPLICIT NONE |
25 |
C == Global variables == |
C == Global variables == |
26 |
#include "SIZE.h" |
#include "SIZE.h" |
27 |
#include "DYNVARS.h" |
#include "DYNVARS.h" |
29 |
#include "EEPARAMS.h" |
#include "EEPARAMS.h" |
30 |
#include "PARAMS.h" |
#include "PARAMS.h" |
31 |
#include "GRID.h" |
#include "GRID.h" |
|
#include "CG2D.h" |
|
32 |
#include "GW.h" |
#include "GW.h" |
33 |
#include "CG3D.h" |
#include "CG3D.h" |
34 |
|
|
35 |
|
C !INPUT/OUTPUT PARAMETERS: |
36 |
C == Routine arguments == |
C == Routine arguments == |
37 |
C myThid - Instance number for this innvocation of CALC_GW |
C myThid - Instance number for this innvocation of CALC_GW |
38 |
INTEGER myThid |
INTEGER myThid |
39 |
|
|
40 |
#ifdef ALLOW_NONHYDROSTATIC |
#ifdef ALLOW_NONHYDROSTATIC |
41 |
|
|
42 |
|
C !LOCAL VARIABLES: |
43 |
C == Local variables == |
C == Local variables == |
44 |
|
C bi, bj, :: Loop counters |
45 |
|
C iMin, iMax, |
46 |
|
C jMin, jMax |
47 |
|
C flx_NS :: Temp. used for fVol meridional terms. |
48 |
|
C flx_EW :: Temp. used for fVol zonal terms. |
49 |
|
C flx_Up :: Temp. used for fVol vertical terms. |
50 |
|
C flx_Dn :: Temp. used for fVol vertical terms. |
51 |
INTEGER bi,bj,iMin,iMax,jMin,jMax |
INTEGER bi,bj,iMin,iMax,jMin,jMax |
|
_RL aF (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
|
|
_RL vF (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
|
|
_RL v4F(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
|
|
_RL cF (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
|
|
_RL mT (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
|
|
_RL pF (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
|
|
_RL fZon (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
|
|
_RL fMer (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
|
|
|
|
52 |
_RL flx_NS(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
_RL flx_NS(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
53 |
_RL flx_EW(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
_RL flx_EW(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
54 |
_RL flx_Dn(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
_RL flx_Dn(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
55 |
_RL flx_Up(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
_RL flx_Up(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
56 |
C I,J,K - Loop counters |
C I,J,K - Loop counters |
57 |
INTEGER i,j,k, kP1 |
INTEGER i,j,k, kP1, kUp |
58 |
_RL wOverride |
_RL wOverride |
59 |
_RS hFacROpen |
_RS hFacROpen |
60 |
_RS hFacRClosed |
_RS hFacRClosed |
68 |
#define In sNx |
#define In sNx |
69 |
#define J0 1 |
#define J0 1 |
70 |
#define Jn sNy |
#define Jn sNy |
71 |
|
CEOP |
72 |
|
|
73 |
C Adams-Bashforth timestepping weights |
C Adams-Bashforth timestepping weights |
74 |
ab15=1.5+abeps |
ab15=1.5+abeps |
79 |
DO K=1,Nr |
DO K=1,Nr |
80 |
DO j=1-OLy,sNy+OLy |
DO j=1-OLy,sNy+OLy |
81 |
DO i=1-OLx,sNx+OLx |
DO i=1-OLx,sNx+OLx |
82 |
|
gWNM1(i,j,k,bi,bj) = gW(i,j,k,bi,bj) |
83 |
gW(i,j,k,bi,bj) = 0. |
gW(i,j,k,bi,bj) = 0. |
84 |
ENDDO |
ENDDO |
85 |
ENDDO |
ENDDO |
181 |
ENDDO |
ENDDO |
182 |
ENDDO |
ENDDO |
183 |
ENDDO |
ENDDO |
184 |
DO bj=myByLo(myThid),myByHi(myThid) |
|
185 |
DO bi=myBxLo(myThid),myBxHi(myThid) |
#ifdef ALLOW_OBCS |
186 |
DO K=1,Nr |
IF (useOBCS) THEN |
187 |
DO j=J0,Jn |
C-- This call is aesthetic: it makes the W field |
188 |
DO i=I0,In |
C consistent with the OBs but this has no algorithmic |
189 |
gWNM1(i,j,k,bi,bj) = gW(i,j,k,bi,bj) |
C impact. This is purely for diagnostic purposes. |
190 |
ENDDO |
DO bj=myByLo(myThid),myByHi(myThid) |
191 |
|
DO bi=myBxLo(myThid),myBxHi(myThid) |
192 |
|
DO K=1,Nr |
193 |
|
CALL OBCS_APPLY_W( bi, bj, K, wVel, myThid ) |
194 |
ENDDO |
ENDDO |
195 |
ENDDO |
ENDDO |
196 |
ENDDO |
ENDDO |
197 |
ENDDO |
ENDIF |
198 |
|
#endif /* ALLOW_OBCS */ |
199 |
|
|
200 |
#endif /* ALLOW_NONHYDROSTATIC */ |
#endif /* ALLOW_NONHYDROSTATIC */ |
201 |
|
|