MCPcopy Create free account
hub / github.com/NGSolve/ngsolve / Project

Method Project

ngscuda/cuda_linalg.cpp:912–948  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

910 }
911
912 void DevProjector :: Project (BaseVector & x) const
913 {
914 static Timer t("DevProjector::Project"); RegionTimer reg(t);
915 if (x.EntrySize() != 1)
916 throw Exception("DevProjector :: Project not implemented for EntrySize > 1");
917
918 UnifiedVectorWrapper ux(x);
919
920 ux.UpdateDevice();
921
922 // DevProjectorProject (bits->Size(), (double*)ux.DevData(), bits->Data(), keep_values);
923 if (keep_values)
924 DeviceParallelFor
925 (bits->Size(),
926 [x=ux.DevData(), bits=bits->Data()] DEVICE_LAMBDA (auto i)
927 {
928 unsigned char mask = (char(1) << (i % CHAR_BIT));
929 unsigned int addr = i / CHAR_BIT;
930
931 if (! (bits[addr] & mask) )
932 x[i] = 0.0;
933 });
934 else
935 DeviceParallelFor
936 (bits->Size(),
937 [x=ux.DevData(), bits=bits->Data()] DEVICE_LAMBDA (auto i)
938 {
939 unsigned char mask = (char(1) << (i % CHAR_BIT));
940 unsigned int addr = i / CHAR_BIT;
941
942 if (bits[addr] & mask)
943 x[i] = 0;
944 });
945
946
947 ux.InvalidateHost();
948 }
949
950
951

Callers

nothing calls this directly

Calls 5

DeviceParallelForFunction · 0.85
InvalidateHostMethod · 0.80
SizeMethod · 0.45
DevDataMethod · 0.45
DataMethod · 0.45

Tested by

no test coverage detected