Example #1
0
void AO2MOfill_nr_s4(int (*intor)(), int (*fprescreen)(),
                     double *eri, double *buf,
                     int nkl, int ish, struct _AO2MOEnvs *envs)
{
        const int nao = envs->nao;
        const size_t nao2 = nao * (nao+1) / 2;
        const int *ao_loc = envs->ao_loc;
        const int klsh_start = envs->klsh_start;
        const int klsh_end = klsh_start + envs->klsh_count;
        const int di = ao_loc[ish+1] - ao_loc[ish];
        const int ioff = ao_loc[ish] * (ao_loc[ish]+1) / 2;
        int kl, jsh, ksh, lsh, dj, dk, dl;
        int icomp;
        int shls[4];
        double *pbuf = buf;
        double *peri;

        shls[0] = ish;

        for (kl = klsh_start; kl < klsh_end; kl++) {

        // kl = k * (k+1) / 2 + l
        ksh = (int)(sqrt(2*kl+.25) - .5 + 1e-7);
        lsh = kl - ksh * (ksh+1) / 2;
        dk = ao_loc[ksh+1] - ao_loc[ksh];
        dl = ao_loc[lsh+1] - ao_loc[lsh];
        shls[2] = ksh;
        shls[3] = lsh;

        if (ksh == lsh) {
                for (jsh = 0; jsh < ish; jsh++) {
                        dj = ao_loc[jsh+1] - ao_loc[jsh];
                        shls[1] = jsh;
                        DISTR_INTS_BY(s4_copy_keql, s4_set0_keql,
                                      ao_loc[ish]+1);
                }

                jsh = ish;
                dj = di;
                shls[1] = ish;
                DISTR_INTS_BY(s4_copy_keql_ieqj, s4_set0_keql_ieqj,
                              ao_loc[ish]+1);
                eri += nao2 * dk*(dk+1)/2;

        } else {

                for (jsh = 0; jsh < ish; jsh++) {
                        dj = ao_loc[jsh+1] - ao_loc[jsh];
                        shls[1] = jsh;
                        DISTR_INTS_BY(s4_copy, s4_set0, ao_loc[ish]+1);
                }

                jsh = ish;
                dj = di;
                shls[1] = ish;
                DISTR_INTS_BY(s4_copy_ieqj, s4_set0_ieqj, ao_loc[ish]+1);
                eri += nao2 * dk * dl;
        } }
}
Example #2
0
void AO2MOfill_nr_s1(int (*intor)(), int (*fprescreen)(),
                     double *eri, double *buf,
                     int nkl, int ish, struct _AO2MOEnvs *envs)
{
        const int nao = envs->nao;
        const size_t nao2 = nao * nao;
        const int *ao_loc = envs->ao_loc;
        const int klsh_start = envs->klsh_start;
        const int klsh_end = klsh_start + envs->klsh_count;
        const int di = ao_loc[ish+1] - ao_loc[ish];
        const int ioff = ao_loc[ish] * nao;
        int kl, jsh, ksh, lsh, dj, dk, dl;
        int icomp;
        int shls[4];
        double *pbuf, *peri;

        shls[0] = ish;

        for (kl = klsh_start; kl < klsh_end; kl++) {
                // kl = k * (k+1) / 2 + l
                ksh = kl / envs->nbas;
                lsh = kl - ksh * envs->nbas;
                dk = ao_loc[ksh+1] - ao_loc[ksh];
                dl = ao_loc[lsh+1] - ao_loc[lsh];
                shls[2] = ksh;
                shls[3] = lsh;

                for (jsh = 0; jsh < envs->nbas; jsh++) {
                        dj = ao_loc[jsh+1] - ao_loc[jsh];
                        shls[1] = jsh;
                        DISTR_INTS_BY(s1_copy, s1_set0, nao);
                }
                eri += nao2 * dk * dl;
        }
}
Example #3
0
void GTOnr2e_fill_s4(int (*intor)(), int (*fprescreen)(),
                     double *eri, int ncomp, int ish, int jsh,
                     struct _VHFEnvs *envs,
                     int *ishloc, int *jshloc, int naoi, int naoj)
{
        if (ish < jsh) {
                return;
        }
        int di = ishloc[ish+1] - ishloc[ish];
        int dj = jshloc[jsh+1] - jshloc[jsh];
        double *buf = malloc(sizeof(double)*di*dj*NCTRMAX*NCTRMAX*ncomp);
        int shls[4];
        int ksh, lsh;

        shls[0] = ish;
        shls[1] = jsh;

        for (ksh = 0; ksh < envs->nbas; ksh++) {
        for (lsh = 0; lsh <= ksh; lsh++) {
                shls[2] = ksh;
                shls[3] = lsh;
                DISTR_INTS_BY(s4_copy, s4_set0);
        } }
        free(buf);
}