24小时热门版块排行榜    

查看: 2437  |  回复: 10

herarysara

木虫 (小有名气)

[求助] lammps计算结果xyz文件中每个数字代表的字符长短。

lammps计算结果xyz文件,想提出文件中的数据,用c++的文件指针,可是不知道每个数据的字符长短,应该怎么确定,求赐教!
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jiaoyixiong

荣誉版主 (职业作家)

【答案】应助回帖

★ ★
感谢参与,应助指数 +1
zh1987hs: 金币+2, 谢谢 2012-12-05 08:13:34
1、lammps是开源软件,你为什么不去看看源程序呢?

2、你为什么不试试用lammps输出那么一小段xyz格式的结果,查看一下呢?
2楼2012-12-04 22:12:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

herarysara

木虫 (小有名气)

引用回帖:
2楼: Originally posted by jiaoyixiong at 2012-12-04 22:12:40
1、lammps是开源软件,你为什么不去看看源程序呢?

2、你为什么不试试用lammps输出那么一小段xyz格式的结果,查看一下呢?

谢谢你的回复,其实我就是想知道他的输出文件每一行所占的字符数,单纯从文件上看到的字节数是不一样的。
3楼2012-12-05 09:49:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

herarysara

木虫 (小有名气)

既是从xyz文件中,用fgets命令取走每个坐标如fgets(str,20,from)中间的20指每个坐标的字符长度,我想知道的就是这个数字应该怎么确定。xyz文件每行对应多少个字符。
4楼2012-12-05 11:47:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jiangtao9571

新虫 (正式写手)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
herarysara: 金币+5 2012-12-06 17:07:58
zh1987hs: 金币+3, 谢谢 2012-12-09 14:59:30
我试了一下得到的xyz中数据的格式如下:
ITEM: TIMESTEP
0
ITEM: NUMBER OF ATOMS
10000
ITEM: BOX BOUNDS
0 22.66
0 22.66
0 22.66
ITEM: ATOMS id type xs ys zs
5943 1 0.0583092 0.053962 0.061988
412 1 0.0225291 0.0612129 0.058574
2582 1 0.0497735 0.0260711 0.0323743

这些都是数据,不要把它当成字符啊,这样不存在长短了啊,只要输出用浮点型,保证几位小数就行,我写的小程序供你参考:
struct bankdata
{                                                                        
        int num1;                                                                                                                       
        int num2;                                                       
        double x;
        double y;
        double z;
}data[200000],datastation;

struct boxsize_infomation
{

        double a;
        double b;
}boxsize[3];

void readdata()               
{
        int i=0;
        char line[80];
        printf("Reading atoms.xyz.........\n";
        fgets(line,80,fp1);
        fgets(line,80,fp1); sscanf(line,"%d\n",×tep);
        fgets(line,80,fp1);
        fgets(line,80,fp1); sscanf(line,"%d\n",&atom_tol);
        fgets(line,80,fp1);
        fgets(line,80,fp1); sscanf(line,"%lf %lf\n",&boxsize[0].a,&boxsize[0].b);
        fgets(line,80,fp1); sscanf(line,"%lf %lf\n",&boxsize[1].a,&boxsize[1].b);
        fgets(line,80,fp1); sscanf(line,"%lf %lf\n",&boxsize[2].a,&boxsize[2].b);
        fgets(line,80,fp1);

        printf("step=%d,timestep=%d\n",step,timestep);

        while(i         {
                fgets(line,80,fp1);
                sscanf(line,"%d %d %lf %lf %lf\n",&datastation.num1,&datastation.num2,&datastation.x,&datastation.y,&datastation.z);

                data.num1=datastation.num1;
                data.num2=datastation.num2;
                data.x=datastation.x;
                data.y=datastation.y;
                data.z=datastation.z;
                i++;
        }
}

void writefile()                        
{
                fprintf(fp,"ITEM: TIMESTEP\n";
                fprintf(fp,"%d\n",timestep);
                fprintf(fp,"ITEM: NUMBER OF ATOMS\n";
                fprintf(fp,"%d\n",atom_tol);
                fprintf(fp,"ITEM: BOX BOUNDS\n";
                fprintf(fp,"%g %g\n",boxsize[0].a,boxsize[0].b);
                fprintf(fp,"%g %g\n",boxsize[1].a,boxsize[1].b);
                fprintf(fp,"%g %g\n",boxsize[2].a,boxsize[2].b);
                fprintf(fp,"ITEM: ATOMS id type xs ys zs\n";
               
                for (i=0; i                 {
                        fprintf(fp,"%d %d %lf %lf %lf \n",data.num1,data.num2,data.x,data.y,data.z);
                }
}

这个很详细了哦,仔细看看哦,估计你能看懂,如果不行的话要去补习C++了。
5楼2012-12-06 16:38:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

herarysara

木虫 (小有名气)

确实没咋看懂,我是用文件指针形式逐个读取xyz文件中的数据,因为涉及到轨迹文件几十万帧,感觉这样实现不了。不过还是非常感谢你的回复。
6楼2012-12-06 17:07:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jiangtao9571

新虫 (正式写手)

★ ★
zh1987hs: 金币+2, 谢谢 2012-12-09 14:59:46
引用回帖:
6楼: Originally posted by herarysara at 2012-12-06 17:07:34
确实没咋看懂,我是用文件指针形式逐个读取xyz文件中的数据,因为涉及到轨迹文件几十万帧,感觉这样实现不了。不过还是非常感谢你的回复。

你看不出来我也是用文件指针形式逐个读取xyz文件中的数据吗???  涉及几十万帧  加一个循环即可:
如下:step = timestep/10000;
        step=0;
        while(step<20)
        {
        readdata();
        mol=atom_tol/atom_per;
        writefile();
        }
7楼2012-12-07 09:56:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

herarysara

木虫 (小有名气)

引用回帖:
7楼: Originally posted by jiangtao9571 at 2012-12-07 09:56:01
你看不出来我也是用文件指针形式逐个读取xyz文件中的数据吗???  涉及几十万帧  加一个循环即可:
如下:step = timestep/10000;
        step=0;
        while(step<20)
        {
        readdata();
        mol=atom_tol/ato ...

你上面的程序,是有指定选取80个字符吗?如果是,我就是想知道读取这个字符长度该怎样确定。
8楼2012-12-07 16:54:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jiaoyixiong

荣誉版主 (职业作家)

【答案】应助回帖

★ ★
zh1987hs: 金币+2, 谢谢 2012-12-09 15:00:01
不知道你的问题解决了没?
xyz文件内,主要就是存储的是原子的坐标信息吧?
如果把xyz轨迹文件导入到VMD,使用命令:
set sel [atomselect top "the atoms you need"]
$sel get {x y z}
就可以读取出你所需要的原子的坐标了
如果只需x坐标,就写成 $sel get {x }
即可
这比自己写那么长的程序简单多了,楼主不妨试试
9楼2012-12-08 10:25:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

herarysara

木虫 (小有名气)

引用回帖:
9楼: Originally posted by jiaoyixiong at 2012-12-08 10:25:32
不知道你的问题解决了没?
xyz文件内,主要就是存储的是原子的坐标信息吧?
如果把xyz轨迹文件导入到VMD,使用命令:
set sel
$sel get {x y z}
就可以读取出你所需要的原子的坐标了
如果只需x坐标,就写成  ...

谢谢你的回复,我不是要单纯得到某个原子的坐标数字,我是想以字符串的的形式读取。
10楼2012-12-09 10:56:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 herarysara 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 科研孤儿太难了 +14 我4大白菜 2026-08-20 15/750 2026-08-20 22:33 by 袁向阳007
[基金申请] 让我中一个面上吧! +8 大萍1987 2026-08-20 10/500 2026-08-20 21:48 by 大萍1987
[基金申请] 言之凿凿,明天官网会通知放榜? +15 医学老男孩 2026-08-20 17/850 2026-08-20 20:35 by CaoLG
[基金申请] 时间戳变了,能看出什么问题? +18 基诺咪客 2026-08-17 23/1150 2026-08-20 17:19 by Godzela
[基金申请] 只有每年这种时候来逛逛小木虫 +21 yaoyewhu2008 2026-08-20 22/1100 2026-08-20 17:03 by yaoyewhu2008
[基金申请] 放榜前的不淡定 40+3 snowwithsea 2026-08-19 12/600 2026-08-20 15:56 by lfy8008
[基金申请] 今天基金会出结果吗?20260819 +14 kkkl_v 2026-08-19 15/750 2026-08-20 08:21 by sunzitan
[基金申请] filecode,4个jtjc了 +11 ziyangfang 2026-08-19 13/650 2026-08-19 21:28 by aasahr
[教师之家] 为什么余额宝的年化利率越来越低?主要原因有哪些? +5 瞬息宇宙 2026-08-15 5/250 2026-08-19 20:23 by super2002521
[基金申请] 今天放榜没戏了吧 +4 yuleib84 2026-08-19 5/250 2026-08-19 19:52 by hhs666
[基金申请] 今天放榜吗? +14 布布和一二 2026-08-19 15/750 2026-08-19 18:07 by gltch
[基金申请] filecode=后面第一个是大写字母 +10 wangze12014 2026-08-14 12/600 2026-08-19 16:56 by 苦难博士
[基金申请] 2027广东省杰青 +4 奶牛小黑 2026-08-15 10/500 2026-08-19 11:02 by wanfengnew
[基金申请] 快农历七夕节了,轻松一下,男人悄悄话,女施主请不要进来。 +6 Tide man 2026-08-14 7/350 2026-08-19 09:56 by ZJTJZ
[基金申请] 时间戳又变了8-15 +14 archvillain 2026-08-15 26/1300 2026-08-18 13:37 by phantomgost
[基金申请] 今天维护系统维护 祝所有人 高中 +8 gjjjzhong 2026-08-18 9/450 2026-08-18 13:01 by 家与远方
[基金申请] 93BebMhtakh前后11位开头都是大写 +4 且听虎啸 2026-08-17 5/250 2026-08-18 00:49 by 蔡棒棒菂
[基金申请] 感觉是下周放榜了 +6 angus9576 2026-08-17 11/550 2026-08-17 23:57 by angus9576
[精细化工] 招聘 金属平磨液,抛光液研发工程师 +3 小天0311 2026-08-14 3/150 2026-08-16 07:31 by H9PLUS
[基金申请] 各位道友,我要去昆明玩几天,回来见。 +7 Tide man 2026-08-14 8/400 2026-08-15 01:11 by arzu_hma
信息提示
请填处理意见