File: chcc.rst

package info (click to toggle)
openmolcas 25.02-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 170,204 kB
  • sloc: f90: 498,088; fortran: 139,779; python: 13,587; ansic: 5,745; sh: 745; javascript: 660; pascal: 460; perl: 325; makefile: 17
file content (384 lines) | stat: -rw-r--r-- 14,349 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
.. index::
   single: Program; CHCC
   single: CHCC

.. _sec\:chcc:

:program:`chcc`
===============

.. only:: html

  .. contents::
     :local:
     :backlinks: none

.. xmldoc:: <MODULE NAME="CHCC">
            %%Description:
            <HELP>
            The CHCC is a Closed-Shell Coupled-Clusters Singles and Doubles program
            based exclusively on the Cholesky (or RI) decomposed 2-electron integrals aimed
            towards calculation of large system. Use of point-group symmetry is not
            implemented.
            It requires RUNFILE from the SCF module and Cholesky vectors from SEWARD.
            </HELP>

The :program:`CHCC` is a Closed-Shell Coupled-Clusters Singles and Doubles
program based exclusively on the Cholesky (or RI) decomposed 2-electron integrals
aimed towards calculation of large systems on highly parallel architectures. Use of
point-group symmetry is not implemented. Main advantage compared to the
:program:`CCSDT` module in |molcas| is in its more efficient parallelization and
dramatically lowered memory (and eventually disk) requirements.

.. For further details the reader is referred to :numref:`TUT:sec:chcc`.

.. index::
   pair: Dependencies; CHCC

.. _sec\:chcc_dependencies:

Dependencies
------------

:program:`CHCC` requires a previous run of the RHF :program:`SCF` program
to produce molecular orbitals and orbital energies stored in :file:`RUNFILE`.
The :program:`SCF` program (as well as :program:`SEWARD`) must be run
in Cholesky/RI mode.

The algorithm used for almost complete elimination of the :program:`CHCC`
limits in calculated system size due to the computer memory bottleneck relies
on blocking of the virtual orbitals. Number of blocks (further also referred to as the
"large" segmentation, :kword:`LARGe`), :math:`N'`, should be as small as
possible, because increasing of the segmentation brings in more CPU and I/O overhead.
Furthermore, blocking can be "fine tuned" by, so called, "small" segmentation (:kword:`SMALl`), :math:`N''`,
which affects only the (typically) most demanding :math:`O^2V^4` scaling
terms. The "large" segmentation can range from 1 to 32, "small" segmentation from 1 to 8, but
their product, i.e. "large" |x| "small" must be no more than 64.

Selected blocking also determines the
number of "independent" parallel tasks that must be executed in each iteration of
the CCSD equations. In other words, particular segmentation predetermines the optimal
number of computational nodes (i.e., if the best possible parallelization is desired).
If the requested "large" segmentation is :math:`N'`, then :math:`N'^2` terms scaling as
:math:`O^3V^3` and :math:`N'^2/2` terms scaling as :math:`O^2V^4` result.
Depending on which of these terms dominated in the calculations (:math:`O^3V^3`
is more demanding for systems with large number of occupied orbitals and rather small
basis set, while :math:`O^2V^4` dominated for relatively large basis sets,
i.e. large number of virtual orbitals), number of these task should be divisible by the number of
computational nodes for optimal performance. To make it simple, as a rule of thumb, :math:`N'^2/2`
should be divisible by the number of nodes, since the :math:`O^3V^3` are typically twice less
expensive then the :math:`O^2V^4` step. Otherwise, any reasonable (i.e. the number
of tasks is larger than the number of computational nodes, obviously) combination is allowed.

.. index::
   pair: Files; CHCC

.. _sec\:chcc_files:

Files
-----

Input files
...........

:program:`CHCC` will use the following input
files: :file:`CHVEC`, :file:`CHRED`, :file:`CHORST`, :file:`RUNFILE`,
and :file:`CHOR2F`
(for more information see :numref:`UG:sec:files_list`).

Output files
............

.. class:: filelist

:file:`L0xxxx`, :file:`L1xxxx`, :file:`L2xxxx`
  MO-transformed Cholesky vectors

:file:`T2xxxx`
  T2 :math:`(ij,a'b')` excitation amplitudes

:file:`RstFil`
  Communication file containing T1 amplitudes, restart informations, etc.

.. index::
   pair: Input; CHCC

.. _sec\:chcc_input:

Input
-----

The input for each module is preceded by its name like: ::

  &CHCC

Optional keywords

.. class:: keywordlist

:kword:`TITLe`
  This keyword is followed by one title line.

  .. xmldoc:: <KEYWORD MODULE="CHCC" NAME="TITLE" APPEAR="Title" KIND="STRINGS" SIZE="10" LEVEL="BASIC">
              %%Keyword: TITLe <basic>
              <HELP>
              Enter up to ten title lines. Do not put any keyword in the beginning of a title line.
              </HELP>
              </KEYWORD>

:kword:`FROZen`
  Integer on the following line specifies number of inactive occupied
  orbitals in the CCSD calculation. (Default=0)

  .. xmldoc:: <KEYWORD MODULE="CHCC" NAME="FROZ" APPEAR="Frozen orbitals" KIND="INT" LEVEL="BASIC" MIN_VALUE="0" DEFAULT_VALUE="0">
              %%Keyword: FROZen <basic>
              <HELP>
              Specifies number of inactive occupied orbitals in the CCSD procedure
              </HELP>
              </KEYWORD>

:kword:`DELEted`
  Integer on the following line specifies number of inactive virtual
  orbitals in the CCSD calculation. (Default=0)

  .. xmldoc:: <KEYWORD MODULE="CHCC" NAME="DELE" APPEAR="Deleted orbitals" KIND="INT" LEVEL="BASIC" MIN_VALUE="0" DEFAULT_VALUE="0">
              %%Keyword: DELEted <basic>
              <HELP>
              Specifies number of inactive virtual orbitals in the CCSD procedure
              </HELP>
              </KEYWORD>

:kword:`LARGe`
  Integer on the following line specifies the main segmentation of the virtual orbitals.
  Value must be between 1 (no segmentation) and 32. Product of Large and Small segmentation
  must be lower than 64. (Default=1)

  .. xmldoc:: <KEYWORD MODULE="CHCC" NAME="LARG" APPEAR="Large segmentation" KIND="INT" LEVEL="BASIC" MIN_VALUE="1" MAX_VALUE="32" DEFAULT_VALUE="1">
              %%Keyword: LARGe <basic>
              <HELP>
              Specifies the segmentation of virtual orbitals
              </HELP>
              </KEYWORD>

:kword:`SMALl`
  Integer on the following line specifies the auxiliary segmentation of the virtual orbitals.
  Value must be between 1 (no segmentation) and 8. Product of Large and Small segmentation
  must be lower than 64. Small segmentation doesn't generate extra parallel tasks.
  (Default=1)

  .. xmldoc:: <KEYWORD MODULE="CHCC" NAME="SMAL" APPEAR="Small segmentation" KIND="INT" LEVEL="BASIC" MIN_VALUE="1" MAX_VALUE="8" DEFAULT_VALUE="1">
              %%Keyword: SMALl <basic>
              <HELP>
              Specifies the auxiliary segmentation of virtual orbitals
              </HELP>
              </KEYWORD>

:kword:`CHSEgmentation`
  Integer on the following line specifies the block size of the auxiliary (Cholesky/RI)
  index. Value must be lower than the minimal dimension of the auxiliary index on each
  computational node. (Default=100)

  .. xmldoc:: <KEYWORD MODULE="CHCC" NAME="CHSE" APPEAR="Auxiliary block size" KIND="INT" LEVEL="BASIC" MIN_VALUE="1" DEFAULT_VALUE="100">
              %%Keyword: CHSEgmentation <basic>
              <HELP>
              Specifies the block size of auxiliary (Cholesky/RI) index
              </HELP>
              </KEYWORD>

:kword:`MHKEy`
  Integer on the following line specifies if library BLAS (MHKEy=1) or hard-coded
  fortran vector-vector, matrix-vector and matrix-matrix manipulation is used.
  (Default=1)

  .. xmldoc:: <KEYWORD MODULE="CHCC" NAME="MHKE" APPEAR="Use BLAS" KIND="INT" LEVEL="BASIC" MIN_VALUE="0" MAX_VALUE="1" DEFAULT_VALUE="1">
              %%Keyword: MHKEy <basic>
              <HELP>
              Specifies if BLAS libraries (=1) or hard-code fortran is used.
              </HELP>
              </KEYWORD>

:kword:`NOGEnerate`
  This keyword specifies that the pre-CCSD steps (regeneration of integrals from
  the Cholesky/RI vectors, etc.) are skipped.
  (Default=OFF)

  .. xmldoc:: <KEYWORD MODULE="CHCC" NAME="NOGE" APPEAR="Skip pre-CCSD steps" KIND="SINGLE" LEVEL="BASIC">
              %%Keyword: NOGEnerate <basic>
              <HELP>
              Pre-CCSD steps, like integrals generation, etc. are skipped.
              </HELP>
              </KEYWORD>

:kword:`ONTHefly`
  This keyword specifies that all integral types scaling steeper then :math:`O^2V^2`
  are generated "on-the-fly" from the Cholesky/RI vectors. Use of this keyword leads
  to dramatically savings of the disk resources, but leads to significant arithmetic
  overhead. Keywords "ONTHefly"
  and "PRECalculate" are mutually exclusive.
  (Default=OFF)

  .. xmldoc:: <SELECT MODULE="CHCC" NAME="INTEGRALS" APPEAR="Integrals" CONTAINS="ONTH,PREC">

  .. xmldoc:: <KEYWORD MODULE="CHCC" NAME="ONTH" APPEAR="On the fly" KIND="SINGLE" LEVEL="BASIC" EXCLUSIVE="PREC">
              %%Keyword: ONTHefly <basic>
              <HELP>
              Integrals with 3- and 4-virtual indexes are generated "on-the-fly".
              </HELP>
              </KEYWORD>

:kword:`PRECalculate`
  This keyword specifies that all integral are precalculated before the
  CCSD iterative procedure starts. Use of this keyword leads to significant
  consumption of the disk space, especially is single-processor runs.
  (Default=ON)

  .. xmldoc:: <KEYWORD MODULE="CHCC" NAME="PREC" APPEAR="Precalculate (default)" KIND="SINGLE" LEVEL="BASIC" EXCLUSIVE="ONTH">
              %%Keyword: PRECalculate <basic>
              <HELP>
              All integrals are precalculated prior to the CCSD iterations.
              </HELP>
              </KEYWORD>

  .. xmldoc:: </SELECT>

:kword:`NODIstribute`
  This keyword (in combination with the "PRECalculate" keyword) specifies that all
  integral are stored on each computational node. In case of all integrals being
  stored on each node, extra permutation symmetry can be applied, thus leading to
  significant savings of the disk space. However, in case of massively parallel runs
  (i.e. more than ~8 nodes), savings from keeping only subset of integrals
  required on particular node are more significant than savings due to permutational
  symmetry. (Default=OFF)

  .. xmldoc:: <KEYWORD MODULE="CHCC" NAME="NODI" APPEAR="No distribute" KIND="SINGLE" LEVEL="BASIC">
              %%Keyword: NODIstribute <basic>
              <HELP>
              All integrals are precalculated on all computational nodes.
              </HELP>
              </KEYWORD>

:kword:`JOINlkey`
  The parameter on the following line specifies, which algorithm is used for
  precalculation and of the integrals in parallel run. In parallel runs, :program:`SEWARD`
  produces AO Cholesky/RI vectors segmented in auxiliary index over
  parallel nodes. Depending on the network bandwidth and computational power
  of each node, different algorithms can lead to optimal performance.
  Following options are available:

  .. container:: list

    0 --- None: no cumulation of Cholesky/RI vectors is needed (debug only).

    1 --- Minimal: Cholesky/RI vectors are cumulated prior to integral precalculation. Low network bandwidth is required.

    2 --- Medium: :math:`O^2V^2` integrals are generated from local Cholesky/RI vectors and cumulated along with the Cholesky/RI vectors afterwards.
    Other integrals are calculated from cumulated intermediates.

    3 --- Full: All integrals are generated from local Cholesky/RI vectors and cumulated afterwards. High network bandwidth is required.

  (Default=2)

  .. xmldoc:: <KEYWORD MODULE="CHCC" NAME="JOIN" APPEAR="Parallel integral generation" KIND="CHOICE" LIST="0: None (debug),1: Minimal,2: Medium,3: Full" LEVEL="BASIC" DEFAULT_VALUE="2">
              <HELP>
              Choose the type of parallel integral generation
              </HELP>
              %%Keyword: JOINlkey <basic>
              Sets the type of parallel integral generation

              0 -- None (debug)
              1 -- Minimal (low network bandwdith required)
              2 -- Medium
              3 -- Full (high network bandwidth required)
              </KEYWORD>

:kword:`MAXIterations`
  Integer on the following line specifies maximum number of CCSD iteration
  (Default=40)

  .. xmldoc:: <KEYWORD MODULE="CHCC" NAME="MAXI" APPEAR="Maximum iterations" KIND="INT" LEVEL="BASIC" MIN_VALUE="0" DEFAULT_VALUE="40">
              %%Keyword: MAXIterations <basic>
              <HELP>
              Maximum number of CCSD iterations.
              </HELP>
              </KEYWORD>

:kword:`RESTart`
  This keyword specifies that CCSD calculation is restarted from previous
  run. This keyword is currently under development,
  thus disabled. (Default=OFF)

  .. xmldoc:: <KEYWORD MODULE="CHCC" NAME="REST" APPEAR="Restart" KIND="SINGLE" LEVEL="BASIC">
              %%Keyword: RESTart <basic>
              <HELP>
              Restart from previous run. Currently disabled.
              </HELP>
              </KEYWORD>

:kword:`THREshold`
  Double precision floating point number on the following line specifies
  the convergence threshold for the CCSD correlation energy.
  (Default=1.0d-6)

  .. xmldoc:: <KEYWORD MODULE="CHCC" NAME="THRE" APPEAR="Convergence threshold" KIND="REAL" LEVEL="BASIC" MIN_VALUE="0.0" DEFAULT_VALUE="1.0d-6">
              %%Keyword: THREshold <basic>
              <HELP>
              Convergence threshold for the CCSD correlation energy.
              </HELP>
              </KEYWORD>

:kword:`PRINtkey`
  The integer on the following line specifies the print level in output

  .. container:: list

    1  --- Minimal

    2  --- Minimal + timings of each step of the CCSD iterations

    10 --- Debug

  (Default=1)

  .. xmldoc:: <KEYWORD MODULE="CHCC" NAME="PRIN" APPEAR="Print level" KIND="CHOICE" LIST="1: Minimal,2: Minimal + timings,10: Debug" LEVEL="ADVANCED" DEFAULT_VALUE="1">
              <HELP>
              Choose the print level
              </HELP>
              </KEYWORD>
              %%Keyword: PRINtkey <advanced>
              Sets the print level

              1  -- Minimal
              2  -- Minimal + timings
              10 -- Debug

:kword:`END of input`
  This keyword indicates that there is no more input
  to be read.

::

  &CHCC &END
  Title
  Benzene dimer
  Frozen
  12
  Deleted
  0
  Large
  4
  Small
  2
  CHSEgment
  100
  Precalculate
  Join
  2
  Maxiter
  50
  Threshold
  1.0d-6
  Print
  2
  End of Input

.. xmldoc:: </MODULE>