Changeset 9476


Ignore:
Timestamp:
08/26/11 16:45:02 (14 years ago)
Author:
Mathieu Morlighem
Message:

Do not copy iomodel->constant anymore because some constants need to be processed, plus not all constants are needed as parameters

Location:
issm/trunk/src
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp

    r9395 r9476  
    1616        int         i;
    1717        Parameters *parameters       = NULL;
    18         bool        control_analysis = false;
     18        bool        control_analysis;
    1919        int         nsteps;
    2020        int         num_control_type;
     
    3030
    3131        /*retrieve some parameters: */
    32         parameters->FindParam(&control_analysis,ControlAnalysisEnum);
     32        iomodel->Constant(&control_analysis,ControlAnalysisEnum);
     33        parameters->AddObject(new BoolParam(ControlAnalysisEnum,control_analysis));
    3334
    3435        if(control_analysis){
     36
     37                /*How many controls and how many responses?*/
     38                parameters->AddObject(iomodel->CopyConstantObject(NumControlTypeEnum));
     39                parameters->AddObject(iomodel->CopyConstantObject(NumCmResponsesEnum));
     40                parameters->AddObject(iomodel->CopyConstantObject(NstepsEnum));
     41                parameters->AddObject(iomodel->CopyConstantObject(TolxEnum));
     42                parameters->AddObject(iomodel->CopyConstantObject(EpsCmEnum));
     43                parameters->AddObject(iomodel->CopyConstantObject(CmGradientEnum));
     44                parameters->AddObject(iomodel->CopyConstantObject(MeanvelEnum));
    3545
    3646                /*What solution type?*/
  • issm/trunk/src/c/modules/ModelProcessorx/CreateParameters.cpp

    r9472 r9476  
    1818        Parameters *parameters       = NULL;
    1919        double     *requestedoutputs = NULL;
    20         char       *rheology_law     = NULL;
    2120       
    2221        if(*pparameters)return; //do not create parameters twice!
     22
     23        /*Initialize dataset: */
     24        parameters = new Parameters(ParametersEnum);
    2325               
    24         /*Initialize dataset: */
    25         parameters = iomodel->CopyConstants();
     26        /*Copy some constants from iomodel */
     27        parameters->AddObject(iomodel->CopyConstantObject(DimEnum));
     28        parameters->AddObject(iomodel->CopyConstantObject(IshutterEnum));
     29        parameters->AddObject(iomodel->CopyConstantObject(IsmacayealpattynEnum));
     30        parameters->AddObject(iomodel->CopyConstantObject(IsstokesEnum));
     31        parameters->AddObject(iomodel->CopyConstantObject(OutputFrequencyEnum));
     32        parameters->AddObject(iomodel->CopyConstantObject(EpsResEnum));
     33        parameters->AddObject(iomodel->CopyConstantObject(EpsRelEnum));
     34        parameters->AddObject(iomodel->CopyConstantObject(EpsAbsEnum));
     35        parameters->AddObject(iomodel->CopyConstantObject(MaxNonlinearIterationsEnum));
     36        parameters->AddObject(iomodel->CopyConstantObject(MaxSteadystateIterationsEnum));
     37        parameters->AddObject(iomodel->CopyConstantObject(EpsvelEnum));
     38        parameters->AddObject(iomodel->CopyConstantObject(YtsEnum));
     39        parameters->AddObject(iomodel->CopyConstantObject(DtEnum));
     40        parameters->AddObject(iomodel->CopyConstantObject(NdtEnum));
     41        parameters->AddObject(iomodel->CopyConstantObject(TimeAdaptEnum));
     42        parameters->AddObject(iomodel->CopyConstantObject(CflCoefficientEnum));
     43        parameters->AddObject(iomodel->CopyConstantObject(HydrostaticAdjustmentEnum));
     44        parameters->AddObject(iomodel->CopyConstantObject(PenaltyOffsetEnum));
     45        parameters->AddObject(iomodel->CopyConstantObject(LowmemEnum));
     46        parameters->AddObject(iomodel->CopyConstantObject(ConnectivityEnum));
     47        parameters->AddObject(iomodel->CopyConstantObject(BetaEnum));
     48        parameters->AddObject(iomodel->CopyConstantObject(MeltingpointEnum));
     49        parameters->AddObject(iomodel->CopyConstantObject(ReferencetemperatureEnum));
     50        parameters->AddObject(iomodel->CopyConstantObject(LatentheatEnum));
     51        parameters->AddObject(iomodel->CopyConstantObject(HeatcapacityEnum));
     52        parameters->AddObject(iomodel->CopyConstantObject(ArtificialDiffusivityEnum));
     53        parameters->AddObject(iomodel->CopyConstantObject(GroundinglineMeltingRateEnum));
     54        parameters->AddObject(iomodel->CopyConstantObject(MinThermalConstraintsEnum));
     55        parameters->AddObject(iomodel->CopyConstantObject(MinMechanicalConstraintsEnum));
     56        parameters->AddObject(iomodel->CopyConstantObject(StabilizeConstraintsEnum));
     57        parameters->AddObject(iomodel->CopyConstantObject(StokesreconditioningEnum));
     58        parameters->AddObject(iomodel->CopyConstantObject(ShelfDampeningEnum));
     59        parameters->AddObject(iomodel->CopyConstantObject(ViscosityOvershootEnum));
     60        parameters->AddObject(iomodel->CopyConstantObject(WaitonlockEnum));
     61        parameters->AddObject(iomodel->CopyConstantObject(NumberOfElementsEnum));
     62        parameters->AddObject(iomodel->CopyConstantObject(IoGatherEnum));
     63        parameters->AddObject(iomodel->CopyConstantObject(GroundinglineMigrationEnum));
     64        parameters->AddObject(iomodel->CopyConstantObject(IsdiagnosticEnum));
     65        parameters->AddObject(iomodel->CopyConstantObject(IsprognosticEnum));
     66        parameters->AddObject(iomodel->CopyConstantObject(IsthermalEnum));
     67
     68        /*Some parameters need to be processed from iomodel*/
     69        char* rheology_law = NULL;
     70        iomodel->Constant(&rheology_law,RheologyLawEnum);
     71        if      (strcmp(rheology_law,"none")==0)      parameters->AddObject(new IntParam(RheologyLawEnum,NoneEnum));
     72        else if (strcmp(rheology_law,"paterson")==0)  parameters->AddObject(new IntParam(RheologyLawEnum,PatersonEnum));
     73        else if (strcmp(rheology_law,"arrhenius")==0) parameters->AddObject(new IntParam(RheologyLawEnum,ArrheniusEnum));
     74        else _error_("Rheology law %s not supported",rheology_law);
    2675
    2776        /*some parameters that did not come with the iomodel: */
  • issm/trunk/src/c/modules/ModelProcessorx/Qmu/CreateParametersQmu.cpp

    r9381 r9476  
    6363
    6464        /*recover parameters: */
    65         parameters->FindParam(&qmu_analysis,QmuAnalysisEnum);
    66         parameters->FindParam(&name,NameEnum);
    67         parameters->FindParam(&numberofresponses,NumberOfResponsesEnum);
    68         parameters->FindParam(&numberofvertices,NumberOfVerticesEnum);
     65        iomodel->Constant(&qmu_analysis,QmuAnalysisEnum);
     66        parameters->AddObject(new BoolParam(QmuAnalysisEnum,qmu_analysis));
     67
    6968        if(qmu_analysis){
     69
     70                parameters->FindParam(&name,NameEnum);
     71                parameters->FindParam(&numberofresponses,NumberOfResponsesEnum);
     72                parameters->FindParam(&numberofvertices,NumberOfVerticesEnum);
    7073
    7174                /*name of qmu input, error and output files:{{{1*/
  • issm/trunk/src/c/objects/IoModel.cpp

    r9468 r9476  
    124124}
    125125/*}}}*/
    126 /*FUNCTION IoModel::CopyConstants{{{1*/
    127 Parameters* IoModel::CopyConstants(void){
     126/*FUNCTION IoModel::CopyConstantObject{{{1*/
     127Param* IoModel::CopyConstantObject(int constant_enum){
    128128
    129129        _assert_(this->constants);
    130         return (Parameters*)this->constants->Copy();
     130
     131        /*Find constant*/
     132        Param* param=(Param*)this->constants->FindParamObject(constant_enum);
     133        if(!param) _error_("Constant %s not found in iomodel",EnumToStringx(constant_enum));
     134
     135        return (Param*)param->copy();
    131136}
    132137/*}}}*/
  • issm/trunk/src/c/objects/IoModel.h

    r9468 r9476  
    1212
    1313class Elements;
     14class Param;
    1415
    1516
     
    4445                void        Constant(double *poutput,int constant_enum);
    4546                void        Constant(char  **poutput,int constant_enum);
    46                 Parameters *CopyConstants(void);
     47                Param      *CopyConstantObject(int constant_enum);
    4748                double     *Data(int dataenum);
    4849                void        DeleteData(int num,...);
  • issm/trunk/src/m/model/marshall.m

    r9472 r9476  
    2525                if strcmpi(field,'verbose'),
    2626                        WriteData(fid,field,VerboseToBinary(md.verbose),{'Integer'});
    27                 elseif strcmpi(field,'rheology_law'),
    28                         if strcmpi(md.rheology_law,'none'),
    29                                 WriteData(fid,field,NoneEnum,{'Integer'});
    30                         elseif strcmpi(md.rheology_law,'paterson'),
    31                                 WriteData(fid,field,PatersonEnum,{'Integer'});
    32                         elseif strcmpi(md.rheology_law,'arrhenius'),
    33                                 WriteData(fid,field,ArrheniusEnum,{'Integer'});
    34                         else
    35                                 error('unkown value');
    36                         end
    3727                else
    3828                        WriteData(fid,field,md.(field),template.(field)(3:end));
Note: See TracChangeset for help on using the changeset viewer.