Ejemplo n.º 1
0
 /// <summary>
 /// Will do nothing if it was already called. To perform this for a different stiffness matrix, first call
 /// <see cref="Clear"/>.
 /// </summary>
 public void ExtractAndInvertKiiDiagonal(int[] internalDofs)
 {
     if (inverseKiiDiagonal != null)
     {
         return;
     }
     try
     {
         var diagonal = new double[internalDofs.Length];
         for (int i = 0; i < diagonal.Length; ++i)
         {
             int idx = internalDofs[i];
             diagonal[i] = 1.0 / Krr[idx, idx];
             //diagonal[i] = Krr[idx, idx];
         }
         inverseKiiDiagonal = DiagonalMatrix.CreateFromArray(diagonal, false);
         //inverseKiiDiagonal.Invert();
     }
     catch (MatrixDataOverwrittenException)
     {
         throw new InvalidOperationException(
                   "The remainder-remainder stiffness submatrix of this subdomain has been overwritten and cannot be used"
                   + " anymore. Try calling this method before factorizing/inverting it.");
     }
 }