⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 symamgsavediag.c

📁 a software code for computing selected eigenvalues of large sparse symmetric matrices
💻 C
字号:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include <lapack.h>#include <ilupack.h>#include <ilupackmacros.h>double SYMAMGSAVEDIAG(size_t *Fparam, integer *n, integer *ia, 		    integer *ja, FLOAT *a){  integer i,j,k,ki;  REALS   val,ti,tmp;  REALS   *disc;  ILUPACKPARAM *IPparam;    IPparam=(ILUPACKPARAM *)MALLOC((size_t)1*sizeof(ILUPACKPARAM),"ilupackfactor:param");  memcpy(Fparam, &IPparam, sizeof(size_t));  IPparam->diag=(FLOAT *)MALLOC(*n*sizeof(FLOAT),"symamgsavediag:IPparam->diag");  disc=(REALS *)MALLOC(*n*sizeof(REALS),"symamgsavediag:disc");  for (i=0; i<*n; i++)      disc[i]=IPparam->diag[i]=0.0;  ki=1;  for (i=0; i<*n; i++) {      for (j=ia[i]; j<ia[i+1]; j++) {	  k=ja[j-1]-1;	  if (k==i) {	     IPparam->diag[i]=a[j-1];	     if (i==0) 		 ti=a[j-1];	     else {		 if (a[j-1] < ti)  		     ti=a[j-1];		 ki=i;	     }	  }	  else {	      val=FABS(a[j-1]);	      disc[i]+=val;	      // remember that only the upper triangular part is stored	      disc[k]+=val;	  }      }  }  val=ti-disc[ki];  for (i=1; i<*n; i++) {      tmp=IPparam->diag[i]-disc[i];       if (tmp<val) {	  if (IPparam->diag[i]-ti < disc[ki]) 	      val=tmp;      }  }  free(disc);  return (val);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -