Changeset 21912


Ignore:
Timestamp:
08/03/17 16:05:42 (8 years ago)
Author:
Mathieu Morlighem
Message:

CHG: fixed M1qn3

Location:
issm/trunk-jpl/src/wrappers/M1qn3
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/wrappers/M1qn3/M1qn3.cpp

    r21910 r21912  
    4848        int     intn;
    4949        int     priorn;
    50         int     maxsteps,maxiter;
    5150        Data    data_struct;
    5251
     
    5655        /*intermediary: */
    5756        double f;
    58         double dxmin=.01;
    59         double gttol=.0001;
     57        double dxmin=0.01;
     58        double gttol=0.0001;
    6059        long   omode;
    6160
    6261        /*checks on arguments on the matlab side: */
    63         if(nlhs!=NLHS){
    64                 M1qn3Usage();
    65                 _error_("M1qn3 usage error");
    66         }
    67         if(nrhs!=5){
     62        if(nlhs!=NLHS || nrhs!=3){
    6863                M1qn3Usage();
    6964                _error_("M1qn3 usage error");
     
    7469        FetchData(&Gs,&intn,&priorn,GHANDLE);
    7570        FetchData(&Js,&priorn,JHANDLE);
    76         FetchData(&maxsteps,MAXSTEPSHANDLE);
    77         FetchData(&maxiter,MAXITERHANDLE);
    78 
    79         /*_printf_("Xs: " << Xs[0] << "\n");
    80         _printf_("Gs: " << Gs[0] << "\n");
    81         _printf_("Js: " << Js[0] << "\n");
    82         _printf_("maxiter: " << maxiter << "\n");
    83         _printf_("maxsteps: " << maxsteps << "\n");*/
    8471
    8572        /*Initialize M1QN3 parameters*/
     
    9784
    9885        /*Optimization criterions*/
    99         long niter = long(maxsteps); /*Maximum number of iterations*/
    100         long nsim  = long(maxiter);/*Maximum number of function calls*/
     86        long niter = long(intn); /*Maximum number of iterations*/
     87        long nsim  = long(intn); /*Maximum number of function calls*/
    10188
    10289        /*Get problem dimension and initialize X, G and f: */
    103         /*_printf_("intn: " << intn << "\n");
    104         _printf_("priorn: " << priorn << "\n");*/
    10590        long n = long(intn);
    106         IssmPDouble* G = xNew<IssmPDouble>(n); for (int i=0;i<n;i++)G[i]=Gs[i*priorn];
    107         IssmPDouble* X = xNew<IssmPDouble>(n); for (int i=0;i<n;i++)X[i]=Xs[i*priorn];
     91        IssmPDouble* G = xNew<IssmPDouble>(n); for (int i=0;i<n;i++)G[i]=Gs[i*priorn+0];
     92        IssmPDouble* X = xNew<IssmPDouble>(n); for (int i=0;i<n;i++)X[i]=Xs[i*priorn+0];
    10893        f = Js[0];
    10994       
    110         /*_printf_("X: " << X[0] << "\n");
    111         _printf_("G: " << G[0] << "\n");
    112         _printf_("J: " << f << "\n");
    113         _printf_("n: " << n << "\n");*/
    114 
    115 
    11695        /*Allocate m1qn3 working arrays (see doc)*/
    11796        long      m   = 100;
     
    133112
    134113        switch(int(omode)){
    135                 case 0: /*_printf0_("   Stop requested (indic = 0)\n"); */ break;
     114                case 0:  _printf0_("   Stop requested\n"); break;
    136115                case 1:  _printf0_("   Convergence reached (gradient satisfies stopping criterion)\n"); break;
    137116                case 2:  _printf0_("   Bad initialization\n"); break;
     
    180159        }
    181160        else{
    182                 //_printf0_("counter: " << ds->counter << "\n");
    183161                ds->counter++;
    184162                *pf=Js[ds->counter];
    185                 for(int i=0;i<*n;i++)X[i]=Xs[ds->priorn*i+ds->counter];
    186                 for(int i=0;i<*n;i++)G[i]=Gs[ds->priorn*i+ds->counter];
     163                for(int i=0;i<*n;i++) X[i]=Xs[ds->priorn*i+ds->counter];
     164                for(int i=0;i<*n;i++) G[i]=Gs[ds->priorn*i+ds->counter];
    187165        }
    188166
     167        printf("J [i] = %g\n",*pf);
    189168}
    190169#endif
  • issm/trunk-jpl/src/wrappers/M1qn3/M1qn3.h

    r19011 r21912  
    3030#define GHANDLE       prhs[1]
    3131#define JHANDLE       prhs[2]
    32 #define MAXSTEPSHANDLE prhs[3]
    33 #define MAXITERHANDLE prhs[4]
    3432/* serial output macros: */
    3533#define XOUT (mxArray**)&plhs[0]
     
    3937/* serial input macros: */
    4038#define XHANDLE   PyTuple_GetItem(args,0)
    41 #define GHANDLE       PyTuple_GetItem(args,1)
    42 #define JHANDLE       PyTuple_GetItem(args,2)
    43 #define MAXSTEPSHANDLE PyTuple_GetItem(args,3)
    44 #define MAXITERHANDLE PyTuple_GetItem(args,4)
     39#define GHANDLE   PyTuple_GetItem(args,1)
     40#define JHANDLE   PyTuple_GetItem(args,2)
    4541/* serial output macros: */
    4642#define XOUT output,0
Note: See TracChangeset for help on using the changeset viewer.