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