[Avida-SVN] r2965 - development/source/main

beckma24 at myxo.css.msu.edu beckma24 at myxo.css.msu.edu
Mon Nov 24 11:32:46 PST 2008


Author: beckma24
Date: 2008-11-24 14:32:46 -0500 (Mon, 24 Nov 2008)
New Revision: 2965

Modified:
   development/source/main/cPopulation.cc
Log:
reordered deme resource resetting and replaced  test

Modified: development/source/main/cPopulation.cc
===================================================================
--- development/source/main/cPopulation.cc	2008-11-24 13:17:15 UTC (rev 2964)
+++ development/source/main/cPopulation.cc	2008-11-24 19:32:46 UTC (rev 2965)
@@ -1403,6 +1403,40 @@
   
   bool target_successfully_seeded = true;
   
+
+  bool source_deme_resource_reset(true), target_deme_resource_reset(true);
+  switch(m_world->GetConfig().DEMES_RESET_RESOURCES.Get()) {
+    case 0:
+      // reset resource in both demes
+      source_deme_resource_reset = target_deme_resource_reset = true;
+      break;
+    case 1:
+      // reset resource only in target deme
+      source_deme_resource_reset = false;
+      target_deme_resource_reset = true;
+      break;
+    case 2:
+      // do not reset either deme resource
+      source_deme_resource_reset = target_deme_resource_reset = false;
+      break;
+    default:
+      cout << "Undefined value " << m_world->GetConfig().DEMES_RESET_RESOURCES.Get() << " for DEMES_RESET_RESOURCES\n";
+      exit(1);
+  }
+
+  // Reset both demes, in case they have any cleanup work to do.
+  // Must reset target first for stats to be correctly updated!
+  if(m_world->GetConfig().ENERGY_ENABLED.Get()) {
+    // Transfer energy from source to target if we're using the energy model.
+    if (target_successfully_seeded) target_deme.DivideReset(source_deme, target_deme_resource_reset, offspring_deme_energy);
+    source_deme.DivideReset(source_deme, source_deme_resource_reset, parent_deme_energy);
+  } else {
+    // Default; reset both source and target.
+    if (target_successfully_seeded) target_deme.DivideReset(source_deme, target_deme_resource_reset);
+    source_deme.DivideReset(source_deme, source_deme_resource_reset);
+  }
+
+
   // Are we using germlines?  If so, we need to mutate the germline to get the
   // genome that we're going to seed the target with.
   if(m_world->GetConfig().DEMES_USE_GERMLINE.Get() == 1) {
@@ -1498,7 +1532,7 @@
   // to rotate its heritable merit to its current merit.
   if (target_successfully_seeded) target_deme.UpdateDemeMerit(source_deme);
   source_deme.UpdateDemeMerit();
-  
+  /*
   bool source_deme_resource_reset(true), target_deme_resource_reset(true);
   switch(m_world->GetConfig().DEMES_RESET_RESOURCES.Get()) {
     case 0:
@@ -1518,7 +1552,7 @@
       cout << "Undefined value " << m_world->GetConfig().DEMES_RESET_RESOURCES.Get() << " for DEMES_RESET_RESOURCES\n";
       exit(1);
   }
-  
+    
   // Reset both demes, in case they have any cleanup work to do.
   // Must reset target first for stats to be correctly updated!
   if(m_world->GetConfig().ENERGY_ENABLED.Get()) {
@@ -1530,8 +1564,8 @@
     if (target_successfully_seeded) target_deme.DivideReset(source_deme, target_deme_resource_reset);
     source_deme.DivideReset(source_deme, source_deme_resource_reset);
   }
+  */
   
-  
   // do our post-replication stats tracking.
   m_world->GetStats().DemePostReplication(source_deme, target_deme);
 }




More information about the Avida-cvs mailing list