xref: /petsc/src/tao/leastsquares/tests/chwirut2.c (revision 9371c9d470a9602b6d10a8bf50c9b2280a79e45a)
1c4762a1bSJed Brown /*
2c4762a1bSJed Brown    Include "petsctao.h" so that we can use TAO solvers.  Note that this
3c4762a1bSJed Brown    file automatically includes libraries such as:
4c4762a1bSJed Brown      petsc.h       - base PETSc routines   petscvec.h - vectors
5a5b23f4aSJose E. Roman      petscsys.h    - system routines        petscmat.h - matrices
6c4762a1bSJed Brown      petscis.h     - index sets            petscksp.h - Krylov subspace methods
7c4762a1bSJed Brown      petscviewer.h - viewers               petscpc.h  - preconditioners
8c4762a1bSJed Brown 
9c4762a1bSJed Brown  This version tests correlated terms using both vector and listed forms
10c4762a1bSJed Brown */
11c4762a1bSJed Brown 
12c4762a1bSJed Brown #include <petsctao.h>
13c4762a1bSJed Brown 
14c4762a1bSJed Brown /*
15c4762a1bSJed Brown Description:   These data are the result of a NIST study involving
16c4762a1bSJed Brown                ultrasonic calibration.  The response variable is
17c4762a1bSJed Brown                ultrasonic response, and the predictor variable is
18c4762a1bSJed Brown                metal distance.
19c4762a1bSJed Brown 
20c4762a1bSJed Brown Reference:     Chwirut, D., NIST (197?).
21c4762a1bSJed Brown                Ultrasonic Reference Block Study.
22c4762a1bSJed Brown */
23c4762a1bSJed Brown 
24c4762a1bSJed Brown static char help[] = "Finds the nonlinear least-squares solution to the model \n\
25c4762a1bSJed Brown             y = exp[-b1*x]/(b2+b3*x)  +  e \n";
26c4762a1bSJed Brown 
27c4762a1bSJed Brown #define NOBSERVATIONS 214
28c4762a1bSJed Brown #define NPARAMETERS   3
29c4762a1bSJed Brown 
30c4762a1bSJed Brown /* User-defined application context */
31c4762a1bSJed Brown typedef struct {
32c4762a1bSJed Brown   /* Working space */
33c4762a1bSJed Brown   PetscReal t[NOBSERVATIONS];              /* array of independent variables of observation */
34c4762a1bSJed Brown   PetscReal y[NOBSERVATIONS];              /* array of dependent variables */
35c4762a1bSJed Brown   PetscReal j[NOBSERVATIONS][NPARAMETERS]; /* dense jacobian matrix array*/
36c4762a1bSJed Brown   PetscInt  idm[NOBSERVATIONS];            /* Matrix indices for jacobian */
37c4762a1bSJed Brown   PetscInt  idn[NPARAMETERS];
38c4762a1bSJed Brown } AppCtx;
39c4762a1bSJed Brown 
40c4762a1bSJed Brown /* User provided Routines */
41c4762a1bSJed Brown PetscErrorCode InitializeData(AppCtx *user);
42c4762a1bSJed Brown PetscErrorCode FormStartingPoint(Vec);
43c4762a1bSJed Brown PetscErrorCode EvaluateFunction(Tao, Vec, Vec, void *);
44c4762a1bSJed Brown PetscErrorCode EvaluateJacobian(Tao, Vec, Mat, Mat, void *);
45c4762a1bSJed Brown 
46c4762a1bSJed Brown /*--------------------------------------------------------------------*/
47*9371c9d4SSatish Balay int main(int argc, char **argv) {
48c4762a1bSJed Brown   PetscInt  wtype = 0;
49c4762a1bSJed Brown   Vec       x, f; /* solution, function */
50c4762a1bSJed Brown   Vec       w;    /* weights */
51c4762a1bSJed Brown   Mat       J;    /* Jacobian matrix */
52c4762a1bSJed Brown   Tao       tao;  /* Tao solver context */
53c4762a1bSJed Brown   PetscInt  i;    /* iteration information */
54c4762a1bSJed Brown   PetscReal hist[100], resid[100];
55c4762a1bSJed Brown   PetscInt  lits[100];
56c4762a1bSJed Brown   PetscInt  w_row[NOBSERVATIONS]; /* explicit weights */
57c4762a1bSJed Brown   PetscInt  w_col[NOBSERVATIONS];
58c4762a1bSJed Brown   PetscReal w_vals[NOBSERVATIONS];
59c4762a1bSJed Brown   PetscBool flg;
60c4762a1bSJed Brown   AppCtx    user; /* user-defined work context */
61c4762a1bSJed Brown 
62327415f7SBarry Smith   PetscFunctionBeginUser;
639566063dSJacob Faibussowitsch   PetscCall(PetscInitialize(&argc, &argv, (char *)0, help));
649566063dSJacob Faibussowitsch   PetscCall(PetscOptionsGetInt(NULL, NULL, "-wtype", &wtype, &flg));
6563a3b9bcSJacob Faibussowitsch   PetscCall(PetscPrintf(PETSC_COMM_WORLD, "wtype=%" PetscInt_FMT "\n", wtype));
66c4762a1bSJed Brown   /* Allocate vectors */
679566063dSJacob Faibussowitsch   PetscCall(VecCreateSeq(MPI_COMM_SELF, NPARAMETERS, &x));
689566063dSJacob Faibussowitsch   PetscCall(VecCreateSeq(MPI_COMM_SELF, NOBSERVATIONS, &f));
69c4762a1bSJed Brown 
709566063dSJacob Faibussowitsch   PetscCall(VecDuplicate(f, &w));
71c4762a1bSJed Brown 
72c4762a1bSJed Brown   /* no correlation, but set in different ways */
739566063dSJacob Faibussowitsch   PetscCall(VecSet(w, 1.0));
74c4762a1bSJed Brown   for (i = 0; i < NOBSERVATIONS; i++) {
75*9371c9d4SSatish Balay     w_row[i]  = i;
76*9371c9d4SSatish Balay     w_col[i]  = i;
77*9371c9d4SSatish Balay     w_vals[i] = 1.0;
78c4762a1bSJed Brown   }
79c4762a1bSJed Brown 
80c4762a1bSJed Brown   /* Create the Jacobian matrix. */
819566063dSJacob Faibussowitsch   PetscCall(MatCreateSeqDense(MPI_COMM_SELF, NOBSERVATIONS, NPARAMETERS, NULL, &J));
82c4762a1bSJed Brown 
83c4762a1bSJed Brown   for (i = 0; i < NOBSERVATIONS; i++) user.idm[i] = i;
84c4762a1bSJed Brown 
85c4762a1bSJed Brown   for (i = 0; i < NPARAMETERS; i++) user.idn[i] = i;
86c4762a1bSJed Brown 
87c4762a1bSJed Brown   /* Create TAO solver and set desired solution method */
889566063dSJacob Faibussowitsch   PetscCall(TaoCreate(PETSC_COMM_SELF, &tao));
899566063dSJacob Faibussowitsch   PetscCall(TaoSetType(tao, TAOPOUNDERS));
90c4762a1bSJed Brown 
91c4762a1bSJed Brown   /* Set the function and Jacobian routines. */
929566063dSJacob Faibussowitsch   PetscCall(InitializeData(&user));
939566063dSJacob Faibussowitsch   PetscCall(FormStartingPoint(x));
949566063dSJacob Faibussowitsch   PetscCall(TaoSetSolution(tao, x));
959566063dSJacob Faibussowitsch   PetscCall(TaoSetResidualRoutine(tao, f, EvaluateFunction, (void *)&user));
96c4762a1bSJed Brown   if (wtype == 1) {
979566063dSJacob Faibussowitsch     PetscCall(TaoSetResidualWeights(tao, w, 0, NULL, NULL, NULL));
98c4762a1bSJed Brown   } else if (wtype == 2) {
999566063dSJacob Faibussowitsch     PetscCall(TaoSetResidualWeights(tao, NULL, NOBSERVATIONS, w_row, w_col, w_vals));
100c4762a1bSJed Brown   }
1019566063dSJacob Faibussowitsch   PetscCall(TaoSetJacobianResidualRoutine(tao, J, J, EvaluateJacobian, (void *)&user));
1029566063dSJacob Faibussowitsch   PetscCall(TaoSetTolerances(tao, 1e-5, 0.0, PETSC_DEFAULT));
103c4762a1bSJed Brown 
104c4762a1bSJed Brown   /* Check for any TAO command line arguments */
1059566063dSJacob Faibussowitsch   PetscCall(TaoSetFromOptions(tao));
106c4762a1bSJed Brown 
1079566063dSJacob Faibussowitsch   PetscCall(TaoSetConvergenceHistory(tao, hist, resid, 0, lits, 100, PETSC_TRUE));
108c4762a1bSJed Brown   /* Perform the Solve */
1099566063dSJacob Faibussowitsch   PetscCall(TaoSolve(tao));
110c4762a1bSJed Brown 
111c4762a1bSJed Brown   /* Free TAO data structures */
1129566063dSJacob Faibussowitsch   PetscCall(TaoDestroy(&tao));
113c4762a1bSJed Brown 
114c4762a1bSJed Brown   /* Free PETSc data structures */
1159566063dSJacob Faibussowitsch   PetscCall(VecDestroy(&x));
1169566063dSJacob Faibussowitsch   PetscCall(VecDestroy(&w));
1179566063dSJacob Faibussowitsch   PetscCall(VecDestroy(&f));
1189566063dSJacob Faibussowitsch   PetscCall(MatDestroy(&J));
119c4762a1bSJed Brown 
1209566063dSJacob Faibussowitsch   PetscCall(PetscFinalize());
121b122ec5aSJacob Faibussowitsch   return 0;
122c4762a1bSJed Brown }
123c4762a1bSJed Brown 
124c4762a1bSJed Brown /*--------------------------------------------------------------------*/
125*9371c9d4SSatish Balay PetscErrorCode EvaluateFunction(Tao tao, Vec X, Vec F, void *ptr) {
126c4762a1bSJed Brown   AppCtx          *user = (AppCtx *)ptr;
127c4762a1bSJed Brown   PetscInt         i;
12805579b36STristan Konolige   PetscReal       *y = user->y, *f, *t = user->t;
12905579b36STristan Konolige   const PetscReal *x;
130c4762a1bSJed Brown 
131c4762a1bSJed Brown   PetscFunctionBegin;
1329566063dSJacob Faibussowitsch   PetscCall(VecGetArrayRead(X, &x));
1339566063dSJacob Faibussowitsch   PetscCall(VecGetArray(F, &f));
134c4762a1bSJed Brown 
135*9371c9d4SSatish Balay   for (i = 0; i < NOBSERVATIONS; i++) { f[i] = y[i] - PetscExpScalar(-x[0] * t[i]) / (x[1] + x[2] * t[i]); }
1369566063dSJacob Faibussowitsch   PetscCall(VecRestoreArrayRead(X, &x));
1379566063dSJacob Faibussowitsch   PetscCall(VecRestoreArray(F, &f));
138c4762a1bSJed Brown   PetscLogFlops(6 * NOBSERVATIONS);
139c4762a1bSJed Brown   PetscFunctionReturn(0);
140c4762a1bSJed Brown }
141c4762a1bSJed Brown 
142c4762a1bSJed Brown /*------------------------------------------------------------*/
143c4762a1bSJed Brown /* J[i][j] = df[i]/dt[j] */
144*9371c9d4SSatish Balay PetscErrorCode EvaluateJacobian(Tao tao, Vec X, Mat J, Mat Jpre, void *ptr) {
145c4762a1bSJed Brown   AppCtx          *user = (AppCtx *)ptr;
146c4762a1bSJed Brown   PetscInt         i;
14705579b36STristan Konolige   PetscReal       *t = user->t;
14805579b36STristan Konolige   const PetscReal *x;
149c4762a1bSJed Brown   PetscReal        base;
150c4762a1bSJed Brown 
151c4762a1bSJed Brown   PetscFunctionBegin;
1529566063dSJacob Faibussowitsch   PetscCall(VecGetArrayRead(X, &x));
153c4762a1bSJed Brown   for (i = 0; i < NOBSERVATIONS; i++) {
154c4762a1bSJed Brown     base = PetscExpScalar(-x[0] * t[i]) / (x[1] + x[2] * t[i]);
155c4762a1bSJed Brown 
156c4762a1bSJed Brown     user->j[i][0] = t[i] * base;
157c4762a1bSJed Brown     user->j[i][1] = base / (x[1] + x[2] * t[i]);
158c4762a1bSJed Brown     user->j[i][2] = base * t[i] / (x[1] + x[2] * t[i]);
159c4762a1bSJed Brown   }
160c4762a1bSJed Brown 
161c4762a1bSJed Brown   /* Assemble the matrix */
1629566063dSJacob Faibussowitsch   PetscCall(MatSetValues(J, NOBSERVATIONS, user->idm, NPARAMETERS, user->idn, (PetscReal *)user->j, INSERT_VALUES));
1639566063dSJacob Faibussowitsch   PetscCall(MatAssemblyBegin(J, MAT_FINAL_ASSEMBLY));
1649566063dSJacob Faibussowitsch   PetscCall(MatAssemblyEnd(J, MAT_FINAL_ASSEMBLY));
165c4762a1bSJed Brown 
1669566063dSJacob Faibussowitsch   PetscCall(VecRestoreArrayRead(X, &x));
167c4762a1bSJed Brown   PetscLogFlops(NOBSERVATIONS * 13);
168c4762a1bSJed Brown   PetscFunctionReturn(0);
169c4762a1bSJed Brown }
170c4762a1bSJed Brown 
171c4762a1bSJed Brown /* ------------------------------------------------------------ */
172*9371c9d4SSatish Balay PetscErrorCode FormStartingPoint(Vec X) {
173c4762a1bSJed Brown   PetscReal *x;
174c4762a1bSJed Brown 
175c4762a1bSJed Brown   PetscFunctionBegin;
1769566063dSJacob Faibussowitsch   PetscCall(VecGetArray(X, &x));
177c4762a1bSJed Brown   x[0] = 1.19;
178c4762a1bSJed Brown   x[1] = -1.86;
179c4762a1bSJed Brown   x[2] = 1.08;
1809566063dSJacob Faibussowitsch   PetscCall(VecRestoreArray(X, &x));
181c4762a1bSJed Brown   PetscFunctionReturn(0);
182c4762a1bSJed Brown }
183c4762a1bSJed Brown 
184c4762a1bSJed Brown /* ---------------------------------------------------------------------- */
185*9371c9d4SSatish Balay PetscErrorCode InitializeData(AppCtx *user) {
186c4762a1bSJed Brown   PetscReal *t = user->t, *y = user->y;
187c4762a1bSJed Brown   PetscInt   i = 0;
188c4762a1bSJed Brown 
189c4762a1bSJed Brown   PetscFunctionBegin;
190*9371c9d4SSatish Balay   y[i]   = 92.9000;
191*9371c9d4SSatish Balay   t[i++] = 0.5000;
192*9371c9d4SSatish Balay   y[i]   = 78.7000;
193*9371c9d4SSatish Balay   t[i++] = 0.6250;
194*9371c9d4SSatish Balay   y[i]   = 64.2000;
195*9371c9d4SSatish Balay   t[i++] = 0.7500;
196*9371c9d4SSatish Balay   y[i]   = 64.9000;
197*9371c9d4SSatish Balay   t[i++] = 0.8750;
198*9371c9d4SSatish Balay   y[i]   = 57.1000;
199*9371c9d4SSatish Balay   t[i++] = 1.0000;
200*9371c9d4SSatish Balay   y[i]   = 43.3000;
201*9371c9d4SSatish Balay   t[i++] = 1.2500;
202*9371c9d4SSatish Balay   y[i]   = 31.1000;
203*9371c9d4SSatish Balay   t[i++] = 1.7500;
204*9371c9d4SSatish Balay   y[i]   = 23.6000;
205*9371c9d4SSatish Balay   t[i++] = 2.2500;
206*9371c9d4SSatish Balay   y[i]   = 31.0500;
207*9371c9d4SSatish Balay   t[i++] = 1.7500;
208*9371c9d4SSatish Balay   y[i]   = 23.7750;
209*9371c9d4SSatish Balay   t[i++] = 2.2500;
210*9371c9d4SSatish Balay   y[i]   = 17.7375;
211*9371c9d4SSatish Balay   t[i++] = 2.7500;
212*9371c9d4SSatish Balay   y[i]   = 13.8000;
213*9371c9d4SSatish Balay   t[i++] = 3.2500;
214*9371c9d4SSatish Balay   y[i]   = 11.5875;
215*9371c9d4SSatish Balay   t[i++] = 3.7500;
216*9371c9d4SSatish Balay   y[i]   = 9.4125;
217*9371c9d4SSatish Balay   t[i++] = 4.2500;
218*9371c9d4SSatish Balay   y[i]   = 7.7250;
219*9371c9d4SSatish Balay   t[i++] = 4.7500;
220*9371c9d4SSatish Balay   y[i]   = 7.3500;
221*9371c9d4SSatish Balay   t[i++] = 5.2500;
222*9371c9d4SSatish Balay   y[i]   = 8.0250;
223*9371c9d4SSatish Balay   t[i++] = 5.7500;
224*9371c9d4SSatish Balay   y[i]   = 90.6000;
225*9371c9d4SSatish Balay   t[i++] = 0.5000;
226*9371c9d4SSatish Balay   y[i]   = 76.9000;
227*9371c9d4SSatish Balay   t[i++] = 0.6250;
228*9371c9d4SSatish Balay   y[i]   = 71.6000;
229*9371c9d4SSatish Balay   t[i++] = 0.7500;
230*9371c9d4SSatish Balay   y[i]   = 63.6000;
231*9371c9d4SSatish Balay   t[i++] = 0.8750;
232*9371c9d4SSatish Balay   y[i]   = 54.0000;
233*9371c9d4SSatish Balay   t[i++] = 1.0000;
234*9371c9d4SSatish Balay   y[i]   = 39.2000;
235*9371c9d4SSatish Balay   t[i++] = 1.2500;
236*9371c9d4SSatish Balay   y[i]   = 29.3000;
237*9371c9d4SSatish Balay   t[i++] = 1.7500;
238*9371c9d4SSatish Balay   y[i]   = 21.4000;
239*9371c9d4SSatish Balay   t[i++] = 2.2500;
240*9371c9d4SSatish Balay   y[i]   = 29.1750;
241*9371c9d4SSatish Balay   t[i++] = 1.7500;
242*9371c9d4SSatish Balay   y[i]   = 22.1250;
243*9371c9d4SSatish Balay   t[i++] = 2.2500;
244*9371c9d4SSatish Balay   y[i]   = 17.5125;
245*9371c9d4SSatish Balay   t[i++] = 2.7500;
246*9371c9d4SSatish Balay   y[i]   = 14.2500;
247*9371c9d4SSatish Balay   t[i++] = 3.2500;
248*9371c9d4SSatish Balay   y[i]   = 9.4500;
249*9371c9d4SSatish Balay   t[i++] = 3.7500;
250*9371c9d4SSatish Balay   y[i]   = 9.1500;
251*9371c9d4SSatish Balay   t[i++] = 4.2500;
252*9371c9d4SSatish Balay   y[i]   = 7.9125;
253*9371c9d4SSatish Balay   t[i++] = 4.7500;
254*9371c9d4SSatish Balay   y[i]   = 8.4750;
255*9371c9d4SSatish Balay   t[i++] = 5.2500;
256*9371c9d4SSatish Balay   y[i]   = 6.1125;
257*9371c9d4SSatish Balay   t[i++] = 5.7500;
258*9371c9d4SSatish Balay   y[i]   = 80.0000;
259*9371c9d4SSatish Balay   t[i++] = 0.5000;
260*9371c9d4SSatish Balay   y[i]   = 79.0000;
261*9371c9d4SSatish Balay   t[i++] = 0.6250;
262*9371c9d4SSatish Balay   y[i]   = 63.8000;
263*9371c9d4SSatish Balay   t[i++] = 0.7500;
264*9371c9d4SSatish Balay   y[i]   = 57.2000;
265*9371c9d4SSatish Balay   t[i++] = 0.8750;
266*9371c9d4SSatish Balay   y[i]   = 53.2000;
267*9371c9d4SSatish Balay   t[i++] = 1.0000;
268*9371c9d4SSatish Balay   y[i]   = 42.5000;
269*9371c9d4SSatish Balay   t[i++] = 1.2500;
270*9371c9d4SSatish Balay   y[i]   = 26.8000;
271*9371c9d4SSatish Balay   t[i++] = 1.7500;
272*9371c9d4SSatish Balay   y[i]   = 20.4000;
273*9371c9d4SSatish Balay   t[i++] = 2.2500;
274*9371c9d4SSatish Balay   y[i]   = 26.8500;
275*9371c9d4SSatish Balay   t[i++] = 1.7500;
276*9371c9d4SSatish Balay   y[i]   = 21.0000;
277*9371c9d4SSatish Balay   t[i++] = 2.2500;
278*9371c9d4SSatish Balay   y[i]   = 16.4625;
279*9371c9d4SSatish Balay   t[i++] = 2.7500;
280*9371c9d4SSatish Balay   y[i]   = 12.5250;
281*9371c9d4SSatish Balay   t[i++] = 3.2500;
282*9371c9d4SSatish Balay   y[i]   = 10.5375;
283*9371c9d4SSatish Balay   t[i++] = 3.7500;
284*9371c9d4SSatish Balay   y[i]   = 8.5875;
285*9371c9d4SSatish Balay   t[i++] = 4.2500;
286*9371c9d4SSatish Balay   y[i]   = 7.1250;
287*9371c9d4SSatish Balay   t[i++] = 4.7500;
288*9371c9d4SSatish Balay   y[i]   = 6.1125;
289*9371c9d4SSatish Balay   t[i++] = 5.2500;
290*9371c9d4SSatish Balay   y[i]   = 5.9625;
291*9371c9d4SSatish Balay   t[i++] = 5.7500;
292*9371c9d4SSatish Balay   y[i]   = 74.1000;
293*9371c9d4SSatish Balay   t[i++] = 0.5000;
294*9371c9d4SSatish Balay   y[i]   = 67.3000;
295*9371c9d4SSatish Balay   t[i++] = 0.6250;
296*9371c9d4SSatish Balay   y[i]   = 60.8000;
297*9371c9d4SSatish Balay   t[i++] = 0.7500;
298*9371c9d4SSatish Balay   y[i]   = 55.5000;
299*9371c9d4SSatish Balay   t[i++] = 0.8750;
300*9371c9d4SSatish Balay   y[i]   = 50.3000;
301*9371c9d4SSatish Balay   t[i++] = 1.0000;
302*9371c9d4SSatish Balay   y[i]   = 41.0000;
303*9371c9d4SSatish Balay   t[i++] = 1.2500;
304*9371c9d4SSatish Balay   y[i]   = 29.4000;
305*9371c9d4SSatish Balay   t[i++] = 1.7500;
306*9371c9d4SSatish Balay   y[i]   = 20.4000;
307*9371c9d4SSatish Balay   t[i++] = 2.2500;
308*9371c9d4SSatish Balay   y[i]   = 29.3625;
309*9371c9d4SSatish Balay   t[i++] = 1.7500;
310*9371c9d4SSatish Balay   y[i]   = 21.1500;
311*9371c9d4SSatish Balay   t[i++] = 2.2500;
312*9371c9d4SSatish Balay   y[i]   = 16.7625;
313*9371c9d4SSatish Balay   t[i++] = 2.7500;
314*9371c9d4SSatish Balay   y[i]   = 13.2000;
315*9371c9d4SSatish Balay   t[i++] = 3.2500;
316*9371c9d4SSatish Balay   y[i]   = 10.8750;
317*9371c9d4SSatish Balay   t[i++] = 3.7500;
318*9371c9d4SSatish Balay   y[i]   = 8.1750;
319*9371c9d4SSatish Balay   t[i++] = 4.2500;
320*9371c9d4SSatish Balay   y[i]   = 7.3500;
321*9371c9d4SSatish Balay   t[i++] = 4.7500;
322*9371c9d4SSatish Balay   y[i]   = 5.9625;
323*9371c9d4SSatish Balay   t[i++] = 5.2500;
324*9371c9d4SSatish Balay   y[i]   = 5.6250;
325*9371c9d4SSatish Balay   t[i++] = 5.7500;
326*9371c9d4SSatish Balay   y[i]   = 81.5000;
327*9371c9d4SSatish Balay   t[i++] = .5000;
328*9371c9d4SSatish Balay   y[i]   = 62.4000;
329*9371c9d4SSatish Balay   t[i++] = .7500;
330*9371c9d4SSatish Balay   y[i]   = 32.5000;
331*9371c9d4SSatish Balay   t[i++] = 1.5000;
332*9371c9d4SSatish Balay   y[i]   = 12.4100;
333*9371c9d4SSatish Balay   t[i++] = 3.0000;
334*9371c9d4SSatish Balay   y[i]   = 13.1200;
335*9371c9d4SSatish Balay   t[i++] = 3.0000;
336*9371c9d4SSatish Balay   y[i]   = 15.5600;
337*9371c9d4SSatish Balay   t[i++] = 3.0000;
338*9371c9d4SSatish Balay   y[i]   = 5.6300;
339*9371c9d4SSatish Balay   t[i++] = 6.0000;
340*9371c9d4SSatish Balay   y[i]   = 78.0000;
341*9371c9d4SSatish Balay   t[i++] = .5000;
342*9371c9d4SSatish Balay   y[i]   = 59.9000;
343*9371c9d4SSatish Balay   t[i++] = .7500;
344*9371c9d4SSatish Balay   y[i]   = 33.2000;
345*9371c9d4SSatish Balay   t[i++] = 1.5000;
346*9371c9d4SSatish Balay   y[i]   = 13.8400;
347*9371c9d4SSatish Balay   t[i++] = 3.0000;
348*9371c9d4SSatish Balay   y[i]   = 12.7500;
349*9371c9d4SSatish Balay   t[i++] = 3.0000;
350*9371c9d4SSatish Balay   y[i]   = 14.6200;
351*9371c9d4SSatish Balay   t[i++] = 3.0000;
352*9371c9d4SSatish Balay   y[i]   = 3.9400;
353*9371c9d4SSatish Balay   t[i++] = 6.0000;
354*9371c9d4SSatish Balay   y[i]   = 76.8000;
355*9371c9d4SSatish Balay   t[i++] = .5000;
356*9371c9d4SSatish Balay   y[i]   = 61.0000;
357*9371c9d4SSatish Balay   t[i++] = .7500;
358*9371c9d4SSatish Balay   y[i]   = 32.9000;
359*9371c9d4SSatish Balay   t[i++] = 1.5000;
360*9371c9d4SSatish Balay   y[i]   = 13.8700;
361*9371c9d4SSatish Balay   t[i++] = 3.0000;
362*9371c9d4SSatish Balay   y[i]   = 11.8100;
363*9371c9d4SSatish Balay   t[i++] = 3.0000;
364*9371c9d4SSatish Balay   y[i]   = 13.3100;
365*9371c9d4SSatish Balay   t[i++] = 3.0000;
366*9371c9d4SSatish Balay   y[i]   = 5.4400;
367*9371c9d4SSatish Balay   t[i++] = 6.0000;
368*9371c9d4SSatish Balay   y[i]   = 78.0000;
369*9371c9d4SSatish Balay   t[i++] = .5000;
370*9371c9d4SSatish Balay   y[i]   = 63.5000;
371*9371c9d4SSatish Balay   t[i++] = .7500;
372*9371c9d4SSatish Balay   y[i]   = 33.8000;
373*9371c9d4SSatish Balay   t[i++] = 1.5000;
374*9371c9d4SSatish Balay   y[i]   = 12.5600;
375*9371c9d4SSatish Balay   t[i++] = 3.0000;
376*9371c9d4SSatish Balay   y[i]   = 5.6300;
377*9371c9d4SSatish Balay   t[i++] = 6.0000;
378*9371c9d4SSatish Balay   y[i]   = 12.7500;
379*9371c9d4SSatish Balay   t[i++] = 3.0000;
380*9371c9d4SSatish Balay   y[i]   = 13.1200;
381*9371c9d4SSatish Balay   t[i++] = 3.0000;
382*9371c9d4SSatish Balay   y[i]   = 5.4400;
383*9371c9d4SSatish Balay   t[i++] = 6.0000;
384*9371c9d4SSatish Balay   y[i]   = 76.8000;
385*9371c9d4SSatish Balay   t[i++] = .5000;
386*9371c9d4SSatish Balay   y[i]   = 60.0000;
387*9371c9d4SSatish Balay   t[i++] = .7500;
388*9371c9d4SSatish Balay   y[i]   = 47.8000;
389*9371c9d4SSatish Balay   t[i++] = 1.0000;
390*9371c9d4SSatish Balay   y[i]   = 32.0000;
391*9371c9d4SSatish Balay   t[i++] = 1.5000;
392*9371c9d4SSatish Balay   y[i]   = 22.2000;
393*9371c9d4SSatish Balay   t[i++] = 2.0000;
394*9371c9d4SSatish Balay   y[i]   = 22.5700;
395*9371c9d4SSatish Balay   t[i++] = 2.0000;
396*9371c9d4SSatish Balay   y[i]   = 18.8200;
397*9371c9d4SSatish Balay   t[i++] = 2.5000;
398*9371c9d4SSatish Balay   y[i]   = 13.9500;
399*9371c9d4SSatish Balay   t[i++] = 3.0000;
400*9371c9d4SSatish Balay   y[i]   = 11.2500;
401*9371c9d4SSatish Balay   t[i++] = 4.0000;
402*9371c9d4SSatish Balay   y[i]   = 9.0000;
403*9371c9d4SSatish Balay   t[i++] = 5.0000;
404*9371c9d4SSatish Balay   y[i]   = 6.6700;
405*9371c9d4SSatish Balay   t[i++] = 6.0000;
406*9371c9d4SSatish Balay   y[i]   = 75.8000;
407*9371c9d4SSatish Balay   t[i++] = .5000;
408*9371c9d4SSatish Balay   y[i]   = 62.0000;
409*9371c9d4SSatish Balay   t[i++] = .7500;
410*9371c9d4SSatish Balay   y[i]   = 48.8000;
411*9371c9d4SSatish Balay   t[i++] = 1.0000;
412*9371c9d4SSatish Balay   y[i]   = 35.2000;
413*9371c9d4SSatish Balay   t[i++] = 1.5000;
414*9371c9d4SSatish Balay   y[i]   = 20.0000;
415*9371c9d4SSatish Balay   t[i++] = 2.0000;
416*9371c9d4SSatish Balay   y[i]   = 20.3200;
417*9371c9d4SSatish Balay   t[i++] = 2.0000;
418*9371c9d4SSatish Balay   y[i]   = 19.3100;
419*9371c9d4SSatish Balay   t[i++] = 2.5000;
420*9371c9d4SSatish Balay   y[i]   = 12.7500;
421*9371c9d4SSatish Balay   t[i++] = 3.0000;
422*9371c9d4SSatish Balay   y[i]   = 10.4200;
423*9371c9d4SSatish Balay   t[i++] = 4.0000;
424*9371c9d4SSatish Balay   y[i]   = 7.3100;
425*9371c9d4SSatish Balay   t[i++] = 5.0000;
426*9371c9d4SSatish Balay   y[i]   = 7.4200;
427*9371c9d4SSatish Balay   t[i++] = 6.0000;
428*9371c9d4SSatish Balay   y[i]   = 70.5000;
429*9371c9d4SSatish Balay   t[i++] = .5000;
430*9371c9d4SSatish Balay   y[i]   = 59.5000;
431*9371c9d4SSatish Balay   t[i++] = .7500;
432*9371c9d4SSatish Balay   y[i]   = 48.5000;
433*9371c9d4SSatish Balay   t[i++] = 1.0000;
434*9371c9d4SSatish Balay   y[i]   = 35.8000;
435*9371c9d4SSatish Balay   t[i++] = 1.5000;
436*9371c9d4SSatish Balay   y[i]   = 21.0000;
437*9371c9d4SSatish Balay   t[i++] = 2.0000;
438*9371c9d4SSatish Balay   y[i]   = 21.6700;
439*9371c9d4SSatish Balay   t[i++] = 2.0000;
440*9371c9d4SSatish Balay   y[i]   = 21.0000;
441*9371c9d4SSatish Balay   t[i++] = 2.5000;
442*9371c9d4SSatish Balay   y[i]   = 15.6400;
443*9371c9d4SSatish Balay   t[i++] = 3.0000;
444*9371c9d4SSatish Balay   y[i]   = 8.1700;
445*9371c9d4SSatish Balay   t[i++] = 4.0000;
446*9371c9d4SSatish Balay   y[i]   = 8.5500;
447*9371c9d4SSatish Balay   t[i++] = 5.0000;
448*9371c9d4SSatish Balay   y[i]   = 10.1200;
449*9371c9d4SSatish Balay   t[i++] = 6.0000;
450*9371c9d4SSatish Balay   y[i]   = 78.0000;
451*9371c9d4SSatish Balay   t[i++] = .5000;
452*9371c9d4SSatish Balay   y[i]   = 66.0000;
453*9371c9d4SSatish Balay   t[i++] = .6250;
454*9371c9d4SSatish Balay   y[i]   = 62.0000;
455*9371c9d4SSatish Balay   t[i++] = .7500;
456*9371c9d4SSatish Balay   y[i]   = 58.0000;
457*9371c9d4SSatish Balay   t[i++] = .8750;
458*9371c9d4SSatish Balay   y[i]   = 47.7000;
459*9371c9d4SSatish Balay   t[i++] = 1.0000;
460*9371c9d4SSatish Balay   y[i]   = 37.8000;
461*9371c9d4SSatish Balay   t[i++] = 1.2500;
462*9371c9d4SSatish Balay   y[i]   = 20.2000;
463*9371c9d4SSatish Balay   t[i++] = 2.2500;
464*9371c9d4SSatish Balay   y[i]   = 21.0700;
465*9371c9d4SSatish Balay   t[i++] = 2.2500;
466*9371c9d4SSatish Balay   y[i]   = 13.8700;
467*9371c9d4SSatish Balay   t[i++] = 2.7500;
468*9371c9d4SSatish Balay   y[i]   = 9.6700;
469*9371c9d4SSatish Balay   t[i++] = 3.2500;
470*9371c9d4SSatish Balay   y[i]   = 7.7600;
471*9371c9d4SSatish Balay   t[i++] = 3.7500;
472*9371c9d4SSatish Balay   y[i]   = 5.4400;
473*9371c9d4SSatish Balay   t[i++] = 4.2500;
474*9371c9d4SSatish Balay   y[i]   = 4.8700;
475*9371c9d4SSatish Balay   t[i++] = 4.7500;
476*9371c9d4SSatish Balay   y[i]   = 4.0100;
477*9371c9d4SSatish Balay   t[i++] = 5.2500;
478*9371c9d4SSatish Balay   y[i]   = 3.7500;
479*9371c9d4SSatish Balay   t[i++] = 5.7500;
480*9371c9d4SSatish Balay   y[i]   = 24.1900;
481*9371c9d4SSatish Balay   t[i++] = 3.0000;
482*9371c9d4SSatish Balay   y[i]   = 25.7600;
483*9371c9d4SSatish Balay   t[i++] = 3.0000;
484*9371c9d4SSatish Balay   y[i]   = 18.0700;
485*9371c9d4SSatish Balay   t[i++] = 3.0000;
486*9371c9d4SSatish Balay   y[i]   = 11.8100;
487*9371c9d4SSatish Balay   t[i++] = 3.0000;
488*9371c9d4SSatish Balay   y[i]   = 12.0700;
489*9371c9d4SSatish Balay   t[i++] = 3.0000;
490*9371c9d4SSatish Balay   y[i]   = 16.1200;
491*9371c9d4SSatish Balay   t[i++] = 3.0000;
492*9371c9d4SSatish Balay   y[i]   = 70.8000;
493*9371c9d4SSatish Balay   t[i++] = .5000;
494*9371c9d4SSatish Balay   y[i]   = 54.7000;
495*9371c9d4SSatish Balay   t[i++] = .7500;
496*9371c9d4SSatish Balay   y[i]   = 48.0000;
497*9371c9d4SSatish Balay   t[i++] = 1.0000;
498*9371c9d4SSatish Balay   y[i]   = 39.8000;
499*9371c9d4SSatish Balay   t[i++] = 1.5000;
500*9371c9d4SSatish Balay   y[i]   = 29.8000;
501*9371c9d4SSatish Balay   t[i++] = 2.0000;
502*9371c9d4SSatish Balay   y[i]   = 23.7000;
503*9371c9d4SSatish Balay   t[i++] = 2.5000;
504*9371c9d4SSatish Balay   y[i]   = 29.6200;
505*9371c9d4SSatish Balay   t[i++] = 2.0000;
506*9371c9d4SSatish Balay   y[i]   = 23.8100;
507*9371c9d4SSatish Balay   t[i++] = 2.5000;
508*9371c9d4SSatish Balay   y[i]   = 17.7000;
509*9371c9d4SSatish Balay   t[i++] = 3.0000;
510*9371c9d4SSatish Balay   y[i]   = 11.5500;
511*9371c9d4SSatish Balay   t[i++] = 4.0000;
512*9371c9d4SSatish Balay   y[i]   = 12.0700;
513*9371c9d4SSatish Balay   t[i++] = 5.0000;
514*9371c9d4SSatish Balay   y[i]   = 8.7400;
515*9371c9d4SSatish Balay   t[i++] = 6.0000;
516*9371c9d4SSatish Balay   y[i]   = 80.7000;
517*9371c9d4SSatish Balay   t[i++] = .5000;
518*9371c9d4SSatish Balay   y[i]   = 61.3000;
519*9371c9d4SSatish Balay   t[i++] = .7500;
520*9371c9d4SSatish Balay   y[i]   = 47.5000;
521*9371c9d4SSatish Balay   t[i++] = 1.0000;
522*9371c9d4SSatish Balay   y[i]   = 29.0000;
523*9371c9d4SSatish Balay   t[i++] = 1.5000;
524*9371c9d4SSatish Balay   y[i]   = 24.0000;
525*9371c9d4SSatish Balay   t[i++] = 2.0000;
526*9371c9d4SSatish Balay   y[i]   = 17.7000;
527*9371c9d4SSatish Balay   t[i++] = 2.5000;
528*9371c9d4SSatish Balay   y[i]   = 24.5600;
529*9371c9d4SSatish Balay   t[i++] = 2.0000;
530*9371c9d4SSatish Balay   y[i]   = 18.6700;
531*9371c9d4SSatish Balay   t[i++] = 2.5000;
532*9371c9d4SSatish Balay   y[i]   = 16.2400;
533*9371c9d4SSatish Balay   t[i++] = 3.0000;
534*9371c9d4SSatish Balay   y[i]   = 8.7400;
535*9371c9d4SSatish Balay   t[i++] = 4.0000;
536*9371c9d4SSatish Balay   y[i]   = 7.8700;
537*9371c9d4SSatish Balay   t[i++] = 5.0000;
538*9371c9d4SSatish Balay   y[i]   = 8.5100;
539*9371c9d4SSatish Balay   t[i++] = 6.0000;
540*9371c9d4SSatish Balay   y[i]   = 66.7000;
541*9371c9d4SSatish Balay   t[i++] = .5000;
542*9371c9d4SSatish Balay   y[i]   = 59.2000;
543*9371c9d4SSatish Balay   t[i++] = .7500;
544*9371c9d4SSatish Balay   y[i]   = 40.8000;
545*9371c9d4SSatish Balay   t[i++] = 1.0000;
546*9371c9d4SSatish Balay   y[i]   = 30.7000;
547*9371c9d4SSatish Balay   t[i++] = 1.5000;
548*9371c9d4SSatish Balay   y[i]   = 25.7000;
549*9371c9d4SSatish Balay   t[i++] = 2.0000;
550*9371c9d4SSatish Balay   y[i]   = 16.3000;
551*9371c9d4SSatish Balay   t[i++] = 2.5000;
552*9371c9d4SSatish Balay   y[i]   = 25.9900;
553*9371c9d4SSatish Balay   t[i++] = 2.0000;
554*9371c9d4SSatish Balay   y[i]   = 16.9500;
555*9371c9d4SSatish Balay   t[i++] = 2.5000;
556*9371c9d4SSatish Balay   y[i]   = 13.3500;
557*9371c9d4SSatish Balay   t[i++] = 3.0000;
558*9371c9d4SSatish Balay   y[i]   = 8.6200;
559*9371c9d4SSatish Balay   t[i++] = 4.0000;
560*9371c9d4SSatish Balay   y[i]   = 7.2000;
561*9371c9d4SSatish Balay   t[i++] = 5.0000;
562*9371c9d4SSatish Balay   y[i]   = 6.6400;
563*9371c9d4SSatish Balay   t[i++] = 6.0000;
564*9371c9d4SSatish Balay   y[i]   = 13.6900;
565*9371c9d4SSatish Balay   t[i++] = 3.0000;
566*9371c9d4SSatish Balay   y[i]   = 81.0000;
567*9371c9d4SSatish Balay   t[i++] = .5000;
568*9371c9d4SSatish Balay   y[i]   = 64.5000;
569*9371c9d4SSatish Balay   t[i++] = .7500;
570*9371c9d4SSatish Balay   y[i]   = 35.5000;
571*9371c9d4SSatish Balay   t[i++] = 1.5000;
572*9371c9d4SSatish Balay   y[i]   = 13.3100;
573*9371c9d4SSatish Balay   t[i++] = 3.0000;
574*9371c9d4SSatish Balay   y[i]   = 4.8700;
575*9371c9d4SSatish Balay   t[i++] = 6.0000;
576*9371c9d4SSatish Balay   y[i]   = 12.9400;
577*9371c9d4SSatish Balay   t[i++] = 3.0000;
578*9371c9d4SSatish Balay   y[i]   = 5.0600;
579*9371c9d4SSatish Balay   t[i++] = 6.0000;
580*9371c9d4SSatish Balay   y[i]   = 15.1900;
581*9371c9d4SSatish Balay   t[i++] = 3.0000;
582*9371c9d4SSatish Balay   y[i]   = 14.6200;
583*9371c9d4SSatish Balay   t[i++] = 3.0000;
584*9371c9d4SSatish Balay   y[i]   = 15.6400;
585*9371c9d4SSatish Balay   t[i++] = 3.0000;
586*9371c9d4SSatish Balay   y[i]   = 25.5000;
587*9371c9d4SSatish Balay   t[i++] = 1.7500;
588*9371c9d4SSatish Balay   y[i]   = 25.9500;
589*9371c9d4SSatish Balay   t[i++] = 1.7500;
590*9371c9d4SSatish Balay   y[i]   = 81.7000;
591*9371c9d4SSatish Balay   t[i++] = .5000;
592*9371c9d4SSatish Balay   y[i]   = 61.6000;
593*9371c9d4SSatish Balay   t[i++] = .7500;
594*9371c9d4SSatish Balay   y[i]   = 29.8000;
595*9371c9d4SSatish Balay   t[i++] = 1.7500;
596*9371c9d4SSatish Balay   y[i]   = 29.8100;
597*9371c9d4SSatish Balay   t[i++] = 1.7500;
598*9371c9d4SSatish Balay   y[i]   = 17.1700;
599*9371c9d4SSatish Balay   t[i++] = 2.7500;
600*9371c9d4SSatish Balay   y[i]   = 10.3900;
601*9371c9d4SSatish Balay   t[i++] = 3.7500;
602*9371c9d4SSatish Balay   y[i]   = 28.4000;
603*9371c9d4SSatish Balay   t[i++] = 1.7500;
604*9371c9d4SSatish Balay   y[i]   = 28.6900;
605*9371c9d4SSatish Balay   t[i++] = 1.7500;
606*9371c9d4SSatish Balay   y[i]   = 81.3000;
607*9371c9d4SSatish Balay   t[i++] = .5000;
608*9371c9d4SSatish Balay   y[i]   = 60.9000;
609*9371c9d4SSatish Balay   t[i++] = .7500;
610*9371c9d4SSatish Balay   y[i]   = 16.6500;
611*9371c9d4SSatish Balay   t[i++] = 2.7500;
612*9371c9d4SSatish Balay   y[i]   = 10.0500;
613*9371c9d4SSatish Balay   t[i++] = 3.7500;
614*9371c9d4SSatish Balay   y[i]   = 28.9000;
615*9371c9d4SSatish Balay   t[i++] = 1.7500;
616*9371c9d4SSatish Balay   y[i]   = 28.9500;
617*9371c9d4SSatish Balay   t[i++] = 1.7500;
618c4762a1bSJed Brown   PetscFunctionReturn(0);
619c4762a1bSJed Brown }
620c4762a1bSJed Brown 
621c4762a1bSJed Brown /*TEST
622c4762a1bSJed Brown 
623c4762a1bSJed Brown      build:
624c4762a1bSJed Brown        requires: !complex
625c4762a1bSJed Brown 
626c4762a1bSJed Brown      test:
627c4762a1bSJed Brown        args:  -tao_smonitor -tao_max_it 100 -tao_type pounders -tao_pounders_delta 0.05 -tao_gatol 1.e-5
628c4762a1bSJed Brown        requires: !single
629c4762a1bSJed Brown        TODO: produces different output for many different systems
630c4762a1bSJed Brown 
631c4762a1bSJed Brown      test:
632c4762a1bSJed Brown        suffix: 2
633c4762a1bSJed Brown        args: -tao_smonitor -tao_max_it 100 -wtype 1 -tao_type pounders -tao_pounders_delta 0.05 -tao_gatol 1.e-5
634c4762a1bSJed Brown        requires: !single
635c4762a1bSJed Brown        TODO: produces different output for many different systems
636c4762a1bSJed Brown 
637c4762a1bSJed Brown      test:
638c4762a1bSJed Brown        suffix: 3
639c4762a1bSJed Brown        args: -tao_smonitor -tao_max_it 100 -wtype 2 -tao_type pounders -tao_pounders_delta 0.05 -tao_gatol 1.e-5
640c4762a1bSJed Brown        requires: !single
641c4762a1bSJed Brown        TODO: produces different output for many different systems
642c4762a1bSJed Brown 
643c4762a1bSJed Brown      test:
644c4762a1bSJed Brown        suffix: 4
645c4762a1bSJed Brown        args: -tao_smonitor -tao_max_it 100 -tao_type pounders -tao_pounders_delta 0.05 -pounders_subsolver_tao_type blmvm -tao_gatol 1.e-5
646c4762a1bSJed Brown        requires: !single
647c4762a1bSJed Brown        TODO: produces different output for many different systems
648c4762a1bSJed Brown 
649c4762a1bSJed Brown  TEST*/
650