/[MITgcm]/MITgcm/verification/natl_box_adjoint/README
ViewVC logotype

Contents of /MITgcm/verification/natl_box_adjoint/README

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


Revision 1.5 - (show annotations) (download)
Sat Nov 13 07:16:51 2004 UTC (19 years, 6 months ago) by heimbach
Branch: MAIN
CVS Tags: checkpoint57m_post, checkpoint57f_post, checkpoint57j_post, checkpoint57b_post, checkpoint57k_post, checkpoint57d_post, checkpoint57g_post, checkpoint57c_pre, checkpoint56b_post, checkpoint57i_post, checkpoint57g_pre, checkpoint57e_post, checkpoint56c_post, checkpoint57h_post, checkpoint57f_pre, checkpoint57a_post, checkpoint57a_pre, checkpoint57, checkpoint56, eckpoint57e_pre, checkpoint57h_done, checkpoint57c_post, checkpoint57h_pre, checkpoint57l_post, checkpoint56a_post
Changes since 1.4: +5 -3 lines
Updating and compressing output for natl_box_adjoint

1 # Example: Subtropical North Atlantic and Labrador Sea Areas
2 # ==========================================================
3 # - forward/adjoint run
4 # - optimization cost function
5 # - The input data is real*8
6
7 >>>>>>>>>>>>>>>>>>>> DO THESE THINGS FIRST <<<<<<<<<<<<<<<<<<<<
8 cd verification/natl_box_adjoint
9 gunzip results*/output*.gz
10 mkdir exe
11 cd exe
12 ln -s ../build/mitgcmuv_ad .
13 ln -s ../build/mitgcmuv_ftl .
14 >>>>>>>>>>>>>>>>>>>> DO THESE THINGS FIRST <<<<<<<<<<<<<<<<<<<<
15
16 ####################
17 # Experiment no. 1 #
18 ####################
19 # Use air-sea fluxes as controls (standard case):
20 # perform gradient checks for first four elements of the
21 # heat flux part of the control vector (grdchkvarindex = 3).
22 # - with GMREDI, KPP, and shortwave heating
23 # - 4 timesteps
24
25 # Compile code in build/:
26 cd ../build
27 ../../../tools/genmake2 -ieee -mods=../code
28 make depend
29 make adall
30
31 # To run:
32 cd ../exe
33 cp ../input/* .
34 ./mitgcmuv_ad >&! output.txt
35 # To verify the results of the gradient check, type:
36 grep grad-res output.txt
37 # A reference output is in:
38 grep grad-res ../results/output.txt_adm
39
40
41 ####################
42 # Experiment no. 2 #
43 ####################
44 # Use bulk formulae and atmospheric state controls
45 # (only differences to experiment 1 are in
46 # ECCO_CPPOPTIONS.h and in data.grdchk):
47 # perform gradient checks for first four elements of the
48 # air temperture part of the control vector (grdchkvarindex = 7).
49
50 # Compile code in build/:
51 cd ../build
52 rm -f *.o *.f *.p rii_files *.flow
53 rm -f *.F *.h *.c Makefile* *.template genmake_*
54 ../../../tools/genmake2 -ieee -mods=../code_bulk
55 make depend
56 make adall
57
58 # To run:
59 cd ../exe
60 cp ../input_bulk/* .
61 cp ../input/PH_*.data .
62 ./mitgcmuv_ad >&! output.txt
63 # To verify the results of the gradient check, type:
64 grep grad-res output.txt
65 # A reference output is in:
66 grep grad-res ../results_bulk/output.txt_adm
67
68
69 ####################
70 # Experiment no. 4 #
71 ####################
72 # Same as exp. 2, but with ALLOW_SEAICE defined and useseaice = .true.
73
74 # Compile code in build/:
75 cd ../build
76 rm -f *.o *.f *.p rii_files *.flow
77 rm -f *.F *.h *.c Makefile* *.template genmake_*
78 ../../../tools/genmake2 -ieee -mods=../code_seaice
79 cp ../code_seaice/SEAICE_OPTIONS.h.FLUXES SEAICE_OPTIONS.h
80 make depend
81 make adall
82
83 # To run:
84 cd ../exe
85 cp ../input_bulk/* .
86 cp ../input_seaice/data.seaice.cgrid data.seaice
87 cp ../input_seaice/data.pkg .
88 cp ../input/PH_*.data .
89 ./mitgcmuv_ad >&! output.txt
90 # To verify the results of the gradient check, type:
91 grep grad-res output.txt
92 # A reference output is in:
93 grep grad-res ../results_seaice/output_exp4.txt_adm
94
95
96 ####################
97 # Experiment no. 5 #
98 ####################
99 # Same as exp. 4, but using sea-ice bulk formulae.
100 # This experiment tests pkg/seaice bulk formulae over open water.
101 # No sea-ice is formed anywhere in the domain.
102
103 # Compile code in build/:
104 cd ../build
105 rm -f *.o *.f *.p rii_files *.flow
106 rm -f *.F *.h *.c Makefile* *.template genmake_*
107 ../../../tools/genmake2 -ieee -mods=../code_seaice
108 make depend
109 make adall
110
111 # To run:
112 cd ../exe
113 cp ../input_bulk/* .
114 cp ../input_seaice/data.seaice.cgrid data.seaice
115 cp ../input_seaice/data.pkg .
116 cp ../input/PH_*.data .
117 ./mitgcmuv_ad >&! output.txt
118 # To verify the results of the gradient check, type:
119 grep grad-res output.txt
120 # A reference output is in:
121 grep grad-res ../results_seaice/output_exp5.txt_adm
122
123
124 ####################
125 # Experiment no. 6 #
126 ####################
127 # Same as experiment 5, but in the Labrador Sea rather than in
128 # the North Atlantic subduction region. The cost function is
129 # total ice volume over the 4-hour test period.
130 #
131 # The cost function data files are not used. They contain:
132 # labsea_TP_fields : filled with -9999
133 # labsea_TP_mean : hour 100 ssh (cm) of lab_sea experiment
134 # labsea_ERS_fields : filled with -9999
135 # labsea_SST_fields : 14 * Levitus annual mean SST
136 # labsea_Lev.ptmp : 14 * Levitus annual mean temperature
137 # labsea_Lev.salt : 14 * Levitus annual mean salinity
138 # labsea_ssh.err : filled with -9999
139 # labsea_geoid.err : constant 0.2 with -9999 landmask
140 # labsea_totflux.err : 100 with -9999 landmask
141 # labsea_pme.err : 4e-8 with -9999 landmask
142 # labsea_ustress.err : 3 with -9999 landmask
143 # labsea_vstress.err : 3 with -9999 landmask
144
145 # To run:
146 cd ../exe
147 cp ../input_seaice/* .
148 cp ../input_bulk/data.grdchk .
149 ./mitgcmuv_ad >&! output.txt
150 # To verify the results of the gradient check, type:
151 grep grad-res output.txt
152 # A reference output is in:
153 grep grad-res ../results_seaice/output_exp6.txt_adm
154
155
156 ####################
157 # Experiment no. 7 #
158 ####################
159 # Same as experiment 6, but finite difference gradient check for
160 # air temperature is computed and compared for the complete domain.
161 #
162 # Notes:
163 # variables xx_* contain control vector perturbation
164 # variables adxx_* contain cost function gradient relative to control
165
166 # To run:
167 cd ../exe
168 cp ../input_seaice/* .
169 ./mitgcmuv_ad >&! output.txt
170 # To verify the results of the gradient check, type:
171 grep grad-res output.txt > grad-res.txt
172 # A reference output is in:
173 grep grad-res ../results_seaice/output_exp6.txt_adm
174 # plot with matlab:
175 cd ../results_seaice
176 matlab
177 lookat_exp8
178
179
180 ####################
181 # Experiment no. 8 #
182 ####################
183 >>>>>>>>>> PH: THIS ONE NOT YET UPDATED <<<<<<<<<<
184 # Same as experiment 7, but starting from a checkpoint file.
185
186 # To run:
187 cd ../../../exe
188 cp ../verification/natl_box_adjoint/input_seaice/* .
189 cp data.001 data
190 ./mitgcmuv >&! output.txt
191 # To verify the results of the gradient check, type:
192 grep "ph-grd 3" output.txt > ph-grd.txt
193 cd ../verification/natl_box_adjoint/results_seaice
194 matlab
195 lookat_exp8
196
197
198 ####################
199 # Experiment no. 9 #
200 ####################
201 >>>>>>>>>> PH: THIS ONE NOT YET UPDATED <<<<<<<<<<
202 # Same as experiment 8, but starting from time step 180.
203 # This includes a location (12,8) which experiences a phase
204 # transition from no-ice to sea-ice, and which therefore has
205 # a very large and inaccurate gradient.
206
207 # To run:
208 cd ../../../exe
209 cp ../verification/natl_box_adjoint/input_seaice/* .
210 cp data.180 data
211 ./mitgcmuv >&! output.txt
212 # To verify the results of the gradient check, type:
213 grep "ph-grd 3" output.txt > ph-grd.txt
214 cd ../verification/natl_box_adjoint/results_seaice
215 matlab
216 lookat_exp8
217
218
219 #####################
220 # Experiment no. 10 #
221 #####################
222 # Set up a 100-day sensitivity experiment.
223 # Things start falling apart, see below.
224 # Longer integrations periods cause NANs in adjoint gradient.
225 # Note: cost_ssh is hardwired for 1-day ssh records
226 # "topexperiod" in data.cost is never used.
227
228 # Compile code in build/:
229 cd ../build
230 rm -f *.o *.f *.p rii_files *.flow
231 rm -f *.F *.h *.c Makefile* *.template genmake_*
232 ../../../tools/genmake2 -ieee -mods=../code_seaice
233 make depend
234 make adall
235 make ftlall
236
237 # To run:
238 # PH: I modified data to run 24 timesteps only
239 cd ../exe
240 cp ../input_seaice/* .
241 cp data.24 data
242 cp ../input_bulk/data.grdchk .
243 # run the ADM
244 ./mitgcmuv_ad >&! output.txt_adm
245 # run the TLM
246 ./mitgcmuv_ftl >&! output.txt_tlm
247
248 # For 100 days, adjoint gradient is NAN
249
250 # Following table compares finite difference gradient for various choices
251 # of grdchk_eps.
252 1.d-12 -.177327175E+20 0.140230277E+20 -.254542273E+20 0.138603531E+19
253 1.d-8 0.174714613E+16 -.527867903E+15 0.403581037E+15 0.377322748E+12
254 1.d-4 0.999954825E+11 0.156018218E+12 -.474931072E+11 -.357260091E+11
255 1.d-2 0.634576350E+09 -.185440863E+10 -.599212833E+09 -.334417056E+10
256
257 # Following table compares adjoint and finite difference gradient for
258 # various choices of nTimeSteps
259 # with nTimeSteps=4
260 adj grad 0.103151639E+00 0.308058453E+00 -.732758366E+04 -.161844794E+06
261 1.d-4 0.305175781E+00 0.305175781E+00 -.732757568E+04 -.161844788E+06
262 # with nTimeSteps=24
263 adj grad 0.137444822E+04 0.365984818E+04 0.256198267E+05 -.204077640E+06
264 1.d-4 0.137313843E+04 0.365982056E+04 0.256221008E+05 -.204077454E+06
265 # with nTimeSteps=240
266 adj grad 0.443328852E+39 -.133652133E+38 -.905448973E+38 -.598093614E+40
267 1.d-4 -.209616183E+10 0.257127391E+10 -.917457365E+10 0.104622205E+10
268 # with nTimeSteps=480
269 adj grad -.217869560E+39 0.656820132E+37 0.444973903E+38 0.293927165E+40
270 1.d-4 -.848343350E+09 0.186724144E+10 -.768266406E+10 0.188919420E+10
271 # with nTimeSteps=960
272 adj grad -.125255788E+49 0.377613667E+47 0.255820763E+48 0.168982206E+50
273 1.d-4 0.683065531E+10 -.241320782E+11 -.359080729E+11 0.222805821E+11
274 # with nTimeSteps=1920
275 adj grad 0.993422132E+94 -.299490969E+93 -.202895220E+94 -.134022280E+96
276 1.d-4 0.677603652E+12 0.115923780E+12 -.383606246E+12 -.393716060E+12
277 # with nTimeSteps=2400
278 adj grad 0.204800998+114 -.617421814+112 -.418282846+113 -.276296408+115
279 1.d-4 0.796041873E+12 0.280172355E+12 -.429971310E+12 -.655627972E+12
280 # with nTimeSteps=3600
281 adj grad 0.123800977+143 -.373227788+141 -.252849475+142 -.167019524+144
282 1.d-4 0.154270431E+12 0.246315840E+12 0.392679620E+12 0.816557457E+11
283
284 # With cost_ice_flag = 2
285 # adj grad 0.500216760+194 -.353450868+194 -.799381224+195 -.173412383+194
286 # 1.d-04 -.327859949E+08 -.300222927E+10 0.252204364E+09 -.658448165E+10
287 # 1.d-03 -.572185323E+08 0.614938314E+08 -.850914638E+09 0.248982808E+08
288 # 1.d-02 -.624721639E+07 -.147537212E+08 -.114497432E+09 -.358163526E+08
289 # 1.d-01 0.603974309E+07 -.684786020E+07 -.149337451E+09 -.601790080E+07
290 # 1.d-00 -.497381448E+06 -.404972657E+05 -.142684281E+09 -.501277195E+08
291
292 # 100 day experiment with cost_ice_flag = 3, but in North Atlantic
293 # domain, i.e., with no sea-ice is OK
294 adj grad 0.234593317E+17 0.166950683E+17 0.238665515E+17 0.249850733E+17
295 1.d-4 0.234313954E+17 0.166674930E+17 0.238322031E+17 0.249217155E+17
296
297 # with same order of magnitude results as those from pkg/exf bulk formulae
298 adj grad 0.279968788E+17 0.226979382E+17 0.269224396E+17 0.323359773E+17
299 1.d-4 0.279944626E+17 0.226935335E+17 0.269274317E+17 0.323399293E+17
300
301 # 10 day experiment with cost_ice_flag = 3 is OK
302 adj grad 0.353941629E+17 0.955451129E+16 -.265793314E+17 0.232229067E+16
303 1.d-4 0.353943893E+17 0.955563114E+16 -.265195776E+17 0.232137949E+16
304 1-fd/adj -.639540199E-05 -.117207086E-03 0.224813073E-02 0.392362727E-03
305
306 # 100 day experiment with cost_ice_flag = 3 fails
307 adj grad 0.134326162+285 0.434825818+285 0.353667347+285 -.121707013+286
308 1.d-4 -.248910431E+20 -.581887317E+20 0.530805948E+18 0.554441614E+20
309
310 # 100 day experiment with cost_ice_flag = 4 fails
311 adj grad 0.942881479+279 0.305219181+280 0.248251262+280 -.854303341+280
312 1.d-4 0.550158678E+19 -.107685572E+20 -.139042495E+20 0.445855968E+20
313
314 # 100 day experiment with cost_ice_flag = 5 fails
315 adj grad 0.149606733+285 0.484290396+285 0.393899563+285 -.135552065+286
316 1.d-4 -.300535490E+20 -.689378119E+20 0.300954675E+19 0.767231924E+20
317
318
319 # With cost_ice_flag = 6, i.e., a quadratic cost function
320 # 1.d-04 -.525101466E+01 -.328685504E+03 0.267928050E+02 -.563072857E+03
321 # 1.d-03 -.313705632E+01 0.463320361E+01 -.458088751E+02 0.571140277E+00
322 # 1.d-02 -.232806373E+00 -.104311448E+01 0.173597838E+02 -.394705606E+01
323 # 1.d-01 0.515424287E+00 -.578962143E+00 0.108556846E+02 -.563596055E+00
324 # 1.d-00 -.480177391E-01 -.327366136E-02 0.107190195E+02 -.498391127E+01
325 # adj grad NAN NAN NAN NAN
326
327 # 100 day experiments with all albedos set to a constant 0.4, with
328 # IMAX_TICE=50, and with HSNOW=0 also fail with NANs
329
330 # 100-day with undef ALLOW_GMREDI
331 adj grad 0.846385475+258 0.198955589+259 0.729012228+259 0.320320183+256
332 1.d-4 -.577220699E+12 -.987464011E+12 -.342421713E+12 -.553564700E+12
333
334 # Adjoint gradient is OK for 100 days is KPP and GM
335 # are undefined in CPP_OPTIONS file:
336 adj grad 0.717330426E+06 0.106802371E+07 0.443223909E+06 -.581863641E+08
337 1.d-4 0.717581787E+06 0.106213684E+07 0.441527100E+06 -.581863293E+08
338 # Above experiment fails with NANs when extended to 375 days
339 # but it works OK is SEAICE_initialHEFF = 0.0 instead of 1.0
340 adj grad -.256772533E+05 -.782710992E+05 -.273621212E+05 -.133527839E+09
341 1.d-4 -.256640625E+05 -.779858398E+05 -.272338867E+05 -.133528066E+09
342 # 10-yr experiment with above parameters fails with NANs
343
344 # 100-day with yneg=0 in growth.F
345 adj grad -.246704815E+07 -.171229406E+09 -.113862028E+08 -.156706660E+08
346 1.d-4 -.246699463E+07 -.171229277E+09 -.113861792E+08 -.156706763E+08
347 # 375-day with yneg=0 in growth.F
348 (in progress)
349
350
351 #####################
352 # Experiment no. 11 #
353 #####################
354 >>>>>>>>>> PH: THIS ONE NOT YET UPDATED <<<<<<<<<<
355 # Same as experiment 8, but using 2-CPU MPI configuration.
356
357 # Compile code in bin/:
358 cd ../bin
359 rm -rf *.o *.f *.p rii_files
360 rm -rf *.F *.h *.c Makefile*
361 cp ../verification/natl_box_adjoint/code_seaice/*.h .
362 cp ../verification/natl_box_adjoint/code_seaice/.genmakerc .
363 cp ../verification/natl_box_adjoint/code_seaice/SIZE.h.MPI SIZE.h
364 cp ../verification/natl_box_adjoint/code_seaice/CPP_EEOPTIONS.h.MPI CPP_EEOPTIONS.h
365 # Configure and compile the code:
366 ../tools/genmake -mpi -makefile
367 # ==> on alhena use:
368 # ../tools/genmake -platform=o2k -mpi -makefile
369 make depend
370 # Generate the adjoint code:
371 cd ../adjoint
372 cp ../verification/natl_box_adjoint/code_seaice/makefile .
373 make adtaf
374 make adchange
375 rm -f makefile
376 # Go back and compile the code:
377 cd ../bin
378 make
379 # To run:
380 cd ../exe
381 cp ../verification/natl_box_adjoint/input_seaice/* .
382 cp data.001 data
383 cp ../verification/natl_box_adjoint/input_bulk/data.grdchk .
384 mpirun -np 2 mitgcmuv
385 # To verify the results of the gradient check, type:
386 grep "ph-grd 3" STDOUT.0000
387 # To plot adjoint sensitivy fields
388 cd ../verification/natl_box_adjoint/results_seaice
389 matlab
390 lookat_exp10
391
392
393 #####################
394 # Experiment no. 12 #
395 #####################
396 # Same as experiment 6, but including LSR dynamic solver.
397
398 # Compile code in build/:
399 cd ../build
400 rm -f *.o *.f *.p rii_files *.flow
401 rm -f *.F *.h *.c Makefile* *.template genmake_*
402 ../../../tools/genmake2 -ieee -mods=../code_seaice
403 cp ../code_seaice/SEAICE_OPTIONS.h.DYN SEAICE_OPTIONS.h
404 make depend
405 make adall
406 make ftlall
407
408 # To run:
409 cd ../exe
410 cp ../input_seaice/* .
411 cp data.seaice.lsr data.seaice
412 cp ../input_bulk/data.grdchk .
413 # run the ADM
414 ./mitgcmuv_ad >&! output.txt_adm
415 # run the TLM
416 ./mitgcmuv_ftl >&! output.txt_tlm
417
418 # To verify the results of the gradient check, type:
419 grep grad-res output.txt_adm
420 # A reference output is in:
421 grep grad-res ../results_seaice/output_exp12.txt_adm
422
423
424 #####################
425 # Experiment no. 13 #
426 #####################
427 # Same as experiment 12, but finite difference gradient check for
428 # air temperature is computed and compared for the complete domain.
429
430 # To run:
431 cd ../exe
432 cp ../input_seaice/* .
433 cp data.seaice.lsr data.seaice
434 ./mitgcmuv_ad >&! output.txt_adm
435 # To verify the results of the gradient check, type:
436 grep grad-res output.txt_adm > grad-res.txt
437 cd ../results_seaice
438 matlab
439 lookat_exp8
440
441
442 #####################
443 # Experiment no. 14 #
444 #####################
445 >>>>>>>>>> PH: THIS ONE NOT YET UPDATED <<<<<<<<<<
446 # Same as in 12 but for a 100-day sensitivity experiment.
447
448 # Compile code in bin/:
449 cd ../bin
450 rm -rf *.o *.f *.p rii_files
451 rm -rf *.F *.h *.c Makefile*
452 cp ../verification/natl_box_adjoint/code_seaice/*.h .
453 rm -f tamc.h
454 cp ../verification/natl_box_adjoint/code_seaice/.genmakerc .
455 cp ../verification/natl_box_adjoint/code_seaice/SEAICE_OPTIONS.h.MULTILEVEL SEAICE_OPTIONS.h
456 # Configure and compile the code:
457 ../tools/genmake -makefile
458 make depend
459 # Generate the adjoint code:
460 cd ../adjoint
461 cp ../verification/natl_box_adjoint/code_seaice/makefile .
462 make adtaf
463 make adchange
464 rm -f makefile
465 # Go back and compile the code:
466 cd ../bin
467 make
468 # To run:
469 cd ../exe
470 cp ../verification/natl_box_adjoint/input_seaice/* .
471 cp data.100day data
472 cp ../verification/natl_box_adjoint/input_bulk/data.grdchk .
473 cp data.seaice.lsr data.seaice
474 ./mitgcmuv >&! output.txt
475 # To verify the results of the gradient check, type:
476 grep "ph-grd 3" output.txt
477
478 # For 100-day experiment, with cost_ice_flag = 1, the adjoint gradient
479 # blows up, as in Exp. 10
480 # 1.d-04 0.251994583E+11 -.899637862E+10 0.372048919E+10 -.344972301E+10
481 # adj grad -.160660304+210 -.378763253+210 -.239235971+211 -.386444881+209
482
483 # With cost_ice_flag = 2, i.e., mean sea-ice area
484 # 1.d-04 -.152618243E+11 0.605974121E+06 -.155375485E+11 -.153368205E+11
485 # adj grad 0.000000000E+00 0.000000000E+00 -.124076923E+09 0.000000000E+00
486
487 # With cost_ice_flag = 6, i.e., a quadratic cost function
488 # 1.d-12 -.106128607E+12 0.106330784E+12 -.106446555E+12 -.106237252E+12
489 # 1.d-08 0.106450924E+08 0.103670536E+05 0.349155947E+05 0.335081902E+05
490 # 1.d-04 -.106143365E+04 0.206965778E+00 -.105672737E+04 -.106326894E+04
491 # 1.d-02 -.120891636E-02 0.106325012E+02 0.841459268E+01 -.107119297E+02
492 # 1.d-01 -.102221209E-02 -.124805738E-02 0.821489714E+01 -.331974254E-02
493 # 1.d-00 0.113825328E-03 -.105881751E+00 0.104550010E+02 -.106209116E+00
494 # adj grad 0.000000000E+00 0.000000000E+00 0.887775373E+01 0.000000000E+00
495
496
497 #####################
498 # Experiment no. 15 #
499 #####################
500 # Same as experiment 6, but with SEAICE_MULTILEVEL.
501
502 # Compile code in build/:
503 rm -f *.o *.f *.p rii_files *.flow
504 rm -f *.F *.h *.c Makefile* *.template genmake_*
505 ../../../tools/genmake2 -ieee -mods=../code_seaice
506 cp ../code_seaice/SEAICE_OPTIONS.h.MULTILEVEL SEAICE_OPTIONS.h
507 make depend
508 make adall
509
510 # To run:
511 cd ../exe
512 cp ../input_seaice/* .
513 cp ../input_bulk/data.grdchk .
514 ./mitgcmuv_ad >&! output.txt
515
516 # To verify the results of the gradient check, type:
517 grep grad-res output.txt
518 # The reference output is in:
519 grep grad-res ../results_seaice/output_exp15.txt_adm
520
521 # This test suggests that SEAICE_MULTILEVEL decreases the accuracy of
522 # the adjoint model, perhaps because the adjoint model is not handling
523 # multiple recomputations in budget properly.
524
525
526 #####################
527 # Experiment no. 20 #
528 #####################
529 # Same as experiment 10, but using divided adjoint.

  ViewVC Help
Powered by ViewVC 1.1.22