Removed smart pointers; + delete for copy constr

This commit is contained in:
Jose Eduardo Bueno 2020-10-01 10:27:34 -03:00
parent 89cefd8d95
commit fbbb21d482
2 changed files with 16 additions and 23 deletions

View File

@ -30,18 +30,6 @@ namespace bda
using Opm::OpmLog;
using Dune::Timer;
WellContributionsOCLContainer::WellContributionsOCLContainer(){
multisegments.reset(new mswVecT());
}
WellContributionsOCLContainer::~WellContributionsOCLContainer(){
if(num_ms_wells > 0){
for (auto ms : *multisegments) {
delete ms;
}
}
}
void WellContributionsOCLContainer::init(Opm::WellContributions &wellContribs, int N_, int Nb_){
N = N_;
Nb = Nb_;
@ -91,8 +79,8 @@ namespace bda
}
if(!wellContribs.multisegments.empty()){
multisegments = std::move(std::make_unique<mswVecT>(wellContribs.multisegments));
num_ms_wells = multisegments->size();
multisegments = std::move(wellContribs.multisegments);
num_ms_wells = multisegments.size();
x_msw.reserve(N);
y_msw.reserve(N);
}
@ -116,7 +104,7 @@ namespace bda
}
if(!wellContribs.multisegments.empty()){
multisegments = std::move(std::make_unique<mswVecT>(wellContribs.multisegments));
multisegments = std::move(wellContribs.multisegments);
}
}
@ -158,12 +146,11 @@ namespace bda
event.waitForEvents(events);
// actually apply MultisegmentWells
for(auto well: *multisegments){
well->setReordering(toOrder.data(), reorder);
for(Opm::MultisegmentWellContribution *well: multisegments){
well->setReordering(toOrder.data(), true);
well->apply(x_msw.data(), y_msw.data());
}
// copy vector y from CPU to GPU
queue->enqueueWriteBuffer(y, CL_FALSE, 0, sizeof(double) * N, y_msw.data(), nullptr, &event);
event.wait();
@ -178,4 +165,12 @@ namespace bda
applyMSWells(x, y);
}
}
WellContributionsOCLContainer::~WellContributionsOCLContainer(){
if(num_ms_wells > 0){
for (auto ms : multisegments) {
delete ms;
}
}
}
} // end namespace bda

View File

@ -29,18 +29,15 @@ namespace bda
class WellContributionsOCLContainer
{
private:
typedef std::vector<Opm::MultisegmentWellContribution*> mswVecT;
int N, Nb;
unsigned int dim, dim_wells;
unsigned int num_blocks = 0;
unsigned int num_std_wells = 0;
unsigned int num_ms_wells = 0; // number of MultisegmentWells in this object, must equal multisegments.size()
bool reorder = true;
std::vector<int> toOrder;
std::vector<double> x_msw, y_msw;
std::unique_ptr<mswVecT> multisegments;
std::vector<Opm::MultisegmentWellContribution*> multisegments;
typedef struct {
cl::Buffer Cnnzs, Dnnzs, Bnnzs;
@ -61,8 +58,9 @@ namespace bda
void applyMSWells(cl::Buffer& x, cl::Buffer& y);
public:
WellContributionsOCLContainer();
WellContributionsOCLContainer() {};
~WellContributionsOCLContainer();
WellContributionsOCLContainer(const WellContributionsOCLContainer&) = delete;
void apply(cl::Buffer& x, cl::Buffer& y);
void init(Opm::WellContributions &wellContribs, int N, int Nb);