From 7e4e8680323ed3d6622c184472a18d0ce1f47c89 Mon Sep 17 00:00:00 2001 From: Chris Maffeo <cmaffeo2@illinois.edu> Date: Tue, 1 Oct 2024 15:30:27 -0500 Subject: [PATCH] Copy restart data when replicas are used --- src/Configuration.cpp | 58 +++++++++++++++++++++++++++---------------- 1 file changed, 36 insertions(+), 22 deletions(-) diff --git a/src/Configuration.cpp b/src/Configuration.cpp index d0017a1..6782d82 100644 --- a/src/Configuration.cpp +++ b/src/Configuration.cpp @@ -135,14 +135,17 @@ Configuration::Configuration(const char* config_file, int simNum, bool debug) : posLast = new Vector3[(num+num_rb_attached_particles) * simNum]; { - int pidx = 0; - for (int i = 0; i < numRigidTypes; i++) { // Loop over RB types - RigidBodyType &rbt = rigidBody[i]; - for (int j = 0; j < rbt.num; ++j) { // Loop over RBs - for (const int& t: rbt.get_attached_particle_types()) { - type[num+pidx] = t; - serial[num+pidx] = num+pidx; - pidx++; + for (size_t replica = 0; replica < simNum; ++replica) { + int pidx = 0; + for (int i = 0; i < numRigidTypes; i++) { // Loop over RB types + RigidBodyType &rbt = rigidBody[i]; + for (int j = 0; j < rbt.num; ++j) { // Loop over RBs + for (const int& t: rbt.get_attached_particle_types()) { + size_t _idx = num+pidx+replica*(num+num_rb_attached_particles); + type[_idx] = t; + serial[_idx] = num+pidx; + pidx++; + } } } } @@ -167,6 +170,17 @@ Configuration::Configuration(const char* config_file, int simNum, bool debug) : loadRestart(restartCoordinates.val()); printf("Loaded %d restart coordinates from `%s'.\n", num, restartCoordinates.val()); printf("Particle numbers specified in the configuration file will be ignored.\n"); + + // Copy restart data to replicas + for (size_t replica = 1; replica < simNum; ++replica) { + for (size_t i = 0; i < num; ++i) { + size_t _idx = i+replica*(num+num_rb_attached_particles); + type[_idx] = type[i]; + serial[_idx] = serial[i]; + pos[_idx] = pos[i]; + } + } + loadedCoordinates = true; //Han-Yi Chou Langevin dynamic if (ParticleDynamicType == String("Langevin") || ParticleDynamicType == String("NoseHooverLangevin")) @@ -209,7 +223,7 @@ Configuration::Configuration(const char* config_file, int simNum, bool debug) : currType = j; for (int s = 0; s < simNum; ++s) - type[i + s*num] = currType; + type[i + s*(num+num_rb_attached_particles)] = currType; serial[i] = currSerial++; @@ -2191,19 +2205,19 @@ void Configuration::readRestraints() { //populate the type list and serial list void Configuration::populate() { for (int repID = 0; repID < simNum; ++repID) { - const int offset = repID * num; - int pn = 0; - int p = 0; - for (int i = 0; i < num; ++i) { - type[i + offset] = p; - serial[i + offset] = currSerial++; - - if (++pn >= part[p].num) { - p++; - pn = 0; - } - } - } + const int offset = repID * (num+num_rb_attached_particles); + int pn = 0; + int p = 0; + for (int i = 0; i < num; ++i) { + type[i + offset] = p; + serial[i + offset] = currSerial++; + + if (++pn >= part[p].num) { + p++; + pn = 0; + } + } + } } bool Configuration::readBondFile(const String& value, int currBond) { -- GitLab