Visualizing the 2D Ising Model with Monte Carlo Algorithm

Click For Summary

Discussion Overview

The discussion revolves around implementing a Monte Carlo algorithm to visualize the 2D Ising Model, focusing on the challenges of updating a plot in real-time during iterations. Participants explore technical issues related to output buffering and program execution in C, particularly when interfacing with gnuplot.

Discussion Character

  • Technical explanation
  • Exploratory
  • Debate/contested

Main Points Raised

  • One participant describes their approach to visualizing the 2D Ising Model using a Monte Carlo algorithm and mentions issues with plotting updates in gnuplot.
  • Another participant suggests flushing the pipeline to ensure that output is sent to gnuplot immediately, rather than waiting for the buffer to fill or the pipe to close.
  • A later reply confirms that using fflush after each fprintf resolved the initial plotting issue but introduces a new problem related to program hanging and a glibc error after the last iteration.
  • Another participant proposes ensuring that gnuplot exits normally and suggests adding print commands to debug where the program hangs.

Areas of Agreement / Disagreement

Participants generally agree on the need to manage output buffering to update plots in real-time, but the discussion remains unresolved regarding the cause of the program hanging and the glibc error.

Contextual Notes

The discussion highlights potential issues with output buffering in C and the interaction between the program and gnuplot, but does not resolve the specifics of the glibc error or the hanging issue.

maverick280857
Messages
1,774
Reaction score
5
Hi,

So I'm trying to solve the 2D Ising Model using a simple Monte Carlo algorithm, for small square lattices, imposing periodic boundary conditions. Before I compute any thermodynamic quantities though, I want to study the energetics of the system with only nearest-neighbour interactions.

I want to visualize the system at every iteration of the Monte Carlo loop. The idea is to store the state of the lattice in a matrix, with each site storing the value +1 for spin up, and -1 for spin down.

A computer program I've written in C with a friend generates a data file with the state of the matrix. I then use a pipe to call gnuplot from within this program, to plot the file.

However, I notice that the plot window appears only after the pipe is closed -- presumably it is then that gnuplot is actually executed the first time, with all the arguments sent through the pipe. This means the plot window does not show up at a specific time of your choice, and in fact shows up at the end of the program.

Now, I want to visualize the matrix at every iteration, so for that, I need to call gnuplot (through the same pipe pointer) in every iteration, so that the existing plot is updated. How can this be done?

If I just naively include a plot command (through fprintf), then the plot shows up for the first time after some 20 or 30 iterations (depending on the size of the lattice).

Thanks in advance!
 
Technology news on Phys.org


you may need to flush the pipeline. If the C output is buffered, it will only be written when the buffer is full, or when the file/pipe is closed. You can manually trigger the flushing using fflush(file handle). Otherwise there may be a flag to open the pipe in an unbuffered mode.
 


M Quack said:
you may need to flush the pipeline. If the C output is buffered, it will only be written when the buffer is full, or when the file/pipe is closed. You can manually trigger the flushing using fflush(file handle). Otherwise there may be a flag to open the pipe in an unbuffered mode.

Thanks M Quack! Using fflush after every fprintf seems to have done the trick. However, I get the following error after the last iteration, and the program simply hangs (without exiting).

Code:
glibc detected *** ./ising: corrupted double-linked list: 0x000000000093e000 ***
 


No clue. Make sure Gnuplot exits normally (send exit command) before you kill the pipe?!? Otherwise throw in a hand full of print commands to see how far it goes and where it hangs.
 

Similar threads

  • · Replies 10 ·
Replies
10
Views
3K
  • · Replies 0 ·
Replies
0
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 1 ·
Replies
1
Views
5K
  • · Replies 6 ·
Replies
6
Views
5K
  • · Replies 5 ·
Replies
5
Views
4K
  • · Replies 17 ·
Replies
17
Views
5K
Replies
6
Views
3K
  • · Replies 5 ·
Replies
5
Views
2K
  • · Replies 1 ·
Replies
1
Views
4K