124 lines
3.6 KiB
C
124 lines
3.6 KiB
C
|
|
#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__
|