/** Assuming lowest replica filename has been set, search for all other * replica names assuming a naming scheme of '<PREFIX>.<EXT>[.<CEXT>]', * where <EXT> is a numerical extension and <CEXT> is an optional * compression extension. * \return Found replica filenames, or an empty list on error. */ int TrajIOarray::SearchForReplicas(FileName const& fname) { RepName repName(fname, debug_); if (repName.Error()) return 1; // Search for a replica number lower than this. Correct functioning // of the replica code requires the file specified by trajin be the // lowest # replica. if (File::Exists( repName.RepFilename( -1 ) )) { mprintf("Warning: Replica# found lower than file specified with trajin.\n" "Warning: Found \"%s\"; 'trajin remdtraj' requires lowest # replica.\n", repName.RepFilename( -1 ).full()); } // Add lowest replica filename, search for and add all replicas higher than it. replica_filenames_.push_back( fname ); int rep_offset = 0; bool search_for_files = true; FileName trajFilename; while (search_for_files) { ++rep_offset; trajFilename = repName.RepFilename( rep_offset ); //mprintf("\t\tChecking for %s\n", trajFilename.full()); if (File::Exists( trajFilename )) replica_filenames_.push_back( trajFilename ); else search_for_files = false; } mprintf("\tFound %u replicas.\n", replica_filenames_.size()); return 0; }
/** Assuming lowest replica filename has been set, search for all other * replica names assuming a naming scheme of '<PREFIX>.<EXT>[.<CEXT>]', * where <EXT> is a numerical extension and <CEXT> is an optional * compression extension. * \return Found replica filenames, or an empty list on error. */ File::NameArray File::SearchForReplicas(FileName const& fname, int debug) { NameArray replica_filenames; if (!File::Exists(fname)) { mprinterr("Error: '%s' does not correspond to a file.\n", fname.full()); return replica_filenames; } RepName repName(fname, debug); if (repName.Error()) return replica_filenames; // Search for a replica number lower than this. Correct functioning // of the replica code requires the file specified by trajin be the // lowest # replica. if (File::Exists( repName.RepFilename( -1 ) )) { mprintf("Warning: Replica# found lower than file specified with trajin.\n" "Warning: Found \"%s\"; 'trajin remdtraj' requires lowest # replica.\n", repName.RepFilename( -1 ).full()); } // Add lowest replica filename, search for and add all replicas higher than it. replica_filenames.push_back( fname ); int rep_offset = 0; bool search_for_files = true; FileName trajFilename; while (search_for_files) { ++rep_offset; trajFilename = repName.RepFilename( rep_offset ); //mprintf("\t\tChecking for %s\n", trajFilename.full()); if (File::Exists( trajFilename )) replica_filenames.push_back( trajFilename ); else search_for_files = false; } return replica_filenames; }
/** Each rank searches for replica based on lowest replica number. */ int TrajIOarray::SearchForReplicas(FileName const& fname, Parallel::Comm const& ensComm, Parallel::Comm const& trajComm) { RepName repName(fname, debug_); if (repName.Error()) return 1; // TODO check for lower replica number? FileName replicaFilename = repName.RepFilename( ensComm.Rank() ); // Only traj comm masters actually check for files. if (trajComm.Master()) { if (!File::Exists( replicaFilename )) { File::ErrorMsg( replicaFilename.full() ); rprinterr("Error: File '%s' not accessible.\n", replicaFilename.full()); return 1; } } // At this point each rank has found its replica. Populate filename array. for (int offset = 0; offset < ensComm.Size(); ++offset) replica_filenames_.push_back( repName.RepFilename( offset ) ); return 0; }
/** Each rank searches for replica based on lowest replica number. */ File::NameArray File::SearchForReplicas(FileName const& fname, bool trajCommMaster, int ensRank, int ensSize, int debug) { NameArray replica_filenames; RepName repName(fname, debug); if (repName.Error()) return replica_filenames; // TODO check for lower replica number? FileName replicaFilename = repName.RepFilename( ensRank ); // Only traj comm masters actually check for files. if (trajCommMaster) { if (!File::Exists( replicaFilename )) { File::ErrorMsg( replicaFilename.full() ); rprinterr("Error: File '%s' not accessible.\n", replicaFilename.full()); return replica_filenames; } } // At this point each rank has found its replica. Populate filename array. for (int offset = 0; offset < ensSize; ++offset) replica_filenames.push_back( repName.RepFilename( offset ) ); return replica_filenames; }