Inconsistency among Flavur Equilibration files after 13 Jan Update

Dear MUSES Members,

Me and my collaborator Fernando Arias-Aragón are working with the MUSES CE, and after the update on Jan 13th we are observing something strange. We need the information on number densities for all particles within the star, so before that date, in Jan 8th, we generated the file “charge_neutrality_flavour_equilibration_original”, that produces the 2D grid of n_p (red points on the plot). We then reduced this to a 1D grid through charge neutrality and beta equilibrium conditions (green points). Today, we changed the EOS and observed that the same file was giving not a 2D but 1D grid. We then checked that it was not a matter of the EOS conditions and produced the same file with the same conditions as we did back in Jan 8th, and it turned out to be 1D (white points on the plot).

You can see clearly that the file (which has around 500 lines as opposed to the ~39000 it had as a 2D grid) is just scanning the upper limit of the whole range that it should. Are we missing some condition to be given to the MUSES CE after the update? Is there any way in which we can recover the 2D grid?

Best,

Federico (on behalf of the collaboration)

Hi @federico.nola,

The Lepton module tag was not updated on the latest CE update.

The only reasons I can think of for Lepton skipping these points are:

  • if it is reading the baryon electric charge density as being negative—which shouldn’t be the case, given your plot
  • if the code is not converging–which also shouldn’t happen for these proton densities.

Could you try setting use_beta_equilibrium: false and see if the issue persists?

The issue persist: even with use_beta_equilibrium: false the output remains less than 500 lines

If you can copy the workflow config here

formatted as a code block please

we can try reproducing the output and debugging in a local dev environment.

If you used an uploaded EOS file, please also share the data with us.

Which does not mean you need to upload the EoS file anywhere else; just mark the file as public and share its UUID, which should already be included in your workflow config anyway.

This is the workflow I used in Jan 8. Now it is giving us only less than 500 lines, instead of more than 30.000

processes:
- name: cmf_solver-1
  config:
    physical_parameters:
      f_K: 122
      f_pi: 93.3000031
      hbarc: 197.3269804
      d_betaQCD: 0.0606060606
      vacuum_masses:
        mass0: 150
        kaon_vacuum_mass: 498
        pion_vacuum_mass: 139
        Delta_vacuum_mass: 1232
        Omega_vacuum_mass: 1691
        Sigma_vacuum_mass: 1202
        Lambda_vacuum_mass: 1115
        nucleon_vacuum_mass: 937.242981
        Sigma_star_vacuum_mass: 1385
      quark_bare_masses:
        up_quark_bare_mass: 5
        down_quark_bare_mass: 5
        strange_quark_bare_mass: 150
      mean_field_vacuum_masses:
        phi_mean_field_vacuum_mass: 1019
        rho_mean_field_vacuum_mass: 761.062988
        omega_mean_field_vacuum_mass: 780.562988
      scalar_nucleon_couplings:
        gN_zeta: 0.467039
        alpha_DX: 0.350848362262
        gN_sigma: -10.5668
      vector_nucleon_couplings:
        g_4: 38.9
        gN_phi: 0
        gN_rho: 4.03
        gN_omega: 11.9
      quark_to_fields_couplings:
        gqd_phi: 0
        gqd_rho: 0
        gqs_phi: 0
        gqs_rho: 0
        gqu_phi: 0
        gqu_rho: 0
        gqd_zeta: 0
        gqs_zeta: -3
        gqu_zeta: 0
        gqd_delta: 0
        gqd_omega: 0
        gqd_sigma: -3
        gqs_delta: 0
        gqs_omega: 0
        gqs_sigma: 0
        gqu_delta: 0
        gqu_omega: 0
        gqu_sigma: -3
        gQ_Phi_order: 500
      explicit_symmetry_breaking:
        m_1: 0
        m_2: 0
        m_3D: 1.25
        m_3H: 0
        V_Delta: 0
      scalar_mean_field_equation:
        k_0: 2.3732188
        k_1: 1.39999998
        k_2: -5.54911336
        k_3: -2.65241888
      Phi_order_optical_potential:
        T0: 200
        a_1: -0.001443
        a_3: -0.396
        T0_gauge: 270
      chi_mean_field_vacuum_value: 401.933763
      baryon_to_Phi_field_coupling:
        gB_Phi_order: 1500
    computational_parameters:
      options:
        use_octet: true
        use_quarks: false
        use_decuplet: false
        use_hyperons: false
        use_Phi_order: true
        use_ideal_gas: false
        use_pure_glue: false
        vector_potential: 4
        baryon_mass_coupling: 1
        use_default_vector_couplings: true
      variables:
        mean_fields_and_Phi_field:
          phi0_end: 0
          rho0_end: 1
          phi0_step: 13.333
          rho0_step: 10
          zeta0_end: -40
          delta0_end: 1
          omega0_end: 100
          phi0_begin: -40
          rho0_begin: 0
          sigma0_end: -10
          zeta0_step: 23.333
          delta0_step: 10
          omega0_step: 33.333
          sigma0_step: 30
          zeta0_begin: -110
          delta0_begin: 0
          omega0_begin: 0
          sigma0_begin: -100
          Phi_order0_end: 0.9999
          Phi_order0_step: 0.333
          Phi_order0_begin: 0
        chemical_optical_potentials:
          muB_end: 1900
          muQ_end: 10
          muS_end: 10
          muB_step: 2
          muQ_step: 100
          muS_step: 100
          muB_begin: 900
          muQ_begin: 0
          muS_begin: 0
      output_files:
        output_debug: false
        output_Lepton: true
        output_format: CSV
        output_particle_properties: true
        output_flavor_equilibration: true
      constant_fields:
        use_constant_phi_mean_field: false
        use_constant_rho_mean_field: false
        use_constant_Phi_order_field: false
        use_constant_zeta_mean_field: false
        use_constant_delta_mean_field: false
        use_constant_omega_mean_field: false
        use_constant_sigma_mean_field: false
      solution_resolution: 1.0e-15
      maximum_for_residues: 0.0001
  module: cmf_solver
- name: lepton-1
  pipes:
    input_eos:
      label: CMF_for_Lepton_baryons_only
      module: cmf_solver
      process: cmf_solver-1
    input_particle_properties:
      label: CMF_particle_properties_baryons_only
      module: cmf_solver
      process: cmf_solver-1
    input_flavor_equilibration:
      label: CMF_for_Flavor_equilibration
      module: cmf_solver
      process: cmf_solver-1
  config:
    input:
      grid_variable: auto
    global:
      verbose: 2
      use_lepton_eos: false
      lepton_fraction: 0
      check_eos_stability: true
      use_beta_equilibrium: true
      use_charge_neutrality: true
      remove_negative_pressure: true
    output:
      output_hdf5: false
      output_compOSE: false
      output_derivatives: false
      output_particle_properties: true
      output_flavor_equilibration: true
    solver:
      method: levenbergMarquardt
      linear_solver: denseQR
      function_tolerance: 1.0e-10
      gradient_tolerance: 1.0e-12
      max_num_iterations: 1000
      parameter_tolerance: 1.0e-10
      convergence_threshold: 1.0e-07
      use_nonmonotonic_steps: true
    particles:
      use_tau: false
      use_muon: true
      use_electron: true
      use_tau_neutrino: false
      use_muon_neutrino: false
      use_extra_particles: false
      use_electron_neutrino: false
    derivatives:
      method: gsl
      finite_difference:
        precision: 1
        step_size: 0.005
        step_type: relative
    compOSE_options:
      baryon_density_points: 301
      baryon_density_spacing: linear
      charge_fraction_points: 60
      charge_fraction_spacing: linear
    lepton_eos_parameters:
      electron_cp_step: 0
      temperature_step: 0
      electron_cp_final: 0
      temperature_final: 0
      electron_cp_initial: 0
      temperature_initial: 0
      electron_neutrino_cp_step: 0
      electron_neutrino_cp_final: 0
      electron_neutrino_cp_initial: 0
    flavor_equilibration_options:
      reinterpolate_eos: false
      baryon_density_points: 301
      charge_fraction_points: 60
    multidimensional_interpolator:
      number_of_points: 100
      use_multidimensional_interpolator: false
  module: lepton
components:
- name: gooey-chain
  type: chain
  sequence:
  - cmf_solver-1
  - lepton-1

EDIT: Comparing the output files, not only does the number of rows differ, but so does the number of columns. We now have a beta_equilibrium_particle_properties file from the lepton module that has gone from 21 columns to over 100.

From this part of the config:

computational_parameters
  chemical_optical_potentials:
    muB_end: 1900
      muQ_end: 10
      muS_end: 10
      muB_step: 2
      muQ_step: 100
      muS_step: 100
      muB_begin: 900
      muQ_begin: 0
      muS_begin: 0

You are indeed only going through 500 points. Besides, the beta-equilibrium computation is returning no files because there is no grid in the muQ range, only in muB.

Do you still have the Jan. 8 config you used?

I can’t recover the configuration I used for those files, but I never changed the parameters you just showed me. I’m trying to change it now.

But I want to add that the file beta_equilibrium_particle_properties (that now shows 157 columns instead of 21 as before) presents some incongruences. If one assumes that, at least, the first 21 columns are the same as before, column 14, that should be the electron number density contains values larger than the fifth column (which appears to be correctly baryon number density), and column 15, that should be muon density, is negative (so are many other columns like 11-13)

Regarding the issue of the grid reduction: this problem, that only arose after the update, is also linked to a peculiarity we noticed before the update.

When we implemented charge neutrality and beta equilibrium using Eq. (11) from 2502.07902. In this equation, one would expect that \mu_e = -\mu_Q can be taken from column 4 of any output file (according to Table I of the same paper). However, when we tried this, we noticed that it was not working: there were no points satisfying the equation.

This is why, then, we tried then combining equations (27) and (26) from the paper, such that their difference yields \mu_Q. Using this \mu_Q, we managed to implement correctly the charge neutrality condition. However, we wonder: shouldn’t this and column 4 coincide? Not only they do not, numerically, but they also have opposite signs: column 4 is always positive, while \mu_Q = \mu_p - \mu_n is always negative.

On this matter, we have now tried to obtain a 2D grid by setting, by hand, the starting and finishing values of \mu_Q, and we have found the following things:

  • It is not possible to do it for negative values. Neither with a positive nor negative step.

  • The grid is reflected, once again, in the values of \mu_p - \mu_n. This combination of columns 13 and 14 of the file charge_neutrality_flavour_equilibration does yield exactly the starting and ending points set for the grid, with the given step.

  • Column 4, however, reflects different values: instead of starting from 0 and ending in 450, as we set, it starts in ~44 and ends in ~530, with a variable step.

We then proceeded to plot the obtained grid (green) together with the one obtained in Jan 8th (red for the core, white for ChEFT), and as you can see, they go in exactly opposite directions. This makes sense, considering that the grid from Jan 8th probed negative values of \mu_p - \mu_n. In fact, as you can see in the zoomed-in figure, they coincide exactly on the boundary, and then depart towards opposing directions.

So adding to the issue that, while before the update, without changing any of the computational parameters related to the grid we were obtaining it correctly and now is not the case, now, changing them does not allow us to obtain the proper grid, with negative values of \mu_p - \mu_n.

We have tried starting at -450 ending at 0 with a positive step, and we got a very nasty error message. We also tried starting at 0 and ending at -450 but negative steps are not accepted by the code.

Thank you very much in advance, we hope we can provide some help into solving this issue.

Best regards,

Federico and Fernando

Let’s try breaking down this discussion, as there are several issues being mixed:

The particle properties file always interpolates the file that was passed as input and appends the lepton properties at the end. This means each module has a different number of columns in the particle properties. If you read the beta_equilibrium.ipynb script (download here) you’ll see Crust-DFT + Lepton outputs 29 columns in the particle properties, and CMF + Lepton has 157 columns. This is true both for charge neutrality and beta equilibrium outputs and has not changed with the update.

On the beta-equilibrium calculation, Eq. 11 from 2502.07902 enforces charge neutrality, but not beta-equilibrium.

By definition of the chemical potentials in the CE, you will always have \mu_Q = \mu_p - \mu_n. The beta-equilibrium condition will reduce the 2d table to 1d, by setting \mu_Q = - \mu_e, but in the charge neutrality files, this relation (\mu_Q = - \mu_e) does not hold.

My question would be: from which file are you reading the grid from? For which module? What is the config? You can also share the UUID if it’s a recent job, and I can find the config from here.

On the mu_Q grid, if you are talking about CMF, you should be able to run the muQ grid with

muQ_begin: -450.0
muQ_end: 0.0
muQ_step: 2.0

which is similar to the one shown in our tutorial. Since the module itself was not updated, any change in grid behavior must come from the input configuration or the post-processing scripts.

However, if you ran the code today and got this “nasty error”:

Error message
File "/home/ce/.local/lib/python3.11/site-packages/celery/app/trace.py", line 479, in trace_task R = retval = fun(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^ File "/home/ce/.local/lib/python3.11/site-packages/celery/app/trace.py", line 779, in __protected_call__ return self.run(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/app/calculation_engine/tasks.py", line 416, in run_module s3.store_folder( File "/opt/app/calculation_engine/object_store.py", line 55, in store_folder self.put_object( File "/opt/app/calculation_engine/object_store.py", line 75, in put_object self.client.fput_object(bucket_name=self.bucket, object_name=path, file_path=file_path) File "/home/ce/.local/lib/python3.11/site-packages/minio/api.py", line 1054, in fput_object return self.put_object( ^^^^^^^^^^^^^^^^ File "/home/ce/.local/lib/python3.11/site-packages/minio/api.py", line 2015, in put_object raise exc File "/home/ce/.local/lib/python3.11/site-packages/minio/api.py", line 1965, in put_object upload_id = self._create_multipart_upload( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/ce/.local/lib/python3.11/site-packages/minio/api.py", line 1770, in _create_multipart_upload response = self._execute( ^^^^^^^^^^^^^^ File "/home/ce/.local/lib/python3.11/site-packages/minio/api.py", line 444, in _execute return self._url_open( ^^^^^^^^^^^^^^^ File "/home/ce/.local/lib/python3.11/site-packages/minio/api.py", line 427, in _url_open raise response_error minio.error.MinioException: S3 operation failed; code: SlowDown, message: , resource: None, request_id: tx00000853b1ef9c3f2f4d2-006980dbf7-8ed7a1-default, host_id: 8ed7a1-default-default

It is likely an issue with the deployment of the CE and not the modules themselves. It happened to many modules this morning, and it should be fixed soon.

Regarding the update, let me reiterate that it did not change the version of the modules we are referring to, which means they work exactly as before. Therefore, any change in output should come only from a change in the config files used or in the script used for reading and manipulating the files.

Unfortunately, since the original configuration file (from your previous run) was not saved, and there is no git history we can check, there is no way for us to reproduce the error and check your previous results. What I can say is that we have a large set of unit tests when the CE is updated to make sure workflows are running as expected, and on our side, no errors were spotted.

If you’d like to share the plotting scripts and the associated config files you used to generate the data, I’d be happy to take a look and help determine whether there are any issues in the setup, or in the modules themselves.