To run this module you need access to hotwheels PM, integrate, and IO components.
In this example we will use create IC that sample a **NFW profile** and evolve it for 1Gyr with gravity computed using several layers of a **refined particle-mesh (PM)**.

Here is a first benefit of a modular code: since in `hotwheels `PM is a self-contained module, we can instantiate it an arbitrary number of times. So one can stack seven [PLACEHIGHRESREGION](https://wwwmpa.mpa-garching.mpg.de/gadget4/03_simtypes/)
on smaller and smaller regions (a sort of refined mesh) on top of a sampled NFW halo and use PM-only to **get accurate force down to a kpc** (see image).
Note that to run this module you need access to hotwheels **core, IO, PM,** and **integrate** components. Note that `hotwheels` do not provide parameter or config files. It is up to the user to initalise its sub-library components and connect them.
```python
importnumpyasnp,os,matplotlibasplt
...
...
@@ -7,9 +15,14 @@ from hotwheels_pm import *
fromhotwheels_integrateimport*
fromhotwheels_ioimport*
# if G=43007.1, masses are in 1e10Msun/h, and radii are in ckpc/h, then this
# constant converts from Gyr to internal units. Not much to comment about it
gyr_to_cu=3.086e+16/(1e9*3600*24*365)
#
# step 1: config of components
#
# at this stage we do not allocate any resource, we just
# pass the right config parameters to the constructors
# in order to compile the underlying C libraries.
#
#call MPI_Init()
mpi=hwc.MPI().init()
#configure my malloc with 2GB
...
...
@@ -20,6 +33,9 @@ p = SoA(maxpart=int(1e5), mem=mym)
soas=SoAs(p,mem=mym)
# configure the timestep class to go from 0 to 1 Gyr
# note: G=43007.1 in units of length=kpc, velocity=km/s, mass = 1e10Msun
# if G=43007.1, masses are in 1e10Msun/h, and radii are in ckpc/h, then this
# constant converts from Gyr to internal units. Not much to comment about it