22 #include <ObjexxFCL/FArray1D.hh>
24 #include <ObjexxFCL/FArray2D.hh>
25 #include <ObjexxFCL/FArray2A.hh>
36 #include <utility/string_util.hh>
39 #include <utility/vector1.hh>
42 using namespace ObjexxFCL;
46 namespace interaction_graph {
58 one_body_energies_(num_states + 1, 0.0f),
62 alternate_state_( 0 ),
63 alternate_state_one_body_energy_( core::
PackerEnergy( 0.0 )),
64 alternate_state_total_energy_( core::
PackerEnergy( 0.0 )),
65 alternate_state_is_being_considered_( false )
82 std::cerr <<
"(" << ii <<
", ";
84 if ( ii % 3 == 0 ) std::cerr << std::endl;
86 std::cerr << std::endl <<
"-----------------" << std::endl;
181 std::fill( position1,
260 std::copy( alt_position1,
307 std::cerr <<
"curr_state_one_body_energy_ ";
315 std::cerr << std::endl;
348 unsigned int dynamic_memory = 0;
351 dynamic_memory +=
edge_matrix_ptrs_.size() *
sizeof ( FArray2A< core::PackerEnergy > );
355 return dynamic_memory;
374 get_dpd_node(1)->get_num_states(),
375 get_dpd_node(0)->get_num_states(),
378 energies_updated_since_last_prep_for_simA_(
true )
396 two_body_energies_(state2, state1) += edge_weight() * energy;
397 energies_updated_since_last_prep_for_simA_ =
true;
409 FArray2< core::PackerEnergy >
const & res_res_energy_array
412 assert( res_res_energy_array.size1() == two_body_energies_.size1() );
413 assert( res_res_energy_array.size2() == two_body_energies_.size2() );
414 for (
Size ii = 1, iie = two_body_energies_.size1(); ii <= iie; ++ii ) {
415 for (
Size jj = 1, jje = two_body_energies_.size2(); jj <= jje; ++jj ) {
416 two_body_energies_( ii, jj ) += edge_weight() * res_res_energy_array( ii, jj );
419 energies_updated_since_last_prep_for_simA_ =
true;
440 two_body_energies_( state2, state1 ) = edge_weight() * energy;
441 energies_updated_since_last_prep_for_simA_ =
true;
458 two_body_energies_(state2,state1) = 0.0f;
459 energies_updated_since_last_prep_for_simA_ =
true;
488 bool any_non_zero =
false;
490 for (
unsigned int ii = 0; ii < num_energies; ++ii)
495 if ( ! any_non_zero )
delete this;
519 int node_substituted = ( node_ind == get_node_index(0) ? 0 : 1);
520 int node_not_substituted = ! node_substituted;
522 int nodes_curr_states[2];
524 nodes_curr_states[ node_substituted ] = new_state;
526 nodes_curr_states[ node_not_substituted ] =
527 get_dpd_node( node_not_substituted )->get_current_state();
529 bool one_node_in_zero_state =
530 ( nodes_curr_states[0] == 0 || nodes_curr_states[1] == 0 );
532 if ( one_node_in_zero_state ) {
533 curr_state_energy_ = 0;
535 curr_state_energy_ = two_body_energies_( nodes_curr_states[ 1 ], nodes_curr_states[ 0 ] );
537 new_energy = curr_state_energy_;
539 get_dpd_node( node_not_substituted )->acknowledge_neighbors_state_substitution (
540 get_edges_position_in_nodes_edge_vector( node_not_substituted ),
555 int node_not_substituted = ! node_substituted;
596 unsigned int dynamic_memory = 0;
599 return dynamic_memory;
613 if ( weight == 0.0 ) {
614 utility_exit_with_message(
"Error: set edge weight to 0 not a legal operation. Delete this edge instead" );
623 ObjexxFCL::FArray2D< core::PackerEnergy >
631 ObjexxFCL::FArray2D< core::PackerEnergy > & new_edge_table
635 utility_exit_with_message(
"swap_edge_energies failed as size1 does not match: two_body_energies_.size1()= "
637 + utility::to_string( new_edge_table.size1() ) );
640 utility_exit_with_message(
"swap_edge_energies failed as size2 does not match: two_body_energies_.size2()= "
642 + utility::to_string( new_edge_table.size2() ) );
658 num_commits_since_last_update_(0),
659 total_energy_current_state_assignment_(0),
660 total_energy_alternate_state_assignment_(0),
661 node_considering_alt_state_( -1 )
744 node_considering_alt_state_ = node_ind;
745 delta_energy = get_dpd_node( node_ind )->
746 project_deltaE_for_substitution( new_state, prev_energy_for_node );
749 total_energy_alternate_state_assignment_ =
750 total_energy_current_state_assignment_ + delta_energy;
795 get_one_body_energy_current_state();
804 ((
DensePDEdge*) *iter)->get_current_two_body_energy();
819 sum += ((
DensePDEdge*) *iter)->get_two_body_table_size();
847 ObjexxFCL::FArray2D< core::PackerEnergy > & new_edge_table
856 std::cerr <<
"Curr States: ";
858 std::cerr <<
"(" << ii <<
", ";
862 std::cerr << std::endl;
891 int first_node_ind = (*edge_iter)->get_first_node_ind();
892 int second_node_ind = (*edge_iter)->get_second_node_ind();
896 esum += ((
DensePDEdge*) (*edge_iter))->get_current_two_body_energy();
917 ObjexxFCL::FArray2D< core::PackerEnergy >
937 assert( new_node != NULL );