Fractals/mightymandel
mightymandel is Mandelbrot set explorer made by Claude Heiland-Allen. Here one can find unofficial docs about it
Features
edit- draws parameter plane of complex quadratic polynomial with boundary of Mandelbrot set
- License GPL3+ [1]
- perturbation technique[2] with series approximation.
- GPGPU[3] based on OpenGL 4 ( "my GPU is much faster than my CPU ")
- writen in C ( C99) with full src code available[4]
- multiprecision
Plane description
editClaude Heiland-Allen[4] uses center and radius for the description of parameter plane.
Radius is defined as "the difference in imaginary coordinate between the center and the top of the axis-aligned view rectangle".
So plane is described by 3 numbers:
- center_re
- center_im
- radius
where center = center_re + center_im * i
Installation
editRequirements
editOne can check it with ldd :
ldd -d -v ./src/mightymandel
or look at /src/Makefile :
-lGLEW -lGL -lrt -lmpfr -lm
Debian packages
editOn Debian Jessie, this suffices to install everything you need to compile:[9]
sudo aptitude install \
build-essential \
git \
libglew-dev \
libglfw3-dev \
libmpfr-dev \
pkg-config
Getting the source
editFirst time :
git clone https://gitorious.org/maximus/mightymandel.git
To update src run ( from program directory):
git pull
Then one can build the program.
Remote repository
edit git remote show origin
the result :
* remote origin
Fetch URL: https://gitorious.org/maximus/mightymandel.git
Push URL: https://gitorious.org/maximus/mightymandel.git
HEAD branch: master
Remote branch:
master tracked
Local branch configured for 'git pull':
master merges with remote master
Local ref configured for 'git push':
master pushes to master (fast-forwardable)
Version
edit git describe
Example output :
v14-164-g9cd6fc7
Building
editGot to the mightymandel directory :
cd ~/mightymandel
and make :
make -C src clean
make -C src
or, in case of problems :[10]
make -C src EXTRA_LINK_FLAGS="-lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi"
or edit Makefile and add extra flags, but then you will have problems after updating source.
One can also build and run test suite
Errors
editglfw
editPackage glfw3 was not found in the pkg-config search path.
Download and install glfw:[11]
cd glfw-3.0.4
hash -r
cmake -G "Unix Makefiles"
make
sudo make install
Ubuntu 14.10 ( utopic ) has packages for glfw3[12] ( but CUDA packages are only for LTS version of Ubuntu , it is now 13.04)
Next error :
LINK mightymandel /usr/bin/ld: /usr/local/lib/libglfw3.a(x11_clipboard.c.o): undefined reference to symbol 'XConvertSelection' /usr/lib/x86_64-linux-gnu/libX11.so.6: error adding symbols: DSO missing from command line
add to makefile ( on Ubuntu 13.10 64-bit) :
-lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi \
check
editfile ./mightymandel ./mightymandel: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x2a424b6dcad8de5e29e3f0b17524dbf34de18aaa, not stripped
Running
editGo to the program directory and :
./src/mightymandel
Version
edit./src/mightymandel—version
example result :
v16-10-gd079448+2015-01-20-16-40-55
Examples
editmm
editOne can run ( from program directory) example parameter file fp32.mm using :
./src/mightymandel ./examples/mm/fp32.mm
par
editNow mightymandel does not load native fractint par files. They need to be transformed to ppar files.
How to preprocess Fractint par file ?
- Split txt file ( with parameters for many images ) into single image files ( with 7 lines of original file)
- splite line with many parameters into lines with one parameter per line ( replace space into newline)
- add ppar extension :[13]
- remove all par files without :
- "type=mandel" ( mightymandel can draw only mandelbrot set )
- "corners=" or "center-mag="
#!/usr/bin/env bash
# chmod +x s.sh
# ./s.sh
for f in *.txt;
do
echo " found "$f " file ";
#split -l 7 $f;
awk '/{/{n++}{print > n".p" }' $f
echo $f "- split when { is found and add p extension " ;
rm $f;
echo " input file " $f " is removed " ;
done
for f in *.p;
do
echo " in "$f " file replace space with newline and add ppar extension"
# tr '{}' '()' < infile > outfile
tr ' ' '\n' < $f >$f"par"
rm $f;
done
for f in *.ppar;
do
echo "remove blank= empty lines"
sed -i '/^$/d' $f
done
Comment : "pre-processing script removes the input without asking, which is a bit rude! And it doesn't support merging lines ending in \ " Claude
Here is split2ppar.sh by Claude
#!/bin/bash
tmp="$(mktemp -d --tmpdir=. split2ppar.XXXXXXXX)"
for file in "${@}"
do
name="$(basename "${file}")"
file="$(readlink -e "${file}")"
pushd "${tmp}"
awk "/{/{n++}{print > \"${name}_\"n\".par\" }" "${file}"
popd
done
pushd "${tmp}"
for file in *.par
do
ident="$(head -n 1 "${file}" | sed 's/ .*$//')"
mv "${file}" "${ident}.par" # rename input
cat < "${ident}.par" | # read input
sed 's/;.*$//' | # delete ; comments
tr '\n' ' ' | # join on one line with spaces
sed 's/\\ *//g' | # merge lines ended with '\'
tr -s ' ' | # compress multiple ' ' to single ' '
sed 's/^.*{\([^}]*\)}.*$/\1/' | # extract the part between { }
tr ' ' '\n' | # split into separate lines
cat > "${ident}.ppar" # write output
done
popd
ls "${tmp}/"*
ppar
editPreprocessed par files are in /examples/ppar directory. Use :
./src/mightymandel ./examples/ppar/1_02.ppar
test
editOne can run test suite :
make -C src test EXTRA_LINK_FLAGS="-lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi"
Example output :
real 56m25.351s user 33m50.995s sys 21m38.976s
See also :
- content of csv file int test directory
- images in test directory
Benchmark
editSee file BENCHMARKS in program directory for more details
Check hardware
edit- type and version of the Central processing unit ( CPU ) [14]
- type and version of the graphics processing unit ( GPU )[15]
- version of the video card[16] device driver[17] ( DRV ) and which version of OpenGl[18] it supports
Example output :
cat /proc/cpuinfo | grep model\ name
model name : Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
model name : Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
model name : Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
model name : Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
model name : Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
model name : Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
model name : Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
model name : Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
lspci | grep VGA
01:00.0 VGA compatible controller: NVIDIA Corporation GK104 [GeForce GTX 770] (rev a1)
glxinfo | grep OpenGL\ version
OpenGL version string: 4.3.0 NVIDIA 319.32
Run benchmark
edit time ./src/mightymandel --verbose warn --one-shot --de --weight -1.5 --glitch --size "1280x720" examples/mm/fp32-large-minibrot.mm
fp32-large-minibrot.mm,ok,fp32,322.402263,85.265842,14.734158,,
real 0m0.643s
user 0m0.188s
sys 0m0.236s
Images
editGalleries :
- in commons there is a category : commons:Category:Fractals created with Mightymandel
- official online doc gallery[19]
comment
editTo extract comment from ppm file :[20]
identify -format "%c" 1.ppm
or
head -n 2 1.ppm | tail -n 1
example output :
mightymandel -1.8605739600158748e+00 + -9.3437424499999996e-07 i @ 3.5884749956982262e-09
and from png file :
extract k2000.png
colors
edit- white = exterior of Mandelbrot set
- black = boundary of Mandebot set ( using DEM )
- red = glitches
- yellow = RGB(255,178,0) = known interior of Mandelbrot set
- blue = uncalculated
Documentation
edit- official online[21]
How to make offline doc with doxygen ?
editHow to contribute ?
editgit checkout master
git pull # get up to date
git checkout -b new-feature-42 # create a branch for your new feature
# make your changes, check that they compile and run ok
git add your-changed-files
git commit # write a description of your changes
git format-patch master # save your changes to file(s)
If path file was not created try :
git format-patch origin/master # https://eothred.wordpress.com/2011/07/02/git-and-patches/
then email the .patch files to Claude
References
edit- ↑ License GPL3+
- ↑ Perturbation glitches
- ↑ General-purpose computing on graphics processing units in wikipedia
- ↑ Git repository
- ↑ The OpenGL Extension Wrangler Library
- ↑ OpenGl in C
- ↑ The GNU MPFR Library
- ↑ librt library
- ↑ README for mightymandel
- ↑ Fractal Forum - mightymandel
- ↑ and Ubuntu
- ↑ Package: glfw3 (3.0.4-1) [universe]
- ↑ how-to-add-an-extension-to-all-files-via-terminal
- ↑ CPU in wikipedia)
- ↑ GPU in wiki[edia
- ↑ Video card in wiki
- ↑ Device driver in wikipedia
- ↑ OpenGl in wikipedia
- ↑ online official doc gallery
- ↑ stackexchange question : How to extract comment from ppm file?
- ↑ official online doc