xref: /petsc/src/snes/tutorials/ex69.c (revision 030f984af8d8bb4c203755d35bded3c05b3d83ce) !
1 static char help[] = "The variable-viscosity Stokes Problem in 2d with finite elements.\n\
2 We solve the Stokes problem in a square domain\n\
3 and compare against exact solutions from Mirko Velic.\n\n\n";
4 
5 /* We discretize the variable-viscosity Stokes problem using the finite element method on an unstructured mesh. The weak form equations are
6 \begin{align*}
7   (\nabla v, \mu (\nabla u + {\nabla u}^T)) - (\nabla\cdot v, p) + (v, f) &= 0 \\
8   (q, \nabla\cdot u)                                                      &= 0
9 \end{align*}
10 Free slip conditions for velocity are enforced on every wall. The pressure is constrained to have zero integral over the domain.
11 
12 To produce nice output, use
13 
14   -dm_refine 3 -show_error -dm_view hdf5:sol1.h5 -error_vec_view hdf5:sol1.h5::append -sol_vec_view hdf5:sol1.h5::append -exact_vec_view hdf5:sol1.h5::append
15 */
16 
17 #include <petscdmplex.h>
18 #include <petscsnes.h>
19 #include <petscds.h>
20 #include <petscbag.h>
21 
22 typedef enum {SOLKX, SOLCX, NUM_SOL_TYPES} SolutionType;
23 const char *solTypes[NUM_SOL_TYPES+1] = {"solkx", "solcx", "unknown"};
24 
25 typedef struct {
26   PetscInt  n, m;       /* x- and y-wavelengths for variation across the domain */
27   /* SolKx */
28   PetscReal B;          /* Exponential scale for viscosity variation */
29   /* SolCx */
30   PetscReal etaA, etaB; /* Two viscosities for discontinuous change */
31   PetscReal xc;         /* The location of viscosity jump */
32 } Parameter;
33 
34 typedef struct {
35   SolutionType solType; /* The type of exact solution */
36   PetscBag     bag;     /* Holds problem parameters */
37 } AppCtx;
38 
39 static PetscErrorCode zero(PetscInt dim, PetscReal time, const PetscReal coords[], PetscInt Nc, PetscScalar *u, void *ctx)
40 {
41   PetscInt c;
42   for (c = 0; c < Nc; ++c) u[c] = 0.0;
43   return 0;
44 }
45 static PetscErrorCode one(PetscInt dim, PetscReal time, const PetscReal coords[], PetscInt Nc, PetscScalar *u, void *ctx)
46 {
47   PetscInt c;
48   for (c = 0; c < Nc; ++c) u[c] = 1.0;
49   return 0;
50 }
51 
52 static void f0_u(PetscInt dim, PetscInt Nf, PetscInt NfAux,
53                  const PetscInt uOff[], const PetscInt uOff_x[], const PetscScalar u[], const PetscScalar u_t[], const PetscScalar u_x[],
54                  const PetscInt aOff[], const PetscInt aOff_x[], const PetscScalar a[], const PetscScalar a_t[], const PetscScalar a_x[],
55                  PetscReal t, const PetscReal x[], PetscInt numConstants, const PetscScalar constants[], PetscScalar f0[])
56 {
57   f0[0] = 0.0;
58   f0[1] = -PetscSinScalar(constants[1]*PETSC_PI*x[1])*PetscCosScalar(constants[0]*PETSC_PI*x[0]);
59 }
60 
61 static void stokes_momentum_kx(PetscInt dim, PetscInt Nf, PetscInt NfAux,
62                                const PetscInt uOff[], const PetscInt uOff_x[], const PetscScalar u[], const PetscScalar u_t[], const PetscScalar u_x[],
63                                const PetscInt aOff[], const PetscInt aOff_x[], const PetscScalar a[], const PetscScalar a_t[], const PetscScalar a_x[],
64                                PetscReal t, const PetscReal x[], PetscInt numConstants, const PetscScalar constants[], PetscScalar f1[])
65 {
66   const PetscReal mu = PetscExpReal(2.0*PetscRealPart(constants[2])*x[0]);
67   PetscInt        c, d;
68 
69   for (c = 0; c < dim; ++c) {
70     for (d = 0; d < dim; ++d) {
71       f1[c*dim+d] = mu * (u_x[c*dim+d] + u_x[d*dim+c]);
72     }
73     f1[c*dim+c] -= u[dim];
74   }
75 }
76 
77 static void stokes_momentum_cx(PetscInt dim, PetscInt Nf, PetscInt NfAux,
78                                const PetscInt uOff[], const PetscInt uOff_x[], const PetscScalar u[], const PetscScalar u_t[], const PetscScalar u_x[],
79                                const PetscInt aOff[], const PetscInt aOff_x[], const PetscScalar a[], const PetscScalar a_t[], const PetscScalar a_x[],
80                                PetscReal t, const PetscReal x[], PetscInt numConstants, const PetscScalar constants[], PetscScalar f1[])
81 {
82   const PetscReal mu = x[0] < PetscRealPart(constants[4]) ? PetscRealPart(constants[2]) : PetscRealPart(constants[3]);
83   PetscInt        c, d;
84 
85   for (c = 0; c < dim; ++c) {
86     for (d = 0; d < dim; ++d) {
87       f1[c*dim+d] = mu * (u_x[c*dim+d] + u_x[d*dim+c]);
88     }
89     f1[c*dim+c] -= u[dim];
90   }
91 }
92 
93 static void stokes_mass(PetscInt dim, PetscInt Nf, PetscInt NfAux,
94                         const PetscInt uOff[], const PetscInt uOff_x[], const PetscScalar u[], const PetscScalar u_t[], const PetscScalar u_x[],
95                         const PetscInt aOff[], const PetscInt aOff_x[], const PetscScalar a[], const PetscScalar a_t[], const PetscScalar a_x[],
96                         PetscReal t, const PetscReal x[], PetscInt numConstants, const PetscScalar constants[], PetscScalar f0[])
97 {
98   PetscInt d;
99   f0[0] = 0.0;
100   for (d = 0; d < dim; ++d) f0[0] -= u_x[d*dim+d];
101 }
102 
103 static void f1_zero(PetscInt dim, PetscInt Nf, PetscInt NfAux,
104                     const PetscInt uOff[], const PetscInt uOff_x[], const PetscScalar u[], const PetscScalar u_t[], const PetscScalar u_x[],
105                     const PetscInt aOff[], const PetscInt aOff_x[], const PetscScalar a[], const PetscScalar a_t[], const PetscScalar a_x[],
106                     PetscReal t, const PetscReal x[], PetscInt numConstants, const PetscScalar constants[], PetscScalar f1[])
107 {
108   PetscInt d;
109   for (d = 0; d < dim*dim; ++d) f1[d] = 0.0;
110 }
111 
112 /* < q, \nabla\cdot u >, J_{pu} */
113 static void stokes_mass_J(PetscInt dim, PetscInt Nf, PetscInt NfAux,
114                           const PetscInt uOff[], const PetscInt uOff_x[], const PetscScalar u[], const PetscScalar u_t[], const PetscScalar u_x[],
115                           const PetscInt aOff[], const PetscInt aOff_x[], const PetscScalar a[], const PetscScalar a_t[], const PetscScalar a_x[],
116                           PetscReal t, PetscReal u_tShift, const PetscReal x[], PetscInt numConstants, const PetscScalar constants[], PetscScalar g1[])
117 {
118   PetscInt d;
119   for (d = 0; d < dim; ++d) g1[d*dim+d] = -1.0; /* \frac{\partial\phi^{u_d}}{\partial x_d} */
120 }
121 
122 /* -< \nabla\cdot v, p >, J_{up} */
123 static void stokes_momentum_pres_J(PetscInt dim, PetscInt Nf, PetscInt NfAux,
124                                    const PetscInt uOff[], const PetscInt uOff_x[], const PetscScalar u[], const PetscScalar u_t[], const PetscScalar u_x[],
125                                    const PetscInt aOff[], const PetscInt aOff_x[], const PetscScalar a[], const PetscScalar a_t[], const PetscScalar a_x[],
126                                    PetscReal t, PetscReal u_tShift, const PetscReal x[], PetscInt numConstants, const PetscScalar constants[], PetscScalar g2[])
127 {
128   PetscInt d;
129   for (d = 0; d < dim; ++d) g2[d*dim+d] = -1.0; /* \frac{\partial\psi^{u_d}}{\partial x_d} */
130 }
131 
132 /* < \nabla v, \nabla u + {\nabla u}^T >, J_{uu}
133    This just gives \nabla u, give the perdiagonal for the transpose */
134 static void stokes_momentum_vel_J_kx(PetscInt dim, PetscInt Nf, PetscInt NfAux,
135                                      const PetscInt uOff[], const PetscInt uOff_x[], const PetscScalar u[], const PetscScalar u_t[], const PetscScalar u_x[],
136                                      const PetscInt aOff[], const PetscInt aOff_x[], const PetscScalar a[], const PetscScalar a_t[], const PetscScalar a_x[],
137                                      PetscReal t, PetscReal u_tShift, const PetscReal x[], PetscInt numConstants, const PetscScalar constants[], PetscScalar g3[])
138 {
139   const PetscReal mu  = PetscExpReal(2.0*PetscRealPart(constants[2])*x[0]);
140   PetscInt        cI, d;
141 
142   for (cI = 0; cI < dim; ++cI) {
143     for (d = 0; d < dim; ++d) {
144       g3[((cI*dim+cI)*dim+d)*dim+d] += mu; /*g3[cI, cI, d, d]*/
145       g3[((cI*dim+d)*dim+d)*dim+cI] += mu; /*g3[cI, d, d, cI]*/
146     }
147   }
148 }
149 static void stokes_momentum_vel_J_cx(PetscInt dim, PetscInt Nf, PetscInt NfAux,
150                                      const PetscInt uOff[], const PetscInt uOff_x[], const PetscScalar u[], const PetscScalar u_t[], const PetscScalar u_x[],
151                                      const PetscInt aOff[], const PetscInt aOff_x[], const PetscScalar a[], const PetscScalar a_t[], const PetscScalar a_x[],
152                                      PetscReal t, PetscReal u_tShift, const PetscReal x[], PetscInt numConstants, const PetscScalar constants[], PetscScalar g3[])
153 {
154   const PetscReal mu = x[0] < PetscRealPart(constants[4]) ? PetscRealPart(constants[2]) : PetscRealPart(constants[3]);
155   PetscInt        cI, d;
156 
157   for (cI = 0; cI < dim; ++cI) {
158     for (d = 0; d < dim; ++d) {
159       g3[((cI*dim+cI)*dim+d)*dim+d] += mu; /*g3[cI, cI, d, d]*/
160       g3[((cI*dim+d)*dim+d)*dim+cI] += mu; /*g3[cI, d, d, cI]*/
161     }
162   }
163 }
164 
165 /* 1/mu < q, I q >, Jp_{pp} */
166 static void stokes_identity_J_kx(PetscInt dim, PetscInt Nf, PetscInt NfAux,
167                                  const PetscInt uOff[], const PetscInt uOff_x[], const PetscScalar u[], const PetscScalar u_t[], const PetscScalar u_x[],
168                                  const PetscInt aOff[], const PetscInt aOff_x[], const PetscScalar a[], const PetscScalar a_t[], const PetscScalar a_x[],
169                                  PetscReal t, PetscReal u_tShift, const PetscReal x[], PetscInt numConstants, const PetscScalar constants[], PetscScalar g0[])
170 {
171   const PetscReal mu = PetscExpReal(2.0*PetscRealPart(constants[2])*x[0]);
172   g0[0] = 1.0/mu;
173 }
174 
175 static void stokes_identity_J_cx(PetscInt dim, PetscInt Nf, PetscInt NfAux,
176                                  const PetscInt uOff[], const PetscInt uOff_x[], const PetscScalar u[], const PetscScalar u_t[], const PetscScalar u_x[],
177                                  const PetscInt aOff[], const PetscInt aOff_x[], const PetscScalar a[], const PetscScalar a_t[], const PetscScalar a_x[],
178                                  PetscReal t, PetscReal u_tShift, const PetscReal x[], PetscInt numConstants, const PetscScalar constants[], PetscScalar g0[])
179 {
180   const PetscReal mu = x[0] < PetscRealPart(constants[4]) ? PetscRealPart(constants[2]) : PetscRealPart(constants[3]);
181   g0[0] = 1.0/mu;
182 }
183 
184 /*
185   SolKxSolution - Exact Stokes solutions for exponentially varying viscosity
186 
187  Input Parameters:
188 + pos   - The (x,z) coordinate at which to evaluate the solution
189 . n     - The constant defining the x-dependence of the forcing function
190 . m     - The constant defining the z-dependence of the forcing function
191 - B     - The viscosity coefficient
192 
193   Output Parameters:
194 + vel   - The (x,z)-velocity at (x,z), or NULL
195 . p     - The pressure at (x,z), or NULL
196 . s     - The total stress (sigma_xx, sigma_xz, sigma_zz) at (x,z), or NULL
197 . gamma - The strain rate, or NULL
198 - mu    - The viscosity at (x,z), or NULL
199 
200   Note:
201 $  The domain is the square 0 <= x,z <= 1. We solve the Stokes equation for incompressible flow with free-slip boundary
202 $  conditions everywhere. The forcing term f is given by
203 $
204 $    fx = 0
205 $    fz = sigma*sin(km*z)*cos(kn*x)
206 $
207 $  where
208 $
209 $    km = m*Pi (m may be non-integral)
210 $    kn = n*Pi
211 $
212 $  meaning that the density rho is -sigma*sin(km*z)*cos(kn*x). Here we set sigma = 1.
213 $  The viscosity eta is exp(2*B*x).
214 */
215 static PetscErrorCode SolKxSolution(const PetscReal pos[], PetscReal m, PetscInt n, PetscReal B,
216                                     PetscScalar vel[], PetscScalar *p, PetscScalar s[], PetscScalar gamma[], PetscScalar *mu)
217 {
218   PetscReal sigma = 1.0;
219   PetscReal Z;
220   PetscReal u1,u2,u3,u4,u5,u6;
221   PetscReal sum1,sum2,sum3,sum4,sum5,sum6;
222   PetscReal kn,km,x,z;
223   PetscReal _PC1,_PC2,_PC3,_PC4;
224   PetscReal Rp, UU, VV;
225   PetscReal a,b,r,_aa,_bb,AA,BB,Rm;
226   PetscReal num1,num2,num3,num4,den1;
227 
228   PetscReal t1,t2,t3,t4,t5,t6,t7,t8,t9,t10;
229   PetscReal t11,t12,t13,t14,t15,t16,t17,t18,t19,t20;
230   PetscReal t21,t22,t23,t24,t25,t26,t27,t28,t29,t30;
231   PetscReal t31,t32,t33,t34,t35,t36,t37,t38,t39,t40;
232   PetscReal t41,t42,t43,t44,t45,t46,t47,t49,t51,t53;
233   PetscReal t56,t58,t61,t62,t63,t64,t65,t66,t67,t68;
234   PetscReal t69,t70,t71,t72,t73,t74,t75,t76,t77,t78;
235   PetscReal t79,t80,t81,t82,t83,t84,t85,t86,t87,t88;
236   PetscReal t89,t90,t91,t92,t93,t94,t95,t96,t97,t99;
237   PetscReal t100,t101,t103,t104,t105,t106,t107,t108,t109,t110;
238   PetscReal t111,t112,t113,t114,t115,t116,t117,t118,t119,t120;
239   PetscReal t121,t124,t125,t126,t127,t129,t130,t132,t133,t135;
240   PetscReal t136,t138,t140,t141,t142,t143,t152,t160,t162;
241 
242   PetscFunctionBegin;
243   /*************************************************************************/
244   /*************************************************************************/
245   /* rho = -sin(km*z)*cos(kn*x) */
246   x = pos[0];
247   z = pos[1];
248   Z = PetscExpReal( 2.0 * B * x);
249   km = m*PETSC_PI; /* solution valid for km not zero -- should get trivial solution if km=0 */
250   kn = (PetscReal) n*PETSC_PI;
251   /*************************************************************************/
252   /*************************************************************************/
253   a = B*B + km*km;
254   b = 2.0*km*B;
255   r = PetscSqrtReal(a*a + b*b);
256   Rp = PetscSqrtReal( (r+a)/2.0);
257   Rm  = PetscSqrtReal( (r-a)/2.0);
258   UU  = Rp - B;
259   VV = Rp + B;
260 
261   sum1=0.0;
262   sum2=0.0;
263   sum3=0.0;
264   sum4=0.0;
265   sum5=0.0;
266   sum6=0.0;
267   /*sum7=0.0;*/
268 
269   /*******************************************/
270   /*         calculate the constants         */
271   /*******************************************/
272 
273   t1 = kn * kn;
274   t4 = km * km;
275   t5 = t4 + t1;
276   t6 = t5 * t5;
277   t8 = pow(km + kn, 0.2e1);
278   t9 = B * B;
279   t16 = pow(km - kn, 0.2e1);
280   _aa = -0.4e1 * B * t1 * sigma * t5 / (t6 + 0.4e1 * t8 * t9) / (t6 + 0.4e1 * t16 * t9);
281 
282   t2 = km * km;
283   t3 = kn * kn;
284   t5 = pow(t2 + t3, 0.2e1);
285   t6 = km - kn;
286   t7 = km + kn;
287   t9 = B * B;
288   t13 = t7 * t7;
289   t19 = t6 * t6;
290   _bb = sigma * kn * (t5 + 0.4e1 * t6 * t7 * t9) / (t5 + 0.4e1 * t13 * t9) / (t5 + 0.4e1 * t19 * t9);
291 
292   AA = _aa;
293   BB = _bb;
294 
295   /*******************************************/
296   /*       calculate the velocities etc      */
297   /*******************************************/
298   t1 = Rm * Rm;
299   t2 = B - Rp;
300   t4 = Rp + B;
301   t6 = UU * x;
302   t9 = PetscExpReal(t6 - 0.4e1 * Rp);
303   t13 = B * B;
304   t16 = Rp * t1;
305   t18 = Rp * Rp;
306   t19 = B * t18;
307   t20 = t13 * Rp;
308   t22 = kn * kn;
309   t24 = B * t1;
310   t32 = 0.8e1 * t13 * BB * kn * Rp;
311   t34 = 0.2e1 * Rm;
312   t35 = PetscCosReal(t34);
313   t37 = Rp * Rm;
314   t49 = PetscSinReal(t34);
315   t63 = PetscExpReal(t6 - 0.2e1 * Rp);
316   t65 = Rm * t2;
317   t67 = 0.2e1 * B * kn;
318   t68 = B * Rm;
319   t69 = t67 + t68 + t37;
320   t73 = 0.3e1 * t13;
321   t75 = 0.2e1 * B * Rp;
322   t76 = t73 - t75 + t1 - t22 - t18;
323   t78 = t65 * t76 * BB;
324   t80 = Rm - kn;
325   t81 = PetscCosReal(t80);
326   t83 = -t67 + t68 + t37;
327   t88 = Rm + kn;
328   t89 = PetscCosReal(t88);
329   t92 = t65 * t76 * AA;
330   t97 = PetscSinReal(t80);
331   t103 = PetscSinReal(t88);
332   t108 = PetscExpReal(t6 - 0.3e1 * Rp - B);
333   t110 = Rm * t4;
334   t111 = t67 + t68 - t37;
335   t115 = t73 + t75 + t1 - t22 - t18;
336   t117 = t110 * t115 * BB;
337   t120 = -t67 + t68 - t37;
338   t127 = t110 * t115 * AA;
339   t140 = PetscExpReal(t6 - Rp - B);
340   num1 = -0.4e1 * t1 * t2 * t4 * AA * t9 + ((0.2e1 * Rp * (0.3e1 * t13 * B - 0.2e1 * t16 - t19 - 0.2e1 * t20 - B * t22 - t24) * AA - t32) * t35 + (0.2e1 * t37 * (t1 + 0.5e1 * t13 - t22 - t18) * AA - 0.8e1 * B * BB * kn * Rm * Rp) * t49 - 0.2e1 * B * (0.3e1 * t20 - Rp * t22 - t18 * Rp - 0.2e1 * t19 - t16 - 0.2e1 * t24) * AA + t32) * t63 + ((0.2e1 * t65 * t69 * AA + t78) * t81 + (0.2e1 * t65 * t83 * AA - t78) * t89 + (t92 - 0.2e1 * t65 * t69 * BB) * t97 + (t92 + 0.2e1 * t65 * t83 * BB) * t103) * t108 + ((-0.2e1 * t110 * t111 * AA - t117) * t81 + (-0.2e1 * t110 * t120 * AA + t117) * t89 + (-t127 + 0.2e1 * t110 * t111 * BB) * t97 + (-t127 - 0.2e1 * t110 * t120 * BB) * t103) * t140;
341 
342   t1 = Rp + B;
343   t2 = Rm * t1;
344   t3 = B * B;
345   t4 = 0.3e1 * t3;
346   t5 = B * Rp;
347   t7 = Rm * Rm;
348   t8 = kn * kn;
349   t9 = Rp * Rp;
350   t10 = t4 + 0.2e1 * t5 + t7 - t8 - t9;
351   t12 = t2 * t10 * AA;
352   t14 = B * Rm;
353   t20 = UU * x;
354   t23 = PetscExpReal(t20 - 0.4e1 * Rp);
355   t25 = Rp * Rm;
356   t32 = Rm * kn;
357   t37 = 0.2e1 * Rm;
358   t38 = PetscCosReal(t37);
359   t40 = t3 * B;
360   t44 = B * t9;
361   t45 = t3 * Rp;
362   t53 = t3 * BB;
363   t58 = PetscSinReal(t37);
364   t69 = PetscExpReal(t20 - 0.2e1 * Rp);
365   t72 = 0.3e1 * t40 * Rm;
366   t73 = t9 * Rp;
367   t74 = t73 * Rm;
368   t75 = t7 * Rm;
369   t76 = B * t75;
370   t77 = t14 * t8;
371   t78 = Rp * t75;
372   t80 = 0.8e1 * t45 * kn;
373   t81 = t25 * t8;
374   t83 = 0.5e1 * t45 * Rm;
375   t84 = t44 * Rm;
376   t85 = t72 - t74 + t76 - t77 + t78 + t80 - t81 + t83 + t84;
377   t88 = 0.2e1 * t9 * t3;
378   t90 = 0.3e1 * t40 * Rp;
379   t91 = t7 * t3;
380   t93 = 0.2e1 * t5 * t32;
381   t94 = t5 * t7;
382   t95 = t5 * t8;
383   t96 = B * t73;
384   t97 = t7 * t9;
385   t100 = 0.2e1 * t3 * Rm * kn;
386   t101 = -t88 + t90 - t91 - t93 - t94 - t95 - t96 - t97 - t100;
387   t105 = Rm - kn;
388   t106 = PetscCosReal(t105);
389   t108 = t72 - t80 + t83 + t76 + t84 - t81 - t74 + t78 - t77;
390   t110 = -t97 - t96 - t88 + t100 + t90 - t95 + t93 - t91 - t94;
391   t114 = Rm + kn;
392   t115 = PetscCosReal(t114);
393   t121 = PetscSinReal(t105);
394   t127 = PetscSinReal(t114);
395   t132 = PetscExpReal(t20 - 0.3e1 * Rp - B);
396   t135 = 0.2e1 * B * kn;
397   t136 = t135 + t14 - t25;
398   t142 = -t135 + t14 - t25;
399   t152 = t2 * t10 * BB;
400   t162 = PetscExpReal(t20 - Rp - B);
401   num2 = (0.2e1 * t12 - 0.8e1 * t14 * kn * t1 * BB) * t23 + ((-0.2e1 * t25 * (t7 + 0.5e1 * t3 - t8 - t9) * AA + 0.8e1 * B * BB * t32 * Rp) * t38 + (0.2e1 * Rp * (0.3e1 * t40 - 0.2e1 * Rp * t7 - t44 - 0.2e1 * t45 - B * t8 - B * t7) * AA - 0.8e1 * t53 * kn * Rp) * t58 - 0.2e1 * t14 * (-t8 + t9 + t4 + t7) * AA + 0.8e1 * t53 * t32) * t69 + ((-t85 * AA - 0.2e1 * t101 * BB) * t106 + (-t108 * AA + 0.2e1 * t110 * BB) * t115 + (-0.2e1 * t101 * AA + t85 * BB) * t121 + (-0.2e1 * t110 * AA - t108 * BB) * t127) * t132 + ((t12 - 0.2e1 * t2 * t136 * BB) * t106 + (t12 + 0.2e1 * t2 * t142 * BB) * t115 + (-0.2e1 * t2 * t136 * AA - t152) * t121 + (-0.2e1 * t2 * t142 * AA + t152) * t127) * t162;
402 
403   t1 = Rm * Rm;
404   t2 = B - Rp;
405   t4 = Rp + B;
406   t6 = VV * x;
407   t7 = PetscExpReal(-t6);
408   t11 = kn * kn;
409   t13 = B * t1;
410   t14 = Rp * Rp;
411   t15 = B * t14;
412   t16 = B * B;
413   t17 = t16 * Rp;
414   t21 = Rp * t1;
415   t30 = 0.8e1 * t16 * BB * kn * Rp;
416   t32 = 0.2e1 * Rm;
417   t33 = PetscCosReal(t32);
418   t35 = Rp * Rm;
419   t47 = PetscSinReal(t32);
420   t61 = PetscExpReal(-t6 - 0.2e1 * Rp);
421   t63 = Rm * t2;
422   t65 = 0.2e1 * B * kn;
423   t66 = B * Rm;
424   t67 = t65 + t66 + t35;
425   t71 = 0.3e1 * t16;
426   t73 = 0.2e1 * B * Rp;
427   t74 = t71 - t73 + t1 - t11 - t14;
428   t76 = t63 * t74 * BB;
429   t78 = Rm - kn;
430   t79 = PetscCosReal(t78);
431   t81 = -t65 + t66 + t35;
432   t86 = Rm + kn;
433   t87 = PetscCosReal(t86);
434   t90 = t63 * t74 * AA;
435   t95 = PetscSinReal(t78);
436   t101 = PetscSinReal(t86);
437   t106 = PetscExpReal(-t6 - 0.3e1 * Rp - B);
438   t108 = Rm * t4;
439   t109 = t65 + t66 - t35;
440   t113 = t71 + t73 + t1 - t11 - t14;
441   t115 = t108 * t113 * BB;
442   t118 = -t65 + t66 - t35;
443   t125 = t108 * t113 * AA;
444   t138 = PetscExpReal(-t6 - Rp - B);
445   num3 = -0.4e1 * t1 * t2 * t4 * AA * t7 + ((-0.2e1 * Rp * (-B * t11 - t13 - t15 + 0.2e1 * t17 + 0.3e1 * t16 * B + 0.2e1 * t21) * AA + t30) * t33 + (-0.2e1 * t35 * (t1 + 0.5e1 * t16 - t11 - t14) * AA + 0.8e1 * B * BB * kn * Rm * Rp) * t47 + 0.2e1 * B * (0.3e1 * t17 - t21 + 0.2e1 * t15 + 0.2e1 * t13 - Rp * t11 - t14 * Rp) * AA - t30) * t61 + ((-0.2e1 * t63 * t67 * AA - t76) * t79 + (-0.2e1 * t63 * t81 * AA + t76) * t87 + (-t90 + 0.2e1 * t63 * t67 * BB) * t95 + (-t90 - 0.2e1 * t63 * t81 * BB) * t101) * t106 + ((0.2e1 * t108 * t109 * AA + t115) * t79 + (0.2e1 * t108 * t118 * AA - t115) * t87 + (t125 - 0.2e1 * t108 * t109 * BB) * t95 + (t125 + 0.2e1 * t108 * t118 * BB) * t101) * t138;
446 
447   t1 = B - Rp;
448   t2 = Rm * t1;
449   t3 = B * B;
450   t4 = 0.3e1 * t3;
451   t5 = B * Rp;
452   t7 = Rm * Rm;
453   t8 = kn * kn;
454   t9 = Rp * Rp;
455   t10 = t4 - 0.2e1 * t5 + t7 - t8 - t9;
456   t12 = t2 * t10 * AA;
457   t14 = B * Rm;
458   t20 = VV * x;
459   t21 = PetscExpReal(-t20);
460   t23 = Rp * Rm;
461   t30 = Rm * kn;
462   t35 = 0.2e1 * Rm;
463   t36 = PetscCosReal(t35);
464   t40 = B * t9;
465   t41 = t3 * Rp;
466   t43 = t3 * B;
467   t51 = t3 * BB;
468   t56 = PetscSinReal(t35);
469   t67 = PetscExpReal(-t20 - 0.2e1 * Rp);
470   t70 = 0.2e1 * B * kn;
471   t71 = t70 + t14 + t23;
472   t76 = Rm - kn;
473   t77 = PetscCosReal(t76);
474   t79 = -t70 + t14 + t23;
475   t84 = Rm + kn;
476   t85 = PetscCosReal(t84);
477   t91 = t2 * t10 * BB;
478   t93 = PetscSinReal(t76);
479   t99 = PetscSinReal(t84);
480   t104 = PetscExpReal(-t20 - 0.3e1 * Rp - B);
481   t107 = 0.3e1 * t43 * Rm;
482   t108 = t9 * Rp;
483   t109 = t108 * Rm;
484   t110 = t7 * Rm;
485   t111 = B * t110;
486   t112 = t14 * t8;
487   t113 = Rp * t110;
488   t115 = 0.8e1 * t41 * kn;
489   t116 = t23 * t8;
490   t118 = 0.5e1 * t41 * Rm;
491   t119 = t40 * Rm;
492   t120 = t107 + t109 + t111 - t112 - t113 - t115 + t116 - t118 + t119;
493   t124 = 0.2e1 * t3 * Rm * kn;
494   t125 = t5 * t8;
495   t126 = B * t108;
496   t127 = t7 * t9;
497   t129 = 0.2e1 * t9 * t3;
498   t130 = t5 * t7;
499   t132 = 0.3e1 * t43 * Rp;
500   t133 = t7 * t3;
501   t135 = 0.2e1 * t5 * t30;
502   t136 = t124 - t125 - t126 + t127 + t129 - t130 + t132 + t133 - t135;
503   t141 = t107 + t115 - t118 + t111 + t119 + t116 + t109 - t113 - t112;
504   t143 = t132 + t129 - t125 + t133 + t127 - t124 - t130 - t126 + t135;
505   t160 = PetscExpReal(-t20 - Rp - B);
506   num4 = (0.2e1 * t12 - 0.8e1 * t14 * kn * t1 * BB) * t21 + ((0.2e1 * t23 * (t7 + 0.5e1 * t3 - t8 - t9) * AA - 0.8e1 * B * BB * t30 * Rp) * t36 + (-0.2e1 * Rp * (-B * t8 - B * t7 - t40 + 0.2e1 * t41 + 0.3e1 * t43 + 0.2e1 * Rp * t7) * AA + 0.8e1 * t51 * kn * Rp) * t56 - 0.2e1 * t14 * (-t8 + t9 + t4 + t7) * AA + 0.8e1 * t51 * t30) * t67 + ((t12 - 0.2e1 * t2 * t71 * BB) * t77 + (t12 + 0.2e1 * t2 * t79 * BB) * t85 + (-0.2e1 * t2 * t71 * AA - t91) * t93 + (-0.2e1 * t2 * t79 * AA + t91) * t99) * t104 + ((-t120 * AA + 0.2e1 * t136 * BB) * t77 + (-t141 * AA - 0.2e1 * t143 * BB) * t85 + (0.2e1 * t136 * AA + t120 * BB) * t93 + (0.2e1 * t143 * AA - t141 * BB) * t99) * t160;
507 
508   t1 = Rm * Rm;
509   t2 = Rp * Rp;
510   t3 = t1 * t2;
511   t4 = B * B;
512   t5 = t1 * t4;
513   t9 = PetscExpReal(-0.4e1 * Rp);
514   t15 = PetscCosReal(0.2e1 * Rm);
515   t22 = PetscExpReal(-0.2e1 * Rp);
516   den1 = (-0.4e1 * t3 + 0.4e1 * t5) * t9 + ((0.8e1 * t1 + 0.8e1 * t4) * t2 * t15 - 0.8e1 * t5 - 0.8e1 * t2 * t4) * t22 - 0.4e1 * t3 + 0.4e1 * t5;
517 
518   _PC1=num1/den1; _PC2=num2/den1; _PC3=num3/den1; _PC4=num4/den1;
519 
520   t1 = Rm * x;
521   t2 = PetscCosReal(t1);
522   t4 = PetscSinReal(t1);
523   t10 = PetscExpReal(-0.2e1 * x * B);
524   t12 = kn * x;
525   t13 = PetscCosReal(t12);
526   t16 = PetscSinReal(t12);
527   u1 = -km * (_PC1 * t2 + _PC2 * t4 + _PC3 * t2 + _PC4 * t4 + t10 * AA * t13 + t10 * BB * t16);
528 
529   t2 = Rm * x;
530   t3 = PetscCosReal(t2);
531   t6 = PetscSinReal(t2);
532   t22 = PetscExpReal(-0.2e1 * x * B);
533   t23 = B * t22;
534   t24 = kn * x;
535   t25 = PetscCosReal(t24);
536   t29 = PetscSinReal(t24);
537   u2 = UU * _PC1 * t3 + UU * _PC2 * t6 - _PC1 * t6 * Rm + _PC2 * t3 * Rm - VV * _PC3 * t3 - VV * _PC4 * t6 - _PC3 * t6 * Rm + _PC4 * t3 * Rm - 0.2e1 * t23 * AA * t25 - 0.2e1 * t23 * BB * t29 - t22 * AA * t29 * kn + t22 * BB * t25 * kn;
538 
539   t3 = PetscExpReal(0.2e1 * x * B);
540   t4 = t3 * B;
541   t8 = km * km;
542   t9 = t3 * t8;
543   t11 = 0.3e1 * t9 * Rm;
544   t12 = Rm * Rm;
545   t14 = t3 * t12 * Rm;
546   t15 = UU * UU;
547   t19 = 0.4e1 * t4 * UU * Rm - t11 - t14 + 0.3e1 * t3 * t15 * Rm;
548   t20 = Rm * x;
549   t21 = PetscSinReal(t20);
550   t27 = 0.2e1 * B * t9;
551   t33 = 0.2e1 * t4 * t12;
552   t36 = 0.3e1 * t3 * UU * t12 - t27 - 0.2e1 * t4 * t15 + 0.3e1 * t9 * UU + t33 - t3 * t15 * UU;
553   t37 = PetscCosReal(t20);
554   t49 = VV * VV;
555   t53 = -0.4e1 * t4 * VV * Rm - t11 + 0.3e1 * t3 * t49 * Rm - t14;
556   t64 = t3 * t49 * VV + t33 - 0.3e1 * t9 * VV - 0.2e1 * t4 * t49 - t27 - 0.3e1 * t3 * VV * t12;
557   t76 = B * t8;
558   t80 = kn * kn;
559   t83 = B * B;
560   t87 = t80 * kn;
561   t90 = kn * x;
562   t91 = PetscSinReal(t90);
563   t106 = PetscCosReal(t90);
564   u3 = -((t19 * t21 + t36 * t37) * _PC1 + (t36 * t21 - t19 * t37) * _PC2 + (t53 * t21 + t64 * t37) * _PC3 + (t64 * t21 - t53 * t37) * _PC4 + (-0.3e1 * t8 * AA * kn - 0.8e1 * t76 * BB - 0.4e1 * BB * B * t80 + 0.4e1 * AA * t83 * kn - AA * t87) * t91 + (-0.4e1 * AA * t80 * B - 0.4e1 * t83 * BB * kn + 0.3e1 * t8 * BB * kn - sigma + BB * t87 - 0.8e1 * t76 * AA) * t106) / km;
565 
566   t3 = PetscExpReal(0.2e1 * x * B);
567   t4 = km * km;
568   t5 = t3 * t4;
569   t6 = Rm * x;
570   t7 = PetscCosReal(t6);
571   t8 = _PC1 * t7;
572   t10 = PetscSinReal(t6);
573   t11 = _PC2 * t10;
574   t13 = _PC3 * t7;
575   t15 = _PC4 * t10;
576   t18 = kn * x;
577   t19 = PetscCosReal(t18);
578   t22 = PetscSinReal(t18);
579   t24 = UU * UU;
580   t25 = t3 * t24;
581   t28 = t3 * UU;
582   t38 = Rm * Rm;
583   t39 = t7 * t38;
584   t42 = t10 * t38;
585   t44 = t5 * t8 + t5 * t11 + t5 * t13 + t5 * t15 + t4 * AA * t19 + t4 * BB * t22 + t25 * t8 + t25 * t11 - 0.2e1 * t28 * _PC1 * t10 * Rm + 0.2e1 * t28 * _PC2 * t7 * Rm - t3 * _PC1 * t39 - t3 * _PC2 * t42;
586   t45 = VV * VV;
587   t46 = t3 * t45;
588   t49 = t3 * VV;
589   t62 = B * B;
590   t78 = kn * kn;
591   t82 = t46 * t13 + t46 * t15 + 0.2e1 * t49 * _PC3 * t10 * Rm - 0.2e1 * t49 * _PC4 * t7 * Rm - t3 * _PC3 * t39 - t3 * _PC4 * t42 + 0.4e1 * t62 * AA * t19 + 0.4e1 * t62 * BB * t22 + 0.4e1 * B * AA * t22 * kn - 0.4e1 * B * BB * t19 * kn - AA * t19 * t78 - BB * t22 * t78;
592   u4 = t44 + t82;
593 
594   t3 = PetscExpReal(0.2e1 * x * B);
595   t4 = t3 * B;
596   t8 = km * km;
597   t9 = t3 * t8;
598   t10 = t9 * Rm;
599   t11 = Rm * Rm;
600   t13 = t3 * t11 * Rm;
601   t14 = UU * UU;
602   t18 = 0.4e1 * t4 * UU * Rm - t10 - t13 + 0.3e1 * t3 * t14 * Rm;
603   t19 = Rm * x;
604   t20 = PetscSinReal(t19);
605   t26 = 0.2e1 * B * t9;
606   t31 = 0.2e1 * t4 * t11;
607   t34 = 0.3e1 * t3 * UU * t11 - t26 - 0.2e1 * t4 * t14 + t9 * UU + t31 - t3 * t14 * UU;
608   t35 = PetscCosReal(t19);
609   t47 = VV * VV;
610   t51 = -0.4e1 * t4 * VV * Rm - t10 + 0.3e1 * t3 * t47 * Rm - t13;
611   t61 = t3 * t47 * VV + t31 - t9 * VV - 0.2e1 * t4 * t47 - t26 - 0.3e1 * t3 * VV * t11;
612   t72 = B * t8;
613   t76 = kn * kn;
614   t79 = B * B;
615   t83 = t76 * kn;
616   t86 = kn * x;
617   t87 = PetscSinReal(t86);
618   t101 = PetscCosReal(t86);
619   u5 = ((t18 * t20 + t34 * t35) * _PC1 + (t34 * t20 - t18 * t35) * _PC2 + (t51 * t20 + t61 * t35) * _PC3 + (t61 * t20 - t51 * t35) * _PC4 + (-t8 * AA * kn - 0.4e1 * t72 * BB - 0.4e1 * BB * B * t76 + 0.4e1 * AA * t79 * kn - AA * t83) * t87 + (-0.4e1 * AA * t76 * B - 0.4e1 * t79 * BB * kn + t8 * BB * kn - sigma + BB * t83 - 0.4e1 * t72 * AA) * t101) / km;
620 
621   t3 = PetscExpReal(0.2e1 * x * B);
622   t4 = UU * UU;
623   t8 = km * km;
624   t9 = t3 * t8;
625   t10 = t9 * Rm;
626   t11 = Rm * Rm;
627   t13 = t3 * t11 * Rm;
628   t14 = t3 * B;
629   t18 = 0.3e1 * t3 * t4 * Rm + t10 - t13 + 0.4e1 * t14 * UU * Rm;
630   t19 = Rm * x;
631   t20 = PetscSinReal(t19);
632   t28 = 0.2e1 * B * t9;
633   t33 = 0.2e1 * t14 * t11;
634   t34 = -0.2e1 * t4 * t14 + 0.3e1 * t3 * UU * t11 - t28 - t3 * t4 * UU - t9 * UU + t33;
635   t35 = PetscCosReal(t19);
636   t47 = VV * VV;
637   t51 = -0.4e1 * t14 * VV * Rm - t13 + t10 + 0.3e1 * t3 * t47 * Rm;
638   t61 = -0.3e1 * t3 * VV * t11 + t33 + t3 * t47 * VV + t9 * VV - 0.2e1 * t14 * t47 - t28;
639   t71 = kn * kn;
640   t74 = B * B;
641   t80 = t71 * kn;
642   t83 = kn * x;
643   t84 = PetscSinReal(t83);
644   t96 = PetscCosReal(t83);
645   u6 = -((t18 * t20 + t34 * t35) * _PC1 + (t34 * t20 - t18 * t35) * _PC2 + (t51 * t20 + t61 * t35) * _PC3 + (t61 * t20 - t51 * t35) * _PC4 + (-0.4e1 * BB * B * t71 + 0.4e1 * AA * t74 * kn + t8 * AA * kn - AA * t80) * t84 + (-0.4e1 * AA * t71 * B - t8 * BB * kn - 0.4e1 * t74 * BB * kn - sigma + BB * t80) * t96) / km;
646 
647   /*SS = sin(km*z)*(exp(UU*x)*(_PC1*cos(Rm*x)+_PC2*sin(Rm*x)) + exp(-VV*x)*(_PC3*cos(Rm*x)+_PC4*sin(Rm*x)) + exp(-2*x*B)*(AA*cos(kn*x)+BB*sin(kn*x)));*/
648 
649   /* u1 = Vx, u2 = Vz, u3 = txx, u4 = tzx, u5 = pressure, u6 = tzz */
650 
651   sum5 += u5*PetscCosReal(km*z);  /* pressure */
652   sum6 += u6*PetscCosReal(km*z);  /* zz total stress */
653 
654   u1 *= PetscCosReal(km*z); /* x velocity */
655   sum1 += u1;
656   u2 *= PetscSinReal(km*z); /* z velocity */
657   sum2 += u2;
658 
659   u3 *= PetscCosReal(km*z); /* xx total stress */
660   sum3 += u3;
661   u4 *= PetscSinReal(km*z); /* zx stress */
662   sum4 += u4;
663 
664   /* rho = -sigma*sin(km*z)*cos(kn*x); */ /* density */
665   /* sum7 += rho; */
666 
667   /* Output */
668   if (mu) {
669     *mu = Z;
670   }
671   if (vel) {
672     vel[0] = sum1;
673     vel[1] = sum2;
674   }
675   if (p) {
676     (*p) = sum5;
677   }
678   if (s) {
679     s[0] = sum3;
680     s[1] = sum4;
681     s[2] = sum6;
682   }
683   if (gamma) {
684     /* sigma = tau - p, tau = sigma + p, tau[] = 2*eta*gamma[] */
685     gamma[0] = (sum3+sum5)/(2.0*Z);
686     gamma[1] = (sum4)/(2.0*Z);
687     gamma[2] = (sum6+sum5)/(2.0*Z);
688   }
689   PetscFunctionReturn(0);
690 }
691 
692 static PetscErrorCode SolKxSolutionVelocity(PetscInt dim, PetscReal time, const PetscReal x[], PetscInt Nf, PetscScalar v[], void *ctx)
693 {
694   Parameter     *s = (Parameter *) ctx;
695   PetscErrorCode ierr;
696 
697   PetscFunctionBegin;
698   ierr = SolKxSolution(x, s->m, s->n, s->B, v, NULL, NULL, NULL, NULL);CHKERRQ(ierr);
699   PetscFunctionReturn(0);
700 }
701 
702 static PetscErrorCode SolKxSolutionPressure(PetscInt dim, PetscReal time, const PetscReal x[], PetscInt Nf, PetscScalar p[], void *ctx)
703 {
704   Parameter     *s = (Parameter *) ctx;
705   PetscErrorCode ierr;
706 
707   PetscFunctionBegin;
708   ierr = SolKxSolution(x, s->m, s->n, s->B, NULL, p, NULL, NULL, NULL);CHKERRQ(ierr);
709   PetscFunctionReturn(0);
710 }
711 
712 /*
713   SolCxSolution - Exact Stokes solutions for discontinuous viscosity
714 
715  Input Parameters:
716 + pos   - The (x,z) coordinate at which to evaluate the solution
717 . n     - The constant defining the x-dependence of the forcing function
718 . m     - The constant defining the z-dependence of the forcing function
719 . xc    - The x coordinate at which the viscosity is discontinuous
720 . etaA  - The viscosity coefficient for x < xc
721 - etaB  - The viscosity coefficient for x > xc
722 
723   Output Parameters:
724 + vel   - The (x,z)-velocity at (x,z), or NULL
725 . p     - The pressure at (x,z), or NULL
726 . s     - The total stress (sigma_xx, sigma_xz, sigma_zz) at (x,z), or NULL
727 . gamma - The strain rate, or NULL
728 - mu    - The viscosity at (x,z), or NULL
729 
730   Note:
731 $  The domain is the square 0 <= x,z <= 1. We solve the Stokes equation for incompressible flow with free-slip boundary
732 $  conditions everywhere. The forcing term f is given by
733 $
734 $    fx = 0
735 $    fz = sigma*sin(km*z)*cos(kn*x)
736 $
737 $  where
738 $
739 $    km = m*Pi (m may be non-integral)
740 $    kn = n*Pi
741 $
742 $  meaning that the density rho is -sigma*sin(km*z)*cos(kn*x). Here we set sigma = 1.
743 $  The viscosity eta jumps from etaA to etaB at x = xc.
744 */
745 static PetscErrorCode SolCxSolution(const PetscReal pos[], PetscReal m, PetscInt n, PetscReal xc, PetscReal etaA, PetscReal etaB,
746                                     PetscScalar vel[], PetscScalar *p, PetscScalar s[], PetscScalar gamma[], PetscScalar *mu)
747 {
748   PetscReal _PC1A,_PC2A,_PC3A,_PC4A,_PC1B,_PC2B,_PC3B,_PC4B,_PC1,_PC2,_PC3,_PC4;
749   PetscReal t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17,t18,t19,t20,t21,t22,t23,t24,t25,t26,t27,t28,t29,t30,t31,t32,t33,t34,t35,t36,t37,t38,t39,t40;
750   PetscReal t41,t42,t43,t44,t45,t46,t47,t48,t49,t50,t51,t52,t53,t54,t55,t56,t57,t58,t59,t60,t61,t62,t63,t64,t65,t66,t67,t68,t69,t70,t71,t72,t73,t74,t75,t76,t77,t78,t79,t80;
751   PetscReal t81,t82,t83,t84,t85,t86,t87,t88,t89,t90,t91,t92,t93,t94,t95,t96,t97,t98,t99,t100,t101,t102,t103,t104,t105,t106,t107,t108,t109,t110,t111,t112,t113,t115,t116,t117,t118,t119,t120;
752   PetscReal t121,t122,t123,t124,t125,t126,t127,t128,t129,t130,t131,t132,t133,t134,t135,t136,t137,t138,t139,t140,t141,t142,t143,t144,t145,t146,t147,t148,t149,t150,t151,t152,t153,t154,t155,t156,t157,t158,t159,t160;
753   PetscReal t161,t162,t163,t164,t165,t166,t167,t168,t169,t170,t171,t172,t173,t174,t175,t176,t177,t178,t179,t180,t181,t182,t183,t184,t186,t187,t188,t189,t190,t191,t192,t193,t194,t195,t196,t197,t198,t199;
754   PetscReal t201,t202,t203,t204,t206,t207,t208,t209,t210,t211,t212,t213,t215,t216,t217,t218,t219,t220,t221,t222,t223,t224,t225,t226,t227,t228,t229,t230,t231,t232,t233,t234,t235,t236,t237,t238,t239,t240;
755   PetscReal t241,t242,t243,t244,t245,t246,t247,t248,t249,t250,t251,t252,t253,t254,t255,t256,t257,t258,t259,t260,t261,t262,t263,t264,t265,t267,t268,t269,t270,t272,t273,t274,t275,t276,t277,t278,t279,t280;
756   PetscReal t281,t282,t283,t284,t285,t286,t288,t289,t290,t291,t292,t295,t296,t297,t298,t299,t300,t301,t303,t304,t305,t307,t308,t310,t311,t312,t313,t314,t315,t316,t317,t318,t319,t320;
757   PetscReal t321,t322,t323,t324,t325,t326,t327,t328,t329,t330,t331,t332,t334,t335,t336,t337,t338,t339,t340,t341,t342,t344,t345,t346,t347,t348,t349,t350,t351,t352,t353,t354,t355,t356,t358,t359,t360;
758   PetscReal t361,t362,t363,t364,t365,t366,t367,t368,t369,t370,t371,t372,t373,t374,t375,t376,t377,t378,t379,t380,t381,t382,t383,t384,t385,t386,t387,t389,t390,t391,t393,t394,t395,t396,t397,t398;
759   PetscReal t401,t402,t403,t404,t405,t406,t407,t408,t409,t410,t411,t412,t413,t414,t415,t416,t417,t418,t419,t421,t422,t423,t424,t425,t426,t427,t428,t429,t430,t431,t432,t433,t434,t436,t437,t438,t439,t440;
760   PetscReal t441,t442,t443,t444,t445,t446,t447,t448,t450,t451,t453,t454,t455,t456,t457,t458,t459,t461,t462,t463,t464,t465,t466,t468,t469,t470,t471,t474,t475,t478,t480;
761   PetscReal t482,t483,t484,t485,t488,t489,t490,t492,t493,t495,t497,t498,t499,t501,t502,t503,t504,t505,t507,t508,t509,t510,t511,t512,t513,t515,t518,t520;
762   PetscReal t522,t525,t527,t528,t529,t530,t532,t533,t534,t535,t536,t538,t539,t541,t542,t544,t545,t546,t547,t548,t549,t550,t551,t552,t553,t554,t555,t556,t557,t560;
763   PetscReal t561,t562,t563,t564,t567,t568,t571,t573,t575,t576,t578,t579,t583,t590,t591,t594,t595,t596,t597,t598,t600;
764   PetscReal t601,t602,t604,t606,t607,t608,t611,t613,t615,t616,t617,t619,t621,t623,t624,t625,t626,t627,t629,t630,t632,t633,t634,t638,t639,t640;
765   PetscReal t641,t642,t643,t644,t645,t647,t648,t649,t650,t651,t652,t653,t654,t655,t656,t657,t658,t659,t660,t662,t663,t665,t666,t667,t668,t670,t671,t672,t673,t674,t675,t676,t679,t680;
766   PetscReal t682,t683,t684,t685,t686,t688,t689,t690,t691,t693,t694,t695,t696,t697,t698,t699,t700,t701,t702,t704,t705,t708,t709,t711,t712,t713,t714,t717,t718,t719;
767   PetscReal t721,t722,t723,t726,t727,t728,t730,t733,t734,t735,t736,t737,t738,t739,t740,t741,t744,t745,t746,t749,t750,t752,t753,t754,t755,t757,t758,t759,t760;
768   PetscReal t761,t762,t763,t764,t766,t767,t768,t770,t771,t772,t773,t774,t775,t776,t777,t778,t780,t781,t782,t785,t786,t789,t790,t791,t792,t793,t794,t795,t796,t797,t798,t800;
769   PetscReal t801,t806,t807,t808,t809,t811,t812,t817,t818,t819,t821,t822,t824,t827,t828,t830,t834,t835,t837,t840;
770   PetscReal t842,t843,t844,t845,t846,t849,t850,t853,t854,t855,t857,t858,t859,t860,t863,t864,t867,t868,t869,t873,t874,t877,t878,t879,t880;
771   PetscReal t884,t888,t891,t894,t900,t901,t903,t904,t907,t908,t909,t911,t914,t915,t916,t919,t920;
772   PetscReal t923,t924,t925,t926,t927,t929,t932,t935,t937,t939,t942,t943,t944,t945,t947,t948,t949,t950,t952,t953,t954,t955,t956,t957;
773   PetscReal t961,t964,t965,t966,t967,t968,t969,t971,t972,t974,t977,t978,t981,t983,t987,t988,t992,t993,t994,t997,t998;
774   PetscReal t1001,t1003,t1005,t1006,t1009,t1010,t1012,t1013,t1015,t1016,t1017,t1018,t1020,t1021,t1029,t1031,t1032,t1033,t1040;
775   PetscReal t1041,t1042,t1044,t1047,t1050,t1054,t1055,t1057,t1058,t1063,t1068,t1069,t1070,t1079,t1080;
776   PetscReal t1088,t1089,t1091,t1092,t1094,t1096,t1101,t1102,t1103,t1104,t1105,t1108,t1112,t1113,t1118,t1119,t1120;
777   PetscReal t1121,t1122,t1123,t1124,t1125,t1126,t1127,t1128,t1129,t1130,t1132,t1133,t1134,t1135,t1138,t1139,t1140,t1141,t1142,t1145,t1146,t1148,t1149,t1150,t1153,t1154,t1156,t1157,t1158,t1159;
778   PetscReal t1161,t1162,t1165,t1166,t1170,t1171,t1172,t1173,t1175,t1176,t1178,t1180,t1181,t1182,t1185,t1189,t1192,t1193,t1195,t1196,t1199;
779   PetscReal t1201,t1203,t1209,t1210,t1211,t1213,t1214,t1218,t1221,t1224,t1225,t1226,t1228,t1233,t1234,t1235,t1236,t1237,t1240;
780   PetscReal t1241,t1242,t1243,t1244,t1245,t1248,t1251,t1252,t1257,t1258,t1259,t1260,t1263,t1268,t1269,t1272,t1280;
781   PetscReal t1282,t1283,t1284,t1285,t1287,t1288,t1289,t1292,t1293,t1296,t1297,t1300,t1304,t1307,t1310,t1311,t1312,t1316,t1317,t1320;
782   PetscReal t1321,t1323,t1328,t1330,t1331,t1332,t1333,t1336,t1338,t1343,t1344,t1346,t1349,t1350,t1354;
783   PetscReal t1366,t1369,t1370,t1371,t1376,t1378,t1380,t1383,t1386,t1387,t1388,t1391,t1393,t1399;
784   PetscReal t1411,t1412,t1420,t1427;
785   PetscReal t1450,t1456,t1468,t1472,t1474,t1478;
786   PetscReal t1504,t1511;
787   PetscReal t1545;
788   PetscReal t1564,t1583;
789 
790   PetscReal      sum1 = 0.0, sum2 = 0.0, sum3 = 0.0, sum4 = 0.0, sum5 = 0.0, sum6 = 0.0;
791   PetscReal      ZA = etaA, ZB = etaB;
792   PetscInt       nz  = m,    nx = n;
793   PetscReal      u1, u2, u3, u4, u5, u6, Z, x = pos[0], z = pos[1];
794 
795   PetscFunctionBegin;
796   /* Note that there is no Fourier sum here. */
797   /****************************************************************************************/
798   _PC1A = 0;
799   /****************************************************************************************/
800   t1 = nx * 0.3141592654e1;
801   t2 = PetscSinReal(t1);
802   t3 = nx * t2;
803   t4 = nz * nz;
804   t5 = t4 * t4;
805   t6 = 0.3141592654e1 * 0.3141592654e1;
806   t8 = t3 * t5 * t6;
807   t9 = ZA * xc;
808   t12 = PetscExpReal(xc * nz * 0.3141592654e1);
809   t13 = t12 * t12;
810   t15 = nz * 0.3141592654e1;
811   t16 = PetscExpReal(t15);
812   t17 = t16 * t16;
813   t18 = t17 * t16;
814   t19 = ZB * t13 * t18;
815   t20 = t9 * t19;
816   t23 = ZA * ZA;
817   t24 = nx * nx;
818   t25 = t24 * nx;
819   t26 = t23 * t25;
820   t28 = t13 * t13;
821   t29 = t28 * t13;
822   t33 = nx * ZB;
823   t34 = t1 * xc;
824   t35 = PetscSinReal(t34);
825   t36 = t4 * nz;
826   t37 = t35 * t36;
827   t38 = t33 * t37;
828   t39 = 0.3141592654e1 * ZA;
829   t40 = t13 * t12;
830   t41 = t17 * t40;
831   t45 = ZB * ZB;
832   t46 = t45 * t24;
833   t47 = t46 * t4;
834   t48 = 0.3141592654e1 * xc;
835   t49 = t13 * t17;
836   t53 = xc * xc;
837   t54 = t36 * t53;
838   t56 = t54 * t6 * t45;
839   t57 = PetscCosReal(t34);
840   t58 = t57 * t24;
841   t59 = t28 * t12;
842   t60 = t17 * t59;
843   t61 = t58 * t60;
844   t64 = t25 * t2;
845   t65 = t64 * t15;
846   t72 = nx * t23;
847   t74 = t72 * t2 * t5;
848   t75 = t6 * t53;
849   t76 = t16 * t29;
850   t80 = t23 * nz;
851   t81 = t80 * 0.3141592654e1;
852   t82 = t18 * t28;
853   t86 = nx * t5;
854   t87 = t23 * t6;
855   t89 = xc * t2;
856   t90 = t13 * t18;
857   t91 = t89 * t90;
858   t94 = t28 * t28;
859   t96 = t24 * nz;
860   t98 = t4 * t45;
861   t99 = t98 * 0.3141592654e1;
862   t100 = t58 * t41;
863   t104 = 0.3141592654e1 * t25;
864   t105 = ZA * nz * t104;
865   t106 = t2 * ZB;
866   t110 = t17 * t17;
867   t111 = ZA * t110;
868   t116 = nz * t28;
869   t122 = t64 * t4 * t6;
870   t126 = t23 * t29 * t4;
871   t128 = t24 * xc;
872   t132 = t36 * t23;
873   t133 = t6 * t57;
874   t135 = t128 * t41;
875   t138 = t6 * xc;
876   t142 = t72 * t2;
877   t147 = 0.4e1 * t8 * t20 - 0.2e1 * t26 * t2 * t16 * t29 - 0.8e1 * t38 * t39 * t41 + 0.4e1 * t47 * t48 * t49 - 0.8e1 * t56 * t61 - 0.4e1 * t65 * t20 + 0.2e1 * t26 * t2 * t18 * t28 - 0.4e1 * t74 * t75 * t76 - 0.2e1 * t81 * t64 * t82 - 0.4e1 * t86 * t87 * t91 - t23 * t94 * t96 + 0.8e1 * t99 * t100 - 0.2e1 * t105 * t106 * t82 - 0.4e1 * t38 * t48 * t111 * t12 + 0.2e1 * t116 * ZB * t111 * t24 + 0.4e1 * t122 * t20 + 0.4e1 * t126 * 0.3141592654e1 * t17 * t128 + 0.8e1 * t132 * t133 * t135 + 0.4e1 * t74 * t138 * t76 - 0.2e1 * t142 * t4 * t18 * t28;
878   t149 = ZA * t25 * t2;
879   t150 = ZB * t28;
880   t154 = t35 * t5;
881   t155 = t72 * t154;
882   t156 = t75 * t41;
883   t159 = nx * ZA;
884   t160 = t2 * t36;
885   t161 = t159 * t160;
886   t162 = 0.3141592654e1 * ZB;
887   t163 = t28 * t16;
888   t167 = t23 * t57;
889   t168 = t167 * t24;
890   t169 = nz * t110;
891   t170 = t169 * t40;
892   t173 = ZA * ZB;
893   t174 = t173 * t90;
894   t177 = t36 * 0.3141592654e1;
895   t181 = t80 * t104;
896   t184 = nz * t17;
897   t188 = t17 * t29;
898   t190 = t4 * 0.3141592654e1;
899   t191 = t190 * t24;
900   t206 = t138 * t60;
901   t209 = t23 * t4;
902   t211 = t209 * t6 * t25;
903   t212 = t89 * t76;
904   t216 = ZB * t16 * t29;
905   t217 = t9 * t216;
906   t220 = ZB * t110;
907   t221 = ZA * t24;
908   t222 = t221 * nz;
909   t225 = t132 * t75;
910   t232 = t45 * t28;
911   t233 = t110 * t24;
912   t234 = t233 * nz;
913   t236 = t209 * 0.3141592654e1;
914   t237 = t17 * xc;
915   t239 = t237 * t13 * t24;
916   t242 = -0.2e1 * t149 * t150 * t16 - 0.8e1 * t155 * t156 - 0.2e1 * t161 * t162 * t163 + 0.2e1 * t168 * t170 + 0.2e1 * t65 * t174 - 0.2e1 * t142 * t177 * t76 + 0.4e1 * t181 * t91 - 0.4e1 * t168 * t184 * t59 - 0.4e1 * t188 * t23 * t191 + 0.4e1 * t38 * t48 * ZA * t17 * t40 + 0.4e1 * t49 * t23 * t191 + 0.2e1 * t26 * t2 * t13 * t18 - 0.8e1 * t155 * t206 + 0.4e1 * t211 * t212 - 0.4e1 * t8 * t217 + 0.2e1 * t220 * t222 - 0.8e1 * t225 * t100 + 0.2e1 * t142 * t4 * t16 * t29 + t232 * t234 - 0.4e1 * t236 * t239;
917   t244 = nx * t45;
918   t245 = t244 * t37;
919   t246 = t110 * t40;
920   t251 = t237 * t59;
921   t256 = t64 * t90;
922   t260 = t36 * t45 * t133;
923   t263 = t45 * t57;
924   t264 = t263 * t24;
925   t265 = t169 * t12;
926   t269 = t6 * t36;
927   t270 = t17 * t24;
928   t274 = t110 * t13;
929   t276 = t190 * t128;
930   t279 = nx * t36;
931   t281 = t28 * t40;
932   t282 = t281 * t35;
933   t286 = t138 * t41;
934   t289 = t75 * t60;
935   t296 = t190 * t173;
936   t305 = t86 * t45 * t35;
937   t312 = t33 * t154;
938   t313 = t6 * ZA;
939   t324 = t232 * t270;
940   t327 = -0.2e1 * t245 * t48 * t246 + 0.4e1 * t159 * t37 * t162 * t251 + 0.4e1 * t209 * t75 * t256 + 0.8e1 * t260 * t135 + 0.2e1 * t264 * t265 + 0.32e2 * t9 * t150 * t269 * t270 + 0.4e1 * t274 * t23 * t276 + 0.2e1 * t279 * t45 * t282 * t48 + 0.8e1 * t155 * t286 + 0.8e1 * t155 * t289 - 0.8e1 * t150 * ZA * t96 * t17 + 0.8e1 * t296 * t61 - 0.2e1 * t105 * t106 * t163 - 0.2e1 * t81 * t256 - 0.8e1 * t305 * t156 - 0.4e1 * t33 * t282 * t177 * t9 - 0.16e2 * t312 * t313 * t237 * t40 - 0.4e1 * t168 * t184 * t40 + 0.2e1 * t168 * t265 + 0.16e2 * t269 * t53 * t324;
941   t328 = t3 * t4;
942   t331 = t72 * t37;
943   t332 = t48 * t60;
944   t335 = nz * t94;
945   t345 = t72 * t35;
946   t349 = t173 * t57;
947   t355 = t53 * t17;
948   t364 = t54 * t6 * ZB;
949   t365 = t28 * t17;
950   t369 = xc * ZB;
951   t370 = t269 * t369;
952   t371 = ZA * t57;
953   t373 = t371 * t270 * t40;
954   t385 = nx * t35;
955   t396 = t4 * xc;
956   t397 = t396 * t162;
957   t415 = t37 * t48;
958   t418 = -0.32e2 * t364 * t365 * t221 - 0.16e2 * t370 * t373 - 0.4e1 * t331 * t48 * t41 + 0.4e1 * t86 * t23 * t53 * t6 * t2 * t90 + 0.2e1 * t385 * t177 * t23 * xc * t246 + 0.16e2 * t132 * t53 * t6 * t28 * t270 - 0.4e1 * t397 * t371 * t233 * t12 - 0.12e2 * t173 * t58 * t190 * t251 + 0.2e1 * t385 * t36 * 0.3141592654e1 * t23 * xc * t59 - 0.8e1 * t99 * t61 - 0.2e1 * t244 * t59 * t415;
959   t427 = t371 * t270 * t59;
960   t439 = t209 * t48;
961   t440 = t110 * t12;
962   t441 = t58 * t440;
963   t447 = t36 * xc;
964   t455 = t48 * t440;
965   t471 = ZB * t17;
966   t492 = 0.12e2 * t397 * t373 - 0.4e1 * t122 * t217 + 0.16e2 * t364 * t427 + 0.16e2 * t312 * t313 * t355 * t40 - 0.8e1 * t279 * t39 * t35 * ZB * t60 + 0.2e1 * t439 * t441 - 0.2e1 * t81 * t64 * t163 + 0.8e1 * t447 * t87 * t61 + 0.2e1 * t23 * t59 * t57 * t276 + 0.2e1 * t245 * t455 - 0.4e1 * t349 * t96 * t440 - 0.16e2 * t370 * t427 + 0.4e1 * t181 * t212 - 0.16e2 * t365 * t23 * t269 * t128 + 0.16e2 * t86 * t138 * ZA * t35 * t471 * t59 + 0.8e1 * t305 * t289 - 0.4e1 * t439 * t100 + 0.2e1 * ZB * t25 * t2 * ZA * t18 * t28 + 0.2e1 * t142 * t4 * t28 * t16 - 0.8e1 * t56 * t100;
967   t499 = ZA * t53 * t19;
968   t505 = t396 * 0.3141592654e1;
969   t518 = t173 * t53 * t16 * t29;
970   t533 = t23 * t28;
971   t535 = t188 * t45;
972   t538 = t24 * t4;
973   t545 = t3 * t177;
974   t546 = t173 * t76;
975   t555 = t45 * t110;
976   t557 = t72 * t160;
977   t561 = -0.8e1 * t225 * t61 - 0.2e1 * t161 * t162 * t82 + t533 * t234 + 0.4e1 * t535 * t191 + 0.4e1 * t167 * t538 * t332 + 0.4e1 * t349 * t96 * t60 + 0.2e1 * t545 * t546 - 0.2e1 * t264 * t170 + 0.4e1 * t397 * t281 * ZA * t58 - t555 * t96 - 0.4e1 * t557 * t48 * t76;
978   t567 = t396 * 0.3141592654e1 * t45;
979   t568 = t58 * t246;
980   t597 = t58 * nz;
981   t615 = t13 * t45;
982   t616 = t615 * t233;
983   t619 = t94 * t45;
984   t621 = t45 * t59;
985   t625 = 0.2e1 * t149 * t216 + 0.2e1 * t567 * t568 - 0.16e2 * t269 * xc * t324 - 0.2e1 * t236 * xc * t281 * t58 - 0.2e1 * t142 * t177 * t90 - 0.8e1 * t567 * t100 + 0.2e1 * t65 * t546 - 0.8e1 * t305 * t206 + 0.2e1 * nz * t45 * t281 * t57 * t24 - t23 * t110 * t96 - 0.8e1 * t296 * t100 + 0.2e1 * t23 * t281 * t597 + 0.4e1 * t545 * t20 + 0.2e1 * t159 * t2 * t4 * ZB * t163 - 0.4e1 * t557 * t48 * t90 + 0.4e1 * t122 * t518 + 0.8e1 * t263 * t538 * t332 - 0.4e1 * t505 * t616 - t619 * t96 - 0.2e1 * t621 * t57 * t276;
986   t626 = t49 * t45;
987   t660 = t29 * t45;
988   t685 = 0.2e1 * t545 * t174 - 0.4e1 * t126 * 0.3141592654e1 * t24 * xc - 0.4e1 * t47 * t48 * t188 + 0.4e1 * t505 * t660 * t24 - 0.2e1 * t142 * t177 * t163 - 0.2e1 * t142 * t4 * t13 * t18 + 0.8e1 * t260 * t128 * t60 - 0.2e1 * t328 * t546 - 0.2e1 * t26 * t2 * t28 * t16 + 0.4e1 * t545 * t217 - 0.4e1 * t209 * t138 * t256;
989   t690 = t6 * 0.3141592654e1;
990   t691 = ZA * t690;
991   t693 = t24 * t24;
992   t694 = t693 * xc;
993   t695 = t188 * t694;
994   t698 = t23 * ZA;
995   t699 = t698 * t690;
996   t700 = t699 * t5;
997   t704 = t5 * t4;
998   t705 = t691 * t704;
999   t709 = t691 * t5;
1000   t713 = t5 * nz;
1001   t714 = t713 * ZB;
1002   t718 = t698 * t6;
1003   t719 = t713 * t28;
1004   t722 = t699 * t704;
1005   t726 = t713 * t94;
1006   t733 = t713 * t45;
1007   t736 = t87 * t36;
1008   t740 = -0.4e1 * t691 * t98 * t695 + 0.8e1 * t700 * t270 * t13 + 0.4e1 * t705 * t660 * xc + 0.8e1 * t709 * t660 * t128 + 0.2e1 * t87 * t714 * t110 + t718 * t719 * t110 - 0.4e1 * t722 * t237 * t13 - t313 * t726 * t45 - 0.4e1 * t699 * t704 * xc * t29 + t313 * t733 * t28 + 0.4e1 * t736 * t150 * t233;
1009   t746 = t313 * t36;
1010   t752 = t6 * t6;
1011   t753 = t23 * t752;
1012   t759 = t698 * t752;
1013   t760 = t759 * t36;
1014   t761 = t17 * t693;
1015   t762 = xc * t28;
1016   t763 = t761 * t762;
1017   t766 = t87 * t713;
1018   t773 = t699 * t4;
1019   t774 = t110 * t693;
1020   t775 = xc * t13;
1021   t785 = t704 * t17;
1022   t789 = -0.16e2 * t736 * t150 * t270 + t718 * t116 * t693 - 0.2e1 * t746 * t555 * t24 + 0.4e1 * t705 * t535 + 0.64e2 * t753 * t713 * t17 * t150 * t128 - 0.16e2 * t760 * t763 + 0.2e1 * t766 * t150 * t110 + 0.4e1 * t722 * t274 * xc + 0.4e1 * t773 * t774 * t775 - 0.8e1 * t766 * t150 * t17 + 0.8e1 * t700 * t233 * t775 + 0.4e1 * t699 * t785 * t13;
1023   t791 = t691 * t4;
1024   t792 = t45 * t693;
1025   t793 = t49 * t792;
1026   t796 = t759 * t713;
1027   t797 = t53 * t28;
1028   t798 = t270 * t797;
1029   t801 = t87 * nz;
1030   t818 = t5 * t36;
1031   t819 = t753 * t818;
1032   t827 = t753 * t36 * ZB;
1033   t830 = xc * t45;
1034   t834 = -0.4e1 * t791 * t793 + 0.32e2 * t796 * t798 + 0.2e1 * t801 * ZB * t693 * t110 + 0.2e1 * t718 * t36 * t28 * t24 - 0.8e1 * t700 * t128 * t29 - 0.8e1 * t700 * t239 - 0.8e1 * t801 * t150 * t761 + 0.32e2 * t819 * t365 * t369 - 0.64e2 * t753 * t714 * t798 + 0.32e2 * t827 * t763 + 0.4e1 * t705 * t830 * t49;
1035   t842 = xc * t29;
1036   t843 = t270 * t842;
1037   t849 = t759 * t818;
1038   t853 = t691 * t396;
1039   t857 = t691 * t5 * t45;
1040   t869 = t313 * nz;
1041   t874 = -0.2e1 * t718 * t36 * t94 * t24 - 0.4e1 * t773 * t761 * t29 + 0.8e1 * t700 * t843 + 0.2e1 * t87 * t726 * ZB + 0.16e2 * t849 * t797 * t17 + 0.4e1 * t853 * t793 + 0.8e1 * t857 * t239 + 0.2e1 * t801 * t150 * t693 - 0.8e1 * t700 * t270 * t29 - 0.8e1 * t709 * t49 * t46 - t869 * t619 * t693 + t869 * t232 * t693;
1042   t877 = ZA * t752;
1043   t878 = t877 * t818;
1044   t911 = 0.16e2 * t878 * t53 * t45 * t365 - 0.4e1 * t699 * t785 * t29 - 0.4e1 * t705 * t188 * t830 + 0.2e1 * t801 * t94 * t693 * ZB - 0.8e1 * t857 * t843 - t718 * t726 + 0.4e1 * t773 * t761 * t13 - 0.4e1 * t705 * t775 * t555 + 0.2e1 * t746 * t232 * t233 - 0.16e2 * t878 * t830 * t365 - 0.2e1 * t746 * t619 * t24;
1045   t916 = t110 * t28;
1046   t945 = t28 * t693 * t45 * t17;
1047   t948 = 0.32e2 * t877 * t733 * t798 + 0.2e1 * t718 * t36 * t916 * t24 - 0.4e1 * t705 * t626 + t718 * nz * t916 * t693 - t869 * t792 * t110 - 0.4e1 * t773 * t761 * t775 + t718 * t719 + 0.2e1 * t746 * t232 * t24 - 0.16e2 * t849 * t365 * xc - t718 * t713 * t110 - 0.4e1 * t773 * t694 * t29 + 0.16e2 * t877 * t54 * t945;
1048   t974 = t761 * t797;
1049   t987 = 0.4e1 * t773 * t695 + 0.4e1 * t736 * t150 * t24 + 0.4e1 * t722 * t842 * t17 - 0.16e2 * t877 * t447 * t945 + 0.2e1 * t87 * t714 * t28 + t313 * t713 * t916 * t45 - 0.4e1 * t853 * t615 * t774 - 0.32e2 * t877 * t713 * xc * t324 + 0.16e2 * t760 * t974 + 0.4e1 * t736 * t94 * t24 * ZB + t869 * t792 * t916 - 0.8e1 * t691 * t5 * xc * t616;
1050   t1021 = -t718 * t169 * t693 - 0.32e2 * t827 * t974 + 0.2e1 * t801 * t150 * t774 + 0.4e1 * t791 * t188 * t792 + 0.4e1 * t736 * t220 * t24 + 0.4e1 * t791 * t842 * t792 + 0.8e1 * t709 * t660 * t270 - t718 * t335 * t693 - 0.2e1 * t718 * t36 * t110 * t24 - 0.32e2 * t819 * t797 * t471 - t313 * t733 * t110 - 0.32e2 * t796 * t270 * t762;
1051 
1052   _PC2A = (t147 - 0.4e1 * t65 * t217 + t418 + 0.2e1 * t150 * t222 + t327 - 0.2e1 * t149 * t19 + 0.2e1 * t335 * ZB * t24 * ZA - 0.16e2 * t312 * t313 * t355 * t59 - 0.4e1 * t281 * ZB * ZA * t597 - 0.2e1 * t505 * t45 * t281 * t58 - 0.4e1 * t211 * t2 * t53 * t76 + 0.8e1 * t305 * t286 - 0.4e1 * t122 * t499 - 0.4e1 * t331 * t332 + 0.8e1 * t345 * t177 * t60 - 0.2e1 * t142 * t177 * t82 + 0.2e1 * t72 * t281 * t415 + 0.4e1 * t349 * t96 * t41 - 0.2e1 * t81 * t64 * t76 + 0.2e1 * t58 * t80 * t59 + 0.8e1 * t345 * t177 * t41 - 0.4e1 * t8 * t499 + t242 + 0.4e1 * t8 * t518 + t625 + t685 + 0.2e1 * t328 * t174 + 0.2e1 * t331 * t455 - 0.2e1 * t33 * t2 * t4 * ZA * t82 - 0.4e1 * t626 * t191 + 0.16e2 * t364 * t373 - 0.2e1 * t621 * t597 - 0.2e1 * t439 * t568 + t492 + t533 * t96 + t232 * t96 + 0.2e1 * t567 * t441 + t561) / (t740 + t789 + t834 + t874 + t911 + t948 + t987 + t1021);
1053   /****************************************************************************************/
1054   t1 = nz * nz;
1055   t2 = t1 * nz;
1056   t3 = t2 * 0.3141592654e1;
1057   t4 = t3 * xc;
1058   t5 = ZB * ZB;
1059   t7 = PetscExpReal(nz * 0.3141592654e1);
1060   t8 = t7 * t7;
1061   t9 = t5 * t8;
1062   t12 = PetscExpReal(xc * nz * 0.3141592654e1);
1063   t13 = t12 * t12;
1064   t14 = t13 * t13;
1065   t15 = t14 * t13;
1066   t19 = nx * nx;
1067   t21 = nx * 0.3141592654e1;
1068   t22 = PetscSinReal(t21);
1069   t23 = t19 * nx * t22;
1070   t24 = t23 * 0.3141592654e1;
1071   t25 = ZA * ZB;
1072   t26 = t7 * t15;
1073   t27 = t25 * t26;
1074   t30 = t21 * xc;
1075   t31 = PetscSinReal(t30);
1076   t32 = t31 * nx;
1077   t33 = t32 * nz;
1078   t34 = ZA * ZA;
1079   t35 = t8 * t8;
1080   t36 = t34 * t35;
1081   t40 = t2 * t34;
1082   t41 = 0.3141592654e1 * t8;
1083   t42 = t41 * t15;
1084   t45 = t1 * t5;
1085   t46 = t14 * t14;
1086   t49 = t19 * t5;
1087   t51 = t19 * t46;
1088   t53 = t19 * t34;
1089   t55 = t8 * t7;
1090   t56 = t13 * t55;
1091   t57 = t25 * t56;
1092   t60 = t2 * nx;
1093   t61 = 0.3141592654e1 * 0.3141592654e1;
1094   t63 = t60 * t31 * t61;
1095   t64 = xc * xc;
1096   t65 = ZA * t64;
1097   t66 = ZB * t8;
1098   t67 = t14 * t12;
1099   t68 = t66 * t67;
1100   t69 = t65 * t68;
1101   t72 = -0.4e1 * t4 * t9 * t15 + 0.4e1 * t24 * t27 + 0.4e1 * t33 * t36 * t12 - 0.4e1 * t40 * t42 - t45 * t46 + t45 * t14 - t49 * t14 + t51 * t5 - t53 * t14 + 0.4e1 * t24 * t57 + 0.32e2 * t63 * t69;
1102   t73 = t1 * nx;
1103   t75 = t73 * t31 * 0.3141592654e1;
1104   t76 = t8 * t67;
1105   t77 = t25 * t76;
1106   t80 = t1 * t1;
1107   t81 = t80 * t34;
1108   t83 = t61 * t14;
1109   t87 = t1 * t19;
1110   t88 = PetscCosReal(t30);
1111   t90 = t87 * t88 * t61;
1112   t91 = t5 * t64;
1113   t92 = t13 * t12;
1114   t93 = t8 * t92;
1115   t94 = t91 * t93;
1116   t100 = ZB * t64 * ZA * t8 * t92;
1117   t103 = nz * t19;
1118   t105 = t103 * t88 * 0.3141592654e1;
1119   t106 = ZA * xc;
1120   t107 = ZB * t35;
1121   t109 = t106 * t107 * t12;
1122   t112 = t34 * xc;
1123   t113 = t112 * t93;
1124   t116 = t35 * t14;
1125   t118 = t1 * ZA;
1126   t119 = ZB * t14;
1127   t122 = t1 * t46;
1128   t125 = t19 * ZB;
1129   t126 = t35 * ZA;
1130   t127 = t125 * t126;
1131   t129 = t1 * ZB;
1132   t132 = -0.16e2 * t75 * t77 + 0.16e2 * t81 * t64 * t83 * t8 + 0.16e2 * t90 * t94 - 0.32e2 * t90 * t100 + 0.8e1 * t105 * t109 - 0.8e1 * t75 * t113 + t45 * t116 + 0.2e1 * t118 * t119 + 0.2e1 * t122 * t25 - 0.2e1 * t127 + 0.2e1 * t129 * t126;
1133   t134 = t1 * t34;
1134   t136 = t34 * t64;
1135   t137 = t136 * t76;
1136   t141 = t91 * t76;
1137   t145 = t103 * t34;
1138   t146 = 0.3141592654e1 * xc;
1139   t147 = t8 * t13;
1140   t153 = t14 * ZA;
1141   t156 = xc * t5;
1142   t157 = t156 * t93;
1143   t160 = t103 * t5;
1144   t162 = t146 * t8 * t15;
1145   t166 = t34 * t7 * t15;
1146   t169 = t134 * t116 - 0.16e2 * t63 * t137 - t49 * t116 - 0.16e2 * t63 * t141 - t53 * t116 + 0.4e1 * t145 * t146 * t147 - 0.2e1 * t51 * t25 - 0.2e1 * t125 * t153 - 0.16e2 * t75 * t157 + 0.4e1 * t160 * t162 - 0.4e1 * t24 * t166;
1147   t170 = t106 * t68;
1148   t177 = t35 * t92;
1149   t178 = t112 * t177;
1150   t181 = t156 * t76;
1151   t186 = t35 * t12;
1152   t187 = t112 * t186;
1153   t193 = t5 * 0.3141592654e1;
1154   t206 = t34 * t14;
1155   t207 = t206 * t7;
1156   t210 = -0.32e2 * t63 * t170 + 0.32e2 * t90 * t170 + 0.8e1 * t75 * t109 + 0.4e1 * t105 * t178 - 0.16e2 * t75 * t181 - 0.16e2 * t90 * t113 - 0.4e1 * t75 * t187 + 0.16e2 * t90 * t141 - 0.4e1 * t103 * t15 * t193 * xc + 0.16e2 * t73 * t22 * t34 * t146 * t26 + 0.4e1 * t32 * nz * t34 * t67 + 0.4e1 * t24 * t207;
1157   t217 = t106 * t66 * t92;
1158   t226 = t88 * t19 * nz;
1159   t227 = 0.3141592654e1 * t34;
1160   t229 = t227 * xc * t67;
1161   t232 = t73 * t31;
1162   t234 = t146 * t5 * t67;
1163   t238 = t61 * ZB;
1164   t239 = t14 * t8;
1165   t240 = t238 * t239;
1166   t243 = t136 * t93;
1167   t246 = -0.8e1 * t33 * t25 * t186 + 0.32e2 * t90 * t217 - t45 * t35 + t53 * t35 - t134 * t35 - t134 * t46 + t134 * t14 - 0.4e1 * t226 * t229 + 0.4e1 * t232 * t234 + 0.32e2 * t87 * t65 * t240 + 0.16e2 * t63 * t243;
1168   t247 = t14 * t92;
1169   t249 = t227 * t247 * xc;
1170   t254 = t73 * t22;
1171   t259 = t60 * t22 * t61;
1172   t260 = t112 * t26;
1173   t264 = t146 * t247 * t5;
1174   t268 = xc * t14;
1175   t274 = t5 * t14;
1176   t275 = t274 * t8;
1177   t280 = nz * nx;
1178   t281 = t280 * t22;
1179   t282 = t55 * t14;
1180   t283 = t25 * t282;
1181   t290 = ZA * t247 * xc * ZB;
1182   t295 = t22 * nx * t1 * 0.3141592654e1;
1183   t298 = -0.4e1 * t232 * t249 + 0.8e1 * t105 * t217 - 0.4e1 * t254 * t227 * t26 - 0.8e1 * t259 * t260 - 0.4e1 * t232 * t264 - 0.16e2 * t81 * t61 * t268 * t8 + 0.16e2 * t80 * t64 * t61 * t275 - 0.4e1 * t232 * t229 + 0.8e1 * t281 * t283 - 0.4e1 * t105 * t187 + 0.8e1 * t75 * t290 + 0.4e1 * t295 * t27;
1184   t301 = t61 * t5;
1185   t307 = t87 * t34;
1186   t312 = t61 * xc;
1187   t313 = t312 * t239;
1188   t317 = t34 * t55 * t14;
1189   t329 = ZB * t13 * t55;
1190   t330 = t65 * t329;
1191   t337 = -0.16e2 * t87 * t64 * t301 * t239 - 0.32e2 * t90 * t69 - 0.16e2 * t307 * t64 * t61 * t239 + 0.16e2 * t307 * t313 + 0.4e1 * t24 * t317 + t53 * t46 + t49 * t35 - 0.32e2 * t63 * t100 - 0.4e1 * t280 * t31 * t34 * t247 + 0.8e1 * t259 * t330 - 0.4e1 * t280 * t31 * t247 * t5;
1192   t340 = t5 * t35;
1193   t344 = t25 * t93;
1194   t356 = t41 * t13;
1195   t360 = t23 * nz * t61;
1196   t363 = t25 * t64 * t7 * t15;
1197   t366 = t156 * t177;
1198   t369 = t14 * t7;
1199   t370 = t25 * t369;
1200   t373 = t156 * t186;
1201   t378 = 0.4e1 * t24 * t283 + 0.4e1 * t33 * t340 * t12 - 0.16e2 * t75 * t344 - 0.4e1 * t280 * t31 * t5 * t67 + 0.8e1 * t33 * t25 * t247 + 0.32e2 * t63 * t217 + 0.4e1 * t40 * t356 - 0.8e1 * t360 * t363 + 0.4e1 * t75 * t366 + 0.4e1 * t295 * t370 - 0.4e1 * t75 * t373 - 0.4e1 * t105 * t366;
1202   t382 = t112 * t76;
1203   t387 = t80 * t61;
1204   t391 = t136 * t26;
1205   t409 = 0.16e2 * t63 * t382 + 0.4e1 * t226 * t234 - 0.16e2 * t387 * xc * t275 + 0.8e1 * t259 * t391 - 0.16e2 * t105 * t344 + 0.4e1 * t226 * t264 - 0.8e1 * t105 * t170 + 0.16e2 * t232 * t193 * t76 + 0.8e1 * t360 * t330 - 0.8e1 * t105 * t290 + 0.16e2 * t90 * t243;
1206   t423 = t153 * t8;
1207   t426 = t34 * t13;
1208   t427 = t426 * t55;
1209   t430 = t34 * t8;
1210   t437 = t80 * ZA;
1211   t441 = 0.4e1 * t145 * t42 - 0.16e2 * t90 * t157 + 0.24e2 * t75 * t217 + 0.4e1 * t226 * t249 + 0.4e1 * t254 * t227 * t282 + 0.4e1 * t160 * t356 - 0.8e1 * t129 * t423 - 0.8e1 * t281 * t427 - 0.8e1 * t33 * t430 * t67 + 0.8e1 * t33 * t430 * t92 + 0.32e2 * t437 * ZB * t313;
1212   t453 = t106 * ZB * t7 * t15;
1213   t456 = t2 * t5;
1214   t459 = t112 * t56;
1215   t462 = t126 * t14;
1216   t474 = t40 * 0.3141592654e1;
1217   t475 = xc * t8;
1218   t480 = t146 * t13 * t35;
1219   t483 = -0.4e1 * t103 * xc * t193 * t147 + 0.16e2 * t87 * t61 * t156 * t239 + 0.8e1 * t259 * t453 - 0.4e1 * t456 * t356 + 0.8e1 * t259 * t459 - 0.2e1 * t125 * t462 - 0.8e1 * t281 * t207 + 0.16e2 * t295 * t459 - 0.8e1 * t60 * t22 * ZA * t312 * t329 + 0.4e1 * t474 * t475 * t15 + 0.4e1 * t160 * t480;
1220   t497 = t136 * t56;
1221   t504 = t9 * t13;
1222   t509 = t475 * t13;
1223   t512 = -0.8e1 * t105 * t113 - 0.4e1 * t254 * t227 * t56 + 0.8e1 * t281 * t57 + 0.4e1 * t295 * t283 + 0.2e1 * t129 * t462 + 0.4e1 * t24 * t370 - 0.8e1 * t360 * t497 - 0.4e1 * t24 * t427 - 0.4e1 * t145 * t162 + 0.4e1 * t4 * t504 - 0.8e1 * t281 * t370 - 0.4e1 * t474 * t509;
1224   t528 = t5 * t13;
1225   t529 = t528 * t35;
1226   t532 = t106 * t329;
1227   t542 = -0.16e2 * t295 * t453 - 0.32e2 * t437 * t64 * t240 + 0.8e1 * t281 * t317 + 0.24e2 * t75 * t170 - 0.4e1 * t75 * t178 + 0.8e1 * t360 * t453 - 0.4e1 * t4 * t529 - 0.16e2 * t295 * t532 - 0.8e1 * t33 * t344 - 0.16e2 * t90 * t181 + 0.4e1 * t33 * t340 * t92;
1228   t557 = t146 * t15;
1229   t562 = xc * t15;
1230   t563 = t562 * t5;
1231   t573 = 0.16e2 * t232 * t193 * t93 - 0.8e1 * t259 * t363 - 0.8e1 * t259 * t497 + 0.8e1 * t33 * t77 + 0.8e1 * t360 * t391 + 0.4e1 * t254 * t227 * t369 + 0.4e1 * t145 * t557 + 0.8e1 * t281 * t166 + 0.4e1 * t3 * t563 + 0.8e1 * t105 * t382 - 0.4e1 * t145 * t480 - 0.4e1 * t33 * t36 * t92;
1232   t600 = 0.4e1 * t456 * t42 - 0.8e1 * t360 * t260 - 0.4e1 * t40 * t557 - 0.4e1 * t105 * t373 + 0.16e2 * t226 * t227 * t93 - 0.16e2 * t90 * t382 - 0.4e1 * t145 * t356 - 0.16e2 * t63 * t157 - 0.32e2 * t87 * t25 * t313 - 0.16e2 * t226 * t227 * t76 - 0.16e2 * t63 * t113;
1233   t623 = xc * t13;
1234   t627 = 0.8e1 * t125 * t423 - 0.8e1 * t360 * t532 + 0.16e2 * t90 * t137 - 0.4e1 * t160 * t42 + 0.16e2 * t63 * t94 + 0.16e2 * t63 * t181 - 0.8e1 * t281 * t27 - 0.8e1 * t75 * t382 + 0.8e1 * t360 * t459 + 0.4e1 * t295 * t57 + 0.16e2 * t105 * t77 + 0.4e1 * t474 * t623 * t35;
1235   t632 = t61 * 0.3141592654e1;
1236   t633 = t632 * t8;
1237   t634 = t80 * nz;
1238   t638 = t632 * t634;
1239   t639 = t638 * xc;
1240   t642 = t61 * t34;
1241   t643 = t122 * t19;
1242   t649 = t61 * t61;
1243   t650 = t649 * t1;
1244   t652 = t19 * t19;
1245   t653 = t14 * t652;
1246   t654 = t653 * t9;
1247   t657 = t14 * t1;
1248   t658 = t657 * t19;
1249   t665 = t632 * t34;
1250   t666 = t665 * t2;
1251   t667 = t8 * t19;
1252   t668 = t667 * t623;
1253   t674 = t665 * nz;
1254   t675 = t652 * xc;
1255   t682 = 0.8e1 * t633 * t426 * t634 - 0.8e1 * t639 * t529 - 0.4e1 * t642 * t643 + 0.2e1 * t642 * t116 * t80 + 0.32e2 * t650 * t64 * t654 + 0.4e1 * t301 * t658 + 0.4e1 * t387 * t46 * ZA * ZB - 0.16e2 * t666 * t668 - 0.16e2 * t666 * t667 * t15 - 0.8e1 * t674 * t675 * t15 + 0.4e1 * t238 * t153 * t80;
1256   t683 = t46 * t652;
1257   t686 = t633 * t15;
1258   t691 = t35 * t80;
1259   t698 = t35 * t652;
1260   t705 = t14 * t80;
1261   t708 = t61 * t35;
1262   t717 = -0.2e1 * t642 * t683 - 0.8e1 * t686 * t5 * t634 * xc - 0.2e1 * t301 * t691 + 0.8e1 * t638 * t563 - 0.2e1 * t642 * t691 - 0.2e1 * t642 * t698 - 0.2e1 * t301 * t698 - 0.2e1 * t301 * t683 + 0.2e1 * t642 * t705 + 0.2e1 * t708 * t274 * t80 + 0.2e1 * t301 * t653 - 0.2e1 * t642 * t80 * t46;
1263   t727 = t61 * t46;
1264   t737 = t649 * t34;
1265   t738 = t737 * t1;
1266   t739 = t8 * t652;
1267   t740 = t739 * t268;
1268   t746 = t61 * ZA;
1269   t754 = t632 * nz * xc;
1270   t758 = 0.2e1 * t301 * t705 + 0.2e1 * t642 * t653 - 0.8e1 * t665 * xc * t634 * t15 - 0.2e1 * t727 * t5 * t80 - 0.32e2 * t650 * xc * t654 + 0.2e1 * t301 * t698 * t14 - 0.32e2 * t738 * t740 + 0.8e1 * t674 * t739 * t562 + 0.4e1 * t746 * t119 * t652 + 0.8e1 * t674 * t698 * t623 - 0.8e1 * t754 * t528 * t698;
1271   t762 = t633 * t13;
1272   t764 = t5 * nz * t652;
1273   t767 = t80 * t1;
1274   t768 = t649 * t767;
1275   t772 = t649 * ZA;
1276   t773 = t772 * t129;
1277   t777 = t35 * t1 * t19;
1278   t780 = t632 * t5;
1279   t781 = t780 * t15;
1280   t786 = t698 * ZA;
1281   t790 = t64 * t14;
1282   t800 = t649 * t8;
1283   t809 = 0.4e1 * t238 * t126 * t80 - 0.8e1 * t762 * t764 - 0.32e2 * t768 * xc * t275 + 0.64e2 * t773 * t740 - 0.4e1 * t301 * t777 - 0.8e1 * t781 * nz * t8 * t675 + 0.4e1 * t238 * t786 + 0.32e2 * t768 * t34 * t790 * t8 - 0.8e1 * t633 * t528 * t634 + 0.8e1 * t754 * t528 * t739 + 0.128e3 * t800 * t119 * t80 * t19 * t106 + 0.8e1 * t674 * t739 * t13;
1284   t812 = t649 * t80;
1285   t817 = t83 * ZB;
1286   t824 = t746 * ZB;
1287   t828 = t800 * t14;
1288   t855 = -0.64e2 * t812 * xc * t274 * t667 + 0.4e1 * t817 * t786 + 0.4e1 * t727 * ZA * t652 * ZB - 0.32e2 * t824 * t657 * t667 - 0.32e2 * t828 * t34 * t767 * xc - 0.8e1 * t633 * t15 * t34 * t634 - 0.8e1 * t674 * t739 * t15 + 0.32e2 * t768 * t64 * t275 + 0.4e1 * t708 * t14 * t307 + 0.2e1 * t708 * t206 * t652 + 0.8e1 * t632 * t35 * t13 * t34 * t634 * xc;
1289   t858 = t35 * t19;
1290   t873 = t2 * t8;
1291   t878 = t61 * t1;
1292   t901 = -0.16e2 * t632 * t2 * xc * t528 * t858 + 0.8e1 * t824 * t658 + 0.4e1 * t301 * t14 * t777 - 0.8e1 * t665 * t634 * t509 - 0.8e1 * t674 * t739 * t623 - 0.16e2 * t781 * t873 * t19 * xc + 0.8e1 * t878 * t14 * t127 + 0.8e1 * t878 * ZA * t51 * ZB + 0.8e1 * t686 * t764 + 0.8e1 * t665 * xc * t634 * t15 * t8 + 0.8e1 * t633 * t15 * t5 * t634 + 0.4e1 * t387 * t14 * t107 * ZA;
1293   t903 = t739 * t790;
1294   t923 = t737 * t80;
1295   t924 = t667 * t790;
1296   t927 = t780 * t2;
1297   t937 = t15 * t19 * xc;
1298   t943 = 0.32e2 * t738 * t903 + 0.16e2 * t781 * t873 * t19 + 0.8e1 * t754 * t15 * t652 * t5 + 0.16e2 * t666 * t858 * t623 + 0.64e2 * t828 * t25 * t767 * xc - 0.16e2 * t762 * t456 * t19 + 0.64e2 * t923 * t924 + 0.16e2 * t927 * t668 - 0.64e2 * t768 * ZA * t790 * t66 - 0.64e2 * t773 * t903 + 0.16e2 * t927 * t937 + 0.16e2 * t666 * t667 * t562;
1299   t977 = 0.64e2 * t812 * t5 * t924 + 0.8e1 * t639 * t504 + 0.8e1 * t238 * t35 * t118 * t19 + 0.4e1 * t642 * t658 - 0.16e2 * t817 * t437 * t8 - 0.128e3 * t772 * ZB * t80 * t924 + 0.16e2 * t666 * t667 * t13 - 0.4e1 * t301 * t643 - 0.16e2 * t824 * t653 * t8 - 0.4e1 * t642 * t777 - 0.64e2 * t923 * t667 * t268 - 0.16e2 * t666 * t937;
1300 
1301   _PC3A = (t72 + t132 + t169 + t210 + t246 + t298 + t337 + t378 + t409 + t441 + t483 + t512 + t542 + t573 + t600 + t627) / (t682 + t717 + t758 + t809 + t855 + t901 + t943 + t977);
1302   /****************************************************************************************/
1303   _PC4A = 0;
1304   /****************************************************************************************/
1305   t1 = nx * 0.3141592654e1;
1306   t2 = t1 * xc;
1307   t3 = PetscCosReal(t2);
1308   t4 = nx * nx;
1309   t6 = nz * 0.3141592654e1;
1310   t7 = t3 * t4 * t6;
1311   t8 = ZA * ZB;
1312   t9 = PetscExpReal(t6);
1313   t10 = t9 * t9;
1314   t11 = xc * nz;
1315   t13 = PetscExpReal(t11 * 0.3141592654e1);
1316   t14 = t13 * t13;
1317   t15 = t14 * t13;
1318   t16 = t14 * t14;
1319   t17 = t16 * t15;
1320   t18 = t10 * t17;
1321   t19 = t8 * t18;
1322   t22 = PetscSinReal(t2);
1323   t23 = nx * t22;
1324   t24 = t23 * nz;
1325   t25 = ZB * ZB;
1326   t30 = nz * nz;
1327   t31 = t30 * nz;
1328   t32 = t31 * nx;
1329   t33 = 0.3141592654e1 * 0.3141592654e1;
1330   t35 = t32 * t22 * t33;
1331   t36 = ZA * ZA;
1332   t37 = t36 * xc;
1333   t38 = t16 * t13;
1334   t39 = t10 * t38;
1335   t40 = t37 * t39;
1336   t43 = PetscSinReal(t1);
1337   t44 = nx * t43;
1338   t45 = t30 * 0.3141592654e1;
1339   t46 = t44 * t45;
1340   t47 = ZA * xc;
1341   t49 = ZB * t16 * t9;
1342   t54 = t4 * nx * t43;
1343   t55 = xc * xc;
1344   t57 = t54 * t30 * t55;
1345   t58 = t33 * 0.3141592654e1;
1346   t59 = t58 * t25;
1347   t60 = t16 * t9;
1348   t61 = t59 * t60;
1349   t64 = xc * t25;
1350   t65 = t14 * t9;
1351   t66 = t64 * t65;
1352   t70 = t44 * t31 * t33;
1353   t71 = t37 * t65;
1354   t74 = t10 * t15;
1355   t75 = t64 * t74;
1356   t78 = t25 * t10;
1357   t83 = t54 * nz * t33;
1358   t84 = t55 * t25;
1359   t85 = t10 * t9;
1360   t86 = t14 * t85;
1361   t87 = t84 * t86;
1362   t90 = t30 * t30;
1363   t92 = t44 * t90 * t58;
1364   t93 = t55 * xc;
1365   t94 = t93 * t25;
1366   t95 = t85 * t16;
1367   t96 = t94 * t95;
1368   t102 = t23 * t45;
1369   t103 = t10 * t10;
1370   t104 = ZB * t103;
1371   t106 = t47 * t104 * t15;
1372   t111 = t54 * 0.3141592654e1;
1373   t112 = t25 * t85;
1374   t113 = t112 * t16;
1375   t115 = t8 * t39;
1376   t118 = t16 * t14;
1377   t119 = t85 * t118;
1378   t120 = t37 * t119;
1379   t123 = t16 * t16;
1380   t124 = t36 * t123;
1381   t125 = t124 * t9;
1382   t127 = -0.8e1 * t7 * t19 + 0.2e1 * t24 * t25 * t13 * t10 - 0.16e2 * t35 * t40 - 0.16e2 * t46 * t47 * t49 - 0.8e1 * t57 * t61 + 0.4e1 * t46 * t66 + 0.2e1 * t70 * t71 - 0.16e2 * t35 * t75 + 0.6e1 * t24 * t78 * t38 - 0.2e1 * t83 * t87 - 0.8e1 * t92 * t96 - 0.8e1 * t46 * t37 * t95 - 0.12e2 * t102 * t106 + 0.2e1 * t83 * t71 + t111 * t113 + 0.8e1 * t7 * t115 + 0.2e1 * t83 * t120 + t111 * t125;
1383   t128 = t37 * t74;
1384   t131 = t44 * nz;
1385   t133 = t25 * t9 * t118;
1386   t136 = t36 * t14;
1387   t137 = t136 * t9;
1388   t140 = t30 * t4;
1389   t142 = t140 * t3 * t33;
1390   t143 = t64 * t39;
1391   t147 = t30 * nx * t43;
1392   t148 = 0.3141592654e1 * t36;
1393   t149 = t9 * t118;
1394   t153 = t44 * t31 * ZA;
1395   t154 = t33 * xc;
1396   t155 = t154 * t49;
1397   t160 = ZA * t17 * xc * ZB;
1398   t163 = t103 * t13;
1399   t164 = t64 * t163;
1400   t170 = t44 * t90 * t55;
1401   t171 = t58 * ZB;
1402   t172 = ZA * t16;
1403   t174 = t171 * t172 * t9;
1404   t177 = t36 * t55;
1405   t178 = t177 * t149;
1406   t181 = t54 * t11;
1407   t182 = t33 * t25;
1408   t186 = t25 * t14;
1409   t187 = t186 * t9;
1410   t193 = t186 * t85;
1411   t198 = ZB * t55;
1412   t199 = ZA * t103;
1413   t201 = t198 * t199 * t15;
1414   t204 = 0.2e1 * t7 * t128 - 0.2e1 * t131 * t133 - 0.2e1 * t131 * t137 + 0.16e2 * t142 * t143 - t147 * t148 * t149 + 0.8e1 * t153 * t155 - 0.4e1 * t7 * t160 + 0.2e1 * t7 * t164 + 0.10e2 * t102 * t40 + 0.16e2 * t170 * t174 + 0.2e1 * t83 * t178 - 0.2e1 * t181 * t182 * t65 - t111 * t187 - 0.2e1 * t70 * t87 + 0.4e1 * t102 * t160 - 0.2e1 * t131 * t193 - 0.16e2 * t142 * t75 + 0.16e2 * t35 * t201;
1415   t210 = t32 * t22;
1416   t211 = t33 * t55;
1417   t212 = t25 * t38;
1418   t213 = t211 * t212;
1419   t216 = nz * nx;
1420   t217 = t22 * t25;
1421   t222 = ZB * t85 * t16;
1422   t226 = t23 * t30;
1423   t227 = t13 * t10;
1424   t228 = t148 * t227;
1425   t233 = t37 * t163;
1426   t237 = nz * t4 * t3;
1427   t238 = t148 * t74;
1428   t241 = t64 * t86;
1429   t245 = t148 * xc * t15;
1430   t248 = t112 * t118;
1431   t250 = t22 * t36;
1432   t256 = 0.3141592654e1 * t25;
1433   t257 = t256 * t39;
1434   t262 = t38 * t103;
1435   t263 = t37 * t262;
1436   t267 = t148 * t17 * xc;
1437   t270 = -0.6e1 * t7 * t143 - 0.4e1 * t24 * t19 - 0.8e1 * t210 * t213 - 0.2e1 * t216 * t217 * t15 - 0.32e2 * t153 * t211 * t222 + 0.4e1 * t226 * t228 + 0.16e2 * t142 * t201 + 0.2e1 * t7 * t233 - 0.4e1 * t237 * t238 - 0.2e1 * t83 * t241 - 0.2e1 * t237 * t245 + t111 * t248 + 0.2e1 * t216 * t250 * t15 - 0.2e1 * t131 * t125 - 0.4e1 * t226 * t257 + t147 * t148 * t95 - 0.2e1 * t102 * t263 + 0.2e1 * t237 * t267;
1438   t273 = t37 * t149;
1439   t277 = t47 * t104 * t13;
1440   t285 = t31 * t36;
1441   t286 = t44 * t285;
1442   t291 = t25 * t123 * t9;
1443   t304 = 0.3141592654e1 * xc;
1444   t305 = t304 * t212;
1445   t312 = t256 * t18;
1446   t315 = t8 * t60;
1447   t319 = t54 * t30 * t58;
1448   t323 = t90 * t36;
1449   t324 = t44 * t323;
1450   t325 = t55 * t58;
1451   t326 = t325 * t60;
1452   t329 = 0.2e1 * t102 * t164 + 0.2e1 * t83 * t273 - 0.4e1 * t102 * t277 - 0.2e1 * t7 * t263 + 0.4e1 * t24 * t8 * t17 - 0.4e1 * t286 * t154 * t60 - 0.2e1 * t131 * t291 - t147 * t148 * t119 + 0.2e1 * t24 * t78 * t17 + 0.2e1 * t54 * t85 * 0.3141592654e1 * ZA * ZB - 0.4e1 * t226 * t305 - 0.2e1 * t70 * t66 + t147 * t256 * t95 + 0.4e1 * t237 * t312 + 0.2e1 * t111 * t315 - 0.8e1 * t319 * t96 - t111 * t193 - 0.8e1 * t324 * t326;
1453   t332 = t8 * t95;
1454   t335 = t136 * t85;
1455   t337 = t256 * t227;
1456   t340 = t177 * t119;
1457   t346 = t37 * t86;
1458   t351 = t103 * t15;
1459   t352 = t177 * t351;
1460   t355 = t64 * t119;
1461   t358 = t8 * t227;
1462   t361 = t85 * 0.3141592654e1;
1463   t365 = t84 * t39;
1464   t372 = ZB * t10;
1465   t373 = t372 * t38;
1466   t374 = t47 * t373;
1467   t379 = t177 * t39;
1468   t384 = -0.2e1 * t46 * t332 + t111 * t335 + 0.4e1 * t237 * t337 - 0.2e1 * t83 * t340 + 0.16e2 * t286 * t211 * t95 + 0.2e1 * t70 * t346 - 0.8e1 * t170 * t61 - 0.8e1 * t142 * t352 - 0.2e1 * t83 * t355 - 0.4e1 * t24 * t358 + 0.2e1 * t147 * t361 * t8 + 0.8e1 * t35 * t365 - 0.2e1 * t226 * t267 + 0.8e1 * t102 * t115 - 0.12e2 * t102 * t374 + 0.16e2 * t142 * t40 - 0.8e1 * t142 * t379 + 0.4e1 * t237 * t228;
1469   t386 = t54 * t30 * t93;
1470   t387 = ZA * t85;
1471   t389 = t171 * t387 * t16;
1472   t394 = t64 * t60;
1473   t398 = t304 * t25 * t15;
1474   t401 = t361 * t25;
1475   t405 = t84 * t65;
1476   t410 = t148 * t18;
1477   t414 = t25 * t16 * t9;
1478   t417 = t84 * t74;
1479   t422 = t177 * t86;
1480   t428 = ZB * t38;
1481   t429 = t47 * t428;
1482   t432 = t148 * t39;
1483   t439 = 0.16e2 * t386 * t389 - 0.16e2 * t386 * t174 + 0.8e1 * t46 * t394 + 0.2e1 * t237 * t398 - t147 * t401 + 0.4e1 * t7 * t374 + 0.2e1 * t83 * t405 - 0.4e1 * t46 * t241 - 0.4e1 * t226 * t410 + 0.2e1 * t131 * t414 + 0.8e1 * t35 * t417 - 0.8e1 * t142 * t365 + 0.2e1 * t70 * t422 - 0.4e1 * t181 * t182 * t60 + 0.12e2 * t102 * t429 - 0.4e1 * t226 * t432 + 0.32e2 * t35 * t374 - 0.4e1 * t7 * t106;
1484   t442 = t36 * t9 * t118;
1485   t444 = t123 * t9;
1486   t445 = t8 * t444;
1487   t448 = t361 * t36;
1488   t451 = t47 * t372 * t17;
1489   t454 = t94 * t60;
1490   t457 = t25 * t103;
1491   t465 = t47 * t372 * t15;
1492   t468 = t36 * t85;
1493   t469 = t468 * t16;
1494   t474 = t43 * t85;
1495   t478 = t8 * t74;
1496   t484 = t256 * t74;
1497   t489 = t198 * ZA * t10 * t15;
1498   t501 = -t111 * t442 + 0.4e1 * t131 * t445 - t147 * t448 + 0.4e1 * t7 * t451 + 0.8e1 * t92 * t454 - 0.2e1 * t24 * t457 * t13 - 0.2e1 * t286 * t211 * t65 + 0.4e1 * t7 * t465 + t111 * t469 - 0.2e1 * t216 * t250 * t17 - 0.2e1 * t216 * t474 * t25 - 0.4e1 * t24 * t478 + 0.4e1 * t24 * t8 * t38 + 0.4e1 * t226 * t484 - 0.16e2 * t142 * t489 - 0.2e1 * t24 * t212 * t103 - 0.2e1 * t216 * t22 * t17 * t25 + 0.2e1 * t70 * t120;
1499   t504 = t33 * t36 * t55 * t38;
1500   t507 = t37 * t18;
1501   t512 = t47 * ZB * t13 * t10;
1502   t518 = t59 * t95;
1503   t530 = t84 * t351;
1504   t534 = t37 * t227;
1505   t549 = -0.8e1 * t210 * t504 + 0.2e1 * t102 * t507 + 0.4e1 * t7 * t512 + t111 * t133 - 0.16e2 * t35 * t489 + 0.8e1 * t170 * t518 + 0.2e1 * t24 * t36 * t13 * t10 + 0.4e1 * t131 * t387 * ZB + 0.12e2 * t102 * t465 - 0.8e1 * t142 * t530 + t111 * t291 - 0.2e1 * t102 * t534 - 0.4e1 * t70 * t394 - 0.10e2 * t102 * t128 + 0.4e1 * t237 * t305 + 0.8e1 * t102 * t19 + 0.2e1 * t83 * t346 - 0.16e2 * t35 * t128;
1506   t557 = t468 * t118;
1507   t562 = t93 * t58;
1508   t563 = t562 * t60;
1509   t567 = t44 * t90 * t93;
1510   t575 = ZA * t55;
1511   t576 = t575 * t428;
1512   t583 = t37 * t60;
1513   t590 = t140 * t3;
1514   t601 = -0.2e1 * t226 * t398 - 0.2e1 * t70 * t340 - 0.2e1 * t131 * t557 - 0.4e1 * t24 * t115 + 0.8e1 * t324 * t563 + 0.16e2 * t567 * t389 + 0.16e2 * t70 * t84 * t95 + 0.2e1 * t70 * t178 - 0.16e2 * t142 * t576 - 0.4e1 * t237 * t257 - 0.4e1 * t226 * t312 + 0.8e1 * t46 * t583 + 0.2e1 * t24 * t36 * t38 * t103 + 0.8e1 * t590 * t213 + 0.2e1 * t102 * t143 - 0.16e2 * t35 * t143 + 0.2e1 * t131 * t248 + 0.4e1 * t46 * t346;
1515   t604 = nz * t36;
1516   t606 = t154 * t95;
1517   t625 = t36 * t103;
1518   t640 = t30 * t36;
1519   t641 = t54 * t640;
1520   t642 = t325 * t95;
1521   t647 = -0.4e1 * t131 * t315 - 0.4e1 * t54 * t604 * t606 - t147 * t148 * t60 + 0.16e2 * t35 * t576 - 0.8e1 * t102 * t478 + 0.32e2 * t142 * t465 - 0.4e1 * t237 * t484 - 0.2e1 * t70 * t355 + 0.2e1 * t70 * t273 + 0.2e1 * t102 * t233 - 0.2e1 * t24 * t625 * t13 - 0.8e1 * t7 * t358 - 0.2e1 * t111 * t445 - 0.4e1 * t7 * t429 + 0.16e2 * t46 * t47 * t222 + 0.2e1 * t131 * t113 + 0.8e1 * t641 * t642 - 0.2e1 * t7 * t534;
1522   t652 = t36 * t16;
1523   t653 = t652 * t9;
1524   t655 = t64 * t227;
1525   t658 = t182 * t95;
1526   t663 = t562 * t95;
1527   t684 = t64 * t351;
1528   t689 = t36 * t10;
1529   t695 = t154 * t222;
1530   t698 = -0.4e1 * t216 * t217 * t38 - t111 * t653 - 0.2e1 * t7 * t655 - 0.4e1 * t181 * t658 + 0.2e1 * t131 * t469 - 0.8e1 * t641 * t663 - 0.4e1 * t83 * t583 - 0.2e1 * t83 * t177 * t65 - 0.4e1 * t24 * t457 * t15 + 0.16e2 * t70 * t84 * t60 + 0.8e1 * t57 * t518 - 0.32e2 * t142 * t374 + 0.4e1 * t24 * t8 * t351 + 0.4e1 * t102 * t684 - t147 * t256 * t86 - 0.2e1 * t24 * t689 * t15 - 0.2e1 * t70 * t241 + 0.8e1 * t153 * t695;
1531   t711 = t575 * t373;
1532   t717 = t304 * t17 * t25;
1533   t736 = t177 * t74;
1534   t739 = 0.2e1 * t226 * t245 - 0.8e1 * t102 * t358 - 0.16e2 * t57 * t389 - 0.2e1 * t102 * t655 + 0.8e1 * t590 * t504 - 0.8e1 * t641 * t326 - 0.16e2 * t35 * t711 - t111 * t557 + t111 * t137 - 0.2e1 * t226 * t717 + 0.8e1 * t102 * t37 * t351 + 0.2e1 * t131 * t335 - 0.4e1 * t131 * t332 - 0.2e1 * t216 * t474 * t36 - 0.2e1 * t111 * t332 + 0.16e2 * t142 * t711 - t147 * t256 * t60 + 0.8e1 * t142 * t736;
1535   t750 = t64 * t262;
1536   t763 = t44 * t640;
1537   t770 = t84 * t119;
1538   t782 = 0.4e1 * t102 * t512 + 0.8e1 * t142 * t417 + 0.8e1 * t641 * t563 - 0.2e1 * t7 * t507 + 0.2e1 * t7 * t750 - 0.8e1 * t35 * t352 + 0.4e1 * t237 * t410 + 0.4e1 * t7 * t684 - 0.2e1 * t46 * t445 + t147 * t148 * t65 + 0.4e1 * t763 * t304 * t119 + 0.16e2 * t70 * t177 * t60 + 0.2e1 * t70 * t770 - t111 * t414 - 0.16e2 * t567 * t174 - 0.4e1 * t46 * t71 - 0.4e1 * t46 * t355 - 0.4e1 * t7 * t277;
1539   t797 = t64 * t149;
1540   t821 = -t54 * t448 + 0.2e1 * t131 * t442 + 0.8e1 * t7 * t478 + 0.8e1 * t35 * t379 - 0.2e1 * t181 * t182 * t149 + 0.2e1 * t70 * t405 + 0.2e1 * t83 * t770 - 0.2e1 * t70 * t797 - 0.6e1 * t7 * t75 - 0.4e1 * t286 * t606 - 0.4e1 * t237 * t432 + t147 * t256 * t149 - 0.4e1 * t763 * t304 * t149 - 0.2e1 * t102 * t75 + 0.2e1 * t237 * t717 + 0.8e1 * t324 * t642 - 0.16e2 * t170 * t389 + 0.2e1 * t83 * t422;
1541   t827 = t84 * t149;
1542   t846 = t54 * nz * ZA;
1543   t854 = t64 * t18;
1544   t867 = -0.16e2 * t142 * t128 + 0.32e2 * t35 * t465 - 0.2e1 * t83 * t827 + 0.2e1 * t46 * t315 + t147 * t148 * t86 - 0.4e1 * t102 * t451 - 0.8e1 * t226 * t148 * xc * t38 - 0.2e1 * t24 * t689 * t38 + 0.2e1 * t131 * t187 + 0.8e1 * t846 * t155 + 0.8e1 * t35 * t736 + 0.2e1 * t24 * t689 * t17 - 0.2e1 * t7 * t854 + t147 * t256 * t119 + 0.2e1 * t102 * t854 - 0.8e1 * t35 * t530 + 0.4e1 * t46 * t797 + 0.2e1 * t102 * t750;
1545   t909 = -0.8e1 * t324 * t663 + t147 * t256 * t444 - t147 * t256 * t65 + 0.4e1 * t226 * t238 + 0.2e1 * t7 * t40 - t54 * t401 + 0.16e2 * t57 * t174 + 0.4e1 * t226 * t337 + 0.4e1 * t24 * t8 * t163 + 0.8e1 * t846 * t695 + 0.8e1 * t319 * t454 + 0.2e1 * t131 * t653 - 0.8e1 * t46 * t64 * t95 + 0.6e1 * t24 * t78 * t15 - 0.4e1 * t44 * t31 * xc * t658 - 0.32e2 * t153 * t211 * t49 - 0.2e1 * t70 * t827 + t147 * t148 * t444;
1546   t914 = t25 * ZB;
1547   t915 = t33 * t914;
1548   t919 = t4 * t4;
1549   t920 = t16 * t919;
1550   t929 = t123 * t90;
1551   t932 = t919 * t103;
1552   t935 = t33 * ZB;
1553   t939 = t652 * t919;
1554   t942 = t16 * t30;
1555   t943 = t942 * t4;
1556   t949 = t103 * t16;
1557   t950 = t949 * t90;
1558   t953 = -0.2e1 * t915 * t103 * t90 + 0.2e1 * t915 * t920 - 0.2e1 * t915 * t123 * t919 + 0.2e1 * t915 * t16 * t90 - 0.2e1 * t915 * t929 - 0.2e1 * t915 * t932 - 0.2e1 * t935 * t323 * t123 + 0.2e1 * t935 * t939 + 0.4e1 * t915 * t943 + 0.4e1 * t182 * t172 * t90 + 0.2e1 * t915 * t950;
1559   t954 = t171 * t36;
1560   t955 = t90 * nz;
1561   t956 = xc * t955;
1562   t957 = t118 * t10;
1563   t964 = t33 * t33;
1564   t965 = t964 * ZB;
1565   t966 = t965 * t640;
1566   t967 = t10 * t919;
1567   t968 = t55 * t16;
1568   t969 = t967 * t968;
1569   t972 = t935 * t36;
1570   t974 = t103 * t30 * t4;
1571   t977 = xc * t16;
1572   t978 = t967 * t977;
1573   t981 = t90 * t30;
1574   t983 = t16 * t10;
1575   t987 = t182 * ZA;
1576   t988 = t4 * t10;
1577   t992 = t171 * t604;
1578   t993 = xc * t14;
1579   t994 = t932 * t993;
1580   t997 = t182 * t30;
1581   t1005 = t171 * t285;
1582   t1006 = t988 * t993;
1583   t1009 = t58 * t914;
1584   t1010 = t1009 * t31;
1585   t1013 = 0.8e1 * t954 * t956 * t957 + 0.2e1 * t915 * t932 * t16 + 0.32e2 * t966 * t969 - 0.4e1 * t972 * t974 - 0.32e2 * t966 * t978 + 0.32e2 * t965 * t981 * t177 * t983 - 0.32e2 * t987 * t942 * t988 + 0.8e1 * t992 * t994 + 0.8e1 * t997 * t949 * ZA * t4 - 0.2e1 * t935 * t124 * t919 - 0.16e2 * t1005 * t1006 + 0.16e2 * t1010 * t1006;
1586   t1015 = t964 * t25;
1587   t1016 = ZA * t30;
1588   t1017 = t1015 * t1016;
1589   t1020 = t967 * t993;
1590   t1031 = t1009 * t118;
1591   t1032 = t31 * t10;
1592   t1040 = t964 * t914;
1593   t1041 = t1040 * t90;
1594   t1044 = t55 * t10 * t4 * t16;
1595   t1047 = t1040 * t30;
1596   t1050 = t123 * ZA;
1597   t1054 = t977 * t988;
1598   t1057 = 0.64e2 * t1017 * t978 - 0.8e1 * t992 * t1020 + 0.2e1 * t972 * t950 + 0.4e1 * t182 * t929 * ZA + 0.4e1 * t182 * t199 * t90 - 0.16e2 * t1031 * t1032 * t4 * xc + 0.4e1 * t182 * t172 * t919 + 0.64e2 * t1041 * t1044 + 0.32e2 * t1047 * t969 + 0.4e1 * t182 * t1050 * t919 - 0.64e2 * t1041 * t1054;
1599   t1058 = t1009 * nz;
1600   t1063 = t932 * ZA;
1601   t1069 = t123 * t30 * t4;
1602   t1080 = t993 * t103 * t4;
1603   t1088 = t935 * t103;
1604   t1094 = -0.8e1 * t1058 * t994 - 0.32e2 * t1047 * t978 + 0.4e1 * t182 * t1063 - 0.4e1 * t915 * t974 - 0.4e1 * t915 * t1069 - 0.2e1 * t935 * t625 * t90 - 0.8e1 * t1009 * t10 * t14 * t955 - 0.16e2 * t1010 * t1080 - 0.2e1 * t935 * t625 * t919 - 0.64e2 * t1017 * t969 + 0.2e1 * t1088 * t939 + 0.8e1 * t1009 * t957 * t955;
1605   t1113 = t955 * t118 * xc;
1606   t1120 = t4 * t118;
1607   t1125 = t981 * xc;
1608   t1133 = nz * t10;
1609   t1140 = -0.8e1 * t954 * t955 * t10 * t993 + 0.2e1 * t935 * t652 * t90 - 0.64e2 * t1015 * t981 * t575 * t983 + 0.8e1 * t182 * t103 * t1016 * t4 + 0.8e1 * t1009 * t1113 + 0.16e2 * t954 * t1032 * t4 * t14 - 0.16e2 * t954 * t1032 * t1120 + 0.64e2 * t1015 * t10 * t172 * t1125 + 0.8e1 * t171 * t103 * t136 * t956 - 0.8e1 * t1031 * t1133 * t919 * xc + 0.8e1 * t1058 * t1020;
1610   t1153 = xc * t118;
1611   t1165 = t182 * t16;
1612   t1170 = t171 * t10;
1613   t1178 = ZA * t90;
1614   t1182 = 0.4e1 * t1088 * t652 * t140 + 0.8e1 * t954 * t1133 * t919 * t14 + 0.4e1 * t972 * t943 - 0.4e1 * t972 * t1069 - 0.16e2 * t954 * t31 * t4 * t1153 - 0.8e1 * t954 * nz * t919 * t1153 - 0.8e1 * t954 * t1133 * t919 * t118 + 0.4e1 * t1165 * t1063 + 0.16e2 * t1005 * t1080 - 0.8e1 * t1170 * t118 * t36 * t955 - 0.16e2 * t987 * t920 * t10 - 0.16e2 * t1165 * t1178 * t10;
1615   t1195 = t1040 * t981;
1616   t1199 = t1009 * t955;
1617   t1203 = t1009 * t10;
1618   t1211 = t965 * t323;
1619   t1225 = -0.32e2 * t965 * t10 * t652 * t1125 + 0.4e1 * t915 * t16 * t974 + 0.4e1 * t182 * t90 * t949 * ZA + 0.32e2 * t1195 * t968 * t10 - 0.8e1 * t1199 * t993 * t103 + 0.8e1 * t1203 * t118 * nz * t919 + 0.8e1 * t1170 * t136 * t955 + 0.64e2 * t1211 * t1044 + 0.16e2 * t1031 * t1032 * t4 + 0.8e1 * t987 * t943 + 0.8e1 * t1199 * t993 * t10 + 0.8e1 * t997 * t1050 * t4;
1620   t1263 = -0.128e3 * t1015 * t1178 * t1044 + 0.16e2 * t1005 * t988 * t1153 + 0.8e1 * t1058 * t1153 * t919 + 0.16e2 * t1010 * t1120 * xc - 0.8e1 * t954 * t1113 - 0.8e1 * t1203 * t14 * nz * t919 - 0.16e2 * t1203 * t14 * t31 * t4 - 0.8e1 * t1203 * t1113 - 0.32e2 * t1195 * t977 * t10 - 0.64e2 * t1211 * t1054 + 0.8e1 * t992 * t967 * t1153 + 0.128e3 * t1015 * t983 * t90 * t4 * t47;
1621 
1622   _PC1B = (t127 + t204 + t270 + t329 + t384 + t439 + t501 + t549 + t601 + t647 + t698 + t739 + t782 + t821 + t867 + t909) / (t953 + t1013 + t1057 + t1094 + t1140 + t1182 + t1225 + t1263);
1623   /****************************************************************************************/
1624   t1 = nz * nz;
1625   t2 = t1 * nz;
1626   t3 = nx * t2;
1627   t4 = 0.3141592654e1 * ZA;
1628   t5 = t3 * t4;
1629   t6 = nx * 0.3141592654e1;
1630   t7 = t6 * xc;
1631   t8 = PetscSinReal(t7);
1632   t9 = t8 * ZB;
1633   t10 = nz * 0.3141592654e1;
1634   t11 = PetscExpReal(t10);
1635   t12 = t11 * t11;
1636   t15 = PetscExpReal(xc * nz * 0.3141592654e1);
1637   t16 = t15 * t15;
1638   t17 = t16 * t16;
1639   t18 = t17 * t15;
1640   t19 = t12 * t18;
1641   t23 = t1 * t1;
1642   t24 = nx * t23;
1643   t25 = ZB * ZB;
1644   t27 = t18 * t8;
1645   t28 = 0.3141592654e1 * 0.3141592654e1;
1646   t29 = xc * xc;
1647   t30 = t28 * t29;
1648   t34 = t1 * xc;
1649   t35 = 0.3141592654e1 * ZB;
1650   t36 = t34 * t35;
1651   t37 = PetscCosReal(t7);
1652   t38 = ZA * t37;
1653   t39 = nx * nx;
1654   t40 = t39 * t12;
1655   t41 = t16 * t15;
1656   t43 = t38 * t40 * t41;
1657   t46 = t25 * nz;
1658   t47 = t46 * 0.3141592654e1;
1659   t48 = t39 * nx;
1660   t49 = PetscSinReal(t6);
1661   t50 = t48 * t49;
1662   t51 = t12 * t11;
1663   t52 = t51 * t17;
1664   t53 = t50 * t52;
1665   t56 = t34 * 0.3141592654e1 * t25;
1666   t57 = t37 * t39;
1667   t58 = t17 * t41;
1668   t59 = t12 * t58;
1669   t60 = t57 * t59;
1670   t63 = t25 * t18;
1671   t64 = t57 * nz;
1672   t67 = ZA * ZA;
1673   t68 = t67 * nz;
1674   t69 = 0.3141592654e1 * t48;
1675   t70 = t68 * t69;
1676   t71 = t49 * xc;
1677   t72 = t17 * t16;
1678   t73 = t11 * t72;
1679   t74 = t71 * t73;
1680   t77 = t1 * t67;
1681   t78 = t77 * 0.3141592654e1;
1682   t81 = nx * t25;
1683   t82 = t81 * t49;
1684   t83 = t17 * t17;
1685   t85 = t1 * t83 * t11;
1686   t87 = nx * ZB;
1687   t88 = t8 * t2;
1688   t89 = t87 * t88;
1689   t90 = 0.3141592654e1 * xc;
1690   t91 = t12 * t12;
1691   t92 = ZA * t91;
1692   t97 = ZB * ZA;
1693   t98 = t97 * t37;
1694   t99 = t39 * nz;
1695   t100 = t12 * t41;
1696   t104 = 0.8e1 * t5 * t9 * t19 + 0.8e1 * t24 * t25 * t27 * t30 + 0.12e2 * t36 * t43 - t47 * t53 - 0.2e1 * t56 * t60 - 0.4e1 * t63 * t64 + 0.6e1 * t70 * t74 + 0.4e1 * t78 * t60 - t82 * t85 + 0.4e1 * t89 * t90 * t92 * t41 + 0.4e1 * t98 * t99 * t100;
1697   t105 = t67 * t48;
1698   t106 = t49 * t51;
1699   t107 = t106 * t72;
1700   t109 = t1 * 0.3141592654e1;
1701   t110 = t109 * xc;
1702   t115 = nx * t67;
1703   t116 = t115 * t49;
1704   t117 = t1 * t16;
1705   t118 = t117 * t11;
1706   t120 = t2 * t25;
1707   t121 = t28 * 0.3141592654e1;
1708   t122 = t121 * t29;
1709   t123 = t120 * t122;
1710   t129 = t1 * ZB;
1711   t130 = t129 * t4;
1712   t131 = t57 * t100;
1713   t134 = t12 * t16;
1714   t136 = t109 * t39;
1715   t139 = ZB * t18;
1716   t141 = t39 * t1;
1717   t142 = t141 * t90;
1718   t145 = t77 * t90;
1719   t146 = t91 * t41;
1720   t147 = t57 * t146;
1721   t151 = t25 * t39 * t1;
1722   t152 = t72 * t12;
1723   t156 = t49 * t2;
1724   t158 = t83 * t11;
1725   t162 = -t105 * t107 + 0.8e1 * t110 * t72 * t25 * t39 - t116 * t118 + 0.8e1 * t123 * t53 + 0.8e1 * t5 * t9 * t59 - 0.8e1 * t130 * t131 - 0.8e1 * t134 * t25 * t136 - 0.12e2 * t139 * t38 * t142 - 0.8e1 * t145 * t147 - 0.8e1 * t151 * t90 * t152 - 0.2e1 * t87 * t156 * t4 * t158;
1726   t164 = t115 * t88;
1727   t165 = t90 * t19;
1728   t168 = t25 * t48;
1729   t169 = t49 * t16;
1730   t170 = t169 * t11;
1731   t174 = ZA * nz * t69;
1732   t175 = ZB * t51;
1733   t176 = t175 * t17;
1734   t177 = t71 * t176;
1735   t180 = t1 * t29;
1736   t181 = t28 * t25;
1737   t182 = t180 * t181;
1738   t183 = t50 * t73;
1739   t186 = ZA * t1;
1740   t187 = t28 * t48;
1741   t188 = t186 * t187;
1742   t189 = ZB * t17;
1743   t190 = t189 * t11;
1744   t191 = t71 * t190;
1745   t194 = t50 * t158;
1746   t196 = t115 * t156;
1747   t197 = t90 * t73;
1748   t201 = t49 * t17 * t11;
1749   t204 = t88 * t90;
1750   t207 = t68 * 0.3141592654e1;
1751   t208 = t17 * t11;
1752   t209 = t50 * t208;
1753   t211 = -0.2e1 * t164 * t165 - t168 * t170 + t168 * t107 + 0.8e1 * t174 * t177 + 0.2e1 * t182 * t183 + 0.8e1 * t188 * t191 + t47 * t194 - 0.6e1 * t196 * t197 - t168 * t201 - 0.4e1 * t81 * t18 * t204 - t207 * t209;
1754   t212 = t2 * 0.3141592654e1;
1755   t213 = t212 * t52;
1756   t215 = t81 * t8;
1757   t216 = t212 * t59;
1758   t219 = t3 * t90;
1759   t220 = t25 * t8;
1760   t221 = t18 * t91;
1761   t225 = t71 * t52;
1762   t231 = t16 * t51;
1763   t232 = t50 * t231;
1764   t237 = ZA * t12;
1765   t243 = t67 * t28;
1766   t244 = t24 * t243;
1767   t245 = t71 * t231;
1768   t249 = -t116 * t213 - 0.4e1 * t215 * t216 + 0.2e1 * t219 * t220 * t221 - 0.4e1 * t70 * t225 + 0.4e1 * t98 * t99 * t146 + t47 * t232 - 0.2e1 * t145 * t57 * t221 + 0.4e1 * t89 * t90 * t237 * t41 - t105 * t201 - 0.6e1 * t244 * t245 + t105 * t170;
1769   t252 = t25 * t37;
1770   t253 = t252 * t39;
1771   t255 = nz * t15 * t12;
1772   t258 = t2 * t29;
1773   t259 = ZB * t28;
1774   t260 = t258 * t259;
1775   t263 = t106 * t17;
1776   t265 = xc * t25;
1777   t269 = t25 * t49;
1778   t270 = t269 * t52;
1779   t273 = t1 * t25;
1780   t274 = t273 * 0.3141592654e1;
1781   t275 = t57 * t19;
1782   t278 = t24 * t30;
1783   t288 = t1 * t11 * t72;
1784   t290 = t212 * t208;
1785   t292 = t2 * xc;
1786   t296 = 0.2e1 * t253 * t255 + 0.16e2 * t260 * t43 + t105 * t263 - 0.4e1 * t10 * t265 * t53 + 0.4e1 * t219 * t270 - 0.12e2 * t274 * t275 + 0.8e1 * t278 * t270 - 0.2e1 * ZB * nz * t69 * t49 * ZA * t158 - t82 * t288 - t116 * t290 + 0.16e2 * t292 * t243 * t275;
1787   t301 = t50 * t176;
1788   t304 = t51 * t72;
1789   t305 = t71 * t304;
1790   t308 = t25 * t41;
1791   t311 = ZA * t48;
1792   t312 = t311 * t49;
1793   t317 = t91 * t15;
1794   t318 = t57 * t317;
1795   t321 = t81 * t88;
1796   t322 = t90 * t59;
1797   t325 = t212 * t231;
1798   t327 = t15 * t12;
1799   t328 = t57 * t327;
1800   t331 = t77 * t187;
1801   t334 = t2 * ZA;
1802   t335 = t334 * t122;
1803   t336 = t50 * t190;
1804   t339 = 0.8e1 * t151 * t90 * t134 + 0.16e2 * t186 * t30 * t301 - 0.2e1 * t70 * t305 + 0.2e1 * t308 * t64 - 0.2e1 * t312 * ZB * t83 * t11 + 0.2e1 * t56 * t318 + 0.2e1 * t321 * t322 - t116 * t325 - 0.4e1 * t274 * t328 + 0.2e1 * t331 * t305 - 0.16e2 * t335 * t336;
1805   t341 = t169 * t51;
1806   t344 = t49 * t11 * t72;
1807   t346 = t77 * t30;
1808   t347 = t50 * t304;
1809   t350 = t25 * t51;
1810   t352 = nx * ZA;
1811   t353 = t49 * t23;
1812   t354 = t352 * t353;
1813   t355 = t28 * xc;
1814   t362 = t25 * t91;
1815   t365 = t23 * nz;
1816   t366 = nx * t365;
1817   t367 = t366 * t122;
1818   t368 = ZB * t49;
1819   t369 = ZA * t51;
1820   t370 = t369 * t17;
1821   t371 = t368 * t370;
1822   t374 = t115 * t353;
1823   t375 = t355 * t73;
1824   t381 = t105 * t341 - t105 * t344 - 0.2e1 * t346 * t347 - t350 * t50 - 0.8e1 * t354 * t355 * t176 - 0.4e1 * t98 * t99 * t317 - 0.2e1 * t362 * t99 - 0.16e2 * t367 * t371 + 0.6e1 * t374 * t375 - 0.8e1 * t182 * t53 - t82 * t290;
1825   t382 = t71 * t208;
1826   t394 = t2 * t67;
1827   t395 = t394 * t122;
1828   t398 = t352 * t156;
1829   t402 = t17 * t12;
1830   t403 = t39 * ZA;
1831   t404 = t402 * t403;
1832   t407 = t269 * t208;
1833   t411 = t49 * t83 * t11;
1834   t413 = t46 * t69;
1835   t419 = -0.4e1 * t331 * t382 + 0.2e1 * t115 * t58 * t204 - 0.2e1 * t145 * t60 + 0.12e2 * t274 * t131 + 0.2e1 * t346 * t232 + 0.8e1 * t395 * t53 - 0.8e1 * t398 * t90 * t176 - 0.64e2 * t260 * t404 + 0.4e1 * t219 * t407 + t168 * t411 - 0.6e1 * t413 * t74 - 0.2e1 * t110 * t308 * t57;
1836   t424 = t16 * t11;
1837   t425 = t212 * t424;
1838   t427 = t258 * t181;
1839   t430 = t67 * t29;
1840   t431 = t366 * t430;
1841   t432 = t121 * t49;
1842   t433 = t432 * t52;
1843   t436 = nz * t12;
1844   t437 = t436 * t18;
1845   t440 = t29 * xc;
1846   t441 = t440 * t121;
1847   t442 = t394 * t441;
1848   t445 = t67 * t37;
1849   t446 = t445 * t39;
1850   t448 = nz * t18 * t91;
1851   t453 = t352 * t49;
1852   t458 = t8 * t23;
1853   t462 = t81 * t458;
1854   t463 = t30 * t19;
1855   t466 = -t47 * t209 + t116 * t425 - 0.8e1 * t427 * t275 + 0.8e1 * t431 * t433 - 0.2e1 * t253 * t437 - 0.8e1 * t442 * t53 - 0.2e1 * t446 * t448 + 0.2e1 * t175 * t312 + 0.6e1 * t453 * t129 * t208 + 0.8e1 * t115 * t18 * t458 * t30 + 0.8e1 * t462 * t463;
1856   t470 = t436 * t58;
1857   t475 = t2 * t121 * t440 * t25;
1858   t485 = t212 * t73;
1859   t488 = t67 * t72 * t1;
1860   t490 = t39 * xc;
1861   t501 = 0.4e1 * t374 * t355 * t52 + 0.2e1 * t446 * t470 - 0.8e1 * t475 * t53 - 0.2e1 * t446 * t437 - 0.4e1 * t36 * t38 * t39 * t15 * t12 - t116 * t485 + 0.8e1 * t488 * 0.3141592654e1 * t12 * t490 - t207 * t183 - 0.2e1 * t182 * t232 - 0.6e1 * t413 * t245 - 0.4e1 * t413 * t382;
1862   t503 = t115 * t8;
1863   t510 = t355 * t19;
1864   t513 = t432 * t208;
1865   t525 = t38 * t40 * t18;
1866   t533 = -0.4e1 * t503 * t216 - 0.4e1 * t89 * t90 * t92 * t15 - 0.16e2 * t462 * t510 + 0.8e1 * t431 * t513 - 0.4e1 * t78 * t131 + t47 * t183 - 0.2e1 * t67 * t83 * t99 + 0.4e1 * t331 * t225 + 0.16e2 * t260 * t525 - 0.4e1 * t89 * t90 * t237 * t58 - t207 * t53;
1867   t536 = t28 * t37;
1868   t538 = t490 * t100;
1869   t541 = t334 * t441;
1870   t547 = t394 * t30;
1871   t550 = t212 * t19;
1872   t553 = t366 * t441;
1873   t556 = nz * t17;
1874   t571 = -0.8e1 * t427 * t131 + 0.16e2 * t394 * t536 * t538 + 0.16e2 * t541 * t336 + 0.2e1 * t453 * t129 * t158 - 0.8e1 * t547 * t147 + 0.4e1 * t503 * t550 - 0.8e1 * t553 * t270 + 0.4e1 * t556 * ZB * t92 * t39 - 0.2e1 * t67 * t91 * t99 - t82 * t425 + 0.4e1 * t78 * t275 + 0.2e1 * t78 * xc * t41 * t57;
1875   t583 = t90 * t317;
1876   t594 = t212 * t158;
1877   t596 = t152 * t67;
1878   t602 = t67 * t17;
1879   t607 = 0.8e1 * t367 * t407 - 0.4e1 * t98 * t99 * t59 + 0.16e2 * t260 * t18 * ZA * t57 + 0.2e1 * t321 * t583 - 0.6e1 * t174 * t368 * t52 - 0.4e1 * t89 * t90 * ZA * t15 * t12 + t116 * t594 - 0.8e1 * t596 * t136 - 0.4e1 * t98 * t99 * t327 + 0.2e1 * t602 * t99 + 0.2e1 * t164 * t583;
1880   t613 = t83 * t25;
1881   t616 = t81 * t156;
1882   t627 = t90 * t231;
1883   t630 = t91 * t16;
1884   t638 = 0.4e1 * t196 * t90 * t208 - 0.8e1 * t130 * t60 - 0.2e1 * t613 * t99 + 0.6e1 * t616 * t197 - 0.8e1 * t547 * t131 + 0.8e1 * t67 * t18 * t37 * t142 + 0.2e1 * t145 * t328 - 0.6e1 * t196 * t627 + 0.8e1 * t630 * t67 * t142 - 0.8e1 * t547 * t275 + 0.8e1 * t395 * t209;
1885   t643 = t77 * t355;
1886   t648 = t115 * t458;
1887   t651 = t134 * t67;
1888   t657 = t30 * t304;
1889   t660 = t30 * t146;
1890   t665 = t25 * t17;
1891   t668 = t50 * t424;
1892   t671 = -0.4e1 * t321 * t90 * t146 - 0.6e1 * t643 * t232 + 0.8e1 * t182 * t209 - 0.16e2 * t648 * t510 + 0.8e1 * t651 * t136 + 0.8e1 * t89 * t4 * t100 - 0.2e1 * t374 * t657 - 0.8e1 * t648 * t660 + 0.8e1 * t130 * t328 + 0.2e1 * t665 * t99 + 0.2e1 * t346 * t668;
1893   t672 = t90 * t424;
1894   t676 = t120 * t536;
1895   t680 = t436 * t41;
1896   t688 = t366 * t67 * t440;
1897   t696 = xc * t12;
1898   t697 = t696 * t18;
1899   t701 = t252 * t141;
1900   t702 = t90 * t221;
1901   t705 = 0.2e1 * t196 * t672 - t47 * t347 + 0.16e2 * t676 * t538 - t116 * t85 - 0.2e1 * t253 * t680 + t207 * t194 + 0.4e1 * t98 * t99 * t19 - 0.8e1 * t688 * t433 + 0.16e2 * t541 * t301 - 0.6e1 * t312 * t190 + 0.4e1 * t352 * t88 * t35 * t697 + 0.2e1 * t701 * t702;
1902   t712 = t24 * t430;
1903   t713 = t28 * t49;
1904   t721 = t1 * t17 * t11;
1905   t726 = ZB * xc;
1906   t737 = nz * t91;
1907   t741 = 0.8e1 * t346 * t209 + 0.2e1 * t712 * t713 * t424 + 0.8e1 * t130 * t275 - t47 * t668 + t116 * t721 - 0.8e1 * t688 * t513 + 0.4e1 * t352 * t27 * t212 * t726 + 0.8e1 * t648 * t463 + 0.4e1 * t274 * t60 - 0.4e1 * t374 * t355 * t208 - 0.4e1 * t253 * t737 * t41;
1908   t745 = t269 * t231;
1909   t749 = t1 * t28 * t265;
1910   t757 = t16 * t39;
1911   t758 = t696 * t757;
1912   t762 = t69 * t49;
1913   t772 = t355 * t100;
1914   t775 = t81 * t353;
1915   t778 = -0.8e1 * t398 * t90 * t190 - 0.2e1 * t278 * t745 + 0.4e1 * t749 * t53 + 0.32e2 * t394 * t29 * t28 * t17 * t40 - 0.8e1 * t78 * t758 + t350 * nz * t762 - 0.6e1 * t87 * t49 * t186 * t52 - 0.8e1 * t553 * t407 - 0.4e1 * t749 * t209 + 0.16e2 * t648 * t772 - 0.6e1 * t775 * t375;
1916   t790 = t212 * t304;
1917   t793 = t156 * 0.3141592654e1;
1918   t795 = t355 * t304;
1919   t800 = t91 * t39;
1920   t801 = t800 * nz;
1921   t807 = t2 * t28;
1922   t808 = t807 * t726;
1923   t811 = -0.2e1 * t616 * t672 - 0.2e1 * t446 * t680 - 0.2e1 * t78 * xc * t58 * t57 + 0.8e1 * t367 * t270 - t82 * t790 + t115 * t51 * t793 - 0.2e1 * t775 * t795 + 0.8e1 * t123 * t209 + 0.2e1 * t665 * t801 - 0.2e1 * t67 * t41 * t64 - 0.32e2 * t808 * t43;
1924   t812 = t117 * t51;
1925   t821 = t24 * t355;
1926   t827 = t90 * t304;
1927   t840 = t800 * t41;
1928   t844 = -t116 * t812 - 0.2e1 * t110 * t25 * t58 * t57 - 0.4e1 * t78 * t328 + t82 * t485 - 0.4e1 * t821 * t407 + 0.4e1 * t196 * t90 * t52 + 0.2e1 * t196 * t827 + t82 * t325 + 0.2e1 * t253 * t448 - 0.32e2 * t402 * t67 * t807 * t490 - t207 * t232 + 0.12e2 * t186 * t90 * ZB * t37 * t840;
1929   t849 = t1 * t51;
1930   t850 = t849 * t17;
1931   t860 = t269 * t424;
1932   t863 = t273 * t187;
1933   t874 = 0.16e2 * t462 * t772 - t116 * t850 + 0.16e2 * t553 * t371 + t116 * t288 - 0.12e2 * t97 * t57 * t109 * t697 + t82 * t594 - 0.2e1 * t278 * t860 - 0.2e1 * t863 * t305 - 0.16e2 * t180 * t259 * t311 * t201 - 0.6e1 * t863 * t74 + 0.8e1 * t174 * t191;
1934   t879 = xc * ZA;
1935   t888 = t67 * t51;
1936   t901 = ZA * t17;
1937   t903 = t368 * t901 * t11;
1938   t908 = -0.2e1 * t352 * t51 * t156 * t35 + 0.64e2 * t879 * t189 * t807 * t40 + 0.2e1 * t46 * t58 * t37 * t39 - t888 * t50 + t105 * t411 - 0.16e2 * t335 * t301 + 0.8e1 * t152 * t25 * t136 - 0.8e1 * t278 * t407 + 0.2e1 * t712 * t713 * t231 - 0.16e2 * t367 * t903 + 0.2e1 * t145 * t318;
1939   t923 = t71 * t424;
1940   t926 = t87 * t458;
1941   t927 = t28 * ZA;
1942   t944 = 0.8e1 * t354 * t355 * t190 - 0.8e1 * t110 * t16 * t25 * t800 - 0.2e1 * t374 * t30 * t73 - 0.16e2 * t354 * t30 * t176 - 0.2e1 * t244 * t923 - 0.32e2 * t926 * t927 * t696 * t41 - 0.32e2 * t808 * t525 + 0.6e1 * t749 * t232 - 0.8e1 * t188 * t177 + 0.4e1 * t36 * t58 * ZA * t57 + 0.4e1 * t821 * t270;
1943   t948 = t90 * t327;
1944   t961 = t30 * t100;
1945   t964 = t29 * t49;
1946   t981 = t106 * t1;
1947   t983 = -0.2e1 * t219 * t220 * t100 + 0.2e1 * t321 * t948 - 0.16e2 * t189 * ZA * t99 * t12 - 0.2e1 * t369 * nz * t69 * t368 + 0.2e1 * t374 * t795 - 0.8e1 * t462 * t961 - 0.8e1 * t244 * t964 * t208 + 0.2e1 * t413 * t923 + 0.4e1 * t36 * t38 * t40 * t58 - 0.2e1 * t87 * t51 * t49 * t1 * ZA + t888 * nz * t762 + t115 * t981;
1948   t1012 = 0.6e1 * t616 * t627 - t82 * t213 + 0.2e1 * t775 * t657 - 0.12e2 * t215 * t550 - 0.6e1 * t145 * t131 + 0.2e1 * t81 * t41 * t204 + 0.6e1 * ZB * t48 * t49 * t370 - 0.4e1 * t70 * t382 + 0.2e1 * t446 * t255 + 0.8e1 * t89 * t4 * t327 - 0.4e1 * t56 * t147;
1949   t1018 = t212 * t100;
1950   t1029 = t212 * t327;
1951   t1040 = 0.6e1 * t70 * t245 + 0.2e1 * t56 * t328 + t207 * t668 + 0.4e1 * t503 * t1018 + 0.2e1 * t253 * t470 - 0.6e1 * t398 * t35 * t208 - 0.8e1 * t331 * t964 * t52 - 0.4e1 * t503 * t1029 + 0.6e1 * t821 * t745 + 0.4e1 * t63 * t37 * t142 + 0.16e2 * t260 * t38 * t840;
1952   t1068 = t207 * t347 - 0.2e1 * t164 * t702 - 0.2e1 * t331 * t964 * t73 + 0.8e1 * t374 * t30 * t52 + 0.16e2 * t278 * t903 + 0.2e1 * t863 * t923 + 0.6e1 * t445 * t141 * t165 - 0.2e1 * t164 * t90 * t100 + 0.6e1 * t331 * t74 - 0.2e1 * t182 * t668 - 0.2e1 * t115 * t41 * t204;
1953   t1079 = t58 * t8;
1954   t1091 = t807 * t29;
1955   t1092 = t665 * t40;
1956   t1101 = ZB * t91;
1957   t1102 = t403 * nz;
1958   t1105 = -0.4e1 * t58 * ZB * ZA * t64 - t82 * t850 + 0.2e1 * t821 * t860 + t81 * t51 * t793 + 0.2e1 * t3 * t25 * t1079 * t90 + t82 * t721 - 0.2e1 * t643 * t668 + 0.16e2 * t926 * t927 * t29 * t91 * t41 + 0.32e2 * t1091 * t1092 - 0.2e1 * t219 * t220 * t19 + 0.4e1 * t139 * ZA * t64 + 0.4e1 * t1101 * t1102;
1959   t1108 = t849 * t72;
1960   t1121 = t737 * t15;
1961   t1124 = t29 * t12;
1962   t1133 = t116 * t1108 - 0.8e1 * t475 * t209 - 0.32e2 * t807 * xc * t1092 + 0.2e1 * t278 * t269 * t73 + t82 * t812 - 0.6e1 * t56 * t131 + 0.2e1 * t253 * t1121 + 0.16e2 * t926 * t927 * t1124 * t41 + t168 * t263 - 0.2e1 * t616 * t827 + t81 * t981;
1963   t1134 = t394 * t28;
1964   t1159 = -0.8e1 * t1134 * t29 * t18 * t57 + t82 * t118 - 0.12e2 * t215 * t1018 + 0.2e1 * t602 * t801 - t168 * t341 + 0.2e1 * t67 * t58 * t64 + t168 * t344 - 0.6e1 * t174 * t368 * t208 + 0.16e2 * t553 * t903 + t116 * t790 - 0.4e1 * t36 * t38 * t800 * t15;
1965   t1161 = nz * t83;
1966   t1173 = ZB * t12;
1967   t1196 = 0.4e1 * t1161 * ZB * t39 * ZA - 0.4e1 * t215 * t1029 - 0.8e1 * t488 * 0.3141592654e1 * t39 * xc + 0.32e2 * t821 * ZA * t8 * t1173 * t18 - 0.8e1 * t427 * t147 + 0.6e1 * t701 * t165 - 0.16e2 * t926 * t927 * t1124 * t18 - 0.8e1 * t1091 * t63 * t57 - 0.8e1 * t442 * t209 - 0.8e1 * t462 * t660 - 0.6e1 * t398 * t35 * t52;
1968   t1228 = 0.2e1 * t413 * t305 - 0.8e1 * t648 * t961 - 0.16e2 * t87 * t27 * t23 * t28 * ZA * t29 + 0.4e1 * t189 * t1102 - 0.4e1 * t87 * t1079 * t212 * t879 + 0.2e1 * t164 * t948 - 0.2e1 * t70 * t923 + 0.2e1 * t164 * t322 + 0.2e1 * t446 * t1121 + 0.2e1 * t863 * t964 * t304 - t82 * t1108 + 0.16e2 * t676 * t490 * t19;
1969   t1234 = t25 * ZB;
1970   t1235 = t1234 * t28;
1971   t1236 = t365 * t91;
1972   t1240 = ZB * t121;
1973   t1241 = t1240 * t77;
1974   t1242 = t39 * t39;
1975   t1243 = t12 * t1242;
1976   t1244 = xc * t72;
1977   t1245 = t1243 * t1244;
1978   t1248 = t365 * t25;
1979   t1252 = t243 * nz;
1980   t1257 = t23 * t1;
1981   t1258 = t1240 * t1257;
1982   t1259 = t67 * t12;
1983   t1260 = xc * t16;
1984   t1268 = t1234 * t121;
1985   t1269 = t1268 * t23;
1986   t1272 = t1242 * t91;
1987   t1280 = t67 * xc;
1988   t1284 = t28 * t28;
1989   t1285 = t67 * t1284;
1990   t1287 = t1285 * t2 * ZB;
1991   t1288 = t17 * xc;
1992   t1289 = t1243 * t1288;
1993   t1292 = 0.2e1 * t1235 * t1236 * t17 + 0.8e1 * t1241 * t1245 + 0.4e1 * t927 * t1248 * t91 - 0.2e1 * t1252 * ZB * t1242 * t91 - 0.8e1 * t1258 * t1259 * t1260 - 0.4e1 * t1235 * t2 * t83 * t39 + 0.16e2 * t1269 * t758 + 0.2e1 * t1252 * t189 * t1272 - 0.2e1 * t1252 * t83 * t1242 * ZB + 0.8e1 * t1258 * t630 * t1280 - 0.32e2 * t1287 * t1289;
1994   t1293 = t365 * t83;
1995   t1300 = ZA * t1284;
1996   t1304 = t17 * t1242 * t25 * t12;
1997   t1307 = t927 * t2;
1998   t1311 = t23 * t2;
1999   t1312 = t1300 * t1311;
2000   t1316 = t1234 * t1284;
2001   t1317 = t1316 * t1311;
2002   t1321 = t1240 * t23;
2003   t1331 = t1240 * t23 * t67;
2004   t1332 = t40 * t1244;
2005   t1338 = t1243 * t1260;
2006   t1344 = -0.2e1 * t1235 * t1293 - 0.16e2 * t181 * t365 * t901 * t12 - 0.64e2 * t1300 * t258 * t1304 + 0.8e1 * t1307 * t613 * t39 + 0.64e2 * t1312 * t265 * t402 - 0.32e2 * t1317 * t1288 * t12 - 0.16e2 * t1321 * t67 * t39 * t1244 + 0.2e1 * t1235 * nz * t1272 * t17 + 0.16e2 * t1331 * t1332 + 0.64e2 * t1300 * t292 * t1304 - 0.8e1 * t1241 * t1338 - 0.2e1 * t243 * t1293 * ZB;
2007   t1346 = t1316 * t2;
2008   t1349 = t927 * nz;
2009   t1350 = t25 * t1242;
2010   t1354 = t1268 * t1257;
2011   t1366 = t1268 * t1;
2012   t1370 = t29 * t17;
2013   t1371 = t1243 * t1370;
2014   t1386 = -0.32e2 * t1346 * t1289 + 0.4e1 * t1349 * t1350 * t91 + 0.8e1 * t1354 * t1260 * t12 - 0.16e2 * t181 * nz * t901 * t1243 - 0.4e1 * t1235 * t2 * t91 * t39 + 0.8e1 * t1366 * t152 * t1242 + 0.32e2 * t1287 * t1371 + 0.8e1 * t1258 * t1280 * t152 - 0.8e1 * t1354 * t1260 * t91 + 0.128e3 * t1300 * t365 * xc * t1092 + 0.8e1 * t1366 * t1338;
2015   t1387 = t1257 * t12;
2016   t1391 = t1240 * t1;
2017   t1399 = t1272 * t1260;
2018   t1412 = t1285 * t1311;
2019   t1427 = -0.8e1 * t1268 * t1387 * t16 - 0.8e1 * t1391 * t67 * t1242 * t1244 - 0.4e1 * t1134 * t1101 * t39 + 0.8e1 * t1241 * t1399 - 0.8e1 * t1258 * t596 + 0.4e1 * t927 * t1293 * t25 - 0.16e2 * t1331 * t758 + 0.8e1 * t1307 * t665 * t39 + 0.32e2 * t1412 * t1370 * t1173 + 0.8e1 * t1307 * t665 * t800 + 0.8e1 * t1391 * t1259 * t1242 * t16 - 0.8e1 * t1391 * t1259 * t1242 * t72;
2020   t1456 = t365 * ZB;
2021   t1468 = 0.4e1 * t927 * t1248 * t17 - 0.2e1 * t1235 * nz * t1242 * t91 + 0.8e1 * t1366 * t1244 * t1242 - 0.16e2 * t1269 * t134 * t39 + 0.8e1 * t1268 * t1257 * t72 * xc + 0.16e2 * t1321 * t1259 * t757 + 0.32e2 * t1317 * t1370 * t12 + 0.4e1 * t1349 * t613 * t1242 + 0.2e1 * t243 * t1456 * t17 - 0.64e2 * t1285 * t365 * t12 * t189 * t490 - 0.8e1 * t1354 * t152 * xc;
2022   t1472 = t1316 * t365;
2023   t1474 = t1124 * t39 * t17;
2024   t1478 = t17 * t91;
2025   t1504 = t72 * t39;
2026   t1511 = 0.4e1 * t1134 * t189 * t800 + 0.64e2 * t1472 * t1474 + 0.4e1 * t1235 * t2 * t1478 * t39 + 0.4e1 * t1349 * t665 * t1242 - 0.8e1 * t1258 * t1280 * t72 + 0.2e1 * t1252 * t189 * t1242 + 0.2e1 * t243 * t365 * t189 * t91 + 0.4e1 * t927 * t365 * t1478 * t25 - 0.128e3 * t1300 * t1248 * t1474 - 0.2e1 * t1235 * t1236 + 0.16e2 * t1269 * t1504 * xc + 0.2e1 * t1235 * t365 * t17;
2027   t1545 = -0.2e1 * t1235 * t1161 * t1242 + 0.4e1 * t1349 * t1350 * t1478 - 0.8e1 * t1366 * t1245 + 0.2e1 * t1235 * t556 * t1242 - 0.32e2 * t1412 * t402 * t726 - 0.8e1 * t1366 * t1399 + 0.8e1 * t1258 * t651 - 0.2e1 * t243 * t1456 * t91 + 0.8e1 * t1268 * t1387 * t72 - 0.16e2 * t1269 * t1332 + 0.4e1 * t1134 * t189 * t39 + 0.16e2 * t1269 * t152 * t39;
2028   t1564 = t1260 * t800;
2029   t1583 = 0.64e2 * t1285 * t1456 * t1474 - 0.64e2 * t1472 * t1288 * t40 - 0.8e1 * t1366 * t134 * t1242 + 0.8e1 * t1307 * t362 * t39 + 0.4e1 * t1235 * t2 * t17 * t39 + 0.32e2 * t1346 * t1371 - 0.16e2 * t1269 * t1564 - 0.16e2 * t1321 * t1259 * t1504 + 0.16e2 * t1331 * t1564 - 0.64e2 * t1312 * t29 * t25 * t402 - 0.4e1 * t1134 * t83 * t39 * ZB - 0.32e2 * t181 * t2 * t404;
2030 
2031   _PC2B = (t1133 + t1196 + t1068 + t811 + t466 + t1012 + t381 + t162 + t249 + t533 + t844 + t104 + t1159 + t571 + t211 + t874 + t607 + t339 + t296 + t638 + t908 + t671 + t419 + t983 + t705 + t1105 + t501 + t778 + t1040 + t1228 + t741 + t944) / (t1292 + t1344 + t1386 + t1427 + t1468 + t1511 + t1545 + t1583);
2032   /****************************************************************************************/
2033   t1 = nz * nz;
2034   t2 = t1 * nz;
2035   t3 = t2 * nx;
2036   t4 = nx * 0.3141592654e1;
2037   t5 = t4 * xc;
2038   t6 = PetscSinReal(t5);
2039   t7 = 0.3141592654e1 * 0.3141592654e1;
2040   t9 = t3 * t6 * t7;
2041   t10 = xc * xc;
2042   t11 = ZA * ZA;
2043   t12 = t10 * t11;
2044   t13 = nz * 0.3141592654e1;
2045   t14 = PetscExpReal(t13);
2046   t15 = t14 * t14;
2047   t16 = xc * nz;
2048   t18 = PetscExpReal(t16 * 0.3141592654e1);
2049   t19 = t18 * t18;
2050   t20 = t19 * t18;
2051   t21 = t15 * t20;
2052   t22 = t12 * t21;
2053   t25 = nx * t6;
2054   t26 = t1 * 0.3141592654e1;
2055   t27 = t25 * t26;
2056   t28 = ZA * ZB;
2057   t29 = t18 * t15;
2058   t30 = t28 * t29;
2059   t33 = t25 * nz;
2060   t34 = t11 * t15;
2061   t35 = t19 * t19;
2062   t36 = t35 * t18;
2063   t40 = t25 * t1;
2064   t41 = 0.3141592654e1 * t11;
2065   t42 = t15 * t36;
2066   t43 = t41 * t42;
2067   t46 = nx * nx;
2068   t47 = t1 * t46;
2069   t48 = t47 * t11;
2070   t49 = t7 * xc;
2071   t50 = t35 * t15;
2072   t51 = t49 * t50;
2073   t55 = PetscSinReal(t4);
2074   t56 = t46 * nx * t55;
2075   t58 = t56 * nz * t7;
2076   t59 = ZB * ZB;
2077   t60 = t10 * t59;
2078   t61 = t15 * t14;
2079   t62 = t19 * t61;
2080   t63 = t60 * t62;
2081   t66 = t19 * t14;
2082   t67 = t60 * t66;
2083   t70 = t28 * t42;
2084   t73 = PetscCosReal(t5);
2085   t74 = t47 * t73;
2086   t75 = t7 * t11;
2087   t77 = t75 * t10 * t36;
2088   t80 = t73 * t46;
2089   t81 = t80 * nz;
2090   t82 = 0.3141592654e1 * t59;
2091   t83 = t82 * t42;
2092   t87 = xc * t11;
2093   t88 = t87 * t62;
2094   t91 = nz * nx;
2095   t92 = t55 * t61;
2096   t96 = nx * t55;
2097   t98 = t96 * t2 * t7;
2098   t101 = xc * t59;
2099   t102 = t101 * t62;
2100   t108 = t1 * t1;
2101   t109 = t108 * t7;
2102   t111 = t59 * t35;
2103   t112 = t111 * t15;
2104   t115 = t35 * t20;
2105   t123 = t1 * nx * t55;
2106   t124 = t61 * t35;
2107   t127 = t35 * t19;
2108   t128 = t61 * t127;
2109   t129 = t60 * t128;
2110   t132 = t56 * t16;
2111   t133 = t7 * t59;
2112   t134 = t133 * t124;
2113   t137 = 0.6e1 * t58 * t88 - 0.2e1 * t91 * t92 * t11 + 0.2e1 * t98 * t63 - 0.6e1 * t58 * t102 - 0.2e1 * t91 * t92 * t59 - 0.16e2 * t109 * xc * t112 - 0.2e1 * t91 * t6 * t115 * t59 + 0.12e2 * t40 * t83 + t123 * t41 * t124 - 0.2e1 * t58 * t129 + 0.4e1 * t132 * t134;
2114   t139 = t56 * 0.3141592654e1;
2115   t140 = t111 * t14;
2116   t144 = t49 * t124;
2117   t147 = t91 * t55;
2118   t148 = t61 * ZA;
2119   t154 = ZA * t115 * xc * ZB;
2120   t157 = t7 * 0.3141592654e1;
2121   t159 = t96 * t108 * t157;
2122   t160 = t10 * xc;
2123   t161 = t160 * t59;
2124   t162 = t35 * t14;
2125   t163 = t161 * t162;
2126   t166 = t28 * t162;
2127   t169 = t80 * t13;
2128   t170 = t101 * t42;
2129   t173 = t2 * t11;
2130   t174 = t96 * t173;
2131   t175 = t7 * t10;
2132   t179 = t59 * t15;
2133   t184 = t15 * t15;
2134   t193 = t139 * t140 + 0.4e1 * t56 * nz * t11 * t144 + 0.4e1 * t147 * t148 * ZB + 0.4e1 * t27 * t154 + 0.8e1 * t159 * t163 - 0.12e2 * t147 * t166 + 0.2e1 * t169 * t170 - 0.16e2 * t174 * t175 * t124 + 0.2e1 * t33 * t179 * t20 - 0.2e1 * t33 * t11 * t36 * t184 + 0.2e1 * t56 * t61 * 0.3141592654e1 * ZA * ZB;
2135   t194 = t173 * 0.3141592654e1;
2136   t195 = xc * t15;
2137   t196 = t195 * t19;
2138   t202 = t15 * t115;
2139   t203 = t28 * t202;
2140   t206 = t96 * t26;
2141   t207 = t14 * t127;
2142   t208 = t101 * t207;
2143   t211 = t12 * t128;
2144   t218 = t11 * t61;
2145   t219 = t218 * t35;
2146   t221 = t108 * ZA;
2147   t223 = t7 * ZB;
2148   t224 = t223 * t50;
2149   t227 = ZA * xc;
2150   t228 = ZB * t15;
2151   t229 = t228 * t36;
2152   t230 = t227 * t229;
2153   t233 = t87 * t207;
2154   t236 = t6 * t11;
2155   t240 = -0.4e1 * t194 * t196 + 0.4e1 * t194 * t195 * t127 + 0.4e1 * t33 * t203 - 0.12e2 * t206 * t208 + 0.2e1 * t58 * t211 - 0.16e2 * t47 * t10 * t133 * t50 + t139 * t219 - 0.32e2 * t221 * t10 * t224 - 0.4e1 * t169 * t230 - 0.6e1 * t98 * t233 + 0.2e1 * t91 * t236 * t20;
2156   t244 = t227 * t228 * t20;
2157   t252 = t184 * t18;
2158   t253 = t101 * t252;
2159   t256 = t35 * t35;
2160   t257 = t256 * t14;
2161   t258 = t28 * t257;
2162   t261 = t108 * t11;
2163   t263 = t7 * t35;
2164   t268 = ZB * t61 * t35;
2165   t273 = t96 * t108 * t160;
2166   t274 = t157 * ZB;
2167   t276 = t274 * t148 * t35;
2168   t279 = t101 * t21;
2169   t282 = 0.3141592654e1 * xc;
2170   t283 = t59 * t36;
2171   t284 = t282 * t283;
2172   t289 = 0.4e1 * t169 * t244 - 0.4e1 * t132 * t133 * t162 - 0.2e1 * t147 * t140 - 0.2e1 * t27 * t253 + 0.2e1 * t139 * t258 + 0.16e2 * t261 * t10 * t263 * t15 - 0.16e2 * t206 * t227 * t268 - 0.16e2 * t273 * t276 - 0.6e1 * t27 * t279 - 0.4e1 * t40 * t284 - 0.32e2 * t9 * t230;
2173   t290 = t1 * t11;
2174   t291 = t96 * t290;
2175   t297 = t59 * t61;
2176   t298 = t297 * t127;
2177   t300 = ZB * t36;
2178   t301 = t227 * t300;
2179   t304 = t1 * t59;
2180   t305 = t184 * t35;
2181   t310 = t46 * ZB;
2182   t311 = t184 * ZA;
2183   t312 = t310 * t311;
2184   t314 = t60 * t21;
2185   t317 = t1 * ZA;
2186   t318 = ZB * t35;
2187   t321 = t1 * t256;
2188   t324 = t96 * t261;
2189   t325 = t10 * t157;
2190   t326 = t325 * t124;
2191   t329 = -0.4e1 * t291 * t282 * t128 + t123 * t82 * t62 - t139 * t298 + 0.12e2 * t27 * t301 + t304 * t305 - 0.2e1 * t58 * t12 * t66 - 0.2e1 * t312 + 0.8e1 * t9 * t314 + 0.2e1 * t317 * t318 + 0.2e1 * t321 * t28 - 0.8e1 * t324 * t326;
2192   t331 = t28 * t124;
2193   t334 = 0.3141592654e1 * t15;
2194   t335 = t334 * t127;
2195   t338 = t35 * ZA;
2196   t341 = t46 * t256;
2197   t344 = t46 * t11;
2198   t346 = t46 * t59;
2199   t348 = t297 * t35;
2200   t351 = ZA * t10;
2201   t352 = t351 * t300;
2202   t355 = t1 * ZB;
2203   t362 = 0.12e2 * t147 * t331 - 0.4e1 * t173 * t335 - 0.2e1 * t310 * t338 - 0.2e1 * t341 * t28 - t344 * t305 - t346 * t305 + 0.2e1 * t147 * t348 + 0.16e2 * t9 * t352 + 0.2e1 * t355 * t311 + t290 * t305 + 0.2e1 * t33 * t34 * t20;
2204   t363 = t36 * t184;
2205   t364 = t87 * t363;
2206   t368 = t47 * t73 * t7;
2207   t373 = t160 * t157;
2208   t374 = t373 * t124;
2209   t377 = t311 * t35;
2210   t380 = t12 * t62;
2211   t386 = ZB * t10 * ZA * t15 * t20;
2212   t389 = t87 * t66;
2213   t393 = t56 * t1 * t10;
2214   t401 = 0.2e1 * t27 * t364 - 0.16e2 * t368 * t279 - t123 * t41 * t257 + 0.8e1 * t324 * t374 + 0.2e1 * t355 * t377 - 0.2e1 * t98 * t380 - 0.16e2 * t9 * t386 + 0.2e1 * t58 * t389 + 0.16e2 * t393 * t276 + t123 * t82 * t162 - 0.2e1 * t33 * t179 * t36;
2215   t412 = t11 * t14 * t127;
2216   t416 = t11 * t19;
2217   t417 = t416 * t61;
2218   t421 = t96 * t2 * ZA;
2219   t426 = t56 * nz * ZA;
2220   t427 = t318 * t14;
2221   t428 = t49 * t427;
2222   t431 = t82 * t29;
2223   t434 = t87 * t21;
2224   t442 = 0.2e1 * t33 * t11 * t184 * t18 + 0.4e1 * t81 * t284 - t139 * t412 + 0.2e1 * t147 * t219 - 0.2e1 * t147 * t417 + 0.32e2 * t421 * t175 * t268 + 0.8e1 * t426 * t428 + 0.4e1 * t81 * t431 - 0.2e1 * t169 * t434 - 0.2e1 * t98 * t129 - 0.32e2 * t47 * t28 * t51;
2225   t443 = t184 * t20;
2226   t447 = t61 * 0.3141592654e1;
2227   t448 = t447 * t11;
2228   t450 = t49 * t268;
2229   t453 = t60 * t42;
2230   t456 = t41 * t202;
2231   t463 = t101 * t443;
2232   t469 = t41 * xc * t20;
2233   t474 = -0.8e1 * t27 * t87 * t443 - t56 * t448 - 0.8e1 * t426 * t450 + 0.8e1 * t368 * t453 + 0.4e1 * t40 * t456 + 0.4e1 * t40 * t431 - 0.4e1 * t81 * t456 - 0.4e1 * t27 * t463 + 0.6e1 * t139 * t331 + 0.2e1 * t40 * t469 - 0.16e2 * t9 * t434;
2234   t482 = t108 * t10;
2235   t492 = nz * t46;
2236   t493 = t492 * t11;
2237   t495 = t282 * t19 * t184;
2238   t498 = t56 * t290;
2239   t499 = t325 * t162;
2240   t502 = t416 * t14;
2241   t504 = t60 * t207;
2242   t507 = -t123 * t82 * t257 - 0.4e1 * t169 * t301 + t123 * t41 * t162 + 0.16e2 * t482 * t7 * t112 - 0.12e2 * t206 * t102 - t123 * t82 * t66 - 0.4e1 * t147 * t258 - 0.4e1 * t493 * t495 - 0.8e1 * t498 * t499 + t139 * t502 - 0.2e1 * t98 * t504;
2243   t508 = t101 * t162;
2244   t512 = t41 * t115 * xc;
2245   t515 = t87 * t42;
2246   t520 = ZB * t184;
2247   t522 = t227 * t520 * t18;
2248   t525 = t492 * t59;
2249   t528 = t6 * t59;
2250   t532 = t520 * t20;
2251   t533 = t351 * t532;
2252   t539 = t447 * t59;
2253   t544 = 0.8e1 * t206 * t508 - 0.2e1 * t40 * t512 - 0.16e2 * t368 * t515 + 0.12e2 * t206 * t88 + 0.4e1 * t27 * t522 + 0.4e1 * t525 * t495 - 0.4e1 * t91 * t528 * t36 - 0.16e2 * t368 * t533 - 0.16e2 * t206 * t227 * t427 - t56 * t539 - 0.2e1 * t132 * t133 * t66;
2254   t551 = t87 * t162;
2255   t554 = t351 * t229;
2256   t560 = t59 * t19;
2257   t561 = t560 * t14;
2258   t564 = t101 * t202;
2259   t567 = t87 * t252;
2260   t573 = t227 * t228 * t115;
2261   t578 = 0.4e1 * t33 * t70 + 0.4e1 * t493 * t335 - 0.4e1 * t58 * t551 + 0.16e2 * t9 * t554 - 0.4e1 * t33 * t28 * t252 + 0.2e1 * t147 * t561 + 0.2e1 * t169 * t564 - 0.2e1 * t27 * t567 - 0.8e1 * t324 * t499 - 0.4e1 * t169 * t573 + 0.12e2 * t27 * t244;
2262   t579 = t82 * t202;
2263   t591 = t282 * t115 * t59;
2264   t598 = t101 * t66;
2265   t606 = -0.4e1 * t81 * t579 - 0.2e1 * t169 * t567 - 0.6e1 * t27 * t170 + 0.8e1 * t169 * t203 + 0.2e1 * t98 * t67 + 0.2e1 * t81 * t591 + 0.32e2 * t368 * t244 - 0.2e1 * t27 * t564 + 0.4e1 * t206 * t598 + 0.16e2 * t9 * t170 + 0.2e1 * t33 * t283 * t184;
2266   t608 = t373 * t162;
2267   t611 = t59 * t184;
2268   t617 = t101 * t29;
2269   t624 = t227 * ZB * t18 * t15;
2270   t629 = t157 * t59;
2271   t630 = t629 * t124;
2272   t633 = t3 * t6;
2273   t634 = t175 * t283;
2274   t644 = 0.8e1 * t498 * t608 + 0.2e1 * t33 * t611 * t18 - 0.4e1 * t206 * t389 - 0.2e1 * t27 * t617 - 0.4e1 * t169 * t154 + 0.4e1 * t27 * t624 + 0.12e2 * t27 * t230 - 0.8e1 * t393 * t630 - 0.8e1 * t633 * t634 + 0.16e2 * t47 * t7 * t101 * t50 + 0.2e1 * t123 * t447 * t28;
2275   t645 = t41 * t29;
2276   t648 = t2 * 0.3141592654e1;
2277   t649 = t648 * xc;
2278   t650 = t560 * t184;
2279   t656 = t56 * t1 * t157;
2280   t659 = t87 * t128;
2281   t662 = t96 * t482;
2282   t663 = t629 * t162;
2283   t671 = t161 * t124;
2284   t674 = t218 * t127;
2285   t679 = 0.4e1 * t81 * t645 - 0.4e1 * t649 * t650 - 0.8e1 * t169 * t70 + 0.8e1 * t656 * t163 - 0.2e1 * t98 * t659 - 0.8e1 * t662 * t663 - 0.32e2 * t421 * t175 * t427 - 0.2e1 * t147 * t502 + 0.8e1 * t656 * t671 + 0.2e1 * t147 * t674 - 0.16e2 * t368 * t386;
2286   t714 = t334 * t19;
2287   t719 = t12 * t42;
2288   t722 = t304 * t35 - t346 * t35 + t341 * t59 - t344 * t35 + t344 * t256 + t346 * t184 - 0.16e2 * t368 * t554 - 0.16e2 * t48 * t175 * t50 + 0.4e1 * t525 * t714 - 0.2e1 * t58 * t659 + 0.8e1 * t368 * t719;
2289   t730 = xc * t19;
2290   t735 = t59 * t256 * t14;
2291   t752 = 0.4e1 * t173 * t714 - 0.6e1 * t27 * t515 - 0.16e2 * t9 * t279 + 0.4e1 * t194 * t730 * t184 - t139 * t735 - 0.4e1 * t492 * t127 * t82 * xc - 0.4e1 * t98 * t508 - t123 * t41 * t207 - 0.2e1 * t147 * t298 + 0.8e1 * t368 * t314 + 0.6e1 * t132 * t133 * t207;
2292   t755 = t28 * t21;
2293   t759 = t274 * t338 * t14;
2294   t767 = t11 * t35;
2295   t768 = t767 * t14;
2296   t778 = t560 * t61;
2297   t781 = -0.2e1 * t58 * t504 - 0.8e1 * t27 * t755 + 0.16e2 * t662 * t759 + 0.12e2 * t291 * t282 * t207 - 0.6e1 * t27 * t434 + t139 * t768 - 0.8e1 * t498 * t326 + 0.4e1 * t33 * t611 * t20 + 0.2e1 * t81 * t512 - t139 * t561 + 0.2e1 * t147 * t778;
2298   t786 = t12 * t443;
2299   t790 = t282 * t59 * t20;
2300   t796 = t59 * t14 * t127;
2301   t806 = t41 * t21;
2302   t811 = -0.8e1 * t393 * t663 + 0.8e1 * t368 * t786 + 0.2e1 * t81 * t790 + 0.4e1 * t169 * t624 + t139 * t796 + 0.2e1 * t206 * t258 - 0.2e1 * t40 * t591 - 0.8e1 * t662 * t630 - 0.4e1 * t33 * t30 - 0.4e1 * t40 * t806 + 0.8e1 * t9 * t786;
2303   t819 = t282 * t15 * t127;
2304   t822 = t101 * t363;
2305   t830 = t11 * t256 * t14;
2306   t835 = t227 * t532;
2307   t842 = 0.2e1 * t33 * t11 * t18 * t15 + t123 * t41 * t66 - 0.4e1 * t493 * t819 - 0.2e1 * t27 * t822 - 0.16e2 * t368 * t170 - 0.4e1 * t169 * t463 - t139 * t830 - 0.4e1 * t649 * t179 * t127 + 0.12e2 * t27 * t835 - 0.16e2 * t368 * t434 - 0.2e1 * t40 * t790;
2308   t845 = t87 * t202;
2309   t854 = t338 * t15;
2310   t859 = t12 * t207;
2311   t868 = t139 * t348 - 0.2e1 * t27 * t845 + 0.8e1 * t169 * t755 - 0.2e1 * t58 * t380 + 0.6e1 * t206 * t331 + 0.8e1 * t310 * t854 - 0.2e1 * t169 * t822 + 0.2e1 * t98 * t859 + 0.8e1 * t159 * t671 + 0.8e1 * t74 * t634 - 0.2e1 * t169 * t253;
2312   t880 = t60 * t443;
2313   t891 = t101 * t128;
2314   t894 = -t123 * t539 - 0.2e1 * t147 * t796 + 0.32e2 * t368 * t230 + t139 * t674 - 0.16e2 * t98 * t60 * t124 + 0.32e2 * t9 * t244 + 0.8e1 * t368 * t880 - 0.8e1 * t40 * t41 * xc * t36 - t123 * t82 * t128 - 0.6e1 * t58 * t233 + 0.2e1 * t58 * t891;
2315   t903 = t179 * t19;
2316   t920 = t56 * t1 * t160;
2317   t925 = -0.2e1 * t174 * t175 * t66 - 0.4e1 * t493 * t714 + 0.4e1 * t649 * t903 - 0.4e1 * t81 * t43 + t123 * t82 * t207 + 0.4e1 * t206 * t891 - 0.16e2 * t273 * t759 - 0.8e1 * t27 * t203 + 0.32e2 * t221 * ZB * t51 - 0.16e2 * t920 * t759 - 0.8e1 * t9 * t453;
2318   t932 = t87 * t29;
2319   t945 = t82 * t21;
2320   t953 = -0.16e2 * t920 * t276 - 0.8e1 * t169 * t30 - 0.8e1 * t633 * t77 - 0.2e1 * t27 * t932 - 0.4e1 * t174 * t49 * t162 + 0.8e1 * t206 * t87 * t124 - 0.2e1 * t147 * t768 + 0.4e1 * t169 * t522 - 0.12e2 * t81 * t945 + 0.4e1 * t33 * t28 * t115 + 0.4e1 * t525 * t819;
2321   t971 = t282 * t127;
2322   t978 = -0.6e1 * t98 * t102 + 0.2e1 * t169 * t515 - 0.2e1 * t310 * t377 + 0.2e1 * t147 * t830 + 0.8e1 * t368 * t22 - 0.2e1 * t169 * t617 + 0.16e2 * t662 * t276 - 0.8e1 * t355 * t854 + 0.4e1 * t493 * t971 - 0.16e2 * t9 * t533 - 0.2e1 * t169 * t279;
2323   t997 = xc * t127;
2324   t998 = t997 * t59;
2325   t1003 = 0.4e1 * t40 * t579 + 0.2e1 * t169 * t845 + 0.16e2 * t9 * t515 + 0.8e1 * t206 * t551 + t123 * t41 * t128 + 0.16e2 * t98 * t60 * t162 + 0.2e1 * t169 * t364 - 0.2e1 * t169 * t932 + t139 * t778 + 0.4e1 * t648 * t998 + 0.2e1 * t147 * t412;
2326   t1006 = t2 * t59;
2327   t1017 = xc * t35;
2328   t1033 = 0.4e1 * t1006 * t335 + 0.4e1 * t81 * t806 - 0.2e1 * t33 * t34 * t115 + 0.8e1 * t498 * t374 - 0.16e2 * t261 * t7 * t1017 * t15 + 0.8e1 * t206 * t101 * t124 - t123 * t448 + 0.2e1 * t147 * t735 + 0.6e1 * t98 * t208 + 0.6e1 * t98 * t88 - 0.4e1 * t33 * t755;
2329   t1055 = -0.4e1 * t173 * t971 + 0.2e1 * t98 * t891 + 0.8e1 * t9 * t880 + 0.4e1 * t169 * t835 - t304 * t184 + t344 * t184 - t123 * t41 * t62 - 0.2e1 * t98 * t598 + 0.2e1 * t58 * t859 + 0.32e2 * t47 * t351 * t224 + 0.2e1 * t98 * t389;
2330   t1070 = t15 * t19;
2331   t1089 = -0.16e2 * t368 * t352 - 0.8e1 * t9 * t719 + 0.4e1 * t96 * t2 * xc * t134 - 0.2e1 * t91 * t236 * t115 + 0.4e1 * t27 * t573 + 0.4e1 * t493 * t282 * t1070 + 0.2e1 * t33 * t59 * t18 * t15 + 0.12e2 * t40 * t945 - 0.4e1 * t492 * xc * t82 * t1070 - 0.2e1 * t91 * t528 * t20 + 0.8e1 * t324 * t608;
2332   t1113 = t123 * t82 * t124 + 0.8e1 * t421 * t428 - t139 * t417 + 0.4e1 * t40 * t645 + 0.16e2 * t393 * t759 - 0.2e1 * t33 * t179 * t115 - 0.4e1 * t525 * t335 + 0.4e1 * t33 * t28 * t36 - 0.4e1 * t1006 * t714 + 0.6e1 * t206 * t166 - 0.8e1 * t421 * t450;
2333   t1119 = t321 * t46;
2334   t1122 = t157 * t11;
2335   t1123 = t1122 * t2;
2336   t1124 = t184 * t46;
2337   t1128 = t108 * nz;
2338   t1132 = t7 * t7;
2339   t1133 = t1132 * t11;
2340   t1134 = t1133 * t108;
2341   t1135 = t15 * t46;
2342   t1139 = t7 * ZA;
2343   t1140 = t1139 * ZB;
2344   t1141 = t1 * t35;
2345   t1145 = t629 * t2;
2346   t1146 = t1135 * t730;
2347   t1149 = t157 * t1128;
2348   t1150 = t1149 * xc;
2349   t1153 = t46 * xc;
2350   t1154 = t1153 * t127;
2351   t1158 = t184 * t1 * t46;
2352   t1161 = t46 * t46;
2353   t1162 = t35 * t1161;
2354   t1166 = t7 * t1;
2355   t1170 = -0.4e1 * t133 * t1119 + 0.16e2 * t1123 * t1124 * t730 - 0.8e1 * t1122 * t1128 * t196 - 0.64e2 * t1134 * t1135 * t1017 - 0.32e2 * t1140 * t1141 * t1135 + 0.16e2 * t1145 * t1146 - 0.8e1 * t1150 * t650 - 0.16e2 * t1123 * t1154 - 0.4e1 * t133 * t1158 - 0.16e2 * t1140 * t1162 * t15 + 0.8e1 * t1166 * t35 * t312;
2356   t1171 = t1161 * t184;
2357   t1175 = t1122 * nz;
2358   t1176 = t15 * t1161;
2359   t1180 = t1132 * ZA;
2360   t1181 = t1180 * t355;
2361   t1182 = t1176 * t1017;
2362   t1185 = t1161 * xc;
2363   t1189 = t1133 * t1;
2364   t1192 = t108 * t1;
2365   t1193 = t1132 * t1192;
2366   t1195 = t10 * t35;
2367   t1199 = t157 * t15;
2368   t1203 = t1141 * t46;
2369   t1211 = t184 * t108;
2370   t1218 = 0.2e1 * t133 * t1171 * t35 + 0.8e1 * t1175 * t1176 * t997 + 0.64e2 * t1181 * t1182 - 0.8e1 * t1175 * t1185 * t127 - 0.32e2 * t1189 * t1182 - 0.64e2 * t1193 * ZA * t1195 * t228 + 0.8e1 * t1199 * t416 * t1128 + 0.8e1 * t1140 * t1203 - 0.4e1 * t75 * t1158 - 0.8e1 * t1199 * t560 * t1128 - 0.2e1 * t133 * t1211 - 0.8e1 * t1199 * t127 * t11 * t1128;
2371   t1221 = t256 * t1161;
2372   t1224 = t35 * t108;
2373   t1233 = t7 * t256;
2374   t1236 = -t75 * t1211 - t75 * t1221 - t133 * t1221 + t75 * t1224 - t75 * t1171 - t133 * t1171 + t133 * t1224 + t75 * t1162 - t75 * t108 * t256 + t133 * t1162 - t1233 * t59 * t108;
2375   t1240 = t1135 * t1195;
2376   t1252 = t629 * t127;
2377   t1263 = t1171 * ZA;
2378   t1280 = -0.128e3 * t1180 * ZB * t108 * t1240 + 0.32e2 * t1193 * t10 * t112 + 0.4e1 * t133 * t1203 + 0.4e1 * t109 * t256 * ZA * ZB - 0.8e1 * t1252 * nz * t15 * t1185 + 0.8e1 * t1175 * t1171 * t730 - 0.8e1 * t1175 * t1176 * t127 + 0.4e1 * t223 * t1263 - 0.8e1 * t1175 * t1176 * t730 + 0.8e1 * t1166 * ZA * t341 * ZB + 0.64e2 * t1134 * t1240 + 0.8e1 * t1122 * xc * t1128 * t127 * t15;
2379   t1283 = t1199 * t19;
2380   t1287 = t1199 * t127;
2381   t1289 = t59 * nz * t1161;
2382   t1293 = t157 * nz * xc;
2383   t1304 = t1132 * t108;
2384   t1310 = t263 * ZB;
2385   t1316 = t2 * t15;
2386   t1323 = -0.16e2 * t1283 * t1006 * t46 + 0.8e1 * t1287 * t1289 + 0.8e1 * t1293 * t127 * t1161 * t59 + 0.16e2 * t1123 * t1135 * t19 + 0.8e1 * t1293 * t560 * t1176 + 0.64e2 * t1304 * t59 * t1240 + 0.4e1 * t75 * t1203 + 0.4e1 * t1310 * t1263 + 0.4e1 * t223 * t338 * t108 - 0.16e2 * t1252 * t1316 * t1153 - 0.16e2 * t1310 * t221 * t15;
2387   t1330 = t1132 * t15;
2388   t1336 = t1132 * t1;
2389   t1338 = t1162 * t179;
2390   t1370 = 0.8e1 * t1175 * t1176 * t19 + 0.4e1 * t1139 * t318 * t1161 + 0.128e3 * t1330 * t318 * t108 * t46 * t227 - 0.32e2 * t1336 * xc * t1338 + 0.4e1 * t1233 * ZA * t1161 * ZB - 0.8e1 * t1287 * t59 * t1128 * xc + 0.2e1 * t75 * t305 * t108 + 0.8e1 * t1199 * t127 * t59 * t1128 - 0.8e1 * t1283 * t1289 - 0.8e1 * t1293 * t560 * t1171 + 0.4e1 * t133 * t35 * t1158 + 0.8e1 * t157 * t184 * t19 * t11 * t1128 * xc;
2391   t1376 = t7 * t184;
2392   t1380 = t1176 * t1195;
2393   t1393 = t1330 * t35;
2394   t1411 = 0.16e2 * t1145 * t1154 + 0.8e1 * t1149 * t998 + 0.4e1 * t1376 * t35 * t48 + 0.32e2 * t1189 * t1380 + 0.32e2 * t1193 * t11 * t1195 * t15 - 0.64e2 * t1304 * xc * t111 * t1135 - 0.16e2 * t1123 * t1146 + 0.64e2 * t1393 * t28 * t1192 * xc - 0.16e2 * t1123 * t1135 * t127 - 0.8e1 * t1122 * xc * t1128 * t127 - 0.32e2 * t1193 * xc * t112 + 0.16e2 * t1252 * t1316 * t46;
2395   t1450 = 0.2e1 * t1376 * t767 * t1161 + 0.2e1 * t1376 * t111 * t108 + 0.4e1 * t223 * t311 * t108 + 0.4e1 * t109 * t35 * t520 * ZA + 0.16e2 * t1123 * t1135 * t997 - 0.64e2 * t1181 * t1380 + 0.8e1 * t1150 * t903 - 0.32e2 * t1393 * t11 * t1192 * xc - 0.16e2 * t157 * t2 * xc * t560 * t1124 + 0.8e1 * t223 * t184 * t317 * t46 + 0.32e2 * t1336 * t10 * t1338 - 0.4e1 * t75 * t1119;
2396   _PC3B = (t606 + t722 + t1089 + t781 + 0.16e2 * t48 * t51 + t978 + t868 + t507 - t304 * t256 + 0.8e1 * t9 * t22 + t752 + 0.4e1 * t174 * t144 - 0.2e1 * t81 * t469 + 0.6e1 * t139 * t166 + t362 + 0.2e1 * t98 * t211 + t925 + t137 - t290 * t184 + 0.12e2 * t81 * t83 + t842 + 0.8e1 * t74 * t77 + 0.16e2 * t98 * t12 * t162 - 0.4e1 * t33 * t28 * t443 - 0.8e1 * t27 * t70 - 0.2e1 * t33 * t34 * t36 - 0.8e1 * t27 * t30 + 0.2e1 * t58 * t67 - 0.4e1 * t40 * t43 + 0.2e1 * t58 * t63 + t1033 - t290 * t256 + t290 * t35 + t193 + t1113 + t578 + t442 + t474 + t544 + t329 + t679 + t401 + t953 + t811 + t644 + t894 + t289 + t240 + t1055 + t1003) / (t1170 + t1218 + 0.2e1 * t1236 + t1280 + t1323 + t1370 + t1411 + t1450);
2397   /****************************************************************************************/
2398   t1 = nz * nz;
2399   t2 = t1 * xc;
2400   t3 = ZB * ZB;
2401   t5 = t2 * 0.3141592654e1 * t3;
2402   t6 = nx * 0.3141592654e1;
2403   t7 = t6 * xc;
2404   t8 = PetscCosReal(t7);
2405   t9 = nx * nx;
2406   t10 = t8 * t9;
2407   t11 = nz * 0.3141592654e1;
2408   t12 = PetscExpReal(t11);
2409   t13 = t12 * t12;
2410   t16 = PetscExpReal(xc * nz * 0.3141592654e1);
2411   t17 = t16 * t16;
2412   t18 = t17 * t16;
2413   t19 = t17 * t17;
2414   t20 = t19 * t18;
2415   t21 = t13 * t20;
2416   t22 = t10 * t21;
2417   t25 = ZA * ZA;
2418   t26 = t1 * t25;
2419   t27 = xc * 0.3141592654e1;
2420   t28 = t26 * t27;
2421   t29 = t19 * t16;
2422   t30 = t13 * t13;
2423   t31 = t29 * t30;
2424   t35 = t9 * nx;
2425   t36 = t3 * t35;
2426   t37 = PetscSinReal(t6);
2427   t38 = t13 * t12;
2428   t39 = t37 * t38;
2429   t40 = t39 * t19;
2430   t42 = t1 * t1;
2431   t43 = nx * t42;
2432   t44 = xc * xc;
2433   t45 = t25 * t44;
2434   t46 = t43 * t45;
2435   t47 = 0.3141592654e1 * 0.3141592654e1;
2436   t48 = t47 * t37;
2437   t49 = t17 * t38;
2438   t54 = 0.3141592654e1 * t35;
2439   t55 = ZA * nz * t54;
2440   t56 = t37 * ZB;
2441   t57 = t19 * t12;
2442   t61 = t25 * t8;
2443   t62 = t61 * t9;
2444   t63 = nz * t30;
2445   t64 = t63 * t16;
2446   t67 = t1 * nz;
2447   t69 = t47 * ZB;
2448   t70 = t67 * t44 * t69;
2449   t75 = nx * t3;
2450   t76 = t75 * t37;
2451   t77 = t67 * 0.3141592654e1;
2452   t78 = t19 * t19;
2453   t79 = t78 * t12;
2454   t80 = t77 * t79;
2455   t82 = t3 * t38;
2456   t84 = t54 * t37;
2457   t87 = PetscSinReal(t7);
2458   t88 = t29 * t87;
2459   t89 = t47 * t44;
2460   t93 = nx * t25;
2461   t94 = t87 * t42;
2462   t95 = t93 * t94;
2463   t96 = t47 * xc;
2464   t97 = t13 * t29;
2465   t98 = t96 * t97;
2466   t101 = t87 * t67;
2467   t102 = t93 * t101;
2468   t103 = t13 * t18;
2469   t107 = t47 * t35;
2470   t108 = t26 * t107;
2471   t109 = t37 * t44;
2472   t110 = t19 * t17;
2473   t111 = t12 * t110;
2474   t116 = t37 * t19 * t12;
2475   t118 = t37 * xc;
2476   t119 = ZB * t19;
2477   t120 = t119 * t12;
2478   t121 = t118 * t120;
2479   t125 = xc * t3;
2480   t126 = t1 * t47 * t125;
2481   t127 = t35 * t37;
2482   t128 = t38 * t19;
2483   t129 = t127 * t128;
2484   t132 = t26 * 0.3141592654e1;
2485   t133 = t16 * t13;
2486   t134 = t10 * t133;
2487   t137 = 0.3141592654e1 * ZB;
2488   t138 = t2 * t137;
2489   t139 = ZA * t8;
2490   t140 = t9 * t13;
2491   t145 = t30 * t18;
2492   t146 = t10 * t145;
2493   t149 = t3 * t8;
2494   t150 = t149 * t9;
2495   t153 = 0.2e1 * t5 * t22 + 0.2e1 * t28 * t10 * t31 + t36 * t40 - 0.2e1 * t46 * t48 * t49 - 0.2e1 * t55 * t56 * t57 - 0.2e1 * t62 * t64 + 0.16e2 * t70 * t29 * ZA * t10 - t76 * t80 + t82 * nz * t84 + 0.8e1 * t43 * t3 * t88 * t89 + 0.16e2 * t95 * t98 + 0.2e1 * t102 * t27 * t103 - 0.2e1 * t108 * t109 * t111 + t36 * t116 + 0.8e1 * t55 * t121 - 0.4e1 * t126 * t129 - 0.4e1 * t132 * t134 - 0.4e1 * t138 * t139 * t140 * t20 + 0.8e1 * t28 * t146 - 0.2e1 * t150 * t64;
2496   t154 = t42 * nz;
2497   t155 = nx * t154;
2498   t156 = t44 * xc;
2499   t157 = t47 * 0.3141592654e1;
2500   t158 = t156 * t157;
2501   t159 = t155 * t158;
2502   t162 = t56 * ZA * t19 * t12;
2503   t165 = t77 * t49;
2504   t167 = t1 * t3;
2505   t168 = t167 * t89;
2506   t169 = t127 * t49;
2507   t172 = t37 * t67;
2508   t173 = t75 * t172;
2509   t174 = t38 * t110;
2510   t175 = t27 * t174;
2511   t179 = t47 * t25;
2512   t181 = t10 * t97;
2513   t184 = t27 * t31;
2514   t187 = t67 * t47;
2515   t188 = t44 * t3;
2516   t189 = t187 * t188;
2517   t192 = t25 * t35;
2518   t193 = t37 * t17;
2519   t194 = t193 * t12;
2520   t196 = nx * ZA;
2521   t197 = t196 * t172;
2522   t198 = ZB * t38;
2523   t199 = t198 * t19;
2524   t204 = t1 * t12 * t110;
2525   t207 = nx * ZB;
2526   t209 = t1 * ZA;
2527   t215 = t67 * t3;
2528   t216 = t47 * t8;
2529   t217 = t215 * t216;
2530   t218 = t9 * xc;
2531   t222 = nx * t67;
2532   t223 = t222 * t27;
2533   t224 = t3 * t87;
2534   t228 = t167 * t107;
2535   t232 = t26 * t96;
2536   t235 = t207 * t94;
2537   t236 = t47 * ZA;
2538   t243 = xc * t13;
2539   t244 = t243 * t29;
2540   t248 = t25 * nz;
2541   t249 = t248 * 0.3141592654e1;
2542   t253 = ZB * ZA;
2543   t254 = t253 * t8;
2544   t255 = t9 * nz;
2545   t256 = t30 * t16;
2546   t260 = 0.2e1 * t207 * t37 * t209 * t128 + 0.2e1 * t5 * t134 - 0.16e2 * t217 * t218 * t97 - 0.2e1 * t223 * t224 * t31 - 0.2e1 * t228 * t109 * t174 - 0.2e1 * t232 * t169 - 0.16e2 * t235 * t236 * t44 * t30 * t18 - 0.4e1 * t196 * t101 * t137 * t244 + t249 * t169 + 0.8e1 * t168 * t129 + 0.4e1 * t254 * t255 * t256;
2547   t263 = t43 * t179;
2548   t267 = t3 * nz;
2549   t268 = t267 * t54;
2550   t269 = t118 * t57;
2551   t272 = t39 * t1;
2552   t274 = t67 * t25;
2553   t275 = t274 * t158;
2554   t278 = t75 * t87;
2555   t279 = t77 * t103;
2556   t282 = t25 * t38;
2557   t285 = ZA * t38;
2558   t290 = t267 * 0.3141592654e1;
2559   t296 = t77 * t111;
2560   t298 = t196 * t37;
2561   t299 = t1 * ZB;
2562   t303 = t37 * t42;
2563   t304 = t196 * t303;
2564   t308 = t77 * t57;
2565   t310 = t26 * t89;
2566   t313 = t77 * t128;
2567   t316 = t101 * t27;
2568   t319 = t93 * t87;
2569   t320 = t77 * t97;
2570   t323 = t127 * t57;
2571   t326 = t10 * nz;
2572   t329 = t118 * t174;
2573   t332 = -0.8e1 * t263 * t109 * t57 - 0.4e1 * t268 * t269 + t93 * t272 + 0.8e1 * t275 * t129 - 0.4e1 * t278 * t279 + t282 * nz * t84 - 0.2e1 * t285 * nz * t54 * t56 - t290 * t169 - 0.2e1 * t196 * t38 * t172 * t137 + t76 * t296 - 0.2e1 * t298 * t299 * t79 + 0.8e1 * t304 * t96 * t120 + t76 * t308 - 0.2e1 * t310 * t169 - t76 * t313 + 0.2e1 * t75 * t18 * t316 + 0.4e1 * t319 * t320 + t249 * t323 - 0.2e1 * t25 * t18 * t326 + 0.2e1 * t228 * t329;
2574   t335 = t75 * t101;
2575   t336 = t27 * t21;
2576   t342 = t77 * t133;
2577   t347 = t209 * t137;
2578   t350 = t9 * t1;
2579   t351 = t149 * t350;
2580   t355 = t37 * t78 * t12;
2581   t359 = t93 * t303;
2582   t367 = t172 * 0.3141592654e1;
2583   t369 = t96 * t103;
2584   t376 = t209 * t107;
2585   t379 = t10 * t103;
2586   t383 = t207 * t101;
2587   t389 = 0.3141592654e1 * ZA;
2588   t390 = t222 * t389;
2589   t391 = t87 * ZB;
2590   t398 = -0.2e1 * t102 * t336 + t93 * t38 * t367 + 0.16e2 * t95 * t369 - t82 * t127 - 0.8e1 * t197 * t27 * t120 + 0.8e1 * t376 * t121 - 0.8e1 * t189 * t379 - t249 * t129 - 0.4e1 * t383 * t27 * ZA * t16 * t13 - 0.8e1 * t390 * t391 * t21 - 0.2e1 * t197 * t137 * t57;
2591   t402 = t39 * t110;
2592   t404 = t193 * t38;
2593   t406 = t127 * t174;
2594   t408 = t167 * 0.3141592654e1;
2595   t411 = t44 * t157;
2596   t412 = t155 * t411;
2597   t413 = t285 * t19;
2598   t414 = t56 * t413;
2599   t417 = ZA * t30;
2600   t424 = t93 * t37;
2601   t426 = t248 * t54;
2602   t427 = t17 * t12;
2603   t428 = t118 * t427;
2604   t431 = t77 * t21;
2605   t438 = ZA * t13;
2606   t443 = t93 * t172;
2607   t444 = t27 * t427;
2608   t448 = t1 * t78 * t12;
2609   t455 = t274 * t89;
2610   t461 = t118 * t111;
2611   t464 = -t36 * t402 + t36 * t404 - t249 * t406 - 0.4e1 * t408 * t134 + 0.16e2 * t412 * t414 - 0.4e1 * t383 * t27 * t417 * t18 + 0.2e1 * t28 * t22 - t424 * t80 - 0.2e1 * t426 * t428 + 0.4e1 * t278 * t431 + 0.4e1 * t254 * t255 * t103 + t290 * t323 + 0.4e1 * t383 * t27 * t438 * t20 + 0.2e1 * t443 * t444 + t424 * t448 - t36 * t194 - 0.32e2 * t235 * t236 * t243 * t18 + 0.8e1 * t455 * t181 - 0.4e1 * t359 * t96 * t128 - 0.2e1 * t426 * t461;
2612   t469 = nz * t16 * t13;
2613   t474 = t1 * t38;
2614   t475 = t474 * t19;
2615   t480 = t89 * t103;
2616   t483 = t67 * ZA;
2617   t484 = t483 * t411;
2618   t485 = t127 * t120;
2619   t488 = t127 * t111;
2620   t497 = t77 * t427;
2621   t502 = t27 * t97;
2622   t508 = t1 * t19 * t12;
2623   t511 = t155 * t25 * t156;
2624   t512 = t157 * t37;
2625   t513 = t512 * t128;
2626   t527 = t1 * t17;
2627   t528 = t527 * t38;
2628   t530 = -t76 * t497 - 0.4e1 * t254 * t255 * t97 - 0.2e1 * t102 * t502 - 0.4e1 * t108 * t269 - t76 * t508 + 0.8e1 * t511 * t513 + 0.4e1 * t150 * t63 * t18 + 0.4e1 * t383 * t27 * t438 * t18 + 0.4e1 * t132 * t379 + 0.2e1 * t168 * t488 - t76 * t528;
2629   t535 = t44 * t13;
2630   t542 = t527 * t12;
2631   t544 = nz * t13;
2632   t545 = t544 * t20;
2633   t548 = t75 * t303;
2634   t549 = t96 * t111;
2635   t552 = ZA * t35;
2636   t553 = t552 * t37;
2637   t562 = t43 * t96;
2638   t563 = t3 * t37;
2639   t564 = t563 * t128;
2640   t579 = t474 * t110;
2641   t590 = t9 * t30;
2642   t591 = t590 * t18;
2643   t595 = t127 * t427;
2644   t598 = t77 * t174;
2645   t600 = 0.4e1 * t5 * t146 + 0.16e2 * t235 * t236 * t535 * t18 + 0.8e1 * t455 * t146 + t76 * t542 - 0.2e1 * t150 * t545 + 0.2e1 * t548 * t549 - 0.2e1 * t553 * t120 + t290 * t488 - 0.8e1 * t274 * t47 * t44 * t29 * t10 - 0.4e1 * t562 * t564 - 0.2e1 * t132 * xc * t20 * t10 - 0.32e2 * t562 * ZA * t87 * ZB * t13 * t29 - 0.8e1 * t347 * t379 + t76 * t579 - 0.4e1 * t359 * t96 * t57 + 0.4e1 * t408 * t181 - 0.4e1 * t223 * t564 - 0.12e2 * t209 * t27 * ZB * t8 * t591 + 0.2e1 * t310 * t595 + t76 * t598;
2646   t601 = t27 * t49;
2647   t604 = t127 * t79;
2648   t606 = ZB * t29;
2649   t616 = t139 * t140 * t18;
2650   t638 = t10 * t256;
2651   t643 = t118 * t199;
2652   t653 = t544 * t29;
2653   t658 = t3 * t29;
2654   t660 = t350 * t27;
2655   t663 = -0.4e1 * t254 * t255 * t145 + 0.2e1 * t267 * t20 * t8 * t9 - 0.4e1 * t138 * t139 * t9 * t16 * t13 - 0.2e1 * t5 * t638 + 0.2e1 * t126 * t169 + 0.8e1 * t376 * t643 + 0.4e1 * t335 * t27 * t145 + 0.16e2 * t235 * t236 * t535 * t29 + 0.6e1 * t150 * t653 - 0.4e1 * t426 * t269 + 0.4e1 * t658 * t8 * t660;
2656   t670 = t274 * t411;
2657   t673 = t118 * t49;
2658   t694 = t155 * t45;
2659   t713 = nz * t29 * t30;
2660   t717 = t20 * t87;
2661   t723 = t512 * t57;
2662   t728 = -0.2e1 * t443 * t175 - 0.8e1 * t670 * t129 + 0.2e1 * t426 * t673 - 0.16e2 * t207 * t88 * t42 * t47 * ZA * t44 + 0.4e1 * t254 * t255 * t21 + t249 * t595 + 0.8e1 * t25 * t29 * t8 * t660 + 0.2e1 * t268 * t461 + 0.8e1 * t189 * t181 - 0.8e1 * t694 * t513 + 0.2e1 * t198 * t553 - 0.12e2 * t606 * t139 * t660 - 0.2e1 * t359 * t549 + 0.4e1 * t138 * t139 * t590 * t16 + 0.8e1 * t93 * t29 * t94 * t89 - 0.2e1 * t150 * t713 + 0.2e1 * t222 * t3 * t717 * t27 + 0.8e1 * t670 * t323 + 0.8e1 * t694 * t723 - 0.2e1 * t62 * t653;
2663   t734 = t43 * t89;
2664   t735 = t563 * t427;
2665   t740 = t75 * t94;
2666   t744 = ZB * xc;
2667   t750 = t563 * t57;
2668   t754 = t218 * t103;
2669   t771 = t127 * t199;
2670   t776 = t89 * t174;
2671   t791 = -0.4e1 * t207 * t717 * t77 * xc * ZA + 0.4e1 * t443 * t27 * t57 + t192 * t40 - 0.8e1 * t55 * t643 - 0.16e2 * t209 * t89 * t771 - 0.8e1 * t275 * t323 + 0.2e1 * t359 * t776 + 0.16e2 * t304 * t89 * t199 + 0.4e1 * t278 * t320 + 0.2e1 * t207 * t172 * t389 * t79 - 0.8e1 * t390 * t391 * t97;
2672   t794 = t483 * t158;
2673   t801 = t2 * 0.3141592654e1;
2674   t818 = t215 * t411;
2675   t827 = t96 * t174;
2676   t837 = t37 * t12 * t110;
2677   t845 = 0.16e2 * t794 * t485 + 0.8e1 * t159 * t564 - 0.8e1 * t455 * t379 - 0.2e1 * t801 * t3 * t20 * t10 - 0.4e1 * t132 * t22 - 0.8e1 * t734 * t564 - 0.8e1 * t187 * t44 * t658 * t10 - 0.8e1 * t412 * t564 + 0.4e1 * t132 * t181 - 0.8e1 * t818 * t129 + 0.2e1 * t46 * t48 * t427 - 0.4e1 * t75 * t29 * t316 - 0.2e1 * t359 * t827 - t290 * t595 + 0.16e2 * t217 * t754 - t424 * t542 - 0.8e1 * t734 * t750 - t192 * t837 - 0.4e1 * t254 * t255 * t133 + 0.8e1 * t304 * t96 * t199;
2678   t864 = t544 * t18;
2679   t867 = t3 * t18;
2680   t884 = t27 * t256;
2681   t891 = t187 * t744;
2682   t894 = t563 * t49;
2683   t900 = -0.2e1 * t263 * t428 + 0.2e1 * t228 * t428 - 0.6e1 * t223 * t224 * t103 - t192 * t404 + 0.2e1 * t268 * t428 - 0.2e1 * t335 * t884 - t424 * t296 + 0.2e1 * t93 * t20 * t316 - 0.32e2 * t891 * t616 + 0.2e1 * t562 * t894 - 0.2e1 * t801 * t867 * t10;
2684   t904 = t27 * t111;
2685   t907 = t118 * t128;
2686   t915 = t89 * t145;
2687   t947 = t139 * t140 * t29;
2688   t952 = -0.2e1 * t173 * t904 + 0.4e1 * t426 * t907 + 0.12e2 * t253 * t10 * t1 * 0.3141592654e1 * t244 + 0.8e1 * t95 * t915 - t36 * t355 - 0.16e2 * t794 * t771 - 0.8e1 * t511 * t723 + 0.16e2 * t734 * t162 + t36 * t837 + 0.2e1 * t298 * t299 * t57 - 0.2e1 * t28 * t638 - 0.2e1 * t62 * t545 + 0.2e1 * t310 * t406 + 0.12e2 * t138 * t616 + 0.4e1 * t223 * t750 + t424 * t497 + 0.2e1 * t734 * t894 + 0.2e1 * t132 * xc * t18 * t10 - 0.16e2 * t70 * t947 + 0.32e2 * t891 * t947;
2689   t969 = t67 * t157 * t156 * t3;
2690   t974 = t27 * t133;
2691   t1001 = -0.8e1 * t159 * t750 - 0.16e2 * t412 * t162 - t290 * t129 + 0.8e1 * t310 * t323 - 0.4e1 * t319 * t342 + t75 * t272 + t192 * t402 - 0.8e1 * t359 * t89 * t128 - 0.10e2 * t61 * t350 * t502 + 0.8e1 * t818 * t323 - 0.4e1 * t108 * t907;
2692   t1042 = t89 * t97;
2693   t1055 = -0.2e1 * t168 * t595 + 0.16e2 * t484 * t771 + 0.4e1 * t11 * t125 * t129 - 0.2e1 * t173 * t444 + 0.2e1 * ZB * nz * t54 * t37 * ZA * t79 - t424 * t475 + 0.2e1 * t562 * t735 - 0.2e1 * t548 * t776 + t424 * t204 + 0.2e1 * t25 * t20 * t326 + 0.8e1 * t383 * t389 * t133 + t75 * t38 * t367 + 0.2e1 * t62 * t469 + 0.2e1 * t197 * t137 * t128 - 0.2e1 * t102 * t884 - 0.2e1 * t5 * t379 - 0.8e1 * t740 * t1042 - 0.16e2 * t159 * t414 - 0.2e1 * ZB * t35 * t37 * t413 + 0.2e1 * t553 * ZB * t78 * t12;
2694   t1096 = 0.2e1 * t443 * t904 - 0.2e1 * t268 * t329 - 0.2e1 * t443 * t601 + 0.2e1 * t102 * t974 - 0.2e1 * t263 * t673 + t424 * t165 + 0.2e1 * t62 * t713 + t424 * t308 - t424 * t313 + 0.8e1 * t347 * t22 - t424 * t598;
2695   t1103 = t42 * t1 * t157;
2696   t1104 = t1103 * t25;
2697   t1108 = t3 * t19;
2698   t1112 = nz * t47;
2699   t1113 = t9 * t9;
2700   t1118 = t42 * t157;
2701   t1119 = t1118 * t9;
2702   t1120 = t25 * xc;
2703   t1121 = t13 * t110;
2704   t1122 = t1120 * t1121;
2705   t1125 = t47 * t47;
2706   t1126 = t67 * t1125;
2707   t1127 = t1113 * ZA;
2708   t1128 = t1126 * t1127;
2709   t1129 = t19 * t13;
2710   t1130 = t744 * t1129;
2711   t1133 = t154 * t1125;
2712   t1134 = t1133 * t9;
2713   t1135 = t45 * t1129;
2714   t1138 = t154 * t47;
2715   t1139 = t25 * t30;
2716   t1142 = t1126 * t1113;
2717   t1145 = t125 * t1129;
2718   t1148 = t1103 * xc;
2719   t1149 = t3 * t13;
2720   t1150 = t1149 * t17;
2721   t1153 = t25 * t78;
2722   t1156 = -0.8e1 * t1104 * t243 * t17 + 0.4e1 * t187 * t1108 * t9 - 0.2e1 * t1112 * t3 * t1113 * t30 + 0.16e2 * t1119 * t1122 + 0.64e2 * t1128 * t1130 + 0.64e2 * t1134 * t1135 - 0.2e1 * t1138 * t1139 + 0.32e2 * t1142 * t1135 - 0.32e2 * t1142 * t1145 + 0.8e1 * t1148 * t1150 - 0.2e1 * t1138 * t1153;
2723   t1157 = t25 * t13;
2724   t1158 = t1157 * t17;
2725   t1161 = t13 * t17;
2726   t1162 = t1120 * t1161;
2727   t1165 = t3 * t78;
2728   t1170 = t42 * t67 * t1125;
2729   t1172 = t1108 * t13;
2730   t1175 = t1 * t157;
2731   t1176 = t1175 * t1113;
2732   t1182 = t1120 * t1129;
2733   t1189 = t110 * t9 * xc;
2734   t1192 = t1149 * t110;
2735   t1201 = 0.8e1 * t1103 * t1158 - 0.16e2 * t1119 * t1162 - 0.2e1 * t1112 * t1165 * t1113 + 0.32e2 * t1170 * t44 * t1172 - 0.8e1 * t1176 * t1162 + 0.8e1 * t1104 * t243 * t110 - 0.64e2 * t1134 * t1182 - 0.64e2 * t1134 * t1145 + 0.16e2 * t1118 * t3 * t1189 + 0.16e2 * t1119 * t1192 - 0.4e1 * t187 * t1165 * t9 - 0.4e1 * t187 * t1139 * t9;
2736   t1209 = t17 * t30;
2737   t1210 = t125 * t1209;
2738   t1213 = t1138 * ZA;
2739   t1214 = ZB * t30;
2740   t1218 = t1157 * t110;
2741   t1226 = t3 * t30;
2742   t1237 = t1170 * t25;
2743   t1242 = 0.4e1 * t1112 * ZA * t119 * t1113 - 0.16e2 * t1119 * t1150 - 0.8e1 * t1176 * t1210 + 0.4e1 * t1213 * t1214 * t19 - 0.16e2 * t1119 * t1218 - 0.32e2 * t1142 * t1182 - 0.8e1 * t1103 * t1120 * t110 - 0.4e1 * t187 * t1226 * t9 + 0.8e1 * t1103 * t1192 + 0.4e1 * t1112 * ZB * t1113 * t30 * ZA - 0.32e2 * t1237 * xc * t19 * t13;
2744   t1251 = t125 * t1121;
2745   t1260 = t1120 * t1209;
2746   t1263 = t1139 * t19;
2747   t1282 = 0.8e1 * t1103 * t110 * t3 * xc + 0.8e1 * t1104 * xc * t17 * t30 - 0.8e1 * t1176 * t1251 + 0.16e2 * t1119 * t1158 + 0.4e1 * t1112 * t78 * t1127 * ZB + 0.16e2 * t1119 * t1260 + 0.2e1 * t1138 * t1263 - 0.32e2 * t1170 * xc * t1172 - 0.16e2 * t1213 * t119 * t13 + 0.4e1 * t1138 * t1214 * ZA + 0.32e2 * t1237 * t44 * t19 * t13 - 0.16e2 * t1118 * t25 * t1189;
2748   t1287 = t188 * t1129;
2749   t1292 = t25 * t19;
2750   t1296 = t187 * t9;
2751   t1297 = t1226 * t19;
2752   t1311 = t1112 * t1113;
2753   t1317 = -0.8e1 * t1176 * t1150 + 0.32e2 * t1142 * t1287 - 0.8e1 * t1103 * t1150 + 0.2e1 * t1112 * t1292 * t1113 + 0.4e1 * t1296 * t1297 + 0.8e1 * t1176 * t1192 + 0.4e1 * t1296 * t1263 + 0.8e1 * t1176 * t1158 - 0.8e1 * t1175 * t25 * t1113 * xc * t110 + 0.2e1 * t1311 * t1297 + 0.2e1 * t1112 * t1108 * t1113;
2754   t1320 = t253 * t1129;
2755   t1328 = t253 * t30 * t19;
2756   t1333 = t125 * t1161;
2757   t1343 = ZB * t44 * t1129;
2758   t1350 = -0.8e1 * t1176 * t1218 - 0.16e2 * t1311 * t1320 + 0.8e1 * t1176 * t1260 - 0.16e2 * t1119 * t1210 + 0.4e1 * t1311 * t1328 + 0.2e1 * t1311 * t1263 + 0.8e1 * t1176 * t1333 + 0.8e1 * t187 * ZB * t417 * t9 - 0.2e1 * t1138 * t1165 - 0.64e2 * t1128 * t1343 + 0.64e2 * t1134 * t1287 + 0.2e1 * t1138 * t1108;
2759   t1369 = t1133 * t9 * ZA;
2760   t1378 = t187 * ZA;
2761   t1383 = t1170 * ZA;
2762   t1388 = 0.2e1 * t1138 * t1297 - 0.8e1 * t1148 * t1192 + 0.2e1 * t1138 * t1292 - 0.16e2 * t1119 * t1251 + 0.8e1 * t1175 * xc * t110 * t1113 * t3 - 0.2e1 * t1112 * t1153 * t1113 + 0.128e3 * t1369 * t1130 + 0.16e2 * t1119 * t1333 + 0.4e1 * t1138 * t78 * ZA * ZB + 0.8e1 * t1378 * t78 * t9 * ZB - 0.64e2 * t1383 * t1343 + 0.64e2 * t1383 * t1130;
2763   t1420 = 0.4e1 * t1138 * t119 * ZA - 0.128e3 * t1369 * t1343 - 0.4e1 * t187 * t1153 * t9 - 0.2e1 * t1138 * t1226 + 0.8e1 * t1296 * t1328 - 0.2e1 * t1112 * t1139 * t1113 - 0.8e1 * t1148 * t3 * t17 * t30 - 0.32e2 * t1296 * t1320 + 0.8e1 * t1176 * t1122 + 0.4e1 * t187 * t1292 * t9 + 0.8e1 * t1378 * t119 * t9 - 0.8e1 * t1103 * t1218;
2764 
2765   _PC4B = (-t424 * t508 + 0.8e1 * t412 * t750 - 0.2e1 * t232 * t595 - 0.4e1 * t126 * t323 + t1096 - t76 * t204 + t728 + 0.2e1 * t548 * t827 + 0.2e1 * t150 * t469 + t398 + 0.8e1 * t189 * t146 + t260 - 0.2e1 * t351 * t184 - 0.2e1 * t268 * t673 - 0.4e1 * t319 * t279 + t464 - 0.2e1 * t108 * t461 + 0.16e2 * t740 * t369 + 0.16e2 * t274 * t216 * t754 - 0.16e2 * t70 * t139 * t591 + 0.2e1 * t55 * t56 * t128 - 0.2e1 * t359 * t89 * t111 + 0.2e1 * t734 * t563 * t111 + 0.6e1 * t223 * t224 * t97 + 0.8e1 * t383 * t389 * t103 + 0.4e1 * t606 * ZA * t326 - 0.2e1 * t93 * t18 * t316 - 0.4e1 * t443 * t27 * t128 + 0.8e1 * t197 * t27 * t199 + 0.8e1 * t108 * t109 * t128 - t249 * t604 + 0.16e2 * t70 * t616 - 0.8e1 * t969 * t323 + t845 - t424 * t579 + 0.16e2 * t159 * t162 + t290 * t406 - 0.6e1 * t150 * t864 + t192 * t116 + 0.2e1 * t867 * t326 - 0.4e1 * t658 * t326 - 0.2e1 * t351 * t502 - t76 * t165 + t900 + 0.8e1 * t168 * t323 + t791 + 0.8e1 * t740 * t915 - 0.4e1 * t562 * t750 - 0.4e1 * t278 * t342 + 0.4e1 * t319 * t431 + 0.2e1 * t173 * t175 + t424 * t528 + 0.8e1 * t969 * t129 - 0.8e1 * t347 * t181 + t332 + t530 - 0.2e1 * t108 * t329 - 0.2e1 * t207 * t38 * t37 * t1 * ZA + t1001 + 0.4e1 * t408 * t379 + t76 * t448 + 0.2e1 * t102 * t184 + 0.2e1 * t426 * t329 + 0.16e2 * t740 * t98 - t282 * t127 - 0.16e2 * t1 * t44 * t69 * t552 * t116 + 0.2e1 * t168 * t169 + 0.2e1 * t28 * t134 - t290 * t604 - 0.16e2 * t484 * t485 - 0.8e1 * t740 * t480 + 0.2e1 * t173 * t601 - 0.2e1 * t335 * t336 + t600 + 0.2e1 * t62 * t864 + t952 + 0.8e1 * t347 * t134 - t192 * t355 + t192 * t194 + 0.2e1 * t228 * t461 + t663 + 0.4e1 * t383 * t27 * t417 * t16 + 0.4e1 * t138 * t20 * ZA * t10 - 0.4e1 * t20 * ZB * ZA * t326 + 0.4e1 * t196 * t88 * t77 * t744 - 0.16e2 * t67 * xc * t179 * t181 - 0.8e1 * t95 * t480 - t249 * t488 - t76 * t475 + t1055 - 0.4e1 * t408 * t22 - 0.10e2 * t28 * t379 + 0.2e1 * t335 * t974 + t153 - 0.8e1 * t95 * t1042 - 0.2e1 * t734 * t735) / (t1156 + t1201 + t1242 + t1282 + t1317 + t1350 + t1388 + t1420);
2766   /****************************************************************************************/
2767   /****************************************************************************************/
2768 
2769   if (x>xc) {
2770     _PC1=_PC1B; _PC2=_PC2B; _PC3=_PC3B; _PC4=_PC4B; Z=ZB;
2771   }
2772   else {
2773     _PC1=_PC1A; _PC2=_PC2A; _PC3=_PC3A; _PC4=_PC4A; Z=ZA;
2774   }
2775   /****************************************************************************************/
2776   /****************************************************************************************/
2777   t1 = nz * nz;
2778   t2 = t1 * t1;
2779   t3 = t2 * nz;
2780   t4 = x * t3;
2781   t5 = 0.3141592654e1 * 0.3141592654e1;
2782   t6 = t5 * 0.3141592654e1;
2783   t11 = _PC3 * t6;
2784   t12 = x * nz;
2785   t13 = nx * nx;
2786   t14 = t13 * t13;
2787   t15 = t12 * t14;
2788   t19 = PetscExpReal(t12 * 0.3141592654e1);
2789   t20 = t19 * t19;
2790   t21 = t4 * t20;
2791   t24 = _PC1 * t5;
2792   t25 = Z * t20;
2793   t29 = _PC1 * t6;
2794   t30 = t29 * Z;
2795   t31 = t1 * nz;
2796   t32 = x * t31;
2797   t33 = t32 * t13;
2798   t36 = t11 * x;
2799   t41 = nz * t20;
2800   t45 = t6 * _PC4;
2801   t49 = t20 * t1;
2802   t51 = _PC2 * Z;
2803   t55 = -0.2e1 * t4 * t6 * _PC2 * Z - 0.2e1 * t11 * t15 - 0.2e1 * t11 * t21 + 0.2e1 * t24 * t25 * t14 - t13 + 0.4e1 * t30 * t33 - 0.4e1 * t36 * t31 * t20 * t13 - 0.2e1 * t36 * t41 * t14 - 0.2e1 * t4 * t45 * t20 - t49 - 0.2e1 * t4 * t6 * t51 * t20;
2804   t58 = t32 * t6;
2805   t59 = _PC4 * t20;
2806   t63 = t20 * t13;
2807   t67 = t12 * t6;
2808   t68 = t20 * t14;
2809   t87 = t49 * t13;
2810   t90 = -0.4e1 * t11 * t33 - 0.4e1 * t58 * t59 * t13 - 0.4e1 * t58 * t51 * t63 - 0.2e1 * t67 * t51 * t68 + 0.4e1 * t32 * t45 * t13 - 0.2e1 * t67 * t59 * t14 - 0.2e1 * t30 * t21 + t1 + 0.2e1 * t24 * t25 * t2 + 0.2e1 * t12 * t45 * t14 + 0.4e1 * t24 * Z * t87;
2811   t106 = _PC3 * t5;
2812   t120 = -0.4e1 * t30 * t32 * t63 + t63 + 0.4e1 * t24 * Z * t1 * t13 + 0.2e1 * t29 * Z * x * t3 - 0.4e1 * t58 * t51 * t13 - 0.2e1 * t106 * t2 + t32 * 0.3141592654e1 - 0.2e1 * t106 * t14 - 0.2e1 * t30 * t12 * t68 - 0.2e1 * t67 * t51 * t14 + 0.4e1 * t106 * t87;
2813   t129 = PetscSinReal(nx * 0.3141592654e1 * x);
2814   t155 = 0.2e1 * t30 * t15 + x * 0.3141592654e1 * t41 * t13 - 0.4e1 * t19 * nx * t129 * nz + t32 * 0.3141592654e1 * t20 + 0.2e1 * t106 * t68 + 0.2e1 * t106 * t20 * t2 - 0.4e1 * t106 * t1 * t13 - 0.2e1 * t11 * t4 + 0.2e1 * t4 * t45 + 0.2e1 * t24 * Z * t2 + 0.2e1 * t24 * Z * t14 + t12 * 0.3141592654e1 * t13;
2815   t158 = t5 * Z;
2816 
2817   u1 = (t55 + t90 + t120 + t155) / (0.4e1 * t158 * t19 * t2 + 0.8e1 * t158 * t19 * t1 * t13 + 0.4e1 * t158 * t19 * t14);
2818   /****************************************************************************************/
2819   /****************************************************************************************/
2820   t1 = nz * nz;
2821   t2 = t1 * nz;
2822   t3 = x * t2;
2823   t4 = 0.3141592654e1 * 0.3141592654e1;
2824   t5 = t4 * 0.3141592654e1;
2825   t6 = t3 * t5;
2826   t7 = _PC2 * Z;
2827   t8 = nx * nx;
2828   t12 = t1 * t1;
2829   t13 = t12 * nz;
2830   t14 = x * t13;
2831   t15 = t5 * _PC4;
2832   t16 = x * nz;
2833   t18 = PetscExpReal(t16 * 0.3141592654e1);
2834   t19 = t18 * t18;
2835   t23 = t16 * t5;
2836   t24 = t8 * t8;
2837   t28 = _PC3 * t5;
2838   t29 = t14 * t19;
2839   t32 = _PC1 * t5;
2840   t33 = t32 * Z;
2841   t34 = t16 * t24;
2842   t37 = _PC4 * t19;
2843   t45 = _PC2 * t4;
2844   t53 = t19 * t8;
2845   t58 = _PC4 * t4;
2846   t60 = t1 * t19 * t8;
2847   t63 = t19 * t24;
2848   t67 = t3 * t8;
2849   t73 = nz * t19;
2850   t86 = t28 * x;
2851   t91 = 0.4e1 * t58 * t60 + 0.2e1 * t33 * t16 * t63 + 0.4e1 * t33 * t67 + 0.2e1 * t33 * t29 - x * 0.3141592654e1 * t73 * t8 - 0.2e1 * t53 + 0.2e1 * t32 * Z * x * t13 - 0.2e1 * t58 * t12 - 0.2e1 * t58 * t24 + t3 * 0.3141592654e1 + 0.4e1 * t86 * t2 * t19 * t8;
2852   t94 = Z * t12;
2853   t121 = -0.2e1 * t8 + 0.2e1 * t45 * t94 * t19 + 0.2e1 * t14 * t5 * t7 * t19 + 0.4e1 * t6 * t7 * t53 + 0.2e1 * t23 * t7 * t63 - 0.4e1 * t28 * t67 + 0.2e1 * t45 * t94 + 0.2e1 * t58 * t12 * t19 + t16 * 0.3141592654e1 * t8 + 0.2e1 * t14 * t15 - 0.2e1 * t28 * t14;
2854   t146 = PetscCosReal(nx * 0.3141592654e1 * x);
2855   t156 = -t3 * 0.3141592654e1 * t19 + 0.2e1 * t58 * t63 - 0.4e1 * t58 * t1 * t8 + 0.4e1 * t45 * Z * t1 * t8 - 0.2e1 * t28 * t34 + 0.2e1 * t86 * t73 * t24 + 0.4e1 * t3 * t15 * t8 + 0.4e1 * t45 * Z * t60 + 0.4e1 * t18 * t146 * t8 + 0.2e1 * t45 * Z * t24 + 0.2e1 * t16 * t15 * t24;
2856   t159 = t4 * Z;
2857 
2858   u2 = (-0.4e1 * t6 * t7 * t8 + 0.2e1 * t14 * t15 * t19 - 0.2e1 * t23 * t7 * t24 + 0.2e1 * t28 * t29 + 0.2e1 * t33 * t34 + 0.4e1 * t6 * t37 * t8 - 0.2e1 * t14 * t5 * _PC2 * Z + 0.2e1 * t45 * Z * t19 * t24 + 0.2e1 * t23 * t37 * t24 + 0.4e1 * t33 * t3 * t53 + t91 + t121 + t156) / (0.4e1 * t159 * t18 * t12 + 0.8e1 * t159 * t18 * t1 * t8 + 0.4e1 * t159 * t18 * t24);
2859   /****************************************************************************************/
2860   /****************************************************************************************/
2861   t1 = 0.3141592654e1 * 0.3141592654e1;
2862   t2 = t1 * 0.3141592654e1;
2863   t3 = _PC1 * t2;
2864   t4 = t3 * Z;
2865   t5 = nz * nz;
2866   t6 = t5 * t5;
2867   t7 = t6 * nz;
2868   t8 = x * t7;
2869   t9 = x * nz;
2870   t11 = PetscExpReal(t9 * 0.3141592654e1);
2871   t12 = t11 * t11;
2872   t13 = t8 * t12;
2873   t16 = t5 * nz;
2874   t17 = x * t16;
2875   t18 = t17 * t2;
2876   t19 = _PC4 * t12;
2877   t20 = nx * nx;
2878   t24 = t2 * _PC4;
2879   t28 = _PC3 * t2;
2880   t29 = t28 * x;
2881   t30 = t12 * nz;
2882   t31 = t20 * t20;
2883   t40 = _PC2 * Z;
2884   t44 = t9 * t2;
2885   t48 = t12 * t20;
2886   t52 = t17 * t20;
2887   t57 = -0.2e1 * t4 * t13 - 0.4e1 * t18 * t19 * t20 - 0.2e1 * t8 * t24 * t12 - 0.2e1 * t29 * t30 * t31 + 0.2e1 * t8 * t2 * _PC2 * Z - 0.2e1 * t8 * t2 * t40 * t12 - 0.2e1 * t44 * t19 * t31 - 0.4e1 * t18 * t40 * t48 + t20 + 0.4e1 * t28 * t52 + t17 * 0.3141592654e1 * t12;
2888   t58 = t9 * t31;
2889   t61 = _PC3 * t1;
2890   t62 = t12 * t31;
2891   t73 = t5 * t20;
2892   t78 = _PC1 * t1;
2893   t90 = Z * t12;
2894   t94 = 0.2e1 * t28 * t58 + 0.2e1 * t61 * t62 + 0.2e1 * t61 * t12 * t6 - 0.4e1 * t4 * t17 * t48 + 0.2e1 * t28 * t8 + 0.4e1 * t61 * t73 - 0.2e1 * t8 * t24 - 0.2e1 * t78 * Z * t6 - 0.2e1 * t44 * t40 * t62 - 0.2e1 * t78 * Z * t31 - t9 * 0.3141592654e1 * t20 + 0.2e1 * t78 * t90 * t6;
2895   t101 = PetscCosReal(nx * 0.3141592654e1 * x);
2896   t102 = t11 * t101;
2897   t109 = t12 * t5;
2898   t110 = t109 * t20;
2899   t128 = 0.2e1 * t61 * t6 - t17 * 0.3141592654e1 + 0.2e1 * t102 * t5 - 0.4e1 * t17 * t24 * t20 + 0.4e1 * t78 * Z * t110 - 0.2e1 * t9 * t24 * t31 - 0.4e1 * t4 * t52 - 0.2e1 * t4 * t9 * t62 + x * 0.3141592654e1 * t30 * t20 - t5 - 0.4e1 * t78 * Z * t5 * t20;
2900   t156 = 0.2e1 * t78 * t90 * t31 - 0.2e1 * t3 * Z * x * t7 + t48 + 0.4e1 * t61 * t110 + 0.4e1 * t18 * t40 * t20 - 0.2e1 * t102 * t20 + 0.2e1 * t61 * t31 + 0.2e1 * t44 * t40 * t31 - t109 - 0.2e1 * t4 * t58 - 0.2e1 * t28 * t13 - 0.4e1 * t29 * t16 * t12 * t20;
2901   t159 = t1 * t11;
2902 
2903   u3 = (t57 + t94 + t128 + t156) / (0.4e1 * t159 * t6 + 0.8e1 * t159 * t73 + 0.4e1 * t159 * t31);
2904   /****************************************************************************************/
2905   /****************************************************************************************/
2906   t1 = _PC2 * Z;
2907   t2 = 0.3141592654e1 * 0.3141592654e1;
2908   t3 = t2 * 0.3141592654e1;
2909   t4 = nz * nz;
2910   t5 = t4 * t4;
2911   t6 = t5 * t4;
2912   t8 = t3 * t6 * x;
2913   t11 = x * t4;
2914   t12 = t11 * t3;
2915   t15 = PetscExpReal(x * nz * 0.3141592654e1);
2916   t16 = t15 * t15;
2917   t17 = _PC3 * t16;
2918   t18 = nx * nx;
2919   t19 = t18 * t18;
2920   t23 = t5 * nz;
2921   t24 = t2 * t23;
2922   t28 = t1 * t3;
2923   t29 = t6 * x;
2924   t30 = t29 * t16;
2925   t33 = _PC4 * t3;
2926   t34 = t5 * x;
2927   t35 = t34 * t18;
2928   t41 = PetscSinReal(nx * 0.3141592654e1 * x);
2929   t47 = t11 * t19;
2930   t54 = t3 * _PC3;
2931   t57 = 0.2e1 * t1 * t8 + 0.2e1 * t12 * t17 * t19 + 0.2e1 * t1 * t24 * t16 + 0.2e1 * t28 * t30 - 0.4e1 * t33 * t35 + 0.2e1 * t15 * nx * t41 * t4 + 0.4e1 * t28 * t35 - 0.2e1 * t33 * t47 - 0.2e1 * t1 * t24 - 0.2e1 * t33 * t29 + 0.2e1 * t29 * t54;
2932   t58 = 0.3141592654e1 * t16;
2933   t60 = t2 * _PC4;
2934   t69 = t4 * nz;
2935   t73 = t1 * t2;
2936   t75 = t69 * t16 * t18;
2937   t79 = x * t16;
2938   t83 = nz * t16;
2939   t84 = t83 * t19;
2940   t95 = -t34 * t58 + 0.2e1 * t60 * t23 * t16 + 0.2e1 * t60 * nz * t19 - t11 * 0.3141592654e1 * t18 + 0.4e1 * t60 * t69 * t18 + 0.4e1 * t73 * t75 + 0.4e1 * t33 * t5 * t79 * t18 + 0.2e1 * t73 * t84 + 0.2e1 * t60 * t84 + 0.2e1 * t33 * t4 * t79 * t19 + 0.4e1 * t60 * t75;
2941   t97 = t34 * t3;
2942   t101 = Z * _PC1;
2943   t102 = t16 * t19;
2944   t106 = t16 * t18;
2945   t127 = t2 * t69;
2946   t131 = t2 * nz;
2947   t135 = 0.4e1 * t97 * t17 * t18 + 0.2e1 * t12 * t101 * t102 + 0.4e1 * t28 * t34 * t106 + 0.2e1 * t28 * t11 * t102 - 0.2e1 * t29 * t3 * Z * _PC1 - 0.4e1 * t97 * t101 * t18 - 0.2e1 * t12 * t101 * t19 + 0.2e1 * t60 * t23 - 0.2e1 * t83 * t18 - 0.4e1 * t1 * t127 * t18 - 0.2e1 * t1 * t131 * t19;
2948   t164 = 0.2e1 * t28 * t47 + 0.2e1 * t11 * t54 * t19 + 0.2e1 * t8 * t101 * t16 + 0.2e1 * t33 * t30 - t11 * t58 * t18 + 0.2e1 * t29 * t54 * t16 + 0.4e1 * t34 * t54 * t18 + 0.4e1 * t97 * t101 * t106 - 0.2e1 * t15 * t18 * nx * t41 - t34 * 0.3141592654e1 + 0.2e1 * nz * t18;
2949 
2950   u4 = (t57 + t95 + t135 + t164) / (0.4e1 * t24 * t15 + 0.8e1 * t127 * t15 * t18 + 0.4e1 * t131 * t15 * t19);
2951 
2952   /****************************************************************************************/
2953   /****************************************************************************************/
2954 
2955   u5 = (PetscReal)(-2*Z*nz*PETSC_PI*u2-u3*2*nz*PETSC_PI)*PetscCosReal(nz*PETSC_PI*z); /* pressure */
2956 
2957   u6 = (PetscReal)(u3*2*nz*PETSC_PI + 4*Z*nz*PETSC_PI*u2)*PetscCosReal(nz*PETSC_PI*z); /* zz stress */
2958   sum5 +=u5;
2959   sum6 +=u6;
2960 
2961   u1 *= PetscCosReal(nz*PETSC_PI*z); /* x velocity */
2962   sum1 += u1;
2963   u2 *= PetscSinReal(nz*PETSC_PI*z); /* z velocity */
2964   sum2 += u2;
2965   u3 *= 2*nz*PETSC_PI*PetscCosReal(nz*PETSC_PI*z); /* xx stress */
2966   sum3 += u3;
2967   u4 *= 2*nz*PETSC_PI*PetscSinReal(nz*PETSC_PI*z); /* zx stress */
2968   sum4 += u4;
2969 
2970   /* Output */
2971   if (mu) {
2972     *mu = Z;
2973   }
2974   if (vel) {
2975     vel[0] = sum1;
2976     vel[1] = sum2;
2977   }
2978   if (p) {
2979     (*p) = sum5;
2980   }
2981   if (s) {
2982     s[0] = sum3;
2983     s[1] = sum4;
2984     s[2] = sum6;
2985   }
2986   if (gamma) {
2987     /* sigma = tau - p, tau = sigma + p, tau[] = 2*eta*gamma[] */
2988     gamma[0] = (sum3+sum5)/(2.0*Z);
2989     gamma[1] = (sum4)/(2.0*Z);
2990     gamma[2] = (sum6+sum5)/(2.0*Z);
2991   }
2992   PetscFunctionReturn(0);
2993 }
2994 
2995 static PetscErrorCode SolCxSolutionVelocity(PetscInt dim, PetscReal time, const PetscReal x[], PetscInt Nf, PetscScalar v[], void *ctx)
2996 {
2997   Parameter     *s = (Parameter *) ctx;
2998   PetscErrorCode ierr;
2999 
3000   PetscFunctionBegin;
3001   ierr = SolCxSolution(x, s->m, s->n, s->xc, s->etaA, s->etaB, v, NULL, NULL, NULL, NULL);CHKERRQ(ierr);
3002   PetscFunctionReturn(0);
3003 }
3004 
3005 static PetscErrorCode SolCxSolutionPressure(PetscInt dim, PetscReal time, const PetscReal x[], PetscInt Nf, PetscScalar p[], void *ctx)
3006 {
3007   Parameter     *s = (Parameter *) ctx;
3008   PetscErrorCode ierr;
3009 
3010   PetscFunctionBegin;
3011   ierr = SolCxSolution(x, s->m, s->n, s->xc, s->etaA, s->etaB, NULL, p, NULL, NULL, NULL);CHKERRQ(ierr);
3012   PetscFunctionReturn(0);
3013 }
3014 
3015 static PetscErrorCode ProcessOptions(MPI_Comm comm, AppCtx *options)
3016 {
3017   PetscInt       sol;
3018   PetscErrorCode ierr;
3019 
3020   PetscFunctionBeginUser;
3021   options->solType = SOLKX;
3022 
3023   ierr = PetscOptionsBegin(comm, "", "Variable-Viscosity Stokes Problem Options", "DMPLEX");CHKERRQ(ierr);
3024   sol  = options->solType;
3025   ierr = PetscOptionsEList("-sol_type", "Type of exact solution", "ex69.c", solTypes, NUM_SOL_TYPES, solTypes[options->solType], &sol, NULL);CHKERRQ(ierr);
3026   options->solType = (SolutionType) sol;
3027   ierr = PetscOptionsEnd();CHKERRQ(ierr);
3028   PetscFunctionReturn(0);
3029 }
3030 
3031 static PetscErrorCode SetUpParameters(AppCtx *user)
3032 {
3033   PetscBag       bag;
3034   Parameter     *p;
3035   PetscErrorCode ierr;
3036 
3037   PetscFunctionBeginUser;
3038   /* setup PETSc parameter bag */
3039   ierr = PetscBagGetData(user->bag, (void **) &p);CHKERRQ(ierr);
3040   ierr = PetscBagSetName(user->bag, "par", "Problem parameters");CHKERRQ(ierr);
3041   bag  = user->bag;
3042   switch (user->solType) {
3043   case SOLKX:
3044     ierr = PetscBagRegisterInt(bag,  &p->n, 1,   "n", "x-wavelength for forcing variation");CHKERRQ(ierr);
3045     ierr = PetscBagRegisterInt(bag,  &p->m, 1,   "m", "z-wavelength for forcing variation");CHKERRQ(ierr);
3046     ierr = PetscBagRegisterReal(bag, &p->B, 1.0, "B", "Exponential scale for viscosity variation");CHKERRQ(ierr);
3047     break;
3048   case SOLCX:
3049     ierr = PetscBagRegisterInt(bag,  &p->n,    1,   "n",    "x-wavelength for forcing variation");CHKERRQ(ierr);
3050     ierr = PetscBagRegisterInt(bag,  &p->m,    1,   "m",    "z-wavelength for forcing variation");CHKERRQ(ierr);
3051     ierr = PetscBagRegisterReal(bag, &p->etaA, 1.0, "etaA", "Viscosity for x < xc");CHKERRQ(ierr);
3052     ierr = PetscBagRegisterReal(bag, &p->etaB, 1.0, "etaB", "Viscosity for x > xc");CHKERRQ(ierr);
3053     ierr = PetscBagRegisterReal(bag, &p->xc,   0.5, "xc",   "x-coordinate of the viscosity jump");CHKERRQ(ierr);
3054     break;
3055   default:
3056     SETERRQ2(PETSC_COMM_WORLD, PETSC_ERR_ARG_OUTOFRANGE, "Invalid solution type %d (%s)", (PetscInt) user->solType, solTypes[PetscMin(user->solType, NUM_SOL_TYPES)]);
3057   }
3058   ierr = PetscBagSetFromOptions(bag);CHKERRQ(ierr);
3059   ierr = PetscBagViewFromOptions(bag, NULL, "-param_view");CHKERRQ(ierr);
3060   PetscFunctionReturn(0);
3061 }
3062 
3063 /* Make split labels so that we can have corners in multiple labels */
3064 static PetscErrorCode CreateSplitLabels(DM dm)
3065 {
3066   const char    *names[4] = {"markerBottom", "markerRight", "markerTop", "markerLeft"};
3067   PetscInt       ids[4]   = {1, 2, 3, 4};
3068   DMLabel        label;
3069   IS             is;
3070   PetscInt       f;
3071   PetscErrorCode ierr;
3072 
3073   PetscFunctionBeginUser;
3074   for (f = 0; f < 4; ++f) {
3075     ierr = DMCreateLabel(dm, names[f]);CHKERRQ(ierr);
3076     ierr = DMGetStratumIS(dm, "marker", ids[f],  &is);CHKERRQ(ierr);
3077     if (!is) continue;
3078     ierr = DMGetLabel(dm, names[f], &label);CHKERRQ(ierr);
3079     ierr = DMLabelInsertIS(label, is, 1);CHKERRQ(ierr);
3080     ierr = ISDestroy(&is);CHKERRQ(ierr);
3081   }
3082   PetscFunctionReturn(0);
3083 }
3084 
3085 static PetscErrorCode CreateMesh(MPI_Comm comm, AppCtx *user, DM *dm)
3086 {
3087   DM             cdm;
3088   PetscErrorCode ierr;
3089 
3090   PetscFunctionBeginUser;
3091   ierr = DMCreate(comm, dm);CHKERRQ(ierr);
3092   ierr = DMSetType(*dm, DMPLEX);CHKERRQ(ierr);
3093   ierr = DMSetFromOptions(*dm);CHKERRQ(ierr);
3094   cdm  = *dm;
3095   while (cdm) {
3096     ierr = CreateSplitLabels(cdm);CHKERRQ(ierr);
3097     ierr = DMGetCoarseDM(cdm, &cdm);CHKERRQ(ierr);
3098   }
3099   ierr = DMViewFromOptions(*dm, NULL, "-dm_view");CHKERRQ(ierr);
3100   PetscFunctionReturn(0);
3101 }
3102 
3103 static PetscErrorCode SetupProblem(DM dm, AppCtx *user)
3104 {
3105   PetscErrorCode (*exactFunc)(PetscInt dim, PetscReal t, const PetscReal x[], PetscInt Nf, PetscScalar *u, void *ctx);
3106   PetscDS        prob;
3107   DMLabel        label;
3108   const PetscInt id  = 1;
3109   PetscInt       dim, comp;
3110   Parameter     *ctx;
3111   void          *data;
3112   PetscErrorCode ierr;
3113 
3114   PetscFunctionBeginUser;
3115   ierr = DMGetDimension(dm, &dim);CHKERRQ(ierr);
3116   ierr = DMGetDS(dm, &prob);CHKERRQ(ierr);
3117   switch (user->solType) {
3118   case SOLKX:
3119     ierr = PetscDSSetResidual(prob, 0, f0_u, stokes_momentum_kx);CHKERRQ(ierr);
3120     ierr = PetscDSSetResidual(prob, 1, stokes_mass, f1_zero);CHKERRQ(ierr);
3121     ierr = PetscDSSetJacobian(prob, 0, 0, NULL, NULL,  NULL,  stokes_momentum_vel_J_kx);CHKERRQ(ierr);
3122     ierr = PetscDSSetJacobian(prob, 0, 1, NULL, NULL,  stokes_momentum_pres_J, NULL);CHKERRQ(ierr);
3123     ierr = PetscDSSetJacobian(prob, 1, 0, NULL, stokes_mass_J, NULL,  NULL);CHKERRQ(ierr);
3124     ierr = PetscDSSetJacobianPreconditioner(prob, 0, 0, NULL, NULL, NULL, stokes_momentum_vel_J_kx);CHKERRQ(ierr);
3125     ierr = PetscDSSetJacobianPreconditioner(prob, 1, 1, stokes_identity_J_kx, NULL, NULL, NULL);CHKERRQ(ierr);
3126     break;
3127   case SOLCX:
3128     ierr = PetscDSSetResidual(prob, 0, f0_u, stokes_momentum_cx);CHKERRQ(ierr);
3129     ierr = PetscDSSetResidual(prob, 1, stokes_mass, f1_zero);CHKERRQ(ierr);
3130     ierr = PetscDSSetJacobian(prob, 0, 0, NULL, NULL,  NULL,  stokes_momentum_vel_J_cx);CHKERRQ(ierr);
3131     ierr = PetscDSSetJacobian(prob, 0, 1, NULL, NULL,  stokes_momentum_pres_J, NULL);CHKERRQ(ierr);
3132     ierr = PetscDSSetJacobian(prob, 1, 0, NULL, stokes_mass_J, NULL,  NULL);CHKERRQ(ierr);
3133     ierr = PetscDSSetJacobianPreconditioner(prob, 0, 0, NULL, NULL, NULL, stokes_momentum_vel_J_kx);CHKERRQ(ierr);
3134     ierr = PetscDSSetJacobianPreconditioner(prob, 1, 1, stokes_identity_J_cx, NULL, NULL, NULL);CHKERRQ(ierr);
3135     break;
3136   default:
3137     SETERRQ2(PETSC_COMM_WORLD, PETSC_ERR_ARG_OUTOFRANGE, "Invalid solution type %d (%s)", (PetscInt) user->solType, solTypes[PetscMin(user->solType, NUM_SOL_TYPES)]);
3138   }
3139   ierr = PetscBagGetData(user->bag, &data);CHKERRQ(ierr);
3140   switch (dim) {
3141   case 2:
3142     switch (user->solType) {
3143     case SOLKX:
3144       ierr = PetscDSSetExactSolution(prob, 0, SolKxSolutionVelocity, data);CHKERRQ(ierr);
3145       ierr = PetscDSSetExactSolution(prob, 1, SolKxSolutionPressure, data);CHKERRQ(ierr);
3146       break;
3147     case SOLCX:
3148       ierr = PetscDSSetExactSolution(prob, 0, SolCxSolutionVelocity, data);CHKERRQ(ierr);
3149       ierr = PetscDSSetExactSolution(prob, 1, SolCxSolutionPressure, data);CHKERRQ(ierr);
3150       break;
3151     default:
3152       SETERRQ2(PETSC_COMM_WORLD, PETSC_ERR_ARG_OUTOFRANGE, "Invalid solution type %d (%s)", (PetscInt) user->solType, solTypes[PetscMin(user->solType, NUM_SOL_TYPES)]);
3153     }
3154     break;
3155   default:
3156     SETERRQ1(PETSC_COMM_WORLD, PETSC_ERR_ARG_OUTOFRANGE, "Invalid dimension %D", dim);
3157   }
3158   /* Setup constants */
3159   {
3160     Parameter *param;
3161 
3162     ierr = PetscBagGetData(user->bag, (void **) &param);CHKERRQ(ierr);
3163     switch (user->solType) {
3164     case SOLKX:
3165     {
3166       PetscScalar constants[3];
3167 
3168       constants[0] = param->m;
3169       constants[1] = param->n;
3170       constants[2] = param->B;
3171       ierr = PetscDSSetConstants(prob, 3, constants);CHKERRQ(ierr);
3172     }
3173     break;
3174     case SOLCX:
3175     {
3176       PetscScalar constants[5];
3177 
3178       constants[0] = param->m;
3179       constants[1] = param->n;
3180       constants[2] = param->etaA;
3181       constants[3] = param->etaB;
3182       constants[4] = param->xc;
3183       ierr = PetscDSSetConstants(prob, 5, constants);CHKERRQ(ierr);
3184     }
3185     break;
3186     default: SETERRQ1(PETSC_COMM_WORLD, PETSC_ERR_SUP, "No parameter information for solution type %d", user->solType);
3187     }
3188   }
3189   /* Setup Boundary Conditions */
3190   ierr = PetscDSGetExactSolution(prob, 0, &exactFunc, (void **) &ctx);CHKERRQ(ierr);
3191   comp = 1;
3192   ierr = DMGetLabel(dm, "markerBottom", &label);CHKERRQ(ierr);
3193   ierr = DMAddBoundary(dm, DM_BC_ESSENTIAL, "wallB", label, 1, &id, 0, 1, &comp, (void (*)(void)) exactFunc, NULL, ctx, NULL);CHKERRQ(ierr);
3194   comp = 0;
3195   ierr = DMGetLabel(dm, "markerRight", &label);CHKERRQ(ierr);
3196   ierr = DMAddBoundary(dm, DM_BC_ESSENTIAL, "wallR", label, 1, &id, 0, 1, &comp, (void (*)(void)) exactFunc, NULL, ctx, NULL);CHKERRQ(ierr);
3197   comp = 1;
3198   ierr = DMGetLabel(dm, "markerTop", &label);CHKERRQ(ierr);
3199   ierr = DMAddBoundary(dm, DM_BC_ESSENTIAL, "wallT", label, 1, &id, 0, 1, &comp, (void (*)(void)) exactFunc, NULL, ctx, NULL);CHKERRQ(ierr);
3200   comp = 0;
3201   ierr = DMGetLabel(dm, "markerLeft", &label);CHKERRQ(ierr);
3202   ierr = DMAddBoundary(dm, DM_BC_ESSENTIAL, "wallL", label, 1, &id, 0, 1, &comp, (void (*)(void)) exactFunc, NULL, ctx, NULL);CHKERRQ(ierr);
3203   PetscFunctionReturn(0);
3204 }
3205 
3206 static PetscErrorCode CreatePressureNullSpace(DM dm, PetscInt origField, PetscInt field, MatNullSpace *nullspace)
3207 {
3208   Vec              vec;
3209   PetscErrorCode (*funcs[2])(PetscInt dim, PetscReal time, const PetscReal x[], PetscInt Nf, PetscScalar *u, void* ctx) = {zero, one};
3210   PetscErrorCode   ierr;
3211 
3212   PetscFunctionBeginUser;
3213   if (origField != 1) SETERRQ1(PetscObjectComm((PetscObject) dm), PETSC_ERR_ARG_WRONG, "Field %D should be 1 for pressure", origField);
3214   funcs[field] = one;
3215   {
3216     PetscDS ds;
3217     ierr = DMGetDS(dm, &ds);CHKERRQ(ierr);
3218     ierr = PetscObjectViewFromOptions((PetscObject) ds, NULL, "-ds_view");CHKERRQ(ierr);
3219   }
3220   ierr = DMCreateGlobalVector(dm, &vec);CHKERRQ(ierr);
3221   ierr = DMProjectFunction(dm, 0.0, funcs, NULL, INSERT_ALL_VALUES, vec);CHKERRQ(ierr);
3222   ierr = VecNormalize(vec, NULL);CHKERRQ(ierr);
3223   ierr = MatNullSpaceCreate(PetscObjectComm((PetscObject)dm), PETSC_FALSE, 1, &vec, nullspace);CHKERRQ(ierr);
3224   ierr = VecDestroy(&vec);CHKERRQ(ierr);
3225   /* New style for field null spaces */
3226   {
3227     PetscObject  pressure;
3228     MatNullSpace nullspacePres;
3229 
3230     ierr = DMGetField(dm, field, NULL, &pressure);CHKERRQ(ierr);
3231     ierr = MatNullSpaceCreate(PetscObjectComm(pressure), PETSC_TRUE, 0, NULL, &nullspacePres);CHKERRQ(ierr);
3232     ierr = PetscObjectCompose(pressure, "nullspace", (PetscObject) nullspacePres);CHKERRQ(ierr);
3233     ierr = MatNullSpaceDestroy(&nullspacePres);CHKERRQ(ierr);
3234   }
3235   PetscFunctionReturn(0);
3236 }
3237 
3238 static PetscErrorCode SetupDiscretization(DM dm, AppCtx *user)
3239 {
3240   DM             cdm = dm;
3241   PetscFE        fe[2];
3242   DMPolytopeType ct;
3243   PetscInt       dim, cStart;
3244   PetscBool      simplex;
3245   PetscErrorCode ierr;
3246 
3247   PetscFunctionBeginUser;
3248   ierr = DMGetDimension(dm, &dim);CHKERRQ(ierr);
3249   ierr = DMPlexGetHeightStratum(dm, 0, &cStart, NULL);CHKERRQ(ierr);
3250   ierr = DMPlexGetCellType(dm, cStart, &ct);CHKERRQ(ierr);
3251   simplex = DMPolytopeTypeGetNumVertices(ct) == DMPolytopeTypeGetDim(ct)+1 ? PETSC_TRUE : PETSC_FALSE;
3252   /* Create discretization of solution fields */
3253   ierr = PetscFECreateDefault(PETSC_COMM_SELF, dim, dim, simplex, "vel_", PETSC_DEFAULT, &fe[0]);CHKERRQ(ierr);
3254   ierr = PetscObjectSetName((PetscObject) fe[0], "velocity");CHKERRQ(ierr);
3255   ierr = PetscFECreateDefault(PETSC_COMM_SELF, dim, 1, simplex, "pres_", PETSC_DEFAULT, &fe[1]);CHKERRQ(ierr);
3256   ierr = PetscFECopyQuadrature(fe[0], fe[1]);CHKERRQ(ierr);
3257   ierr = PetscObjectSetName((PetscObject) fe[1], "pressure");CHKERRQ(ierr);
3258   /* Set discretization and boundary conditions for each mesh */
3259   ierr = DMSetField(dm, 0, NULL, (PetscObject) fe[0]);CHKERRQ(ierr);
3260   ierr = DMSetField(dm, 1, NULL, (PetscObject) fe[1]);CHKERRQ(ierr);
3261   ierr = DMCreateDS(dm);CHKERRQ(ierr);
3262   ierr = SetupProblem(dm, user);CHKERRQ(ierr);
3263   while (cdm) {
3264     ierr = DMCopyDisc(dm, cdm);CHKERRQ(ierr);
3265     ierr = DMSetNullSpaceConstructor(cdm, 1, CreatePressureNullSpace);CHKERRQ(ierr);
3266     ierr = DMGetCoarseDM(cdm, &cdm);CHKERRQ(ierr);
3267   }
3268   ierr = PetscFEDestroy(&fe[0]);CHKERRQ(ierr);
3269   ierr = PetscFEDestroy(&fe[1]);CHKERRQ(ierr);
3270   {
3271     PetscObject  pressure;
3272     MatNullSpace nullSpacePres;
3273 
3274     ierr = DMGetField(dm, 1, NULL, &pressure);CHKERRQ(ierr);
3275     ierr = MatNullSpaceCreate(PetscObjectComm(pressure), PETSC_TRUE, 0, NULL, &nullSpacePres);CHKERRQ(ierr);
3276     ierr = PetscObjectCompose(pressure, "nullspace", (PetscObject) nullSpacePres);CHKERRQ(ierr);
3277     ierr = MatNullSpaceDestroy(&nullSpacePres);CHKERRQ(ierr);
3278   }
3279   PetscFunctionReturn(0);
3280 }
3281 
3282 /* Add a vector in the nullspace to make the continuum integral 0.
3283 
3284    If int(u) = a and int(n) = b, then int(u - a/b n) = a - a/b b = 0
3285 */
3286 static void pressure(PetscInt dim, PetscInt Nf, PetscInt NfAux,
3287                      const PetscInt uOff[], const PetscInt uOff_x[], const PetscScalar u[], const PetscScalar u_t[], const PetscScalar u_x[],
3288                      const PetscInt aOff[], const PetscInt aOff_x[], const PetscScalar a[], const PetscScalar a_t[], const PetscScalar a_x[],
3289                      PetscReal t, const PetscReal x[], PetscInt numConstants, const PetscScalar constants[], PetscScalar p[])
3290 {
3291   p[0] = u[uOff[1]];
3292 }
3293 static PetscErrorCode CorrectDiscretePressure(DM dm, MatNullSpace nullspace, Vec u, AppCtx *user)
3294 {
3295   PetscDS        ds;
3296   const Vec     *nullvecs;
3297   PetscScalar    pintd, intc[2], intn[2];
3298   MPI_Comm       comm;
3299   PetscErrorCode ierr;
3300 
3301   PetscFunctionBeginUser;
3302   ierr = PetscObjectGetComm((PetscObject) dm, &comm);CHKERRQ(ierr);
3303   ierr = DMGetDS(dm, &ds);CHKERRQ(ierr);
3304   ierr = PetscDSSetObjective(ds, 1, pressure);CHKERRQ(ierr);
3305   ierr = MatNullSpaceGetVecs(nullspace, NULL, NULL, &nullvecs);CHKERRQ(ierr);
3306   ierr = VecDot(nullvecs[0], u, &pintd);CHKERRQ(ierr);
3307   if (PetscAbsScalar(pintd) > PETSC_SMALL) SETERRQ1(comm, PETSC_ERR_ARG_WRONG, "Discrete integral of pressure: %g\n", (double) PetscRealPart(pintd));
3308   ierr = DMPlexComputeIntegralFEM(dm, nullvecs[0], intn, user);CHKERRQ(ierr);
3309   ierr = DMPlexComputeIntegralFEM(dm, u, intc, user);CHKERRQ(ierr);
3310   ierr = VecAXPY(u, -intc[1]/intn[1], nullvecs[0]);CHKERRQ(ierr);
3311   ierr = DMPlexComputeIntegralFEM(dm, u, intc, user);CHKERRQ(ierr);
3312   if (PetscAbsScalar(intc[1]) > PETSC_SMALL) SETERRQ1(comm, PETSC_ERR_ARG_WRONG, "Continuum integral of pressure after correction: %g\n", (double) PetscRealPart(intc[1]));
3313   PetscFunctionReturn(0);
3314 }
3315 
3316 static PetscErrorCode SNESConvergenceCorrectPressure(SNES snes, PetscInt it, PetscReal xnorm, PetscReal gnorm, PetscReal f, SNESConvergedReason *reason, void *user)
3317 {
3318   PetscErrorCode ierr;
3319 
3320   PetscFunctionBeginUser;
3321   ierr = SNESConvergedDefault(snes, it, xnorm, gnorm, f, reason, user);CHKERRQ(ierr);
3322   if (*reason > 0) {
3323     DM           dm;
3324     Mat          J;
3325     Vec          u;
3326     MatNullSpace nullspace;
3327 
3328     ierr = SNESGetDM(snes, &dm);CHKERRQ(ierr);
3329     ierr = SNESGetSolution(snes, &u);CHKERRQ(ierr);
3330     ierr = SNESGetJacobian(snes, &J, NULL, NULL, NULL);CHKERRQ(ierr);
3331     ierr = MatGetNullSpace(J, &nullspace);CHKERRQ(ierr);
3332     if (!nullspace) SETERRQ(PetscObjectComm((PetscObject) snes), PETSC_ERR_ARG_WRONG, "SNES Jacobian has no attached null space");
3333     ierr = CorrectDiscretePressure(dm, nullspace, u, (AppCtx *) user);CHKERRQ(ierr);
3334   }
3335   PetscFunctionReturn(0);
3336 }
3337 
3338 int main(int argc, char **argv)
3339 {
3340   SNES            snes;      /* nonlinear solver */
3341   DM              dm;        /* problem definition */
3342   Vec             u,r;       /* solution, residual vectors */
3343   Mat             J, M;      /* Jacobian and preconditiong matrix */
3344   MatNullSpace    nullSpace; /* May be necessary for pressure */
3345   AppCtx          user;      /* user-defined work context */
3346   PetscErrorCode  (*initialGuess[2])(PetscInt dim, PetscReal time, const PetscReal x[], PetscInt Nf, PetscScalar *u, void* ctx) = {zero, zero};
3347   PetscErrorCode  ierr;
3348 
3349   ierr = PetscInitialize(&argc, &argv, NULL,help);if (ierr) return ierr;
3350   ierr = ProcessOptions(PETSC_COMM_WORLD, &user);CHKERRQ(ierr);
3351   ierr = SNESCreate(PETSC_COMM_WORLD, &snes);CHKERRQ(ierr);
3352   ierr = CreateMesh(PETSC_COMM_WORLD, &user, &dm);CHKERRQ(ierr);
3353   ierr = SNESSetDM(snes, dm);CHKERRQ(ierr);
3354   ierr = DMSetApplicationContext(dm, &user);CHKERRQ(ierr);
3355   /* Setup problem parameters */
3356   ierr = PetscBagCreate(PETSC_COMM_WORLD, sizeof(Parameter), &user.bag);CHKERRQ(ierr);
3357   ierr = SetUpParameters(&user);CHKERRQ(ierr);
3358   /* Setup problem */
3359   ierr = SetupDiscretization(dm, &user);CHKERRQ(ierr);
3360   ierr = DMPlexCreateClosureIndex(dm, NULL);CHKERRQ(ierr);
3361 
3362   ierr = DMCreateGlobalVector(dm, &u);CHKERRQ(ierr);
3363   ierr = VecDuplicate(u, &r);CHKERRQ(ierr);
3364 
3365   ierr = DMPlexSetSNESLocalFEM(dm,&user,&user,&user);CHKERRQ(ierr);
3366   ierr = CreatePressureNullSpace(dm, 1, 1, &nullSpace);CHKERRQ(ierr);
3367 
3368   { /* set tolerances */
3369     KSP ksp;
3370 
3371     ierr = SNESGetKSP(snes, &ksp);CHKERRQ(ierr);
3372     ierr = KSPSetTolerances(ksp,1.e-2*PETSC_SMALL,PETSC_SMALL,PETSC_DEFAULT,PETSC_DEFAULT);CHKERRQ(ierr);
3373   }
3374 
3375   /* There should be a way to express this using the DM */
3376   ierr = SNESSetFromOptions(snes);CHKERRQ(ierr);
3377   ierr = SNESSetUp(snes);CHKERRQ(ierr);
3378   ierr = SNESGetJacobian(snes, &J, &M, NULL, NULL);CHKERRQ(ierr);
3379   ierr = MatSetNullSpace(J, nullSpace);CHKERRQ(ierr);
3380   ierr = PetscObjectSetOptionsPrefix((PetscObject) M, "prec_");CHKERRQ(ierr);
3381   ierr = MatSetFromOptions(M);CHKERRQ(ierr);
3382   ierr = SNESSetConvergenceTest(snes, SNESConvergenceCorrectPressure, &user, NULL);CHKERRQ(ierr);
3383 
3384   ierr = DMSNESCheckFromOptions(snes, u);CHKERRQ(ierr);
3385   ierr = DMProjectFunction(dm, 0.0, initialGuess, NULL, INSERT_VALUES, u);CHKERRQ(ierr);
3386   ierr = PetscObjectSetName((PetscObject) u, "Solution");CHKERRQ(ierr);
3387   ierr = SNESSolve(snes, NULL, u);CHKERRQ(ierr);
3388   {
3389     PetscErrorCode (*exacts[2])(PetscInt dim, PetscReal t, const PetscReal x[], PetscInt Nf, PetscScalar *u, void *ctx);
3390     void            *ectxs[2];
3391     PetscDS          ds;
3392     Vec              e;
3393 
3394     ierr = DMGetDS(dm, &ds);CHKERRQ(ierr);
3395     ierr = PetscDSGetExactSolution(ds, 0, &exacts[0], &ectxs[0]);CHKERRQ(ierr);
3396     ierr = PetscDSGetExactSolution(ds, 1, &exacts[1], &ectxs[1]);CHKERRQ(ierr);
3397 
3398     ierr = DMGetGlobalVector(dm, &e);CHKERRQ(ierr);
3399     ierr = PetscObjectCompose((PetscObject) e, "__Vec_bc_zero__", (PetscObject) dm);CHKERRQ(ierr);
3400     ierr = DMPlexComputeL2DiffVec(dm, 0.0, exacts, ectxs, u, e);CHKERRQ(ierr);
3401     ierr = PetscObjectSetName((PetscObject) e, "Solution Error");CHKERRQ(ierr);
3402     ierr = VecViewFromOptions(e, NULL, "-error_vec_view");CHKERRQ(ierr);
3403     ierr = PetscObjectCompose((PetscObject) e, "__Vec_bc_zero__", NULL);CHKERRQ(ierr);
3404     ierr = DMRestoreGlobalVector(dm, &e);CHKERRQ(ierr);
3405   }
3406   ierr = VecViewFromOptions(u, NULL, "-sol_vec_view");CHKERRQ(ierr);
3407 
3408   ierr = MatNullSpaceDestroy(&nullSpace);CHKERRQ(ierr);
3409   ierr = VecDestroy(&u);CHKERRQ(ierr);
3410   ierr = VecDestroy(&r);CHKERRQ(ierr);
3411   ierr = SNESDestroy(&snes);CHKERRQ(ierr);
3412   ierr = DMDestroy(&dm);CHKERRQ(ierr);
3413   ierr = PetscBagDestroy(&user.bag);CHKERRQ(ierr);
3414   ierr = PetscFinalize();
3415   return ierr;
3416 }
3417 
3418 /*TEST
3419 
3420   # 2D serial discretization tests
3421   test:
3422     suffix: p2p1
3423     requires: triangle
3424     args: -dm_plex_separate_marker -vel_petscspace_degree 2 -pres_petscspace_degree 1 \
3425       -snes_error_if_not_converged -dmsnes_check .001 \
3426       -ksp_rtol 1.e-9 -ksp_error_if_not_converged -pc_use_amat \
3427       -pc_type fieldsplit -pc_fieldsplit_type schur -pc_fieldsplit_schur_factorization_type full -pc_fieldsplit_schur_precondition a11 \
3428         -fieldsplit_velocity_pc_type lu \
3429         -fieldsplit_pressure_ksp_rtol 1.e-9 -fieldsplit_pressure_pc_type lu
3430   test:
3431     suffix: p2p1_gmg
3432     requires: triangle
3433     args: -dm_plex_separate_marker -dm_refine_hierarchy 2 -vel_petscspace_degree 2 -pres_petscspace_degree 1 \
3434       -snes_error_if_not_converged -dmsnes_check .001 \
3435       -ksp_type fgmres -ksp_rtol 1.e-9 -ksp_error_if_not_converged -pc_use_amat \
3436       -pc_type fieldsplit -pc_fieldsplit_type schur -pc_fieldsplit_schur_factorization_type full -pc_fieldsplit_schur_precondition a11 \
3437         -fieldsplit_velocity_pc_type mg \
3438         -fieldsplit_pressure_ksp_rtol 1.e-9 -fieldsplit_pressure_pc_type lu
3439   test:
3440     suffix: p2p1_conv
3441     requires: triangle
3442     # -dm_refine 2 gives L_2 convergence rate: [3.0, 2.2]
3443     args: -dm_plex_separate_marker -vel_petscspace_degree 2 -pres_petscspace_degree 1 \
3444       -snes_error_if_not_converged -snes_convergence_estimate -convest_num_refine 2 \
3445       -ksp_rtol 1.e-9 -ksp_error_if_not_converged -pc_use_amat \
3446       -pc_type fieldsplit -pc_fieldsplit_type schur -pc_fieldsplit_schur_factorization_type full -pc_fieldsplit_schur_precondition a11 \
3447         -fieldsplit_velocity_pc_type lu \
3448         -fieldsplit_pressure_ksp_rtol 1.e-9 -fieldsplit_pressure_pc_type lu
3449   test:
3450     suffix: q2q1_conv
3451     # -dm_refine 2 gives L_2 convergence rate: [3.0, 2.1]
3452     args: -dm_plex_simplex 0 -dm_plex_separate_marker -vel_petscspace_degree 2 -pres_petscspace_degree 1 \
3453       -snes_error_if_not_converged -snes_convergence_estimate -convest_num_refine 2 \
3454       -ksp_rtol 1.e-9 -ksp_error_if_not_converged -pc_use_amat \
3455       -pc_type fieldsplit -pc_fieldsplit_type schur -pc_fieldsplit_schur_factorization_type full -pc_fieldsplit_schur_precondition a11 \
3456         -fieldsplit_velocity_pc_type lu \
3457         -fieldsplit_pressure_ksp_rtol 1.e-9 -fieldsplit_pressure_pc_type lu
3458   test:
3459     suffix: q1p0_conv
3460     # -dm_refine 2 gives L_2 convergence rate: [2.0, 1.0]
3461     args: -dm_plex_simplex 0 -dm_plex_separate_marker -vel_petscspace_degree 1 -pres_petscspace_degree 0 \
3462       -snes_error_if_not_converged -snes_convergence_estimate -convest_num_refine 2 \
3463       -ksp_rtol 1.e-9 -ksp_error_if_not_converged -pc_use_amat \
3464       -pc_type fieldsplit -pc_fieldsplit_type schur -pc_fieldsplit_schur_factorization_type full -pc_fieldsplit_schur_precondition a11 \
3465         -fieldsplit_velocity_pc_type lu \
3466         -fieldsplit_pressure_ksp_rtol 1.e-9 -fieldsplit_pressure_pc_type lu
3467   test:
3468     suffix: q2p1_conv
3469     # -dm_refine 2 gives L_2 convergence rate: [3.0, 2.0]
3470     args: -dm_plex_simplex 0 -dm_plex_separate_marker \
3471       -vel_petscspace_degree 2 -pres_petscspace_degree 1 -pres_petscspace_poly_tensor 0 -pres_petscdualspace_lagrange_continuity 0 \
3472       -snes_error_if_not_converged -snes_convergence_estimate -convest_num_refine 2 \
3473       -ksp_rtol 1.e-9 -ksp_error_if_not_converged -pc_use_amat \
3474       -pc_type fieldsplit -pc_fieldsplit_type schur -pc_fieldsplit_schur_factorization_type full -pc_fieldsplit_schur_precondition a11 \
3475         -fieldsplit_velocity_pc_type lu \
3476         -fieldsplit_pressure_ksp_rtol 1.e-9 -fieldsplit_pressure_pc_type lu
3477 
3478   # FETI-DP tests
3479   testset:
3480     output_file: output/ex69_q2p1fetidp.out
3481     suffix: q2p1fetidp
3482     requires: !single
3483     nsize: 5
3484     args: -dm_distribute -dm_plex_simplex 0 -dm_plex_separate_marker -dm_refine_pre 1 -dm_mat_type is -dm_view -petscpartitioner_type simple \
3485       -vel_petscspace_degree 2 -pres_petscspace_degree 1 -pres_petscspace_poly_tensor 0 -pres_petscdualspace_lagrange_continuity 0 -pres_petscdualspace_lagrange_node_endpoints 0 \
3486       -snes_error_if_not_converged \
3487       -ksp_error_if_not_converged \
3488       -ksp_type fetidp -ksp_fetidp_saddlepoint -fetidp_ksp_type cg -fetidp_ksp_norm_type natural \
3489       -fetidp_bddc_pc_bddc_detect_disconnected -fetidp_bddc_pc_bddc_symmetric -fetidp_bddc_pc_bddc_vertex_size 3 -fetidp_bddc_pc_bddc_graph_maxcount 2 -fetidp_bddc_pc_bddc_coarse_redundant_pc_type svd -fetidp_bddc_pc_bddc_dirichlet_pc_type svd -fetidp_bddc_pc_bddc_neumann_pc_type svd
3490     test:
3491       suffix: aij
3492       args: -matis_localmat_type aij
3493     test:
3494       requires: viennacl !CUDA_VERSION_11PLUS
3495       suffix: aijviennacl
3496       args: -matis_localmat_type aijviennacl
3497     test:
3498       requires: cuda
3499       suffix: aijcusparse
3500       args: -matis_localmat_type aijcusparse
3501 
3502   testset:
3503     suffix: q2p1fetidp_deluxe
3504     output_file: output/ex69_q2p1fetidp_deluxe.out
3505     requires: mumps double
3506     nsize: 5
3507     args: -dm_distribute -dm_plex_simplex 0 -dm_plex_separate_marker -dm_refine_pre 1 -dm_mat_type is -dm_view -petscpartitioner_type simple \
3508       -vel_petscspace_degree 2 -pres_petscspace_degree 1 -pres_petscspace_poly_tensor 0 -pres_petscdualspace_lagrange_continuity 0 -pres_petscdualspace_lagrange_node_endpoints 0 \
3509       -snes_error_if_not_converged \
3510       -ksp_error_if_not_converged \
3511       -ksp_type fetidp -ksp_fetidp_saddlepoint -fetidp_ksp_type cg -fetidp_ksp_norm_type natural \
3512       -fetidp_bddc_pc_bddc_detect_disconnected -fetidp_bddc_pc_bddc_symmetric -fetidp_bddc_pc_bddc_vertex_size 3 -fetidp_bddc_pc_bddc_graph_maxcount 2 -fetidp_bddc_pc_bddc_use_deluxe_scaling -fetidp_bddc_pc_bddc_deluxe_singlemat -fetidp_bddc_pc_bddc_deluxe_zerorows \
3513       -fetidp_bddc_sub_schurs_mat_solver_type mumps -fetidp_bddc_sub_schurs_mat_mumps_icntl_14 500 -fetidp_bddc_pc_bddc_coarse_redundant_pc_type svd
3514     test:
3515       suffix: aij
3516       args: -matis_localmat_type aij
3517     test:
3518       suffix: aij_seqdense
3519       args: -matis_localmat_type aij -fetidp_bddc_sub_schurs_schur_mat_type seqdense
3520     test:
3521       requires: viennacl !CUDA_VERSION_11PLUS
3522       suffix: aijviennacl
3523       args: -matis_localmat_type aijviennacl
3524     test:
3525       requires: cuda
3526       suffix: aijcusparse
3527       args: -matis_localmat_type aijcusparse
3528 
3529   testset:
3530     suffix: q2p1fetidp_deluxe_adaptive
3531     output_file: output/ex69_q2p1fetidp_deluxe_adaptive.out
3532     requires: mumps double
3533     nsize: 5
3534     args: -dm_distribute -dm_plex_simplex 0 -dm_plex_separate_marker -dm_refine_pre 1 -dm_mat_type is -dm_view -petscpartitioner_type simple \
3535       -vel_petscspace_degree 2 -pres_petscspace_degree 1 -pres_petscspace_poly_tensor 0 -pres_petscdualspace_lagrange_continuity 0 -pres_petscdualspace_lagrange_node_endpoints 0 \
3536       -snes_error_if_not_converged \
3537       -ksp_error_if_not_converged \
3538       -ksp_type fetidp -ksp_fetidp_saddlepoint -fetidp_ksp_type cg -fetidp_ksp_norm_type natural \
3539       -fetidp_bddc_pc_bddc_detect_disconnected -fetidp_bddc_pc_bddc_symmetric -fetidp_bddc_pc_bddc_vertex_size 3 -fetidp_bddc_pc_bddc_graph_maxcount 2 -fetidp_bddc_pc_bddc_use_deluxe_scaling -fetidp_bddc_pc_bddc_deluxe_singlemat -fetidp_bddc_pc_bddc_adaptive_userdefined -fetidp_bddc_pc_bddc_adaptive_threshold 1.3 \
3540       -fetidp_bddc_sub_schurs_mat_solver_type mumps -fetidp_bddc_sub_schurs_mat_mumps_icntl_14 500 -fetidp_bddc_pc_bddc_coarse_redundant_pc_type svd
3541     test:
3542       suffix: aij
3543       args: -matis_localmat_type aij
3544     test:
3545       suffix: aij_seqdense
3546       args: -matis_localmat_type aij -fetidp_bddc_sub_schurs_schur_mat_type seqdense
3547     test:
3548       requires: viennacl !CUDA_VERSION_11PLUS
3549       suffix: aijviennacl
3550       args: -matis_localmat_type aijviennacl
3551     test:
3552       requires: cuda
3553       suffix: aijcusparse
3554       args: -matis_localmat_type aijcusparse
3555 
3556   test:
3557     suffix: p2p1fetidp
3558     requires: triangle
3559     nsize: 4
3560     args: -dm_distribute -dm_plex_separate_marker -dm_refine_pre 2 -dm_refine_uniform_pre -dm_mat_type is -dm_view -petscpartitioner_type simple \
3561       -vel_petscspace_degree 2 -pres_petscspace_degree 1 \
3562       -snes_error_if_not_converged \
3563       -ksp_error_if_not_converged \
3564       -ksp_type fetidp -ksp_fetidp_saddlepoint -fetidp_ksp_type cg -fetidp_ksp_norm_type natural -fetidp_pc_fieldsplit_schur_fact_type diag \
3565       -fetidp_fieldsplit_p_pc_type jacobi -fetidp_fieldsplit_p_ksp_type preonly \
3566       -fetidp_fieldsplit_lag_ksp_type preonly \
3567       -fetidp_bddc_pc_bddc_detect_disconnected -fetidp_bddc_pc_bddc_symmetric -fetidp_bddc_pc_bddc_vertex_size 3 -fetidp_bddc_pc_bddc_graph_maxcount 2 -fetidp_bddc_pc_bddc_coarse_redundant_pc_type cholesky -fetidp_bddc_pc_bddc_dirichlet_pc_type svd -fetidp_bddc_pc_bddc_neumann_pc_type svd
3568 
3569   test:
3570     suffix: p2p1fetidp_allp
3571     requires: triangle
3572     nsize: 4
3573     args: -dm_distribute -dm_plex_separate_marker -dm_refine_pre 2 -dm_refine_uniform_pre -dm_mat_type is -dm_view -petscpartitioner_type simple \
3574       -vel_petscspace_degree 2 -pres_petscspace_degree 1 \
3575       -snes_error_if_not_converged \
3576       -ksp_error_if_not_converged \
3577       -ksp_type fetidp -ksp_fetidp_saddlepoint -fetidp_ksp_type cg -fetidp_ksp_norm_type natural -fetidp_pc_fieldsplit_schur_fact_type diag -ksp_fetidp_pressure_all \
3578       -fetidp_fieldsplit_p_pc_type jacobi -fetidp_fieldsplit_p_ksp_type preonly \
3579       -fetidp_fieldsplit_lag_ksp_type preonly \
3580       -fetidp_bddc_pc_bddc_detect_disconnected -fetidp_bddc_pc_bddc_symmetric -fetidp_bddc_pc_bddc_vertex_size 3 -fetidp_bddc_pc_bddc_graph_maxcount 2 -fetidp_bddc_pc_bddc_coarse_redundant_pc_type cholesky -fetidp_bddc_pc_bddc_dirichlet_pc_type svd -fetidp_bddc_pc_bddc_neumann_pc_type svd
3581 
3582   test:
3583     suffix: p2p1fetidp_discharm
3584     requires: triangle
3585     nsize: 4
3586     args: -dm_distribute -dm_plex_separate_marker -dm_refine_pre 2 -dm_refine_uniform_pre -dm_mat_type is -dm_view -petscpartitioner_type simple \
3587       -vel_petscspace_degree 2 -pres_petscspace_degree 1 \
3588       -snes_error_if_not_converged \
3589       -ksp_error_if_not_converged \
3590       -ksp_type fetidp -ksp_fetidp_saddlepoint -fetidp_ksp_type cg -fetidp_ksp_norm_type natural -fetidp_pc_fieldsplit_schur_fact_type diag -fetidp_pc_discrete_harmonic -fetidp_harmonic_pc_type cholesky \
3591       -fetidp_fieldsplit_p_pc_type jacobi -fetidp_fieldsplit_p_ksp_type preonly \
3592       -fetidp_fieldsplit_lag_ksp_type preonly \
3593       -fetidp_bddc_pc_bddc_detect_disconnected -fetidp_bddc_pc_bddc_symmetric -fetidp_bddc_pc_bddc_vertex_size 3 -fetidp_bddc_pc_bddc_graph_maxcount 2 -fetidp_bddc_pc_bddc_coarse_redundant_pc_type cholesky -fetidp_bddc_pc_bddc_dirichlet_pc_type none -fetidp_bddc_pc_bddc_neumann_pc_type svd
3594 
3595   test:
3596     suffix: p2p1fetidp_lumped
3597     requires: triangle
3598     nsize: 4
3599     args: -dm_distribute -dm_plex_separate_marker -dm_refine_pre 2 -dm_refine_uniform_pre -dm_mat_type is -dm_view -petscpartitioner_type simple \
3600       -vel_petscspace_degree 2 -pres_petscspace_degree 1 \
3601       -snes_error_if_not_converged \
3602       -ksp_error_if_not_converged \
3603       -ksp_type fetidp -ksp_fetidp_saddlepoint -fetidp_ksp_type cg -fetidp_ksp_norm_type natural -fetidp_pc_fieldsplit_schur_fact_type diag -fetidp_pc_lumped \
3604       -fetidp_fieldsplit_p_pc_type jacobi -fetidp_fieldsplit_p_ksp_type preonly \
3605       -fetidp_fieldsplit_lag_ksp_type preonly \
3606       -fetidp_bddc_pc_bddc_detect_disconnected -fetidp_bddc_pc_bddc_symmetric -fetidp_bddc_pc_bddc_vertex_size 3 -fetidp_bddc_pc_bddc_graph_maxcount 2 -fetidp_bddc_pc_bddc_coarse_redundant_pc_type cholesky -fetidp_bddc_pc_bddc_dirichlet_pc_type none -fetidp_bddc_pc_bddc_neumann_pc_type svd
3607 
3608   test:
3609     suffix: p2p1fetidp_deluxe
3610     requires: triangle mumps
3611     nsize: 4
3612     args: -dm_distribute -dm_plex_separate_marker -dm_refine_pre 2 -dm_refine_uniform_pre -dm_mat_type is -dm_view -petscpartitioner_type simple \
3613       -vel_petscspace_degree 2 -pres_petscspace_degree 1 \
3614       -snes_error_if_not_converged \
3615       -ksp_error_if_not_converged \
3616       -ksp_type fetidp -ksp_fetidp_saddlepoint -fetidp_ksp_type cg -fetidp_ksp_norm_type natural -fetidp_pc_fieldsplit_schur_fact_type diag \
3617       -fetidp_fieldsplit_p_pc_type jacobi -fetidp_fieldsplit_p_ksp_type preonly \
3618       -fetidp_fieldsplit_lag_ksp_type preonly \
3619       -fetidp_bddc_pc_bddc_detect_disconnected -fetidp_bddc_pc_bddc_symmetric -fetidp_bddc_pc_bddc_vertex_size 3 -fetidp_bddc_pc_bddc_graph_maxcount 2 -fetidp_bddc_pc_bddc_coarse_redundant_pc_type cholesky -fetidp_bddc_pc_bddc_use_deluxe_scaling -fetidp_bddc_pc_bddc_deluxe_singlemat \
3620       -fetidp_bddc_sub_schurs_mat_mumps_icntl_14 500 -fetidp_bddc_sub_schurs_posdef 0
3621 
3622   test:
3623     suffix: p2p1fetidp_deluxe_discharm
3624     requires: triangle mumps
3625     nsize: 4
3626     args: -dm_distribute -dm_plex_separate_marker -dm_refine_pre 2 -dm_refine_uniform_pre -dm_mat_type is -dm_view -petscpartitioner_type simple \
3627       -vel_petscspace_degree 2 -pres_petscspace_degree 1 \
3628       -snes_error_if_not_converged \
3629       -ksp_error_if_not_converged \
3630       -ksp_type fetidp -ksp_fetidp_saddlepoint -fetidp_ksp_type cg -fetidp_ksp_norm_type natural -fetidp_pc_fieldsplit_schur_fact_type diag \
3631       -fetidp_fieldsplit_p_pc_type jacobi -fetidp_fieldsplit_p_ksp_type preonly \
3632       -fetidp_fieldsplit_lag_ksp_type preonly \
3633       -fetidp_bddc_pc_bddc_detect_disconnected -fetidp_bddc_pc_bddc_symmetric -fetidp_bddc_pc_bddc_vertex_size 3 -fetidp_bddc_pc_bddc_graph_maxcount 2 -fetidp_bddc_pc_bddc_coarse_redundant_pc_type cholesky -fetidp_bddc_pc_bddc_use_deluxe_scaling -fetidp_bddc_pc_bddc_deluxe_singlemat \
3634       -fetidp_bddc_sub_schurs_mat_mumps_icntl_14 500 -fetidp_bddc_sub_schurs_posdef 0  -fetidp_bddc_sub_schurs_discrete_harmonic
3635 
3636   testset:
3637     nsize: 4
3638     requires: triangle
3639     output_file: output/ex69_p2p1fetidp_olof.out
3640     args: -dm_distribute -dm_plex_separate_marker -dm_refine_pre 2 -dm_refine_uniform_pre -dm_mat_type is -dm_view -petscpartitioner_type simple \
3641       -vel_petscspace_degree 2 -pres_petscspace_degree 1 \
3642       -snes_error_if_not_converged \
3643       -ksp_error_if_not_converged \
3644       -ksp_type fetidp -ksp_fetidp_saddlepoint -fetidp_ksp_type cg -fetidp_ksp_norm_type natural -fetidp_pc_discrete_harmonic 1 -fetidp_harmonic_pc_type cholesky -ksp_fetidp_pressure_schur \
3645       -fetidp_fieldsplit_p_pc_type bddc -fetidp_fieldsplit_p_pc_bddc_dirichlet_pc_type none -fetidp_fieldsplit_p_ksp_type preonly \
3646       -fetidp_fieldsplit_lag_ksp_error_if_not_converged 0 -fetidp_fieldsplit_lag_ksp_type chebyshev -fetidp_fieldsplit_lag_ksp_max_it 2 \
3647       -fetidp_bddc_pc_bddc_detect_disconnected -fetidp_bddc_pc_bddc_symmetric -fetidp_bddc_pc_bddc_vertex_size 3 -fetidp_bddc_pc_bddc_graph_maxcount 2 -fetidp_bddc_pc_bddc_coarse_redundant_pc_type cholesky -fetidp_bddc_pc_bddc_dirichlet_pc_type none -fetidp_bddc_pc_bddc_neumann_pc_type svd
3648     test:
3649       suffix: p2p1fetidp_olof_full
3650       args: -fetidp_pc_fieldsplit_schur_fact_type full
3651     test:
3652       suffix: p2p1fetidp_olof_diag
3653       args: -fetidp_pc_fieldsplit_schur_fact_type diag
3654     test:
3655       suffix: p2p1fetidp_olof_additive
3656       args: -fetidp_pc_fieldsplit_type additive
3657 
3658   #BDDC with benign trick
3659   testset:
3660     suffix: q2p1bddc
3661     output_file: output/ex69_q2p1fetidp_deluxe.out
3662     nsize: 5
3663     args: -dm_distribute -dm_plex_simplex 0 -dm_plex_separate_marker -dm_refine_pre 1 -dm_mat_type is -dm_view -petscpartitioner_type simple -vel_petscspace_degree 2 -pres_petscspace_degree 1 -pres_petscspace_poly_tensor 0 -pres_petscdualspace_lagrange_continuity 0 -pres_petscdualspace_lagrange_node_endpoints 0 -petscds_jac_pre 0 -snes_error_if_not_converged -ksp_error_if_not_converged -ksp_type cg -ksp_norm_type natural -pc_type bddc -pc_bddc_benign_trick -pc_bddc_nonetflux -pc_bddc_detect_disconnected -pc_bddc_vertex_size 2 -pc_bddc_coarse_redundant_pc_type svd -pc_bddc_use_qr_single
3664     test:
3665       requires: double
3666       suffix: benign_card
3667       # no native support for saddle point factorizations from PETSc
3668       args: -pc_bddc_dirichlet_pc_type svd -pc_bddc_neumann_pc_type svd
3669     test:
3670       requires: mumps double
3671       suffix: benign_deluxe_mumps
3672       args: -pc_bddc_use_deluxe_scaling -pc_bddc_deluxe_zerorows -sub_schurs_mat_solver_type mumps -sub_schurs_mat_mumps_icntl_14 1000
3673     test:
3674       requires: mumps double
3675       suffix: benign_deluxe_adaptive_mumps
3676       args: -pc_bddc_adaptive_threshold 1.7 -pc_bddc_use_deluxe_scaling -pc_bddc_deluxe_zerorows -sub_schurs_mat_solver_type mumps -sub_schurs_mat_mumps_icntl_14 1000
3677     test:
3678       requires: mkl_pardiso double
3679       suffix: benign_deluxe_mkl
3680       args: -pc_bddc_use_deluxe_scaling -pc_bddc_deluxe_zerorows -sub_schurs_mat_solver_type mkl_pardiso -snes_rtol 1.e-7
3681     test:
3682       requires: mkl_pardiso double
3683       suffix: benign_deluxe_adaptive_mkl
3684       args: -pc_bddc_adaptive_threshold 1.7 -pc_bddc_use_deluxe_scaling -pc_bddc_deluxe_zerorows -sub_schurs_mat_solver_type mkl_pardiso -snes_rtol 1.e-7
3685 
3686 TEST*/
3687