A question about the Matrix plugin

Hi, I want to migrate our freestyle Matrix jobs to declarative pipeline. But first I need to understand how the freestyle job works.

The matrix jobs use an Agents block named ‘label’ and one User-defined axis named ‘Simulation’.

Provided the agents are specified by a Label (not individual nodes), the build steps execute one of the simulation files specified by axis Simulation on one of the agents specified by label. I.e. this is not a multiplication where all simulations run on all agents.

Please can anyone tell me where this specific behavior is defined?

How would I reproduce it in declarative pipeline?