Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F76324519
grid_gradient_CPU.cpp
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Wed, Aug 7, 09:16
Size
6 KB
Mime Type
text/x-c
Expires
Fri, Aug 9, 09:16 (2 d)
Engine
blob
Format
Raw Data
Handle
19693077
Attached To
R1448 Lenstool-HPC
grid_gradient_CPU.cpp
View Options
#include "grid_gradient_CPU.hpp"
//
#ifdef __WITH_MPI
#include<mpi.h>
#endif
//
//
//
void
gradient_grid_CPU
(
double
*
grid_grad_x
,
double
*
grid_grad_y
,
const
struct
grid_param
*
frame
,
const
struct
Potential_SOA
*
lens
,
int
nhalos
,
int
nbgridcells
)
{
double
dx
=
(
frame
->
xmax
-
frame
->
xmin
)
/
(
nbgridcells
-
1
);
double
dy
=
(
frame
->
ymax
-
frame
->
ymin
)
/
(
nbgridcells
-
1
);
//
gradient_grid_general_CPU
(
grid_grad_x
,
grid_grad_y
,
frame
,
lens
,
nhalos
,
dx
,
dy
,
nbgridcells
,
nbgridcells
,
0
,
0
);
}
//
//
//
void
gradient_grid_CPU
(
double
*
grid_grad_x
,
double
*
grid_grad_y
,
const
struct
grid_param
*
frame
,
const
struct
Potential_SOA
*
lens
,
int
nhalos
,
int
nbgridcells_x
,
int
nbgridcells_y
,
int
istart
,
int
jstart
)
{
double
dx
=
(
frame
->
xmax
-
frame
->
xmin
)
/
(
nbgridcells_x
-
1
);
double
dy
=
(
frame
->
ymax
-
frame
->
ymin
)
/
(
nbgridcells_y
-
1
);
//
printf
(
"istart = %d, jstart = %d, nbgridcells_x = %d, ngridcells_y = %d
\n
"
,
istart
,
jstart
,
nbgridcells_x
,
nbgridcells_y
);
gradient_grid_general_CPU
(
grid_grad_x
,
grid_grad_y
,
frame
,
lens
,
nhalos
,
dx
,
dy
,
nbgridcells_x
,
nbgridcells_y
,
istart
,
jstart
);
}
//
//
//
void
gradient_grid_CPU
(
double
*
grid_grad_x
,
double
*
grid_grad_y
,
const
struct
grid_param
*
frame
,
const
struct
Potential_SOA
*
lens
,
int
nhalos
,
double
dx
,
double
dy
,
int
nbgridcells_x
,
int
nbgridcells_y
,
int
istart
,
int
jstart
)
{
//@@printf("dx = %f, dy = %f, istart = %d, jstart = %d, nbgridcells_x = %d, ngridcells_y = %d\n", dx, dy, istart, jstart, nbgridcells_x, nbgridcells_y);
gradient_grid_general_CPU
(
grid_grad_x
,
grid_grad_y
,
frame
,
lens
,
nhalos
,
dx
,
dy
,
nbgridcells_x
,
nbgridcells_y
,
istart
,
jstart
);
}
//
//
//
void
gradient_grid_general_CPU_old
(
double
*
grid_grad_x
,
double
*
grid_grad_y
,
const
struct
grid_param
*
frame
,
int
Nlens
,
int
nbgridcells
,
const
struct
Potential_SOA
*
lens
)
{
int
bid
=
0
;
// index of the block (and of the set of images)
int
tid
=
0
;
// index of the thread within the block
double
dx
,
dy
,
x_pos
,
y_pos
;
//pixelsize
int
grid_dim
,
index
;
point
Grad
,
image_point
,
true_coord_rotation
;
double
R
;
dx
=
(
frame
->
xmax
-
frame
->
xmin
)
/
(
nbgridcells
-
1
);
dy
=
(
frame
->
ymax
-
frame
->
ymin
)
/
(
nbgridcells
-
1
);
grid_dim
=
(
nbgridcells
);
index
=
bid
;
//std::cout << "xmin = " << frame->xmin << " ymin = " << frame->ymin << std::endl;
while
(
index
<
grid_dim
*
grid_dim
)
{
grid_grad_x
[
index
]
=
0.
;
grid_grad_y
[
index
]
=
0.
;
image_point
.
x
=
frame
->
xmin
+
(
index
%
grid_dim
)
*
dx
;
image_point
.
y
=
frame
->
ymin
+
(
index
/
grid_dim
)
*
dy
;
Grad
=
module_potentialDerivatives_totalGradient_SOA
(
&
image_point
,
lens
,
Nlens
);
//
//std::cout << "col = " << index%grid_dim << " row = " << index/grid_dim << " " << image_point.x << " " << image_point.y << ": " << Grad.x << " " << Grad.y << std::endl;
grid_grad_x
[
index
]
=
Grad
.
x
;
grid_grad_y
[
index
]
=
Grad
.
y
;
//return;
bid
+=
1
;
index
=
bid
*
1
+
tid
;
}
}
void
gradient_grid_general_CPU
(
double
*
grid_grad_x
,
double
*
grid_grad_y
,
const
struct
grid_param
*
frame
,
const
struct
Potential_SOA
*
lens
,
int
Nlens
,
double
dx
,
double
dy
,
int
nbgridcells_x
,
int
nbgridcells_y
,
int
istart
,
int
jstart
)
{
int
bid
=
0
;
// index of the block (and of the set of images)
int
tid
=
0
;
// index of the thread within the block
//
double
/*dx, dy,*/
x_pos
,
y_pos
;
//pixelsize
int
grid_dim
;
point
Grad
,
image_point
,
true_coord_rotation
;
//
//dx = (frame->xmax - frame->xmin)/(nbgridcells_x - 1);
//dy = (frame->ymax - frame->ymin)/(nbgridcells_y - 1);
//
grid_dim
=
nbgridcells_x
*
nbgridcells_y
;
//@@printf("-> dx = %f, dy = %f, istart = %d, jstart = %d, nbgridcells_x = %d, nbgridcells_y = %d\n", dx, dy, istart, jstart, nbgridcells_x, nbgridcells_y);
//
#pragma omp parallel
#pragma omp for private(Grad, image_point)
for
(
int
jj
=
0
;
jj
<
nbgridcells_y
;
++
jj
)
for
(
int
ii
=
0
;
ii
<
nbgridcells_x
;
++
ii
)
{
// (index < grid_dim*grid_dim)
int
index
=
jj
*
nbgridcells_x
+
ii
;
//grid_grad_x[index] = 0.;
//grid_grad_y[index] = 0.;
//
image_point
.
x
=
frame
->
xmin
+
(
ii
+
istart
)
*
dx
;
image_point
.
y
=
frame
->
ymin
+
(
jj
+
jstart
)
*
dy
;
//
Grad
=
module_potentialDerivatives_totalGradient_SOA
(
&
image_point
,
lens
,
Nlens
);
/*
#if __WITH_MPI
//
int world_rank;
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
int world_size;
MPI_Comm_rank(MPI_COMM_WORLD, &world_size);
//
if (world_rank == 0) printf("%d x = %f y = %f -> %f %f\n", index, image_point.x, image_point.y, Grad.x, Grad.y);
#endif
*/
grid_grad_x
[
index
]
=
Grad
.
x
;
grid_grad_y
[
index
]
=
Grad
.
y
;
//
}
}
/*
void gradient_grid_general_CPU(double *grid_grad_x, double *grid_grad_y, const struct grid_param *frame, int Nlens, int nbgridcells_x, int nbgridc
ells_y, const struct Potential_SOA *lens, int istart, int jstart)
{
int bid = 0; // index of the block (and of the set of images)
int tid = 0; // index of the thread within the block
//
double dx, dy, x_pos, y_pos; //pixelsize
int grid_dim;
point Grad, image_point, true_coord_rotation;
//
dx = (frame->xmax - frame->xmin)/(nbgridcells_x - 1);
dy = (frame->ymax - frame->ymin)/(nbgridcells_y - 1);
//
grid_dim = nbgridcells_x*nbgridcells_y;
//
#pragma omp parallel
#pragma omp for private(Grad, image_point)
for (int jj = jstart; jj < nbgridcells_y; ++jj)
for (int ii = istart; ii < nbgridcells_x; ++ii)
{
// (index < grid_dim*grid_dim)
int index = jj*nbgridcells_x + ii;
//grid_grad_x[index] = 0.;
//grid_grad_y[index] = 0.;
//
image_point.x = frame->xmin + ii*dx;
image_point.y = frame->ymin + jj*dy;
//
Grad = module_potentialDerivatives_totalGradient_SOA(&image_point, lens, Nlens);
//
grid_grad_x[index] = Grad.x;
grid_grad_y[index] = Grad.y;
//
//std::cout << image_point.x << " " << image_point.y << ": " << Grad.x << " " << Grad.y << std::endl;
}
}
*/
Event Timeline
Log In to Comment