#include "genlib.h" #include "geostat.h" #include "log.h" #include #include /*selection of model covariance*/ double cov_value(struct vario_mod variogram, double di, double dj, double dk) { double* used_ram_t0 = malloc(sizeof(double)); getVirtualMemUsed(used_ram_t0); 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* used_ram_tf = malloc(sizeof(double)); getVirtualMemUsed(used_ram_tf); log_info("RESULT = success, hx = %f, hy = %f, hz = %f, h = %f, cov = %f, ELAPSED = %f seconds, DIF USED VIRTUAL MEM = %5.1f MB", hx, hy, hz, h, cov, time_taken, *used_ram_tf - *used_ram_t0); free(used_ram_t0); free(used_ram_tf); return cov; }