/[MITgcm]/MITgcm/pkg/mom_fluxform/mom_calc_rtrans.F
ViewVC logotype

Contents of /MITgcm/pkg/mom_fluxform/mom_calc_rtrans.F

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


Revision 1.5 - (show annotations) (download)
Wed May 3 23:35:11 2006 UTC (18 years ago) by heimbach
Branch: MAIN
CVS Tags: checkpoint58f_post, checkpoint58m_post, checkpoint58o_post, checkpoint58p_post, checkpoint58q_post, checkpoint58e_post, checkpoint58r_post, checkpoint58n_post, checkpoint58k_post, checkpoint58l_post, checkpoint58g_post, checkpoint58h_post, checkpoint58j_post, checkpoint58i_post
Changes since 1.4: +8 -6 lines
Now rstar adjoint.

1 C $Header: /u/gcmpack/MITgcm/pkg/mom_fluxform/mom_calc_rtrans.F,v 1.4 2005/12/08 15:44:34 heimbach Exp $
2 C $Name: $
3
4 #include "MOM_FLUXFORM_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: MOM_CALC_RTRANS
8 C !INTERFACE:
9 SUBROUTINE MOM_CALC_RTRANS(
10 I k, bi, bj,
11 O rTransU, rTransV,
12 I myTime, myIter, myThid)
13 C !DESCRIPTION: \bv
14 C *==========================================================*
15 C | SUBROUTINE MOM_CALC_RTRANS
16 C | o Calculate vertical transports at interface k
17 C | above U & V points (West & South face)
18 C *==========================================================*
19 C | r coordinate (z or p):
20 C | is simply half of the 2 vert. Transp at Center location
21 C | r* coordinate: less simple since
22 C | d.eta/dt / H has to be evaluated locally at U & V points
23 C *==========================================================*
24 C \ev
25
26 C !USES:
27 IMPLICIT NONE
28 C == GLobal variables ==
29 #include "SIZE.h"
30 #include "DYNVARS.h"
31 #include "EEPARAMS.h"
32 #include "PARAMS.h"
33 #include "GRID.h"
34 #include "SURFACE.h"
35 #include "MOM_FLUXFORM.h"
36
37 C !INPUT/OUTPUT PARAMETERS:
38 C == Routine arguments ==
39 C k :: vertical level
40 C bi,bj :: tile indices
41 C rTransU :: vertical transport (above U point)
42 C rTransV :: vertical transport (above V point)
43 C myTime :: current time
44 C myIter :: current iteration number
45 C myThid :: thread number
46 C
47 INTEGER k, bi, bj, myIter, myThid
48 _RL myTime
49 _RL rTransU(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
50 _RL rTransV(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
51
52 C !LOCAL VARIABLES:
53 #ifdef NONLIN_FRSURF
54 C == Local variables in common block ==
55 C dWtransC :: vertical transp. difference between r & r* coordinates
56 C dWtransU :: same but above u.point location (West face)
57 C dWtransV :: same but above v.point location (South face)
58 cph need this in a header for the adjoint
59 cph COMMON /LOCAL_MOM_CALC_RTRANS/
60 cph & dWtransC, dWtransU, dWtransV
61 cph _RL dWtransC(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
62 cph _RL dWtransU(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
63 cph _RL dWtransV(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
64 #endif /* NONLIN_FRSURF */
65 C == Local variables ==
66 C I, J :: Loop counters
67 INTEGER i,j
68 CEOP
69
70 #ifdef NONLIN_FRSURF
71 IF ( k.EQ.Nr+1 .AND.
72 & useRealFreshWaterFlux .AND. usingPCoords ) THEN
73 DO j=1-OLy+1,sNy+OLy
74 DO i=1-OLx+1,sNx+OLx
75 rTransU(i,j) = convertEmP2rUnit*
76 & 0.5 _d 0*( PmEpR( i ,j,bi,bj)*rA( i ,j,bi,bj)
77 & +PmEpR(i-1,j,bi,bj)*rA(i-1,j,bi,bj) )
78 rTransV(i,j) = convertEmP2rUnit*
79 & 0.5 _d 0*( PmEpR(i, j ,bi,bj)*rA(i, j ,bi,bj)
80 & +PmEpR(i,j-1,bi,bj)*rA(i,j-1,bi,bj) )
81 ENDDO
82 ENDDO
83 ELSEIF ( k.GT.Nr ) THEN
84 #else /* NONLIN_FRSURF */
85 IF ( k.GT.Nr ) THEN
86 #endif /* NONLIN_FRSURF */
87 DO j=1-OLy+1,sNy+OLy
88 DO i=1-OLx+1,sNx+OLx
89 rTransU(i,j) = 0.
90 rTransV(i,j) = 0.
91 ENDDO
92 ENDDO
93 ELSE
94 C- Calculate vertical transports above U & V points (West & South face):
95 DO j=1-OLy+1,sNy+OLy
96 DO i=1-OLx+1,sNx+OLx
97 rTransU(i,j) =
98 & 0.5 _d 0*( wVel(i-1,j,k,bi,bj)*rA(i-1,j,bi,bj)
99 & +wVel( i ,j,k,bi,bj)*rA( i ,j,bi,bj) )
100 rTransV(i,j) =
101 & 0.5 _d 0*( wVel(i,j-1,k,bi,bj)*rA(i,j-1,bi,bj)
102 & +wVel(i, j ,k,bi,bj)*rA(i, j ,bi,bj) )
103 ENDDO
104 ENDDO
105 ENDIF
106
107 #ifdef NONLIN_FRSURF
108 C--- Modify rTransU & rTransV when using r* coordinate:
109 IF ( select_rStar.NE.0 ) THEN
110 # ifndef DISABLE_RSTAR_CODE
111
112 IF ( k.EQ.1) THEN
113 C- Initialise dWtrans :
114 DO j=1-OLy,sNy+OLy
115 DO i=1-OLx,sNx+OLx
116 dWtransC(i,j,bi,bj) = rStarDhCDt(i,j,bi,bj)
117 & *(Ro_surf(i,j,bi,bj)-R_low(i,j,bi,bj))
118 & *rA(i,j,bi,bj)
119 ENDDO
120 ENDDO
121 DO j=1-OLy+1,sNy+OLy
122 DO i=1-OLx+1,sNx+OLx
123 dWtransU(i,j,bi,bj) =
124 & 0.5 _d 0*(dWtransC(i-1,j,bi,bj)+dWtransC(i,j,bi,bj))
125 dWtransV(i,j,bi,bj) =
126 & 0.5 _d 0*(dWtransC(i,j-1,bi,bj)+dWtransC(i,j,bi,bj))
127 ENDDO
128 ENDDO
129
130 ELSEIF (k.LE.Nr) THEN
131 C- Update dWtrans from previous value (interface k-1):
132 DO j=1-OLy,sNy+OLy
133 DO i=1-OLx,sNx+OLx
134 dWtransC(i,j,bi,bj) = dWtransC(i,j,bi,bj)
135 & - rStarDhCDt(i,j,bi,bj)*drF(k-1)*h0FacC(i,j,k-1,bi,bj)
136 & *rA(i,j,bi,bj)
137 ENDDO
138 ENDDO
139 DO j=1-OLy+1,sNy+OLy
140 DO i=1-OLx+1,sNx+OLx
141 dWtransU(i,j,bi,bj) = dWtransU(i,j,bi,bj)
142 & - rStarDhWDt(i,j,bi,bj)*drF(k-1)*h0FacW(i,j,k-1,bi,bj)
143 & *rAw(i,j,bi,bj)
144 dWtransV(i,j,bi,bj) = dWtransV(i,j,bi,bj)
145 & - rStarDhSDt(i,j,bi,bj)*drF(k-1)*h0FacS(i,j,k-1,bi,bj)
146 & *rAs(i,j,bi,bj)
147 ENDDO
148 ENDDO
149 C- Modify rTransU & rTransV :
150 DO j=1-OLy+1,sNy+OLy
151 DO i=1-OLx+1,sNx+OLx
152 rTransU(i,j) = rTransU(i,j)-dWtransU(i,j,bi,bj)
153 & + (dWtransC(i-1,j,bi,bj)+dWtransC(i,j,bi,bj))*0.5 _d 0
154 rTransV(i,j) = rTransV(i,j)-dWtransV(i,j,bi,bj)
155 & + (dWtransC(i,j-1,bi,bj)+dWtransC(i,j,bi,bj))*0.5 _d 0
156 ENDDO
157 ENDDO
158
159 ENDIF
160
161 # endif /* DISABLE_RSTAR_CODE */
162 ENDIF
163
164 #endif /* NONLIN_FRSURF */
165
166 RETURN
167 END

  ViewVC Help
Powered by ViewVC 1.1.22