wdsp/make_zetahat.c
Uladzimir Karpenka 89c8a0e2b5 first commit
2026-06-01 15:58:45 +03:00

132 lines
3.0 KiB
C

/*
* make_zetahat
*
* This program reads the contents of the binary WDSP file "zetaHat.bin"
* and prints the data.
*
* The output is intended to be part of the file "zetaHat.c" which
* initializes these arrays (static data) for use with "memcpy"
* in emnr.c.
*
* Should the WDSP file "zetaHat.bin" be changed, "zetaHat.c" must
* be re-generated using this program.
*
* return values of main()
*
* 0 all OK
* -1 sizeof(double) is not 8
* -2 error opening file "zetaHat.bin"
* -3 read error
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
int main() {
int fd;
int i,j;
double d;
const size_t dsize = sizeof(double);
const size_t isize = sizeof(int);
int rows, cols;
double gmin, gmax, ximin, ximax;
double *zetaDouble;
int *zetaInt;
if (dsize != 8) {
printf("Data type DOUBLE is not 8-byte. Please check!\n");
return -1;
}
if (isize != 4) {
printf("Data type INT is not 4-byte. Please check!\n");
return -1;
}
fd=open ("zetaHat.bin", O_RDONLY);
if (fd < 0) {
printf("Could not open file 'zetaHat.bin'\n");
return -2;
}
if (read(fd, &rows,isize) != isize) {
printf("READ ERROR rows\n");
return -3;
}
printf("int zetaHatDefaultRows = %d;\n", rows);
if (read(fd, &cols,isize) != isize) {
printf("READ ERROR cols\n");
return -3;
}
printf("int zetaHatDefaultCols = %d;\n", cols);
if (read(fd, &gmin, dsize) != dsize) {
printf("READ ERROR gmin\n");
return -3;
}
printf("double zetaHatDefaultGmin = %30.25f;\n", gmin);
if (read(fd, &gmax, dsize) != dsize) {
printf("READ ERROR gmax\n");
return -3;
}
printf("double zetaHatDefaultGmax = %30.25f;\n", gmax);
if (read(fd, &ximin, dsize) != dsize) {
printf("READ ERROR ximin\n");
return -3;
}
printf("double zetaHatDefaultXimin = %30.25f;\n", ximin);
if (read(fd, &ximax, dsize) != dsize) {
printf("READ ERROR ximax\n");
return -3;
}
printf("double zetaHatDefaultXimax = %30.25f;\n", ximax);
zetaDouble = malloc(rows*cols*dsize);
if (zetaDouble == NULL) {
printf("MALLOC ERROR Double\n");
}
zetaInt = malloc(rows*cols*isize);
if (zetaInt == NULL) {
printf("MALLOC ERROR Int\n");
}
if (read(fd, zetaDouble, rows*cols*dsize) != rows*cols*dsize) {
printf("READ ERROR in zetaHatDouble\n");
}
if (read(fd, zetaInt, rows*cols*isize) != rows*cols*isize) {
printf("READ ERROR in zetaHatInt\n");
}
//
// ZetaDouble data is only valid where ZetaInt is non-negative.
// So report a zero where this is the case
//
for (i=0; i< rows*cols; i++) {
if (zetaInt[i] < 0) zetaDouble[i]=0.0;
}
printf("double zetaHatDefaultData[%d]={\n", rows*cols);
for (i=0; i<rows*cols-1; i++) {
printf("%30.25f,", zetaDouble[i]);
if (i % 4 == 3) printf("\n");
}
printf("%30.25f\n};\n", zetaDouble[rows*cols-1]);
printf("int zetaHatDefaultValid[%d]={\n", rows*cols);
for (i=0; i<rows*cols-1; i++) {
printf("%3d,", zetaInt[i]);
if (i % 30 == 29) printf("\n");
}
printf("%3d\n};\n", zetaInt[rows*cols-1]);
return 0;
}