~ubuntu-branches/ubuntu/quantal/psicode/quantal

« back to all changes in this revision

Viewing changes to src/bin/cclambda/cclambda.c

  • Committer: Bazaar Package Importer
  • Author(s): Michael Banck
  • Date: 2006-09-10 14:01:33 UTC
  • Revision ID: james.westby@ubuntu.com-20060910140133-ib2j86trekykfsfv
Tags: upstream-3.2.3
ImportĀ upstreamĀ versionĀ 3.2.3

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
**  CCLAMBDA: Program to calculate the coupled-cluster lambda vector.
 
3
*/
 
4
 
 
5
#include <stdio.h>
 
6
#include <stdlib.h>
 
7
#include <string.h>
 
8
#include <libipv1/ip_lib.h>
 
9
#include <libpsio/psio.h>
 
10
#include <libciomr/libciomr.h>
 
11
#include <libdpd/dpd.h>
 
12
#include <psifiles.h>
 
13
#include "globals.h"
 
14
 
 
15
/* Function prototypes */
 
16
void init_io(int argc, char *argv[]);
 
17
void title(void);
 
18
void get_moinfo(void);
 
19
void get_params(void);
 
20
void cleanup(void);
 
21
void init_amps(int L_irr, int state__index);
 
22
double pseudoenergy(int L_irr);
 
23
void exit_io(void);
 
24
void G_build(int L_irr);
 
25
void L1_build(int L_irr, int root_L_irr);
 
26
void L2_build(int L_irr, int root_L_irr);
 
27
void sort_amps(int L_irr);
 
28
void Lsave(int L_irr);
 
29
void Lnorm(int L_irr, int root_L_irr);
 
30
void Lmag(void);
 
31
void update(void);
 
32
int converged(int L_irr);
 
33
int **cacheprep_rhf(int level, int *cachefiles);
 
34
int **cacheprep_uhf(int level, int *cachefiles);
 
35
void cachedone_rhf(int **cachelist);
 
36
void cachedone_uhf(int **cachelist);
 
37
void denom(int L_irr, int e_index);
 
38
void overlap(int L_irr);
 
39
void Lsave_index(int L_irr, int root_L_irr);
 
40
void L_to_LAMPS(int L_irr);
 
41
extern void check_ortho(void);
 
42
void L_zero(int L_irr);
 
43
 
 
44
int main(int argc, char *argv[])
 
45
{
 
46
  int done=0, i, L_irr, root_L_irr;
 
47
  int **cachelist, *cachefiles;
 
48
  dpdfile2 L1;
 
49
 
 
50
  init_io(argc, argv); /* parses command-line arguments */
 
51
  title();
 
52
  moinfo.iter=0;
 
53
  get_moinfo();
 
54
  get_params();
 
55
 
 
56
  cachefiles = init_int_array(PSIO_MAXUNIT);
 
57
 
 
58
  if(params.ref == 0 || params.ref == 1) { /** RHF or ROHF **/
 
59
 
 
60
    cachelist = cacheprep_rhf(params.cachelev, cachefiles);
 
61
 
 
62
    dpd_init(0, moinfo.nirreps, params.memory, 0, cachefiles, cachelist, NULL,
 
63
             2, moinfo.occpi, moinfo.occ_sym, moinfo.virtpi, moinfo.vir_sym);
 
64
 
 
65
    if(params.aobasis) { /* Set up new DPD for AO-basis algorithm */
 
66
      dpd_init(1, moinfo.nirreps, params.memory, 0, cachefiles, cachelist, NULL, 
 
67
               2, moinfo.occpi, moinfo.orbsym, moinfo.orbspi, moinfo.orbsym);
 
68
      dpd_set_default(0);
 
69
    }
 
70
 
 
71
  }
 
72
  else if(params.ref == 2) { /** UHF **/
 
73
 
 
74
    cachelist = cacheprep_uhf(params.cachelev, cachefiles);
 
75
 
 
76
    dpd_init(0, moinfo.nirreps, params.memory, 0, cachefiles, 
 
77
             cachelist, NULL, 4, moinfo.aoccpi, moinfo.aocc_sym, moinfo.avirtpi,
 
78
             moinfo.avir_sym, moinfo.boccpi, moinfo.bocc_sym, moinfo.bvirtpi, moinfo.bvir_sym);
 
79
 
 
80
    if(params.aobasis) { /* Set up new DPD's for AO-basis algorithm */
 
81
      dpd_init(1, moinfo.nirreps, params.memory, 0, cachefiles, cachelist, NULL, 
 
82
               4, moinfo.aoccpi, moinfo.aocc_sym, moinfo.orbspi, moinfo.orbsym, 
 
83
               moinfo.boccpi, moinfo.bocc_sym, moinfo.orbspi, moinfo.orbsym);
 
84
      dpd_set_default(0);
 
85
    }
 
86
  }
 
87
 
 
88
 
 
89
  if(params.local) local_init();
 
90
 
 
91
  for (L_irr=0; L_irr<moinfo.nirreps; ++L_irr) {
 
92
    psio_close(CC_TMP,0);
 
93
    psio_close(CC_TMP1,0);
 
94
    psio_close(CC_TMP2,0);
 
95
    psio_close(CC_LAMBDA,0);
 
96
    psio_open(CC_TMP,0);
 
97
    psio_open(CC_TMP1,0);
 
98
    psio_open(CC_TMP2,0);
 
99
    psio_open(CC_LAMBDA,0);
 
100
    for (root_L_irr=0; root_L_irr < params.Ls_per_irrep[L_irr]; ++root_L_irr) {
 
101
      fprintf(outfile,"\tSymmetry of excited state: %s\n", moinfo.labels[moinfo.sym^L_irr]);
 
102
      fprintf(outfile,"\tSymmetry of right eigenvector: %s\n",moinfo.labels[L_irr]);
 
103
 
 
104
      init_amps(L_irr, root_L_irr);
 
105
 
 
106
      fprintf(outfile, "\n\t          Solving Lambda Equations\n");
 
107
      fprintf(outfile, "\t          ------------------------\n");
 
108
      fprintf(outfile, "\tIter     PseudoEnergy or Norm         RMS  \n");
 
109
      fprintf(outfile, "\t----     ---------------------     --------\n");
 
110
 
 
111
      denom(L_irr, root_L_irr); /* second argument determines E used */
 
112
 
 
113
      moinfo.lcc = pseudoenergy(L_irr);
 
114
      update();
 
115
 
 
116
      for(moinfo.iter=1 ; moinfo.iter <= params.maxiter; moinfo.iter++) {
 
117
        sort_amps(L_irr);
 
118
        G_build(L_irr);
 
119
 
 
120
        /* must zero New L before adding RHS */
 
121
        L_zero(L_irr);
 
122
        L1_build(L_irr,root_L_irr);
 
123
        L2_build(L_irr,root_L_irr);
 
124
  
 
125
        if(converged(L_irr)) {
 
126
          done = 1;  /* Boolean for convergence */
 
127
          Lsave(L_irr); /* copy "New L" to "L" */
 
128
          moinfo.lcc = pseudoenergy(L_irr);
 
129
          update();
 
130
          if (!params.ground) {
 
131
            Lnorm(L_irr, root_L_irr); /* normalize against R */
 
132
            Lsave_index(L_irr, root_L_irr); /* put Ls in unique location */
 
133
          }
 
134
          else {
 
135
            L_to_LAMPS(L_irr);
 
136
          }
 
137
         /* sort_amps(); to be done by later functions */
 
138
          fprintf(outfile, "\n\tIterations converged.\n");
 
139
          fflush(outfile);
 
140
          break;
 
141
        }
 
142
  
 
143
        diis(moinfo.iter, L_irr);
 
144
        Lsave(L_irr);
 
145
        moinfo.lcc = pseudoenergy(L_irr);
 
146
        update();
 
147
      }
 
148
      fprintf(outfile, "\n");
 
149
      if(!done) {
 
150
        fprintf(outfile, "\t ** Lambda not converged to %2.1e ** \n",
 
151
            params.convergence);
 
152
        fflush(outfile);
 
153
        dpd_close(0);
 
154
        cleanup();
 
155
        exit_io();
 
156
        exit(PSI_RETURN_FAILURE);
 
157
      }
 
158
      if (params.ground) {
 
159
        overlap(L_irr);
 
160
        overlap_LAMPS(L_irr);
 
161
      }
 
162
    }
 
163
  }
 
164
 
 
165
  if(params.local) local_done();
 
166
 
 
167
  if (!params.ground) check_ortho();
 
168
 
 
169
  dpd_close(0);
 
170
 
 
171
  if(params.ref == 2) cachedone_uhf(cachelist);
 
172
  else cachedone_rhf(cachelist);
 
173
  free(cachefiles);
 
174
 
 
175
  cleanup(); 
 
176
  exit_io();
 
177
  exit(PSI_RETURN_SUCCESS);
 
178
}
 
179
 
 
180
/* parse command line arguments */
 
181
void init_io(int argc, char *argv[])
 
182
{
 
183
  int i, num_unparsed;
 
184
  extern char *gprgid();
 
185
  char *lbl, *progid, *argv_unparsed[100];
 
186
 
 
187
  progid = (char *) malloc(strlen(gprgid())+2);
 
188
  sprintf(progid, ":%s",gprgid());
 
189
 
 
190
  params.ground = 1;
 
191
  for (i=1, num_unparsed=0; i<argc; ++i) {
 
192
    if (!strcmp(argv[i],"--excited")) {
 
193
      params.ground = 0;
 
194
    }
 
195
    else {
 
196
      argv_unparsed[num_unparsed++] = argv[i];
 
197
    }
 
198
  }
 
199
 
 
200
  psi_start(num_unparsed, argv_unparsed, 0);
 
201
  ip_cwk_add(":INPUT");
 
202
  ip_cwk_add(progid);
 
203
  free(progid);
 
204
 
 
205
  ip_cwk_add(":CCEOM");
 
206
 
 
207
  tstart(outfile);
 
208
  psio_init();
 
209
 
 
210
  for(i=CC_MIN; i <= CC_MAX; i++) psio_open(i,1);
 
211
 
 
212
  if (params.ground)
 
213
    params.L0 = 1.0;
 
214
  else
 
215
    params.L0 = 0.0;
 
216
 
 
217
}
 
218
 
 
219
void title(void)
 
220
{
 
221
  fprintf(outfile, "\n");
 
222
  fprintf(outfile, "\t\t\t**************************\n");
 
223
  fprintf(outfile, "\t\t\t*        CCLAMBDA        *\n");
 
224
  fprintf(outfile, "\t\t\t**************************\n");
 
225
  fprintf(outfile, "\n");
 
226
}
 
227
 
 
228
void exit_io(void)
 
229
{
 
230
  int i;
 
231
 
 
232
  /* Close all dpd data files here */
 
233
  for(i=CC_MIN; i <= CC_MAX; i++) psio_close(i,1);
 
234
 
 
235
  psio_done();
 
236
  tstop(outfile);
 
237
  psi_stop();
 
238
}
 
239
 
 
240
char *gprgid()
 
241
{
 
242
   char *prgid = "CCLAMBDA";
 
243
 
 
244
   return(prgid);
 
245
}
 
246
 
 
247
/* put copies of L for excited states in LAMPS with irrep and index label */
 
248
void Lsave_index(int L_irr, int root_L_irr) {
 
249
  dpdfile2 L1;
 
250
  dpdbuf4 L2, LIjAb, LIjbA;
 
251
  char L1A_lbl[32], L1B_lbl[32], L2AA_lbl[32], L2BB_lbl[32], L2AB_lbl[32];
 
252
  char lbl[32];
 
253
 
 
254
  sprintf(L1A_lbl, "LIA %d %d", L_irr, root_L_irr);
 
255
  sprintf(L1B_lbl, "Lia %d %d", L_irr, root_L_irr);
 
256
  sprintf(L2AA_lbl, "LIJAB %d %d", L_irr, root_L_irr);
 
257
  sprintf(L2BB_lbl, "Lijab %d %d", L_irr, root_L_irr);
 
258
  sprintf(L2AB_lbl, "LIjAb %d %d", L_irr, root_L_irr);
 
259
 
 
260
  if(params.ref == 0 || params.ref == 1) { /** RHF/ROHF **/
 
261
    dpd_file2_init(&L1, CC_OEI, L_irr, 0, 1, "LIA");
 
262
    dpd_file2_copy(&L1, CC_OEI, L1A_lbl);
 
263
    dpd_file2_close(&L1);
 
264
    dpd_file2_init(&L1, CC_OEI, L_irr, 0, 1, "Lia");
 
265
    dpd_file2_copy(&L1, CC_OEI, L1B_lbl);
 
266
    dpd_file2_close(&L1);
 
267
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB");
 
268
    dpd_buf4_copy(&L2, CC_LAMPS, L2AA_lbl);
 
269
    dpd_buf4_close(&L2);
 
270
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "Lijab");
 
271
    dpd_buf4_copy(&L2, CC_LAMPS, L2BB_lbl);
 
272
    dpd_buf4_close(&L2);
 
273
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb");
 
274
    dpd_buf4_copy(&L2, CC_LAMPS, L2AB_lbl);
 
275
    dpd_buf4_close(&L2);
 
276
  }
 
277
  else if(params.ref == 2) { /** UHF **/
 
278
    dpd_file2_init(&L1, CC_OEI, L_irr, 0, 1, "LIA");
 
279
    dpd_file2_copy(&L1, CC_OEI, L1A_lbl);
 
280
    dpd_file2_close(&L1);
 
281
    dpd_file2_init(&L1, CC_OEI, L_irr, 2, 3, "Lia");
 
282
    dpd_file2_copy(&L1, CC_OEI, L1B_lbl);
 
283
    dpd_file2_close(&L1);
 
284
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB");
 
285
    dpd_buf4_copy(&L2, CC_LAMPS, L2AA_lbl);
 
286
    dpd_buf4_close(&L2);
 
287
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 12, 17, 12, 17, 0, "Lijab");
 
288
    dpd_buf4_copy(&L2, CC_LAMPS, L2BB_lbl);
 
289
    dpd_buf4_close(&L2);
 
290
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb");
 
291
    dpd_buf4_copy(&L2, CC_LAMPS, L2AB_lbl);
 
292
    dpd_buf4_close(&L2);
 
293
  }
 
294
 
 
295
  if (params.ref == 0) { /** RHF for those codes that can use them **/
 
296
    dpd_buf4_init(&LIjAb, CC_LAMPS, L_irr, 0, 5, 0, 5, 0, L2AB_lbl);
 
297
    dpd_buf4_sort(&LIjAb, CC_TMP, pqsr, 0, 5, "LIjbA");
 
298
    sprintf(lbl, "2LIjAb - LIjbA %d %d", L_irr, root_L_irr);
 
299
    dpd_buf4_copy(&LIjAb, CC_LAMPS, lbl);
 
300
    dpd_buf4_close(&LIjAb);
 
301
 
 
302
    sprintf(lbl, "2LIjAb - LIjbA %d %d", L_irr, root_L_irr);
 
303
    dpd_buf4_init(&LIjAb, CC_LAMPS, L_irr, 0, 5, 0, 5, 0, lbl);
 
304
    dpd_buf4_scm(&LIjAb, 2.0);
 
305
    dpd_buf4_init(&LIjbA, CC_TMP, L_irr, 0, 5, 0, 5, 0, "LIjbA");
 
306
    dpd_buf4_axpy(&LIjbA, &LIjAb, -1.0);
 
307
    dpd_buf4_close(&LIjbA);
 
308
    dpd_buf4_close(&LIjAb);
 
309
  }
 
310
 
 
311
/* also put copy of L1 in LAMPS - RAK thinks this is better organization */
 
312
  if(params.ref == 0 || params.ref == 1) { /** RHF/ROHF **/
 
313
    dpd_file2_init(&L1, CC_OEI, L_irr, 0, 1, "LIA");
 
314
    dpd_file2_copy(&L1, CC_LAMPS, L1A_lbl); 
 
315
    dpd_file2_close(&L1);
 
316
    dpd_file2_init(&L1, CC_OEI, L_irr, 0, 1, "Lia");
 
317
    dpd_file2_copy(&L1, CC_LAMPS, L1B_lbl);
 
318
    dpd_file2_close(&L1);
 
319
  }
 
320
  else if(params.ref == 2) { /** UHF **/
 
321
    dpd_file2_init(&L1, CC_OEI, L_irr, 0, 1, "LIA");
 
322
    dpd_file2_copy(&L1, CC_LAMPS, L1A_lbl);
 
323
    dpd_file2_close(&L1);
 
324
    dpd_file2_init(&L1, CC_OEI, L_irr, 2, 3, "Lia");
 
325
    dpd_file2_copy(&L1, CC_LAMPS, L1B_lbl);
 
326
    dpd_file2_close(&L1);
 
327
  }
 
328
  return;
 
329
}
 
330
 
 
331
/* just used for ground state */
 
332
void L_to_LAMPS(int L_irr) {
 
333
  dpdfile2 L1;
 
334
  dpdbuf4 L2, LIjAb, LIjbA;
 
335
 
 
336
  if(params.ref == 0 || params.ref == 1) { /** RHF/ROHF **/
 
337
    dpd_file2_init(&L1, CC_OEI, L_irr, 0, 1, "LIA");
 
338
    dpd_file2_copy(&L1, CC_LAMPS, "LIA");
 
339
    dpd_file2_close(&L1);
 
340
    dpd_file2_init(&L1, CC_OEI, L_irr, 0, 1, "Lia");
 
341
    dpd_file2_copy(&L1, CC_LAMPS, "Lia");
 
342
    dpd_file2_close(&L1);
 
343
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB");
 
344
    dpd_buf4_copy(&L2, CC_LAMPS, "LIJAB");
 
345
    dpd_buf4_close(&L2);
 
346
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "Lijab");
 
347
    dpd_buf4_copy(&L2, CC_LAMPS, "Lijab");
 
348
    dpd_buf4_close(&L2);
 
349
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb");
 
350
    dpd_buf4_copy(&L2, CC_LAMPS, "LIjAb");
 
351
    dpd_buf4_close(&L2);
 
352
  }
 
353
  else if(params.ref == 2) { /** UHF **/
 
354
    dpd_file2_init(&L1, CC_OEI, L_irr, 0, 1, "LIA");
 
355
    dpd_file2_copy(&L1, CC_OEI, "LIA");
 
356
    dpd_file2_close(&L1);
 
357
    dpd_file2_init(&L1, CC_OEI, L_irr, 2, 3, "Lia");
 
358
    dpd_file2_copy(&L1, CC_OEI, "Lia");
 
359
    dpd_file2_close(&L1);
 
360
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB");
 
361
    dpd_buf4_copy(&L2, CC_LAMPS, "LIJAB");
 
362
    dpd_buf4_close(&L2);
 
363
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 12, 17, 12, 17, 0, "Lijab");
 
364
    dpd_buf4_copy(&L2, CC_LAMPS, "Lijab");
 
365
    dpd_buf4_close(&L2);
 
366
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb");
 
367
    dpd_buf4_copy(&L2, CC_LAMPS, "LIjAb");
 
368
    dpd_buf4_close(&L2);
 
369
  }
 
370
  if (params.ref == 0) { /** RHF for those codes that can use them **/
 
371
    dpd_buf4_init(&L2, CC_LAMPS, 0, 0, 5, 0, 5, 0, "LIjAb");
 
372
    dpd_buf4_scmcopy(&L2, CC_LAMPS, "2 LIjAb - LIjBa", 2);
 
373
    dpd_buf4_sort_axpy(&L2, CC_LAMPS, pqsr, 0, 5, "2 LIjAb - LIjBa", -1);
 
374
    dpd_buf4_close(&L2);
 
375
 
 
376
    /*
 
377
    dpd_buf4_init(&LIjAb, CC_LAMPS, L_irr, 0, 5, 0, 5, 0, "LIjAb");
 
378
    dpd_buf4_sort(&LIjAb, CC_TMP, pqsr, 0, 5, "LIjbA");
 
379
    dpd_buf4_copy(&LIjAb, CC_LAMPS, "2LIjAb - LIjbA");
 
380
    dpd_buf4_close(&LIjAb);
 
381
    dpd_buf4_init(&LIjAb, CC_LAMPS, L_irr, 0, 5, 0, 5, 0, "2LIjAb - LIjbA");
 
382
    dpd_buf4_scm(&LIjAb, 2.0);
 
383
    dpd_buf4_init(&LIjbA, CC_TMP, L_irr, 0, 5, 0, 5, 0, "LIjbA");
 
384
    dpd_buf4_axpy(&LIjbA, &LIjAb, -1.0);
 
385
    dpd_buf4_close(&LIjbA);
 
386
    dpd_buf4_close(&LIjAb);
 
387
    */
 
388
  }
 
389
  return;
 
390
}
 
391
 
 
392
void L_zero(int L_irr) {
 
393
  dpdfile2 LIA, Lia;
 
394
  dpdbuf4 LIJAB, Lijab, LIjAb;
 
395
 
 
396
  if(params.ref == 0 || params.ref == 1) { /** RHF/ROHF **/
 
397
    dpd_file2_init(&LIA, CC_OEI, L_irr, 0, 1, "New LIA");
 
398
    dpd_file2_init(&Lia, CC_OEI, L_irr, 0, 1, "New Lia");
 
399
  }
 
400
  else if(params.ref == 2) { /** UHF **/
 
401
    dpd_file2_init(&LIA, CC_OEI, L_irr, 0, 1, "New LIA");
 
402
    dpd_file2_init(&Lia, CC_OEI, L_irr, 2, 3, "New Lia");
 
403
  }
 
404
  dpd_file2_scm(&LIA, 0.0);
 
405
  dpd_file2_scm(&Lia, 0.0);
 
406
  dpd_file2_close(&LIA);
 
407
  dpd_file2_close(&Lia);
 
408
 
 
409
  if (params.ref == 0 || params.ref == 1 ) { /** RHF/ROHF **/
 
410
    dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New LIJAB");
 
411
    dpd_buf4_scm(&LIJAB, 0.0);
 
412
    dpd_buf4_close(&LIJAB);
 
413
    dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New Lijab");
 
414
    dpd_buf4_scm(&Lijab, 0.0);
 
415
    dpd_buf4_close(&Lijab);
 
416
    dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb");
 
417
    dpd_buf4_scm(&LIjAb, 0.0);
 
418
    dpd_buf4_close(&LIjAb);
 
419
  }
 
420
  else { /** UHF **/
 
421
    dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New LIJAB");
 
422
    dpd_buf4_scm(&LIJAB, 0.0);
 
423
    dpd_buf4_close(&LIJAB);
 
424
    dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 12, 17, 12, 17, 0, "New Lijab");
 
425
    dpd_buf4_scm(&Lijab, 0.0);
 
426
    dpd_buf4_close(&Lijab);
 
427
    dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "New LIjAb");
 
428
    dpd_buf4_scm(&LIjAb, 0.0);
 
429
    dpd_buf4_close(&LIjAb);
 
430
  }
 
431
}