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