Ice Sheet System Model  4.18
Code documentation
PowerVariogram.cpp
Go to the documentation of this file.
1 
5 #ifdef HAVE_CONFIG_H
6  #include <config.h>
7 #else
8 #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
9 #endif
10 
11 #include "../classes.h"
12 #include "../../shared/shared.h"
13 
14 /*PowerVariogram constructors and destructor*/
16  this->nugget = 0.2;
17  this->slope = 1.;
18  this->power = 1.;
19  return;
20 }
21 /*}}}*/
23 
24  /*Defaults*/
25  this->nugget = 0.2;
26  this->slope = 1.;
27  this->power = 1.;
28 
29  /*Overwrite from options*/
30  if(options->GetOption("nugget")) options->Get(&this->nugget,"nugget");
31  if(options->GetOption("slope")) options->Get(&this->slope,"slope");
32  if(options->GetOption("power")) options->Get(&this->power,"power");
33 
34  /*Checks*/
35  if(power<=0 || power>=2) _error_("power must be betwwen 0 and 2 (0 < power < 2)");
36  if(slope<=0) _error_("slope must be positive");
37 }
38 /*}}}*/
40  return;
41 }
42 /*}}}*/
43 
44 /*Object virtual functions definitions:*/
46  return new PowerVariogram(*this);
47 }
48 /*}}}*/
49 void PowerVariogram::Echo(void){/*{{{*/
50  _printf_("PowerVariogram\n");
51  _printf_(" nugget: " << this->nugget << "\n");
52  _printf_(" slope : " << this->slope << "\n");
53  _printf_(" power : " << this->power << "\n");
54 }
55 /*}}}*/
56 
57 /*Variogram function*/
58 double PowerVariogram::Covariance(double deltax,double deltay){/*{{{*/
59  /*The covariance can be deduced from the variogram from the following
60  * relationship:
61  * 2 gamma = C(x,x) + C(y,y) -2 C(x,y)
62  * so
63  * C(h) = sill - gamma */
64  double h,cova;
65 
66  /*Calculate length square*/
67  h=sqrt(deltax*deltax + deltay*deltay);
68 
69  /*return covariance*/
70  cova = 9999. - this->slope*pow(h,this->power);
71 
72  return cova;
73 }
74 /*}}}*/
75 double PowerVariogram::SemiVariogram(double deltax,double deltay){/*{{{*/
76  /*http://en.wikipedia.org/wiki/Variogram*/
77  double h,gamma;
78 
79  /*Calculate length square*/
80  h=sqrt(deltax*deltax + deltay*deltay);
81 
82  /*return semi-variogram*/
83  gamma = this->nugget + this->slope*pow(h,this->power);
84 
85  //if(h>1000) _printf_("gamma = " << gamma << " h=" << h << "\n");
86  return gamma;
87 }
88 /*}}}*/
PowerVariogram::copy
Object * copy()
Definition: PowerVariogram.cpp:45
Options
Definition: Options.h:9
PowerVariogram::Covariance
double Covariance(double deltax, double deltay)
Definition: PowerVariogram.cpp:58
_printf_
#define _printf_(StreamArgs)
Definition: Print.h:22
Object
Definition: Object.h:13
PowerVariogram::power
double power
Definition: PowerVariogram.h:16
Options::Get
void Get(OptionType *pvalue, const char *name)
Definition: Options.h:21
PowerVariogram::PowerVariogram
PowerVariogram()
Definition: PowerVariogram.cpp:15
Options::GetOption
Option * GetOption(const char *name)
Definition: Options.cpp:67
PowerVariogram::nugget
double nugget
Definition: PowerVariogram.h:14
PowerVariogram::Echo
void Echo()
Definition: PowerVariogram.cpp:49
_error_
#define _error_(StreamArgs)
Definition: exceptions.h:49
PowerVariogram::~PowerVariogram
~PowerVariogram()
Definition: PowerVariogram.cpp:39
PowerVariogram::slope
double slope
Definition: PowerVariogram.h:15
PowerVariogram::SemiVariogram
double SemiVariogram(double deltax, double deltay)
Definition: PowerVariogram.cpp:75