# Initial conditions
The initial conditions model is responsible for describing the initial
temperature distribution throughout the domain. It essentially has to provide
a function that for each point can return the initial temperature. Note that
the model {math:numref}`eq:stokes-1`–{math:numref}`eq:temperature` does not require
initial values for the pressure or velocity. However, if coefficients are
nonlinear, one can significantly reduce the number of initial nonlinear
iterations if a good guess for them is available; consequently,
ASPECT initializes the pressure with the
adiabatically computed hydrostatic pressure, and a zero velocity. Neither of
these two has to be provided by the objects considered in this section.
To implement a new initial conditions model, you need to overload the
`aspect::InitialConditions::Interface` class and use the
`ASPECT_REGISTER_INITIAL_CONDITIONS` macro to register your new class. The
implementation of the new class should be in namespace
`aspect::InitialConditions`.
Specifically, your new class needs to implement the following basic interface:
```{code-block} c++
template
class aspect::InitialConditions::Interface
{
public:
void
initialize (const GeometryModel::Interface &geometry_model,
const BoundaryTemperature::Interface &boundary_temperature,
const AdiabaticConditions &adiabatic_conditions);
virtual
double
initial_temperature (const Point &position) const = 0;
static
void
declare_parameters (ParameterHandler &prm);
virtual
void
parse_parameters (ParameterHandler &prm);
};
```
The meaning of the first class should be clear. The purpose of the last two
functions has been discussed in the general overview of plugins above.