/[MITgcm]/MITgcm/model/src/calc_r_star.F
ViewVC logotype

Contents of /MITgcm/model/src/calc_r_star.F

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


Revision 1.1 - (show annotations) (download)
Sun Jan 26 21:06:11 2003 UTC (21 years, 4 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint48e_post, checkpoint48i_post, checkpoint50, checkpoint48b_post, checkpoint48d_pre, checkpoint48d_post, checkpoint48f_post, checkpoint48h_post, checkpoint50a_post, checkpoint49, checkpoint48g_post
Branch point for: ecco-branch
r* coordinate added in #ifdef NONLIN_FRSURF block.
 (modification to pressure gradient not yet implemented)

1 C $Header: $
2 C $Name: $
3
4 #include "CPP_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: CALC_R_STAR
8 C !INTERFACE:
9 SUBROUTINE CALC_R_STAR( etaFld,
10 I myTime, myIter, myThid )
11 C !DESCRIPTION: \bv
12 C *==========================================================*
13 C | SUBROUTINE CALC_R_STAR
14 C | o Calculate new column thickness & scaling factor for r*
15 C | according to the surface r-position (Non-Lin Free-Surf)
16 C *==========================================================*
17 C \ev
18
19 C !USES:
20 IMPLICIT NONE
21 C == Global variables
22 #include "SIZE.h"
23 #include "EEPARAMS.h"
24 #include "PARAMS.h"
25 #include "GRID.h"
26 #include "SURFACE.h"
27
28 C !INPUT/OUTPUT PARAMETERS:
29 C == Routine arguments ==
30 C myTime :: Current time in simulation
31 C myIter :: Current iteration number in simulation
32 C myThid :: Thread number for this instance of the routine.
33 C etaFld :: current eta field used to update the hFactor
34 _RL myTime
35 INTEGER myIter
36 INTEGER myThid
37 _RL etaFld(1-Olx:sNx+Olx,1-Oly:sNy+Oly,nSx,nSy)
38
39 #ifdef NONLIN_FRSURF
40
41 C !LOCAL VARIABLES:
42 C Local variables
43 C i,j,k,bi,bj :: loop counter
44 INTEGER i,j,k,bi,bj
45 INTEGER km
46 _RL tmpfldW, tmpfldS
47 c CHARACTER*(MAX_LEN_MBUF) suff
48 CEOP
49
50 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
51
52 IF (groundAtK1) THEN
53 km = 1
54 ELSE
55 km = Nr
56 ENDIF
57
58 DO bj=myByLo(myThid), myByHi(myThid)
59 DO bi=myBxLo(myThid), myBxHi(myThid)
60 C- 1rst bi,bj loop :
61
62 IF (myIter.EQ.-1) THEN
63 C-- Initialise arrays :
64 DO j=1-Oly,sNy+Oly
65 DO i=1-Olx,sNx+Olx
66 rStarFacC(i,j,bi,bj) = 1.
67 rStarFacW(i,j,bi,bj) = 1.
68 rStarFacS(i,j,bi,bj) = 1.
69 rStarExpC(i,j,bi,bj) = 1.
70 rStarExpW(i,j,bi,bj) = 1.
71 rStarExpS(i,j,bi,bj) = 1.
72 rStarDhCDt(i,j,bi,bj) = 0.
73 rStarDhWDt(i,j,bi,bj) = 0.
74 rStarDhSDt(i,j,bi,bj) = 0.
75 PmEpR(i,j,bi,bj) = 0.
76 ENDDO
77 ENDDO
78 DO k=1,Nr
79 DO j=1-Oly,sNy+Oly
80 DO i=1-Olx,sNx+Olx
81 h0FacC(i,j,k,bi,bj) = hFacC(i,j,k,bi,bj)
82 h0FacW(i,j,k,bi,bj) = hFacW(i,j,k,bi,bj)
83 h0FacS(i,j,k,bi,bj) = hFacS(i,j,k,bi,bj)
84 ENDDO
85 ENDDO
86 ENDDO
87 ELSE
88 C-- copy rStarFacX -> rStarExpX
89 DO j=1-Oly,sNy+Oly
90 DO i=1-Olx,sNx+Olx
91 rStarExpC(i,j,bi,bj) = rStarFacC(i,j,bi,bj)
92 rStarExpW(i,j,bi,bj) = rStarFacW(i,j,bi,bj)
93 rStarExpS(i,j,bi,bj) = rStarFacS(i,j,bi,bj)
94 ENDDO
95 ENDDO
96 ENDIF
97
98 C-- Compute the new column thikness :
99 DO j=0,sNy+1
100 DO i=0,sNx+1
101 IF (maskH(i,j,bi,bj).EQ.1. ) THEN
102 rStarFacC(i,j,bi,bj) =
103 & (etaFld(i,j,bi,bj)+Ro_surf(i,j,bi,bj)-R_low(i,j,bi,bj))
104 & *recip_Rcol(i,j,bi,bj)
105 ELSE
106 rStarFacC(i,j,bi,bj) = 1.
107 ENDIF
108 ENDDO
109 ENDDO
110 DO j=1,sNy+1
111 DO i=1,sNx+1
112 IF (maskW(i,j,km,bi,bj).EQ.1. ) THEN
113 tmpfldW = MIN( Ro_surf(i-1,j,bi,bj), Ro_surf(i,j,bi,bj) )
114 & - MAX( R_low(i-1,j,bi,bj), R_low(i,j,bi,bj) )
115 rStarFacW(i,j,bi,bj) =
116 & ( 0.5 _d 0 *( etaFld(i-1,j,bi,bj)*rA(i-1,j,bi,bj)
117 & +etaFld(i,j,bi,bj)*rA(i,j,bi,bj)
118 & )*recip_rAw(i,j,bi,bj)
119 & +tmpfldW )/tmpfldW
120 ELSE
121 rStarFacW(i,j,bi,bj) = 1.
122 ENDIF
123 IF (maskS(i,j,km,bi,bj).EQ.1. ) THEN
124 tmpfldS = MIN( Ro_surf(i,j-1,bi,bj), Ro_surf(i,j,bi,bj) )
125 & - MAX( R_low(i,j-1,bi,bj), R_low(i,j,bi,bj) )
126 rStarFacS(i,j,bi,bj) =
127 & ( 0.5 _d 0 *( etaFld(i,j-1,bi,bj)*rA(i,j-1,bi,bj)
128 & +etaFld(i,j,bi,bj)*rA(i,j,bi,bj)
129 & )*recip_rAs(i,j,bi,bj)
130 & +tmpfldS )/tmpfldS
131 ELSE
132 rStarFacS(i,j,bi,bj) = 1.
133 ENDIF
134 ENDDO
135 ENDDO
136
137 C- end 1rst bi,bj loop.
138 ENDDO
139 ENDDO
140
141 _EXCH_XY_RL( rStarFacC, myThid )
142 CALL EXCH_UV_XY_RL(rStarFacW,rStarFacS,.FALSE.,myThid)
143
144 IF (useRealFreshWaterFlux .AND. myTime.EQ.startTime)
145 & _EXCH_XY_R4( PmEpR, myThid )
146
147 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
148
149 DO bj=myByLo(myThid), myByHi(myThid)
150 DO bi=myBxLo(myThid), myBxHi(myThid)
151 C- 2nd bi,bj loop :
152
153 DO j=1-Oly,sNy+Oly
154 DO i=1-Olx,sNx+Olx
155 rStarDhCDt(i,j,bi,bj)=(rStarFacC(i,j,bi,bj)
156 & -rStarExpC(i,j,bi,bj))/deltaTfreesurf
157 rStarDhWDt(i,j,bi,bj)=(rStarFacW(i,j,bi,bj)
158 & -rStarExpW(i,j,bi,bj))/deltaTfreesurf
159 rStarDhSDt(i,j,bi,bj)=(rStarFacS(i,j,bi,bj)
160 & -rStarExpS(i,j,bi,bj))/deltaTfreesurf
161 rStarExpC(i,j,bi,bj) = rStarFacC(i,j,bi,bj)
162 & / rStarExpC(i,j,bi,bj)
163 rStarExpW(i,j,bi,bj) = rStarFacW(i,j,bi,bj)
164 & / rStarExpW(i,j,bi,bj)
165 rStarExpS(i,j,bi,bj) = rStarFacS(i,j,bi,bj)
166 & / rStarExpS(i,j,bi,bj)
167 ENDDO
168 ENDDO
169
170 C- end 2nd bi,bj loop.
171 ENDDO
172 ENDDO
173
174 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
175 #endif /* NONLIN_FRSURF */
176
177 RETURN
178 END

  ViewVC Help
Powered by ViewVC 1.1.22