[12679] | 1 | Index: /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
|
---|
| 46 | Index: /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 | }
|
---|
| 70 | Index: /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 | }
|
---|
| 83 | Index: /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
|
---|
| 96 | Index: /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);
|
---|
| 118 | Index: /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;
|
---|
| 171 | Index: /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])){
|
---|
| 190 | Index: /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 |
|
---|
| 220 | Index: /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];
|
---|
| 236 | Index: /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
|
---|
| 270 | Index: /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: */
|
---|