diff --git a/src/cluster/cluster.cpp b/src/cluster/cluster.cpp index 89ea580de4897f0c3659bb9011293fcd7888b93b..ac132619ef6e083efc6dafedd1df55d5c1f02b4d 100644 --- a/src/cluster/cluster.cpp +++ b/src/cluster/cluster.cpp @@ -747,7 +747,7 @@ int cluster_jxi488_cycle(int jxi488, ScattererConfiguration *sconf, GeometryConf + to_string(jxi488) + " too low (recommended order is " + to_string(recommended_li) + ").\n"; logger->log(message, LOG_WARN); - } else { + } else if (recommended_li < cid->c1->li) { message = "INFO: lowering internal order from " + to_string(cid->c1->li) + " to " + to_string(recommended_li) + " for scale iteration " + to_string(jxi488) + ".\n"; logger->log(message, LOG_INFO); @@ -757,13 +757,15 @@ int cluster_jxi488_cycle(int jxi488, ScattererConfiguration *sconf, GeometryConf + to_string(jxi488) + " too low (recommended order is " + to_string(recommended_le) + ").\n"; logger->log(message, LOG_WARN); - } else { + } else if (recommended_le < cid->c1->le) { message = "INFO: lowering external order from " + to_string(cid->c1->le) + " to " + to_string(recommended_le) + " for scale iteration " + to_string(jxi488) + ".\n"; logger->log(message, LOG_INFO); } if (recommended_li < cid->c1->li || recommended_le < cid->c1->le) { - cid->update_orders(sconf->_rcf, recommended_li, recommended_le); + int new_li = (recommended_li < cid->c1->li) ? recommended_li : cid->c1->li; + int new_le = (recommended_le < cid->c1->le) ? recommended_le : cid->c1->le; + cid->update_orders(sconf->_rcf, new_li, new_le); } cid->refinemode = 2; } @@ -2113,39 +2115,37 @@ int ClusterIterationData::update_orders(double **rcf, int inner_order, int outer int old_le = c1->le; int old_lm = c1->lm; np_int old_ndit = 2 * c1->nsph * c1->nlim; - if (inner_order != old_li || outer_order != old_le) { - ((ParticleDescriptorCluster *)c1)->update_orders(inner_order, outer_order); - const int ndi = c1->nsph * c1->nlim; - const np_int ndit = 2 * ndi; - for (int zi = 0; zi < old_lm; zi++) { - for (int zj = 0; zj < 3; zj++) { - for (int zk = 0; zk < 2; zk++) { - delete[] zpv[zi][zj][zk]; - } - delete[] zpv[zi][zj]; + ((ParticleDescriptorCluster *)c1)->update_orders(inner_order, outer_order); + const int ndi = c1->nsph * c1->nlim; + const np_int ndit = 2 * ndi; + for (int zi = 0; zi < old_lm; zi++) { + for (int zj = 0; zj < 3; zj++) { + for (int zk = 0; zk < 2; zk++) { + delete[] zpv[zi][zj][zk]; } - delete[] zpv[zi]; + delete[] zpv[zi][zj]; } - delete[] zpv; - zpv = new double***[c1->lm]; - for (int zi = 0; zi < c1->lm; zi++) { - zpv[zi] = new double**[3]; - for (int zj = 0; zj < 3; zj++) { - zpv[zi][zj] = new double*[2]; - for (int zk = 0; zk < 2; zk++) { - zpv[zi][zj][zk] = new double[2](); - } + delete[] zpv[zi]; + } + delete[] zpv; + zpv = new double***[c1->lm]; + for (int zi = 0; zi < c1->lm; zi++) { + zpv[zi] = new double**[3]; + for (int zj = 0; zj < 3; zj++) { + zpv[zi][zj] = new double*[2]; + for (int zk = 0; zk < 2; zk++) { + zpv[zi][zj][zk] = new double[2](); } } - str(rcf, c1); - thdps(c1->lm, zpv); - delete[] am; - delete[] am_vector; - am_vector = new dcomplex[ndit * ndit](); - am = new dcomplex*[ndit]; - for (int ai = 0; ai < ndit; ai++) { - am[ai] = (am_vector + ai * ndit); - } + } + str(rcf, c1); + thdps(c1->lm, zpv); + delete[] am; + delete[] am_vector; + am_vector = new dcomplex[ndit * ndit](); + am = new dcomplex*[ndit]; + for (int ai = 0; ai < ndit; ai++) { + am[ai] = (am_vector + ai * ndit); } return result; }