| 4 | 1/1 | 返回列表 |
| 查看: 1698 | 回復(fù): 3 | |||
| 【獎(jiǎng)勵(lì)】 本帖被評(píng)價(jià)2次,作者寒雨人生增加金幣 1.6 個(gè) | |||
寒雨人生鐵桿木蟲 (知名作家)
|
[資源]
【原創(chuàng)首發(fā)】gfortran4.6+acml5.0.0 GAMESS2012(gmsnbo etc.) ubuntu 12.04 64bit
|
||
|
gfortran4.6+acml5.0.0 GAMESS2012(gmsnbo tinker vb2000 neo) ubuntu 12.04 64bit 以前發(fā)過(guò)帖子講述GAMESS2012在ubuntu11.XX 32bit上的編譯(鏈接)。 當(dāng)時(shí)用的是Intel Fortran(Professional)+ mkl,編譯的各部分代碼都一樣。 gfortran安裝——在聯(lián)網(wǎng)狀態(tài)下用sudo apt-get install gfortran命令即可。 acml數(shù)學(xué)庫(kù)可以去AMD的官網(wǎng)下載——注意下載適合的版本,一般5.0.0以上的acml(最新版本是5.2.0)需要4.6以上的gfortran配合,此外請(qǐng)注意要下載acml-5-x-x-gfortran-64bit-int64.tgz;然后解壓,進(jìn)入解壓后的文件夾,運(yùn)行安裝腳本,按提示安裝。默認(rèn)的安裝路徑是/opt/acml5.x.x。 其實(shí)這里編譯的過(guò)程都差不多,有三點(diǎn)需要注意: 1.gmsnbo.src源碼修改: 因?yàn)槭桥cvb2000一起編譯,所以就要多修改幾個(gè)(共3個(gè))相互沖突的函數(shù)名,具體修改如下(來(lái)自官網(wǎng)的Bug報(bào)告)—— In the nbo_59.src source code, use a text editor to globally replace "GETDM" by "NGETDM" throughout the code. (This avoids conflict with SR GETDM as introduced in the 25-Mar-2010 GAMESS version.) If both NBO and VB2000 are being compiled with GAMESS, you should also replace "REDUC1" by "NREDUC1" and "ANGLES" by "NANGLES" in the definitions and calls to SR REDUC1 and SR ANGLES. 2.以前網(wǎng)絡(luò)上(國(guó)內(nèi)的網(wǎng)頁(yè),針對(duì)那個(gè)泄露出來(lái)的09年?月的版本的,---下載鏈接---)流傳的一個(gè)帖子報(bào)告的gmsnbo.src的兩個(gè)Bug,其修改貌似是有問(wèn)題的—— 以前的修改方式是這樣的: 8427 行 IF(MORB.EQ.0.AND.NAMEAT(IATNO(NCTR.NE.'gh') THEN 改為 IF(MORB.EQ.0.AND.NAMEAT(IATNO(NCTR.NE.'gh'))) THEN 15421 行 IF(MORB.EQ.0.AND.NAMEAT(IATNO(NCTR).NE.'gh') THEN 改為 IF(MORB.EQ.0.AND.NAMEAT(IATNO(NCTR).NE.'gh')) THEN 發(fā)現(xiàn)這種修改存在問(wèn)題的過(guò)程是這樣的—— 按上述修改完成之后,使用gfortran編譯。其他所有模塊都能正常編譯成功,而gmsnbo無(wú)法正常編譯,給出的錯(cuò)誤提示的大意如下: 8427行 .NE.運(yùn)算錯(cuò)誤,原因是INTEGER(8)/CHARACTER。(NCTR是整型變量。 15421行 .NE.運(yùn)算錯(cuò)誤,原因是INTEGER(8)/CHARACTER。(IATNO函數(shù)返回的也是整型變量。 查閱NBO5的用戶手冊(cè),可知:NCTR應(yīng)該是原子中心的編號(hào);IATNO函數(shù)返回的是原子序數(shù);NAMEAT函數(shù)返回的是Hollerith(一種符號(hào)標(biāo)記方法)原子符號(hào)。 從邏輯上講,程序員不會(huì)輕易將兩個(gè)不同類型的變量進(jìn)行比較運(yùn)算。而以前流行的這種修改方式顯然是犯了這種邏輯錯(cuò)誤的。筆者猜想,之所以用Intel Fortran進(jìn)行編譯而沒(méi)有出現(xiàn)報(bào)錯(cuò),可能是因?yàn)镮ntel Fotran能自動(dòng)將不同類型的變量轉(zhuǎn)化成同一種類型之后再進(jìn)行比較,同時(shí)它也應(yīng)該還能自行將布爾型變量視作0和1進(jìn)行處理。 搞清楚以上關(guān)系之后,筆者進(jìn)行了如下修改: 8427 行 IF(MORB.EQ.0.AND.NAMEAT(IATNO(NCTR.NE.'gh') THEN 改為 IF(MORB.EQ.0.AND.NAMEAT(IATNO(NCTR)).NE.'gh') THEN 15421 行 IF(MORB.EQ.0.AND.NAMEAT(IATNO(NCTR).NE.'gh') THEN 改為 IF(MORB.EQ.0.AND.NAMEAT(IATNO(NCTR)).NE.'gh') THEN 按理說(shuō)這樣才是符合邏輯的。 筆者接著使用./comp gmsnbo >& gmsnbo.src &命令進(jìn)行g(shù)msnbo的編譯。結(jié)果仍人在這兩個(gè)地方出現(xiàn)同樣的報(bào)錯(cuò)信息。 但是這次的提示是——NAMEAT處為INTEGER(8),不能與CHARACTER*2型的'gh'進(jìn)行比較。 這次筆者覺(jué)得很困惑,照例說(shuō),NAMEAT應(yīng)該是返回CHARACTER型結(jié)果的。于是找到了FUNCTION NAMEAT看看。 結(jié)果發(fā)現(xiàn),其實(shí)NAMEAT函數(shù)中的NAME、IGHOST、BLANK變量預(yù)置的數(shù)據(jù)中根也本沒(méi)有包含'gh'。 所以,筆者在gmsnbo.src中搜索了'gh'這個(gè)關(guān)鍵字,并發(fā)現(xiàn)了一個(gè)名為CHARAT的函數(shù),返回的是字符串,其中有個(gè)變量IGHOST預(yù)置了字符串'gh'。 筆者再次查閱手冊(cè),發(fā)現(xiàn)函數(shù)CHARAT(IZ)返回的是對(duì)應(yīng)于原子序數(shù)IZ的原子符號(hào)(比如CHARAT(2)返回的是字符串He)。 基于以上發(fā)現(xiàn),筆者大膽地做了如下修改: IF(MORB.EQ.0.AND.NAMEAT(IATNO(NCTR.NE.'gh') THEN 改為 IF(MORB.EQ.0.AND.CHARAT(IATNO(NCTR)).NE.'gh') THEN 15421 行 IF(MORB.EQ.0.AND.NAMEAT(IATNO(NCTR).NE.'gh') THEN 改為 IF(MORB.EQ.0.AND.CHARAT(IATNO(NCTR)).NE.'gh') THEN 并各在這兩行代碼所在的子例程(SUBROUTINE)的變量申明部分加上如下內(nèi)容(其實(shí)應(yīng)該不用加的,因?yàn)槁暶骱瘮?shù)時(shí)已經(jīng)帶上屬性了,但是不加這兩行貌似回報(bào)錯(cuò)): CHARACTER*2,EXTERNAL :: CHARAT 注意:關(guān)于GAMESS源碼的一些修改可以參考以前的改法,但是可能就是行數(shù)對(duì)不上了。這些在我以前的帖子中有提到(見(jiàn)此文開頭鏈接)。 3.tinker源碼的修改: 以前tinker源碼是不需要修改的。但是使用gfortran之后,如果不做修改,就會(huì)無(wú)法編譯Libtad模塊。這個(gè)錯(cuò)誤出現(xiàn)在fortran的內(nèi)置獲取系統(tǒng)時(shí)間的函數(shù)idate的調(diào)用上,在tinker源碼Libtad.f中,直接使用的是idate(year,month,day)。這樣,gfortran就會(huì)提示你,idate函數(shù)的參數(shù)太多。 筆者查閱了gfortran的編程手冊(cè)之后,發(fā)現(xiàn)gfortran中idate函數(shù)其實(shí)是把參數(shù)換成了一個(gè)含有3個(gè)成員的一維數(shù)組。知道這點(diǎn)就很容易修改了,具體修改方式如下: 另外申明一個(gè)變量:integer date(3) 然后將idate(year,month,day)換成idate(date) 再寫幾個(gè)賦值語(yǔ)句就可以了:year=date(1) month=date(2) day=date(3) 至此,所有新的修改都已經(jīng)說(shuō)明完畢?梢园匆郧暗霓k法,編譯,link,運(yùn)行tests里邊的算例了。 PS:沒(méi)有測(cè)試過(guò)gmsnbo。筆者不是計(jì)算專業(yè)出身,現(xiàn)在也不做理論計(jì)算,純屬業(yè)余瞎搗鼓。其實(shí)發(fā)現(xiàn)gmsnbo的源碼很多是要改的。但是不知道從哪里下手好。需要閱讀手冊(cè),需要認(rèn)真讀源碼,但是筆者時(shí)間不夠,那些源碼又寫得有些雜亂,所以筆者也就不了了之了。以上是筆者花了4個(gè)晚上搗鼓的一點(diǎn)東西。也許根本就沒(méi)用,但是大家可以試一試,看看會(huì)有什么結(jié)果。 [ 來(lái)自科研家族 木蟲量化 ] [ Last edited by 寒雨人生 on 2012-10-12 at 09:43 ] |
量化軟件 |
鐵桿木蟲 (知名作家)
| 4 | 1/1 | 返回列表 |
| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[考研] 資源與環(huán)境 調(diào)劑申請(qǐng)(333分) +5 | holy J 2026-03-21 | 5/250 |
|
|---|---|---|---|---|
|
[考研] 初試 317 +7 | 半拉月丙 2026-03-20 | 7/350 |
|
|
[考研] 326求調(diào)劑 +4 | mlpqaz03 2026-03-15 | 4/200 |
|
|
[考研] 求調(diào)劑 +4 | 要好好無(wú)聊 2026-03-21 | 4/200 |
|
|
[考研] 求助 +5 | 夢(mèng)里的無(wú)言 2026-03-21 | 6/300 |
|
|
[考研] 生物學(xué)一志愿985,分?jǐn)?shù)349求調(diào)劑 +3 | zxts12 2026-03-21 | 3/150 |
|
|
[考研] 08工科 320總分 求調(diào)劑 +6 | 梨花珞晚風(fēng) 2026-03-17 | 6/300 |
|
|
[考研] 265求調(diào)劑 +3 | Jack?k?y 2026-03-17 | 3/150 |
|
|
[考研] 求調(diào)劑 +3 | Ma_xt 2026-03-17 | 3/150 |
|
|
[考研] 一志愿武理材料305分求調(diào)劑 +6 | 想上岸的鯉魚 2026-03-18 | 7/350 |
|
|
[考研] 294求調(diào)劑材料與化工專碩 +15 | 陌の森林 2026-03-18 | 15/750 |
|
|
[考研] 藥學(xué)383 求調(diào)劑 +3 | 藥學(xué)chy 2026-03-15 | 5/250 |
|
|
[考研] 295材料求調(diào)劑,一志愿武漢理工085601專碩 +5 | Charlieyq 2026-03-19 | 5/250 |
|
|
[考研] 086500 325 求調(diào)劑 +3 | 領(lǐng)帶小熊 2026-03-19 | 3/150 |
|
|
[考研] 281求調(diào)劑(0805) +14 | 煙汐憶海 2026-03-16 | 25/1250 |
|
|
[考研] 085601材料工程專碩求調(diào)劑 +10 | 慕寒mio 2026-03-16 | 10/500 |
|
|
[考研] 材料與化工求調(diào)劑 +7 | 為學(xué)666 2026-03-16 | 7/350 |
|
|
[考研] 0854可跨調(diào)劑,一作一項(xiàng)核心論文五項(xiàng)專利,省、國(guó)級(jí)證書40+數(shù)一英一287 +8 | 小李0854 2026-03-16 | 8/400 |
|
|
[考研]
|
zhouzhen654 2026-03-16 | 3/150 |
|
|
[考研] 一志愿211 0703方向310分求調(diào)劑 +3 | 努力奮斗112 2026-03-15 | 3/150 |
|