13 errorQuda(
"CPU fields do not support half precision");
16 errorQuda(
"CPU fields do not support non-zero padding");
22 errorQuda(
"10-reconstruction only supported with MILC gauge order");
29 for (
int d=0; d<
nDim; d++) {
34 memset(gauge[d], 0, nbytes);
37 gauge[d] = ((
void**)param.
gauge)[d];
52 gauge = (
void**) param.
gauge;
63 for (
int i=0; i<
nDim; i++) {
74 for (
int d=0; d<
nDim; d++) {
87 for (
int i=0; i<
nDim; i++) {
95 template <
typename Float>
97 for (
int ic=0; ic<3; ic++) {
98 for (
int jc=0; jc<3; jc++) {
99 for (
int r=0; r<2; r++) {
100 gT[(ic*3+jc)*2+r] = g[(jc*3+ic)*2+r];
107 template <
typename Float>
113 errorQuda(
"packGhost not supported for %d gauge field order", order);
116 int XYZ=X[0]*X[1]*X[2];
121 int A[4], B[4], C[4];
124 A[0] = X[3]; B[0] = X[2]; C[0] = X[1];
127 A[1] = X[3]; B[1] = X[2]; C[1] = X[0];
130 A[2] = X[3]; B[2] = X[1]; C[2] = X[0];
133 A[3] = X[2]; B[3] = X[1]; C[3] = X[0];
145 const Float* even_src;
146 const Float* odd_src;
150 int mu_offset = X[0]/2 + 2;
151 for (
int i=1; i<4; i++) mu_offset *= (X[i] + 2);
158 even_src = gauge[
dir];
168 even_dst = ghost[
dir];
172 odd_dst = ghost[
dir];
175 int even_dst_index = 0;
176 int odd_dst_index = 0;
180 for(d = X[
dir]- nFace; d < X[
dir]; d++){
181 for(a = 0; a < A[
dir]; a++){
182 for(b = 0; b < B[
dir]; b++){
183 for(c = 0; c < C[
dir]; c++){
186 index = 4*index +
dir;
187 int oddness = (a+b+c+d)%2;
193 for(
int i=0; i<18; i++){
194 even_dst[18*even_dst_index+i] = gT[i];
197 for(
int i=0;i < 18;i++){
198 even_dst[18*even_dst_index+i] = even_src[18*index + i];
207 for(
int i=0; i<18; i++){
208 odd_dst[18*odd_dst_index+i] = gT[i];
211 for(
int i=0;i < 18;i++){
212 odd_dst[18*odd_dst_index+i] = odd_src[18*index + i];
222 assert( even_dst_index == nFace*surfaceCB[
dir]);
223 assert( odd_dst_index == nFace*surfaceCB[dir]);
235 for (
int d=0; d<
nDim; d++) {
250 for (
int d=0; d<
nDim; d++) {
259 errorQuda(
"Setting gauge pointer is only allowed when cpu gauge"
260 "is of QUDA_REFERENCE_FIELD_CREATE type\n");