 |
JDFTx
1.1.1
|
|
20 #ifndef JDFTX_CORE_LOOPMACROS_H 21 #define JDFTX_CORE_LOOPMACROS_H 24 #define THREAD_rLoop(code) \ 34 i++; if(i==iStop) break; \ 47 #define COMPUTE_rIndices \ 49 threadIdx.z + zBlock * blockDim.z, \ 52 if(iv[0]>=S[0] || iv[1]>=S[1] || iv[2]>=S[2]) return; \ 53 size_t i = iv[2] + S[2]*size_t(iv[1] + S[1]*iv[0]); 57 #define THREAD_fullGspaceLoop(code) \ 59 vector3<int> iG( i / (S[2]*S[1]), (i/S[2]) % S[1], i % S[2] ); \ 60 for(int j=0; j<3; j++) if(2*iG[j]>S[j]) iG[j]-=S[j]; \ 65 i++; if(i==iStop) break; \ 67 if(2*iG[2]>S[2]) iG[2]-=S[2]; \ 70 if(2*iG[1]>S[1]) iG[1]-=S[1]; \ 73 if(2*iG[0]>S[0]) iG[0]-=S[0]; \ 80 #define COMPUTE_fullGindices \ 82 zBlock * blockDim.z + threadIdx.z, \ 85 if(iG[0]>=S[0] || iG[1]>=S[1] || iG[2]>=S[2]) return; \ 86 size_t i = iG[2] + S[2]*size_t(iG[1] + S[1]*iG[0]); \ 87 for(int j=0; j<3; j++) if(2*iG[j]>S[j]) iG[j]-=S[j]; 91 #define THREAD_halfGspaceLoop(code) \ 92 int size2 = S[2]/2+1; \ 94 vector3<int> iG( i / (size2*S[1]), (i/size2) % S[1], i % size2 ); \ 95 for(int j=0; j<3; j++) if(2*iG[j]>S[j]) iG[j]-=S[j]; \ 100 i++; if(i==iStop) break; \ 105 if(2*iG[1]>S[1]) iG[1]-=S[1]; \ 108 if(2*iG[0]>S[0]) iG[0]-=S[0]; \ 115 #define COMPUTE_halfGindices \ 116 int size2 = S[2]/2+1; \ 118 threadIdx.z + zBlock * blockDim.z, \ 121 if(iG[0]>=S[0] || iG[1]>=S[1] || iG[2]>=size2) return; \ 122 size_t i = iG[2] + size2*size_t(iG[1] + S[1]*iG[0]); \ 123 for(int j=0; j<3; j++) if(2*iG[j]>S[j]) iG[j]-=S[j]; 127 #define IS_NYQUIST ( (!(2*iG[0]-S[0])) | (!(2*iG[1]-S[1])) | (!(2*iG[2]-S[2])) ) 129 #endif // JDFTX_CORE_LOOPMACROS_H