OSDN Git Service

Importing Amber mdcrd files is implemented.
[molby/Molby.git] / memo.txt
1 2010.1.25.
2   AmberTools1.3 をバンドルする方向で検討中。antechamber と sqm だけあればいいはず。
3
4 config.h, Makefile_at を手動で修正。
5 src ディレクトリの中で、antechamber, blas, carpack, cblas, clapack, etc, f2c, include, lapack, lib, sff, sqm を残し、他は削除する。
6
7 make -f Makefile_at でビルド。
8 なお、Mac 用の gfortran は http://r.research.att.com/tools/ にあるやつがいい。hpc.sourceforge.net のやつはいろいろと使い方が複雑。
9 OS 10.4 用のユニバーサルバイナリは、export ISYSROOT='-isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4 -arch ppc -arch i386' としたあと make -f Makefile_at とすると作ることができる。MacBook 上でビルドして、PowerPC の 10.4 に持って行っても実行できたので、たぶん大丈夫じゃないかと。
10 原子タイプのアサインだけなら、antechamber を -c オプション無しで走らせればいいんだな。気がついてなかった。(どれぐらい使えるのかは不明だが。)
11
12 2010.2.2.
13   MD/Minimize のサブスレッドの処理を整理(よくフリーズしていたので)。
14   サブスレッドから MM/MD をしているときは、指定したステップが終わるごとにリングバッファに座標データをためこみ、メインスレッドにイベントを投げる。メインスレッドはイベントを捕まえて、リングバッファから座標データを読み込んで、フレームを作成する。サブスレッドから Molecule を直接触ることがなくなったので、少しは安定すると期待しよう。また、ドキュメントを閉じるときにサブスレッドが走っている時は、エラーメッセージを出して閉じるのを拒否するようにした。
15
16 2010.2.21.
17   Ruby の Parameter/ParEnumerable の仕様がわかりにくい。グローバルパラメータを自動的に探しに行く機能はlookup メソッドに限定する。Parameter#lookup(par_type, atom_type_string, *options), ParEnumerable#lookup(atom_type_string, *options).
18   Parameter#bond, ParEnumerable#[] などで、原子タイプからの探索はやめにする。また、ローカルな Parameter の nbonds などがグローバルパラメータを含んだ値を返すのはやめる。
19   Parameter#bond などをクラスメソッド・インスタンスメソッドとして二重に登録するのはやめた。グローバルパラメータはたとえば Parameter.builtin.atoms または Parameter::Builtin.atoms としてアクセスする。
20
21 2010.2.27.
22   Parameter タイプの atom というのはなんとも紛らわしい。element の方がまだましかも。
23
24 2010.3.8.
25   RubyDialog って名前はよくないな。Ruby のクラス名に "Ruby" って接頭辞をつけてどうすんだよ。全体を Molby というモジュールにして、暗黙に include Molby することにしようか。これなら、RubyDialog は Dialog でもいい。
26   DialogItem を独立したクラスにしたいんだけど、オーナーシップをどうしようか?
27   DialogItem は常に Dialog#item で作成されるので、このとき作ったオブジェクトを Dialog._items に格納し、常にそれを返す。従って、Dialog#get_item(n) で返されるオブジェクトは常に同一。
28   DialogItem は Dialog へのポインタとアイテム番号を保持すべき。アイテム番号はともかく、ポインタはどう保持するか? Dialog._items -> DialogItem -> Dialog という循環参照を作っても、Ruby の GC ならちゃんと回収してくれるから、これでいいんじゃないか。他のいい方法が思いつかん。
29   DialogItem は C レベルのデータは持たず、単なる cDialogItem のインスタンスとする。属性は、今まで Dialog 中のハッシュに保持していたが、DialogItem のインスタンス変数として実装する。
30   Dialog#item(:type, hash) でアイテムを作成。Dialog#set_attr, Dialog#get_attr はやめて、DialogItem#[], DialogItem#[]= で実装する。DialogItem#属性名, DialogItem#属性名= も実装する(ParameterRef と同様)。また、Dialog#action の引数はアイテム番号でなく DialogItem オブジェクトとする。
31   DialogItem の action 属性は今までと同様だが、引数としてはアイテム番号でなく DialogItem オブジェクトそのものが渡される。
32
33 2010.3.21.
34   Pressure control を使えるようにしたい。フレームごとに unit cell パラメータを保持できるようにしないといけない。→ 一応実装した。
35
36 2010.4.25.
37   SVN メモ。タグの付け方。
38 svn copy svn+ssh://toshinagata1964@svn.sourceforge.jp/svnroot/molby/trunk svn+ssh://toshinagata1964@svn.sourceforge.jp/svnroot/molby/tags/version_x_y_z -m "version x.y.z"
39
40 2010.4.25.
41   wxWidgets 絡みの厄介なバグをいくつか退治したのでメモ。
42 ・wxDocument::Close() が二重に呼ばれる問題。メニューから Close コマンドを選ぶと、普通は wxDocManager::CloseDocument() が呼び出される。これは、最初に wxDocument::Close() を呼び、成功したら wxDocument::DeleteAllViews() を呼ぶのだが、この中から wxView::Close() -> wxView::OnClose() -> wxDocument::Close() という呼び出しがあるため、wxDocument::Close() が2回呼ばれてしまう。2回目に何もしないで true を返せばいいのだが、下手なコーディングをするとおかしくなってしまう。今回は、MoleculeView::OnClose() を修正して、wxDocument::Close() の呼び出しをスキップした。
43   参考: http://trac.wxwidgets.org/ticket/11367 
44 ・wxDocument::Close() をオーバーライドしたら、元の wxDocument::Close() を呼ばないといけない。こんな感じ。
45 bool
46 MyDocument::Close()
47 {
48         if (mol != NULL && mol->mutex != NULL) {
49                 return false;  /*  クローズを拒否  */
50         }
51         return wxDocument::Close();
52 }
53  理由は、wxDocument::Close() の中で、未保存のドキュメントを保存するかどうか尋ねる処理があるため。これを忘れて "return true;" としてしまうと、未保存のドキュメントの場合は wxDocument のデストラクタからこの処理が呼ばれてしまい、変なことになる。
54 ・wxMac で wxMDIParentFrame を使うとき、frame->Move(-10000, -10000); frame->Show(false); などとして不可視にするが、すべてのウィンドウが閉じられている状態でアプリケーションをバックグラウンドからフォアグラウンドに持って来た時など、何かの拍子にこのウィンドウが可視化されて Window メニューに現れてしまうことがある。これを防ぐ方法:
55 (1) wxMDIParentFrame のコンストラクタ中で、
56 #if defined(__WXMAC__)
57         OSStatus sts;
58         sts = ChangeWindowAttributes((WindowRef)m_macWindow, 0, kWindowInWindowMenuAttribute);
59 #endif
60  ChangeWindowAttributes には <Carbon/Carbon.h> が必要。ちなみに、Ruby のヘッダと同時に #include すると T_DATA が二重定義になるので、#include <Carbon/Carbon.h> の前に #undef T_DATA を置く。
61 (2) wxApp で Activate Event をつかまえて、そのたびに wxMDIParentFrame を不可視にする。なんとも強引だが、確実。
62 EVT_ACTIVATE(MyApp::OnActivate)
63 void
64 MyApp::OnActivate(wxActivateEvent &event)
65 {
66 #if defined(__WXMAC__)
67        MyFrame *frame = GetMainFrame();
68        frame->Show(false);
69 #endif
70        event.Skip();
71 }
72
73 2010.4.25.
74 バージョン0.5.3をリリースしました。
75 ・フレームごとに可変な単位格子を設定可能。
76 ・パラメータテーブルのコピー/カット/ペーストを改善。
77 ・Mac 版で、隠れウィンドウの "Molby" がときどき Window メニューに現れる不具合を修正。
78 ・テーブルの編集時の不具合(Windows はクラッシュ、Mac はテキストフィールドが残ってしまう)の修正。
79 Version 0.5.3 is out.
80 * Frames can now have variable unit cell parameters.
81 * Improved handling of copy/cut/paste in the parameter table.
82 * Fix the problem in the Mac version in which the hidden top-level window gets sometimes visible in the Window menu.
83 * Bugs in the list control were (hopefully) fixed.
84
85 2010.4.29.
86   4/25 に修正した wxDocument::Close() 二重呼び出しの件、どうも修正の仕方がまずいみたいで、Windows でクラッシュを起こす。元に戻した。
87
88 2010.5.4.
89   いろいろ変なクラッシュが起きる。malloc/free 関係のバグくさいのだが、なかなか特定できない。Mac 上では GuardMalloc を使い、MolAction.c:562 の
90 -                               usave = *up;
91 +                               ParameterCopyOneWithType(&usave, up, i);
92 が原因と特定できた。つまり、up は BondPar/AnglePar/etc. の配列へのポインタを UnionPar * にキャストしたものなので、up が配列の最後の要素を指しているときに *up をアクセスすると、存在しないメモリ領域を読み出すことになってしまう。(これでバスエラーが起きるのは相当不運なケースだが)。
93   Windows の方は本当に困ってしまった。開発ツールへの投資をけちるとこういうところでつまづくんだな。チェック用ツールをいろいろ探して、kmmalloc (http://www.vector.co.jp/soft/dos/prog/se026997.html) を使うことにした。使い方は同梱の kmmalloc.txt に全部書いてあるのだが、少し手こずってしまったのでメモしておく。
94 ・インストールの仕方:
95 (1) kmmalloc-2.5.3.zip をダウンロード、解凍。
96 (2) $ cd kmmalloc-2.5.3
97 (3) patch -c < mingw.dif
98 (4) xalloc.h を編集して、次の5行を追加。
99 #define EFREEP 120
100 #define EFREEBLK 121
101 #define EALLOCBLK 122
102 #define EFREEWRT 123
103 #define ETRAILWRT 124
104 (5) mingw.mak を編集する。
105 -LIBDIR = /usr/local/lib
106 +LIBDIR = /mingw/lib
107 (6) make PACKAGE=KMMALLOC _MEM_DEBUG=1 -f mingw.mak
108  途中で一回「問題が発生したため、test_mem.exe を終了します。」というダイアログが出る。仕様なのか不具合なのか不明。
109 (7) mkdir /mingw/include/kmmalloc; cp xalloc.h yalloc.h /mingw/include/kmmalloc
110 ・使い方
111 (1) ビルド時に -lkmmalloc_debug フラグをリンカに渡す。これで malloc/free/realloc が kmmalloc のものと置き換わる。
112 (2) 問題のソースに #include <kmmalloc/xalloc.h> を入れておくと、malloc/free/realloc のコール時に __FILE__, __LINE__ を渡すようにしてくれるが、これをしなくてもデバッガを使えば何とかなる。
113 (3) export MEMCHECK=2  #  kmmalloc のデバッグ機能を有効にする。ログを書き出すなら export MEMCHECK=4; export MEMFP=ファイル名 とする。
114 (4) デバッガで mem_error() 関数にブレークポイントを指定して実行。実行は非常に遅くなる場合がある(それほどでもない場合もある)。
115 (5) strdup, wcsdup 中の malloc はこの方法では置き換えられないようなので、自前で malloc を使うバージョンを用意して使う。(Missing.c 参照) → どうも wxWidgets の中の strdup コールはこれでは置き換わってくれないらしく、かえって変なことが起きているような気がする。kmmalloc.a をリンクする条件で wxWidgets を再コンパイルしないとだめか? → マルチスレッドに未対応? 無理かも…
116
117 2011.4.26.
118  GaussianW のフォーマットチェックポイントファイルが読めないことが判明。改行コードの問題だった。Molecule.c の sSeparateTokens() を修正して解決。
119  また、GaussianW では formchk で作ったファイルの拡張子が fch になるので、fch, fchk 両方とも Gaussian Checkpoint File として認識するように修正。
120
121 2011.4.26.
122 バージョン 0.5.5 をリリース。
123
124 原子座標を修正したあとの MM/MD の不具合を修正。
125 wrap_unit_cell コマンドの不具合を修正。
126 単位格子が定義されているときに、周期的なイメージを表示する機能を実装。
127 周期境界条件での vdW/静電力計算の不具合を修正。
128 mbsf ファイルにスケール、配向などの表示に関する設定を保存。
129 MD パラメータがない分子に他の分子からのパラメータをペーストできない不具合を修正。
130 GaussianW の fch(k) ファイルが読めない不具合を修正。また、拡張子 ".fch" を Gaussian Checkpoint File として認識するよう設定。
131
132 Incomplete MM/MD re-initialization after modification of coordinates was fixed.
133 The Ruby command wrap_unit_cell now works correctly.
134 Periodic images can be displayed when a unit cell is defined.
135 Wrong calculation of vdw/elect forces under periodic boundary conditions was fixed.
136 The native format (mbsf) now preserves the display conditions, such as scale, orientation etc.
137 Pasting MD parameters to a molecule with no parameters now works correctly.
138 Importing GaussianW fch(k) files was not working; fixed. The extension ".fch" is now recognized as a Gaussian formatted checkpoint files.
139
140 2011.7.5.
141 sander 用入力を作れるようにする。prmtop, inpcrd は一応作れるようになった。あとは sander の入力ファイル。関係ありそうな設定パラメータ:
142
143 General flags
144 imin = 0 (no minimization), 1 (minimization)
145 ntx = 1 (read coords), 5 (read coords and velocities and box [if ntb>0]. velocities are used only if irest > 0.
146 irest = 0 (no restart), 1 (restart)
147 ntpr : every NTPR steps energy info are printed to mdout/mdinfo (default 50).
148 ntwx : every ntwx steps coords are written to mdcrd (default 0: no output)
149
150 Minimization and dynamics:
151 maxcyc: maximum number of cycles of minimization
152 nstlim: number of MD-steps to be performed
153 dt: time step (psec). Recommended value is 0.002 when SHAKE is used or 0.001 otherwise.
154 nrespa: frequency for calculation of slow forces. nrespa * dt > 0.004 causes instablitity.
155
156 Temperature control:
157 ntt: temperature control 0: constant energy, 1: constant temperature, 2: Andersen temperature, 3: Langevin dynamics
158 temp0: target temperature
159 tempi: initial temperature
160 tautp: time constant for heat bath coupling. Should be 0.5-5.0ps.
161 gamma_ln: collision frequency for Langevin dynamics.
162 vlimit: limiting velocity, default 20.
163
164 Pressure control:
165 ntp: constant pressure dynamics 0: no pressure scaling, 1: isotropic position scaling, 2: anisotropic pressure scaling
166 pres0: reference pressure (default 1 bar)
167 taup: pressure relaxation time (default 1.0 ps)
168
169 SHAKE constraint:
170 ntc: SHAKE algorithm. generally ntf and ntc should be the same. 1: SHAKE is not perfomred, 2: bonds involving hydrogen are constrained, 3: all bonds are constrained
171
172 Potential function parameters:
173 ntf: force evaluation 1: complete interaction, 2: omit hydrogen (with ntc=2), 3: omit all bonds (with ntc=3)
174 ntb: 0 (no periodicity), 1 (constant volume), 2 (constant pressure)
175 cut: nonbonded cutoff, default 8.0 (for PME this is good); for igb > 0, larger values should be used
176
177 Generalized Born/Surface Area:
178 igb: 0 (no GB), 1 (Hawkins/Cramer/Truhlar GB), 2 (Onufriev/Bashford/Case GB), etc.
179 extdiel: external dielectric constant. default 78.5.
180 saltcon: salt concentraction (M), GB plus Debye-Huckel model.
181 rgbmax: cutoff for estimation of effective Born radii. Default 25 A.
182 gbsa: 0 (no surface area calc), 1 (LCPO surface area model), 2 (recursive approximation of spheres; used only in single point calc)
183 surften: surface tension. default 0.005 kcal/mol/A^2
184 rdt: (only used in LES)
185
186 sander -O -i min.in -o NAME.out -p NAME.prmtop -c NAME.inpcrd -x NAME.mdcrd -r NAME.restrt
187
188