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