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

Annotation 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 - (hide 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 torge 1.2 C $Header: /u/gcmpack/MITgcm/pkg/seaice/seaice_get_dynforcing.F,v 1.14 2012/11/09 22:15:18 heimbach Exp $
2 torge 1.1 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