#!/usr/bin/env python
# coding: utf-8
# # Einstein Toolkit Tutorial
# This tutorial is a smaller version of the Einstein Toolkit tutorial. The tutorial in this page let's you download and install only the Einstein Toolkit modules ("thorns") that are needed in order to run a simple simulation. This tutorial can run on a laptop and should require less than one hour in total.
# First we need to download some packages needed to compile the Einstein Toolkit.
# If you use a Mac, you should first install MacPorts https://www.macports.org/install.php.
# And then you can install the packages you need by executing these commands in a terminal:
# sudo port install subversion mercurial wget git
# sudo port install pkgconfig gcc7 openmpi fftw-3 gsl jpeg zlib hdf5 +fortran +gfortran openssl py-matplotlib
#
# If you use Ubuntu, you should install the packages you need using these commands in a terminal:
# sudo apt-get install subversion git mercurial wget python python-matplotlib curl
# sudo apt-get install build-essential perl gfortran g++ libmpich-dev
# sudo apt-get install libfftw3-dev libgsl-dev libatlas-base-dev libjpeg-dev libssl-dev
# sudo apt-get install libhdf5-dev hdf5-tools libnuma-dev libltdl-dev libhwloc-dev zlib1g-dev
# Now we create the directory where the tutorial material will be located
# In[ ]:
get_ipython().system('mkdir Einstein_Toolkit_CINECA')
# In[ ]:
get_ipython().run_line_magic('cd', 'Einstein_Toolkit_CINECA')
# In this directory we now download the files used for this tutorial
# In[ ]:
get_ipython().system('wget http://brunogiacomazzo.org/ETK_Tutorial_CINECA_2018/einsteintoolkit_CINECA.th')
# In[ ]:
get_ipython().system('wget http://brunogiacomazzo.org/ETK_Tutorial_CINECA_2018/tov_ETK_2018_CINECA.par')
# We now create the directory where the simulation data will be stored
# In[ ]:
get_ipython().system('mkdir simulations')
# Now we download the components of the Einstein Toolkit needed to run this tutorial
# In[ ]:
get_ipython().system('curl -kLO https://raw.githubusercontent.com/gridaphobe/CRL/ET_2018_09/GetComponents')
# In[ ]:
get_ipython().system('chmod a+x GetComponents')
# Note: the following command sometimes may fail with an error similar to this:
# "Server SSL certificate verification failed: issuer is not trusted".
# In this case, open a terminal and type:
# svn co
# where should be replaced with the address that is printed by the SSL certificate error.
# At this point svn will ask if you want to accept the certificate. Type p
to accept the certificate permanently and then rerun the GetComponents command below.
# In[ ]:
get_ipython().system('./GetComponents einsteintoolkit_CINECA.th')
# In[ ]:
get_ipython().run_line_magic('cd', 'Cactus')
# In[ ]:
get_ipython().system('cp ../tov_ETK_2018_CINECA.par ./par')
# Now we set up simfactory
# In[ ]:
get_ipython().system('./simfactory/bin/sim setup-silent')
# Now we compile the Einstein Toolkit (this may take ~30 minutes or more)
# In[ ]:
#uncomment the line that refers to your operating system
#!./simfactory/bin/sim build --machine=osx-macports --thornlist=thornlists/einsteintoolkit_CINECA.th
#!./simfactory/bin/sim build --machine=ubuntu --thornlist=thornlists/einsteintoolkit_CINECA.th
# And now we are ready to run a simple simulation. In the example we use 2 MPI processes.
# In[ ]:
get_ipython().system('./simfactory/bin/sim create-run tov_test --procs 2 --num-threads 1 --parfile=./par/tov_ETK_2018_CINECA.par --basedir=../simulations/')
# Once the simulation has finished we can go in the output directory and have a look at the results.
# In[ ]:
get_ipython().run_line_magic('cd', '../simulations/tov_test/')
# In[ ]:
get_ipython().run_line_magic('cd', 'output-0000/tov_ETK_2018_CINECA/')
# In[ ]:
get_ipython().system('ls')
# In[ ]:
# This cell enables inline plotting in the notebook
get_ipython().run_line_magic('matplotlib', 'inline')
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
# Let's have a look at the maximum of the rest-mass density
# In[ ]:
lin_data = np.genfromtxt("hydrobase-rho.maximum.asc")
# In[ ]:
lin_data
# In[ ]:
plt.plot(lin_data[:,1],lin_data[:,2])