mirror of
https://github.com/TREX-CoE/qmckl.git
synced 2025-01-03 10:06:09 +01:00
Added qmckl_context_touch for benchmarking
This commit is contained in:
parent
45e7eab963
commit
c93e7828c5
@ -5384,13 +5384,11 @@ qmckl_compute_ao_vgl_hpc (
|
|||||||
|
|
||||||
switch (nucleus_max_ang_mom[inucl]) {
|
switch (nucleus_max_ang_mom[inucl]) {
|
||||||
case 0:
|
case 0:
|
||||||
for (int64_t il=0 ; il<n ; ++il) {
|
ao_vgl_1[0] = s1 * f[0];
|
||||||
ao_vgl_1[il] = s1 * f[il];
|
ao_vgl_2[0] = s2 * f[0];
|
||||||
ao_vgl_2[il] = s2 * f[il];
|
ao_vgl_3[0] = s3 * f[0];
|
||||||
ao_vgl_3[il] = s3 * f[il];
|
ao_vgl_4[0] = s4 * f[0];
|
||||||
ao_vgl_4[il] = s4 * f[il];
|
ao_vgl_5[0] = s5;
|
||||||
ao_vgl_5[il] = s5;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
poly_vgl_1 = &(poly_vgl_l1[0][idx]);
|
poly_vgl_1 = &(poly_vgl_l1[0][idx]);
|
||||||
|
@ -141,15 +141,6 @@ typedef struct qmckl_context_struct {
|
|||||||
} qmckl_context_struct;
|
} qmckl_context_struct;
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
The context keeps a ``date'' that allows to check which data needs
|
|
||||||
to be recomputed. The date is incremented when the electron
|
|
||||||
coordinates are updated.
|
|
||||||
|
|
||||||
When a new element is added to the context, the functions
|
|
||||||
[[Creation][qmckl_context_create]], [[Destroy][qmckl_context_destroy]] and [[Copy][qmckl_context_copy]]
|
|
||||||
should be updated inorder to make deep copies.
|
|
||||||
|
|
||||||
|
|
||||||
A tag is used internally to check if the memory domain pointed
|
A tag is used internally to check if the memory domain pointed
|
||||||
by a pointer is a valid context. This allows to check that even if
|
by a pointer is a valid context. This allows to check that even if
|
||||||
the pointer associated with a context is non-null, we can still
|
the pointer associated with a context is non-null, we can still
|
||||||
@ -185,6 +176,35 @@ qmckl_context qmckl_context_check(const qmckl_context context) {
|
|||||||
}
|
}
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
|
The context keeps a ``date'' that allows to check which data needs
|
||||||
|
to be recomputed. The date is incremented when the context is touched.
|
||||||
|
|
||||||
|
When a new element is added to the context, the functions
|
||||||
|
[[Creation][qmckl_context_create]], [[Destroy][qmckl_context_destroy]] and [[Copy][qmckl_context_copy]]
|
||||||
|
should be updated in order to make deep copies.
|
||||||
|
|
||||||
|
#+begin_src c :comments org :tangle (eval h_func) :noexport
|
||||||
|
qmckl_exit_code qmckl_context_touch(const qmckl_context context) ;
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src c :tangle (eval c)
|
||||||
|
qmckl_exit_code qmckl_context_touch(const qmckl_context context) {
|
||||||
|
|
||||||
|
if (qmckl_context_check(context) == QMCKL_NULL_CONTEXT) {
|
||||||
|
return qmckl_failwith( context,
|
||||||
|
QMCKL_INVALID_CONTEXT,
|
||||||
|
"qmckl_context_touch",
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
qmckl_context_struct* const ctx = (qmckl_context_struct* const) context;
|
||||||
|
|
||||||
|
ctx->date += 1UL;
|
||||||
|
ctx->point.date += 1UL;
|
||||||
|
return QMCKL_SUCCESS;
|
||||||
|
}
|
||||||
|
#+end_src
|
||||||
|
|
||||||
** Creation
|
** Creation
|
||||||
|
|
||||||
To create a new context, ~qmckl_context_create()~ should be used.
|
To create a new context, ~qmckl_context_create()~ should be used.
|
||||||
|
@ -318,8 +318,17 @@ qmckl_set_point (qmckl_context context,
|
|||||||
ctx->point.num = num;
|
ctx->point.num = num;
|
||||||
|
|
||||||
if (transp == 'T') {
|
if (transp == 'T') {
|
||||||
memcpy(ctx->point.coord.data, coord, 3*num*sizeof(double));
|
double *a = ctx->point.coord.data;
|
||||||
|
#ifdef HAVE_OPENMP
|
||||||
|
#pragma omp for
|
||||||
|
#endif
|
||||||
|
for (int64_t i=0 ; i<3*num ; ++i) {
|
||||||
|
a[i] = coord[i];
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
|
#ifdef HAVE_OPENMP
|
||||||
|
#pragma omp for
|
||||||
|
#endif
|
||||||
for (int64_t i=0 ; i<num ; ++i) {
|
for (int64_t i=0 ; i<num ; ++i) {
|
||||||
qmckl_mat(ctx->point.coord, i, 0) = coord[3*i ];
|
qmckl_mat(ctx->point.coord, i, 0) = coord[3*i ];
|
||||||
qmckl_mat(ctx->point.coord, i, 1) = coord[3*i+1];
|
qmckl_mat(ctx->point.coord, i, 1) = coord[3*i+1];
|
||||||
@ -328,8 +337,8 @@ qmckl_set_point (qmckl_context context,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Increment the date of the context */
|
/* Increment the date of the context */
|
||||||
ctx->date += 1UL;
|
rc = qmckl_context_touch(context);
|
||||||
ctx->point.date = ctx->date;
|
assert (rc == QMCKL_SUCCESS);
|
||||||
|
|
||||||
return QMCKL_SUCCESS;
|
return QMCKL_SUCCESS;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user