24小时热门版块排行榜    

查看: 3186  |  回复: 7

Gina88

木虫 (正式写手)

[求助] Brich-Murnaghan状态方程去拟合平衡时的晶格体积出问题!

用Brich-Murnaghan状态方程去拟合平衡时的晶格体积。用体积回代后的值怎么和真实值差那么多啊?
!announcement begin********************
implicit none
real(8),allocatable::V(
real(8),allocatable::E(
real(8),allocatable::EV(
real(8),allocatable::Ecal(
real(8)::b(4),x(4)
real(8)::a(4,4)
real(8)::sum
real(8)::E0,V0,B0,B01
real(8)::V0_2,B0_2,B01_2
integer i,j,k,n,ios
character(len=80)::nonsense
!End announcement**********************

!Begin reading data from "comment_EvsV"********
open(unit=18,file="comment_EvsV",status="old"
n=0
do
  read(18,*,iostat=ios)nonsense
  if (ios < 0) exit
  n=n+1
end do
close(18)
allocate(V(n))
allocate(E(n))
allocate(EV(n))
open(unit=18,file="comment_EvsV",status="old"
do i=1,n
  read(18,*)V(i),E(i)  
end do
close(18)
!End reading data from "comment_EvsV"**********

do i=1,4
  do j=1,4
    b(i)=0
    a(i,j)=0
  end do
end do
do i=1,n
  a(1,1)=a(1,1)+V(i)**(-4)
  a(1,2)=a(1,2)+V(i)**(-10/3)
  a(1,3)=a(1,3)+V(i)**(-8/3)
  a(1,4)=a(1,4)+V(i)**(-2)
  a(2,4)=a(2,4)+V(i)**(-4/3)
  a(3,4)=a(3,4)+V(i)**(-2/3)
  b(1)=b(1)+E(i)*(V(i)**(-2))
  b(2)=b(2)+E(i)*(V(i)**(-4/3))
  b(3)=b(3)+E(i)*(V(i)**(-2/3))
  b(4)=b(4)+E(i)
end do
a(2,1)=a(1,2)
a(2,2)=a(1,3);a(3,1)=a(1,3)
a(2,3)=a(1,4);a(3,2)=a(1,4);a(4,1)=a(1,4)
a(3,3)=a(2,4);a(4,2)=a(2,4)
a(4,3)=a(3,4)
a(4,4)=n

do k=1,3
  !if(a(k,k)=0)then
  !  print(*,'(a)')"divide by 0"
   ! exit
  !end if
  do i=k+1,4
    do j=k+1,4
      a(i,j)=a(i,j)+a(k,j)*(-a(i,k)/a(k,k))
      b(i)=b(i)+b(k)*(-a(i,k)/a(k,k))
    end do   
  end do
end do
x(4)=b(4)/a(4,4)
do i=3,1,-1
  sum=0
  do j=i+1,4
    sum=sum+a(i,j)*x(j)
  end do
  x(i)=(b(i)-sum)/a(i,i)
end do
E0=x(4)

sum=(42*x(1)*x(3)/(x(2)**2)-14)**2
sum=sum-(9*x(1)*x(3)/(x(2)**2)-3)*(196*x(1)*x(3)/(x(2)**2)-64)
B01=((42*x(1)*x(3)/(x(2)**2)-14)+sqrt(sum))/(9*x(1)*x(3)/(x(2)**2)-3)
B01_2=((42*x(1)*x(3)/(x(2)**2)-14)-sqrt(sum))/(9*x(1)*x(3)/(x(2)**2)-3)
sum=-(x(1)/x(2))*((3*B01-14)/(B01-4))
if(sum>0)then
  V0=sum**1.5
  B0=(16/9)*x(2)*V0**(-7/3)/(14-3*B01)
  sum=-(x(1)/x(2))*((3*B01_2-14)/(B01_2-4))
else if (sum>0)then
  V0_2=sum**1.5
  B0_2=(16/9)*x(2)*V0_2**(-7/3)/(14-3*B01_2)
end if


allocate(Ecal(n))
do i=1,n
  Ecal(i)=x(1)*(V(i)**(-2))+x(2)*(V(i)**(-4/3))+x(3)*(V(i)**(-2/3))+x(4)
end do
open(unit=38,file="commment",status="replace"
do i=1,n
  write(38,*)V(i),E(i),Ecal(i)
end do
write(38,*)V0,V0_2
close(38)
stop
end
回复此楼

» 本帖已获得的红花(最新10朵)

» 猜你喜欢

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

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

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖

★ ★
微尘、梦想(金币+2): 谢谢回复! 2011-05-21 19:20:53
Gina88(金币+5): 那也谢谢! 2011-05-21 22:51:40
这种问题其实没有办法回复,因为别人不可能看你给出的算法,再去核实你的程序……

我只看了一眼程序,觉得
CODE:
if(sum>0)then
  V0=sum**1.5
  B0=(16/9)*x(2)*V0**(-7/3)/(14-3*B01)
  sum=-(x(1)/x(2))*((3*B01_2-14)/(B01_2-4))
else if (sum>0)then
  V0_2=sum**1.5
  B0_2=(16/9)*x(2)*V0_2**(-7/3)/(14-3*B01_2)
end if

可能有点儿问题,因为你的两个分支的判断条件是一样的……
2楼2011-05-21 14:20:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hookah

木虫 (正式写手)

【答案】应助回帖


Gina88(金币+2): 非常谢谢您 2011-05-21 22:52:17
余泽成(金币+1): 鼓励应助! 2011-05-25 17:24:59
我于一个建议,作这个EOS的拟合,我建议你使用Origin或者MAtlab进行拟合,于EOS的方程了,不过是确定参数!
我作EOS就是用Origin进行拟合就行了!结果还可以!
3楼2011-05-21 21:03:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Gina88

木虫 (正式写手)

引用回帖:
Originally posted by snoopyzhao at 2011-05-21 14:20:19:
这种问题其实没有办法回复,因为别人不可能看你给出的算法,再去核实你的程序……

我只看了一眼程序,觉得

[code]
if(sum>0)then
  V0=sum**1.5
  B0=(16/9)*x(2)*V0**(-7/3)/(14-3*B01)
  sum=-(x( ...

是不是算法都有一定的适用范围?
我用的是高斯消元法,
是不是EOS方程模拟晶体的E-V关系时,高斯消元法压根就不适用?
4楼2011-05-21 22:54:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Gina88

木虫 (正式写手)

引用回帖:
Originally posted by snoopyzhao at 2011-05-21 14:20:19:
这种问题其实没有办法回复,因为别人不可能看你给出的算法,再去核实你的程序……

我只看了一眼程序,觉得

[code]
if(sum>0)then
  V0=sum**1.5
  B0=(16/9)*x(2)*V0**(-7/3)/(14-3*B01)
  sum=-(x( ...

我用的是附件中候柱峰的文档中EOS方程去拟合附件中的V-E关系,目的是得到平衡时的体积(能量最低时的体积)和体弹性模量。
算法是高斯消元法,最小二乘法拟合E-V数据。
谢谢大侠了
5楼2011-05-21 22:58:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)


jjdg(金币+1): 辛苦了 2011-05-22 00:11:33
引用回帖:
Originally posted by Gina88 at 2011-05-21 22:58:45:
我用的是附件中候柱峰的文档中EOS方程去拟合附件中的V-E关系,目的是得到平衡时的体积(能量最低时的体积)和体弹性模量。
算法是高斯消元法,最小二乘法拟合E-V数据。
谢谢大侠了

俺不是你们那一行的,看不懂那个方程,实在抱歉……
6楼2011-05-21 23:03:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Gina88

木虫 (正式写手)

program Brich_Murnaghan

!announcement begin********************
implicit none
real(8),allocatable::V(
real(8),allocatable::E(
real(8),allocatable::EV(
real(8)::b(4),x(4)
real(8)::a(4,4)
real(8)::sum
real(8)::E0,V0,B0,B0P
real(8)::V0_2,B0_2,B0P_2
integer i,j,k,n,ios
character(len=80)::nonsense
real(8),allocatable::Ecal(
!End announcement**********************

!Begin reading data from "comment_EvsV"********
open(unit=18,file="comment_EvsV",status="old"
n=0
do
  read(18,*,iostat=ios)nonsense
  if (ios < 0) exit
  n=n+1
end do
close(18)
allocate(V(n))
allocate(E(n))
allocate(EV(n))
open(unit=18,file="comment_EvsV",status="old"
do i=1,n
  read(18,*)V(i),E(i)  
end do
close(18)
!End reading data from "comment_EvsV"**********

do i=1,n
  b(i)=0;a(i,j)=0
end do
do i=1,n
  a(2,1)=a(2,1)+V(i)**(-2/3)
  a(3,1)=a(3,1)+V(i)**(-4/3)
  a(4,1)=a(4,1)+V(i)**(-2)
  a(4,2)=a(4,2)+V(i)**(-8/3)
  a(4,3)=a(4,3)+V(i)**(-10/3)
  a(4,4)=a(4,4)+V(i)**(-4)  
  b(1)=b(1)+E(i)
  b(2)=b(2)+E(i)*(V(i)**(-2/3))
  b(3)=b(3)+E(i)*(V(i)**(-4/3))
  b(4)=b(4)+E(i)*(V(i)**(-2))  
end do
a(1,1)=n
a(1,2)=a(2,1)
a(1,3)=a(3,1);a(2,2)=a(3,1)
a(1,4)=a(4,1);a(2,3)=a(4,1);a(3,2)=a(4,1)
a(2,4)=a(4,2);a(3,3)=a(4,2)
a(3,4)=a(4,3)

do k=1,3   
  do i=k+1,4
    do j=k+1,4
      a(i,j)=a(i,j)+a(k,j)*(-a(i,k)/a(k,k))
      b(i)=b(i)+b(k)*(-a(i,k)/a(k,k))
    end do   
  end do
end do
x(4)=b(4)/a(4,4)
do i=3,1,-1
  sum=0
  do j=i+1,4
    sum=sum+a(i,j)*x(j)
  end do
  x(i)=(b(i)-sum)/a(i,i)
end do
E0=x(1)

sum=(42*x(4)*x(2)/(x(3)**2)-14)**2
sum=sum-(9*x(4)*x(2)/(x(3)**2)-3)*(196*x(4)*x(2)/(x(3)**2)-64)
B0P=((42*x(4)*x(2)/(x(3)**2)-14)+sqrt(sum))/(9*x(4)*x(2)/(x(3)**2)-3)
B0P_2=((42*x(4)*x(2)/(x(3)**2)-14)-sqrt(sum))/(9*x(4)*x(2)/(x(3)**2)-3)
sum=-(x(4)/x(3))*((3*B0P-14)/(B0P-4))
if(sum>0)then
  V0=sum**1.5
  B0=(16/9)*x(3)*(V0**(-7/3))/(14-3*B0P)
end if
sum=-(x(4)/x(3))*((3*B0P_2-14)/(B0P_2-4))
if (sum>0)then
  V0_2=sum**1.5
  B0_2=(16/9)*x(3)*(V0_2**(-7/3))/(14-3*B0P_2)
end if


allocate(Ecal(n))
do i=1,n
  Ecal(i)=x(4)*(V(i)**(-2))+x(3)*(V(i)**(-4/3))+x(2)*(V(i)**(-2/3))+x(1)
end do
open(unit=38,file="comment",status="replace"
do i=1,n
  write(38,*)V(i),E(i),Ecal(i)
end do
write(38,*)V0,V0_2
close(38)
stop
end
7楼2011-05-25 16:50:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
送红花一朵
8楼2020-11-19 16:07:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 Gina88 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 系统查不到 +11 董八千 2026-08-26 11/550 2026-08-28 18:06 by Leogzhya
[基金申请] 投票:  有多少人是今天查系统知道结果的? +16 爱看书的可乐 2026-08-26 18/900 2026-08-28 17:09 by winsaint
[基金申请] 麻烦专家们看看评委们的意见(F口面上) +4 gdd2018 2026-08-28 9/450 2026-08-28 14:22 by jklily
[基金申请] 2026年叶企孙基金 +3 bud_bud 2026-08-27 6/300 2026-08-28 11:53 by bud_bud
[基金申请] 基金系统什么内容也没有 30+4 winsaint 2026-08-27 9/450 2026-08-28 11:06 by maolC
[基金申请] 怎么查啊 +6 huang1991js 2026-08-26 6/300 2026-08-28 08:42 by winsaint
[基金申请] 哪位高人中了,把查询到的截图贴出来让我看看,让我长长见识 +5 yuleib84 2026-08-26 6/300 2026-08-28 00:02 by yudaoqian88
[基金申请] 申请删除本帖 +6 lyz123lyz 2026-08-27 7/350 2026-08-27 17:31 by 宁静致远sy
[基金申请] 看板上这么多中的,有点像50人群里49个人都是骗子的那种感觉…… +5 a089 2026-08-26 6/300 2026-08-27 14:05 by jonewore
[文学芳草园] 梦想 +3 myrtle 2026-08-26 3/150 2026-08-27 10:01 by angelyueyi
[基金申请] 2026年8月25日国自然放榜前突然收到列入评审专家邮件,有关系吗? +25 木水思豆 2026-08-25 28/1400 2026-08-26 14:53 by draco1987
[基金申请] 能否退出参与的面上项目解除限项 +23 koalala 2026-08-24 26/1300 2026-08-26 14:29 by 宝贝虫子
[基金申请] 出来了 +9 trojank 2026-08-26 9/450 2026-08-26 14:25 by 宝贝虫子
[基金申请] 为什么国自然不能直接公布 +4 bjdxyxy 2026-08-26 4/200 2026-08-26 13:12 by qingmu1201
[基金申请] 国合里面能看到了 +7 一怀馨秋 2026-08-26 7/350 2026-08-26 11:23 by zhaosm1982
[基金申请] 项目信息和经费信息在系统里都可以看到了 +6 wittyboy 2026-08-26 14/700 2026-08-26 10:55 by wittyboy
[基金申请] 今天务委会开完了,明天出结果吗 +19 angus9576 2026-08-25 23/1150 2026-08-26 10:03 by zp519
[基金申请] 牛来!米来!面来! +8 beefly 2026-08-26 8/400 2026-08-26 08:37 by xuzhipiao
[基金申请] 明天应该可查了!? +6 chengyan1220 2026-08-23 6/300 2026-08-25 19:45 by zfd97
[基金申请] 没有任何消息-是不是就凉了 +9 图啦图啦 2026-08-24 10/500 2026-08-25 11:59 by 南海小哥
信息提示
请填处理意见