/[MITgcm]/MITgcm/pkg/cfc/cfc_fields_load.F
ViewVC logotype

Contents of /MITgcm/pkg/cfc/cfc_fields_load.F

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


Revision 1.18 - (show annotations) (download)
Tue Jun 7 21:01:01 2011 UTC (12 years, 11 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint63h, checkpoint63i, checkpoint63j, checkpoint63d, checkpoint63e, checkpoint63f, checkpoint63g, checkpoint63a, checkpoint63b, checkpoint63c, checkpoint63, checkpoint62z
Changes since 1.17: +9 -7 lines
refine debugLevel criteria when printing messages

1 C $Header: /u/gcmpack/MITgcm/pkg/cfc/cfc_fields_load.F,v 1.17 2011/04/17 21:01:36 jmc Exp $
2 C $Name: $
3
4 #include "GCHEM_OPTIONS.h"
5
6 CStartOfInterFace
7 SUBROUTINE CFC_FIELDS_LOAD (
8 I myIter,myTime,myThid)
9
10 C *==========================================================*
11 C | SUBROUTINE CFC_FIELDS_LOAD
12 C *==========================================================*
13
14 IMPLICIT NONE
15
16 C == GLobal variables ==
17 #include "SIZE.h"
18 #include "EEPARAMS.h"
19 #include "PARAMS.h"
20 #include "GRID.h"
21 #include "CFC.h"
22 #ifdef ALLOW_EXF
23 # include "EXF_FIELDS.h"
24 #endif
25 #ifdef ALLOW_SEAICE
26 # include "SEAICE.h"
27 #endif
28
29 C == Routine arguments ==
30 INTEGER myIter
31 _RL myTime
32 INTEGER myThid
33
34 C == Local variables ==
35 INTEGER intimeP, intime0, intime1
36 INTEGER bi, bj, i, j
37 _RL aWght, bWght
38 _RL wind
39
40 IF ( CFC_forcingCycle .GT. 0. _d 0 ) THEN
41
42 C First call requires that we initialize everything to zero for safety
43 cQQQ need to check timing
44 IF ( myIter .EQ. nIter0 ) THEN
45 DO bj = myByLo(myThid), myByHi(myThid)
46 DO bi = myBxLo(myThid), myBxHi(myThid)
47 CFC_ldRec(bi,bj) = 0
48 ENDDO
49 ENDDO
50 CALL LEF_ZERO( wind0,myThid )
51 CALL LEF_ZERO( wind1,myThid )
52 CALL LEF_ZERO( atmosp0,myThid )
53 CALL LEF_ZERO( atmosp1,myThid )
54 CALL LEF_ZERO( ice0,myThid )
55 CALL LEF_ZERO( ice1,myThid )
56 ENDIF
57
58 C-- Now calculate whether it is time to update the forcing arrays
59 CALL GET_PERIODIC_INTERVAL(
60 O intimeP, intime0, intime1, bWght, aWght,
61 I CFC_forcingCycle, CFC_forcingPeriod,
62 I deltaTclock, myTime, myThid )
63
64 bi = myBxLo(myThid)
65 bj = myByLo(myThid)
66 #ifdef ALLOW_DEBUG
67 IF ( debugLevel.GE.debLevB ) THEN
68 _BEGIN_MASTER(myThid)
69 WRITE(standardMessageUnit,'(A,I10,A,4I5,A,2F14.10)')
70 & ' CFC_FIELDS_LOAD,', myIter,
71 & ' : iP,iLd,i0,i1=', intimeP,CFC_ldRec(bi,bj), intime0,intime1,
72 & ' ; Wght=', bWght, aWght
73 _END_MASTER(myThid)
74 ENDIF
75 #endif /* ALLOW_DEBUG */
76
77 #ifdef ALLOW_AUTODIFF_TAMC
78 C- assuming that we call S/R CFC_FIELDS_LOAD at each time-step and
79 C with increasing time, this will catch when we need to load new records;
80 C But with Adjoint run, this is not always the case => might end-up using
81 C the wrong time-records
82 IF ( intime0.NE.intimeP .OR. myIter.EQ.nIter0 ) THEN
83 #else /* ALLOW_AUTODIFF_TAMC */
84 C- Make no assumption on sequence of calls to CFC_FIELDS_LOAD ;
85 C This is the correct formulation (works in Adjoint run).
86 C Unfortunatly, might produce many recomputations <== not used until it is fixed
87 IF ( intime1.NE.CFC_ldRec(bi,bj) ) THEN
88 #endif /* ALLOW_AUTODIFF_TAMC */
89
90 C-- If the above condition is met then we need to read in
91 C data for the period ahead and the period behind myTime.
92 IF ( debugLevel.GE.debLevZero ) THEN
93 _BEGIN_MASTER(myThid)
94 WRITE(standardMessageUnit,'(A,I10,A,2(2I5,A))')
95 & ' CFC_FIELDS_LOAD, it=', myIter,
96 & ' : Reading new data, i0,i1=', intime0, intime1,
97 & ' (prev=', intimeP, CFC_ldRec(bi,bj), ' )'
98 _END_MASTER(myThid)
99 ENDIF
100
101 _BARRIER
102
103 IF ( CFC_windFile .NE. ' ' .AND. .NOT.useEXF ) THEN
104 CALL READ_REC_XY_RS( CFC_windFile,wind0,intime0,
105 & myIter,myThid )
106 CALL READ_REC_XY_RS( CFC_windFile,wind1,intime1,
107 & myIter,myThid )
108 ENDIF
109 IF ( CFC_atmospFile .NE. ' ' ) THEN
110 CALL READ_REC_XY_RS( CFC_atmospFile,atmosp0,intime0,
111 & myIter,myThid )
112 CALL READ_REC_XY_RS( CFC_atmospFile,atmosp1,intime1,
113 & myIter,myThid )
114 ENDIF
115 IF ( CFC_iceFile .NE. ' ' .AND. .NOT.useSEAICE ) THEN
116 CALL READ_REC_XY_RS( CFC_iceFile,ice0,intime0,
117 & myIter,myThid )
118 CALL READ_REC_XY_RS( CFC_iceFile,ice1,intime1,
119 & myIter,myThid )
120 ENDIF
121
122 IF (.NOT.useEXF) THEN
123 _EXCH_XY_RS(wind0, myThid )
124 _EXCH_XY_RS(wind1, myThid )
125 ENDIF
126 _EXCH_XY_RS(atmosp0, myThid )
127 _EXCH_XY_RS(atmosp1, myThid )
128 IF (.NOT.useSEAICE) THEN
129 _EXCH_XY_RS(ice0, myThid )
130 _EXCH_XY_RS(ice1, myThid )
131 ENDIF
132
133 C- save newly loaded time-record
134 DO bj = myByLo(myThid), myByHi(myThid)
135 DO bi = myBxLo(myThid), myBxHi(myThid)
136 CFC_ldRec(bi,bj) = intime1
137 ENDDO
138 ENDDO
139
140 C-- end if-block for loading new time-records
141 ENDIF
142
143 #ifdef ALLOW_EXF
144 IF ( useEXF ) THEN
145 DO bj = myByLo(myThid), myByHi(myThid)
146 DO bi = myBxLo(myThid), myBxHi(myThid)
147 DO j=1-Oly,sNy+Oly
148 DO i=1-Olx,sNx+Olx
149 C sh = max(wspeed,umin), with default umin=0.5m/s
150 C pisvel(i,j,bi,bj)=(0.31 _d 0*wspeed(i,j,bi,bj)**2)/3.6 _d 5
151 pisvel(i,j,bi,bj)=(0.31 _d 0*sh(i,j,bi,bj)**2)/3.6 _d 5
152 ENDDO
153 ENDDO
154 ENDDO
155 ENDDO
156 ELSE
157 #else
158 IF (.TRUE.) THEN
159 #endif /* ALLOW_EXF */
160 DO bj = myByLo(myThid), myByHi(myThid)
161 DO bi = myBxLo(myThid), myBxHi(myThid)
162 DO j=1-Oly,sNy+Oly
163 DO i=1-Olx,sNx+Olx
164 IF ( CFC_windFile .NE. ' ' ) THEN
165 wind = bWght*wind0(i,j,bi,bj)
166 & +aWght*wind1(i,j,bi,bj)
167 ELSE
168 wind = 5. _d 0*maskC(i,j,1,bi,bj)
169 ENDIF
170 c calculate piston velocity
171 c QQ: note - we should have wind speed variance in here
172 c following Wannikof (1992)
173 pisvel(i,j,bi,bj)=(0.31 _d 0*wind**2)/3.6 _d 5
174 ENDDO
175 ENDDO
176 ENDDO
177 ENDDO
178 ENDIF
179 C
180 DO bj = myByLo(myThid), myByHi(myThid)
181 DO bi = myBxLo(myThid), myBxHi(myThid)
182 DO j=1-Oly,sNy+Oly
183 DO i=1-Olx,sNx+Olx
184 IF ( CFC_atmospFile .NE. ' ' ) THEN
185 ATMOSP(i,j,bi,bj) = bWght*atmosp0(i,j,bi,bj)
186 & +aWght*atmosp1(i,j,bi,bj)
187 ELSE
188 ATMOSP(i,j,bi,bj) = maskC(i,j,1,bi,bj)
189 ENDIF
190 ENDDO
191 ENDDO
192 ENDDO
193 ENDDO
194 #ifdef ALLOW_SEAICE
195 IF (useSEAICE) THEN
196 DO bj = myByLo(myThid), myByHi(myThid)
197 DO bi = myBxLo(myThid), myBxHi(myThid)
198 DO j=1-Oly,sNy+Oly
199 DO i=1-Olx,sNx+Olx
200 FIce(I,J,bi,bj) = AREA(I,J,bi,bj)
201 ENDDO
202 ENDDO
203 ENDDO
204 ENDDO
205 ELSE
206 #else
207 IF (.TRUE.) THEN
208 #endif /* ALLOW_SEAICE */
209 DO bj = myByLo(myThid), myByHi(myThid)
210 DO bi = myBxLo(myThid), myBxHi(myThid)
211 DO j=1-Oly,sNy+Oly
212 DO i=1-Olx,sNx+Olx
213 IF ( CFC_iceFile .NE. ' ' ) THEN
214 FIce(i,j,bi,bj) = bWght*ice0(i,j,bi,bj)
215 & +aWght*ice1(i,j,bi,bj)
216 ELSE
217 FIce(i,j,bi,bj) =0. _d 0
218 ENDIF
219 ENDDO
220 ENDDO
221 ENDDO
222 ENDDO
223 ENDIF
224
225 C endif for periodicForcing
226 ENDIF
227
228 RETURN
229 END

  ViewVC Help
Powered by ViewVC 1.1.22