Commit source

This commit is contained in:
kradchen
2023-05-18 16:04:27 +08:00
parent 88cf81e4ea
commit c6cd188732
83 changed files with 39921 additions and 0 deletions

124
FastMarching/src/common.h Normal file
View File

@@ -0,0 +1,124 @@
#ifndef __COMMON_H__
#define __COMMON_H__
#include <math.h>
#include <stdio.h>
#define eps 2.2204460492503131e-16
#define doublemax 1e50
#define INF 2e50
#define listINF 2.345e50
#ifndef min
#define min(a,b) ((a) < (b) ? (a): (b))
#endif
#ifndef max
#define max(a,b) ((a) > (b) ? (a): (b))
#endif
/* Find minimum value of an array and return its index */
inline int minarray(double *A, int l) {
int i;
int minind=0;
for (i=0; i<l; i++) { if(A[i]<A[minind]){ minind=i; } }
return minind;
}
inline double pow2(double val) { return val*val; }
// int iszero(double a){ return a*a<eps; }
inline int isnotzero(double a){ return a*a>eps; }
void roots(double* Coeff, double* ans);
inline int maxarray(double *A, int l) {
int i;
int maxind=0;
for (i=0; i<l; i++) { if(A[i]>A[maxind]){ maxind=i; } }
return maxind;
}
inline int mindex3(int x, int y, int z, int sizx, int sizy) { return x+y*sizx+z*sizx*sizy; }
inline bool IsFinite(double x) { return (x <= doublemax && x >= -doublemax ); }
inline bool IsInf(double x) { return (x >= doublemax ); }
inline bool IsListInf(double x){ return (x == listINF ); }
inline bool isntfrozen3d(int i, int j, int k, int *dims, bool *Frozen) {
return (i>=0)&&(j>=0)&&(k>=0)&&(i<dims[0])&&(j<dims[1])&&(k<dims[2])&&(Frozen[mindex3(i, j, k, dims[0], dims[1])]==0);
}
inline bool isfrozen3d(int i, int j, int k, int *dims, bool *Frozen) {
return (i>=0)&&(j>=0)&&(k>=0)&&(i<dims[0])&&(j<dims[1])&&(k<dims[2])&&(Frozen[mindex3(i, j, k, dims[0], dims[1])]==1);
}
inline int p2x(int x) /* 2^x */
{
/* return pow(2,x); */
int y=1;
int p2x[16] ={1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768};
while(x>15) { x=x-15; y=y*32768; }
return y*p2x[x];
}
inline void show_list(double **listval, int *listprop) {
int z, k;
for(z=0;z<listprop[1]; z++) {
for(k=0;k<p2x(z+1); k++) {
if((z>0)&&(listval[z-1][(int)floor(k/2)]>listval[z][k])) {
printf("*%15.5f", listval[z][k]);
}
else {
printf(" %15.5f", listval[z][k]);
}
}
printf("\n");
}
}
inline void initialize_list(double ** listval, int *listprop) {
/* Loop variables */
int i;
/* Current Length, Orde and Current Max Length */
listprop[0]=0; listprop[1]=1; listprop[2]=2;
/* Make first orde storage of 2 values */
listval[0]=(double*)malloc(2 * sizeof(double));
/* Initialize on infinite */
for(i=0;i<2;i++) { listval[0][i]=listINF; }
}
inline void destroy_list(double ** listval, int *listprop) {
/* Loop variables */
int i, list_orde;
/* Get list orde */
list_orde=listprop[1];
/* Free memory */
for(i=0;i<list_orde;i++) { free(listval[i]); }
free(listval);
free(listprop);
}
void list_add(double ** listval, int *listprop, double val) ;
int list_minimum(double ** listval, int *listprop);
void list_remove(double ** listval, int *listprop, int index);
void list_remove_replace(double ** listval, int *listprop, int index);
void listupdate(double **listval, int *listprop, int index, double val);
inline int mindex2(int x, int y, int sizx) { return x+y*sizx; }
inline bool isntfrozen2d(int i, int j, int *dims, bool *Frozen)
{
return (i>=0)&&(j>=0)&&(i<dims[0])&&(j<dims[1])&&(Frozen[i+j*dims[0]]==0);
}
inline bool isfrozen2d(int i, int j, int *dims, bool *Frozen)
{
return (i>=0)&&(j>=0)&&(i<dims[0])&&(j<dims[1])&&(Frozen[i+j*dims[0]]==1);
}
#endif // __COMMON_H__