8 int numberOfDoFsPerAxisInPatch,
9 const double* __restrict__ source,
13 double* __restrict__ dest,
19 dfor(k,numberOfDoFsPerAxisInPatch) {
20 for (
int d=0; d<Dimensions; d++) {
25 if (k(d)<=numberOfDoFsPerAxisInPatch/2) {
26 sourceVolumeRight(d)++;
29 sourceVolumeLeft(d)--;
36 double grad = ( source[sourceVolumeRightLinearised*sourceUnknowns+sourceIndex] - source[sourceVolumeLeftLinearised*sourceUnknowns+sourceIndex] ) / volumeH(d) / numberOfDoFsPerAxisInPatch;
38 dest[ destVolumeLinearised*destUnknowns+destIndex(d) ] = grad;
45 int numberOfDoFsPerAxisInPatch,
46 const double* __restrict__ source,
50 double* __restrict__ dest,
57 dfor(k,numberOfDoFsPerAxisInPatch) {
58 for (
int d=0; d<Dimensions; d++) {
63 if (k(d)<=numberOfDoFsPerAxisInPatch/2) {
64 sourceVolumeRight(d)++;
67 sourceVolumeLeft(d)--;
74 double grad = ( source[sourceVolumeRightLinearised*sourceUnknowns+sourceIndex] - source[sourceVolumeLeftLinearised*sourceUnknowns+sourceIndex] ) / volumeH(d) / numberOfDoFsPerAxisInPatch;
76 double delta =
std::abs( dest[ destVolumeLinearised*destUnknowns+destIndex(d) ] - grad );
77 dest[ destVolumeLinearised*destUnknowns+destIndex(d) ] = grad;
78 result = std::max(result,delta);
#define dfor(counter, max)
d-dimensional Loop
CPUGPUMethod int dLinearised(const tarch::la::Vector< Dimensions, int > &counter, int max)
Map d-dimensional vector onto integer index.