25 cnst ZERO = 0.0, ONE = 1.;
26 cnst c_light = 0.000299792458;
29 c1 = 1., c2 = 2., c3 = 3., c4 = 4., c6 = 6., c9 = 9., c15 = 15., c18 = 18., c45 = 45.,
30 c2i = 1./2., c3i = 1./3., c6i = 1./6., c12i = 1./12.;
33 const fvec dz = (z_out - T.
z);
34 const fvec dz2 = dz*dz;
35 const fvec dz3 = dz2*dz;
47 const fvec xx31 = xx*c3+c1;
48 const fvec xx159 = xx*c15+c9;
50 const fvec Ay = -xx-c1;
51 const fvec Ayy = x*(xx*c3+c3);
52 const fvec Ayz = -c2*xy;
53 const fvec Ayyy = -(c15*xx*xx+c18*xx+c3);
55 const fvec Ayy_x = c3*xx31;
56 const fvec Ayyy_x = -x4*xx159;
58 const fvec Bx = yy+c1;
59 const fvec Byy = y*xx31;
60 const fvec Byz = c2*xx+c1;
61 const fvec Byyy = -xy*xx159;
63 const fvec Byy_x = c6*xy;
64 const fvec Byyy_x = -y*(c45*xx+c9);
65 const fvec Byyy_y = -x*xx159;
69 const fvec t2 = c1 + xx + yy;
71 const fvec h = qp0*c_light;
88 const fvec sx = ( Fx0 + Fx1*c2i + Fx2*c3i );
89 const fvec sy = ( Fy0 + Fy1*c2i + Fy2*c3i );
90 const fvec sz = ( Fz0 + Fz1*c2i + Fz2*c3i );
92 const fvec Sx = ( Fx0*c2i + Fx1*c6i + Fx2*c12i );
93 const fvec Sy = ( Fy0*c2i + Fy1*c6i + Fy2*c12i );
94 const fvec Sz = ( Fz0*c2i + Fz1*c6i + Fz2*c12i );
100 c00 = 30.*6.*
d, c01 = 30.*2.*
d, c02 = 30.*
d,
101 c10 = 3.*40.*
d, c11 = 3.*15.*
d, c12 = 3.*8.*
d,
102 c20 = 2.*45.*
d, c21 = 2.*2.*9.*
d, c22 = 2.*2.*5.*
d;
103 syz = Fy0*( c00*Fz0 + c01*Fz1 + c02*Fz2)
104 + Fy1*( c10*Fz0 + c11*Fz1 + c12*Fz2)
105 + Fy2*( c20*Fz0 + c21*Fz1 + c22*Fz2) ;
112 c00 = 21.*20.*
d, c01 = 21.*5.*
d, c02 = 21.*2.*
d,
113 c10 = 7.*30.*
d, c11 = 7.*9.*
d, c12 = 7.*4.*
d,
114 c20 = 2.*63.*
d, c21 = 2.*21.*
d, c22 = 2.*10.*
d;
115 Syz = Fy0*( c00*Fz0 + c01*Fz1 + c02*Fz2 )
116 + Fy1*( c10*Fz0 + c11*Fz1 + c12*Fz2 )
117 + Fy2*( c20*Fz0 + c21*Fz1 + c22*Fz2 ) ;
120 const fvec syy = sy*sy*c2i;
121 const fvec syyy = syy*sy*c3i;
126 d= 1./2520., c00= 420.*
d, c01= 21.*15.*
d, c02= 21.*8.*
d,
127 c03= 63.*
d, c04= 70.*
d, c05= 20.*
d;
128 Syy = Fy0*(c00*Fy0+c01*Fy1+c02*Fy2) + Fy1*(c03*Fy1+c04*Fy2) + c05*Fy2*Fy2 ;
135 c000 = 7560*
d, c001 = 9*1008*
d, c002 = 5*1008*
d,
136 c011 = 21*180*
d, c012 = 24*180*
d, c022 = 7*180*
d,
137 c111 = 540*
d, c112 = 945*
d, c122 = 560*
d, c222 = 112*
d;
138 const fvec Fy22 = Fy2*Fy2;
139 Syyy = Fy0*( Fy0*(c000*Fy0+c001*Fy1+c002*Fy2)+ Fy1*(c011*Fy1+c012*Fy2)+c022*Fy22 )
140 + Fy1*( Fy1*(c111*Fy1+c112*Fy2)+c122*Fy22) + c222*Fy22*Fy2 ;
144 const fvec sA1 = sx*xy + sy*Ay + sz*y ;
145 const fvec sA1_x = sx*y - sy*x2 ;
146 const fvec sA1_y = sx*x + sz ;
148 const fvec sB1 = sx*Bx - sy*xy - sz*x ;
149 const fvec sB1_x = -sy*y - sz ;
150 const fvec sB1_y = sx*y2 - sy*x ;
152 const fvec SA1 = Sx*xy + Sy*Ay + Sz*y ;
153 const fvec SA1_x = Sx*y - Sy*x2 ;
154 const fvec SA1_y = Sx*x + Sz;
156 const fvec SB1 = Sx*Bx - Sy*xy - Sz*x ;
157 const fvec SB1_x = -Sy*y - Sz;
158 const fvec SB1_y = Sx*y2 - Sy*x;
161 const fvec sA2 = syy*Ayy + syz*Ayz ;
162 const fvec sA2_x = syy*Ayy_x - syz*y2 ;
163 const fvec sA2_y = -syz*x2 ;
164 const fvec sB2 = syy*Byy + syz*Byz ;
165 const fvec sB2_x = syy*Byy_x + syz*x4 ;
166 const fvec sB2_y = syy*xx31 ;
168 const fvec SA2 = Syy*Ayy + Syz*Ayz ;
169 const fvec SA2_x = Syy*Ayy_x - Syz*y2 ;
170 const fvec SA2_y = -Syz*x2 ;
171 const fvec SB2 = Syy*Byy + Syz*Byz ;
172 const fvec SB2_x = Syy*Byy_x + Syz*x4 ;
173 const fvec SB2_y = Syy*xx31 ;
175 const fvec sA3 = syyy*Ayyy ;
176 const fvec sA3_x = syyy*Ayyy_x;
177 const fvec sB3 = syyy*Byyy ;
178 const fvec sB3_x = syyy*Byyy_x;
179 const fvec sB3_y = syyy*Byyy_y;
182 const fvec SA3 = Syyy*Ayyy ;
183 const fvec SA3_x = Syyy*Ayyy_x;
184 const fvec SB3 = Syyy*Byyy ;
185 const fvec SB3_x = Syyy*Byyy_x;
186 const fvec SB3_y = Syyy*Byyy_y;
188 const fvec ht1 = ht*dz;
189 const fvec ht2 = ht*ht*dz2;
190 const fvec ht3 = ht*ht*ht*dz3;
191 const fvec ht1sA1 = ht1*sA1;
192 const fvec ht1sB1 = ht1*sB1;
193 const fvec ht1SA1 = ht1*SA1;
194 const fvec ht1SB1 = ht1*SB1;
195 const fvec ht2sA2 = ht2*sA2;
196 const fvec ht2SA2 = ht2*SA2;
197 const fvec ht2sB2 = ht2*sB2;
198 const fvec ht2SB2 = ht2*SB2;
199 const fvec ht3sA3 = ht3*sA3;
200 const fvec ht3sB3 = ht3*sB3;
201 const fvec ht3SA3 = ht3*SA3;
202 const fvec ht3SB3 = ht3*SB3;
204 fvec initialised = ZERO;
207 const fvec zero = ZERO;
208 initialised =
fvec( zero < *w );
212 const fvec one = ONE;
213 const fvec zero = ZERO;
214 initialised =
fvec( zero < one );
217 T.
x += (((x + ht1SA1 + ht2SA2 + ht3SA3)*dz)&initialised) ;
218 T.
y += (((y + ht1SB1 + ht2SB2 + ht3SB3)*dz)&initialised) ;
219 T.
tx += ((ht1sA1 + ht2sA2 + ht3sA3)&initialised);
220 T.
ty += ((ht1sB1 + ht2sB2 + ht3sB3)&initialised);
221 T.
z += ((dz)&initialised);
223 const fvec ctdz = c_light*t*dz;
224 const fvec ctdz2 = c_light*t*dz2;
226 const fvec dqp = qp - qp0;
228 const fvec xt2i = x*t2i;
229 const fvec yt2i = y*t2i;
230 const fvec tmp0 = ht1SA1 + c2*ht2SA2 + c3*ht3SA3;
231 const fvec tmp1 = ht1SB1 + c2*ht2SB2 + c3*ht3SB3;
232 const fvec tmp2 = ht1sA1 + c2*ht2sA2 + c3*ht3sA3;
233 const fvec tmp3 = ht1sB1 + c2*ht2sB2 + c3*ht3sB3;
235 const fvec j02 = dz*(c1 + xt2i*tmp0 + ht1*SA1_x + ht2*SA2_x + ht3*SA3_x);
236 const fvec j12 = dz*( xt2i*tmp1 + ht1*SB1_x + ht2*SB2_x + ht3*SB3_x);
237 const fvec j22 = c1 + xt2i*tmp2 + ht1*sA1_x + ht2*sA2_x + ht3*sA3_x ;
238 const fvec j32 = xt2i*tmp3 + ht1*sB1_x + ht2*sB2_x + ht3*sB3_x ;
240 const fvec j03 = dz*( yt2i*tmp0 + ht1*SA1_y + ht2*SA2_y );
241 const fvec j13 = dz*(c1 + yt2i*tmp1 + ht1*SB1_y + ht2*SB2_y + ht3*SB3_y );
242 const fvec j23 = yt2i*tmp2 + ht1*sA1_y + ht2*sA2_y ;
243 const fvec j33 = c1 + yt2i*tmp3 + ht1*sB1_y + ht2*sB2_y + ht3*sB3_y ;
245 const fvec j04 = ctdz2*( SA1 + c2*ht1*SA2 + c3*ht2*SA3 );
246 const fvec j14 = ctdz2*( SB1 + c2*ht1*SB2 + c3*ht2*SB3 );
247 const fvec j24 = ctdz *( sA1 + c2*ht1*sA2 + c3*ht2*sA3 );
248 const fvec j34 = ctdz *( sB1 + c2*ht1*sB2 + c3*ht2*sB3 );
253 T.
x +=((j04*dqp)&initialised);
254 T.
y +=((j14*dqp)&initialised);
255 T.
tx+=((j24*dqp)&initialised);
256 T.
ty+=((j34*dqp)&initialised);
274 const fvec cj22 = T.
C22*j22 + T.
C32*j23 + c42*j24;
275 const fvec cj32 = T.
C32*j22 + T.
C33*j23 + c43*j24;
279 const fvec cj23 = T.
C22*j32 + T.
C32*j33 + c42*j34;
280 const fvec cj33 = T.
C32*j32 + T.
C33*j33 + c43*j34;
282 T.
C40+= ((c42*j02 + c43*j03 + T.
C44*j04) & initialised);
283 T.
C41+= ((c42*j12 + c43*j13 + T.
C44*j14) & initialised);
284 T.
C42 = ((c42*j22 + c43*j23 + T.
C44*j24) & initialised) + (T.
C42&(!initialised));
285 T.
C43 = ((c42*j32 + c43*j33 + T.
C44*j34) & initialised) + (T.
C43&(!initialised));
287 T.
C00 = ((cj00 + j02*cj20 + j03*cj30 + j04*T.
C40) & initialised) + (T.
C00&(!initialised));
288 T.
C10 = ((cj01 + j02*cj21 + j03*cj31 + j04*T.
C41) & initialised) + (T.
C10&(!initialised));
289 T.
C11 = ((cj11 + j12*cj21 + j13*cj31 + j14*T.
C41) & initialised) + (T.
C11&(!initialised));
291 T.
C20 = ((j22*cj20 + j23*cj30 + j24*T.
C40) & initialised) + (T.
C20&(!initialised)) ;
292 T.
C30 = ((j32*cj20 + j33*cj30 + j34*T.
C40) & initialised) + (T.
C30&(!initialised)) ;
293 T.
C21 = ((j22*cj21 + j23*cj31 + j24*T.
C41) & initialised) + (T.
C21&(!initialised)) ;
294 T.
C31 = ((j32*cj21 + j33*cj31 + j34*T.
C41) & initialised) + (T.
C31&(!initialised)) ;
295 T.
C22 = ((j22*cj22 + j23*cj32 + j24*T.
C42) & initialised) + (T.
C22&(!initialised)) ;
296 T.
C32 = ((j32*cj22 + j33*cj32 + j34*T.
C42) & initialised) + (T.
C32&(!initialised)) ;
297 T.
C33 = ((j32*cj23 + j33*cj33 + j34*T.
C43) & initialised) + (T.
C33&(!initialised)) ;
465 cnst c_light = 0.000299792458;
468 c1 = 1., c2 = 2., c3 = 3., c4 = 4., c6 = 6., c9 = 9., c15 = 15., c18 = 18., c45 = 45.,
469 c2i = 1./2., c6i = 1./6., c12i = 1./12.;
484 fvec xx31 = xx*c3+c1;
485 fvec xx159 = xx*c15+c9;
488 fvec Ayy = x*(xx*c3+c3);
490 fvec Ayyy = -(c15*xx*xx+c18*xx+c3);
492 fvec Ayy_x = c3*xx31;
493 fvec Ayyy_x = -x4*xx159;
498 fvec Byyy = -xy*xx159;
501 fvec Byyy_x = -y*(c45*xx+c9);
502 fvec Byyy_y = -x*xx159;
506 fvec t2 = c1 + xx + yy;
514 fvec Fx2 = F.cx2*dz2;
517 fvec Fy2 = F.cy2*dz2;
520 fvec Fz2 = F.cz2*dz2;
524 fvec Sx = ( Fx0*c2i + Fx1*c6i + Fx2*c12i );
525 fvec Sy = ( Fy0*c2i + Fy1*c6i + Fy2*c12i );
526 fvec Sz = ( Fz0*c2i + Fz1*c6i + Fz2*c12i );
532 c00 = 21.*20.*
d, c01 = 21.*5.*
d, c02 = 21.*2.*
d,
533 c10 = 7.*30.*
d, c11 = 7.*9.*
d, c12 = 7.*4.*
d,
534 c20 = 2.*63.*
d, c21 = 2.*21.*
d, c22 = 2.*10.*
d;
535 Syz = Fy0*( c00*Fz0 + c01*Fz1 + c02*Fz2 )
536 + Fy1*( c10*Fz0 + c11*Fz1 + c12*Fz2 )
537 + Fy2*( c20*Fz0 + c21*Fz1 + c22*Fz2 ) ;
543 d= 1./2520., c00= 420.*
d, c01= 21.*15.*
d, c02= 21.*8.*
d,
544 c03= 63.*
d, c04= 70.*
d, c05= 20.*
d;
545 Syy = Fy0*(c00*Fy0+c01*Fy1+c02*Fy2) + Fy1*(c03*Fy1+c04*Fy2) + c05*Fy2*Fy2 ;
552 c000 = 7560*
d, c001 = 9*1008*
d, c002 = 5*1008*
d,
553 c011 = 21*180*
d, c012 = 24*180*
d, c022 = 7*180*
d,
554 c111 = 540*
d, c112 = 945*
d, c122 = 560*
d, c222 = 112*
d;
556 Syyy = Fy0*( Fy0*(c000*Fy0+c001*Fy1+c002*Fy2)+ Fy1*(c011*Fy1+c012*Fy2)+c022*Fy22 )
557 + Fy1*( Fy1*(c111*Fy1+c112*Fy2)+c122*Fy22) + c222*Fy22*Fy2 ;
560 fvec SA1 = Sx*xy + Sy*Ay + Sz*y ;
561 fvec SA1_x = Sx*y - Sy*x2 ;
562 fvec SA1_y = Sx*x + Sz;
564 fvec SB1 = Sx*Bx - Sy*xy - Sz*x ;
565 fvec SB1_x = -Sy*y - Sz;
566 fvec SB1_y = Sx*y2 - Sy*x;
568 fvec SA2 = Syy*Ayy + Syz*Ayz ;
569 fvec SA2_x = Syy*Ayy_x - Syz*y2 ;
570 fvec SA2_y = -Syz*x2 ;
571 fvec SB2 = Syy*Byy + Syz*Byz ;
572 fvec SB2_x = Syy*Byy_x + Syz*x4 ;
573 fvec SB2_y = Syy*xx31 ;
575 fvec SA3 = Syyy*Ayyy ;
576 fvec SA3_x = Syyy*Ayyy_x;
577 fvec SB3 = Syyy*Byyy ;
578 fvec SB3_x = Syyy*Byyy_x;
579 fvec SB3_y = Syyy*Byyy_y;
582 fvec ht2 = ht*ht*dz2;
583 fvec ht3 = ht*ht*ht*dz3;
584 fvec ht1SA1 = ht1*SA1;
585 fvec ht1SB1 = ht1*SB1;
586 fvec ht2SA2 = ht2*SA2;
587 fvec ht2SB2 = ht2*SB2;
588 fvec ht3SA3 = ht3*SA3;
589 fvec ht3SB3 = ht3*SB3;
591 extrDx = ( x + ht1SA1 + ht2SA2 + ht3SA3 )*dz ;
592 extrDy = ( y + ht1SB1 + ht2SB2 + ht3SB3 )*dz ;
594 fvec ctdz2 = c_light*t*dz2;
599 fvec tmp0 = ht1SA1 + c2*ht2SA2 + c3*ht3SA3;
600 fvec tmp1 = ht1SB1 + c2*ht2SB2 + c3*ht3SB3;
602 extrJ[0] = dz*(c1 + xt2i*tmp0 + ht1*SA1_x + ht2*SA2_x + ht3*SA3_x);
603 extrJ[1] = dz*( yt2i*tmp0 + ht1*SA1_y + ht2*SA2_y );
604 extrJ[2] = ctdz2*( SA1 + c2*ht1*SA2 + c3*ht2*SA3 );
605 extrJ[3] = dz*( xt2i*tmp1 + ht1*SB1_x + ht2*SB2_x + ht3*SB3_x);
606 extrJ[4] = dz*(c1 + yt2i*tmp1 + ht1*SB1_y + ht2*SB2_y + ht3*SB3_y );
607 extrJ[5] = ctdz2*( SB1 + c2*ht1*SB2 + c3*ht2*SB3 );