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

📄 dgemm.c

📁 最著名最快的分子模拟软件
💻 C
字号:
#include <ctype.h>#include <math.h>#include <types/simple.h>#include "gmx_blas.h"voidF77_FUNC(dgemm,DGEMM)(char *transa,                      char *transb,                      int *m__,                      int *n__,                      int *k__,                      double *alpha__,                      double *a,                      int *lda__,                      double *b,                      int *ldb__,                      double *beta__,                      double *c,                      int *ldc__){  char tra=toupper(*transa);  char trb=toupper(*transb);  double temp;  int i,j,l;  int nrowa,ncola,nrowb;  int m = *m__;  int n = *n__;  int k = *k__;  int lda = *lda__;  int ldb = *ldb__;  int ldc = *ldc__;    double alpha = *alpha__;  double beta  = *beta__;    if(tra=='N') {    nrowa = m;    ncola = k;  } else {    nrowa = k;    ncola = m;  }  if(trb=='N')     nrowb = k;   else     nrowb = n;    if(m==0 || n==0 || (( fabs(alpha)<GMX_DOUBLE_MIN || k==0) && fabs(beta-1.0)<GMX_DOUBLE_EPS))    return;  if(fabs(alpha)<GMX_DOUBLE_MIN) {    if(fabs(beta)<GMX_DOUBLE_MIN) {      for(j=0;j<n;j++)	for(i=0;i<m;i++)	  c[j*(ldc)+i] = 0.0;    } else {      /* nonzero beta */      for(j=0;j<n;j++)	for(i=0;i<m;i++)	  c[j*(ldc)+i] *= beta;    }    return;  }  if(trb=='N') {    if(tra=='N') {            for(j=0;j<n;j++) {	if(fabs(beta)<GMX_DOUBLE_MIN) {	  for(i=0;i<m;i++)	    c[j*(ldc)+i] = 0.0;	} else if(fabs(beta-1.0)>GMX_DOUBLE_EPS) {	  for(i=0;i<m;i++)	    c[j*(ldc)+i] *= beta;	} 	for(l=0;l<k;l++) {	  if( fabs(b[ j*(ldb) + l ])>GMX_DOUBLE_MIN) {	    temp = alpha * b[ j*(ldb) + l ];	    for(i=0;i<m;i++)	      c[j*(ldc)+i] += temp * a[l*(lda)+i]; 	  }	}      }    } else {      /* transpose A, but not B */      for(j=0;j<n;j++) {	for(i=0;i<m;i++) {	  temp = 0.0;	  for(l=0;l<k;l++) 	    temp += a[i*(lda)+l] * b[j*(ldb)+l];	  if(fabs(beta)<GMX_DOUBLE_MIN)	    c[j*(ldc)+i] = alpha * temp;	  else	    c[j*(ldc)+i] = alpha * temp + beta * c[j*(ldc)+i];	}      }    }  } else {    /* transpose B */    if(tra=='N') {      /* transpose B, but not A */      for(j=0;j<n;j++) {	if(fabs(beta)<GMX_DOUBLE_MIN) {	  for(i=0;i<m;i++)	    c[j*(ldc)+i] = 0.0;	} else if(fabs(beta-1.0)>GMX_DOUBLE_EPS) {	  for(i=0;i<m;i++)	    c[j*(ldc)+i] *= beta;	} 	for(l=0;l<k;l++) {	  if( fabs(b[ l*(ldb) + j ])>GMX_DOUBLE_MIN) {	    temp = alpha * b[ l*(ldb) + j ];	    for(i=0;i<m;i++)	      c[j*(ldc)+i] += temp * a[l*(lda)+i]; 	  }	}      }     } else {      /* Transpose both A and B */       for(j=0;j<n;j++) {	for(i=0;i<m;i++) {	  temp = 0.0;	  for(l=0;l<k;l++) 	    temp += a[i*(lda)+l] * b[l*(ldb)+j];	  if(fabs(beta)<GMX_DOUBLE_MIN)	    c[j*(ldc)+i] = alpha * temp;	  else	    c[j*(ldc)+i] = alpha * temp + beta * c[j*(ldc)+i];	}       }    }  }}

⌨️ 快捷键说明

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