/[MITgcm]/MITgcm_contrib/torge/itd/code/seaice_get_dynforcing.F
ViewVC logotype

Contents of /MITgcm_contrib/torge/itd/code/seaice_get_dynforcing.F

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


Revision 1.2 - (show annotations) (download)
Wed Mar 27 18:59:52 2013 UTC (12 years, 4 months ago) by torge
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +1 -1 lines
updating my MITgcm_contrib directory to include latest changes on main branch;
settings are to run a 1D test szenario with ITD code and 7 categories

1 C $Header: /u/gcmpack/MITgcm/pkg/seaice/seaice_get_dynforcing.F,v 1.14 2012/11/09 22:15:18 heimbach Exp $
2 C $Name: $
3
4 #include "SEAICE_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: SEAICE_SOLVE4TEMP
8 C !INTERFACE:
9 SUBROUTINE SEAICE_GET_DYNFORCING(
10 I uIce, vIce,
11 O taux, tauy,
12 I myTime, myIter, myThid )
13 C !DESCRIPTION: \bv
14 C *==========================================================*
15 C | SUBROUTINE SEAICE_GET_DYNFORCING
16 C | compute surface stress from atmopheric forcing fields
17 C *==========================================================*
18 C | started by Martin Losch, April 2007
19 C *==========================================================*
20 C \ev
21
22 C !USES:
23 IMPLICIT NONE
24 C === Global variables ===
25 #include "SIZE.h"
26 #include "EEPARAMS.h"
27 #include "PARAMS.h"
28 #include "GRID.h"
29 #include "FFIELDS.h"
30 #include "DYNVARS.h"
31 #include "SEAICE_SIZE.h"
32 #include "SEAICE_PARAMS.h"
33 #ifdef ALLOW_EXF
34 # include "EXF_OPTIONS.h"
35 # include "EXF_FIELDS.h"
36 # include "EXF_PARAM.h"
37 #endif
38
39 C !INPUT/OUTPUT PARAMETERS:
40 C uIce (inp) :: zonal ice velocity (input)
41 C vIce (inp) :: meridional ice velocity (input)
42 C taux (out) :: zonal wind stress over ice at U point
43 C tauy (out) :: meridional wind stress over ice at V point
44 C myTime (inp) :: current time in simulation
45 C myIter (inp) :: iteration number in simulation
46 C myThid (inp) :: my Thread Id. number
47 _RL uIce (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
48 _RL vIce (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
49 _RL taux (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
50 _RL tauy (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
51 _RL myTime
52 INTEGER myIter
53 INTEGER myThid
54 CEOP
55
56 #ifdef SEAICE_CGRID
57 C !LOCAL VARIABLES:
58 C i,j,bi,bj :: Loop counters
59 C ks :: vertical index of surface layer
60 INTEGER bi, bj, i, j
61 INTEGER ks
62 _RL COSWIN
63 _RS SINWIN
64 _RL U1, V1, AAA
65 C CDAIR :: local wind stress coefficient (used twice)
66 C oceTauX :: wind-stress over open-ocean (on Arakawa A-grid), X direction
67 C oceTauY :: wind-stress over open-ocean (on Arakawa A-grid), Y direction
68 _RL CDAIR (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
69 #ifndef SEAICE_EXTERNAL_FLUXES
70 _RL oceTauX (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
71 _RL oceTauY (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
72 #endif
73
74 C-- surface level
75 ks = 1
76 C-- introduce turning angle (default is zero)
77 SINWIN=SIN(SEAICE_airTurnAngle*deg2rad)
78 COSWIN=COS(SEAICE_airTurnAngle*deg2rad)
79
80 C-- NOW SET UP FORCING FIELDS
81
82 #ifdef SEAICE_EXTERNAL_FLUXES
83 IF (useAtmWind) THEN
84 #endif
85 C-- Wind stress is computed on center of C-grid cell
86 C and interpolated to U and V points later
87 DO bj=myByLo(myThid),myByHi(myThid)
88 DO bi=myBxLo(myThid),myBxHi(myThid)
89
90 #ifndef SEAICE_EXTERNAL_FLUXES
91 C-- First compute wind-stress over open ocean: this will results in
92 C over-writing fu and fv that were computed or read-in by pkg/exf.
93 DO j=1-Oly,sNy+Oly
94 DO i=1-Olx,sNx+Olx
95 U1=UWIND(i,j,bi,bj)
96 V1=VWIND(i,j,bi,bj)
97 AAA=U1**2+V1**2
98 IF ( AAA .LE. SEAICE_EPS_SQ ) THEN
99 AAA=SEAICE_EPS
100 ELSE
101 AAA=SQRT(AAA)
102 ENDIF
103 CDAIR(i,j)=SEAICE_rhoAir*OCEAN_drag
104 & *(2.70 _d 0+0.142 _d 0*AAA+0.0764 _d 0*AAA*AAA)
105 oceTauX(i,j)=CDAIR(i,j)*
106 & (COSWIN*U1-SIGN(SINWIN, _fCori(i,j,bi,bj))*V1)
107 oceTauY(i,j)=CDAIR(i,j)*
108 & (SIGN(SINWIN, _fCori(i,j,bi,bj))*U1+COSWIN*V1)
109 ENDDO
110 ENDDO
111 C-- Interpolate wind stress over open ocean (N/m^2)
112 C from A-grid to U and V points of C-grid
113 DO j=1-Oly+1,sNy+Oly
114 DO i=1-Olx+1,sNx+Olx
115 fu(i,j,bi,bj) = 0.5 _d 0*( oceTauX(i,j) + oceTauX(i-1,j) )
116 & *_maskW(i,j,ks,bi,bj)
117 fv(i,j,bi,bj) = 0.5 _d 0*( oceTauY(i,j) + oceTauY(i,j-1) )
118 & *_maskS(i,j,ks,bi,bj)
119 ENDDO
120 ENDDO
121 #endif /* ndef SEAICE_EXTERNAL_FLUXES */
122
123 C-- Now compute ice surface stress
124 IF (useRelativeWind) THEN
125 DO j=1-Oly,sNy+Oly-1
126 DO i=1-Olx,sNx+Olx-1
127 U1=UWIND(i,j,bi,bj)
128 & + 0.5 _d 0 * (uVel(i,j,ks,bi,bj)+uVel(i+1,j,ks,bi,bj))
129 & - 0.5 _d 0 * (uIce(i,j,bi,bj)+uIce(i+1,j,bi,bj))
130 V1=VWIND(i,j,bi,bj)
131 & + 0.5 _d 0 * (vVel(i,j,ks,bi,bj)+vVel(i,j+1,ks,bi,bj))
132 & - 0.5 _d 0 * (vIce(i,j,bi,bj)+vIce(i,j+1,bi,bj))
133 AAA=U1**2+V1**2
134 IF ( AAA .LE. SEAICE_EPS_SQ ) THEN
135 AAA=SEAICE_EPS
136 ELSE
137 AAA=SQRT(AAA)
138 ENDIF
139 IF ( yC(i,j,bi,bj) .LT. ZERO ) THEN
140 CDAIR(i,j) = SEAICE_rhoAir*SEAICE_drag_south*AAA
141 ELSE
142 CDAIR(i,j) = SEAICE_rhoAir*SEAICE_drag*AAA
143 ENDIF
144 ENDDO
145 ENDDO
146 ELSE
147 DO j=1-Oly,sNy+Oly
148 DO i=1-Olx,sNx+Olx
149 U1=UWIND(i,j,bi,bj)
150 V1=VWIND(i,j,bi,bj)
151 AAA=U1**2+V1**2
152 IF ( AAA .LE. SEAICE_EPS_SQ ) THEN
153 AAA=SEAICE_EPS
154 ELSE
155 AAA=SQRT(AAA)
156 ENDIF
157 IF ( yC(i,j,bi,bj) .LT. ZERO ) THEN
158 CDAIR(i,j) = SEAICE_rhoAir*SEAICE_drag_south*AAA
159 ELSE
160 CDAIR(i,j) = SEAICE_rhoAir*SEAICE_drag*AAA
161 ENDIF
162 ENDDO
163 ENDDO
164 ENDIF
165 IF (useRelativeWind) THEN
166 DO j=1-Oly+1,sNy+Oly-1
167 DO i=1-Olx+1,sNx+Olx-1
168 C interpolate to U points
169 taux(i,j,bi,bj)= 0.5 _d 0 *
170 & ( CDAIR(i,j)*(COSWIN*
171 & (uWind(i,j,bi,bj)
172 & +0.5 _d 0*(uVel(i,j,ks,bi,bj)+uVel(i+1,j,ks,bi,bj))
173 & -0.5 _d 0*(uIce(i,j,bi,bj)+uIce(i+1,j,bi,bj)))
174 & -SIGN(SINWIN, _fCori(i,j,bi,bj))*
175 & (vWind(i,j,bi,bj)
176 & +0.5 _d 0*(vVel(i,j,ks,bi,bj)+vVel(i,j+1,ks,bi,bj))
177 & -0.5 _d 0*(vIce(i,j,bi,bj)+vIce(i,j+1,bi,bj))))
178 & +CDAIR(i-1,j)*(COSWIN*
179 & (uWind(i-1,j,bi,bj)
180 & +0.5 _d 0*(uVel(i-1,j,ks,bi,bj)+uVel(i,j,ks,bi,bj))
181 & -0.5 _d 0*(uIce(i-1,j,bi,bj)+uIce(i,j,bi,bj)))
182 & -SIGN(SINWIN, _fCori(i-1,j,bi,bj))*
183 & (vWind(i-1,j,bi,bj)
184 & +0.5 _d 0*(vVel(i-1,j,ks,bi,bj)+vVel(i-1,j+1,ks,bi,bj))
185 & -0.5 _d 0*(vIce(i-1,j,bi,bj)+vIce(i-1,j+1,bi,bj))))
186 & )*_maskW(i,j,ks,bi,bj)
187 C interpolate to V points
188 tauy(i,j,bi,bj)= 0.5 _d 0 *
189 & ( CDAIR(i,j)*(SIGN(SINWIN, _fCori(i,j,bi,bj))*
190 & (uWind(i,j,bi,bj)
191 & +0.5 _d 0*(uVel(i,j,ks,bi,bj)+uVel(i+1,j,ks,bi,bj))
192 & -0.5 _d 0*(uIce(i,j,bi,bj)+uIce(i+1,j,bi,bj)))
193 & +COSWIN*
194 & (vWind(i,j,bi,bj)
195 & +0.5 _d 0*(vVel(i,j,ks,bi,bj)+vVel(i,j+1,ks,bi,bj))
196 & -0.5 _d 0*(vIce(i,j,bi,bj)+vIce(i,j+1,bi,bj))))
197 & +CDAIR(i,j-1)*(SIGN(SINWIN, _fCori(i,j-1,bi,bj))*
198 & (uWind(i,j-1,bi,bj)
199 & +0.5 _d 0*(uVel(i,j-1,ks,bi,bj)+uVel(i+1,j-1,ks,bi,bj))
200 & -0.5 _d 0*(uIce(i,j-1,bi,bj)+uIce(i+1,j-1,bi,bj)))
201 & +COSWIN*
202 & (vWind(i,j-1,bi,bj)
203 & +0.5 _d 0*(vVel(i,j-1,ks,bi,bj)+vVel(i,j,ks,bi,bj))
204 & -0.5 _d 0*(vIce(i,j-1,bi,bj)+vIce(i,j,bi,bj))))
205 & )*_maskS(i,j,ks,bi,bj)
206 ENDDO
207 ENDDO
208 ELSE
209 DO j=1-Oly+1,sNy+Oly
210 DO i=1-Olx+1,sNx+Olx
211 C interpolate to U points
212 taux(i,j,bi,bj)=0.5 _d 0 *
213 & ( CDAIR(i ,j)*(
214 & COSWIN *uWind(i ,j,bi,bj)
215 & -SIGN(SINWIN, _fCori(i ,j,bi,bj))*vWind(i ,j,bi,bj) )
216 & + CDAIR(i-1,j)*(
217 & COSWIN *uWind(i-1,j,bi,bj)
218 & -SIGN(SINWIN, _fCori(i-1,j,bi,bj))*vWind(i-1,j,bi,bj) )
219 & )*_maskW(i,j,ks,bi,bj)
220 C interpolate to V points
221 tauy(i,j,bi,bj)=0.5 _d 0 *
222 & ( CDAIR(i,j )*(
223 & SIGN(SINWIN, _fCori(i,j ,bi,bj))*uWind(i,j ,bi,bj)
224 & +COSWIN*vWind(i,j ,bi,bj) )
225 & + CDAIR(i,j-1)*(
226 & SIGN(SINWIN, _fCori(i,j-1,bi,bj))*uWind(i,j-1,bi,bj)
227 & +COSWIN*vWind(i,j-1,bi,bj) )
228 & )*_maskS(i,j,ks,bi,bj)
229 ENDDO
230 ENDDO
231 ENDIF
232
233 ENDDO
234 ENDDO
235
236 #ifdef SEAICE_EXTERNAL_FLUXES
237 ELSE
238 C-- Wind stress is available on U and V points, copy it to seaice variables.
239 DO bj=myByLo(myThid),myByHi(myThid)
240 DO bi=myBxLo(myThid),myBxHi(myThid)
241 DO j=1-Oly,sNy+Oly
242 DO i=1-Olx,sNx+Olx
243 C now ice surface stress
244 IF ( yC(i,j,bi,bj) .LT. ZERO ) THEN
245 CDAIR(i,j) = SEAICE_drag_south/OCEAN_drag
246 ELSE
247 CDAIR(i,j) = SEAICE_drag /OCEAN_drag
248 ENDIF
249 taux(i,j,bi,bj) = CDAIR(i,j)*fu(i,j,bi,bj)
250 & *_maskW(i,j,ks,bi,bj)
251 tauy(i,j,bi,bj) = CDAIR(i,j)*fv(i,j,bi,bj)
252 & *_maskS(i,j,ks,bi,bj)
253 ENDDO
254 ENDDO
255 ENDDO
256 ENDDO
257 ENDIF
258 #endif /* SEAICE_EXTERNAL_FLUXES */
259 #endif /* SEAICE_CGRID */
260
261 RETURN
262 END

  ViewVC Help
Powered by ViewVC 1.1.22