1 |
jmc |
1.1 |
C $Header: $ |
2 |
|
|
C $Name: $ |
3 |
|
|
|
4 |
|
|
#include "CPP_OPTIONS.h" |
5 |
|
|
|
6 |
|
|
CBOP |
7 |
|
|
C !ROUTINE: CALC_GRAD_PHI_HYD |
8 |
|
|
C !INTERFACE: |
9 |
|
|
SUBROUTINE CALC_GRAD_PHI_HYD( |
10 |
|
|
I k, bi, bj, iMin,iMax, jMin,jMax, |
11 |
|
|
I phiHyd, alphRho, tFld, sFld, |
12 |
|
|
O dPhiHydX, dPhiHydY, |
13 |
|
|
I myTime, myIter, myThid) |
14 |
|
|
C !DESCRIPTION: \bv |
15 |
|
|
C *==========================================================* |
16 |
|
|
C | S/R CALC_GRAD_PHI_HYD |
17 |
|
|
C | o Calculate the gradient of Hydrostatic potential anomaly |
18 |
|
|
C *==========================================================* |
19 |
|
|
C \ev |
20 |
|
|
|
21 |
|
|
C !USES: |
22 |
|
|
IMPLICIT NONE |
23 |
|
|
C == Global variables == |
24 |
|
|
#include "SIZE.h" |
25 |
|
|
#include "EEPARAMS.h" |
26 |
|
|
#include "PARAMS.h" |
27 |
|
|
#include "GRID.h" |
28 |
|
|
#include "SURFACE.h" |
29 |
|
|
|
30 |
|
|
C !INPUT/OUTPUT PARAMETERS: |
31 |
|
|
C == Routine Arguments == |
32 |
|
|
C bi,bj :: tile index |
33 |
|
|
C iMin,iMax,jMin,jMax :: Loop counters |
34 |
|
|
C phiHyd :: Hydrostatic Potential anomaly |
35 |
|
|
C (atmos: =Geopotential ; ocean-z: =Pressure/rho) |
36 |
|
|
C alphRho :: Density (z-coord) or specific volume (p-coord) |
37 |
|
|
C tFld :: Potential temp. |
38 |
|
|
C sFld :: Salinity |
39 |
|
|
C dPhiHydX,Y :: Gradient (X & Y directions) of Hyd. Potential |
40 |
|
|
C myTime :: Current time |
41 |
|
|
C myIter :: Current iteration number |
42 |
|
|
C myThid :: Instance number for this call of the routine. |
43 |
|
|
INTEGER k, bi,bj, iMin,iMax, jMin,jMax |
44 |
|
|
_RL phiHyd(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
45 |
|
|
_RL alphRho(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
46 |
|
|
_RL tFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy) |
47 |
|
|
_RL sFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy) |
48 |
|
|
_RL dPhiHydX(1-Olx:sNx+Olx,1-Oly:sNy+Oly) |
49 |
|
|
_RL dPhiHydY(1-Olx:sNx+Olx,1-Oly:sNy+Oly) |
50 |
|
|
_RL myTime |
51 |
|
|
INTEGER myIter, myThid |
52 |
|
|
|
53 |
|
|
#ifdef INCLUDE_PHIHYD_CALCULATION_CODE |
54 |
|
|
|
55 |
|
|
C !LOCAL VARIABLES: |
56 |
|
|
C == Local variables == |
57 |
|
|
C i,j :: Loop counters |
58 |
|
|
INTEGER i,j |
59 |
|
|
_RL varLoc(1-Olx:sNx+Olx,1-Oly:sNy+Oly) |
60 |
|
|
CEOP |
61 |
|
|
|
62 |
|
|
DO j=jMin-1,jMax |
63 |
|
|
DO i=iMin-1,iMax |
64 |
|
|
c varLoc(i,j) = phiHyd(i,j,k)+phi0surf(i,j,bi,bj) |
65 |
|
|
varLoc(i,j) = phiHyd(i,j,k) |
66 |
|
|
ENDDO |
67 |
|
|
ENDDO |
68 |
|
|
|
69 |
|
|
C- Zonal gradient |
70 |
|
|
DO j=jMin,jMax |
71 |
|
|
DO i=iMin,iMax |
72 |
|
|
dPhiHydX(i,j) = _recip_dxC(i,j,bi,bj) |
73 |
|
|
& *( varLoc(i,j)-varLoc(i-1,j) ) |
74 |
|
|
c & *( (phiHyd(i,j,k)-phiHyd(i-1,j,k)) |
75 |
|
|
c & +(phi0surf(i,j,bi,bj)-phi0surf(i-1,j,bi,bj)) |
76 |
|
|
c & *( (phiHyd(i,j,k)+phi0surf(i,j,bi,bj)) |
77 |
|
|
c & -(phiHyd(i-1,j,k)+phi0surf(i-1,j,bi,bj)) |
78 |
|
|
c & ) |
79 |
|
|
ENDDO |
80 |
|
|
ENDDO |
81 |
|
|
|
82 |
|
|
C- Meridional gradient |
83 |
|
|
DO j=jMin,jMax |
84 |
|
|
DO i=iMin,iMax |
85 |
|
|
dPhiHydY(i,j) = _recip_dyC(i,j,bi,bj) |
86 |
|
|
& *( varLoc(i,j)-varLoc(i,j-1) ) |
87 |
|
|
c & *( (phiHyd(i,j,k)-phiHyd(i,j-1,k)) |
88 |
|
|
c & +(phi0surf(i,j,bi,bj)-phi0surf(i,j-1,bi,bj)) |
89 |
|
|
c & *( (phiHyd(i,j,k)+phi0surf(i,j,bi,bj)) |
90 |
|
|
c & -(phiHyd(i,j-1,k)+phi0surf(i,j-1,bi,bj)) |
91 |
|
|
c & ) |
92 |
|
|
ENDDO |
93 |
|
|
ENDDO |
94 |
|
|
|
95 |
|
|
#endif /* INCLUDE_PHIHYD_CALCULATION_CODE */ |
96 |
|
|
|
97 |
|
|
RETURN |
98 |
|
|
END |