24小时热门版块排行榜    

CyRhmU.jpeg
查看: 539  |  回复: 3
当前主题已经存档。

阳光不锈7717

[交流] 【求助】一个计算库伦相互作用能的fortran程序的并行化(2)

c-------------------------------------------------
c       end if

c       if(myid==2)then

c*** calculate the energy of bond bond interaction
c----------------------------------------------      



      do in=natom+1,natombond         
         xic = x(in)
         yic = y(in)
         zic = z(in)
         xi = x(in) - xic
         yi = y(in) - yic
         zi = z(in) - zic
                   c2scale= 0.0d0  
          c4scale= 0.57d0
            c3scale=0.0d0            
         do j = natom+1, na
            cscale(j) = 0.57d0
         end do
         do j = 1, nbond12(in)
            cscale(bond12(j,in)) = c2scale
         end do       
          do j = 1, nbdatom12(in)
             cscale(bdatom12(j,in)) = c2scale
        if(atomlp(1,bdatom12(j,in)).ne.0)then
         cscale(atomlp(1,bdatom12(j,in)))
     &=c2scale
        endif
      if(atomlp(2,bdatom12(j,in)).ne.0) then
         cscale(atomlp(2,bdatom12(j,in)))
     &=c2scale
       endif
        if(atompie(1,bdatom12(j,in)).ne.0)
     &  cscale(atompie(1,bdatom12(j,in)))=c2scale     
      if(atompie(2,bdatom12(j,in)).ne.0)
     &  cscale(atompie(2,bdatom12(j,in)))=c2scale
          end do
          do j = 1, nbdatom13(in)       
             cscale(bdatom13(j,in)) = c3scale
        if(atomlp(1,bdatom13(j,in)).ne.0) then
         cscale(atomlp(1,bdatom13(j,in)))
     &=c3scale
         endif
      if(atomlp(2,bdatom13(j,in)).ne.0)then
         cscale(atomlp(2,bdatom13(j,in)))
     &=c3scale
       endif
        if(atompie(1,bdatom13(j,in)).ne.0)
     &  cscale(atompie(1,bdatom13(j,in)))=c3scale     
      if(atompie(2,bdatom13(j,in)).ne.0)
     &  cscale(atompie(2,bdatom13(j,in)))=c3scale
          end do                       
         do j = 1, nbond13(in)
            cscale(bond13(j,in)) = c3scale
         end do
            fi = f * pchg(in)  

           do kk = in+1, naTOMBOND+NLP
               xc = xic - x(kk)
               yc = yic - y(kk)
               zc = zic - z(kk)
               if (use_image)  call image (xc,yc,zc,0)
               rc2 = xc*xc + yc*yc + zc*zc               
                  xr = xc + xi - x(kk) + x(kk)
                  yr = yc + yi - y(kk) + y(kk)
                  zr = zc + zi - z(kk) + z(kk)
                  r2 = xr*xr + yr*yr + zr*zr
                  r = sqrt(r2)
                  fik = fi * pchg(kk) * cscale(kk)
c        WRITE(*,*) AM(IN),AM(KK),CSCALE(KK),R

        if ((molcule(in).eq.obj.and.molcule(kk).ne.obj).or.
     &(molcule(in).ne.obj.and.molcule(kk).eq.obj))then
                  fik =  fik*lamp2
        endif
                  e = fik / r
          if(kk.le.natombond)then
         if (molcule(bdatom12(1,in)) .ne. molcule(bdatom12(1,kk))) then
                 einter = einter + e
         end if
          else
         if (molcule(bdatom12(1,in)) .ne. molcule(lpatom(kk))) then
                 einter = einter + e
         end if
          endif       
        if ((molcule(in).eq.obj.and.molcule(kk).ne.obj).or.
     &(molcule(in).ne.obj.and.molcule(kk).eq.obj))then
                 eintero = eintero + e
         end if
        if ((molcule(in).eq.obj.and.molcule(kk).eq.obj))then
                 eintrao = eintrao + e
         end if
           if(abs(e).gt.800)then
           write(*,*) ii,kk,molcule(II),molcule(kk)
           endif                 
c         write(11,*) 'bond-bond',e                                                                        
c-------------------------------------
          end do






           do kk = NATOMBOND+NLP+1, na
               xc = xic - x(kk)
               yc = yic - y(kk)
               zc = zic - z(kk)
               if (use_image)  call image (xc,yc,zc,0)
               rc2 = xc*xc + yc*yc + zc*zc               
                  xr = xc + xi - x(kk) + x(kk)
                  yr = yc + yi - y(kk) + y(kk)
                  zr = zc + zi - z(kk) + z(kk)
                  r2 = xr*xr + yr*yr + zr*zr
                  r = sqrt(r2)
                  fik = fi * pchg(kk) * cscale(kk)
        if ((molcule(in).eq.obj.and.molcule(kk).ne.obj).or.
     &(molcule(in).ne.obj.and.molcule(kk).eq.obj))then
                  fik =  fik*lamp2
        endif
                  e = fik / r

         if (molcule(bdatom12(1,in)) .ne. molcule(PIEatom(kk))) then
                 einter = einter + e   
          endif       
        if ((molcule(in).eq.obj.and.molcule(kk).ne.obj).or.
     &(molcule(in).ne.obj.and.molcule(kk).eq.obj))then
                 eintero = eintero + e
         end if
        if ((molcule(in).eq.obj.and.molcule(kk).eq.obj))then
                 eintrao = eintrao + e
         end if
           if(abs(e).gt.800)then
           write(*,*) ii,kk,molcule(II),molcule(kk)
           endif                          
c            write(11,*) 'b-lp,pi',e                                                
                  ec1 = ec1 + e                    
         end do

      end do
c-----------------------------------------------------
      end if
      if(myid==3)then
c------------------------------------------------------

c         write(12,*) 'bond',ec1  
c*** calculate the energy of lp lpPIE interaction

      do in=natombond+1,natombond+nlp         
         xic = x(in)
         yic = y(in)
         zic = z(in)
         xi = x(in) - xic
         yi = y(in) - yic
         zi = z(in) - zic
                   c2scale= 0.0d0  
          c4scale= 0.57d0
            c3scale=0.0d0            
         do j = natomBOND+1, na
            cscale(j) = 0.57d0
         end do
         pi=lpatom(in)
          do j=1,2       
           if(atomlp(j,pi).ne.in.AND.NATOMLP(PI).NE.1)
     &cscale(atomlp(j,pi))=0.0d0
        enddo
           DO J=1,NATOMPIE(PI)
           CSCALE(ATOMPIE(J,PI))=0.0D0
         ENDDO

         do j=1,n12(pi)
        DO K=1,NATOMLP(I12(J,PI))
        cscale(atomlp(K,i12(j,pi)))=c2scale
        ENDDO
        DO K=1,NATOMPIE(I12(J,PI))
        cscale(atompie(K,i12(j,pi)))=c2scale
        ENDDO
           enddo

         do j=1,n13(pi)
        DO K=1,NATOMLP(I13(J,PI))
        cscale(atomlp(K,i13(j,pi)))=c3scale
      ENDDO
        DO K=1,NATOMPIE(I13(J,PI))
        cscale(atompie(K,i13(j,pi)))=c3scale
        ENDDO
           enddo

            fi = f * pchg(in)  
           do kk = in+1, naTOMBOND+NLP
               xc = xic - x(kk)
               yc = yic - y(kk)
               zc = zic - z(kk)
               if (use_image)  call image (xc,yc,zc,0)
               rc2 = xc*xc + yc*yc + zc*zc               
                  xr = xc + xi - x(kk) + x(kk)
                  yr = yc + yi - y(kk) + y(kk)
                  zr = zc + zi - z(kk) + z(kk)
                  r2 = xr*xr + yr*yr + zr*zr
                  r = sqrt(r2)
                  fik = fi * pchg(kk) * cscale(kk)
        if ((molcule(in).eq.obj.and.molcule(kk).ne.obj).or.
     &(molcule(in).ne.obj.and.molcule(kk).eq.obj))then
                  fik =  fik*lamp2
        endif
                  e = fik / r
         if (molcule(lpatom(in)) .ne. molcule(lpatom(kk))) then
                 einter = einter + e
         end if
        if ((molcule(in).eq.obj.and.molcule(kk).ne.obj).or.
     &(molcule(in).ne.obj.and.molcule(kk).eq.obj))then
                 eintero = eintero + e
         end if
        if ((molcule(in).eq.obj.and.molcule(kk).eq.obj))then
                 eintrao = eintrao + e
         end if
           if(abs(e).gt.800)then
           write(*,*) ii,kk,molcule(II),molcule(kk)
           endif                                  
c         write(11,*) 'lp-lp',e                                                                                                                  
                  ec1 = ec1 + e                    
         end do

           do kk = naTOMBOND+NLP+1,NA
               xc = xic - x(kk)
               yc = yic - y(kk)
               zc = zic - z(kk)
               if (use_image)  call image (xc,yc,zc,0)
               rc2 = xc*xc + yc*yc + zc*zc               
                  xr = xc + xi - x(kk) + x(kk)
                  yr = yc + yi - y(kk) + y(kk)
                  zr = zc + zi - z(kk) + z(kk)
                  r2 = xr*xr + yr*yr + zr*zr
                  r = sqrt(r2)
                  fik = fi * pchg(kk) * cscale(kk)

        if ((molcule(in).eq.obj.and.molcule(kk).ne.obj).or.
     &(molcule(in).ne.obj.and.molcule(kk).eq.obj))then
                  fik =  fik*lamp2
        endif
                  e = fik / r
         if (molcule(lpatom(in)) .ne. molcule(PIEatom(kk))) then
                 einter = einter + e
         end if
        if ((molcule(in).eq.obj.and.molcule(kk).ne.obj).or.
     &(molcule(in).ne.obj.and.molcule(kk).eq.obj))then
                 eintero = eintero + e
         end if
        if ((molcule(in).eq.obj.and.molcule(kk).eq.obj))then
                 eintrao = eintrao + e
         end if
           if(abs(e).gt.800)then
           write(*,*) ii,kk,molcule(II),molcule(kk)
           endif       
c          write(11,*) 'lp-pie',e                                                                                                                                     
                  ec1 = ec1 + e                    
         end do

      end do
c--------------------------------------------------------
c         end if
c         if(myid==4)then
c--------------------------------------------------------

c         write(12,*) 'lp',ec1  
      do in=natombond+nlp+1,na-1         
         xic = x(in)
         yic = y(in)
         zic = z(in)
         xi = x(in) - xic
         yi = y(in) - yic
         zi = z(in) - zic
                   c2scale= 0.0d0  
          c4scale= 0.57d0
            c3scale=0.0d0            
         do j = natom+1, na
            cscale(j) = 0.57d0
         end do
         pi=pieatom(in)
        do j=1,2
           if(atompie(j,pi).ne.iN)cscale(atompie(j,pi))=0.0d0
        enddo
         do j=1,n12(pi)
        DO K=1,NATOMPIE(I12(J,PI))
        cscale(atompie(K,i12(j,pi)))=c2scale
      ENDDO
           enddo
         do j=1,n13(pi)
        DO K=1,NATOMPIE(I13(J,PI))                  
        cscale(atompie(K,i13(j,pi)))=c3scale
      ENDDO
           enddo
            fi = f * pchg(in)  
           do kk = in+1, na
               xc = xic - x(kk)
               yc = yic - y(kk)
               zc = zic - z(kk)
               if (use_image)  call image (xc,yc,zc,0)
               rc2 = xc*xc + yc*yc + zc*zc               
                  xr = xc + xi - x(kk) + x(kk)
                  yr = yc + yi - y(kk) + y(kk)
                  zr = zc + zi - z(kk) + z(kk)
                  r2 = xr*xr + yr*yr + zr*zr
                  r = sqrt(r2)
                  fik = fi * pchg(kk) * cscale(kk)

        if ((molcule(in).eq.obj.and.molcule(kk).ne.obj).or.
     &(molcule(in).ne.obj.and.molcule(kk).eq.obj))then
                  fik =  fik*lamp2
        endif
                  e = fik / r
         if (molcule(PIEatom(in)) .ne. molcule(PIEatom(kk))) then
                 einter = einter + e
         end if
        if ((molcule(in).eq.obj.and.molcule(kk).ne.obj).or.
     &(molcule(in).ne.obj.and.molcule(kk).eq.obj))then
                 eintero = eintero + e
         end if
        if ((molcule(in).eq.obj.and.molcule(kk).eq.obj))then
                 eintrao = eintrao + e
         end if
           if(abs(e).gt.800)then
           write(*,*) ii,kk,molcule(II),molcule(kk)
           endif               
c                    write(11,*) 'pie-pie',e                                                                                                                                                
                  ec1 = ec1 + e   
         end do
      end do
c         write(12,*) 'pie',ec1   
c----------------------------------------
       endif
c 以下为计算力的程序不需要并行(由于字数要求已省略)
c---------------------------------------
       ecry=ecry+ec1
        if (.not. use_replica)  goto 111   
c*****calculate the interaction with other cells with abeem charges explictly dielec
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

czhui11


sunxiao(金币+1,VIP+0):谢谢参与,欢迎常来仿真编程版 5-19 02:14
你怎么发这么长啊,谁有那么长时间去看啊
2楼2009-05-18 20:44:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

★ ★
sunxiao(金币+2,VIP+0):谢谢参与,欢迎常来仿真编程版 5-19 02:14
不仅长,而且没有注释,再有,也不能编译执行,呵呵……
3楼2009-05-18 22:48:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mickk

铁杆木虫 (职业作家)


gwdavid(金币+1,VIP+0):欢迎常来 5-31 19:49
不仅长,而且好像不完整,没法调试呀
4楼2009-05-30 23:09:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 阳光不锈7717 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见