slanst.c

来自「最著名最快的分子模拟软件」· C语言 代码 · 共 74 行

C
74
字号
#include <math.h>#include <ctype.h>#include "gmx_lapack.h"floatF77_FUNC(slanst,SLANST)(char *norm,	int *n,	float *d,	float *e){  char ch=toupper(*norm);  float dtemp,max,val,scale,sum;  int i,j;  if(*n<=0)    return 0.0;    switch(ch) {  case 'M':    max = fabs(d[*n-1]);      for(i=0;i<(*n-1);i++) {	dtemp = fabs(d[i]);	if(dtemp>max)	  max = dtemp;	dtemp = fabs(e[i]);	if(dtemp>max)	  max = dtemp;      }    val = max;    break;      case 'O':  case '1':  case 'I':    if(*n==1)      val = fabs(d[0]);    else {      max = fabs(d[0]) + fabs(e[0]);      dtemp = fabs(e[*n-2]) + fabs(d[*n-1]);      if(dtemp>max)	max = dtemp;      for(i=1;i<(*n-1);i++) {	dtemp = fabs(d[i]) + fabs(e[i]) + fabs(e[i-1]);	if(dtemp>max)	  max = dtemp;      }      val = max;    }    break;  case 'F':  case 'E':    scale = 0.0;    sum   = 1.0;    i = *n-1;    j = 1;    if(*n>1) {      F77_FUNC(slassq,SLASSQ)(&i,e,&j,&scale,&sum);      sum *= 2;    }    F77_FUNC(slassq,SLASSQ)(n,d,&j,&scale,&sum);    val = scale * sqrt(sum);    break;      default:    val = 0.0;    break;  }  return val;}

⌨️ 快捷键说明

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