docs: def solve(self, printmat=0, sendback=0, silent=False):
          '''Compute solution'''
          # Initialize elements
          self.initialize()
          # Compute number of equations
          self.neq = np.sum([e.nunknowns for e in self.elementlist])
          if self.neq == 0: return
          if silent is False:
              print('Number of elements, Number of equations:', len(
                  self.elementlist), ',', self.neq)
          if self.neq == 0:
              if silent is False: print('No unknowns. Solution complete')
              return
          mat = np.empty((self.neq, self.neq))
          rhs = np.empty(self.neq)
          ieq = 0
          for e in self.elementlist:
              if e.nunknowns > 0:
                  mat[ieq:ieq + e.nunknowns, :], rhs[ieq:ieq + e.nunknowns] = \
                  e.equation()
                  ieq += e.nunknowns
              if silent is False:
                  print('.', end='', flush=True)
          if printmat:
              return mat, rhs
          sol = np.linalg.solve(mat, rhs)
          icount = 0
          for e in self.elementlist:
              if e.nunknowns > 0:
                  e.setparams(sol[icount:icount + e.nunknowns])
                  icount += e.nunknowns
          if silent is False:
              print()  # needed cause the dots are printed
              print('solution complete')
          elif (silent == 'dot') or (silent == '.'):
              print('.', end='', flush=True)
          if sendback:
              return sol
          return