Пример #1
0
/* vm[nocc,ngrids] = ao[i,ngrids] * dm[i,nocc] */
void VXCdot_ao_dm(double *vm, double *ao, double *dm,
                  int nao, int nocc, int ngrids, int nbas,
                  unsigned char *non0table, int *shls_slice, int *ao_loc)
{
        const int nblk = (ngrids+BLKSIZE-1) / BLKSIZE;

#pragma omp parallel
{
        int ip, ib;
#pragma omp for nowait schedule(static)
        for (ib = 0; ib < nblk; ib++) {
                ip = ib * BLKSIZE;
                dot_ao_dm(vm+ip, ao+ip, dm,
                          nao, nocc, ngrids, MIN(ngrids-ip, BLKSIZE),
                          non0table+ib*nbas, shls_slice, ao_loc);
        }
}
}
Пример #2
0
/* vm[ngrids,nocc] = ao[ngrids,i] * dm[i,nocc] */
void VXCdot_ao_dm(double *vm, double *ao, double *dm,
                  int nao, int nocc, int ngrids, int blksize, char *non0table,
                  int *atm, int natm, int *bas, int nbas, double *env)
{
    const int nblk = (ngrids+blksize-1) / blksize;
    int ip, ib;

    #pragma omp parallel default(none) \
    shared(vm, ao, dm, nao, nocc, ngrids, blksize, non0table, \
           atm, natm, bas, nbas, env) \
    private(ip, ib)
    #pragma omp for nowait schedule(static)
    for (ib = 0; ib < nblk; ib++) {
        ip = ib * blksize;
        dot_ao_dm(vm+ip*nocc, ao+ip*nao, dm,
                  nao, nocc, MIN(ngrids-ip, blksize),
                  non0table+ib*nbas,
                  atm, natm, bas, nbas, env);
    }
}