/[MITgcm]/manual/s_algorithm/text/nonlin_frsurf.tex
ViewVC logotype

Contents of /manual/s_algorithm/text/nonlin_frsurf.tex

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


Revision 1.15 - (show annotations) (download) (as text)
Tue Feb 26 21:24:12 2013 UTC (11 years, 2 months ago) by jmc
Branch: MAIN
Changes since 1.14: +70 -69 lines
File MIME type: application/x-tex
fix some typo.

1 % $Header: /u/gcmpack/manual/s_algorithm/text/nonlin_frsurf.tex,v 1.14 2010/08/30 23:09:18 jmc Exp $
2 % $Name: $
3
4
5
6 \subsection{Non-linear free-surface}
7 \label{sec:nonlinear-freesurface}
8
9 Recently, new options have been added to the model
10 that concern the free surface formulation.
11
12
13 \subsubsection{pressure/geo-potential and free surface}
14 \label{sec:phi-freesurface}
15
16 For the atmosphere, since $\phi = \phi_{topo} - \int^p_{p_s} \alpha dp$,
17 subtracting the reference state defined in section
18 \ref{sec:hpe-p-geo-potential-split}~:\\
19 $$
20 \phi_o = \phi_{topo} - \int^p_{p_o} \alpha_o dp
21 \hspace{5mm}\mathrm{with}\hspace{3mm} \phi_o(p_o)=\phi_{topo}
22 $$
23 we get:
24 $$
25 \phi' = \phi - \phi_o = \int^{p_s}_p \alpha dp - \int^{p_o}_p \alpha_o dp
26 $$
27 For the ocean, the reference state is simpler since $\rho_c$ does not dependent
28 on $z$ ($b_o=g$) and the surface reference position is uniformly $z=0$ ($R_o=0$),
29 and the same subtraction leads to a similar relation.
30 For both fluid, using the isomorphic notations, we can write:
31 $$
32 \phi' = \int^{r_{surf}}_r b~ dr - \int^{R_o}_r b_o dr
33 $$
34 and re-write as:
35 \begin{equation}
36 \phi' = \int^{r_{surf}}_{R_o} b~ dr + \int^{R_o}_r (b - b_o) dr
37 \label{eq:split-phi-Ro}
38 \end{equation}
39 or:
40 \begin{equation}
41 \phi' = \int^{r_{surf}}_{R_o} b_o dr + \int^{r_{surf}}_r (b - b_o) dr
42 \label{eq:split-phi-bo}
43 \end{equation}
44
45 In section \ref{sec:finding_the_pressure_field}, following eq.\ref{eq:split-phi-Ro},
46 the pressure/geo-potential $\phi'$ has been separated into surface ($\phi_s$),
47 and hydrostatic anomaly ($\phi'_{hyd}$).
48 In this section, the split between $\phi_s$ and $\phi'_{hyd}$ is
49 made according to equation \ref{eq:split-phi-bo}. This slightly
50 different definition reflects the actual implementation in the code
51 and is valid for both linear and non-linear
52 free-surface formulation, in both r-coordinate and r*-coordinate.
53
54 Because the linear free-surface approximation ignore the tracer content
55 of the fluid parcel between $R_o$ and $r_{surf}=R_o+\eta$,
56 for consistency reasons, this part is also neglected in $\phi'_{hyd}$~:
57 $$
58 \phi'_{hyd} = \int^{r_{surf}}_r (b - b_o) dr \simeq \int^{R_o}_r (b - b_o) dr
59 $$
60 Note that in this case, the two definitions of $\phi_s$ and $\phi'_{hyd}$
61 from equation \ref{eq:split-phi-Ro} and \ref{eq:split-phi-bo} converge toward
62 the same (approximated) expressions: $\phi_s = \int^{r_{surf}}_{R_o} b_o dr$
63 and $\phi'_{hyd}=\int^{R_o}_r b' dr$.\\
64 On the contrary, the unapproximated formulation ("non-linear free-surface",
65 see the next section) retains the full expression:
66 $\phi'_{hyd} = \int^{r_{surf}}_r (b - b_o) dr $~.
67 This is obtained by selecting {\bf nonlinFreeSurf}=4 in parameter
68 file {\em data}.\\
69
70 Regarding the surface potential:
71 $$\phi_s = \int_{R_o}^{R_o+\eta} b_o dr = b_s \eta
72 \hspace{5mm}\mathrm{with}\hspace{5mm}
73 b_s = \frac{1}{\eta} \int_{R_o}^{R_o+\eta} b_o dr $$
74 $b_s \simeq b_o(R_o)$ is an excellent approximation (better than
75 the usual numerical truncation, since generally $|\eta|$ is smaller
76 than the vertical grid increment).
77
78 For the ocean, $\phi_s = g \eta$ and $b_s = g$ is uniform.
79 For the atmosphere, however, because of topographic effects, the
80 reference surface pressure $R_o=p_o$ has large spatial variations that
81 are responsible for significant $b_s$ variations (from 0.8 to 1.2
82 $[m^3/kg]$). For this reason, when {\bf uniformLin\_PhiSurf} {\em=.FALSE.}
83 (parameter file {\em data}, namelist {\em PARAM01})
84 a non-uniform linear coefficient $b_s$ is used and computed
85 ({\it S/R INI\_LINEAR\_PHISURF}) according to the reference surface
86 pressure $p_o$:
87 $b_s = b_o(R_o) = c_p \kappa (p_o / P^o_{SL})^{(\kappa - 1)} \theta_{ref}(p_o)$.
88 with $P^o_{SL}$ the mean sea-level pressure.
89
90
91 \subsubsection{Free surface effect on column total thickness
92 (Non-linear free-surface)}
93
94 The total thickness of the fluid column is $r_{surf} - R_{fixed} =
95 \eta + R_o - R_{fixed}$. In most applications, the free surface
96 displacements are small compared to the total thickness
97 $\eta \ll H_o = R_o - R_{fixed}$.
98 In the previous sections and in older version of the model,
99 the linearized free-surface approximation was made, assuming
100 $r_{surf} - R_{fixed} \simeq H_o$ when computing horizontal transports,
101 either in the continuity equation or in tracer and momentum
102 advection terms.
103 This approximation is dropped when using the non-linear free-surface
104 formulation and the total thickness, including the time varying part
105 $\eta$, is considered when computing horizontal transports.
106 Implications for the barotropic part are presented hereafter.
107 In section \ref{sec:freesurf-tracer-advection} consequences for
108 tracer conservation is briefly discussed (more details can be
109 found in \cite{campin:02})~; the general time-stepping is presented
110 in section \ref{sec:nonlin-freesurf-timestepping} with some
111 limitations regarding the vertical resolution in section
112 \ref{sec:nonlin-freesurf-dz_surf}.
113
114 In the non-linear formulation, the continuous form of the model
115 equations remains unchanged, except for the 2D continuity equation
116 (\ref{eq:discrete-time-backward-free-surface}) which is now
117 integrated from $R_{fixed}(x,y)$ up to $r_{surf}=R_o+\eta$ :
118
119 \begin{displaymath}
120 \epsilon_{fs} \partial_t \eta =
121 \left. \dot{r} \right|_{r=r_{surf}} + \epsilon_{fw} (P-E) =
122 - {\bf \nabla}_h \cdot \int_{R_{fixed}}^{R_o+\eta} \vec{\bf v} dr
123 + \epsilon_{fw} (P-E)
124 \end{displaymath}
125
126 Since $\eta$ has a direct effect on the horizontal velocity (through
127 $\nabla_h \Phi_{surf}$), this adds a non-linear term to the free
128 surface equation. Several options for the time discretization of this
129 non-linear part can be considered, as detailed below.
130
131 If the column thickness is evaluated at time step $n$, and with
132 implicit treatment of the surface potential gradient, equations
133 (\ref{eq-solve2D} and \ref{eq-solve2D_rhs}) becomes:
134 \begin{eqnarray*}
135 \epsilon_{fs} {\eta}^{n+1} -
136 {\bf \nabla}_h \cdot \Delta t^2 (\eta^{n}+R_o-R_{fixed})
137 {\bf \nabla}_h b_s {\eta}^{n+1}
138 = {\eta}^*
139 \end{eqnarray*}
140 where
141 \begin{eqnarray*}
142 {\eta}^* = \epsilon_{fs} \: {\eta}^{n} -
143 \Delta t {\bf \nabla}_h \cdot \int_{R_{fixed}}^{R_o+\eta^n} \vec{\bf v}^* dr
144 \: + \: \epsilon_{fw} \Delta_t (P-E)^{n}
145 \end{eqnarray*}
146 This method requires us to update the solver matrix at each time step.
147
148 Alternatively, the non-linear contribution can be evaluated fully
149 explicitly:
150 \begin{eqnarray*}
151 \epsilon_{fs} {\eta}^{n+1} -
152 {\bf \nabla}_h \cdot \Delta t^2 (R_o-R_{fixed})
153 {\bf \nabla}_h b_s {\eta}^{n+1}
154 = {\eta}^*
155 +{\bf \nabla}_h \cdot \Delta t^2 (\eta^{n})
156 {\bf \nabla}_h b_s {\eta}^{n}
157 \end{eqnarray*}
158 This formulation allows one to keep the initial solver matrix
159 unchanged though throughout the integration, since the non-linear free
160 surface only affects the RHS.
161
162 Finally, another option is a "linearized" formulation where the total
163 column thickness appears only in the integral term of the RHS
164 (\ref{eq-solve2D_rhs}) but not directly in the equation
165 (\ref{eq-solve2D}).
166
167 Those different options (see Table \ref{tab:nonLinFreeSurf_flags})
168 have been tested and show little differences. However, we recommend
169 the use of the most precise method (the 1rst one) since the
170 computation cost involved in the solver matrix update is negligible.
171
172 \begin{table}[htb]
173 %\begin{center}
174 \centering
175 \begin{tabular}[htb]{|l|c|l|}
176 \hline
177 parameter & value & description \\
178 \hline
179 & -1 & linear free-surface, restart from a pickup file \\
180 & & produced with \#undef EXACT\_CONSERV code\\
181 \cline{2-3}
182 & 0 & Linear free-surface \\
183 \cline{2-3}
184 nonlinFreeSurf & 4 & Non-linear free-surface \\
185 \cline{2-3}
186 & 3 & same as 4 but neglecting
187 $\int_{R_o}^{R_o+\eta} b' dr $ in $\Phi'_{hyd}$ \\
188 \cline{2-3}
189 & 2 & same as 3 but do not update cg2d solver matrix \\
190 \cline{2-3}
191 & 1 & same as 2 but treat momentum as in Linear FS \\
192 \hline
193 & 0 & do not use $r*$ vertical coordinate (= default)\\
194 \cline{2-3}
195 select\_rStar & 2 & use $r^*$ vertical coordinate \\
196 \cline{2-3}
197 & 1 & same as 2 but without the contribution of the\\
198 & & slope of the coordinate in $\nabla \Phi$ \\
199 \hline
200 \end{tabular}
201 \caption{Non-linear free-surface flags}
202 \label{tab:nonLinFreeSurf_flags}
203 %\end{center}
204 \end{table}
205
206
207 \subsubsection{Tracer conservation with non-linear free-surface}
208 \label{sec:freesurf-tracer-advection}
209
210 To ensure global tracer conservation (i.e., the total amount) as well
211 as local conservation, the change in the surface level thickness must
212 be consistent with the way the continuity equation is integrated, both
213 in the barotropic part (to find $\eta$) and baroclinic part (to find
214 $w = \dot{r}$).
215
216 To illustrate this, consider the shallow water model, with a source
217 of fresh water (P):
218 $$
219 \partial_t h + \nabla \cdot h \vec{\bf v} = P
220 $$
221 where $h$ is the total thickness of the water column.
222 To conserve the tracer $\theta$ we have to discretize:
223 $$
224 \partial_t (h \theta) + \nabla \cdot ( h \theta \vec{\bf v})
225 = P \theta_{\mathrm{rain}}
226 $$
227 Using the implicit (non-linear) free surface described above (section
228 \ref{sec:pressure-method-linear-backward}) we have:
229 \begin{eqnarray*}
230 h^{n+1} = h^{n} - \Delta t \nabla \cdot (h^n \, \vec{\bf v}^{n+1} ) + \Delta t P \\
231 \end{eqnarray*}
232 The discretized form of the tracer equation must adopt the same
233 ``form'' in the computation of tracer fluxes, that is, the same value
234 of $h$, as used in the continuity equation:
235 \begin{eqnarray*}
236 h^{n+1} \, \theta^{n+1} = h^n \, \theta^n
237 - \Delta t \nabla \cdot (h^n \, \theta^n \, \vec{\bf v}^{n+1})
238 + \Delta t P \theta_{rain}
239 \end{eqnarray*}
240
241 The use of a 3 time-levels time-stepping scheme such as the Adams-Bashforth
242 make the conservation sightly tricky.
243 The current implementation with the Adams-Bashforth time-stepping
244 provides an exact local conservation and prevents any drift in
245 the global tracer content (\cite{campin:02}).
246 Compared to the linear free-surface method, an additional step is required:
247 the variation of the water column thickness (from $h^n$ to $h^{n+1}$) is
248 not incorporated directly into the tracer equation. Instead, the
249 model uses the $G_\theta$ terms (first step) as in the linear free
250 surface formulation (with the "{\it surface correction}" turned "on",
251 see tracer section):
252 $$
253 G_\theta^n = \left(- \nabla \cdot (h^n \, \theta^n \, \vec{\bf v}^{n+1})
254 - \dot{r}_{surf}^{n+1} \theta^n \right) / h^n
255 $$
256 Then, in a second step, the thickness variation (expansion/reduction)
257 is taken into account:
258 $$
259 \theta^{n+1} = \theta^n + \Delta t \frac{h^n}{h^{n+1}}
260 \left( G_\theta^{(n+1/2)} + P (\theta_{\mathrm{rain}} - \theta^n )/h^n \right)
261 %\theta^{n+1} = \theta^n + \frac{\Delta t}{h^{n+1}}
262 % \left( h^n G_\theta^{(n+1/2)} + P (\theta_{\mathrm{rain}} - \theta^n ) \right)
263 $$
264 Note that with a simple forward time step (no Adams-Bashforth),
265 these two formulations are equivalent,
266 since
267 $
268 (h^{n+1} - h^{n})/ \Delta t =
269 P - \nabla \cdot (h^n \, \vec{\bf v}^{n+1} ) = P + \dot{r}_{surf}^{n+1}
270 $
271
272 \subsubsection{Time stepping implementation of the
273 non-linear free-surface}
274 \label{sec:nonlin-freesurf-timestepping}
275
276 The grid cell thickness was hold constant with the linear
277 free-surface~; with the non-linear free-surface, it is now varying
278 in time, at least at the surface level.
279 This implies some modifications of the general algorithm described
280 earlier in sections \ref{sec:adams-bashforth-sync} and
281 \ref{sec:adams-bashforth-staggered}.
282
283 A simplified version of the staggered in time, non-linear
284 free-surface algorithm is detailed hereafter, and can be compared
285 to the equivalent linear free-surface case (eq. \ref{eq:Gv-n-staggered}
286 to \ref{eq:t-n+1-staggered}) and can also be easily transposed
287 to the synchronous time-stepping case.
288 Among the simplifications, salinity equation, implicit operator
289 and detailed elliptic equation are omitted. Surface forcing is
290 explicitly written as fluxes of temperature, fresh water and
291 momentum, $Q^{n+1/2}, P^{n+1/2}, F_{\bf v}^n$ respectively.
292 $h^n$ and $dh^n$ are the column and grid box thickness in r-coordinate.
293 %-------------------------------------------------------------
294 \begin{eqnarray}
295 \phi^{n}_{hyd} & = & \int b(\theta^{n},S^{n},r) dr
296 \label{eq:phi-hyd-nlfs} \\
297 \vec{\bf G}_{\vec{\bf v}}^{n-1/2}\hspace{-2mm} & = &
298 \vec{\bf G}_{\vec{\bf v}} (dh^{n-1},\vec{\bf v}^{n-1/2})
299 \hspace{+2mm};\hspace{+2mm}
300 \vec{\bf G}_{\vec{\bf v}}^{(n)} =
301 \frac{3}{2} \vec{\bf G}_{\vec{\bf v}}^{n-1/2}
302 - \frac{1}{2} \vec{\bf G}_{\vec{\bf v}}^{n-3/2}
303 \label{eq:Gv-n-nlfs} \\
304 %\vec{\bf G}_{\vec{\bf v}}^{(n)} & = &
305 % \frac{3}{2} \vec{\bf G}_{\vec{\bf v}}^{n-1/2}
306 %- \frac{1}{2} \vec{\bf G}_{\vec{\bf v}}^{n-3/2}
307 %\label{eq:Gv-n+5-nlfs} \\
308 %\vec{\bf v}^{*} & = & \vec{\bf v}^{n-1/2} + \frac{\Delta t}{dh^{n}} \left(
309 %dh^{n-1}\vec{\bf G}_{\vec{\bf v}}^{(n)} + F_{\vec{\bf v}}^{n} \right)
310 \vec{\bf v}^{*} & = & \vec{\bf v}^{n-1/2} + \Delta t \frac{dh^{n-1}}{dh^{n}} \left(
311 \vec{\bf G}_{\vec{\bf v}}^{(n)} + F_{\vec{\bf v}}^{n}/dh^{n-1} \right)
312 - \Delta t \nabla \phi_{hyd}^{n}
313 \label{eq:vstar-nlfs}
314 \end{eqnarray}
315 \hspace{3cm}$\longrightarrow$~~{\it update model~geometry~:~}${\bf hFac}(dh^n)$\\
316 \begin{eqnarray}
317 \eta^{n+1/2} \hspace{-2mm} & = &
318 \eta^{n-1/2} + \Delta t P^{n+1/2} - \Delta t
319 \nabla \cdot \int \vec{\bf v}^{n+1/2} dh^{n} \nonumber \\
320 & = & \eta^{n-1/2} + \Delta t P^{n+1/2} - \Delta t
321 \nabla \cdot \int \!\!\! \left( \vec{\bf v}^* - g \Delta t \nabla \eta^{n+1/2} \right) dh^{n}
322 \label{eq:nstar-nlfs} \\
323 \vec{\bf v}^{n+1/2}\hspace{-2mm} & = &
324 \vec{\bf v}^{*} - g \Delta t \nabla \eta^{n+1/2}
325 \label{eq:v-n+1-nlfs} \\
326 h^{n+1} & = & h^{n} + \Delta t P^{n+1/2} - \Delta t
327 \nabla \cdot \int \vec{\bf v}^{n+1/2} dh^{n}
328 \label{eq:h-n+1-nlfs} \\
329 G_{\theta}^{n} & = & G_{\theta} ( dh^{n}, u^{n+1/2}, \theta^{n} )
330 \hspace{+2mm};\hspace{+2mm}
331 G_{\theta}^{(n+1/2)} = \frac{3}{2} G_{\theta}^{n} - \frac{1}{2} G_{\theta}^{n-1}
332 \label{eq:Gt-n-nlfs} \\
333 %\theta^{n+1} & = &\theta^{n} + \frac{\Delta t}{dh^{n+1}} \left( dh^n
334 %G_{\theta}^{(n+1/2)} + Q^{n+1/2} + P^{n+1/2} (\theta_{\mathrm{rain}}-\theta^n) \right)
335 \theta^{n+1} & = &\theta^{n} + \Delta t \frac{dh^n}{dh^{n+1}} \left(
336 G_{\theta}^{(n+1/2)}
337 +( P^{n+1/2} (\theta_{\mathrm{rain}}-\theta^n) + Q^{n+1/2})/dh^n \right)
338 \nonumber \\
339 & & \label{eq:t-n+1-nlfs}
340 \end{eqnarray}
341 %-------------------------------------------------------------
342 Two steps have been added to linear free-surface algorithm
343 (eq. \ref{eq:Gv-n-staggered} to \ref{eq:t-n+1-staggered}):
344 Firstly, the model ``geometry''
345 (here the {\bf hFacC,W,S}) is updated just before entering {\it
346 SOLVE\_FOR\_PRESSURE}, using the current $dh^{n}$ field.
347 Secondly, the vertically integrated continuity equation
348 (eq.\ref{eq:h-n+1-nlfs}) has been added ({\bf exactConserv}{\em =TRUE},
349 in parameter file {\em data}, namelist {\em PARM01})
350 just before computing the vertical velocity, in subroutine
351 {\em INTEGR\_CONTINUITY}.
352 %This ensures that tracer and continuity equation discretization a
353 Although this equation might appear redundant with eq.\ref{eq:nstar-nlfs},
354 the integrated column thickness $h^{n+1}$ will be different from
355 $\eta^{n+1/2} + H$~ in the following cases:
356 \begin{itemize}
357 \item when Crank-Nickelson time-stepping is used (see section
358 \ref{sec:freesurf-CrankNick}).
359 \item when filters are applied to the flow field, after
360 (\ref{eq:v-n+1-nlfs}) and alter the divergence of the flow.
361 \item when the solver does not iterate until convergence~;
362 for example, because a too large residual target was set
363 ({\bf cg2dTargetResidual}, parameter file {\em data}, namelist
364 {\em PARM02}).
365 \end{itemize}\noindent
366 In this staggered time-stepping algorithm, the momentum tendencies
367 are computed using $dh^{n-1}$ geometry factors.
368 (eq.\ref{eq:Gv-n-nlfs}) and then rescaled in subroutine {\it TIMESTEP},
369 (eq.\ref{eq:vstar-nlfs}), similarly to tracer tendencies (see section
370 \ref{sec:freesurf-tracer-advection}).
371 The tracers are stepped forward later, using the recently updated
372 flow field ${\bf v}^{n+1/2}$ and the corresponding model geometry
373 $dh^{n}$ to compute the tendencies (eq.\ref{eq:Gt-n-nlfs});
374 Then the tendencies are rescaled by $dh^n/dh^{n+1}$ to derive
375 the new tracers values $(\theta,S)^{n+1}$ (eq.\ref{eq:t-n+1-nlfs},
376 in subroutine {\em CALC\_GT, CALC\_GS}).
377
378 Note that the fresh-water input is added in a consistent way in the
379 continuity equation and in the tracer equation, taking into account
380 the fresh-water temperature $\theta_{\mathrm{rain}}$.
381
382 Regarding the restart procedure,
383 two 2.D fields $h^{n-1}$ and $(h^n-h^{n-1})/\Delta t$
384 in addition to the standard
385 state variables and tendencies ($\eta^{n-1/2}$, ${\bf v}^{n-1/2}$,
386 $\theta^n$, $S^n$, ${\bf G}_{\bf v}^{n-3/2}$, $G_{\theta,S}^{n-1}$)
387 are stored in a "{\em pickup}" file.
388 The model restarts reading this "{\em pickup}" file,
389 then update the model geometry according to $h^{n-1}$,
390 and compute $h^n$ and the vertical velocity
391 %$h^n=h^{n-1} + \Delta t [(h^n-h^{n-1})/\Delta t]$,
392 before starting the main calling sequence (eq.\ref{eq:phi-hyd-nlfs}
393 to \ref{eq:t-n+1-nlfs}, {\em S/R FORWARD\_STEP}).
394 \\
395
396 \fbox{ \begin{minipage}{4.75in}
397 {\em INTEGR\_CONTINUITY} ({\em integr\_continuity.F})
398
399 $h^{n+1} -H_o$: {\bf etaH} ({\em DYNVARS.h})
400
401 $h^{n} -H_o$: {\bf etaHnm1} ({\em SURFACE.h})
402
403 $(h^{n+1}-h^{n})/\Delta t$: {\bf dEtaHdt} ({\em SURFACE.h})
404
405 \end{minipage} }
406
407 \subsubsection{Non-linear free-surface and vertical resolution}
408 \label{sec:nonlin-freesurf-dz_surf}
409
410 When the amplitude of the free-surface variations becomes
411 as large as the vertical resolution near the surface,
412 the surface layer thickness can decrease to nearly zero or
413 can even vanish completely.
414 This later possibility has not been implemented, and a
415 minimum relative thickness is imposed ({\bf hFacInf},
416 parameter file {\em data}, namelist {\em PARM01}) to prevent
417 numerical instabilities caused by very thin surface level.
418
419 A better alternative to the vanishing level problem has been
420 found and implemented recently, and rely on a different
421 vertical coordinate $r^*$~:
422 The time variation ot the total column thickness becomes
423 part of the r* coordinate motion, as in a $\sigma_{z},\sigma_{p}$
424 model, but the fixed part related to topography is treated
425 as in a height or pressure coordinate model.
426 A complete description is given in \cite{adcroft:04a}.
427
428 The time-stepping implementation of the $r^*$ coordinate is
429 identical to the non-linear free-surface in $r$ coordinate,
430 and differences appear only in the spacial discretization.
431 \marginpar{needs a subsection ref. here}
432

  ViewVC Help
Powered by ViewVC 1.1.22