/[MITgcm]/MITgcm/pkg/diagnostics/diag_calc_psivel.F
ViewVC logotype

Contents of /MITgcm/pkg/diagnostics/diag_calc_psivel.F

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


Revision 1.2 - (show annotations) (download)
Wed Jul 6 01:45:32 2011 UTC (12 years, 11 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint63
Changes since 1.1: +3 -1 lines
also apply offset (to satisfy Psi == 0 on selected location) to psiLoc

1 C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diag_calc_psivel.F,v 1.1 2011/07/01 18:50:00 jmc Exp $
2 C $Name: $
3
4 #include "DIAG_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: DIAG_CALC_PSIVEL
8 C !INTERFACE:
9 SUBROUTINE DIAG_CALC_PSIVEL(
10 I k, iPsi0, jPsi0, uTrans, vTrans,
11 O psiVel, psiLoc,
12 U myTIme, myIter, myThid )
13 C !DESCRIPTION: \bv
14 C *==========================================================*
15 C | SUBROUTINE DIAG_CALC_PSIVEL
16 C | o Calculate horizontal transport stream-function
17 C | from non-divergent horizontal transport.
18 C *==========================================================*
19 C *==========================================================*
20 C \ev
21
22 C !USES:
23 IMPLICIT NONE
24 C === Global data ===
25 #include "SIZE.h"
26 #include "EEPARAMS.h"
27 #include "PARAMS.h"
28 c#include "GRID.h"
29 c#include "SURFACE.h"
30
31 C !INPUT/OUTPUT PARAMETERS:
32 C === Routine arguments ===
33 C k :: current level
34 C i,jPsi0 :: indices of grid-point location where Psi == 0
35 C uTrans :: horizontal transport, u-component
36 C vTrans :: horizontal transport, u-component
37 C psiVel :: horizontal stream-function
38 C psiLoc :: horizontal stream-function at special location
39 C myTime :: current time of simulation (s)
40 C myIter :: current iteration number
41 C myThid :: my Thread Id number
42 INTEGER k
43 INTEGER iPsi0(nSx,nSy)
44 INTEGER jPsi0(nSx,nSy)
45 _RL uTrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
46 _RL vTrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
47 _RL psiVel(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
48 _RL psiLoc(2)
49 _RL myTime
50 INTEGER myIter
51 INTEGER myThid
52
53 C !LOCAL VARIABLES:
54 C === Local variables ====
55 C bi, bj :: tile indices
56 C i, j :: loop indices
57 C dPsiX :: tile stream-function increment along X-dir
58 C dPsiY :: tile stream-function increment along Y-dir
59 C psiOri :: stream-function value at tile origin
60 INTEGER bi, bj
61 INTEGER i, j
62 _RL dPsiX (nSx,nSy)
63 _RL dPsiY (nSx,nSy)
64 _RL psiOri(nSx,nSy)
65 _RL offSet
66 LOGICAL zeroPsi
67 c CHARACTER*(MAX_LEN_MBUF) msgBuf
68 CEOP
69
70 C-- Initialise
71 zeroPsi = iPsi0(1,1).GE.0
72 psiLoc(1) = 0.
73 psiLoc(2) = 0.
74
75 C-- step.1 : compute Psi over each tile separately
76 DO bj=myByLo(myThid),myByHi(myThid)
77 DO bi=myBxLo(myThid),myBxHi(myThid)
78 dPsiX (bi,bj) = 0.
79 dPsiY (bi,bj) = 0.
80 psiOri(bi,bj) = 0.
81 psiVel(1,1,bi,bj) = psiOri(bi,bj)
82 j = 1
83 DO i=1,sNx
84 psiVel(i+1,j,bi,bj) = psiVel(i,j,bi,bj)
85 & + vTrans(i,j,bi,bj)
86 ENDDO
87 C- note: can vectorise inner loop
88 DO j=1,sNy
89 DO i=1,sNx+1
90 psiVel(i,j+1,bi,bj) = psiVel(i,j,bi,bj)
91 & - uTrans(i,j,bi,bj)
92 ENDDO
93 ENDDO
94 dPsiX (bi,bj) = psiVel(1+sNx,1,bi,bj)
95 dPsiY (bi,bj) = psiVel(1,1+sNy,bi,bj)
96 ENDDO
97 ENDDO
98
99 CALL CUMULSUM_Z_TILE_RL(
100 O psiOri, psiLoc,
101 I dPsiX, dPsiY, myThid )
102
103 C-- step.2 : account for Psi @ tile origin
104 offSet = 0.
105 DO bj=myByLo(myThid),myByHi(myThid)
106 DO bi=myBxLo(myThid),myBxHi(myThid)
107 DO j=1,sNy+1
108 DO i=1,sNx+1
109 psiVel(i,j,bi,bj) = psiVel(i,j,bi,bj) + psiOri(bi,bj)
110 ENDDO
111 ENDDO
112 IF ( iPsi0(bi,bj)*jPsi0(bi,bj).GT.0 )
113 & offSet = -psiVel(iPsi0(bi,bj),jPsi0(bi,bj),bi,bj)
114 ENDDO
115 ENDDO
116
117 IF ( zeroPsi ) THEN
118 C-- step.3 : shift stream-function to satisfy Psi == 0 @ a particular location
119 _GLOBAL_SUM_RL( offSet, myThid )
120 psiLoc(1) = psiLoc(1) + offSet
121 psiLoc(2) = psiLoc(2) + offSet
122 DO bj=myByLo(myThid),myByHi(myThid)
123 DO bi=myBxLo(myThid),myBxHi(myThid)
124 DO j=1,sNy+1
125 DO i=1,sNx+1
126 psiVel(i,j,bi,bj) = psiVel(i,j,bi,bj) + offSet
127 ENDDO
128 ENDDO
129 ENDDO
130 ENDDO
131 ENDIF
132
133 RETURN
134 END

  ViewVC Help
Powered by ViewVC 1.1.22