24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 5553  |  回复: 34
支持
11楼2010-04-07 07:13:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tjyl

金虫 (正式写手)

★ ★ ★ ★ ★
qli0218(金币+10):非常感谢!! 2010-04-07 11:23
hometownlove(金币+5):学习了 2010-04-07 20:17
计算软件:abinit
应用软件:C,Gnuplot
作用:直接画一个简单能带图,方便看结果
方法:运行时提取出xxx_EIG里的值,产生一个gnuplot用的脚本,然后把图输出到一个ps文件里。
使用:
以tutorial #3里3.5的输出 t3xo_DS2_EIG为例子
gcc eig.c -lm
./a.out t3xo_DS2_EIG
输入 kptopt 的绝对值
3
然后一侧输入ndivk的几个值,每输入一个按回车
10
12
17

程序(可选):
CODE:
#include
#include
#include
#include
double **matrix (int R, int L);        //为数组M[R][L]开辟空间。
void freem (double **m, int R, int L);
double emin (double **m, int R, int L);
double emax (double **m, int R, int L);
int
main (int argc, char **argv)
{
  int knum;
  int nband;
  int i, j;
  FILE *fp;
  FILE *pt, *pd;
  double **eig;
  double ymax, ymin;
  int kptopt = 3;
  int *ndivk;
  if (argc != 2)
    {
      printf ("this program only need 2 parameters.\n");
      return -1;
    }
  printf ("please input the kptopt:\n");
  scanf ("%d", &kptopt);
  ndivk = malloc (sizeof (int) * kptopt);
  printf ("please input the ndivk:\n");
  for (i = 0; i < kptopt; i++)
    scanf ("%d", ndivk + i);
  if ((fp = fopen (argv[1], "r")) == NULL)
    {
      printf ("can't open %s.\n", argv[1]);
      return -1;
    }
  fscanf (fp, "%*[^0-9]%d%*[^\n]\n", &knum);
  fscanf (fp, "%*[^=]=%d%*[^\n]\n", &nband);
  rewind (fp);
  eig = matrix (knum, nband);
  if (NULL == eig)
    {
      printf ("can't get memory for eig.\n");
      return -1;
    }
  fscanf (fp, "%*[^\n]\n");
  for (i = 0; i < knum; i++)
    {
      fscanf (fp, "%*[^\n]\n");
      for (j = 0; j < nband; j++)
        fscanf (fp, "%lf", &eig[i][j]);
      fscanf (fp, "\n");
    }
  pd = fopen ("plot.data", "w");
  if (NULL == pd)
    {
      printf ("fail to open plot.data.\n");
      return -1;
    }

  for (i = 0; i < knum; i++)
    {
      fprintf (pd, "%4d", i + 1);
      for (j = 0; j < nband; j++)
        fprintf (pd, " %.5f", eig[i][j]);
      fprintf (pd, "\n");
    }
  fclose (fp);
  fclose (pd);
  ymax = emax (eig, knum, nband);
  ymin = emin (eig, knum, nband);
  ymax = ymax + fabs (0.2 * ymax);        //设置画图所用的Y轴坐标上下限
  ymin = ymin - fabs (0.2 * ymin);
  if ((pt = fopen ("plot", "w")) == NULL)
    {
      printf ("fail to open file 'plot'.\n");
      return -1;
    }
  fprintf (pt, "gnuplot<         set term post landscape enhanced color dashed defaultplex \"Helvetica\" 14\n\
        set output \'pic.ps\'\n\
        set key outside\n\
        set title \"Energy Band\"\n\
        set ylabel \"Energy (Ev)\"\n");
  fprintf (pt, "set yrange[%f:%f]\n", ymin, ymax);
  fprintf (pt, "set xrange[%d:%d]\n", 1, knum);
  j = 0;
  for (i = 1; i < kptopt; i++)
    {
      j = j + ndivk[i - 1];
      fprintf (pt, "set arrow from %d,%f to %d,%f\n", j + 1, ymin, j + 1, ymax);        //在特殊点处画箭头
    }
  fprintf (pt,
           " plot 'plot.data' u 1:2  w l lw 2 smooth cspline,'plot.data' u 1:2  w p  ps 0.3 ");
  for (i = 1; i < nband; i++)
    fprintf (pt,
             " ,'plot.data' u 1:%d  w l lw 2 smooth cspline,'plot.data' u 1:%d w p  ps 0.3 ",
             i + 2, i + 2);
  fprintf (pt, "\nEOF");
  fclose (pt);
  chmod ("plot", S_IRUSR | S_IWUSR | S_IXUSR | S_IXGRP | S_IXOTH);
  system ("./plot");
  remove ("plot");
  remove ("plot.data");                //结束后删除中间产生的数据和gnuplot脚本.
  freem (eig, knum, nband);
  return 0;
}

double **
matrix (int R, int L)
{
  double **M;
  int i;
  if ((M = malloc (sizeof (double *) * R)) == NULL)
    {
      printf ("can't get memory1.\n");
      return NULL;
    }
  for (i = 0; i < R; i++)
    {
      M[i] = calloc (sizeof (double), L);
      if (NULL == M[i])
        {
          printf ("can't get memory2.\n");
          return NULL;
        }
    }
  return M;
}

void
freem (double **m, int R, int L)
{
  int i;
  for (i = 0; i < R; i++)
    free ( m[i] );
  free (m);
}

double
emax (double **m, int R, int L)
{
  int i, j;
  double max;
  max = m[0][0];
  for (i = 0; i < R; i++)
    for (j = 0; j < L; j++)
      max = (max > m[i][j]) ? max : m[i][j];
  return max;
}

double
emin (double **m, int R, int L)
{
  int i, j;
  double min;
  min = m[0][0];
  for (i = 0; i < R; i++)
    for (j = 0; j < L; j++)
      min = (min < m[i][j]) ? min : m[i][j];
  return min;
}

引用回帖:
Originally posted by qli0218 at 2010-04-06 14:11:26:
[box=white]现在做第一性原理计算越来越多,但是如何发表高层次的文章却与处理、挖掘所得数据的深度有着密切的联系。所以希望大家互帮互助,分享处理数据的经验。

大家所用软件都不一样, ...

[ Last edited by tjyl on 2010-4-7 at 10:23 ]
12楼2010-04-07 10:14:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tjyl

金虫 (正式写手)

★ ★ ★ ★ ★ ★ ★
aylayl08(金币+5):非常感谢,第一个提供程序的,鼓励一下 2010-04-07 13:07
hometownlove(金币+2):谢谢交流 2010-04-07 20:18
前面的代码里freem函数贴出来后显示的有问题。
CODE:
void freem (double **m, int R, int L)
{
  int i;
  for (i = 0; i < R; i++)
    free ( m[i]);
  free (m);
}


如果能带数量多,就加
unset key\n\
CODE:
fprintf(pt, "gnuplot<         set term post landscape enhanced color dashed defaultplex \"Helvetica\" 14\n\
        set output \'pic.ps\'\n\
        set key outside\n\
        set title \"Energy Band\"\n\
        unset key\n\
        set ylabel \"Energy (Ev)\"\n");

引用回帖:
Originally posted by tjyl at 2010-04-07 10:14:18:
计算软件:abinit
应用软件:C,Gnuplot
作用:直接画一个简单能带图,方便看结果
方法:运行时提取出xxx_EIG里的值,产生一个gnuplot用的脚本,然后把图输出到一个ps文件里。
使用:
以tutorial #3里3.5的输 ...

[ Last edited by tjyl on 2010-4-7 at 10:51 ]
13楼2010-04-07 10:18:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

锐利的碎片

木虫 (正式写手)

star watcher

其实scilab处理数据很方便,主要是可以进行很多分析工作。语法和matlab十分接近。直接下载可执行版加上环境变量就可以用了。当然freemat也很好。

[ Last edited by 锐利的碎片 on 2010-4-7 at 10:54 ]
14楼2010-04-07 10:53:06
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tjyl

金虫 (正式写手)

octave用法和matlab基本一样的。
引用回帖:
Originally posted by 锐利的碎片 at 2010-04-07 10:53:06:
其实scilab处理数据很方便,主要是可以进行很多分析工作。语法和matlab十分接近。直接下载可执行版加上环境变量就可以用了。当然freemat也很好。

[ Last edited by 锐利的碎片 on 2010-4-7 at 10:54 ]

15楼2010-04-07 11:36:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
16楼2010-04-07 11:40:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

锐利的碎片

木虫 (正式写手)

star watcher

引用回帖:
Originally posted by tjyl at 2010-04-07 11:36:36:
octave用法和matlab基本一样的。

单纯功能而言,scilab要比octave好。要长得像freemat的帮助直接抄的matlab。
17楼2010-04-07 11:49:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
18楼2010-04-07 12:52:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

manin8769

金虫 (小有名气)

19楼2010-04-07 14:30:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

faith2007

银虫 (小有名气)

占个沙发
20楼2010-04-07 20:07:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 qli0218 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 生物与医药求调剂 +5 heguanhua 2026-04-05 6/300 2026-04-05 22:58 by Hdyxbekcb
[考研] 272分求调剂 +4 wangyile2233 2026-04-02 4/200 2026-04-05 22:21 by 286640313
[考研] 生物与医药调剂 +4 十七sa 2026-04-05 4/200 2026-04-05 20:05 by lys0704
[考研] 308求调剂 +4 maverick^_^ 2026-04-03 4/200 2026-04-05 19:08 by 蓝云思雨
[考研] 318求调剂 +11 ykyhsa 2026-04-05 13/650 2026-04-05 12:44 by aidndnjck
[考研] 344材料与化工调剂 +9 调剂上岸玘 2026-04-03 9/450 2026-04-04 23:10 by happyddm
[考研] 求调剂 +7 xzghyuj 2026-04-04 7/350 2026-04-04 22:25 by oooqiao
[考研] 278求调剂 +14 范婷娜 2026-04-04 15/750 2026-04-04 22:15 by lqwchd
[考研] 材料科学与工程调剂 +19 深V宿舍吧 2026-03-30 20/1000 2026-04-04 22:13 by hemengdong
[考研] 环境285分,过六级,求调剂 +10 xhr12 2026-04-02 10/500 2026-04-04 21:53 by bn53987
[考研] 0835学硕299求调剂 08大类可接受 +5 useryy 2026-04-03 5/250 2026-04-04 20:07 by 蓝云思雨
[考研] 302求调剂一志愿华中师范大学 +8 小江小江江江 2026-04-02 8/400 2026-04-04 19:50 by 蓝云思雨
[考研] 281求调剂 +10 aaawhy 2026-04-03 10/500 2026-04-03 21:42 by lbsjt
[考研] 一志愿重庆大学085404,总分314分,求调剂 +4 zf83hn 2026-04-03 4/200 2026-04-03 21:25 by 啵啵啵0119
[考研] 309求调剂 +14 呆菇不是戴夫 2026-04-02 14/700 2026-04-03 09:42 by 蓝云思雨
[考研] 一志愿大工学硕,求调剂 +4 yub0811 2026-04-02 4/200 2026-04-02 21:36 by 百灵童888
[考研] 【求调剂】新能源材料本科,一志愿211,初试321 +6 求调剂学校, 2026-04-02 6/300 2026-04-02 09:41 by 晴空210210
[考研] 材料与化工(0856)304求B区调剂 +8 邱gl 2026-03-30 16/800 2026-04-01 17:58 by 邱gl
[考研] 求调剂 +4 图鉴212 2026-03-30 5/250 2026-04-01 15:32 by 图鉴212
[考研] 085601一志愿西北工业大学初试346 +4 085601初试346 2026-03-30 4/200 2026-03-31 07:47 by jp9609
信息提示
请填处理意见