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

📄 ssyr2k.c

📁 最著名最快的分子模拟软件
💻 C
字号:
#include <ctype.h>#include <math.h>#include <types/simple.h>#include "gmx_blas.h"voidF77_FUNC(ssyr2k,SSYR2K)(char *uplo,                         char *trans,                        int *n__,                        int *k__,                        float *alpha__,                        float *a,                        int *lda__,                        float *b,                        int *ldb__,                        float *beta__,                        float *c,                        int *ldc__){  char ch1,ch2;  int nrowa;  int i,j,l;  float temp1,temp2;  int n = *n__;  int k = *k__;  int lda = *lda__;  int ldb = *ldb__;  int ldc = *ldc__;    float alpha = *alpha__;  float beta  = *beta__;    ch1 = toupper(*uplo);  ch2 = toupper(*trans);  if(ch2 == 'N')    nrowa = n;  else    nrowa = k;  if(n==0 || ( ( fabs(alpha)<GMX_FLOAT_MIN || k==0 ) && fabs(beta-1.0)<GMX_FLOAT_EPS))    return;  if(fabs(alpha)<GMX_FLOAT_MIN) {    if(ch1=='U') {      if(fabs(beta)<GMX_FLOAT_MIN) 	for(j=1;j<=n;j++) 	  for(i=1;i<=j;i++)	    c[(j-1)*(ldc)+(i-1)] = 0.0;      else	for(j=1;j<=n;j++) 	  for(i=1;i<=j;i++)	    c[(j-1)*(ldc)+(i-1)] *= beta;    } else {      /* lower */      if(fabs(beta)<GMX_FLOAT_MIN) 	for(j=1;j<=n;j++) 	  for(i=j;i<=n;i++)	    c[(j-1)*(ldc)+(i-1)] = 0.0;      else	for(j=1;j<=n;j++) 	  for(i=j;i<=n;i++)	    c[(j-1)*(ldc)+(i-1)] *= beta;    }    return;  }  if(ch2=='N') {    if(ch1=='U') {      for(j=1;j<=n;j++) {	if(fabs(beta)<GMX_FLOAT_MIN)	  for(i=1;i<=j;i++)	     c[(j-1)*(ldc)+(i-1)] = 0.0;	else if(fabs(beta-1.0)>GMX_FLOAT_EPS)	  for(i=1;i<=j;i++)	    c[(j-1)*(ldc)+(i-1)] *= beta;	for(l=1;l<=k;l++) {	  if( fabs(a[(l-1)*(lda)+(j-1)])>GMX_FLOAT_MIN ||	      fabs(b[(l-1)*(ldb)+(j-1)])>GMX_FLOAT_MIN) {	    temp1 = alpha * b[(l-1)*(ldb)+(j-1)];	    temp2 = alpha * a[(l-1)*(lda)+(j-1)];	    for(i=1;i<=j;i++)	      c[(j-1)*(ldc)+(i-1)] += 		a[(l-1)*(lda)+(i-1)] * temp1 + 		b[(l-1)*(ldb)+(i-1)] * temp2;	  }	}      }    } else {      /* lower */      for(j=1;j<=n;j++) {	if(fabs(beta)<GMX_FLOAT_MIN)	  for(i=j;i<=n;i++)	    c[(j-1)*(ldc)+(i-1)] = 0.0;	else if(fabs(beta-1.0)>GMX_FLOAT_EPS)	  for(i=j;i<=n;i++)	    c[(j-1)*(ldc)+(i-1)] *= beta;	for(l=1;l<=k;l++) {	  if( fabs(a[(l-1)*(lda)+(j-1)])>GMX_FLOAT_MIN ||	      fabs(b[(l-1)*(ldb)+(j-1)])>GMX_FLOAT_MIN) {	    temp1 = alpha * b[(l-1)*(ldb)+(j-1)];	    temp2 = alpha * a[(l-1)*(lda)+(j-1)];	    for(i=j;i<=n;i++)	      c[(j-1)*(ldc)+(i-1)] += 		a[(l-1)*(lda)+(i-1)] * temp1 + 		b[(l-1)*(ldb)+(i-1)] * temp2;	  }	}      }    }  } else {    /* transpose */    if(ch1=='U') {      for(j=1;j<=n;j++) 	for(i=1;i<=j;i++) {	  temp1 = 0.0;	  temp2 = 0.0;	  for (l=1;l<=k;l++) {	     temp1 += a[(i-1)*(lda)+(l-1)] * b[(j-1)*(ldb)+(l-1)];	     temp2 += b[(i-1)*(ldb)+(l-1)] * a[(j-1)*(lda)+(l-1)];	  }	  if(fabs(beta)<GMX_FLOAT_MIN)	    c[(j-1)*(ldc)+(i-1)] = alpha * (temp1 + temp2);	  else	    c[(j-1)*(ldc)+(i-1)] = beta * c[(j-1)*(ldc)+(i-1)] +	      alpha * (temp1 + temp2);	}    } else {      /* lower */      for(j=1;j<=n;j++) 	for(i=j;i<=n;i++) {	  temp1 = 0.0;	  temp2 = 0.0;	  for (l=1;l<=k;l++) {	     temp1 += a[(i-1)*(lda)+(l-1)] * b[(j-1)*(ldb)+(l-1)];	     temp2 += b[(i-1)*(ldb)+(l-1)] * a[(j-1)*(lda)+(l-1)];	  }	  if(fabs(beta)<GMX_FLOAT_MIN)	    c[(j-1)*(ldc)+(i-1)] = alpha * (temp1 + temp2);	  else	    c[(j-1)*(ldc)+(i-1)] = beta * c[(j-1)*(ldc)+(i-1)] +	      alpha * (temp1 + temp2);	}    }  }  return;}

⌨️ 快捷键说明

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