Changeset 5247


Ignore:
Timestamp:
08/13/10 11:05:48 (15 years ago)
Author:
Mathieu Morlighem
Message:

control_methods are more general now

Location:
issm/trunk/src/c
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/Makefile.am

    r5154 r5247  
    610610                                        ./objects/Bamg/VertexOnGeom.cpp\
    611611                                        ./objects/Bamg/VertexOnVertex.h\
     612                                        ./objects/Bamg/VertexOnVertex.cpp\
    612613                                        ./objects/Bamg/Mesh.h\
    613614                                        ./objects/Bamg/Mesh.cpp\
     
    10921093                                        ./solutions/ResetBoundaryConditions.cpp\
    10931094                                        ./solutions/SolutionConfiguration.cpp\
     1095                                        ./solutions/CorePointerFromSolutionEnum.cpp\
    10941096                                        ./solvers/solver_linear.cpp\
    10951097                                        ./solvers/solver_adjoint_linear.cpp\
  • issm/trunk/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp

    r5103 r5247  
    3232                        parameters->AddObject(new IntParam(ControlTypeEnum,RheologyB2dEnum));
    3333                }
    34                 else
    35                  ISSMERROR("control_type %s not supported yet!",iomodel->control_type);
     34                else  if (strcmp(iomodel->control_type,"dhdt")==0){
     35                        parameters->AddObject(new IntParam(ControlTypeEnum,DhDtEnum));
     36                }
     37                else{
     38                        ISSMERROR("control_type %s not supported yet!",iomodel->control_type);
     39                }
    3640
    3741                /*What solution type?*/
    38                 if (solution_type==DiagnosticSolutionEnum){
    39                         parameters->AddObject(new BoolParam(ControlSteadyEnum,false));
    40                 }
    41                 else if (solution_type==SteadystateSolutionEnum){
     42                if (solution_type==SteadystateSolutionEnum){
    4243                        parameters->AddObject(new BoolParam(ControlSteadyEnum,true));
    4344                }
    4445                else{
    45                         ISSMERROR("Control for solution of type %s not supported yet",EnumToString(solution_type));
     46                        parameters->AddObject(new BoolParam(ControlSteadyEnum,false));
    4647                }
    4748                parameters->AddObject(new IntParam(NStepsEnum,iomodel->nsteps));
  • issm/trunk/src/c/solutions/SolutionConfiguration.cpp

    r5103 r5247  
    2626        void (*solutioncore)(FemModel*)=NULL;
    2727
     28        /*Get Core pointer*/
     29        CorePointerFromSolutionEnum(&solutioncore,solutiontype);
     30
     31        /*Analyses lists*/
    2832        switch(solutiontype){
    2933       
     
    3741                        analyses[4]=SurfaceSlopeAnalysisEnum;
    3842                        analyses[5]=BedSlopeAnalysisEnum;
    39                         solutioncore=&diagnostic_core;
    4043                        break;
    4144
     
    5154                        analyses[6]=ThermalAnalysisEnum;
    5255                        analyses[7]=MeltingAnalysisEnum;
    53                         solutioncore=&steadystate_core;
    5456                        break;
    5557
     
    5961                        analyses[0]=ThermalAnalysisEnum;
    6062                        analyses[1]=MeltingAnalysisEnum;
    61                         solutioncore=&thermal_core;
    6263                        break;
    6364
     
    6667                        analyses=(int*)xmalloc(numanalyses*sizeof(int));
    6768                        analyses[0]=PrognosticAnalysisEnum;
    68                         solutioncore=&prognostic_core;
    6969                        break;
    7070
     
    7373                        analyses=(int*)xmalloc(numanalyses*sizeof(int));
    7474                        analyses[0]=BalancedthicknessAnalysisEnum;
    75                         solutioncore=&balancedthickness_core;
    7675                        break;
    7776
     
    8079                        analyses=(int*)xmalloc(numanalyses*sizeof(int));
    8180                        analyses[0]=BalancedvelocitiesAnalysisEnum;
    82                         solutioncore=&balancedvelocities_core;
    8381                        break;
    8482
     
    8785                        analyses=(int*)xmalloc(numanalyses*sizeof(int));
    8886                        analyses[0]=SurfaceSlopeAnalysisEnum;
    89                         solutioncore=&surfaceslope_core;
    9087                        break;
    9188
     
    9491                        analyses=(int*)xmalloc(numanalyses*sizeof(int));
    9592                        analyses[0]=BedSlopeAnalysisEnum;
    96                         solutioncore=&bedslope_core;
    9793                        break;
    9894
     
    107103                        analyses[5]=BedSlopeAnalysisEnum;
    108104                        analyses[6]=PrognosticAnalysisEnum;
    109                         solutioncore=&transient2d_core;
    110105                        break;
    111106               
     
    122117                        analyses[7]=ThermalAnalysisEnum;
    123118                        analyses[8]=MeltingAnalysisEnum;
    124                         solutioncore=&transient3d_core;
    125119                        break;
    126120
     
    132126        /*Assign output pointers:*/
    133127        if(pnumanalyses) *pnumanalyses=numanalyses;
    134         if(panalyses)*panalyses=analyses;
    135         else xfree((void**)&analyses);
     128        if(panalyses)    *panalyses=analyses;
     129        else              xfree((void**)&analyses);
    136130        if(psolutioncore)*psolutioncore=solutioncore;
    137131
  • issm/trunk/src/c/solutions/balancedvelocities_core.cpp

    r4902 r5247  
    3131        if(verbose)_printf_("saving results:\n");
    3232        if(solution_type==BalancedvelocitiesSolutionEnum){
    33                 InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VxEnum);
    34                 InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VyEnum);
     33                InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VelEnum);
    3534        }
    3635
  • issm/trunk/src/c/solutions/control_core.cpp

    r5103 r5247  
    1919        int     verbose=0;
    2020        int     control_type;
    21         bool    control_steady;
    2221        int     nsteps;
    2322        double  eps_cm;
     
    2524        bool    cm_gradient;
    2625        int     dim;
     26        int     solution_type;
    2727
    2828        double* fit=NULL;
     
    3737        OptPars optpars;
    3838
     39        /*Solution core pointer*/
     40        void (*solutioncore)(FemModel*)=NULL;
     41
    3942        /*output: */
    4043        double* J=NULL;
    41 
    42         /*some preliminary work to be done if running full-Stokes analysis: */
    43         stokescontrolinit(femmodel);
    4444
    4545        /*Recover parameters used throughout the solution:{{{1*/
     
    5353        femmodel->parameters->FindParam(&tolx,TolXEnum);
    5454        femmodel->parameters->FindParam(&cm_gradient,CmGradientEnum);
    55         femmodel->parameters->FindParam(&control_steady,ControlSteadyEnum);
    5655        femmodel->parameters->FindParam(&dim,DimEnum);
     56        femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
    5757        /*}}}*/
     58
     59        /*out of solution_type, figure out solution core function pointer*/
     60        CorePointerFromSolutionEnum(&solutioncore,solution_type);
     61
     62        /*some preliminary work to be done if running full-Stokes analysis: */
     63        if (solution_type==SteadystateSolutionEnum || solution_type==DiagnosticSolutionEnum){
     64                stokescontrolinit(femmodel);
     65        }
    5866
    5967        /*Initialize misfit: */
     
    7078                InputUpdateFromConstantx(femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,(int)fit[n],FitEnum);
    7179               
    72                 /*In case we are running a steady state control method, compute new temperature field using new parameter * distribution: */
    73                 if (control_steady) steadystate_core(femmodel);
     80                /*In case we are running a steady state control method, compute new temperature field using new parameter distribution: */
     81                if (solution_type==SteadystateSolutionEnum) solutioncore(femmodel);
    7482       
    7583                _printf_("%s\n","      computing gradJ...");
     
    99107
    100108        _printf_("%s\n","      preparing final velocity solution");
    101         if (control_steady) steadystate_core(femmodel);
    102         else diagnostic_core(femmodel);
     109        solutioncore(femmodel);
    103110
    104111        /*some results not computed by steadystate_core or diagnostic_core: */
  • issm/trunk/src/c/solutions/solutions.h

    r4778 r5247  
    4848//solution configuration
    4949void SolutionConfiguration(int** panalyses,int* pnumanalyses, void (**psolutioncore)(FemModel*),int solutiontype);
     50void CorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),int solutiontype);
    5051
    5152#endif
Note: See TracChangeset for help on using the changeset viewer.