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
  • u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/BrentSearch.cpp

     
    1515#include "../../shared/shared.h"
    1616#include <float.h>
    1717
    18 void BrentSearch(double* psearch_scalar,double* pJ,OptPars* optpars,double (*f)(double,OptArgs*), OptArgs* optargs){
     18void BrentSearch(IssmDouble* psearch_scalar,IssmDouble* pJ,OptPars* optpars,IssmDouble (*f)(IssmDouble,OptArgs*), OptArgs* optargs){
    1919
    2020        /* This routine is optimizing a given function using Brent's method
    2121         * (Golden or parabolic procedure)*/
    2222
    2323        /*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;
    3333        int    maxiter,iter;
    3434        bool   loop=true,goldenflag;
    3535
     
    5757        }
    5858
    5959        /*initialize optimization variables*/
    60         seps=sqrt(DBL_EPSILON);    //precision of a double
     60        seps=sqrt(DBL_EPSILON);    //precision of a IssmDouble
    6161        distance=0.0;              //new_x=old_x + distance
    6262        gold=0.5*(3.0-sqrt(5.0));  //gold = 1 - golden ratio
    6363        intervalgold=0.0;          //distance used by Golden procedure
  • u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/extrema.cpp

     
    88#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
    99#endif
    1010
     11#include "../../include/include.h"
    1112
    12 double min(double a,double b){
     13IssmDouble min(IssmDouble a,IssmDouble b){
    1314        if (a<b)return a;
    1415        else return b;
    1516}
     
    1718        if (a<b)return a;
    1819        else return b;
    1920}
    20 double max(double a,double b){
     21IssmDouble max(IssmDouble a,IssmDouble b){
    2122        if (a>b)return a;
    2223        else return b;
    2324}
  • u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/isnan.cpp

     
    11/*This routine only used by Intel compler: */
    22#ifdef _INTEL_WIN_
    33
    4 int isnan(double x){
     4int isnan(IssmDouble x){
    55        if (x!=x)return 1;
    66        else return 0;
    77}
  • u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/isnan.h

     
    66#define _ISNAN_INTEL_H_
    77
    88#ifdef _INTEL_WIN_
    9 int isnan(double X);
     9int isnan(IssmDouble X);
    1010#endif
    1111
    1212#endif
  • u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/OptionsFromAnalysis.cpp

     
    2121
    2222        /*intermediary: */
    2323        int     dummy;
    24         double* analyses=NULL;
     24        IssmDouble* analyses=NULL;
    2525        char**  strings=NULL;
    2626        char*   string=NULL;
    2727        int     numanalyses;
     
    6464        strcpy(outstring,strings[found]);
    6565
    6666        /*Free ressources*/
    67         xDelete<double>(analyses);
     67        xDelete<IssmDouble>(analyses);
    6868        for(i=0;i<numanalyses;i++){
    6969                string=strings[i];
    7070                xDelete<char>(string);
  • u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/UnitConversion.cpp

     
    1414#include "../../EnumDefinitions/EnumDefinitions.h"
    1515#include "../../shared/shared.h"
    1616
    17 double UnitConversionScaleFactor(int type_enum);
     17IssmDouble UnitConversionScaleFactor(int type_enum);
    1818/*}}}*/
    1919
    20 void UnitConversion(double* values, int numvalues,int direction_enum, int type_enum){
     20void UnitConversion(IssmDouble* values, int numvalues,int direction_enum, int type_enum){
    2121
    22         double scale;
     22        IssmDouble scale;
    2323        int i;
    2424
    2525        /*Get scaling factor: */
     
    3232
    3333}
    3434
    35 double UnitConversion(double value, int direction_enum, int type_enum){
     35IssmDouble UnitConversion(IssmDouble value, int direction_enum, int type_enum){
    3636
    3737        UnitConversion(&value,1,direction_enum,type_enum);
    3838
     
    4040}
    4141
    4242
    43 double UnitConversionScaleFactor(int type_enum){
     43IssmDouble UnitConversionScaleFactor(int type_enum){
    4444
    45         double yts=365.0*24.0*3600.0;
     45        IssmDouble yts=365.0*24.0*3600.0;
    4646       
    47         double scale;
     47        IssmDouble scale;
    4848        switch(type_enum){
    4949                case TimesteppingStartTimeEnum:              scale=1.0/yts;break; //yr
    5050                case TimesteppingFinalTimeEnum:              scale=1.0/yts;break; //yr
     
    6666                case SurfaceforcingsPrecipitationEnum:       scale=yts;break; //m/yr
    6767                case SurfaceforcingsMassBalanceEnum:         scale=yts;break; //m/yr
    6868                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)
    7070                default: scale=1.0; break;
    7171        }
    7272        return scale;
  • u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/XZvectorsToCoordinateSystem.cpp

     
    44#include "./isnan.h"
    55#include <math.h>
    66
    7 void XZvectorsToCoordinateSystem(double* T,double* xzvectors){
     7void XZvectorsToCoordinateSystem(IssmDouble* T,IssmDouble* xzvectors){
    88
    99        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;
    1212
    1313        for(i=0;i<6;i++){
    1414                if(isnan(xzvectors[i])){
  • u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/IsInputConverged.cpp

     
    1313
    1414#include "../../objects/objects.h"
    1515
    16 void IsInputConverged(double* peps, Input** new_inputs,Input** old_inputs,int num_inputs,int criterion_enum){
     16void IsInputConverged(IssmDouble* peps, Input** new_inputs,Input** old_inputs,int num_inputs,int criterion_enum){
    1717
    1818        int i,j;
    1919
    2020        /*output: */
    21         double eps;
     21        IssmDouble eps;
    2222       
    2323        /*intermediary: */
    24         double *newvalues     = NULL;
    25         double *oldvalues     = NULL;
     24        IssmDouble *newvalues     = NULL;
     25        IssmDouble *oldvalues     = NULL;
    2626        int     num_values;
    27         double  ndu        = 0;
    28         double  nu         = 0;
     27        IssmDouble  ndu        = 0;
     28        IssmDouble  nu         = 0;
    2929
    3030        if(criterion_enum==RelativeEnum){
    3131
  • u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/cross.cpp

     
    88#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
    99#endif
    1010
    11 void cross(double* result,double* vector1,double* vector2){
     11#include "../../include/include.h"
    1212
     13void cross(IssmDouble* result,IssmDouble* vector1,IssmDouble* vector2){
     14
    1315        /*result,vector1 and vector2 are all assumed to be of size 3: */
    1416
    1517        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

     
    1515struct OptArgs;
    1616struct OptPars;
    1717
    18 double min(double a,double b);
    19 double max(double a,double b);
     18IssmDouble min(IssmDouble a,IssmDouble b);
     19IssmDouble max(IssmDouble a,IssmDouble b);
    2020int    min(int a,int b);
    2121int    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);
     22IssmDouble OptFunc(IssmDouble scalar, OptArgs* optargs);
     23void   BrentSearch(IssmDouble* psearch_scalar,IssmDouble* pJ,OptPars* optpars,IssmDouble (*f)(IssmDouble,OptArgs*), OptArgs* optargs);
     24void   OptimalSearch(IssmDouble* psearch_scalar,IssmDouble* pJ,OptPars* optpars,IssmDouble (*f)(IssmDouble,OptArgs*), OptArgs* optargs);
     25void   cross(IssmDouble* result,IssmDouble* vector1,IssmDouble* vector2);
     26void   IsInputConverged(IssmDouble* peps, Input** new_inputs,Input** old_inputs,int num_inputs,int criterion_enum);
     27void   UnitConversion(IssmDouble* values, int numvalues,int direction_enum, int type_enum);
     28IssmDouble UnitConversion(IssmDouble value, int direction_enum, int type_enum);
    2929char*  OptionsFromAnalysis(Parameters* parameters,int analysis_type);
    30 void   XZvectorsToCoordinateSystem(double* T,double* xzvectors);
     30void   XZvectorsToCoordinateSystem(IssmDouble* T,IssmDouble* xzvectors);
    3131#ifdef _HAVE_PETSC_
    3232void   PetscOptionsFromAnalysis(Parameters* parameters,int analysis_type);
    3333#endif
  • u/astrid-r1b/morlighe/issmuci/trunk-jpl/../trunk-jpl/src/c/shared/Numerics/OptimalSearch.cpp

     
    1515#include "../../shared/shared.h"
    1616#include <float.h>
    1717
    18 void OptimalSearch(double* psearch_scalar,double* pJ,OptPars* optpars,double (*f)(double,OptArgs*), OptArgs* optargs){
     18void OptimalSearch(IssmDouble* psearch_scalar,IssmDouble* pJ,OptPars* optpars,IssmDouble (*f)(IssmDouble,OptArgs*), OptArgs* optargs){
    1919
    2020        /* This routine is optimizing a given function*/
    2121
    2222        /*function values: */
    23         double fx1,fx2,fxbest;
    24         double x1,x2,xmin,xbest;
     23        IssmDouble fx1,fx2,fxbest;
     24        IssmDouble x1,x2,xmin,xbest;
    2525
    2626        /*tolerances: */
    27         double seps;
    28         double tolerance=1.e-4;
     27        IssmDouble seps;
     28        IssmDouble tolerance=1.e-4;
    2929        int    maxiter;
    3030
    3131        /*counters: */
Note: See TracBrowser for help on using the repository browser.