I'd like to keep a list of important libpll peculiarities which the users should be aware of. If you feel that certain points should be given special emphasis in the documentation and the website (e.g. in a separate section) please let me know.
All transition probability matrices (p-matrices) are allocated and stored consecutively in memory.
One p-matrix entry is a contiguous block of memory pointing to several p-matrices (as many as rate categories)
The size of a p-matrix is (statesstates) when using non-vectorized code, and states (rows) states_padded (columns) when using vectorized code. states_padded is the closest multiple of 2 for SSE, or the closest multiple of 4 for AVX that is greater or equal to states.
When using the tree libpll tree structure, tips are mapped to CLV indices ranging from 0 to n-1 (n is the number of tips), and inner nodes are given the CLV indices starting from n.
A note on not manually changing partition variables (e.g. invariant/invariable sites related variables).
A note on ascertainment bias, the extra memory that is allocated within the partition (extra 'states' sites), and that the sites variable does not contain the extra states.
I'd like to keep a list of important libpll peculiarities which the users should be aware of. If you feel that certain points should be given special emphasis in the documentation and the website (e.g. in a separate section) please let me know.