24小时热门版块排行榜    

查看: 1588  |  回复: 6
【奖励】 本帖被评价6次,作者xk6891增加金币 4.8

xk6891

至尊木虫 (著名写手)


[资源] CG系数--Fortran code

计算CG系数的一个Fortran代码,这种东西已经很多了,贴出来希望大家能够多多指导帮助验证,也希望和大家分享
————————————————————————————————————
CODE:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!08.30.2011. BY XK @SCU!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!Input j1,j2,output the CG coefficient!!!!!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!MAIN PROGRAM!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
program main
implicit none
real    j1,j2,j3,m1,m2,m3,cg,jmax,jmin
integer m1_cont,m2_cont,j3_cont
write(*,*)"Please Input the values of j1:"
read(*,*)j1
write(*,*)"Please Input the values of j2:"
read(*,*)j2
!write(*,*)"Please Input the values of j3:"
!read(*,*)j3
!write(*,*)"Please Input the values of m1:"
!read(*,*)m1
!write(*,*)"Please Input the values of m2:"
!read(*,*)m2
!write(*,*)"Please Input the values of m3:"
!read(*,*)m3

jmax=j1+j2
jmin=abs(j1-j2)

   m1=-j1
do m1_cont=1,INT(2*j1+1)
   m2=-j2
do m2_cont=1,INT(2*j2+1)
   m3=m1+m2
   j3=max(jmin,abs(m3))
   
do j3_cont=1,INT(jmax-j3+1)
   call cgfactor(j1,j2,j3,m1,m2,m3,cg)
   write(*,*)":"
   write(*,"(1A,F4.1,1A,F4.1,1A,F4.1,1A,F4.1,1A,F4.1,1A,F4.1,1A)")"<",j1,",",j2,",",m1,",",m2,"|",j3,",",m3,">"
   write(*,*)"The Clebsh-Gordan Factor value:"
   write(*,*)cg
   j3=j3+1
end do

   m2=m2+1
end do

   m1=m1+1
end do

end program
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!SUBROUTINE ONE PROGRAM!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
subroutine cgfactor(j1,j2,j3,m1,m2,m3,cg)
implicit none
real    j1,j2,j3,m1,m2,m3
real    cgs
integer cgs1,cgs2,cgs3,cgs4,cgs5,cgs6,cgs7,cgs8,cgs9,cgs10
integer facs1,facs2,facs3,facs4,facs5,facs6,facs7,facs8,facs9,facs10,facs11
real    facsr1,facsr2,facsr3,facsr4,facsr5,facsr6,facsr7,facsr8,facsr9,facsr10,facsr11
integer vs1,vs2,vs3,vx1,vx2,vx3,vmax,vmin,v,vabs,vmod
real    cgxr,cgx,cgxv
integer cgx1,cgx2,cgx3,cgx4,cgx5,cgx6
integer facx1,facx2,facx3,facx4,facx5,facx6
real    cg

!if((m1+m2).ne.m3)then
!write(*,*)"the input values is BAD!!! Please rerun the program."
!else if((m1+m2).eq.m3) then
if((m1+m2).eq.m3) then
cgs1=j1+j2-j3
    if(cgs1.lt.0)then
      write(*,*)"The input value is BAD!!!"
!      exit
    else if(cgs1.eq.0)then
      facs1=1
    else if(cgs1.gt.0)then
      call factorial(cgs1,facs1)
    end if
    facsr1=REAL(facs1)
!write(*,*)"the facsr1 value:"
!write(*,*)facsr1
cgs2=j2+j3-j1
    if(cgs2.lt.0)then
      write(*,*)"The input value is BAD!!!"
!      exit
    else if(cgs2.eq.0)then
      facs2=1
    else if(cgs2.gt.0)then
      call factorial(cgs2,facs2)
    end if
    facsr2=REAL(facs2)
!write(*,*)"the facsr2 value:"
!write(*,*)facsr2
cgs3=j3+j1-j2
    if(cgs3.lt.0)then
      write(*,*)"The input value is BAD!!!"
!      exit
    else if(cgs3.eq.0)then
      facs3=1
    else if(cgs3.gt.0)then
      call factorial(cgs3,facs3)
    end if
    facsr3=REAL(facs3)
!write(*,*)"the facsr3 value:"
!write(*,*)facsr3
cgs4=j1+j2+j3+1
    if(cgs4.lt.0)then
      write(*,*)"The input value is BAD!!!"
!      exit
    else if(cgs4.eq.0)then
      facs4=1
    else if(cgs4.gt.0)then
      call factorial(cgs4,facs4)
    end if
    facsr4=REAL(facs4)
!write(*,*)"the facsr4 value:"
!write(*,*)facsr4
cgs5=j1+m1
    if(cgs5.lt.0)then
      write(*,*)"The input value is BAD!!!"
!      exit
    else if(cgs5.eq.0)then
      facs5=1
    else if(cgs5.gt.0)then
      call factorial(cgs5,facs5)
    end if
    facsr5=REAL(facs5)
!write(*,*)"the facsr5 value:"
!write(*,*)facsr5
cgs6=j1-m1
    if(cgs6.lt.0)then
      write(*,*)"The input value is BAD!!!"
!      exit
    else if(cgs6.eq.0)then
      facs6=1
    else if(cgs6.gt.0)then
      call factorial(cgs6,facs6)
    end if
    facsr6=REAL(facs6)
!write(*,*)"the facsr6 value:"
!write(*,*)facsr6
cgs7=j2+m2
    if(cgs7.lt.0)then
      write(*,*)"The input value is BAD!!!"
!      exit
    else if(cgs7.eq.0)then
      facs7=1
    else if(cgs7.gt.0)then
      call factorial(cgs7,facs7)
    end if
    facsr7=REAL(facs7)
!write(*,*)"the facsr7 value:"
!write(*,*)facsr7
cgs8=j2-m2
    if(cgs8.lt.0)then
      write(*,*)"The input value is BAD!!!"
!      exit
    else if(cgs8.eq.0)then
      facs8=1
    else if(cgs8.gt.0)then
      call factorial(cgs8,facs8)
    end if
    facsr8=REAL(facs8)
!write(*,*)"the facsr8 value:"
!write(*,*)facsr8
cgs9=j3+m3
    if(cgs9.lt.0)then
      write(*,*)"The input value is BAD!!!"
!      exit
    else if(cgs9.eq.0)then
      facs9=1
    else if(cgs9.gt.0)then
      call factorial(cgs9,facs9)
    end if
    facsr9=REAL(facs9)
!write(*,*)"the facsr9 value:"
!write(*,*)facsr9
cgs10=j3-m3
    if(cgs10.lt.0)then
      write(*,*)"The input value is BAD!!!"
!      exit
    else if(cgs10.eq.0)then
      facs10=1
    else if(cgs10.gt.0)then
      call factorial(cgs10,facs10)
    end if
    facsr10=REAL(facs10)
!write(*,*)"the facsr10 value:"
!write(*,*)facsr10
facs11=INT(2*j3+1)
facsr11=REAL(facs11)
!write(*,*)"the facsr11 value:"
!write(*,*)facsr11

!!!!!!!!!!!!!!!!!!!!!!!!!!!AFTER SQRTed the cgs value!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!cgs=sqrt(facsr1*facsr2*facsr3/facsr4*facsr5*facsr6*facsr7*facsr8*facsr9*facsr10*facsr11)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!NOT SQRTed the cgs value!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
cgs=facsr1*facsr2*facsr3/facsr4*facsr5*facsr6*facsr7*facsr8*facsr9*facsr10*facsr11
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!write(*,*)"the cgs value:"
!write(*,*)cgs

vs1=j1+j2-j3
vs2=j1-m1
vs3=j2+m2
vx1=0
vx2=j1+m2-j3
vx3=j2-j3-m1

vmax=min(vs1,vs2,vs3)
vmin=max(vx1,vx2,vx3)

if(vmax.lt.vmin)then
  write(*,*)"The input value is BAD!!!"
!  exit
else if(vmax.eq.vmin)then
   v=vmax
   cgx1=v
     if(cgx1.lt.0)then
       write(*,*)"The input value is BAD!!!"
!       exit
     else if(cgx1.eq.0)then
       facx1=1
     else if(cgx1.gt.0)then
       call factorial(cgx1,facx1)
     end if
   cgx2=j1+j2-j3-v
     if(cgx2.lt.0)then
       write(*,*)"The input value is BAD!!!"
!       exit
     else if(cgx2.eq.0)then
       facx2=1
     else if(cgx2.gt.0)then
       call factorial(cgx2,facx2)
     end if
   cgx3=j1-m1-v
     if(cgx3.lt.0)then
       write(*,*)"The input value is BAD!!!"
!       exit
     else if(cgx3.eq.0)then
       facx3=1
     else if(cgx3.gt.0)then
       call factorial(cgx3,facx3)
     end if
   cgx4=j2+m2-v
     if(cgx4.lt.0)then
       write(*,*)"The input value is BAD!!!"
!       exit
     else if(cgx4.eq.0)then
       facx4=1
     else if(cgx4.gt.0)then
       call factorial(cgx4,facx4)
     end if
   cgx5=j3-j1-m2+v
     if(cgx5.lt.0)then
       write(*,*)"The input value is BAD!!!"
!       exit
     else if(cgx5.eq.0)then
       facx5=1
     else if(cgx5.gt.0)then
       call factorial(cgx5,facx5)
     end if
   cgx6=j3-j2+m1+v
     if(cgx6.lt.0)then
       write(*,*)"The input value is BAD!!!"
!       exit
     else if(cgx6.eq.0)then
       facx6=1
     else if(cgx6.gt.0)then
       call factorial(cgx6,facx6)
     end if
   
   vmod=MOD(v,2)
   
   if(vmod.eq.1)then
     cgx=1.0/REAL((-1)*facx1*facx2*facx3*facx4*facx5*facx6)
   else if(vmod.eq.0)then
     cgx=1.0/REAL(facx1*facx2*facx3*facx4*facx5*facx6)
   end if
   
else if(vmax.gt.vmin)then
cgx=0
do v=vmin,vmax,1
   cgx1=v
     if(cgx1.lt.0)then
       write(*,*)"The input value is BAD!!!"
!       exit
     else if(cgx1.eq.0)then
       facx1=1
     else if(cgx1.gt.0)then
       call factorial(cgx1,facx1)
     end if
   cgx2=j1+j2-j3-v
     if(cgx2.lt.0)then
       write(*,*)"The input value is BAD!!!"
!       exit
     else if(cgx2.eq.0)then
       facx2=1
     else if(cgx2.gt.0)then
       call factorial(cgx2,facx2)
     end if
   cgx3=j1-m1-v
     if(cgx3.lt.0)then
       write(*,*)"The input value is BAD!!!"
!       exit
     else if(cgx3.eq.0)then
       facx3=1
     else if(cgx3.gt.0)then
       call factorial(cgx3,facx3)
     end if
   cgx4=j2+m2-v
     if(cgx4.lt.0)then
       write(*,*)"The input value is BAD!!!"
!       exit
     else if(cgx4.eq.0)then
       facx4=1
     else if(cgx4.gt.0)then
       call factorial(cgx4,facx4)
     end if
   cgx5=j3-j1-m2+v
     if(cgx5.lt.0)then
       write(*,*)"The input value is BAD!!!"
!       exit
     else if(cgx5.eq.0)then
       facx5=1
     else if(cgx5.gt.0)then
       call factorial(cgx5,facx5)
     end if
   cgx6=j3-j2+m1+v
     if(cgx6.lt.0)then
       write(*,*)"The input value is BAD!!!"
!       exit
     else if(cgx6.eq.0)then
       facx6=1
     else if(cgx6.gt.0)then
       call factorial(cgx6,facx6)
     end if

   vabs=ABS(v)
   vmod=MOD(vabs,2)
   
   if(vmod.eq.1)then
     cgxv=1.0/REAL((-1)*facx1*facx2*facx3*facx4*facx5*facx6)
   else if(vmod.eq.0)then
     cgxv=1.0/REAL(facx1*facx2*facx3*facx4*facx5*facx6)
   end if
   
   cgx=cgx+cgxv
   
end do
end if
!write(*,*)"the cgx value:"
!write(*,*)cgx

!!!!!!!!!!!!!!!!!!!!!!!!!!!AFTER SQRTed the cgs value!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!if(cgx.eq.0)then
!  cg=0
!!  write(*,*)"The Clebsh-Gordan Factor value:"
!!  write(*,*)cg
!else if(cgx.ne.0)then
!  cgxr=REAL(cgx)

!!!write(*,*)"the cgxr value:"
!!!write(*,*)cgxr

!  cg=cgs*cgxr
!!  write(*,*)"The Clebsh-Gordan Factor value:"
!!  write(*,*)cg
!end if
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!NOT SQRTed the cgs value!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
if(cgx.eq.0)then
   cg=0
!  write(*,*)"The Clebsh-Gordan Factor value:"
!  write(*,*)cg
else if(cgx.gt.0)then
  cgxr=(REAL(cgx))**(2)

!!write(*,*)"the cgxr value:"
!!write(*,*)cgxr

  cg=cgs*cgxr
!  write(*,*)"The Clebsh-Gordan Factor value:"
!  write(*,*)cg
else if(cgx.lt.0)then
   cgxr=(REAL((-1)*cgx))**(2)

!!write(*,*)"the cgxr value:"
!!write(*,*)cgxr

  cg=(-1)*cgs*cgxr
!  write(*,*)"The Clebsh-Gordan Factor value:"
!  write(*,*)cg
end if
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

end if
end subroutine
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!SUBROUTINE TWO PROGRAM!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
subroutine factorial(k,fac)
implicit none
integer k,fac,fac_cont
!     if(k.lt.0)then
!     write(*,*)"the values of i, j are BAD"
!else if(k.eq.0)then
!     write(*,*)"the value of factorial:"
!     write(*,*)1
!else if(k.gt.0)then
     fac=1
     if(k.gt.0)then
     do fac_cont=1,k
        fac=fac*fac_cont
     end do
!     write(*,*)"the value of factorial:"
!     write(*,*)fac
     end if
end subroutine
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

[ Last edited by xk6891 on 2011-9-5 at 15:14 ]
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zzy870720z

荣誉版主 (文坛精英)


★★★★★ 五星级,优秀推荐

★★★★★ 五星级
2楼2011-09-06 10:24:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wo_PLHN

金虫 (小有名气)


★★★★★ 五星级,优秀推荐

绝对的好贴啊,收藏了啊
4楼2011-09-08 10:52:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hutuya

新虫 (小有名气)


★★★★★ 五星级,优秀推荐

不错呀,好人呀
5楼2011-12-13 16:51:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

kervinzhao

铁杆木虫 (职业作家)


★★★★★ 五星级,优秀推荐

good   good
7楼2011-12-18 20:32:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
简单回复
2011-09-07 19:59   回复  
五星好评  
houqz5206楼
2011-12-13 19:46   回复  
五星好评  谢谢分享!
相关版块跳转 我要订阅楼主 xk6891 的主题更新
☆ 无星级 ★ 一星级 ★★★ 三星级 ★★★★★ 五星级
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 材料学学硕337求调剂-一志愿华中科技大学 +3 顺顺顺mr 2026-03-18 4/200 2026-03-21 08:20 by JourneyLucky
[考研] 307求调剂 +3 wyyyqx 2026-03-17 3/150 2026-03-21 03:20 by JourneyLucky
[考研] 299求调剂 +6 △小透明* 2026-03-17 6/300 2026-03-21 02:42 by JourneyLucky
[考研] 一志愿西南交大,求调剂 +5 材化逐梦人 2026-03-18 5/250 2026-03-21 00:26 by JourneyLucky
[考研] 22408 344分 求调剂 一志愿 华电计算机技术 +4 solanXXX 2026-03-20 4/200 2026-03-20 23:49 by alg094825
[考研] 材料专硕英一数二306 +7 z1z2z3879 2026-03-18 7/350 2026-03-20 23:48 by JourneyLucky
[考研] 一志愿中海洋材料工程专硕330分求调剂 +8 小材化本科 2026-03-18 8/400 2026-03-20 23:16 by JourneyLucky
[考研] 考研调剂求学校推荐 +3 伯乐29 2026-03-18 5/250 2026-03-20 22:59 by JourneyLucky
[考研] 北科281学硕材料求调剂 +5 tcxiaoxx 2026-03-20 5/250 2026-03-20 21:35 by laoshidan
[考研] 一志愿西南交通 专硕 材料355 本科双非 求调剂 +5 西南交通专材355 2026-03-19 5/250 2026-03-20 21:10 by JourneyLucky
[考研] 一志愿南理工085701环境302求调剂院校 +3 葵梓卫队 2026-03-20 3/150 2026-03-20 19:28 by zhukairuo
[考研] 广西大学家禽遗传育种课题组2026年硕士招生(接收计算机专业调剂) +3 123阿标 2026-03-17 3/150 2026-03-20 15:58 by 飞行琦
[考研] 081700化工学硕调剂 +3 【1】 2026-03-16 3/150 2026-03-19 23:40 by edmund7
[考研] 288求调剂,一志愿华南理工大学071005 +5 ioodiiij 2026-03-17 5/250 2026-03-19 18:22 by zcl123
[考研] 085600材料与化工求调剂 +6 绪幸与子 2026-03-17 6/300 2026-03-19 13:27 by houyaoxu
[考研] 材料工程专硕274一志愿211求调剂 +6 薛云鹏 2026-03-15 6/300 2026-03-17 11:05 by 学员h26Tkc
[考研] [导师推荐]西南科技大学国防/材料导师推荐 +3 尖角小荷 2026-03-16 6/300 2026-03-16 23:21 by 尖角小荷
[考研] 070303 总分349求调剂 +3 LJY9966 2026-03-15 5/250 2026-03-16 14:24 by xwxstudy
[考研] 277材料科学与工程080500求调剂 +3 自由煎饼果子 2026-03-16 3/150 2026-03-16 14:10 by 运气yunqi
[考研] 中科大材料与化工319求调剂 +3 孟鑫材料 2026-03-14 3/150 2026-03-14 20:10 by ms629
信息提示
请填处理意见