דבר ראשון, הייתי בודק את הקוד שלך: אין סיבה ש -400 אינטגרלים ייחודיים ייקחו שעה, אפילו עם היישום הכי נאיבי. אתה מחשב בקצב של אינטגרל כל עשר שניות. אמנם אני מסכים עם כל ההערות המצביעות על הגברת ההקבלה, אך אני חושב שקוד סקלר יעיל חשוב יותר. מדוע להגדיל קוד לא יעיל? בהתחשב ב- GPUs זו חיה שלמה אחרת, ומהבעיות שהחברים שלי הביעו בניסיון לתכנת אותם הייתי ממליץ להימנע מהם בינתיים.
הדבר הטוב ביותר שאתה יכול לעשות הוא לנצל סימטריה מולקולרית. . אם כי ראש: זה לא יתקן הכל, מכיוון שמולקולות מעניינות רבות חסרות סימטריה. אבל לגבי מתאן, כמו שניסית, זה אמור לעזור לטון. כמובן, זה לא פשוט כמו לחפש אלגוריתם כלשהו, כי בהתאם לתוכנית שלך אתה צריך לסובב את כיווני הגרעין כדי להיות סימטרי, או לפתח שגרות לזיהוי סימטריה של קבוצות נקודות וכו '. עם זאת, יש - - ככל הידוע לי --- שתי דרכים עיקריות לניצול סימטריה של קבוצות נקודות עבור אינטגרלים. הראשון הוא ליצור פונקציות בסיס המותאמות לסימטריה, כך שמערכת הבסיס שלך היא סימטרית, כלומר פונקציית הגל שלך / אינטגרלים / מטריצת Fock / מה שיהיה גם סימטרי. ארני דוידסון עשה זאת בשנות השבעים. התייחסות מעט יותר מודרנית של הלגייקר וטיילור ניתנת כאן. הדרכת המבנה האלקטרוני של דניאל קרופורד בוחנת זאת גם (זה כתוב היטב --- מבוא נהדר).
הדרך האחרת בה אתה יכול לעשות את זה, ואני מאמין שזה פופולרי יותר, היא ליצור אינטגרלים ייחודיים לסימטריה ואז לבנות מטריצת Fock חלקית רק כדי לטפל בסימטריה מאוחר יותר. אם אתה רואה משהו כמו "יצירת רשימה קטנה" בפלט של תוכנית המבנה האלקטרוני המועדפת עליך, זה כנראה מה שהיא עושה. שיטה זו מאפשרת סינון אינטגרלי בצורה יעילה יותר, אני מאמין. Dupuis ו- King עשו זאת בסוף שנות השבעים, בהתבסס על עבודות קודמות של Dacre ו- Elder. אלה הפניות הסטנדרטיות שתמצאו. יכול להיות שיש כמה עבודות אחרונות שאני לא מודע לה. הבעיה של סימטריה קבוצתית נקודתית נפתרה ביעילות בשנת 1980.
כמובן, למולקולות מעניינות רבות אין סימטריה לנצל, ולכן סימטריה לא תתקן את כל הבעיות שלך. השוויון של שוורץ מטופל היטב ב תיאוריית המבנה האלקטרוני המולקולרי (למעשה, רוב תורת המבנה האלקטרוני זוכה להתייחסות באותו ספר ורוד ומקסים). אם לא בדקת זאת, אנא עשה זאת. אני חושב שזה יענה על רבות משאלותיך לגבי אופן הפעולה של קודים מודרניים.
אני לא רוצה לחזור על התשובות האחרות (ג'וף נתן לך גם את המאמרים שהצעתי), אז אסיים עם שתי הפניות פחות שקולות. ראשית, יש ספר מדהים (אך זעיר!) שנקרא מחשוב מקביל בכימיה קוונטית המציג את היסודות לקוד יעיל כולל הערכה אינטגרלית. זה לא קשה מדי לקרוא, ומצאתי שהעבודה על MP2 המקומית די מעניינת. לעתים קרובות אני מופתע שיותר אנשים לא שמעו על זה. המקום האחר בו הייתי בודק הוא חבילת LibInt של אד ואלייב. הוא מתכנת די מוכשר, והוא משמש בחבילות מודרניות רבות כמו Psi ו- MPQC ו- ORCA, שלא לדבר על חינם להורדה ולשימוש בחינם. חלק מהעמיתים לעבודה שלי שיחקו עם זה בקוד מבנה אלקטרוני "תוצרת בית" משלהם, ומדברים עליו מאוד. המדריך למשתמש הוא די מועיל בהבנת הערכה אינטגרלית. הוא כתב גם כמה תרגילים והדרכות, שעשויים להיות לך שימושיים.