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

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

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


Revision 1.6 - (hide 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 edhill 1.6 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 heimbach 1.2
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 dimitri 1.4 C | o Load atmospheric state and runoff. |
11 heimbach 1.2 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 dimitri 1.4 #ifndef SEAICE_EXTERNAL_FORCING
37 heimbach 1.2
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 dimitri 1.5 _RL year, seconds, YearTime, four
52 heimbach 1.2 INTEGER CurrentYear, CurrentYear2
53     logical done
54     CHARACTER*(MAX_LEN_MBUF) fName
55    
56     C-- Compute CurrentYear and YearTime
57 dimitri 1.5 four = 4.0
58 heimbach 1.2 YearTime = myTime
59     done = .false.
60     do year = StartingYear, EndingYear
61     if( .not. done ) then
62 dimitri 1.5 if( mod(year,four) .eq. 0. ) then
63 heimbach 1.2 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 dimitri 1.3 initValue = ZERO
99 dimitri 1.4 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 dimitri 1.3 initValue = 283. _d 0
104 dimitri 1.4 CALL INIT_ARRAY_RS( atemp0 , initValue, myThid )
105     CALL INIT_ARRAY_RS( atemp1 , initValue, myThid )
106 dimitri 1.3 initValue = 0.005 _d 0
107 dimitri 1.4 CALL INIT_ARRAY_RS( aqh0 , initValue, myThid )
108     CALL INIT_ARRAY_RS( aqh1 , initValue, myThid )
109 dimitri 1.3 initValue = 300. _d 0
110 dimitri 1.5 CALL INIT_ARRAY_RS( lwdown0 , initValue, myThid )
111     CALL INIT_ARRAY_RS( lwdown1 , initValue, myThid )
112 dimitri 1.3 initValue = 200. _d 0
113 dimitri 1.5 CALL INIT_ARRAY_RS( swdown0 , initValue, myThid )
114     CALL INIT_ARRAY_RS( swdown1 , initValue, myThid )
115 dimitri 1.3 initValue = ZERO
116 dimitri 1.4 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 dimitri 1.3 initValue = 35. _d 0
123 dimitri 1.4 CALL INIT_ARRAY_RS( SSSsi0 , initValue, myThid )
124     CALL INIT_ARRAY_RS( SSSsi1 , initValue, myThid )
125 dimitri 1.3 initValue = 10. _d 0
126 dimitri 1.4 CALL INIT_ARRAY_RS( SSTsi0 , initValue, myThid )
127     CALL INIT_ARRAY_RS( SSTsi1 , initValue, myThid )
128 heimbach 1.2
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 dimitri 1.4 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 heimbach 1.2 ENDIF
151    
152     iRec = int((YearTime-FluxForcingStart)/FluxForcingPeriod) + 1
153 dimitri 1.4 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 dimitri 1.5 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 dimitri 1.4 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 heimbach 1.2 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 dimitri 1.4 _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 dimitri 1.5 _EXCH_XY_R4( lwdown0, myThid )
221     _EXCH_XY_R4( lwdown1, myThid )
222     _EXCH_XY_R4( swdown0, myThid )
223     _EXCH_XY_R4( swdown1, myThid )
224 dimitri 1.4 _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 heimbach 1.2
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 dimitri 1.3 bWghtWind=ONE-aWghtWind
242 heimbach 1.2 IF ( aWghtWind .EQ. 0 ) THEN
243     _BEGIN_MASTER(myThid)
244     write(0,*)
245     & 'S/R SEAICE_GET_FORCING: reading winds',myTime,myIter
246 dimitri 1.4 IF ( uwindFile .NE. ' ' ) THEN
247     iEnd = ILNBLNK( uwindFile ) - 2
248     WRITE(fName,'(A,I2.2)') uwindFile(1:iEnd), CurrentYear2
249 heimbach 1.2 IF (wind0_is_first) THEN
250 dimitri 1.4 CALL READ_REC_XY_RS( fName,uwind0,iRec,myIter,myThid )
251 heimbach 1.2 ELSE
252 dimitri 1.4 CALL READ_REC_XY_RS( fName,uwind1,iRec,myIter,myThid )
253 heimbach 1.2 ENDIF
254     ENDIF
255 dimitri 1.4 IF ( vwindFile .NE. ' ' ) THEN
256     iEnd = ILNBLNK( vwindFile ) - 2
257     WRITE(fName,'(A,I2.2)') vwindFile(1:iEnd), CurrentYear2
258 heimbach 1.2 IF (wind0_is_first) THEN
259 dimitri 1.4 CALL READ_REC_XY_RS( fName,vwind0,iRec,myIter,myThid )
260 heimbach 1.2 ELSE
261 dimitri 1.4 CALL READ_REC_XY_RS( fName,vwind1,iRec,myIter,myThid )
262 heimbach 1.2 ENDIF
263     ENDIF
264     _END_MASTER(myThid)
265     IF (wind0_is_first) THEN
266 dimitri 1.4 _EXCH_XY_R4( uwind0, myThid )
267     _EXCH_XY_R4( vwind0, myThid )
268 heimbach 1.2 wind0_is_first=.FALSE.
269     ELSE
270 dimitri 1.4 _EXCH_XY_R4( uwind1, myThid )
271     _EXCH_XY_R4( vwind1, myThid )
272 heimbach 1.2 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 dimitri 1.3 bWghtFlux=ONE-aWghtFlux
281 heimbach 1.2 IF ( aWghtFlux .EQ. 0 ) THEN
282     _BEGIN_MASTER(myThid)
283     write(0,*)
284     & 'S/R SEAICE_GET_FORCING: reading fluxes',myTime,myIter
285 dimitri 1.4 IF ( atempFile .NE. ' ' ) THEN
286     iEnd = ILNBLNK( atempFile ) - 4
287     WRITE(fName,'(A,I4.4)') atempFile(1:iEnd), CurrentYear
288 heimbach 1.2 IF (flux0_is_first) THEN
289 dimitri 1.4 CALL READ_REC_XY_RS( fName,atemp0,iRec,myIter,myThid )
290 heimbach 1.2 ELSE
291 dimitri 1.4 CALL READ_REC_XY_RS( fName,atemp1,iRec,myIter,myThid )
292 heimbach 1.2 ENDIF
293     ENDIF
294 dimitri 1.4 IF ( aqhFile .NE. ' ' ) THEN
295     iEnd = ILNBLNK( aqhFile ) - 4
296     WRITE(fName,'(A,I4.4)') aqhFile(1:iEnd), CurrentYear
297 heimbach 1.2 IF (flux0_is_first) THEN
298 dimitri 1.4 CALL READ_REC_XY_RS( fName,aqh0,iRec,myIter,myThid )
299 heimbach 1.2 ELSE
300 dimitri 1.4 CALL READ_REC_XY_RS( fName,aqh1,iRec,myIter,myThid )
301 heimbach 1.2 ENDIF
302     ENDIF
303 dimitri 1.5 IF ( lwdownFile .NE. ' ' ) THEN
304     iEnd = ILNBLNK( lwdownFile ) - 4
305     WRITE(fName,'(A,I4.4)') lwdownFile(1:iEnd), CurrentYear
306 heimbach 1.2 IF (flux0_is_first) THEN
307 dimitri 1.5 CALL READ_REC_XY_RS( fName,lwdown0,iRec,myIter,myThid )
308 heimbach 1.2 ELSE
309 dimitri 1.5 CALL READ_REC_XY_RS( fName,lwdown1,iRec,myIter,myThid )
310 heimbach 1.2 ENDIF
311     ENDIF
312 dimitri 1.5 IF ( swdownFile .NE. ' ' ) THEN
313     iEnd = ILNBLNK( swdownFile ) - 4
314     WRITE(fName,'(A,I4.4)') swdownFile(1:iEnd), CurrentYear
315 heimbach 1.2 IF (flux0_is_first) THEN
316 dimitri 1.5 CALL READ_REC_XY_RS( fName,swdown0,iRec,myIter,myThid )
317 heimbach 1.2 ELSE
318 dimitri 1.5 CALL READ_REC_XY_RS( fName,swdown1,iRec,myIter,myThid )
319 heimbach 1.2 ENDIF
320     ENDIF
321 dimitri 1.4 IF ( precipFile .NE. ' ' ) THEN
322     iEnd = ILNBLNK( precipFile ) - 4
323     WRITE(fName,'(A,I4.4)') precipFile(1:iEnd), CurrentYear
324 heimbach 1.2 IF (flux0_is_first) THEN
325 dimitri 1.4 CALL READ_REC_XY_RS( fName,precip0,iRec,myIter,myThid )
326 heimbach 1.2 ELSE
327 dimitri 1.4 CALL READ_REC_XY_RS( fName,precip1,iRec,myIter,myThid )
328 heimbach 1.2 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 dimitri 1.4 _EXCH_XY_R4(atemp0, myThid )
351     _EXCH_XY_R4(aqh0, myThid )
352 dimitri 1.5 _EXCH_XY_R4(lwdown0, myThid )
353     _EXCH_XY_R4(swdown0, myThid )
354 dimitri 1.4 _EXCH_XY_R4(precip0, myThid )
355     _EXCH_XY_R4(evap0, myThid )
356     _EXCH_XY_R4(runoff0, myThid )
357 heimbach 1.2 flux0_is_first=.FALSE.
358     ELSE
359 dimitri 1.4 _EXCH_XY_R4(atemp1, myThid )
360     _EXCH_XY_R4(aqh1, myThid )
361 dimitri 1.5 _EXCH_XY_R4(lwdown1, myThid )
362     _EXCH_XY_R4(swdown1, myThid )
363 dimitri 1.4 _EXCH_XY_R4(precip1, myThid )
364     _EXCH_XY_R4(evap1, myThid )
365     _EXCH_XY_R4(runoff1, myThid )
366 heimbach 1.2 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 dimitri 1.3 bWghtSST=ONE-aWghtSST
375 heimbach 1.2 IF ( aWghtSST .EQ. 0 .AND. thetaClimFile .NE. ' ' ) THEN
376     _BEGIN_MASTER(myThid)
377 dimitri 1.3 write(0,*) 'S/R SEAICE_GET_FORCING: reading SST',myTime,myIter
378 heimbach 1.2 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 dimitri 1.3 bWghtSSS=ONE-aWghtSSS
400 heimbach 1.2 IF ( aWghtSSS .EQ. 0 .AND. saltClimFile .NE. ' ') THEN
401     _BEGIN_MASTER(myThid)
402 dimitri 1.3 write(0,*) 'S/R SEAICE_GET_FORCING: reading SSS',myTime,myIter
403 heimbach 1.2 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 dimitri 1.4 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 heimbach 1.2 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 dimitri 1.4 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 heimbach 1.2 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 dimitri 1.4 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 dimitri 1.5 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 dimitri 1.4 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 heimbach 1.2 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 dimitri 1.4 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 dimitri 1.5 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 dimitri 1.4 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 heimbach 1.2 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 dimitri 1.5 #endif /* SEAICE_EXTERNAL_FORCING */
547     #endif /* ALLOW_SEAICE */
548 heimbach 1.2
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 dimitri 1.4 #ifndef SEAICE_EXTERNAL_FORCING
568 heimbach 1.2
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 dimitri 1.5 #endif /* SEAICE_EXTERNAL_FORCING */
583     #endif /* ALLOW_SEAICE */
584 heimbach 1.2
585     RETURN
586     END

  ViewVC Help
Powered by ViewVC 1.1.22