summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOliver Schinagl <oliver@schinagl.nl>2008-01-04 17:26:22 (GMT)
committerOliver Schinagl <oliver@schinagl.nl>2008-01-04 17:26:22 (GMT)
commitcf983359977dbea21b49747e3430725209a804ee (patch)
treec69181513a7ba12d365330b614b3b7586410f6e4
parentb12d6854cbb458c3de11266efefa8fb2ea11a1cf (diff)
download2iv35-cf983359977dbea21b49747e3430725209a804ee.zip
2iv35-cf983359977dbea21b49747e3430725209a804ee.tar.gz
2iv35-cf983359977dbea21b49747e3430725209a804ee.tar.bz2
force/vel/rho now selectable (for flowvis)
-rw-r--r--Smoke/Makefile2
-rw-r--r--Smoke/colormap.c3
-rw-r--r--Smoke/fluids.c162
-rw-r--r--Smoke/fluids.h36
-rw-r--r--Smoke/glyphs.c10
-rw-r--r--Smoke/glyphs.h4
-rw-r--r--Smoke/gtk.c19
-rw-r--r--Smoke/gtk_main.c91
-rw-r--r--Smoke/heightplots.c13
-rw-r--r--Smoke/heightplots.h3
-rw-r--r--Smoke/renderer_gl.c57
-rw-r--r--Smoke/renderer_gl.h2
-rwxr-xr-xSmoke/smoke.binbin626063 -> 631486 bytes
-rw-r--r--Smoke/smoke.c6
-rw-r--r--Smoke/smoke.h2
15 files changed, 294 insertions, 116 deletions
diff --git a/Smoke/Makefile b/Smoke/Makefile
index 1217e1d..d300bae 100644
--- a/Smoke/Makefile
+++ b/Smoke/Makefile
@@ -2,7 +2,7 @@
# Makefile created by Dev-C++ 4.9.9.2
CPP = g++
-CC = colorgcc -Wall
+CC = gcc -Wall
OBJ_GTK = funcs.o interact.o fluids.o smoke.o colormap.o glyphs.o divergence.o isolines.o heightplots.o seedpoint.o streamlines.o flowvis.o palette.o gtk_main.o gtk_colormap.o gtk_glyphs.o gtk_divergence.o gtk_isolines.o gtk_heightplots.o gtk_streamlines.o gtk_flowvis.o gtk.o renderer_gl.o fftw-2.1.3/fftw/config.o fftw-2.1.3/fftw/executor.o fftw-2.1.3/fftw/fftwf77.o fftw-2.1.3/fftw/fftwnd.o fftw-2.1.3/fftw/fn_1.o fftw-2.1.3/fftw/fn_2.o fftw-2.1.3/fftw/fn_3.o fftw-2.1.3/fftw/fn_4.o fftw-2.1.3/fftw/fn_5.o fftw-2.1.3/fftw/fn_6.o fftw-2.1.3/fftw/fn_7.o fftw-2.1.3/fftw/fn_8.o fftw-2.1.3/fftw/fn_9.o fftw-2.1.3/fftw/fn_10.o fftw-2.1.3/fftw/fn_11.o fftw-2.1.3/fftw/fn_12.o fftw-2.1.3/fftw/fn_13.o fftw-2.1.3/fftw/fn_14.o fftw-2.1.3/fftw/fn_15.o fftw-2.1.3/fftw/fn_16.o fftw-2.1.3/fftw/fn_32.o fftw-2.1.3/fftw/fn_64.o fftw-2.1.3/fftw/fni_1.o fftw-2.1.3/fftw/fni_2.o fftw-2.1.3/fftw/fni_3.o fftw-2.1.3/fftw/fni_4.o fftw-2.1.3/fftw/fni_5.o fftw-2.1.3/fftw/fni_6.o fftw-2.1.3/fftw/fni_7.o fftw-2.1.3/fftw/fni_8.o fftw-2.1.3/fftw/fni_9.o fftw-2.1.3/fftw/fni_10.o fftw-2.1.3/fftw/fni_11.o fftw-2.1.3/fftw/fni_12.o fftw-2.1.3/fftw/fni_13.o fftw-2.1.3/fftw/fni_14.o fftw-2.1.3/fftw/fni_15.o fftw-2.1.3/fftw/fni_16.o fftw-2.1.3/fftw/fni_32.o fftw-2.1.3/fftw/fni_64.o fftw-2.1.3/fftw/ftw_2.o fftw-2.1.3/fftw/ftw_3.o fftw-2.1.3/fftw/ftw_4.o fftw-2.1.3/fftw/ftw_5.o fftw-2.1.3/fftw/ftw_6.o fftw-2.1.3/fftw/ftw_7.o fftw-2.1.3/fftw/ftw_8.o fftw-2.1.3/fftw/ftw_9.o fftw-2.1.3/fftw/ftw_10.o fftw-2.1.3/fftw/ftw_16.o fftw-2.1.3/fftw/ftw_32.o fftw-2.1.3/fftw/ftw_64.o fftw-2.1.3/fftw/ftwi_2.o fftw-2.1.3/fftw/ftwi_3.o fftw-2.1.3/fftw/ftwi_4.o fftw-2.1.3/fftw/ftwi_5.o fftw-2.1.3/fftw/ftwi_6.o fftw-2.1.3/fftw/ftwi_7.o fftw-2.1.3/fftw/ftwi_8.o fftw-2.1.3/fftw/ftwi_9.o fftw-2.1.3/fftw/ftwi_10.o fftw-2.1.3/fftw/ftwi_16.o fftw-2.1.3/fftw/ftwi_32.o fftw-2.1.3/fftw/ftwi_64.o fftw-2.1.3/fftw/generic.o fftw-2.1.3/fftw/malloc.o fftw-2.1.3/fftw/planner.o fftw-2.1.3/fftw/putils.o fftw-2.1.3/fftw/rader.o fftw-2.1.3/fftw/timer.o fftw-2.1.3/fftw/twiddle.o fftw-2.1.3/fftw/wisdom.o fftw-2.1.3/fftw/wisdomio.o fftw-2.1.3/rfftw/fcr_1.o fftw-2.1.3/rfftw/fcr_2.o fftw-2.1.3/rfftw/fcr_3.o fftw-2.1.3/rfftw/fcr_4.o fftw-2.1.3/rfftw/fcr_5.o fftw-2.1.3/rfftw/fcr_6.o fftw-2.1.3/rfftw/fcr_7.o fftw-2.1.3/rfftw/fcr_8.o fftw-2.1.3/rfftw/fcr_9.o fftw-2.1.3/rfftw/fcr_10.o fftw-2.1.3/rfftw/fcr_11.o fftw-2.1.3/rfftw/fcr_12.o fftw-2.1.3/rfftw/fcr_13.o fftw-2.1.3/rfftw/fcr_14.o fftw-2.1.3/rfftw/fcr_15.o fftw-2.1.3/rfftw/fcr_16.o fftw-2.1.3/rfftw/fcr_32.o fftw-2.1.3/rfftw/fcr_64.o fftw-2.1.3/rfftw/fcr_128.o fftw-2.1.3/rfftw/fhb_2.o fftw-2.1.3/rfftw/fhb_3.o fftw-2.1.3/rfftw/fhb_4.o fftw-2.1.3/rfftw/fhb_5.o fftw-2.1.3/rfftw/fhb_6.o fftw-2.1.3/rfftw/fhb_7.o fftw-2.1.3/rfftw/fhb_8.o fftw-2.1.3/rfftw/fhb_9.o fftw-2.1.3/rfftw/fhb_10.o fftw-2.1.3/rfftw/fhb_16.o fftw-2.1.3/rfftw/fhb_32.o fftw-2.1.3/rfftw/fhf_2.o fftw-2.1.3/rfftw/fhf_3.o fftw-2.1.3/rfftw/fhf_4.o fftw-2.1.3/rfftw/fhf_5.o fftw-2.1.3/rfftw/fhf_6.o fftw-2.1.3/rfftw/fhf_7.o fftw-2.1.3/rfftw/fhf_8.o fftw-2.1.3/rfftw/fhf_9.o fftw-2.1.3/rfftw/fhf_10.o fftw-2.1.3/rfftw/fhf_16.o fftw-2.1.3/rfftw/fhf_32.o fftw-2.1.3/rfftw/frc_1.o fftw-2.1.3/rfftw/frc_2.o fftw-2.1.3/rfftw/frc_3.o fftw-2.1.3/rfftw/frc_4.o fftw-2.1.3/rfftw/frc_5.o fftw-2.1.3/rfftw/frc_6.o fftw-2.1.3/rfftw/frc_7.o fftw-2.1.3/rfftw/frc_8.o fftw-2.1.3/rfftw/frc_9.o fftw-2.1.3/rfftw/frc_10.o fftw-2.1.3/rfftw/frc_11.o fftw-2.1.3/rfftw/frc_12.o fftw-2.1.3/rfftw/frc_13.o fftw-2.1.3/rfftw/frc_14.o fftw-2.1.3/rfftw/frc_15.o fftw-2.1.3/rfftw/frc_16.o fftw-2.1.3/rfftw/frc_32.o fftw-2.1.3/rfftw/frc_64.o fftw-2.1.3/rfftw/frc_128.o fftw-2.1.3/rfftw/rconfig.o fftw-2.1.3/rfftw/rexec2.o fftw-2.1.3/rfftw/rexec.o fftw-2.1.3/rfftw/rfftwf77.o fftw-2.1.3/rfftw/rfftwnd.o fftw-2.1.3/rfftw/rgeneric.o fftw-2.1.3/rfftw/rplanner.o $(RES)
OBJ_GLUT = glut.o fluids.o colormap.o glyphs.o seedpoint.o streamlines.o palette.o funcs.o interact.o fftw-2.1.3/fftw/config.o fftw-2.1.3/fftw/executor.o fftw-2.1.3/fftw/fftwf77.o fftw-2.1.3/fftw/fftwnd.o fftw-2.1.3/fftw/fn_1.o fftw-2.1.3/fftw/fn_2.o fftw-2.1.3/fftw/fn_3.o fftw-2.1.3/fftw/fn_4.o fftw-2.1.3/fftw/fn_5.o fftw-2.1.3/fftw/fn_6.o fftw-2.1.3/fftw/fn_7.o fftw-2.1.3/fftw/fn_8.o fftw-2.1.3/fftw/fn_9.o fftw-2.1.3/fftw/fn_10.o fftw-2.1.3/fftw/fn_11.o fftw-2.1.3/fftw/fn_12.o fftw-2.1.3/fftw/fn_13.o fftw-2.1.3/fftw/fn_14.o fftw-2.1.3/fftw/fn_15.o fftw-2.1.3/fftw/fn_16.o fftw-2.1.3/fftw/fn_32.o fftw-2.1.3/fftw/fn_64.o fftw-2.1.3/fftw/fni_1.o fftw-2.1.3/fftw/fni_2.o fftw-2.1.3/fftw/fni_3.o fftw-2.1.3/fftw/fni_4.o fftw-2.1.3/fftw/fni_5.o fftw-2.1.3/fftw/fni_6.o fftw-2.1.3/fftw/fni_7.o fftw-2.1.3/fftw/fni_8.o fftw-2.1.3/fftw/fni_9.o fftw-2.1.3/fftw/fni_10.o fftw-2.1.3/fftw/fni_11.o fftw-2.1.3/fftw/fni_12.o fftw-2.1.3/fftw/fni_13.o fftw-2.1.3/fftw/fni_14.o fftw-2.1.3/fftw/fni_15.o fftw-2.1.3/fftw/fni_16.o fftw-2.1.3/fftw/fni_32.o fftw-2.1.3/fftw/fni_64.o fftw-2.1.3/fftw/ftw_2.o fftw-2.1.3/fftw/ftw_3.o fftw-2.1.3/fftw/ftw_4.o fftw-2.1.3/fftw/ftw_5.o fftw-2.1.3/fftw/ftw_6.o fftw-2.1.3/fftw/ftw_7.o fftw-2.1.3/fftw/ftw_8.o fftw-2.1.3/fftw/ftw_9.o fftw-2.1.3/fftw/ftw_10.o fftw-2.1.3/fftw/ftw_16.o fftw-2.1.3/fftw/ftw_32.o fftw-2.1.3/fftw/ftw_64.o fftw-2.1.3/fftw/ftwi_2.o fftw-2.1.3/fftw/ftwi_3.o fftw-2.1.3/fftw/ftwi_4.o fftw-2.1.3/fftw/ftwi_5.o fftw-2.1.3/fftw/ftwi_6.o fftw-2.1.3/fftw/ftwi_7.o fftw-2.1.3/fftw/ftwi_8.o fftw-2.1.3/fftw/ftwi_9.o fftw-2.1.3/fftw/ftwi_10.o fftw-2.1.3/fftw/ftwi_16.o fftw-2.1.3/fftw/ftwi_32.o fftw-2.1.3/fftw/ftwi_64.o fftw-2.1.3/fftw/generic.o fftw-2.1.3/fftw/malloc.o fftw-2.1.3/fftw/planner.o fftw-2.1.3/fftw/putils.o fftw-2.1.3/fftw/rader.o fftw-2.1.3/fftw/timer.o fftw-2.1.3/fftw/twiddle.o fftw-2.1.3/fftw/wisdom.o fftw-2.1.3/fftw/wisdomio.o fftw-2.1.3/rfftw/fcr_1.o fftw-2.1.3/rfftw/fcr_2.o fftw-2.1.3/rfftw/fcr_3.o fftw-2.1.3/rfftw/fcr_4.o fftw-2.1.3/rfftw/fcr_5.o fftw-2.1.3/rfftw/fcr_6.o fftw-2.1.3/rfftw/fcr_7.o fftw-2.1.3/rfftw/fcr_8.o fftw-2.1.3/rfftw/fcr_9.o fftw-2.1.3/rfftw/fcr_10.o fftw-2.1.3/rfftw/fcr_11.o fftw-2.1.3/rfftw/fcr_12.o fftw-2.1.3/rfftw/fcr_13.o fftw-2.1.3/rfftw/fcr_14.o fftw-2.1.3/rfftw/fcr_15.o fftw-2.1.3/rfftw/fcr_16.o fftw-2.1.3/rfftw/fcr_32.o fftw-2.1.3/rfftw/fcr_64.o fftw-2.1.3/rfftw/fcr_128.o fftw-2.1.3/rfftw/fhb_2.o fftw-2.1.3/rfftw/fhb_3.o fftw-2.1.3/rfftw/fhb_4.o fftw-2.1.3/rfftw/fhb_5.o fftw-2.1.3/rfftw/fhb_6.o fftw-2.1.3/rfftw/fhb_7.o fftw-2.1.3/rfftw/fhb_8.o fftw-2.1.3/rfftw/fhb_9.o fftw-2.1.3/rfftw/fhb_10.o fftw-2.1.3/rfftw/fhb_16.o fftw-2.1.3/rfftw/fhb_32.o fftw-2.1.3/rfftw/fhf_2.o fftw-2.1.3/rfftw/fhf_3.o fftw-2.1.3/rfftw/fhf_4.o fftw-2.1.3/rfftw/fhf_5.o fftw-2.1.3/rfftw/fhf_6.o fftw-2.1.3/rfftw/fhf_7.o fftw-2.1.3/rfftw/fhf_8.o fftw-2.1.3/rfftw/fhf_9.o fftw-2.1.3/rfftw/fhf_10.o fftw-2.1.3/rfftw/fhf_16.o fftw-2.1.3/rfftw/fhf_32.o fftw-2.1.3/rfftw/frc_1.o fftw-2.1.3/rfftw/frc_2.o fftw-2.1.3/rfftw/frc_3.o fftw-2.1.3/rfftw/frc_4.o fftw-2.1.3/rfftw/frc_5.o fftw-2.1.3/rfftw/frc_6.o fftw-2.1.3/rfftw/frc_7.o fftw-2.1.3/rfftw/frc_8.o fftw-2.1.3/rfftw/frc_9.o fftw-2.1.3/rfftw/frc_10.o fftw-2.1.3/rfftw/frc_11.o fftw-2.1.3/rfftw/frc_12.o fftw-2.1.3/rfftw/frc_13.o fftw-2.1.3/rfftw/frc_14.o fftw-2.1.3/rfftw/frc_15.o fftw-2.1.3/rfftw/frc_16.o fftw-2.1.3/rfftw/frc_32.o fftw-2.1.3/rfftw/frc_64.o fftw-2.1.3/rfftw/frc_128.o fftw-2.1.3/rfftw/rconfig.o fftw-2.1.3/rfftw/rexec2.o fftw-2.1.3/rfftw/rexec.o fftw-2.1.3/rfftw/rfftwf77.o fftw-2.1.3/rfftw/rfftwnd.o fftw-2.1.3/rfftw/rgeneric.o fftw-2.1.3/rfftw/rplanner.o $(RES)
LINKOBJ_GLUT = fluids.o colormap.o glyphs.o seedpoint.o streamlines.o palette.o funcs.o interact.o glut.o fftw-2.1.3/fftw/config.o fftw-2.1.3/fftw/executor.o fftw-2.1.3/fftw/fftwf77.o fftw-2.1.3/fftw/fftwnd.o fftw-2.1.3/fftw/fn_1.o fftw-2.1.3/fftw/fn_2.o fftw-2.1.3/fftw/fn_3.o fftw-2.1.3/fftw/fn_4.o fftw-2.1.3/fftw/fn_5.o fftw-2.1.3/fftw/fn_6.o fftw-2.1.3/fftw/fn_7.o fftw-2.1.3/fftw/fn_8.o fftw-2.1.3/fftw/fn_9.o fftw-2.1.3/fftw/fn_10.o fftw-2.1.3/fftw/fn_11.o fftw-2.1.3/fftw/fn_12.o fftw-2.1.3/fftw/fn_13.o fftw-2.1.3/fftw/fn_14.o fftw-2.1.3/fftw/fn_15.o fftw-2.1.3/fftw/fn_16.o fftw-2.1.3/fftw/fn_32.o fftw-2.1.3/fftw/fn_64.o fftw-2.1.3/fftw/fni_1.o fftw-2.1.3/fftw/fni_2.o fftw-2.1.3/fftw/fni_3.o fftw-2.1.3/fftw/fni_4.o fftw-2.1.3/fftw/fni_5.o fftw-2.1.3/fftw/fni_6.o fftw-2.1.3/fftw/fni_7.o fftw-2.1.3/fftw/fni_8.o fftw-2.1.3/fftw/fni_9.o fftw-2.1.3/fftw/fni_10.o fftw-2.1.3/fftw/fni_11.o fftw-2.1.3/fftw/fni_12.o fftw-2.1.3/fftw/fni_13.o fftw-2.1.3/fftw/fni_14.o fftw-2.1.3/fftw/fni_15.o fftw-2.1.3/fftw/fni_16.o fftw-2.1.3/fftw/fni_32.o fftw-2.1.3/fftw/fni_64.o fftw-2.1.3/fftw/ftw_2.o fftw-2.1.3/fftw/ftw_3.o fftw-2.1.3/fftw/ftw_4.o fftw-2.1.3/fftw/ftw_5.o fftw-2.1.3/fftw/ftw_6.o fftw-2.1.3/fftw/ftw_7.o fftw-2.1.3/fftw/ftw_8.o fftw-2.1.3/fftw/ftw_9.o fftw-2.1.3/fftw/ftw_10.o fftw-2.1.3/fftw/ftw_16.o fftw-2.1.3/fftw/ftw_32.o fftw-2.1.3/fftw/ftw_64.o fftw-2.1.3/fftw/ftwi_2.o fftw-2.1.3/fftw/ftwi_3.o fftw-2.1.3/fftw/ftwi_4.o fftw-2.1.3/fftw/ftwi_5.o fftw-2.1.3/fftw/ftwi_6.o fftw-2.1.3/fftw/ftwi_7.o fftw-2.1.3/fftw/ftwi_8.o fftw-2.1.3/fftw/ftwi_9.o fftw-2.1.3/fftw/ftwi_10.o fftw-2.1.3/fftw/ftwi_16.o fftw-2.1.3/fftw/ftwi_32.o fftw-2.1.3/fftw/ftwi_64.o fftw-2.1.3/fftw/generic.o fftw-2.1.3/fftw/malloc.o fftw-2.1.3/fftw/planner.o fftw-2.1.3/fftw/putils.o fftw-2.1.3/fftw/rader.o fftw-2.1.3/fftw/timer.o fftw-2.1.3/fftw/twiddle.o fftw-2.1.3/fftw/wisdom.o fftw-2.1.3/fftw/wisdomio.o fftw-2.1.3/rfftw/fcr_1.o fftw-2.1.3/rfftw/fcr_2.o fftw-2.1.3/rfftw/fcr_3.o fftw-2.1.3/rfftw/fcr_4.o fftw-2.1.3/rfftw/fcr_5.o fftw-2.1.3/rfftw/fcr_6.o fftw-2.1.3/rfftw/fcr_7.o fftw-2.1.3/rfftw/fcr_8.o fftw-2.1.3/rfftw/fcr_9.o fftw-2.1.3/rfftw/fcr_10.o fftw-2.1.3/rfftw/fcr_11.o fftw-2.1.3/rfftw/fcr_12.o fftw-2.1.3/rfftw/fcr_13.o fftw-2.1.3/rfftw/fcr_14.o fftw-2.1.3/rfftw/fcr_15.o fftw-2.1.3/rfftw/fcr_16.o fftw-2.1.3/rfftw/fcr_32.o fftw-2.1.3/rfftw/fcr_64.o fftw-2.1.3/rfftw/fcr_128.o fftw-2.1.3/rfftw/fhb_2.o fftw-2.1.3/rfftw/fhb_3.o fftw-2.1.3/rfftw/fhb_4.o fftw-2.1.3/rfftw/fhb_5.o fftw-2.1.3/rfftw/fhb_6.o fftw-2.1.3/rfftw/fhb_7.o fftw-2.1.3/rfftw/fhb_8.o fftw-2.1.3/rfftw/fhb_9.o fftw-2.1.3/rfftw/fhb_10.o fftw-2.1.3/rfftw/fhb_16.o fftw-2.1.3/rfftw/fhb_32.o fftw-2.1.3/rfftw/fhf_2.o fftw-2.1.3/rfftw/fhf_3.o fftw-2.1.3/rfftw/fhf_4.o fftw-2.1.3/rfftw/fhf_5.o fftw-2.1.3/rfftw/fhf_6.o fftw-2.1.3/rfftw/fhf_7.o fftw-2.1.3/rfftw/fhf_8.o fftw-2.1.3/rfftw/fhf_9.o fftw-2.1.3/rfftw/fhf_10.o fftw-2.1.3/rfftw/fhf_16.o fftw-2.1.3/rfftw/fhf_32.o fftw-2.1.3/rfftw/frc_1.o fftw-2.1.3/rfftw/frc_2.o fftw-2.1.3/rfftw/frc_3.o fftw-2.1.3/rfftw/frc_4.o fftw-2.1.3/rfftw/frc_5.o fftw-2.1.3/rfftw/frc_6.o fftw-2.1.3/rfftw/frc_7.o fftw-2.1.3/rfftw/frc_8.o fftw-2.1.3/rfftw/frc_9.o fftw-2.1.3/rfftw/frc_10.o fftw-2.1.3/rfftw/frc_11.o fftw-2.1.3/rfftw/frc_12.o fftw-2.1.3/rfftw/frc_13.o fftw-2.1.3/rfftw/frc_14.o fftw-2.1.3/rfftw/frc_15.o fftw-2.1.3/rfftw/frc_16.o fftw-2.1.3/rfftw/frc_32.o fftw-2.1.3/rfftw/frc_64.o fftw-2.1.3/rfftw/frc_128.o fftw-2.1.3/rfftw/rconfig.o fftw-2.1.3/rfftw/rexec2.o fftw-2.1.3/rfftw/rexec.o fftw-2.1.3/rfftw/rfftwf77.o fftw-2.1.3/rfftw/rfftwnd.o fftw-2.1.3/rfftw/rgeneric.o fftw-2.1.3/rfftw/rplanner.o $(RES)
diff --git a/Smoke/colormap.c b/Smoke/colormap.c
index 392bbac..ae6ba4f 100644
--- a/Smoke/colormap.c
+++ b/Smoke/colormap.c
@@ -166,12 +166,13 @@ fftw_real *colormap_get_frame(void)
void colormap_autoscale(void)
{
if (colormap_autoscaling) {
- int k;
+ int k, DIM;
float value, scale_min, scale_max;
scale_min = scale_max = get_dataset(0);
colormap_scale_min = scale_min;
colormap_scale_max = scale_max;
+ DIM = fluids_get_dim();
for (k = 1; k < DIM * DIM; k++)
{
diff --git a/Smoke/fluids.c b/Smoke/fluids.c
index 6071d36..0dc8469 100644
--- a/Smoke/fluids.c
+++ b/Smoke/fluids.c
@@ -19,9 +19,10 @@
#include "fluids.h"
#include "smoke.h"
#include "colormap.h"
+#include "glyphs.h"
+#include "heightplots.h"
//--- SIMULATION PARAMETERS ------------------------------------------------------------------------
-const int DIM = 50; //size of simulation grid
int var_dims = 25;
double dt = 0.4; //simulation time step
float visc = 0.001f; //fluid viscosity
@@ -49,53 +50,55 @@ float threshold2 = 2.0f;
int isolines_nr = 1;
static int fluids_calculate = TRUE;
+static int DIM; //size of simulation grid
//------ SIMULATION CODE STARTS HERE -----------------------------------------------------------------
//init_simulation: Initialize simulation data structures as a function of the grid size 'n'.
// Although the simulation takes place on a 2D grid, we allocate all data structures as 1D arrays,
// for compatibility with the FFTW numerical library.
-fftw_real *init_simulation(int n)
+fftw_real *init_simulation(int n, struct vis_data_arrays *vis_data)
{
- int i; size_t dim;
+ int i; size_t dim1, dim2;
fftw_real *return_value;
+
+ DIM = n;
- dim = n * 2*(n/2+1)*sizeof(fftw_real); //Allocate data structures
- return_value = (fftw_real *)malloc(dim);
- vx = (fftw_real*) malloc(dim);
- vy = (fftw_real*) malloc(dim);
- vx0 = (fftw_real*) malloc(dim);
- vy0 = (fftw_real*) malloc(dim);
- dim = n * n * sizeof(fftw_real);
- fx = (fftw_real*) malloc(dim);
- fy = (fftw_real*) malloc(dim);
- rho = (fftw_real*) malloc(dim);
- rho0 = (fftw_real*) malloc(dim);
+ dim1 = n * 2*(n/2+1)*sizeof(fftw_real); //Allocate data structures
+ return_value = (fftw_real *)malloc(dim1);
+ vx = (fftw_real*) malloc(dim1);
+ vy = (fftw_real*) malloc(dim1);
+ vx0 = (fftw_real*) malloc(dim1);
+ vy0 = (fftw_real*) malloc(dim1);
+ dim2 = n * n * sizeof(fftw_real);
+ fx = (fftw_real*) malloc(dim2);
+ fy = (fftw_real*) malloc(dim2);
+ rho = (fftw_real*) malloc(dim2);
+ rho0 = (fftw_real*) malloc(dim2);
plan_rc = rfftw2d_create_plan(n, n, FFTW_REAL_TO_COMPLEX, FFTW_IN_PLACE);
plan_cr = rfftw2d_create_plan(n, n, FFTW_COMPLEX_TO_REAL, FFTW_IN_PLACE);
- height_array = (fftw_real*) malloc(dim);
- normal_array = (struct point*) malloc(dim);
- frame_hist = (fftw_real*) malloc(dim * n);
+ height_array = (fftw_real*) malloc(dim2);
+ normal_array = (struct point*) malloc(dim2);
+ frame_hist = (fftw_real*) malloc(dim2 * n);
for (i = 0; i <= n; i++)
{
- frame_hist[i] = (fftw_real*) malloc(dim);
+ frame_hist[i] = (fftw_real*) malloc(dim1);
}
for (i = 0; i < n * n; i++) //Initialize data structures to 0
{ vx[i] = vy[i] = vx0[i] = vy0[i] = fx[i] = fy[i] = rho[i] = rho0[i] = height_array[i] = 0.0f; }
- return return_value;
-}
+ vis_data->rho = rho;
+ vis_data->force = (fftw_real *)malloc(dim2);
+ vis_data->vel = (fftw_real *)malloc(dim1);
+ vis_data->div_force = (fftw_real *)malloc(dim2);
+ vis_data->div_vel = (fftw_real *)malloc(dim1);
+ vis_data->height = (fftw_real *)malloc(dim2);
+ vis_data->normals = (struct point *)malloc(dim2);
-void fluids_init(int dim)
-{
- size_t frame_size;
-
- frame_size = dim * 2*(dim/2+1)*sizeof(fftw_real);
-
- smoke_init(frame_size);
+ return return_value;
}
int rescale_to_winwidth(float value)
@@ -286,7 +289,7 @@ void calculate_normal_vectors(void)
}
-void calculate_height_plot(void)
+void calculate_height_plots(void)
{
int i;
for (i = 0; i < DIM * DIM; i++)
@@ -294,10 +297,10 @@ void calculate_height_plot(void)
switch (vis_dataset)
{
case DATASET_FORCE:
- height_array[i] = quake_root(fx[i] * fx[i] + fy[i] * fy[i]) * 100;
+ height_array[i] = vec_len2f(fx[i], fy[i]) * 100;
break;
case DATASET_VEL:
- height_array[i] = quake_root(vx[i] * vx[i] + vy[i] * vy[i]) * 5000;
+ height_array[i] = vec_len2f(vx[i], vy[i]) * 5000;
break;
case DATASET_RHO:
height_array[i] = rho[i] * 16;
@@ -311,11 +314,88 @@ void calculate_height_plot(void)
}
}
+void calculate_height_plot(struct vis_data_arrays *vis_data, int dataset, int index)
+{
+ switch(dataset)
+ {
+ default:
+ case DATASET_RHO:
+ vis_data->height[index] = rho[index];
+ break;
+ case DATASET_VEL:
+ vis_data->height[index] = vec_len2f(vx[index], vy[index]);
+ break;
+ case DATASET_FORCE:
+ vis_data->height[index] = vec_len2f(fx[index], fy[index]);
+ break;
+ }
+}
+
void copy_frames(fftw_real *dataset)
{
memcpy(smoke_get_frame(), dataset, DIM * 2 * (DIM / 2 + 1) * sizeof(fftw_real));
}
+float par_der(float xy1, float xy2, fftw_real cell)
+{
+ return (xy1 - (xy2/ cell));
+}
+
+void populate_arrays(struct vis_data_arrays *vis_data)
+{
+ int idx, i, j;
+
+ fftw_real wn = (fftw_real)winWidth / (fftw_real)(DIM + 1); // Grid cell width
+ fftw_real hn = (fftw_real)winHeight / (fftw_real)(DIM + 1); // Grid cell height
+
+ for (j = 0; j < DIM; j++)
+ {
+ for (i = 0; i < DIM; i++)
+ {
+ idx = (j * DIM) + i;
+
+ vis_data->rho[idx] = rho[idx];
+ vis_data->vel[idx] = vec_len2f(vx[idx], vy[idx]);
+ vis_data->force[idx] = vec_len2f(fx[idx], fy[idx]);
+ vis_data->div_vel[idx] = par_der(vx[idx +1], vx[idx], wn)
+ +par_der(vy[idx +1], vy[idx], winHeight);
+ vis_data->div_force[idx] = par_der(fx[idx +1], fx[idx], hn)
+ +par_der(fy[idx +1], fy[idx], winHeight);
+
+ calculate_height_plot(vis_data, heightplots_get_dataset(), idx);
+ }
+ }
+}
+
+fftw_real *get_frame(struct vis_data_arrays *vis_data, int dataset)
+{
+ fftw_real *return_value;
+
+ switch(dataset)
+ {
+ default:
+ case DATASET_RHO:
+ return_value = vis_data->rho;
+ break;
+ case DATASET_VEL:
+ return_value = vis_data->vel;
+ break;
+ case DATASET_FORCE:
+ return_value = vis_data->force;
+ break;
+ case DATASET_DIVV:
+ return_value = vis_data->div_vel;
+ break;
+ case DATASET_DIVF:
+ return_value = vis_data->div_force;
+ break;
+ case DATASET_HIST:
+ return_value = vis_data->history[0];
+ }
+
+ return return_value;
+}
+
//do_one_simulation_step: Do one complete cycle of the simulation:
// - set_forces:
// - solve: read forces from the user
@@ -323,17 +403,28 @@ void copy_frames(fftw_real *dataset)
// - gluPostRedisplay: draw a new visualization frame
-void calculate_one_simulation_step(fftw_real *field)
+void calculate_one_simulation_step(struct vis_data_arrays *vis_data)
{
+ int dataset;
+ fftw_real *frame;
+
if (fluids_calculate) {
set_forces();
solve(DIM, vx, vy, vx0, vy0, visc, dt);
diffuse_matter(DIM, vx, vy, rho, rho0, dt);
- calculate_height_plot();
+ calculate_height_plots();
calculate_normal_vectors();
- copy_frames(rho);
colormap_autoscale();
}
+ populate_arrays(vis_data);
+
+ dataset = smoke_get_dataset();
+ frame = get_frame(vis_data, dataset);
+ smoke_set_frame(frame);
+
+ dataset = glyphs_get_dataset_color();
+ frame = get_frame(vis_data, dataset);
+ glyphs_set_frame(frame);
}
//------ VISUALIZATION CODE STARTS HERE -----------------------------------------------------------------
@@ -491,3 +582,8 @@ int fluids_get_calculate(void)
{
return fluids_calculate;
}
+
+int fluids_get_dim(void)
+{
+ return DIM;
+}
diff --git a/Smoke/fluids.h b/Smoke/fluids.h
index ca2c214..c042094 100644
--- a/Smoke/fluids.h
+++ b/Smoke/fluids.h
@@ -3,13 +3,11 @@
//--- SIMULATION PARAMETERS ------------------------------------------------------------------------
-extern const int DIM; //size of simulation grid
extern double dt; //simulation time step
extern float visc; //fluid viscosity
extern fftw_real *vx, *vy; //(vx,vy) = velocity field at the current moment
-extern fftw_real *vx0, *vy0; //(vx0,vy0) = velocity field at the previous moment
extern fftw_real *fx, *fy; //(fx,fy) = user-controlled simulation forces, steered with the mouse
-extern fftw_real *rho, *rho0; //smoke density at the current (rho) and previous (rho0) moment
+extern fftw_real *rho; //smoke density at the current (rho) and previous (rho0) moment
extern rfftwnd_plan plan_rc, plan_cr; //simulation domain discretization
extern fftw_real *height_array; //used for hight plot
struct point *normal_array; //used for normal vectors
@@ -22,6 +20,7 @@ extern int frame_index;
#define DATASET_FORCE 2
#define DATASET_DIVV 3
#define DATASET_DIVF 4
+#define DATASET_HIST 5
#define SCALAR_RHO 0
#define SCALAR_VEL 1
@@ -41,15 +40,6 @@ extern int vis_dataset;
extern int glyph_scalar;
extern int glyph_vector;
-fftw_real *init_simulation(int n);
-
-int rescale_to_winwidth(float value);
-
-void calculate_one_simulation_step(fftw_real *field);
-
-float get_dataset(int index);
-void set_autoscaling(void);
-
//////////////////
void select_dataset(int arg);
@@ -67,6 +57,17 @@ struct point {
float z;
};
+struct vis_data_arrays {
+ fftw_real *rho;
+ fftw_real *vel;
+ fftw_real *force;
+ fftw_real *div_vel;
+ fftw_real *div_force;
+ fftw_real *height;
+ struct point *normals;
+ fftw_real *history[50];
+};
+
extern int isolines_nr;
extern float threshold1;
@@ -77,6 +78,17 @@ void fluids_init(int dim);
void fluids_set_calculate(int calculate);
int fluids_get_calculate(void);
+
void fluids_insert_smoke(int x, int y);
+int fluids_get_dim(void);
+
+fftw_real *init_simulation(int n, struct vis_data_arrays *vis_data);
+
+int rescale_to_winwidth(float value);
+
+void calculate_one_simulation_step(struct vis_data_arrays *vis_data);
+
+float get_dataset(int index);
+void set_autoscaling(void);
#endif
diff --git a/Smoke/glyphs.c b/Smoke/glyphs.c
index c4466df..6d562bf 100644
--- a/Smoke/glyphs.c
+++ b/Smoke/glyphs.c
@@ -23,7 +23,7 @@ static float glyphs_alpha = 0.5f;
static int glyphs_dataset_color = DATASET_RHO;
static int glyphs_dataset_direction = DATASET_RHO;
-static fftw_real *glyphs_field;
+static fftw_real *glyphs_frame;
void glyphs_set_render(int render_glyphs)
@@ -86,14 +86,14 @@ int glyphs_get_dataset_direction(void)
return glyphs_dataset_direction;
}
-void glyphs_set_field(fftw_real *field)
+void glyphs_set_frame(fftw_real *frame)
{
- glyphs_field = field;
+ glyphs_frame = frame;
}
-fftw_real *glyphs_get_field(void)
+fftw_real *glyphs_get_frame(void)
{
- return glyphs_field;
+ return glyphs_frame;
}
diff --git a/Smoke/glyphs.h b/Smoke/glyphs.h
index 2a40a94..fa97fe6 100644
--- a/Smoke/glyphs.h
+++ b/Smoke/glyphs.h
@@ -19,8 +19,8 @@ int glyphs_get_dataset_color(void);
void glyphs_set_dataset_direction(int dataset);
int glyphs_get_dataset_direction(void);
-void glyphs_set_field(fftw_real *field);
-fftw_real *glyphs_get_field(void);
+void glyphs_set_frame(fftw_real *frame);
+fftw_real *glyphs_get_frame(void);
struct color4f glyphs_get_color(float value);
#endif
diff --git a/Smoke/gtk.c b/Smoke/gtk.c
index bd1ab4b..bd04a8b 100644
--- a/Smoke/gtk.c
+++ b/Smoke/gtk.c
@@ -103,7 +103,7 @@ static void timeout_remove (GtkWidget *widget);
static GdkGLConfig *configure_gl (void);
//static GtkWidget *create_popup_menu (GtkWidget *drawing_area);
-static GtkWidget *create_window (GdkGLConfig *glconfig, fftw_real *field);
+static GtkWidget *create_window (GdkGLConfig *glconfig, struct vis_data_arrays *vis_data);
/**************************************************************************
@@ -187,7 +187,7 @@ expose_event (GtkWidget *widget,
GdkEventExpose *event,
gpointer data)
{
- fftw_real *field = (gpointer)data;
+ struct vis_data_arrays *vis_data = (struct vis_data_arrays *)data;
GdkGLContext *glcontext = gtk_widget_get_gl_context (widget);
GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget);
@@ -203,8 +203,8 @@ expose_event (GtkWidget *widget,
// fluids
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
- calculate_one_simulation_step(field);
- visualize(field);
+ calculate_one_simulation_step(vis_data);
+ visualize(vis_data);
// endf
/* Swap buffers */
@@ -623,7 +623,7 @@ create_popup_menu (GtkWidget *drawing_area)
*** drawing area that has an OpenGL-capable visual.
***/
static GtkWidget *
-create_window (GdkGLConfig *glconfig, fftw_real *field)
+create_window (GdkGLConfig *glconfig, struct vis_data_arrays *vis_data)
{
GtkWidget *window;
GtkWidget *hbox;
@@ -678,7 +678,7 @@ create_window (GdkGLConfig *glconfig, fftw_real *field)
g_signal_connect (G_OBJECT (drawing_area), "configure_event",
G_CALLBACK (configure_event), NULL);
g_signal_connect (G_OBJECT (drawing_area), "expose_event",
- G_CALLBACK (expose_event), (gpointer)field);
+ G_CALLBACK (expose_event), (gpointer)vis_data);
g_signal_connect (G_OBJECT (drawing_area), "unrealize",
G_CALLBACK (unrealize), NULL);
@@ -873,11 +873,10 @@ main (int argc,
{
GtkWidget *window;
GdkGLConfig *glconfig;
- fftw_real *field;
+ struct vis_data_arrays vis_data;
/* Initialize the simulation */
- field = init_simulation(DIM);
- fluids_init(DIM);
+ init_simulation(50, &vis_data);
/* Initialize GTK. */
gtk_init (&argc, &argv);
@@ -889,7 +888,7 @@ main (int argc,
glconfig = configure_gl ();
/* Create and show the application window. */
- window = create_window (glconfig, field);
+ window = create_window (glconfig, &vis_data);
gtk_widget_show (window);
gtk_main();
diff --git a/Smoke/gtk_main.c b/Smoke/gtk_main.c
index 8d2fa9f..7635898 100644
--- a/Smoke/gtk_main.c
+++ b/Smoke/gtk_main.c
@@ -189,39 +189,72 @@ GtkWidget *create_main_page(void)
frame = gtk_frame_new("Dataset");
- box = gtk_hbox_new(FALSE, 0);
+ box = gtk_vbox_new(FALSE, 0);
+
+ box2 = gtk_hbox_new(FALSE, 0);
- button = gtk_radio_button_new_with_label (NULL, "Rho");
- if (smoke_get_dataset() == DATASET_RHO) {
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
- } else {
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE);
- }
- g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(set_dataset), (gpointer)DATASET_RHO);
- gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0);
- gtk_widget_show(button);
+ button = gtk_radio_button_new_with_label (NULL, "Rho");
+ if (smoke_get_dataset() == DATASET_RHO) {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
+ } else {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE);
+ }
+ g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(set_dataset), (gpointer)DATASET_RHO);
+ gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
+ gtk_widget_show(button);
- dataset_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(button));
+ dataset_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(button));
- button = gtk_radio_button_new_with_label(dataset_group, "Velocity");
- if (smoke_get_dataset() == DATASET_VEL) {
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
- } else {
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE);
- }
- g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(set_dataset), (gpointer)DATASET_VEL);
- gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0);
- gtk_widget_show(button);
+ button = gtk_radio_button_new_with_label(dataset_group, "Velocity");
+ if (smoke_get_dataset() == DATASET_VEL) {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
+ } else {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE);
+ }
+ g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(set_dataset), (gpointer)DATASET_VEL);
+ gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
+ gtk_widget_show(button);
- button = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(button), "Force");
- if (smoke_get_dataset() == DATASET_FORCE) {
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
- } else {
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE);
- }
- g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(set_dataset), (gpointer)DATASET_FORCE);
- gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0);
- gtk_widget_show(button);
+ button = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(button), "Force");
+ if (smoke_get_dataset() == DATASET_FORCE) {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
+ } else {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE);
+ }
+ g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(set_dataset), (gpointer)DATASET_FORCE);
+ gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
+ gtk_widget_show(button);
+
+ gtk_box_pack_start(GTK_BOX(box), box2, TRUE, TRUE, 0);
+ gtk_widget_show(box2);
+
+ box2 = gtk_hbox_new(FALSE, 0);
+
+ dataset_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(button));
+
+ button = gtk_radio_button_new_with_label(dataset_group, "Divergence Velocity");
+ if (smoke_get_dataset() == DATASET_DIVV) {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
+ } else {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE);
+ }
+ g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(set_dataset), (gpointer)DATASET_DIVV);
+ gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
+ gtk_widget_show(button);
+
+ button = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(button), "Divergence Force");
+ if (smoke_get_dataset() == DATASET_DIVF) {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
+ } else {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE);
+ }
+ g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(set_dataset), (gpointer)DATASET_DIVF);
+ gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
+ gtk_widget_show(button);
+
+
+ gtk_box_pack_start(GTK_BOX(box), box2, TRUE, TRUE, 0);
+ gtk_widget_show(box2);
gtk_container_add(GTK_CONTAINER(frame), box);
gtk_widget_show(box);
diff --git a/Smoke/heightplots.c b/Smoke/heightplots.c
index c4546df..4593455 100644
--- a/Smoke/heightplots.c
+++ b/Smoke/heightplots.c
@@ -6,6 +6,7 @@
#include <rfftw.h>
+#include "fluids.h"
#include "funcs.h"
#include "palette.h"
@@ -20,6 +21,8 @@ static int heightplots_colormap = PALETTE_BLACKWHITE;
static float heightplots_alpha = 1.0f;
+static int heightplots_dataset = DATASET_RHO;
+
static fftw_real *heightplots_frame;
@@ -63,6 +66,16 @@ float heightplots_get_alpha(void)
return heightplots_alpha;
}
+void heightplots_set_dataset(int dataset)
+{
+ heightplots_dataset = dataset;
+}
+
+int heightplots_get_dataset(void)
+{
+ return heightplots_dataset;
+}
+
void heightplots_set_frame(fftw_real *frame)
{
heightplots_frame = frame;
diff --git a/Smoke/heightplots.h b/Smoke/heightplots.h
index 856a701..49c5441 100644
--- a/Smoke/heightplots.h
+++ b/Smoke/heightplots.h
@@ -13,6 +13,9 @@ int heightplots_get_colormap(void);
void heightplots_set_alpha(float alpha);
float heightplots_get_alpha(void);
+void heightplots_set_dataset(int dataset);
+int heightplots_get_dataset(void);
+
void heightplots_set_frame(fftw_real *frame);
fftw_real *heightplots_get_frame(void);
diff --git a/Smoke/renderer_gl.c b/Smoke/renderer_gl.c
index 186568d..b21ef58 100644
--- a/Smoke/renderer_gl.c
+++ b/Smoke/renderer_gl.c
@@ -137,10 +137,13 @@ static void render_legend(void)
static void render_normal(void)
{
- int i, j, idx;
+ int i, j, idx, DIM;
double px, py;
- fftw_real wn = (fftw_real)winWidth / (fftw_real)(DIM + 1); // Grid cell width
- fftw_real hn = (fftw_real)winHeight / (fftw_real)(DIM + 1); // Grid cell height
+ fftw_real wn, hn;
+
+ DIM = fluids_get_dim();
+ wn = (fftw_real)winWidth / (fftw_real)(DIM + 1); // Grid cell width
+ hn = (fftw_real)winHeight / (fftw_real)(DIM + 1); // Grid cell height
float normal_scale = 10.0f;
glDisable(GL_LIGHTING);
@@ -168,11 +171,16 @@ static void render_normal(void)
static void render_smoke(void)
{
- int i, j, idx; double px,py;
- fftw_real wn = (fftw_real)winWidth / (fftw_real)(DIM + 1); // Grid cell width
- fftw_real hn = (fftw_real)winHeight / (fftw_real)(DIM + 1); // Grid cell height
+ int i, j, idx, DIM;
+ double px,py;
+ fftw_real wn, hn;
struct color4f color;
+
+ DIM = fluids_get_dim();
+ wn = (fftw_real)winWidth / (fftw_real)(DIM + 1); // Grid cell width
+ hn = (fftw_real)winHeight / (fftw_real)(DIM + 1); // Grid cell height
+
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
for (j = 0; j < DIM - 1; j++) //draw smoke
@@ -225,10 +233,13 @@ static void render_smoke(void)
static void render_glyph(GLUquadricObj *qobj, float x_value, float y_value, float i, float j)
{
float x0, y0, z0, x1, y1, z1, x_dev, y_dev, size, length;
- float scale = (float)((float)DIM / (float)get_var_dims()) / 6;
+ float scale;
double theta, in_prod;
fftw_real wn, hn;
+ int DIM;
+ DIM = fluids_get_dim();
+ scale = (float)((float)DIM / (float)get_var_dims()) / 6;
size = quake_root((x_value * x_value * 20) + (y_value * y_value * 20)) * 5 * scale;
wn = (fftw_real)winWidth / (fftw_real)(get_var_dims() + 1); // Grid cell width
@@ -306,7 +317,7 @@ static void render_glyph(GLUquadricObj *qobj, float x_value, float y_value, floa
static void render_glyphs(void)
{
- int i, j, idx;
+ int i, j, idx, DIM;
float value, scale, idxcf, idxrf;
struct color4f color;
@@ -314,6 +325,8 @@ static void render_glyphs(void)
gluQuadricDrawStyle(qobj, GLU_FILL);
gluQuadricNormals(qobj, GLU_SMOOTH);
+ DIM = fluids_get_dim();
+
scale = (float)((float)DIM / (float)get_var_dims());
for (i = 0; i < get_var_dims(); i++)
{
@@ -361,12 +374,15 @@ static void render_glyphs(void)
static void render_isolines(void)
{
- fftw_real wn = (fftw_real)winWidth / (fftw_real)(DIM + 1); // Grid cell width
- fftw_real hn = (fftw_real)winHeight / (fftw_real)(DIM + 1); // Grid cell height
-
- int count;
+ fftw_real wn, hn;
+ int count, DIM;
float iso_scale;
+ DIM = fluids_get_dim();
+
+ wn = (fftw_real)winWidth / (fftw_real)(DIM + 1); // Grid cell width
+ hn = (fftw_real)winHeight / (fftw_real)(DIM + 1); // Grid cell height
+
if (isolines_nr) {
iso_scale = (float)(fabs(threshold1 - threshold2) / (float)isolines_nr);
} else {
@@ -502,13 +518,14 @@ static void render_isolines(void)
static void render_streamlines(void)
{
- int i, j, k, l, idx;
+ int i, j, k, l, idx, DIM;
float v;
struct point p;
int *frame_history;
fftw_real cell_x, cell_y;
i = j = k = l = 0;
+ DIM = fluids_get_dim();
for (i = 0; i < get_cur_seedpoint(); i++)
{
@@ -535,14 +552,20 @@ static void render_streamlines(void)
void render_flowvis(void)
{
- int i, j, idx; double px,py;
- fftw_real wn = (fftw_real)winWidth / (fftw_real)(DIM + 1); // Grid cell width
- fftw_real hn = (fftw_real)winHeight / (fftw_real)(DIM + 1); // Grid cell height
+ int i, j, idx, DIM;
+ double px,py;
+ fftw_real wn, hn;
struct color4f color;
fftw_real *field;
+ DIM = fluids_get_dim();
+
+ wn = (fftw_real)winWidth / (fftw_real)(DIM + 1); // Grid cell width
+ hn = (fftw_real)winHeight / (fftw_real)(DIM + 1); // Grid cell height
+
field = smoke_get_frame();
+
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
for (j = 0; j < DIM - 1; j++) //draw smoke
@@ -661,7 +684,7 @@ void renderer_reset_roll(void)
//visualize: This is the main visualization function
-void visualize(fftw_real *field)
+void visualize(struct vis_data_arrays *vis_data)
{
// Rotate field
diff --git a/Smoke/renderer_gl.h b/Smoke/renderer_gl.h
index fd515ea..4d7d421 100644
--- a/Smoke/renderer_gl.h
+++ b/Smoke/renderer_gl.h
@@ -3,7 +3,7 @@
void renderer_init_gl(void);
-void visualize(fftw_real *field);
+void visualize(struct vis_data_arrays *vis_data);
void renderer_set_zoomspeed(int zoomspeed);
diff --git a/Smoke/smoke.bin b/Smoke/smoke.bin
index 4b0292b..bb10f34 100755
--- a/Smoke/smoke.bin
+++ b/Smoke/smoke.bin
Binary files differ
diff --git a/Smoke/smoke.c b/Smoke/smoke.c
index 0e62854..70696a4 100644
--- a/Smoke/smoke.c
+++ b/Smoke/smoke.c
@@ -3,8 +3,6 @@
#include <windows.h>
#endif
-#include <stdlib.h>
-
#include <rfftw.h>
#include "fluids.h"
@@ -37,9 +35,9 @@ int smoke_get_dataset(void)
return smoke_dataset;
}
-void smoke_init(size_t frame_size)
+void smoke_set_frame(fftw_real *frame)
{
- smoke_frame = malloc(frame_size);
+ smoke_frame = frame;
}
fftw_real *smoke_get_frame(void)
diff --git a/Smoke/smoke.h b/Smoke/smoke.h
index f53f142..8c163ff 100644
--- a/Smoke/smoke.h
+++ b/Smoke/smoke.h
@@ -7,7 +7,7 @@ int smoke_get_render(void);
void smoke_set_dataset(int dataset);
int smoke_get_dataset(void);
-void smoke_init(size_t frame_size);
+void smoke_set_frame(fftw_real *frame);
fftw_real *smoke_get_frame(void);
#endif