14
14
#include " colvarmodule.h"
15
15
#include " colvarproxy.h"
16
16
#include " colvar.h"
17
+ #include " colvargrid.h"
17
18
#include " colvarbias_meta.h"
18
19
#include " colvars_memstream.h"
19
20
@@ -31,8 +32,6 @@ colvarbias_meta::colvarbias_meta(char const *key)
31
32
use_grids = true ;
32
33
grids_freq = 0 ;
33
34
rebin_grids = false ;
34
- hills_energy = NULL ;
35
- hills_energy_gradients = NULL ;
36
35
37
36
dump_fes = true ;
38
37
keep_hills = false ;
@@ -143,9 +142,9 @@ int colvarbias_meta::init(std::string const &conf)
143
142
get_keyval (conf, " keepHills" , keep_hills, keep_hills);
144
143
get_keyval (conf, " keepFreeEnergyFiles" , dump_fes_save, dump_fes_save);
145
144
146
- if (hills_energy == NULL ) {
147
- hills_energy = new colvar_grid_scalar (colvars);
148
- hills_energy_gradients = new colvar_grid_gradient (colvars);
145
+ if (! hills_energy) {
146
+ hills_energy. reset ( new colvar_grid_scalar (colvars) );
147
+ hills_energy_gradients. reset ( new colvar_grid_gradient (colvars) );
149
148
}
150
149
151
150
} else {
@@ -254,7 +253,6 @@ int colvarbias_meta::init_ebmeta_params(std::string const &conf)
254
253
{
255
254
int error_code = COLVARS_OK;
256
255
// for ebmeta
257
- target_dist = NULL ;
258
256
get_keyval (conf, " ebMeta" , ebmeta, false );
259
257
if (ebmeta){
260
258
cvm::main ()->cite_feature (" Ensemble-biased metadynamics (ebMetaD)" );
@@ -265,7 +263,7 @@ int colvarbias_meta::init_ebmeta_params(std::string const &conf)
265
263
" targetDistFile accordingly.\n " ,
266
264
COLVARS_INPUT_ERROR);
267
265
}
268
- target_dist = new colvar_grid_scalar ();
266
+ target_dist. reset ( new colvar_grid_scalar () );
269
267
error_code |= target_dist->init_from_colvars (colvars);
270
268
std::string target_dist_file;
271
269
get_keyval (conf, " targetDistFile" , target_dist_file);
@@ -523,10 +521,8 @@ int colvarbias_meta::update_grid_params()
523
521
new_hills_energy->map_grid (*hills_energy);
524
522
new_hills_energy_gradients->map_grid (*hills_energy_gradients);
525
523
526
- delete hills_energy;
527
- delete hills_energy_gradients;
528
- hills_energy = new_hills_energy;
529
- hills_energy_gradients = new_hills_energy_gradients;
524
+ hills_energy.reset (new_hills_energy);
525
+ hills_energy_gradients.reset (new_hills_energy_gradients);
530
526
531
527
curr_bin = hills_energy->get_colvars_index ();
532
528
if (cvm::debug ())
@@ -1061,8 +1057,8 @@ int colvarbias_meta::update_replicas_registry()
1061
1057
(replicas.back ())->comm = multiple_replicas;
1062
1058
1063
1059
if (use_grids) {
1064
- (replicas.back ())->hills_energy = new colvar_grid_scalar (colvars);
1065
- (replicas.back ())->hills_energy_gradients = new colvar_grid_gradient (colvars);
1060
+ (replicas.back ())->hills_energy . reset ( new colvar_grid_scalar (colvars) );
1061
+ (replicas.back ())->hills_energy_gradients . reset ( new colvar_grid_gradient (colvars) );
1066
1062
}
1067
1063
if (is_enabled (f_cvb_calc_ti_samples)) {
1068
1064
(replicas.back ())->enable (f_cvb_calc_ti_samples);
@@ -1319,34 +1315,40 @@ template <typename IST> IST &colvarbias_meta::read_state_data_template_(IST &is)
1319
1315
{
1320
1316
if (use_grids) {
1321
1317
1322
- colvar_grid_scalar * hills_energy_backup = NULL ;
1323
- colvar_grid_gradient * hills_energy_gradients_backup = NULL ;
1318
+ std::unique_ptr< colvar_grid_scalar> hills_energy_backup;
1319
+ std::unique_ptr< colvar_grid_gradient> hills_energy_gradients_backup;
1324
1320
1325
- if (has_data) {
1321
+ bool const need_backup = has_data;
1322
+
1323
+ if (need_backup) {
1326
1324
if (cvm::debug ())
1327
- cvm::log (" Backupping grids for metadynamics bias \" " +
1328
- this -> name + " \" " +
1329
- ((comm != single_replica) ? " , replica \" " +replica_id+ " \" " : " " )+ " . \n " );
1330
- hills_energy_backup = hills_energy;
1331
- hills_energy_gradients_backup = hills_energy_gradients;
1332
- hills_energy = new colvar_grid_scalar (colvars);
1333
- hills_energy_gradients = new colvar_grid_gradient (colvars);
1325
+ cvm::log (" Backing up grids for metadynamics bias \" " + this -> name + " \" " +
1326
+ ((comm != single_replica) ? " , replica \" " + replica_id + " \" " : " " ) + " . \n " );
1327
+
1328
+ hills_energy_backup = std::move ( hills_energy) ;
1329
+ hills_energy_gradients_backup = std::move ( hills_energy_gradients) ;
1330
+ hills_energy. reset ( new colvar_grid_scalar (colvars) );
1331
+ hills_energy_gradients. reset ( new colvar_grid_gradient (colvars) );
1334
1332
}
1335
1333
1336
- read_grid_data_template_<IST, colvar_grid_scalar>(is, " hills_energy" , hills_energy,
1337
- hills_energy_backup);
1334
+ read_grid_data_template_<IST, colvar_grid_scalar>(is, " hills_energy" , hills_energy. get () ,
1335
+ hills_energy_backup. get () );
1338
1336
1339
- read_grid_data_template_<IST, colvar_grid_gradient>(
1340
- is, " hills_energy_gradients" , hills_energy_gradients, hills_energy_gradients_backup);
1337
+ read_grid_data_template_<IST, colvar_grid_gradient>(is, " hills_energy_gradients" ,
1338
+ hills_energy_gradients.get (),
1339
+ hills_energy_gradients_backup.get ());
1341
1340
1342
1341
if (is) {
1343
1342
cvm::log (" successfully read the biasing potential and its gradients from grids.\n " );
1344
- if (hills_energy_backup != nullptr ) {
1345
- // Now that we have successfully updated the grids, delete the backup copies
1346
- delete hills_energy_backup;
1347
- delete hills_energy_gradients_backup;
1348
- }
1349
1343
} else {
1344
+ if (need_backup) {
1345
+ if (cvm::debug ())
1346
+ cvm::log (" Restoring grids from backup for metadynamics bias \" " + this ->name + " \" " +
1347
+ ((comm != single_replica) ? " , replica \" " + replica_id + " \" " : " " ) + " .\n " );
1348
+ // Restoring content from original grid
1349
+ hills_energy->copy_grid (*hills_energy_backup);
1350
+ hills_energy_gradients->copy_grid (*hills_energy_gradients_backup);
1351
+ }
1350
1352
return is;
1351
1353
}
1352
1354
}
@@ -1434,10 +1436,8 @@ void colvarbias_meta::rebin_grids_after_restart()
1434
1436
// read from the configuration file), and project onto them the
1435
1437
// grids just read from the restart file
1436
1438
1437
- colvar_grid_scalar *new_hills_energy =
1438
- new colvar_grid_scalar (colvars);
1439
- colvar_grid_gradient *new_hills_energy_gradients =
1440
- new colvar_grid_gradient (colvars);
1439
+ std::unique_ptr<colvar_grid_scalar> new_hills_energy (new colvar_grid_scalar (colvars));
1440
+ std::unique_ptr<colvar_grid_gradient> new_hills_energy_gradients (new colvar_grid_gradient (colvars));
1441
1441
1442
1442
if (cvm::debug ()) {
1443
1443
std::ostringstream tmp_os;
@@ -1464,15 +1464,13 @@ void colvarbias_meta::rebin_grids_after_restart()
1464
1464
new_hills_energy_gradients->map_grid (*hills_energy_gradients);
1465
1465
}
1466
1466
1467
- delete hills_energy;
1468
- delete hills_energy_gradients;
1469
- hills_energy = new_hills_energy;
1470
- hills_energy_gradients = new_hills_energy_gradients;
1467
+ hills_energy = std::move (new_hills_energy);
1468
+ hills_energy_gradients = std::move (new_hills_energy_gradients);
1471
1469
1472
1470
// assuming that some boundaries have expanded, eliminate those
1473
1471
// off-grid hills that aren't necessary any more
1474
1472
if (!hills.empty ())
1475
- recount_hills_off_grid (hills.begin (), hills.end (), hills_energy );
1473
+ recount_hills_off_grid (hills.begin (), hills.end ());
1476
1474
}
1477
1475
}
1478
1476
@@ -1813,7 +1811,7 @@ template <typename OST> OST &colvarbias_meta::write_state_data_template_(OST &os
1813
1811
1814
1812
// this is a very good time to project hills, if you haven't done
1815
1813
// it already!
1816
- project_hills (new_hills_begin, hills.end (), hills_energy, hills_energy_gradients);
1814
+ project_hills (new_hills_begin, hills.end (), hills_energy. get () , hills_energy_gradients. get () );
1817
1815
new_hills_begin = hills.end ();
1818
1816
1819
1817
// write down the grids to the restart file
0 commit comments