@@ -30,21 +30,24 @@ extern "C" void f_aero_particle_solute_kappa(const void *aero_particle_ptr, cons
3030namespace py = pybind11;
3131struct AeroParticle {
3232 PMCResource ptr;
33- const AeroData & aero_data;
33+ std::shared_ptr< AeroData> aero_data;
3434
35- AeroParticle ( const AeroData &aero_data, const std::valarray<double >&data) :
35+ AeroParticle (
36+ std::shared_ptr<AeroData> aero_data,
37+ const std::valarray<double >&data
38+ ) :
3639 ptr (f_aero_particle_ctor, f_aero_particle_dtor),
3740 aero_data (aero_data)
3841 {
3942 int len = data.size ();
40- f_aero_particle_init (ptr.f_arg (), aero_data. ptr .f_arg (), begin (data), &len);
41- if (size_t (len)!= AeroData::__len__ (aero_data))
43+ f_aero_particle_init (ptr.f_arg (), aero_data-> ptr .f_arg (), begin (data), &len);
44+ if (size_t (len) != AeroData::__len__ (* aero_data))
4245 throw std::runtime_error (" AeroData size mistmatch" );
4346 }
4447
4548 static std::valarray<double > volumes (const AeroParticle &self)
4649 {
47- int len = AeroData::__len__ (self.aero_data );
50+ int len = AeroData::__len__ (* self.aero_data );
4851 std::valarray<double > data (len);
4952 f_aero_particle_volumes (&self.ptr , begin (data), &len);
5053 return data;
@@ -64,56 +67,56 @@ struct AeroParticle {
6467
6568 static double dry_volume (const AeroParticle &self) {
6669 double vol;
67- f_aero_particle_dry_volume (&self.ptr , & self.aero_data , &vol);
70+ f_aero_particle_dry_volume (&self.ptr , self.aero_data . get () , &vol);
6871 return vol;
6972 }
7073
7174 static double radius (const AeroParticle &self) {
7275 double radius;
73- f_aero_particle_radius (&self.ptr , & self.aero_data , &radius);
76+ f_aero_particle_radius (&self.ptr , self.aero_data . get () , &radius);
7477 return radius;
7578 }
7679
7780 static double dry_radius (const AeroParticle &self) {
7881 double radius;
79- f_aero_particle_dry_radius (&self.ptr , & self.aero_data , &radius);
82+ f_aero_particle_dry_radius (&self.ptr , self.aero_data . get () , &radius);
8083 return radius;
8184 }
8285
8386 static double diameter (const AeroParticle &self) {
8487 double diameter;
85- f_aero_particle_diameter (&self.ptr , & self.aero_data , &diameter);
88+ f_aero_particle_diameter (&self.ptr , self.aero_data . get () , &diameter);
8689 return diameter;
8790 }
8891
8992 static double dry_diameter (const AeroParticle &self) {
9093 double diameter;
91- f_aero_particle_dry_diameter (&self.ptr , & self.aero_data , &diameter);
94+ f_aero_particle_dry_diameter (&self.ptr , self.aero_data . get () , &diameter);
9295 return diameter;
9396 }
9497
9598 static double mass (const AeroParticle &self) {
9699 double mass;
97- f_aero_particle_mass (&self.ptr , & self.aero_data , &mass);
100+ f_aero_particle_mass (&self.ptr , self.aero_data . get () , &mass);
98101 return mass;
99102 }
100103
101104 static double species_mass (const AeroParticle &self, const int &i_spec) {
102105 double mass;
103- f_aero_particle_species_mass (&self.ptr , &i_spec, & self.aero_data , &mass);
106+ f_aero_particle_species_mass (&self.ptr , &i_spec, self.aero_data . get () , &mass);
104107 return mass;
105108 }
106109
107110 static std::valarray<double > species_masses (const AeroParticle &self) {
108- int len = AeroData::__len__ (self.aero_data );
111+ int len = AeroData::__len__ (* self.aero_data );
109112 std::valarray<double > masses (len);
110- f_aero_particle_species_masses (&self.ptr , & self.aero_data , &len, begin (masses));
113+ f_aero_particle_species_masses (&self.ptr , self.aero_data . get () , &len, begin (masses));
111114 return masses;
112115 }
113116
114117 static double solute_kappa (const AeroParticle &self) {
115118 double kappa;
116- f_aero_particle_solute_kappa (&self.ptr , & self.aero_data , &kappa);
119+ f_aero_particle_solute_kappa (&self.ptr , self.aero_data . get () , &kappa);
117120 return kappa;
118121 }
119122
0 commit comments