/[MITgcm]/MITgcm/pkg/exf/exf_set_gen.F
ViewVC logotype

Annotation of /MITgcm/pkg/exf/exf_set_gen.F

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


Revision 1.25 - (hide annotations) (download)
Tue Jan 29 11:25:53 2008 UTC (16 years, 3 months ago) by dimitri
Branch: MAIN
CVS Tags: checkpoint60, checkpoint61, checkpoint59q, checkpoint59p, checkpoint59r, checkpoint59o, checkpoint59n, checkpoint61f, checkpoint61g, checkpoint61d, checkpoint61e, checkpoint61b, checkpoint61c, checkpoint61a, checkpoint61n, checkpoint61o, checkpoint61l, checkpoint61m, checkpoint61j, checkpoint61k, checkpoint61h, checkpoint61i, checkpoint61t, checkpoint61u, checkpoint61r, checkpoint61s, checkpoint61p, checkpoint61q
Changes since 1.24: +1 -4 lines
Completed mods to exf_getffieldrec.F to properly deal
with year transitions for useExfYearlyFields.

1 dimitri 1.25 C $Header: /u/gcmpack/MITgcm/pkg/exf/exf_set_gen.F,v 1.24 2008/01/25 16:02:56 mlosch Exp $
2 jmc 1.18 C $Name: $
3    
4 edhill 1.7 #include "EXF_OPTIONS.h"
5 heimbach 1.2
6     subroutine exf_set_gen(
7 heimbach 1.10 & genfile, genstartdate, genperiod,
8 heimbach 1.13 & exf_inscal_gen, genremove_intercept, genremove_slope,
9 dimitri 1.3 & genfld, gen0, gen1, genmask,
10     #ifdef USE_EXF_INTERPOLATION
11     & gen_lon0, gen_lon_inc, gen_lat0, gen_lat_inc,
12 dimitri 1.11 & gen_nlon, gen_nlat, gen_xout, gen_yout, interp_method,
13 dimitri 1.3 #endif
14 heimbach 1.13 & mytime, myiter, mythid )
15 heimbach 1.2
16     c ==================================================================
17     c SUBROUTINE exf_set_gen
18     c ==================================================================
19     c
20     c o set external forcing gen
21     c
22     c started: Ralf.Giering@FastOpt.de 25-Mai-2000
23     c changed: heimbach@mit.edu 10-Jan-2002
24 dimitri 1.4 c 20-Dec-2002: mods for pkg/seaice, menemenlis@jpl.nasa.gov
25 heimbach 1.2 c heimbach@mit.edu: totally re-organized exf_set_...
26     c replaced all routines by one generic routine
27 dimitri 1.4 c 5-Aug-2003: added USE_EXF_INTERPOLATION for arbitrary
28     c input grid capability
29 dimitri 1.15 c 11-Dec-2006 added time-mean and monthly-mean climatology options
30     c genperiod=0 means input file is one time-constant field
31     c genperiod=-12 means input file contains 12 monthly means
32 heimbach 1.2
33     c ==================================================================
34     c SUBROUTINE exf_set_gen
35     c ==================================================================
36    
37     implicit none
38    
39     c == global variables ==
40    
41     #include "EEPARAMS.h"
42     #include "SIZE.h"
43 heimbach 1.13 #include "PARAMS.h"
44 heimbach 1.2 #include "GRID.h"
45    
46 jmc 1.18 #include "EXF_PARAM.h"
47     #include "EXF_CONSTANTS.h"
48 heimbach 1.2
49     c == routine arguments ==
50    
51 heimbach 1.13 _RL genstartdate, genperiod
52     _RL exf_inscal_gen
53     _RL genremove_intercept, genremove_slope
54     _RL genfld(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
55     _RL gen0 (1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
56     _RL gen1 (1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
57 heimbach 1.2 character*1 genmask
58 dimitri 1.16 character*(128) genfile
59 heimbach 1.13 _RL mytime
60     integer myiter
61 heimbach 1.2 integer mythid
62 dimitri 1.16
63 dimitri 1.3 #ifdef USE_EXF_INTERPOLATION
64 dimitri 1.4 c gen_lon_0 ,gen_lat_0 :: longitude and latitude of SouthWest
65     c corner of global input grid
66     c gen_nlon, gen_nlat :: input x-grid and y-grid size
67     c gen_lon_inc :: scalar x-grid increment
68     c gen_lat_inc :: vector y-grid increments
69     c gen_xout, gen_yout :: coordinates for output grid
70 dimitri 1.3 _RL gen_lon0, gen_lon_inc
71     _RL gen_lat0, gen_lat_inc(MAX_LAT_INC)
72     INTEGER gen_nlon, gen_nlat
73 dimitri 1.4 _RS gen_xout (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
74     _RS gen_yout (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
75 dimitri 1.11 integer interp_method
76 dimitri 1.16 #endif /* USE_EXF_INTERPOLATION */
77 heimbach 1.2
78     c == local variables ==
79    
80     logical first, changed
81     integer count0, count1
82 heimbach 1.10 integer year0, year1
83 dimitri 1.16 integer bi, bj, i, j, il
84 heimbach 1.2 _RL fac
85 dimitri 1.16 character*(128) genfile0, genfile1
86 heimbach 1.10
87     c == external ==
88    
89     integer ilnblnk
90     external ilnblnk
91 heimbach 1.2
92     c == end of interface ==
93    
94 dimitri 1.16 if ( genfile .NE. ' ' .and. genperiod .ne. 0 ) then
95 heimbach 1.2
96 heimbach 1.10 cph(
97     cph-exf-print if (genfile .EQ. hfluxfile) year0 = 3000
98     cph)
99 dimitri 1.15
100 dimitri 1.16 if ( genperiod .eq. -12 ) then
101 dimitri 1.15 c genperiod=-12 means input file contains 12 monthly means
102     c record numbers are assumed 1 to 12 corresponding to
103     c Jan. through Dec.
104     call cal_GetMonthsRec(
105     O fac, first, changed,
106     O count0, count1,
107     I mytime, myiter, mythid
108     & )
109    
110     elseif ( genperiod .lt. 0 ) then
111     print *, 'genperiod is out of range'
112 dimitri 1.23 STOP 'ABNORMAL END: S/R EXF_SET_GEN'
113 dimitri 1.15
114     else
115 heimbach 1.2 c get record numbers and interpolation factor for gen
116 dimitri 1.15 call exf_GetFFieldRec(
117     I genstartdate, genperiod
118     I , useExfYearlyFields
119     O , fac, first, changed
120     O , count0, count1, year0, year1
121     I , mytime, myiter, mythid
122     & )
123    
124     endif
125 heimbach 1.2
126     if ( first ) then
127 mlosch 1.24 call exf_GetYearlyFieldName(
128     I useExfYearlyFields, twoDigitYear, genperiod, year0,
129     I genfile,
130     O genfile0,
131     I mytime, myiter, mythid )
132 dimitri 1.15
133 dimitri 1.3 #ifdef USE_EXF_INTERPOLATION
134 heimbach 1.10 call exf_interp( genfile0, exf_iprec
135 dimitri 1.4 & , gen1, count0, gen_xout, gen_yout
136 dimitri 1.3 & , gen_lon0,gen_lon_inc
137     & , gen_lat0,gen_lat_inc
138 dimitri 1.5 & , gen_nlon,gen_nlat,interp_method,mythid
139 dimitri 1.3 & )
140     #else
141 jmc 1.22 _BARRIER
142 heimbach 1.10 call mdsreadfield( genfile0, exf_iprec, exf_yftype, 1
143 heimbach 1.2 & , gen1, count0, mythid
144     & )
145 jmc 1.22 _BARRIER
146 dimitri 1.16 #endif /* USE_EXF_INTERPOLATION */
147 heimbach 1.2
148     if (exf_yftype .eq. 'RL') then
149     call exf_filter_rl( gen1, genmask, mythid )
150     else
151     call exf_filter_rs( gen1, genmask, mythid )
152     end if
153     endif
154    
155     if (( first ) .or. ( changed )) then
156     call exf_SwapFFields( gen0, gen1, mythid )
157    
158 mlosch 1.24 call exf_GetYearlyFieldName(
159     I useExfYearlyFields, twoDigitYear, genperiod, year1,
160     I genfile,
161     O genfile1,
162     I mytime, myiter, mythid )
163    
164 dimitri 1.3 #ifdef USE_EXF_INTERPOLATION
165 heimbach 1.10 call exf_interp( genfile1, exf_iprec
166 dimitri 1.4 & , gen1, count1, gen_xout, gen_yout
167 dimitri 1.3 & , gen_lon0,gen_lon_inc
168     & , gen_lat0,gen_lat_inc
169 dimitri 1.5 & , gen_nlon,gen_nlat,interp_method,mythid
170 dimitri 1.3 & )
171     #else
172 jmc 1.22 _BARRIER
173 heimbach 1.10 call mdsreadfield( genfile1, exf_iprec, exf_yftype, 1
174 heimbach 1.2 & , gen1, count1, mythid
175     & )
176 jmc 1.22 _BARRIER
177 dimitri 1.16 #endif /* USE_EXF_INTERPOLATION */
178 heimbach 1.2
179     if (exf_yftype .eq. 'RL') then
180     call exf_filter_rl( gen1, genmask, mythid )
181     else
182     call exf_filter_rs( gen1, genmask, mythid )
183     end if
184     endif
185    
186     c Loop over tiles.
187     do bj = mybylo(mythid),mybyhi(mythid)
188 heimbach 1.13 do bi = mybxlo(mythid),mybxhi(mythid)
189     do j = 1,sny
190     do i = 1,snx
191     c Interpolate linearly onto the time.
192     genfld(i,j,bi,bj) = exf_inscal_gen * (
193     & fac * gen0(i,j,bi,bj) +
194     & (exf_one - fac) * gen1(i,j,bi,bj) )
195     genfld(i,j,bi,bj) =
196     & genfld(i,j,bi,bj) -
197     & exf_inscal_gen * ( genremove_intercept +
198     & genremove_slope*(mytime-starttime) )
199 heimbach 1.2 enddo
200 heimbach 1.20 enddo
201     enddo
202 heimbach 1.2 enddo
203    
204     endif
205    
206 jmc 1.22 RETURN
207     END
208 heimbach 1.2
209 dimitri 1.16 C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
210     C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
211 heimbach 1.2
212     subroutine exf_init_gen (
213 dimitri 1.17 & genfile, genperiod, exf_inscal_gen, genmask,
214 dimitri 1.16 & genconst, genfld, gen0, gen1,
215     #ifdef USE_EXF_INTERPOLATION
216     & gen_lon0, gen_lon_inc, gen_lat0, gen_lat_inc,
217     & gen_nlon, gen_nlat, gen_xout, gen_yout, interp_method,
218     #endif
219     & mythid )
220    
221 heimbach 1.2
222     c ==================================================================
223     c SUBROUTINE exf_init_gen
224     c ==================================================================
225     c
226     c o
227     c
228     c started: Ralf.Giering@FastOpt.de 25-Mai-2000
229     c changed: heimbach@mit.edu 10-Jan-2002
230     c heimbach@mit.edu: totally re-organized exf_set_...
231     c replaced all routines by one generic routine
232     c
233     c ==================================================================
234     c SUBROUTINE exf_init_gen
235     c ==================================================================
236    
237     implicit none
238    
239     c == global variables ==
240    
241     #include "EEPARAMS.h"
242     #include "SIZE.h"
243    
244 jmc 1.18 #include "EXF_PARAM.h"
245 heimbach 1.2
246     c == routine arguments ==
247    
248 dimitri 1.17 _RL genperiod, exf_inscal_gen, genconst
249 heimbach 1.2 _RL genfld(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
250     _RL gen0 (1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
251     _RL gen1 (1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
252 dimitri 1.16 character*1 genmask
253     character*(128) genfile
254 heimbach 1.2 integer mythid
255    
256 dimitri 1.16 #ifdef USE_EXF_INTERPOLATION
257     c gen_lon_0 ,gen_lat_0 :: longitude and latitude of SouthWest
258     c corner of global input grid
259     c gen_nlon, gen_nlat :: input x-grid and y-grid size
260     c gen_lon_inc :: scalar x-grid increment
261     c gen_lat_inc :: vector y-grid increments
262     c gen_xout, gen_yout :: coordinates for output grid
263     _RL gen_lon0, gen_lon_inc
264     _RL gen_lat0, gen_lat_inc(MAX_LAT_INC)
265     INTEGER gen_nlon, gen_nlat
266     _RS gen_xout (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
267     _RS gen_yout (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
268     integer interp_method
269     #endif /* USE_EXF_INTERPOLATION */
270    
271 heimbach 1.2 c == local variables ==
272    
273 dimitri 1.16 integer bi, bj, i, j, count
274 heimbach 1.2
275     c == end of interface ==
276    
277     do bj = mybylo(mythid), mybyhi(mythid)
278     do bi = mybxlo(mythid), mybxhi(mythid)
279 heimbach 1.9 do j = 1-oly, sny+oly
280     do i = 1-olx, snx+olx
281 heimbach 1.2 genfld(i,j,bi,bj) = genconst
282 heimbach 1.9 gen0(i,j,bi,bj) = genconst
283     gen1(i,j,bi,bj) = genconst
284 heimbach 1.2 enddo
285     enddo
286     enddo
287     enddo
288    
289 dimitri 1.17 if ( genfile .NE. ' ' .and. genperiod .eq. 0. ) then
290 dimitri 1.16 count = 1
291    
292     #ifdef USE_EXF_INTERPOLATION
293     call exf_interp( genfile, exf_iprec
294     & , genfld, count, gen_xout, gen_yout
295     & , gen_lon0,gen_lon_inc
296     & , gen_lat0,gen_lat_inc
297     & , gen_nlon,gen_nlat,interp_method,mythid
298     & )
299     #else
300 jmc 1.22 _BARRIER
301 dimitri 1.16 call mdsreadfield( genfile, exf_iprec, exf_yftype, 1
302     & , genfld, count, mythid
303     & )
304 jmc 1.22 _BARRIER
305 dimitri 1.16 #endif /* USE_EXF_INTERPOLATION */
306    
307     if (exf_yftype .eq. 'RL') then
308     call exf_filter_rl( genfld, genmask, mythid )
309     else
310     call exf_filter_rs( genfld, genmask, mythid )
311     end if
312    
313 dimitri 1.23 c Loop over tiles and scale genfld
314 dimitri 1.16 do bj = mybylo(mythid),mybyhi(mythid)
315     do bi = mybxlo(mythid),mybxhi(mythid)
316     do j = 1,sny
317     do i = 1,snx
318     genfld(i,j,bi,bj) =
319     & exf_inscal_gen * genfld(i,j,bi,bj)
320     enddo
321     enddo
322     enddo
323     enddo
324    
325 heimbach 1.14 endif
326    
327 jmc 1.22 RETURN
328     END

  ViewVC Help
Powered by ViewVC 1.1.22