mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-03 23:50:26 -06:00
Added smart pointers
This commit is contained in:
parent
3a680f728e
commit
7aad035bcf
@ -43,22 +43,13 @@ WellContributions::WellContributions(std::string gpu_mode){
|
||||
|
||||
WellContributions::~WellContributions()
|
||||
{
|
||||
#if HAVE_CUDA
|
||||
// delete MultisegmentWellContributions
|
||||
for (auto ms : multisegments) {
|
||||
delete ms;
|
||||
}
|
||||
multisegments.clear();
|
||||
|
||||
#if HAVE_OPENCL
|
||||
h_Cnnzs_ocl.clear();
|
||||
h_Dnnzs_ocl.clear();
|
||||
h_Bnnzs_ocl.clear();
|
||||
h_Ccols_ocl.clear();
|
||||
h_Bcols_ocl.clear();
|
||||
h_val_pointers_ocl.clear();
|
||||
#endif
|
||||
|
||||
#if HAVE_CUDA
|
||||
if(cuda_gpu){
|
||||
freeCudaMemory(); // should come before 'delete[] h_x'
|
||||
}
|
||||
|
@ -30,6 +30,18 @@ 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_;
|
||||
@ -79,8 +91,8 @@ namespace bda
|
||||
}
|
||||
|
||||
if(!wellContribs.multisegments.empty()){
|
||||
multisegments = std::move(wellContribs.multisegments);
|
||||
num_ms_wells = multisegments.size();
|
||||
multisegments = std::move(std::make_unique<mswVecT>(wellContribs.multisegments));
|
||||
num_ms_wells = multisegments->size();
|
||||
x_msw.reserve(N);
|
||||
y_msw.reserve(N);
|
||||
}
|
||||
@ -104,7 +116,7 @@ namespace bda
|
||||
}
|
||||
|
||||
if(!wellContribs.multisegments.empty()){
|
||||
multisegments = std::move(wellContribs.multisegments);
|
||||
multisegments = std::move(std::make_unique<mswVecT>(wellContribs.multisegments));
|
||||
}
|
||||
}
|
||||
|
||||
@ -146,7 +158,7 @@ namespace bda
|
||||
event.waitForEvents(events);
|
||||
|
||||
// actually apply MultisegmentWells
|
||||
for(Opm::MultisegmentWellContribution *well: multisegments){
|
||||
for(auto well: *multisegments){
|
||||
well->setReordering(toOrder.data(), true);
|
||||
well->apply(x_msw.data(), y_msw.data());
|
||||
}
|
||||
@ -165,12 +177,4 @@ namespace bda
|
||||
applyMSWells(x, y);
|
||||
}
|
||||
}
|
||||
|
||||
WellContributionsOCLContainer::~WellContributionsOCLContainer(){
|
||||
if(num_ms_wells > 0){
|
||||
for (auto ms : multisegments) {
|
||||
delete ms;
|
||||
}
|
||||
}
|
||||
}
|
||||
} // end namespace bda
|
||||
|
@ -29,6 +29,8 @@ namespace bda
|
||||
class WellContributionsOCLContainer
|
||||
{
|
||||
private:
|
||||
typedef std::vector<Opm::MultisegmentWellContribution*> mswVecT;
|
||||
|
||||
unsigned int dim, dim_wells;
|
||||
unsigned int num_blocks = 0;
|
||||
unsigned int num_std_wells = 0;
|
||||
@ -36,7 +38,7 @@ namespace bda
|
||||
int N, Nb;
|
||||
std::vector<int> toOrder;
|
||||
std::vector<double> x_msw, y_msw;
|
||||
std::vector<Opm::MultisegmentWellContribution*> multisegments;
|
||||
std::unique_ptr<mswVecT> multisegments;
|
||||
|
||||
typedef struct {
|
||||
cl::Buffer Cnnzs, Dnnzs, Bnnzs;
|
||||
@ -57,7 +59,7 @@ namespace bda
|
||||
void applyMSWells(cl::Buffer& x, cl::Buffer& y);
|
||||
|
||||
public:
|
||||
WellContributionsOCLContainer() {};
|
||||
WellContributionsOCLContainer();
|
||||
~WellContributionsOCLContainer();
|
||||
|
||||
void apply(cl::Buffer& x, cl::Buffer& y);
|
||||
|
Loading…
Reference in New Issue
Block a user