Difference for src/colvarbias_meta.C from version 1.19 to 1.20

version 1.19version 1.20
Line 159
Line 159
     cvm::log("The bias temperature is "+cvm::to_str(bias_temperature)+".\n");     cvm::log("The bias temperature is "+cvm::to_str(bias_temperature)+".\n");
   }   }
  
  
    // for ebmeta
    target_dist = NULL;
    get_keyval(conf, "ebMeta", ebmeta, false);
    if(ebmeta){
      target_dist = new colvar_grid_scalar();
      target_dist->init_from_colvars(colvars);
      get_keyval(conf, "targetdistfile", target_dist_file);
      std::ifstream targetdiststream(target_dist_file.c_str());
      target_dist->read_multicol(targetdiststream);
      // normalize target distribution and multiply by effective volume = exp(differential entropy)
      target_dist->multiply_constant(1.0/target_dist->integral());
      cvm::real volume = std::exp(target_dist->entropy());
      target_dist->multiply_constant(volume);
      get_keyval(conf, "ebMetaEquilSteps", ebmeta_equil_steps, 0);
    }
  
   if (cvm::debug())   if (cvm::debug())
     cvm::log("Done initializing the metadynamics bias \""+this->name+"\""+     cvm::log("Done initializing the metadynamics bias \""+this->name+"\""+
              ((comm != single_replica) ? ", replica \""+replica_id+"\"" : "")+".\n");              ((comm != single_replica) ? ", replica \""+replica_id+"\"" : "")+".\n");
Line 186
Line 203
   if (hills_traj_os.is_open())   if (hills_traj_os.is_open())
     hills_traj_os.close();     hills_traj_os.close();
  
    if(target_dist) {
      delete target_dist;
      target_dist = NULL;
    }
  
   if (cvm::n_meta_biases > 0)   if (cvm::n_meta_biases > 0)
     cvm::n_meta_biases -= 1;     cvm::n_meta_biases -= 1;
 } }
Line 221
Line 243
   // output to trajectory (if specified)   // output to trajectory (if specified)
   if (hills_traj_os.is_open()) {   if (hills_traj_os.is_open()) {
     hills_traj_os << (hills.back()).output_traj();     hills_traj_os << (hills.back()).output_traj();
     if (cvm::debug()) { 
       hills_traj_os.flush();       hills_traj_os.flush();
     }     }
   } 
  
   has_data = true;   has_data = true;
   return hills.end();   return hills.end();
Line 258
Line 278
     hills_traj_os << "# DELETED this hill: "     hills_traj_os << "# DELETED this hill: "
                   << (hills.back()).output_traj()                   << (hills.back()).output_traj()
                   << "\n";                   << "\n";
     if (cvm::debug()) 
       hills_traj_os.flush();       hills_traj_os.flush();
   }   }
  
Line 381
Line 400
                ((comm != single_replica) ? ", replica \""+replica_id+"\"" : "")+                ((comm != single_replica) ? ", replica \""+replica_id+"\"" : "")+
                ": adding a new hill at step "+cvm::to_str(cvm::step_absolute())+".\n");                ": adding a new hill at step "+cvm::to_str(cvm::step_absolute())+".\n");
  
     switch (comm) {     cvm::real hills_scale=1.0;
  
     case single_replica:     if (ebmeta) {
       if (well_tempered) {        hills_scale *= 1.0/target_dist->value(target_dist->get_colvars_index());
         cvm::real hills_energy_sum_here = 0.0;        if(cvm::step_absolute() <= ebmeta_equil_steps) {
         if (use_grids) {          cvm::real const hills_lambda=(cvm::real(ebmeta_equil_steps - cvm::step_absolute()))/(cvm::real(ebmeta_equil_steps));
           std::vector<int> curr_bin = hills_energy->get_colvars_index();          hills_scale = hills_lambda + (1-hills_lambda)*hills_scale;
           hills_energy_sum_here = hills_energy->value(curr_bin); 
         } else { 
           calc_hills(new_hills_begin, hills.end(), hills_energy_sum_here); 
         }         }
         cvm::real const exp_weight = std::exp(-1.0*hills_energy_sum_here/(bias_temperature*cvm::boltzmann())); 
         create_hill(hill((hill_weight*exp_weight), colvars, hill_width)); 
       } else { 
         create_hill(hill(hill_weight, colvars, hill_width)); 
       }       }
       break; 
  
     case multiple_replicas: 
       if (well_tempered) {       if (well_tempered) {
         cvm::real hills_energy_sum_here = 0.0;         cvm::real hills_energy_sum_here = 0.0;
         if (use_grids) {         if (use_grids) {
Line 408
Line 418
         } else {         } else {
           calc_hills(new_hills_begin, hills.end(), hills_energy_sum_here);           calc_hills(new_hills_begin, hills.end(), hills_energy_sum_here);
         }         }
         cvm::real const exp_weight = std::exp(-1.0*hills_energy_sum_here/(bias_temperature*cvm::boltzmann()));       hills_scale *= std::exp(-1.0*hills_energy_sum_here/(bias_temperature*cvm::boltzmann()));
         create_hill(hill((hill_weight*exp_weight), colvars, hill_width, replica_id)); 
       } else { 
         create_hill(hill(hill_weight, colvars, hill_width, replica_id)); 
       }       }
  
      switch (comm) {
  
      case single_replica:
  
        create_hill(hill(hill_weight*hills_scale, colvars, hill_width));
  
        break;
  
      case multiple_replicas:
        create_hill(hill(hill_weight*hills_scale, colvars, hill_width, replica_id));
       if (replica_hills_os.is_open()) {       if (replica_hills_os.is_open()) {
         replica_hills_os << hills.back();         replica_hills_os << hills.back();
       } else {       } else {
Line 1507
Line 1525
                                        ("."+replica_id) :                                        ("."+replica_id) :
                                        ("") )+                                        ("") )+
                                      ".hills.traj");                                      ".hills.traj");
      if (!hills_traj_os.is_open()) {
     hills_traj_os.open(traj_file_name.c_str());     hills_traj_os.open(traj_file_name.c_str());
      }
     if (!hills_traj_os.is_open())     if (!hills_traj_os.is_open())
       cvm::error("Error: in opening hills output file \"" +       cvm::error("Error: in opening hills output file \"" +
                  traj_file_name+"\".\n", FILE_ERROR);                  traj_file_name+"\".\n", FILE_ERROR);


Legend:
Removed in v.1.19 
changed lines
 Added in v.1.20



Made by using version 1.53 of cvs2html