69
69
const MP_TYPE PhreeqcRM::default_data_for_parallel_processing = -1;
70
70
#endif
71
71
72
+ // Pimpl for initialization
73
+ class PhreeqcRM::Initializer
74
+ {
75
+
76
+ public:
77
+ Initializer() : nxyz_arg(default_nxyz), data_for_parallel_processing(default_data_for_parallel_processing), io(nullptr) {}
78
+ Initializer(int nxyz, MP_TYPE data, PHRQ_io *pio) : nxyz_arg(nxyz), data_for_parallel_processing(data), io(pio) {}
79
+
80
+ public:
81
+ int nxyz_arg;
82
+ MP_TYPE data_for_parallel_processing;
83
+ PHRQ_io *io;
84
+ };
72
85
73
86
//// static PhreeqcRM methods
74
87
/* ---------------------------------------------------------------------- */
@@ -169,7 +182,7 @@ PhreeqcRM::PhreeqcRM(int nxyz_arg, MP_TYPE data_for_parallel_processing, PHRQ_io
169
182
, mpi_worker_callback_c( nullptr )
170
183
, mpi_worker_callback_cookie( nullptr )
171
184
, species_save_on( false )
172
- , initializer( nxyz_arg, data_for_parallel_processing, io )
185
+ , initializer(std::make_unique<PhreeqcRM::Initializer>( nxyz_arg, data_for_parallel_processing, io) )
173
186
{
174
187
#ifdef USE_MPI
175
188
phreeqcrm_comm = data_for_parallel_processing;
@@ -188,24 +201,24 @@ PhreeqcRM::PhreeqcRM(int nxyz_arg, MP_TYPE data_for_parallel_processing, PHRQ_io
188
201
#ifdef USE_MPI
189
202
if (mpi_myself == 0)
190
203
{
191
- this->Construct(this->initializer );
204
+ this->Construct();
192
205
MpiWorkerBreak();
193
206
}
194
207
else
195
208
{
196
209
MpiWorker();
197
210
}
198
211
#else
199
- this->Construct(this->initializer );
212
+ this->Construct();
200
213
#endif
201
214
}
202
215
}
203
216
204
- void PhreeqcRM::Construct(PhreeqcRM::Initializer i )
217
+ void PhreeqcRM::Construct()
205
218
{
206
- int nxyz_arg = i. nxyz_arg;
207
- MP_TYPE data_for_parallel_processing = i. data_for_parallel_processing;
208
- //PHRQ_io * io = i. io;
219
+ int nxyz_arg = this->initializer-> nxyz_arg;
220
+ MP_TYPE data_for_parallel_processing = this->initializer-> data_for_parallel_processing;
221
+ //PHRQ_io* io = this->initializer-> io;
209
222
#ifdef USE_MPI
210
223
if (mpi_myself == 0)
211
224
{
@@ -5631,7 +5644,8 @@ IRM_RESULT PhreeqcRM::InitializeYAML(std::string config)
5631
5644
if (keyword == "LoadDatabase")
5632
5645
{
5633
5646
std::string file = it1++->second.as< std::string >();
5634
- this->LoadDatabase(file);
5647
+ // no need to check for initialization just call base class
5648
+ this->PhreeqcRM::LoadDatabase(file);
5635
5649
continue;
5636
5650
}
5637
5651
if (keyword == "OpenFiles")
@@ -7035,7 +7049,7 @@ PhreeqcRM::MpiWorker()
7035
7049
case METHOD_CONSTRUCT:
7036
7050
if (debug_worker) std::cerr << "METHOD_CONSTRUCT" << std::endl;
7037
7051
{
7038
- this->Construct(this->initializer );
7052
+ this->Construct();
7039
7053
}
7040
7054
break;
7041
7055
case METHOD_CREATEMAPPING:
@@ -13028,6 +13042,27 @@ PhreeqcRM::WarningMessage(const std::string &str)
13028
13042
this->phreeqcrm_io->warning_msg(str.c_str());
13029
13043
}
13030
13044
}
13045
+ /* ---------------------------------------------------------------------- */
13046
+ void
13047
+ PhreeqcRM::set_data_for_parallel_processing(int value)
13048
+ /* ---------------------------------------------------------------------- */
13049
+ {
13050
+ this->initializer->data_for_parallel_processing = value;
13051
+ }
13052
+ /* ---------------------------------------------------------------------- */
13053
+ void
13054
+ PhreeqcRM::set_nxyz(int value)
13055
+ /* ---------------------------------------------------------------------- */
13056
+ {
13057
+ this->initializer->nxyz_arg = value;
13058
+ }
13059
+ /* ---------------------------------------------------------------------- */
13060
+ void
13061
+ PhreeqcRM::set_io(PHRQ_io *value)
13062
+ /* ---------------------------------------------------------------------- */
13063
+ {
13064
+ this->initializer->io = value;
13065
+ }
13031
13066
13032
13067
13033
13068
0 commit comments