/[MITgcm]/MITgcm/optim/optim_numbmod.F
ViewVC logotype

Contents of /MITgcm/optim/optim_numbmod.F

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


Revision 1.8 - (show annotations) (download)
Tue Jan 15 16:36:32 2008 UTC (16 years, 3 months ago) by dfer
Branch: MAIN
CVS Tags: checkpoint62v, checkpoint62u, checkpoint62t, checkpoint62c, checkpoint62s, checkpoint62r, checkpoint62q, checkpoint62p, checkpoint62a, checkpoint62g, checkpoint62f, checkpoint62e, checkpoint62d, checkpoint62k, checkpoint62j, checkpoint62i, checkpoint62h, checkpoint62o, checkpoint62n, checkpoint62m, checkpoint62l, checkpoint62w, checkpoint60, checkpoint61, checkpoint62, checkpoint59q, checkpoint59p, checkpoint59r, checkpoint59o, checkpoint59n, checkpoint62b, checkpoint61f, checkpoint61n, checkpoint61q, checkpoint61e, checkpoint61g, checkpoint61d, checkpoint61b, checkpoint61c, checkpoint61a, checkpoint61o, checkpoint61l, checkpoint61m, checkpoint61j, checkpoint61k, checkpoint61h, checkpoint61i, checkpoint61v, checkpoint61w, checkpoint61t, checkpoint61u, checkpoint61r, checkpoint61s, checkpoint61p, checkpoint61z, checkpoint61x, checkpoint61y
Changes since 1.7: +9 -6 lines
Getting rid of expId and #include "ecco.h" and multiple definition of
xx_sst_file and xx_sss_file in optim_numbmod.F.

1
2 cph #ifdef TARGET_CRAY_VECTOR
3 cph # define NML_OPTIM ECCO_OPTIM
4 cph # define NML_ECCO ECCO_PARMS
5 cph #else
6 cph # define NML_OPTIM NML=ECCO_OPTIM
7 cph # define NML_ECCO NML=ECCO_PARMS
8 cph #endif
9
10 c ==================================================================
11 c
12 c optim.F: Routines for doing an off-line optimization after the
13 c ECCO forward and adjoint model have been run.
14 c
15 c numbmod - Returns number of variables.
16 c simul - Mid-level routine that calls the model and its
17 c adjoint
18 c model - Forward model.
19 c admodel - Modified forward model and adjoint model.
20 c initmod - Initialisation routine.
21 c postmod - Final routine that prints results.
22 c
23 c
24 c Documentation:
25 c
26 c The collection of these routines originated mainly from Ralf
27 c Giering. Patrick Heimbach improved and corrected some parts of
28 c the original code. Christian Eckert contributed the interface
29 c to the ECCO release of the MITgcmUV in order to get the off-
30 c line version going. The on-line optimisation uses a simple
31 c example, whereas the off-line version deals with the ECCO
32 c release output. The off-line version can, of course, only
33 c do one optimization step at a time.
34 c
35 c started: Christian Eckert eckert@mit.edu 15-Feb-2000
36 c
37 c - On-line and off-line capability and some cosmetic
38 c changes.
39 c
40 c changed: Patrick Heimbach heimbach@mit.edu 19-Jun-2000
41 c - finished, revised and debugged
42 c
43 c ==================================================================
44
45
46 subroutine optim_numbmod(
47 O nn
48 & )
49
50 c ==================================================================
51 c SUBROUTINE optim_numbmod
52 c ==================================================================
53 c
54 c o Set the number of control variables.
55 c
56 c started: Christian Eckert eckert@mit.edu 15-Feb-2000
57 c
58 c changed: Christian Eckert eckert@mit.edu 09-Mar-2000
59 c
60 c - Added ECCO layout.
61 c
62 c changed: Patrick Heimbach heimbach@mit.edu 19-Jun-2000
63 c - finished, revised and debugged
64 c
65 c ==================================================================
66 c SUBROUTINE optim_numbmod
67 c ==================================================================
68
69 IMPLICIT NONE
70
71 c == global variables ==
72
73 #include "EEPARAMS.h"
74 #include "SIZE.h"
75
76 cdfer#include "ecco.h"
77 #include "ctrl.h"
78 #include "optim.h"
79 #include "minimization.h"
80
81 c == routine arguments ==
82
83 integer nn
84
85 c == local variables ==
86
87 integer il
88 integer errio
89
90 _RL ff
91
92 #if defined (DYNAMIC)
93 _RL vv(nn)
94 #elif defined (USE_POINTER) || (MAX_INDEPEND == 0)
95 _RL vv
96 pointer (pvv,vv(1))
97 #else
98 integer nmax
99 parameter( nmax = MAX_INDEPEND )
100 _RL vv(nmax)
101 #endif
102
103 character*(max_len_prec) record
104
105 logical lheaderonly
106
107 c == external ==
108
109 integer ilnblnk
110
111 c == end of interface ==
112
113 namelist /CTRL_NML/
114 & xx_theta_file, xx_salt_file,
115 & xx_hflux_file, xx_hflux_remo_intercept, xx_hflux_remo_slope,
116 & xx_hfluxstartdate1, xx_hfluxstartdate2, xx_hfluxperiod,
117 & xx_sflux_file, xx_sflux_remo_intercept, xx_sflux_remo_slope,
118 & xx_sfluxstartdate1, xx_sfluxstartdate2, xx_sfluxperiod,
119 & xx_tauu_file, xx_tauu_remo_intercept, xx_tauu_remo_slope,
120 & xx_tauustartdate1, xx_tauustartdate2, xx_tauuperiod,
121 & xx_tauv_file, xx_tauv_remo_intercept, xx_tauv_remo_slope,
122 & xx_tauvstartdate1, xx_tauvstartdate2, xx_tauvperiod,
123 & xx_atemp_file, xx_atemp_remo_intercept, xx_atemp_remo_slope,
124 & xx_atempstartdate1, xx_atempstartdate2, xx_atempperiod,
125 & xx_aqh_file, xx_aqh_remo_intercept, xx_aqh_remo_slope,
126 & xx_aqhstartdate1, xx_aqhstartdate2, xx_aqhperiod,
127 & xx_precip_file, xx_precip_remo_intercept, xx_precip_remo_slope,
128 & xx_precipstartdate1, xx_precipstartdate2, xx_precipperiod,
129 & xx_swflux_file, xx_swflux_remo_intercept, xx_swflux_remo_slope,
130 & xx_swfluxstartdate1, xx_swfluxstartdate2, xx_swfluxperiod,
131 & xx_swdown_file, xx_swdown_remo_intercept, xx_swdown_remo_slope,
132 & xx_swdownstartdate1, xx_swdownstartdate2, xx_swdownperiod,
133 & xx_lwflux_file, xx_lwflux_remo_intercept, xx_lwflux_remo_slope,
134 & xx_lwfluxstartdate1, xx_lwfluxstartdate2, xx_lwfluxperiod,
135 & xx_lwdown_file, xx_lwdown_remo_intercept, xx_lwdown_remo_slope,
136 & xx_lwdownstartdate1, xx_lwdownstartdate2, xx_lwdownperiod,
137 & xx_evap_file, xx_evap_remo_intercept, xx_evap_remo_slope,
138 & xx_evapstartdate1, xx_evapstartdate2, xx_evapperiod,
139 & xx_snowprecip_file, xx_snowprecip_remo_intercept,
140 & xx_snowprecip_remo_slope, xx_snowprecipperiod,
141 & xx_snowprecipstartdate1, xx_snowprecipstartdate2,
142 & xx_apressure_file, xx_apressure_remo_intercept,
143 & xx_apressure_remo_slope, xx_apressureperiod,
144 & xx_apressurestartdate1, xx_apressurestartdate2,
145 & xx_runoff_file, xx_runoff_remo_intercept, xx_runoff_remo_slope,
146 & xx_runoffstartdate1, xx_runoffstartdate2, xx_runoffperiod,
147 & xx_uwind_file, xx_uwind_remo_intercept, xx_uwind_remo_slope,
148 & xx_uwindstartdate1, xx_uwindstartdate2, xx_uwindperiod,
149 & xx_vwind_file, xx_vwind_remo_intercept, xx_vwind_remo_slope,
150 & xx_vwindstartdate1, xx_vwindstartdate2, xx_vwindperiod,
151 & xx_obcsn_file, xx_obcss_file, xx_obcsw_file, xx_obcse_file,
152 & xx_obcsnstartdate1, xx_obcsnstartdate2, xx_obcsnperiod,
153 & xx_obcssstartdate1, xx_obcssstartdate2, xx_obcssperiod,
154 & xx_obcswstartdate1, xx_obcswstartdate2, xx_obcswperiod,
155 & xx_obcsestartdate1, xx_obcsestartdate2, xx_obcseperiod,
156 & xx_diffkr_file, xx_kapgm_file, xx_tr1_file,
157 & xx_sst_file, xx_sss_file,
158 & xx_sststartdate1, xx_sststartdate2, xx_sstperiod,
159 & xx_sssstartdate1, xx_sssstartdate2, xx_sssperiod,
160 & xx_depth_file, xx_efluxy_file, xx_efluxp_file,
161 & xx_bottomdrag_file, xx_edtaux_file, xx_edtauy_file,
162 & xx_uvel_file, xx_vvel_file, xx_etan_file,
163 & doInitXX, doPackDiag, doZscaleUnpack, doZscalePack,
164 & doMainUnpack, doMainPack, doAdmtlmBypassAD, delZexp
165 cdfer
166 & ,xx_hfluxm_file
167 cdfer
168
169 namelist /CTRL_PACKNAMES/
170 & yadmark, yctrlid, yctrlposunpack, yctrlpospack,
171 & ctrlname, costname, scalname, maskname, metaname
172
173 namelist /OPTIM/
174 & optimcycle,
175 & numiter, nfunc, fmin, iprint,
176 & epsf, epsx, epsg,
177 & nupdate, eps
178
179 c-- Preset the optimization parameters.
180 optimcycle = 0
181 nvars = 0
182 numiter = 1
183 nfunc = 1
184 fmin = 0.0
185 iprint = 10
186 epsx = 1.e-6
187 epsg = 1.e-6
188 eps = -1.e-6
189 nupdate = 1
190 ff = 0.
191 cdfer expId = 'MIT_CE_000'
192 yctrlid = 'MIT_CE_000'
193
194 modeldataunit = 14
195 scrunit1 = 11
196
197 c-- Read control parameters from file.
198 open(unit=scrunit1,status='scratch')
199
200 open(unit = modeldataunit,file = 'data.ctrl',
201 & status = 'old', iostat = errio)
202 if ( errio .lt. 0 ) then
203 stop ' stopped in optim_numbmod'
204 endif
205
206 do while ( .true. )
207 read(modeldataunit, fmt='(a)', end=21) record
208 il = max(ilnblnk(record),1)
209 if ( record(1:1) .ne. commentcharacter )
210 & write(unit=scrunit1, fmt='(a)') record(:il)
211 enddo
212 21 continue
213 close( modeldataunit )
214
215 rewind( scrunit1 )
216 read(unit = scrunit1, nml = ctrl_nml)
217 read(unit = scrunit1, nml = ctrl_packnames)
218 close( scrunit1 )
219 print*, ' OPTIM_NUMBMOD: Control options have been read.'
220
221 cph(
222 cdfer expId = yctrlid
223 cph)
224
225 c-- Read optimization parameters from file.
226 open(unit=scrunit1,status='scratch')
227
228 open(unit = modeldataunit,file = 'data.optim',
229 & status = 'old', iostat = errio)
230 if ( errio .lt. 0 ) then
231 stop ' stopped in optim_numbmod'
232 endif
233
234 do while ( .true. )
235 read(modeldataunit, fmt='(a)', end=22) record
236 il = max(ilnblnk(record),1)
237 if ( record(1:1) .ne. commentcharacter )
238 & write(unit=scrunit1, fmt='(a)') record(:il)
239 enddo
240 22 continue
241 close( modeldataunit )
242
243 rewind( scrunit1 )
244 read(unit = scrunit1, nml = optim)
245 close( scrunit1 )
246 print*, ' OPTIM_NUMBMOD: Minimization options have been read.'
247
248 if (eps .gt. 0.0) then
249 epsf = eps
250 epsx = eps
251 epsg = eps
252 endif
253
254 lheaderonly = .true.
255 call optim_readdata ( nn, ctrlname, lheaderonly, ff, vv)
256
257 c-- Do some final printout.
258 print*
259 print*, ' OPTIM_NUMBMOD: Iteration number = ', optimcycle
260 print*, ' number of control variables = ', nn
261 print*, ' Data will be read from the following files:'
262 print*
263
264 ce --> data.err file in case dimensional i/o is used.
265 ce --> scaling file in case dimensional i/o is used.
266
267 return
268 end

  ViewVC Help
Powered by ViewVC 1.1.22