24小时热门版块排行榜    

查看: 2736  |  回复: 26

贺仪

铁杆木虫 (著名写手)

[求助] 帮忙讲解一下 文件的读取

帮忙讲解一下
subroutine get_token(token, id)
    type(dtsets_list), pointer :: token
    integer, intent(in) :: id
    type(dtsets_list), pointer :: tmpLst
    if (AB_DBG) write(0,*) "AB module: request list element ", id
    nullify(token)
    tmpLst => my_dtsets  
    do
       if (.not. associated(tmpLst)) then
          exit
       end if
       if (tmpLst%id == id .and. associated(tmpLst%dtsets)) then
          token => tmpLst
          return
       end if
       tmpLst => tmpLst%next
    end do
  end subroutine get_token
这个程序是怎么从id的这个文件读取变量?能否讲一下if中的意义?谢谢!
回复此楼

» 猜你喜欢

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

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

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖


余泽成(金币+1): 谢谢参与应助! 2011-12-02 17:28:36
ben_ladeng: 专家考核存档 2011-12-11 10:01:45
我一看到指针就头大的很,呵呵……

你要看懂这个,先要搞清楚 dtsets_list 这个 type 是如何定义的。然后,读取变量的过程似乎用到了链表?我对这个便一无所知了……
2楼2011-11-30 22:42:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

潜龙伏虎

银虫 (小有名气)

【答案】应助回帖

【答案】应助回帖
这个是C的吧?C的不懂,C++还知道一点。。。。。。
3楼2011-11-30 23:08:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

余泽成: 2011-12-02 17:28:56
ben_ladeng: 专家考核存档 2011-12-11 10:01:55
引用回帖:
3楼: Originally posted by 潜龙伏虎 at 2011-11-30 23:08:25:
【答案】应助回帖
这个是C的吧?C的不懂,C++还知道一点。。。。。。

这个是 Fortran 的好不……

懂 C++ 的话,没有理由看不懂 C 的啊……
4楼2011-11-30 23:19:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

贺仪

铁杆木虫 (著名写手)

引用回帖:
2楼: Originally posted by snoopyzhao at 2011-11-30 22:42:00:
我一看到指针就头大的很,呵呵……

你要看懂这个,先要搞清楚 dtsets_list 这个 type 是如何定义的。然后,读取变量的过程似乎用到了链表?我对这个便一无所知了……

谢谢您!是要这个定义吗?
type, private :: dtsets_list
     integer                     :: id
     type(dtsets_list),  pointer :: next => null()
     type(dtsets_list),  pointer :: prev => null()
     type(dataset_type), pointer :: dtsets(:)
     type(pspheader_type), pointer :: pspheads(:)
     integer :: mxgw_nqlwl, mxnatom, mxntypat, mxlpawu, mxmband_upper, mxnatpawu, &
         & mxnatsph,  mxnconeq, mxnimage, mxnkptgw, mxnatvshift, &
         & mxnkpt,  mxnnos, mxnqptdm, mxnsppol, mxnsym, mxnspinor, mxmband
     integer :: istatr, istatshft, dmatpuflag, papiopt, timopt
  end type dtsets_list
是不是还得知道dtsets(:),pspheads(:)?
type(pspheader_type),pointer :: pspheads(:)

type dataset_type
integer :: accesswff
integer :: awtr
integer :: bandpp
integer :: bdeigrf
integer :: berryopt
integer :: berrystep
integer :: brvltt
integer :: bs_nstates
integer :: cd_use_tangrid
integer :: bs_hayd_term
integer :: chkexit
integer :: chkprim
integer :: chksymbreak
integer :: delayperm
integer :: dmatpuopt
integer :: dmatudiag
integer :: dmft_dc
integer :: dmft_iter
integer :: dmft_nwli
integer :: dmft_nwlo
integer :: dmft_rslf
integer :: dmft_solv
integer :: dmftbandi
integer :: dmftbandf
integer :: dmftcheck
integer :: enunit
integer :: exchn2n3d
integer :: fftgw
integer :: fft_opt_lob
integer :: frzfermi
integer :: getcell
integer :: getddk
integer :: getden
integer :: getgam_eig2nkq
integer :: getkss
integer :: getocc
integer :: getpawden
integer :: getqps
integer :: getscr
integer :: getsuscep
integer :: getvel
integer :: getwfk
integer :: getwfq
integer :: getxcart
integer :: getxred
integer :: get1den
integer :: get1wf
integer :: getbseig
integer :: getbsreso
integer :: getbscoup
integer :: gethaydock
integer :: gw_eet
integer :: gw_eet_nband
integer :: gw_eet_inclvkb
integer :: gwcalctyp
integer :: gwcomp
integer :: gwgamma
integer :: gwrpacorr
integer :: gw_nqlwl
integer :: gw_nstep
integer :: gw_sigxcore
integer :: gwmem
integer :: gwpara
integer :: gw_sctype
integer :: iboxcut
integer :: icoulomb
integer :: icutcoul
integer :: idyson
integer :: ieig2rf
integer :: iextrapwf
integer :: ikhxc
integer :: imgmov
integer :: inclvkb
integer :: intexact
integer :: intxc
integer :: ionmov
integer :: iprcch
integer :: iprcel
integer :: iprctfvw
integer :: iprcfc
integer :: irdddk
integer :: irdden
integer :: irdhaydock
integer :: irdkss
integer :: irdpawden
integer :: irdqps
integer :: irdscr
integer :: irdsuscep
integer :: irdwfk
integer :: irdwfq
integer :: ird1den
integer :: ird1wf
integer :: irdbseig
integer :: irdbsreso
integer :: irdbscoup
integer :: iscf
integer :: isecur
integer :: istatr
integer :: istatshft
integer :: ixc
integer :: ixcpositron
integer :: jdtset !  jdtset contains the actual number of the dataset
integer :: jellslab
integer :: kptopt
integer :: kssform
integer :: ldgapp
integer :: localrdwf
integer :: maxnsym
integer :: mband
integer :: mffmem
integer :: mgfft
integer :: mgfftdg
integer :: mkmem
integer :: mkqmem
integer :: mk1mem
integer :: nnos
integer :: mpw
integer :: mqgrid
integer :: mqgriddg
integer :: natom
integer :: natpawu
integer :: natrd
integer :: natsph
integer :: natvshift
integer :: nbandkss
integer :: nbandsus
integer :: nbdblock
integer :: nbdbuf
integer :: nberry
integer :: nconeq
integer :: nctime
integer :: ndtset
integer :: ndynimage
integer :: ndyson
integer :: nfft
integer :: nfftdg
integer :: nfreqim
integer :: nfreqre
integer :: nfreqsp
integer :: nfreqsus
integer :: diismemory
integer :: ngroup_rf
integer :: nimage
integer :: nkptgw
integer :: nkpt
integer :: nline
integer :: nnsclo
integer :: nomegasf
integer :: nomegasi
integer :: nomegasrd
integer :: npband
integer :: npfft
integer :: npimage
integer :: npkpt
integer :: npsp
integer :: npspalch
integer :: npulayit
integer :: npweps
integer :: npwkss
integer :: npwsigx
integer :: npwwfn
integer :: nqpt
integer :: nqptdm
integer :: nscforder
integer :: nsheps
integer :: nshiftk
integer :: nshsigx
integer :: nshwfn
integer :: nspden
integer :: nspinor
integer :: nsppol
integer :: nstep
integer :: nsym
integer :: ntime
integer :: ntimimage
integer :: ntypalch
integer :: ntypat
integer :: ntyppure
integer :: nwfshist
integer :: occopt
integer :: optcell
integer :: optdriver
integer :: optforces
integer :: optfreqsus
integer :: optnlxccc
integer :: optstress
integer :: ortalg
integer :: paral_kgb
integer :: paral_rf
integer :: pawcpxocc
integer :: pawfatbnd
integer :: pawlcutd
integer :: pawlmix
integer :: pawmixdg
integer :: pawnhatxc
integer :: pawnphi
integer :: pawntheta
integer :: pawnzlm
integer :: pawoptmix
integer :: pawprtden
integer :: pawprtdos
integer :: pawprtvol
integer :: pawprtwf
integer :: pawprt_k
integer :: pawprt_b
integer :: pawspnorb
integer :: pawstgylm
integer :: pawusecp
integer :: macro_uj
integer :: pawujat
integer :: pawxcdev
integer :: pitransform
integer :: positron
integer :: posnstep
integer :: ppmodel
integer :: prepanl
integer :: prepgkk
integer :: prepscphon
integer :: prtbbb
integer :: prtbltztrp
integer :: prtcif
integer :: prtcml
integer :: prtcs
integer :: prtden
integer :: prtdensph
integer :: prtdipole
integer :: prtdos
integer :: prtdosm
integer :: prtefg
integer :: prteig
integer :: prtelf
integer :: prtfc
integer :: prtfsurf
integer :: prtgden
integer :: prtgeo
integer :: prtgkk
integer :: prtkden
integer :: prtkpt
integer :: prtlden
integer :: prtnabla
integer :: prtnest
integer :: prtpmp
integer :: prtposcar
integer :: prtpot
integer :: prtspcur
integer :: prtstm
integer :: prtvha
integer :: prtvhxc
integer :: prtvol
integer :: prtvxc
integer :: prtwant
integer :: prtwf
integer :: prtxangst
integer :: prtxcart
integer :: prtxml
integer :: prtxred
integer :: prt1dm
integer :: ptgroupma
integer :: rdmnb
integer :: random_atpos
integer :: recgratio
integer :: recnpath
integer :: recnrec
integer :: recptrott
integer :: rectesteg
integer :: restartxf
integer :: rfasr
integer :: rfddk
integer :: rfelfd
integer :: rfmeth
integer :: rfphon
integer :: rfstrs
integer :: rfuser
integer :: rf1elfd
integer :: rf1phon
integer :: rf2elfd
integer :: rf2phon
integer :: rf3elfd
integer :: rf3phon
integer :: signperm
integer :: smdelta
integer :: spgaxor
integer :: spgorig
integer :: spgroup
integer :: spmeth
integer :: suskxcrs
integer :: symmorphi
integer :: symchi
integer :: symsigma
integer :: td_mexcit
integer :: tfkinfunc
integer :: timopt
integer :: tl_nprccg
integer :: usedmatpu
integer :: usedmft
integer :: useexexch
integer :: usekden
integer :: usepaw
integer :: usepawu
integer :: userec
integer :: useria
integer :: userib
integer :: useric
integer :: userid
integer :: userie
integer :: usewvl
integer :: usexcnhat
integer :: useylm
integer :: use_slk
integer :: vacnum
integer :: vdw_nfrag
integer :: vdw_xc
integer :: wfoptalg
integer :: wvl_nprccg
integer :: w90iniprj
integer :: w90prtunk
integer :: xclevel

!Integer arrays
integer :: bdberry(4)
integer :: cd_subset_freq(2)
integer :: kptrlatt(3,3)
integer :: ngfft(18)
integer :: ngfftdg(18)
integer :: nloalg(5)
integer :: qprtrb(3)
integer :: rfatpol(2)
integer :: rfdir(3)
integer :: rf1atpol(2)
integer :: rf1dir(3)
integer :: rf2atpol(2)
integer :: rf2dir(3)
integer :: rf3atpol(2)
integer :: rf3dir(3)
integer :: scphon_supercell(3)
integer :: supercell(3)
integer :: vdw_supercell(3)
integer :: vdw_typfrag(100)
!Integer pointers
integer, pointer ::  algalch(:)    ! algalch(ntypalch)
integer, pointer ::  bdgw(:,:,:)   ! bdgw(2,nkptgw,nsppol)
integer, pointer ::  dynimage(:)   ! dynimage(nimage or mxnimage)
integer, pointer ::  iatfix(:,:)   ! iatfix(3,natom)
integer, pointer ::  iatsph(:)     ! iatsph(natsph)
integer, pointer ::  istwfk(:)     ! istwfk(nkpt)
integer, pointer ::  kberry(:,:)   ! kberry(3,nberry)
integer, pointer ::  lexexch(:)    ! lexexch(ntypat)
integer, pointer ::  lpawu(:)      ! lpawu(ntypat)
integer, pointer ::  nband(:)      ! nband(nkpt*nsppol)
integer, pointer ::  so_psp(:)     ! so_psp(npsp)
integer, pointer ::  symafm(:)     ! symafm(nsym)
integer, pointer ::  symrel(:,:,:) ! symrel(3,3,nsym)
integer, pointer ::  typat(:)      ! typat(natom)

!Real
real(dp) :: bmass
real(dp) :: boxcutmin
real(dp) :: bxctmindg
real(dp) :: cd_halfway_freq
real(dp) :: cd_max_freq
real(dp) :: charge
real(dp) :: cpus
real(dp) :: diecut
real(dp) :: diegap
real(dp) :: dielam
real(dp) :: dielng
real(dp) :: diemac
real(dp) :: diemix
real(dp) :: diemixmag
real(dp) :: dilatmx
real(dp) :: dmft_mxsf
real(dp) :: dosdeltae
real(dp) :: dtion
real(dp) :: ecut
real(dp) :: ecuteps
real(dp) :: ecutsigx
real(dp) :: ecutsm
real(dp) :: ecutwfn
real(dp) :: effmass
real(dp) :: elph2_imagden
real(dp) :: eshift
real(dp) :: esmear
real(dp) :: exchmix
real(dp) :: fband
real(dp) :: fixmom
real(dp) :: freqremin
real(dp) :: freqremax
real(dp) :: freqspmax
real(dp) :: freqsusin
real(dp) :: freqsuslo
real(dp) :: friction
real(dp) :: fxcartfactor
real(dp) :: gwencomp
real(dp) :: gw_eet_scale
real(dp) :: gw_toldfeig
real(dp) :: kptnrm
real(dp) :: kptrlen
real(dp) :: mdftemp
real(dp) :: mditemp
real(dp) :: mdwall
real(dp) :: nelect
real(dp) :: noseinert
real(dp) :: omegasimax
real(dp) :: omegasrdmax
real(dp) :: pawecutdg
real(dp) :: pawovlp
real(dp) :: pawujrad
real(dp) :: pawujv
real(dp) :: posocc
real(dp) :: postoldfe
real(dp) :: postoldff
real(dp) :: ppmfrq
real(dp) :: recrcut
real(dp) :: recefermi
real(dp) :: rectolden
real(dp) :: rhoqpmix
real(dp) :: rcut
real(dp) :: sciss
real(dp) :: scphon_temp
real(dp) :: slabwsrad
real(dp) :: slabzbeg
real(dp) :: slabzend
real(dp) :: soenergy
real(dp) :: spbroad
real(dp) :: spnorbscl
real(dp) :: stmbias
real(dp) :: strfact
real(dp) :: strprecon
real(dp) :: td_maxene
real(dp) :: tl_radius
real(dp) :: toldfe
real(dp) :: toldff
real(dp) :: tolimg
real(dp) :: tolmxf
real(dp) :: tolrff
real(dp) :: tolsym
real(dp) :: tolvrs
real(dp) :: tolwfr
real(dp) :: tphysel
real(dp) :: tsmear
real(dp) :: userra
real(dp) :: userrb
real(dp) :: userrc
real(dp) :: userrd
real(dp) :: userre
real(dp) :: vacwidth
real(dp) :: vis
real(dp) :: wvl_hgrid
real(dp) :: wvl_crmult
real(dp) :: wvl_frmult
real(dp) :: wvl_cpmult
real(dp) :: wvl_fpmult
real(dp) :: zcut

!Real arrays
real(dp) :: boxcenter(3)
real(dp) :: bfield(3)
real(dp) :: efield(3)
real(dp) :: genafm(3)
real(dp) :: qptn(3)
real(dp) :: strtarget(6)
real(dp) :: vcutgeo(3)
real(dp) :: vprtrb(2)
real(dp) :: zeemanfield(3)

!Real pointers
real(dp), pointer :: acell_orig(:,:)     ! acell_orig(3,nimage)
real(dp), pointer :: amu(:)              ! amu(ntypat)
real(dp), pointer :: atvshift(:,:,:)     ! atvshift(16,nsppol,natom)
real(dp), pointer :: corecs(:)           ! corecs(ntypat)
real(dp), pointer :: densty(:,:)         ! densty(ntypat,4)
real(dp), pointer :: dmatpawu(:,:,:,:)   ! dmatpawu(2*lpawu+1,2*lpawu+1,nsppol*nspinor,natpu)
                                          !   where natpu=number of atoms with lpawu/=1
real(dp), pointer :: gw_qlwl(:,:)        ! gw_qlwl(3,gw_nqlwl)
real(dp), pointer :: jpawu(:)            ! jpawu(ntypat)
real(dp), pointer :: kpt(:,:)            ! kpt(3,nkpt)
real(dp), pointer :: kptgw(:,:)          ! kptgw(3,nkptgw)

real(dp), pointer :: kptns(:,:)
! kptns(3,nkpt)
! k-points renormalized and shifted. The ones that should be used inside the code.

real(dp), pointer :: mixalch(:,:)        ! mixalch(npspalch,ntypalch)
real(dp), pointer :: occ_orig(:)         ! occ_orig(mband*nkpt*nsppol)
real(dp), pointer :: ptcharge(:)         ! ptcharge(ntypat)
real(dp), pointer :: qmass(:)            ! qmass(nnos)
real(dp), pointer :: qptdm(:,:)          ! qptdm(3,nqptdm)
real(dp), pointer :: quadmom(:)          ! quadmom(ntypat)
real(dp), pointer :: ratsph(:)           ! ratsph(ntypat)
real(dp), pointer :: rprim_orig(:,:,:)   ! rprim_orig(3,3,nimage)
real(dp), pointer :: rprimd_orig(:,:,:)  ! rprimd_orig(3,3,nimage)
real(dp), pointer :: shiftk(:,:)         ! shiftk(3,nshiftk)
real(dp), pointer :: spinat(:,:)         ! spinat(3,natom)
real(dp), pointer :: tnons(:,:)          ! tnons(3,nsym)
real(dp), pointer :: upawu(:)            ! upawu(ntypat)
real(dp), pointer :: vel_orig(:,:,:)     ! vel_orig(3,natom,nimage)
real(dp), pointer :: wtatcon(:,:,:)      ! wtatcon(3,natom,nconeq)
real(dp), pointer :: wtk(:)              ! wtk(nkpt)
real(dp), pointer :: xred_orig(:,:,:)    ! xred_orig(3,natom,nimage)
real(dp), pointer :: ziontypat(:)        ! ziontypat(ntypat)
real(dp), pointer :: znucl(:)            ! znucl(npsp)


!BEGIN VARIABLES FOR @Bethe-Salpeter
integer :: bs_algorithm
integer :: bs_haydock_niter
integer :: bs_exchange_term
integer :: bs_coulomb_term
integer :: bs_calctype
integer :: bs_coupling

real(dp) :: bs_haydock_tol

integer :: bs_eh_basis_set(2)

real(dp) :: bs_eh_cutoff(3)
real(dp) :: bs_freq_mesh(3)
!END VARIABLES FOR @Bethe-Salpeter.

! Types
type(wvl_internalVars_type) :: wvl

end type dataset_type

这个


type pspheader_type

! WARNING : if you modify this datatype, please check whether there might be creation/destruction/copy routines,
! declared in another part of ABINIT, that might need to take into account your modification.

  integer :: nproj(0:3) ! number of scalar projectors for each angular momentum
  integer :: nprojso(3) ! number of spin-orbit projectors for each angular momentum
  integer :: lmax       ! maximum l quantum number (-1 if only local)
                        ! Example : s only       -> lmax=0
                        !           s and p      -> lmax=1
                        !           d only       -> lmax=2
  integer :: pspcod     ! code number of the pseudopotential
  integer :: pspdat     ! date of generation of the pseudopotential
  integer :: pspxc      ! exchange-correlation functional
  integer :: pspso      ! spin-orbit characteristics
  integer :: xccc       ! =0 if no XC core correction, non-zero if XC core correction

  real(dp) :: zionpsp       ! charge of the ion made of core electrons only
  real(dp) :: znuclpsp      ! atomic number of the nuclei

  real(dp) :: GTHradii(0:4) ! Radii values for GTH (and HGH) family potentials

  character(len=fnlen) :: filpsp   ! name of the psp file
  character(len=fnlen) :: title    ! content of first line read from the psp file

  type(pspheader_paw_type) :: pawheader ! only for PAW psps. See above

end type pspheader_type
嘟啦啦嘟啦啦嘟
5楼2011-12-01 09:09:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

maomao1210

金虫 (正式写手)

【答案】应助回帖


余泽成(金币+1): 谢谢参与应助! 2011-12-02 17:29:21
ben_ladeng: 专家考核存档 2011-12-11 10:05:19
引用回帖:
1楼: Originally posted by 贺仪 at 2011-11-30 22:16:48:
帮忙讲解一下
subroutine get_token(token, id)
    type(dtsets_list), pointer :: token
    integer, intent(in) :: id
    type(dtsets_list), pointer :: tmpLst
    if (AB_DBG) write(0,*) "AB ...

大哥,这是截取链表的某一部分赋给 链表指针token。
6楼2011-12-01 09:14:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

maomao1210

金虫 (正式写手)

【答案】应助回帖


余泽成(金币+1): 谢谢参与应助! 2011-12-02 17:29:33
ben_ladeng: 专家考核存档 2011-12-11 10:05:28
引用回帖:
6楼: Originally posted by maomao1210 at 2011-12-01 09:14:38:
大哥,这是截取链表的某一部分赋给 链表指针token。

原始链表是 my_dtsets  这个链表里面的每个节点有提前设置好的数值参数。
id是用来表识每个节点的地理位置的。
画个简单草图表示一下哈。
7楼2011-12-01 09:17:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

maomao1210

金虫 (正式写手)

【答案】应助回帖

★ ★ ★
余泽成(金币+3): 辛苦了! 2011-12-02 17:29:46
ben_ladeng: 专家考核存档 2011-12-11 10:05:54
引用回帖:
7楼: Originally posted by maomao1210 at 2011-12-01 09:17:15:
原始链表是 my_dtsets  这个链表里面的每个节点有提前设置好的数值参数。
id是用来表识每个节点的地理位置的。
画个简单草图表示一下哈。

我估计你的自定义类型desets_list应该是这样的:

type dtsets_list
private
type(dtset_list),pointer :: tmplst
integer :: id
**,pointer :: dtsets(
end type

那个do 循环,程序会从链表头开始寻找,一级一级的往链表尾移动,移动到到某个链表节点的id 与输入相同的时候,就把剩余的链表赋值给链表token,链表尾是个nullify空指针,图片中的if那句保证了会跳出循环的。


明白了否?





8楼2011-12-01 09:32:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

maomao1210

金虫 (正式写手)

【答案】应助回帖

引用回帖:
1楼: Originally posted by 贺仪 at 2011-11-30 22:16:48:
帮忙讲解一下
subroutine get_token(token, id)
    type(dtsets_list), pointer :: token
    integer, intent(in) :: id
    type(dtsets_list), pointer :: tmpLst
    if (AB_DBG) write(0,*) "AB ...

大哥,我说的对还是不对呀?你给个准信呀。
9楼2011-12-06 20:33:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

贺仪

铁杆木虫 (著名写手)

引用回帖:
9楼: Originally posted by maomao1210 at 2011-12-06 20:33:15:
大哥,我说的对还是不对呀?你给个准信呀。

里面全是指针,正在看但是还没看懂……
嘟啦啦嘟啦啦嘟
10楼2011-12-07 09:58:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 贺仪 的主题更新
信息提示
请填处理意见