22 #include <ObjexxFCL/FArray1D.hh>
24 #include <ObjexxFCL/FArray2D.hh>
38 #include <utility/exit.hh>
39 #include <utility/vector1.hh>
42 using namespace ObjexxFCL;
46 namespace interaction_graph {
58 one_body_energies_(num_states + 1, 0.0f),
59 curr_state_total_energy_( 0.0 ),
60 alternate_state_is_being_considered_( false )
77 std::cerr <<
"(" << ii <<
", ";
79 if ( ii % 3 == 0 ) std::cerr << std::endl;
81 std::cerr << std::endl <<
"-----------------" << std::endl;
175 std::fill( position1,
254 std::copy( alt_position1,
300 for (
int kk = 1; kk <= neighbors_num_states_[ ii ]; ++kk ) {
309 for (
int kk = 1; kk <= neighbors_num_states_[ ii ]; ++kk ) {
325 std::cerr <<
"curr_state_one_body_energy_ ";
333 std::cerr << std::endl;
366 unsigned int dynamic_memory = 0;
377 return dynamic_memory;
396 get_dpd_node(1)->get_num_states(),
397 get_dpd_node(0)->get_num_states(),
400 energies_updated_since_last_prep_for_simA_(
true )
418 two_body_energies_(state2, state1) += edge_weight() * energy;
419 energies_updated_since_last_prep_for_simA_ =
true;
431 FArray2< core::PackerEnergy >
const & res_res_energy_array
434 assert( res_res_energy_array.size1() == two_body_energies_.size1() );
435 assert( res_res_energy_array.size2() == two_body_energies_.size2() );
436 for (
Size ii = 1, iie = two_body_energies_.size1(); ii <= iie; ++ii ) {
437 for (
Size jj = 1, jje = two_body_energies_.size2(); jj <= jje; ++jj ) {
438 two_body_energies_( ii, jj ) += edge_weight() * res_res_energy_array( ii, jj );
441 energies_updated_since_last_prep_for_simA_ =
true;
459 two_body_energies_( state2, state1 ) = edge_weight() * energy;
460 energies_updated_since_last_prep_for_simA_ =
true;
477 two_body_energies_(state2,state1) = 0.0f;
478 energies_updated_since_last_prep_for_simA_ =
true;
507 bool any_non_zero =
false;
509 for (
unsigned int ii = 0; ii < num_energies; ++ii)
514 if ( ! any_non_zero )
delete this;
538 int node_substituted = ( node_ind == get_node_index(0) ? 0 : 1);
539 int node_not_substituted = ! node_substituted;
541 int nodes_curr_states[2];
543 nodes_curr_states[ node_substituted ] = new_state;
545 nodes_curr_states[ node_not_substituted ] =
546 get_dpd_node( node_not_substituted )->get_current_state();
548 bool one_node_in_zero_state =
549 ( nodes_curr_states[0] == 0 || nodes_curr_states[1] == 0 );
551 if ( one_node_in_zero_state ) {
552 curr_state_energy_ = 0;
554 curr_state_energy_ = two_body_energies_( nodes_curr_states[ 1 ], nodes_curr_states[ 0 ] );
556 new_energy = curr_state_energy_;
558 get_dpd_node( node_not_substituted )->acknowledge_neighbors_state_substitution (
559 get_edges_position_in_nodes_edge_vector( node_not_substituted ),
574 int node_not_substituted = ! node_substituted;
616 unsigned int dynamic_memory = 0;
619 return dynamic_memory;
633 if ( weight == 0.0 ) {
634 utility_exit_with_message(
"Error: set edge weight to 0 not a legal operation. Delete this edge instead" );
653 num_commits_since_last_update_(0),
654 total_energy_current_state_assignment_(0),
655 total_energy_alternate_state_assignment_(0),
656 node_considering_alt_state_( -1 )
739 node_considering_alt_state_ = node_ind;
740 delta_energy = get_dpd_node( node_ind )->
741 project_deltaE_for_substitution( new_state, prev_energy_for_node );
744 total_energy_alternate_state_assignment_ =
745 total_energy_current_state_assignment_ + delta_energy;
790 get_one_body_energy_current_state();
840 std::cerr <<
"Curr States: ";
842 std::cerr <<
"(" << ii <<
", ";
846 std::cerr << std::endl;
875 int first_node_ind = (*edge_iter)->get_first_node_ind();
876 int second_node_ind = (*edge_iter)->get_second_node_ind();
894 assert( new_node != NULL );