diff --git a/grid_tools/slice.c b/grid_tools/slice.c new file mode 100644 index 0000000000000000000000000000000000000000..5409fb5fc68c7d62921fab845cde017fd98a4dae --- /dev/null +++ b/grid_tools/slice.c @@ -0,0 +1,15 @@ +#include <stdlib.h> +#include "grid_reader.h" +int main(int argc, char** argv) +{ + char* input = argv[1]; + char* output = argv[2]; + int nx = atoi(argv[3]); + int ny = atoi(argv[4]); + int nz = atoi(argv[5]); + void* grid = gridformat_reader(input); + slice_grid(&grid, nx,ny,nz); + gridformat_writer(output, grid); + grid_destroy(grid); + return 0; +} diff --git a/grid_tools/sub.c b/grid_tools/sub.c new file mode 100644 index 0000000000000000000000000000000000000000..5ab8e706eb4bdeb19441a28cffd8d3bac96dd100 --- /dev/null +++ b/grid_tools/sub.c @@ -0,0 +1,79 @@ +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <unistd.h> +#include "grid_reader.h" +#include <stdio.h> +static void parse_input(char*** input, int* num, char** args) +{ + size_t size = 4; + *input = (char**)malloc(size*sizeof(char*)); + char** tmp = args; + size_t count = 0; + while(*tmp != NULL) + { + (*input)[count++] = strdup(*tmp); + if(count==size) + { + size <<= 1; + *input = (char**)realloc(*input, size*sizeof(char*)); + } + tmp++; + if(strcmp(*tmp, "-o") == 0) + break; + } + (*input)[count] = NULL; + *num = count; +} + +static void parse_string(char** argv, char*** input, +int* num, char** output) +{ + char** ptr = argv; + while(*ptr != NULL) + { + if(strcmp(*ptr, "-i") == 0) + { + parse_input(input, num, ++ptr); + } + else if(strcmp(*ptr, "-o") == 0) + { + *output = strdup(*(++ptr)); + } + else + ++ptr; + } +} + +int main(int argc, char** argv) +{ + char** input_file_name=NULL; + char* output_file_name=NULL; + int num = 0; + parse_string(argv, &input_file_name, &num, &output_file_name); + if(num != 2) + { + fprintf(stderr, "input error\n"); + exit(-1); + } + void** grid = malloc(sizeof(void*)*num); + + for(size_t i = 0; i < (size_t)num; ++i) + grid[i] = gridformat_reader(input_file_name[i]); + printf("%d\n", num); + void* out_grid = copy_grid_format(grid[0]); + sub_grids(out_grid, grid[0], grid[1]); + + gridformat_writer(output_file_name, out_grid); + for(size_t i = 0; i < (size_t)num; ++i) + { + grid_destroy(grid[i]); + free(input_file_name[i]); + } + free(input_file_name); + free(grid); + grid_destroy(out_grid); + free(output_file_name); + + return 0; +} diff --git a/grid_tools/sum.c b/grid_tools/sum.c new file mode 100644 index 0000000000000000000000000000000000000000..a51975cef677771eefe81792f368dea368cfc9ca --- /dev/null +++ b/grid_tools/sum.c @@ -0,0 +1,74 @@ +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <unistd.h> +#include "grid_reader.h" + +static void parse_input(char*** input, int* num, char** args) +{ + size_t size = 4; + *input = (char**)malloc(size*sizeof(char*)); + char** tmp = args; + size_t count = 0; + while(*tmp != NULL) + { + (*input)[count++] = strdup(*tmp); + if(count==size) + { + size <<= 1; + *input = (char**)realloc(*input, size*sizeof(char*)); + } + tmp++; + if(strcmp(*tmp, "-o") == 0) + break; + } + (*input)[count] = NULL; + *num = count; +} + +static void parse_string(char** argv, char*** input, +int* num, char** output) +{ + char** ptr = argv; + while(*ptr != NULL) + { + if(strcmp(*ptr, "-i") == 0) + { + parse_input(input, num, ++ptr); + } + else if(strcmp(*ptr, "-o") == 0) + { + *output = strdup(*(++ptr)); + } + else + ++ptr; + } +} + +int main(int argc, char** argv) +{ + char** input_file_name=NULL; + char* output_file_name=NULL; + int num = 0; + parse_string(argv, &input_file_name, &num, &output_file_name); + void** grid = malloc(sizeof(void*)*num); + + for(size_t i = 0; i < (size_t)num; ++i) + grid[i] = gridformat_reader(input_file_name[i]); + printf("%d\n", num); + void* out_grid = copy_grid_format(grid[0]); + sum_grids(out_grid, num, grid); + + gridformat_writer(output_file_name, out_grid); + for(size_t i = 0; i < (size_t)num; ++i) + { + grid_destroy(grid[i]); + free(input_file_name[i]); + } + free(input_file_name); + free(grid); + grid_destroy(out_grid); + free(output_file_name); + + return 0; +} diff --git a/grid_tools/sum_to_scalar.c b/grid_tools/sum_to_scalar.c new file mode 100644 index 0000000000000000000000000000000000000000..1be9339b274e4a01296c22dbe512a1c9ee78df7d --- /dev/null +++ b/grid_tools/sum_to_scalar.c @@ -0,0 +1,26 @@ +#include <stdlib.h> +#include <stdio.h> +#include "grid_reader.h" +double sum(void* src) +{ + double* data = get_grid_data(src); + size_t size = get_size(src); + double** delta = get_grid_basis(src); + double dv = delta[0][0]*delta[1][1]*delta[2][2]; + double f = 0.; + for(size_t i = 0; i < size; ++i) + { + f += data[i]*dv; + } + return f; +} + +int main(int argc, const char** argv) +{ + char* input_file_name=argv[1]; + void* grid; + grid = gridformat_reader(input_file_name); + printf("%lf\n", sum(grid)); + grid_destroy(grid); + return 0; +}