Ice Sheet System Model
4.18
Code documentation
src
c
classes
kriging
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*/
15
PowerVariogram::PowerVariogram
(){
/*{{{*/
16
this->
nugget
= 0.2;
17
this->
slope
= 1.;
18
this->
power
= 1.;
19
return
;
20
}
21
/*}}}*/
22
PowerVariogram::PowerVariogram
(
Options
* options){
/*{{{*/
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
/*}}}*/
39
PowerVariogram::~PowerVariogram
(){
/*{{{*/
40
return
;
41
}
42
/*}}}*/
43
44
/*Object virtual functions definitions:*/
45
Object
*
PowerVariogram::copy
(
void
){
/*{{{*/
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
Generated on Thu Jul 2 2020 08:09:17 for Ice Sheet System Model by
1.8.19