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