You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
simulacion-permeabilidad/fftma_module/gen/lib_src/cov_value.c

76 lines
2.3 KiB
C

#include "genlib.h"
#include "geostat.h"
#include "log.h"
#include <math.h>
#include <time.h>
/*selection of model covariance*/
double cov_value(struct vario_mod variogram, double di, double dj, double dk) {
clock_t t = clock();
log_info("RESULT = in progress, di = %f, dj = %f, dk = %f", di, dj, dk);
double hx, hy, hz, h;
double cov;
int k;
cov = 0.;
for (k = 0; k < variogram.Nvario; k++) {
hx = di * variogram.ap[9 * k] + dj * variogram.ap[9 * k + 1] + dk * variogram.ap[9 * k + 2];
hy = di * variogram.ap[9 * k + 3] + dj * variogram.ap[9 * k + 4] + dk * variogram.ap[9 * k + 5];
hz = di * variogram.ap[9 * k + 6] + dj * variogram.ap[9 * k + 7] + dk * variogram.ap[9 * k + 8];
h = sqrt(hx * hx + hy * hy + hz * hz);
switch (variogram.vario[k]) {
case 1:
cov += variogram.var[k] * exponential(h);
break;
case 2:
cov += variogram.var[k] * gaussian(h);
break;
case 3:
cov += variogram.var[k] * spherical(h);
break;
case 4:
cov += variogram.var[k] * cardsin(h);
break;
case 5:
cov += variogram.var[k] * stable(h, variogram.alpha[k]);
break;
case 6:
cov += variogram.var[k] * gammf(h, variogram.alpha[k]);
break;
case 7:
cov += variogram.var[k] * cubic(h);
break;
case 8:
cov += variogram.var[k] * nugget(h);
break;
case 9:
cov += variogram.var[k] * power(h, variogram.alpha[k]);
break;
}
}
t = clock() - t;
double time_taken = ((double)t)/CLOCKS_PER_SEC; // calculate the elapsed time
double* total_ram = malloc(sizeof(double));
getTotalVirtualMem(total_ram);
double* used_ram = malloc(sizeof(double));
getVirtualMemUsed(used_ram);
log_info("TOTAL VIRTUAL MEM = %5.1f MB, USED VIRTUAL MEM = %5.1f MB, USED VIRTUAL MEM BY CURRENT PROCESS = %d MB",
*total_ram, *used_ram, getVirtualMemUsedByCurrentProcess());
free(total_ram);
free(used_ram);
log_info("RESULT = success, hx = %f, hy = %f, hz = %f, h = %f, cov = %f, ELAPSED = %f seconds", hx, hy, hz, h, cov, time_taken);
return cov;
}