Skip to content

Commit 5f424d7

Browse files
committed
Add new classes and update existing
1 parent 03c2983 commit 5f424d7

File tree

8 files changed

+457
-1
lines changed

8 files changed

+457
-1
lines changed
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
/*
2+
* GNU GPL v3 License
3+
*
4+
* Copyright 2019 Niccolo` Tubini
5+
*
6+
* This program is free software: you can redistribute it and/or modify
7+
* it under the terms of the GNU General Public License as published by
8+
* the Free Software Foundation, either version 3 of the License, or
9+
* (at your option) any later version.
10+
*
11+
* This program is distributed in the hope that it will be useful,
12+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+
* GNU General Public License for more details.
15+
*
16+
* You should have received a copy of the GNU General Public License
17+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
18+
*/
19+
20+
21+
/**
22+
*
23+
*/
24+
package it.geoframe.blogspot.closureequation.closureequation;
25+
26+
/**
27+
* @author Niccolo` Tubini
28+
*
29+
*/
30+
public class NoneClosureEquation extends SoilFreezingCharacteristicCurve {
31+
32+
33+
@Override
34+
public double f(double x, int id) {
35+
36+
return -9999.0;
37+
38+
}
39+
40+
41+
42+
@Override
43+
public double df(double x, int id) {
44+
45+
return -9999.0;
46+
47+
}
48+
49+
50+
@Override
51+
public double ddf(double x, int id) {
52+
53+
return -9999.0;
54+
55+
}
56+
57+
58+
59+
@Override
60+
public double f(double x, double y, int i) {
61+
// TODO Auto-generated method stub
62+
return -9999.0;
63+
}
64+
65+
66+
67+
@Override
68+
public double df(double x, double y, int i) {
69+
// TODO Auto-generated method stub
70+
return -9999.0;
71+
}
72+
73+
74+
75+
@Override
76+
public double ddf(double x, double y, int i) {
77+
// TODO Auto-generated method stub
78+
return -9999.0;
79+
}
80+
81+
82+
}
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
/*
2+
* GNU GPL v3 License
3+
*
4+
* Copyright 2019 Niccolo` Tubini
5+
*
6+
* This program is free software: you can redistribute it and/or modify
7+
* it under the terms of the GNU General Public License as published by
8+
* the Free Software Foundation, either version 3 of the License, or
9+
* (at your option) any later version.
10+
*
11+
* This program is distributed in the hope that it will be useful,
12+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+
* GNU General Public License for more details.
15+
*
16+
* You should have received a copy of the GNU General Public License
17+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
18+
*/
19+
20+
21+
/**
22+
*
23+
*/
24+
package it.geoframe.blogspot.closureequation.closureequation;
25+
26+
27+
28+
/**
29+
* @author Niccolo` Tubini
30+
*
31+
* Gardner SWRC
32+
*/
33+
public class SWRCGardner extends SoilWaterRetentionCurve {
34+
35+
36+
@Override
37+
public double f(double x, double y, int id) {
38+
39+
if(x>=0.0) {
40+
return super.parameters.thetaS[id] +
41+
9.81*(super.parameters.alphaSpecificStorage[id] + super.parameters.thetaS[id]*super.parameters.betaSpecificStorage[id])*x;
42+
} else {
43+
44+
return super.parameters.thetaR[id] + (super.parameters.thetaS[id]-super.parameters.thetaR[id])
45+
*Math.exp(super.parameters.par1[id]*x);
46+
}
47+
}
48+
49+
50+
51+
@Override
52+
public double df(double x, double y, int id) {
53+
54+
if(x>=0.0) {
55+
return 9.81*( super.parameters.alphaSpecificStorage[id] + super.parameters.thetaS[id]*super.parameters.betaSpecificStorage[id] );
56+
} else {
57+
return super.parameters.thetaR[id] + (super.parameters.thetaS[id]-super.parameters.thetaR[id])
58+
*Math.exp(super.parameters.par1[id]*x)*super.parameters.par1[id];
59+
}
60+
}
61+
62+
63+
@Override
64+
public double ddf(double x, double y, int id) {
65+
66+
return -9999.0;
67+
68+
}
69+
70+
71+
72+
@Override
73+
public double f(double x, int i) {
74+
75+
return -9999.0;
76+
77+
}
78+
79+
80+
81+
@Override
82+
public double df(double x, int i) {
83+
84+
return -9999.0;
85+
86+
}
87+
88+
89+
90+
@Override
91+
public double ddf(double x, int i) {
92+
93+
return 0;
94+
95+
}
96+
97+
98+
}
Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
/*
2+
* GNU GPL v3 License
3+
*
4+
* Copyright 2019 Niccolo` Tubini
5+
*
6+
* This program is free software: you can redistribute it and/or modify
7+
* it under the terms of the GNU General Public License as published by
8+
* the Free Software Foundation, either version 3 of the License, or
9+
* (at your option) any later version.
10+
*
11+
* This program is distributed in the hope that it will be useful,
12+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+
* GNU General Public License for more details.
15+
*
16+
* You should have received a copy of the GNU General Public License
17+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
18+
*/
19+
20+
21+
/**
22+
*
23+
*/
24+
package it.geoframe.blogspot.closureequation.closureequation;
25+
26+
27+
28+
/**
29+
* @author Niccolo` Tubini
30+
*
31+
* Van Genuchten SWRC
32+
*/
33+
public class SWRCVanGenuchtenDallAmico extends SoilWaterRetentionCurve {
34+
35+
private double m;
36+
private double meltingTemperature;
37+
private double tmp;
38+
private double psiT;
39+
40+
41+
@Override
42+
public double f(double x, double y, int id) {
43+
44+
m = 1-1/super.parameters.par1[id];
45+
meltingTemperature = 273.15 + 9.81*273.15/super.parameters.latentHeatFusion*x;
46+
if(y>meltingTemperature) {
47+
if(x>=0) {
48+
return super.parameters.thetaS[id];
49+
} else {
50+
return super.parameters.thetaR[id] + (super.parameters.thetaS[id]-super.parameters.thetaR[id])
51+
*Math.pow( 1.0 + Math.pow(Math.abs(super.parameters.par2[id]*x), super.parameters.par1[id]), -m);
52+
}
53+
} else {
54+
psiT = x + super.parameters.latentHeatFusion/(9.81*meltingTemperature)*(y-meltingTemperature);
55+
if(psiT>=0) {
56+
return super.parameters.thetaS[id];
57+
} else {
58+
return super.parameters.thetaR[id] + (super.parameters.thetaS[id]-super.parameters.thetaR[id])
59+
*Math.pow( 1.0 + Math.pow(Math.abs(super.parameters.par2[id]*psiT), super.parameters.par1[id]), -m);
60+
}
61+
}
62+
63+
}
64+
65+
66+
67+
@Override
68+
public double df(double x, double y, int id) {
69+
70+
m = 1-1/super.parameters.par1[id];
71+
meltingTemperature = 273.15 + 9.81*273.15/super.parameters.latentHeatFusion*x;
72+
if(y>meltingTemperature) {
73+
if(x>=0) {
74+
return 0.0;
75+
} else {
76+
return 0.0;
77+
}
78+
} else {
79+
psiT = x+super.parameters.latentHeatFusion/(9.81*meltingTemperature)*(y-meltingTemperature);
80+
tmp = super.parameters.latentHeatFusion/(9.81*meltingTemperature);
81+
if(psiT>=0) {
82+
return 0.0;
83+
} else {
84+
// return (super.parameters.thetaS[id]-super.parameters.thetaR[id])*m*super.parameters.par1[id]*super.parameters.par2[id]*tmp
85+
// *Math.pow( 1.0 + Math.pow(Math.abs(super.parameters.par2[id]*(x+tmp*(y-meltingTemperature))), super.parameters.par1[id]), -m-1)
86+
// *Math.pow(Math.abs(super.parameters.par2[id]*(x+tmp*(y-meltingTemperature))), super.parameters.par1[id]-1);
87+
return (super.parameters.thetaS[id]-super.parameters.thetaR[id])*m*super.parameters.par1[id]*super.parameters.par2[id]*tmp
88+
*Math.pow( 1.0 + Math.pow(Math.abs(super.parameters.par2[id]*psiT), super.parameters.par1[id]), -m-1)
89+
*Math.pow(Math.abs(super.parameters.par2[id]*psiT), super.parameters.par1[id]-1);
90+
}
91+
}
92+
93+
}
94+
95+
96+
@Override
97+
public double ddf(double x, double y, int id) {
98+
99+
m = 1-1/super.parameters.par1[id];
100+
meltingTemperature = 273.15 + 9.81*273.15/super.parameters.latentHeatFusion*x;
101+
if(y>meltingTemperature) {
102+
if(x>0) {
103+
return 0.0;
104+
} else {
105+
return 0.0;
106+
}
107+
} else {
108+
psiT = x+super.parameters.latentHeatFusion/(9.81*meltingTemperature)*(y-meltingTemperature);
109+
tmp = super.parameters.latentHeatFusion/(9.81*meltingTemperature);
110+
if(psiT>=0) {
111+
return 0.0;
112+
} else {
113+
// return (super.parameters.thetaS[id]-super.parameters.thetaR[id])*m*super.parameters.par1[id] * Math.pow( Math.abs(super.parameters.par2[id]*(x+tmp*(y-meltingTemperature))), super.parameters.par1[id] ) * Math.pow(1+Math.pow(Math.abs(super.parameters.par2[id]*(x+tmp*(y-meltingTemperature))),super.parameters.par1[id]), -m-2)*
114+
// ( super.parameters.par1[id]*Math.pow(super.parameters.par2[id]*tmp,2)*(m+1) * Math.pow(Math.abs(super.parameters.par2[id]*(x+tmp*(y-meltingTemperature))),super.parameters.par1[id]-2) -
115+
// (super.parameters.par1[id]-1)*Math.pow(super.parameters.par2[id]*tmp,2) * Math.pow(Math.abs(super.parameters.par2[id]*tmp*(y-meltingTemperature)),-2) * (1+Math.pow(Math.abs(super.parameters.par2[id]*(x+tmp*(y-meltingTemperature))),super.parameters.par1[id])) );
116+
return (super.parameters.thetaS[id]-super.parameters.thetaR[id])*m*super.parameters.par1[id] * Math.pow( Math.abs(super.parameters.par2[id]*psiT), super.parameters.par1[id] ) * Math.pow(1+Math.pow(Math.abs(super.parameters.par2[id]*psiT),super.parameters.par1[id]), -m-2) *
117+
( super.parameters.par1[id]*Math.pow(super.parameters.par2[id]*tmp,2)*(m+1) * Math.pow(Math.abs(super.parameters.par2[id]*psiT),super.parameters.par1[id]-2) -
118+
(super.parameters.par1[id]-1)*Math.pow(super.parameters.par2[id]*tmp,2) * Math.pow(Math.abs(super.parameters.par2[id]*psiT),-2) * (1+Math.pow(Math.abs(super.parameters.par2[id]*psiT),super.parameters.par1[id])) );
119+
}
120+
}
121+
122+
}
123+
124+
125+
126+
@Override
127+
public double f(double x, int i) {
128+
129+
return -9999.0;
130+
131+
}
132+
133+
134+
135+
@Override
136+
public double df(double x, int i) {
137+
138+
return -9999.0;
139+
140+
}
141+
142+
143+
144+
@Override
145+
public double ddf(double x, int i) {
146+
147+
return 0;
148+
149+
}
150+
151+
152+
}

src/main/java/it/geoframe/blogspot/closureequation/closureequation/SoilWaterRetentionCurveFactory.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,12 @@ public ClosureEquation create(String model) {
3939
myModel = new SWRCKosugi();
4040
}else if(model.equalsIgnoreCase("Romano")) {
4141
myModel = new SWRCRomano();
42+
}else if(model.equalsIgnoreCase("Gardner")) {
43+
myModel = new SWRCGardner();
4244
}else if(model.equalsIgnoreCase("Water Depth") || model.equalsIgnoreCase("WaterDepth")) {
4345
myModel = new WaterDepth();
46+
}else if(model.equalsIgnoreCase("Van Genuchten Dall Amico") || model.equalsIgnoreCase("VanGenuchtenDallAmico")) {
47+
myModel = new SWRCVanGenuchtenDallAmico();
4448
}else if(model.equalsIgnoreCase("None") || model.equalsIgnoreCase("")) {
4549
myModel = new NoneClosureEquation();
4650
}else {

src/main/java/it/geoframe/blogspot/closureequation/conductivitymodel/ConductivityEquationFactory.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ public ConductivityEquation create(String model, ClosureEquation closureEquation
3838
myModel = new MualemKosugi(closureEquation);
3939
} else if (model.equalsIgnoreCase("Mualem Romano") || model.equalsIgnoreCase("MualemRomano") ) {
4040
myModel = new MualemRomano(closureEquation);
41+
} else if (model.equalsIgnoreCase("Gardner") || model.equalsIgnoreCase("Gardner") ) {
42+
myModel = new Gardner(closureEquation);
4143
} else if (model.equalsIgnoreCase("Soil Thermal Conductivity Cosenza") || model.equalsIgnoreCase("SoilThermalConductivityCosenza") || model.equalsIgnoreCase("Cosenza")) {
4244
myModel = new SoilThermalConductivityCosenza(closureEquation);
4345
} else if (model.equalsIgnoreCase("Water Thermal Conductivity") || model.equalsIgnoreCase("WaterThermalConductivity") || model.equalsIgnoreCase("Water")) {

0 commit comments

Comments
 (0)