.. _ShellMatrix_Constructors: ############ Constructors ############ The :ref:`ShellMatrix` should be returned from the :ref:`Operator class` via :ref:`create_ShellMatrix(...)`. All member functions are ``const`` can **not** be modified after creation. We choose this design to ensure the correct communication patter when :ref:`MPI` is used. Hence, the constructors are ``protected`` and can by only used by the :ref:`Operator class`. If :ref:`MPI` is **not** enable, it is constructed by .. doxygenfunction:: danceq::internal::ShellMatrix::ShellMatrix(const Op* operator_ptr_) Otherwise, the following constructor (with :ref:`MPI`) is used: .. note:: :ref:`MPI` requires additional memory for the communication between its processes. This can by limited by **overhead_in_GB_per_core** in :ref:`Operator class` via :ref:`create_ShellMatrix(...)`. .. doxygenfunction:: danceq::internal::ShellMatrix::ShellMatrix(const Op* operator_ptr_, const int32_t myrank_, const int32_t world_size_, const uint64_t start_, const uint64_t end_, const uint64_t number_of_communication_steps_, const uint64_t maximal_number_of_elements_to_recv_, const uint64_t maximal_number_of_elements_to_send_, const std::vector dim_per_step_, const std::vector total_number_of_elements_to_recv_per_step_, const std::vector total_number_of_elements_to_send_per_step_, const std::vector ownership_per_rank_, const std::vector> number_of_elements_to_send_per_rank_per_step_, const std::vector> number_of_elements_to_recv_per_rank_per_step_)