From 74cd3aba12b937fb07568a112e34932e496ffd80 Mon Sep 17 00:00:00 2001 From: Giovanni La Mura <giovanni.lamura@inaf.it> Date: Sat, 10 May 2025 10:46:20 +0200 Subject: [PATCH] Use dynamic order adjustment in cluster --- src/cluster/cluster.cpp | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/cluster/cluster.cpp b/src/cluster/cluster.cpp index 7fa92b0..89ea580 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; } -- GitLab