Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ list(APPEND fms_c_src_files
grid_utils/gradient_c2l.c
grid_utils/grid_utils.c
grid_utils/tree_utils.c
horiz_interp/include/horiz_interp_conserve_xgrid.c
horiz_interp/create_xgrid_utils.c
mpp/mpp_memuse.c
parser/yaml_parser_binding.c
parser/yaml_output_functions.c
Expand Down Expand Up @@ -302,7 +302,8 @@ foreach(kind ${kinds})
add_library(${libTgt}_c OBJECT ${fms_c_src_files})

target_include_directories(${libTgt}_c PRIVATE include
grid_utils)
grid_utils
horiz_interp/include)
target_compile_definitions(${libTgt}_c PRIVATE "${fms_defs}")
target_link_libraries(${libTgt}_c PRIVATE NetCDF::NetCDF_C
MPI::MPI_C)
Expand Down Expand Up @@ -442,7 +443,8 @@ if(NOT kinds)
add_library(${libTgt}_c OBJECT ${fms_c_src_files})

target_include_directories(${libTgt}_c PRIVATE include
grid_utils)
grid_utils
horiz_interp/include)
target_compile_definitions(${libTgt}_c PRIVATE "${fms_defs}")
target_link_libraries(${libTgt}_c PRIVATE NetCDF::NetCDF_C
MPI::MPI_C)
Expand Down
60 changes: 9 additions & 51 deletions grid_utils/grid_utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -476,7 +476,6 @@ int invert_matrix_3x3(long double m[], long double m_inv[]) {
return 1;
}


int inside_a_polygon(double *lon1, double *lat1, int *npts, double *lon2, double *lat2)
{

Expand Down Expand Up @@ -521,17 +520,6 @@ int inside_a_polygon(double *lon1, double *lat1, int *npts, double *lon2, double

}

int inside_a_polygon_(double *lon1, double *lat1, int *npts, double *lon2, double *lat2)
{

int isinside;

isinside = inside_a_polygon(lon1, lat1, npts, lon2, lat2);

return isinside;

}

double get_global_area(void)
{
double garea;
Expand All @@ -540,14 +528,6 @@ double get_global_area(void)
return garea;
}

double get_global_area_(void)
{
double garea;
garea = 4*M_PI*RADIUS*RADIUS;

return garea;
}

double poly_area(const double x[], const double y[], int n)
{
double area = 0.0;
Expand Down Expand Up @@ -718,12 +698,7 @@ double spherical_excess_area(const double* p_ll, const double* p_ul,
void get_grid_area(const int *nlon, const int *nlat, const double *lon, const double *lat, const double *area)
return the grid area.
*******************************************************************************/
void get_grid_area_(const int *nlon, const int *nlat, const double *lon, const double *lat, double *area)
{
get_grid_area(nlon, nlat, lon, lat, area);
}

void get_grid_area(const int *nlon, const int *nlat, const double *lon, const double *lat, double *area)
void get_grid_area(const int* nlon, const int* nlat, const double *lon, const double *lat, double *area)
{
int nx, ny, nxp, i, j, n_in;
double x_in[20], y_in[20];
Expand All @@ -736,7 +711,7 @@ void get_grid_area(const int *nlon, const int *nlat, const double *lon, const do
x_in[0] = lon[j*nxp+i];
x_in[1] = lon[j*nxp+i+1];
x_in[2] = lon[(j+1)*nxp+i+1];
x_in[3] = lon[(j+1)*nxp+i];
x_in[3] = lon[(j+1)*nxp+i]; // fails here
y_in[0] = lat[j*nxp+i];
y_in[1] = lat[j*nxp+i+1];
y_in[2] = lat[(j+1)*nxp+i+1];
Expand All @@ -752,12 +727,7 @@ void get_grid_area(const int *nlon, const int *nlat, const double *lon, const do
void get_grid_area_ug(const int *npts, const double *lon, const double *lat, const double *area)
return the grid area.
*******************************************************************************/
void get_grid_area_ug_(const int *npts, const double *lon, const double *lat, double *area)
{
get_grid_area_ug(npts, lon, lat, area);
}

void get_grid_area_ug(const int *npts, const double *lon, const double *lat, double *area)
void get_grid_area_ug(const int* npts, const double *lon, const double *lat, double *area)
{
int nl, l, n_in, nv;
double x_in[20], y_in[20];
Expand All @@ -780,21 +750,13 @@ void get_grid_area_ug(const int *npts, const double *lon, const double *lat, dou

} /* get_grid_area_ug */


void get_grid_great_circle_area_(const int *nlon, const int *nlat, const double *lon, const double *lat, double *area)
{
get_grid_great_circle_area(nlon, nlat, lon, lat, area);

}

void get_grid_great_circle_area(const int *nlon, const int *nlat, const double *lon, const double *lat, double *area)
void get_grid_great_circle_area(const int* nlon, const int* nlat, const double *lon, const double *lat, double *area)
{
int nx, ny, nxp, nyp, i, j;
int n0, n1, n2, n3;
struct Node *grid=NULL;
double *x=NULL, *y=NULL, *z=NULL;


nx = *nlon;
ny = *nlat;
nxp = nx + 1;
Expand Down Expand Up @@ -827,13 +789,7 @@ void get_grid_great_circle_area(const int *nlon, const int *nlat, const double *

} /* get_grid_great_circle_area */

void get_grid_great_circle_area_ug_(const int *npts, const double *lon, const double *lat, double *area)
{
get_grid_great_circle_area_ug(npts, lon, lat, area);

}

void get_grid_great_circle_area_ug(const int *npts, const double *lon, const double *lat, double *area)
void get_grid_great_circle_area_ug(const int* npts, const double *lon, const double *lat, double *area)
{
int l, nl, nv;
int n0, n1, n2, n3;
Expand Down Expand Up @@ -870,7 +826,7 @@ void get_grid_great_circle_area_ug(const int *npts, const double *lon, const dou

} /* get_grid_great_circle_area_ug */

void get_grid_area_dimensionless(const int *nlon, const int *nlat, const double *lon, const double *lat, double *area)
void get_grid_area_dimensionless(const int* nlon, const int* nlat, const double *lon, const double *lat, double *area)
{
int nx, ny, nxp, i, j, n_in;
double x_in[20], y_in[20];
Expand All @@ -896,7 +852,7 @@ void get_grid_area_dimensionless(const int *nlon, const int *nlat, const double



void get_grid_area_no_adjust(const int *nlon, const int *nlat, const double *lon, const double *lat, double *area)
void get_grid_area_no_adjust(const int* nlon, const int* nlat, const double *lon, const double *lat, double *area)
{
int nx, ny, nxp, i, j, n_in;
double x_in[20], y_in[20];
Expand Down Expand Up @@ -1734,3 +1690,5 @@ int inside_edge(double x0, double y0, double x1, double y1, double x, double y)
return (product<=SMALL) ? 1:0;

} /* inside_edge */

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

extra lines


33 changes: 14 additions & 19 deletions grid_utils/grid_utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,15 @@
#define max(a,b) (a>b ? a:b)
#define SMALL_VALUE ( 1.e-10 )

// append underscore so we can call from fortran
#define get_maxxgrid get_maxxgrid_
#define get_global_area get_global_area_
#define get_grid_area get_grid_area_
#define get_grid_great_circle_area get_grid_great_circle_area_
#define get_grid_area_no_adjust get_grid_area_no_adjust_
#define get_grid_area_ug get_grid_area_ug_
#define inside_a_polygon inside_a_polygon_

void error_handler(const char *msg);

int lon_fix(double *x, double *y, int n_in, double tlon);
Expand Down Expand Up @@ -84,8 +93,6 @@ int inside_a_polygon( double *lon1, double *lat1, int *npts, double *lon2, doubl

int samePoint(double x1, double y1, double z1, double x2, double y2, double z2);

int inside_a_polygon_(double *lon1, double *lat1, int *npts, double *lon2, double *lat2);

int inside_edge(double x0, double y0, double x1, double y1, double x, double y);

int line_intersect_2D_3D(double *a1, double *a2, double *q1, double *q2, double *q3,
Expand All @@ -97,24 +104,20 @@ double poly_ctrlat(const double lon[], const double lat[], int n);

int get_maxxgrid(void);

int get_maxxgrid_(void);

double get_global_area(void);

double get_global_area_(void);

double poly_area(const double lon[], const double lat[], int n);

double poly_area_dimensionless(const double x[], const double y[], int n);

double spherical_excess_area(const double* p_ll, const double* p_ul,
const double* p_lr, const double* p_ur, double radius);

void get_grid_area(const int *nlon, const int *nlat, const double *lon, const double *lat, double *area);
void get_grid_area(const int* nlon, const int* nlat, const double *lon, const double *lat, double *area);

void get_grid_great_circle_area(const int *nlon, const int *nlat, const double *lon, const double *lat, double *area);
void get_grid_great_circle_area(const int* nlon, const int* nlat, const double *lon, const double *lat, double *area);

void get_grid_area_no_adjust(const int *nlon, const int *nlat, const double *lon, const double *lat, double *area);
void get_grid_area_no_adjust(const int* nlon, const int* nlat, const double *lon, const double *lat, double *area);

int clip(const double lon_in[], const double lat_in[], int n_in, double ll_lon, double ll_lat,
double ur_lon, double ur_lat, double lon_out[], double lat_out[]);
Expand All @@ -127,16 +130,8 @@ int clip_2dx2d_great_circle(const double x1_in[], const double y1_in[], const do
const double x2_in[], const double y2_in[], const double z2_in [], int n2_in,
double x_out[], double y_out[], double z_out[]);

void get_grid_area_ug(const int *npts, const double *lon, const double *lat, double *area);

void get_grid_great_circle_area_ug(const int *npts, const double *lon, const double *lat, double *area);

void get_grid_area_(const int *nlon, const int *nlat, const double *lon, const double *lat, double *area);

void get_grid_great_circle_area_(const int *nlon, const int *nlat, const double *lon, const double *lat, double *area);

void get_grid_area_ug_(const int *npts, const double *lon, const double *lat, double *area);
void get_grid_area_ug(const int* npts, const double *lon, const double *lat, double *area);

void get_grid_great_circle_area_ug_(const int *npts, const double *lon, const double *lat, double *area);
void get_grid_great_circle_area_ug(const int* npts, const double *lon, const double *lat, double *area);

#endif
4 changes: 2 additions & 2 deletions horiz_interp/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -37,15 +37,15 @@ libhoriz_interp_la_SOURCES = \
horiz_interp.F90 \
horiz_interp_spherical.F90 \
horiz_interp_type.F90 \
create_xgrid_utils.c \
include/horiz_interp_bicubic.inc \
include/horiz_interp_bilinear.inc \
include/horiz_interp_conserve.inc \
include/horiz_interp.inc \
include/horiz_interp_spherical.inc \
include/horiz_interp_type.inc \
include/horiz_interp_bicubic_r4.fh \
include/horiz_interp_conserve_xgrid.h \
include/horiz_interp_conserve_xgrid.c \
include/create_xgrid.h \
include/horiz_interp_bilinear_r4.fh \
include/horiz_interp_conserve_r4.fh \
include/horiz_interp_r4.fh \
Expand Down
Loading
Loading