18 #include <utility/exit.hh>
28 #include <ObjexxFCL/FArray1A.hh>
30 using namespace ObjexxFCL;
34 namespace interaction_graph {
92 node_index_(node_id), num_states_(num_states), num_incident_edges_(0),
93 num_edges_to_smaller_indexed_nodes_(0),
94 num_edges_to_larger_indexed_nodes_(0),
95 edge_vector_up_to_date_(false), owner_(owner)
190 int other_node_index = (*edge)->get_other_ind(
node_index_ );
227 std::list< EdgeBase* >::iterator nextiter = iter;
229 delete *iter; iter = nextiter;
263 if ( (*iter)->same_edge(
node_index_, other_node) )
return (*iter);
308 std::list< EdgeBase * >::const_iterator
314 std::list< EdgeBase * >::const_iterator
374 unsigned int total_memory = 0;
480 node_indices_[0] = first_node_ind;
481 node_indices_[1] = second_node_ind;
482 nodes_[0] = owner->
ig_nodes_[ node_indices_[0] ];
483 nodes_[1] = owner->
ig_nodes_[ node_indices_[1] ];
484 num_node_states_[0] = nodes_[0]->get_num_states();
485 num_node_states_[1] = nodes_[1]->get_num_states();
487 pos_in_nodes_edge_list_[0] = nodes_[0]->add_edge(
this);
488 pos_in_nodes_edge_list_[1] = nodes_[1]->add_edge(
this);
618 assert(
this == *iter);
734 for (std::list< EdgeBase* >::iterator iter =
ig_edge_list_.begin();
737 std::list< EdgeBase* >::iterator next_iter = iter;
769 num_ig_nodes_(num_ig_nodes),
770 ig_nodes_(num_ig_nodes + 1, (
NodeBase*) NULL),
771 node_state_offsets_( num_ig_nodes + 1, 0 ),
772 num_total_states_(0),
774 num_energy_sum_groups_( -1 )
811 assert (ig_nodes_[node_index] == NULL);
812 ig_nodes_[node_index] = create_new_node( node_index, num_states);
813 num_total_states_ += num_states;
814 if ( node_index != num_ig_nodes_ )
816 node_state_offsets_[ node_index + 1 ] =
817 node_state_offsets_[ node_index ] + num_states;
847 return ig_nodes_[node_index]->get_num_states();
879 int temp = index1 < index2 ? index1 : index2;
880 index2 = index1 < index2 ? index2 : index1;
883 assert( index1 != index2 );
919 return (edge != NULL);
959 std::list< EdgeBase* >::iterator next_iter = iter;
963 (*iter)->prepare_for_simulated_annealing();
1027 for (std::list< EdgeBase* >::const_iterator iter =
ig_edge_list_.begin();
1029 { os <<
"edge " << counter <<
" between " << (*iter)->get_first_node_ind()
1030 <<
" " << (*iter)->get_second_node_ind() << std::endl;
1063 os << num_edges << std::endl;
1064 for (std::list< EdgeBase* >::const_iterator iter =
ig_edge_list_.begin();
1067 os <<
"DIMACS: " <<
"e " << (*iter)->get_first_node_ind();
1068 os <<
" " << (*iter)->get_second_node_ind() << std::endl;
1142 FArray1< core::PackerEnergy > & one_body_energies
1145 for (
int ii = 1; ii <= num_ig_nodes_; ++ii )
1148 if ( ii == num_ig_nodes_ )
1150 ii_num_states = num_total_states_ - node_state_offsets_[ii];
1154 ii_num_states = node_state_offsets_[ ii + 1 ] - node_state_offsets_[ ii ];
1156 FArray1A< core::PackerEnergy > ii_one_body_energies( one_body_energies( node_state_offsets_[ii] + 1), ii_num_states );
1157 ig_nodes_[ ii ]->add_to_one_body_energies( ii_one_body_energies );
1194 FArray1< core::PackerEnergy > & old_energy1b,
1195 FArray1< core::PackerEnergy > & new_energy1b
1199 add_to_one_body_energies( old_energy1b );
1200 add_to_one_body_energies( new_energy1b );
1201 old_energy1b = new_energy1b;
1206 ig_nodes_[ node ]->zero_one_body_energies();
1219 int num_states_for_node = get_node( node_ind )->get_num_states();
1220 for (
int ii = 1; ii <= num_states_for_node; ++ii ) {
1221 get_node( node_ind )->add_to_one_body_energy( ii, one_body_energies[ ii ] );
1232 FArray1< core::PackerEnergy >
const & one_body_energies
1236 for (
int ii = 1; ii <= num_states_for_node; ++ii ) {
1252 get_node( node_ind )->add_to_one_body_energy( state_id, one_body_energy );
1265 if ( edge_weight == 0.0 ) {
1266 utility_exit_with_message(
"Error: set edge weight to 0 not a legal operation. Consider an edge deletion. ");
1302 unsigned int total_memory = 0;
1304 total_memory +=
ig_nodes_[ ii ]->count_dynamic_memory();
1305 total_memory +=
ig_nodes_[ ii ]->count_static_memory();
1307 for (std::list< EdgeBase* >::const_iterator iter =
ig_edge_list_.begin();
1309 total_memory += (*iter)->count_dynamic_memory();
1310 total_memory += (*iter)->count_static_memory();
1316 return total_memory;
1356 unsigned int tot = 0;
1449 ig_nodes_[ ii ]->depth_first_connected_component_counting();
1574 std::cerr <<
"Node " << ii <<
": ";
1579 std::cerr << std::endl;