diff --git a/tools/libfrencutils_acc/create_xgrid_acc.c b/tools/libfrencutils_acc/create_xgrid_acc.c index 64b24eca..f3ddae83 100644 --- a/tools/libfrencutils_acc/create_xgrid_acc.c +++ b/tools/libfrencutils_acc/create_xgrid_acc.c @@ -230,8 +230,8 @@ int create_xgrid_2dx2d_order1_acc(const int nlon_input_cells, const int nlat_in output_cell_lon_min += rotate; output_cell_lon_max += rotate; for (int l=0; llon_vertices[ij2][l] + rotate; - output_cell_lat_vertices[l] = output_grid_cells->lat_vertices[ij2][l]; + output_cell_lon_vertices[l] = output_grid_cells->lon_vertices[ij2*MAX_V+l] + rotate; + output_cell_lat_vertices[l] = output_grid_cells->lat_vertices[ij2*MAX_V+l]; } //output_cell_lon should in the same range as input_cell_lon after lon_fix, @@ -391,8 +391,8 @@ int create_xgrid_2dx2d_order2_acc(const int nlon_input_cells, const int nlat_in output_cell_area = output_grid_cells->area[ij2]; for (int l=0; llon_vertices[ij2][l] + rotate; - output_cell_lat_vertices[l] = output_grid_cells->lat_vertices[ij2][l]; + output_cell_lon_vertices[l] = output_grid_cells->lon_vertices[ij2*MAX_V+l] + rotate; + output_cell_lat_vertices[l] = output_grid_cells->lat_vertices[ij2*MAX_V+l]; } //output_cell_lon should in the same range as input_cell_lon after lon_fix, diff --git a/tools/libfrencutils_acc/create_xgrid_utils_acc.c b/tools/libfrencutils_acc/create_xgrid_utils_acc.c index c7f305c6..ee262ec2 100644 --- a/tools/libfrencutils_acc/create_xgrid_utils_acc.c +++ b/tools/libfrencutils_acc/create_xgrid_utils_acc.c @@ -660,20 +660,16 @@ void get_grid_cell_struct_acc( const int nlon, const int nlat, const Grid_config grid_cells->lon_cent = (double *)malloc(ncells*sizeof(double)); grid_cells->area = (double *)malloc(ncells*sizeof(double)); grid_cells->nvertices = (int *)malloc(ncells*sizeof(int)); - grid_cells->lon_vertices = (double **)malloc(ncells*sizeof(double)); - grid_cells->lat_vertices = (double **)malloc(ncells*sizeof(double)); - for(int icell=0 ; icelllat_vertices[icell] = (double *)malloc(MAX_V*sizeof(double)); - grid_cells->lon_vertices[icell] = (double *)malloc(MAX_V*sizeof(double)); - } + grid_cells->lon_vertices = (double *)malloc(MAX_V*ncells*sizeof(double)); + grid_cells->lat_vertices = (double *)malloc(MAX_V*ncells*sizeof(double)); #pragma acc enter data create(grid_cells[:1]) #pragma acc enter data create(grid_cells->lon_min[:ncells], grid_cells->lon_max[:ncells], \ grid_cells->lat_min[:ncells], grid_cells->lat_max[:ncells], \ grid_cells->lon_cent[:ncells], grid_cells->nvertices[:ncells],\ grid_cells->area[:ncells]) -#pragma acc enter data create(grid_cells->lon_vertices[:ncells][:MAX_V], \ - grid_cells->lat_vertices[:ncells][:MAX_V]) +#pragma acc enter data create(grid_cells->lon_vertices[:MAX_V*ncells], \ + grid_cells->lat_vertices[:MAX_V*ncells]) #pragma acc data present(grid_cells[:1], lon[:npts], lat[:npts]) #pragma acc parallel loop independent @@ -697,8 +693,8 @@ void get_grid_cell_struct_acc( const int nlon, const int nlat, const Grid_config grid_cells->area[icell] = poly_area_acc(lon_vertices, lat_vertices, nvertices); for(int ivertex=0 ; ivertexlon_vertices[icell][ivertex] = lon_vertices[ivertex]; - grid_cells->lat_vertices[icell][ivertex] = lat_vertices[ivertex]; + grid_cells->lon_vertices[MAX_V*icell+ivertex] = lon_vertices[ivertex]; + grid_cells->lat_vertices[MAX_V*icell+ivertex] = lat_vertices[ivertex]; } } @@ -707,14 +703,6 @@ void get_grid_cell_struct_acc( const int nlon, const int nlat, const Grid_config void free_grid_cell_struct_acc( const int ncells, Grid_cells_struct_config *grid_cells) { - for(int icell=0 ; icelllon_vertices[icell]) - } - - for(int icell=0 ; icelllat_vertices[icell]) - } - #pragma acc exit data delete( grid_cells->lon_vertices, \ grid_cells->lat_vertices, \ grid_cells->lon_min, \ @@ -726,10 +714,6 @@ void free_grid_cell_struct_acc( const int ncells, Grid_cells_struct_config *grid grid_cells->area) #pragma acc exit data delete(grid_cells) - for(int icell=0 ; icelllon_vertices[icell]); - free(grid_cells->lat_vertices[icell]); - } free(grid_cells->lon_min); grid_cells->lon_min = NULL; free(grid_cells->lon_max); grid_cells->lon_max = NULL; free(grid_cells->lon_cent); grid_cells->lon_cent = NULL; @@ -737,8 +721,8 @@ void free_grid_cell_struct_acc( const int ncells, Grid_cells_struct_config *grid free(grid_cells->lat_max); grid_cells->lat_max = NULL; free(grid_cells->area); grid_cells->area = NULL; free(grid_cells->nvertices); grid_cells->nvertices=NULL; - //grid_cells->lon_vertices = NULL; - //grid_cells->lat_vertices = NULL; + free(grid_cells->lon_vertices); grid_cells->lon_vertices = NULL; + free(grid_cells->lat_vertices); grid_cells->lat_vertices = NULL; } diff --git a/tools/libfrencutils_acc/globals_acc.h b/tools/libfrencutils_acc/globals_acc.h index f72d71a1..d0391eae 100644 --- a/tools/libfrencutils_acc/globals_acc.h +++ b/tools/libfrencutils_acc/globals_acc.h @@ -57,8 +57,8 @@ typedef struct { double *lon_cent; double *area; int *nvertices; - double **lon_vertices; - double **lat_vertices; + double *lon_vertices; + double *lat_vertices; double *recomputed_area; double *centroid_lon; double *centroid_lat;