slasdt.c

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

C
46
字号
#include <math.h>#include "gmx_lapack.h"voidF77_FUNC(slasdt,SLASDT)(int *n,	int *lvl,	int *nd,	int *inode,	int *ndiml,	int *ndimr,	int *msub){  int maxn = (*n > 1) ? *n : 1;  float temp;  int i,il,ir,llst,nlvl,ncrnt;  temp = log( ((float) maxn) / ((float)(*msub+1))) / log(2.0);    *lvl = 1 + (int) temp;  i = *n / 2;  inode[0] = i + 1;  ndiml[0] = i;  ndimr[0] = *n - i - 1;  il = -1;  ir = 0;  llst = 1;  for(nlvl=1;nlvl<*lvl;nlvl++) {    for(i=0;i<llst;i++) {      il += 2;      ir += 2;      ncrnt = llst + i - 1;      ndiml[il] = ndiml[ncrnt] / 2;      ndimr[il] = ndiml[ncrnt] - ndiml[il] - 1;      inode[il] = inode[ncrnt] - ndimr[il] - 1;      ndiml[ir] = ndimr[ncrnt] / 2;      ndimr[ir] = ndimr[ncrnt] - ndiml[ir] - 1;      inode[ir] = inode[ncrnt] + ndiml[ir] + 1;    }    llst *= 2;  }  *nd = llst*2 - 1;  return;}

⌨️ 快捷键说明

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