Index: tol/btol/vmatrix_type/vmat_convert.cpp
===================================================================
--- tol/btol/vmatrix_type/vmat_convert.cpp	(revision 7a01db83b43bbb8f0b091a8794a7af467e2ae516)
+++ tol/btol/vmatrix_type/vmat_convert.cpp	(revision 98e52e6898e2e464bc98ffabcd6449293938c8ca)
@@ -741,5 +741,5 @@
   }
   bool lower = diag<=0;
-  int k, n = isCol?v.Rows():v.Columns();
+  int i, k, n = isCol?v.Rows():v.Columns();
   if(lower)
   {
@@ -757,10 +757,11 @@
   int*    c_ = (int*)   triplet->j;
   double* x_ = (double*)triplet->x;
-  for(k=0; k<n; k++)
-  {
-    r_[k] = lower?k-diag:k;
-    c_[k] = lower?k:k+diag;
-    x_[k] = isCol?v.GetCell(k,0):v.GetCell(0,k);
-    if(x_[k]!=0.0) { triplet->nnz++; }
+
+  for(i=k=0; k<n; k++)
+  {
+    r_[i] = lower?k-diag:k;
+    c_[i] = lower?k:k+diag;
+    x_[i] = isCol?v.GetCell(k,0):v.GetCell(0,k);
+    if(x_[i]!=0.0) { triplet->nnz++; i++; }
   }
   code_  = ESC_chlmRsparse;
@@ -794,13 +795,16 @@
   cholmod_triplet* triplet = cholmod_allocate_triplet
     (nrow,ncol,n,0,CHOLMOD_REAL,common_);
-  int*    r_ = (int*)   triplet->i;
-  int*    c_ = (int*)   triplet->j;
-  double* x_ = (double*)triplet->x;
-  for(k=0; k<n; k++)
-  {
-    r_[k] = lower?k-diag:k;
-    c_[k] = lower?k:k+diag;
-    x_[k] = x;
-    triplet->nnz += (x!=0.0);
+  if(x!=0.0)
+  {
+    int*    r_ = (int*)   triplet->i;
+    int*    c_ = (int*)   triplet->j;
+    double* x_ = (double*)triplet->x;
+    for(k=0; k<n; k++)
+    {
+      r_[k] = lower?k-diag:k;
+      c_[k] = lower?k:k+diag;
+      x_[k] = x;
+    }
+    triplet->nnz = n;
   }
   code_  = ESC_chlmRsparse;
