diff --git a/src/cluster/cluster.cpp b/src/cluster/cluster.cpp index 7fa92b0eb9241cd92550cf310e3c357176f6981a..89ea580de4897f0c3659bb9011293fcd7888b93b 100644 --- a/src/cluster/cluster.cpp +++ b/src/cluster/cluster.cpp @@ -229,6 +229,10 @@ void cluster(const string& config_file, const string& data_file, const string& o int nsph = gconf->number_of_spheres; // Sanity check on number of sphere consistency, should always be verified if (s_nsph == nsph) { + char virtual_line[256]; + sprintf(virtual_line, "%.5g.\n", sconf->get_particle_radius(gconf)); + message = "INFO: particle radius is " + (string)virtual_line; + logger->log(message); ScatteringAngles *p_scattering_angles = new ScatteringAngles(gconf); double wp = sconf->wp; // ClusterOutputInfo : Thread 0 of MPI process 0 allocates the memory to @@ -733,9 +737,11 @@ int cluster_jxi488_cycle(int jxi488, ScattererConfiguration *sconf, GeometryConf } // Dynamic order check const double alamb = 2.0 * pi / cid->vk; - double size_par = 2.0 * pi * sqrt(exdc) * sconf->get_radius(0) / alamb; - int recommended_li = 4 + (int)ceil(size_par + 4.05 * pow(size_par, 1.0 / 3.0)); - if (recommended_li != cid->c1->li) { + double size_par_li = 2.0 * pi * sqrt(exdc) * sconf->get_max_radius() / alamb; + int recommended_li = 4 + (int)ceil(size_par_li + 4.05 * pow(size_par_li, 1.0 / 3.0)); + double size_par_le = 2.0 * pi * sqrt(exdc) * sconf->get_particle_radius(gconf) / alamb; + int recommended_le = 1 + (int)ceil(size_par_le + 11.0 * pow(size_par_le, 1.0 / 3.0)); + if (recommended_li != cid->c1->li || recommended_le != cid->c1->le) { if (recommended_li > cid->c1->li) { message = "WARNING: internal order " + to_string(cid->c1->li) + " for scale iteration " + to_string(jxi488) + " too low (recommended order is " + to_string(recommended_li) @@ -745,7 +751,19 @@ int cluster_jxi488_cycle(int jxi488, ScattererConfiguration *sconf, GeometryConf 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); - cid->update_orders(sconf->_rcf, recommended_li, recommended_li); + } + if (recommended_le > cid->c1->le) { + message = "WARNING: external order " + to_string(cid->c1->le) + " for scale iteration " + + to_string(jxi488) + " too low (recommended order is " + to_string(recommended_le) + + ").\n"; + logger->log(message, LOG_WARN); + } else { + 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); } cid->refinemode = 2; }