12 int32_t
int_4d(
float *sxax[4], int32_t snax[4], int64_t n_block,
float x[4],
13 int64_t ar_off[16],
float ar_wt[16],
float orig_wt[4] )
45 int32_t ndim = 4, base_ix[4];
46 int32_t idim, idim0, idim1, idim2, idim3;
47 int32_t int_off0, int_off1, int_off2, int_off3;
48 int64_t base_off, ixoff;
49 float int_wt0, int_wt1, int_wt2, int_wt3;
52 for( idim = 0; idim < ndim; idim++ )
55 if( sxax[idim][0] < sxax[idim][snax[idim]-1] )
58 bounds[1] = sxax[idim][snax[idim]-1];
62 bounds[0] = sxax[idim][snax[idim]-1];
71 delta[idim] = sxax[idim][1] - sxax[idim][0];
72 base = (
x[idim] - sxax[idim][0] ) /
delta[idim];
76 delta[idim] = sxax[idim][2] - sxax[idim][1];
79 base_ix[idim] = (int32_t)
base;
80 frac_ix[idim] = fmod( (
double)
base, 1. );
81 orig_wt[idim] = frac_ix[idim];
84 base_off = base_ix[0] + snax[0] *
85 ( base_ix[1] + snax[1] * ( base_ix[2] + snax[2] * base_ix[3] ) );
90 for( idim0 = 0; idim0 < 2; idim0++ )
92 int_wt0 = ( idim0 == 0 ) ? 1 - frac_ix[0] : frac_ix[0];
93 int_off0 = ( idim0 == 0 ) ? 0 : 1;
94 for( idim1 = 0; idim1 < 2; idim1++ )
96 int_wt1 = ( idim1 == 0 ) ? 1 - frac_ix[1] : frac_ix[1];
97 int_off1 = int_off0 + ( ( idim1 == 0 ) ? 0 : snax[0] );
98 for( idim2 = 0; idim2 < 2; idim2++ )
100 int_wt2 = ( idim2 == 0 ) ? 1 - frac_ix[2] : frac_ix[2];
101 int_off2 = int_off1 + ( ( idim2 == 0 ) ? 0 : snax[0] * snax[1] );
102 for( idim3 = 0; idim3 < 2; idim3++ )
104 int_wt3 = ( idim3 == 0 ) ? 1 - frac_ix[3] : frac_ix[3];
105 int_off3 = int_off2 + ( ( idim3 == 0 ) ?
106 0 : snax[0] * snax[1] * snax[2] );
108 ar_off[ixoff] = n_block * ( base_off + int_off3 );
109 ar_wt[ixoff++] = int_wt3 * int_wt2 * int_wt1 * int_wt0;
117 int32_t
iint_3d( int32_t snax[3],
double x[3], int64_t ar_off[9],
118 float ar_wt[9],
float orig_wt[3] )
142 int32_t ndim = 3, base_ix[3];
143 int32_t idim, idim0, idim1, idim2;
144 int32_t int_off0, int_off1, int_off2;
145 int64_t base_off, ixoff;
146 float int_wt0, int_wt1, int_wt2;
149 for( idim = 0; idim < ndim; idim++ )
152 bounds[1] = snax[idim] - 1;
165 base_ix[idim] = (int32_t)
base;
166 frac_ix[idim] = fmod( (
double)
base, 1. );
167 orig_wt[idim] = frac_ix[idim];
170 base_off = base_ix[0] + snax[0] * ( base_ix[1] + snax[1] * base_ix[2] );
175 for( idim0 = 0; idim0 < 2; idim0++ )
177 int_wt0 = ( idim0 == 0 ) ? 1 - frac_ix[0] : frac_ix[0];
178 int_off0 = ( ( idim0 == 0 ) || ( base_ix[0] == snax[0] - 1 ) ) ? 0 : 1;
179 for( idim1 = 0; idim1 < 2; idim1++ )
181 int_wt1 = ( idim1 == 0 ) ? 1 - frac_ix[1] : frac_ix[1];
182 int_off1 = int_off0 +
183 ( ( ( idim1 == 0 ) || ( base_ix[1] == snax[1] - 1 ) ) ? 0 : snax[0] );
184 for( idim2 = 0; idim2 < 2; idim2++ )
186 int_wt2 = ( idim2 == 0 ) ? 1 - frac_ix[2] : frac_ix[2];
187 int_off2 = int_off1 +
188 ( ( ( idim2 == 0 ) || ( base_ix[2] == snax[2] - 1 ) ) ?
189 0 : snax[0] * snax[1] );
190 ar_off[ixoff] = ( base_off + int_off2 );
191 ar_wt[ixoff++] = int_wt2 * int_wt1 * int_wt0;