xc_gga.f90

subroutine xc_gga_chg

  • if文でxctypeに関する比較を順に行う際には最も使われやすいggapbeは最初に比較するべき。
    現状ではggapbeを使う際のif文の回数がxctypeの数に比例して増加する。
  • xctypeが間違っている場合にelseでggapbeが呼ばれ計算が実行されると、パラメータの間違いに気づきにくくなる。
    xctypeが間違っているならエラーかxctypeのリストを出力してabortすべき。

subroutine exch*_wb

  • LDAの交換エネルギーの計算でrho^{1/3}が必要になるので
    rho = max(fft_grad_l(ig,0),eps_chg)
    によりrhoが負になるのを防いでいるが、rhoをゼロでなくeps_chg=1d-25で置き換えているのは、規約密度勾配sの分母にrhoが現れるためである。
    しかしrhoが振動し負の値が現れる真空領域は本来はほぼ密度一様かつ勾配ゼロの領域であるが、現状では勾配はそのままの値が用いられている。
    その副作用としてrhoが負の位置ではsの分母に微小量eps_chgが現れ発散するが、PBE等ではLieb-Oxford boundによりsの発散はさほど問題にならなかった。
    一方vdW-DF(の派生版)ではLieb-Oxford boundが効かない交換汎関数を用いる機会が多いので、sの非物理的な発散は見逃さないのが得策と思われる。

全般

多くの関数が大量に引数を持つのは、定数を引数にしているためと考えられる。定数は系が決まれば本来変える必要がなく、グローバルな定数にしておけば関数の引数を減らすことができ、引数の間違いや勘違いも減らせる。さらに関数の引数は本来頻繁に変更する可能性のある量を扱うもので、定数を引数に取るのは引数の間違った使い方と思われる。

Makefile

  • 本来-O1でコンパイルするファイルを
    NOVECT = opgr.o    filter.o   inputf.o   util.o
    で区別していたはずが、5.5.*辺りから
    NOPARA = opgr.o    filter.o   inputf.o   util.o   inopts.o fsrfsi.o f77_wisdom.o
    は-O3でコンパイルするように変更されている。
    5.5.3で例えばnum_space_group=221とすると計算が止まってしまうのはopgr.f90の最適化が原因か?
    →num_space_groupで失敗するのはブリルアンゾーンの対称性が落ちたため。nbztyp=100で計算する。
トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-01-23 (月) 11:56:59 (472d)