Commit source
This commit is contained in:
124
FastMarching/src/common.h
Normal file
124
FastMarching/src/common.h
Normal 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__
|
||||
Reference in New Issue
Block a user