source: issm/oecreview/Archive/12321-12677/ISSM-12475-12476.diff

Last change on this file was 12679, checked in by Mathieu Morlighem, 13 years ago

Added 12321-12677

File size: 12.2 KB
RevLine 
[12679]1Index: /u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/BrentSearch.cpp
2===================================================================
3--- /u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/BrentSearch.cpp (revision 12475)
4+++ /u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/BrentSearch.cpp (revision 12476)
5@@ -15,21 +15,21 @@
6 #include "../../shared/shared.h"
7 #include <float.h>
8
9-void BrentSearch(double* psearch_scalar,double* pJ,OptPars* optpars,double (*f)(double,OptArgs*), OptArgs* optargs){
10+void BrentSearch(IssmDouble* psearch_scalar,IssmDouble* pJ,OptPars* optpars,IssmDouble (*f)(IssmDouble,OptArgs*), OptArgs* optargs){
11
12 /* This routine is optimizing a given function using Brent's method
13 * (Golden or parabolic procedure)*/
14
15 /*Intermediary*/
16- double si,gold,intervalgold,oldintervalgold;
17- double parab_num,parab_den;
18- double distance,cm_jump;
19- double fxmax,fxmin,fxbest;
20- double fx,fx1,fx2;
21- double xmax,xmin,xbest;
22- double x,x1,x2,xm;
23- double tol1,tol2,seps;
24- double tolerance=1.e-4;
25+ IssmDouble si,gold,intervalgold,oldintervalgold;
26+ IssmDouble parab_num,parab_den;
27+ IssmDouble distance,cm_jump;
28+ IssmDouble fxmax,fxmin,fxbest;
29+ IssmDouble fx,fx1,fx2;
30+ IssmDouble xmax,xmin,xbest;
31+ IssmDouble x,x1,x2,xm;
32+ IssmDouble tol1,tol2,seps;
33+ IssmDouble tolerance=1.e-4;
34 int maxiter,iter;
35 bool loop=true,goldenflag;
36
37@@ -57,7 +57,7 @@
38 }
39
40 /*initialize optimization variables*/
41- seps=sqrt(DBL_EPSILON); //precision of a double
42+ seps=sqrt(DBL_EPSILON); //precision of a IssmDouble
43 distance=0.0; //new_x=old_x + distance
44 gold=0.5*(3.0-sqrt(5.0)); //gold = 1 - golden ratio
45 intervalgold=0.0; //distance used by Golden procedure
46Index: /u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/extrema.cpp
47===================================================================
48--- /u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/extrema.cpp (revision 12475)
49+++ /u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/extrema.cpp (revision 12476)
50@@ -8,8 +8,9 @@
51 #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
52 #endif
53
54+#include "../../include/include.h"
55
56-double min(double a,double b){
57+IssmDouble min(IssmDouble a,IssmDouble b){
58 if (a<b)return a;
59 else return b;
60 }
61@@ -17,7 +18,7 @@
62 if (a<b)return a;
63 else return b;
64 }
65-double max(double a,double b){
66+IssmDouble max(IssmDouble a,IssmDouble b){
67 if (a>b)return a;
68 else return b;
69 }
70Index: /u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/isnan.cpp
71===================================================================
72--- /u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/isnan.cpp (revision 12475)
73+++ /u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/isnan.cpp (revision 12476)
74@@ -1,7 +1,7 @@
75 /*This routine only used by Intel compler: */
76 #ifdef _INTEL_WIN_
77
78-int isnan(double x){
79+int isnan(IssmDouble x){
80 if (x!=x)return 1;
81 else return 0;
82 }
83Index: /u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/isnan.h
84===================================================================
85--- /u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/isnan.h (revision 12475)
86+++ /u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/isnan.h (revision 12476)
87@@ -6,7 +6,7 @@
88 #define _ISNAN_INTEL_H_
89
90 #ifdef _INTEL_WIN_
91-int isnan(double X);
92+int isnan(IssmDouble X);
93 #endif
94
95 #endif
96Index: /u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/OptionsFromAnalysis.cpp
97===================================================================
98--- /u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/OptionsFromAnalysis.cpp (revision 12475)
99+++ /u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/OptionsFromAnalysis.cpp (revision 12476)
100@@ -21,7 +21,7 @@
101
102 /*intermediary: */
103 int dummy;
104- double* analyses=NULL;
105+ IssmDouble* analyses=NULL;
106 char** strings=NULL;
107 char* string=NULL;
108 int numanalyses;
109@@ -64,7 +64,7 @@
110 strcpy(outstring,strings[found]);
111
112 /*Free ressources*/
113- xDelete<double>(analyses);
114+ xDelete<IssmDouble>(analyses);
115 for(i=0;i<numanalyses;i++){
116 string=strings[i];
117 xDelete<char>(string);
118Index: /u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/UnitConversion.cpp
119===================================================================
120--- /u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/UnitConversion.cpp (revision 12475)
121+++ /u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/UnitConversion.cpp (revision 12476)
122@@ -14,12 +14,12 @@
123 #include "../../EnumDefinitions/EnumDefinitions.h"
124 #include "../../shared/shared.h"
125
126-double UnitConversionScaleFactor(int type_enum);
127+IssmDouble UnitConversionScaleFactor(int type_enum);
128 /*}}}*/
129
130-void UnitConversion(double* values, int numvalues,int direction_enum, int type_enum){
131+void UnitConversion(IssmDouble* values, int numvalues,int direction_enum, int type_enum){
132
133- double scale;
134+ IssmDouble scale;
135 int i;
136
137 /*Get scaling factor: */
138@@ -32,7 +32,7 @@
139
140 }
141
142-double UnitConversion(double value, int direction_enum, int type_enum){
143+IssmDouble UnitConversion(IssmDouble value, int direction_enum, int type_enum){
144
145 UnitConversion(&value,1,direction_enum,type_enum);
146
147@@ -40,11 +40,11 @@
148 }
149
150
151-double UnitConversionScaleFactor(int type_enum){
152+IssmDouble UnitConversionScaleFactor(int type_enum){
153
154- double yts=365.0*24.0*3600.0;
155+ IssmDouble yts=365.0*24.0*3600.0;
156
157- double scale;
158+ IssmDouble scale;
159 switch(type_enum){
160 case TimesteppingStartTimeEnum: scale=1.0/yts;break; //yr
161 case TimesteppingFinalTimeEnum: scale=1.0/yts;break; //yr
162@@ -66,7 +66,7 @@
163 case SurfaceforcingsPrecipitationEnum: scale=yts;break; //m/yr
164 case SurfaceforcingsMassBalanceEnum: scale=yts;break; //m/yr
165 case MisfitEnum: scale=pow(yts,2);break; //(m/yr)^2
166- case MassFluxEnum: scale=pow((double)10,-12)*yts;break; // (GigaTon/year)
167+ case MassFluxEnum: scale=pow((IssmDouble)10,-12)*yts;break; // (GigaTon/year)
168 default: scale=1.0; break;
169 }
170 return scale;
171Index: /u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/XZvectorsToCoordinateSystem.cpp
172===================================================================
173--- /u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/XZvectorsToCoordinateSystem.cpp (revision 12475)
174+++ /u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/XZvectorsToCoordinateSystem.cpp (revision 12476)
175@@ -4,11 +4,11 @@
176 #include "./isnan.h"
177 #include <math.h>
178
179-void XZvectorsToCoordinateSystem(double* T,double* xzvectors){
180+void XZvectorsToCoordinateSystem(IssmDouble* T,IssmDouble* xzvectors){
181
182 int i,j;
183- double x[3],y[3],z[3];
184- double x_norm, y_norm, z_norm;
185+ IssmDouble x[3],y[3],z[3];
186+ IssmDouble x_norm, y_norm, z_norm;
187
188 for(i=0;i<6;i++){
189 if(isnan(xzvectors[i])){
190Index: /u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/IsInputConverged.cpp
191===================================================================
192--- /u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/IsInputConverged.cpp (revision 12475)
193+++ /u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/IsInputConverged.cpp (revision 12476)
194@@ -13,19 +13,19 @@
195
196 #include "../../objects/objects.h"
197
198-void IsInputConverged(double* peps, Input** new_inputs,Input** old_inputs,int num_inputs,int criterion_enum){
199+void IsInputConverged(IssmDouble* peps, Input** new_inputs,Input** old_inputs,int num_inputs,int criterion_enum){
200
201 int i,j;
202
203 /*output: */
204- double eps;
205+ IssmDouble eps;
206
207 /*intermediary: */
208- double *newvalues = NULL;
209- double *oldvalues = NULL;
210+ IssmDouble *newvalues = NULL;
211+ IssmDouble *oldvalues = NULL;
212 int num_values;
213- double ndu = 0;
214- double nu = 0;
215+ IssmDouble ndu = 0;
216+ IssmDouble nu = 0;
217
218 if(criterion_enum==RelativeEnum){
219
220Index: /u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/cross.cpp
221===================================================================
222--- /u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/cross.cpp (revision 12475)
223+++ /u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/cross.cpp (revision 12476)
224@@ -8,8 +8,10 @@
225 #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
226 #endif
227
228-void cross(double* result,double* vector1,double* vector2){
229+#include "../../include/include.h"
230
231+void cross(IssmDouble* result,IssmDouble* vector1,IssmDouble* vector2){
232+
233 /*result,vector1 and vector2 are all assumed to be of size 3: */
234
235 result[0]=vector1[1]*vector2[2]-vector1[2]*vector2[1];
236Index: /u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/numerics.h
237===================================================================
238--- /u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/numerics.h (revision 12475)
239+++ /u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/numerics.h (revision 12476)
240@@ -15,19 +15,19 @@
241 struct OptArgs;
242 struct OptPars;
243
244-double min(double a,double b);
245-double max(double a,double b);
246+IssmDouble min(IssmDouble a,IssmDouble b);
247+IssmDouble max(IssmDouble a,IssmDouble b);
248 int min(int a,int b);
249 int max(int a,int b);
250-double OptFunc(double scalar, OptArgs* optargs);
251-void BrentSearch(double* psearch_scalar,double* pJ,OptPars* optpars,double (*f)(double,OptArgs*), OptArgs* optargs);
252-void OptimalSearch(double* psearch_scalar,double* pJ,OptPars* optpars,double (*f)(double,OptArgs*), OptArgs* optargs);
253-void cross(double* result,double* vector1,double* vector2);
254-void IsInputConverged(double* peps, Input** new_inputs,Input** old_inputs,int num_inputs,int criterion_enum);
255-void UnitConversion(double* values, int numvalues,int direction_enum, int type_enum);
256-double UnitConversion(double value, int direction_enum, int type_enum);
257+IssmDouble OptFunc(IssmDouble scalar, OptArgs* optargs);
258+void BrentSearch(IssmDouble* psearch_scalar,IssmDouble* pJ,OptPars* optpars,IssmDouble (*f)(IssmDouble,OptArgs*), OptArgs* optargs);
259+void OptimalSearch(IssmDouble* psearch_scalar,IssmDouble* pJ,OptPars* optpars,IssmDouble (*f)(IssmDouble,OptArgs*), OptArgs* optargs);
260+void cross(IssmDouble* result,IssmDouble* vector1,IssmDouble* vector2);
261+void IsInputConverged(IssmDouble* peps, Input** new_inputs,Input** old_inputs,int num_inputs,int criterion_enum);
262+void UnitConversion(IssmDouble* values, int numvalues,int direction_enum, int type_enum);
263+IssmDouble UnitConversion(IssmDouble value, int direction_enum, int type_enum);
264 char* OptionsFromAnalysis(Parameters* parameters,int analysis_type);
265-void XZvectorsToCoordinateSystem(double* T,double* xzvectors);
266+void XZvectorsToCoordinateSystem(IssmDouble* T,IssmDouble* xzvectors);
267 #ifdef _HAVE_PETSC_
268 void PetscOptionsFromAnalysis(Parameters* parameters,int analysis_type);
269 #endif
270Index: /u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/OptimalSearch.cpp
271===================================================================
272--- /u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/OptimalSearch.cpp (revision 12475)
273+++ /u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/OptimalSearch.cpp (revision 12476)
274@@ -15,17 +15,17 @@
275 #include "../../shared/shared.h"
276 #include <float.h>
277
278-void OptimalSearch(double* psearch_scalar,double* pJ,OptPars* optpars,double (*f)(double,OptArgs*), OptArgs* optargs){
279+void OptimalSearch(IssmDouble* psearch_scalar,IssmDouble* pJ,OptPars* optpars,IssmDouble (*f)(IssmDouble,OptArgs*), OptArgs* optargs){
280
281 /* This routine is optimizing a given function*/
282
283 /*function values: */
284- double fx1,fx2,fxbest;
285- double x1,x2,xmin,xbest;
286+ IssmDouble fx1,fx2,fxbest;
287+ IssmDouble x1,x2,xmin,xbest;
288
289 /*tolerances: */
290- double seps;
291- double tolerance=1.e-4;
292+ IssmDouble seps;
293+ IssmDouble tolerance=1.e-4;
294 int maxiter;
295
296 /*counters: */
Note: See TracBrowser for help on using the repository browser.