Skip to content
Snippets Groups Projects
Commit 6bdb3349 authored by Pietro Incardona's avatar Pietro Incardona
Browse files

staging file

parent 20b2b64d
No related branches found
No related tags found
No related merge requests found
include ../../example.mk
CC=mpic++
LDIR =
OBJ = main.o
%.o: %.cpp
$(CC) -O3 -c --std=c++11 -o $@ $< $(INCLUDE_PATH)
expr: $(OBJ)
$(CC) -o $@ $^ $(CFLAGS) $(LIBS_PATH) $(LIBS)
all: expr
.PHONY: clean all
clean:
rm -f *.o *~ core expr
[pack]
files = main.cpp Makefile
File added
#include "Vector/vector_dist.hpp"
#include "Operators/Vector/vector_dist_operators.hpp"
/*
* ### WIKI 1 ###
*
* ## Simple example to show how expression work with vector
*
* This example show how to use expressions to do complex calculation on particles
*
* ### WIKI END ###
*
*/
constexpr int A = 0;
constexpr int B = 1;
constexpr int C = 2;
constexpr int D = 3;
// First we define the kernel function (an exponential in this case)
struct exp_kernel
{
// variance of the exponential
float sigma;
// Constructor require to define the variance
exp_kernel(float sigma)
:sigma(sigma)
{}
// The kernel function accept the position p, the position q
inline Point<3,double> value(const Point<3,float> & p, const Point<3,float> & q,Point<3,double> & Pp,Point<3,double> & Pq)
{
// calculate the distance between p and q
float dist = norm(p-q);
return Pq * exp(- dist * dist / sigma);
}
};
int main(int argc, char* argv[])
{
//
// ### WIKI 2 ###
//
// Here we Initialize the library, than we create a uniform random generator between 0 and 1 to to generate particles
// randomly in the domain, we create a Box that define our domain, boundary conditions, and ghost
//
// initialize the library
openfpm_init(&argc,&argv);
// Here we define our domain a 2D box with intervals from 0 to 1.0
Box<3,float> domain({0.0,0.0,0.0},{1.0,1.0,1.0});
// Here we define the boundary conditions of our problem
size_t bc[3]={PERIODIC,PERIODIC,PERIODIC};
// extended boundary around the domain, and the processor domain
Ghost<3,float> g(0.01);
// Delta t
double dt = 0.01;
// distributed vectors
vector_dist<3,double, aggregate<double,double,Point<3,double>,Point<3,double>> > vd(4096,domain,bc,g);
vector_dist<3,double, aggregate<double> > vd2(4096,domain,bc,g);
// Assign random position to the vector dist
auto it = vd.getDomainIterator();
while (it.isNext())
{
auto p = it.get();
vd.getPos(p)[0] = (double)rand() / RAND_MAX;
vd.getPos(p)[1] = (double)rand() / RAND_MAX;
vd.getPos(p)[2] = (double)rand() / RAND_MAX;
vd2.getPos(p)[0] = (double)rand() / RAND_MAX;
vd2.getPos(p)[1] = (double)rand() / RAND_MAX;
vd2.getPos(p)[2] = (double)rand() / RAND_MAX;
++it;
}
// Redistribute the particles and synchronize the ghost
vd.map();
vd.map();
//
// ### WIKI ###
//
// Here we create alias for the properties of the vectors
//
// vA is an alias for the property A of the vector vd
// vB is an alias for the property V of the vector vd
// vC is ...
auto vA = getV<A>(vd);
auto vB = getV<B>(vd);
auto vC = getV<C>(vd);
auto vD = getV<D>(vd);
auto vPOS = getV<PROP_POS>(vd);
// same concept for the vector v2
auto v2A = getV<0>(vd);
auto v2POS = getV<PROP_POS>(vd);
// Assign 1 to the property A
vA = 1;
// Equal the property A to B
vB = vA;
// Assign to the property C and for each component 4.0
vC = 4;
// Assign te position of the particle to the property D
vD = vPOS;
//
// ### WIKI ###
//
// All these expression are applied point wise for each particles
//
// P.S.
//
// the * is a scalar product in case of vectors
// simple multiplication in case of scalar
//
//
// In vA we set the distance from the origin for each particle
vA = norm(vPOS);
//
// For each particle p calculate the expression under
//
// NOTE sin(2.0 * vD) and exp(5.0 * vD) are both vector
//
// so this is a scalar product
// |
// V
vA = vA + sin(2.0 * vD) * exp(1.2 * vD);
// |_____________________________|
// |
// V
// and this is a number
//
//
// pmul indicate component-wise multiplication the same as .* in Matlab
vC = pmul(vD,vD) * dt;
// Normalization of the vector vD
vD = vD / sqrt( vD * vD );
// we write the result on file
vd.write("output");
// We can also apply the expression in a second moment like this
Point<3,double> p0({0.5,0.5,0.5});
// we cannot use p0 directly we have to create an expression from it
auto p0_e = getVExpr(p0);
// As soon as the second vector have the some number of particle as v we can apply the expr1 to the v2 with v2D
auto expr1 = 1.0/2.0/sqrt(M_PI)*exp(-(v2POS-p0_e)*(v2POS-p0_e)/2.0);
// here is executed on all particles of v2 and the result assigned to the property A of v2
v2A = expr1;
//
// ### WIKI ###
//
// Each operator= produce a iteration across particles. It is possible to use the function assign
// to execute multiple instructions in one cycle
//
// assign support an variable of istructions
//
assign(vA,1.0, // vA = 1
vB,expr1, // vB = 1.0/2.0/sqrt(M_PI)*exp(-(v2POS-p0_e)*(v2POS-p0_e)/2.0)
vC,vD/norm(vD), // vC = vD/norm(vD)
vD,2.0*vC); // vD = 2.0*vC
// As soon as the vector v have the some number of particle as v2 we can apply the expr1 to v
vA = expr1;
//
// ### WIKI ###
//
// we shown the simple usage of simple point-wise function like sin
// and exp. Here we show the function applyKernel than encapsulate
// the operation
//
// \sum_{q = Neighborhood p} Kernel(x_p,x_q,Up,Uq) * expression
//
// where x_p is the position of the particle p
// x_q is the position of the particle q
// U_p is the value of the property carried by the particle p
// U_q is the value of the property carried by the particle q
//
//
exp_kernel ker(0.5);
auto cl = vd.getCellList(0.1);
// We are going to do some calculation that require ghost, so sync it
vd.ghost_get<3>();
// Here we create the
// A renormalizaion of the vector vD is calculated on fly
//
// and than For each particle p
//
// \sum_{q = Neighborhood p} Ker(x_p,x_q,D_p,D_q) * \frac{D}{norm(D)}
//
//
// P.S.
//
// Cerefull here ApplyKernel is a special function if it act on property D we cannot write on property D
// ( vD = ... is an error and produce unpredictable result )
//
vC = applyKernel_in( vD / norm(vD) ,vd,cl,ker) + vD;
// ok, because does not use applyKernel
vD = vD / norm(vD);
//
// ### WIKI 9 ###
//
// Output the particle position for each processor
//
vd.deleteGhost();
vd.write("output2");
//
// ### WIKI 10 ###
//
// Deinitialize the library
//
openfpm_finalize();
}
This diff is collapsed.
<!-- HTML footer for doxygen 1.8.10-->
<!-- start footer part -->
<!--BEGIN GENERATE_TREEVIEW-->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
$navpath
<li class="footer">$generatedby
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="$relpath^doxygen.png" alt="doxygen"/></a> $doxygenversion </li>
</ul>
</div>
<!--END GENERATE_TREEVIEW-->
<!--BEGIN !GENERATE_TREEVIEW-->
<hr class="footer"/><address class="footer"><small>
$generatedby &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="$relpath^doxygen.png" alt="doxygen"/>
</a> $doxygenversion
</small></address>
<!--END !GENERATE_TREEVIEW-->
</body>
</html>
<!-- HTML header for doxygen 1.8.10-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen $doxygenversion"/>
<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
<link href="$relpath^tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="$relpath^jquery.js"></script>
<script type="text/javascript" src="$relpath^dynsections.js"></script>
$treeview
$search
$mathjax
<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
$extrastylesheet
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<!--BEGIN TITLEAREA-->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<!--BEGIN PROJECT_LOGO-->
<td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo"/></td>
<!--END PROJECT_LOGO-->
<!--BEGIN PROJECT_NAME-->
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">$projectname
<!--BEGIN PROJECT_NUMBER-->&#160;<span id="projectnumber">$projectnumber</span><!--END PROJECT_NUMBER-->
</div>
<!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF-->
</td>
<!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME-->
<!--BEGIN PROJECT_BRIEF-->
<td style="padding-left: 0.5em;">
<div id="projectbrief">$projectbrief</div>
</td>
<!--END PROJECT_BRIEF-->
<!--END !PROJECT_NAME-->
<!--BEGIN DISABLE_INDEX-->
<!--BEGIN SEARCHENGINE-->
<td>$searchbox</td>
<!--END SEARCHENGINE-->
<!--END DISABLE_INDEX-->
</tr>
</tbody>
</table>
</div>
<!--END TITLEAREA-->
<!-- end header part -->
......@@ -329,14 +329,8 @@ else
fi
### Create example.mk
# Where openfpm is going to be installed
install_base=$(cat install_dir)
echo "INCLUDE_PATH=-I. -I$install_base/openfpm_numerics/include -I$install_base/openfpm_pdata/include/config -I$install_base/openfpm_pdata/include -I$install_base/openfpm_data/include -I$install_base/openfpm_vcluster/include -I$install_base/openfpm_io/include -I$install_base/openfpm_devices/include -I$i_dir/METIS/include -I$i_dir/PARMETIS/include -I$i_dir/BOOST/include -I$i_dir/HDF5/include $lin_alg_inc" > example.mk
echo "LIBS_PATH= -L$install_base/openfpm_devices/lib -L$install_base/openfpm_pdata/lib -L$install_base/openfpm_vcluster/lib -L$i_dir/METIS/lib -L$i_dir/PARMETIS/lib -L$i_dir/BOOST/lib -L$i_dir/HDF5/lib $lin_alg_dir" >> example.mk
echo "LIBS=-lvcluster -lofpm_pdata -lofpmmemory -lparmetis -lmetis -lboost_iostreams -lhdf5 $lin_alg_lib" >> example.mk
echo "LIBS_SE2=-lvcluster -lofpmmemory_se2 -lparmetis -lmetis -lboost_iostreams -lhdf5 $lin_alg_lib" >> example.mk
cp example.mk src/example.mk
cp example.mk example/example.mk
make clean
make
......@@ -364,6 +358,10 @@ echo ""
echo -e "\033[1;34;5m ---------- Mandatory packages --------- \033[0m"
echo ""
example_library_path=""
example_library=""
example_include_path=""
if [ -d "$i_dir/MPI" ]; then
installation_report="$installation_report \033[92;1mMPI\033[0m Installed: \033[1m $i_dir/MPI \033[0m\n"
bash_path="$bash_path:$i_dir/MPI/bin"
......@@ -375,16 +373,25 @@ fi
if [ -d "$i_dir/METIS" ]; then
installation_report="$installation_report \033[92;1mMETIS\033[0m Installed: \033[1m $i_dir/METIS \033[0m\n"
bash_library="$bash_library:$i_dir/METIS/lib"
example_library_path="$example_library_path -L$i_dir/METIS/lib"
example_library="$example_library"
example_include_path="$example_include_path -I$i_dir/METIS/include"
fi
if [ -d "$i_dir/PARMETIS" ]; then
installation_report="$installation_report \033[92;1mPARMETIS\033[0m Installed: \033[1m $i_dir/PARMETIS \033[0m\n"
bash_library="$bash_library:$i_dir/PARMETIS/lib"
example_library_path="$example_library_path -L$i_dir/PARMETIS/lib"
example_library="$example_library"
example_include_path="$example_include_path -I$i_dir/PARMETIS/include"
fi
if [ -d "$i_dir/BOOST" ]; then
installation_report="$installation_report \033[92;1mBOOST\033[0m Installed: \033[1m $i_dir/BOOST \033[0m\n"
bash_library="$bash_library:$i_dir/BOOST/lib"
example_library_path="$example_library_path -L$i_dir/BOOST/lib"
example_library="$example_library"
example_include_path="$example_include_path -I$i_dir/BOOST/include"
elif [ $BOOST_System_prv -eq 1 ]; then
installation_report="$installation_report \033[92;1mBOOST\033[0m Installed: \033[1m System installation \033[0m\n"
fi
......@@ -392,6 +399,9 @@ fi
if [ -d "$i_dir/HDF5" ]; then
installation_report="$installation_report \033[92;1mHDF5\033[0m Installed: \033[1m $i_dir/HDF5 \033[0m\n"
bash_library="$bash_library:$i_dir/HDF5/lib"
example_library_path="$example_library_path -L$i_dir/HDF5/lib"
example_library="$example_library"
example_include_path="$example_include_path -I$i_dir/HDF5/include"
fi
echo -e "$installation_report"
......@@ -405,12 +415,18 @@ installation_report=""
if [ -d "$i_dir/PETSC" ]; then
installation_report="$installation_report \033[92;1mPETSC\033[0m Installed: \033[1m $i_dir/PETSC \033[0m\n"
bash_library="$bash_library:$i_dir/PETSC/lib"
example_library_path="$example_library_path -L$i_dir/PETSC/lib"
example_library="$example_library"
example_include_path="$example_include_path -I$i_dir/PETSC/include"
else
installation_report="$installation_report \033[91;1mPETSC\033[0m Installed: \033[1m NO \033[0m\n"
fi
if [ -d "$i_dir/EIGEN" ]; then
installation_report="$installation_report \033[92;1mEIGEN\033[0m Installed: \033[1m $i_dir/EIGEN \033[0m\n"
example_library_path="$example_library_path"
example_library="$example_library"
example_include_path="$example_include_path -I$i_dir/EIGEN/include"
fi
echo -e "$installation_report"
......@@ -422,6 +438,9 @@ installation_report=""
if [ -d "$i_dir/TRILINOS" ]; then
installation_report="$installation_report \033[92;1mTRILINOS\033[0m Installed: \033[1m $i_dir/TRILINOS \033[0m\n"
bash_library="$bash_library:$i_dir/TRILINOS/lib"
example_library_path="$example_library_path"
example_library="$example_library"
example_include_path="$example_include_path -I$i_dir/TRILINOS/include"
else
installation_report="$installation_report \033[91;1mTRILINOS\033[0m Installed: \033[1m NO \033[0m\n"
fi
......@@ -429,6 +448,8 @@ fi
if [ -d "$i_dir/OPENBLAS" ]; then
installation_report="$installation_report \033[92;1mOPENBLAS\033[0m Installed: \033[1m $i_dir/OPENBLAS \033[0m\n"
bash_library="$bash_library:$i_dir/OPENBLAS/lib"
example_library_path="$example_library_path"
example_library="$example_library"
else
installation_report="$installation_report \033[91;1mOPENBLAS\033[0m Installed: \033[1m NO \033[0m\n"
fi
......@@ -436,6 +457,9 @@ fi
if [ -d "$i_dir/SUITESPARSE" ]; then
installation_report="$installation_report \033[92;1mSUITESPARSE\033[0m Installed: \033[1m $i_dir/SUITESPARSE \033[0m\n"
bash_library="$bash_library:$i_dir/SUITESPARSE/lib"
example_library_path="$example_library_path -L$i_dir/SUITESPARSE/lib"
example_library="$example_library"
example_include_path="$example_include_path -I$i_dir/SUITESPARSE/include"
else
installation_report="$installation_report \033[91;1mSUITESPARSE\033[0m Installed: \033[1m NO \033[0m\n"
fi
......@@ -443,6 +467,8 @@ fi
if [ -d "$i_dir/SCALAPACK" ]; then
installation_report="$installation_report \033[92;1mSCALAPACK\033[0m Installed: \033[1m $i_dir/SCALAPACK \033[0m\n"
bash_library="$bash_library:$i_dir/SCALAPACK/lib"
example_library_path="$example_library_path"
example_library="$example_library"
else
installation_report="$installation_report \033[91;1mSCALAPACK\033[0m Installed: \033[1m NO \033[0m\n"
fi
......@@ -450,6 +476,8 @@ fi
if [ -d "$i_dir/MUMPS" ]; then
installation_report="$installation_report \033[92;1mMUMPS\033[0m Installed: \033[1m $i_dir/MUMPS \033[0m\n"
bash_library="$bash_library:$i_dir/MUMPS/lib"
example_library_path="$example_library_path"
example_library="$example_library"
else
installation_report="$installation_report \033[91;1mMUMPS\033[0m Installed: \033[1m NO \033[0m\n"
fi
......@@ -457,6 +485,8 @@ fi
if [ -d "$i_dir/SUPERLU_DIST" ]; then
installation_report="$installation_report \033[92;1mSUPERLU_DIST\033[0m Installed: \033[1m $i_dir/SUPERLU_DIST \033[0m\n"
bash_library="$bash_library:$i_dir/SUPERLU_DIST/lib"
example_library_path="$example_library_path"
example_library="$example_library"
else
installation_report="$installation_report \033[91;1mSUPERLU_DIST\033[0m Installed: \033[1m NO \033[0m\n"
fi
......@@ -464,6 +494,8 @@ fi
if [ -d "$i_dir/HYPRE" ]; then
installation_report="$installation_report \033[92;1mHYPRE\033[0m Installed: \033[1m $i_dir/HYPRE \033[0m\n"
bash_library="$bash_library:$i_dir/HYPRE/lib"
example_library_path="$example_library_path"
example_library="$example_library"
else
installation_report="$installation_report \033[91;1mHYPRE\033[0m Installed: \033[1m NO \033[0m\n"
fi
......@@ -476,6 +508,15 @@ bash_library="$bash_library\""
echo "$bash_path" > $HOME/openfpm_vars
echo "$bash_library" >> $HOME/openfpm_vars
### Create example.mk
echo "INCLUDE_PATH=-I. -I$install_base/openfpm_numerics/include -I$install_base/openfpm_pdata/include/config -I$install_base/openfpm_pdata/include -I$install_base/openfpm_data/include -I$install_base/openfpm_vcluster/include -I$install_base/openfpm_io/include -I$install_base/openfpm_devices/include $example_include_path $lin_alg_inc" > example.mk
echo "LIBS_PATH= -L$install_base/openfpm_devices/lib -L$install_base/openfpm_pdata/lib -L$install_base/openfpm_vcluster/lib $example_library_path $lin_alg_dir" >> example.mk
echo "LIBS=-lvcluster -lofpm_pdata -lofpmmemory -lparmetis -lmetis -lboost_iostreams -lhdf5 $lin_alg_lib" >> example.mk
echo "LIBS_SE2=-lvcluster -lofpmmemory_se2 -lparmetis -lmetis -lboost_iostreams -lhdf5 $lin_alg_lib" >> example.mk
cp example.mk src/example.mk
cp example.mk example/example.mk
echo -e "$installation_report"
echo ""
echo ""
......
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment