9 static double det_2(
const double A[4]) {
return A[0]*A[3]-A[1]*A[2]; }
11 static double quad_2(
const double x0,
const double g[2],
const double H[3],
14 return x0 + (g[0]*r[0]+g[1]*r[1])
15 + ( r[0] * (H[0]*r[0]+H[1]*r[1])
16 + r[1] * (H[1]*r[0]+H[2]*r[1]) )/2;
19 static void quad_2_grad(
double grad[2],
const double g[2],
const double H[3],
22 grad[0] = g[0] + (H[0]*r[0]+H[1]*r[1]);
23 grad[1] = g[1] + (H[1]*r[0]+H[2]*r[1]);
26 static double quad_2_jac(
const double g[4],
const double H[6],
35 static double det_3(
const double A[9])
37 const double a = A[4]*A[8]-A[5]*A[7],
38 b = A[5]*A[6]-A[3]*A[8],
39 c = A[3]*A[7]-A[4]*A[6];
40 return A[0]*a+A[1]*b+A[2]*c;
43 static double quad_3(
const double x0,
const double g[3],
const double H[6],
46 return x0 + (g[0]*r[0]+g[1]*r[1]+g[2]*r[2])
47 + ( r[0] * (H[0]*r[0]+H[1]*r[1]+H[2]*r[2])
48 + r[1] * (H[1]*r[0]+H[3]*r[1]+H[4]*r[2])
49 + r[2] * (H[2]*r[0]+H[4]*r[1]+H[5]*r[2]) )/2;
52 static void quad_3_grad(
double grad[3],
const double g[3],
const double H[6],
55 grad[0] = g[0] + (H[0]*r[0]+H[1]*r[1]+H[2]*r[2]);
56 grad[1] = g[1] + (H[1]*r[0]+H[3]*r[1]+H[4]*r[2]);
57 grad[2] = g[2] + (H[2]*r[0]+H[4]*r[1]+H[5]*r[2]);
60 static double quad_3_jac(
const double g[9],
const double H[18],
71 const double *
zr,
unsigned nr,
72 const double *
zs,
unsigned ns)
75 static double z4[4], lob_bnd_data[16+3*4*(2*16+1)],
78 double x0[2], g[4], H[6], jac[4*4], r[2];
86 for(i=0;i<4;++
i) g[i] = -1+2*(rand()/(
double)RAND_MAX);
87 for(i=0;i<6;++
i) H[i] =.5*(-1+2*(rand()/(
double)RAND_MAX));
88 for(j=0;j<4;++j) { r[1] = z4[j];
89 for(i=0;i<4;++
i) { r[0] = z4[
i];
93 jr =
lob_bnd_2(lob_bnd_data,4,16, lob_bnd_data,4,16, jac,
work);
96 for(i=0;i< 2;++
i) x0[i] = -1+2*(rand()/(
double)RAND_MAX);
97 for(j=0;j<
ns;++j) { r[1] = zs[j];
98 for(i=0;i<
nr;++
i) { r[0] = zr[
i];
99 x[j*nr+
i] =
quad_2(x0[0],g ,H ,r);
100 y[j*nr+
i] =
quad_2(x0[1],g+2,H+3,r);
106 const double *
zr,
unsigned nr,
107 const double *
zs,
unsigned ns,
108 const double *
zt,
unsigned nt)
111 static double z4[4], lob_bnd_data[16+3*4*(2*16+1)],
112 work[2*16*16*(4+16+1)];
114 double x0[3], g[9], H[18], jac[4*4*4], r[3];
122 for(i=0;i< 9;++
i) g[i] = -1+2*(rand()/(
double)RAND_MAX);
123 for(i=0;i<18;++
i) H[i] =.5*(-1+2*(rand()/(
double)RAND_MAX));
124 for(k=0;k<4;++k) { r[2] = z4[k];
125 for(j=0;j<4;++j) { r[1] = z4[j];
126 for(i=0;i<4;++
i) { r[0] = z4[
i];
131 jr =
lob_bnd_3(lob_bnd_data,4,16, lob_bnd_data,4,16, lob_bnd_data,4,16,
134 }
while(jr.
max*jr.
min<=0);
135 for(i=0;i< 3;++
i) x0[i] = -1+2*(rand()/(
double)RAND_MAX);
136 for(k=0;k<nt;++k) { r[2] = zt[k];
137 for(j=0;j<
ns;++j) { r[1] = zs[j];
138 for(i=0;i<
nr;++
i) { r[0] = zr[
i];
139 x[(k*ns+j)*nr+i] =
quad_3(x0[0],g ,H ,r);
140 y[(k*ns+j)*nr+i] =
quad_3(x0[1],g+3,H+ 6,r);
141 z[(k*ns+j)*nr+i] =
quad_3(x0[2],g+6,H+12,r);
147 #define PI 3.1415926535897932384626433832795028841971693993751058209749445923
150 const double *
zr,
unsigned nr,
151 const double *
zs,
unsigned ns,
152 const double *
zt,
unsigned nt,
int type)
155 for(k=0;k<nt;++k)
for(j=0;j<
ns;++j)
for(i=0;i<
nr;++
i) {
156 double dx=0,dy=0,dz=0;
158 case 0: dx = cos(
PI*zs[j]/2)*cos(
PI*zt[k]/2);
break;
159 case 1: dx = -cos(
PI*zs[j]/2)*cos(
PI*zt[k]/2);
break;
160 case 2: dy = cos(
PI*zt[k]/2)*cos(
PI*zr[i]/2);
break;
161 case 3: dy = -cos(
PI*zt[k]/2)*cos(
PI*zr[i]/2);
break;
162 case 4: dz = cos(
PI*zr[i]/2)*cos(
PI*zs[j]/2);
break;
163 case 5: dz = -cos(
PI*zr[i]/2)*cos(
PI*zs[j]/2);
break;
165 x[(k*ns+j)*nr+i] = zr[i] + dx;
166 y[(k*ns+j)*nr+i] = zs[j] + dy;
167 z[(k*ns+j)*nr+i] = zt[k] + dz;
static double quad_2_jac(const double g[4], const double H[6], const double r[2])
static void quad_3_grad(double grad[3], const double g[3], const double H[6], const double r[3])
static double det_2(const double A[4])
void rand_elt_3(double *x, double *y, double *z, const double *zr, unsigned nr, const double *zs, unsigned ns, const double *zt, unsigned nt)
void rand_elt_2(double *x, double *y, const double *zr, unsigned nr, const double *zs, unsigned ns)
static double quad_2(const double x0, const double g[2], const double H[3], const double r[2])
void bubble_elt(double *x, double *y, double *z, const double *zr, unsigned nr, const double *zs, unsigned ns, const double *zt, unsigned nt, int type)
static void quad_2_grad(double grad[2], const double g[2], const double H[3], const double r[2])
static double quad_3_jac(const double g[9], const double H[18], const double r[3])
static const unsigned nr[3]
static double work[TNR *NS]
static double quad_3(const double x0, const double g[3], const double H[6], const double r[3])
static double det_3(const double A[9])
establishes some macros to establish naming conventions
static double y[NR *NS *NT *N]
static double z[NR *NS *NT *N]