/[MITgcm]/MITgcm/pkg/seaice/seaice_get_forcing.F
ViewVC logotype

Contents of /MITgcm/pkg/seaice/seaice_get_forcing.F

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


Revision 1.6 - (show annotations) (download)
Thu Oct 9 04:19:20 2003 UTC (20 years, 7 months ago) by edhill
Branch: MAIN
CVS Tags: checkpoint51k_post, checkpoint51l_post, checkpoint51o_pre, checkpoint51n_pre, checkpoint52d_pre, branch-netcdf, checkpoint51r_post, checkpoint52b_pre, checkpoint51i_post, checkpoint51l_pre, checkpoint51o_post, checkpoint51q_post, checkpoint52, checkpoint52a_post, checkpoint52c_post, ecco_c52_e35, checkpoint52a_pre, checkpoint52b_post, checkpoint51m_post, checkpoint51t_post, checkpoint51p_post, checkpoint51n_post, checkpoint51u_post, checkpoint51s_post
Branch point for: branch-nonh, netcdf-sm0, tg2-branch, checkpoint51n_branch
Changes since 1.5: +2 -1 lines
 o first check-in for the "branch-genmake2" merge
 o verification suite as run on shelley (gcc 3.2.2):

Wed Oct  8 23:42:29 EDT 2003
                T           S           U           V
G D M    c        m  s        m  s        m  s        m  s
E p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  .
N n k u  2  i  a  a  d  i  a  a  d  i  a  a  d  i  a  a  d
2 d e n  d  n  x  n  .  n  x  n  .  n  x  n  .  n  x  n  .

OPTFILE=NONE

Y Y Y Y 13 16 16 16  0 16 16 16 16 16 16 16 16 13 12  0  0 pass  adjustment.128x64x1
Y Y Y Y 16 16 16 16  0 16 16 16 16 16 16  0  0 16 16  0  0 pass  adjustment.cs-32x32x1
Y Y Y Y 16 16 16 16  0 16 16 16 16 16 16 22  0 16 16 22  0 pass  adjust_nlfs.cs-32x32x1
Y Y Y Y -- 13 13 16 16 13 13 13 13 16 16 16 16 16 16 16 16 N/O   advect_cs
Y Y Y Y -- 22 16 16 16 16 16 16 13 16 16 16 16 16 16 16 16 N/O   advect_xy
Y Y Y Y -- 13 16 13 16 16 16 16 16 16 16 22 16 16 16 16 16 N/O   advect_xz
Y Y Y Y 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 pass  aim.5l_cs
Y Y Y Y 14 16 16 16 16 16 16 16 16 13 16 16 16 16 16 13 16 pass  aim.5l_Equatorial_Channel
Y Y Y Y 16 16 16 16 16 16 16 16 16 16 16 13 16 16 13 13 16 pass  aim.5l_LatLon
Y Y Y Y 13 16 16 16 16 16 16 16 16 16 13 12 13 13 16 13 16 pass  exp0
Y Y Y Y 14 16 16 16 16 16 16 16 22 16 16 16 13 16 16 22 16 pass  exp1
Y Y Y Y 13 13 16 13 16 16 16 16 16 13 13 16 16 13 13 13 13 pass  exp2
Y Y Y Y 16 16 16 16 16 16 16 16 22 16 16 16 16 16 16 16 16 pass  exp4
Y Y Y Y 16 16 16 16 16 16 16 16 16 16 16 22 16 16 16 22 16 pass  exp5
Y Y Y Y 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 pass  front_relax
Y Y Y Y 14 16 16 13 13 16 16 13 13 16 13 13 16 12 13 13 16 pass  global_ocean.90x40x15
Y Y Y Y 10 16 16 13 13 16 13 16 16 13 13 13 13 16 16 13 16 FAIL  global_ocean.cs32x15
Y Y Y Y  6 11 12 13 13 12 13 16 13  9  9  9  9 10  9  9 11 FAIL  global_ocean_pressure
Y Y Y Y 14 16 16 13 16 16 16 13 13 13 13 13 16 12 16 13 16 pass  global_with_exf
Y Y Y Y 14 16 16 16 16 16 16 16 16 11 13 22 13 16 16  9 16 pass  hs94.128x64x5
Y Y Y Y 13 16 16 16 16 16 16 16 16 11 16 16 16 13 16 22 13 pass  hs94.1x64x5
Y Y Y Y 14 16 16 16 16 16 16 16 16 13 16 13 13 16 16 22 13 pass  hs94.cs-32x32x5
Y Y Y Y 10 10 16 13 13 16 16 16 22 16 13 13 13 13 13 22 13 FAIL  ideal_2D_oce
Y Y Y Y  8 16 16 16 16 16 16 16 16 13 13  8 16 16 16 16 16 FAIL  internal_wave
Y Y Y Y 14 16 16 16 16 16 16 16 16 13 13 22 13 13 13 22 16 pass  inverted_barometer
Y Y Y Y 12 16 16 16 16 16 16 16 16 16 13 12 13 13 13 13 13 FAIL  lab_sea
Y Y Y Y 11 16 16 16 16 16 16 16 13 13 13 12 13 16 13 12 13 FAIL  natl_box
Y Y Y Y 16 16 16 16 16 16 16 16 22 16 16 16 16 16 16 16 16 pass  plume_on_slope
Y Y Y Y 13 16 16 16 16 13 16 16 16 16 16 16 16 13 16 16 16 pass  solid-body.cs-32x32x1

1 C $Header: /u/u3/gcmpack/MITgcm/pkg/seaice/seaice_get_forcing.F,v 1.5.2.1 2003/10/02 18:18:34 adcroft Exp $
2 C $Name: $
3
4 #include "SEAICE_OPTIONS.h"
5
6 CStartOfInterface
7 SUBROUTINE SEAICE_GET_FORCING( myTime, myIter, myThid )
8 C /==========================================================\
9 C | SUBROUTINE SEAICE_GET_FORCING |
10 C | o Load atmospheric state and runoff. |
11 C |==========================================================|
12 C \==========================================================/
13 IMPLICIT NONE
14
15 C === Global variables ===
16 #include "SIZE.h"
17 #include "EEPARAMS.h"
18 #include "PARAMS.h"
19 #include "FFIELDS.h"
20 #include "SEAICE_PARAMS.h"
21 #include "SEAICE_FFIELDS.h"
22
23 C === Routine arguments ===
24 C myTime - Simulation time
25 C myIter - Simulation timestep number
26 C myThid - Thread no. that called this routine.
27 _RL myTime
28 INTEGER myIter
29 INTEGER myThid
30 CEndOfInterface
31
32 INTEGER ILNBLNK
33 EXTERNAL ILNBLNK
34
35 #ifdef ALLOW_SEAICE
36 #ifndef SEAICE_EXTERNAL_FORCING
37
38 C === Local arrays ===
39 COMMON /TDFIELDS_FLAGS/
40 & wind0_is_first, flux0_is_first,
41 & SSS0_is_first, SST0_is_first
42 LOGICAL wind0_is_first, flux0_is_first,
43 & SSS0_is_first, SST0_is_first
44
45 C === Local variables ===
46 CHARACTER*(MAX_LEN_MBUF) msgBuf
47 INTEGER bi,bj,i,j,iRec,iEnd
48 _RL aWghtWind,bWghtWind,aWghtFlux,bWghtFlux,
49 & aWghtSSS,bWghtSSS,aWghtSST,bWghtSST
50 _RS initValue
51 _RL year, seconds, YearTime, four
52 INTEGER CurrentYear, CurrentYear2
53 logical done
54 CHARACTER*(MAX_LEN_MBUF) fName
55
56 C-- Compute CurrentYear and YearTime
57 four = 4.0
58 YearTime = myTime
59 done = .false.
60 do year = StartingYear, EndingYear
61 if( .not. done ) then
62 if( mod(year,four) .eq. 0. ) then
63 seconds = 366.*24.*60.*60.
64 else
65 seconds = 365.*24.*60.*60.
66 endif
67 if( YearTime-seconds .ge. 0. ) then
68 YearTime = YearTime-seconds
69 else
70 CurrentYear = year
71 done = .true.
72 endif
73 endif
74 enddo
75 if( CurrentYear.ge.2000 ) then
76 CurrentYear2 = CurrentYear-2000
77 else
78 CurrentYear2 = CurrentYear-1900
79 endif
80
81 C-- Check to see whether myTime is outside available forcing data
82 IF( CurrentYear.gt. EndingYear .or.
83 & YearTime .lt. WindForcingStart .or.
84 & YearTime .gt. WindForcingEnd .or.
85 & YearTime .lt. FluxForcingStart .or.
86 & YearTime .gt. FluxForcingEnd .or.
87 & YearTime .lt. SSTforcingStart .or.
88 & YearTime .gt. SSTforcingEnd .or.
89 & YearTime .lt. SSSforcingStart .or.
90 & YearTime .gt. SSSforcingEnd ) THEN
91 WRITE(msgBuf,'(A)') 'No Available Forcing Data'
92 CALL PRINT_ERROR( msgBuf , 1)
93 STOP 'ABNORMAL END: S/R SEAICE_GET_FORCING'
94 ENDIF
95
96 C-- First call requires that we initialize everything for safety
97 IF ( myIter .EQ. nIter0 ) THEN
98 initValue = ZERO
99 CALL INIT_ARRAY_RS( uwind0 , initValue, myThid )
100 CALL INIT_ARRAY_RS( uwind1 , initValue, myThid )
101 CALL INIT_ARRAY_RS( vwind0 , initValue, myThid )
102 CALL INIT_ARRAY_RS( vwind1 , initValue, myThid )
103 initValue = 283. _d 0
104 CALL INIT_ARRAY_RS( atemp0 , initValue, myThid )
105 CALL INIT_ARRAY_RS( atemp1 , initValue, myThid )
106 initValue = 0.005 _d 0
107 CALL INIT_ARRAY_RS( aqh0 , initValue, myThid )
108 CALL INIT_ARRAY_RS( aqh1 , initValue, myThid )
109 initValue = 300. _d 0
110 CALL INIT_ARRAY_RS( lwdown0 , initValue, myThid )
111 CALL INIT_ARRAY_RS( lwdown1 , initValue, myThid )
112 initValue = 200. _d 0
113 CALL INIT_ARRAY_RS( swdown0 , initValue, myThid )
114 CALL INIT_ARRAY_RS( swdown1 , initValue, myThid )
115 initValue = ZERO
116 CALL INIT_ARRAY_RS( precip0 , initValue, myThid )
117 CALL INIT_ARRAY_RS( precip1 , initValue, myThid )
118 CALL INIT_ARRAY_RS( evap0 , initValue, myThid )
119 CALL INIT_ARRAY_RS( evap1 , initValue, myThid )
120 CALL INIT_ARRAY_RS( runoff0 , initValue, myThid )
121 CALL INIT_ARRAY_RS( runoff1 , initValue, myThid )
122 initValue = 35. _d 0
123 CALL INIT_ARRAY_RS( SSSsi0 , initValue, myThid )
124 CALL INIT_ARRAY_RS( SSSsi1 , initValue, myThid )
125 initValue = 10. _d 0
126 CALL INIT_ARRAY_RS( SSTsi0 , initValue, myThid )
127 CALL INIT_ARRAY_RS( SSTsi1 , initValue, myThid )
128
129 wind0_is_first = .TRUE.
130 flux0_is_first = .TRUE.
131 SSS0_is_first = .TRUE.
132 SST0_is_first = .TRUE.
133
134 _BEGIN_MASTER(myThid)
135 write(0,*)
136 & 'S/R SEAICE_GET_FORCING: initialize',myTime,myIter
137
138 iRec = int((YearTime-WindForcingStart)/WindForcingPeriod) + 1
139 IF ( uwindFile .NE. ' ' ) THEN
140 iEnd = ILNBLNK( uwindFile ) - 2
141 WRITE(fName,'(A,I2.2)') uwindFile(1:iEnd), CurrentYear2
142 CALL READ_REC_XY_RS( fName,uwind0,iRec ,myIter,myThid )
143 CALL READ_REC_XY_RS( fName,uwind1,iRec+1,myIter,myThid )
144 ENDIF
145 IF ( vwindFile .NE. ' ' ) THEN
146 iEnd = ILNBLNK( vwindFile ) - 2
147 WRITE(fName,'(A,I2.2)') vwindFile(1:iEnd), CurrentYear2
148 CALL READ_REC_XY_RS( fName,vwind0,iRec ,myIter,myThid )
149 CALL READ_REC_XY_RS( fName,vwind1,iRec+1,myIter,myThid )
150 ENDIF
151
152 iRec = int((YearTime-FluxForcingStart)/FluxForcingPeriod) + 1
153 IF ( atempFile .NE. ' ' ) THEN
154 iEnd = ILNBLNK( atempFile ) - 4
155 WRITE(fName,'(A,I4.4)') atempFile(1:iEnd), CurrentYear
156 CALL READ_REC_XY_RS( fName,atemp0,iRec ,myIter,myThid )
157 CALL READ_REC_XY_RS( fName,atemp1,iRec+1,myIter,myThid )
158 ENDIF
159 IF ( aqhFile .NE. ' ' ) THEN
160 iEnd = ILNBLNK( aqhFile ) - 4
161 WRITE(fName,'(A,I4.4)') aqhFile(1:iEnd), CurrentYear
162 CALL READ_REC_XY_RS( fName,aqh0,iRec ,myIter,myThid )
163 CALL READ_REC_XY_RS( fName,aqh1,iRec+1,myIter,myThid )
164 ENDIF
165 IF ( lwdownFile .NE. ' ' ) THEN
166 iEnd = ILNBLNK( lwdownFile ) - 4
167 WRITE(fName,'(A,I4.4)') lwdownFile(1:iEnd), CurrentYear
168 CALL READ_REC_XY_RS( fName,lwdown0,iRec ,myIter,myThid )
169 CALL READ_REC_XY_RS( fName,lwdown1,iRec+1,myIter,myThid )
170 ENDIF
171 IF ( swdownFile .NE. ' ' ) THEN
172 iEnd = ILNBLNK( swdownFile ) - 4
173 WRITE(fName,'(A,I4.4)') swdownFile(1:iEnd), CurrentYear
174 CALL READ_REC_XY_RS( fName,swdown0,iRec ,myIter,myThid )
175 CALL READ_REC_XY_RS( fName,swdown1,iRec+1,myIter,myThid )
176 ENDIF
177 IF ( precipFile .NE. ' ' ) THEN
178 iEnd = ILNBLNK( precipFile ) - 4
179 WRITE(fName,'(A,I4.4)') precipFile(1:iEnd), CurrentYear
180 CALL READ_REC_XY_RS( fName,precip0,iRec ,myIter,myThid )
181 CALL READ_REC_XY_RS( fName,precip1,iRec+1,myIter,myThid )
182 ENDIF
183 IF ( evapFile .NE. ' ' ) THEN
184 iEnd = ILNBLNK( evapFile ) - 4
185 WRITE(fName,'(A,I4.4)') evapFile(1:iEnd), CurrentYear
186 CALL READ_REC_XY_RS( fName,evap0,iRec ,myIter,myThid )
187 CALL READ_REC_XY_RS( fName,evap1,iRec+1,myIter,myThid )
188 ENDIF
189 IF ( runoffFile .NE. ' ' ) THEN
190 iEnd = ILNBLNK( runoffFile ) - 4
191 WRITE(fName,'(A,I4.4)') runoffFile(1:iEnd), CurrentYear
192 CALL READ_REC_XY_RS( fName,runoff0,iRec ,myIter,myThid )
193 CALL READ_REC_XY_RS( fName,runoff1,iRec+1,myIter,myThid )
194 ENDIF
195
196 iRec = int((YearTime-SSTforcingStart)/SSTforcingPeriod) + 1
197 IF ( thetaClimFile .NE. ' ' ) THEN
198 iEnd = ILNBLNK( thetaClimFile ) - 2
199 WRITE(fName,'(A,I2.2)') thetaClimFile(1:iEnd), CurrentYear2
200 CALL READ_REC_XY_RS( fName,SSTsi0,iRec ,myIter,myThid )
201 CALL READ_REC_XY_RS( fName,SSTsi1,iRec+1,myIter,myThid )
202 ENDIF
203
204 iRec = int((YearTime-SSSforcingStart)/SSSforcingPeriod) + 1
205 IF ( saltClimFile .NE. ' ' ) THEN
206 CALL READ_REC_XY_RS( saltClimFile,SSSsi0,iRec ,myIter,myThid )
207 CALL READ_REC_XY_RS( saltClimFile,SSSsi1,iRec+1,myIter,myThid )
208 ENDIF
209
210 _END_MASTER(myThid)
211
212 _EXCH_XY_R4( uwind0, myThid )
213 _EXCH_XY_R4( uwind1, myThid )
214 _EXCH_XY_R4( vwind0, myThid )
215 _EXCH_XY_R4( vwind1, myThid )
216 _EXCH_XY_R4( atemp0, myThid )
217 _EXCH_XY_R4( atemp1, myThid )
218 _EXCH_XY_R4( aqh0, myThid )
219 _EXCH_XY_R4( aqh1, myThid )
220 _EXCH_XY_R4( lwdown0, myThid )
221 _EXCH_XY_R4( lwdown1, myThid )
222 _EXCH_XY_R4( swdown0, myThid )
223 _EXCH_XY_R4( swdown1, myThid )
224 _EXCH_XY_R4( precip0, myThid )
225 _EXCH_XY_R4( precip1, myThid )
226 _EXCH_XY_R4( evap0, myThid )
227 _EXCH_XY_R4( evap1, myThid )
228 _EXCH_XY_R4( runoff0, myThid )
229 _EXCH_XY_R4( runoff1, myThid )
230 _EXCH_XY_R4( SSTsi0, myThid )
231 _EXCH_XY_R4( SSTsi1, myThid )
232 _EXCH_XY_R4( SSSsi0, myThid )
233 _EXCH_XY_R4( SSSsi1, myThid )
234
235 ENDIF
236
237 C-- Now calculate whether if it is time to update wind speed arrays
238 iRec = int((YearTime-WindForcingStart)/WindForcingPeriod) + 2
239 aWghtWind = mod(YearTime-WindForcingStart,WindForcingPeriod) /
240 & WindForcingPeriod
241 bWghtWind=ONE-aWghtWind
242 IF ( aWghtWind .EQ. 0 ) THEN
243 _BEGIN_MASTER(myThid)
244 write(0,*)
245 & 'S/R SEAICE_GET_FORCING: reading winds',myTime,myIter
246 IF ( uwindFile .NE. ' ' ) THEN
247 iEnd = ILNBLNK( uwindFile ) - 2
248 WRITE(fName,'(A,I2.2)') uwindFile(1:iEnd), CurrentYear2
249 IF (wind0_is_first) THEN
250 CALL READ_REC_XY_RS( fName,uwind0,iRec,myIter,myThid )
251 ELSE
252 CALL READ_REC_XY_RS( fName,uwind1,iRec,myIter,myThid )
253 ENDIF
254 ENDIF
255 IF ( vwindFile .NE. ' ' ) THEN
256 iEnd = ILNBLNK( vwindFile ) - 2
257 WRITE(fName,'(A,I2.2)') vwindFile(1:iEnd), CurrentYear2
258 IF (wind0_is_first) THEN
259 CALL READ_REC_XY_RS( fName,vwind0,iRec,myIter,myThid )
260 ELSE
261 CALL READ_REC_XY_RS( fName,vwind1,iRec,myIter,myThid )
262 ENDIF
263 ENDIF
264 _END_MASTER(myThid)
265 IF (wind0_is_first) THEN
266 _EXCH_XY_R4( uwind0, myThid )
267 _EXCH_XY_R4( vwind0, myThid )
268 wind0_is_first=.FALSE.
269 ELSE
270 _EXCH_XY_R4( uwind1, myThid )
271 _EXCH_XY_R4( vwind1, myThid )
272 wind0_is_first=.TRUE.
273 ENDIF
274 ENDIF
275
276 C-- Now calculate whether if it is time to update heat and freshwater flux
277 iRec = int((YearTime-FluxForcingStart)/FluxForcingPeriod) + 2
278 aWghtFlux = mod(YearTime-FluxForcingStart,FluxForcingPeriod) /
279 & FluxForcingPeriod
280 bWghtFlux=ONE-aWghtFlux
281 IF ( aWghtFlux .EQ. 0 ) THEN
282 _BEGIN_MASTER(myThid)
283 write(0,*)
284 & 'S/R SEAICE_GET_FORCING: reading fluxes',myTime,myIter
285 IF ( atempFile .NE. ' ' ) THEN
286 iEnd = ILNBLNK( atempFile ) - 4
287 WRITE(fName,'(A,I4.4)') atempFile(1:iEnd), CurrentYear
288 IF (flux0_is_first) THEN
289 CALL READ_REC_XY_RS( fName,atemp0,iRec,myIter,myThid )
290 ELSE
291 CALL READ_REC_XY_RS( fName,atemp1,iRec,myIter,myThid )
292 ENDIF
293 ENDIF
294 IF ( aqhFile .NE. ' ' ) THEN
295 iEnd = ILNBLNK( aqhFile ) - 4
296 WRITE(fName,'(A,I4.4)') aqhFile(1:iEnd), CurrentYear
297 IF (flux0_is_first) THEN
298 CALL READ_REC_XY_RS( fName,aqh0,iRec,myIter,myThid )
299 ELSE
300 CALL READ_REC_XY_RS( fName,aqh1,iRec,myIter,myThid )
301 ENDIF
302 ENDIF
303 IF ( lwdownFile .NE. ' ' ) THEN
304 iEnd = ILNBLNK( lwdownFile ) - 4
305 WRITE(fName,'(A,I4.4)') lwdownFile(1:iEnd), CurrentYear
306 IF (flux0_is_first) THEN
307 CALL READ_REC_XY_RS( fName,lwdown0,iRec,myIter,myThid )
308 ELSE
309 CALL READ_REC_XY_RS( fName,lwdown1,iRec,myIter,myThid )
310 ENDIF
311 ENDIF
312 IF ( swdownFile .NE. ' ' ) THEN
313 iEnd = ILNBLNK( swdownFile ) - 4
314 WRITE(fName,'(A,I4.4)') swdownFile(1:iEnd), CurrentYear
315 IF (flux0_is_first) THEN
316 CALL READ_REC_XY_RS( fName,swdown0,iRec,myIter,myThid )
317 ELSE
318 CALL READ_REC_XY_RS( fName,swdown1,iRec,myIter,myThid )
319 ENDIF
320 ENDIF
321 IF ( precipFile .NE. ' ' ) THEN
322 iEnd = ILNBLNK( precipFile ) - 4
323 WRITE(fName,'(A,I4.4)') precipFile(1:iEnd), CurrentYear
324 IF (flux0_is_first) THEN
325 CALL READ_REC_XY_RS( fName,precip0,iRec,myIter,myThid )
326 ELSE
327 CALL READ_REC_XY_RS( fName,precip1,iRec,myIter,myThid )
328 ENDIF
329 ENDIF
330 IF ( evapFile .NE. ' ' ) THEN
331 iEnd = ILNBLNK( evapFile ) - 4
332 WRITE(fName,'(A,I4.4)') evapFile(1:iEnd), CurrentYear
333 IF (flux0_is_first) THEN
334 CALL READ_REC_XY_RS( fName,evap0,iRec,myIter,myThid )
335 ELSE
336 CALL READ_REC_XY_RS( fName,evap1,iRec,myIter,myThid )
337 ENDIF
338 ENDIF
339 IF ( runoffFile .NE. ' ' ) THEN
340 iEnd = ILNBLNK( runoffFile ) - 4
341 WRITE(fName,'(A,I4.4)') runoffFile(1:iEnd), CurrentYear
342 IF (flux0_is_first) THEN
343 CALL READ_REC_XY_RS( fName,runoff0,iRec,myIter,myThid )
344 ELSE
345 CALL READ_REC_XY_RS( fName,runoff1,iRec,myIter,myThid )
346 ENDIF
347 ENDIF
348 _END_MASTER(myThid)
349 IF (flux0_is_first) THEN
350 _EXCH_XY_R4(atemp0, myThid )
351 _EXCH_XY_R4(aqh0, myThid )
352 _EXCH_XY_R4(lwdown0, myThid )
353 _EXCH_XY_R4(swdown0, myThid )
354 _EXCH_XY_R4(precip0, myThid )
355 _EXCH_XY_R4(evap0, myThid )
356 _EXCH_XY_R4(runoff0, myThid )
357 flux0_is_first=.FALSE.
358 ELSE
359 _EXCH_XY_R4(atemp1, myThid )
360 _EXCH_XY_R4(aqh1, myThid )
361 _EXCH_XY_R4(lwdown1, myThid )
362 _EXCH_XY_R4(swdown1, myThid )
363 _EXCH_XY_R4(precip1, myThid )
364 _EXCH_XY_R4(evap1, myThid )
365 _EXCH_XY_R4(runoff1, myThid )
366 flux0_is_first=.TRUE.
367 ENDIF
368 ENDIF
369
370 C-- Now calculate whether if it is time to update SST array
371 iRec = int((YearTime-SSTforcingStart)/SSTforcingPeriod) + 2
372 aWghtSST = mod(YearTime-SSTforcingStart,SSTforcingPeriod) /
373 & SSTforcingPeriod
374 bWghtSST=ONE-aWghtSST
375 IF ( aWghtSST .EQ. 0 .AND. thetaClimFile .NE. ' ' ) THEN
376 _BEGIN_MASTER(myThid)
377 write(0,*) 'S/R SEAICE_GET_FORCING: reading SST',myTime,myIter
378 iEnd = ILNBLNK( thetaClimFile ) - 2
379 WRITE(fName,'(A,I2.2)') thetaClimFile(1:iEnd), CurrentYear2
380 IF (SST0_is_first) THEN
381 CALL READ_REC_XY_RS( fName,SSTsi0,iRec,myIter,myThid )
382 ELSE
383 CALL READ_REC_XY_RS( fName,SSTsi1,iRec,myIter,myThid )
384 ENDIF
385 _END_MASTER(myThid)
386 IF (SST0_is_first) THEN
387 _EXCH_XY_R4( SSTsi0, myThid )
388 SST0_is_first=.FALSE.
389 ELSE
390 _EXCH_XY_R4( SSTsi1, myThid )
391 SST0_is_first=.TRUE.
392 ENDIF
393 ENDIF
394
395 C-- Now calculate whether if it is time to update SSS array
396 iRec = int((YearTime-SSSforcingStart)/SSSforcingPeriod) + 2
397 aWghtSSS = mod(YearTime-SSSforcingStart,SSSforcingPeriod) /
398 & SSSforcingPeriod
399 bWghtSSS=ONE-aWghtSSS
400 IF ( aWghtSSS .EQ. 0 .AND. saltClimFile .NE. ' ') THEN
401 _BEGIN_MASTER(myThid)
402 write(0,*) 'S/R SEAICE_GET_FORCING: reading SSS',myTime,myIter
403 IF (SSS0_is_first) THEN
404 CALL READ_REC_XY_RS( saltClimFile,SSSsi0,iRec,myIter,myThid )
405 ELSE
406 CALL READ_REC_XY_RS( saltClimFile,SSSsi1,iRec,myIter,myThid )
407 ENDIF
408 _END_MASTER(myThid)
409 IF (SSS0_is_first) THEN
410 _EXCH_XY_R4( SSSsi0, myThid )
411 SSS0_is_first=.FALSE.
412 ELSE
413 _EXCH_XY_R4( SSSsi1, myThid )
414 SSS0_is_first=.TRUE.
415 ENDIF
416 ENDIF
417
418 C-- Time interpolation of wind forcing variables.
419 IF (wind0_is_first) THEN
420 DO bj = myByLo(myThid), myByHi(myThid)
421 DO bi = myBxLo(myThid), myBxHi(myThid)
422 DO j=1-Oly,sNy+Oly
423 DO i=1-Olx,sNx+Olx
424 uwind(i,j,bi,bj) = bWghtWind * uwind0(i,j,bi,bj) +
425 & aWghtWind * uwind1(i,j,bi,bj)
426 vwind(i,j,bi,bj) = bWghtWind * vwind0(i,j,bi,bj) +
427 & aWghtWind * vwind1(i,j,bi,bj)
428 ENDDO
429 ENDDO
430 ENDDO
431 ENDDO
432 ELSE
433 DO bj = myByLo(myThid), myByHi(myThid)
434 DO bi = myBxLo(myThid), myBxHi(myThid)
435 DO j=1-Oly,sNy+Oly
436 DO i=1-Olx,sNx+Olx
437 uwind(i,j,bi,bj) = aWghtWind * uwind0(i,j,bi,bj) +
438 & bWghtWind * uwind1(i,j,bi,bj)
439 vwind(i,j,bi,bj) = aWghtWind * vwind0(i,j,bi,bj) +
440 & bWghtWind * vwind1(i,j,bi,bj)
441 ENDDO
442 ENDDO
443 ENDDO
444 ENDDO
445 ENDIF
446
447 C-- Time interpolation of flux forcing variables.
448 IF (flux0_is_first) THEN
449 DO bj = myByLo(myThid), myByHi(myThid)
450 DO bi = myBxLo(myThid), myBxHi(myThid)
451 DO j=1-Oly,sNy+Oly
452 DO i=1-Olx,sNx+Olx
453 atemp(i,j,bi,bj) = bWghtFlux * atemp0(i,j,bi,bj) +
454 & aWghtFlux * atemp1(i,j,bi,bj)
455 aqh(i,j,bi,bj) = bWghtFlux * aqh0(i,j,bi,bj) +
456 & aWghtFlux * aqh1(i,j,bi,bj)
457 lwdown(i,j,bi,bj) = bWghtFlux * lwdown0(i,j,bi,bj) +
458 & aWghtFlux * lwdown1(i,j,bi,bj)
459 swdown(i,j,bi,bj) = bWghtFlux * swdown0(i,j,bi,bj) +
460 & aWghtFlux * swdown1(i,j,bi,bj)
461 precip(i,j,bi,bj) = bWghtFlux * precip0(i,j,bi,bj) +
462 & aWghtFlux * precip1(i,j,bi,bj)
463 evap(i,j,bi,bj) = bWghtFlux * evap0(i,j,bi,bj) +
464 & aWghtFlux * evap1(i,j,bi,bj)
465 runoff(i,j,bi,bj) = bWghtFlux * runoff0(i,j,bi,bj) +
466 & aWghtFlux * runoff1(i,j,bi,bj)
467 ENDDO
468 ENDDO
469 ENDDO
470 ENDDO
471 ELSE
472 DO bj = myByLo(myThid), myByHi(myThid)
473 DO bi = myBxLo(myThid), myBxHi(myThid)
474 DO j=1-Oly,sNy+Oly
475 DO i=1-Olx,sNx+Olx
476 atemp(i,j,bi,bj) = aWghtFlux * atemp0(i,j,bi,bj) +
477 & bWghtFlux * atemp1(i,j,bi,bj)
478 aqh(i,j,bi,bj) = aWghtFlux * aqh0(i,j,bi,bj) +
479 & bWghtFlux * aqh1(i,j,bi,bj)
480 lwdown(i,j,bi,bj) = aWghtFlux * lwdown0(i,j,bi,bj) +
481 & bWghtFlux * lwdown1(i,j,bi,bj)
482 swdown(i,j,bi,bj) = aWghtFlux * swdown0(i,j,bi,bj) +
483 & bWghtFlux * swdown1(i,j,bi,bj)
484 precip(i,j,bi,bj) = aWghtFlux * precip0(i,j,bi,bj) +
485 & bWghtFlux * precip1(i,j,bi,bj)
486 evap(i,j,bi,bj) = aWghtFlux * evap0(i,j,bi,bj) +
487 & bWghtFlux * evap1(i,j,bi,bj)
488 runoff(i,j,bi,bj) = aWghtFlux * runoff0(i,j,bi,bj) +
489 & bWghtFlux * runoff1(i,j,bi,bj)
490 ENDDO
491 ENDDO
492 ENDDO
493 ENDDO
494 ENDIF
495
496 C-- Time interpolation of SSS forcing variables.
497 IF (SSS0_is_first) THEN
498 DO bj = myByLo(myThid), myByHi(myThid)
499 DO bi = myBxLo(myThid), myBxHi(myThid)
500 DO j=1-Oly,sNy+Oly
501 DO i=1-Olx,sNx+Olx
502 SSS(i,j,bi,bj) = bWghtSSS * SSSsi0(i,j,bi,bj) +
503 & aWghtSSS * SSSsi1(i,j,bi,bj)
504 ENDDO
505 ENDDO
506 ENDDO
507 ENDDO
508 ELSE
509 DO bj = myByLo(myThid), myByHi(myThid)
510 DO bi = myBxLo(myThid), myBxHi(myThid)
511 DO j=1-Oly,sNy+Oly
512 DO i=1-Olx,sNx+Olx
513 SSS(i,j,bi,bj) = aWghtSSS * SSSsi0(i,j,bi,bj) +
514 & bWghtSSS * SSSsi1(i,j,bi,bj)
515 ENDDO
516 ENDDO
517 ENDDO
518 ENDDO
519 ENDIF
520
521 C-- Time interpolation of SST forcing variables.
522 IF (SST0_is_first) THEN
523 DO bj = myByLo(myThid), myByHi(myThid)
524 DO bi = myBxLo(myThid), myBxHi(myThid)
525 DO j=1-Oly,sNy+Oly
526 DO i=1-Olx,sNx+Olx
527 SST(i,j,bi,bj) = bWghtSST * SSTsi0(i,j,bi,bj) +
528 & aWghtSST * SSTsi1(i,j,bi,bj)
529 ENDDO
530 ENDDO
531 ENDDO
532 ENDDO
533 ELSE
534 DO bj = myByLo(myThid), myByHi(myThid)
535 DO bi = myBxLo(myThid), myBxHi(myThid)
536 DO j=1-Oly,sNy+Oly
537 DO i=1-Olx,sNx+Olx
538 SST(i,j,bi,bj) = aWghtSST * SSTsi0(i,j,bi,bj) +
539 & bWghtSST * SSTsi1(i,j,bi,bj)
540 ENDDO
541 ENDDO
542 ENDDO
543 ENDDO
544 ENDIF
545
546 #endif /* SEAICE_EXTERNAL_FORCING */
547 #endif /* ALLOW_SEAICE */
548
549 RETURN
550 END
551
552
553 C=======================================================================
554
555 SUBROUTINE INIT_ARRAY_RS( arr, initValue, myThid )
556 C This routine sets the RS array arr to initValue
557 IMPLICIT NONE
558 C === Global variables ===
559 #include "SIZE.h"
560 #include "EEPARAMS.h"
561 C === Arguments ===
562 _RS arr (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
563 _RS initValue
564 INTEGER myThid
565
566 #ifdef ALLOW_SEAICE
567 #ifndef SEAICE_EXTERNAL_FORCING
568
569 C === Local variables ===
570 INTEGER i,j,bi,bj
571 C
572 DO bj = myByLo(myThid), myByHi(myThid)
573 DO bi = myBxLo(myThid), myBxHi(myThid)
574 DO j = 1-Oly,sNy+Oly
575 DO i = 1-Olx,sNx+Olx
576 arr(i,j,bi,bj) = initValue
577 ENDDO
578 ENDDO
579 ENDDO
580 ENDDO
581
582 #endif /* SEAICE_EXTERNAL_FORCING */
583 #endif /* ALLOW_SEAICE */
584
585 RETURN
586 END

  ViewVC Help
Powered by ViewVC 1.1.22