24小时热门版块排行榜    

查看: 2285  |  回复: 7

zyj8119

木虫 (著名写手)

[交流] 【转帖】径向分布函数程序与简单说明 已有4人参与

径向分布函数g(r)代表了球壳内的平均数密度

为离中心分子距离为r,体积为 的球壳内的瞬时分子数。
具体参见李如生,《平衡和非平衡统计力学》科学出版社:1995
CODE:
SUBROUTINE GR(NSWITCH)
      IMPLICIT DOUBLE PRECISION(A-H,O-Z)
      PARAMETER(NM=40000,PI=3.141592653589793D0,NHIS=100)
      COMMON/LCS/X0(3,-2:2*NM),X(3,-2:2*NM,5),XIN(3,-2:2*NM),
     $XX0(3,-2:2*NM),XX(3,-2:2*NM,5),XXIN(3,-2:2*NM)
      COMMON/MOLEC/LPBC(3),MOLSP,MOLSA,NBX,NBY,NBZ,NPLA,LPBCSM,NC,NN,MC
      COMMON/WALLS/HI(3,3),G(3,3),DH,AREA,VOLUME,SCM(3)
      COMMON/PBCS/HALF,PBCX,PBCY,PBCZ
        COMMON/GR_VAR/ NGR
        DIMENSION H(3,3),GG(0:NHIS),R(0:NHIS)
      EQUIVALENCE(X0(1,-2),H(1,1))
C   *****************************************************************
C      如何确定分子数密度:DEN_IDEAL
C      取分子总数作为模拟盒中的数密度,可保证采样分子总数=总分子数?
C====================================================================
C         N1=MOLSP+1
C      N2=MOLSP+NC

      DEN_IDEAL=MOLSP  

        G11=G(1,1)
      G22=G(2,2)
      G33=G(3,3)
      G12D=G(1,2)+G(2,1)
      G13D=G(1,3)+G(3,1)
      G23D=G(2,3)+G(3,2)


      IF(NSWITCH.EQ.0)THEN
          NGR=0
          DELR=HALF/NHIS
          DO I=1,NHIS
           GG(I)=0.D0
           R(I)=0.D0
          ENDDO

      ELSE IF(NSWITCH.EQ.1)THEN
         NGR=NGR+1
       DO I=1,MOLSP-1
         DO J=I+1,MOLSP
C====================================================================
C     USE PBC IN X DIRECTION:  SUITABLE FOR PBCX=1
C                              NOT GREAT PROBLEM FOR PBCX=0
C                              (THIS TIME USUALLY |DELTA X| < HALF)
C====================================================================
          XIJ=X0(1,I)-X0(1,J)
        IF(XIJ.GT.+HALF)XIJ=XIJ-PBCX
        IF(XIJ.LT.-HALF)XIJ=XIJ+PBCX
        YIJ=X0(2,I)-X0(2,J)
        IF(YIJ.GT.+HALF)YIJ=YIJ-PBCY
        IF(YIJ.LT.-HALF)YIJ=YIJ+PBCY
        ZIJ=X0(3,I)-X0(3,J)
        IF(ZIJ.GT.+HALF)ZIJ=ZIJ-PBCZ
        IF(ZIJ.LT.-HALF)ZIJ=ZIJ+PBCZ
        RSQ=XIJ*(G11*XIJ+G12D*YIJ+G13D*ZIJ)+
     $      YIJ*(G22*YIJ+G23D*ZIJ)+G33*ZIJ*ZIJ
          RRR=SQRT(RSQ)
          RRR=RRR/H(1,1)
C====================================================================
C      以上用数组G和H的结果与下同
C      RRR=SQRT(XIJ**2+YIJ**2+ZIJ**2)
C      G11=H(1,1)**2
C====================================================================
          IF(RRR.LT.HALF)THEN
           IG=INT(RRR/DELR)
           GG(IG)=GG(IG)+2
          ENDIF
       ENDDO
         ENDDO

      ELSE IF(NSWITCH.EQ.2)THEN
        DO I=1,NHIS
           R(I)=DELR*(I+0.5D0)
        ENDDO
        DO I=1,NHIS
           VB=(4.D0/3.D0)*PI*(((I+1)**3-I**3)*(DELR**3))
           GNID=VB*DEN_IDEAL
           GG(I)=GG(I)/(NGR*MOLSP*GNID)
        ENDDO
        OPEN(UNIT=31,FILE="GR.DAT")
        DO I=1,NHIS
           WRITE(31,*)R(I),GG(I)
        ENDDO
        CLOSE(31)

        ENDIF

        RETURN
        END

回复此楼
好好学习,天天向上。
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zyj8119

木虫 (著名写手)

引用回帖:
Originally posted by zyj8119 at 2010-09-13 19:42:08:
径向分布函数g(r)代表了球壳内的平均数密度

为离中心分子距离为r,体积为 的球壳内的瞬时分子数。
具体参见李如生,《平衡和非平衡统计力学》科 ...

MC中需要求RDF吗?
好好学习,天天向上。
2楼2010-09-13 19:51:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yahoohoo

铁杆木虫 (著名写手)

★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
lei0736(金币+3):谢谢 2010-09-13 20:50:00
这样的代码看着不够明了。。。。。。

伪代码:

for (int i = 0; i < TOTN - 1; ++i)
  for (int j = i + 1; j < TOTN; ++j) {
    double dij = sqrt( pow(Pos[0]-Pos[j][0], 2) + pow(Pos[1]-Pos[j][1], 2) + pow(Pos[2]-Pos[j][2], 2));
    int kbin = func(dij); // dij所对应的bin的序号
    g(kbin) += 2;
  }
  // normalize
  for (int k = 0; k < NBIN; ++k)
    g(k) /= 4.0 * PI * r(k) * r(k) * dr * RHO; // r 为第k个bin所对应的距离值
3楼2010-09-13 20:39:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zyj8119

木虫 (著名写手)

引用回帖:
Originally posted by yahoohoo at 2010-09-13 20:39:36:
这样的代码看着不够明了。。。。。。

伪代码:

for (int i = 0; i < TOTN - 1; ++i)
  for (int j = i + 1; j < TOTN; ++j) {
    double dij = sqrt( pow(Pos[0]-Pos[j][0], 2) + pow(Pos[1 ...

这个是C语言的吧?
好好学习,天天向上。
4楼2010-09-13 21:21:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ghcacj

荣誉版主 (著名写手)

阿超

优秀版主

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
zh1987hs(金币+2):谢谢 2010-09-14 08:40:12
引用回帖:
Originally posted by zyj8119 at 2010-09-13 21:21:47:

这个是C语言的吧?

是伪码吧
5楼2010-09-13 21:38:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zyj8119

木虫 (著名写手)

引用回帖:
Originally posted by ghcacj at 2010-09-13 21:38:22:

是伪码吧

的确是伪码。
好好学习,天天向上。
6楼2010-09-14 07:56:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wangqingbo

铜虫 (小有名气)


小木虫(金币+0.5):给个红包,谢谢回帖交流
可以用来直接计算吗 对于输入的参数是 什么要求
7楼2010-09-16 18:41:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yahoohoo

铁杆木虫 (著名写手)


ghcacj(金币+1):谢谢 2010-09-17 10:01:27
引用回帖:
Originally posted by wangqingbo at 2010-09-16 18:41:17:
可以用来直接计算吗 对于输入的参数是 什么要求

别人的代码拿过来就用,你怎么判断结果对还是不对呢?
8楼2010-09-16 21:53:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 zyj8119 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见