source:
issm/oecreview/Archive/12321-12677/ISSM-12475-12476.diff
Last change on this file was 12679, checked in by , 13 years ago | |
---|---|
File size: 12.2 KB |
-
u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/BrentSearch.cpp
15 15 #include "../../shared/shared.h" 16 16 #include <float.h> 17 17 18 void BrentSearch( double* psearch_scalar,double* pJ,OptPars* optpars,double (*f)(double,OptArgs*), OptArgs* optargs){18 void BrentSearch(IssmDouble* psearch_scalar,IssmDouble* pJ,OptPars* optpars,IssmDouble (*f)(IssmDouble,OptArgs*), OptArgs* optargs){ 19 19 20 20 /* This routine is optimizing a given function using Brent's method 21 21 * (Golden or parabolic procedure)*/ 22 22 23 23 /*Intermediary*/ 24 double si,gold,intervalgold,oldintervalgold;25 double parab_num,parab_den;26 double distance,cm_jump;27 double fxmax,fxmin,fxbest;28 double fx,fx1,fx2;29 double xmax,xmin,xbest;30 double x,x1,x2,xm;31 double tol1,tol2,seps;32 double tolerance=1.e-4;24 IssmDouble si,gold,intervalgold,oldintervalgold; 25 IssmDouble parab_num,parab_den; 26 IssmDouble distance,cm_jump; 27 IssmDouble fxmax,fxmin,fxbest; 28 IssmDouble fx,fx1,fx2; 29 IssmDouble xmax,xmin,xbest; 30 IssmDouble x,x1,x2,xm; 31 IssmDouble tol1,tol2,seps; 32 IssmDouble tolerance=1.e-4; 33 33 int maxiter,iter; 34 34 bool loop=true,goldenflag; 35 35 … … 57 57 } 58 58 59 59 /*initialize optimization variables*/ 60 seps=sqrt(DBL_EPSILON); //precision of a double60 seps=sqrt(DBL_EPSILON); //precision of a IssmDouble 61 61 distance=0.0; //new_x=old_x + distance 62 62 gold=0.5*(3.0-sqrt(5.0)); //gold = 1 - golden ratio 63 63 intervalgold=0.0; //distance used by Golden procedure -
u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/extrema.cpp
8 8 #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!" 9 9 #endif 10 10 11 #include "../../include/include.h" 11 12 12 double min(double a,double b){13 IssmDouble min(IssmDouble a,IssmDouble b){ 13 14 if (a<b)return a; 14 15 else return b; 15 16 } … … 17 18 if (a<b)return a; 18 19 else return b; 19 20 } 20 double max(double a,double b){21 IssmDouble max(IssmDouble a,IssmDouble b){ 21 22 if (a>b)return a; 22 23 else return b; 23 24 } -
u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/isnan.cpp
1 1 /*This routine only used by Intel compler: */ 2 2 #ifdef _INTEL_WIN_ 3 3 4 int isnan( double x){4 int isnan(IssmDouble x){ 5 5 if (x!=x)return 1; 6 6 else return 0; 7 7 } -
u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/isnan.h
6 6 #define _ISNAN_INTEL_H_ 7 7 8 8 #ifdef _INTEL_WIN_ 9 int isnan( double X);9 int isnan(IssmDouble X); 10 10 #endif 11 11 12 12 #endif -
u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/OptionsFromAnalysis.cpp
21 21 22 22 /*intermediary: */ 23 23 int dummy; 24 double* analyses=NULL;24 IssmDouble* analyses=NULL; 25 25 char** strings=NULL; 26 26 char* string=NULL; 27 27 int numanalyses; … … 64 64 strcpy(outstring,strings[found]); 65 65 66 66 /*Free ressources*/ 67 xDelete< double>(analyses);67 xDelete<IssmDouble>(analyses); 68 68 for(i=0;i<numanalyses;i++){ 69 69 string=strings[i]; 70 70 xDelete<char>(string); -
u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/UnitConversion.cpp
14 14 #include "../../EnumDefinitions/EnumDefinitions.h" 15 15 #include "../../shared/shared.h" 16 16 17 double UnitConversionScaleFactor(int type_enum);17 IssmDouble UnitConversionScaleFactor(int type_enum); 18 18 /*}}}*/ 19 19 20 void UnitConversion( double* values, int numvalues,int direction_enum, int type_enum){20 void UnitConversion(IssmDouble* values, int numvalues,int direction_enum, int type_enum){ 21 21 22 double scale;22 IssmDouble scale; 23 23 int i; 24 24 25 25 /*Get scaling factor: */ … … 32 32 33 33 } 34 34 35 double UnitConversion(double value, int direction_enum, int type_enum){35 IssmDouble UnitConversion(IssmDouble value, int direction_enum, int type_enum){ 36 36 37 37 UnitConversion(&value,1,direction_enum,type_enum); 38 38 … … 40 40 } 41 41 42 42 43 double UnitConversionScaleFactor(int type_enum){43 IssmDouble UnitConversionScaleFactor(int type_enum){ 44 44 45 double yts=365.0*24.0*3600.0;45 IssmDouble yts=365.0*24.0*3600.0; 46 46 47 double scale;47 IssmDouble scale; 48 48 switch(type_enum){ 49 49 case TimesteppingStartTimeEnum: scale=1.0/yts;break; //yr 50 50 case TimesteppingFinalTimeEnum: scale=1.0/yts;break; //yr … … 66 66 case SurfaceforcingsPrecipitationEnum: scale=yts;break; //m/yr 67 67 case SurfaceforcingsMassBalanceEnum: scale=yts;break; //m/yr 68 68 case MisfitEnum: scale=pow(yts,2);break; //(m/yr)^2 69 case MassFluxEnum: scale=pow(( double)10,-12)*yts;break; // (GigaTon/year)69 case MassFluxEnum: scale=pow((IssmDouble)10,-12)*yts;break; // (GigaTon/year) 70 70 default: scale=1.0; break; 71 71 } 72 72 return scale; -
u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/XZvectorsToCoordinateSystem.cpp
4 4 #include "./isnan.h" 5 5 #include <math.h> 6 6 7 void XZvectorsToCoordinateSystem( double* T,double* xzvectors){7 void XZvectorsToCoordinateSystem(IssmDouble* T,IssmDouble* xzvectors){ 8 8 9 9 int i,j; 10 double x[3],y[3],z[3];11 double x_norm, y_norm, z_norm;10 IssmDouble x[3],y[3],z[3]; 11 IssmDouble x_norm, y_norm, z_norm; 12 12 13 13 for(i=0;i<6;i++){ 14 14 if(isnan(xzvectors[i])){ -
u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/IsInputConverged.cpp
13 13 14 14 #include "../../objects/objects.h" 15 15 16 void IsInputConverged( double* peps, Input** new_inputs,Input** old_inputs,int num_inputs,int criterion_enum){16 void IsInputConverged(IssmDouble* peps, Input** new_inputs,Input** old_inputs,int num_inputs,int criterion_enum){ 17 17 18 18 int i,j; 19 19 20 20 /*output: */ 21 double eps;21 IssmDouble eps; 22 22 23 23 /*intermediary: */ 24 double *newvalues = NULL;25 double *oldvalues = NULL;24 IssmDouble *newvalues = NULL; 25 IssmDouble *oldvalues = NULL; 26 26 int num_values; 27 double ndu = 0;28 double nu = 0;27 IssmDouble ndu = 0; 28 IssmDouble nu = 0; 29 29 30 30 if(criterion_enum==RelativeEnum){ 31 31 -
u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/cross.cpp
8 8 #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!" 9 9 #endif 10 10 11 void cross(double* result,double* vector1,double* vector2){ 11 #include "../../include/include.h" 12 12 13 void cross(IssmDouble* result,IssmDouble* vector1,IssmDouble* vector2){ 14 13 15 /*result,vector1 and vector2 are all assumed to be of size 3: */ 14 16 15 17 result[0]=vector1[1]*vector2[2]-vector1[2]*vector2[1]; -
u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/numerics.h
15 15 struct OptArgs; 16 16 struct OptPars; 17 17 18 double min(double a,double b);19 double max(double a,double b);18 IssmDouble min(IssmDouble a,IssmDouble b); 19 IssmDouble max(IssmDouble a,IssmDouble b); 20 20 int min(int a,int b); 21 21 int max(int a,int b); 22 double OptFunc(double scalar, OptArgs* optargs);23 void BrentSearch( double* psearch_scalar,double* pJ,OptPars* optpars,double (*f)(double,OptArgs*), OptArgs* optargs);24 void OptimalSearch( double* psearch_scalar,double* pJ,OptPars* optpars,double (*f)(double,OptArgs*), OptArgs* optargs);25 void cross( double* result,double* vector1,double* vector2);26 void IsInputConverged( double* peps, Input** new_inputs,Input** old_inputs,int num_inputs,int criterion_enum);27 void UnitConversion( double* values, int numvalues,int direction_enum, int type_enum);28 double UnitConversion(double value, int direction_enum, int type_enum);22 IssmDouble OptFunc(IssmDouble scalar, OptArgs* optargs); 23 void BrentSearch(IssmDouble* psearch_scalar,IssmDouble* pJ,OptPars* optpars,IssmDouble (*f)(IssmDouble,OptArgs*), OptArgs* optargs); 24 void OptimalSearch(IssmDouble* psearch_scalar,IssmDouble* pJ,OptPars* optpars,IssmDouble (*f)(IssmDouble,OptArgs*), OptArgs* optargs); 25 void cross(IssmDouble* result,IssmDouble* vector1,IssmDouble* vector2); 26 void IsInputConverged(IssmDouble* peps, Input** new_inputs,Input** old_inputs,int num_inputs,int criterion_enum); 27 void UnitConversion(IssmDouble* values, int numvalues,int direction_enum, int type_enum); 28 IssmDouble UnitConversion(IssmDouble value, int direction_enum, int type_enum); 29 29 char* OptionsFromAnalysis(Parameters* parameters,int analysis_type); 30 void XZvectorsToCoordinateSystem( double* T,double* xzvectors);30 void XZvectorsToCoordinateSystem(IssmDouble* T,IssmDouble* xzvectors); 31 31 #ifdef _HAVE_PETSC_ 32 32 void PetscOptionsFromAnalysis(Parameters* parameters,int analysis_type); 33 33 #endif -
u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/OptimalSearch.cpp
15 15 #include "../../shared/shared.h" 16 16 #include <float.h> 17 17 18 void OptimalSearch( double* psearch_scalar,double* pJ,OptPars* optpars,double (*f)(double,OptArgs*), OptArgs* optargs){18 void OptimalSearch(IssmDouble* psearch_scalar,IssmDouble* pJ,OptPars* optpars,IssmDouble (*f)(IssmDouble,OptArgs*), OptArgs* optargs){ 19 19 20 20 /* This routine is optimizing a given function*/ 21 21 22 22 /*function values: */ 23 double fx1,fx2,fxbest;24 double x1,x2,xmin,xbest;23 IssmDouble fx1,fx2,fxbest; 24 IssmDouble x1,x2,xmin,xbest; 25 25 26 26 /*tolerances: */ 27 double seps;28 double tolerance=1.e-4;27 IssmDouble seps; 28 IssmDouble tolerance=1.e-4; 29 29 int maxiter; 30 30 31 31 /*counters: */
Note:
See TracBrowser
for help on using the repository browser.