Changeset 13325


Ignore:
Timestamp:
09/11/12 13:49:31 (13 years ago)
Author:
Eric.Larour
Message:

NEW: large change. Replaced all our instances of ExternalResult objects with one
generic templated class. Much simpler, though it hit some of the code in the solutions
in modules.

Location:
issm/trunk-jpl
Files:
1 added
12 deleted
16 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/externalpackages/git/install.sh

    r13246 r13325  
    1818#install
    1919cd src
    20 ./configure  --prefix="$ISSM_DIR/externalpackages/git/install"
     20./configure  --prefix="$ISSM_DIR/externalpackages/git/install" --with-python="$ISSM_DIR/externalpackages/python/install/bin/python"
    2121       
    2222#Compile
  • issm/trunk-jpl/src/c/Container/Elements.cpp

    r13216 r13325  
    166166void Elements::ToResults(Results* results,Parameters* parameters){
    167167
     168        int i;
     169       
    168170        extern int my_rank;
    169171        extern int num_procs;
     
    245247                        if(my_rank==0){
    246248                                /*No need to add this vector for all cpus*/
    247                                 results->AddObject(new DoubleVecExternalResult(results->Size()+1,resultsenums[i],vector_serial,vectorsize,resultssteps[i],resultstimes[i]));
     249                                #ifdef _HAVE_ADOLC_
     250                                IssmPDouble* vector_serial_passive=xNew<IssmPDouble>(vectorsize);
     251                                for(i=0;i<vectorsize;i++)vector_serial_passive[i]=reCast<IssmPDouble>(vector_serial[i]);
     252                                results->AddObject(new GenericExternalResult<double*>(results->Size()+1,resultsenums[i],vector_serial_passive,vectorsize,1,resultssteps[i],resultstimes[i]));
     253                                xDelete<IssmPDouble>(vector_serial_passive);
     254                                #else
     255                                results->AddObject(new GenericExternalResult<double*>(results->Size()+1,resultsenums[i],vector_serial,vectorsize,1,resultssteps[i],resultstimes[i]));
     256                                #endif
    248257                        }
    249258
     
    262271                /*create result object and add to results dataset:*/
    263272                if (patch->maxvertices && patch->maxnodes){
    264                         results->AddObject(new IntExternalResult(results->Size()+1,PatchVerticesEnum,patch->maxvertices,1,0));
    265                         results->AddObject(new IntExternalResult(results->Size()+1,PatchNodesEnum,   patch->maxnodes,1,0));
    266                         results->AddObject(new DoubleMatExternalResult(results->Size()+1,PatchEnum,  patch->values,patch->numrows,patch->numcols,1,0));
     273                        results->AddObject(new GenericExternalResult<int>(results->Size()+1,PatchVerticesEnum,patch->maxvertices,1,0));
     274                        results->AddObject(new GenericExternalResult<int>(results->Size()+1,PatchNodesEnum,   patch->maxnodes,1,0));
     275                        #ifdef _HAVE_ADOLC_
     276                        IssmPDouble* values_passive=xNew<IssmPDouble>(patch->numrows);
     277                        for(i=0;i<patch->numrows;i++)values_passive[i]=reCast<IssmPDouble>(patch->values[i]);
     278                        results->AddObject(new GenericExternalResult<double*>(results->Size()+1,PatchEnum,  values_passive,patch->numrows,patch->numcols,1,0));
     279                        xDelete<IssmPDouble>(values_passive);
     280                        #else
     281                        results->AddObject(new GenericExternalResult<double*>(results->Size()+1,PatchEnum,  patch->values,patch->numrows,patch->numcols,1,0));
     282                        #endif
    267283                }
    268284        }
  • issm/trunk-jpl/src/c/Makefile.am

    r13292 r13325  
    7575                                        ./classes/objects/ElementResults/BoolElementResult.cpp\
    7676                                        ./classes/objects/ExternalResults/ExternalResult.h\
    77                                         ./classes/objects/ExternalResults/BoolExternalResult.h\
    78                                         ./classes/objects/ExternalResults/BoolExternalResult.cpp\
    79                                         ./classes/objects/ExternalResults/DoubleExternalResult.h\
    80                                         ./classes/objects/ExternalResults/DoubleExternalResult.cpp\
    81                                         ./classes/objects/ExternalResults/DoubleVecExternalResult.h\
    82                                         ./classes/objects/ExternalResults/DoubleVecExternalResult.cpp\
    83                                         ./classes/objects/ExternalResults/DoubleMatExternalResult.h\
    84                                         ./classes/objects/ExternalResults/DoubleMatExternalResult.cpp\
    85                                         ./classes/objects/ExternalResults/IntExternalResult.h\
    86                                         ./classes/objects/ExternalResults/IntExternalResult.cpp\
    87                                         ./classes/objects/ExternalResults/StringExternalResult.h\
    88                                         ./classes/objects/ExternalResults/StringExternalResult.cpp\
     77                                        ./classes/objects/ExternalResults/GenericExternalResult.h\
    8978                                        ./classes/objects/Elements/Tria.h\
    9079                                        ./classes/objects/Elements/Tria.cpp\
  • issm/trunk-jpl/src/c/classes/objects/objects.h

    r13321 r13325  
    9393/*ExternalResults: */
    9494#include "./ExternalResults/ExternalResult.h"
    95 #include "./ExternalResults/BoolExternalResult.h"
    96 #include "./ExternalResults/DoubleExternalResult.h"
    97 #include "./ExternalResults/DoubleVecExternalResult.h"
    98 #include "./ExternalResults/DoubleMatExternalResult.h"
    99 #include "./ExternalResults/IntExternalResult.h"
    100 #include "./ExternalResults/StringExternalResult.h"
     95#include "./ExternalResults/GenericExternalResult.h"
    10196
    10297/*Materials: */
  • issm/trunk-jpl/src/c/modules/AddExternalResultx/AddExternalResultx.cpp

    r13220 r13325  
    1111void AddExternalResultx( DataSet* results, int enumtype, IssmDouble value){
    1212        /* Add new result in into results*/
    13         results->AddObject(new DoubleExternalResult(results->Size()+1,enumtype,value,1,0));
     13        results->AddObject(new GenericExternalResult<double>(results->Size()+1,enumtype,reCast<IssmPDouble>(value),1,0));
    1414}
    1515void AddExternalResultx( DataSet* results, int enumtype, IssmDouble* value, int nraws){
    1616        /* Add new result in into results*/
    17         results->AddObject(new DoubleVecExternalResult(results->Size()+1,enumtype,value,nraws,1,0));
     17        #ifdef _HAVE_ADOLC_
     18        IssmPDouble* value_passive=xNew<IssmPDouble>(nraws);
     19        for(int i=0;i<nraws;i++)value_passive[i]=reCast<IssmPDouble>(value[i]);
     20        results->AddObject(new GenericExternalResult<double*>(results->Size()+1,enumtype,value_passive,nraws,1,1,0));
     21        xDelete<IssmPDouble>(value_passive);
     22        #else
     23        results->AddObject(new GenericExternalResult<double*>(results->Size()+1,enumtype,value,nraws,1,1,0));
     24        #endif
    1825}
  • issm/trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp

    r13314 r13325  
    6767                if (fos_forward(1,num_dependents,num_independents, 0, xp, tangentDir, theOutput, theJacVecProduct ))
    6868                  _error_("fos_forward returned non-zero error code");
    69                 IssmDouble *theJacVecProductA=xNew<IssmDouble>(num_dependents);
    70                 for (int i=0;i<num_dependents;++i)
    71                   theJacVecProductA[i]=theJacVecProduct[i];
    72                 results->AddObject(new DoubleVecExternalResult(results->Size()+1,AutodiffJacobianEnum,theJacVecProductA,num_dependents,1,0.0));
     69                results->AddObject(new GenericExternalResult<IssmPDouble*>(results->Size()+1,AutodiffJacobianEnum,theJacVecProduct,num_dependents,1,1,0.0));
    7370
    7471#if 0
    7572                double **J=xNew<double>(num_dependents,num_independents);
    7673                jacobian(1,num_dependents,num_independents,xp,J);
    77                 IssmDouble *matJ=xNew<IssmDouble>(num_dependents*num_independents);
     74                IssmPDouble *matJ=xNew<IssmPDouble>(num_dependents*num_independents);
    7875                for (int i=0;i<num_dependents*num_independents;++i)
    7976                  matJ[i]=J[i];
    80                 results->AddObject(new DoubleMatExternalResult(results->Size()+1,AutodiffJacobianEnum,matJ,num_independents,num_dependents,1,0.0));
    81                 xDelete(matJ);
     77                results->AddObject(new GenericExternalResult<IssmPDouble*>(results->Size()+1,AutodiffJacobianEnum,matJ,num_independents,num_dependents,1,1,0.0));
     78                xDelete<IssmPDouble>(matJ);
    8279                xDelete(J);
    8380#endif
  • issm/trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp

    r12832 r13325  
    4545                parameters->FindParam(&solutiontype,SolutionTypeEnum);
    4646                EnumToStringx(&solutiontypestring,solutiontype);
    47                 results->AddObject(new StringExternalResult(results->Size()+1,SolutionTypeEnum,solutiontypestring,1,0));
     47                results->AddObject(new GenericExternalResult<char*>(results->Size()+1,SolutionTypeEnum,solutiontypestring,1,0));
    4848                xDelete<char>(solutiontypestring);
    4949        }
  • issm/trunk-jpl/src/c/modules/RequestedOutputsx/RequestedOutputsx.cpp

    r12773 r13325  
    3030                                case IceVolumeEnum:
    3131                                        Responsex(&output_value,elements,nodes,vertices,loads,materials,parameters,"IceVolume",false,0);
    32                                         results->AddObject(new DoubleExternalResult(results->Size()+1,IceVolumeEnum,output_value,step,time));
     32                                        results->AddObject(new GenericExternalResult<double>(results->Size()+1,IceVolumeEnum,reCast<IssmPDouble>(output_value),step,time));
    3333                                        break;
    3434                                case TotalSmbEnum:
    3535                                        Responsex(&output_value,elements,nodes,vertices,loads,materials,parameters,"TotalSmb",false,0);
    36                                         results->AddObject(new DoubleExternalResult(results->Size()+1,TotalSmbEnum,output_value,step,time));
     36                                        results->AddObject(new GenericExternalResult<double>(results->Size()+1,TotalSmbEnum,reCast<IssmPDouble>(output_value),step,time));
    3737                                        break;
    3838                                default:
  • issm/trunk-jpl/src/c/solutions/control_core.cpp

    r13073 r13325  
    115115        if(!dakota_analysis){ //do not save this if we are running the control core from a qmu run!
    116116                for(i=0;i<num_controls;i++) InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,control_type[i]);
    117                 femmodel->results->AddObject(new DoubleVecExternalResult(femmodel->results->Size()+1,JEnum,J,nsteps,1,0));
     117
     118                #ifdef _HAVE_ADOLC_
     119                IssmPDouble* J_passive=xNew<IssmPDouble>(nsteps);
     120                for(int i=0;i<nsteps;i++)J_passive[i]=reCast<IssmPDouble>(J[i]);
     121                femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,JEnum,J_passive,nsteps,1,1,0));
     122                xDelete<IssmPDouble>(J_passive);
     123                #else
     124                femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,JEnum,J,nsteps,1,1,0));
     125                #endif
    118126        }
    119127
  • issm/trunk-jpl/src/c/solutions/controlrestart.cpp

    r12477 r13325  
    2525                /*we essentially want J and the parameter: */
    2626                for(int i=0;i<num_controls;i++) InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,control_type[i]);
    27                 femmodel->results->AddObject(new DoubleVecExternalResult(femmodel->results->Size()+1,JEnum,J,nsteps,1,0));
    28                 //femmodel->results->AddObject(new StringExternalResult(femmodel->results->Size()+1,InversionControlParametersEnum,EnumToStringx(control_type),1,0));
     27                #ifdef _HAVE_ADOLC_
     28                IssmPDouble* J_passive=xNew<IssmPDouble>(nsteps);
     29                for(int i=0;i<nsteps;i++)J_passive[i]=reCast<IssmPDouble>(J[i]);
     30                femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,JEnum,J_passive,nsteps,1,1,0));
     31                xDelete<IssmPDouble>(J_passive);
     32                #else
     33                femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,JEnum,J,nsteps,1,1,0));
     34                #endif
     35                //femmodel->results->AddObject(new GenericExternalResult<char*>(femmodel->results->Size()+1,InversionControlParametersEnum,EnumToStringx(control_type),1,0));
    2936
    3037                /*write to disk: */
  • issm/trunk-jpl/src/c/solutions/controltao_core.cpp

    r13232 r13325  
    8888                InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,control_list[i]);
    8989        }
    90         femmodel->results->AddObject(new DoubleVecExternalResult(femmodel->results->Size()+1,JEnum,user.J,maxiter+3,1,0));
     90        femmodel->results->AddObject(new GenericExternalResult<double*>(femmodel->results->Size()+1,JEnum,user.J,maxiter+3,1,1,0));
    9191
    9292        /*Finalize*/
  • issm/trunk-jpl/src/c/solutions/issm.cpp

    r13286 r13325  
    165165        if(profiling){
    166166                ProfilingEnd(&Solution_time,&Memory_use,&Current_flops,Time_start,Flops_start);
    167                 femmodel->results->AddObject(new DoubleExternalResult(femmodel->results->Size()+1, ProfilingSolutionTimeEnum, Solution_time, 1, 0));
    168                 femmodel->results->AddObject(new DoubleExternalResult(femmodel->results->Size()+1, ProfilingCurrentMemEnum, Memory_use, 1, 0));
    169                 femmodel->results->AddObject(new DoubleExternalResult(femmodel->results->Size()+1, ProfilingCurrentFlopsEnum, Current_flops, 1, 0));
     167                femmodel->results->AddObject(new GenericExternalResult<double>(femmodel->results->Size()+1, ProfilingSolutionTimeEnum, Solution_time, 1, 0));
     168                femmodel->results->AddObject(new GenericExternalResult<double>(femmodel->results->Size()+1, ProfilingCurrentMemEnum, Memory_use, 1, 0));
     169                femmodel->results->AddObject(new GenericExternalResult<double>(femmodel->results->Size()+1, ProfilingCurrentFlopsEnum, Current_flops, 1, 0));
    170170        }
    171171
  • issm/trunk-jpl/src/c/solutions/kriging.cpp

    r13277 r13325  
    7373        if(my_rank==0){
    7474                output_fid=pfopen(outbinfilename,"wb");
    75                 results->AddObject(new DoubleVecExternalResult(results->Size()+1,0,predictions,ninterp,1,0));
    76                 results->AddObject(new DoubleVecExternalResult(results->Size()+1,1,error,ninterp,1,0));
     75                results->AddObject(new GenericExternalResult<double*>(results->Size()+1,0,predictions,ninterp,1,1,0));
     76                results->AddObject(new GenericExternalResult<double*>(results->Size()+1,1,error,ninterp,1,1,0));
    7777                for(int i=0;i<results->Size();i++){
    7878                        ExternalResult* result=(ExternalResult*)results->GetObjectByOffset(i);
  • issm/trunk-jpl/src/c/solvers/solver_newton.cpp

    r13216 r13325  
    7171                        int tempStep=1;
    7272                        IssmDouble tempTime=1.0;
    73                         femmodel->results->AddObject(new BoolExternalResult(femmodel->results->Size()+1, MaxIterationConvergenceFlagEnum, max_iteration_state, tempStep, tempTime));
     73                        femmodel->results->AddObject(new GenericExternalResult<bool>(femmodel->results->Size()+1, MaxIterationConvergenceFlagEnum, max_iteration_state, tempStep, tempTime));
    7474                        break;
    7575                }
     
    7979                        int tempStep=1;
    8080                        IssmDouble tempTime=1.0;
    81                         femmodel->results->AddObject(new BoolExternalResult(femmodel->results->Size()+1, MaxIterationConvergenceFlagEnum, max_iteration_state, tempStep, tempTime));
     81                        femmodel->results->AddObject(new GenericExternalResult<bool>(femmodel->results->Size()+1, MaxIterationConvergenceFlagEnum, max_iteration_state, tempStep, tempTime));
    8282                        break;
    8383                }
  • issm/trunk-jpl/src/c/solvers/solver_nonlinear.cpp

    r13216 r13325  
    8989                        int tempStep=1;
    9090                        IssmDouble tempTime=1.0;
    91                         femmodel->results->AddObject(new BoolExternalResult(femmodel->results->Size()+1, MaxIterationConvergenceFlagEnum, max_iteration_state, tempStep, tempTime));
     91                        femmodel->results->AddObject(new GenericExternalResult<bool>(femmodel->results->Size()+1, MaxIterationConvergenceFlagEnum, max_iteration_state, tempStep, tempTime));
    9292                        break;
    9393                }
     
    100100                        int tempStep=1;
    101101                        IssmDouble tempTime=1.0;
    102                         femmodel->results->AddObject(new BoolExternalResult(femmodel->results->Size()+1, MaxIterationConvergenceFlagEnum, max_iteration_state, tempStep, tempTime));
     102                        femmodel->results->AddObject(new GenericExternalResult<bool>(femmodel->results->Size()+1, MaxIterationConvergenceFlagEnum, max_iteration_state, tempStep, tempTime));
    103103                        break;
    104104                }
  • issm/trunk-jpl/test/NightlyRun/ad.m

    r13302 r13325  
    88md.autodiff.independents={'Thickness','Surface'};
    99md.autodiff.dependents={'IceVolume'};
    10 md=solve(md,TransientSolutionEnum);
     10%md=solve(md,TransientSolutionEnum);
     11md=solve(md,PrognosticSolutionEnum);
    1112
    1213%Fields and tolerances to track changes
Note: See TracChangeset for help on using the changeset viewer.