How to add many monitors?

Hey guys,

I’m trying to monitor the reactant concentration level along a 2D pipe in TFM model. I need to distribute about 40 of them along half of the pipe uniformly. Is there an easy way to do this? Or do I have to use something like a python script to modify the .mfx file?

Thanks,
Jack

Jack - this is a good question. The GUI does not have a feature to create a group of equally-spaced monitors, although I can see that this might be a nice feature to have. It’s also possible that NodeWorks might be of some use although I don’t know enough about it to help you with that.

Here’s what I recommend:

In the MFIX GUI, all BCs, monitors, etc are associated with a ‘region’ defined in the Regions pane. This is really for user convenience, the ‘region’ objects are not used by the MFiX solver, by the time it runs everything is just coordinates. So you can define new monitors in the .mfx file without having to create regions for them.

If you create a single monitor, you will see something like this in your .mfx file:

# Monitors
  # Monitor 1: Entire domain
    monitor_type(1) = 3
    monitor_name(1) = 'Entire_domain'
    monitor_x_e(1)  = 0.15 #!MFIX-GUI eq{float(xmax)}
    monitor_x_w(1)  = 0.0 #!MFIX-GUI eq{float(xmin)}
    monitor_y_s(1)  = 0.0 #!MFIX-GUI eq{float(ymin)}
    monitor_y_n(1)  = 0.9 #!MFIX-GUI eq{float(ymax)}
    monitor_dt(1)   = 0.05
    monitor_p_g(1)  = .True.

This matches a region which has been defined as “entire domain”. The region definitions can be found in the MFiX-GUI section, they are used by the GUI but not the solver.

  # Monitor 2
    monitor_type(2) = 3
    monitor_name(2) = 'M2'
    monitor_x_e(2)  = 0.19
    monitor_x_w(2)  = 0.01
    monitor_y_s(2)  = 0.01
    monitor_y_n(2)  = 0.91
    monitor_dt(2)   = 0.051
    monitor_p_g(1)  = .True.
    
  # Monitor 3
    monitor_type(3) = 3
    monitor_name(3) = 'M3'
    monitor_x_e(3)  = 0.20
    monitor_x_w(3)  = 0.021
    monitor_y_s(3)  = 0.021
    monitor_y_n(3)  = 0.921
    monitor_dt(3)   = 0.0521
    monitor_p_g(1)  = .True.

you should have as many monitors as you like. It should be pretty easy to write a script to spit out the needed lines.

Now, if you try to load this .mfx file in the GUI, since the monitors you added do not have a region associated with them, the GUI doesn’t display them in any way - the table in the Monitors pane still shows only the ones you created in the GUI. But they won’t be deleted, if you make changes in the GUI and save the file, the externally-defined monitors are still there (I tested this). This is arguably a bug, or at the very least an incomplete implementation - the GUI should either automatically create region objects corresponding to these monitors, or it should complain that there are monitors it can’t display. The current behavior is buggy but it’s a bug you can take advantage of!

In fact there’s a note in the code that we should automatically create region objects, or else complain if monitors/BCs/ICs etc are defined without having a corresponding region definition … this is the first time it’s really come up as an issue, as far as I know. It will be addressed in a future release.

  • Charles
1 Like

This doesn’t really answer your question, but you can copy existing regions, and only change one coordinate to create a new region. This could help you create a large number a regions a bit faster. Select a region and click the “copy” icon.

image

1 Like