Bug Summary

File:src/seek/textract.c
Location:line 204, column 3
Description:The right operand of '-' is a garbage value

Annotated Source Code

1/*
2 Teem: Tools to process and visualize scientific data and images .
3 Copyright (C) 2011, 2010, 2009, 2008 Thomas Schultz
4
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public License
7 (LGPL) as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
9 The terms of redistributing and/or modifying this software also
10 include exceptions to the LGPL that facilitate static linking.
11
12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Lesser General Public License for more details.
16
17 You should have received a copy of the GNU Lesser General Public License
18 along with this library; if not, write to Free Software Foundation, Inc.,
19 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20*/
21
22/* This file collects functions that implement extraction of crease
23 * surfaces as proposed in Schultz / Theisel / Seidel, "Crease
24 * Surfaces: From Theory to Extraction and Application to Diffusion
25 * Tensor MRI", IEEE TVCG 16(1):109-119, 2010 */
26
27#include "seek.h"
28#include "privateSeek.h"
29
30/* private helper routines for the T-based extraction */
31
32/* Converts a Hessian into the transformed tensor T (cf. paper)
33 *
34 * T is a 9-vector representing the output
35 * evals is a 3-vector (eigenvalues of the Hessian)
36 * evecs is a 9-vector (eigenvectors of the Hessian)
37 * evalDiffThresh is the threshold parameter theta (cf. Eq. (4) in paper)
38 * ridge is non-zero if we are looking for a ridge (zero for valley)
39 */
40void
41_seekHess2T(double *T, const double *evals, const double *evecs,
42 const double evalDiffThresh, const char ridge) {
43 double lambdas[3]={0.0,0.0,0.0};
44 double tmpMat[9], diag[9], evecsT[9];
45 if (ridge) {
46 double diff = evals[1]-evals[2];
47 lambdas[0]=lambdas[1]=1.0;
48 if (diff<evalDiffThresh)
49 lambdas[2]=(1.0-diff/evalDiffThresh)*(1.0-diff/evalDiffThresh);
50 } else {
51 double diff = evals[0]-evals[1];
52 lambdas[1]=lambdas[2]=1.0;
53 if (diff<evalDiffThresh)
54 lambdas[0]=(1.0-diff/evalDiffThresh)*(1.0-diff/evalDiffThresh);
55 }
56 ELL_3M_ZERO_SET(diag)((((diag)+0)[0] = (0), ((diag)+0)[1] = (0), ((diag)+0)[2] = (
0)), (((diag)+3)[0] = (0), ((diag)+3)[1] = (0), ((diag)+3)[2]
= (0)), (((diag)+6)[0] = (0), ((diag)+6)[1] = (0), ((diag)+6
)[2] = (0)))
;
57 ELL_3M_DIAG_SET(diag, lambdas[0], lambdas[1], lambdas[2])((diag)[0] = (lambdas[0]), (diag)[4] = (lambdas[1]), (diag)[8
] = (lambdas[2]))
;
58 ELL_3M_TRANSPOSE(evecsT, evecs)((evecsT)[0] = (evecs)[0], (evecsT)[1] = (evecs)[3], (evecsT)
[2] = (evecs)[6], (evecsT)[3] = (evecs)[1], (evecsT)[4] = (evecs
)[4], (evecsT)[5] = (evecs)[7], (evecsT)[6] = (evecs)[2], (evecsT
)[7] = (evecs)[5], (evecsT)[8] = (evecs)[8])
;
59 ELL_3M_MUL(tmpMat, diag, evecs)((tmpMat)[0] = (diag)[0]*(evecs)[0] + (diag)[1]*(evecs)[3] + (
diag)[2]*(evecs)[6], (tmpMat)[1] = (diag)[0]*(evecs)[1] + (diag
)[1]*(evecs)[4] + (diag)[2]*(evecs)[7], (tmpMat)[2] = (diag)[
0]*(evecs)[2] + (diag)[1]*(evecs)[5] + (diag)[2]*(evecs)[8], (
tmpMat)[3] = (diag)[3]*(evecs)[0] + (diag)[4]*(evecs)[3] + (diag
)[5]*(evecs)[6], (tmpMat)[4] = (diag)[3]*(evecs)[1] + (diag)[
4]*(evecs)[4] + (diag)[5]*(evecs)[7], (tmpMat)[5] = (diag)[3]
*(evecs)[2] + (diag)[4]*(evecs)[5] + (diag)[5]*(evecs)[8], (tmpMat
)[6] = (diag)[6]*(evecs)[0] + (diag)[7]*(evecs)[3] + (diag)[8
]*(evecs)[6], (tmpMat)[7] = (diag)[6]*(evecs)[1] + (diag)[7]*
(evecs)[4] + (diag)[8]*(evecs)[7], (tmpMat)[8] = (diag)[6]*(evecs
)[2] + (diag)[7]*(evecs)[5] + (diag)[8]*(evecs)[8])
;
60 ELL_3M_MUL(T, evecsT, tmpMat)((T)[0] = (evecsT)[0]*(tmpMat)[0] + (evecsT)[1]*(tmpMat)[3] +
(evecsT)[2]*(tmpMat)[6], (T)[1] = (evecsT)[0]*(tmpMat)[1] + (
evecsT)[1]*(tmpMat)[4] + (evecsT)[2]*(tmpMat)[7], (T)[2] = (evecsT
)[0]*(tmpMat)[2] + (evecsT)[1]*(tmpMat)[5] + (evecsT)[2]*(tmpMat
)[8], (T)[3] = (evecsT)[3]*(tmpMat)[0] + (evecsT)[4]*(tmpMat)
[3] + (evecsT)[5]*(tmpMat)[6], (T)[4] = (evecsT)[3]*(tmpMat)[
1] + (evecsT)[4]*(tmpMat)[4] + (evecsT)[5]*(tmpMat)[7], (T)[5
] = (evecsT)[3]*(tmpMat)[2] + (evecsT)[4]*(tmpMat)[5] + (evecsT
)[5]*(tmpMat)[8], (T)[6] = (evecsT)[6]*(tmpMat)[0] + (evecsT)
[7]*(tmpMat)[3] + (evecsT)[8]*(tmpMat)[6], (T)[7] = (evecsT)[
6]*(tmpMat)[1] + (evecsT)[7]*(tmpMat)[4] + (evecsT)[8]*(tmpMat
)[7], (T)[8] = (evecsT)[6]*(tmpMat)[2] + (evecsT)[7]*(tmpMat)
[5] + (evecsT)[8]*(tmpMat)[8])
;
61}
62
63/* Converts a Hessian derivative into a derivative of the transformed
64 * tensor field T
65 *
66 * Tder is a 9-vector representing the output
67 * hessder is a 9-vector (Hessian derivative)
68 * evals is a 3-vector (eigenvalues of the Hessian value)
69 * evecs is a 9-vector (eigenvectors of the Hessian value)
70 * evalDiffThresh is the threshold parameter theta (cf. Eq. (4) in the paper)
71 * ridge is non-zero if we are looking for a ridge (zero for valley)
72 */
73void
74_seekHessder2Tder(double *Tder, const double *hessder, const double *evals,
75 const double *evecs, const double evalDiffThresh,
76 const char ridge) {
77 double evecTrans[9];
78 double hessderE[9]; /* Hessian derivative in eigenframe */
79 double tmp[9];
80 ELL_3M_TRANSPOSE(evecTrans,evecs)((evecTrans)[0] = (evecs)[0], (evecTrans)[1] = (evecs)[3], (evecTrans
)[2] = (evecs)[6], (evecTrans)[3] = (evecs)[1], (evecTrans)[4
] = (evecs)[4], (evecTrans)[5] = (evecs)[7], (evecTrans)[6] =
(evecs)[2], (evecTrans)[7] = (evecs)[5], (evecTrans)[8] = (evecs
)[8])
;
81 ell_3m_mul_d(tmp,hessder,evecTrans);
82 ell_3m_mul_d(hessderE,evecs,tmp);
83
84 if (ridge) {
85 double diff=evals[1]-evals[2];
86 double l3;
87 double l3der;
88 if (diff<evalDiffThresh)
89 l3=(1.0-diff/evalDiffThresh)*(1.0-diff/evalDiffThresh);
90 else l3=0.0;
91 hessderE[2]*=(1.0-l3)/(evals[0]-evals[2]);
92 hessderE[6]=hessderE[2];
93 hessderE[5]*=(1.0-l3)/(evals[1]-evals[2]);
94 hessderE[7]=hessderE[5];
95
96 if (diff<evalDiffThresh)
97 l3der = 2/evalDiffThresh*(1-diff/evalDiffThresh)*
98 (hessderE[8]-hessderE[4]);
99 else
100 l3der=0;
101 hessderE[8]=l3der;
102 hessderE[0]=hessderE[1]=hessderE[3]=hessderE[4]=0.0;
103 } else {
104 double diff=evals[0]-evals[1];
105 double l1;
106 double l1der;
107 if (diff<evalDiffThresh)
108 l1=(1.0-diff/evalDiffThresh)*(1.0-diff/evalDiffThresh);
109 else l1=0.0;
110 hessderE[1]*=(l1-1.0)/(evals[0]-evals[1]);
111 hessderE[3]=hessderE[1];
112 hessderE[2]*=(l1-1.0)/(evals[0]-evals[2]);
113 hessderE[6]=hessderE[2];
114
115 if (diff<evalDiffThresh)
116 l1der = 2/evalDiffThresh*(1-diff/evalDiffThresh)*
117 (hessderE[4]-hessderE[0]);
118 else
119 l1der = 0;
120 hessderE[0]=l1der;
121 hessderE[4]=hessderE[5]=hessderE[7]=hessderE[8]=0.0;
122 }
123
124 ell_3m_mul_d(tmp,hessderE,evecs);
125 ell_3m_mul_d(Tder,evecTrans,tmp);
126}
127
128static int
129findFeatureIntersection(double *results, double *Tleft,
130 double *hessleft, double *gleft,
131 double *Tright, double *hessright,
132 double *gright, double idxleft,
133 double idxright, char ridge,
134 const double evalDiffThresh,
135 const double dotThresh) {
136 double Tdp = ELL_3V_DOT(Tleft, Tright)((Tleft)[0]*(Tright)[0] + (Tleft)[1]*(Tright)[1] + (Tleft)[2]
*(Tright)[2])
+ ELL_3V_DOT(Tleft+3,Tright+3)((Tleft+3)[0]*(Tright+3)[0] + (Tleft+3)[1]*(Tright+3)[1] + (Tleft
+3)[2]*(Tright+3)[2])
+
137 ELL_3V_DOT(Tleft+6,Tright+6)((Tleft+6)[0]*(Tright+6)[0] + (Tleft+6)[1]*(Tright+6)[1] + (Tleft
+6)[2]*(Tright+6)[2])
;
138 double denom_l = sqrt(ELL_3V_DOT(Tleft, Tleft)((Tleft)[0]*(Tleft)[0] + (Tleft)[1]*(Tleft)[1] + (Tleft)[2]*(
Tleft)[2])
+ ELL_3V_DOT(Tleft+3, Tleft+3)((Tleft+3)[0]*(Tleft+3)[0] + (Tleft+3)[1]*(Tleft+3)[1] + (Tleft
+3)[2]*(Tleft+3)[2])
139 + ELL_3V_DOT(Tleft+6, Tleft+6)((Tleft+6)[0]*(Tleft+6)[0] + (Tleft+6)[1]*(Tleft+6)[1] + (Tleft
+6)[2]*(Tleft+6)[2])
),
140 denom_r = sqrt(ELL_3V_DOT(Tright,Tright)((Tright)[0]*(Tright)[0] + (Tright)[1]*(Tright)[1] + (Tright)
[2]*(Tright)[2])
+ ELL_3V_DOT(Tright+3, Tright+3)((Tright+3)[0]*(Tright+3)[0] + (Tright+3)[1]*(Tright+3)[1] + (
Tright+3)[2]*(Tright+3)[2])
141 + ELL_3V_DOT(Tright+6, Tright+6)((Tright+6)[0]*(Tright+6)[0] + (Tright+6)[1]*(Tright+6)[1] + (
Tright+6)[2]*(Tright+6)[2])
);
142
143 if (Tdp/(denom_l*denom_r)<dotThresh &&
144 idxright-idxleft>0.24) { /* do a recursive step */
145 double idxcenter = 0.5*(idxleft+idxright);
146 /* simply interpolate Hessian linearly */
147 double hessnew[9];
148 double evals[3],evecs[9];
149 double Tnew[9], gradnew[3];
150 int retval;
151
152 ELL_3M_LERP(hessnew,0.5,hessleft,hessright)((((hessnew)+0)[0] = ((((0.5)))*((((hessright)+0)[0]) - (((hessleft
)+0)[0])) + (((hessleft)+0)[0])), ((hessnew)+0)[1] = ((((0.5)
))*((((hessright)+0)[1]) - (((hessleft)+0)[1])) + (((hessleft
)+0)[1])), ((hessnew)+0)[2] = ((((0.5)))*((((hessright)+0)[2]
) - (((hessleft)+0)[2])) + (((hessleft)+0)[2]))), (((hessnew)
+3)[0] = ((((0.5)))*((((hessright)+3)[0]) - (((hessleft)+3)[0
])) + (((hessleft)+3)[0])), ((hessnew)+3)[1] = ((((0.5)))*(((
(hessright)+3)[1]) - (((hessleft)+3)[1])) + (((hessleft)+3)[1
])), ((hessnew)+3)[2] = ((((0.5)))*((((hessright)+3)[2]) - ((
(hessleft)+3)[2])) + (((hessleft)+3)[2]))), (((hessnew)+6)[0]
= ((((0.5)))*((((hessright)+6)[0]) - (((hessleft)+6)[0])) + (
((hessleft)+6)[0])), ((hessnew)+6)[1] = ((((0.5)))*((((hessright
)+6)[1]) - (((hessleft)+6)[1])) + (((hessleft)+6)[1])), ((hessnew
)+6)[2] = ((((0.5)))*((((hessright)+6)[2]) - (((hessleft)+6)[
2])) + (((hessleft)+6)[2]))))
;
153 ell_3m_eigensolve_d(evals, evecs, hessnew, AIR_TRUE1);
154
155 _seekHess2T(Tnew, evals, evecs, evalDiffThresh, ridge);
156
157 ELL_3V_LERP(gradnew,0.5,gleft,gright)((gradnew)[0] = (((0.5))*(((gright)[0]) - ((gleft)[0])) + ((gleft
)[0])), (gradnew)[1] = (((0.5))*(((gright)[1]) - ((gleft)[1])
) + ((gleft)[1])), (gradnew)[2] = (((0.5))*(((gright)[2]) - (
(gleft)[2])) + ((gleft)[2])))
;
158 retval = findFeatureIntersection(results, Tleft, hessleft,
159 gleft, Tnew, hessnew, gradnew,
160 idxleft, idxcenter,
161 ridge, evalDiffThresh, dotThresh);
162 retval += findFeatureIntersection(results+retval, Tnew, hessnew,
163 gradnew, Tright, hessright, gright,
164 idxcenter, idxright,
165 ridge, evalDiffThresh, dotThresh);
166 return retval;
167 } else {
168 double d1[3], d4[3];
169 ell_3mv_mul_d(d1, Tleft, gleft);
170 ELL_3V_SUB(d1,d1,gleft)((d1)[0] = (d1)[0] - (gleft)[0], (d1)[1] = (d1)[1] - (gleft)[
1], (d1)[2] = (d1)[2] - (gleft)[2])
;
171 ell_3mv_mul_d(d4, Tright, gright);
172 ELL_3V_SUB(d4,d4,gright)((d4)[0] = (d4)[0] - (gright)[0], (d4)[1] = (d4)[1] - (gright
)[1], (d4)[2] = (d4)[2] - (gright)[2])
;
173
174 if (ELL_3V_DOT(d1,d4)((d1)[0]*(d4)[0] + (d1)[1]*(d4)[1] + (d1)[2]*(d4)[2])<0) { /* mark edge as crossed */
175 /* find assumed intersection point */
176 double diff[3], dlen, alpha;
177 ELL_3V_SUB(diff,d4,d1)((diff)[0] = (d4)[0] - (d1)[0], (diff)[1] = (d4)[1] - (d1)[1]
, (diff)[2] = (d4)[2] - (d1)[2])
;
178 dlen=ELL_3V_LEN(diff)(sqrt((((diff))[0]*((diff))[0] + ((diff))[1]*((diff))[1] + ((
diff))[2]*((diff))[2])))
;
179 if (dlen>1e-5) {
180 double ap=-ELL_3V_DOT(d1,diff)((d1)[0]*(diff)[0] + (d1)[1]*(diff)[1] + (d1)[2]*(diff)[2])/dlen;
181 alpha = ap/dlen;
182 } else
183 alpha = 0.5;
184
185 *results = (1-alpha)*idxleft+alpha*idxright;
186 return 1;
187 }
188 }
189 return 0;
190}
191
192/* Assuming (simplistic) linearly interpolated Hessians and gradients,
193 * computes the analytical normal of the crease surface.
194 * The result is _not_ normalized. */
195static void
196computeGradientLin(double *result, double *T, double *g,
197 double *Txm, double *gxm, double *Txp, double *gxp,
198 double *Tym, double *gym, double *Typ, double *gyp,
199 double *Tzm, double *gzm, double *Tzp, double *gzp) {
200 double Tder[9];
201 double gder[3];
202 double tmp[3], tmp1[3], tmp2[3];
203 double derxv[3], deryv[3], derzv[3];
204 ELL_3M_SUB(Tder,Txp,Txm)((Tder)[0] = (Txp)[0] - (Txm)[0], (Tder)[1] = (Txp)[1] - (Txm
)[1], (Tder)[2] = (Txp)[2] - (Txm)[2], (Tder)[3] = (Txp)[3] -
(Txm)[3], (Tder)[4] = (Txp)[4] - (Txm)[4], (Tder)[5] = (Txp)
[5] - (Txm)[5], (Tder)[6] = (Txp)[6] - (Txm)[6], (Tder)[7] = (
Txp)[7] - (Txm)[7], (Tder)[8] = (Txp)[8] - (Txm)[8])
;
5
Within the expansion of the macro 'ELL_3M_SUB':
a
The right operand of '-' is a garbage value
205 ELL_3V_SUB(gder,gxp,gxm)((gder)[0] = (gxp)[0] - (gxm)[0], (gder)[1] = (gxp)[1] - (gxm
)[1], (gder)[2] = (gxp)[2] - (gxm)[2])
;
206 ell_3mv_mul_d(tmp,T,gder);
207 ELL_3V_SUB(tmp,tmp,gder)((tmp)[0] = (tmp)[0] - (gder)[0], (tmp)[1] = (tmp)[1] - (gder
)[1], (tmp)[2] = (tmp)[2] - (gder)[2])
;
208 ell_3mv_mul_d(derxv,Tder,g);
209 ELL_3V_ADD2(derxv,derxv,tmp)((derxv)[0] = (derxv)[0] + (tmp)[0], (derxv)[1] = (derxv)[1] +
(tmp)[1], (derxv)[2] = (derxv)[2] + (tmp)[2])
;
210
211 ELL_3M_SUB(Tder,Typ,Tym)((Tder)[0] = (Typ)[0] - (Tym)[0], (Tder)[1] = (Typ)[1] - (Tym
)[1], (Tder)[2] = (Typ)[2] - (Tym)[2], (Tder)[3] = (Typ)[3] -
(Tym)[3], (Tder)[4] = (Typ)[4] - (Tym)[4], (Tder)[5] = (Typ)
[5] - (Tym)[5], (Tder)[6] = (Typ)[6] - (Tym)[6], (Tder)[7] = (
Typ)[7] - (Tym)[7], (Tder)[8] = (Typ)[8] - (Tym)[8])
;
212 ELL_3V_SUB(gder,gyp,gym)((gder)[0] = (gyp)[0] - (gym)[0], (gder)[1] = (gyp)[1] - (gym
)[1], (gder)[2] = (gyp)[2] - (gym)[2])
;
213 ell_3mv_mul_d(tmp,T,gder);
214 ELL_3V_SUB(tmp,tmp,gder)((tmp)[0] = (tmp)[0] - (gder)[0], (tmp)[1] = (tmp)[1] - (gder
)[1], (tmp)[2] = (tmp)[2] - (gder)[2])
;
215 ell_3mv_mul_d(deryv,Tder,g);
216 ELL_3V_ADD2(deryv,deryv,tmp)((deryv)[0] = (deryv)[0] + (tmp)[0], (deryv)[1] = (deryv)[1] +
(tmp)[1], (deryv)[2] = (deryv)[2] + (tmp)[2])
;
217
218 ELL_3M_SUB(Tder,Tzp,Tzm)((Tder)[0] = (Tzp)[0] - (Tzm)[0], (Tder)[1] = (Tzp)[1] - (Tzm
)[1], (Tder)[2] = (Tzp)[2] - (Tzm)[2], (Tder)[3] = (Tzp)[3] -
(Tzm)[3], (Tder)[4] = (Tzp)[4] - (Tzm)[4], (Tder)[5] = (Tzp)
[5] - (Tzm)[5], (Tder)[6] = (Tzp)[6] - (Tzm)[6], (Tder)[7] = (
Tzp)[7] - (Tzm)[7], (Tder)[8] = (Tzp)[8] - (Tzm)[8])
;
219 ELL_3V_SUB(gder,gzp,gzm)((gder)[0] = (gzp)[0] - (gzm)[0], (gder)[1] = (gzp)[1] - (gzm
)[1], (gder)[2] = (gzp)[2] - (gzm)[2])
;
220 ell_3mv_mul_d(tmp,T,gder);
221 ELL_3V_SUB(tmp,tmp,gder)((tmp)[0] = (tmp)[0] - (gder)[0], (tmp)[1] = (tmp)[1] - (gder
)[1], (tmp)[2] = (tmp)[2] - (gder)[2])
;
222 ell_3mv_mul_d(derzv,Tder,g);
223 ELL_3V_ADD2(derzv,derzv,tmp)((derzv)[0] = (derzv)[0] + (tmp)[0], (derzv)[1] = (derzv)[1] +
(tmp)[1], (derzv)[2] = (derzv)[2] + (tmp)[2])
;
224
225 /* accumulate a gradient */
226 tmp1[0]=derxv[0]; tmp1[1]=deryv[0]; tmp1[2]=derzv[0];
227 tmp2[0]=derxv[1]; tmp2[1]=deryv[1]; tmp2[2]=derzv[1];
228 if (ELL_3V_DOT(tmp1,tmp2)((tmp1)[0]*(tmp2)[0] + (tmp1)[1]*(tmp2)[1] + (tmp1)[2]*(tmp2)
[2])
<0)
229 ELL_3V_SCALE(tmp2,-1.0,tmp2)((tmp2)[0] = (-1.0)*(tmp2)[0], (tmp2)[1] = (-1.0)*(tmp2)[1], (
tmp2)[2] = (-1.0)*(tmp2)[2])
;
230 ELL_3V_ADD2(tmp1,tmp1,tmp2)((tmp1)[0] = (tmp1)[0] + (tmp2)[0], (tmp1)[1] = (tmp1)[1] + (
tmp2)[1], (tmp1)[2] = (tmp1)[2] + (tmp2)[2])
;
231 tmp2[0]=derxv[2]; tmp2[1]=deryv[2]; tmp2[2]=derzv[2];
232 if (ELL_3V_DOT(tmp1,tmp2)((tmp1)[0]*(tmp2)[0] + (tmp1)[1]*(tmp2)[1] + (tmp1)[2]*(tmp2)
[2])
<0)
233 ELL_3V_SCALE(tmp2,-1.0,tmp2)((tmp2)[0] = (-1.0)*(tmp2)[0], (tmp2)[1] = (-1.0)*(tmp2)[1], (
tmp2)[2] = (-1.0)*(tmp2)[2])
;
234 ELL_3V_ADD2(result,tmp1,tmp2)((result)[0] = (tmp1)[0] + (tmp2)[0], (result)[1] = (tmp1)[1]
+ (tmp2)[1], (result)[2] = (tmp1)[2] + (tmp2)[2])
;
235}
236
237/* Given a unique edge ID and an intersection point given by some value
238 * alpha \in [0,1], compute the crease surface normal at that point */
239static void
240computeEdgeGradient(seekContext *sctx, baggage *bag, double *res,
241 unsigned int xi, unsigned int yi, char edgeid, double alpha)
242{
243 double Txm[9], Txp[9], Tym[9], Typ[9], Tzm[9], Tzp[9], T[9],
244 gxm[3], gxp[3], gym[3], gyp[3], gzm[3], gzp[3], g[3];
245
246 unsigned int sx = AIR_CAST(unsigned int, sctx->sx)((unsigned int)(sctx->sx));
247 unsigned int sy = AIR_CAST(unsigned int, sctx->sy)((unsigned int)(sctx->sy));
248 unsigned int sz = AIR_CAST(unsigned int, sctx->sz)((unsigned int)(sctx->sz));
249 unsigned int si = xi + sx*yi;
250 unsigned int six = xi + 1 + sx*yi, siX = xi - 1 + sx*yi;
251 unsigned int siy = xi + sx*(yi+1), siY = xi + sx*(yi-1);
252 unsigned int sixy = xi + 1 + sx*(yi+1),
253 sixY = xi + 1 + sx*(yi-1),
254 siXy = xi - 1 + sx*(yi+1);
255 /* many special cases needed to fill Txm, gxm, etc. :-( */
256 switch (edgeid) {
257 case 0:
258 ELL_3M_LERP(T, alpha, sctx->t + 9*(0+2*si), sctx->t + 9*(0+2*six))((((T)+0)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*six))+0)[
0]) - (((sctx->t + 9*(0+2*si))+0)[0])) + (((sctx->t + 9
*(0+2*si))+0)[0])), ((T)+0)[1] = ((((alpha)))*((((sctx->t +
9*(0+2*six))+0)[1]) - (((sctx->t + 9*(0+2*si))+0)[1])) + (
((sctx->t + 9*(0+2*si))+0)[1])), ((T)+0)[2] = ((((alpha)))
*((((sctx->t + 9*(0+2*six))+0)[2]) - (((sctx->t + 9*(0+
2*si))+0)[2])) + (((sctx->t + 9*(0+2*si))+0)[2]))), (((T)+
3)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*six))+3)[0]) - (
((sctx->t + 9*(0+2*si))+3)[0])) + (((sctx->t + 9*(0+2*si
))+3)[0])), ((T)+3)[1] = ((((alpha)))*((((sctx->t + 9*(0+2
*six))+3)[1]) - (((sctx->t + 9*(0+2*si))+3)[1])) + (((sctx
->t + 9*(0+2*si))+3)[1])), ((T)+3)[2] = ((((alpha)))*((((sctx
->t + 9*(0+2*six))+3)[2]) - (((sctx->t + 9*(0+2*si))+3)
[2])) + (((sctx->t + 9*(0+2*si))+3)[2]))), (((T)+6)[0] = (
(((alpha)))*((((sctx->t + 9*(0+2*six))+6)[0]) - (((sctx->
t + 9*(0+2*si))+6)[0])) + (((sctx->t + 9*(0+2*si))+6)[0]))
, ((T)+6)[1] = ((((alpha)))*((((sctx->t + 9*(0+2*six))+6)[
1]) - (((sctx->t + 9*(0+2*si))+6)[1])) + (((sctx->t + 9
*(0+2*si))+6)[1])), ((T)+6)[2] = ((((alpha)))*((((sctx->t +
9*(0+2*six))+6)[2]) - (((sctx->t + 9*(0+2*si))+6)[2])) + (
((sctx->t + 9*(0+2*si))+6)[2]))))
;
259 ELL_3V_LERP(g, alpha, sctx->grad + 3*(0+2*si), sctx->grad + 3*(0+2*six))((g)[0] = (((alpha))*(((sctx->grad + 3*(0+2*six))[0]) - ((
sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3*(0+2*si
))[0])), (g)[1] = (((alpha))*(((sctx->grad + 3*(0+2*six))[
1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx->grad + 3
*(0+2*si))[1])), (g)[2] = (((alpha))*(((sctx->grad + 3*(0+
2*six))[2]) - ((sctx->grad + 3*(0+2*si))[2])) + ((sctx->
grad + 3*(0+2*si))[2])))
;
260 ELL_3M_LERP(Tzp, alpha, sctx->t + 9*(1+2*si), sctx->t + 9*(1+2*six))((((Tzp)+0)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*six))+0
)[0]) - (((sctx->t + 9*(1+2*si))+0)[0])) + (((sctx->t +
9*(1+2*si))+0)[0])), ((Tzp)+0)[1] = ((((alpha)))*((((sctx->
t + 9*(1+2*six))+0)[1]) - (((sctx->t + 9*(1+2*si))+0)[1]))
+ (((sctx->t + 9*(1+2*si))+0)[1])), ((Tzp)+0)[2] = ((((alpha
)))*((((sctx->t + 9*(1+2*six))+0)[2]) - (((sctx->t + 9*
(1+2*si))+0)[2])) + (((sctx->t + 9*(1+2*si))+0)[2]))), (((
Tzp)+3)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*six))+3)[0]
) - (((sctx->t + 9*(1+2*si))+3)[0])) + (((sctx->t + 9*(
1+2*si))+3)[0])), ((Tzp)+3)[1] = ((((alpha)))*((((sctx->t +
9*(1+2*six))+3)[1]) - (((sctx->t + 9*(1+2*si))+3)[1])) + (
((sctx->t + 9*(1+2*si))+3)[1])), ((Tzp)+3)[2] = ((((alpha)
))*((((sctx->t + 9*(1+2*six))+3)[2]) - (((sctx->t + 9*(
1+2*si))+3)[2])) + (((sctx->t + 9*(1+2*si))+3)[2]))), (((Tzp
)+6)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*six))+6)[0]) -
(((sctx->t + 9*(1+2*si))+6)[0])) + (((sctx->t + 9*(1+2
*si))+6)[0])), ((Tzp)+6)[1] = ((((alpha)))*((((sctx->t + 9
*(1+2*six))+6)[1]) - (((sctx->t + 9*(1+2*si))+6)[1])) + ((
(sctx->t + 9*(1+2*si))+6)[1])), ((Tzp)+6)[2] = ((((alpha))
)*((((sctx->t + 9*(1+2*six))+6)[2]) - (((sctx->t + 9*(1
+2*si))+6)[2])) + (((sctx->t + 9*(1+2*si))+6)[2]))))
;
261 ELL_3V_LERP(gzp, alpha, sctx->grad + 3*(1+2*si), sctx->grad + 3*(1+2*six))((gzp)[0] = (((alpha))*(((sctx->grad + 3*(1+2*six))[0]) - (
(sctx->grad + 3*(1+2*si))[0])) + ((sctx->grad + 3*(1+2*
si))[0])), (gzp)[1] = (((alpha))*(((sctx->grad + 3*(1+2*six
))[1]) - ((sctx->grad + 3*(1+2*si))[1])) + ((sctx->grad
+ 3*(1+2*si))[1])), (gzp)[2] = (((alpha))*(((sctx->grad +
3*(1+2*six))[2]) - ((sctx->grad + 3*(1+2*si))[2])) + ((sctx
->grad + 3*(1+2*si))[2])))
;
262 if (bag->zi==0) {
263 ELL_3M_COPY(Tzm, T)((((Tzm)+0)[0] = ((T)+0)[0], ((Tzm)+0)[1] = ((T)+0)[1], ((Tzm
)+0)[2] = ((T)+0)[2]), (((Tzm)+3)[0] = ((T)+3)[0], ((Tzm)+3)[
1] = ((T)+3)[1], ((Tzm)+3)[2] = ((T)+3)[2]), (((Tzm)+6)[0] = (
(T)+6)[0], ((Tzm)+6)[1] = ((T)+6)[1], ((Tzm)+6)[2] = ((T)+6)[
2]))
; ELL_3V_COPY(gzm, g)((gzm)[0] = (g)[0], (gzm)[1] = (g)[1], (gzm)[2] = (g)[2]);
264 } else {
265 ELL_3M_LERP(Tzm, alpha, sctx->tcontext + 9*(0+2*si),((((Tzm)+0)[0] = ((((alpha)))*((((sctx->tcontext + 9*(0+2*
six))+0)[0]) - (((sctx->tcontext + 9*(0+2*si))+0)[0])) + (
((sctx->tcontext + 9*(0+2*si))+0)[0])), ((Tzm)+0)[1] = (((
(alpha)))*((((sctx->tcontext + 9*(0+2*six))+0)[1]) - (((sctx
->tcontext + 9*(0+2*si))+0)[1])) + (((sctx->tcontext + 9
*(0+2*si))+0)[1])), ((Tzm)+0)[2] = ((((alpha)))*((((sctx->
tcontext + 9*(0+2*six))+0)[2]) - (((sctx->tcontext + 9*(0+
2*si))+0)[2])) + (((sctx->tcontext + 9*(0+2*si))+0)[2]))),
(((Tzm)+3)[0] = ((((alpha)))*((((sctx->tcontext + 9*(0+2*
six))+3)[0]) - (((sctx->tcontext + 9*(0+2*si))+3)[0])) + (
((sctx->tcontext + 9*(0+2*si))+3)[0])), ((Tzm)+3)[1] = (((
(alpha)))*((((sctx->tcontext + 9*(0+2*six))+3)[1]) - (((sctx
->tcontext + 9*(0+2*si))+3)[1])) + (((sctx->tcontext + 9
*(0+2*si))+3)[1])), ((Tzm)+3)[2] = ((((alpha)))*((((sctx->
tcontext + 9*(0+2*six))+3)[2]) - (((sctx->tcontext + 9*(0+
2*si))+3)[2])) + (((sctx->tcontext + 9*(0+2*si))+3)[2]))),
(((Tzm)+6)[0] = ((((alpha)))*((((sctx->tcontext + 9*(0+2*
six))+6)[0]) - (((sctx->tcontext + 9*(0+2*si))+6)[0])) + (
((sctx->tcontext + 9*(0+2*si))+6)[0])), ((Tzm)+6)[1] = (((
(alpha)))*((((sctx->tcontext + 9*(0+2*six))+6)[1]) - (((sctx
->tcontext + 9*(0+2*si))+6)[1])) + (((sctx->tcontext + 9
*(0+2*si))+6)[1])), ((Tzm)+6)[2] = ((((alpha)))*((((sctx->
tcontext + 9*(0+2*six))+6)[2]) - (((sctx->tcontext + 9*(0+
2*si))+6)[2])) + (((sctx->tcontext + 9*(0+2*si))+6)[2]))))
266 sctx->tcontext + 9*(0+2*six))((((Tzm)+0)[0] = ((((alpha)))*((((sctx->tcontext + 9*(0+2*
six))+0)[0]) - (((sctx->tcontext + 9*(0+2*si))+0)[0])) + (
((sctx->tcontext + 9*(0+2*si))+0)[0])), ((Tzm)+0)[1] = (((
(alpha)))*((((sctx->tcontext + 9*(0+2*six))+0)[1]) - (((sctx
->tcontext + 9*(0+2*si))+0)[1])) + (((sctx->tcontext + 9
*(0+2*si))+0)[1])), ((Tzm)+0)[2] = ((((alpha)))*((((sctx->
tcontext + 9*(0+2*six))+0)[2]) - (((sctx->tcontext + 9*(0+
2*si))+0)[2])) + (((sctx->tcontext + 9*(0+2*si))+0)[2]))),
(((Tzm)+3)[0] = ((((alpha)))*((((sctx->tcontext + 9*(0+2*
six))+3)[0]) - (((sctx->tcontext + 9*(0+2*si))+3)[0])) + (
((sctx->tcontext + 9*(0+2*si))+3)[0])), ((Tzm)+3)[1] = (((
(alpha)))*((((sctx->tcontext + 9*(0+2*six))+3)[1]) - (((sctx
->tcontext + 9*(0+2*si))+3)[1])) + (((sctx->tcontext + 9
*(0+2*si))+3)[1])), ((Tzm)+3)[2] = ((((alpha)))*((((sctx->
tcontext + 9*(0+2*six))+3)[2]) - (((sctx->tcontext + 9*(0+
2*si))+3)[2])) + (((sctx->tcontext + 9*(0+2*si))+3)[2]))),
(((Tzm)+6)[0] = ((((alpha)))*((((sctx->tcontext + 9*(0+2*
six))+6)[0]) - (((sctx->tcontext + 9*(0+2*si))+6)[0])) + (
((sctx->tcontext + 9*(0+2*si))+6)[0])), ((Tzm)+6)[1] = (((
(alpha)))*((((sctx->tcontext + 9*(0+2*six))+6)[1]) - (((sctx
->tcontext + 9*(0+2*si))+6)[1])) + (((sctx->tcontext + 9
*(0+2*si))+6)[1])), ((Tzm)+6)[2] = ((((alpha)))*((((sctx->
tcontext + 9*(0+2*six))+6)[2]) - (((sctx->tcontext + 9*(0+
2*si))+6)[2])) + (((sctx->tcontext + 9*(0+2*si))+6)[2]))))
;
267 ELL_3V_LERP(gzm, alpha, sctx->gradcontext + 3*(0+2*si),((gzm)[0] = (((alpha))*(((sctx->gradcontext + 3*(0+2*six))
[0]) - ((sctx->gradcontext + 3*(0+2*si))[0])) + ((sctx->
gradcontext + 3*(0+2*si))[0])), (gzm)[1] = (((alpha))*(((sctx
->gradcontext + 3*(0+2*six))[1]) - ((sctx->gradcontext +
3*(0+2*si))[1])) + ((sctx->gradcontext + 3*(0+2*si))[1]))
, (gzm)[2] = (((alpha))*(((sctx->gradcontext + 3*(0+2*six)
)[2]) - ((sctx->gradcontext + 3*(0+2*si))[2])) + ((sctx->
gradcontext + 3*(0+2*si))[2])))
268 sctx->gradcontext + 3*(0+2*six))((gzm)[0] = (((alpha))*(((sctx->gradcontext + 3*(0+2*six))
[0]) - ((sctx->gradcontext + 3*(0+2*si))[0])) + ((sctx->
gradcontext + 3*(0+2*si))[0])), (gzm)[1] = (((alpha))*(((sctx
->gradcontext + 3*(0+2*six))[1]) - ((sctx->gradcontext +
3*(0+2*si))[1])) + ((sctx->gradcontext + 3*(0+2*si))[1]))
, (gzm)[2] = (((alpha))*(((sctx->gradcontext + 3*(0+2*six)
)[2]) - ((sctx->gradcontext + 3*(0+2*si))[2])) + ((sctx->
gradcontext + 3*(0+2*si))[2])))
;
269 ELL_3M_SCALE(Tzm, 0.5, Tzm)((((Tzm)+0)[0] = ((0.5))*((Tzm)+0)[0], ((Tzm)+0)[1] = ((0.5))
*((Tzm)+0)[1], ((Tzm)+0)[2] = ((0.5))*((Tzm)+0)[2]), (((Tzm)+
3)[0] = ((0.5))*((Tzm)+3)[0], ((Tzm)+3)[1] = ((0.5))*((Tzm)+3
)[1], ((Tzm)+3)[2] = ((0.5))*((Tzm)+3)[2]), (((Tzm)+6)[0] = (
(0.5))*((Tzm)+6)[0], ((Tzm)+6)[1] = ((0.5))*((Tzm)+6)[1], ((Tzm
)+6)[2] = ((0.5))*((Tzm)+6)[2]))
; ELL_3M_SCALE(Tzp, 0.5, Tzp)((((Tzp)+0)[0] = ((0.5))*((Tzp)+0)[0], ((Tzp)+0)[1] = ((0.5))
*((Tzp)+0)[1], ((Tzp)+0)[2] = ((0.5))*((Tzp)+0)[2]), (((Tzp)+
3)[0] = ((0.5))*((Tzp)+3)[0], ((Tzp)+3)[1] = ((0.5))*((Tzp)+3
)[1], ((Tzp)+3)[2] = ((0.5))*((Tzp)+3)[2]), (((Tzp)+6)[0] = (
(0.5))*((Tzp)+6)[0], ((Tzp)+6)[1] = ((0.5))*((Tzp)+6)[1], ((Tzp
)+6)[2] = ((0.5))*((Tzp)+6)[2]))
;
270 ELL_3V_SCALE(gzm, 0.5, gzm)((gzm)[0] = (0.5)*(gzm)[0], (gzm)[1] = (0.5)*(gzm)[1], (gzm)[
2] = (0.5)*(gzm)[2])
; ELL_3V_SCALE(gzp, 0.5, gzp)((gzp)[0] = (0.5)*(gzp)[0], (gzp)[1] = (0.5)*(gzp)[1], (gzp)[
2] = (0.5)*(gzp)[2])
;
271 }
272 if (yi==0) {
273 ELL_3M_COPY(Tym, T)((((Tym)+0)[0] = ((T)+0)[0], ((Tym)+0)[1] = ((T)+0)[1], ((Tym
)+0)[2] = ((T)+0)[2]), (((Tym)+3)[0] = ((T)+3)[0], ((Tym)+3)[
1] = ((T)+3)[1], ((Tym)+3)[2] = ((T)+3)[2]), (((Tym)+6)[0] = (
(T)+6)[0], ((Tym)+6)[1] = ((T)+6)[1], ((Tym)+6)[2] = ((T)+6)[
2]))
; ELL_3V_COPY(gym, g)((gym)[0] = (g)[0], (gym)[1] = (g)[1], (gym)[2] = (g)[2]);
274 } else {
275 ELL_3M_LERP(Tym, alpha, sctx->t + 9*(0+2*siY), sctx->t + 9*(0+2*sixY))((((Tym)+0)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*sixY))+
0)[0]) - (((sctx->t + 9*(0+2*siY))+0)[0])) + (((sctx->t
+ 9*(0+2*siY))+0)[0])), ((Tym)+0)[1] = ((((alpha)))*((((sctx
->t + 9*(0+2*sixY))+0)[1]) - (((sctx->t + 9*(0+2*siY))+
0)[1])) + (((sctx->t + 9*(0+2*siY))+0)[1])), ((Tym)+0)[2] =
((((alpha)))*((((sctx->t + 9*(0+2*sixY))+0)[2]) - (((sctx
->t + 9*(0+2*siY))+0)[2])) + (((sctx->t + 9*(0+2*siY))+
0)[2]))), (((Tym)+3)[0] = ((((alpha)))*((((sctx->t + 9*(0+
2*sixY))+3)[0]) - (((sctx->t + 9*(0+2*siY))+3)[0])) + (((sctx
->t + 9*(0+2*siY))+3)[0])), ((Tym)+3)[1] = ((((alpha)))*((
((sctx->t + 9*(0+2*sixY))+3)[1]) - (((sctx->t + 9*(0+2*
siY))+3)[1])) + (((sctx->t + 9*(0+2*siY))+3)[1])), ((Tym)+
3)[2] = ((((alpha)))*((((sctx->t + 9*(0+2*sixY))+3)[2]) - (
((sctx->t + 9*(0+2*siY))+3)[2])) + (((sctx->t + 9*(0+2*
siY))+3)[2]))), (((Tym)+6)[0] = ((((alpha)))*((((sctx->t +
9*(0+2*sixY))+6)[0]) - (((sctx->t + 9*(0+2*siY))+6)[0])) +
(((sctx->t + 9*(0+2*siY))+6)[0])), ((Tym)+6)[1] = ((((alpha
)))*((((sctx->t + 9*(0+2*sixY))+6)[1]) - (((sctx->t + 9
*(0+2*siY))+6)[1])) + (((sctx->t + 9*(0+2*siY))+6)[1])), (
(Tym)+6)[2] = ((((alpha)))*((((sctx->t + 9*(0+2*sixY))+6)[
2]) - (((sctx->t + 9*(0+2*siY))+6)[2])) + (((sctx->t + 9
*(0+2*siY))+6)[2]))))
;
276 ELL_3V_LERP(gym, alpha, sctx->grad + 3*(0+2*siY),((gym)[0] = (((alpha))*(((sctx->grad + 3*(0+2*sixY))[0]) -
((sctx->grad + 3*(0+2*siY))[0])) + ((sctx->grad + 3*(0
+2*siY))[0])), (gym)[1] = (((alpha))*(((sctx->grad + 3*(0+
2*sixY))[1]) - ((sctx->grad + 3*(0+2*siY))[1])) + ((sctx->
grad + 3*(0+2*siY))[1])), (gym)[2] = (((alpha))*(((sctx->grad
+ 3*(0+2*sixY))[2]) - ((sctx->grad + 3*(0+2*siY))[2])) + (
(sctx->grad + 3*(0+2*siY))[2])))
277 sctx->grad + 3*(0+2*sixY))((gym)[0] = (((alpha))*(((sctx->grad + 3*(0+2*sixY))[0]) -
((sctx->grad + 3*(0+2*siY))[0])) + ((sctx->grad + 3*(0
+2*siY))[0])), (gym)[1] = (((alpha))*(((sctx->grad + 3*(0+
2*sixY))[1]) - ((sctx->grad + 3*(0+2*siY))[1])) + ((sctx->
grad + 3*(0+2*siY))[1])), (gym)[2] = (((alpha))*(((sctx->grad
+ 3*(0+2*sixY))[2]) - ((sctx->grad + 3*(0+2*siY))[2])) + (
(sctx->grad + 3*(0+2*siY))[2])))
;
278 }
279 if (yi==sy-1) {
280 ELL_3M_COPY(Typ, T)((((Typ)+0)[0] = ((T)+0)[0], ((Typ)+0)[1] = ((T)+0)[1], ((Typ
)+0)[2] = ((T)+0)[2]), (((Typ)+3)[0] = ((T)+3)[0], ((Typ)+3)[
1] = ((T)+3)[1], ((Typ)+3)[2] = ((T)+3)[2]), (((Typ)+6)[0] = (
(T)+6)[0], ((Typ)+6)[1] = ((T)+6)[1], ((Typ)+6)[2] = ((T)+6)[
2]))
; ELL_3V_COPY(gyp, g)((gyp)[0] = (g)[0], (gyp)[1] = (g)[1], (gyp)[2] = (g)[2]);
281 } else {
282 ELL_3M_LERP(Typ, alpha, sctx->t + 9*(0+2*siy), sctx->t + 9*(0+2*sixy))((((Typ)+0)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*sixy))+
0)[0]) - (((sctx->t + 9*(0+2*siy))+0)[0])) + (((sctx->t
+ 9*(0+2*siy))+0)[0])), ((Typ)+0)[1] = ((((alpha)))*((((sctx
->t + 9*(0+2*sixy))+0)[1]) - (((sctx->t + 9*(0+2*siy))+
0)[1])) + (((sctx->t + 9*(0+2*siy))+0)[1])), ((Typ)+0)[2] =
((((alpha)))*((((sctx->t + 9*(0+2*sixy))+0)[2]) - (((sctx
->t + 9*(0+2*siy))+0)[2])) + (((sctx->t + 9*(0+2*siy))+
0)[2]))), (((Typ)+3)[0] = ((((alpha)))*((((sctx->t + 9*(0+
2*sixy))+3)[0]) - (((sctx->t + 9*(0+2*siy))+3)[0])) + (((sctx
->t + 9*(0+2*siy))+3)[0])), ((Typ)+3)[1] = ((((alpha)))*((
((sctx->t + 9*(0+2*sixy))+3)[1]) - (((sctx->t + 9*(0+2*
siy))+3)[1])) + (((sctx->t + 9*(0+2*siy))+3)[1])), ((Typ)+
3)[2] = ((((alpha)))*((((sctx->t + 9*(0+2*sixy))+3)[2]) - (
((sctx->t + 9*(0+2*siy))+3)[2])) + (((sctx->t + 9*(0+2*
siy))+3)[2]))), (((Typ)+6)[0] = ((((alpha)))*((((sctx->t +
9*(0+2*sixy))+6)[0]) - (((sctx->t + 9*(0+2*siy))+6)[0])) +
(((sctx->t + 9*(0+2*siy))+6)[0])), ((Typ)+6)[1] = ((((alpha
)))*((((sctx->t + 9*(0+2*sixy))+6)[1]) - (((sctx->t + 9
*(0+2*siy))+6)[1])) + (((sctx->t + 9*(0+2*siy))+6)[1])), (
(Typ)+6)[2] = ((((alpha)))*((((sctx->t + 9*(0+2*sixy))+6)[
2]) - (((sctx->t + 9*(0+2*siy))+6)[2])) + (((sctx->t + 9
*(0+2*siy))+6)[2]))))
;
283 ELL_3V_LERP(gyp, alpha, sctx->grad + 3*(0+2*siy),((gyp)[0] = (((alpha))*(((sctx->grad + 3*(0+2*sixy))[0]) -
((sctx->grad + 3*(0+2*siy))[0])) + ((sctx->grad + 3*(0
+2*siy))[0])), (gyp)[1] = (((alpha))*(((sctx->grad + 3*(0+
2*sixy))[1]) - ((sctx->grad + 3*(0+2*siy))[1])) + ((sctx->
grad + 3*(0+2*siy))[1])), (gyp)[2] = (((alpha))*(((sctx->grad
+ 3*(0+2*sixy))[2]) - ((sctx->grad + 3*(0+2*siy))[2])) + (
(sctx->grad + 3*(0+2*siy))[2])))
284 sctx->grad + 3*(0+2*sixy))((gyp)[0] = (((alpha))*(((sctx->grad + 3*(0+2*sixy))[0]) -
((sctx->grad + 3*(0+2*siy))[0])) + ((sctx->grad + 3*(0
+2*siy))[0])), (gyp)[1] = (((alpha))*(((sctx->grad + 3*(0+
2*sixy))[1]) - ((sctx->grad + 3*(0+2*siy))[1])) + ((sctx->
grad + 3*(0+2*siy))[1])), (gyp)[2] = (((alpha))*(((sctx->grad
+ 3*(0+2*sixy))[2]) - ((sctx->grad + 3*(0+2*siy))[2])) + (
(sctx->grad + 3*(0+2*siy))[2])))
;
285 }
286 if (yi!=0 && yi!=sy-1) {
287 ELL_3M_SCALE(Tym, 0.5, Tym)((((Tym)+0)[0] = ((0.5))*((Tym)+0)[0], ((Tym)+0)[1] = ((0.5))
*((Tym)+0)[1], ((Tym)+0)[2] = ((0.5))*((Tym)+0)[2]), (((Tym)+
3)[0] = ((0.5))*((Tym)+3)[0], ((Tym)+3)[1] = ((0.5))*((Tym)+3
)[1], ((Tym)+3)[2] = ((0.5))*((Tym)+3)[2]), (((Tym)+6)[0] = (
(0.5))*((Tym)+6)[0], ((Tym)+6)[1] = ((0.5))*((Tym)+6)[1], ((Tym
)+6)[2] = ((0.5))*((Tym)+6)[2]))
; ELL_3M_SCALE(Typ, 0.5, Typ)((((Typ)+0)[0] = ((0.5))*((Typ)+0)[0], ((Typ)+0)[1] = ((0.5))
*((Typ)+0)[1], ((Typ)+0)[2] = ((0.5))*((Typ)+0)[2]), (((Typ)+
3)[0] = ((0.5))*((Typ)+3)[0], ((Typ)+3)[1] = ((0.5))*((Typ)+3
)[1], ((Typ)+3)[2] = ((0.5))*((Typ)+3)[2]), (((Typ)+6)[0] = (
(0.5))*((Typ)+6)[0], ((Typ)+6)[1] = ((0.5))*((Typ)+6)[1], ((Typ
)+6)[2] = ((0.5))*((Typ)+6)[2]))
;
288 ELL_3V_SCALE(gym, 0.5, gym)((gym)[0] = (0.5)*(gym)[0], (gym)[1] = (0.5)*(gym)[1], (gym)[
2] = (0.5)*(gym)[2])
; ELL_3V_SCALE(gyp, 0.5, gyp)((gyp)[0] = (0.5)*(gyp)[0], (gyp)[1] = (0.5)*(gyp)[1], (gyp)[
2] = (0.5)*(gyp)[2])
;
289 }
290 computeGradientLin(res, T, g,
291 sctx->t + 9*(0+2*si), sctx->grad + 3*(0+2*si),
292 sctx->t + 9*(0+2*six), sctx->grad + 3*(0+2*six),
293 Tym, gym, Typ, gyp,
294 Tzm, gzm, Tzp, gzp);
295 break;
296 case 1:
297 ELL_3M_LERP(T, alpha, sctx->t + 9*(0+2*si), sctx->t + 9*(0+2*siy))((((T)+0)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*siy))+0)[
0]) - (((sctx->t + 9*(0+2*si))+0)[0])) + (((sctx->t + 9
*(0+2*si))+0)[0])), ((T)+0)[1] = ((((alpha)))*((((sctx->t +
9*(0+2*siy))+0)[1]) - (((sctx->t + 9*(0+2*si))+0)[1])) + (
((sctx->t + 9*(0+2*si))+0)[1])), ((T)+0)[2] = ((((alpha)))
*((((sctx->t + 9*(0+2*siy))+0)[2]) - (((sctx->t + 9*(0+
2*si))+0)[2])) + (((sctx->t + 9*(0+2*si))+0)[2]))), (((T)+
3)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*siy))+3)[0]) - (
((sctx->t + 9*(0+2*si))+3)[0])) + (((sctx->t + 9*(0+2*si
))+3)[0])), ((T)+3)[1] = ((((alpha)))*((((sctx->t + 9*(0+2
*siy))+3)[1]) - (((sctx->t + 9*(0+2*si))+3)[1])) + (((sctx
->t + 9*(0+2*si))+3)[1])), ((T)+3)[2] = ((((alpha)))*((((sctx
->t + 9*(0+2*siy))+3)[2]) - (((sctx->t + 9*(0+2*si))+3)
[2])) + (((sctx->t + 9*(0+2*si))+3)[2]))), (((T)+6)[0] = (
(((alpha)))*((((sctx->t + 9*(0+2*siy))+6)[0]) - (((sctx->
t + 9*(0+2*si))+6)[0])) + (((sctx->t + 9*(0+2*si))+6)[0]))
, ((T)+6)[1] = ((((alpha)))*((((sctx->t + 9*(0+2*siy))+6)[
1]) - (((sctx->t + 9*(0+2*si))+6)[1])) + (((sctx->t + 9
*(0+2*si))+6)[1])), ((T)+6)[2] = ((((alpha)))*((((sctx->t +
9*(0+2*siy))+6)[2]) - (((sctx->t + 9*(0+2*si))+6)[2])) + (
((sctx->t + 9*(0+2*si))+6)[2]))))
;
298 ELL_3V_LERP(g, alpha, sctx->grad + 3*(0+2*si), sctx->grad + 3*(0+2*siy))((g)[0] = (((alpha))*(((sctx->grad + 3*(0+2*siy))[0]) - ((
sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3*(0+2*si
))[0])), (g)[1] = (((alpha))*(((sctx->grad + 3*(0+2*siy))[
1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx->grad + 3
*(0+2*si))[1])), (g)[2] = (((alpha))*(((sctx->grad + 3*(0+
2*siy))[2]) - ((sctx->grad + 3*(0+2*si))[2])) + ((sctx->
grad + 3*(0+2*si))[2])))
;
299 ELL_3M_LERP(Tzp, alpha, sctx->t + 9*(1+2*si), sctx->t + 9*(1+2*siy))((((Tzp)+0)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*siy))+0
)[0]) - (((sctx->t + 9*(1+2*si))+0)[0])) + (((sctx->t +
9*(1+2*si))+0)[0])), ((Tzp)+0)[1] = ((((alpha)))*((((sctx->
t + 9*(1+2*siy))+0)[1]) - (((sctx->t + 9*(1+2*si))+0)[1]))
+ (((sctx->t + 9*(1+2*si))+0)[1])), ((Tzp)+0)[2] = ((((alpha
)))*((((sctx->t + 9*(1+2*siy))+0)[2]) - (((sctx->t + 9*
(1+2*si))+0)[2])) + (((sctx->t + 9*(1+2*si))+0)[2]))), (((
Tzp)+3)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*siy))+3)[0]
) - (((sctx->t + 9*(1+2*si))+3)[0])) + (((sctx->t + 9*(
1+2*si))+3)[0])), ((Tzp)+3)[1] = ((((alpha)))*((((sctx->t +
9*(1+2*siy))+3)[1]) - (((sctx->t + 9*(1+2*si))+3)[1])) + (
((sctx->t + 9*(1+2*si))+3)[1])), ((Tzp)+3)[2] = ((((alpha)
))*((((sctx->t + 9*(1+2*siy))+3)[2]) - (((sctx->t + 9*(
1+2*si))+3)[2])) + (((sctx->t + 9*(1+2*si))+3)[2]))), (((Tzp
)+6)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*siy))+6)[0]) -
(((sctx->t + 9*(1+2*si))+6)[0])) + (((sctx->t + 9*(1+2
*si))+6)[0])), ((Tzp)+6)[1] = ((((alpha)))*((((sctx->t + 9
*(1+2*siy))+6)[1]) - (((sctx->t + 9*(1+2*si))+6)[1])) + ((
(sctx->t + 9*(1+2*si))+6)[1])), ((Tzp)+6)[2] = ((((alpha))
)*((((sctx->t + 9*(1+2*siy))+6)[2]) - (((sctx->t + 9*(1
+2*si))+6)[2])) + (((sctx->t + 9*(1+2*si))+6)[2]))))
;
300 ELL_3V_LERP(gzp, alpha, sctx->grad + 3*(1+2*si), sctx->grad + 3*(1+2*siy))((gzp)[0] = (((alpha))*(((sctx->grad + 3*(1+2*siy))[0]) - (
(sctx->grad + 3*(1+2*si))[0])) + ((sctx->grad + 3*(1+2*
si))[0])), (gzp)[1] = (((alpha))*(((sctx->grad + 3*(1+2*siy
))[1]) - ((sctx->grad + 3*(1+2*si))[1])) + ((sctx->grad
+ 3*(1+2*si))[1])), (gzp)[2] = (((alpha))*(((sctx->grad +
3*(1+2*siy))[2]) - ((sctx->grad + 3*(1+2*si))[2])) + ((sctx
->grad + 3*(1+2*si))[2])))
;
301 if (bag->zi==0) {
302 ELL_3M_COPY(Tzm, T)((((Tzm)+0)[0] = ((T)+0)[0], ((Tzm)+0)[1] = ((T)+0)[1], ((Tzm
)+0)[2] = ((T)+0)[2]), (((Tzm)+3)[0] = ((T)+3)[0], ((Tzm)+3)[
1] = ((T)+3)[1], ((Tzm)+3)[2] = ((T)+3)[2]), (((Tzm)+6)[0] = (
(T)+6)[0], ((Tzm)+6)[1] = ((T)+6)[1], ((Tzm)+6)[2] = ((T)+6)[
2]))
; ELL_3V_COPY(gzm, g)((gzm)[0] = (g)[0], (gzm)[1] = (g)[1], (gzm)[2] = (g)[2]);
303 } else {
304 ELL_3M_LERP(Tzm, alpha, sctx->tcontext + 9*(0+2*si),((((Tzm)+0)[0] = ((((alpha)))*((((sctx->tcontext + 9*(0+2*
siy))+0)[0]) - (((sctx->tcontext + 9*(0+2*si))+0)[0])) + (
((sctx->tcontext + 9*(0+2*si))+0)[0])), ((Tzm)+0)[1] = (((
(alpha)))*((((sctx->tcontext + 9*(0+2*siy))+0)[1]) - (((sctx
->tcontext + 9*(0+2*si))+0)[1])) + (((sctx->tcontext + 9
*(0+2*si))+0)[1])), ((Tzm)+0)[2] = ((((alpha)))*((((sctx->
tcontext + 9*(0+2*siy))+0)[2]) - (((sctx->tcontext + 9*(0+
2*si))+0)[2])) + (((sctx->tcontext + 9*(0+2*si))+0)[2]))),
(((Tzm)+3)[0] = ((((alpha)))*((((sctx->tcontext + 9*(0+2*
siy))+3)[0]) - (((sctx->tcontext + 9*(0+2*si))+3)[0])) + (
((sctx->tcontext + 9*(0+2*si))+3)[0])), ((Tzm)+3)[1] = (((
(alpha)))*((((sctx->tcontext + 9*(0+2*siy))+3)[1]) - (((sctx
->tcontext + 9*(0+2*si))+3)[1])) + (((sctx->tcontext + 9
*(0+2*si))+3)[1])), ((Tzm)+3)[2] = ((((alpha)))*((((sctx->
tcontext + 9*(0+2*siy))+3)[2]) - (((sctx->tcontext + 9*(0+
2*si))+3)[2])) + (((sctx->tcontext + 9*(0+2*si))+3)[2]))),
(((Tzm)+6)[0] = ((((alpha)))*((((sctx->tcontext + 9*(0+2*
siy))+6)[0]) - (((sctx->tcontext + 9*(0+2*si))+6)[0])) + (
((sctx->tcontext + 9*(0+2*si))+6)[0])), ((Tzm)+6)[1] = (((
(alpha)))*((((sctx->tcontext + 9*(0+2*siy))+6)[1]) - (((sctx
->tcontext + 9*(0+2*si))+6)[1])) + (((sctx->tcontext + 9
*(0+2*si))+6)[1])), ((Tzm)+6)[2] = ((((alpha)))*((((sctx->
tcontext + 9*(0+2*siy))+6)[2]) - (((sctx->tcontext + 9*(0+
2*si))+6)[2])) + (((sctx->tcontext + 9*(0+2*si))+6)[2]))))
305 sctx->tcontext + 9*(0+2*siy))((((Tzm)+0)[0] = ((((alpha)))*((((sctx->tcontext + 9*(0+2*
siy))+0)[0]) - (((sctx->tcontext + 9*(0+2*si))+0)[0])) + (
((sctx->tcontext + 9*(0+2*si))+0)[0])), ((Tzm)+0)[1] = (((
(alpha)))*((((sctx->tcontext + 9*(0+2*siy))+0)[1]) - (((sctx
->tcontext + 9*(0+2*si))+0)[1])) + (((sctx->tcontext + 9
*(0+2*si))+0)[1])), ((Tzm)+0)[2] = ((((alpha)))*((((sctx->
tcontext + 9*(0+2*siy))+0)[2]) - (((sctx->tcontext + 9*(0+
2*si))+0)[2])) + (((sctx->tcontext + 9*(0+2*si))+0)[2]))),
(((Tzm)+3)[0] = ((((alpha)))*((((sctx->tcontext + 9*(0+2*
siy))+3)[0]) - (((sctx->tcontext + 9*(0+2*si))+3)[0])) + (
((sctx->tcontext + 9*(0+2*si))+3)[0])), ((Tzm)+3)[1] = (((
(alpha)))*((((sctx->tcontext + 9*(0+2*siy))+3)[1]) - (((sctx
->tcontext + 9*(0+2*si))+3)[1])) + (((sctx->tcontext + 9
*(0+2*si))+3)[1])), ((Tzm)+3)[2] = ((((alpha)))*((((sctx->
tcontext + 9*(0+2*siy))+3)[2]) - (((sctx->tcontext + 9*(0+
2*si))+3)[2])) + (((sctx->tcontext + 9*(0+2*si))+3)[2]))),
(((Tzm)+6)[0] = ((((alpha)))*((((sctx->tcontext + 9*(0+2*
siy))+6)[0]) - (((sctx->tcontext + 9*(0+2*si))+6)[0])) + (
((sctx->tcontext + 9*(0+2*si))+6)[0])), ((Tzm)+6)[1] = (((
(alpha)))*((((sctx->tcontext + 9*(0+2*siy))+6)[1]) - (((sctx
->tcontext + 9*(0+2*si))+6)[1])) + (((sctx->tcontext + 9
*(0+2*si))+6)[1])), ((Tzm)+6)[2] = ((((alpha)))*((((sctx->
tcontext + 9*(0+2*siy))+6)[2]) - (((sctx->tcontext + 9*(0+
2*si))+6)[2])) + (((sctx->tcontext + 9*(0+2*si))+6)[2]))))
;
306 ELL_3V_LERP(gzm, alpha, sctx->gradcontext + 3*(0+2*si),((gzm)[0] = (((alpha))*(((sctx->gradcontext + 3*(0+2*siy))
[0]) - ((sctx->gradcontext + 3*(0+2*si))[0])) + ((sctx->
gradcontext + 3*(0+2*si))[0])), (gzm)[1] = (((alpha))*(((sctx
->gradcontext + 3*(0+2*siy))[1]) - ((sctx->gradcontext +
3*(0+2*si))[1])) + ((sctx->gradcontext + 3*(0+2*si))[1]))
, (gzm)[2] = (((alpha))*(((sctx->gradcontext + 3*(0+2*siy)
)[2]) - ((sctx->gradcontext + 3*(0+2*si))[2])) + ((sctx->
gradcontext + 3*(0+2*si))[2])))
307 sctx->gradcontext + 3*(0+2*siy))((gzm)[0] = (((alpha))*(((sctx->gradcontext + 3*(0+2*siy))
[0]) - ((sctx->gradcontext + 3*(0+2*si))[0])) + ((sctx->
gradcontext + 3*(0+2*si))[0])), (gzm)[1] = (((alpha))*(((sctx
->gradcontext + 3*(0+2*siy))[1]) - ((sctx->gradcontext +
3*(0+2*si))[1])) + ((sctx->gradcontext + 3*(0+2*si))[1]))
, (gzm)[2] = (((alpha))*(((sctx->gradcontext + 3*(0+2*siy)
)[2]) - ((sctx->gradcontext + 3*(0+2*si))[2])) + ((sctx->
gradcontext + 3*(0+2*si))[2])))
;
308 ELL_3M_SCALE(Tzm, 0.5, Tzm)((((Tzm)+0)[0] = ((0.5))*((Tzm)+0)[0], ((Tzm)+0)[1] = ((0.5))
*((Tzm)+0)[1], ((Tzm)+0)[2] = ((0.5))*((Tzm)+0)[2]), (((Tzm)+
3)[0] = ((0.5))*((Tzm)+3)[0], ((Tzm)+3)[1] = ((0.5))*((Tzm)+3
)[1], ((Tzm)+3)[2] = ((0.5))*((Tzm)+3)[2]), (((Tzm)+6)[0] = (
(0.5))*((Tzm)+6)[0], ((Tzm)+6)[1] = ((0.5))*((Tzm)+6)[1], ((Tzm
)+6)[2] = ((0.5))*((Tzm)+6)[2]))
; ELL_3M_SCALE(Tzp, 0.5, Tzp)((((Tzp)+0)[0] = ((0.5))*((Tzp)+0)[0], ((Tzp)+0)[1] = ((0.5))
*((Tzp)+0)[1], ((Tzp)+0)[2] = ((0.5))*((Tzp)+0)[2]), (((Tzp)+
3)[0] = ((0.5))*((Tzp)+3)[0], ((Tzp)+3)[1] = ((0.5))*((Tzp)+3
)[1], ((Tzp)+3)[2] = ((0.5))*((Tzp)+3)[2]), (((Tzp)+6)[0] = (
(0.5))*((Tzp)+6)[0], ((Tzp)+6)[1] = ((0.5))*((Tzp)+6)[1], ((Tzp
)+6)[2] = ((0.5))*((Tzp)+6)[2]))
;
309 ELL_3V_SCALE(gzm, 0.5, gzm)((gzm)[0] = (0.5)*(gzm)[0], (gzm)[1] = (0.5)*(gzm)[1], (gzm)[
2] = (0.5)*(gzm)[2])
; ELL_3V_SCALE(gzp, 0.5, gzp)((gzp)[0] = (0.5)*(gzp)[0], (gzp)[1] = (0.5)*(gzp)[1], (gzp)[
2] = (0.5)*(gzp)[2])
;
310 }
311 if (xi==0) {
312 ELL_3M_COPY(Txm, T)((((Txm)+0)[0] = ((T)+0)[0], ((Txm)+0)[1] = ((T)+0)[1], ((Txm
)+0)[2] = ((T)+0)[2]), (((Txm)+3)[0] = ((T)+3)[0], ((Txm)+3)[
1] = ((T)+3)[1], ((Txm)+3)[2] = ((T)+3)[2]), (((Txm)+6)[0] = (
(T)+6)[0], ((Txm)+6)[1] = ((T)+6)[1], ((Txm)+6)[2] = ((T)+6)[
2]))
; ELL_3V_COPY(gxm, g)((gxm)[0] = (g)[0], (gxm)[1] = (g)[1], (gxm)[2] = (g)[2]);
313 } else {
314 ELL_3M_LERP(Txm, alpha, sctx->t + 9*(0+2*siX), sctx->t + 9*(0+2*siXy))((((Txm)+0)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*siXy))+
0)[0]) - (((sctx->t + 9*(0+2*siX))+0)[0])) + (((sctx->t
+ 9*(0+2*siX))+0)[0])), ((Txm)+0)[1] = ((((alpha)))*((((sctx
->t + 9*(0+2*siXy))+0)[1]) - (((sctx->t + 9*(0+2*siX))+
0)[1])) + (((sctx->t + 9*(0+2*siX))+0)[1])), ((Txm)+0)[2] =
((((alpha)))*((((sctx->t + 9*(0+2*siXy))+0)[2]) - (((sctx
->t + 9*(0+2*siX))+0)[2])) + (((sctx->t + 9*(0+2*siX))+
0)[2]))), (((Txm)+3)[0] = ((((alpha)))*((((sctx->t + 9*(0+
2*siXy))+3)[0]) - (((sctx->t + 9*(0+2*siX))+3)[0])) + (((sctx
->t + 9*(0+2*siX))+3)[0])), ((Txm)+3)[1] = ((((alpha)))*((
((sctx->t + 9*(0+2*siXy))+3)[1]) - (((sctx->t + 9*(0+2*
siX))+3)[1])) + (((sctx->t + 9*(0+2*siX))+3)[1])), ((Txm)+
3)[2] = ((((alpha)))*((((sctx->t + 9*(0+2*siXy))+3)[2]) - (
((sctx->t + 9*(0+2*siX))+3)[2])) + (((sctx->t + 9*(0+2*
siX))+3)[2]))), (((Txm)+6)[0] = ((((alpha)))*((((sctx->t +
9*(0+2*siXy))+6)[0]) - (((sctx->t + 9*(0+2*siX))+6)[0])) +
(((sctx->t + 9*(0+2*siX))+6)[0])), ((Txm)+6)[1] = ((((alpha
)))*((((sctx->t + 9*(0+2*siXy))+6)[1]) - (((sctx->t + 9
*(0+2*siX))+6)[1])) + (((sctx->t + 9*(0+2*siX))+6)[1])), (
(Txm)+6)[2] = ((((alpha)))*((((sctx->t + 9*(0+2*siXy))+6)[
2]) - (((sctx->t + 9*(0+2*siX))+6)[2])) + (((sctx->t + 9
*(0+2*siX))+6)[2]))))
;
315 ELL_3V_LERP(gxm, alpha, sctx->grad + 3*(0+2*siX),((gxm)[0] = (((alpha))*(((sctx->grad + 3*(0+2*siXy))[0]) -
((sctx->grad + 3*(0+2*siX))[0])) + ((sctx->grad + 3*(0
+2*siX))[0])), (gxm)[1] = (((alpha))*(((sctx->grad + 3*(0+
2*siXy))[1]) - ((sctx->grad + 3*(0+2*siX))[1])) + ((sctx->
grad + 3*(0+2*siX))[1])), (gxm)[2] = (((alpha))*(((sctx->grad
+ 3*(0+2*siXy))[2]) - ((sctx->grad + 3*(0+2*siX))[2])) + (
(sctx->grad + 3*(0+2*siX))[2])))
316 sctx->grad + 3*(0+2*siXy))((gxm)[0] = (((alpha))*(((sctx->grad + 3*(0+2*siXy))[0]) -
((sctx->grad + 3*(0+2*siX))[0])) + ((sctx->grad + 3*(0
+2*siX))[0])), (gxm)[1] = (((alpha))*(((sctx->grad + 3*(0+
2*siXy))[1]) - ((sctx->grad + 3*(0+2*siX))[1])) + ((sctx->
grad + 3*(0+2*siX))[1])), (gxm)[2] = (((alpha))*(((sctx->grad
+ 3*(0+2*siXy))[2]) - ((sctx->grad + 3*(0+2*siX))[2])) + (
(sctx->grad + 3*(0+2*siX))[2])))
;
317 }
318 if (xi==sx-1) {
319 ELL_3M_COPY(Txp, T)((((Txp)+0)[0] = ((T)+0)[0], ((Txp)+0)[1] = ((T)+0)[1], ((Txp
)+0)[2] = ((T)+0)[2]), (((Txp)+3)[0] = ((T)+3)[0], ((Txp)+3)[
1] = ((T)+3)[1], ((Txp)+3)[2] = ((T)+3)[2]), (((Txp)+6)[0] = (
(T)+6)[0], ((Txp)+6)[1] = ((T)+6)[1], ((Txp)+6)[2] = ((T)+6)[
2]))
; ELL_3V_COPY(gxm, g)((gxm)[0] = (g)[0], (gxm)[1] = (g)[1], (gxm)[2] = (g)[2]);
320 } else {
321 ELL_3M_LERP(Txp, alpha, sctx->t + 9*(0+2*six), sctx->t + 9*(0+2*sixy))((((Txp)+0)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*sixy))+
0)[0]) - (((sctx->t + 9*(0+2*six))+0)[0])) + (((sctx->t
+ 9*(0+2*six))+0)[0])), ((Txp)+0)[1] = ((((alpha)))*((((sctx
->t + 9*(0+2*sixy))+0)[1]) - (((sctx->t + 9*(0+2*six))+
0)[1])) + (((sctx->t + 9*(0+2*six))+0)[1])), ((Txp)+0)[2] =
((((alpha)))*((((sctx->t + 9*(0+2*sixy))+0)[2]) - (((sctx
->t + 9*(0+2*six))+0)[2])) + (((sctx->t + 9*(0+2*six))+
0)[2]))), (((Txp)+3)[0] = ((((alpha)))*((((sctx->t + 9*(0+
2*sixy))+3)[0]) - (((sctx->t + 9*(0+2*six))+3)[0])) + (((sctx
->t + 9*(0+2*six))+3)[0])), ((Txp)+3)[1] = ((((alpha)))*((
((sctx->t + 9*(0+2*sixy))+3)[1]) - (((sctx->t + 9*(0+2*
six))+3)[1])) + (((sctx->t + 9*(0+2*six))+3)[1])), ((Txp)+
3)[2] = ((((alpha)))*((((sctx->t + 9*(0+2*sixy))+3)[2]) - (
((sctx->t + 9*(0+2*six))+3)[2])) + (((sctx->t + 9*(0+2*
six))+3)[2]))), (((Txp)+6)[0] = ((((alpha)))*((((sctx->t +
9*(0+2*sixy))+6)[0]) - (((sctx->t + 9*(0+2*six))+6)[0])) +
(((sctx->t + 9*(0+2*six))+6)[0])), ((Txp)+6)[1] = ((((alpha
)))*((((sctx->t + 9*(0+2*sixy))+6)[1]) - (((sctx->t + 9
*(0+2*six))+6)[1])) + (((sctx->t + 9*(0+2*six))+6)[1])), (
(Txp)+6)[2] = ((((alpha)))*((((sctx->t + 9*(0+2*sixy))+6)[
2]) - (((sctx->t + 9*(0+2*six))+6)[2])) + (((sctx->t + 9
*(0+2*six))+6)[2]))))
;
322 ELL_3V_LERP(gxp, alpha, sctx->grad + 3*(0+2*six),((gxp)[0] = (((alpha))*(((sctx->grad + 3*(0+2*sixy))[0]) -
((sctx->grad + 3*(0+2*six))[0])) + ((sctx->grad + 3*(0
+2*six))[0])), (gxp)[1] = (((alpha))*(((sctx->grad + 3*(0+
2*sixy))[1]) - ((sctx->grad + 3*(0+2*six))[1])) + ((sctx->
grad + 3*(0+2*six))[1])), (gxp)[2] = (((alpha))*(((sctx->grad
+ 3*(0+2*sixy))[2]) - ((sctx->grad + 3*(0+2*six))[2])) + (
(sctx->grad + 3*(0+2*six))[2])))
323 sctx->grad + 3*(0+2*sixy))((gxp)[0] = (((alpha))*(((sctx->grad + 3*(0+2*sixy))[0]) -
((sctx->grad + 3*(0+2*six))[0])) + ((sctx->grad + 3*(0
+2*six))[0])), (gxp)[1] = (((alpha))*(((sctx->grad + 3*(0+
2*sixy))[1]) - ((sctx->grad + 3*(0+2*six))[1])) + ((sctx->
grad + 3*(0+2*six))[1])), (gxp)[2] = (((alpha))*(((sctx->grad
+ 3*(0+2*sixy))[2]) - ((sctx->grad + 3*(0+2*six))[2])) + (
(sctx->grad + 3*(0+2*six))[2])))
;
324 }
325 if (xi!=0 && xi!=sx-1) {
326 ELL_3M_SCALE(Txm, 0.5, Txm)((((Txm)+0)[0] = ((0.5))*((Txm)+0)[0], ((Txm)+0)[1] = ((0.5))
*((Txm)+0)[1], ((Txm)+0)[2] = ((0.5))*((Txm)+0)[2]), (((Txm)+
3)[0] = ((0.5))*((Txm)+3)[0], ((Txm)+3)[1] = ((0.5))*((Txm)+3
)[1], ((Txm)+3)[2] = ((0.5))*((Txm)+3)[2]), (((Txm)+6)[0] = (
(0.5))*((Txm)+6)[0], ((Txm)+6)[1] = ((0.5))*((Txm)+6)[1], ((Txm
)+6)[2] = ((0.5))*((Txm)+6)[2]))
; ELL_3M_SCALE(Txp, 0.5, Txp)((((Txp)+0)[0] = ((0.5))*((Txp)+0)[0], ((Txp)+0)[1] = ((0.5))
*((Txp)+0)[1], ((Txp)+0)[2] = ((0.5))*((Txp)+0)[2]), (((Txp)+
3)[0] = ((0.5))*((Txp)+3)[0], ((Txp)+3)[1] = ((0.5))*((Txp)+3
)[1], ((Txp)+3)[2] = ((0.5))*((Txp)+3)[2]), (((Txp)+6)[0] = (
(0.5))*((Txp)+6)[0], ((Txp)+6)[1] = ((0.5))*((Txp)+6)[1], ((Txp
)+6)[2] = ((0.5))*((Txp)+6)[2]))
;
327 ELL_3V_SCALE(gxm, 0.5, gxm)((gxm)[0] = (0.5)*(gxm)[0], (gxm)[1] = (0.5)*(gxm)[1], (gxm)[
2] = (0.5)*(gxm)[2])
; ELL_3V_SCALE(gxp, 0.5, gxp)((gxp)[0] = (0.5)*(gxp)[0], (gxp)[1] = (0.5)*(gxp)[1], (gxp)[
2] = (0.5)*(gxp)[2])
;
328 }
329 computeGradientLin(res, T, g,
330 Txm, gxm, Txp, gxp,
331 sctx->t + 9*(0+2*si), sctx->grad + 3*(0+2*si),
332 sctx->t + 9*(0+2*siy), sctx->grad + 3*(0+2*siy),
333 T, g, Tzp, gzp);
334 break;
335 case 2:
336 ELL_3M_LERP(T, alpha, sctx->t + 9*(0+2*si), sctx->t + 9*(1+2*si))((((T)+0)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*si))+0)[0
]) - (((sctx->t + 9*(0+2*si))+0)[0])) + (((sctx->t + 9*
(0+2*si))+0)[0])), ((T)+0)[1] = ((((alpha)))*((((sctx->t +
9*(1+2*si))+0)[1]) - (((sctx->t + 9*(0+2*si))+0)[1])) + (
((sctx->t + 9*(0+2*si))+0)[1])), ((T)+0)[2] = ((((alpha)))
*((((sctx->t + 9*(1+2*si))+0)[2]) - (((sctx->t + 9*(0+2
*si))+0)[2])) + (((sctx->t + 9*(0+2*si))+0)[2]))), (((T)+3
)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*si))+3)[0]) - (((
sctx->t + 9*(0+2*si))+3)[0])) + (((sctx->t + 9*(0+2*si)
)+3)[0])), ((T)+3)[1] = ((((alpha)))*((((sctx->t + 9*(1+2*
si))+3)[1]) - (((sctx->t + 9*(0+2*si))+3)[1])) + (((sctx->
t + 9*(0+2*si))+3)[1])), ((T)+3)[2] = ((((alpha)))*((((sctx->
t + 9*(1+2*si))+3)[2]) - (((sctx->t + 9*(0+2*si))+3)[2])) +
(((sctx->t + 9*(0+2*si))+3)[2]))), (((T)+6)[0] = ((((alpha
)))*((((sctx->t + 9*(1+2*si))+6)[0]) - (((sctx->t + 9*(
0+2*si))+6)[0])) + (((sctx->t + 9*(0+2*si))+6)[0])), ((T)+
6)[1] = ((((alpha)))*((((sctx->t + 9*(1+2*si))+6)[1]) - ((
(sctx->t + 9*(0+2*si))+6)[1])) + (((sctx->t + 9*(0+2*si
))+6)[1])), ((T)+6)[2] = ((((alpha)))*((((sctx->t + 9*(1+2
*si))+6)[2]) - (((sctx->t + 9*(0+2*si))+6)[2])) + (((sctx->
t + 9*(0+2*si))+6)[2]))))
;
337 ELL_3V_LERP(g, alpha, sctx->grad + 3*(0+2*si), sctx->grad + 3*(1+2*si))((g)[0] = (((alpha))*(((sctx->grad + 3*(1+2*si))[0]) - ((sctx
->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3*(0+2*si))[
0])), (g)[1] = (((alpha))*(((sctx->grad + 3*(1+2*si))[1]) -
((sctx->grad + 3*(0+2*si))[1])) + ((sctx->grad + 3*(0+
2*si))[1])), (g)[2] = (((alpha))*(((sctx->grad + 3*(1+2*si
))[2]) - ((sctx->grad + 3*(0+2*si))[2])) + ((sctx->grad
+ 3*(0+2*si))[2])))
;
338 if (xi==0) {
339 ELL_3M_COPY(Txm, T)((((Txm)+0)[0] = ((T)+0)[0], ((Txm)+0)[1] = ((T)+0)[1], ((Txm
)+0)[2] = ((T)+0)[2]), (((Txm)+3)[0] = ((T)+3)[0], ((Txm)+3)[
1] = ((T)+3)[1], ((Txm)+3)[2] = ((T)+3)[2]), (((Txm)+6)[0] = (
(T)+6)[0], ((Txm)+6)[1] = ((T)+6)[1], ((Txm)+6)[2] = ((T)+6)[
2]))
; ELL_3V_COPY(gxm, g)((gxm)[0] = (g)[0], (gxm)[1] = (g)[1], (gxm)[2] = (g)[2]);
340 } else {
341 ELL_3M_LERP(Txm, alpha, sctx->t + 9*(0+2*siX), sctx->t + 9*(1+2*siX))((((Txm)+0)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*siX))+0
)[0]) - (((sctx->t + 9*(0+2*siX))+0)[0])) + (((sctx->t +
9*(0+2*siX))+0)[0])), ((Txm)+0)[1] = ((((alpha)))*((((sctx->
t + 9*(1+2*siX))+0)[1]) - (((sctx->t + 9*(0+2*siX))+0)[1])
) + (((sctx->t + 9*(0+2*siX))+0)[1])), ((Txm)+0)[2] = ((((
alpha)))*((((sctx->t + 9*(1+2*siX))+0)[2]) - (((sctx->t
+ 9*(0+2*siX))+0)[2])) + (((sctx->t + 9*(0+2*siX))+0)[2])
)), (((Txm)+3)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*siX)
)+3)[0]) - (((sctx->t + 9*(0+2*siX))+3)[0])) + (((sctx->
t + 9*(0+2*siX))+3)[0])), ((Txm)+3)[1] = ((((alpha)))*((((sctx
->t + 9*(1+2*siX))+3)[1]) - (((sctx->t + 9*(0+2*siX))+3
)[1])) + (((sctx->t + 9*(0+2*siX))+3)[1])), ((Txm)+3)[2] =
((((alpha)))*((((sctx->t + 9*(1+2*siX))+3)[2]) - (((sctx->
t + 9*(0+2*siX))+3)[2])) + (((sctx->t + 9*(0+2*siX))+3)[2]
))), (((Txm)+6)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*siX
))+6)[0]) - (((sctx->t + 9*(0+2*siX))+6)[0])) + (((sctx->
t + 9*(0+2*siX))+6)[0])), ((Txm)+6)[1] = ((((alpha)))*((((sctx
->t + 9*(1+2*siX))+6)[1]) - (((sctx->t + 9*(0+2*siX))+6
)[1])) + (((sctx->t + 9*(0+2*siX))+6)[1])), ((Txm)+6)[2] =
((((alpha)))*((((sctx->t + 9*(1+2*siX))+6)[2]) - (((sctx->
t + 9*(0+2*siX))+6)[2])) + (((sctx->t + 9*(0+2*siX))+6)[2]
))))
;
342 ELL_3V_LERP(gxm, alpha, sctx->grad + 3*(0+2*siX),((gxm)[0] = (((alpha))*(((sctx->grad + 3*(1+2*siX))[0]) - (
(sctx->grad + 3*(0+2*siX))[0])) + ((sctx->grad + 3*(0+2
*siX))[0])), (gxm)[1] = (((alpha))*(((sctx->grad + 3*(1+2*
siX))[1]) - ((sctx->grad + 3*(0+2*siX))[1])) + ((sctx->
grad + 3*(0+2*siX))[1])), (gxm)[2] = (((alpha))*(((sctx->grad
+ 3*(1+2*siX))[2]) - ((sctx->grad + 3*(0+2*siX))[2])) + (
(sctx->grad + 3*(0+2*siX))[2])))
343 sctx->grad + 3*(1+2*siX))((gxm)[0] = (((alpha))*(((sctx->grad + 3*(1+2*siX))[0]) - (
(sctx->grad + 3*(0+2*siX))[0])) + ((sctx->grad + 3*(0+2
*siX))[0])), (gxm)[1] = (((alpha))*(((sctx->grad + 3*(1+2*
siX))[1]) - ((sctx->grad + 3*(0+2*siX))[1])) + ((sctx->
grad + 3*(0+2*siX))[1])), (gxm)[2] = (((alpha))*(((sctx->grad
+ 3*(1+2*siX))[2]) - ((sctx->grad + 3*(0+2*siX))[2])) + (
(sctx->grad + 3*(0+2*siX))[2])))
;
344 }
345 if (xi==sx-1) {
346 ELL_3M_COPY(Txp, T)((((Txp)+0)[0] = ((T)+0)[0], ((Txp)+0)[1] = ((T)+0)[1], ((Txp
)+0)[2] = ((T)+0)[2]), (((Txp)+3)[0] = ((T)+3)[0], ((Txp)+3)[
1] = ((T)+3)[1], ((Txp)+3)[2] = ((T)+3)[2]), (((Txp)+6)[0] = (
(T)+6)[0], ((Txp)+6)[1] = ((T)+6)[1], ((Txp)+6)[2] = ((T)+6)[
2]))
; ELL_3V_COPY(gxp, g)((gxp)[0] = (g)[0], (gxp)[1] = (g)[1], (gxp)[2] = (g)[2]);
347 } else {
348 ELL_3M_LERP(Txp, alpha, sctx->t + 9*(0+2*six), sctx->t + 9*(1+2*six))((((Txp)+0)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*six))+0
)[0]) - (((sctx->t + 9*(0+2*six))+0)[0])) + (((sctx->t +
9*(0+2*six))+0)[0])), ((Txp)+0)[1] = ((((alpha)))*((((sctx->
t + 9*(1+2*six))+0)[1]) - (((sctx->t + 9*(0+2*six))+0)[1])
) + (((sctx->t + 9*(0+2*six))+0)[1])), ((Txp)+0)[2] = ((((
alpha)))*((((sctx->t + 9*(1+2*six))+0)[2]) - (((sctx->t
+ 9*(0+2*six))+0)[2])) + (((sctx->t + 9*(0+2*six))+0)[2])
)), (((Txp)+3)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*six)
)+3)[0]) - (((sctx->t + 9*(0+2*six))+3)[0])) + (((sctx->
t + 9*(0+2*six))+3)[0])), ((Txp)+3)[1] = ((((alpha)))*((((sctx
->t + 9*(1+2*six))+3)[1]) - (((sctx->t + 9*(0+2*six))+3
)[1])) + (((sctx->t + 9*(0+2*six))+3)[1])), ((Txp)+3)[2] =
((((alpha)))*((((sctx->t + 9*(1+2*six))+3)[2]) - (((sctx->
t + 9*(0+2*six))+3)[2])) + (((sctx->t + 9*(0+2*six))+3)[2]
))), (((Txp)+6)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*six
))+6)[0]) - (((sctx->t + 9*(0+2*six))+6)[0])) + (((sctx->
t + 9*(0+2*six))+6)[0])), ((Txp)+6)[1] = ((((alpha)))*((((sctx
->t + 9*(1+2*six))+6)[1]) - (((sctx->t + 9*(0+2*six))+6
)[1])) + (((sctx->t + 9*(0+2*six))+6)[1])), ((Txp)+6)[2] =
((((alpha)))*((((sctx->t + 9*(1+2*six))+6)[2]) - (((sctx->
t + 9*(0+2*six))+6)[2])) + (((sctx->t + 9*(0+2*six))+6)[2]
))))
;
349 ELL_3V_LERP(gxp, alpha, sctx->grad + 3*(0+2*six),((gxp)[0] = (((alpha))*(((sctx->grad + 3*(1+2*six))[0]) - (
(sctx->grad + 3*(0+2*six))[0])) + ((sctx->grad + 3*(0+2
*six))[0])), (gxp)[1] = (((alpha))*(((sctx->grad + 3*(1+2*
six))[1]) - ((sctx->grad + 3*(0+2*six))[1])) + ((sctx->
grad + 3*(0+2*six))[1])), (gxp)[2] = (((alpha))*(((sctx->grad
+ 3*(1+2*six))[2]) - ((sctx->grad + 3*(0+2*six))[2])) + (
(sctx->grad + 3*(0+2*six))[2])))
350 sctx->grad + 3*(1+2*six))((gxp)[0] = (((alpha))*(((sctx->grad + 3*(1+2*six))[0]) - (
(sctx->grad + 3*(0+2*six))[0])) + ((sctx->grad + 3*(0+2
*six))[0])), (gxp)[1] = (((alpha))*(((sctx->grad + 3*(1+2*
six))[1]) - ((sctx->grad + 3*(0+2*six))[1])) + ((sctx->
grad + 3*(0+2*six))[1])), (gxp)[2] = (((alpha))*(((sctx->grad
+ 3*(1+2*six))[2]) - ((sctx->grad + 3*(0+2*six))[2])) + (
(sctx->grad + 3*(0+2*six))[2])))
;
351 }
352 if (xi!=0 && xi!=sx-1) {
353 ELL_3M_SCALE(Txm, 0.5, Txm)((((Txm)+0)[0] = ((0.5))*((Txm)+0)[0], ((Txm)+0)[1] = ((0.5))
*((Txm)+0)[1], ((Txm)+0)[2] = ((0.5))*((Txm)+0)[2]), (((Txm)+
3)[0] = ((0.5))*((Txm)+3)[0], ((Txm)+3)[1] = ((0.5))*((Txm)+3
)[1], ((Txm)+3)[2] = ((0.5))*((Txm)+3)[2]), (((Txm)+6)[0] = (
(0.5))*((Txm)+6)[0], ((Txm)+6)[1] = ((0.5))*((Txm)+6)[1], ((Txm
)+6)[2] = ((0.5))*((Txm)+6)[2]))
; ELL_3M_SCALE(Txp, 0.5, Txp)((((Txp)+0)[0] = ((0.5))*((Txp)+0)[0], ((Txp)+0)[1] = ((0.5))
*((Txp)+0)[1], ((Txp)+0)[2] = ((0.5))*((Txp)+0)[2]), (((Txp)+
3)[0] = ((0.5))*((Txp)+3)[0], ((Txp)+3)[1] = ((0.5))*((Txp)+3
)[1], ((Txp)+3)[2] = ((0.5))*((Txp)+3)[2]), (((Txp)+6)[0] = (
(0.5))*((Txp)+6)[0], ((Txp)+6)[1] = ((0.5))*((Txp)+6)[1], ((Txp
)+6)[2] = ((0.5))*((Txp)+6)[2]))
;
354 ELL_3V_SCALE(gxm, 0.5, gxm)((gxm)[0] = (0.5)*(gxm)[0], (gxm)[1] = (0.5)*(gxm)[1], (gxm)[
2] = (0.5)*(gxm)[2])
; ELL_3V_SCALE(gxp, 0.5, gxp)((gxp)[0] = (0.5)*(gxp)[0], (gxp)[1] = (0.5)*(gxp)[1], (gxp)[
2] = (0.5)*(gxp)[2])
;
355 }
356 if (yi==0) {
357 ELL_3M_COPY(Tym, T)((((Tym)+0)[0] = ((T)+0)[0], ((Tym)+0)[1] = ((T)+0)[1], ((Tym
)+0)[2] = ((T)+0)[2]), (((Tym)+3)[0] = ((T)+3)[0], ((Tym)+3)[
1] = ((T)+3)[1], ((Tym)+3)[2] = ((T)+3)[2]), (((Tym)+6)[0] = (
(T)+6)[0], ((Tym)+6)[1] = ((T)+6)[1], ((Tym)+6)[2] = ((T)+6)[
2]))
; ELL_3V_COPY(gym, g)((gym)[0] = (g)[0], (gym)[1] = (g)[1], (gym)[2] = (g)[2]);
358 } else {
359 ELL_3M_LERP(Tym, alpha, sctx->t + 9*(0+2*siY), sctx->t + 9*(1+2*siY))((((Tym)+0)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*siY))+0
)[0]) - (((sctx->t + 9*(0+2*siY))+0)[0])) + (((sctx->t +
9*(0+2*siY))+0)[0])), ((Tym)+0)[1] = ((((alpha)))*((((sctx->
t + 9*(1+2*siY))+0)[1]) - (((sctx->t + 9*(0+2*siY))+0)[1])
) + (((sctx->t + 9*(0+2*siY))+0)[1])), ((Tym)+0)[2] = ((((
alpha)))*((((sctx->t + 9*(1+2*siY))+0)[2]) - (((sctx->t
+ 9*(0+2*siY))+0)[2])) + (((sctx->t + 9*(0+2*siY))+0)[2])
)), (((Tym)+3)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*siY)
)+3)[0]) - (((sctx->t + 9*(0+2*siY))+3)[0])) + (((sctx->
t + 9*(0+2*siY))+3)[0])), ((Tym)+3)[1] = ((((alpha)))*((((sctx
->t + 9*(1+2*siY))+3)[1]) - (((sctx->t + 9*(0+2*siY))+3
)[1])) + (((sctx->t + 9*(0+2*siY))+3)[1])), ((Tym)+3)[2] =
((((alpha)))*((((sctx->t + 9*(1+2*siY))+3)[2]) - (((sctx->
t + 9*(0+2*siY))+3)[2])) + (((sctx->t + 9*(0+2*siY))+3)[2]
))), (((Tym)+6)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*siY
))+6)[0]) - (((sctx->t + 9*(0+2*siY))+6)[0])) + (((sctx->
t + 9*(0+2*siY))+6)[0])), ((Tym)+6)[1] = ((((alpha)))*((((sctx
->t + 9*(1+2*siY))+6)[1]) - (((sctx->t + 9*(0+2*siY))+6
)[1])) + (((sctx->t + 9*(0+2*siY))+6)[1])), ((Tym)+6)[2] =
((((alpha)))*((((sctx->t + 9*(1+2*siY))+6)[2]) - (((sctx->
t + 9*(0+2*siY))+6)[2])) + (((sctx->t + 9*(0+2*siY))+6)[2]
))))
;
360 ELL_3V_LERP(gym, alpha, sctx->grad + 3*(0+2*siY),((gym)[0] = (((alpha))*(((sctx->grad + 3*(1+2*siY))[0]) - (
(sctx->grad + 3*(0+2*siY))[0])) + ((sctx->grad + 3*(0+2
*siY))[0])), (gym)[1] = (((alpha))*(((sctx->grad + 3*(1+2*
siY))[1]) - ((sctx->grad + 3*(0+2*siY))[1])) + ((sctx->
grad + 3*(0+2*siY))[1])), (gym)[2] = (((alpha))*(((sctx->grad
+ 3*(1+2*siY))[2]) - ((sctx->grad + 3*(0+2*siY))[2])) + (
(sctx->grad + 3*(0+2*siY))[2])))
361 sctx->grad + 3*(1+2*siY))((gym)[0] = (((alpha))*(((sctx->grad + 3*(1+2*siY))[0]) - (
(sctx->grad + 3*(0+2*siY))[0])) + ((sctx->grad + 3*(0+2
*siY))[0])), (gym)[1] = (((alpha))*(((sctx->grad + 3*(1+2*
siY))[1]) - ((sctx->grad + 3*(0+2*siY))[1])) + ((sctx->
grad + 3*(0+2*siY))[1])), (gym)[2] = (((alpha))*(((sctx->grad
+ 3*(1+2*siY))[2]) - ((sctx->grad + 3*(0+2*siY))[2])) + (
(sctx->grad + 3*(0+2*siY))[2])))
;
362 }
363 if (yi==sy-1) {
364 ELL_3M_COPY(Typ, T)((((Typ)+0)[0] = ((T)+0)[0], ((Typ)+0)[1] = ((T)+0)[1], ((Typ
)+0)[2] = ((T)+0)[2]), (((Typ)+3)[0] = ((T)+3)[0], ((Typ)+3)[
1] = ((T)+3)[1], ((Typ)+3)[2] = ((T)+3)[2]), (((Typ)+6)[0] = (
(T)+6)[0], ((Typ)+6)[1] = ((T)+6)[1], ((Typ)+6)[2] = ((T)+6)[
2]))
; ELL_3V_COPY(gyp, g)((gyp)[0] = (g)[0], (gyp)[1] = (g)[1], (gyp)[2] = (g)[2]);
365 } else {
366 ELL_3M_LERP(Typ, alpha, sctx->t + 9*(0+2*siy), sctx->t + 9*(1+2*siy))((((Typ)+0)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*siy))+0
)[0]) - (((sctx->t + 9*(0+2*siy))+0)[0])) + (((sctx->t +
9*(0+2*siy))+0)[0])), ((Typ)+0)[1] = ((((alpha)))*((((sctx->
t + 9*(1+2*siy))+0)[1]) - (((sctx->t + 9*(0+2*siy))+0)[1])
) + (((sctx->t + 9*(0+2*siy))+0)[1])), ((Typ)+0)[2] = ((((
alpha)))*((((sctx->t + 9*(1+2*siy))+0)[2]) - (((sctx->t
+ 9*(0+2*siy))+0)[2])) + (((sctx->t + 9*(0+2*siy))+0)[2])
)), (((Typ)+3)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*siy)
)+3)[0]) - (((sctx->t + 9*(0+2*siy))+3)[0])) + (((sctx->
t + 9*(0+2*siy))+3)[0])), ((Typ)+3)[1] = ((((alpha)))*((((sctx
->t + 9*(1+2*siy))+3)[1]) - (((sctx->t + 9*(0+2*siy))+3
)[1])) + (((sctx->t + 9*(0+2*siy))+3)[1])), ((Typ)+3)[2] =
((((alpha)))*((((sctx->t + 9*(1+2*siy))+3)[2]) - (((sctx->
t + 9*(0+2*siy))+3)[2])) + (((sctx->t + 9*(0+2*siy))+3)[2]
))), (((Typ)+6)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*siy
))+6)[0]) - (((sctx->t + 9*(0+2*siy))+6)[0])) + (((sctx->
t + 9*(0+2*siy))+6)[0])), ((Typ)+6)[1] = ((((alpha)))*((((sctx
->t + 9*(1+2*siy))+6)[1]) - (((sctx->t + 9*(0+2*siy))+6
)[1])) + (((sctx->t + 9*(0+2*siy))+6)[1])), ((Typ)+6)[2] =
((((alpha)))*((((sctx->t + 9*(1+2*siy))+6)[2]) - (((sctx->
t + 9*(0+2*siy))+6)[2])) + (((sctx->t + 9*(0+2*siy))+6)[2]
))))
;
367 ELL_3V_LERP(gyp, alpha, sctx->grad + 3*(0+2*siy),((gyp)[0] = (((alpha))*(((sctx->grad + 3*(1+2*siy))[0]) - (
(sctx->grad + 3*(0+2*siy))[0])) + ((sctx->grad + 3*(0+2
*siy))[0])), (gyp)[1] = (((alpha))*(((sctx->grad + 3*(1+2*
siy))[1]) - ((sctx->grad + 3*(0+2*siy))[1])) + ((sctx->
grad + 3*(0+2*siy))[1])), (gyp)[2] = (((alpha))*(((sctx->grad
+ 3*(1+2*siy))[2]) - ((sctx->grad + 3*(0+2*siy))[2])) + (
(sctx->grad + 3*(0+2*siy))[2])))
368 sctx->grad + 3*(1+2*siy))((gyp)[0] = (((alpha))*(((sctx->grad + 3*(1+2*siy))[0]) - (
(sctx->grad + 3*(0+2*siy))[0])) + ((sctx->grad + 3*(0+2
*siy))[0])), (gyp)[1] = (((alpha))*(((sctx->grad + 3*(1+2*
siy))[1]) - ((sctx->grad + 3*(0+2*siy))[1])) + ((sctx->
grad + 3*(0+2*siy))[1])), (gyp)[2] = (((alpha))*(((sctx->grad
+ 3*(1+2*siy))[2]) - ((sctx->grad + 3*(0+2*siy))[2])) + (
(sctx->grad + 3*(0+2*siy))[2])))
;
369 }
370 if (yi!=0 && yi!=sy-1) {
371 ELL_3M_SCALE(Tym, 0.5, Tym)((((Tym)+0)[0] = ((0.5))*((Tym)+0)[0], ((Tym)+0)[1] = ((0.5))
*((Tym)+0)[1], ((Tym)+0)[2] = ((0.5))*((Tym)+0)[2]), (((Tym)+
3)[0] = ((0.5))*((Tym)+3)[0], ((Tym)+3)[1] = ((0.5))*((Tym)+3
)[1], ((Tym)+3)[2] = ((0.5))*((Tym)+3)[2]), (((Tym)+6)[0] = (
(0.5))*((Tym)+6)[0], ((Tym)+6)[1] = ((0.5))*((Tym)+6)[1], ((Tym
)+6)[2] = ((0.5))*((Tym)+6)[2]))
; ELL_3M_SCALE(Typ, 0.5, Typ)((((Typ)+0)[0] = ((0.5))*((Typ)+0)[0], ((Typ)+0)[1] = ((0.5))
*((Typ)+0)[1], ((Typ)+0)[2] = ((0.5))*((Typ)+0)[2]), (((Typ)+
3)[0] = ((0.5))*((Typ)+3)[0], ((Typ)+3)[1] = ((0.5))*((Typ)+3
)[1], ((Typ)+3)[2] = ((0.5))*((Typ)+3)[2]), (((Typ)+6)[0] = (
(0.5))*((Typ)+6)[0], ((Typ)+6)[1] = ((0.5))*((Typ)+6)[1], ((Typ
)+6)[2] = ((0.5))*((Typ)+6)[2]))
;
372 ELL_3V_SCALE(gym, 0.5, gym)((gym)[0] = (0.5)*(gym)[0], (gym)[1] = (0.5)*(gym)[1], (gym)[
2] = (0.5)*(gym)[2])
; ELL_3V_SCALE(gyp, 0.5, gyp)((gyp)[0] = (0.5)*(gyp)[0], (gyp)[1] = (0.5)*(gyp)[1], (gyp)[
2] = (0.5)*(gyp)[2])
;
373 }
374 if (bag->zi>0 && bag->zi<sz-2) {
375 ELL_3M_LERP(Tzm, alpha, sctx->tcontext + 9*(0+2*si),((((Tzm)+0)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*si))+0)
[0]) - (((sctx->tcontext + 9*(0+2*si))+0)[0])) + (((sctx->
tcontext + 9*(0+2*si))+0)[0])), ((Tzm)+0)[1] = ((((alpha)))*(
(((sctx->t + 9*(0+2*si))+0)[1]) - (((sctx->tcontext + 9
*(0+2*si))+0)[1])) + (((sctx->tcontext + 9*(0+2*si))+0)[1]
)), ((Tzm)+0)[2] = ((((alpha)))*((((sctx->t + 9*(0+2*si))+
0)[2]) - (((sctx->tcontext + 9*(0+2*si))+0)[2])) + (((sctx
->tcontext + 9*(0+2*si))+0)[2]))), (((Tzm)+3)[0] = ((((alpha
)))*((((sctx->t + 9*(0+2*si))+3)[0]) - (((sctx->tcontext
+ 9*(0+2*si))+3)[0])) + (((sctx->tcontext + 9*(0+2*si))+3
)[0])), ((Tzm)+3)[1] = ((((alpha)))*((((sctx->t + 9*(0+2*si
))+3)[1]) - (((sctx->tcontext + 9*(0+2*si))+3)[1])) + (((sctx
->tcontext + 9*(0+2*si))+3)[1])), ((Tzm)+3)[2] = ((((alpha
)))*((((sctx->t + 9*(0+2*si))+3)[2]) - (((sctx->tcontext
+ 9*(0+2*si))+3)[2])) + (((sctx->tcontext + 9*(0+2*si))+3
)[2]))), (((Tzm)+6)[0] = ((((alpha)))*((((sctx->t + 9*(0+2
*si))+6)[0]) - (((sctx->tcontext + 9*(0+2*si))+6)[0])) + (
((sctx->tcontext + 9*(0+2*si))+6)[0])), ((Tzm)+6)[1] = (((
(alpha)))*((((sctx->t + 9*(0+2*si))+6)[1]) - (((sctx->tcontext
+ 9*(0+2*si))+6)[1])) + (((sctx->tcontext + 9*(0+2*si))+6
)[1])), ((Tzm)+6)[2] = ((((alpha)))*((((sctx->t + 9*(0+2*si
))+6)[2]) - (((sctx->tcontext + 9*(0+2*si))+6)[2])) + (((sctx
->tcontext + 9*(0+2*si))+6)[2]))))
376 sctx->t + 9*(0+2*si))((((Tzm)+0)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*si))+0)
[0]) - (((sctx->tcontext + 9*(0+2*si))+0)[0])) + (((sctx->
tcontext + 9*(0+2*si))+0)[0])), ((Tzm)+0)[1] = ((((alpha)))*(
(((sctx->t + 9*(0+2*si))+0)[1]) - (((sctx->tcontext + 9
*(0+2*si))+0)[1])) + (((sctx->tcontext + 9*(0+2*si))+0)[1]
)), ((Tzm)+0)[2] = ((((alpha)))*((((sctx->t + 9*(0+2*si))+
0)[2]) - (((sctx->tcontext + 9*(0+2*si))+0)[2])) + (((sctx
->tcontext + 9*(0+2*si))+0)[2]))), (((Tzm)+3)[0] = ((((alpha
)))*((((sctx->t + 9*(0+2*si))+3)[0]) - (((sctx->tcontext
+ 9*(0+2*si))+3)[0])) + (((sctx->tcontext + 9*(0+2*si))+3
)[0])), ((Tzm)+3)[1] = ((((alpha)))*((((sctx->t + 9*(0+2*si
))+3)[1]) - (((sctx->tcontext + 9*(0+2*si))+3)[1])) + (((sctx
->tcontext + 9*(0+2*si))+3)[1])), ((Tzm)+3)[2] = ((((alpha
)))*((((sctx->t + 9*(0+2*si))+3)[2]) - (((sctx->tcontext
+ 9*(0+2*si))+3)[2])) + (((sctx->tcontext + 9*(0+2*si))+3
)[2]))), (((Tzm)+6)[0] = ((((alpha)))*((((sctx->t + 9*(0+2
*si))+6)[0]) - (((sctx->tcontext + 9*(0+2*si))+6)[0])) + (
((sctx->tcontext + 9*(0+2*si))+6)[0])), ((Tzm)+6)[1] = (((
(alpha)))*((((sctx->t + 9*(0+2*si))+6)[1]) - (((sctx->tcontext
+ 9*(0+2*si))+6)[1])) + (((sctx->tcontext + 9*(0+2*si))+6
)[1])), ((Tzm)+6)[2] = ((((alpha)))*((((sctx->t + 9*(0+2*si
))+6)[2]) - (((sctx->tcontext + 9*(0+2*si))+6)[2])) + (((sctx
->tcontext + 9*(0+2*si))+6)[2]))))
;
377 ELL_3V_LERP(gzm, alpha, sctx->gradcontext + 3*(0+2*si),((gzm)[0] = (((alpha))*(((sctx->grad + 3*(0+2*si))[0]) - (
(sctx->gradcontext + 3*(0+2*si))[0])) + ((sctx->gradcontext
+ 3*(0+2*si))[0])), (gzm)[1] = (((alpha))*(((sctx->grad +
3*(0+2*si))[1]) - ((sctx->gradcontext + 3*(0+2*si))[1])) +
((sctx->gradcontext + 3*(0+2*si))[1])), (gzm)[2] = (((alpha
))*(((sctx->grad + 3*(0+2*si))[2]) - ((sctx->gradcontext
+ 3*(0+2*si))[2])) + ((sctx->gradcontext + 3*(0+2*si))[2]
)))
378 sctx->grad + 3*(0+2*si))((gzm)[0] = (((alpha))*(((sctx->grad + 3*(0+2*si))[0]) - (
(sctx->gradcontext + 3*(0+2*si))[0])) + ((sctx->gradcontext
+ 3*(0+2*si))[0])), (gzm)[1] = (((alpha))*(((sctx->grad +
3*(0+2*si))[1]) - ((sctx->gradcontext + 3*(0+2*si))[1])) +
((sctx->gradcontext + 3*(0+2*si))[1])), (gzm)[2] = (((alpha
))*(((sctx->grad + 3*(0+2*si))[2]) - ((sctx->gradcontext
+ 3*(0+2*si))[2])) + ((sctx->gradcontext + 3*(0+2*si))[2]
)))
;
379 ELL_3M_LERP(Tzp, alpha, sctx->t + 9*(1+2*si),((((Tzp)+0)[0] = ((((alpha)))*((((sctx->tcontext + 9*(1+2*
si))+0)[0]) - (((sctx->t + 9*(1+2*si))+0)[0])) + (((sctx->
t + 9*(1+2*si))+0)[0])), ((Tzp)+0)[1] = ((((alpha)))*((((sctx
->tcontext + 9*(1+2*si))+0)[1]) - (((sctx->t + 9*(1+2*si
))+0)[1])) + (((sctx->t + 9*(1+2*si))+0)[1])), ((Tzp)+0)[2
] = ((((alpha)))*((((sctx->tcontext + 9*(1+2*si))+0)[2]) -
(((sctx->t + 9*(1+2*si))+0)[2])) + (((sctx->t + 9*(1+2
*si))+0)[2]))), (((Tzp)+3)[0] = ((((alpha)))*((((sctx->tcontext
+ 9*(1+2*si))+3)[0]) - (((sctx->t + 9*(1+2*si))+3)[0])) +
(((sctx->t + 9*(1+2*si))+3)[0])), ((Tzp)+3)[1] = ((((alpha
)))*((((sctx->tcontext + 9*(1+2*si))+3)[1]) - (((sctx->
t + 9*(1+2*si))+3)[1])) + (((sctx->t + 9*(1+2*si))+3)[1]))
, ((Tzp)+3)[2] = ((((alpha)))*((((sctx->tcontext + 9*(1+2*
si))+3)[2]) - (((sctx->t + 9*(1+2*si))+3)[2])) + (((sctx->
t + 9*(1+2*si))+3)[2]))), (((Tzp)+6)[0] = ((((alpha)))*((((sctx
->tcontext + 9*(1+2*si))+6)[0]) - (((sctx->t + 9*(1+2*si
))+6)[0])) + (((sctx->t + 9*(1+2*si))+6)[0])), ((Tzp)+6)[1
] = ((((alpha)))*((((sctx->tcontext + 9*(1+2*si))+6)[1]) -
(((sctx->t + 9*(1+2*si))+6)[1])) + (((sctx->t + 9*(1+2
*si))+6)[1])), ((Tzp)+6)[2] = ((((alpha)))*((((sctx->tcontext
+ 9*(1+2*si))+6)[2]) - (((sctx->t + 9*(1+2*si))+6)[2])) +
(((sctx->t + 9*(1+2*si))+6)[2]))))
380 sctx->tcontext + 9*(1+2*si))((((Tzp)+0)[0] = ((((alpha)))*((((sctx->tcontext + 9*(1+2*
si))+0)[0]) - (((sctx->t + 9*(1+2*si))+0)[0])) + (((sctx->
t + 9*(1+2*si))+0)[0])), ((Tzp)+0)[1] = ((((alpha)))*((((sctx
->tcontext + 9*(1+2*si))+0)[1]) - (((sctx->t + 9*(1+2*si
))+0)[1])) + (((sctx->t + 9*(1+2*si))+0)[1])), ((Tzp)+0)[2
] = ((((alpha)))*((((sctx->tcontext + 9*(1+2*si))+0)[2]) -
(((sctx->t + 9*(1+2*si))+0)[2])) + (((sctx->t + 9*(1+2
*si))+0)[2]))), (((Tzp)+3)[0] = ((((alpha)))*((((sctx->tcontext
+ 9*(1+2*si))+3)[0]) - (((sctx->t + 9*(1+2*si))+3)[0])) +
(((sctx->t + 9*(1+2*si))+3)[0])), ((Tzp)+3)[1] = ((((alpha
)))*((((sctx->tcontext + 9*(1+2*si))+3)[1]) - (((sctx->
t + 9*(1+2*si))+3)[1])) + (((sctx->t + 9*(1+2*si))+3)[1]))
, ((Tzp)+3)[2] = ((((alpha)))*((((sctx->tcontext + 9*(1+2*
si))+3)[2]) - (((sctx->t + 9*(1+2*si))+3)[2])) + (((sctx->
t + 9*(1+2*si))+3)[2]))), (((Tzp)+6)[0] = ((((alpha)))*((((sctx
->tcontext + 9*(1+2*si))+6)[0]) - (((sctx->t + 9*(1+2*si
))+6)[0])) + (((sctx->t + 9*(1+2*si))+6)[0])), ((Tzp)+6)[1
] = ((((alpha)))*((((sctx->tcontext + 9*(1+2*si))+6)[1]) -
(((sctx->t + 9*(1+2*si))+6)[1])) + (((sctx->t + 9*(1+2
*si))+6)[1])), ((Tzp)+6)[2] = ((((alpha)))*((((sctx->tcontext
+ 9*(1+2*si))+6)[2]) - (((sctx->t + 9*(1+2*si))+6)[2])) +
(((sctx->t + 9*(1+2*si))+6)[2]))))
;
381 ELL_3V_LERP(gzp, alpha, sctx->grad + 3*(1+2*si),((gzp)[0] = (((alpha))*(((sctx->gradcontext + 3*(1+2*si))[
0]) - ((sctx->grad + 3*(1+2*si))[0])) + ((sctx->grad + 3
*(1+2*si))[0])), (gzp)[1] = (((alpha))*(((sctx->gradcontext
+ 3*(1+2*si))[1]) - ((sctx->grad + 3*(1+2*si))[1])) + ((sctx
->grad + 3*(1+2*si))[1])), (gzp)[2] = (((alpha))*(((sctx->
gradcontext + 3*(1+2*si))[2]) - ((sctx->grad + 3*(1+2*si))
[2])) + ((sctx->grad + 3*(1+2*si))[2])))
382 sctx->gradcontext + 3*(1+2*si))((gzp)[0] = (((alpha))*(((sctx->gradcontext + 3*(1+2*si))[
0]) - ((sctx->grad + 3*(1+2*si))[0])) + ((sctx->grad + 3
*(1+2*si))[0])), (gzp)[1] = (((alpha))*(((sctx->gradcontext
+ 3*(1+2*si))[1]) - ((sctx->grad + 3*(1+2*si))[1])) + ((sctx
->grad + 3*(1+2*si))[1])), (gzp)[2] = (((alpha))*(((sctx->
gradcontext + 3*(1+2*si))[2]) - ((sctx->grad + 3*(1+2*si))
[2])) + ((sctx->grad + 3*(1+2*si))[2])))
;
383 ELL_3M_SCALE(Tzm, 0.5, Tzm)((((Tzm)+0)[0] = ((0.5))*((Tzm)+0)[0], ((Tzm)+0)[1] = ((0.5))
*((Tzm)+0)[1], ((Tzm)+0)[2] = ((0.5))*((Tzm)+0)[2]), (((Tzm)+
3)[0] = ((0.5))*((Tzm)+3)[0], ((Tzm)+3)[1] = ((0.5))*((Tzm)+3
)[1], ((Tzm)+3)[2] = ((0.5))*((Tzm)+3)[2]), (((Tzm)+6)[0] = (
(0.5))*((Tzm)+6)[0], ((Tzm)+6)[1] = ((0.5))*((Tzm)+6)[1], ((Tzm
)+6)[2] = ((0.5))*((Tzm)+6)[2]))
; ELL_3M_SCALE(Tzp, 0.5, Tzp)((((Tzp)+0)[0] = ((0.5))*((Tzp)+0)[0], ((Tzp)+0)[1] = ((0.5))
*((Tzp)+0)[1], ((Tzp)+0)[2] = ((0.5))*((Tzp)+0)[2]), (((Tzp)+
3)[0] = ((0.5))*((Tzp)+3)[0], ((Tzp)+3)[1] = ((0.5))*((Tzp)+3
)[1], ((Tzp)+3)[2] = ((0.5))*((Tzp)+3)[2]), (((Tzp)+6)[0] = (
(0.5))*((Tzp)+6)[0], ((Tzp)+6)[1] = ((0.5))*((Tzp)+6)[1], ((Tzp
)+6)[2] = ((0.5))*((Tzp)+6)[2]))
;
384 ELL_3V_SCALE(gzm, 0.5, gzm)((gzm)[0] = (0.5)*(gzm)[0], (gzm)[1] = (0.5)*(gzm)[1], (gzm)[
2] = (0.5)*(gzm)[2])
; ELL_3V_SCALE(gzp, 0.5, gzp)((gzp)[0] = (0.5)*(gzp)[0], (gzp)[1] = (0.5)*(gzp)[1], (gzp)[
2] = (0.5)*(gzp)[2])
;
385 } else {
386 ELL_3M_COPY(Tzm, sctx->t + 9*(0+2*si))((((Tzm)+0)[0] = ((sctx->t + 9*(0+2*si))+0)[0], ((Tzm)+0)[
1] = ((sctx->t + 9*(0+2*si))+0)[1], ((Tzm)+0)[2] = ((sctx->
t + 9*(0+2*si))+0)[2]), (((Tzm)+3)[0] = ((sctx->t + 9*(0+2
*si))+3)[0], ((Tzm)+3)[1] = ((sctx->t + 9*(0+2*si))+3)[1],
((Tzm)+3)[2] = ((sctx->t + 9*(0+2*si))+3)[2]), (((Tzm)+6)
[0] = ((sctx->t + 9*(0+2*si))+6)[0], ((Tzm)+6)[1] = ((sctx
->t + 9*(0+2*si))+6)[1], ((Tzm)+6)[2] = ((sctx->t + 9*(
0+2*si))+6)[2]))
;
387 ELL_3V_COPY(gzm, sctx->grad + 3*(0+2*si))((gzm)[0] = (sctx->grad + 3*(0+2*si))[0], (gzm)[1] = (sctx
->grad + 3*(0+2*si))[1], (gzm)[2] = (sctx->grad + 3*(0+
2*si))[2])
;
388 ELL_3M_COPY(Tzp, sctx->t + 9*(1+2*si))((((Tzp)+0)[0] = ((sctx->t + 9*(1+2*si))+0)[0], ((Tzp)+0)[
1] = ((sctx->t + 9*(1+2*si))+0)[1], ((Tzp)+0)[2] = ((sctx->
t + 9*(1+2*si))+0)[2]), (((Tzp)+3)[0] = ((sctx->t + 9*(1+2
*si))+3)[0], ((Tzp)+3)[1] = ((sctx->t + 9*(1+2*si))+3)[1],
((Tzp)+3)[2] = ((sctx->t + 9*(1+2*si))+3)[2]), (((Tzp)+6)
[0] = ((sctx->t + 9*(1+2*si))+6)[0], ((Tzp)+6)[1] = ((sctx
->t + 9*(1+2*si))+6)[1], ((Tzp)+6)[2] = ((sctx->t + 9*(
1+2*si))+6)[2]))
;
389 ELL_3V_COPY(gzp, sctx->grad + 3*(1+2*si))((gzp)[0] = (sctx->grad + 3*(1+2*si))[0], (gzp)[1] = (sctx
->grad + 3*(1+2*si))[1], (gzp)[2] = (sctx->grad + 3*(1+
2*si))[2])
;
390 }
391 computeGradientLin(res, T, g,
392 Txm, gxm, Txp, gxp,
393 Tym, gym, Typ, gyp,
394 Tzm, gzm, Tzp, gzp);
395 break;
396 case 3:
397 ELL_3M_LERP(T, alpha, sctx->t + 9*(1+2*si), sctx->t + 9*(1+2*six))((((T)+0)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*six))+0)[
0]) - (((sctx->t + 9*(1+2*si))+0)[0])) + (((sctx->t + 9
*(1+2*si))+0)[0])), ((T)+0)[1] = ((((alpha)))*((((sctx->t +
9*(1+2*six))+0)[1]) - (((sctx->t + 9*(1+2*si))+0)[1])) + (
((sctx->t + 9*(1+2*si))+0)[1])), ((T)+0)[2] = ((((alpha)))
*((((sctx->t + 9*(1+2*six))+0)[2]) - (((sctx->t + 9*(1+
2*si))+0)[2])) + (((sctx->t + 9*(1+2*si))+0)[2]))), (((T)+
3)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*six))+3)[0]) - (
((sctx->t + 9*(1+2*si))+3)[0])) + (((sctx->t + 9*(1+2*si
))+3)[0])), ((T)+3)[1] = ((((alpha)))*((((sctx->t + 9*(1+2
*six))+3)[1]) - (((sctx->t + 9*(1+2*si))+3)[1])) + (((sctx
->t + 9*(1+2*si))+3)[1])), ((T)+3)[2] = ((((alpha)))*((((sctx
->t + 9*(1+2*six))+3)[2]) - (((sctx->t + 9*(1+2*si))+3)
[2])) + (((sctx->t + 9*(1+2*si))+3)[2]))), (((T)+6)[0] = (
(((alpha)))*((((sctx->t + 9*(1+2*six))+6)[0]) - (((sctx->
t + 9*(1+2*si))+6)[0])) + (((sctx->t + 9*(1+2*si))+6)[0]))
, ((T)+6)[1] = ((((alpha)))*((((sctx->t + 9*(1+2*six))+6)[
1]) - (((sctx->t + 9*(1+2*si))+6)[1])) + (((sctx->t + 9
*(1+2*si))+6)[1])), ((T)+6)[2] = ((((alpha)))*((((sctx->t +
9*(1+2*six))+6)[2]) - (((sctx->t + 9*(1+2*si))+6)[2])) + (
((sctx->t + 9*(1+2*si))+6)[2]))))
;
398 ELL_3V_LERP(g, alpha, sctx->grad + 3*(1+2*si), sctx->grad + 3*(1+2*six))((g)[0] = (((alpha))*(((sctx->grad + 3*(1+2*six))[0]) - ((
sctx->grad + 3*(1+2*si))[0])) + ((sctx->grad + 3*(1+2*si
))[0])), (g)[1] = (((alpha))*(((sctx->grad + 3*(1+2*six))[
1]) - ((sctx->grad + 3*(1+2*si))[1])) + ((sctx->grad + 3
*(1+2*si))[1])), (g)[2] = (((alpha))*(((sctx->grad + 3*(1+
2*six))[2]) - ((sctx->grad + 3*(1+2*si))[2])) + ((sctx->
grad + 3*(1+2*si))[2])))
;
399 ELL_3M_LERP(Tzm, alpha, sctx->t + 9*(0+2*si), sctx->t + 9*(0+2*six))((((Tzm)+0)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*six))+0
)[0]) - (((sctx->t + 9*(0+2*si))+0)[0])) + (((sctx->t +
9*(0+2*si))+0)[0])), ((Tzm)+0)[1] = ((((alpha)))*((((sctx->
t + 9*(0+2*six))+0)[1]) - (((sctx->t + 9*(0+2*si))+0)[1]))
+ (((sctx->t + 9*(0+2*si))+0)[1])), ((Tzm)+0)[2] = ((((alpha
)))*((((sctx->t + 9*(0+2*six))+0)[2]) - (((sctx->t + 9*
(0+2*si))+0)[2])) + (((sctx->t + 9*(0+2*si))+0)[2]))), (((
Tzm)+3)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*six))+3)[0]
) - (((sctx->t + 9*(0+2*si))+3)[0])) + (((sctx->t + 9*(
0+2*si))+3)[0])), ((Tzm)+3)[1] = ((((alpha)))*((((sctx->t +
9*(0+2*six))+3)[1]) - (((sctx->t + 9*(0+2*si))+3)[1])) + (
((sctx->t + 9*(0+2*si))+3)[1])), ((Tzm)+3)[2] = ((((alpha)
))*((((sctx->t + 9*(0+2*six))+3)[2]) - (((sctx->t + 9*(
0+2*si))+3)[2])) + (((sctx->t + 9*(0+2*si))+3)[2]))), (((Tzm
)+6)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*six))+6)[0]) -
(((sctx->t + 9*(0+2*si))+6)[0])) + (((sctx->t + 9*(0+2
*si))+6)[0])), ((Tzm)+6)[1] = ((((alpha)))*((((sctx->t + 9
*(0+2*six))+6)[1]) - (((sctx->t + 9*(0+2*si))+6)[1])) + ((
(sctx->t + 9*(0+2*si))+6)[1])), ((Tzm)+6)[2] = ((((alpha))
)*((((sctx->t + 9*(0+2*six))+6)[2]) - (((sctx->t + 9*(0
+2*si))+6)[2])) + (((sctx->t + 9*(0+2*si))+6)[2]))))
;
400 ELL_3V_LERP(gzm, alpha, sctx->grad + 3*(0+2*si), sctx->grad + 3*(0+2*six))((gzm)[0] = (((alpha))*(((sctx->grad + 3*(0+2*six))[0]) - (
(sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3*(0+2*
si))[0])), (gzm)[1] = (((alpha))*(((sctx->grad + 3*(0+2*six
))[1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx->grad
+ 3*(0+2*si))[1])), (gzm)[2] = (((alpha))*(((sctx->grad +
3*(0+2*six))[2]) - ((sctx->grad + 3*(0+2*si))[2])) + ((sctx
->grad + 3*(0+2*si))[2])))
;
401 if (bag->zi==sz-2) {
402 ELL_3M_COPY(Tzp, T)((((Tzp)+0)[0] = ((T)+0)[0], ((Tzp)+0)[1] = ((T)+0)[1], ((Tzp
)+0)[2] = ((T)+0)[2]), (((Tzp)+3)[0] = ((T)+3)[0], ((Tzp)+3)[
1] = ((T)+3)[1], ((Tzp)+3)[2] = ((T)+3)[2]), (((Tzp)+6)[0] = (
(T)+6)[0], ((Tzp)+6)[1] = ((T)+6)[1], ((Tzp)+6)[2] = ((T)+6)[
2]))
; ELL_3V_COPY(gzp, g)((gzp)[0] = (g)[0], (gzp)[1] = (g)[1], (gzp)[2] = (g)[2]);
403 } else {
404 ELL_3M_LERP(Tzp, alpha, sctx->tcontext + 9*(1+2*si),((((Tzp)+0)[0] = ((((alpha)))*((((sctx->tcontext + 9*(1+2*
six))+0)[0]) - (((sctx->tcontext + 9*(1+2*si))+0)[0])) + (
((sctx->tcontext + 9*(1+2*si))+0)[0])), ((Tzp)+0)[1] = (((
(alpha)))*((((sctx->tcontext + 9*(1+2*six))+0)[1]) - (((sctx
->tcontext + 9*(1+2*si))+0)[1])) + (((sctx->tcontext + 9
*(1+2*si))+0)[1])), ((Tzp)+0)[2] = ((((alpha)))*((((sctx->
tcontext + 9*(1+2*six))+0)[2]) - (((sctx->tcontext + 9*(1+
2*si))+0)[2])) + (((sctx->tcontext + 9*(1+2*si))+0)[2]))),
(((Tzp)+3)[0] = ((((alpha)))*((((sctx->tcontext + 9*(1+2*
six))+3)[0]) - (((sctx->tcontext + 9*(1+2*si))+3)[0])) + (
((sctx->tcontext + 9*(1+2*si))+3)[0])), ((Tzp)+3)[1] = (((
(alpha)))*((((sctx->tcontext + 9*(1+2*six))+3)[1]) - (((sctx
->tcontext + 9*(1+2*si))+3)[1])) + (((sctx->tcontext + 9
*(1+2*si))+3)[1])), ((Tzp)+3)[2] = ((((alpha)))*((((sctx->
tcontext + 9*(1+2*six))+3)[2]) - (((sctx->tcontext + 9*(1+
2*si))+3)[2])) + (((sctx->tcontext + 9*(1+2*si))+3)[2]))),
(((Tzp)+6)[0] = ((((alpha)))*((((sctx->tcontext + 9*(1+2*
six))+6)[0]) - (((sctx->tcontext + 9*(1+2*si))+6)[0])) + (
((sctx->tcontext + 9*(1+2*si))+6)[0])), ((Tzp)+6)[1] = (((
(alpha)))*((((sctx->tcontext + 9*(1+2*six))+6)[1]) - (((sctx
->tcontext + 9*(1+2*si))+6)[1])) + (((sctx->tcontext + 9
*(1+2*si))+6)[1])), ((Tzp)+6)[2] = ((((alpha)))*((((sctx->
tcontext + 9*(1+2*six))+6)[2]) - (((sctx->tcontext + 9*(1+
2*si))+6)[2])) + (((sctx->tcontext + 9*(1+2*si))+6)[2]))))
405 sctx->tcontext + 9*(1+2*six))((((Tzp)+0)[0] = ((((alpha)))*((((sctx->tcontext + 9*(1+2*
six))+0)[0]) - (((sctx->tcontext + 9*(1+2*si))+0)[0])) + (
((sctx->tcontext + 9*(1+2*si))+0)[0])), ((Tzp)+0)[1] = (((
(alpha)))*((((sctx->tcontext + 9*(1+2*six))+0)[1]) - (((sctx
->tcontext + 9*(1+2*si))+0)[1])) + (((sctx->tcontext + 9
*(1+2*si))+0)[1])), ((Tzp)+0)[2] = ((((alpha)))*((((sctx->
tcontext + 9*(1+2*six))+0)[2]) - (((sctx->tcontext + 9*(1+
2*si))+0)[2])) + (((sctx->tcontext + 9*(1+2*si))+0)[2]))),
(((Tzp)+3)[0] = ((((alpha)))*((((sctx->tcontext + 9*(1+2*
six))+3)[0]) - (((sctx->tcontext + 9*(1+2*si))+3)[0])) + (
((sctx->tcontext + 9*(1+2*si))+3)[0])), ((Tzp)+3)[1] = (((
(alpha)))*((((sctx->tcontext + 9*(1+2*six))+3)[1]) - (((sctx
->tcontext + 9*(1+2*si))+3)[1])) + (((sctx->tcontext + 9
*(1+2*si))+3)[1])), ((Tzp)+3)[2] = ((((alpha)))*((((sctx->
tcontext + 9*(1+2*six))+3)[2]) - (((sctx->tcontext + 9*(1+
2*si))+3)[2])) + (((sctx->tcontext + 9*(1+2*si))+3)[2]))),
(((Tzp)+6)[0] = ((((alpha)))*((((sctx->tcontext + 9*(1+2*
six))+6)[0]) - (((sctx->tcontext + 9*(1+2*si))+6)[0])) + (
((sctx->tcontext + 9*(1+2*si))+6)[0])), ((Tzp)+6)[1] = (((
(alpha)))*((((sctx->tcontext + 9*(1+2*six))+6)[1]) - (((sctx
->tcontext + 9*(1+2*si))+6)[1])) + (((sctx->tcontext + 9
*(1+2*si))+6)[1])), ((Tzp)+6)[2] = ((((alpha)))*((((sctx->
tcontext + 9*(1+2*six))+6)[2]) - (((sctx->tcontext + 9*(1+
2*si))+6)[2])) + (((sctx->tcontext + 9*(1+2*si))+6)[2]))))
;
406 ELL_3V_LERP(gzp, alpha, sctx->gradcontext + 3*(1+2*si),((gzp)[0] = (((alpha))*(((sctx->gradcontext + 3*(1+2*six))
[0]) - ((sctx->gradcontext + 3*(1+2*si))[0])) + ((sctx->
gradcontext + 3*(1+2*si))[0])), (gzp)[1] = (((alpha))*(((sctx
->gradcontext + 3*(1+2*six))[1]) - ((sctx->gradcontext +
3*(1+2*si))[1])) + ((sctx->gradcontext + 3*(1+2*si))[1]))
, (gzp)[2] = (((alpha))*(((sctx->gradcontext + 3*(1+2*six)
)[2]) - ((sctx->gradcontext + 3*(1+2*si))[2])) + ((sctx->
gradcontext + 3*(1+2*si))[2])))
407 sctx->gradcontext + 3*(1+2*six))((gzp)[0] = (((alpha))*(((sctx->gradcontext + 3*(1+2*six))
[0]) - ((sctx->gradcontext + 3*(1+2*si))[0])) + ((sctx->
gradcontext + 3*(1+2*si))[0])), (gzp)[1] = (((alpha))*(((sctx
->gradcontext + 3*(1+2*six))[1]) - ((sctx->gradcontext +
3*(1+2*si))[1])) + ((sctx->gradcontext + 3*(1+2*si))[1]))
, (gzp)[2] = (((alpha))*(((sctx->gradcontext + 3*(1+2*six)
)[2]) - ((sctx->gradcontext + 3*(1+2*si))[2])) + ((sctx->
gradcontext + 3*(1+2*si))[2])))
;
408 ELL_3M_SCALE(Tzm, 0.5, Tzm)((((Tzm)+0)[0] = ((0.5))*((Tzm)+0)[0], ((Tzm)+0)[1] = ((0.5))
*((Tzm)+0)[1], ((Tzm)+0)[2] = ((0.5))*((Tzm)+0)[2]), (((Tzm)+
3)[0] = ((0.5))*((Tzm)+3)[0], ((Tzm)+3)[1] = ((0.5))*((Tzm)+3
)[1], ((Tzm)+3)[2] = ((0.5))*((Tzm)+3)[2]), (((Tzm)+6)[0] = (
(0.5))*((Tzm)+6)[0], ((Tzm)+6)[1] = ((0.5))*((Tzm)+6)[1], ((Tzm
)+6)[2] = ((0.5))*((Tzm)+6)[2]))
; ELL_3M_SCALE(Tzp, 0.5, Tzp)((((Tzp)+0)[0] = ((0.5))*((Tzp)+0)[0], ((Tzp)+0)[1] = ((0.5))
*((Tzp)+0)[1], ((Tzp)+0)[2] = ((0.5))*((Tzp)+0)[2]), (((Tzp)+
3)[0] = ((0.5))*((Tzp)+3)[0], ((Tzp)+3)[1] = ((0.5))*((Tzp)+3
)[1], ((Tzp)+3)[2] = ((0.5))*((Tzp)+3)[2]), (((Tzp)+6)[0] = (
(0.5))*((Tzp)+6)[0], ((Tzp)+6)[1] = ((0.5))*((Tzp)+6)[1], ((Tzp
)+6)[2] = ((0.5))*((Tzp)+6)[2]))
;
409 ELL_3V_SCALE(gzm, 0.5, gzm)((gzm)[0] = (0.5)*(gzm)[0], (gzm)[1] = (0.5)*(gzm)[1], (gzm)[
2] = (0.5)*(gzm)[2])
; ELL_3V_SCALE(gzp, 0.5, gzp)((gzp)[0] = (0.5)*(gzp)[0], (gzp)[1] = (0.5)*(gzp)[1], (gzp)[
2] = (0.5)*(gzp)[2])
;
410 }
411 if (xi>0 && xi<sx-2) {
412 unsigned int sixx = xi + 2 + sx*yi;
413 ELL_3M_LERP(Txm, alpha, sctx->t + 9*(1+2*siX), sctx->t + 9*(1+2*si))((((Txm)+0)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*si))+0)
[0]) - (((sctx->t + 9*(1+2*siX))+0)[0])) + (((sctx->t +
9*(1+2*siX))+0)[0])), ((Txm)+0)[1] = ((((alpha)))*((((sctx->
t + 9*(1+2*si))+0)[1]) - (((sctx->t + 9*(1+2*siX))+0)[1]))
+ (((sctx->t + 9*(1+2*siX))+0)[1])), ((Txm)+0)[2] = ((((alpha
)))*((((sctx->t + 9*(1+2*si))+0)[2]) - (((sctx->t + 9*(
1+2*siX))+0)[2])) + (((sctx->t + 9*(1+2*siX))+0)[2]))), ((
(Txm)+3)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*si))+3)[0]
) - (((sctx->t + 9*(1+2*siX))+3)[0])) + (((sctx->t + 9*
(1+2*siX))+3)[0])), ((Txm)+3)[1] = ((((alpha)))*((((sctx->
t + 9*(1+2*si))+3)[1]) - (((sctx->t + 9*(1+2*siX))+3)[1]))
+ (((sctx->t + 9*(1+2*siX))+3)[1])), ((Txm)+3)[2] = ((((alpha
)))*((((sctx->t + 9*(1+2*si))+3)[2]) - (((sctx->t + 9*(
1+2*siX))+3)[2])) + (((sctx->t + 9*(1+2*siX))+3)[2]))), ((
(Txm)+6)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*si))+6)[0]
) - (((sctx->t + 9*(1+2*siX))+6)[0])) + (((sctx->t + 9*
(1+2*siX))+6)[0])), ((Txm)+6)[1] = ((((alpha)))*((((sctx->
t + 9*(1+2*si))+6)[1]) - (((sctx->t + 9*(1+2*siX))+6)[1]))
+ (((sctx->t + 9*(1+2*siX))+6)[1])), ((Txm)+6)[2] = ((((alpha
)))*((((sctx->t + 9*(1+2*si))+6)[2]) - (((sctx->t + 9*(
1+2*siX))+6)[2])) + (((sctx->t + 9*(1+2*siX))+6)[2]))))
;
414 ELL_3V_LERP(gxm, alpha, sctx->grad + 3*(1+2*siX),((gxm)[0] = (((alpha))*(((sctx->grad + 3*(1+2*si))[0]) - (
(sctx->grad + 3*(1+2*siX))[0])) + ((sctx->grad + 3*(1+2
*siX))[0])), (gxm)[1] = (((alpha))*(((sctx->grad + 3*(1+2*
si))[1]) - ((sctx->grad + 3*(1+2*siX))[1])) + ((sctx->grad
+ 3*(1+2*siX))[1])), (gxm)[2] = (((alpha))*(((sctx->grad +
3*(1+2*si))[2]) - ((sctx->grad + 3*(1+2*siX))[2])) + ((sctx
->grad + 3*(1+2*siX))[2])))
415 sctx->grad + 3*(1+2*si))((gxm)[0] = (((alpha))*(((sctx->grad + 3*(1+2*si))[0]) - (
(sctx->grad + 3*(1+2*siX))[0])) + ((sctx->grad + 3*(1+2
*siX))[0])), (gxm)[1] = (((alpha))*(((sctx->grad + 3*(1+2*
si))[1]) - ((sctx->grad + 3*(1+2*siX))[1])) + ((sctx->grad
+ 3*(1+2*siX))[1])), (gxm)[2] = (((alpha))*(((sctx->grad +
3*(1+2*si))[2]) - ((sctx->grad + 3*(1+2*siX))[2])) + ((sctx
->grad + 3*(1+2*siX))[2])))
;
416 ELL_3M_LERP(Txp, alpha, sctx->t + 9*(1+2*six), sctx->t + 9*(1+2*sixx))((((Txp)+0)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*sixx))+
0)[0]) - (((sctx->t + 9*(1+2*six))+0)[0])) + (((sctx->t
+ 9*(1+2*six))+0)[0])), ((Txp)+0)[1] = ((((alpha)))*((((sctx
->t + 9*(1+2*sixx))+0)[1]) - (((sctx->t + 9*(1+2*six))+
0)[1])) + (((sctx->t + 9*(1+2*six))+0)[1])), ((Txp)+0)[2] =
((((alpha)))*((((sctx->t + 9*(1+2*sixx))+0)[2]) - (((sctx
->t + 9*(1+2*six))+0)[2])) + (((sctx->t + 9*(1+2*six))+
0)[2]))), (((Txp)+3)[0] = ((((alpha)))*((((sctx->t + 9*(1+
2*sixx))+3)[0]) - (((sctx->t + 9*(1+2*six))+3)[0])) + (((sctx
->t + 9*(1+2*six))+3)[0])), ((Txp)+3)[1] = ((((alpha)))*((
((sctx->t + 9*(1+2*sixx))+3)[1]) - (((sctx->t + 9*(1+2*
six))+3)[1])) + (((sctx->t + 9*(1+2*six))+3)[1])), ((Txp)+
3)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*sixx))+3)[2]) - (
((sctx->t + 9*(1+2*six))+3)[2])) + (((sctx->t + 9*(1+2*
six))+3)[2]))), (((Txp)+6)[0] = ((((alpha)))*((((sctx->t +
9*(1+2*sixx))+6)[0]) - (((sctx->t + 9*(1+2*six))+6)[0])) +
(((sctx->t + 9*(1+2*six))+6)[0])), ((Txp)+6)[1] = ((((alpha
)))*((((sctx->t + 9*(1+2*sixx))+6)[1]) - (((sctx->t + 9
*(1+2*six))+6)[1])) + (((sctx->t + 9*(1+2*six))+6)[1])), (
(Txp)+6)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*sixx))+6)[
2]) - (((sctx->t + 9*(1+2*six))+6)[2])) + (((sctx->t + 9
*(1+2*six))+6)[2]))))
;
417 ELL_3V_LERP(gxp, alpha, sctx->grad + 3*(1+2*six),((gxp)[0] = (((alpha))*(((sctx->grad + 3*(1+2*sixx))[0]) -
((sctx->grad + 3*(1+2*six))[0])) + ((sctx->grad + 3*(1
+2*six))[0])), (gxp)[1] = (((alpha))*(((sctx->grad + 3*(1+
2*sixx))[1]) - ((sctx->grad + 3*(1+2*six))[1])) + ((sctx->
grad + 3*(1+2*six))[1])), (gxp)[2] = (((alpha))*(((sctx->grad
+ 3*(1+2*sixx))[2]) - ((sctx->grad + 3*(1+2*six))[2])) + (
(sctx->grad + 3*(1+2*six))[2])))
418 sctx->grad + 3*(1+2*sixx))((gxp)[0] = (((alpha))*(((sctx->grad + 3*(1+2*sixx))[0]) -
((sctx->grad + 3*(1+2*six))[0])) + ((sctx->grad + 3*(1
+2*six))[0])), (gxp)[1] = (((alpha))*(((sctx->grad + 3*(1+
2*sixx))[1]) - ((sctx->grad + 3*(1+2*six))[1])) + ((sctx->
grad + 3*(1+2*six))[1])), (gxp)[2] = (((alpha))*(((sctx->grad
+ 3*(1+2*sixx))[2]) - ((sctx->grad + 3*(1+2*six))[2])) + (
(sctx->grad + 3*(1+2*six))[2])))
;
419 ELL_3M_SCALE(Txm, 0.5, Txm)((((Txm)+0)[0] = ((0.5))*((Txm)+0)[0], ((Txm)+0)[1] = ((0.5))
*((Txm)+0)[1], ((Txm)+0)[2] = ((0.5))*((Txm)+0)[2]), (((Txm)+
3)[0] = ((0.5))*((Txm)+3)[0], ((Txm)+3)[1] = ((0.5))*((Txm)+3
)[1], ((Txm)+3)[2] = ((0.5))*((Txm)+3)[2]), (((Txm)+6)[0] = (
(0.5))*((Txm)+6)[0], ((Txm)+6)[1] = ((0.5))*((Txm)+6)[1], ((Txm
)+6)[2] = ((0.5))*((Txm)+6)[2]))
; ELL_3M_SCALE(Txp, 0.5, Txp)((((Txp)+0)[0] = ((0.5))*((Txp)+0)[0], ((Txp)+0)[1] = ((0.5))
*((Txp)+0)[1], ((Txp)+0)[2] = ((0.5))*((Txp)+0)[2]), (((Txp)+
3)[0] = ((0.5))*((Txp)+3)[0], ((Txp)+3)[1] = ((0.5))*((Txp)+3
)[1], ((Txp)+3)[2] = ((0.5))*((Txp)+3)[2]), (((Txp)+6)[0] = (
(0.5))*((Txp)+6)[0], ((Txp)+6)[1] = ((0.5))*((Txp)+6)[1], ((Txp
)+6)[2] = ((0.5))*((Txp)+6)[2]))
;
420 ELL_3V_SCALE(gxm, 0.5, gxm)((gxm)[0] = (0.5)*(gxm)[0], (gxm)[1] = (0.5)*(gxm)[1], (gxm)[
2] = (0.5)*(gxm)[2])
; ELL_3V_SCALE(gxp, 0.5, gxp)((gxp)[0] = (0.5)*(gxp)[0], (gxp)[1] = (0.5)*(gxp)[1], (gxp)[
2] = (0.5)*(gxp)[2])
;
421 } else {
422 ELL_3M_COPY(Txm, sctx->t + 9*(1+2*si))((((Txm)+0)[0] = ((sctx->t + 9*(1+2*si))+0)[0], ((Txm)+0)[
1] = ((sctx->t + 9*(1+2*si))+0)[1], ((Txm)+0)[2] = ((sctx->
t + 9*(1+2*si))+0)[2]), (((Txm)+3)[0] = ((sctx->t + 9*(1+2
*si))+3)[0], ((Txm)+3)[1] = ((sctx->t + 9*(1+2*si))+3)[1],
((Txm)+3)[2] = ((sctx->t + 9*(1+2*si))+3)[2]), (((Txm)+6)
[0] = ((sctx->t + 9*(1+2*si))+6)[0], ((Txm)+6)[1] = ((sctx
->t + 9*(1+2*si))+6)[1], ((Txm)+6)[2] = ((sctx->t + 9*(
1+2*si))+6)[2]))
;
423 ELL_3V_COPY(gxm, sctx->grad + 3*(1+2*si))((gxm)[0] = (sctx->grad + 3*(1+2*si))[0], (gxm)[1] = (sctx
->grad + 3*(1+2*si))[1], (gxm)[2] = (sctx->grad + 3*(1+
2*si))[2])
;
424 ELL_3M_COPY(Txp, sctx->t + 9*(1+2*six))((((Txp)+0)[0] = ((sctx->t + 9*(1+2*six))+0)[0], ((Txp)+0)
[1] = ((sctx->t + 9*(1+2*six))+0)[1], ((Txp)+0)[2] = ((sctx
->t + 9*(1+2*six))+0)[2]), (((Txp)+3)[0] = ((sctx->t + 9
*(1+2*six))+3)[0], ((Txp)+3)[1] = ((sctx->t + 9*(1+2*six))
+3)[1], ((Txp)+3)[2] = ((sctx->t + 9*(1+2*six))+3)[2]), ((
(Txp)+6)[0] = ((sctx->t + 9*(1+2*six))+6)[0], ((Txp)+6)[1]
= ((sctx->t + 9*(1+2*six))+6)[1], ((Txp)+6)[2] = ((sctx->
t + 9*(1+2*six))+6)[2]))
;
425 ELL_3V_COPY(gxp, sctx->grad + 3*(1+2*six))((gxp)[0] = (sctx->grad + 3*(1+2*six))[0], (gxp)[1] = (sctx
->grad + 3*(1+2*six))[1], (gxp)[2] = (sctx->grad + 3*(1
+2*six))[2])
;
426 }
427 if (yi==0) {
428 ELL_3M_COPY(Tym, T)((((Tym)+0)[0] = ((T)+0)[0], ((Tym)+0)[1] = ((T)+0)[1], ((Tym
)+0)[2] = ((T)+0)[2]), (((Tym)+3)[0] = ((T)+3)[0], ((Tym)+3)[
1] = ((T)+3)[1], ((Tym)+3)[2] = ((T)+3)[2]), (((Tym)+6)[0] = (
(T)+6)[0], ((Tym)+6)[1] = ((T)+6)[1], ((Tym)+6)[2] = ((T)+6)[
2]))
; ELL_3V_COPY(gym, g)((gym)[0] = (g)[0], (gym)[1] = (g)[1], (gym)[2] = (g)[2]);
429 } else {
430 ELL_3M_LERP(Tym, alpha, sctx->t + 9*(1+2*siY), sctx->t + 9*(1+2*sixY))((((Tym)+0)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*sixY))+
0)[0]) - (((sctx->t + 9*(1+2*siY))+0)[0])) + (((sctx->t
+ 9*(1+2*siY))+0)[0])), ((Tym)+0)[1] = ((((alpha)))*((((sctx
->t + 9*(1+2*sixY))+0)[1]) - (((sctx->t + 9*(1+2*siY))+
0)[1])) + (((sctx->t + 9*(1+2*siY))+0)[1])), ((Tym)+0)[2] =
((((alpha)))*((((sctx->t + 9*(1+2*sixY))+0)[2]) - (((sctx
->t + 9*(1+2*siY))+0)[2])) + (((sctx->t + 9*(1+2*siY))+
0)[2]))), (((Tym)+3)[0] = ((((alpha)))*((((sctx->t + 9*(1+
2*sixY))+3)[0]) - (((sctx->t + 9*(1+2*siY))+3)[0])) + (((sctx
->t + 9*(1+2*siY))+3)[0])), ((Tym)+3)[1] = ((((alpha)))*((
((sctx->t + 9*(1+2*sixY))+3)[1]) - (((sctx->t + 9*(1+2*
siY))+3)[1])) + (((sctx->t + 9*(1+2*siY))+3)[1])), ((Tym)+
3)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*sixY))+3)[2]) - (
((sctx->t + 9*(1+2*siY))+3)[2])) + (((sctx->t + 9*(1+2*
siY))+3)[2]))), (((Tym)+6)[0] = ((((alpha)))*((((sctx->t +
9*(1+2*sixY))+6)[0]) - (((sctx->t + 9*(1+2*siY))+6)[0])) +
(((sctx->t + 9*(1+2*siY))+6)[0])), ((Tym)+6)[1] = ((((alpha
)))*((((sctx->t + 9*(1+2*sixY))+6)[1]) - (((sctx->t + 9
*(1+2*siY))+6)[1])) + (((sctx->t + 9*(1+2*siY))+6)[1])), (
(Tym)+6)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*sixY))+6)[
2]) - (((sctx->t + 9*(1+2*siY))+6)[2])) + (((sctx->t + 9
*(1+2*siY))+6)[2]))))
;
431 ELL_3V_LERP(gym, alpha, sctx->grad + 3*(1+2*siY),((gym)[0] = (((alpha))*(((sctx->grad + 3*(1+2*sixY))[0]) -
((sctx->grad + 3*(1+2*siY))[0])) + ((sctx->grad + 3*(1
+2*siY))[0])), (gym)[1] = (((alpha))*(((sctx->grad + 3*(1+
2*sixY))[1]) - ((sctx->grad + 3*(1+2*siY))[1])) + ((sctx->
grad + 3*(1+2*siY))[1])), (gym)[2] = (((alpha))*(((sctx->grad
+ 3*(1+2*sixY))[2]) - ((sctx->grad + 3*(1+2*siY))[2])) + (
(sctx->grad + 3*(1+2*siY))[2])))
432 sctx->grad + 3*(1+2*sixY))((gym)[0] = (((alpha))*(((sctx->grad + 3*(1+2*sixY))[0]) -
((sctx->grad + 3*(1+2*siY))[0])) + ((sctx->grad + 3*(1
+2*siY))[0])), (gym)[1] = (((alpha))*(((sctx->grad + 3*(1+
2*sixY))[1]) - ((sctx->grad + 3*(1+2*siY))[1])) + ((sctx->
grad + 3*(1+2*siY))[1])), (gym)[2] = (((alpha))*(((sctx->grad
+ 3*(1+2*sixY))[2]) - ((sctx->grad + 3*(1+2*siY))[2])) + (
(sctx->grad + 3*(1+2*siY))[2])))
;
433 }
434 if (yi==sy-1) {
435 ELL_3M_COPY(Typ, T)((((Typ)+0)[0] = ((T)+0)[0], ((Typ)+0)[1] = ((T)+0)[1], ((Typ
)+0)[2] = ((T)+0)[2]), (((Typ)+3)[0] = ((T)+3)[0], ((Typ)+3)[
1] = ((T)+3)[1], ((Typ)+3)[2] = ((T)+3)[2]), (((Typ)+6)[0] = (
(T)+6)[0], ((Typ)+6)[1] = ((T)+6)[1], ((Typ)+6)[2] = ((T)+6)[
2]))
; ELL_3V_COPY(gyp, g)((gyp)[0] = (g)[0], (gyp)[1] = (g)[1], (gyp)[2] = (g)[2]);
436 } else {
437 ELL_3M_LERP(Typ, alpha, sctx->t + 9*(1+2*siy), sctx->t + 9*(1+2*sixy))((((Typ)+0)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*sixy))+
0)[0]) - (((sctx->t + 9*(1+2*siy))+0)[0])) + (((sctx->t
+ 9*(1+2*siy))+0)[0])), ((Typ)+0)[1] = ((((alpha)))*((((sctx
->t + 9*(1+2*sixy))+0)[1]) - (((sctx->t + 9*(1+2*siy))+
0)[1])) + (((sctx->t + 9*(1+2*siy))+0)[1])), ((Typ)+0)[2] =
((((alpha)))*((((sctx->t + 9*(1+2*sixy))+0)[2]) - (((sctx
->t + 9*(1+2*siy))+0)[2])) + (((sctx->t + 9*(1+2*siy))+
0)[2]))), (((Typ)+3)[0] = ((((alpha)))*((((sctx->t + 9*(1+
2*sixy))+3)[0]) - (((sctx->t + 9*(1+2*siy))+3)[0])) + (((sctx
->t + 9*(1+2*siy))+3)[0])), ((Typ)+3)[1] = ((((alpha)))*((
((sctx->t + 9*(1+2*sixy))+3)[1]) - (((sctx->t + 9*(1+2*
siy))+3)[1])) + (((sctx->t + 9*(1+2*siy))+3)[1])), ((Typ)+
3)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*sixy))+3)[2]) - (
((sctx->t + 9*(1+2*siy))+3)[2])) + (((sctx->t + 9*(1+2*
siy))+3)[2]))), (((Typ)+6)[0] = ((((alpha)))*((((sctx->t +
9*(1+2*sixy))+6)[0]) - (((sctx->t + 9*(1+2*siy))+6)[0])) +
(((sctx->t + 9*(1+2*siy))+6)[0])), ((Typ)+6)[1] = ((((alpha
)))*((((sctx->t + 9*(1+2*sixy))+6)[1]) - (((sctx->t + 9
*(1+2*siy))+6)[1])) + (((sctx->t + 9*(1+2*siy))+6)[1])), (
(Typ)+6)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*sixy))+6)[
2]) - (((sctx->t + 9*(1+2*siy))+6)[2])) + (((sctx->t + 9
*(1+2*siy))+6)[2]))))
;
438 ELL_3V_LERP(gyp, alpha, sctx->grad + 3*(1+2*siy),((gyp)[0] = (((alpha))*(((sctx->grad + 3*(1+2*sixy))[0]) -
((sctx->grad + 3*(1+2*siy))[0])) + ((sctx->grad + 3*(1
+2*siy))[0])), (gyp)[1] = (((alpha))*(((sctx->grad + 3*(1+
2*sixy))[1]) - ((sctx->grad + 3*(1+2*siy))[1])) + ((sctx->
grad + 3*(1+2*siy))[1])), (gyp)[2] = (((alpha))*(((sctx->grad
+ 3*(1+2*sixy))[2]) - ((sctx->grad + 3*(1+2*siy))[2])) + (
(sctx->grad + 3*(1+2*siy))[2])))
439 sctx->grad + 3*(1+2*sixy))((gyp)[0] = (((alpha))*(((sctx->grad + 3*(1+2*sixy))[0]) -
((sctx->grad + 3*(1+2*siy))[0])) + ((sctx->grad + 3*(1
+2*siy))[0])), (gyp)[1] = (((alpha))*(((sctx->grad + 3*(1+
2*sixy))[1]) - ((sctx->grad + 3*(1+2*siy))[1])) + ((sctx->
grad + 3*(1+2*siy))[1])), (gyp)[2] = (((alpha))*(((sctx->grad
+ 3*(1+2*sixy))[2]) - ((sctx->grad + 3*(1+2*siy))[2])) + (
(sctx->grad + 3*(1+2*siy))[2])))
;
440 }
441 if (yi!=0 && yi!=sy-1) {
442 ELL_3M_SCALE(Tym, 0.5, Tym)((((Tym)+0)[0] = ((0.5))*((Tym)+0)[0], ((Tym)+0)[1] = ((0.5))
*((Tym)+0)[1], ((Tym)+0)[2] = ((0.5))*((Tym)+0)[2]), (((Tym)+
3)[0] = ((0.5))*((Tym)+3)[0], ((Tym)+3)[1] = ((0.5))*((Tym)+3
)[1], ((Tym)+3)[2] = ((0.5))*((Tym)+3)[2]), (((Tym)+6)[0] = (
(0.5))*((Tym)+6)[0], ((Tym)+6)[1] = ((0.5))*((Tym)+6)[1], ((Tym
)+6)[2] = ((0.5))*((Tym)+6)[2]))
; ELL_3M_SCALE(Typ, 0.5, Typ)((((Typ)+0)[0] = ((0.5))*((Typ)+0)[0], ((Typ)+0)[1] = ((0.5))
*((Typ)+0)[1], ((Typ)+0)[2] = ((0.5))*((Typ)+0)[2]), (((Typ)+
3)[0] = ((0.5))*((Typ)+3)[0], ((Typ)+3)[1] = ((0.5))*((Typ)+3
)[1], ((Typ)+3)[2] = ((0.5))*((Typ)+3)[2]), (((Typ)+6)[0] = (
(0.5))*((Typ)+6)[0], ((Typ)+6)[1] = ((0.5))*((Typ)+6)[1], ((Typ
)+6)[2] = ((0.5))*((Typ)+6)[2]))
;
443 ELL_3V_SCALE(gym, 0.5, gym)((gym)[0] = (0.5)*(gym)[0], (gym)[1] = (0.5)*(gym)[1], (gym)[
2] = (0.5)*(gym)[2])
; ELL_3V_SCALE(gyp, 0.5, gyp)((gyp)[0] = (0.5)*(gyp)[0], (gyp)[1] = (0.5)*(gyp)[1], (gyp)[
2] = (0.5)*(gyp)[2])
;
444 }
445 computeGradientLin(res, T, g,
446 Txm, gxm, Txp, gxp,
447 Tym, gym, Typ, gyp,
448 Tzm, gzm, Tzp, gzp);
449 break;
450 case 4:
451 ELL_3M_LERP(T, alpha, sctx->t + 9*(1+2*si), sctx->t + 9*(1+2*siy))((((T)+0)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*siy))+0)[
0]) - (((sctx->t + 9*(1+2*si))+0)[0])) + (((sctx->t + 9
*(1+2*si))+0)[0])), ((T)+0)[1] = ((((alpha)))*((((sctx->t +
9*(1+2*siy))+0)[1]) - (((sctx->t + 9*(1+2*si))+0)[1])) + (
((sctx->t + 9*(1+2*si))+0)[1])), ((T)+0)[2] = ((((alpha)))
*((((sctx->t + 9*(1+2*siy))+0)[2]) - (((sctx->t + 9*(1+
2*si))+0)[2])) + (((sctx->t + 9*(1+2*si))+0)[2]))), (((T)+
3)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*siy))+3)[0]) - (
((sctx->t + 9*(1+2*si))+3)[0])) + (((sctx->t + 9*(1+2*si
))+3)[0])), ((T)+3)[1] = ((((alpha)))*((((sctx->t + 9*(1+2
*siy))+3)[1]) - (((sctx->t + 9*(1+2*si))+3)[1])) + (((sctx
->t + 9*(1+2*si))+3)[1])), ((T)+3)[2] = ((((alpha)))*((((sctx
->t + 9*(1+2*siy))+3)[2]) - (((sctx->t + 9*(1+2*si))+3)
[2])) + (((sctx->t + 9*(1+2*si))+3)[2]))), (((T)+6)[0] = (
(((alpha)))*((((sctx->t + 9*(1+2*siy))+6)[0]) - (((sctx->
t + 9*(1+2*si))+6)[0])) + (((sctx->t + 9*(1+2*si))+6)[0]))
, ((T)+6)[1] = ((((alpha)))*((((sctx->t + 9*(1+2*siy))+6)[
1]) - (((sctx->t + 9*(1+2*si))+6)[1])) + (((sctx->t + 9
*(1+2*si))+6)[1])), ((T)+6)[2] = ((((alpha)))*((((sctx->t +
9*(1+2*siy))+6)[2]) - (((sctx->t + 9*(1+2*si))+6)[2])) + (
((sctx->t + 9*(1+2*si))+6)[2]))))
;
452 ELL_3V_LERP(g, alpha, sctx->grad + 3*(1+2*si), sctx->grad + 3*(1+2*siy))((g)[0] = (((alpha))*(((sctx->grad + 3*(1+2*siy))[0]) - ((
sctx->grad + 3*(1+2*si))[0])) + ((sctx->grad + 3*(1+2*si
))[0])), (g)[1] = (((alpha))*(((sctx->grad + 3*(1+2*siy))[
1]) - ((sctx->grad + 3*(1+2*si))[1])) + ((sctx->grad + 3
*(1+2*si))[1])), (g)[2] = (((alpha))*(((sctx->grad + 3*(1+
2*siy))[2]) - ((sctx->grad + 3*(1+2*si))[2])) + ((sctx->
grad + 3*(1+2*si))[2])))
;
453 ELL_3M_LERP(Tzm, alpha, sctx->t + 9*(0+2*si), sctx->t + 9*(0+2*siy))((((Tzm)+0)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*siy))+0
)[0]) - (((sctx->t + 9*(0+2*si))+0)[0])) + (((sctx->t +
9*(0+2*si))+0)[0])), ((Tzm)+0)[1] = ((((alpha)))*((((sctx->
t + 9*(0+2*siy))+0)[1]) - (((sctx->t + 9*(0+2*si))+0)[1]))
+ (((sctx->t + 9*(0+2*si))+0)[1])), ((Tzm)+0)[2] = ((((alpha
)))*((((sctx->t + 9*(0+2*siy))+0)[2]) - (((sctx->t + 9*
(0+2*si))+0)[2])) + (((sctx->t + 9*(0+2*si))+0)[2]))), (((
Tzm)+3)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*siy))+3)[0]
) - (((sctx->t + 9*(0+2*si))+3)[0])) + (((sctx->t + 9*(
0+2*si))+3)[0])), ((Tzm)+3)[1] = ((((alpha)))*((((sctx->t +
9*(0+2*siy))+3)[1]) - (((sctx->t + 9*(0+2*si))+3)[1])) + (
((sctx->t + 9*(0+2*si))+3)[1])), ((Tzm)+3)[2] = ((((alpha)
))*((((sctx->t + 9*(0+2*siy))+3)[2]) - (((sctx->t + 9*(
0+2*si))+3)[2])) + (((sctx->t + 9*(0+2*si))+3)[2]))), (((Tzm
)+6)[0] = ((((alpha)))*((((sctx->t + 9*(0+2*siy))+6)[0]) -
(((sctx->t + 9*(0+2*si))+6)[0])) + (((sctx->t + 9*(0+2
*si))+6)[0])), ((Tzm)+6)[1] = ((((alpha)))*((((sctx->t + 9
*(0+2*siy))+6)[1]) - (((sctx->t + 9*(0+2*si))+6)[1])) + ((
(sctx->t + 9*(0+2*si))+6)[1])), ((Tzm)+6)[2] = ((((alpha))
)*((((sctx->t + 9*(0+2*siy))+6)[2]) - (((sctx->t + 9*(0
+2*si))+6)[2])) + (((sctx->t + 9*(0+2*si))+6)[2]))))
;
454 ELL_3V_LERP(gzm, alpha, sctx->grad + 3*(0+2*si), sctx->grad + 3*(0+2*siy))((gzm)[0] = (((alpha))*(((sctx->grad + 3*(0+2*siy))[0]) - (
(sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3*(0+2*
si))[0])), (gzm)[1] = (((alpha))*(((sctx->grad + 3*(0+2*siy
))[1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx->grad
+ 3*(0+2*si))[1])), (gzm)[2] = (((alpha))*(((sctx->grad +
3*(0+2*siy))[2]) - ((sctx->grad + 3*(0+2*si))[2])) + ((sctx
->grad + 3*(0+2*si))[2])))
;
455 if (bag->zi==sz-2) {
456 ELL_3M_COPY(Tzp, T)((((Tzp)+0)[0] = ((T)+0)[0], ((Tzp)+0)[1] = ((T)+0)[1], ((Tzp
)+0)[2] = ((T)+0)[2]), (((Tzp)+3)[0] = ((T)+3)[0], ((Tzp)+3)[
1] = ((T)+3)[1], ((Tzp)+3)[2] = ((T)+3)[2]), (((Tzp)+6)[0] = (
(T)+6)[0], ((Tzp)+6)[1] = ((T)+6)[1], ((Tzp)+6)[2] = ((T)+6)[
2]))
; ELL_3V_COPY(gzp, g)((gzp)[0] = (g)[0], (gzp)[1] = (g)[1], (gzp)[2] = (g)[2]);
457 } else {
458 ELL_3M_LERP(Tzp, alpha, sctx->tcontext + 9*(1+2*si),((((Tzp)+0)[0] = ((((alpha)))*((((sctx->tcontext + 9*(1+2*
siy))+0)[0]) - (((sctx->tcontext + 9*(1+2*si))+0)[0])) + (
((sctx->tcontext + 9*(1+2*si))+0)[0])), ((Tzp)+0)[1] = (((
(alpha)))*((((sctx->tcontext + 9*(1+2*siy))+0)[1]) - (((sctx
->tcontext + 9*(1+2*si))+0)[1])) + (((sctx->tcontext + 9
*(1+2*si))+0)[1])), ((Tzp)+0)[2] = ((((alpha)))*((((sctx->
tcontext + 9*(1+2*siy))+0)[2]) - (((sctx->tcontext + 9*(1+
2*si))+0)[2])) + (((sctx->tcontext + 9*(1+2*si))+0)[2]))),
(((Tzp)+3)[0] = ((((alpha)))*((((sctx->tcontext + 9*(1+2*
siy))+3)[0]) - (((sctx->tcontext + 9*(1+2*si))+3)[0])) + (
((sctx->tcontext + 9*(1+2*si))+3)[0])), ((Tzp)+3)[1] = (((
(alpha)))*((((sctx->tcontext + 9*(1+2*siy))+3)[1]) - (((sctx
->tcontext + 9*(1+2*si))+3)[1])) + (((sctx->tcontext + 9
*(1+2*si))+3)[1])), ((Tzp)+3)[2] = ((((alpha)))*((((sctx->
tcontext + 9*(1+2*siy))+3)[2]) - (((sctx->tcontext + 9*(1+
2*si))+3)[2])) + (((sctx->tcontext + 9*(1+2*si))+3)[2]))),
(((Tzp)+6)[0] = ((((alpha)))*((((sctx->tcontext + 9*(1+2*
siy))+6)[0]) - (((sctx->tcontext + 9*(1+2*si))+6)[0])) + (
((sctx->tcontext + 9*(1+2*si))+6)[0])), ((Tzp)+6)[1] = (((
(alpha)))*((((sctx->tcontext + 9*(1+2*siy))+6)[1]) - (((sctx
->tcontext + 9*(1+2*si))+6)[1])) + (((sctx->tcontext + 9
*(1+2*si))+6)[1])), ((Tzp)+6)[2] = ((((alpha)))*((((sctx->
tcontext + 9*(1+2*siy))+6)[2]) - (((sctx->tcontext + 9*(1+
2*si))+6)[2])) + (((sctx->tcontext + 9*(1+2*si))+6)[2]))))
459 sctx->tcontext + 9*(1+2*siy))((((Tzp)+0)[0] = ((((alpha)))*((((sctx->tcontext + 9*(1+2*
siy))+0)[0]) - (((sctx->tcontext + 9*(1+2*si))+0)[0])) + (
((sctx->tcontext + 9*(1+2*si))+0)[0])), ((Tzp)+0)[1] = (((
(alpha)))*((((sctx->tcontext + 9*(1+2*siy))+0)[1]) - (((sctx
->tcontext + 9*(1+2*si))+0)[1])) + (((sctx->tcontext + 9
*(1+2*si))+0)[1])), ((Tzp)+0)[2] = ((((alpha)))*((((sctx->
tcontext + 9*(1+2*siy))+0)[2]) - (((sctx->tcontext + 9*(1+
2*si))+0)[2])) + (((sctx->tcontext + 9*(1+2*si))+0)[2]))),
(((Tzp)+3)[0] = ((((alpha)))*((((sctx->tcontext + 9*(1+2*
siy))+3)[0]) - (((sctx->tcontext + 9*(1+2*si))+3)[0])) + (
((sctx->tcontext + 9*(1+2*si))+3)[0])), ((Tzp)+3)[1] = (((
(alpha)))*((((sctx->tcontext + 9*(1+2*siy))+3)[1]) - (((sctx
->tcontext + 9*(1+2*si))+3)[1])) + (((sctx->tcontext + 9
*(1+2*si))+3)[1])), ((Tzp)+3)[2] = ((((alpha)))*((((sctx->
tcontext + 9*(1+2*siy))+3)[2]) - (((sctx->tcontext + 9*(1+
2*si))+3)[2])) + (((sctx->tcontext + 9*(1+2*si))+3)[2]))),
(((Tzp)+6)[0] = ((((alpha)))*((((sctx->tcontext + 9*(1+2*
siy))+6)[0]) - (((sctx->tcontext + 9*(1+2*si))+6)[0])) + (
((sctx->tcontext + 9*(1+2*si))+6)[0])), ((Tzp)+6)[1] = (((
(alpha)))*((((sctx->tcontext + 9*(1+2*siy))+6)[1]) - (((sctx
->tcontext + 9*(1+2*si))+6)[1])) + (((sctx->tcontext + 9
*(1+2*si))+6)[1])), ((Tzp)+6)[2] = ((((alpha)))*((((sctx->
tcontext + 9*(1+2*siy))+6)[2]) - (((sctx->tcontext + 9*(1+
2*si))+6)[2])) + (((sctx->tcontext + 9*(1+2*si))+6)[2]))))
;
460 ELL_3V_LERP(gzp, alpha, sctx->gradcontext + 3*(1+2*si),((gzp)[0] = (((alpha))*(((sctx->gradcontext + 3*(1+2*siy))
[0]) - ((sctx->gradcontext + 3*(1+2*si))[0])) + ((sctx->
gradcontext + 3*(1+2*si))[0])), (gzp)[1] = (((alpha))*(((sctx
->gradcontext + 3*(1+2*siy))[1]) - ((sctx->gradcontext +
3*(1+2*si))[1])) + ((sctx->gradcontext + 3*(1+2*si))[1]))
, (gzp)[2] = (((alpha))*(((sctx->gradcontext + 3*(1+2*siy)
)[2]) - ((sctx->gradcontext + 3*(1+2*si))[2])) + ((sctx->
gradcontext + 3*(1+2*si))[2])))
461 sctx->gradcontext + 3*(1+2*siy))((gzp)[0] = (((alpha))*(((sctx->gradcontext + 3*(1+2*siy))
[0]) - ((sctx->gradcontext + 3*(1+2*si))[0])) + ((sctx->
gradcontext + 3*(1+2*si))[0])), (gzp)[1] = (((alpha))*(((sctx
->gradcontext + 3*(1+2*siy))[1]) - ((sctx->gradcontext +
3*(1+2*si))[1])) + ((sctx->gradcontext + 3*(1+2*si))[1]))
, (gzp)[2] = (((alpha))*(((sctx->gradcontext + 3*(1+2*siy)
)[2]) - ((sctx->gradcontext + 3*(1+2*si))[2])) + ((sctx->
gradcontext + 3*(1+2*si))[2])))
;
462 ELL_3M_SCALE(Tzm, 0.5, Tzm)((((Tzm)+0)[0] = ((0.5))*((Tzm)+0)[0], ((Tzm)+0)[1] = ((0.5))
*((Tzm)+0)[1], ((Tzm)+0)[2] = ((0.5))*((Tzm)+0)[2]), (((Tzm)+
3)[0] = ((0.5))*((Tzm)+3)[0], ((Tzm)+3)[1] = ((0.5))*((Tzm)+3
)[1], ((Tzm)+3)[2] = ((0.5))*((Tzm)+3)[2]), (((Tzm)+6)[0] = (
(0.5))*((Tzm)+6)[0], ((Tzm)+6)[1] = ((0.5))*((Tzm)+6)[1], ((Tzm
)+6)[2] = ((0.5))*((Tzm)+6)[2]))
; ELL_3M_SCALE(Tzp, 0.5, Tzp)((((Tzp)+0)[0] = ((0.5))*((Tzp)+0)[0], ((Tzp)+0)[1] = ((0.5))
*((Tzp)+0)[1], ((Tzp)+0)[2] = ((0.5))*((Tzp)+0)[2]), (((Tzp)+
3)[0] = ((0.5))*((Tzp)+3)[0], ((Tzp)+3)[1] = ((0.5))*((Tzp)+3
)[1], ((Tzp)+3)[2] = ((0.5))*((Tzp)+3)[2]), (((Tzp)+6)[0] = (
(0.5))*((Tzp)+6)[0], ((Tzp)+6)[1] = ((0.5))*((Tzp)+6)[1], ((Tzp
)+6)[2] = ((0.5))*((Tzp)+6)[2]))
;
463 ELL_3V_SCALE(gzm, 0.5, gzm)((gzm)[0] = (0.5)*(gzm)[0], (gzm)[1] = (0.5)*(gzm)[1], (gzm)[
2] = (0.5)*(gzm)[2])
; ELL_3V_SCALE(gzp, 0.5, gzp)((gzp)[0] = (0.5)*(gzp)[0], (gzp)[1] = (0.5)*(gzp)[1], (gzp)[
2] = (0.5)*(gzp)[2])
;
464 }
465 if (xi==0) {
466 ELL_3M_COPY(Txm, T)((((Txm)+0)[0] = ((T)+0)[0], ((Txm)+0)[1] = ((T)+0)[1], ((Txm
)+0)[2] = ((T)+0)[2]), (((Txm)+3)[0] = ((T)+3)[0], ((Txm)+3)[
1] = ((T)+3)[1], ((Txm)+3)[2] = ((T)+3)[2]), (((Txm)+6)[0] = (
(T)+6)[0], ((Txm)+6)[1] = ((T)+6)[1], ((Txm)+6)[2] = ((T)+6)[
2]))
; ELL_3V_COPY(gxm, g)((gxm)[0] = (g)[0], (gxm)[1] = (g)[1], (gxm)[2] = (g)[2]);
467 } else {
468 ELL_3M_LERP(Txm, alpha, sctx->t + 9*(1+2*siX), sctx->t + 9*(1+2*siXy))((((Txm)+0)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*siXy))+
0)[0]) - (((sctx->t + 9*(1+2*siX))+0)[0])) + (((sctx->t
+ 9*(1+2*siX))+0)[0])), ((Txm)+0)[1] = ((((alpha)))*((((sctx
->t + 9*(1+2*siXy))+0)[1]) - (((sctx->t + 9*(1+2*siX))+
0)[1])) + (((sctx->t + 9*(1+2*siX))+0)[1])), ((Txm)+0)[2] =
((((alpha)))*((((sctx->t + 9*(1+2*siXy))+0)[2]) - (((sctx
->t + 9*(1+2*siX))+0)[2])) + (((sctx->t + 9*(1+2*siX))+
0)[2]))), (((Txm)+3)[0] = ((((alpha)))*((((sctx->t + 9*(1+
2*siXy))+3)[0]) - (((sctx->t + 9*(1+2*siX))+3)[0])) + (((sctx
->t + 9*(1+2*siX))+3)[0])), ((Txm)+3)[1] = ((((alpha)))*((
((sctx->t + 9*(1+2*siXy))+3)[1]) - (((sctx->t + 9*(1+2*
siX))+3)[1])) + (((sctx->t + 9*(1+2*siX))+3)[1])), ((Txm)+
3)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*siXy))+3)[2]) - (
((sctx->t + 9*(1+2*siX))+3)[2])) + (((sctx->t + 9*(1+2*
siX))+3)[2]))), (((Txm)+6)[0] = ((((alpha)))*((((sctx->t +
9*(1+2*siXy))+6)[0]) - (((sctx->t + 9*(1+2*siX))+6)[0])) +
(((sctx->t + 9*(1+2*siX))+6)[0])), ((Txm)+6)[1] = ((((alpha
)))*((((sctx->t + 9*(1+2*siXy))+6)[1]) - (((sctx->t + 9
*(1+2*siX))+6)[1])) + (((sctx->t + 9*(1+2*siX))+6)[1])), (
(Txm)+6)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*siXy))+6)[
2]) - (((sctx->t + 9*(1+2*siX))+6)[2])) + (((sctx->t + 9
*(1+2*siX))+6)[2]))))
;
469 ELL_3V_LERP(gxm, alpha, sctx->grad + 3*(1+2*siX),((gxm)[0] = (((alpha))*(((sctx->grad + 3*(1+2*siXy))[0]) -
((sctx->grad + 3*(1+2*siX))[0])) + ((sctx->grad + 3*(1
+2*siX))[0])), (gxm)[1] = (((alpha))*(((sctx->grad + 3*(1+
2*siXy))[1]) - ((sctx->grad + 3*(1+2*siX))[1])) + ((sctx->
grad + 3*(1+2*siX))[1])), (gxm)[2] = (((alpha))*(((sctx->grad
+ 3*(1+2*siXy))[2]) - ((sctx->grad + 3*(1+2*siX))[2])) + (
(sctx->grad + 3*(1+2*siX))[2])))
470 sctx->grad + 3*(1+2*siXy))((gxm)[0] = (((alpha))*(((sctx->grad + 3*(1+2*siXy))[0]) -
((sctx->grad + 3*(1+2*siX))[0])) + ((sctx->grad + 3*(1
+2*siX))[0])), (gxm)[1] = (((alpha))*(((sctx->grad + 3*(1+
2*siXy))[1]) - ((sctx->grad + 3*(1+2*siX))[1])) + ((sctx->
grad + 3*(1+2*siX))[1])), (gxm)[2] = (((alpha))*(((sctx->grad
+ 3*(1+2*siXy))[2]) - ((sctx->grad + 3*(1+2*siX))[2])) + (
(sctx->grad + 3*(1+2*siX))[2])))
;
471 }
472 if (xi==sx-1) {
473 ELL_3M_COPY(Txp, T)((((Txp)+0)[0] = ((T)+0)[0], ((Txp)+0)[1] = ((T)+0)[1], ((Txp
)+0)[2] = ((T)+0)[2]), (((Txp)+3)[0] = ((T)+3)[0], ((Txp)+3)[
1] = ((T)+3)[1], ((Txp)+3)[2] = ((T)+3)[2]), (((Txp)+6)[0] = (
(T)+6)[0], ((Txp)+6)[1] = ((T)+6)[1], ((Txp)+6)[2] = ((T)+6)[
2]))
; ELL_3V_COPY(gxp, g)((gxp)[0] = (g)[0], (gxp)[1] = (g)[1], (gxp)[2] = (g)[2]);
474 } else {
475 ELL_3M_LERP(Txp, alpha, sctx->t + 9*(1+2*six), sctx->t + 9*(1+2*sixy))((((Txp)+0)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*sixy))+
0)[0]) - (((sctx->t + 9*(1+2*six))+0)[0])) + (((sctx->t
+ 9*(1+2*six))+0)[0])), ((Txp)+0)[1] = ((((alpha)))*((((sctx
->t + 9*(1+2*sixy))+0)[1]) - (((sctx->t + 9*(1+2*six))+
0)[1])) + (((sctx->t + 9*(1+2*six))+0)[1])), ((Txp)+0)[2] =
((((alpha)))*((((sctx->t + 9*(1+2*sixy))+0)[2]) - (((sctx
->t + 9*(1+2*six))+0)[2])) + (((sctx->t + 9*(1+2*six))+
0)[2]))), (((Txp)+3)[0] = ((((alpha)))*((((sctx->t + 9*(1+
2*sixy))+3)[0]) - (((sctx->t + 9*(1+2*six))+3)[0])) + (((sctx
->t + 9*(1+2*six))+3)[0])), ((Txp)+3)[1] = ((((alpha)))*((
((sctx->t + 9*(1+2*sixy))+3)[1]) - (((sctx->t + 9*(1+2*
six))+3)[1])) + (((sctx->t + 9*(1+2*six))+3)[1])), ((Txp)+
3)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*sixy))+3)[2]) - (
((sctx->t + 9*(1+2*six))+3)[2])) + (((sctx->t + 9*(1+2*
six))+3)[2]))), (((Txp)+6)[0] = ((((alpha)))*((((sctx->t +
9*(1+2*sixy))+6)[0]) - (((sctx->t + 9*(1+2*six))+6)[0])) +
(((sctx->t + 9*(1+2*six))+6)[0])), ((Txp)+6)[1] = ((((alpha
)))*((((sctx->t + 9*(1+2*sixy))+6)[1]) - (((sctx->t + 9
*(1+2*six))+6)[1])) + (((sctx->t + 9*(1+2*six))+6)[1])), (
(Txp)+6)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*sixy))+6)[
2]) - (((sctx->t + 9*(1+2*six))+6)[2])) + (((sctx->t + 9
*(1+2*six))+6)[2]))))
;
476 ELL_3V_LERP(gxp, alpha, sctx->grad + 3*(1+2*six),((gxp)[0] = (((alpha))*(((sctx->grad + 3*(1+2*sixy))[0]) -
((sctx->grad + 3*(1+2*six))[0])) + ((sctx->grad + 3*(1
+2*six))[0])), (gxp)[1] = (((alpha))*(((sctx->grad + 3*(1+
2*sixy))[1]) - ((sctx->grad + 3*(1+2*six))[1])) + ((sctx->
grad + 3*(1+2*six))[1])), (gxp)[2] = (((alpha))*(((sctx->grad
+ 3*(1+2*sixy))[2]) - ((sctx->grad + 3*(1+2*six))[2])) + (
(sctx->grad + 3*(1+2*six))[2])))
477 sctx->grad + 3*(1+2*sixy))((gxp)[0] = (((alpha))*(((sctx->grad + 3*(1+2*sixy))[0]) -
((sctx->grad + 3*(1+2*six))[0])) + ((sctx->grad + 3*(1
+2*six))[0])), (gxp)[1] = (((alpha))*(((sctx->grad + 3*(1+
2*sixy))[1]) - ((sctx->grad + 3*(1+2*six))[1])) + ((sctx->
grad + 3*(1+2*six))[1])), (gxp)[2] = (((alpha))*(((sctx->grad
+ 3*(1+2*sixy))[2]) - ((sctx->grad + 3*(1+2*six))[2])) + (
(sctx->grad + 3*(1+2*six))[2])))
;
478 }
479 if (xi!=0 && xi!=sx-1) {
480 ELL_3M_SCALE(Txm, 0.5, Txm)((((Txm)+0)[0] = ((0.5))*((Txm)+0)[0], ((Txm)+0)[1] = ((0.5))
*((Txm)+0)[1], ((Txm)+0)[2] = ((0.5))*((Txm)+0)[2]), (((Txm)+
3)[0] = ((0.5))*((Txm)+3)[0], ((Txm)+3)[1] = ((0.5))*((Txm)+3
)[1], ((Txm)+3)[2] = ((0.5))*((Txm)+3)[2]), (((Txm)+6)[0] = (
(0.5))*((Txm)+6)[0], ((Txm)+6)[1] = ((0.5))*((Txm)+6)[1], ((Txm
)+6)[2] = ((0.5))*((Txm)+6)[2]))
; ELL_3M_SCALE(Txp, 0.5, Txp)((((Txp)+0)[0] = ((0.5))*((Txp)+0)[0], ((Txp)+0)[1] = ((0.5))
*((Txp)+0)[1], ((Txp)+0)[2] = ((0.5))*((Txp)+0)[2]), (((Txp)+
3)[0] = ((0.5))*((Txp)+3)[0], ((Txp)+3)[1] = ((0.5))*((Txp)+3
)[1], ((Txp)+3)[2] = ((0.5))*((Txp)+3)[2]), (((Txp)+6)[0] = (
(0.5))*((Txp)+6)[0], ((Txp)+6)[1] = ((0.5))*((Txp)+6)[1], ((Txp
)+6)[2] = ((0.5))*((Txp)+6)[2]))
;
481 ELL_3V_SCALE(gxm, 0.5, gxm)((gxm)[0] = (0.5)*(gxm)[0], (gxm)[1] = (0.5)*(gxm)[1], (gxm)[
2] = (0.5)*(gxm)[2])
; ELL_3V_SCALE(gxp, 0.5, gxp)((gxp)[0] = (0.5)*(gxp)[0], (gxp)[1] = (0.5)*(gxp)[1], (gxp)[
2] = (0.5)*(gxp)[2])
;
482 }
483 if (yi>0 && yi<sy-2) {
484 unsigned int siyy = xi + sx*(yi+2);
485 ELL_3M_LERP(Tym, alpha, sctx->t + 9*(1+2*siY), sctx->t + 9*(1+2*si))((((Tym)+0)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*si))+0)
[0]) - (((sctx->t + 9*(1+2*siY))+0)[0])) + (((sctx->t +
9*(1+2*siY))+0)[0])), ((Tym)+0)[1] = ((((alpha)))*((((sctx->
t + 9*(1+2*si))+0)[1]) - (((sctx->t + 9*(1+2*siY))+0)[1]))
+ (((sctx->t + 9*(1+2*siY))+0)[1])), ((Tym)+0)[2] = ((((alpha
)))*((((sctx->t + 9*(1+2*si))+0)[2]) - (((sctx->t + 9*(
1+2*siY))+0)[2])) + (((sctx->t + 9*(1+2*siY))+0)[2]))), ((
(Tym)+3)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*si))+3)[0]
) - (((sctx->t + 9*(1+2*siY))+3)[0])) + (((sctx->t + 9*
(1+2*siY))+3)[0])), ((Tym)+3)[1] = ((((alpha)))*((((sctx->
t + 9*(1+2*si))+3)[1]) - (((sctx->t + 9*(1+2*siY))+3)[1]))
+ (((sctx->t + 9*(1+2*siY))+3)[1])), ((Tym)+3)[2] = ((((alpha
)))*((((sctx->t + 9*(1+2*si))+3)[2]) - (((sctx->t + 9*(
1+2*siY))+3)[2])) + (((sctx->t + 9*(1+2*siY))+3)[2]))), ((
(Tym)+6)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*si))+6)[0]
) - (((sctx->t + 9*(1+2*siY))+6)[0])) + (((sctx->t + 9*
(1+2*siY))+6)[0])), ((Tym)+6)[1] = ((((alpha)))*((((sctx->
t + 9*(1+2*si))+6)[1]) - (((sctx->t + 9*(1+2*siY))+6)[1]))
+ (((sctx->t + 9*(1+2*siY))+6)[1])), ((Tym)+6)[2] = ((((alpha
)))*((((sctx->t + 9*(1+2*si))+6)[2]) - (((sctx->t + 9*(
1+2*siY))+6)[2])) + (((sctx->t + 9*(1+2*siY))+6)[2]))))
;
486 ELL_3V_LERP(gym, alpha, sctx->grad + 3*(1+2*siY),((gym)[0] = (((alpha))*(((sctx->grad + 3*(1+2*si))[0]) - (
(sctx->grad + 3*(1+2*siY))[0])) + ((sctx->grad + 3*(1+2
*siY))[0])), (gym)[1] = (((alpha))*(((sctx->grad + 3*(1+2*
si))[1]) - ((sctx->grad + 3*(1+2*siY))[1])) + ((sctx->grad
+ 3*(1+2*siY))[1])), (gym)[2] = (((alpha))*(((sctx->grad +
3*(1+2*si))[2]) - ((sctx->grad + 3*(1+2*siY))[2])) + ((sctx
->grad + 3*(1+2*siY))[2])))
487 sctx->grad + 3*(1+2*si))((gym)[0] = (((alpha))*(((sctx->grad + 3*(1+2*si))[0]) - (
(sctx->grad + 3*(1+2*siY))[0])) + ((sctx->grad + 3*(1+2
*siY))[0])), (gym)[1] = (((alpha))*(((sctx->grad + 3*(1+2*
si))[1]) - ((sctx->grad + 3*(1+2*siY))[1])) + ((sctx->grad
+ 3*(1+2*siY))[1])), (gym)[2] = (((alpha))*(((sctx->grad +
3*(1+2*si))[2]) - ((sctx->grad + 3*(1+2*siY))[2])) + ((sctx
->grad + 3*(1+2*siY))[2])))
;
488 ELL_3M_LERP(Typ, alpha, sctx->t + 9*(1+2*siy), sctx->t + 9*(1+2*siyy))((((Typ)+0)[0] = ((((alpha)))*((((sctx->t + 9*(1+2*siyy))+
0)[0]) - (((sctx->t + 9*(1+2*siy))+0)[0])) + (((sctx->t
+ 9*(1+2*siy))+0)[0])), ((Typ)+0)[1] = ((((alpha)))*((((sctx
->t + 9*(1+2*siyy))+0)[1]) - (((sctx->t + 9*(1+2*siy))+
0)[1])) + (((sctx->t + 9*(1+2*siy))+0)[1])), ((Typ)+0)[2] =
((((alpha)))*((((sctx->t + 9*(1+2*siyy))+0)[2]) - (((sctx
->t + 9*(1+2*siy))+0)[2])) + (((sctx->t + 9*(1+2*siy))+
0)[2]))), (((Typ)+3)[0] = ((((alpha)))*((((sctx->t + 9*(1+
2*siyy))+3)[0]) - (((sctx->t + 9*(1+2*siy))+3)[0])) + (((sctx
->t + 9*(1+2*siy))+3)[0])), ((Typ)+3)[1] = ((((alpha)))*((
((sctx->t + 9*(1+2*siyy))+3)[1]) - (((sctx->t + 9*(1+2*
siy))+3)[1])) + (((sctx->t + 9*(1+2*siy))+3)[1])), ((Typ)+
3)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*siyy))+3)[2]) - (
((sctx->t + 9*(1+2*siy))+3)[2])) + (((sctx->t + 9*(1+2*
siy))+3)[2]))), (((Typ)+6)[0] = ((((alpha)))*((((sctx->t +
9*(1+2*siyy))+6)[0]) - (((sctx->t + 9*(1+2*siy))+6)[0])) +
(((sctx->t + 9*(1+2*siy))+6)[0])), ((Typ)+6)[1] = ((((alpha
)))*((((sctx->t + 9*(1+2*siyy))+6)[1]) - (((sctx->t + 9
*(1+2*siy))+6)[1])) + (((sctx->t + 9*(1+2*siy))+6)[1])), (
(Typ)+6)[2] = ((((alpha)))*((((sctx->t + 9*(1+2*siyy))+6)[
2]) - (((sctx->t + 9*(1+2*siy))+6)[2])) + (((sctx->t + 9
*(1+2*siy))+6)[2]))))
;
489 ELL_3V_LERP(gyp, alpha, sctx->grad + 3*(1+2*siy),((gyp)[0] = (((alpha))*(((sctx->grad + 3*(1+2*siyy))[0]) -
((sctx->grad + 3*(1+2*siy))[0])) + ((sctx->grad + 3*(1
+2*siy))[0])), (gyp)[1] = (((alpha))*(((sctx->grad + 3*(1+
2*siyy))[1]) - ((sctx->grad + 3*(1+2*siy))[1])) + ((sctx->
grad + 3*(1+2*siy))[1])), (gyp)[2] = (((alpha))*(((sctx->grad
+ 3*(1+2*siyy))[2]) - ((sctx->grad + 3*(1+2*siy))[2])) + (
(sctx->grad + 3*(1+2*siy))[2])))
490 sctx->grad + 3*(1+2*siyy))((gyp)[0] = (((alpha))*(((sctx->grad + 3*(1+2*siyy))[0]) -
((sctx->grad + 3*(1+2*siy))[0])) + ((sctx->grad + 3*(1
+2*siy))[0])), (gyp)[1] = (((alpha))*(((sctx->grad + 3*(1+
2*siyy))[1]) - ((sctx->grad + 3*(1+2*siy))[1])) + ((sctx->
grad + 3*(1+2*siy))[1])), (gyp)[2] = (((alpha))*(((sctx->grad
+ 3*(1+2*siyy))[2]) - ((sctx->grad + 3*(1+2*siy))[2])) + (
(sctx->grad + 3*(1+2*siy))[2])))
;
491 ELL_3M_SCALE(Tym, 0.5, Tym)((((Tym)+0)[0] = ((0.5))*((Tym)+0)[0], ((Tym)+0)[1] = ((0.5))
*((Tym)+0)[1], ((Tym)+0)[2] = ((0.5))*((Tym)+0)[2]), (((Tym)+
3)[0] = ((0.5))*((Tym)+3)[0], ((Tym)+3)[1] = ((0.5))*((Tym)+3
)[1], ((Tym)+3)[2] = ((0.5))*((Tym)+3)[2]), (((Tym)+6)[0] = (
(0.5))*((Tym)+6)[0], ((Tym)+6)[1] = ((0.5))*((Tym)+6)[1], ((Tym
)+6)[2] = ((0.5))*((Tym)+6)[2]))
; ELL_3M_SCALE(Typ, 0.5, Typ)((((Typ)+0)[0] = ((0.5))*((Typ)+0)[0], ((Typ)+0)[1] = ((0.5))
*((Typ)+0)[1], ((Typ)+0)[2] = ((0.5))*((Typ)+0)[2]), (((Typ)+
3)[0] = ((0.5))*((Typ)+3)[0], ((Typ)+3)[1] = ((0.5))*((Typ)+3
)[1], ((Typ)+3)[2] = ((0.5))*((Typ)+3)[2]), (((Typ)+6)[0] = (
(0.5))*((Typ)+6)[0], ((Typ)+6)[1] = ((0.5))*((Typ)+6)[1], ((Typ
)+6)[2] = ((0.5))*((Typ)+6)[2]))
;
492 ELL_3V_SCALE(gym, 0.5, gym)((gym)[0] = (0.5)*(gym)[0], (gym)[1] = (0.5)*(gym)[1], (gym)[
2] = (0.5)*(gym)[2])
; ELL_3V_SCALE(gyp, 0.5, gyp)((gyp)[0] = (0.5)*(gyp)[0], (gyp)[1] = (0.5)*(gyp)[1], (gyp)[
2] = (0.5)*(gyp)[2])
;
493 } else {
494 ELL_3M_COPY(Tym, sctx->t + 9*(1+2*si))((((Tym)+0)[0] = ((sctx->t + 9*(1+2*si))+0)[0], ((Tym)+0)[
1] = ((sctx->t + 9*(1+2*si))+0)[1], ((Tym)+0)[2] = ((sctx->
t + 9*(1+2*si))+0)[2]), (((Tym)+3)[0] = ((sctx->t + 9*(1+2
*si))+3)[0], ((Tym)+3)[1] = ((sctx->t + 9*(1+2*si))+3)[1],
((Tym)+3)[2] = ((sctx->t + 9*(1+2*si))+3)[2]), (((Tym)+6)
[0] = ((sctx->t + 9*(1+2*si))+6)[0], ((Tym)+6)[1] = ((sctx
->t + 9*(1+2*si))+6)[1], ((Tym)+6)[2] = ((sctx->t + 9*(
1+2*si))+6)[2]))
;
495 ELL_3V_COPY(gym, sctx->grad + 3*(1+2*si))((gym)[0] = (sctx->grad + 3*(1+2*si))[0], (gym)[1] = (sctx
->grad + 3*(1+2*si))[1], (gym)[2] = (sctx->grad + 3*(1+
2*si))[2])
;
496 ELL_3M_COPY(Typ, sctx->t + 9*(1+2*six))((((Typ)+0)[0] = ((sctx->t + 9*(1+2*six))+0)[0], ((Typ)+0)
[1] = ((sctx->t + 9*(1+2*six))+0)[1], ((Typ)+0)[2] = ((sctx
->t + 9*(1+2*six))+0)[2]), (((Typ)+3)[0] = ((sctx->t + 9
*(1+2*six))+3)[0], ((Typ)+3)[1] = ((sctx->t + 9*(1+2*six))
+3)[1], ((Typ)+3)[2] = ((sctx->t + 9*(1+2*six))+3)[2]), ((
(Typ)+6)[0] = ((sctx->t + 9*(1+2*six))+6)[0], ((Typ)+6)[1]
= ((sctx->t + 9*(1+2*six))+6)[1], ((Typ)+6)[2] = ((sctx->
t + 9*(1+2*six))+6)[2]))
;
497 ELL_3V_COPY(gyp, sctx->grad + 3*(1+2*six))((gyp)[0] = (sctx->grad + 3*(1+2*six))[0], (gyp)[1] = (sctx
->grad + 3*(1+2*six))[1], (gyp)[2] = (sctx->grad + 3*(1
+2*six))[2])
;
498 }
499 computeGradientLin(res, T, g,
500 Txm, gxm, Txp, gxp,
501 Tym, gym, Typ, gyp,
502 Tzm, gzm, Tzp, gzp);
503 break;
504 }
505}
506
507/* Given a unique face ID and coordinates, compute the crease surface
508 * normal at the specified degenerate point */
509static void
510computeFaceGradient(seekContext *sctx, double *res,
511 unsigned int xi, unsigned int yi,
512 char faceid, double *coords) {
513 double T[9], Txm[9], Txp[9], Tym[9], Typ[9], Tzm[9], Tzp[9],
514 g[3], gxm[3], gxp[3], gym[3], gyp[3], gzm[3], gzp[3];
515 unsigned int sx = AIR_CAST(unsigned int, sctx->sx)((unsigned int)(sctx->sx));
516 unsigned int sy = AIR_CAST(unsigned int, sctx->sy)((unsigned int)(sctx->sy));
517 unsigned int si = xi + sx*yi;
518 unsigned int six = xi + 1 + sx*yi, siX = xi - 1 + sx*yi;
519 unsigned int siy = xi + sx*(yi+1), siY = xi + sx*(yi-1);
520 unsigned int sixy = xi + 1 + sx*(yi+1), sixY = xi + 1 + sx*(yi-1),
521 siXy = xi - 1 + sx*(yi+1);
522
523 /* Again, lots of special cases to fill Txm, gxm, etc. */
524 switch (faceid) {
1
Control jumps to 'case 2:' at line 611
525 case 0:
526 /* bilinearly interpolate Tzp/gzp first */
527 ELL_3M_LERP(Txm, coords[1], sctx->t + 9*(1+2*si), sctx->t + 9*(1+2*siy))((((Txm)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*siy
))+0)[0]) - (((sctx->t + 9*(1+2*si))+0)[0])) + (((sctx->
t + 9*(1+2*si))+0)[0])), ((Txm)+0)[1] = ((((coords[1])))*((((
sctx->t + 9*(1+2*siy))+0)[1]) - (((sctx->t + 9*(1+2*si)
)+0)[1])) + (((sctx->t + 9*(1+2*si))+0)[1])), ((Txm)+0)[2]
= ((((coords[1])))*((((sctx->t + 9*(1+2*siy))+0)[2]) - ((
(sctx->t + 9*(1+2*si))+0)[2])) + (((sctx->t + 9*(1+2*si
))+0)[2]))), (((Txm)+3)[0] = ((((coords[1])))*((((sctx->t +
9*(1+2*siy))+3)[0]) - (((sctx->t + 9*(1+2*si))+3)[0])) + (
((sctx->t + 9*(1+2*si))+3)[0])), ((Txm)+3)[1] = ((((coords
[1])))*((((sctx->t + 9*(1+2*siy))+3)[1]) - (((sctx->t +
9*(1+2*si))+3)[1])) + (((sctx->t + 9*(1+2*si))+3)[1])), (
(Txm)+3)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*siy))+
3)[2]) - (((sctx->t + 9*(1+2*si))+3)[2])) + (((sctx->t +
9*(1+2*si))+3)[2]))), (((Txm)+6)[0] = ((((coords[1])))*((((sctx
->t + 9*(1+2*siy))+6)[0]) - (((sctx->t + 9*(1+2*si))+6)
[0])) + (((sctx->t + 9*(1+2*si))+6)[0])), ((Txm)+6)[1] = (
(((coords[1])))*((((sctx->t + 9*(1+2*siy))+6)[1]) - (((sctx
->t + 9*(1+2*si))+6)[1])) + (((sctx->t + 9*(1+2*si))+6)
[1])), ((Txm)+6)[2] = ((((coords[1])))*((((sctx->t + 9*(1+
2*siy))+6)[2]) - (((sctx->t + 9*(1+2*si))+6)[2])) + (((sctx
->t + 9*(1+2*si))+6)[2]))))
;
528 ELL_3V_LERP(gxm, coords[1], sctx->grad + 3*(1+2*si),((gxm)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*siy))[0]
) - ((sctx->grad + 3*(1+2*si))[0])) + ((sctx->grad + 3*
(1+2*si))[0])), (gxm)[1] = (((coords[1]))*(((sctx->grad + 3
*(1+2*siy))[1]) - ((sctx->grad + 3*(1+2*si))[1])) + ((sctx
->grad + 3*(1+2*si))[1])), (gxm)[2] = (((coords[1]))*(((sctx
->grad + 3*(1+2*siy))[2]) - ((sctx->grad + 3*(1+2*si))[
2])) + ((sctx->grad + 3*(1+2*si))[2])))
529 sctx->grad + 3*(1+2*siy))((gxm)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*siy))[0]
) - ((sctx->grad + 3*(1+2*si))[0])) + ((sctx->grad + 3*
(1+2*si))[0])), (gxm)[1] = (((coords[1]))*(((sctx->grad + 3
*(1+2*siy))[1]) - ((sctx->grad + 3*(1+2*si))[1])) + ((sctx
->grad + 3*(1+2*si))[1])), (gxm)[2] = (((coords[1]))*(((sctx
->grad + 3*(1+2*siy))[2]) - ((sctx->grad + 3*(1+2*si))[
2])) + ((sctx->grad + 3*(1+2*si))[2])))
;
530 ELL_3M_LERP(Txp, coords[1], sctx->t + 9*(1+2*six), sctx->t + 9*(1+2*sixy))((((Txp)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy
))+0)[0]) - (((sctx->t + 9*(1+2*six))+0)[0])) + (((sctx->
t + 9*(1+2*six))+0)[0])), ((Txp)+0)[1] = ((((coords[1])))*(((
(sctx->t + 9*(1+2*sixy))+0)[1]) - (((sctx->t + 9*(1+2*six
))+0)[1])) + (((sctx->t + 9*(1+2*six))+0)[1])), ((Txp)+0)[
2] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy))+0)[2]) -
(((sctx->t + 9*(1+2*six))+0)[2])) + (((sctx->t + 9*(1+
2*six))+0)[2]))), (((Txp)+3)[0] = ((((coords[1])))*((((sctx->
t + 9*(1+2*sixy))+3)[0]) - (((sctx->t + 9*(1+2*six))+3)[0]
)) + (((sctx->t + 9*(1+2*six))+3)[0])), ((Txp)+3)[1] = (((
(coords[1])))*((((sctx->t + 9*(1+2*sixy))+3)[1]) - (((sctx
->t + 9*(1+2*six))+3)[1])) + (((sctx->t + 9*(1+2*six))+
3)[1])), ((Txp)+3)[2] = ((((coords[1])))*((((sctx->t + 9*(
1+2*sixy))+3)[2]) - (((sctx->t + 9*(1+2*six))+3)[2])) + ((
(sctx->t + 9*(1+2*six))+3)[2]))), (((Txp)+6)[0] = ((((coords
[1])))*((((sctx->t + 9*(1+2*sixy))+6)[0]) - (((sctx->t +
9*(1+2*six))+6)[0])) + (((sctx->t + 9*(1+2*six))+6)[0])),
((Txp)+6)[1] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy
))+6)[1]) - (((sctx->t + 9*(1+2*six))+6)[1])) + (((sctx->
t + 9*(1+2*six))+6)[1])), ((Txp)+6)[2] = ((((coords[1])))*(((
(sctx->t + 9*(1+2*sixy))+6)[2]) - (((sctx->t + 9*(1+2*six
))+6)[2])) + (((sctx->t + 9*(1+2*six))+6)[2]))))
;
531 ELL_3V_LERP(gxp, coords[1], sctx->grad + 3*(1+2*six),((gxp)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*sixy))[0
]) - ((sctx->grad + 3*(1+2*six))[0])) + ((sctx->grad + 3
*(1+2*six))[0])), (gxp)[1] = (((coords[1]))*(((sctx->grad +
3*(1+2*sixy))[1]) - ((sctx->grad + 3*(1+2*six))[1])) + ((
sctx->grad + 3*(1+2*six))[1])), (gxp)[2] = (((coords[1]))*
(((sctx->grad + 3*(1+2*sixy))[2]) - ((sctx->grad + 3*(1
+2*six))[2])) + ((sctx->grad + 3*(1+2*six))[2])))
532 sctx->grad + 3*(1+2*sixy))((gxp)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*sixy))[0
]) - ((sctx->grad + 3*(1+2*six))[0])) + ((sctx->grad + 3
*(1+2*six))[0])), (gxp)[1] = (((coords[1]))*(((sctx->grad +
3*(1+2*sixy))[1]) - ((sctx->grad + 3*(1+2*six))[1])) + ((
sctx->grad + 3*(1+2*six))[1])), (gxp)[2] = (((coords[1]))*
(((sctx->grad + 3*(1+2*sixy))[2]) - ((sctx->grad + 3*(1
+2*six))[2])) + ((sctx->grad + 3*(1+2*six))[2])))
;
533 ELL_3M_LERP(Tzp, coords[0], Txm, Txp)((((Tzp)+0)[0] = ((((coords[0])))*((((Txp)+0)[0]) - (((Txm)+0
)[0])) + (((Txm)+0)[0])), ((Tzp)+0)[1] = ((((coords[0])))*(((
(Txp)+0)[1]) - (((Txm)+0)[1])) + (((Txm)+0)[1])), ((Tzp)+0)[2
] = ((((coords[0])))*((((Txp)+0)[2]) - (((Txm)+0)[2])) + (((Txm
)+0)[2]))), (((Tzp)+3)[0] = ((((coords[0])))*((((Txp)+3)[0]) -
(((Txm)+3)[0])) + (((Txm)+3)[0])), ((Tzp)+3)[1] = ((((coords
[0])))*((((Txp)+3)[1]) - (((Txm)+3)[1])) + (((Txm)+3)[1])), (
(Tzp)+3)[2] = ((((coords[0])))*((((Txp)+3)[2]) - (((Txm)+3)[2
])) + (((Txm)+3)[2]))), (((Tzp)+6)[0] = ((((coords[0])))*((((
Txp)+6)[0]) - (((Txm)+6)[0])) + (((Txm)+6)[0])), ((Tzp)+6)[1]
= ((((coords[0])))*((((Txp)+6)[1]) - (((Txm)+6)[1])) + (((Txm
)+6)[1])), ((Tzp)+6)[2] = ((((coords[0])))*((((Txp)+6)[2]) - (
((Txm)+6)[2])) + (((Txm)+6)[2]))))
;
534 ELL_3V_LERP(gzp, coords[0], gxm, gxp)((gzp)[0] = (((coords[0]))*(((gxp)[0]) - ((gxm)[0])) + ((gxm)
[0])), (gzp)[1] = (((coords[0]))*(((gxp)[1]) - ((gxm)[1])) + (
(gxm)[1])), (gzp)[2] = (((coords[0]))*(((gxp)[2]) - ((gxm)[2]
)) + ((gxm)[2])))
;
535 /* now, compute all required points on the bottom face */
536 ELL_3M_LERP(Txm, coords[1], sctx->t + 9*(0+2*si), sctx->t + 9*(0+2*siy))((((Txm)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(0+2*siy
))+0)[0]) - (((sctx->t + 9*(0+2*si))+0)[0])) + (((sctx->
t + 9*(0+2*si))+0)[0])), ((Txm)+0)[1] = ((((coords[1])))*((((
sctx->t + 9*(0+2*siy))+0)[1]) - (((sctx->t + 9*(0+2*si)
)+0)[1])) + (((sctx->t + 9*(0+2*si))+0)[1])), ((Txm)+0)[2]
= ((((coords[1])))*((((sctx->t + 9*(0+2*siy))+0)[2]) - ((
(sctx->t + 9*(0+2*si))+0)[2])) + (((sctx->t + 9*(0+2*si
))+0)[2]))), (((Txm)+3)[0] = ((((coords[1])))*((((sctx->t +
9*(0+2*siy))+3)[0]) - (((sctx->t + 9*(0+2*si))+3)[0])) + (
((sctx->t + 9*(0+2*si))+3)[0])), ((Txm)+3)[1] = ((((coords
[1])))*((((sctx->t + 9*(0+2*siy))+3)[1]) - (((sctx->t +
9*(0+2*si))+3)[1])) + (((sctx->t + 9*(0+2*si))+3)[1])), (
(Txm)+3)[2] = ((((coords[1])))*((((sctx->t + 9*(0+2*siy))+
3)[2]) - (((sctx->t + 9*(0+2*si))+3)[2])) + (((sctx->t +
9*(0+2*si))+3)[2]))), (((Txm)+6)[0] = ((((coords[1])))*((((sctx
->t + 9*(0+2*siy))+6)[0]) - (((sctx->t + 9*(0+2*si))+6)
[0])) + (((sctx->t + 9*(0+2*si))+6)[0])), ((Txm)+6)[1] = (
(((coords[1])))*((((sctx->t + 9*(0+2*siy))+6)[1]) - (((sctx
->t + 9*(0+2*si))+6)[1])) + (((sctx->t + 9*(0+2*si))+6)
[1])), ((Txm)+6)[2] = ((((coords[1])))*((((sctx->t + 9*(0+
2*siy))+6)[2]) - (((sctx->t + 9*(0+2*si))+6)[2])) + (((sctx
->t + 9*(0+2*si))+6)[2]))))
;
537 ELL_3V_LERP(gxm, coords[1], sctx->grad + 3*(0+2*si),((gxm)[0] = (((coords[1]))*(((sctx->grad + 3*(0+2*siy))[0]
) - ((sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3*
(0+2*si))[0])), (gxm)[1] = (((coords[1]))*(((sctx->grad + 3
*(0+2*siy))[1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx
->grad + 3*(0+2*si))[1])), (gxm)[2] = (((coords[1]))*(((sctx
->grad + 3*(0+2*siy))[2]) - ((sctx->grad + 3*(0+2*si))[
2])) + ((sctx->grad + 3*(0+2*si))[2])))
538 sctx->grad + 3*(0+2*siy))((gxm)[0] = (((coords[1]))*(((sctx->grad + 3*(0+2*siy))[0]
) - ((sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3*
(0+2*si))[0])), (gxm)[1] = (((coords[1]))*(((sctx->grad + 3
*(0+2*siy))[1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx
->grad + 3*(0+2*si))[1])), (gxm)[2] = (((coords[1]))*(((sctx
->grad + 3*(0+2*siy))[2]) - ((sctx->grad + 3*(0+2*si))[
2])) + ((sctx->grad + 3*(0+2*si))[2])))
;
539 ELL_3M_LERP(Txp, coords[1], sctx->t + 9*(0+2*six), sctx->t + 9*(0+2*sixy))((((Txp)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(0+2*sixy
))+0)[0]) - (((sctx->t + 9*(0+2*six))+0)[0])) + (((sctx->
t + 9*(0+2*six))+0)[0])), ((Txp)+0)[1] = ((((coords[1])))*(((
(sctx->t + 9*(0+2*sixy))+0)[1]) - (((sctx->t + 9*(0+2*six
))+0)[1])) + (((sctx->t + 9*(0+2*six))+0)[1])), ((Txp)+0)[
2] = ((((coords[1])))*((((sctx->t + 9*(0+2*sixy))+0)[2]) -
(((sctx->t + 9*(0+2*six))+0)[2])) + (((sctx->t + 9*(0+
2*six))+0)[2]))), (((Txp)+3)[0] = ((((coords[1])))*((((sctx->
t + 9*(0+2*sixy))+3)[0]) - (((sctx->t + 9*(0+2*six))+3)[0]
)) + (((sctx->t + 9*(0+2*six))+3)[0])), ((Txp)+3)[1] = (((
(coords[1])))*((((sctx->t + 9*(0+2*sixy))+3)[1]) - (((sctx
->t + 9*(0+2*six))+3)[1])) + (((sctx->t + 9*(0+2*six))+
3)[1])), ((Txp)+3)[2] = ((((coords[1])))*((((sctx->t + 9*(
0+2*sixy))+3)[2]) - (((sctx->t + 9*(0+2*six))+3)[2])) + ((
(sctx->t + 9*(0+2*six))+3)[2]))), (((Txp)+6)[0] = ((((coords
[1])))*((((sctx->t + 9*(0+2*sixy))+6)[0]) - (((sctx->t +
9*(0+2*six))+6)[0])) + (((sctx->t + 9*(0+2*six))+6)[0])),
((Txp)+6)[1] = ((((coords[1])))*((((sctx->t + 9*(0+2*sixy
))+6)[1]) - (((sctx->t + 9*(0+2*six))+6)[1])) + (((sctx->
t + 9*(0+2*six))+6)[1])), ((Txp)+6)[2] = ((((coords[1])))*(((
(sctx->t + 9*(0+2*sixy))+6)[2]) - (((sctx->t + 9*(0+2*six
))+6)[2])) + (((sctx->t + 9*(0+2*six))+6)[2]))))
;
540 ELL_3V_LERP(gxp, coords[1], sctx->grad + 3*(0+2*six),((gxp)[0] = (((coords[1]))*(((sctx->grad + 3*(0+2*sixy))[0
]) - ((sctx->grad + 3*(0+2*six))[0])) + ((sctx->grad + 3
*(0+2*six))[0])), (gxp)[1] = (((coords[1]))*(((sctx->grad +
3*(0+2*sixy))[1]) - ((sctx->grad + 3*(0+2*six))[1])) + ((
sctx->grad + 3*(0+2*six))[1])), (gxp)[2] = (((coords[1]))*
(((sctx->grad + 3*(0+2*sixy))[2]) - ((sctx->grad + 3*(0
+2*six))[2])) + ((sctx->grad + 3*(0+2*six))[2])))
541 sctx->grad + 3*(0+2*sixy))((gxp)[0] = (((coords[1]))*(((sctx->grad + 3*(0+2*sixy))[0
]) - ((sctx->grad + 3*(0+2*six))[0])) + ((sctx->grad + 3
*(0+2*six))[0])), (gxp)[1] = (((coords[1]))*(((sctx->grad +
3*(0+2*sixy))[1]) - ((sctx->grad + 3*(0+2*six))[1])) + ((
sctx->grad + 3*(0+2*six))[1])), (gxp)[2] = (((coords[1]))*
(((sctx->grad + 3*(0+2*sixy))[2]) - ((sctx->grad + 3*(0
+2*six))[2])) + ((sctx->grad + 3*(0+2*six))[2])))
;
542
543 ELL_3M_LERP(Tym, coords[0], sctx->t + 9*(0+2*si), sctx->t + 9*(0+2*six))((((Tym)+0)[0] = ((((coords[0])))*((((sctx->t + 9*(0+2*six
))+0)[0]) - (((sctx->t + 9*(0+2*si))+0)[0])) + (((sctx->
t + 9*(0+2*si))+0)[0])), ((Tym)+0)[1] = ((((coords[0])))*((((
sctx->t + 9*(0+2*six))+0)[1]) - (((sctx->t + 9*(0+2*si)
)+0)[1])) + (((sctx->t + 9*(0+2*si))+0)[1])), ((Tym)+0)[2]
= ((((coords[0])))*((((sctx->t + 9*(0+2*six))+0)[2]) - ((
(sctx->t + 9*(0+2*si))+0)[2])) + (((sctx->t + 9*(0+2*si
))+0)[2]))), (((Tym)+3)[0] = ((((coords[0])))*((((sctx->t +
9*(0+2*six))+3)[0]) - (((sctx->t + 9*(0+2*si))+3)[0])) + (
((sctx->t + 9*(0+2*si))+3)[0])), ((Tym)+3)[1] = ((((coords
[0])))*((((sctx->t + 9*(0+2*six))+3)[1]) - (((sctx->t +
9*(0+2*si))+3)[1])) + (((sctx->t + 9*(0+2*si))+3)[1])), (
(Tym)+3)[2] = ((((coords[0])))*((((sctx->t + 9*(0+2*six))+
3)[2]) - (((sctx->t + 9*(0+2*si))+3)[2])) + (((sctx->t +
9*(0+2*si))+3)[2]))), (((Tym)+6)[0] = ((((coords[0])))*((((sctx
->t + 9*(0+2*six))+6)[0]) - (((sctx->t + 9*(0+2*si))+6)
[0])) + (((sctx->t + 9*(0+2*si))+6)[0])), ((Tym)+6)[1] = (
(((coords[0])))*((((sctx->t + 9*(0+2*six))+6)[1]) - (((sctx
->t + 9*(0+2*si))+6)[1])) + (((sctx->t + 9*(0+2*si))+6)
[1])), ((Tym)+6)[2] = ((((coords[0])))*((((sctx->t + 9*(0+
2*six))+6)[2]) - (((sctx->t + 9*(0+2*si))+6)[2])) + (((sctx
->t + 9*(0+2*si))+6)[2]))))
;
544 ELL_3V_LERP(gym, coords[0], sctx->grad + 3*(0+2*si),((gym)[0] = (((coords[0]))*(((sctx->grad + 3*(0+2*six))[0]
) - ((sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3*
(0+2*si))[0])), (gym)[1] = (((coords[0]))*(((sctx->grad + 3
*(0+2*six))[1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx
->grad + 3*(0+2*si))[1])), (gym)[2] = (((coords[0]))*(((sctx
->grad + 3*(0+2*six))[2]) - ((sctx->grad + 3*(0+2*si))[
2])) + ((sctx->grad + 3*(0+2*si))[2])))
545 sctx->grad + 3*(0+2*six))((gym)[0] = (((coords[0]))*(((sctx->grad + 3*(0+2*six))[0]
) - ((sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3*
(0+2*si))[0])), (gym)[1] = (((coords[0]))*(((sctx->grad + 3
*(0+2*six))[1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx
->grad + 3*(0+2*si))[1])), (gym)[2] = (((coords[0]))*(((sctx
->grad + 3*(0+2*six))[2]) - ((sctx->grad + 3*(0+2*si))[
2])) + ((sctx->grad + 3*(0+2*si))[2])))
;
546 ELL_3M_LERP(Typ, coords[0], sctx->t + 9*(0+2*siy), sctx->t + 9*(0+2*sixy))((((Typ)+0)[0] = ((((coords[0])))*((((sctx->t + 9*(0+2*sixy
))+0)[0]) - (((sctx->t + 9*(0+2*siy))+0)[0])) + (((sctx->
t + 9*(0+2*siy))+0)[0])), ((Typ)+0)[1] = ((((coords[0])))*(((
(sctx->t + 9*(0+2*sixy))+0)[1]) - (((sctx->t + 9*(0+2*siy
))+0)[1])) + (((sctx->t + 9*(0+2*siy))+0)[1])), ((Typ)+0)[
2] = ((((coords[0])))*((((sctx->t + 9*(0+2*sixy))+0)[2]) -
(((sctx->t + 9*(0+2*siy))+0)[2])) + (((sctx->t + 9*(0+
2*siy))+0)[2]))), (((Typ)+3)[0] = ((((coords[0])))*((((sctx->
t + 9*(0+2*sixy))+3)[0]) - (((sctx->t + 9*(0+2*siy))+3)[0]
)) + (((sctx->t + 9*(0+2*siy))+3)[0])), ((Typ)+3)[1] = (((
(coords[0])))*((((sctx->t + 9*(0+2*sixy))+3)[1]) - (((sctx
->t + 9*(0+2*siy))+3)[1])) + (((sctx->t + 9*(0+2*siy))+
3)[1])), ((Typ)+3)[2] = ((((coords[0])))*((((sctx->t + 9*(
0+2*sixy))+3)[2]) - (((sctx->t + 9*(0+2*siy))+3)[2])) + ((
(sctx->t + 9*(0+2*siy))+3)[2]))), (((Typ)+6)[0] = ((((coords
[0])))*((((sctx->t + 9*(0+2*sixy))+6)[0]) - (((sctx->t +
9*(0+2*siy))+6)[0])) + (((sctx->t + 9*(0+2*siy))+6)[0])),
((Typ)+6)[1] = ((((coords[0])))*((((sctx->t + 9*(0+2*sixy
))+6)[1]) - (((sctx->t + 9*(0+2*siy))+6)[1])) + (((sctx->
t + 9*(0+2*siy))+6)[1])), ((Typ)+6)[2] = ((((coords[0])))*(((
(sctx->t + 9*(0+2*sixy))+6)[2]) - (((sctx->t + 9*(0+2*siy
))+6)[2])) + (((sctx->t + 9*(0+2*siy))+6)[2]))))
;
547 ELL_3V_LERP(gyp, coords[0], sctx->grad + 3*(0+2*siy),((gyp)[0] = (((coords[0]))*(((sctx->grad + 3*(0+2*sixy))[0
]) - ((sctx->grad + 3*(0+2*siy))[0])) + ((sctx->grad + 3
*(0+2*siy))[0])), (gyp)[1] = (((coords[0]))*(((sctx->grad +
3*(0+2*sixy))[1]) - ((sctx->grad + 3*(0+2*siy))[1])) + ((
sctx->grad + 3*(0+2*siy))[1])), (gyp)[2] = (((coords[0]))*
(((sctx->grad + 3*(0+2*sixy))[2]) - ((sctx->grad + 3*(0
+2*siy))[2])) + ((sctx->grad + 3*(0+2*siy))[2])))
548 sctx->grad + 3*(0+2*sixy))((gyp)[0] = (((coords[0]))*(((sctx->grad + 3*(0+2*sixy))[0
]) - ((sctx->grad + 3*(0+2*siy))[0])) + ((sctx->grad + 3
*(0+2*siy))[0])), (gyp)[1] = (((coords[0]))*(((sctx->grad +
3*(0+2*sixy))[1]) - ((sctx->grad + 3*(0+2*siy))[1])) + ((
sctx->grad + 3*(0+2*siy))[1])), (gyp)[2] = (((coords[0]))*
(((sctx->grad + 3*(0+2*sixy))[2]) - ((sctx->grad + 3*(0
+2*siy))[2])) + ((sctx->grad + 3*(0+2*siy))[2])))
;
549
550 ELL_3M_LERP(T, coords[0], Txm, Txp)((((T)+0)[0] = ((((coords[0])))*((((Txp)+0)[0]) - (((Txm)+0)[
0])) + (((Txm)+0)[0])), ((T)+0)[1] = ((((coords[0])))*((((Txp
)+0)[1]) - (((Txm)+0)[1])) + (((Txm)+0)[1])), ((T)+0)[2] = ((
((coords[0])))*((((Txp)+0)[2]) - (((Txm)+0)[2])) + (((Txm)+0)
[2]))), (((T)+3)[0] = ((((coords[0])))*((((Txp)+3)[0]) - (((Txm
)+3)[0])) + (((Txm)+3)[0])), ((T)+3)[1] = ((((coords[0])))*((
((Txp)+3)[1]) - (((Txm)+3)[1])) + (((Txm)+3)[1])), ((T)+3)[2]
= ((((coords[0])))*((((Txp)+3)[2]) - (((Txm)+3)[2])) + (((Txm
)+3)[2]))), (((T)+6)[0] = ((((coords[0])))*((((Txp)+6)[0]) - (
((Txm)+6)[0])) + (((Txm)+6)[0])), ((T)+6)[1] = ((((coords[0])
))*((((Txp)+6)[1]) - (((Txm)+6)[1])) + (((Txm)+6)[1])), ((T)+
6)[2] = ((((coords[0])))*((((Txp)+6)[2]) - (((Txm)+6)[2])) + (
((Txm)+6)[2]))))
;
551 ELL_3V_LERP(g, coords[0], gxm, gxp)((g)[0] = (((coords[0]))*(((gxp)[0]) - ((gxm)[0])) + ((gxm)[0
])), (g)[1] = (((coords[0]))*(((gxp)[1]) - ((gxm)[1])) + ((gxm
)[1])), (g)[2] = (((coords[0]))*(((gxp)[2]) - ((gxm)[2])) + (
(gxm)[2])))
;
552
553 computeGradientLin(sctx->facenorm+3*(faceid+4*si), T, g,
554 Txm, gxm, Txp, gxp,
555 Tym, gym, Typ, gyp,
556 T, g, Tzp, gzp);
557 break;
558 case 1:
559 /* bilinearly interpolate Typ/gyp first */
560 if (yi!=sy-1) {
561 ELL_3M_LERP(Txm, coords[1], sctx->t + 9*(0+2*siy), sctx->t + 9*(1+2*siy))((((Txm)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*siy
))+0)[0]) - (((sctx->t + 9*(0+2*siy))+0)[0])) + (((sctx->
t + 9*(0+2*siy))+0)[0])), ((Txm)+0)[1] = ((((coords[1])))*(((
(sctx->t + 9*(1+2*siy))+0)[1]) - (((sctx->t + 9*(0+2*siy
))+0)[1])) + (((sctx->t + 9*(0+2*siy))+0)[1])), ((Txm)+0)[
2] = ((((coords[1])))*((((sctx->t + 9*(1+2*siy))+0)[2]) - (
((sctx->t + 9*(0+2*siy))+0)[2])) + (((sctx->t + 9*(0+2*
siy))+0)[2]))), (((Txm)+3)[0] = ((((coords[1])))*((((sctx->
t + 9*(1+2*siy))+3)[0]) - (((sctx->t + 9*(0+2*siy))+3)[0])
) + (((sctx->t + 9*(0+2*siy))+3)[0])), ((Txm)+3)[1] = ((((
coords[1])))*((((sctx->t + 9*(1+2*siy))+3)[1]) - (((sctx->
t + 9*(0+2*siy))+3)[1])) + (((sctx->t + 9*(0+2*siy))+3)[1]
)), ((Txm)+3)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*siy
))+3)[2]) - (((sctx->t + 9*(0+2*siy))+3)[2])) + (((sctx->
t + 9*(0+2*siy))+3)[2]))), (((Txm)+6)[0] = ((((coords[1])))*(
(((sctx->t + 9*(1+2*siy))+6)[0]) - (((sctx->t + 9*(0+2*
siy))+6)[0])) + (((sctx->t + 9*(0+2*siy))+6)[0])), ((Txm)+
6)[1] = ((((coords[1])))*((((sctx->t + 9*(1+2*siy))+6)[1])
- (((sctx->t + 9*(0+2*siy))+6)[1])) + (((sctx->t + 9*(
0+2*siy))+6)[1])), ((Txm)+6)[2] = ((((coords[1])))*((((sctx->
t + 9*(1+2*siy))+6)[2]) - (((sctx->t + 9*(0+2*siy))+6)[2])
) + (((sctx->t + 9*(0+2*siy))+6)[2]))))
;
562 ELL_3V_LERP(gxm, coords[1], sctx->grad + 3*(0+2*siy),((gxm)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*siy))[0]
) - ((sctx->grad + 3*(0+2*siy))[0])) + ((sctx->grad + 3
*(0+2*siy))[0])), (gxm)[1] = (((coords[1]))*(((sctx->grad +
3*(1+2*siy))[1]) - ((sctx->grad + 3*(0+2*siy))[1])) + ((sctx
->grad + 3*(0+2*siy))[1])), (gxm)[2] = (((coords[1]))*(((sctx
->grad + 3*(1+2*siy))[2]) - ((sctx->grad + 3*(0+2*siy))
[2])) + ((sctx->grad + 3*(0+2*siy))[2])))
563 sctx->grad + 3*(1+2*siy))((gxm)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*siy))[0]
) - ((sctx->grad + 3*(0+2*siy))[0])) + ((sctx->grad + 3
*(0+2*siy))[0])), (gxm)[1] = (((coords[1]))*(((sctx->grad +
3*(1+2*siy))[1]) - ((sctx->grad + 3*(0+2*siy))[1])) + ((sctx
->grad + 3*(0+2*siy))[1])), (gxm)[2] = (((coords[1]))*(((sctx
->grad + 3*(1+2*siy))[2]) - ((sctx->grad + 3*(0+2*siy))
[2])) + ((sctx->grad + 3*(0+2*siy))[2])))
;
564 ELL_3M_LERP(Txp, coords[1], sctx->t + 9*(0+2*sixy),((((Txp)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy
))+0)[0]) - (((sctx->t + 9*(0+2*sixy))+0)[0])) + (((sctx->
t + 9*(0+2*sixy))+0)[0])), ((Txp)+0)[1] = ((((coords[1])))*((
((sctx->t + 9*(1+2*sixy))+0)[1]) - (((sctx->t + 9*(0+2*
sixy))+0)[1])) + (((sctx->t + 9*(0+2*sixy))+0)[1])), ((Txp
)+0)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy))+0)[
2]) - (((sctx->t + 9*(0+2*sixy))+0)[2])) + (((sctx->t +
9*(0+2*sixy))+0)[2]))), (((Txp)+3)[0] = ((((coords[1])))*(((
(sctx->t + 9*(1+2*sixy))+3)[0]) - (((sctx->t + 9*(0+2*sixy
))+3)[0])) + (((sctx->t + 9*(0+2*sixy))+3)[0])), ((Txp)+3)
[1] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy))+3)[1]) -
(((sctx->t + 9*(0+2*sixy))+3)[1])) + (((sctx->t + 9*(0
+2*sixy))+3)[1])), ((Txp)+3)[2] = ((((coords[1])))*((((sctx->
t + 9*(1+2*sixy))+3)[2]) - (((sctx->t + 9*(0+2*sixy))+3)[2
])) + (((sctx->t + 9*(0+2*sixy))+3)[2]))), (((Txp)+6)[0] =
((((coords[1])))*((((sctx->t + 9*(1+2*sixy))+6)[0]) - (((
sctx->t + 9*(0+2*sixy))+6)[0])) + (((sctx->t + 9*(0+2*sixy
))+6)[0])), ((Txp)+6)[1] = ((((coords[1])))*((((sctx->t + 9
*(1+2*sixy))+6)[1]) - (((sctx->t + 9*(0+2*sixy))+6)[1])) +
(((sctx->t + 9*(0+2*sixy))+6)[1])), ((Txp)+6)[2] = ((((coords
[1])))*((((sctx->t + 9*(1+2*sixy))+6)[2]) - (((sctx->t +
9*(0+2*sixy))+6)[2])) + (((sctx->t + 9*(0+2*sixy))+6)[2])
)))
565 sctx->t + 9*(1+2*sixy))((((Txp)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy
))+0)[0]) - (((sctx->t + 9*(0+2*sixy))+0)[0])) + (((sctx->
t + 9*(0+2*sixy))+0)[0])), ((Txp)+0)[1] = ((((coords[1])))*((
((sctx->t + 9*(1+2*sixy))+0)[1]) - (((sctx->t + 9*(0+2*
sixy))+0)[1])) + (((sctx->t + 9*(0+2*sixy))+0)[1])), ((Txp
)+0)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy))+0)[
2]) - (((sctx->t + 9*(0+2*sixy))+0)[2])) + (((sctx->t +
9*(0+2*sixy))+0)[2]))), (((Txp)+3)[0] = ((((coords[1])))*(((
(sctx->t + 9*(1+2*sixy))+3)[0]) - (((sctx->t + 9*(0+2*sixy
))+3)[0])) + (((sctx->t + 9*(0+2*sixy))+3)[0])), ((Txp)+3)
[1] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy))+3)[1]) -
(((sctx->t + 9*(0+2*sixy))+3)[1])) + (((sctx->t + 9*(0
+2*sixy))+3)[1])), ((Txp)+3)[2] = ((((coords[1])))*((((sctx->
t + 9*(1+2*sixy))+3)[2]) - (((sctx->t + 9*(0+2*sixy))+3)[2
])) + (((sctx->t + 9*(0+2*sixy))+3)[2]))), (((Txp)+6)[0] =
((((coords[1])))*((((sctx->t + 9*(1+2*sixy))+6)[0]) - (((
sctx->t + 9*(0+2*sixy))+6)[0])) + (((sctx->t + 9*(0+2*sixy
))+6)[0])), ((Txp)+6)[1] = ((((coords[1])))*((((sctx->t + 9
*(1+2*sixy))+6)[1]) - (((sctx->t + 9*(0+2*sixy))+6)[1])) +
(((sctx->t + 9*(0+2*sixy))+6)[1])), ((Txp)+6)[2] = ((((coords
[1])))*((((sctx->t + 9*(1+2*sixy))+6)[2]) - (((sctx->t +
9*(0+2*sixy))+6)[2])) + (((sctx->t + 9*(0+2*sixy))+6)[2])
)))
;
566 ELL_3V_LERP(gxp, coords[1], sctx->grad + 3*(0+2*sixy),((gxp)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*sixy))[0
]) - ((sctx->grad + 3*(0+2*sixy))[0])) + ((sctx->grad +
3*(0+2*sixy))[0])), (gxp)[1] = (((coords[1]))*(((sctx->grad
+ 3*(1+2*sixy))[1]) - ((sctx->grad + 3*(0+2*sixy))[1])) +
((sctx->grad + 3*(0+2*sixy))[1])), (gxp)[2] = (((coords[1
]))*(((sctx->grad + 3*(1+2*sixy))[2]) - ((sctx->grad + 3
*(0+2*sixy))[2])) + ((sctx->grad + 3*(0+2*sixy))[2])))
567 sctx->grad + 3*(1+2*sixy))((gxp)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*sixy))[0
]) - ((sctx->grad + 3*(0+2*sixy))[0])) + ((sctx->grad +
3*(0+2*sixy))[0])), (gxp)[1] = (((coords[1]))*(((sctx->grad
+ 3*(1+2*sixy))[1]) - ((sctx->grad + 3*(0+2*sixy))[1])) +
((sctx->grad + 3*(0+2*sixy))[1])), (gxp)[2] = (((coords[1
]))*(((sctx->grad + 3*(1+2*sixy))[2]) - ((sctx->grad + 3
*(0+2*sixy))[2])) + ((sctx->grad + 3*(0+2*sixy))[2])))
;
568 ELL_3M_LERP(Typ, coords[0], Txm, Txp)((((Typ)+0)[0] = ((((coords[0])))*((((Txp)+0)[0]) - (((Txm)+0
)[0])) + (((Txm)+0)[0])), ((Typ)+0)[1] = ((((coords[0])))*(((
(Txp)+0)[1]) - (((Txm)+0)[1])) + (((Txm)+0)[1])), ((Typ)+0)[2
] = ((((coords[0])))*((((Txp)+0)[2]) - (((Txm)+0)[2])) + (((Txm
)+0)[2]))), (((Typ)+3)[0] = ((((coords[0])))*((((Txp)+3)[0]) -
(((Txm)+3)[0])) + (((Txm)+3)[0])), ((Typ)+3)[1] = ((((coords
[0])))*((((Txp)+3)[1]) - (((Txm)+3)[1])) + (((Txm)+3)[1])), (
(Typ)+3)[2] = ((((coords[0])))*((((Txp)+3)[2]) - (((Txm)+3)[2
])) + (((Txm)+3)[2]))), (((Typ)+6)[0] = ((((coords[0])))*((((
Txp)+6)[0]) - (((Txm)+6)[0])) + (((Txm)+6)[0])), ((Typ)+6)[1]
= ((((coords[0])))*((((Txp)+6)[1]) - (((Txm)+6)[1])) + (((Txm
)+6)[1])), ((Typ)+6)[2] = ((((coords[0])))*((((Txp)+6)[2]) - (
((Txm)+6)[2])) + (((Txm)+6)[2]))))
;
569 ELL_3V_LERP(gyp, coords[0], gxm, gxp)((gyp)[0] = (((coords[0]))*(((gxp)[0]) - ((gxm)[0])) + ((gxm)
[0])), (gyp)[1] = (((coords[0]))*(((gxp)[1]) - ((gxm)[1])) + (
(gxm)[1])), (gyp)[2] = (((coords[0]))*(((gxp)[2]) - ((gxm)[2]
)) + ((gxm)[2])))
;
570 } else {
571 ELL_3M_LERP(Txm, coords[1], sctx->t + 9*(0+2*siY), sctx->t + 9*(1+2*siY))((((Txm)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*siY
))+0)[0]) - (((sctx->t + 9*(0+2*siY))+0)[0])) + (((sctx->
t + 9*(0+2*siY))+0)[0])), ((Txm)+0)[1] = ((((coords[1])))*(((
(sctx->t + 9*(1+2*siY))+0)[1]) - (((sctx->t + 9*(0+2*siY
))+0)[1])) + (((sctx->t + 9*(0+2*siY))+0)[1])), ((Txm)+0)[
2] = ((((coords[1])))*((((sctx->t + 9*(1+2*siY))+0)[2]) - (
((sctx->t + 9*(0+2*siY))+0)[2])) + (((sctx->t + 9*(0+2*
siY))+0)[2]))), (((Txm)+3)[0] = ((((coords[1])))*((((sctx->
t + 9*(1+2*siY))+3)[0]) - (((sctx->t + 9*(0+2*siY))+3)[0])
) + (((sctx->t + 9*(0+2*siY))+3)[0])), ((Txm)+3)[1] = ((((
coords[1])))*((((sctx->t + 9*(1+2*siY))+3)[1]) - (((sctx->
t + 9*(0+2*siY))+3)[1])) + (((sctx->t + 9*(0+2*siY))+3)[1]
)), ((Txm)+3)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*siY
))+3)[2]) - (((sctx->t + 9*(0+2*siY))+3)[2])) + (((sctx->
t + 9*(0+2*siY))+3)[2]))), (((Txm)+6)[0] = ((((coords[1])))*(
(((sctx->t + 9*(1+2*siY))+6)[0]) - (((sctx->t + 9*(0+2*
siY))+6)[0])) + (((sctx->t + 9*(0+2*siY))+6)[0])), ((Txm)+
6)[1] = ((((coords[1])))*((((sctx->t + 9*(1+2*siY))+6)[1])
- (((sctx->t + 9*(0+2*siY))+6)[1])) + (((sctx->t + 9*(
0+2*siY))+6)[1])), ((Txm)+6)[2] = ((((coords[1])))*((((sctx->
t + 9*(1+2*siY))+6)[2]) - (((sctx->t + 9*(0+2*siY))+6)[2])
) + (((sctx->t + 9*(0+2*siY))+6)[2]))))
;
572 ELL_3V_LERP(gxm, coords[1], sctx->grad + 3*(0+2*siY),((gxm)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*siY))[0]
) - ((sctx->grad + 3*(0+2*siY))[0])) + ((sctx->grad + 3
*(0+2*siY))[0])), (gxm)[1] = (((coords[1]))*(((sctx->grad +
3*(1+2*siY))[1]) - ((sctx->grad + 3*(0+2*siY))[1])) + ((sctx
->grad + 3*(0+2*siY))[1])), (gxm)[2] = (((coords[1]))*(((sctx
->grad + 3*(1+2*siY))[2]) - ((sctx->grad + 3*(0+2*siY))
[2])) + ((sctx->grad + 3*(0+2*siY))[2])))
573 sctx->grad + 3*(1+2*siY))((gxm)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*siY))[0]
) - ((sctx->grad + 3*(0+2*siY))[0])) + ((sctx->grad + 3
*(0+2*siY))[0])), (gxm)[1] = (((coords[1]))*(((sctx->grad +
3*(1+2*siY))[1]) - ((sctx->grad + 3*(0+2*siY))[1])) + ((sctx
->grad + 3*(0+2*siY))[1])), (gxm)[2] = (((coords[1]))*(((sctx
->grad + 3*(1+2*siY))[2]) - ((sctx->grad + 3*(0+2*siY))
[2])) + ((sctx->grad + 3*(0+2*siY))[2])))
;
574 ELL_3M_LERP(Txp, coords[1], sctx->t + 9*(0+2*sixY),((((Txp)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixY
))+0)[0]) - (((sctx->t + 9*(0+2*sixY))+0)[0])) + (((sctx->
t + 9*(0+2*sixY))+0)[0])), ((Txp)+0)[1] = ((((coords[1])))*((
((sctx->t + 9*(1+2*sixY))+0)[1]) - (((sctx->t + 9*(0+2*
sixY))+0)[1])) + (((sctx->t + 9*(0+2*sixY))+0)[1])), ((Txp
)+0)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixY))+0)[
2]) - (((sctx->t + 9*(0+2*sixY))+0)[2])) + (((sctx->t +
9*(0+2*sixY))+0)[2]))), (((Txp)+3)[0] = ((((coords[1])))*(((
(sctx->t + 9*(1+2*sixY))+3)[0]) - (((sctx->t + 9*(0+2*sixY
))+3)[0])) + (((sctx->t + 9*(0+2*sixY))+3)[0])), ((Txp)+3)
[1] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixY))+3)[1]) -
(((sctx->t + 9*(0+2*sixY))+3)[1])) + (((sctx->t + 9*(0
+2*sixY))+3)[1])), ((Txp)+3)[2] = ((((coords[1])))*((((sctx->
t + 9*(1+2*sixY))+3)[2]) - (((sctx->t + 9*(0+2*sixY))+3)[2
])) + (((sctx->t + 9*(0+2*sixY))+3)[2]))), (((Txp)+6)[0] =
((((coords[1])))*((((sctx->t + 9*(1+2*sixY))+6)[0]) - (((
sctx->t + 9*(0+2*sixY))+6)[0])) + (((sctx->t + 9*(0+2*sixY
))+6)[0])), ((Txp)+6)[1] = ((((coords[1])))*((((sctx->t + 9
*(1+2*sixY))+6)[1]) - (((sctx->t + 9*(0+2*sixY))+6)[1])) +
(((sctx->t + 9*(0+2*sixY))+6)[1])), ((Txp)+6)[2] = ((((coords
[1])))*((((sctx->t + 9*(1+2*sixY))+6)[2]) - (((sctx->t +
9*(0+2*sixY))+6)[2])) + (((sctx->t + 9*(0+2*sixY))+6)[2])
)))
575 sctx->t + 9*(1+2*sixY))((((Txp)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixY
))+0)[0]) - (((sctx->t + 9*(0+2*sixY))+0)[0])) + (((sctx->
t + 9*(0+2*sixY))+0)[0])), ((Txp)+0)[1] = ((((coords[1])))*((
((sctx->t + 9*(1+2*sixY))+0)[1]) - (((sctx->t + 9*(0+2*
sixY))+0)[1])) + (((sctx->t + 9*(0+2*sixY))+0)[1])), ((Txp
)+0)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixY))+0)[
2]) - (((sctx->t + 9*(0+2*sixY))+0)[2])) + (((sctx->t +
9*(0+2*sixY))+0)[2]))), (((Txp)+3)[0] = ((((coords[1])))*(((
(sctx->t + 9*(1+2*sixY))+3)[0]) - (((sctx->t + 9*(0+2*sixY
))+3)[0])) + (((sctx->t + 9*(0+2*sixY))+3)[0])), ((Txp)+3)
[1] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixY))+3)[1]) -
(((sctx->t + 9*(0+2*sixY))+3)[1])) + (((sctx->t + 9*(0
+2*sixY))+3)[1])), ((Txp)+3)[2] = ((((coords[1])))*((((sctx->
t + 9*(1+2*sixY))+3)[2]) - (((sctx->t + 9*(0+2*sixY))+3)[2
])) + (((sctx->t + 9*(0+2*sixY))+3)[2]))), (((Txp)+6)[0] =
((((coords[1])))*((((sctx->t + 9*(1+2*sixY))+6)[0]) - (((
sctx->t + 9*(0+2*sixY))+6)[0])) + (((sctx->t + 9*(0+2*sixY
))+6)[0])), ((Txp)+6)[1] = ((((coords[1])))*((((sctx->t + 9
*(1+2*sixY))+6)[1]) - (((sctx->t + 9*(0+2*sixY))+6)[1])) +
(((sctx->t + 9*(0+2*sixY))+6)[1])), ((Txp)+6)[2] = ((((coords
[1])))*((((sctx->t + 9*(1+2*sixY))+6)[2]) - (((sctx->t +
9*(0+2*sixY))+6)[2])) + (((sctx->t + 9*(0+2*sixY))+6)[2])
)))
;
576 ELL_3V_LERP(gxp, coords[1], sctx->grad + 3*(0+2*sixY),((gxp)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*sixY))[0
]) - ((sctx->grad + 3*(0+2*sixY))[0])) + ((sctx->grad +
3*(0+2*sixY))[0])), (gxp)[1] = (((coords[1]))*(((sctx->grad
+ 3*(1+2*sixY))[1]) - ((sctx->grad + 3*(0+2*sixY))[1])) +
((sctx->grad + 3*(0+2*sixY))[1])), (gxp)[2] = (((coords[1
]))*(((sctx->grad + 3*(1+2*sixY))[2]) - ((sctx->grad + 3
*(0+2*sixY))[2])) + ((sctx->grad + 3*(0+2*sixY))[2])))
577 sctx->grad + 3*(1+2*sixY))((gxp)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*sixY))[0
]) - ((sctx->grad + 3*(0+2*sixY))[0])) + ((sctx->grad +
3*(0+2*sixY))[0])), (gxp)[1] = (((coords[1]))*(((sctx->grad
+ 3*(1+2*sixY))[1]) - ((sctx->grad + 3*(0+2*sixY))[1])) +
((sctx->grad + 3*(0+2*sixY))[1])), (gxp)[2] = (((coords[1
]))*(((sctx->grad + 3*(1+2*sixY))[2]) - ((sctx->grad + 3
*(0+2*sixY))[2])) + ((sctx->grad + 3*(0+2*sixY))[2])))
;
578 ELL_3M_LERP(Tym, coords[0], Txm, Txp)((((Tym)+0)[0] = ((((coords[0])))*((((Txp)+0)[0]) - (((Txm)+0
)[0])) + (((Txm)+0)[0])), ((Tym)+0)[1] = ((((coords[0])))*(((
(Txp)+0)[1]) - (((Txm)+0)[1])) + (((Txm)+0)[1])), ((Tym)+0)[2
] = ((((coords[0])))*((((Txp)+0)[2]) - (((Txm)+0)[2])) + (((Txm
)+0)[2]))), (((Tym)+3)[0] = ((((coords[0])))*((((Txp)+3)[0]) -
(((Txm)+3)[0])) + (((Txm)+3)[0])), ((Tym)+3)[1] = ((((coords
[0])))*((((Txp)+3)[1]) - (((Txm)+3)[1])) + (((Txm)+3)[1])), (
(Tym)+3)[2] = ((((coords[0])))*((((Txp)+3)[2]) - (((Txm)+3)[2
])) + (((Txm)+3)[2]))), (((Tym)+6)[0] = ((((coords[0])))*((((
Txp)+6)[0]) - (((Txm)+6)[0])) + (((Txm)+6)[0])), ((Tym)+6)[1]
= ((((coords[0])))*((((Txp)+6)[1]) - (((Txm)+6)[1])) + (((Txm
)+6)[1])), ((Tym)+6)[2] = ((((coords[0])))*((((Txp)+6)[2]) - (
((Txm)+6)[2])) + (((Txm)+6)[2]))))
;
579 ELL_3V_LERP(gym, coords[0], gxm, gxp)((gym)[0] = (((coords[0]))*(((gxp)[0]) - ((gxm)[0])) + ((gxm)
[0])), (gym)[1] = (((coords[0]))*(((gxp)[1]) - ((gxm)[1])) + (
(gxm)[1])), (gym)[2] = (((coords[0]))*(((gxp)[2]) - ((gxm)[2]
)) + ((gxm)[2])))
;
580 }
581 /* now, compute remaining points */
582 ELL_3M_LERP(Txm, coords[1], sctx->t + 9*(0+2*si), sctx->t + 9*(1+2*si))((((Txm)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*si)
)+0)[0]) - (((sctx->t + 9*(0+2*si))+0)[0])) + (((sctx->
t + 9*(0+2*si))+0)[0])), ((Txm)+0)[1] = ((((coords[1])))*((((
sctx->t + 9*(1+2*si))+0)[1]) - (((sctx->t + 9*(0+2*si))
+0)[1])) + (((sctx->t + 9*(0+2*si))+0)[1])), ((Txm)+0)[2] =
((((coords[1])))*((((sctx->t + 9*(1+2*si))+0)[2]) - (((sctx
->t + 9*(0+2*si))+0)[2])) + (((sctx->t + 9*(0+2*si))+0)
[2]))), (((Txm)+3)[0] = ((((coords[1])))*((((sctx->t + 9*(
1+2*si))+3)[0]) - (((sctx->t + 9*(0+2*si))+3)[0])) + (((sctx
->t + 9*(0+2*si))+3)[0])), ((Txm)+3)[1] = ((((coords[1])))
*((((sctx->t + 9*(1+2*si))+3)[1]) - (((sctx->t + 9*(0+2
*si))+3)[1])) + (((sctx->t + 9*(0+2*si))+3)[1])), ((Txm)+3
)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*si))+3)[2]) -
(((sctx->t + 9*(0+2*si))+3)[2])) + (((sctx->t + 9*(0+2
*si))+3)[2]))), (((Txm)+6)[0] = ((((coords[1])))*((((sctx->
t + 9*(1+2*si))+6)[0]) - (((sctx->t + 9*(0+2*si))+6)[0])) +
(((sctx->t + 9*(0+2*si))+6)[0])), ((Txm)+6)[1] = ((((coords
[1])))*((((sctx->t + 9*(1+2*si))+6)[1]) - (((sctx->t + 9
*(0+2*si))+6)[1])) + (((sctx->t + 9*(0+2*si))+6)[1])), ((Txm
)+6)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*si))+6)[2]
) - (((sctx->t + 9*(0+2*si))+6)[2])) + (((sctx->t + 9*(
0+2*si))+6)[2]))))
;
583 ELL_3V_LERP(gxm, coords[1], sctx->grad + 3*(0+2*si),((gxm)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*si))[0])
- ((sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3*(
0+2*si))[0])), (gxm)[1] = (((coords[1]))*(((sctx->grad + 3
*(1+2*si))[1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx->
grad + 3*(0+2*si))[1])), (gxm)[2] = (((coords[1]))*(((sctx->
grad + 3*(1+2*si))[2]) - ((sctx->grad + 3*(0+2*si))[2])) +
((sctx->grad + 3*(0+2*si))[2])))
584 sctx->grad + 3*(1+2*si))((gxm)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*si))[0])
- ((sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3*(
0+2*si))[0])), (gxm)[1] = (((coords[1]))*(((sctx->grad + 3
*(1+2*si))[1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx->
grad + 3*(0+2*si))[1])), (gxm)[2] = (((coords[1]))*(((sctx->
grad + 3*(1+2*si))[2]) - ((sctx->grad + 3*(0+2*si))[2])) +
((sctx->grad + 3*(0+2*si))[2])))
;
585 ELL_3M_LERP(Txp, coords[1], sctx->t + 9*(0+2*six), sctx->t + 9*(1+2*six))((((Txp)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*six
))+0)[0]) - (((sctx->t + 9*(0+2*six))+0)[0])) + (((sctx->
t + 9*(0+2*six))+0)[0])), ((Txp)+0)[1] = ((((coords[1])))*(((
(sctx->t + 9*(1+2*six))+0)[1]) - (((sctx->t + 9*(0+2*six
))+0)[1])) + (((sctx->t + 9*(0+2*six))+0)[1])), ((Txp)+0)[
2] = ((((coords[1])))*((((sctx->t + 9*(1+2*six))+0)[2]) - (
((sctx->t + 9*(0+2*six))+0)[2])) + (((sctx->t + 9*(0+2*
six))+0)[2]))), (((Txp)+3)[0] = ((((coords[1])))*((((sctx->
t + 9*(1+2*six))+3)[0]) - (((sctx->t + 9*(0+2*six))+3)[0])
) + (((sctx->t + 9*(0+2*six))+3)[0])), ((Txp)+3)[1] = ((((
coords[1])))*((((sctx->t + 9*(1+2*six))+3)[1]) - (((sctx->
t + 9*(0+2*six))+3)[1])) + (((sctx->t + 9*(0+2*six))+3)[1]
)), ((Txp)+3)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*six
))+3)[2]) - (((sctx->t + 9*(0+2*six))+3)[2])) + (((sctx->
t + 9*(0+2*six))+3)[2]))), (((Txp)+6)[0] = ((((coords[1])))*(
(((sctx->t + 9*(1+2*six))+6)[0]) - (((sctx->t + 9*(0+2*
six))+6)[0])) + (((sctx->t + 9*(0+2*six))+6)[0])), ((Txp)+
6)[1] = ((((coords[1])))*((((sctx->t + 9*(1+2*six))+6)[1])
- (((sctx->t + 9*(0+2*six))+6)[1])) + (((sctx->t + 9*(
0+2*six))+6)[1])), ((Txp)+6)[2] = ((((coords[1])))*((((sctx->
t + 9*(1+2*six))+6)[2]) - (((sctx->t + 9*(0+2*six))+6)[2])
) + (((sctx->t + 9*(0+2*six))+6)[2]))))
;
586 ELL_3V_LERP(gxp, coords[1], sctx->grad + 3*(0+2*six),((gxp)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*six))[0]
) - ((sctx->grad + 3*(0+2*six))[0])) + ((sctx->grad + 3
*(0+2*six))[0])), (gxp)[1] = (((coords[1]))*(((sctx->grad +
3*(1+2*six))[1]) - ((sctx->grad + 3*(0+2*six))[1])) + ((sctx
->grad + 3*(0+2*six))[1])), (gxp)[2] = (((coords[1]))*(((sctx
->grad + 3*(1+2*six))[2]) - ((sctx->grad + 3*(0+2*six))
[2])) + ((sctx->grad + 3*(0+2*six))[2])))
587 sctx->grad + 3*(1+2*six))((gxp)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*six))[0]
) - ((sctx->grad + 3*(0+2*six))[0])) + ((sctx->grad + 3
*(0+2*six))[0])), (gxp)[1] = (((coords[1]))*(((sctx->grad +
3*(1+2*six))[1]) - ((sctx->grad + 3*(0+2*six))[1])) + ((sctx
->grad + 3*(0+2*six))[1])), (gxp)[2] = (((coords[1]))*(((sctx
->grad + 3*(1+2*six))[2]) - ((sctx->grad + 3*(0+2*six))
[2])) + ((sctx->grad + 3*(0+2*six))[2])))
;
588
589 ELL_3M_LERP(Tzm, coords[0], sctx->t + 9*(0+2*si), sctx->t + 9*(0+2*six))((((Tzm)+0)[0] = ((((coords[0])))*((((sctx->t + 9*(0+2*six
))+0)[0]) - (((sctx->t + 9*(0+2*si))+0)[0])) + (((sctx->
t + 9*(0+2*si))+0)[0])), ((Tzm)+0)[1] = ((((coords[0])))*((((
sctx->t + 9*(0+2*six))+0)[1]) - (((sctx->t + 9*(0+2*si)
)+0)[1])) + (((sctx->t + 9*(0+2*si))+0)[1])), ((Tzm)+0)[2]
= ((((coords[0])))*((((sctx->t + 9*(0+2*six))+0)[2]) - ((
(sctx->t + 9*(0+2*si))+0)[2])) + (((sctx->t + 9*(0+2*si
))+0)[2]))), (((Tzm)+3)[0] = ((((coords[0])))*((((sctx->t +
9*(0+2*six))+3)[0]) - (((sctx->t + 9*(0+2*si))+3)[0])) + (
((sctx->t + 9*(0+2*si))+3)[0])), ((Tzm)+3)[1] = ((((coords
[0])))*((((sctx->t + 9*(0+2*six))+3)[1]) - (((sctx->t +
9*(0+2*si))+3)[1])) + (((sctx->t + 9*(0+2*si))+3)[1])), (
(Tzm)+3)[2] = ((((coords[0])))*((((sctx->t + 9*(0+2*six))+
3)[2]) - (((sctx->t + 9*(0+2*si))+3)[2])) + (((sctx->t +
9*(0+2*si))+3)[2]))), (((Tzm)+6)[0] = ((((coords[0])))*((((sctx
->t + 9*(0+2*six))+6)[0]) - (((sctx->t + 9*(0+2*si))+6)
[0])) + (((sctx->t + 9*(0+2*si))+6)[0])), ((Tzm)+6)[1] = (
(((coords[0])))*((((sctx->t + 9*(0+2*six))+6)[1]) - (((sctx
->t + 9*(0+2*si))+6)[1])) + (((sctx->t + 9*(0+2*si))+6)
[1])), ((Tzm)+6)[2] = ((((coords[0])))*((((sctx->t + 9*(0+
2*six))+6)[2]) - (((sctx->t + 9*(0+2*si))+6)[2])) + (((sctx
->t + 9*(0+2*si))+6)[2]))))
;
590 ELL_3V_LERP(gzm, coords[0], sctx->grad + 3*(0+2*si),((gzm)[0] = (((coords[0]))*(((sctx->grad + 3*(0+2*six))[0]
) - ((sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3*
(0+2*si))[0])), (gzm)[1] = (((coords[0]))*(((sctx->grad + 3
*(0+2*six))[1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx
->grad + 3*(0+2*si))[1])), (gzm)[2] = (((coords[0]))*(((sctx
->grad + 3*(0+2*six))[2]) - ((sctx->grad + 3*(0+2*si))[
2])) + ((sctx->grad + 3*(0+2*si))[2])))
591 sctx->grad + 3*(0+2*six))((gzm)[0] = (((coords[0]))*(((sctx->grad + 3*(0+2*six))[0]
) - ((sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3*
(0+2*si))[0])), (gzm)[1] = (((coords[0]))*(((sctx->grad + 3
*(0+2*six))[1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx
->grad + 3*(0+2*si))[1])), (gzm)[2] = (((coords[0]))*(((sctx
->grad + 3*(0+2*six))[2]) - ((sctx->grad + 3*(0+2*si))[
2])) + ((sctx->grad + 3*(0+2*si))[2])))
;
592 ELL_3M_LERP(Tzp, coords[0], sctx->t + 9*(1+2*si), sctx->t + 9*(1+2*six))((((Tzp)+0)[0] = ((((coords[0])))*((((sctx->t + 9*(1+2*six
))+0)[0]) - (((sctx->t + 9*(1+2*si))+0)[0])) + (((sctx->
t + 9*(1+2*si))+0)[0])), ((Tzp)+0)[1] = ((((coords[0])))*((((
sctx->t + 9*(1+2*six))+0)[1]) - (((sctx->t + 9*(1+2*si)
)+0)[1])) + (((sctx->t + 9*(1+2*si))+0)[1])), ((Tzp)+0)[2]
= ((((coords[0])))*((((sctx->t + 9*(1+2*six))+0)[2]) - ((
(sctx->t + 9*(1+2*si))+0)[2])) + (((sctx->t + 9*(1+2*si
))+0)[2]))), (((Tzp)+3)[0] = ((((coords[0])))*((((sctx->t +
9*(1+2*six))+3)[0]) - (((sctx->t + 9*(1+2*si))+3)[0])) + (
((sctx->t + 9*(1+2*si))+3)[0])), ((Tzp)+3)[1] = ((((coords
[0])))*((((sctx->t + 9*(1+2*six))+3)[1]) - (((sctx->t +
9*(1+2*si))+3)[1])) + (((sctx->t + 9*(1+2*si))+3)[1])), (
(Tzp)+3)[2] = ((((coords[0])))*((((sctx->t + 9*(1+2*six))+
3)[2]) - (((sctx->t + 9*(1+2*si))+3)[2])) + (((sctx->t +
9*(1+2*si))+3)[2]))), (((Tzp)+6)[0] = ((((coords[0])))*((((sctx
->t + 9*(1+2*six))+6)[0]) - (((sctx->t + 9*(1+2*si))+6)
[0])) + (((sctx->t + 9*(1+2*si))+6)[0])), ((Tzp)+6)[1] = (
(((coords[0])))*((((sctx->t + 9*(1+2*six))+6)[1]) - (((sctx
->t + 9*(1+2*si))+6)[1])) + (((sctx->t + 9*(1+2*si))+6)
[1])), ((Tzp)+6)[2] = ((((coords[0])))*((((sctx->t + 9*(1+
2*six))+6)[2]) - (((sctx->t + 9*(1+2*si))+6)[2])) + (((sctx
->t + 9*(1+2*si))+6)[2]))))
;
593 ELL_3V_LERP(gzp, coords[0], sctx->grad + 3*(1+2*si),((gzp)[0] = (((coords[0]))*(((sctx->grad + 3*(1+2*six))[0]
) - ((sctx->grad + 3*(1+2*si))[0])) + ((sctx->grad + 3*
(1+2*si))[0])), (gzp)[1] = (((coords[0]))*(((sctx->grad + 3
*(1+2*six))[1]) - ((sctx->grad + 3*(1+2*si))[1])) + ((sctx
->grad + 3*(1+2*si))[1])), (gzp)[2] = (((coords[0]))*(((sctx
->grad + 3*(1+2*six))[2]) - ((sctx->grad + 3*(1+2*si))[
2])) + ((sctx->grad + 3*(1+2*si))[2])))
594 sctx->grad + 3*(1+2*six))((gzp)[0] = (((coords[0]))*(((sctx->grad + 3*(1+2*six))[0]
) - ((sctx->grad + 3*(1+2*si))[0])) + ((sctx->grad + 3*
(1+2*si))[0])), (gzp)[1] = (((coords[0]))*(((sctx->grad + 3
*(1+2*six))[1]) - ((sctx->grad + 3*(1+2*si))[1])) + ((sctx
->grad + 3*(1+2*si))[1])), (gzp)[2] = (((coords[0]))*(((sctx
->grad + 3*(1+2*six))[2]) - ((sctx->grad + 3*(1+2*si))[
2])) + ((sctx->grad + 3*(1+2*si))[2])))
;
595
596 ELL_3M_LERP(T, coords[0], Txm, Txp)((((T)+0)[0] = ((((coords[0])))*((((Txp)+0)[0]) - (((Txm)+0)[
0])) + (((Txm)+0)[0])), ((T)+0)[1] = ((((coords[0])))*((((Txp
)+0)[1]) - (((Txm)+0)[1])) + (((Txm)+0)[1])), ((T)+0)[2] = ((
((coords[0])))*((((Txp)+0)[2]) - (((Txm)+0)[2])) + (((Txm)+0)
[2]))), (((T)+3)[0] = ((((coords[0])))*((((Txp)+3)[0]) - (((Txm
)+3)[0])) + (((Txm)+3)[0])), ((T)+3)[1] = ((((coords[0])))*((
((Txp)+3)[1]) - (((Txm)+3)[1])) + (((Txm)+3)[1])), ((T)+3)[2]
= ((((coords[0])))*((((Txp)+3)[2]) - (((Txm)+3)[2])) + (((Txm
)+3)[2]))), (((T)+6)[0] = ((((coords[0])))*((((Txp)+6)[0]) - (
((Txm)+6)[0])) + (((Txm)+6)[0])), ((T)+6)[1] = ((((coords[0])
))*((((Txp)+6)[1]) - (((Txm)+6)[1])) + (((Txm)+6)[1])), ((T)+
6)[2] = ((((coords[0])))*((((Txp)+6)[2]) - (((Txm)+6)[2])) + (
((Txm)+6)[2]))))
;
597 ELL_3V_LERP(g, coords[0], gxm, gxp)((g)[0] = (((coords[0]))*(((gxp)[0]) - ((gxm)[0])) + ((gxm)[0
])), (g)[1] = (((coords[0]))*(((gxp)[1]) - ((gxm)[1])) + ((gxm
)[1])), (g)[2] = (((coords[0]))*(((gxp)[2]) - ((gxm)[2])) + (
(gxm)[2])))
;
598
599 if (yi!=sy-1) {
600 computeGradientLin(sctx->facenorm+3*(faceid+4*si), T, g,
601 Txm, gxm, Txp, gxp,
602 T, g, Typ, gyp,
603 Tzm, gzm, Tzp, gzp);
604 } else {
605 computeGradientLin(sctx->facenorm+3*(faceid+4*si), T, g,
606 Txm, gxm, Txp, gxp,
607 Tym, gym, T, g,
608 Tzm, gzm, Tzp, gzp);
609 }
610 break;
611 case 2:
612 /* bilinearly interpolate Txp/gxp first */
613 if (xi!=sx-1) {
2
Taking true branch
614 ELL_3M_LERP(Tym, coords[1], sctx->t + 9*(0+2*six), sctx->t + 9*(1+2*six))((((Tym)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*six
))+0)[0]) - (((sctx->t + 9*(0+2*six))+0)[0])) + (((sctx->
t + 9*(0+2*six))+0)[0])), ((Tym)+0)[1] = ((((coords[1])))*(((
(sctx->t + 9*(1+2*six))+0)[1]) - (((sctx->t + 9*(0+2*six
))+0)[1])) + (((sctx->t + 9*(0+2*six))+0)[1])), ((Tym)+0)[
2] = ((((coords[1])))*((((sctx->t + 9*(1+2*six))+0)[2]) - (
((sctx->t + 9*(0+2*six))+0)[2])) + (((sctx->t + 9*(0+2*
six))+0)[2]))), (((Tym)+3)[0] = ((((coords[1])))*((((sctx->
t + 9*(1+2*six))+3)[0]) - (((sctx->t + 9*(0+2*six))+3)[0])
) + (((sctx->t + 9*(0+2*six))+3)[0])), ((Tym)+3)[1] = ((((
coords[1])))*((((sctx->t + 9*(1+2*six))+3)[1]) - (((sctx->
t + 9*(0+2*six))+3)[1])) + (((sctx->t + 9*(0+2*six))+3)[1]
)), ((Tym)+3)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*six
))+3)[2]) - (((sctx->t + 9*(0+2*six))+3)[2])) + (((sctx->
t + 9*(0+2*six))+3)[2]))), (((Tym)+6)[0] = ((((coords[1])))*(
(((sctx->t + 9*(1+2*six))+6)[0]) - (((sctx->t + 9*(0+2*
six))+6)[0])) + (((sctx->t + 9*(0+2*six))+6)[0])), ((Tym)+
6)[1] = ((((coords[1])))*((((sctx->t + 9*(1+2*six))+6)[1])
- (((sctx->t + 9*(0+2*six))+6)[1])) + (((sctx->t + 9*(
0+2*six))+6)[1])), ((Tym)+6)[2] = ((((coords[1])))*((((sctx->
t + 9*(1+2*six))+6)[2]) - (((sctx->t + 9*(0+2*six))+6)[2])
) + (((sctx->t + 9*(0+2*six))+6)[2]))))
;
615 ELL_3V_LERP(gym, coords[1], sctx->grad + 3*(0+2*six),((gym)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*six))[0]
) - ((sctx->grad + 3*(0+2*six))[0])) + ((sctx->grad + 3
*(0+2*six))[0])), (gym)[1] = (((coords[1]))*(((sctx->grad +
3*(1+2*six))[1]) - ((sctx->grad + 3*(0+2*six))[1])) + ((sctx
->grad + 3*(0+2*six))[1])), (gym)[2] = (((coords[1]))*(((sctx
->grad + 3*(1+2*six))[2]) - ((sctx->grad + 3*(0+2*six))
[2])) + ((sctx->grad + 3*(0+2*six))[2])))
616 sctx->grad + 3*(1+2*six))((gym)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*six))[0]
) - ((sctx->grad + 3*(0+2*six))[0])) + ((sctx->grad + 3
*(0+2*six))[0])), (gym)[1] = (((coords[1]))*(((sctx->grad +
3*(1+2*six))[1]) - ((sctx->grad + 3*(0+2*six))[1])) + ((sctx
->grad + 3*(0+2*six))[1])), (gym)[2] = (((coords[1]))*(((sctx
->grad + 3*(1+2*six))[2]) - ((sctx->grad + 3*(0+2*six))
[2])) + ((sctx->grad + 3*(0+2*six))[2])))
;
617 ELL_3M_LERP(Typ, coords[1], sctx->t + 9*(0+2*sixy),((((Typ)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy
))+0)[0]) - (((sctx->t + 9*(0+2*sixy))+0)[0])) + (((sctx->
t + 9*(0+2*sixy))+0)[0])), ((Typ)+0)[1] = ((((coords[1])))*((
((sctx->t + 9*(1+2*sixy))+0)[1]) - (((sctx->t + 9*(0+2*
sixy))+0)[1])) + (((sctx->t + 9*(0+2*sixy))+0)[1])), ((Typ
)+0)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy))+0)[
2]) - (((sctx->t + 9*(0+2*sixy))+0)[2])) + (((sctx->t +
9*(0+2*sixy))+0)[2]))), (((Typ)+3)[0] = ((((coords[1])))*(((
(sctx->t + 9*(1+2*sixy))+3)[0]) - (((sctx->t + 9*(0+2*sixy
))+3)[0])) + (((sctx->t + 9*(0+2*sixy))+3)[0])), ((Typ)+3)
[1] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy))+3)[1]) -
(((sctx->t + 9*(0+2*sixy))+3)[1])) + (((sctx->t + 9*(0
+2*sixy))+3)[1])), ((Typ)+3)[2] = ((((coords[1])))*((((sctx->
t + 9*(1+2*sixy))+3)[2]) - (((sctx->t + 9*(0+2*sixy))+3)[2
])) + (((sctx->t + 9*(0+2*sixy))+3)[2]))), (((Typ)+6)[0] =
((((coords[1])))*((((sctx->t + 9*(1+2*sixy))+6)[0]) - (((
sctx->t + 9*(0+2*sixy))+6)[0])) + (((sctx->t + 9*(0+2*sixy
))+6)[0])), ((Typ)+6)[1] = ((((coords[1])))*((((sctx->t + 9
*(1+2*sixy))+6)[1]) - (((sctx->t + 9*(0+2*sixy))+6)[1])) +
(((sctx->t + 9*(0+2*sixy))+6)[1])), ((Typ)+6)[2] = ((((coords
[1])))*((((sctx->t + 9*(1+2*sixy))+6)[2]) - (((sctx->t +
9*(0+2*sixy))+6)[2])) + (((sctx->t + 9*(0+2*sixy))+6)[2])
)))
618 sctx->t + 9*(1+2*sixy))((((Typ)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy
))+0)[0]) - (((sctx->t + 9*(0+2*sixy))+0)[0])) + (((sctx->
t + 9*(0+2*sixy))+0)[0])), ((Typ)+0)[1] = ((((coords[1])))*((
((sctx->t + 9*(1+2*sixy))+0)[1]) - (((sctx->t + 9*(0+2*
sixy))+0)[1])) + (((sctx->t + 9*(0+2*sixy))+0)[1])), ((Typ
)+0)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy))+0)[
2]) - (((sctx->t + 9*(0+2*sixy))+0)[2])) + (((sctx->t +
9*(0+2*sixy))+0)[2]))), (((Typ)+3)[0] = ((((coords[1])))*(((
(sctx->t + 9*(1+2*sixy))+3)[0]) - (((sctx->t + 9*(0+2*sixy
))+3)[0])) + (((sctx->t + 9*(0+2*sixy))+3)[0])), ((Typ)+3)
[1] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy))+3)[1]) -
(((sctx->t + 9*(0+2*sixy))+3)[1])) + (((sctx->t + 9*(0
+2*sixy))+3)[1])), ((Typ)+3)[2] = ((((coords[1])))*((((sctx->
t + 9*(1+2*sixy))+3)[2]) - (((sctx->t + 9*(0+2*sixy))+3)[2
])) + (((sctx->t + 9*(0+2*sixy))+3)[2]))), (((Typ)+6)[0] =
((((coords[1])))*((((sctx->t + 9*(1+2*sixy))+6)[0]) - (((
sctx->t + 9*(0+2*sixy))+6)[0])) + (((sctx->t + 9*(0+2*sixy
))+6)[0])), ((Typ)+6)[1] = ((((coords[1])))*((((sctx->t + 9
*(1+2*sixy))+6)[1]) - (((sctx->t + 9*(0+2*sixy))+6)[1])) +
(((sctx->t + 9*(0+2*sixy))+6)[1])), ((Typ)+6)[2] = ((((coords
[1])))*((((sctx->t + 9*(1+2*sixy))+6)[2]) - (((sctx->t +
9*(0+2*sixy))+6)[2])) + (((sctx->t + 9*(0+2*sixy))+6)[2])
)))
;
619 ELL_3V_LERP(gyp, coords[1], sctx->grad + 3*(0+2*sixy),((gyp)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*sixy))[0
]) - ((sctx->grad + 3*(0+2*sixy))[0])) + ((sctx->grad +
3*(0+2*sixy))[0])), (gyp)[1] = (((coords[1]))*(((sctx->grad
+ 3*(1+2*sixy))[1]) - ((sctx->grad + 3*(0+2*sixy))[1])) +
((sctx->grad + 3*(0+2*sixy))[1])), (gyp)[2] = (((coords[1
]))*(((sctx->grad + 3*(1+2*sixy))[2]) - ((sctx->grad + 3
*(0+2*sixy))[2])) + ((sctx->grad + 3*(0+2*sixy))[2])))
620 sctx->grad + 3*(1+2*sixy))((gyp)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*sixy))[0
]) - ((sctx->grad + 3*(0+2*sixy))[0])) + ((sctx->grad +
3*(0+2*sixy))[0])), (gyp)[1] = (((coords[1]))*(((sctx->grad
+ 3*(1+2*sixy))[1]) - ((sctx->grad + 3*(0+2*sixy))[1])) +
((sctx->grad + 3*(0+2*sixy))[1])), (gyp)[2] = (((coords[1
]))*(((sctx->grad + 3*(1+2*sixy))[2]) - ((sctx->grad + 3
*(0+2*sixy))[2])) + ((sctx->grad + 3*(0+2*sixy))[2])))
;
621 ELL_3M_LERP(Txp, coords[0], Tym, Typ)((((Txp)+0)[0] = ((((coords[0])))*((((Typ)+0)[0]) - (((Tym)+0
)[0])) + (((Tym)+0)[0])), ((Txp)+0)[1] = ((((coords[0])))*(((
(Typ)+0)[1]) - (((Tym)+0)[1])) + (((Tym)+0)[1])), ((Txp)+0)[2
] = ((((coords[0])))*((((Typ)+0)[2]) - (((Tym)+0)[2])) + (((Tym
)+0)[2]))), (((Txp)+3)[0] = ((((coords[0])))*((((Typ)+3)[0]) -
(((Tym)+3)[0])) + (((Tym)+3)[0])), ((Txp)+3)[1] = ((((coords
[0])))*((((Typ)+3)[1]) - (((Tym)+3)[1])) + (((Tym)+3)[1])), (
(Txp)+3)[2] = ((((coords[0])))*((((Typ)+3)[2]) - (((Tym)+3)[2
])) + (((Tym)+3)[2]))), (((Txp)+6)[0] = ((((coords[0])))*((((
Typ)+6)[0]) - (((Tym)+6)[0])) + (((Tym)+6)[0])), ((Txp)+6)[1]
= ((((coords[0])))*((((Typ)+6)[1]) - (((Tym)+6)[1])) + (((Tym
)+6)[1])), ((Txp)+6)[2] = ((((coords[0])))*((((Typ)+6)[2]) - (
((Tym)+6)[2])) + (((Tym)+6)[2]))))
;
622 ELL_3V_LERP(gxp, coords[0], gym, gyp)((gxp)[0] = (((coords[0]))*(((gyp)[0]) - ((gym)[0])) + ((gym)
[0])), (gxp)[1] = (((coords[0]))*(((gyp)[1]) - ((gym)[1])) + (
(gym)[1])), (gxp)[2] = (((coords[0]))*(((gyp)[2]) - ((gym)[2]
)) + ((gym)[2])))
;
623 } else {
624 ELL_3M_LERP(Tym, coords[1], sctx->t + 9*(0+2*siX), sctx->t + 9*(1+2*siX))((((Tym)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*siX
))+0)[0]) - (((sctx->t + 9*(0+2*siX))+0)[0])) + (((sctx->
t + 9*(0+2*siX))+0)[0])), ((Tym)+0)[1] = ((((coords[1])))*(((
(sctx->t + 9*(1+2*siX))+0)[1]) - (((sctx->t + 9*(0+2*siX
))+0)[1])) + (((sctx->t + 9*(0+2*siX))+0)[1])), ((Tym)+0)[
2] = ((((coords[1])))*((((sctx->t + 9*(1+2*siX))+0)[2]) - (
((sctx->t + 9*(0+2*siX))+0)[2])) + (((sctx->t + 9*(0+2*
siX))+0)[2]))), (((Tym)+3)[0] = ((((coords[1])))*((((sctx->
t + 9*(1+2*siX))+3)[0]) - (((sctx->t + 9*(0+2*siX))+3)[0])
) + (((sctx->t + 9*(0+2*siX))+3)[0])), ((Tym)+3)[1] = ((((
coords[1])))*((((sctx->t + 9*(1+2*siX))+3)[1]) - (((sctx->
t + 9*(0+2*siX))+3)[1])) + (((sctx->t + 9*(0+2*siX))+3)[1]
)), ((Tym)+3)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*siX
))+3)[2]) - (((sctx->t + 9*(0+2*siX))+3)[2])) + (((sctx->
t + 9*(0+2*siX))+3)[2]))), (((Tym)+6)[0] = ((((coords[1])))*(
(((sctx->t + 9*(1+2*siX))+6)[0]) - (((sctx->t + 9*(0+2*
siX))+6)[0])) + (((sctx->t + 9*(0+2*siX))+6)[0])), ((Tym)+
6)[1] = ((((coords[1])))*((((sctx->t + 9*(1+2*siX))+6)[1])
- (((sctx->t + 9*(0+2*siX))+6)[1])) + (((sctx->t + 9*(
0+2*siX))+6)[1])), ((Tym)+6)[2] = ((((coords[1])))*((((sctx->
t + 9*(1+2*siX))+6)[2]) - (((sctx->t + 9*(0+2*siX))+6)[2])
) + (((sctx->t + 9*(0+2*siX))+6)[2]))))
;
625 ELL_3V_LERP(gym, coords[1], sctx->grad + 3*(0+2*siX),((gym)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*siX))[0]
) - ((sctx->grad + 3*(0+2*siX))[0])) + ((sctx->grad + 3
*(0+2*siX))[0])), (gym)[1] = (((coords[1]))*(((sctx->grad +
3*(1+2*siX))[1]) - ((sctx->grad + 3*(0+2*siX))[1])) + ((sctx
->grad + 3*(0+2*siX))[1])), (gym)[2] = (((coords[1]))*(((sctx
->grad + 3*(1+2*siX))[2]) - ((sctx->grad + 3*(0+2*siX))
[2])) + ((sctx->grad + 3*(0+2*siX))[2])))
626 sctx->grad + 3*(1+2*siX))((gym)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*siX))[0]
) - ((sctx->grad + 3*(0+2*siX))[0])) + ((sctx->grad + 3
*(0+2*siX))[0])), (gym)[1] = (((coords[1]))*(((sctx->grad +
3*(1+2*siX))[1]) - ((sctx->grad + 3*(0+2*siX))[1])) + ((sctx
->grad + 3*(0+2*siX))[1])), (gym)[2] = (((coords[1]))*(((sctx
->grad + 3*(1+2*siX))[2]) - ((sctx->grad + 3*(0+2*siX))
[2])) + ((sctx->grad + 3*(0+2*siX))[2])))
;
627 ELL_3M_LERP(Typ, coords[1], sctx->t + 9*(0+2*siXy),((((Typ)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*siXy
))+0)[0]) - (((sctx->t + 9*(0+2*siXy))+0)[0])) + (((sctx->
t + 9*(0+2*siXy))+0)[0])), ((Typ)+0)[1] = ((((coords[1])))*((
((sctx->t + 9*(1+2*siXy))+0)[1]) - (((sctx->t + 9*(0+2*
siXy))+0)[1])) + (((sctx->t + 9*(0+2*siXy))+0)[1])), ((Typ
)+0)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*siXy))+0)[
2]) - (((sctx->t + 9*(0+2*siXy))+0)[2])) + (((sctx->t +
9*(0+2*siXy))+0)[2]))), (((Typ)+3)[0] = ((((coords[1])))*(((
(sctx->t + 9*(1+2*siXy))+3)[0]) - (((sctx->t + 9*(0+2*siXy
))+3)[0])) + (((sctx->t + 9*(0+2*siXy))+3)[0])), ((Typ)+3)
[1] = ((((coords[1])))*((((sctx->t + 9*(1+2*siXy))+3)[1]) -
(((sctx->t + 9*(0+2*siXy))+3)[1])) + (((sctx->t + 9*(0
+2*siXy))+3)[1])), ((Typ)+3)[2] = ((((coords[1])))*((((sctx->
t + 9*(1+2*siXy))+3)[2]) - (((sctx->t + 9*(0+2*siXy))+3)[2
])) + (((sctx->t + 9*(0+2*siXy))+3)[2]))), (((Typ)+6)[0] =
((((coords[1])))*((((sctx->t + 9*(1+2*siXy))+6)[0]) - (((
sctx->t + 9*(0+2*siXy))+6)[0])) + (((sctx->t + 9*(0+2*siXy
))+6)[0])), ((Typ)+6)[1] = ((((coords[1])))*((((sctx->t + 9
*(1+2*siXy))+6)[1]) - (((sctx->t + 9*(0+2*siXy))+6)[1])) +
(((sctx->t + 9*(0+2*siXy))+6)[1])), ((Typ)+6)[2] = ((((coords
[1])))*((((sctx->t + 9*(1+2*siXy))+6)[2]) - (((sctx->t +
9*(0+2*siXy))+6)[2])) + (((sctx->t + 9*(0+2*siXy))+6)[2])
)))
628 sctx->t + 9*(1+2*siXy))((((Typ)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*siXy
))+0)[0]) - (((sctx->t + 9*(0+2*siXy))+0)[0])) + (((sctx->
t + 9*(0+2*siXy))+0)[0])), ((Typ)+0)[1] = ((((coords[1])))*((
((sctx->t + 9*(1+2*siXy))+0)[1]) - (((sctx->t + 9*(0+2*
siXy))+0)[1])) + (((sctx->t + 9*(0+2*siXy))+0)[1])), ((Typ
)+0)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*siXy))+0)[
2]) - (((sctx->t + 9*(0+2*siXy))+0)[2])) + (((sctx->t +
9*(0+2*siXy))+0)[2]))), (((Typ)+3)[0] = ((((coords[1])))*(((
(sctx->t + 9*(1+2*siXy))+3)[0]) - (((sctx->t + 9*(0+2*siXy
))+3)[0])) + (((sctx->t + 9*(0+2*siXy))+3)[0])), ((Typ)+3)
[1] = ((((coords[1])))*((((sctx->t + 9*(1+2*siXy))+3)[1]) -
(((sctx->t + 9*(0+2*siXy))+3)[1])) + (((sctx->t + 9*(0
+2*siXy))+3)[1])), ((Typ)+3)[2] = ((((coords[1])))*((((sctx->
t + 9*(1+2*siXy))+3)[2]) - (((sctx->t + 9*(0+2*siXy))+3)[2
])) + (((sctx->t + 9*(0+2*siXy))+3)[2]))), (((Typ)+6)[0] =
((((coords[1])))*((((sctx->t + 9*(1+2*siXy))+6)[0]) - (((
sctx->t + 9*(0+2*siXy))+6)[0])) + (((sctx->t + 9*(0+2*siXy
))+6)[0])), ((Typ)+6)[1] = ((((coords[1])))*((((sctx->t + 9
*(1+2*siXy))+6)[1]) - (((sctx->t + 9*(0+2*siXy))+6)[1])) +
(((sctx->t + 9*(0+2*siXy))+6)[1])), ((Typ)+6)[2] = ((((coords
[1])))*((((sctx->t + 9*(1+2*siXy))+6)[2]) - (((sctx->t +
9*(0+2*siXy))+6)[2])) + (((sctx->t + 9*(0+2*siXy))+6)[2])
)))
;
629 ELL_3V_LERP(gyp, coords[1], sctx->grad + 3*(0+2*siXy),((gyp)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*siXy))[0
]) - ((sctx->grad + 3*(0+2*siXy))[0])) + ((sctx->grad +
3*(0+2*siXy))[0])), (gyp)[1] = (((coords[1]))*(((sctx->grad
+ 3*(1+2*siXy))[1]) - ((sctx->grad + 3*(0+2*siXy))[1])) +
((sctx->grad + 3*(0+2*siXy))[1])), (gyp)[2] = (((coords[1
]))*(((sctx->grad + 3*(1+2*siXy))[2]) - ((sctx->grad + 3
*(0+2*siXy))[2])) + ((sctx->grad + 3*(0+2*siXy))[2])))
630 sctx->grad + 3*(1+2*siXy))((gyp)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*siXy))[0
]) - ((sctx->grad + 3*(0+2*siXy))[0])) + ((sctx->grad +
3*(0+2*siXy))[0])), (gyp)[1] = (((coords[1]))*(((sctx->grad
+ 3*(1+2*siXy))[1]) - ((sctx->grad + 3*(0+2*siXy))[1])) +
((sctx->grad + 3*(0+2*siXy))[1])), (gyp)[2] = (((coords[1
]))*(((sctx->grad + 3*(1+2*siXy))[2]) - ((sctx->grad + 3
*(0+2*siXy))[2])) + ((sctx->grad + 3*(0+2*siXy))[2])))
;
631 ELL_3M_LERP(Txm, coords[0], Tym, Typ)((((Txm)+0)[0] = ((((coords[0])))*((((Typ)+0)[0]) - (((Tym)+0
)[0])) + (((Tym)+0)[0])), ((Txm)+0)[1] = ((((coords[0])))*(((
(Typ)+0)[1]) - (((Tym)+0)[1])) + (((Tym)+0)[1])), ((Txm)+0)[2
] = ((((coords[0])))*((((Typ)+0)[2]) - (((Tym)+0)[2])) + (((Tym
)+0)[2]))), (((Txm)+3)[0] = ((((coords[0])))*((((Typ)+3)[0]) -
(((Tym)+3)[0])) + (((Tym)+3)[0])), ((Txm)+3)[1] = ((((coords
[0])))*((((Typ)+3)[1]) - (((Tym)+3)[1])) + (((Tym)+3)[1])), (
(Txm)+3)[2] = ((((coords[0])))*((((Typ)+3)[2]) - (((Tym)+3)[2
])) + (((Tym)+3)[2]))), (((Txm)+6)[0] = ((((coords[0])))*((((
Typ)+6)[0]) - (((Tym)+6)[0])) + (((Tym)+6)[0])), ((Txm)+6)[1]
= ((((coords[0])))*((((Typ)+6)[1]) - (((Tym)+6)[1])) + (((Tym
)+6)[1])), ((Txm)+6)[2] = ((((coords[0])))*((((Typ)+6)[2]) - (
((Tym)+6)[2])) + (((Tym)+6)[2]))))
;
632 ELL_3V_LERP(gxm, coords[0], gym, gyp)((gxm)[0] = (((coords[0]))*(((gyp)[0]) - ((gym)[0])) + ((gym)
[0])), (gxm)[1] = (((coords[0]))*(((gyp)[1]) - ((gym)[1])) + (
(gym)[1])), (gxm)[2] = (((coords[0]))*(((gyp)[2]) - ((gym)[2]
)) + ((gym)[2])))
;
633 }
634 /* now, compute remaining points */
635 ELL_3M_LERP(Tym, coords[1], sctx->t + 9*(0+2*si), sctx->t + 9*(1+2*si))((((Tym)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*si)
)+0)[0]) - (((sctx->t + 9*(0+2*si))+0)[0])) + (((sctx->
t + 9*(0+2*si))+0)[0])), ((Tym)+0)[1] = ((((coords[1])))*((((
sctx->t + 9*(1+2*si))+0)[1]) - (((sctx->t + 9*(0+2*si))
+0)[1])) + (((sctx->t + 9*(0+2*si))+0)[1])), ((Tym)+0)[2] =
((((coords[1])))*((((sctx->t + 9*(1+2*si))+0)[2]) - (((sctx
->t + 9*(0+2*si))+0)[2])) + (((sctx->t + 9*(0+2*si))+0)
[2]))), (((Tym)+3)[0] = ((((coords[1])))*((((sctx->t + 9*(
1+2*si))+3)[0]) - (((sctx->t + 9*(0+2*si))+3)[0])) + (((sctx
->t + 9*(0+2*si))+3)[0])), ((Tym)+3)[1] = ((((coords[1])))
*((((sctx->t + 9*(1+2*si))+3)[1]) - (((sctx->t + 9*(0+2
*si))+3)[1])) + (((sctx->t + 9*(0+2*si))+3)[1])), ((Tym)+3
)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*si))+3)[2]) -
(((sctx->t + 9*(0+2*si))+3)[2])) + (((sctx->t + 9*(0+2
*si))+3)[2]))), (((Tym)+6)[0] = ((((coords[1])))*((((sctx->
t + 9*(1+2*si))+6)[0]) - (((sctx->t + 9*(0+2*si))+6)[0])) +
(((sctx->t + 9*(0+2*si))+6)[0])), ((Tym)+6)[1] = ((((coords
[1])))*((((sctx->t + 9*(1+2*si))+6)[1]) - (((sctx->t + 9
*(0+2*si))+6)[1])) + (((sctx->t + 9*(0+2*si))+6)[1])), ((Tym
)+6)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*si))+6)[2]
) - (((sctx->t + 9*(0+2*si))+6)[2])) + (((sctx->t + 9*(
0+2*si))+6)[2]))))
;
636 ELL_3V_LERP(gym, coords[1], sctx->grad + 3*(0+2*si),((gym)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*si))[0])
- ((sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3*(
0+2*si))[0])), (gym)[1] = (((coords[1]))*(((sctx->grad + 3
*(1+2*si))[1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx->
grad + 3*(0+2*si))[1])), (gym)[2] = (((coords[1]))*(((sctx->
grad + 3*(1+2*si))[2]) - ((sctx->grad + 3*(0+2*si))[2])) +
((sctx->grad + 3*(0+2*si))[2])))
637 sctx->grad + 3*(1+2*si))((gym)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*si))[0])
- ((sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3*(
0+2*si))[0])), (gym)[1] = (((coords[1]))*(((sctx->grad + 3
*(1+2*si))[1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx->
grad + 3*(0+2*si))[1])), (gym)[2] = (((coords[1]))*(((sctx->
grad + 3*(1+2*si))[2]) - ((sctx->grad + 3*(0+2*si))[2])) +
((sctx->grad + 3*(0+2*si))[2])))
;
638 ELL_3M_LERP(Typ, coords[1], sctx->t + 9*(0+2*siy), sctx->t + 9*(1+2*siy))((((Typ)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*siy
))+0)[0]) - (((sctx->t + 9*(0+2*siy))+0)[0])) + (((sctx->
t + 9*(0+2*siy))+0)[0])), ((Typ)+0)[1] = ((((coords[1])))*(((
(sctx->t + 9*(1+2*siy))+0)[1]) - (((sctx->t + 9*(0+2*siy
))+0)[1])) + (((sctx->t + 9*(0+2*siy))+0)[1])), ((Typ)+0)[
2] = ((((coords[1])))*((((sctx->t + 9*(1+2*siy))+0)[2]) - (
((sctx->t + 9*(0+2*siy))+0)[2])) + (((sctx->t + 9*(0+2*
siy))+0)[2]))), (((Typ)+3)[0] = ((((coords[1])))*((((sctx->
t + 9*(1+2*siy))+3)[0]) - (((sctx->t + 9*(0+2*siy))+3)[0])
) + (((sctx->t + 9*(0+2*siy))+3)[0])), ((Typ)+3)[1] = ((((
coords[1])))*((((sctx->t + 9*(1+2*siy))+3)[1]) - (((sctx->
t + 9*(0+2*siy))+3)[1])) + (((sctx->t + 9*(0+2*siy))+3)[1]
)), ((Typ)+3)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*siy
))+3)[2]) - (((sctx->t + 9*(0+2*siy))+3)[2])) + (((sctx->
t + 9*(0+2*siy))+3)[2]))), (((Typ)+6)[0] = ((((coords[1])))*(
(((sctx->t + 9*(1+2*siy))+6)[0]) - (((sctx->t + 9*(0+2*
siy))+6)[0])) + (((sctx->t + 9*(0+2*siy))+6)[0])), ((Typ)+
6)[1] = ((((coords[1])))*((((sctx->t + 9*(1+2*siy))+6)[1])
- (((sctx->t + 9*(0+2*siy))+6)[1])) + (((sctx->t + 9*(
0+2*siy))+6)[1])), ((Typ)+6)[2] = ((((coords[1])))*((((sctx->
t + 9*(1+2*siy))+6)[2]) - (((sctx->t + 9*(0+2*siy))+6)[2])
) + (((sctx->t + 9*(0+2*siy))+6)[2]))))
;
639 ELL_3V_LERP(gyp, coords[1], sctx->grad + 3*(0+2*siy),((gyp)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*siy))[0]
) - ((sctx->grad + 3*(0+2*siy))[0])) + ((sctx->grad + 3
*(0+2*siy))[0])), (gyp)[1] = (((coords[1]))*(((sctx->grad +
3*(1+2*siy))[1]) - ((sctx->grad + 3*(0+2*siy))[1])) + ((sctx
->grad + 3*(0+2*siy))[1])), (gyp)[2] = (((coords[1]))*(((sctx
->grad + 3*(1+2*siy))[2]) - ((sctx->grad + 3*(0+2*siy))
[2])) + ((sctx->grad + 3*(0+2*siy))[2])))
640 sctx->grad + 3*(1+2*siy))((gyp)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*siy))[0]
) - ((sctx->grad + 3*(0+2*siy))[0])) + ((sctx->grad + 3
*(0+2*siy))[0])), (gyp)[1] = (((coords[1]))*(((sctx->grad +
3*(1+2*siy))[1]) - ((sctx->grad + 3*(0+2*siy))[1])) + ((sctx
->grad + 3*(0+2*siy))[1])), (gyp)[2] = (((coords[1]))*(((sctx
->grad + 3*(1+2*siy))[2]) - ((sctx->grad + 3*(0+2*siy))
[2])) + ((sctx->grad + 3*(0+2*siy))[2])))
;
641
642 ELL_3M_LERP(Tzm, coords[0], sctx->t + 9*(0+2*si), sctx->t + 9*(0+2*siy))((((Tzm)+0)[0] = ((((coords[0])))*((((sctx->t + 9*(0+2*siy
))+0)[0]) - (((sctx->t + 9*(0+2*si))+0)[0])) + (((sctx->
t + 9*(0+2*si))+0)[0])), ((Tzm)+0)[1] = ((((coords[0])))*((((
sctx->t + 9*(0+2*siy))+0)[1]) - (((sctx->t + 9*(0+2*si)
)+0)[1])) + (((sctx->t + 9*(0+2*si))+0)[1])), ((Tzm)+0)[2]
= ((((coords[0])))*((((sctx->t + 9*(0+2*siy))+0)[2]) - ((
(sctx->t + 9*(0+2*si))+0)[2])) + (((sctx->t + 9*(0+2*si
))+0)[2]))), (((Tzm)+3)[0] = ((((coords[0])))*((((sctx->t +
9*(0+2*siy))+3)[0]) - (((sctx->t + 9*(0+2*si))+3)[0])) + (
((sctx->t + 9*(0+2*si))+3)[0])), ((Tzm)+3)[1] = ((((coords
[0])))*((((sctx->t + 9*(0+2*siy))+3)[1]) - (((sctx->t +
9*(0+2*si))+3)[1])) + (((sctx->t + 9*(0+2*si))+3)[1])), (
(Tzm)+3)[2] = ((((coords[0])))*((((sctx->t + 9*(0+2*siy))+
3)[2]) - (((sctx->t + 9*(0+2*si))+3)[2])) + (((sctx->t +
9*(0+2*si))+3)[2]))), (((Tzm)+6)[0] = ((((coords[0])))*((((sctx
->t + 9*(0+2*siy))+6)[0]) - (((sctx->t + 9*(0+2*si))+6)
[0])) + (((sctx->t + 9*(0+2*si))+6)[0])), ((Tzm)+6)[1] = (
(((coords[0])))*((((sctx->t + 9*(0+2*siy))+6)[1]) - (((sctx
->t + 9*(0+2*si))+6)[1])) + (((sctx->t + 9*(0+2*si))+6)
[1])), ((Tzm)+6)[2] = ((((coords[0])))*((((sctx->t + 9*(0+
2*siy))+6)[2]) - (((sctx->t + 9*(0+2*si))+6)[2])) + (((sctx
->t + 9*(0+2*si))+6)[2]))))
;
643 ELL_3V_LERP(gzm, coords[0], sctx->grad + 3*(0+2*si),((gzm)[0] = (((coords[0]))*(((sctx->grad + 3*(0+2*siy))[0]
) - ((sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3*
(0+2*si))[0])), (gzm)[1] = (((coords[0]))*(((sctx->grad + 3
*(0+2*siy))[1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx
->grad + 3*(0+2*si))[1])), (gzm)[2] = (((coords[0]))*(((sctx
->grad + 3*(0+2*siy))[2]) - ((sctx->grad + 3*(0+2*si))[
2])) + ((sctx->grad + 3*(0+2*si))[2])))
644 sctx->grad + 3*(0+2*siy))((gzm)[0] = (((coords[0]))*(((sctx->grad + 3*(0+2*siy))[0]
) - ((sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3*
(0+2*si))[0])), (gzm)[1] = (((coords[0]))*(((sctx->grad + 3
*(0+2*siy))[1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx
->grad + 3*(0+2*si))[1])), (gzm)[2] = (((coords[0]))*(((sctx
->grad + 3*(0+2*siy))[2]) - ((sctx->grad + 3*(0+2*si))[
2])) + ((sctx->grad + 3*(0+2*si))[2])))
;
645 ELL_3M_LERP(Tzp, coords[0], sctx->t + 9*(1+2*si), sctx->t + 9*(1+2*siy))((((Tzp)+0)[0] = ((((coords[0])))*((((sctx->t + 9*(1+2*siy
))+0)[0]) - (((sctx->t + 9*(1+2*si))+0)[0])) + (((sctx->
t + 9*(1+2*si))+0)[0])), ((Tzp)+0)[1] = ((((coords[0])))*((((
sctx->t + 9*(1+2*siy))+0)[1]) - (((sctx->t + 9*(1+2*si)
)+0)[1])) + (((sctx->t + 9*(1+2*si))+0)[1])), ((Tzp)+0)[2]
= ((((coords[0])))*((((sctx->t + 9*(1+2*siy))+0)[2]) - ((
(sctx->t + 9*(1+2*si))+0)[2])) + (((sctx->t + 9*(1+2*si
))+0)[2]))), (((Tzp)+3)[0] = ((((coords[0])))*((((sctx->t +
9*(1+2*siy))+3)[0]) - (((sctx->t + 9*(1+2*si))+3)[0])) + (
((sctx->t + 9*(1+2*si))+3)[0])), ((Tzp)+3)[1] = ((((coords
[0])))*((((sctx->t + 9*(1+2*siy))+3)[1]) - (((sctx->t +
9*(1+2*si))+3)[1])) + (((sctx->t + 9*(1+2*si))+3)[1])), (
(Tzp)+3)[2] = ((((coords[0])))*((((sctx->t + 9*(1+2*siy))+
3)[2]) - (((sctx->t + 9*(1+2*si))+3)[2])) + (((sctx->t +
9*(1+2*si))+3)[2]))), (((Tzp)+6)[0] = ((((coords[0])))*((((sctx
->t + 9*(1+2*siy))+6)[0]) - (((sctx->t + 9*(1+2*si))+6)
[0])) + (((sctx->t + 9*(1+2*si))+6)[0])), ((Tzp)+6)[1] = (
(((coords[0])))*((((sctx->t + 9*(1+2*siy))+6)[1]) - (((sctx
->t + 9*(1+2*si))+6)[1])) + (((sctx->t + 9*(1+2*si))+6)
[1])), ((Tzp)+6)[2] = ((((coords[0])))*((((sctx->t + 9*(1+
2*siy))+6)[2]) - (((sctx->t + 9*(1+2*si))+6)[2])) + (((sctx
->t + 9*(1+2*si))+6)[2]))))
;
646 ELL_3V_LERP(gzp, coords[0], sctx->grad + 3*(1+2*si),((gzp)[0] = (((coords[0]))*(((sctx->grad + 3*(1+2*siy))[0]
) - ((sctx->grad + 3*(1+2*si))[0])) + ((sctx->grad + 3*
(1+2*si))[0])), (gzp)[1] = (((coords[0]))*(((sctx->grad + 3
*(1+2*siy))[1]) - ((sctx->grad + 3*(1+2*si))[1])) + ((sctx
->grad + 3*(1+2*si))[1])), (gzp)[2] = (((coords[0]))*(((sctx
->grad + 3*(1+2*siy))[2]) - ((sctx->grad + 3*(1+2*si))[
2])) + ((sctx->grad + 3*(1+2*si))[2])))
647 sctx->grad + 3*(1+2*siy))((gzp)[0] = (((coords[0]))*(((sctx->grad + 3*(1+2*siy))[0]
) - ((sctx->grad + 3*(1+2*si))[0])) + ((sctx->grad + 3*
(1+2*si))[0])), (gzp)[1] = (((coords[0]))*(((sctx->grad + 3
*(1+2*siy))[1]) - ((sctx->grad + 3*(1+2*si))[1])) + ((sctx
->grad + 3*(1+2*si))[1])), (gzp)[2] = (((coords[0]))*(((sctx
->grad + 3*(1+2*siy))[2]) - ((sctx->grad + 3*(1+2*si))[
2])) + ((sctx->grad + 3*(1+2*si))[2])))
;
648
649 ELL_3M_LERP(T, coords[0], Tym, Typ)((((T)+0)[0] = ((((coords[0])))*((((Typ)+0)[0]) - (((Tym)+0)[
0])) + (((Tym)+0)[0])), ((T)+0)[1] = ((((coords[0])))*((((Typ
)+0)[1]) - (((Tym)+0)[1])) + (((Tym)+0)[1])), ((T)+0)[2] = ((
((coords[0])))*((((Typ)+0)[2]) - (((Tym)+0)[2])) + (((Tym)+0)
[2]))), (((T)+3)[0] = ((((coords[0])))*((((Typ)+3)[0]) - (((Tym
)+3)[0])) + (((Tym)+3)[0])), ((T)+3)[1] = ((((coords[0])))*((
((Typ)+3)[1]) - (((Tym)+3)[1])) + (((Tym)+3)[1])), ((T)+3)[2]
= ((((coords[0])))*((((Typ)+3)[2]) - (((Tym)+3)[2])) + (((Tym
)+3)[2]))), (((T)+6)[0] = ((((coords[0])))*((((Typ)+6)[0]) - (
((Tym)+6)[0])) + (((Tym)+6)[0])), ((T)+6)[1] = ((((coords[0])
))*((((Typ)+6)[1]) - (((Tym)+6)[1])) + (((Tym)+6)[1])), ((T)+
6)[2] = ((((coords[0])))*((((Typ)+6)[2]) - (((Tym)+6)[2])) + (
((Tym)+6)[2]))))
;
650 ELL_3V_LERP(g, coords[0], gym, gyp)((g)[0] = (((coords[0]))*(((gyp)[0]) - ((gym)[0])) + ((gym)[0
])), (g)[1] = (((coords[0]))*(((gyp)[1]) - ((gym)[1])) + ((gym
)[1])), (g)[2] = (((coords[0]))*(((gyp)[2]) - ((gym)[2])) + (
(gym)[2])))
;
651
652 if (xi!=sx-1) {
3
Taking false branch
653 computeGradientLin(sctx->facenorm+3*(faceid+4*si), T, g,
654 T, g, Txp, gxp,
655 Tym, gym, Typ, gyp,
656 Tzm, gzm, Tzp, gzp);
657 } else {
658 computeGradientLin(sctx->facenorm+3*(faceid+4*si), T, g,
4
Calling 'computeGradientLin'
659 Txm, gxm, T, g,
660 Tym, gym, Typ, gyp,
661 Tzm, gzm, Tzp, gzp);
662 }
663 break;
664 case 3:
665 /* bilinearly interpolate Tzm/gzm first */
666 ELL_3M_LERP(Txm, coords[1], sctx->t + 9*(0+2*si), sctx->t + 9*(0+2*siy))((((Txm)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(0+2*siy
))+0)[0]) - (((sctx->t + 9*(0+2*si))+0)[0])) + (((sctx->
t + 9*(0+2*si))+0)[0])), ((Txm)+0)[1] = ((((coords[1])))*((((
sctx->t + 9*(0+2*siy))+0)[1]) - (((sctx->t + 9*(0+2*si)
)+0)[1])) + (((sctx->t + 9*(0+2*si))+0)[1])), ((Txm)+0)[2]
= ((((coords[1])))*((((sctx->t + 9*(0+2*siy))+0)[2]) - ((
(sctx->t + 9*(0+2*si))+0)[2])) + (((sctx->t + 9*(0+2*si
))+0)[2]))), (((Txm)+3)[0] = ((((coords[1])))*((((sctx->t +
9*(0+2*siy))+3)[0]) - (((sctx->t + 9*(0+2*si))+3)[0])) + (
((sctx->t + 9*(0+2*si))+3)[0])), ((Txm)+3)[1] = ((((coords
[1])))*((((sctx->t + 9*(0+2*siy))+3)[1]) - (((sctx->t +
9*(0+2*si))+3)[1])) + (((sctx->t + 9*(0+2*si))+3)[1])), (
(Txm)+3)[2] = ((((coords[1])))*((((sctx->t + 9*(0+2*siy))+
3)[2]) - (((sctx->t + 9*(0+2*si))+3)[2])) + (((sctx->t +
9*(0+2*si))+3)[2]))), (((Txm)+6)[0] = ((((coords[1])))*((((sctx
->t + 9*(0+2*siy))+6)[0]) - (((sctx->t + 9*(0+2*si))+6)
[0])) + (((sctx->t + 9*(0+2*si))+6)[0])), ((Txm)+6)[1] = (
(((coords[1])))*((((sctx->t + 9*(0+2*siy))+6)[1]) - (((sctx
->t + 9*(0+2*si))+6)[1])) + (((sctx->t + 9*(0+2*si))+6)
[1])), ((Txm)+6)[2] = ((((coords[1])))*((((sctx->t + 9*(0+
2*siy))+6)[2]) - (((sctx->t + 9*(0+2*si))+6)[2])) + (((sctx
->t + 9*(0+2*si))+6)[2]))))
;
667 ELL_3V_LERP(gxm, coords[1], sctx->grad + 3*(0+2*si),((gxm)[0] = (((coords[1]))*(((sctx->grad + 3*(0+2*siy))[0]
) - ((sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3*
(0+2*si))[0])), (gxm)[1] = (((coords[1]))*(((sctx->grad + 3
*(0+2*siy))[1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx
->grad + 3*(0+2*si))[1])), (gxm)[2] = (((coords[1]))*(((sctx
->grad + 3*(0+2*siy))[2]) - ((sctx->grad + 3*(0+2*si))[
2])) + ((sctx->grad + 3*(0+2*si))[2])))
668 sctx->grad + 3*(0+2*siy))((gxm)[0] = (((coords[1]))*(((sctx->grad + 3*(0+2*siy))[0]
) - ((sctx->grad + 3*(0+2*si))[0])) + ((sctx->grad + 3*
(0+2*si))[0])), (gxm)[1] = (((coords[1]))*(((sctx->grad + 3
*(0+2*siy))[1]) - ((sctx->grad + 3*(0+2*si))[1])) + ((sctx
->grad + 3*(0+2*si))[1])), (gxm)[2] = (((coords[1]))*(((sctx
->grad + 3*(0+2*siy))[2]) - ((sctx->grad + 3*(0+2*si))[
2])) + ((sctx->grad + 3*(0+2*si))[2])))
;
669 ELL_3M_LERP(Txp, coords[1], sctx->t + 9*(0+2*six), sctx->t + 9*(0+2*sixy))((((Txp)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(0+2*sixy
))+0)[0]) - (((sctx->t + 9*(0+2*six))+0)[0])) + (((sctx->
t + 9*(0+2*six))+0)[0])), ((Txp)+0)[1] = ((((coords[1])))*(((
(sctx->t + 9*(0+2*sixy))+0)[1]) - (((sctx->t + 9*(0+2*six
))+0)[1])) + (((sctx->t + 9*(0+2*six))+0)[1])), ((Txp)+0)[
2] = ((((coords[1])))*((((sctx->t + 9*(0+2*sixy))+0)[2]) -
(((sctx->t + 9*(0+2*six))+0)[2])) + (((sctx->t + 9*(0+
2*six))+0)[2]))), (((Txp)+3)[0] = ((((coords[1])))*((((sctx->
t + 9*(0+2*sixy))+3)[0]) - (((sctx->t + 9*(0+2*six))+3)[0]
)) + (((sctx->t + 9*(0+2*six))+3)[0])), ((Txp)+3)[1] = (((
(coords[1])))*((((sctx->t + 9*(0+2*sixy))+3)[1]) - (((sctx
->t + 9*(0+2*six))+3)[1])) + (((sctx->t + 9*(0+2*six))+
3)[1])), ((Txp)+3)[2] = ((((coords[1])))*((((sctx->t + 9*(
0+2*sixy))+3)[2]) - (((sctx->t + 9*(0+2*six))+3)[2])) + ((
(sctx->t + 9*(0+2*six))+3)[2]))), (((Txp)+6)[0] = ((((coords
[1])))*((((sctx->t + 9*(0+2*sixy))+6)[0]) - (((sctx->t +
9*(0+2*six))+6)[0])) + (((sctx->t + 9*(0+2*six))+6)[0])),
((Txp)+6)[1] = ((((coords[1])))*((((sctx->t + 9*(0+2*sixy
))+6)[1]) - (((sctx->t + 9*(0+2*six))+6)[1])) + (((sctx->
t + 9*(0+2*six))+6)[1])), ((Txp)+6)[2] = ((((coords[1])))*(((
(sctx->t + 9*(0+2*sixy))+6)[2]) - (((sctx->t + 9*(0+2*six
))+6)[2])) + (((sctx->t + 9*(0+2*six))+6)[2]))))
;
670 ELL_3V_LERP(gxp, coords[1], sctx->grad + 3*(0+2*six),((gxp)[0] = (((coords[1]))*(((sctx->grad + 3*(0+2*sixy))[0
]) - ((sctx->grad + 3*(0+2*six))[0])) + ((sctx->grad + 3
*(0+2*six))[0])), (gxp)[1] = (((coords[1]))*(((sctx->grad +
3*(0+2*sixy))[1]) - ((sctx->grad + 3*(0+2*six))[1])) + ((
sctx->grad + 3*(0+2*six))[1])), (gxp)[2] = (((coords[1]))*
(((sctx->grad + 3*(0+2*sixy))[2]) - ((sctx->grad + 3*(0
+2*six))[2])) + ((sctx->grad + 3*(0+2*six))[2])))
671 sctx->grad + 3*(0+2*sixy))((gxp)[0] = (((coords[1]))*(((sctx->grad + 3*(0+2*sixy))[0
]) - ((sctx->grad + 3*(0+2*six))[0])) + ((sctx->grad + 3
*(0+2*six))[0])), (gxp)[1] = (((coords[1]))*(((sctx->grad +
3*(0+2*sixy))[1]) - ((sctx->grad + 3*(0+2*six))[1])) + ((
sctx->grad + 3*(0+2*six))[1])), (gxp)[2] = (((coords[1]))*
(((sctx->grad + 3*(0+2*sixy))[2]) - ((sctx->grad + 3*(0
+2*six))[2])) + ((sctx->grad + 3*(0+2*six))[2])))
;
672 ELL_3M_LERP(Tzm, coords[0], Txm, Txp)((((Tzm)+0)[0] = ((((coords[0])))*((((Txp)+0)[0]) - (((Txm)+0
)[0])) + (((Txm)+0)[0])), ((Tzm)+0)[1] = ((((coords[0])))*(((
(Txp)+0)[1]) - (((Txm)+0)[1])) + (((Txm)+0)[1])), ((Tzm)+0)[2
] = ((((coords[0])))*((((Txp)+0)[2]) - (((Txm)+0)[2])) + (((Txm
)+0)[2]))), (((Tzm)+3)[0] = ((((coords[0])))*((((Txp)+3)[0]) -
(((Txm)+3)[0])) + (((Txm)+3)[0])), ((Tzm)+3)[1] = ((((coords
[0])))*((((Txp)+3)[1]) - (((Txm)+3)[1])) + (((Txm)+3)[1])), (
(Tzm)+3)[2] = ((((coords[0])))*((((Txp)+3)[2]) - (((Txm)+3)[2
])) + (((Txm)+3)[2]))), (((Tzm)+6)[0] = ((((coords[0])))*((((
Txp)+6)[0]) - (((Txm)+6)[0])) + (((Txm)+6)[0])), ((Tzm)+6)[1]
= ((((coords[0])))*((((Txp)+6)[1]) - (((Txm)+6)[1])) + (((Txm
)+6)[1])), ((Tzm)+6)[2] = ((((coords[0])))*((((Txp)+6)[2]) - (
((Txm)+6)[2])) + (((Txm)+6)[2]))))
;
673 ELL_3V_LERP(gzm, coords[0], gxm, gxp)((gzm)[0] = (((coords[0]))*(((gxp)[0]) - ((gxm)[0])) + ((gxm)
[0])), (gzm)[1] = (((coords[0]))*(((gxp)[1]) - ((gxm)[1])) + (
(gxm)[1])), (gzm)[2] = (((coords[0]))*(((gxp)[2]) - ((gxm)[2]
)) + ((gxm)[2])))
;
674 /* now, compute all required points on the top face */
675 ELL_3M_LERP(Txm, coords[1], sctx->t + 9*(1+2*si), sctx->t + 9*(1+2*siy))((((Txm)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*siy
))+0)[0]) - (((sctx->t + 9*(1+2*si))+0)[0])) + (((sctx->
t + 9*(1+2*si))+0)[0])), ((Txm)+0)[1] = ((((coords[1])))*((((
sctx->t + 9*(1+2*siy))+0)[1]) - (((sctx->t + 9*(1+2*si)
)+0)[1])) + (((sctx->t + 9*(1+2*si))+0)[1])), ((Txm)+0)[2]
= ((((coords[1])))*((((sctx->t + 9*(1+2*siy))+0)[2]) - ((
(sctx->t + 9*(1+2*si))+0)[2])) + (((sctx->t + 9*(1+2*si
))+0)[2]))), (((Txm)+3)[0] = ((((coords[1])))*((((sctx->t +
9*(1+2*siy))+3)[0]) - (((sctx->t + 9*(1+2*si))+3)[0])) + (
((sctx->t + 9*(1+2*si))+3)[0])), ((Txm)+3)[1] = ((((coords
[1])))*((((sctx->t + 9*(1+2*siy))+3)[1]) - (((sctx->t +
9*(1+2*si))+3)[1])) + (((sctx->t + 9*(1+2*si))+3)[1])), (
(Txm)+3)[2] = ((((coords[1])))*((((sctx->t + 9*(1+2*siy))+
3)[2]) - (((sctx->t + 9*(1+2*si))+3)[2])) + (((sctx->t +
9*(1+2*si))+3)[2]))), (((Txm)+6)[0] = ((((coords[1])))*((((sctx
->t + 9*(1+2*siy))+6)[0]) - (((sctx->t + 9*(1+2*si))+6)
[0])) + (((sctx->t + 9*(1+2*si))+6)[0])), ((Txm)+6)[1] = (
(((coords[1])))*((((sctx->t + 9*(1+2*siy))+6)[1]) - (((sctx
->t + 9*(1+2*si))+6)[1])) + (((sctx->t + 9*(1+2*si))+6)
[1])), ((Txm)+6)[2] = ((((coords[1])))*((((sctx->t + 9*(1+
2*siy))+6)[2]) - (((sctx->t + 9*(1+2*si))+6)[2])) + (((sctx
->t + 9*(1+2*si))+6)[2]))))
;
676 ELL_3V_LERP(gxm, coords[1], sctx->grad + 3*(1+2*si),((gxm)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*siy))[0]
) - ((sctx->grad + 3*(1+2*si))[0])) + ((sctx->grad + 3*
(1+2*si))[0])), (gxm)[1] = (((coords[1]))*(((sctx->grad + 3
*(1+2*siy))[1]) - ((sctx->grad + 3*(1+2*si))[1])) + ((sctx
->grad + 3*(1+2*si))[1])), (gxm)[2] = (((coords[1]))*(((sctx
->grad + 3*(1+2*siy))[2]) - ((sctx->grad + 3*(1+2*si))[
2])) + ((sctx->grad + 3*(1+2*si))[2])))
677 sctx->grad + 3*(1+2*siy))((gxm)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*siy))[0]
) - ((sctx->grad + 3*(1+2*si))[0])) + ((sctx->grad + 3*
(1+2*si))[0])), (gxm)[1] = (((coords[1]))*(((sctx->grad + 3
*(1+2*siy))[1]) - ((sctx->grad + 3*(1+2*si))[1])) + ((sctx
->grad + 3*(1+2*si))[1])), (gxm)[2] = (((coords[1]))*(((sctx
->grad + 3*(1+2*siy))[2]) - ((sctx->grad + 3*(1+2*si))[
2])) + ((sctx->grad + 3*(1+2*si))[2])))
;
678 ELL_3M_LERP(Txp, coords[1], sctx->t + 9*(1+2*six), sctx->t + 9*(1+2*sixy))((((Txp)+0)[0] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy
))+0)[0]) - (((sctx->t + 9*(1+2*six))+0)[0])) + (((sctx->
t + 9*(1+2*six))+0)[0])), ((Txp)+0)[1] = ((((coords[1])))*(((
(sctx->t + 9*(1+2*sixy))+0)[1]) - (((sctx->t + 9*(1+2*six
))+0)[1])) + (((sctx->t + 9*(1+2*six))+0)[1])), ((Txp)+0)[
2] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy))+0)[2]) -
(((sctx->t + 9*(1+2*six))+0)[2])) + (((sctx->t + 9*(1+
2*six))+0)[2]))), (((Txp)+3)[0] = ((((coords[1])))*((((sctx->
t + 9*(1+2*sixy))+3)[0]) - (((sctx->t + 9*(1+2*six))+3)[0]
)) + (((sctx->t + 9*(1+2*six))+3)[0])), ((Txp)+3)[1] = (((
(coords[1])))*((((sctx->t + 9*(1+2*sixy))+3)[1]) - (((sctx
->t + 9*(1+2*six))+3)[1])) + (((sctx->t + 9*(1+2*six))+
3)[1])), ((Txp)+3)[2] = ((((coords[1])))*((((sctx->t + 9*(
1+2*sixy))+3)[2]) - (((sctx->t + 9*(1+2*six))+3)[2])) + ((
(sctx->t + 9*(1+2*six))+3)[2]))), (((Txp)+6)[0] = ((((coords
[1])))*((((sctx->t + 9*(1+2*sixy))+6)[0]) - (((sctx->t +
9*(1+2*six))+6)[0])) + (((sctx->t + 9*(1+2*six))+6)[0])),
((Txp)+6)[1] = ((((coords[1])))*((((sctx->t + 9*(1+2*sixy
))+6)[1]) - (((sctx->t + 9*(1+2*six))+6)[1])) + (((sctx->
t + 9*(1+2*six))+6)[1])), ((Txp)+6)[2] = ((((coords[1])))*(((
(sctx->t + 9*(1+2*sixy))+6)[2]) - (((sctx->t + 9*(1+2*six
))+6)[2])) + (((sctx->t + 9*(1+2*six))+6)[2]))))
;
679 ELL_3V_LERP(gxp, coords[1], sctx->grad + 3*(1+2*six),((gxp)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*sixy))[0
]) - ((sctx->grad + 3*(1+2*six))[0])) + ((sctx->grad + 3
*(1+2*six))[0])), (gxp)[1] = (((coords[1]))*(((sctx->grad +
3*(1+2*sixy))[1]) - ((sctx->grad + 3*(1+2*six))[1])) + ((
sctx->grad + 3*(1+2*six))[1])), (gxp)[2] = (((coords[1]))*
(((sctx->grad + 3*(1+2*sixy))[2]) - ((sctx->grad + 3*(1
+2*six))[2])) + ((sctx->grad + 3*(1+2*six))[2])))
680 sctx->grad + 3*(1+2*sixy))((gxp)[0] = (((coords[1]))*(((sctx->grad + 3*(1+2*sixy))[0
]) - ((sctx->grad + 3*(1+2*six))[0])) + ((sctx->grad + 3
*(1+2*six))[0])), (gxp)[1] = (((coords[1]))*(((sctx->grad +
3*(1+2*sixy))[1]) - ((sctx->grad + 3*(1+2*six))[1])) + ((
sctx->grad + 3*(1+2*six))[1])), (gxp)[2] = (((coords[1]))*
(((sctx->grad + 3*(1+2*sixy))[2]) - ((sctx->grad + 3*(1
+2*six))[2])) + ((sctx->grad + 3*(1+2*six))[2])))
;
681
682 ELL_3M_LERP(Tym, coords[0], sctx->t + 9*(1+2*si), sctx->t + 9*(1+2*six))((((Tym)+0)[0] = ((((coords[0])))*((((sctx->t + 9*(1+2*six
))+0)[0]) - (((sctx->t + 9*(1+2*si))+0)[0])) + (((sctx->
t + 9*(1+2*si))+0)[0])), ((Tym)+0)[1] = ((((coords[0])))*((((
sctx->t + 9*(1+2*six))+0)[1]) - (((sctx->t + 9*(1+2*si)
)+0)[1])) + (((sctx->t + 9*(1+2*si))+0)[1])), ((Tym)+0)[2]
= ((((coords[0])))*((((sctx->t + 9*(1+2*six))+0)[2]) - ((
(sctx->t + 9*(1+2*si))+0)[2])) + (((sctx->t + 9*(1+2*si
))+0)[2]))), (((Tym)+3)[0] = ((((coords[0])))*((((sctx->t +
9*(1+2*six))+3)[0]) - (((sctx->t + 9*(1+2*si))+3)[0])) + (
((sctx->t + 9*(1+2*si))+3)[0])), ((Tym)+3)[1] = ((((coords
[0])))*((((sctx->t + 9*(1+2*six))+3)[1]) - (((sctx->t +
9*(1+2*si))+3)[1])) + (((sctx->t + 9*(1+2*si))+3)[1])), (
(Tym)+3)[2] = ((((coords[0])))*((((sctx->t + 9*(1+2*six))+
3)[2]) - (((sctx->t + 9*(1+2*si))+3)[2])) + (((sctx->t +
9*(1+2*si))+3)[2]))), (((Tym)+6)[0] = ((((coords[0])))*((((sctx
->t + 9*(1+2*six))+6)[0]) - (((sctx->t + 9*(1+2*si))+6)
[0])) + (((sctx->t + 9*(1+2*si))+6)[0])), ((Tym)+6)[1] = (
(((coords[0])))*((((sctx->t + 9*(1+2*six))+6)[1]) - (((sctx
->t + 9*(1+2*si))+6)[1])) + (((sctx->t + 9*(1+2*si))+6)
[1])), ((Tym)+6)[2] = ((((coords[0])))*((((sctx->t + 9*(1+
2*six))+6)[2]) - (((sctx->t + 9*(1+2*si))+6)[2])) + (((sctx
->t + 9*(1+2*si))+6)[2]))))
;
683 ELL_3V_LERP(gym, coords[0], sctx->grad + 3*(1+2*si),((gym)[0] = (((coords[0]))*(((sctx->grad + 3*(1+2*six))[0]
) - ((sctx->grad + 3*(1+2*si))[0])) + ((sctx->grad + 3*
(1+2*si))[0])), (gym)[1] = (((coords[0]))*(((sctx->grad + 3
*(1+2*six))[1]) - ((sctx->grad + 3*(1+2*si))[1])) + ((sctx
->grad + 3*(1+2*si))[1])), (gym)[2] = (((coords[0]))*(((sctx
->grad + 3*(1+2*six))[2]) - ((sctx->grad + 3*(1+2*si))[
2])) + ((sctx->grad + 3*(1+2*si))[2])))
684 sctx->grad + 3*(1+2*six))((gym)[0] = (((coords[0]))*(((sctx->grad + 3*(1+2*six))[0]
) - ((sctx->grad + 3*(1+2*si))[0])) + ((sctx->grad + 3*
(1+2*si))[0])), (gym)[1] = (((coords[0]))*(((sctx->grad + 3
*(1+2*six))[1]) - ((sctx->grad + 3*(1+2*si))[1])) + ((sctx
->grad + 3*(1+2*si))[1])), (gym)[2] = (((coords[0]))*(((sctx
->grad + 3*(1+2*six))[2]) - ((sctx->grad + 3*(1+2*si))[
2])) + ((sctx->grad + 3*(1+2*si))[2])))
;
685 ELL_3M_LERP(Typ, coords[0], sctx->t + 9*(1+2*siy), sctx->t + 9*(1+2*sixy))((((Typ)+0)[0] = ((((coords[0])))*((((sctx->t + 9*(1+2*sixy
))+0)[0]) - (((sctx->t + 9*(1+2*siy))+0)[0])) + (((sctx->
t + 9*(1+2*siy))+0)[0])), ((Typ)+0)[1] = ((((coords[0])))*(((
(sctx->t + 9*(1+2*sixy))+0)[1]) - (((sctx->t + 9*(1+2*siy
))+0)[1])) + (((sctx->t + 9*(1+2*siy))+0)[1])), ((Typ)+0)[
2] = ((((coords[0])))*((((sctx->t + 9*(1+2*sixy))+0)[2]) -
(((sctx->t + 9*(1+2*siy))+0)[2])) + (((sctx->t + 9*(1+
2*siy))+0)[2]))), (((Typ)+3)[0] = ((((coords[0])))*((((sctx->
t + 9*(1+2*sixy))+3)[0]) - (((sctx->t + 9*(1+2*siy))+3)[0]
)) + (((sctx->t + 9*(1+2*siy))+3)[0])), ((Typ)+3)[1] = (((
(coords[0])))*((((sctx->t + 9*(1+2*sixy))+3)[1]) - (((sctx
->t + 9*(1+2*siy))+3)[1])) + (((sctx->t + 9*(1+2*siy))+
3)[1])), ((Typ)+3)[2] = ((((coords[0])))*((((sctx->t + 9*(
1+2*sixy))+3)[2]) - (((sctx->t + 9*(1+2*siy))+3)[2])) + ((
(sctx->t + 9*(1+2*siy))+3)[2]))), (((Typ)+6)[0] = ((((coords
[0])))*((((sctx->t + 9*(1+2*sixy))+6)[0]) - (((sctx->t +
9*(1+2*siy))+6)[0])) + (((sctx->t + 9*(1+2*siy))+6)[0])),
((Typ)+6)[1] = ((((coords[0])))*((((sctx->t + 9*(1+2*sixy
))+6)[1]) - (((sctx->t + 9*(1+2*siy))+6)[1])) + (((sctx->
t + 9*(1+2*siy))+6)[1])), ((Typ)+6)[2] = ((((coords[0])))*(((
(sctx->t + 9*(1+2*sixy))+6)[2]) - (((sctx->t + 9*(1+2*siy
))+6)[2])) + (((sctx->t + 9*(1+2*siy))+6)[2]))))
;
686 ELL_3V_LERP(gyp, coords[0], sctx->grad + 3*(1+2*siy),((gyp)[0] = (((coords[0]))*(((sctx->grad + 3*(1+2*sixy))[0
]) - ((sctx->grad + 3*(1+2*siy))[0])) + ((sctx->grad + 3
*(1+2*siy))[0])), (gyp)[1] = (((coords[0]))*(((sctx->grad +
3*(1+2*sixy))[1]) - ((sctx->grad + 3*(1+2*siy))[1])) + ((
sctx->grad + 3*(1+2*siy))[1])), (gyp)[2] = (((coords[0]))*
(((sctx->grad + 3*(1+2*sixy))[2]) - ((sctx->grad + 3*(1
+2*siy))[2])) + ((sctx->grad + 3*(1+2*siy))[2])))
687 sctx->grad + 3*(1+2*sixy))((gyp)[0] = (((coords[0]))*(((sctx->grad + 3*(1+2*sixy))[0
]) - ((sctx->grad + 3*(1+2*siy))[0])) + ((sctx->grad + 3
*(1+2*siy))[0])), (gyp)[1] = (((coords[0]))*(((sctx->grad +
3*(1+2*sixy))[1]) - ((sctx->grad + 3*(1+2*siy))[1])) + ((
sctx->grad + 3*(1+2*siy))[1])), (gyp)[2] = (((coords[0]))*
(((sctx->grad + 3*(1+2*sixy))[2]) - ((sctx->grad + 3*(1
+2*siy))[2])) + ((sctx->grad + 3*(1+2*siy))[2])))
;
688
689 ELL_3M_LERP(T, coords[0], Txm, Txp)((((T)+0)[0] = ((((coords[0])))*((((Txp)+0)[0]) - (((Txm)+0)[
0])) + (((Txm)+0)[0])), ((T)+0)[1] = ((((coords[0])))*((((Txp
)+0)[1]) - (((Txm)+0)[1])) + (((Txm)+0)[1])), ((T)+0)[2] = ((
((coords[0])))*((((Txp)+0)[2]) - (((Txm)+0)[2])) + (((Txm)+0)
[2]))), (((T)+3)[0] = ((((coords[0])))*((((Txp)+3)[0]) - (((Txm
)+3)[0])) + (((Txm)+3)[0])), ((T)+3)[1] = ((((coords[0])))*((
((Txp)+3)[1]) - (((Txm)+3)[1])) + (((Txm)+3)[1])), ((T)+3)[2]
= ((((coords[0])))*((((Txp)+3)[2]) - (((Txm)+3)[2])) + (((Txm
)+3)[2]))), (((T)+6)[0] = ((((coords[0])))*((((Txp)+6)[0]) - (
((Txm)+6)[0])) + (((Txm)+6)[0])), ((T)+6)[1] = ((((coords[0])
))*((((Txp)+6)[1]) - (((Txm)+6)[1])) + (((Txm)+6)[1])), ((T)+
6)[2] = ((((coords[0])))*((((Txp)+6)[2]) - (((Txm)+6)[2])) + (
((Txm)+6)[2]))))
;
690 ELL_3V_LERP(g, coords[0], gxm, gxp)((g)[0] = (((coords[0]))*(((gxp)[0]) - ((gxm)[0])) + ((gxm)[0
])), (g)[1] = (((coords[0]))*(((gxp)[1]) - ((gxm)[1])) + ((gxm
)[1])), (g)[2] = (((coords[0]))*(((gxp)[2]) - ((gxm)[2])) + (
(gxm)[2])))
;
691
692 computeGradientLin(sctx->facenorm+3*(faceid+4*si), T, g,
693 Txm, gxm, Txp, gxp,
694 Tym, gym, Typ, gyp,
695 Tzm, gzm, T, g);
696 break;
697 }
698 ELL_3V_COPY(res, sctx->facenorm+3*(faceid+4*si))((res)[0] = (sctx->facenorm+3*(faceid+4*si))[0], (res)[1] =
(sctx->facenorm+3*(faceid+4*si))[1], (res)[2] = (sctx->
facenorm+3*(faceid+4*si))[2])
;
699}
700
701/* small helper routines: intersection tests */
702
703/* check if a given 2D triangle is oriented clockwise (-1)
704 * or counter-clockwise (1).
705 * returns 0 if given points are collinear */
706static int
707checkTriOrientation (double *p1, double *p2, double *p3) {
708 double test = (((p2[0]-p1[0])*(p3[1]-p1[1])) - ((p3[0]-p1[0])*(p2[1]-p1[1])));
709 if (test > 0) return 1;
710 else if (test < 0) return -1;
711 else return 0;
712}
713
714/* check if two given 2D lines intersect */
715static int
716lineIntersectionTest (double *l1p1, double *l1p2, double *l2p1, double *l2p2) {
717 int or1 = checkTriOrientation(l1p1, l1p2, l2p1);
718 int or2 = checkTriOrientation(l1p1, l1p2, l2p2);
719 if (or1 != or2) {
720 or1 = checkTriOrientation(l2p1, l2p2, l1p1);
721 or2 = checkTriOrientation(l2p1, l2p2, l1p2);
722 if (or1 != or2)
723 return 1;
724 }
725 return 0;
726}
727
728/* check if two given 3D triangles intersect */
729static int
730triIntersectionTest (double *t1v1, double *t1v2, double *t1v3,
731 double *t2v1, double *t2v2, double *t2v3) {
732 double n1[3], n2[3], d1, d2;
733 double diff1[3], diff2[3];
734 double t2sd1, t2sd2, t2sd3;
735 ELL_3V_SUB(diff1, t1v2, t1v1)((diff1)[0] = (t1v2)[0] - (t1v1)[0], (diff1)[1] = (t1v2)[1] -
(t1v1)[1], (diff1)[2] = (t1v2)[2] - (t1v1)[2])
;
736 ELL_3V_SUB(diff2, t1v3, t1v1)((diff2)[0] = (t1v3)[0] - (t1v1)[0], (diff2)[1] = (t1v3)[1] -
(t1v1)[1], (diff2)[2] = (t1v3)[2] - (t1v1)[2])
;
737 ELL_3V_CROSS(n1,diff1,diff2)((n1)[0] = (diff1)[1]*(diff2)[2] - (diff1)[2]*(diff2)[1], (n1
)[1] = (diff1)[2]*(diff2)[0] - (diff1)[0]*(diff2)[2], (n1)[2]
= (diff1)[0]*(diff2)[1] - (diff1)[1]*(diff2)[0])
;
738 d1=-ELL_3V_DOT(n1,t1v1)((n1)[0]*(t1v1)[0] + (n1)[1]*(t1v1)[1] + (n1)[2]*(t1v1)[2]);
739
740 /* compute scaled signed distances of t2 to plane of t1 */
741 t2sd1 = ELL_3V_DOT(n1, t2v1)((n1)[0]*(t2v1)[0] + (n1)[1]*(t2v1)[1] + (n1)[2]*(t2v1)[2])+d1;
742 t2sd2 = ELL_3V_DOT(n1, t2v2)((n1)[0]*(t2v2)[0] + (n1)[1]*(t2v2)[1] + (n1)[2]*(t2v2)[2])+d1;
743 t2sd3 = ELL_3V_DOT(n1, t2v3)((n1)[0]*(t2v3)[0] + (n1)[1]*(t2v3)[1] + (n1)[2]*(t2v3)[2])+d1;
744
745 if (t2sd1==0 && t2sd2==0 && t2sd3==0) {
746 /* coplanar case: handle in 2D */
747 double t1v12d[2], t1v22d[2], t1v32d[2], t2v12d[2], t2v22d[2], t2v32d[2];
748 if (fabs(n1[0])>=fabs(n1[1]) && fabs(n1[0])>=fabs(n1[2])) {
749 t1v12d[0]=t1v1[1]; t1v12d[1]=t1v1[2];
750 t1v22d[0]=t1v2[1]; t1v22d[1]=t1v2[2];
751 t1v32d[0]=t1v3[1]; t1v32d[1]=t1v3[2];
752 t2v12d[0]=t2v1[1]; t2v12d[1]=t2v1[2];
753 t2v22d[0]=t2v2[1]; t2v22d[1]=t2v2[2];
754 t2v32d[0]=t2v3[1]; t2v32d[1]=t2v3[2];
755 } else if (fabs(n1[1])>=fabs(n1[0]) && fabs(n1[1])>=fabs(n1[2])) {
756 t1v12d[0]=t1v1[0]; t1v12d[1]=t1v1[2];
757 t1v22d[0]=t1v2[0]; t1v22d[1]=t1v2[2];
758 t1v32d[0]=t1v3[0]; t1v32d[1]=t1v3[2];
759 t2v12d[0]=t2v1[0]; t2v12d[1]=t2v1[2];
760 t2v22d[0]=t2v2[0]; t2v22d[1]=t2v2[2];
761 t2v32d[0]=t2v3[0]; t2v32d[1]=t2v3[2];
762 } else {
763 t1v12d[0]=t1v1[0]; t1v12d[1]=t1v1[1];
764 t1v22d[0]=t1v2[0]; t1v22d[1]=t1v2[1];
765 t1v32d[0]=t1v3[0]; t1v32d[1]=t1v3[1];
766 t2v12d[0]=t2v1[0]; t2v12d[1]=t2v1[1];
767 t2v22d[0]=t2v2[0]; t2v22d[1]=t2v2[1];
768 t2v32d[0]=t2v3[0]; t2v32d[1]=t2v3[1];
769 }
770 /* we may assume that none of the triangles is fully contained
771 * within the other. Thus, it suffices to do a lot of 2D line-line
772 * intersections */
773 if (lineIntersectionTest(t1v12d, t1v22d, t2v12d, t2v22d) ||
774 lineIntersectionTest(t1v22d, t1v32d, t2v12d, t2v22d) ||
775 lineIntersectionTest(t1v32d, t1v12d, t2v12d, t2v22d) ||
776 lineIntersectionTest(t1v12d, t1v22d, t2v22d, t2v32d) ||
777 lineIntersectionTest(t1v22d, t1v32d, t2v22d, t2v32d) ||
778 lineIntersectionTest(t1v32d, t1v12d, t2v22d, t2v32d) ||
779 lineIntersectionTest(t1v12d, t1v22d, t2v32d, t2v12d) ||
780 lineIntersectionTest(t1v22d, t1v32d, t2v32d, t2v12d) ||
781 lineIntersectionTest(t1v32d, t1v12d, t2v32d, t2v12d))
782 return 1;
783 return 0;
784 } else {
785 /* pointers to the vertices on the same side / opposite side of plane */
786 double *t2s11, *t2s12, *t2s2, t2s11sd, t2s12sd, t2s2sd;
787 double t1sd1, t1sd2, t1sd3;
788 double *t1s11, *t1s12, *t1s2, t1s11sd, t1s12sd, t1s2sd;
789 double t1p11, t1p12, t1p2, t2p11, t2p12, t2p2;
790 double D[3]; /* direction vector of line */
791 double t1t1, t1t2, t2t1, t2t2;
792 if (t2sd1*t2sd2>=0 && t2sd1*t2sd3<=0) {
793 t2s11=t2v1; t2s12=t2v2; t2s2=t2v3; t2s11sd=t2sd1;
794 t2s12sd=t2sd2; t2s2sd=t2sd3;
795 } else if (t2sd1*t2sd3>=0 && t2sd1*t2sd2<=0) {
796 t2s11=t2v1; t2s12=t2v3; t2s2=t2v2; t2s11sd=t2sd1;
797 t2s12sd=t2sd3; t2s2sd=t2sd2;
798 } else if (t2sd2*t2sd3>=0 && t2sd1*t2sd2<=0) {
799 t2s11=t2v2; t2s12=t2v3; t2s2=t2v1; t2s11sd=t2sd2;
800 t2s12sd=t2sd3; t2s2sd=t2sd1;
801 } else
802 return 0; /* all on the same side; no intersection */
803
804 /* same game for triangle 2 */
805 ELL_3V_SUB(diff1, t2v2, t2v1)((diff1)[0] = (t2v2)[0] - (t2v1)[0], (diff1)[1] = (t2v2)[1] -
(t2v1)[1], (diff1)[2] = (t2v2)[2] - (t2v1)[2])
;
806 ELL_3V_SUB(diff2, t2v3, t2v1)((diff2)[0] = (t2v3)[0] - (t2v1)[0], (diff2)[1] = (t2v3)[1] -
(t2v1)[1], (diff2)[2] = (t2v3)[2] - (t2v1)[2])
;
807 ELL_3V_CROSS(n2, diff1, diff2)((n2)[0] = (diff1)[1]*(diff2)[2] - (diff1)[2]*(diff2)[1], (n2
)[1] = (diff1)[2]*(diff2)[0] - (diff1)[0]*(diff2)[2], (n2)[2]
= (diff1)[0]*(diff2)[1] - (diff1)[1]*(diff2)[0])
;
808 d2=-ELL_3V_DOT(n2,t2v1)((n2)[0]*(t2v1)[0] + (n2)[1]*(t2v1)[1] + (n2)[2]*(t2v1)[2]);
809 t1sd1 = ELL_3V_DOT(n2, t1v1)((n2)[0]*(t1v1)[0] + (n2)[1]*(t1v1)[1] + (n2)[2]*(t1v1)[2])+d2;
810 t1sd2 = ELL_3V_DOT(n2, t1v2)((n2)[0]*(t1v2)[0] + (n2)[1]*(t1v2)[1] + (n2)[2]*(t1v2)[2])+d2;
811 t1sd3 = ELL_3V_DOT(n2, t1v3)((n2)[0]*(t1v3)[0] + (n2)[1]*(t1v3)[1] + (n2)[2]*(t1v3)[2])+d2;
812 if (t1sd1*t1sd2>=0 && t1sd1*t1sd3<=0) {
813 t1s11=t1v1; t1s12=t1v2; t1s2=t1v3; t1s11sd=t1sd1;
814 t1s12sd=t1sd2; t1s2sd=t1sd3;
815 } else if (t1sd1*t1sd3>=0 && t1sd1*t1sd2<=0) {
816 t1s11=t1v1; t1s12=t1v3; t1s2=t1v2; t1s11sd=t1sd1;
817 t1s12sd=t1sd3; t1s2sd=t1sd2;
818 } else if (t1sd2*t1sd3>=0 && t1sd1*t1sd2<=0) {
819 t1s11=t1v2; t1s12=t1v3; t1s2=t1v1; t1s11sd=t1sd2;
820 t1s12sd=t1sd3; t1s2sd=t1sd1;
821 } else
822 return 0; /* all on the same side; no intersection */
823
824 /* both planes intersect in a line; check if the intervals on that
825 * line intersect */
826 ELL_3V_CROSS(D,n1,n2)((D)[0] = (n1)[1]*(n2)[2] - (n1)[2]*(n2)[1], (D)[1] = (n1)[2]
*(n2)[0] - (n1)[0]*(n2)[2], (D)[2] = (n1)[0]*(n2)[1] - (n1)[1
]*(n2)[0])
;
827 /* we are only interested in component magnitudes */
828 D[0]=fabs(D[0]); D[1]=fabs(D[1]); D[2]=fabs(D[2]);
829 if (D[0]>=D[1] && D[0]>=D[2]) {
830 t1p11=t1s11[0]; t1p12=t1s12[0]; t1p2=t1s2[0];
831 t2p11=t2s11[0]; t2p12=t2s12[0]; t2p2=t2s2[0];
832 } else if (D[1]>=D[0] && D[1]>=D[2]) {
833 t1p11=t1s11[1]; t1p12=t1s12[1]; t1p2=t1s2[1];
834 t2p11=t2s11[1]; t2p12=t2s12[1]; t2p2=t2s2[1];
835 } else {
836 t1p11=t1s11[2]; t1p12=t1s12[2]; t1p2=t1s2[2];
837 t2p11=t2s11[2]; t2p12=t2s12[2]; t2p2=t2s2[2];
838 }
839 /* compute interval boundaries */
840 t1t1=t1p11+(t1p2-t1p11)*t1s11sd/(t1s11sd-t1s2sd);
841 t1t2=t1p12+(t1p2-t1p12)*t1s12sd/(t1s12sd-t1s2sd);
842 if (t1t1>t1t2) {
843 double help=t1t1;
844 t1t1=t1t2;
845 t1t2=help;
846 }
847 t2t1=t2p11+(t2p2-t2p11)*t2s11sd/(t2s11sd-t2s2sd);
848 t2t2=t2p12+(t2p2-t2p12)*t2s12sd/(t2s12sd-t2s2sd);
849 if (t2t1>t2t2) {
850 double help=t2t1;
851 t2t1=t2t2;
852 t2t2=help;
853 }
854 /* test for interval intersection */
855 if (t2t1>t1t2 || t1t1>t2t2) return 0;
856 return 1;
857 }
858}
859
860/* Score possible local topologies based on the agreement of
861 * connecting lines with normal directions. Lower scores are
862 * better. */
863
864/* Connections between degenerate points on cell faces; if only four
865 * degenerate points are present, set p31 to NULL */
866static double
867evaluateDegConnection(double *p11, double *p12, double *p13, double *p14,
868 double *p21, double *p22, double *p23, double *p24,
869 double *p31, double *p32, double *p33, double *p34,
870 double *n12, double *n13, double *n22, double *n23,
871 double *n32, double *n33) {
872 double diff1[3], diff2[3], diff3[3], ret;
873 /* first, perform intersection testing */
874 if (triIntersectionTest(p11, p12, p13, p21, p22, p23) ||
875 triIntersectionTest(p13, p14, p11, p21, p22, p23) ||
876 triIntersectionTest(p11, p12, p13, p23, p24, p21) ||
877 triIntersectionTest(p13, p14, p11, p23, p24, p21))
878 return 1e20;
879 if (p31 != NULL((void*)0)) { /* three pairs - some more to do */
880 if (triIntersectionTest(p11, p12, p13, p31, p32, p33) ||
881 triIntersectionTest(p11, p12, p13, p33, p34, p31) ||
882 triIntersectionTest(p13, p14, p11, p31, p32, p33) ||
883 triIntersectionTest(p13, p14, p11, p33, p34, p31) ||
884 triIntersectionTest(p21, p22, p23, p31, p32, p33) ||
885 triIntersectionTest(p21, p22, p23, p33, p34, p31) ||
886 triIntersectionTest(p23, p24, p21, p31, p32, p33) ||
887 triIntersectionTest(p23, p24, p21, p33, p34, p31))
888 return 1e20;
889 }
890 ELL_3V_SUB(diff1,p13,p12)((diff1)[0] = (p13)[0] - (p12)[0], (diff1)[1] = (p13)[1] - (p12
)[1], (diff1)[2] = (p13)[2] - (p12)[2])
;
891 ELL_3V_SUB(diff2,p23,p22)((diff2)[0] = (p23)[0] - (p22)[0], (diff2)[1] = (p23)[1] - (p22
)[1], (diff2)[2] = (p23)[2] - (p22)[2])
;
892 ret=fabs(ELL_3V_DOT(diff1,n12)((diff1)[0]*(n12)[0] + (diff1)[1]*(n12)[1] + (diff1)[2]*(n12)
[2])
)+fabs(ELL_3V_DOT(diff1,n13)((diff1)[0]*(n13)[0] + (diff1)[1]*(n13)[1] + (diff1)[2]*(n13)
[2])
)+
893 fabs(ELL_3V_DOT(diff2,n22)((diff2)[0]*(n22)[0] + (diff2)[1]*(n22)[1] + (diff2)[2]*(n22)
[2])
)+fabs(ELL_3V_DOT(diff2,n23)((diff2)[0]*(n23)[0] + (diff2)[1]*(n23)[1] + (diff2)[2]*(n23)
[2])
);
894 if (p31 != NULL((void*)0)) {
895 ELL_3V_SUB(diff3,p33,p32)((diff3)[0] = (p33)[0] - (p32)[0], (diff3)[1] = (p33)[1] - (p32
)[1], (diff3)[2] = (p33)[2] - (p32)[2])
;
896 ret+=fabs(ELL_3V_DOT(diff3,n32)((diff3)[0]*(n32)[0] + (diff3)[1]*(n32)[1] + (diff3)[2]*(n32)
[2])
)+fabs(ELL_3V_DOT(diff3,n33)((diff3)[0]*(n33)[0] + (diff3)[1]*(n33)[1] + (diff3)[2]*(n33)
[2])
);
897 }
898 return ret;
899}
900
901/* suggests a connectivity for a non-trivial combination of
902 * intersection points in the plane.
903 * pairs is output (permutation of idcs)
904 * bestval is input/output (best value so far, start with something big)
905 * ct is the number of points (currently assumed even)
906 * idcs is input (idcs that still need to be permuted)
907 * fixedct is input (number of idcs that are already fixed at this depth)
908 * coords is an array of 2D coordinates
909 * norms is an array of 2D vectors */
910static void
911findConnectivity(signed char *pairs, double *bestval, int ct, char *idcs,
912 int fixedct, double *coords, double *norms) {
913 int i,j;
914 if (fixedct==ct) {
915 double weight=0;
916 for (i=0; i<ct-1; i+=2) {
917 double diff[2];
918 ELL_2V_SUB(diff,coords+2*idcs[i],coords+2*idcs[i+1])((diff)[0] = (coords+2*idcs[i])[0] - (coords+2*idcs[i+1])[0],
(diff)[1] = (coords+2*idcs[i])[1] - (coords+2*idcs[i+1])[1])
;
919 weight+=fabs(ELL_2V_DOT(diff,norms+2*idcs[i])((diff)[0]*(norms+2*idcs[i])[0] + (diff)[1]*(norms+2*idcs[i])
[1])
)+
920 fabs(ELL_2V_DOT(diff,norms+2*idcs[i+1])((diff)[0]*(norms+2*idcs[i+1])[0] + (diff)[1]*(norms+2*idcs[i
+1])[1])
);
921 }
922 if (weight<*bestval) {
923 *bestval=weight;
924 memcpy(pairs,idcs,sizeof(char)*ct)__builtin___memcpy_chk (pairs, idcs, sizeof(char)*ct, __builtin_object_size
(pairs, 0))
;
925 }
926 return;
927 }
928 /* else: we need a recursion */
929 for (i=fixedct+1; i<ct; i++) {
930 int intersect=0;
931 char *idxnew;
932 if (NULL((void*)0) == (idxnew = (char*) malloc (sizeof(char)*ct)))
933 return;
934 memcpy(idxnew,idcs,sizeof(char)*ct)__builtin___memcpy_chk (idxnew, idcs, sizeof(char)*ct, __builtin_object_size
(idxnew, 0))
;
935 /* try any of the remaining indices as a pair */
936 idxnew[fixedct+1]=idcs[i];
937 idxnew[i]=idcs[fixedct+1];
938 /* check if the resulting line causes an intersection */
939 for (j=0;j<fixedct;j+=2) {
940 if (lineIntersectionTest(coords+2*idxnew[fixedct],
941 coords+2*idxnew[fixedct+1],
942 coords+2*idxnew[j],coords+2*idxnew[j+1])) {
943 intersect=1;
944 break;
945 }
946 }
947 if (!intersect) {
948 findConnectivity(pairs, bestval, ct, idxnew, fixedct+2, coords, norms);
949 }
950 free(idxnew);
951 }
952}
953
954#define _SEEK_TREATED_REQUEST0x01 0x01 /* this voxel has to be treated */
955#define _SEEK_TREATED_EDGE00x02 0x02 /* unique edge 0 has been treated */
956#define _SEEK_TREATED_EDGE10x04 0x04 /* unique edge 1 has been treated */
957#define _SEEK_TREATED_EDGE20x08 0x08 /* unique edge 2 has been treated */
958#define _SEEK_TREATED_EDGE30x10 0x10 /* unique edge 3 has been treated */
959#define _SEEK_TREATED_EDGE40x20 0x20 /* unique edge 4 has been treated */
960#define _SEEK_TREATED_FACE30x40 0x40 /* unique face 3 has been treated */
961
962/* find deg. points, normals, and connectivity on a given (unique) face
963 * now refines the search if it couldn't find a degenerate point */
964static void
965connectFace(seekContext *sctx, baggage *bag,
966 unsigned int xi, unsigned int yi, unsigned char faceid) {
967 int edgeid[4][4]={{0, 2, 3, 1}, /* which edges belong to which unique face? */
968 {0, 5, 8, 4},
969 {1, 6, 9, 4},
970 {8,10,11, 9}};
971 unsigned int sx = AIR_CAST(unsigned int, sctx->sx)((unsigned int)(sctx->sx));
972 unsigned int si = xi + sx*yi;
973 unsigned int six = xi + 1 + sx*yi;
974 unsigned int siy = xi + sx*(yi+1);
975 unsigned int sixy = xi + 1 + sx*(yi+1);
976 char inter[12]; /* indices of intersections */
977 int pass; /* allow multiple refined passes */
978 int i;
979 /* voxel in which treated information is stored for local edge i */
980 /* which vertices form which unique face? */
981 int verti[4][4];
982 int voxel[4][4];
983 /* mask for treated information in the above voxel */
984 char mask[4][4]={{_SEEK_TREATED_EDGE00x02, _SEEK_TREATED_EDGE10x04,
985 _SEEK_TREATED_EDGE00x02, _SEEK_TREATED_EDGE10x04},
986 {_SEEK_TREATED_EDGE00x02, _SEEK_TREATED_EDGE20x08,
987 _SEEK_TREATED_EDGE30x10, _SEEK_TREATED_EDGE20x08},
988 {_SEEK_TREATED_EDGE10x04, _SEEK_TREATED_EDGE20x08,
989 _SEEK_TREATED_EDGE40x20, _SEEK_TREATED_EDGE20x08},
990 {_SEEK_TREATED_EDGE30x10, _SEEK_TREATED_EDGE40x20,
991 _SEEK_TREATED_EDGE30x10, _SEEK_TREATED_EDGE40x20}};
992 /* start- and endpoints of the edges */
993 int verts[4][4], verte[4][4];
994 char treat[4]={0,0,0,0};
995 double dpthresh[3]={0.7,0.8,0.9};
996 /* candidates for degenerate points */
997 double candidates[18]={0.5,0.5, 0.25,0.25, 0.25,0.75,
998 0.75,0.25, 0.75,0.75, 0.5,0.25,
999 0.25,0.5, 0.75,0.5, 0.6,0.75};
1000 int cand_idx[4]={0, 1, 5, 9};
1001 int interct;
1002
1003 /* apparently, some C compilers cannot make these initializations in-place */
1004 ELL_4V_SET(verti[0], 0+2*si, 0+2*six, 0+2*siy, 0+2*sixy)((verti[0])[0] = (0+2*si), (verti[0])[1] = (0+2*six), (verti[
0])[2] = (0+2*siy), (verti[0])[3] = (0+2*sixy))
;
1005 ELL_4V_SET(verti[1], 0+2*si, 0+2*six, 1+2*si, 1+2*six)((verti[1])[0] = (0+2*si), (verti[1])[1] = (0+2*six), (verti[
1])[2] = (1+2*si), (verti[1])[3] = (1+2*six))
;
1006 ELL_4V_SET(verti[2], 0+2*si, 0+2*siy, 1+2*si, 1+2*siy)((verti[2])[0] = (0+2*si), (verti[2])[1] = (0+2*siy), (verti[
2])[2] = (1+2*si), (verti[2])[3] = (1+2*siy))
;
1007 ELL_4V_SET(verti[3], 1+2*si, 1+2*six, 1+2*siy, 1+2*sixy)((verti[3])[0] = (1+2*si), (verti[3])[1] = (1+2*six), (verti[
3])[2] = (1+2*siy), (verti[3])[3] = (1+2*sixy))
;
1008 ELL_4V_SET(voxel[0], si, six, siy, si)((voxel[0])[0] = (si), (voxel[0])[1] = (six), (voxel[0])[2] =
(siy), (voxel[0])[3] = (si))
;
1009 ELL_4V_SET(voxel[1], si, six, si, si)((voxel[1])[0] = (si), (voxel[1])[1] = (six), (voxel[1])[2] =
(si), (voxel[1])[3] = (si))
;
1010 ELL_4V_SET(voxel[2], si, siy, si, si)((voxel[2])[0] = (si), (voxel[2])[1] = (siy), (voxel[2])[2] =
(si), (voxel[2])[3] = (si))
;
1011 ELL_4V_SET(voxel[3], si, six, siy, si)((voxel[3])[0] = (si), (voxel[3])[1] = (six), (voxel[3])[2] =
(siy), (voxel[3])[3] = (si))
;
1012 ELL_4V_SET(verts[0], 0+2*si, 0+2*six, 0+2*siy, 0+2*si)((verts[0])[0] = (0+2*si), (verts[0])[1] = (0+2*six), (verts[
0])[2] = (0+2*siy), (verts[0])[3] = (0+2*si))
;
1013 ELL_4V_SET(verts[1], 0+2*si, 0+2*six, 1+2*si, 0+2*si)((verts[1])[0] = (0+2*si), (verts[1])[1] = (0+2*six), (verts[
1])[2] = (1+2*si), (verts[1])[3] = (0+2*si))
;
1014 ELL_4V_SET(verts[2], 0+2*si, 0+2*siy, 1+2*si, 0+2*si)((verts[2])[0] = (0+2*si), (verts[2])[1] = (0+2*siy), (verts[
2])[2] = (1+2*si), (verts[2])[3] = (0+2*si))
;
1015 ELL_4V_SET(verts[3], 1+2*si, 1+2*six, 1+2*siy, 1+2*si)((verts[3])[0] = (1+2*si), (verts[3])[1] = (1+2*six), (verts[
3])[2] = (1+2*siy), (verts[3])[3] = (1+2*si))
;
1016 ELL_4V_SET(verte[0], 0+2*six, 0+2*sixy, 0+2*sixy, 0+2*siy)((verte[0])[0] = (0+2*six), (verte[0])[1] = (0+2*sixy), (verte
[0])[2] = (0+2*sixy), (verte[0])[3] = (0+2*siy))
;
1017 ELL_4V_SET(verte[1], 0+2*six, 1+2*six, 1+2*six, 1+2*si)((verte[1])[0] = (0+2*six), (verte[1])[1] = (1+2*six), (verte
[1])[2] = (1+2*six), (verte[1])[3] = (1+2*si))
;
1018 ELL_4V_SET(verte[2], 0+2*siy, 1+2*siy, 1+2*siy, 1+2*si)((verte[2])[0] = (0+2*siy), (verte[2])[1] = (1+2*siy), (verte
[2])[2] = (1+2*siy), (verte[2])[3] = (1+2*si))
;
1019 ELL_4V_SET(verte[3], 1+2*six, 1+2*sixy, 1+2*sixy, 1+2*siy)((verte[3])[0] = (1+2*six), (verte[3])[1] = (1+2*sixy), (verte
[3])[2] = (1+2*sixy), (verte[3])[3] = (1+2*siy))
;
1020
1021 /* find out which edges have not yet been treated */
1022 for (i=0; i<4; i++) {
1023 if (!(sctx->treated[voxel[faceid][i]]&mask[faceid][i])) {
1024 treat[i]=1; /* we need to treat this */
1025 sctx->treated[voxel[faceid][i]] |= mask[faceid][i];
1026 }
1027 }
1028
1029 for (pass=0; pass<3; pass++) {
1030 /* first, find intersections for edges that need treatment */
1031 int j;
1032 for (j=0; j<4; j++) {
1033 double interpos[8];
1034 if (!treat[j]) continue;
1035 interct=findFeatureIntersection(interpos,
1036 sctx->t + 9*verts[faceid][j],
1037 sctx->hess + 9*verts[faceid][j],
1038 sctx->grad + 3*verts[faceid][j],
1039 sctx->t + 9*verte[faceid][j],
1040 sctx->hess + 9*verte[faceid][j],
1041 sctx->grad + 3*verte[faceid][j],
1042 0.0, 1.0, bag->esIdx==2,
1043 sctx->evalDiffThresh,
1044 dpthresh[pass]);
1045 if (interct>3) interct=3;
1046 for (i=0; i<interct; i++) {
1047 double x=0, y=0, z=0; unsigned int xb=0, yb=0, idb=0;
1048 sctx->edgealpha[3*(bag->evti[edgeid[faceid][j]]+5*si)+i] = interpos[i];
1049 switch (edgeid[faceid][j]) {
1050 case 0: x=xi+interpos[i]; y=yi; z=bag->zi;
1051 xb=xi; yb=yi; idb=0; break;
1052 case 1: x=xi; y=yi+interpos[i]; z=bag->zi;
1053 xb=xi; yb=yi; idb=1; break;
1054 case 2: x=xi+1; y=yi+interpos[i]; z=bag->zi;
1055 xb=xi+1; yb=yi; idb=1; break;
1056 case 3: x=xi+interpos[i]; y=yi+1; z=bag->zi;
1057 xb=xi; yb=yi+1; idb=0; break;
1058 case 4: x=xi; y=yi; z=bag->zi+interpos[i];
1059 xb=xi; yb=yi; idb=2; break;
1060 case 5: x=xi+1; y=yi; z=bag->zi+interpos[i];
1061 xb=xi+1; yb=yi; idb=2; break;
1062 case 6: x=xi; y=yi+1; z=bag->zi+interpos[i];
1063 xb=xi; yb=yi+1; idb=2; break;
1064 case 7: x=xi+1; y=yi+1; z=bag->zi+interpos[i];
1065 xb=xi+1; yb=yi+1; idb=2; break;
1066 case 8: x=xi+interpos[i]; y=yi; z=bag->zi+1;
1067 xb=xi; yb=yi; idb=3; break;
1068 case 9: x=xi; y=yi+interpos[i]; z=bag->zi+1;
1069 xb=xi; yb=yi; idb=4; break;
1070 case 10: x=xi+1; y=yi+interpos[i]; z=bag->zi+1;
1071 xb=xi+1; yb=yi; idb=4; break;
1072 case 11: x=xi+interpos[i]; y=yi+1; z=bag->zi+1;
1073 xb=xi; yb=yi+1; idb=3; break;
1074 }
1075 ELL_3V_SET(sctx->edgeicoord+9*(bag->evti[edgeid[faceid][j]]+5*si)+3*i,((sctx->edgeicoord+9*(bag->evti[edgeid[faceid][j]]+5*si
)+3*i)[0] = (x), (sctx->edgeicoord+9*(bag->evti[edgeid[
faceid][j]]+5*si)+3*i)[1] = (y), (sctx->edgeicoord+9*(bag->
evti[edgeid[faceid][j]]+5*si)+3*i)[2] = (z))
1076 x, y, z)((sctx->edgeicoord+9*(bag->evti[edgeid[faceid][j]]+5*si
)+3*i)[0] = (x), (sctx->edgeicoord+9*(bag->evti[edgeid[
faceid][j]]+5*si)+3*i)[1] = (y), (sctx->edgeicoord+9*(bag->
evti[edgeid[faceid][j]]+5*si)+3*i)[2] = (z))
;
1077 computeEdgeGradient(sctx, bag, sctx->edgenorm+
1078 9*(bag->evti[edgeid[faceid][j]]+5*si)+3*i,
1079 xb, yb, idb, interpos[i]);
1080 }
1081 }
1082
1083 interct=0; /* number of feature intersections */
1084 for (i=0; i<3; i++) {
1085 if (sctx->edgealpha[3*(bag->evti[edgeid[faceid][0]]+5*si)+i]>=0)
1086 inter[interct++]=i; /* numbering is local w.r.t. face */
1087 if (sctx->edgealpha[3*(bag->evti[edgeid[faceid][1]]+5*si)+i]>=0)
1088 inter[interct++]=3+i;
1089 if (sctx->edgealpha[3*(bag->evti[edgeid[faceid][2]]+5*si)+i]>=0)
1090 inter[interct++]=6+i;
1091 if (sctx->edgealpha[3*(bag->evti[edgeid[faceid][3]]+5*si)+i]>=0)
1092 inter[interct++]=9+i;
1093 }
1094 if (interct%2==1) { /* we need to look for a degeneracy */
1095 int k;
1096 for (k=cand_idx[pass]; k<cand_idx[pass+1]; k++) {
1097 ELL_2V_SET(sctx->facecoord+2*(faceid+4*si),((sctx->facecoord+2*(faceid+4*si))[0]=(candidates[2*k]), (
sctx->facecoord+2*(faceid+4*si))[1]=(candidates[2*k+1]))
1098 candidates[2*k], candidates[2*k+1])((sctx->facecoord+2*(faceid+4*si))[0]=(candidates[2*k]), (
sctx->facecoord+2*(faceid+4*si))[1]=(candidates[2*k+1]))
;
1099 if (!seekDescendToDeg(sctx->facecoord+2*(faceid+4*si),
1100 sctx->hess + 9*verti[faceid][0],
1101 sctx->hess + 9*verti[faceid][1],
1102 sctx->hess + 9*verti[faceid][2],
1103 sctx->hess + 9*verti[faceid][3],
1104 50, 1e-9, (bag->esIdx==2)?'l':'p')) {
1105 inter[interct++]=12; /* 12 means "deg. point on this face */
1106 break;
1107 }
1108 }
1109 if ((pass==2) && (inter[interct-1]!=12)) {
1110 /* nothing helped, so insert a dummy vertex */
1111 ELL_2V_SET(sctx->facecoord+2*(faceid+4*si), 0.5, 0.5)((sctx->facecoord+2*(faceid+4*si))[0]=(0.5), (sctx->facecoord
+2*(faceid+4*si))[1]=(0.5))
;
1112 inter[interct++]=12;
1113 }
1114 if (inter[interct-1]==12) {
1115 computeFaceGradient(sctx, sctx->facenorm+3*(faceid+4*si),
1116 xi, yi, faceid, sctx->facecoord+2*(faceid+4*si));
1117 switch (faceid) {
1118 case 0: ELL_3V_SET(sctx->faceicoord+3*(faceid+4*si),((sctx->faceicoord+3*(faceid+4*si))[0] = (xi+sctx->facecoord
[2*(faceid+4*si)]), (sctx->faceicoord+3*(faceid+4*si))[1] =
(yi+sctx->facecoord[2*(faceid+4*si)+1]), (sctx->faceicoord
+3*(faceid+4*si))[2] = (bag->zi))
1119 xi+sctx->facecoord[2*(faceid+4*si)],((sctx->faceicoord+3*(faceid+4*si))[0] = (xi+sctx->facecoord
[2*(faceid+4*si)]), (sctx->faceicoord+3*(faceid+4*si))[1] =
(yi+sctx->facecoord[2*(faceid+4*si)+1]), (sctx->faceicoord
+3*(faceid+4*si))[2] = (bag->zi))
1120 yi+sctx->facecoord[2*(faceid+4*si)+1], bag->zi)((sctx->faceicoord+3*(faceid+4*si))[0] = (xi+sctx->facecoord
[2*(faceid+4*si)]), (sctx->faceicoord+3*(faceid+4*si))[1] =
(yi+sctx->facecoord[2*(faceid+4*si)+1]), (sctx->faceicoord
+3*(faceid+4*si))[2] = (bag->zi))
;
1121 break;
1122 case 1: ELL_3V_SET(sctx->faceicoord+3*(faceid+4*si),((sctx->faceicoord+3*(faceid+4*si))[0] = (xi+sctx->facecoord
[2*(faceid+4*si)]), (sctx->faceicoord+3*(faceid+4*si))[1] =
(yi), (sctx->faceicoord+3*(faceid+4*si))[2] = (bag->zi
+sctx->facecoord[2*(faceid+4*si)+1]))
1123 xi+sctx->facecoord[2*(faceid+4*si)], yi,((sctx->faceicoord+3*(faceid+4*si))[0] = (xi+sctx->facecoord
[2*(faceid+4*si)]), (sctx->faceicoord+3*(faceid+4*si))[1] =
(yi), (sctx->faceicoord+3*(faceid+4*si))[2] = (bag->zi
+sctx->facecoord[2*(faceid+4*si)+1]))
1124 bag->zi+sctx->facecoord[2*(faceid+4*si)+1])((sctx->faceicoord+3*(faceid+4*si))[0] = (xi+sctx->facecoord
[2*(faceid+4*si)]), (sctx->faceicoord+3*(faceid+4*si))[1] =
(yi), (sctx->faceicoord+3*(faceid+4*si))[2] = (bag->zi
+sctx->facecoord[2*(faceid+4*si)+1]))
;
1125 break;
1126 case 2: ELL_3V_SET(sctx->faceicoord+3*(faceid+4*si), xi,((sctx->faceicoord+3*(faceid+4*si))[0] = (xi), (sctx->faceicoord
+3*(faceid+4*si))[1] = (yi+sctx->facecoord[2*(faceid+4*si)
]), (sctx->faceicoord+3*(faceid+4*si))[2] = (bag->zi+sctx
->facecoord[2*(faceid+4*si)+1]))
1127 yi+sctx->facecoord[2*(faceid+4*si)],((sctx->faceicoord+3*(faceid+4*si))[0] = (xi), (sctx->faceicoord
+3*(faceid+4*si))[1] = (yi+sctx->facecoord[2*(faceid+4*si)
]), (sctx->faceicoord+3*(faceid+4*si))[2] = (bag->zi+sctx
->facecoord[2*(faceid+4*si)+1]))
1128 bag->zi+sctx->facecoord[2*(faceid+4*si)+1])((sctx->faceicoord+3*(faceid+4*si))[0] = (xi), (sctx->faceicoord
+3*(faceid+4*si))[1] = (yi+sctx->facecoord[2*(faceid+4*si)
]), (sctx->faceicoord+3*(faceid+4*si))[2] = (bag->zi+sctx
->facecoord[2*(faceid+4*si)+1]))
;
1129 break;
1130 case 3: ELL_3V_SET(sctx->faceicoord+3*(faceid+4*si),((sctx->faceicoord+3*(faceid+4*si))[0] = (xi+sctx->facecoord
[2*(faceid+4*si)]), (sctx->faceicoord+3*(faceid+4*si))[1] =
(yi+sctx->facecoord[2*(faceid+4*si)+1]), (sctx->faceicoord
+3*(faceid+4*si))[2] = (bag->zi+1))
1131 xi+sctx->facecoord[2*(faceid+4*si)],((sctx->faceicoord+3*(faceid+4*si))[0] = (xi+sctx->facecoord
[2*(faceid+4*si)]), (sctx->faceicoord+3*(faceid+4*si))[1] =
(yi+sctx->facecoord[2*(faceid+4*si)+1]), (sctx->faceicoord
+3*(faceid+4*si))[2] = (bag->zi+1))
1132 yi+sctx->facecoord[2*(faceid+4*si)+1], bag->zi+1)((sctx->faceicoord+3*(faceid+4*si))[0] = (xi+sctx->facecoord
[2*(faceid+4*si)]), (sctx->faceicoord+3*(faceid+4*si))[1] =
(yi+sctx->facecoord[2*(faceid+4*si)+1]), (sctx->faceicoord
+3*(faceid+4*si))[2] = (bag->zi+1))
;
1133 break;
1134 }
1135 }
1136 }
1137 if (interct%2==0) { /* we can break out */
1138 break;
1139 }
1140 }
1141
1142 if (interct<=1) { /* there is no connectivity on this face */
1143 ELL_4V_SET(sctx->pairs+12*(faceid+4*si),-1,-1,-1,-1)((sctx->pairs+12*(faceid+4*si))[0] = (-1), (sctx->pairs
+12*(faceid+4*si))[1] = (-1), (sctx->pairs+12*(faceid+4*si
))[2] = (-1), (sctx->pairs+12*(faceid+4*si))[3] = (-1))
;
1144 } else if (interct==2) { /* connectivity is straightforward */
1145 ELL_4V_SET(sctx->pairs+12*(faceid+4*si),inter[0],inter[1],-1,-1)((sctx->pairs+12*(faceid+4*si))[0] = (inter[0]), (sctx->
pairs+12*(faceid+4*si))[1] = (inter[1]), (sctx->pairs+12*(
faceid+4*si))[2] = (-1), (sctx->pairs+12*(faceid+4*si))[3]
= (-1))
;
1146 } else { /* we need gradients and coordinates to make a decision */
1147 double interc[24]; /* 2D coordinates of intersection points */
1148 double intern[24]; /* 2D normals at intersection points */
1149 /* used to find the best pairing without self-intersection */
1150 double bestscore=1e20;
1151 char idcs[12]; /* consider if we need to restrict this */
1152 for (i=0; i<interct; i++) {
1153 if (inter[i]<12) { /* edge feature */
1154 int resolved=edgeid[faceid][inter[i]/3];
1155 int offset=inter[i]%3;
1156 switch (faceid) {
1157 case 0: case 3:
1158 ELL_2V_SET(interc+2*i,((interc+2*i)[0]=(sctx->edgeicoord[9*(bag->evti[resolved
]+5*si)+3*offset]), (interc+2*i)[1]=(sctx->edgeicoord[9*(bag
->evti[resolved]+5*si)+3*offset+1]))
1159 sctx->edgeicoord[9*(bag->evti[resolved]+5*si)+3*offset],((interc+2*i)[0]=(sctx->edgeicoord[9*(bag->evti[resolved
]+5*si)+3*offset]), (interc+2*i)[1]=(sctx->edgeicoord[9*(bag
->evti[resolved]+5*si)+3*offset+1]))
1160 sctx->edgeicoord[9*(bag->evti[resolved]+5*si)+3*offset+1])((interc+2*i)[0]=(sctx->edgeicoord[9*(bag->evti[resolved
]+5*si)+3*offset]), (interc+2*i)[1]=(sctx->edgeicoord[9*(bag
->evti[resolved]+5*si)+3*offset+1]))
;
1161 ELL_2V_SET(intern+2*i,((intern+2*i)[0]=(sctx->edgenorm[9*(bag->evti[resolved]
+5*si)+3*offset]), (intern+2*i)[1]=(sctx->edgenorm[9*(bag->
evti[resolved]+5*si)+3*offset+1]))
1162 sctx->edgenorm[9*(bag->evti[resolved]+5*si)+3*offset],((intern+2*i)[0]=(sctx->edgenorm[9*(bag->evti[resolved]
+5*si)+3*offset]), (intern+2*i)[1]=(sctx->edgenorm[9*(bag->
evti[resolved]+5*si)+3*offset+1]))
1163 sctx->edgenorm[9*(bag->evti[resolved]+5*si)+3*offset+1])((intern+2*i)[0]=(sctx->edgenorm[9*(bag->evti[resolved]
+5*si)+3*offset]), (intern+2*i)[1]=(sctx->edgenorm[9*(bag->
evti[resolved]+5*si)+3*offset+1]))
;
1164 break;
1165 case 1:
1166 ELL_2V_SET(interc+2*i,((interc+2*i)[0]=(sctx->edgeicoord[9*(bag->evti[resolved
]+5*si)+3*offset]), (interc+2*i)[1]=(sctx->edgeicoord[9*(bag
->evti[resolved]+5*si)+3*offset+2]))
1167 sctx->edgeicoord[9*(bag->evti[resolved]+5*si)+3*offset],((interc+2*i)[0]=(sctx->edgeicoord[9*(bag->evti[resolved
]+5*si)+3*offset]), (interc+2*i)[1]=(sctx->edgeicoord[9*(bag
->evti[resolved]+5*si)+3*offset+2]))
1168 sctx->edgeicoord[9*(bag->evti[resolved]+5*si)+3*offset+2])((interc+2*i)[0]=(sctx->edgeicoord[9*(bag->evti[resolved
]+5*si)+3*offset]), (interc+2*i)[1]=(sctx->edgeicoord[9*(bag
->evti[resolved]+5*si)+3*offset+2]))
;
1169 ELL_2V_SET(intern+2*i,((intern+2*i)[0]=(sctx->edgenorm[9*(bag->evti[resolved]
+5*si)+3*offset]), (intern+2*i)[1]=(sctx->edgenorm[9*(bag->
evti[resolved]+5*si)+3*offset+2]))
1170 sctx->edgenorm[9*(bag->evti[resolved]+5*si)+3*offset],((intern+2*i)[0]=(sctx->edgenorm[9*(bag->evti[resolved]
+5*si)+3*offset]), (intern+2*i)[1]=(sctx->edgenorm[9*(bag->
evti[resolved]+5*si)+3*offset+2]))
1171 sctx->edgenorm[9*(bag->evti[resolved]+5*si)+3*offset+2])((intern+2*i)[0]=(sctx->edgenorm[9*(bag->evti[resolved]
+5*si)+3*offset]), (intern+2*i)[1]=(sctx->edgenorm[9*(bag->
evti[resolved]+5*si)+3*offset+2]))
;
1172 break;
1173 case 2:
1174 ELL_2V_SET(interc+2*i,((interc+2*i)[0]=(sctx->edgeicoord[9*(bag->evti[resolved
]+5*si)+3*offset+1]), (interc+2*i)[1]=(sctx->edgeicoord[9*
(bag->evti[resolved]+5*si)+3*offset+2]))
1175 sctx->edgeicoord[9*(bag->evti[resolved]+5*si)+3*offset+1],((interc+2*i)[0]=(sctx->edgeicoord[9*(bag->evti[resolved
]+5*si)+3*offset+1]), (interc+2*i)[1]=(sctx->edgeicoord[9*
(bag->evti[resolved]+5*si)+3*offset+2]))
1176 sctx->edgeicoord[9*(bag->evti[resolved]+5*si)+3*offset+2])((interc+2*i)[0]=(sctx->edgeicoord[9*(bag->evti[resolved
]+5*si)+3*offset+1]), (interc+2*i)[1]=(sctx->edgeicoord[9*
(bag->evti[resolved]+5*si)+3*offset+2]))
;
1177 ELL_2V_SET(intern+2*i,((intern+2*i)[0]=(sctx->edgenorm[9*(bag->evti[resolved]
+5*si)+3*offset+1]), (intern+2*i)[1]=(sctx->edgenorm[9*(bag
->evti[resolved]+5*si)+3*offset+2]))
1178 sctx->edgenorm[9*(bag->evti[resolved]+5*si)+3*offset+1],((intern+2*i)[0]=(sctx->edgenorm[9*(bag->evti[resolved]
+5*si)+3*offset+1]), (intern+2*i)[1]=(sctx->edgenorm[9*(bag
->evti[resolved]+5*si)+3*offset+2]))
1179 sctx->edgenorm[9*(bag->evti[resolved]+5*si)+3*offset+2])((intern+2*i)[0]=(sctx->edgenorm[9*(bag->evti[resolved]
+5*si)+3*offset+1]), (intern+2*i)[1]=(sctx->edgenorm[9*(bag
->evti[resolved]+5*si)+3*offset+2]))
;
1180 break;
1181 }
1182 } else { /* face feature */
1183 switch (faceid) {
1184 case 0: case 3:
1185 ELL_2V_SET(interc+2*i, sctx->faceicoord[3*(faceid+4*si)],((interc+2*i)[0]=(sctx->faceicoord[3*(faceid+4*si)]), (interc
+2*i)[1]=(sctx->faceicoord[3*(faceid+4*si)+1]))
1186 sctx->faceicoord[3*(faceid+4*si)+1])((interc+2*i)[0]=(sctx->faceicoord[3*(faceid+4*si)]), (interc
+2*i)[1]=(sctx->faceicoord[3*(faceid+4*si)+1]))
;
1187 ELL_2V_SET(intern+2*i, sctx->facenorm[3*(faceid+4*si)],((intern+2*i)[0]=(sctx->facenorm[3*(faceid+4*si)]), (intern
+2*i)[1]=(sctx->facenorm[3*(faceid+4*si)+1]))
1188 sctx->facenorm[3*(faceid+4*si)+1])((intern+2*i)[0]=(sctx->facenorm[3*(faceid+4*si)]), (intern
+2*i)[1]=(sctx->facenorm[3*(faceid+4*si)+1]))
;
1189 break;
1190 case 1:
1191 ELL_2V_SET(interc+2*i, sctx->faceicoord[3*(faceid+4*si)],((interc+2*i)[0]=(sctx->faceicoord[3*(faceid+4*si)]), (interc
+2*i)[1]=(sctx->faceicoord[3*(faceid+4*si)+2]))
1192 sctx->faceicoord[3*(faceid+4*si)+2])((interc+2*i)[0]=(sctx->faceicoord[3*(faceid+4*si)]), (interc
+2*i)[1]=(sctx->faceicoord[3*(faceid+4*si)+2]))
;
1193 ELL_2V_SET(intern+2*i, sctx->facenorm[3*(faceid+4*si)],((intern+2*i)[0]=(sctx->facenorm[3*(faceid+4*si)]), (intern
+2*i)[1]=(sctx->facenorm[3*(faceid+4*si)+2]))
1194 sctx->facenorm[3*(faceid+4*si)+2])((intern+2*i)[0]=(sctx->facenorm[3*(faceid+4*si)]), (intern
+2*i)[1]=(sctx->facenorm[3*(faceid+4*si)+2]))
;
1195 break;
1196 case 2:
1197 ELL_2V_SET(interc+2*i, sctx->faceicoord[3*(faceid+4*si)+1],((interc+2*i)[0]=(sctx->faceicoord[3*(faceid+4*si)+1]), (interc
+2*i)[1]=(sctx->faceicoord[3*(faceid+4*si)+2]))
1198 sctx->faceicoord[3*(faceid+4*si)+2])((interc+2*i)[0]=(sctx->faceicoord[3*(faceid+4*si)+1]), (interc
+2*i)[1]=(sctx->faceicoord[3*(faceid+4*si)+2]))
;
1199 ELL_2V_SET(intern+2*i, sctx->facenorm[3*(faceid+4*si)+1],((intern+2*i)[0]=(sctx->facenorm[3*(faceid+4*si)+1]), (intern
+2*i)[1]=(sctx->facenorm[3*(faceid+4*si)+2]))
1200 sctx->facenorm[3*(faceid+4*si)+2])((intern+2*i)[0]=(sctx->facenorm[3*(faceid+4*si)+1]), (intern
+2*i)[1]=(sctx->facenorm[3*(faceid+4*si)+2]))
;
1201 break;
1202 }
1203 }
1204 }
1205 for (i=0; i<interct; i++) {
1206 sctx->pairs[12*(faceid+4*si)+i]=i;
1207 idcs[i]=i;
1208 }
1209 findConnectivity(sctx->pairs+12*(faceid+4*si), &bestscore, interct,
1210 idcs, 0, interc, intern);
1211 for (i=0; i<interct; i++)
1212 sctx->pairs[12*(faceid+4*si)+i]=inter[sctx->pairs[12*(faceid+4*si)+i]];
1213 for (i=interct; i<12; i++)
1214 sctx->pairs[12*(faceid+4*si)+i]=-1;
1215 }
1216}
1217
1218static void
1219intersectionShuffleProbe(seekContext *sctx, baggage *bag) {
1220 unsigned int xi, yi, sx, sy, si;
1221 int i;
1222
1223 sx = AIR_CAST(unsigned int, sctx->sx)((unsigned int)(sctx->sx));
1224 sy = AIR_CAST(unsigned int, sctx->sy)((unsigned int)(sctx->sy));
1225
1226 for (yi=0; yi<sy; yi++) {
1227 for (xi=0; xi<sx; xi++) {
1228 si = xi + sx*yi;
1229 /* take care of facevidx array */
1230 if (!bag->zi) { /* initialize, else copy over */
1231 sctx->facevidx[0 + 4*si] = -1;
1232 } else {
1233 sctx->facevidx[0 + 4*si] = sctx->facevidx[3 + 4*si];
1234 }
1235 sctx->facevidx[1 + 4*si] = sctx->facevidx[2 + 4*si] =
1236 sctx->facevidx[3 + 4*si] = -1;
1237
1238 /* copy or reset data on the 5 unique edges */
1239
1240 if (sctx->treated[si]&_SEEK_TREATED_EDGE30x10) {
1241 /* has been treated, just copy results */
1242 ELL_3V_COPY(sctx->edgealpha+3*(0+5*si), sctx->edgealpha+3*(3+5*si))((sctx->edgealpha+3*(0+5*si))[0] = (sctx->edgealpha+3*(
3+5*si))[0], (sctx->edgealpha+3*(0+5*si))[1] = (sctx->edgealpha
+3*(3+5*si))[1], (sctx->edgealpha+3*(0+5*si))[2] = (sctx->
edgealpha+3*(3+5*si))[2])
;
1243 ELL_3M_COPY(sctx->edgenorm+9*(0+5*si), sctx->edgenorm+9*(3+5*si))((((sctx->edgenorm+9*(0+5*si))+0)[0] = ((sctx->edgenorm
+9*(3+5*si))+0)[0], ((sctx->edgenorm+9*(0+5*si))+0)[1] = (
(sctx->edgenorm+9*(3+5*si))+0)[1], ((sctx->edgenorm+9*(
0+5*si))+0)[2] = ((sctx->edgenorm+9*(3+5*si))+0)[2]), (((sctx
->edgenorm+9*(0+5*si))+3)[0] = ((sctx->edgenorm+9*(3+5*
si))+3)[0], ((sctx->edgenorm+9*(0+5*si))+3)[1] = ((sctx->
edgenorm+9*(3+5*si))+3)[1], ((sctx->edgenorm+9*(0+5*si))+3
)[2] = ((sctx->edgenorm+9*(3+5*si))+3)[2]), (((sctx->edgenorm
+9*(0+5*si))+6)[0] = ((sctx->edgenorm+9*(3+5*si))+6)[0], (
(sctx->edgenorm+9*(0+5*si))+6)[1] = ((sctx->edgenorm+9*
(3+5*si))+6)[1], ((sctx->edgenorm+9*(0+5*si))+6)[2] = ((sctx
->edgenorm+9*(3+5*si))+6)[2]))
;
1244 ELL_3M_COPY(sctx->edgeicoord+9*(0+5*si), sctx->edgeicoord+9*(3+5*si))((((sctx->edgeicoord+9*(0+5*si))+0)[0] = ((sctx->edgeicoord
+9*(3+5*si))+0)[0], ((sctx->edgeicoord+9*(0+5*si))+0)[1] =
((sctx->edgeicoord+9*(3+5*si))+0)[1], ((sctx->edgeicoord
+9*(0+5*si))+0)[2] = ((sctx->edgeicoord+9*(3+5*si))+0)[2])
, (((sctx->edgeicoord+9*(0+5*si))+3)[0] = ((sctx->edgeicoord
+9*(3+5*si))+3)[0], ((sctx->edgeicoord+9*(0+5*si))+3)[1] =
((sctx->edgeicoord+9*(3+5*si))+3)[1], ((sctx->edgeicoord
+9*(0+5*si))+3)[2] = ((sctx->edgeicoord+9*(3+5*si))+3)[2])
, (((sctx->edgeicoord+9*(0+5*si))+6)[0] = ((sctx->edgeicoord
+9*(3+5*si))+6)[0], ((sctx->edgeicoord+9*(0+5*si))+6)[1] =
((sctx->edgeicoord+9*(3+5*si))+6)[1], ((sctx->edgeicoord
+9*(0+5*si))+6)[2] = ((sctx->edgeicoord+9*(3+5*si))+6)[2])
)
;
1245 sctx->treated[si]|=_SEEK_TREATED_EDGE00x02;
1246 } else if (xi!=sx-1) {
1247 ELL_3V_SET(sctx->edgealpha+3*(0+5*si),-1,-1,-1)((sctx->edgealpha+3*(0+5*si))[0] = (-1), (sctx->edgealpha
+3*(0+5*si))[1] = (-1), (sctx->edgealpha+3*(0+5*si))[2] = (
-1))
;
1248 sctx->treated[si]&=0xFF^_SEEK_TREATED_EDGE00x02;
1249 }
1250
1251 if (sctx->treated[si]&_SEEK_TREATED_EDGE40x20) {
1252 /* has been treated, just copy results */
1253 ELL_3V_COPY(sctx->edgealpha+3*(1+5*si), sctx->edgealpha+3*(4+5*si))((sctx->edgealpha+3*(1+5*si))[0] = (sctx->edgealpha+3*(
4+5*si))[0], (sctx->edgealpha+3*(1+5*si))[1] = (sctx->edgealpha
+3*(4+5*si))[1], (sctx->edgealpha+3*(1+5*si))[2] = (sctx->
edgealpha+3*(4+5*si))[2])
;
1254 ELL_3M_COPY(sctx->edgenorm+9*(1+5*si), sctx->edgenorm+9*(4+5*si))((((sctx->edgenorm+9*(1+5*si))+0)[0] = ((sctx->edgenorm
+9*(4+5*si))+0)[0], ((sctx->edgenorm+9*(1+5*si))+0)[1] = (
(sctx->edgenorm+9*(4+5*si))+0)[1], ((sctx->edgenorm+9*(
1+5*si))+0)[2] = ((sctx->edgenorm+9*(4+5*si))+0)[2]), (((sctx
->edgenorm+9*(1+5*si))+3)[0] = ((sctx->edgenorm+9*(4+5*
si))+3)[0], ((sctx->edgenorm+9*(1+5*si))+3)[1] = ((sctx->
edgenorm+9*(4+5*si))+3)[1], ((sctx->edgenorm+9*(1+5*si))+3
)[2] = ((sctx->edgenorm+9*(4+5*si))+3)[2]), (((sctx->edgenorm
+9*(1+5*si))+6)[0] = ((sctx->edgenorm+9*(4+5*si))+6)[0], (
(sctx->edgenorm+9*(1+5*si))+6)[1] = ((sctx->edgenorm+9*
(4+5*si))+6)[1], ((sctx->edgenorm+9*(1+5*si))+6)[2] = ((sctx
->edgenorm+9*(4+5*si))+6)[2]))
;
1255 ELL_3M_COPY(sctx->edgeicoord+9*(1+5*si), sctx->edgeicoord+9*(4+5*si))((((sctx->edgeicoord+9*(1+5*si))+0)[0] = ((sctx->edgeicoord
+9*(4+5*si))+0)[0], ((sctx->edgeicoord+9*(1+5*si))+0)[1] =
((sctx->edgeicoord+9*(4+5*si))+0)[1], ((sctx->edgeicoord
+9*(1+5*si))+0)[2] = ((sctx->edgeicoord+9*(4+5*si))+0)[2])
, (((sctx->edgeicoord+9*(1+5*si))+3)[0] = ((sctx->edgeicoord
+9*(4+5*si))+3)[0], ((sctx->edgeicoord+9*(1+5*si))+3)[1] =
((sctx->edgeicoord+9*(4+5*si))+3)[1], ((sctx->edgeicoord
+9*(1+5*si))+3)[2] = ((sctx->edgeicoord+9*(4+5*si))+3)[2])
, (((sctx->edgeicoord+9*(1+5*si))+6)[0] = ((sctx->edgeicoord
+9*(4+5*si))+6)[0], ((sctx->edgeicoord+9*(1+5*si))+6)[1] =
((sctx->edgeicoord+9*(4+5*si))+6)[1], ((sctx->edgeicoord
+9*(1+5*si))+6)[2] = ((sctx->edgeicoord+9*(4+5*si))+6)[2])
)
;
1256 sctx->treated[si]|=_SEEK_TREATED_EDGE10x04;
1257 } else if (yi!=sy-1) {
1258 ELL_3V_SET(sctx->edgealpha+3*(1+5*si),-1,-1,-1)((sctx->edgealpha+3*(1+5*si))[0] = (-1), (sctx->edgealpha
+3*(1+5*si))[1] = (-1), (sctx->edgealpha+3*(1+5*si))[2] = (
-1))
;
1259 sctx->treated[si]&=0xFF^_SEEK_TREATED_EDGE10x04;
1260 }
1261
1262 /* edges within and at top of the slab are new */
1263 ELL_3V_SET(sctx->edgealpha+3*(2+5*si),-1,-1,-1)((sctx->edgealpha+3*(2+5*si))[0] = (-1), (sctx->edgealpha
+3*(2+5*si))[1] = (-1), (sctx->edgealpha+3*(2+5*si))[2] = (
-1))
;
1264 sctx->treated[si]&=0xFF^_SEEK_TREATED_EDGE20x08;
1265
1266 ELL_3V_SET(sctx->edgealpha+3*(3+5*si),-1,-1,-1)((sctx->edgealpha+3*(3+5*si))[0] = (-1), (sctx->edgealpha
+3*(3+5*si))[1] = (-1), (sctx->edgealpha+3*(3+5*si))[2] = (
-1))
;
1267 sctx->treated[si]&=0xFF^_SEEK_TREATED_EDGE30x10;
1268
1269 ELL_3V_SET(sctx->edgealpha+3*(4+5*si),-1,-1,-1)((sctx->edgealpha+3*(4+5*si))[0] = (-1), (sctx->edgealpha
+3*(4+5*si))[1] = (-1), (sctx->edgealpha+3*(4+5*si))[2] = (
-1))
;
1270 sctx->treated[si]&=0xFF^_SEEK_TREATED_EDGE40x20;
1271 }
1272 }
1273
1274 /* find missing deg. points, edge intersections, normals, and
1275 * connectivity on the four unique faces
1276 * this is done in a separate pass to make sure that all edge information
1277 * has been updated */
1278 for (yi=0; yi<sy; yi++) {
1279 for (xi=0; xi<sx; xi++) {
1280 si = xi + sx*yi;
1281 if (sctx->treated[si]&_SEEK_TREATED_FACE30x40) {
1282 /* we can copy previous results */
1283 ELL_2V_COPY(sctx->facecoord+2*(0+4*si), sctx->facecoord+2*(3+4*si))((sctx->facecoord+2*(0+4*si))[0] = (sctx->facecoord+2*(
3+4*si))[0], (sctx->facecoord+2*(0+4*si))[1] = (sctx->facecoord
+2*(3+4*si))[1])
;
1284 ELL_3V_COPY(sctx->faceicoord+3*(0+4*si), sctx->faceicoord+3*(3+4*si))((sctx->faceicoord+3*(0+4*si))[0] = (sctx->faceicoord+3
*(3+4*si))[0], (sctx->faceicoord+3*(0+4*si))[1] = (sctx->
faceicoord+3*(3+4*si))[1], (sctx->faceicoord+3*(0+4*si))[2
] = (sctx->faceicoord+3*(3+4*si))[2])
;
1285 ELL_3V_COPY(sctx->facenorm+3*(0+4*si), sctx->facenorm+3*(3+4*si))((sctx->facenorm+3*(0+4*si))[0] = (sctx->facenorm+3*(3+
4*si))[0], (sctx->facenorm+3*(0+4*si))[1] = (sctx->facenorm
+3*(3+4*si))[1], (sctx->facenorm+3*(0+4*si))[2] = (sctx->
facenorm+3*(3+4*si))[2])
;
1286 for (i=0; i<3; i++)
1287 ELL_4V_COPY(sctx->pairs+12*(0+4*si)+4*i, sctx->pairs+12*(3+4*si)+4*i)((sctx->pairs+12*(0+4*si)+4*i)[0] = (sctx->pairs+12*(3+
4*si)+4*i)[0], (sctx->pairs+12*(0+4*si)+4*i)[1] = (sctx->
pairs+12*(3+4*si)+4*i)[1], (sctx->pairs+12*(0+4*si)+4*i)[2
] = (sctx->pairs+12*(3+4*si)+4*i)[2], (sctx->pairs+12*(
0+4*si)+4*i)[3] = (sctx->pairs+12*(3+4*si)+4*i)[3])
;
1288 } else if (xi!=sx-1 && yi!=sy-1) {
1289 if (sctx->treated[si]&_SEEK_TREATED_REQUEST0x01)
1290 connectFace(sctx, bag, xi, yi, 0);
1291 else
1292 ELL_4V_SET(sctx->pairs+12*(0+4*si),-1,-1,-1,-1)((sctx->pairs+12*(0+4*si))[0] = (-1), (sctx->pairs+12*(
0+4*si))[1] = (-1), (sctx->pairs+12*(0+4*si))[2] = (-1), (
sctx->pairs+12*(0+4*si))[3] = (-1))
;
1293 }
1294 if (xi!=sx-1) {
1295 if (sctx->treated[si]&_SEEK_TREATED_REQUEST0x01 ||
1296 (yi!=0 && sctx->treated[xi+sx*(yi-1)]&_SEEK_TREATED_REQUEST0x01))
1297 connectFace(sctx, bag, xi, yi, 1);
1298 else ELL_4V_SET(sctx->pairs+12*(1+4*si),-1,-1,-1,-1)((sctx->pairs+12*(1+4*si))[0] = (-1), (sctx->pairs+12*(
1+4*si))[1] = (-1), (sctx->pairs+12*(1+4*si))[2] = (-1), (
sctx->pairs+12*(1+4*si))[3] = (-1))
;
1299 }
1300 if (yi!=sy-1) {
1301 if (sctx->treated[si]&_SEEK_TREATED_REQUEST0x01 ||
1302 (xi!=0 && sctx->treated[xi-1+sx*yi]&_SEEK_TREATED_REQUEST0x01))
1303 connectFace(sctx, bag, xi, yi, 2);
1304 else ELL_4V_SET(sctx->pairs+12*(2+4*si),-1,-1,-1,-1)((sctx->pairs+12*(2+4*si))[0] = (-1), (sctx->pairs+12*(
2+4*si))[1] = (-1), (sctx->pairs+12*(2+4*si))[2] = (-1), (
sctx->pairs+12*(2+4*si))[3] = (-1))
;
1305 if (xi!=sx-1) {
1306 if (sctx->treated[si]&_SEEK_TREATED_REQUEST0x01) {
1307 connectFace(sctx, bag, xi, yi, 3);
1308 sctx->treated[si]|=_SEEK_TREATED_FACE30x40;
1309 } else {
1310 ELL_4V_SET(sctx->pairs+12*(3+4*si),-1,-1,-1,-1)((sctx->pairs+12*(3+4*si))[0] = (-1), (sctx->pairs+12*(
3+4*si))[1] = (-1), (sctx->pairs+12*(3+4*si))[2] = (-1), (
sctx->pairs+12*(3+4*si))[3] = (-1))
;
1311 sctx->treated[si]&=0xFF^_SEEK_TREATED_FACE30x40;
1312 }
1313 }
1314 }
1315 }
1316 }
1317}
1318
1319/* special triangulation routine for use with T-based extraction */
1320int
1321_seekTriangulateT(seekContext *sctx, baggage *bag, limnPolyData *lpld) {
1322 unsigned xi, yi, sx, sy, si, i;
1323
1324 /* map edge indices w.r.t. faces (as used in sctx->pairs) back to
1325 * edge indices w.r.t. voxel */
1326 char edges[6][5]={{0, 2, 3, 1,12},
1327 {0, 5, 8, 4,13},
1328 {2, 7,10, 5,14},
1329 {3, 7,11, 6,15},
1330 {1, 6, 9, 4,16},
1331 {8,10,11, 9,17}};
1332
1333 sx = AIR_CAST(unsigned int, sctx->sx)((unsigned int)(sctx->sx));
1334 sy = AIR_CAST(unsigned int, sctx->sy)((unsigned int)(sctx->sy));
1335
1336 for (yi=0; yi<sy-1; yi++) {
1337 for (xi=0; xi<sx-1; xi++) {
1338 int fvti[6]; /* indices into unique face array */
1339 char connections[84];/* (12 edges * 3 possible intersections+6 faces)*2 */
1340 char degeneracies[6];
1341 int degct=0;
1342
1343 unsigned int face;
1344
1345 if (sctx->strengthUse && sctx->stng[0+2*(xi+sx*yi)] < sctx->strength &&
1346 sctx->stng[1+2*(xi+sx*yi)] < sctx->strength &&
1347 sctx->stng[0+2*(xi+1+sx*yi)] < sctx->strength &&
1348 sctx->stng[1+2*(xi+1+sx*yi)] < sctx->strength &&
1349 sctx->stng[0+2*(xi+sx*(yi+1))] < sctx->strength &&
1350 sctx->stng[1+2*(xi+sx*(yi+1))] < sctx->strength &&
1351 sctx->stng[0+2*(xi+1+sx*(yi+1))] < sctx->strength &&
1352 sctx->stng[1+2*(xi+1+sx*(yi+1))] < sctx->strength)
1353 continue;/* all vertices below strength limit, do not create geometry */
1354
1355 si = xi + sx*yi;
1356 ELL_3V_SET(fvti, 0 + 4*si, 1 + 4*si, 2 + 4*(xi+1 + sx*yi))((fvti)[0] = (0 + 4*si), (fvti)[1] = (1 + 4*si), (fvti)[2] = (
2 + 4*(xi+1 + sx*yi)))
;
1357 ELL_3V_SET(fvti+3, 1 + 4*(xi + sx*(yi+1)), 2 + 4*si, 3 + 4*si)((fvti+3)[0] = (1 + 4*(xi + sx*(yi+1))), (fvti+3)[1] = (2 + 4
*si), (fvti+3)[2] = (3 + 4*si))
;
1358
1359 /* collect all intersection + connectivity info for this voxel */
1360 memset(connections,-1,sizeof(connections))__builtin___memset_chk (connections, -1, sizeof(connections),
__builtin_object_size (connections, 0))
;
1361 for (face=0; face<6; face++) {
1362 for (i=0; i<6; i++) {
1363 int idx1, offset1, idx2, offset2, idxmap1, idxmap2;
1364 if (sctx->pairs[12*fvti[face]+2*i]==-1) break;
1365 idx1=edges[face][sctx->pairs[12*fvti[face]+2*i]/3];
1366 offset1=sctx->pairs[12*fvti[face]+2*i]%3;
1367 idx2=edges[face][sctx->pairs[12*fvti[face]+2*i+1]/3];
1368 offset2=sctx->pairs[12*fvti[face]+2*i+1]%3;
1369 idxmap1=3*idx1+offset1;
1370 idxmap2=3*idx2+offset2;
1371 if (idx1>11) {
1372 idxmap1=idx1+24; /* +36-12 */
1373 degeneracies[degct++] = idxmap1;
1374 }
1375 if (idx2>11) {
1376 idxmap2=idx2+24;
1377 degeneracies[degct++] = idxmap2;
1378 }
1379
1380 if (connections[2*idxmap1]==-1)
1381 connections[2*idxmap1]=idxmap2;
1382 else
1383 connections[2*idxmap1+1]=idxmap2;
1384 if (connections[2*idxmap2]==-1)
1385 connections[2*idxmap2]=idxmap1;
1386 else
1387 connections[2*idxmap2+1]=idxmap1;
1388 }
1389 }
1390
1391 /* connect the degenerate points */
1392 if (degct==2) {
1393 connections[2*degeneracies[0]+1]=degeneracies[1];
1394 connections[2*degeneracies[1]+1]=degeneracies[0];
1395 } else if (degct==4) {
1396 int bestchoice=0;
1397 int eidcs[4], fidcs[4];
1398 int k;
1399 double bestscore, score;
1400 for (k=0; k<4; ++k) {
1401 eidcs[k]=3*(bag->evti[connections[2*degeneracies[k]]/3]+5*si)+
1402 connections[2*degeneracies[k]]%3;
1403 fidcs[k]=fvti[degeneracies[k]-36];
1404 }
1405 bestscore=evaluateDegConnection(sctx->edgeicoord+3*eidcs[0],
1406 sctx->faceicoord+3*fidcs[0],
1407 sctx->faceicoord+3*fidcs[1],
1408 sctx->edgeicoord+3*eidcs[1],
1409 sctx->edgeicoord+3*eidcs[2],
1410 sctx->faceicoord+3*fidcs[2],
1411 sctx->faceicoord+3*fidcs[3],
1412 sctx->edgeicoord+3*eidcs[3],
1413 NULL((void*)0), NULL((void*)0), NULL((void*)0), NULL((void*)0),
1414 sctx->facenorm+3*fidcs[0],
1415 sctx->facenorm+3*fidcs[1],
1416 sctx->facenorm+3*fidcs[2],
1417 sctx->facenorm+3*fidcs[3],
1418 NULL((void*)0), NULL((void*)0));
1419 score=evaluateDegConnection(sctx->edgeicoord+3*eidcs[0],
1420 sctx->faceicoord+3*fidcs[0],
1421 sctx->faceicoord+3*fidcs[2],
1422 sctx->edgeicoord+3*eidcs[2],
1423 sctx->edgeicoord+3*eidcs[1],
1424 sctx->faceicoord+3*fidcs[1],
1425 sctx->faceicoord+3*fidcs[3],
1426 sctx->edgeicoord+3*eidcs[3],
1427 NULL((void*)0), NULL((void*)0), NULL((void*)0), NULL((void*)0),
1428 sctx->facenorm+3*fidcs[0],
1429 sctx->facenorm+3*fidcs[2],
1430 sctx->facenorm+3*fidcs[1],
1431 sctx->facenorm+3*fidcs[3],
1432 NULL((void*)0), NULL((void*)0));
1433 if (score<bestscore) {
1434 bestscore=score;
1435 bestchoice=1;
1436 }
1437 score=evaluateDegConnection(sctx->edgeicoord+3*eidcs[0],
1438 sctx->faceicoord+3*fidcs[0],
1439 sctx->faceicoord+3*fidcs[3],
1440 sctx->edgeicoord+3*eidcs[3],
1441 sctx->edgeicoord+3*eidcs[1],
1442 sctx->faceicoord+3*fidcs[1],
1443 sctx->faceicoord+3*fidcs[2],
1444 sctx->edgeicoord+3*eidcs[2],
1445 NULL((void*)0), NULL((void*)0), NULL((void*)0), NULL((void*)0),
1446 sctx->facenorm+3*fidcs[0],
1447 sctx->facenorm+3*fidcs[3],
1448 sctx->facenorm+3*fidcs[1],
1449 sctx->facenorm+3*fidcs[2],
1450 NULL((void*)0), NULL((void*)0));
1451 if (score<bestscore) {
1452 bestscore=score;
1453 bestchoice=2;
1454 }
1455 switch (bestchoice) {
1456 case 0: connections[2*degeneracies[0]+1]=degeneracies[1];
1457 connections[2*degeneracies[1]+1]=degeneracies[0];
1458 connections[2*degeneracies[2]+1]=degeneracies[3];
1459 connections[2*degeneracies[3]+1]=degeneracies[2];
1460 break;
1461 case 1: connections[2*degeneracies[0]+1]=degeneracies[2];
1462 connections[2*degeneracies[2]+1]=degeneracies[0];
1463 connections[2*degeneracies[1]+1]=degeneracies[3];
1464 connections[2*degeneracies[3]+1]=degeneracies[1];
1465 break;
1466 case 2: connections[2*degeneracies[0]+1]=degeneracies[3];
1467 connections[2*degeneracies[3]+1]=degeneracies[0];
1468 connections[2*degeneracies[1]+1]=degeneracies[2];
1469 connections[2*degeneracies[2]+1]=degeneracies[1];
1470 break;
1471 }
1472 } else if (degct==6) {
1473 int bestchoice=0;
1474 int eidcs[6], fidcs[6];
1475 int k;
1476 double bestscore;
1477 int pairings[15][6]={{0,1,2,3,4,5},{0,1,2,4,3,5},{0,1,2,5,3,4},
1478 {0,2,1,3,4,5},{0,2,1,4,3,5},{0,2,1,5,3,4},
1479 {0,3,1,2,4,5},{0,3,1,4,2,5},{0,3,1,5,2,4},
1480 {0,4,1,2,3,5},{0,4,1,3,2,5},{0,4,1,5,2,3},
1481 {0,5,1,2,3,4},{0,5,1,3,2,4},{0,5,1,4,2,3}};
1482 for (k=0; k<6; ++k) {
1483 eidcs[k]=3*(bag->evti[connections[2*degeneracies[k]]/3]+5*si)+
1484 connections[2*degeneracies[k]]%3;
1485 fidcs[k]=fvti[degeneracies[k]-36];
1486 }
1487 bestscore=evaluateDegConnection(sctx->edgeicoord+3*eidcs[0],
1488 sctx->faceicoord+3*fidcs[0],
1489 sctx->faceicoord+3*fidcs[1],
1490 sctx->edgeicoord+3*eidcs[1],
1491 sctx->edgeicoord+3*eidcs[2],
1492 sctx->faceicoord+3*fidcs[2],
1493 sctx->faceicoord+3*fidcs[3],
1494 sctx->edgeicoord+3*eidcs[3],
1495 sctx->edgeicoord+3*eidcs[4],
1496 sctx->faceicoord+3*fidcs[4],
1497 sctx->faceicoord+3*fidcs[5],
1498 sctx->edgeicoord+3*eidcs[5],
1499 sctx->facenorm+3*fidcs[0],
1500 sctx->facenorm+3*fidcs[1],
1501 sctx->facenorm+3*fidcs[2],
1502 sctx->facenorm+3*fidcs[3],
1503 sctx->facenorm+3*fidcs[4],
1504 sctx->facenorm+3*fidcs[5]);
1505 for (k=1; k<15; ++k) {
1506 double score=evaluateDegConnection
1507 (sctx->edgeicoord+3*eidcs[pairings[k][0]],
1508 sctx->faceicoord+3*fidcs[pairings[k][0]],
1509 sctx->faceicoord+3*fidcs[pairings[k][1]],
1510 sctx->edgeicoord+3*eidcs[pairings[k][1]],
1511 sctx->edgeicoord+3*eidcs[pairings[k][2]],
1512 sctx->faceicoord+3*fidcs[pairings[k][2]],
1513 sctx->faceicoord+3*fidcs[pairings[k][3]],
1514 sctx->edgeicoord+3*eidcs[pairings[k][3]],
1515 sctx->edgeicoord+3*eidcs[pairings[k][4]],
1516 sctx->faceicoord+3*fidcs[pairings[k][4]],
1517 sctx->faceicoord+3*fidcs[pairings[k][5]],
1518 sctx->edgeicoord+3*eidcs[pairings[k][5]],
1519 sctx->facenorm+3*fidcs[pairings[k][0]],
1520 sctx->facenorm+3*fidcs[pairings[k][1]],
1521 sctx->facenorm+3*fidcs[pairings[k][2]],
1522 sctx->facenorm+3*fidcs[pairings[k][3]],
1523 sctx->facenorm+3*fidcs[pairings[k][4]],
1524 sctx->facenorm+3*fidcs[pairings[k][5]]);
1525 if (score<bestscore) {
1526 bestscore=score; bestchoice=k;
1527 }
1528 }
1529 connections[2*degeneracies[pairings[bestchoice][0]]+1]=
1530 degeneracies[pairings[bestchoice][1]];
1531 connections[2*degeneracies[pairings[bestchoice][1]]+1]=
1532 degeneracies[pairings[bestchoice][0]];
1533 connections[2*degeneracies[pairings[bestchoice][2]]+1]=
1534 degeneracies[pairings[bestchoice][3]];
1535 connections[2*degeneracies[pairings[bestchoice][3]]+1]=
1536 degeneracies[pairings[bestchoice][2]];
1537 connections[2*degeneracies[pairings[bestchoice][4]]+1]=
1538 degeneracies[pairings[bestchoice][5]];
1539 connections[2*degeneracies[pairings[bestchoice][5]]+1]=
1540 degeneracies[pairings[bestchoice][4]];
1541 }
1542
1543 /* sufficient to run to 36: each polygon will contain at least
1544 * one edge vertex */
1545 for (i=0; i<36; i++) {
1546 if (connections[2*i]!=-1) {
1547 /* extract polygon from connections array */
1548 signed char polygon[42];
1549 unsigned char polyct=0;
1550 char thiz=i;
1551 char next=connections[2*i];
1552 polygon[polyct++]=i;
1553 connections[2*i]=-1;
1554 while (next!=-1) {
1555 char helpnext;
1556 polygon[polyct++]=next;
1557 if (connections[2*next]==thiz) {
1558 helpnext=connections[2*next+1];
1559 } else {
1560 helpnext=connections[2*next];
1561 }
1562 connections[2*next]=connections[2*next+1]=-1;
1563 thiz = next; next = helpnext;
1564 if (next==polygon[0])
1565 break; /* polygon is closed */
1566 }
1567 if (next!=-1) { /* else: discard unclosed polygon */
1568 /* make sure all required vertices are there */
1569 int j;
1570 for (j=0; j<polyct; ++j) {
1571 double tvertA[4], tvertB[4];
1572 if (polygon[j]<36) { /* we may need to insert an edge vertex */
1573 int eidx=3*(bag->evti[polygon[j]/3] + 5*si)+polygon[j]%3;
1574 if (-1 == sctx->vidx[eidx]) {
1575 int ovi;
1576 ELL_3V_COPY(tvertA, sctx->edgeicoord+3*eidx)((tvertA)[0] = (sctx->edgeicoord+3*eidx)[0], (tvertA)[1] =
(sctx->edgeicoord+3*eidx)[1], (tvertA)[2] = (sctx->edgeicoord
+3*eidx)[2])
;
1577 tvertA[3]=1.0;
1578
1579 /* tvertB in input index space */
1580 ELL_4MV_MUL(tvertB, sctx->txfIdx, tvertA)((tvertB)[0]=(sctx->txfIdx)[ 0]*(tvertA)[0]+(sctx->txfIdx
)[ 1]*(tvertA)[1]+(sctx->txfIdx)[ 2]*(tvertA)[2]+(sctx->
txfIdx)[ 3]*(tvertA)[3], (tvertB)[1]=(sctx->txfIdx)[ 4]*(tvertA
)[0]+(sctx->txfIdx)[ 5]*(tvertA)[1]+(sctx->txfIdx)[ 6]*
(tvertA)[2]+(sctx->txfIdx)[ 7]*(tvertA)[3], (tvertB)[2]=(sctx
->txfIdx)[ 8]*(tvertA)[0]+(sctx->txfIdx)[ 9]*(tvertA)[1
]+(sctx->txfIdx)[10]*(tvertA)[2]+(sctx->txfIdx)[11]*(tvertA
)[3], (tvertB)[3]=(sctx->txfIdx)[12]*(tvertA)[0]+(sctx->
txfIdx)[13]*(tvertA)[1]+(sctx->txfIdx)[14]*(tvertA)[2]+(sctx
->txfIdx)[15]*(tvertA)[3])
;
1581 /* tvertA in world space */
1582 ELL_4MV_MUL(tvertA, sctx->shape->ItoW, tvertB)((tvertA)[0]=(sctx->shape->ItoW)[ 0]*(tvertB)[0]+(sctx->
shape->ItoW)[ 1]*(tvertB)[1]+(sctx->shape->ItoW)[ 2]
*(tvertB)[2]+(sctx->shape->ItoW)[ 3]*(tvertB)[3], (tvertA
)[1]=(sctx->shape->ItoW)[ 4]*(tvertB)[0]+(sctx->shape
->ItoW)[ 5]*(tvertB)[1]+(sctx->shape->ItoW)[ 6]*(tvertB
)[2]+(sctx->shape->ItoW)[ 7]*(tvertB)[3], (tvertA)[2]=(
sctx->shape->ItoW)[ 8]*(tvertB)[0]+(sctx->shape->
ItoW)[ 9]*(tvertB)[1]+(sctx->shape->ItoW)[10]*(tvertB)[
2]+(sctx->shape->ItoW)[11]*(tvertB)[3], (tvertA)[3]=(sctx
->shape->ItoW)[12]*(tvertB)[0]+(sctx->shape->ItoW
)[13]*(tvertB)[1]+(sctx->shape->ItoW)[14]*(tvertB)[2]+(
sctx->shape->ItoW)[15]*(tvertB)[3])
;
1583 ELL_4V_HOMOG(tvertA, tvertA)((tvertA)[0] = (tvertA)[0]/(tvertA)[3], (tvertA)[1] = (tvertA
)[1]/(tvertA)[3], (tvertA)[2] = (tvertA)[2]/(tvertA)[3], (tvertA
)[3] = 1.0)
;
1584
1585 ovi = sctx->vidx[eidx] =
1586 airArrayLenIncr(bag->xyzwArr, 1);
1587 ELL_4V_SET_TT(lpld->xyzw + 4*ovi, float,((lpld->xyzw + 4*ovi)[0] = ((float)((tvertA[0]))), (lpld->
xyzw + 4*ovi)[1] = ((float)((tvertA[1]))), (lpld->xyzw + 4
*ovi)[2] = ((float)((tvertA[2]))), (lpld->xyzw + 4*ovi)[3]
= ((float)((1.0))))
1588 tvertA[0], tvertA[1], tvertA[2], 1.0)((lpld->xyzw + 4*ovi)[0] = ((float)((tvertA[0]))), (lpld->
xyzw + 4*ovi)[1] = ((float)((tvertA[1]))), (lpld->xyzw + 4
*ovi)[2] = ((float)((tvertA[2]))), (lpld->xyzw + 4*ovi)[3]
= ((float)((1.0))))
;
1589
1590 if (sctx->normalsFind) {
1591 double len=ELL_3V_LEN(sctx->edgenorm+3*eidx)(sqrt((((sctx->edgenorm+3*eidx))[0]*((sctx->edgenorm+3*
eidx))[0] + ((sctx->edgenorm+3*eidx))[1]*((sctx->edgenorm
+3*eidx))[1] + ((sctx->edgenorm+3*eidx))[2]*((sctx->edgenorm
+3*eidx))[2])))
;
1592 airArrayLenIncr(bag->normArr, 1);
1593 ELL_3V_SCALE_TT(lpld->norm + 3*ovi, float, 1.0/len,((lpld->norm + 3*ovi)[0] = ((float)((1.0/len)*(sctx->edgenorm
+3*eidx)[0])), (lpld->norm + 3*ovi)[1] = ((float)((1.0/len
)*(sctx->edgenorm+3*eidx)[1])), (lpld->norm + 3*ovi)[2]
= ((float)((1.0/len)*(sctx->edgenorm+3*eidx)[2])))
1594 sctx->edgenorm+3*eidx)((lpld->norm + 3*ovi)[0] = ((float)((1.0/len)*(sctx->edgenorm
+3*eidx)[0])), (lpld->norm + 3*ovi)[1] = ((float)((1.0/len
)*(sctx->edgenorm+3*eidx)[1])), (lpld->norm + 3*ovi)[2]
= ((float)((1.0/len)*(sctx->edgenorm+3*eidx)[2])))
;
1595 }
1596
1597 sctx->vertNum++;
1598 }
1599 } else { /* we may need to insert a face vertex */
1600 int fidx=fvti[polygon[j]-36];
1601 if (-1 == sctx->facevidx[fidx]) {
1602 int ovi;
1603 ELL_3V_COPY(tvertA, sctx->faceicoord+3*fidx)((tvertA)[0] = (sctx->faceicoord+3*fidx)[0], (tvertA)[1] =
(sctx->faceicoord+3*fidx)[1], (tvertA)[2] = (sctx->faceicoord
+3*fidx)[2])
;
1604 tvertA[3]=1.0;
1605 /* tvertB in input index space */
1606 ELL_4MV_MUL(tvertB, sctx->txfIdx, tvertA)((tvertB)[0]=(sctx->txfIdx)[ 0]*(tvertA)[0]+(sctx->txfIdx
)[ 1]*(tvertA)[1]+(sctx->txfIdx)[ 2]*(tvertA)[2]+(sctx->
txfIdx)[ 3]*(tvertA)[3], (tvertB)[1]=(sctx->txfIdx)[ 4]*(tvertA
)[0]+(sctx->txfIdx)[ 5]*(tvertA)[1]+(sctx->txfIdx)[ 6]*
(tvertA)[2]+(sctx->txfIdx)[ 7]*(tvertA)[3], (tvertB)[2]=(sctx
->txfIdx)[ 8]*(tvertA)[0]+(sctx->txfIdx)[ 9]*(tvertA)[1
]+(sctx->txfIdx)[10]*(tvertA)[2]+(sctx->txfIdx)[11]*(tvertA
)[3], (tvertB)[3]=(sctx->txfIdx)[12]*(tvertA)[0]+(sctx->
txfIdx)[13]*(tvertA)[1]+(sctx->txfIdx)[14]*(tvertA)[2]+(sctx
->txfIdx)[15]*(tvertA)[3])
;
1607 /* tvertA in world space */
1608 ELL_4MV_MUL(tvertA, sctx->shape->ItoW, tvertB)((tvertA)[0]=(sctx->shape->ItoW)[ 0]*(tvertB)[0]+(sctx->
shape->ItoW)[ 1]*(tvertB)[1]+(sctx->shape->ItoW)[ 2]
*(tvertB)[2]+(sctx->shape->ItoW)[ 3]*(tvertB)[3], (tvertA
)[1]=(sctx->shape->ItoW)[ 4]*(tvertB)[0]+(sctx->shape
->ItoW)[ 5]*(tvertB)[1]+(sctx->shape->ItoW)[ 6]*(tvertB
)[2]+(sctx->shape->ItoW)[ 7]*(tvertB)[3], (tvertA)[2]=(
sctx->shape->ItoW)[ 8]*(tvertB)[0]+(sctx->shape->
ItoW)[ 9]*(tvertB)[1]+(sctx->shape->ItoW)[10]*(tvertB)[
2]+(sctx->shape->ItoW)[11]*(tvertB)[3], (tvertA)[3]=(sctx
->shape->ItoW)[12]*(tvertB)[0]+(sctx->shape->ItoW
)[13]*(tvertB)[1]+(sctx->shape->ItoW)[14]*(tvertB)[2]+(
sctx->shape->ItoW)[15]*(tvertB)[3])
;
1609 ELL_4V_HOMOG(tvertA, tvertA)((tvertA)[0] = (tvertA)[0]/(tvertA)[3], (tvertA)[1] = (tvertA
)[1]/(tvertA)[3], (tvertA)[2] = (tvertA)[2]/(tvertA)[3], (tvertA
)[3] = 1.0)
;
1610
1611 ovi = sctx->facevidx[fidx] =
1612 airArrayLenIncr(bag->xyzwArr, 1);
1613 ELL_4V_SET_TT(lpld->xyzw + 4*ovi, float,((lpld->xyzw + 4*ovi)[0] = ((float)((tvertA[0]))), (lpld->
xyzw + 4*ovi)[1] = ((float)((tvertA[1]))), (lpld->xyzw + 4
*ovi)[2] = ((float)((tvertA[2]))), (lpld->xyzw + 4*ovi)[3]
= ((float)((1.0))))
1614 tvertA[0], tvertA[1], tvertA[2], 1.0)((lpld->xyzw + 4*ovi)[0] = ((float)((tvertA[0]))), (lpld->
xyzw + 4*ovi)[1] = ((float)((tvertA[1]))), (lpld->xyzw + 4
*ovi)[2] = ((float)((tvertA[2]))), (lpld->xyzw + 4*ovi)[3]
= ((float)((1.0))))
;
1615
1616 if (sctx->normalsFind) {
1617 double len=ELL_3V_LEN(sctx->facenorm+3*fidx)(sqrt((((sctx->facenorm+3*fidx))[0]*((sctx->facenorm+3*
fidx))[0] + ((sctx->facenorm+3*fidx))[1]*((sctx->facenorm
+3*fidx))[1] + ((sctx->facenorm+3*fidx))[2]*((sctx->facenorm
+3*fidx))[2])))
;
1618 airArrayLenIncr(bag->normArr, 1);
1619 ELL_3V_SCALE_TT(lpld->norm + 3*ovi, float, 1.0/len,((lpld->norm + 3*ovi)[0] = ((float)((1.0/len)*(sctx->facenorm
+3*fidx)[0])), (lpld->norm + 3*ovi)[1] = ((float)((1.0/len
)*(sctx->facenorm+3*fidx)[1])), (lpld->norm + 3*ovi)[2]
= ((float)((1.0/len)*(sctx->facenorm+3*fidx)[2])))
1620 sctx->facenorm+3*fidx)((lpld->norm + 3*ovi)[0] = ((float)((1.0/len)*(sctx->facenorm
+3*fidx)[0])), (lpld->norm + 3*ovi)[1] = ((float)((1.0/len
)*(sctx->facenorm+3*fidx)[1])), (lpld->norm + 3*ovi)[2]
= ((float)((1.0/len)*(sctx->facenorm+3*fidx)[2])))
;
1621 }
1622
1623 sctx->vertNum++;
1624 }
1625 }
1626 }
1627 if (polyct>4) { /* we need to insert a helper vertex */
1628 double tvertA[4], tvertB[4], tvertAsum[4]={0,0,0,0},
1629 normsum[3]={0,0,0};
1630 int ovi;
1631 unsigned int vii[3];
1632
1633 for (j=0; j<polyct; j++) {
1634 if (polygon[j]<36) {
1635 int eidx=3*(bag->evti[polygon[j]/3] + 5*si)+polygon[j]%3;
1636 ELL_3V_COPY(tvertA, sctx->edgeicoord+3*eidx)((tvertA)[0] = (sctx->edgeicoord+3*eidx)[0], (tvertA)[1] =
(sctx->edgeicoord+3*eidx)[1], (tvertA)[2] = (sctx->edgeicoord
+3*eidx)[2])
;
1637 tvertA[3]=1.0;
1638 ELL_4V_INCR(tvertAsum,tvertA)((tvertAsum)[0] += (tvertA)[0], (tvertAsum)[1] += (tvertA)[1]
, (tvertAsum)[2] += (tvertA)[2], (tvertAsum)[3] += (tvertA)[3
])
;
1639 if (ELL_3V_DOT(normsum,sctx->edgenorm+3*eidx)((normsum)[0]*(sctx->edgenorm+3*eidx)[0] + (normsum)[1]*(sctx
->edgenorm+3*eidx)[1] + (normsum)[2]*(sctx->edgenorm+3*
eidx)[2])
<0)
1640 ELL_3V_SUB(normsum,normsum,sctx->edgenorm+3*eidx)((normsum)[0] = (normsum)[0] - (sctx->edgenorm+3*eidx)[0],
(normsum)[1] = (normsum)[1] - (sctx->edgenorm+3*eidx)[1],
(normsum)[2] = (normsum)[2] - (sctx->edgenorm+3*eidx)[2])
;
1641 else
1642 ELL_3V_INCR(normsum,sctx->edgenorm+3*eidx)((normsum)[0] += (sctx->edgenorm+3*eidx)[0], (normsum)[1] +=
(sctx->edgenorm+3*eidx)[1], (normsum)[2] += (sctx->edgenorm
+3*eidx)[2])
;
1643 } else {
1644 int fidx=fvti[polygon[j]-36];
1645 ELL_3V_COPY(tvertA, sctx->faceicoord+3*fidx)((tvertA)[0] = (sctx->faceicoord+3*fidx)[0], (tvertA)[1] =
(sctx->faceicoord+3*fidx)[1], (tvertA)[2] = (sctx->faceicoord
+3*fidx)[2])
;
1646 tvertA[3]=1.0;
1647 ELL_4V_INCR(tvertAsum,tvertA)((tvertAsum)[0] += (tvertA)[0], (tvertAsum)[1] += (tvertA)[1]
, (tvertAsum)[2] += (tvertA)[2], (tvertAsum)[3] += (tvertA)[3
])
;
1648 if (ELL_3V_DOT(normsum,sctx->facenorm+3*fidx)((normsum)[0]*(sctx->facenorm+3*fidx)[0] + (normsum)[1]*(sctx
->facenorm+3*fidx)[1] + (normsum)[2]*(sctx->facenorm+3*
fidx)[2])
<0)
1649 ELL_3V_SUB(normsum,normsum,sctx->facenorm+3*fidx)((normsum)[0] = (normsum)[0] - (sctx->facenorm+3*fidx)[0],
(normsum)[1] = (normsum)[1] - (sctx->facenorm+3*fidx)[1],
(normsum)[2] = (normsum)[2] - (sctx->facenorm+3*fidx)[2])
;
1650 else
1651 ELL_3V_INCR(normsum,sctx->facenorm+3*fidx)((normsum)[0] += (sctx->facenorm+3*fidx)[0], (normsum)[1] +=
(sctx->facenorm+3*fidx)[1], (normsum)[2] += (sctx->facenorm
+3*fidx)[2])
;
1652 }
1653 }
1654 /* tvertB in input index space */
1655 ELL_4MV_MUL(tvertB, sctx->txfIdx, tvertAsum)((tvertB)[0]=(sctx->txfIdx)[ 0]*(tvertAsum)[0]+(sctx->txfIdx
)[ 1]*(tvertAsum)[1]+(sctx->txfIdx)[ 2]*(tvertAsum)[2]+(sctx
->txfIdx)[ 3]*(tvertAsum)[3], (tvertB)[1]=(sctx->txfIdx
)[ 4]*(tvertAsum)[0]+(sctx->txfIdx)[ 5]*(tvertAsum)[1]+(sctx
->txfIdx)[ 6]*(tvertAsum)[2]+(sctx->txfIdx)[ 7]*(tvertAsum
)[3], (tvertB)[2]=(sctx->txfIdx)[ 8]*(tvertAsum)[0]+(sctx->
txfIdx)[ 9]*(tvertAsum)[1]+(sctx->txfIdx)[10]*(tvertAsum)[
2]+(sctx->txfIdx)[11]*(tvertAsum)[3], (tvertB)[3]=(sctx->
txfIdx)[12]*(tvertAsum)[0]+(sctx->txfIdx)[13]*(tvertAsum)[
1]+(sctx->txfIdx)[14]*(tvertAsum)[2]+(sctx->txfIdx)[15]
*(tvertAsum)[3])
;
1656 /* tvertA in world space */
1657 ELL_4MV_MUL(tvertA, sctx->shape->ItoW, tvertB)((tvertA)[0]=(sctx->shape->ItoW)[ 0]*(tvertB)[0]+(sctx->
shape->ItoW)[ 1]*(tvertB)[1]+(sctx->shape->ItoW)[ 2]
*(tvertB)[2]+(sctx->shape->ItoW)[ 3]*(tvertB)[3], (tvertA
)[1]=(sctx->shape->ItoW)[ 4]*(tvertB)[0]+(sctx->shape
->ItoW)[ 5]*(tvertB)[1]+(sctx->shape->ItoW)[ 6]*(tvertB
)[2]+(sctx->shape->ItoW)[ 7]*(tvertB)[3], (tvertA)[2]=(
sctx->shape->ItoW)[ 8]*(tvertB)[0]+(sctx->shape->
ItoW)[ 9]*(tvertB)[1]+(sctx->shape->ItoW)[10]*(tvertB)[
2]+(sctx->shape->ItoW)[11]*(tvertB)[3], (tvertA)[3]=(sctx
->shape->ItoW)[12]*(tvertB)[0]+(sctx->shape->ItoW
)[13]*(tvertB)[1]+(sctx->shape->ItoW)[14]*(tvertB)[2]+(
sctx->shape->ItoW)[15]*(tvertB)[3])
;
1658 ELL_4V_HOMOG(tvertA, tvertA)((tvertA)[0] = (tvertA)[0]/(tvertA)[3], (tvertA)[1] = (tvertA
)[1]/(tvertA)[3], (tvertA)[2] = (tvertA)[2]/(tvertA)[3], (tvertA
)[3] = 1.0)
;
1659
1660 ovi = airArrayLenIncr(bag->xyzwArr, 1);
1661 ELL_4V_SET_TT(lpld->xyzw + 4*ovi, float,((lpld->xyzw + 4*ovi)[0] = ((float)((tvertA[0]))), (lpld->
xyzw + 4*ovi)[1] = ((float)((tvertA[1]))), (lpld->xyzw + 4
*ovi)[2] = ((float)((tvertA[2]))), (lpld->xyzw + 4*ovi)[3]
= ((float)((1.0))))
1662 tvertA[0], tvertA[1], tvertA[2], 1.0)((lpld->xyzw + 4*ovi)[0] = ((float)((tvertA[0]))), (lpld->
xyzw + 4*ovi)[1] = ((float)((tvertA[1]))), (lpld->xyzw + 4
*ovi)[2] = ((float)((tvertA[2]))), (lpld->xyzw + 4*ovi)[3]
= ((float)((1.0))))
;
1663 if (sctx->normalsFind) {
1664 double len=ELL_3V_LEN(normsum)(sqrt((((normsum))[0]*((normsum))[0] + ((normsum))[1]*((normsum
))[1] + ((normsum))[2]*((normsum))[2])))
;
1665 airArrayLenIncr(bag->normArr, 1);
1666 ELL_3V_SCALE_TT(lpld->norm + 3*ovi, float, 1.0/len, normsum)((lpld->norm + 3*ovi)[0] = ((float)((1.0/len)*(normsum)[0]
)), (lpld->norm + 3*ovi)[1] = ((float)((1.0/len)*(normsum)
[1])), (lpld->norm + 3*ovi)[2] = ((float)((1.0/len)*(normsum
)[2])))
;
1667 }
1668 sctx->vertNum++;
1669
1670 vii[0]=ovi;
1671 vii[1]=sctx->vidx[3*(bag->evti[polygon[0]/3]+5*si)+polygon[0]%3];
1672 for (j=0; j<polyct; ++j) {
1673 double edgeA[3], edgeB[3];
1674 double norm[3];
1675 vii[2]=vii[1];
1676 if (j==polyct-1) {
1677 if (polygon[0]<36)
1678 vii[1]=sctx->vidx[3*(bag->evti[polygon[0]/3] + 5*si)+
1679 polygon[0]%3];
1680 else vii[1]=sctx->facevidx[fvti[polygon[0]-36]];
1681 } else {
1682 if (polygon[j+1]<36)
1683 vii[1]=sctx->vidx[3*(bag->evti[polygon[j+1]/3] + 5*si)+
1684 polygon[j+1]%3];
1685 else vii[1]=sctx->facevidx[fvti[polygon[j+1]-36]];
1686 }
1687
1688 /* check for degenerate tris */
1689 ELL_3V_SUB(edgeA, lpld->xyzw+4*vii[1], lpld->xyzw+4*vii[0])((edgeA)[0] = (lpld->xyzw+4*vii[1])[0] - (lpld->xyzw+4*
vii[0])[0], (edgeA)[1] = (lpld->xyzw+4*vii[1])[1] - (lpld->
xyzw+4*vii[0])[1], (edgeA)[2] = (lpld->xyzw+4*vii[1])[2] -
(lpld->xyzw+4*vii[0])[2])
;
1690 ELL_3V_SUB(edgeB, lpld->xyzw+4*vii[2], lpld->xyzw+4*vii[0])((edgeB)[0] = (lpld->xyzw+4*vii[2])[0] - (lpld->xyzw+4*
vii[0])[0], (edgeB)[1] = (lpld->xyzw+4*vii[2])[1] - (lpld->
xyzw+4*vii[0])[1], (edgeB)[2] = (lpld->xyzw+4*vii[2])[2] -
(lpld->xyzw+4*vii[0])[2])
;
1691 ELL_3V_CROSS(norm, edgeA, edgeB)((norm)[0] = (edgeA)[1]*(edgeB)[2] - (edgeA)[2]*(edgeB)[1], (
norm)[1] = (edgeA)[2]*(edgeB)[0] - (edgeA)[0]*(edgeB)[2], (norm
)[2] = (edgeA)[0]*(edgeB)[1] - (edgeA)[1]*(edgeB)[0])
;
1692 if (ELL_3V_DOT(norm,norm)((norm)[0]*(norm)[0] + (norm)[1]*(norm)[1] + (norm)[2]*(norm)
[2])
!=0) {
1693 unsigned iii = airArrayLenIncr(bag->indxArr, 3);
1694 ELL_3V_COPY(lpld->indx + iii, vii)((lpld->indx + iii)[0] = (vii)[0], (lpld->indx + iii)[1
] = (vii)[1], (lpld->indx + iii)[2] = (vii)[2])
;
1695 lpld->icnt[0] += 3;
1696 sctx->faceNum++;
1697 }
1698 /* else: degeneracies are caused by intersections that
1699 * more or less coincide with a grid vertex. They
1700 * should be harmless, so just don't create
1701 * deg. triangles in this case */
1702 }
1703 } else if (polyct>2) {
1704 /* insert the actual triangles */
1705 unsigned int vii[3], iii;
1706 if (polygon[0]<36)
1707 vii[0]=sctx->vidx[3*(bag->evti[polygon[0]/3] + 5*si)+
1708 polygon[0]%3];
1709 else vii[0]=sctx->facevidx[fvti[polygon[0]-36]];
1710 if (polygon[1]<36)
1711 vii[1]=sctx->vidx[3*(bag->evti[polygon[1]/3] + 5*si)+
1712 polygon[1]%3];
1713 else vii[1]=sctx->facevidx[fvti[polygon[1]-36]];
1714 if (polygon[2]<36)
1715 vii[2]=sctx->vidx[3*(bag->evti[polygon[2]/3] + 5*si)+
1716 polygon[2]%3];
1717 else vii[2]=sctx->facevidx[fvti[polygon[2]-36]];
1718 iii = airArrayLenIncr(bag->indxArr, 3);
1719 ELL_3V_COPY(lpld->indx + iii, vii)((lpld->indx + iii)[0] = (vii)[0], (lpld->indx + iii)[1
] = (vii)[1], (lpld->indx + iii)[2] = (vii)[2])
;
1720 lpld->icnt[0] += 3;
1721 sctx->faceNum++;
1722
1723 if (polyct==4) {
1724 vii[1]=vii[2];
1725 if (polygon[3]<36)
1726 vii[2]=sctx->vidx[3*(bag->evti[polygon[3]/3] + 5*si)+
1727 polygon[3]%3];
1728 else vii[2]=sctx->facevidx[fvti[polygon[3]-36]];
1729 iii = airArrayLenIncr(bag->indxArr, 3);
1730 ELL_3V_COPY(lpld->indx + iii, vii)((lpld->indx + iii)[0] = (vii)[0], (lpld->indx + iii)[1
] = (vii)[1], (lpld->indx + iii)[2] = (vii)[2])
;
1731 lpld->icnt[0] += 3;
1732 sctx->faceNum++;
1733 }
1734 }
1735 }
1736 }
1737 }
1738 }
1739 }
1740 return 0;
1741}
1742
1743static void
1744shuffleT(seekContext *sctx, baggage *bag) {
1745 unsigned int xi, yi, sx, sy, si;
1746
1747 sx = AIR_CAST(unsigned int, sctx->sx)((unsigned int)(sctx->sx));
1748 sy = AIR_CAST(unsigned int, sctx->sy)((unsigned int)(sctx->sy));
1749
1750 if (sctx->strengthUse) { /* requests need to be cleared initially */
1751 for (yi=0; yi<sy; yi++) {
1752 for (xi=0; xi<sx; xi++) {
1753 sctx->treated[xi+sx*yi] &= 0xFF^_SEEK_TREATED_REQUEST0x01;
1754 }
1755 }
1756 } /* else, the request bits are always on */
1757
1758 for (yi=0; yi<sy; yi++) {
1759 for (xi=0; xi<sx; xi++) {
1760 si = xi + sx*yi;
1761
1762 /* vidx neither needs past nor future context */
1763 if (!bag->zi) {
1764 ELL_3V_SET(sctx->vidx+3*(0+5*si), -1, -1, -1)((sctx->vidx+3*(0+5*si))[0] = (-1), (sctx->vidx+3*(0+5*
si))[1] = (-1), (sctx->vidx+3*(0+5*si))[2] = (-1))
;
1765 ELL_3V_SET(sctx->vidx+3*(1+5*si), -1, -1, -1)((sctx->vidx+3*(1+5*si))[0] = (-1), (sctx->vidx+3*(1+5*
si))[1] = (-1), (sctx->vidx+3*(1+5*si))[2] = (-1))
;
1766 } else {
1767 ELL_3V_COPY(sctx->vidx+3*(0+5*si), sctx->vidx+3*(3+5*si))((sctx->vidx+3*(0+5*si))[0] = (sctx->vidx+3*(3+5*si))[0
], (sctx->vidx+3*(0+5*si))[1] = (sctx->vidx+3*(3+5*si))
[1], (sctx->vidx+3*(0+5*si))[2] = (sctx->vidx+3*(3+5*si
))[2])
;
1768 ELL_3V_COPY(sctx->vidx+3*(1+5*si), sctx->vidx+3*(4+5*si))((sctx->vidx+3*(1+5*si))[0] = (sctx->vidx+3*(4+5*si))[0
], (sctx->vidx+3*(1+5*si))[1] = (sctx->vidx+3*(4+5*si))
[1], (sctx->vidx+3*(1+5*si))[2] = (sctx->vidx+3*(4+5*si
))[2])
;
1769 }
1770 ELL_3V_SET(sctx->vidx+3*(2+5*si),-1,-1,-1)((sctx->vidx+3*(2+5*si))[0] = (-1), (sctx->vidx+3*(2+5*
si))[1] = (-1), (sctx->vidx+3*(2+5*si))[2] = (-1))
;
1771 ELL_3V_SET(sctx->vidx+3*(3+5*si),-1,-1,-1)((sctx->vidx+3*(3+5*si))[0] = (-1), (sctx->vidx+3*(3+5*
si))[1] = (-1), (sctx->vidx+3*(3+5*si))[2] = (-1))
;
1772 ELL_3V_SET(sctx->vidx+3*(4+5*si),-1,-1,-1)((sctx->vidx+3*(4+5*si))[0] = (-1), (sctx->vidx+3*(4+5*
si))[1] = (-1), (sctx->vidx+3*(4+5*si))[2] = (-1))
;
1773
1774 /* strength only has future context */
1775 if (sctx->strengthUse) {
1776 sctx->stng[0 + 2*si] = sctx->stng[1 + 2*si];
1777 sctx->stng[1 + 2*si] = sctx->stngcontext[si];
1778 if (sctx->stng[0+2*si]>sctx->strength ||
1779 sctx->stng[1+2*si]>sctx->strength) {
1780 /* set up to four request bits */
1781 sctx->treated[si] |= _SEEK_TREATED_REQUEST0x01;
1782 if (xi!=0) sctx->treated[xi-1+sx*yi] |= _SEEK_TREATED_REQUEST0x01;
1783 if (yi!=0) sctx->treated[xi+sx*(yi-1)] |= _SEEK_TREATED_REQUEST0x01;
1784 if (xi!=0 && yi!=0)
1785 sctx->treated[xi-1+sx*(yi-1)] |= _SEEK_TREATED_REQUEST0x01;
1786 }
1787 }
1788
1789 /* shuffle grad, hess and t in three steps: move to past context,
1790 * shuffle in slab itself, move from future context */
1791
1792 ELL_3V_COPY(sctx->gradcontext + 3*(0+2*si), sctx->grad + 3*(0+2*si))((sctx->gradcontext + 3*(0+2*si))[0] = (sctx->grad + 3*
(0+2*si))[0], (sctx->gradcontext + 3*(0+2*si))[1] = (sctx->
grad + 3*(0+2*si))[1], (sctx->gradcontext + 3*(0+2*si))[2]
= (sctx->grad + 3*(0+2*si))[2])
;
1793 ELL_3V_COPY(sctx->grad + 3*(0+2*si), sctx->grad + 3*(1+2*si))((sctx->grad + 3*(0+2*si))[0] = (sctx->grad + 3*(1+2*si
))[0], (sctx->grad + 3*(0+2*si))[1] = (sctx->grad + 3*(
1+2*si))[1], (sctx->grad + 3*(0+2*si))[2] = (sctx->grad
+ 3*(1+2*si))[2])
;
1794 ELL_3V_COPY(sctx->grad + 3*(1+2*si), sctx->gradcontext + 3*(1+2*si))((sctx->grad + 3*(1+2*si))[0] = (sctx->gradcontext + 3*
(1+2*si))[0], (sctx->grad + 3*(1+2*si))[1] = (sctx->gradcontext
+ 3*(1+2*si))[1], (sctx->grad + 3*(1+2*si))[2] = (sctx->
gradcontext + 3*(1+2*si))[2])
;
1795
1796 ELL_3M_COPY(sctx->hesscontext + 9*(0+2*si), sctx->hess + 9*(0+2*si))((((sctx->hesscontext + 9*(0+2*si))+0)[0] = ((sctx->hess
+ 9*(0+2*si))+0)[0], ((sctx->hesscontext + 9*(0+2*si))+0)
[1] = ((sctx->hess + 9*(0+2*si))+0)[1], ((sctx->hesscontext
+ 9*(0+2*si))+0)[2] = ((sctx->hess + 9*(0+2*si))+0)[2]), (
((sctx->hesscontext + 9*(0+2*si))+3)[0] = ((sctx->hess +
9*(0+2*si))+3)[0], ((sctx->hesscontext + 9*(0+2*si))+3)[1
] = ((sctx->hess + 9*(0+2*si))+3)[1], ((sctx->hesscontext
+ 9*(0+2*si))+3)[2] = ((sctx->hess + 9*(0+2*si))+3)[2]), (
((sctx->hesscontext + 9*(0+2*si))+6)[0] = ((sctx->hess +
9*(0+2*si))+6)[0], ((sctx->hesscontext + 9*(0+2*si))+6)[1
] = ((sctx->hess + 9*(0+2*si))+6)[1], ((sctx->hesscontext
+ 9*(0+2*si))+6)[2] = ((sctx->hess + 9*(0+2*si))+6)[2]))
;
1797 ELL_3M_COPY(sctx->hess + 9*(0+2*si), sctx->hess + 9*(1+2*si))((((sctx->hess + 9*(0+2*si))+0)[0] = ((sctx->hess + 9*(
1+2*si))+0)[0], ((sctx->hess + 9*(0+2*si))+0)[1] = ((sctx->
hess + 9*(1+2*si))+0)[1], ((sctx->hess + 9*(0+2*si))+0)[2]
= ((sctx->hess + 9*(1+2*si))+0)[2]), (((sctx->hess + 9
*(0+2*si))+3)[0] = ((sctx->hess + 9*(1+2*si))+3)[0], ((sctx
->hess + 9*(0+2*si))+3)[1] = ((sctx->hess + 9*(1+2*si))
+3)[1], ((sctx->hess + 9*(0+2*si))+3)[2] = ((sctx->hess
+ 9*(1+2*si))+3)[2]), (((sctx->hess + 9*(0+2*si))+6)[0] =
((sctx->hess + 9*(1+2*si))+6)[0], ((sctx->hess + 9*(0+
2*si))+6)[1] = ((sctx->hess + 9*(1+2*si))+6)[1], ((sctx->
hess + 9*(0+2*si))+6)[2] = ((sctx->hess + 9*(1+2*si))+6)[2
]))
;
1798 ELL_3M_COPY(sctx->hess + 9*(1+2*si), sctx->hesscontext + 9*(1+2*si))((((sctx->hess + 9*(1+2*si))+0)[0] = ((sctx->hesscontext
+ 9*(1+2*si))+0)[0], ((sctx->hess + 9*(1+2*si))+0)[1] = (
(sctx->hesscontext + 9*(1+2*si))+0)[1], ((sctx->hess + 9
*(1+2*si))+0)[2] = ((sctx->hesscontext + 9*(1+2*si))+0)[2]
), (((sctx->hess + 9*(1+2*si))+3)[0] = ((sctx->hesscontext
+ 9*(1+2*si))+3)[0], ((sctx->hess + 9*(1+2*si))+3)[1] = (
(sctx->hesscontext + 9*(1+2*si))+3)[1], ((sctx->hess + 9
*(1+2*si))+3)[2] = ((sctx->hesscontext + 9*(1+2*si))+3)[2]
), (((sctx->hess + 9*(1+2*si))+6)[0] = ((sctx->hesscontext
+ 9*(1+2*si))+6)[0], ((sctx->hess + 9*(1+2*si))+6)[1] = (
(sctx->hesscontext + 9*(1+2*si))+6)[1], ((sctx->hess + 9
*(1+2*si))+6)[2] = ((sctx->hesscontext + 9*(1+2*si))+6)[2]
))
;
1799
1800 ELL_3M_COPY(sctx->tcontext + 9*(0+2*si), sctx->t + 9*(0+2*si))((((sctx->tcontext + 9*(0+2*si))+0)[0] = ((sctx->t + 9*
(0+2*si))+0)[0], ((sctx->tcontext + 9*(0+2*si))+0)[1] = ((
sctx->t + 9*(0+2*si))+0)[1], ((sctx->tcontext + 9*(0+2*
si))+0)[2] = ((sctx->t + 9*(0+2*si))+0)[2]), (((sctx->tcontext
+ 9*(0+2*si))+3)[0] = ((sctx->t + 9*(0+2*si))+3)[0], ((sctx
->tcontext + 9*(0+2*si))+3)[1] = ((sctx->t + 9*(0+2*si)
)+3)[1], ((sctx->tcontext + 9*(0+2*si))+3)[2] = ((sctx->
t + 9*(0+2*si))+3)[2]), (((sctx->tcontext + 9*(0+2*si))+6)
[0] = ((sctx->t + 9*(0+2*si))+6)[0], ((sctx->tcontext +
9*(0+2*si))+6)[1] = ((sctx->t + 9*(0+2*si))+6)[1], ((sctx
->tcontext + 9*(0+2*si))+6)[2] = ((sctx->t + 9*(0+2*si)
)+6)[2]))
;
1801 ELL_3M_COPY(sctx->t + 9*(0+2*si), sctx->t + 9*(1+2*si))((((sctx->t + 9*(0+2*si))+0)[0] = ((sctx->t + 9*(1+2*si
))+0)[0], ((sctx->t + 9*(0+2*si))+0)[1] = ((sctx->t + 9
*(1+2*si))+0)[1], ((sctx->t + 9*(0+2*si))+0)[2] = ((sctx->
t + 9*(1+2*si))+0)[2]), (((sctx->t + 9*(0+2*si))+3)[0] = (
(sctx->t + 9*(1+2*si))+3)[0], ((sctx->t + 9*(0+2*si))+3
)[1] = ((sctx->t + 9*(1+2*si))+3)[1], ((sctx->t + 9*(0+
2*si))+3)[2] = ((sctx->t + 9*(1+2*si))+3)[2]), (((sctx->
t + 9*(0+2*si))+6)[0] = ((sctx->t + 9*(1+2*si))+6)[0], ((sctx
->t + 9*(0+2*si))+6)[1] = ((sctx->t + 9*(1+2*si))+6)[1]
, ((sctx->t + 9*(0+2*si))+6)[2] = ((sctx->t + 9*(1+2*si
))+6)[2]))
;
1802 ELL_3M_COPY(sctx->t + 9*(1+2*si), sctx->tcontext + 9*(1+2*si))((((sctx->t + 9*(1+2*si))+0)[0] = ((sctx->tcontext + 9*
(1+2*si))+0)[0], ((sctx->t + 9*(1+2*si))+0)[1] = ((sctx->
tcontext + 9*(1+2*si))+0)[1], ((sctx->t + 9*(1+2*si))+0)[2
] = ((sctx->tcontext + 9*(1+2*si))+0)[2]), (((sctx->t +
9*(1+2*si))+3)[0] = ((sctx->tcontext + 9*(1+2*si))+3)[0],
((sctx->t + 9*(1+2*si))+3)[1] = ((sctx->tcontext + 9*(
1+2*si))+3)[1], ((sctx->t + 9*(1+2*si))+3)[2] = ((sctx->
tcontext + 9*(1+2*si))+3)[2]), (((sctx->t + 9*(1+2*si))+6)
[0] = ((sctx->tcontext + 9*(1+2*si))+6)[0], ((sctx->t +
9*(1+2*si))+6)[1] = ((sctx->tcontext + 9*(1+2*si))+6)[1],
((sctx->t + 9*(1+2*si))+6)[2] = ((sctx->tcontext + 9*(
1+2*si))+6)[2]))
;
1803 }
1804 }
1805}
1806
1807static void
1808probeT(seekContext *sctx, baggage *bag, double zi) {
1809 unsigned int xi, yi, sx, sy, si;
1810
1811 sx = AIR_CAST(unsigned int, sctx->sx)((unsigned int)(sctx->sx));
1812 sy = AIR_CAST(unsigned int, sctx->sy)((unsigned int)(sctx->sy));
1813
1814 for (yi=0; yi<sy; yi++) {
1815 for (xi=0; xi<sx; xi++) {
1816 si = xi + sx*yi;
1817
1818 if (sctx->gctx) { /* HEY: need this check, what's the right way? */
1819 _seekIdxProbe(sctx, bag, xi, yi, zi);
1820 }
1821 if (sctx->strengthUse) {
1822 sctx->stngcontext[si] = sctx->strengthSign*sctx->stngAns[0];
1823 if (sctx->strengthSeenMax==AIR_NAN(airFloatQNaN.f)) {
1824 sctx->strengthSeenMax = sctx->stngcontext[si];
1825 }
1826 sctx->strengthSeenMax = AIR_MAX(sctx->strengthSeenMax,((sctx->strengthSeenMax) > (sctx->stngcontext[si]) ?
(sctx->strengthSeenMax) : (sctx->stngcontext[si]))
1827 sctx->stngcontext[si])((sctx->strengthSeenMax) > (sctx->stngcontext[si]) ?
(sctx->strengthSeenMax) : (sctx->stngcontext[si]))
;
1828 }
1829 ELL_3V_COPY(sctx->gradcontext + 3*(1 + 2*si), sctx->gradAns)((sctx->gradcontext + 3*(1 + 2*si))[0] = (sctx->gradAns
)[0], (sctx->gradcontext + 3*(1 + 2*si))[1] = (sctx->gradAns
)[1], (sctx->gradcontext + 3*(1 + 2*si))[2] = (sctx->gradAns
)[2])
;
1830 ELL_3M_COPY(sctx->hesscontext + 9*(1 + 2*si), sctx->hessAns)((((sctx->hesscontext + 9*(1 + 2*si))+0)[0] = ((sctx->hessAns
)+0)[0], ((sctx->hesscontext + 9*(1 + 2*si))+0)[1] = ((sctx
->hessAns)+0)[1], ((sctx->hesscontext + 9*(1 + 2*si))+0
)[2] = ((sctx->hessAns)+0)[2]), (((sctx->hesscontext + 9
*(1 + 2*si))+3)[0] = ((sctx->hessAns)+3)[0], ((sctx->hesscontext
+ 9*(1 + 2*si))+3)[1] = ((sctx->hessAns)+3)[1], ((sctx->
hesscontext + 9*(1 + 2*si))+3)[2] = ((sctx->hessAns)+3)[2]
), (((sctx->hesscontext + 9*(1 + 2*si))+6)[0] = ((sctx->
hessAns)+6)[0], ((sctx->hesscontext + 9*(1 + 2*si))+6)[1] =
((sctx->hessAns)+6)[1], ((sctx->hesscontext + 9*(1 + 2
*si))+6)[2] = ((sctx->hessAns)+6)[2]))
;
1831 _seekHess2T(sctx->tcontext + 9*(1 + 2*si), sctx->evalAns, sctx->evecAns,
1832 sctx->evalDiffThresh, (sctx->type==seekTypeRidgeSurfaceT));
1833 }
1834 }
1835}
1836
1837/* it has now become much easier to make this its own routine
1838 * (vs. adding many more case distinctions to shuffleProbe)
1839 * this only duplicates little (and trivial) code */
1840int
1841_seekShuffleProbeT(seekContext *sctx, baggage *bag) {
1842 /* for high-quality normal estimation, we need two slices of data
1843 * context; to keep the code simple, separate shuffle and probe
1844 * operations - let's hope this doesn't destroy cache performance */
1845
1846 if (!bag->zi) {
1847 if (sctx->strengthUse)
1848 /* before the first round, initialize treated to zero */
1849 memset(sctx->treated, 0, sizeof(char)*sctx->sx*sctx->sy)__builtin___memset_chk (sctx->treated, 0, sizeof(char)*sctx
->sx*sctx->sy, __builtin_object_size (sctx->treated,
0))
;
1850 else /* request all edges */
1851 memset(sctx->treated, _SEEK_TREATED_REQUEST,__builtin___memset_chk (sctx->treated, 0x01, sizeof(char)*
sctx->sx*sctx->sy, __builtin_object_size (sctx->treated
, 0))
1852 sizeof(char)*sctx->sx*sctx->sy)__builtin___memset_chk (sctx->treated, 0x01, sizeof(char)*
sctx->sx*sctx->sy, __builtin_object_size (sctx->treated
, 0))
;
1853 probeT(sctx, bag, 0);
1854 shuffleT(sctx, bag);
1855 probeT(sctx, bag, 1);
1856 }
1857 shuffleT(sctx, bag);
1858 if (bag->zi!=sctx->sz-2)
1859 probeT(sctx, bag, bag->zi+2);
1860
1861 intersectionShuffleProbe(sctx, bag);
1862
1863 return 0;
1864}
1865
1866/* For all vertices in pld, use sctx to probe the strength measure,
1867 * and return the answer (times strengthSign) in nval. The intended
1868 * use is postfiltering (with limnPolyDataClip), which is obligatory
1869 * when using seekType*SurfaceT
1870 *
1871 * Returns 1 and adds a message to biff upon error
1872 * Returns 0 on success, -n when probing n vertices failed (strength
1873 * is set to AIR_NAN for those); note that positions outside the field
1874 * are clamped to lie on its boundary.
1875 *
1876 * This routine assumes that a strength has been set in sctx and
1877 * seekUpdate() has been run.
1878 * This routine does not modify sctx->strengthSeenMax.
1879 */
1880int
1881seekVertexStrength(Nrrd *nval, seekContext *sctx, limnPolyData *pld) {
1882 static const char me[]="seekVertexStrength";
1883 unsigned int i;
1884 double *data;
1885 int E=0;
1886
1887 if (!(nval && sctx && pld)) {
1888 biffAddf(SEEKseekBiffKey, "%s: got NULL pointer", me);
1889 return 1;
1890 }
1891 if (!(sctx->gctx && sctx->pvl)) {
1892 biffAddf(SEEKseekBiffKey, "%s: need sctx with attached gageContext", me);
1893 return 1;
1894 }
1895 if (!sctx->stngAns) {
1896 biffAddf(SEEKseekBiffKey, "%s: no strength item found. Did you enable strengthUse?",
1897 me);
1898 return 1;
1899 }
1900 if (nrrdAlloc_va(nval, nrrdTypeDouble, 1, (size_t) pld->xyzwNum)) {
1901 biffAddf(SEEKseekBiffKey, "%s: could not allocate output", me);
1902 return 1;
1903 }
1904
1905 data = (double*) nval->data;
1906 for (i=0; i<pld->xyzwNum; i++) {
1907 float homog[4];
1908 ELL_4V_HOMOG(homog, pld->xyzw+4*i)((homog)[0] = (pld->xyzw+4*i)[0]/(pld->xyzw+4*i)[3], (homog
)[1] = (pld->xyzw+4*i)[1]/(pld->xyzw+4*i)[3], (homog)[2
] = (pld->xyzw+4*i)[2]/(pld->xyzw+4*i)[3], (homog)[3] =
1.0)
;
1909 if (!gageProbeSpace(sctx->gctx,homog[0],homog[1],homog[2],0,1)) {
1910 *(data++)=*(sctx->stngAns)*sctx->strengthSign;
1911 } else {
1912 *(data++)=AIR_NAN(airFloatQNaN.f);
1913 E--;
1914 }
1915 }
1916 return E;
1917}