<Kernel name="AllocateConstraintData" dispatch="serial">
  <Parameter.Array name="@ParticleSystem.ActiveParticlePairContacts"     type="UInt:32bit" mode="READ"/>
  <Parameter.Array name="@ParticleSystem.ActiveParticleGeometryContacts" type="UInt:32bit" mode="READ"/>
  <Parameter.Pointer name="particleParticleConstraintStorage" bind="@GranularGranularContactConstraint"     type="agxData::EntityStorage"/>
  <Parameter.Pointer name="particleBodyConstraintStorage"     bind="@GranularBodyContactConstraint"         type="agxData::EntityStorage"/>
  <Parameter.Pointer name="particleParticleRowStorage"        bind="@GranularGranularContactConstraint.Row" type="agxData::EntityStorage"/>
  <Parameter.Pointer name="particleBodyRowStorage"            bind="@GranularBodyContactConstraint.Row"     type="agxData::EntityStorage"/>
  <Parameter.Pointer name="granularGranularJacobianStorage" bind="@GranularGranularContactConstraintJacobianStorage" type="agxData::Buffer"/>
  <Parameter.Pointer name="granularGranularGMInvStorage"    bind="@GranularGranularContactConstraintGMInvStorage"    type="agxData::Buffer"/>
  <Parameter.Pointer name="granularGeometryJacobianStorage" bind="@GranularGeometryContactConstraintJacobianStorage" type="agxData::Buffer"/>
  <Parameter.Pointer name="granularGeometryGMInvStorage"    bind="@GranularGeometryContactConstraintGMInvStorage"    type="agxData::Buffer"/>
  <Parameter.Scalar name="@contactMode" type="UInt" mode="READ"/>
  <Parameter.Pointer name="solver"    bind="@Solver"    type="agx::Solver" include="agx/Solver.h"/>
</Kernel>
