@@ -660,20 +660,16 @@ void get_grid_cell_struct_acc( const int nlon, const int nlat, const Grid_config
660
660
grid_cells -> lon_cent = (double * )malloc (ncells * sizeof (double ));
661
661
grid_cells -> area = (double * )malloc (ncells * sizeof (double ));
662
662
grid_cells -> nvertices = (int * )malloc (ncells * sizeof (int ));
663
- grid_cells -> lon_vertices = (double * * )malloc (ncells * sizeof (double ));
664
- grid_cells -> lat_vertices = (double * * )malloc (ncells * sizeof (double ));
665
- for (int icell = 0 ; icell < ncells ; icell ++ ) {
666
- grid_cells -> lat_vertices [icell ] = (double * )malloc (MAX_V * sizeof (double ));
667
- grid_cells -> lon_vertices [icell ] = (double * )malloc (MAX_V * sizeof (double ));
668
- }
663
+ grid_cells -> lon_vertices = (double * )malloc (MAX_V * ncells * sizeof (double ));
664
+ grid_cells -> lat_vertices = (double * )malloc (MAX_V * ncells * sizeof (double ));
669
665
670
666
#pragma acc enter data create(grid_cells[:1])
671
667
#pragma acc enter data create(grid_cells->lon_min[:ncells], grid_cells->lon_max[:ncells], \
672
668
grid_cells->lat_min[:ncells], grid_cells->lat_max[:ncells], \
673
669
grid_cells->lon_cent[:ncells], grid_cells->nvertices[:ncells],\
674
670
grid_cells->area[:ncells])
675
- #pragma acc enter data create(grid_cells->lon_vertices[:ncells][: MAX_V], \
676
- grid_cells->lat_vertices[:ncells][: MAX_V])
671
+ #pragma acc enter data create(grid_cells->lon_vertices[:MAX_V*ncells ], \
672
+ grid_cells->lat_vertices[:MAX_V*ncells ])
677
673
678
674
#pragma acc data present(grid_cells[:1], lon[:npts], lat[:npts])
679
675
#pragma acc parallel loop independent
@@ -697,8 +693,8 @@ void get_grid_cell_struct_acc( const int nlon, const int nlat, const Grid_config
697
693
grid_cells -> area [icell ] = poly_area_acc (lon_vertices , lat_vertices , nvertices );
698
694
699
695
for (int ivertex = 0 ; ivertex < nvertices ; ivertex ++ ) {
700
- grid_cells -> lon_vertices [icell ][ ivertex ] = lon_vertices [ivertex ];
701
- grid_cells -> lat_vertices [icell ][ ivertex ] = lat_vertices [ivertex ];
696
+ grid_cells -> lon_vertices [MAX_V * icell + ivertex ] = lon_vertices [ivertex ];
697
+ grid_cells -> lat_vertices [MAX_V * icell + ivertex ] = lat_vertices [ivertex ];
702
698
}
703
699
}
704
700
@@ -707,14 +703,6 @@ void get_grid_cell_struct_acc( const int nlon, const int nlat, const Grid_config
707
703
void free_grid_cell_struct_acc ( const int ncells , Grid_cells_struct_config * grid_cells )
708
704
{
709
705
710
- for (int icell = 0 ; icell < MAX_V ; icell ++ ) {
711
- #pragma acc exit data delete( grid_cells->lon_vertices[icell])
712
- }
713
-
714
- for (int icell = 0 ; icell < MAX_V ; icell ++ ) {
715
- #pragma acc exit data delete( grid_cells->lat_vertices[icell])
716
- }
717
-
718
706
#pragma acc exit data delete( grid_cells->lon_vertices, \
719
707
grid_cells->lat_vertices, \
720
708
grid_cells->lon_min, \
@@ -726,19 +714,15 @@ void free_grid_cell_struct_acc( const int ncells, Grid_cells_struct_config *grid
726
714
grid_cells->area)
727
715
#pragma acc exit data delete(grid_cells)
728
716
729
- for (int icell = 0 ; icell < MAX_V ; icell ++ ) {
730
- free (grid_cells -> lon_vertices [icell ]);
731
- free (grid_cells -> lat_vertices [icell ]);
732
- }
733
717
free (grid_cells -> lon_min ); grid_cells -> lon_min = NULL ;
734
718
free (grid_cells -> lon_max ); grid_cells -> lon_max = NULL ;
735
719
free (grid_cells -> lon_cent ); grid_cells -> lon_cent = NULL ;
736
720
free (grid_cells -> lat_min ); grid_cells -> lat_min = NULL ;
737
721
free (grid_cells -> lat_max ); grid_cells -> lat_max = NULL ;
738
722
free (grid_cells -> area ); grid_cells -> area = NULL ;
739
723
free (grid_cells -> nvertices ); grid_cells -> nvertices = NULL ;
740
- // grid_cells->lon_vertices = NULL;
741
- // grid_cells->lat_vertices = NULL;
724
+ free ( grid_cells -> lon_vertices ); grid_cells -> lon_vertices = NULL ;
725
+ free ( grid_cells -> lat_vertices ); grid_cells -> lat_vertices = NULL ;
742
726
}
743
727
744
728
0 commit comments