60 MSG::Level logLevel = log.level();
61 if (logLevel==MSG::VERBOSE)
m_debug = 1;
62 if (logLevel< MSG::VERBOSE)
m_debug = 2;
66 log << MSG::DEBUG <<
"Reading file " <<
file <<
endmsg;
69 fin.open(
file.c_str());
72 log << MSG::ERROR <<
"Could not find input file " << filename <<
endmsg;
76 log << MSG::ERROR <<
"Could not open file " <<
file <<
endmsg;
83 unsigned int line=0, record=0;
86 log << MSG::VERBOSE <<
"Parsing input file:" <<
endmsg;
88 std::vector<Cell> allCells;
90 while ( fin >> token ) {
92 if ( token[0] ==
'#' || token[0] ==
'!' || ( token[0] ==
'/' && token[1] ==
'/' ) ) {
97 unsigned int toklen = strlen(token) - 1 ;
99 log << MSG::VERBOSE << token <<
" ";
102 newCell.name = token;
103 for (
unsigned int i=0; i<4; ++i) newCell.neighbours[i].clear();
105 unsigned int column=0;
106 while ( fin >> token) {
107 toklen = strlen(token) - 1;
108 bool lastelem = ( token[toklen] ==
';' );
111 if (strcmp(token,
"none") != 0)
112 newCell.neighbours[column].emplace_back(token);
115 if (4 == column)
break;
122 allCells.emplace_back(std::move(newCell));
129 log << MSG::DEBUG <<
"Processed " << line <<
" lines, " << record <<
" records." <<
endmsg;
131 unsigned int curSize = allCells.size();
132 for (
unsigned int i=0; i<curSize; ++i) {
134 std::string::size_type pos = allCells[i].name.find(
'-', 0 );
135 if ( std::string::npos != pos ) {
139 tmpName = allCells[i].name;
140 tmpName.replace(pos,1,
"+");
141 newCell.name = tmpName;
143 for (
unsigned int j=0; j<4; ++j) {
144 unsigned int j1 = (j<2) ? 1-j : j;
145 unsigned int nb_size=allCells[i].neighbours[j].size();
146 for (
unsigned int k=0; k<nb_size; ++k) {
147 tmpName = allCells[i].neighbours[j][k];
148 pos = tmpName.find(
'-', 0 );
149 if ( std::string::npos != pos ) {
150 tmpName.replace(pos,1,
"+");
152 pos = tmpName.find(
'+', 0 );
153 if ( std::string::npos != pos ) {
154 tmpName.replace(pos,1,
"-");
157 newCell.neighbours[j1].push_back(tmpName);
160 allCells.push_back(std::move(newCell));
164 unsigned int nids = 0;
165 unsigned int max_phi = 0,
phi=0;
166 std::set<std::pair<IdentifierHash,int> > ids;
171 auto first = rit.
begin();
172 auto last = rit.
end();
173 for (; first != last; ++first) {
176 if (
phi > max_phi) max_phi =
phi;
183 if(!(ids.insert(std::make_pair(hashid,
phi))).second){
184 log << MSG::ERROR <<
"init_hashes "
185 <<
" Error: duplicated id for cell id. nids= " << nids
200 curSize = allCells.size();
202 std::string nb_name[4] = {
"Prev_eta_",
"Next_eta_",
"Prev_smp_",
"Next_smp_"};
204 for (
unsigned int i=0; i<curSize; ++i) {
205 get_id(allCells[i].name,allCells[i].
id,tileID);
206 allCells[i].hash_id = tileID->
channels().
hash (allCells[i].
id);
207 for (
unsigned int ii=0; ii<
m_length; ++ii) {
209 allCells[i].index = ii;
214 for (
unsigned int j=0; j<4; ++j) {
215 unsigned int nb_size=allCells[i].neighbours[j].size();
216 allCells[i].neighbours_ind[j].resize(nb_size);
217 for (
unsigned int k=0; k<nb_size; ++k) {
218 for (
unsigned int ii=0; ii<curSize; ++ii) {
219 if ( allCells[ii].name == allCells[i].neighbours[j][k]) {
220 allCells[i].neighbours_ind[j][k] = ii;
222 log << MSG::VERBOSE << allCells[i].name <<
" "
223 << tileID->
to_string(allCells[i].
id,-2) <<
" "
224 << allCells[i].hash_id <<
" "
225 << allCells[i].index <<
" "
226 << nb_name[j] << k <<
" "
227 << allCells[i].neighbours[j][k] <<
" "
228 << allCells[i].neighbours_ind[j][k] <<
" "
245 std::vector<short int> neighbours[4];
246 for (
unsigned int i=0; i<curSize; ++i) {
247 unsigned int ind = allCells[i].index;
249 for (
unsigned int j=0; j<4; ++j) {
250 unsigned int nb_size=allCells[i].neighbours[j].size();
251 neighbours[j].resize(nb_size);
252 for (
unsigned int k=0; k<nb_size; ++k) {
253 neighbours[j][k] = allCells[allCells[i].neighbours_ind[j][k]].index;
265 int sd = tileID->
side(allCells[i].
id);
266 int tw = tileID->
tower(allCells[i].
id);
267 int sm = tileID->
sample(allCells[i].
id);
268 int se = tileID->
section(allCells[i].
id);
270 for (
unsigned int j=2; j<4; ++j) {
273 unsigned int nb_size=allCells[i].neighbours[j].size();
274 for (
unsigned int k=0; k<nb_size; ++k) {
275 unsigned int new_i = allCells[i].neighbours_ind[j][k];
276 for (
unsigned int new_j=0; new_j<2; ++new_j) {
277 unsigned int new_nb_size=allCells[new_i].neighbours[new_j].size();
278 for (
unsigned int new_k=0; new_k<new_nb_size; ++new_k) {
279 unsigned int new_nb_i = allCells[new_i].neighbours_ind[new_j][new_k];
280 short new_nb_index = allCells[new_nb_i].index;
281 int n=neighbours[j].size()-1;
283 if (neighbours[j][n] == new_nb_index)
287 int new_sd = tileID->
side(allCells[new_nb_i].
id);
288 int new_tw = tileID->
tower(allCells[new_nb_i].
id);
289 int new_sm = tileID->
sample(allCells[new_nb_i].
id);
290 int new_se = tileID->
section(allCells[new_nb_i].
id);
291 if ( ( new_sd != sd && new_tw == tw ) ||
293 ( new_se == se && abs(new_tw - tw) < 3 ) ||
295 ( new_sm == sm+1 && abs(new_tw - tw) < 3 ) ||
296 ( new_sm != sm+1 && abs(new_tw - tw) < 4 ) ))))) {
297 neighbours[j].push_back(new_nb_index);
312 std::vector<IdentifierHash> nb_list;
315 for (
unsigned int i=0; i<hash_max; ++i) {
318 tileID->
get_id (i,
id, &context);
319 if ( tileID->module(
id) != 0 )
continue;
322 nb_list.clear(); nb_list.push_back(hash_id);
323 print_list(nb_list, tileID, &context, log,
"\nCell ",
" : ");
326 print_list(nb_list, tileID, &context, log,
"Prev phi ",
" ; ");
329 print_list(nb_list, tileID, &context, log,
"Next phi ",
" ; ");
332 print_list(nb_list, tileID, &context, log,
"Prev eta ",
" ; ");
335 print_list(nb_list, tileID, &context, log,
"Next eta ",
" ; ");
338 print_list(nb_list, tileID, &context, log,
"Prev smp ",
" ; ");
341 print_list(nb_list, tileID, &context, log,
"Next smp ",
" ; ");
344 print_list(nb_list, tileID, &context, log,
"Face 2D ",
" ; ");
347 print_list(nb_list, tileID, &context, log,
"Corn 2D ",
" ; ");
350 print_list(nb_list, tileID, &context, log,
"All 2D ",
" ; ");
353 print_list(nb_list, tileID, &context, log,
"All 3D ",
" ; ");
356 print_list(nb_list, tileID, &context, log,
"All 3DC ",
" ; ");
359 print_list(nb_list, tileID, &context, log,
"Super 3D ",
" ; ");
This class saves the "context" of an expanded identifier (ExpandedIdentifier) for compact or hash ver...