Changeset 3697


Ignore:
Timestamp:
05/10/10 16:29:46 (15 years ago)
Author:
Mathieu Morlighem
Message:

new way to create parameters

Location:
issm/trunk/src/c
Files:
15 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/EnumDefinitions/EnumAsString.cpp

    r3677 r3697  
    22* \file EnumAsString.cpp:
    33* \brief: output string associated with enum
     4*
     5*   WARNING: DO NOT MODIFY THIS FILE
     6*            this file has been automatically generated by SynchronizeStrings.sh
     7*            Please read README for more information
    48*/
    59
     
    350354                case StabilizeConstraintsEnum :
    351355                        return "StabilizeConstraints";
     356                case PenaltyOffsetEnum :
     357                        return "PenaltyOffset";
     358                case OutputFileNameEnum :
     359                        return "OutputFileName";
     360                case DimEnum :
     361                        return "Dim";
     362                case IsHutterEnum :
     363                        return "IsHutter";
     364                case IsMacAyealPattynEnum :
     365                        return "IsMacAyealPattyn";
     366                case IsStokesEnum :
     367                        return "IsStokes";
     368                case VerboseEnum :
     369                        return "Verbose";
     370                case EpsCmEnum :
     371                        return "EpsCm";
     372                case MaxNonlinearIterationsEnum :
     373                        return "MaxNonlinearIterations";
     374                case YtsEnum :
     375                        return "Yts";
     376                case NdtEnum :
     377                        return "Ndt";
     378                case SparsityEnum :
     379                        return "Sparsity";
     380                case LowmemEnum :
     381                        return "Lowmem";
     382                case ConnectivityEnum :
     383                        return "Connectivity";
     384                case BetaEnum :
     385                        return "Beta";
     386                case MeltingPointEnum :
     387                        return "MeltingPoint";
     388                case LatentHeatEnum :
     389                        return "LatentHeat";
     390                case HeatCapacityEnum :
     391                        return "HeatCapacity";
     392                case PenaltyMeltingEnum :
     393                        return "PenaltyMelting";
     394                case MinThermalConstraintsEnum :
     395                        return "MinThermalConstraints";
     396                case MinMechanicalConstraintsEnum :
     397                        return "MinMechanicalConstraints";
     398                case WaitOnLockEnum :
     399                        return "WaitOnLock";
     400                case SolverStringEnum :
     401                        return "SolverString";
     402                case NumberOfVerticesEnum :
     403                        return "NumberOfVertices";
     404                case NumberOfNodesEnum :
     405                        return "NumberOfNodes";
     406                case NumberOfElementsEnum :
     407                        return "NumberOfElements";
     408                case NumberOfDofsPerNodeEnum :
     409                        return "NumberOfDofsPerNode";
     410                case NumRiftsEnum :
     411                        return "NumRifts";
     412                case NumOutputEnum :
     413                        return "NumOutput";
     414                case ParameterOutputEnum :
     415                        return "ParameterOutput";
     416                case ExtrudeParamEnum :
     417                        return "ExtrudeParam";
     418                case ControlSteadyEnum :
     419                        return "ControlSteady";
     420                case TolXEnum :
     421                        return "TolX";
     422                case CmMinEnum :
     423                        return "CmMin";
     424                case CmMaxEnum :
     425                        return "CmMax";
     426                case CmGradientEnum :
     427                        return "CmGradient";
     428                case CmJumpEnum :
     429                        return "CmJump";
     430                case OptScalEnum :
     431                        return "OptScal";
     432                case MaxIterEnum :
     433                        return "MaxIter";
     434                case ControlParameterEnum :
     435                        return "ControlParameter";
     436                case QmuAnalysisEnum :
     437                        return "QmuAnalysis";
     438                case QmuInNameEnum :
     439                        return "QmuInName";
     440                case QmuOutNameEnum :
     441                        return "QmuOutName";
     442                case QmuErrNameEnum :
     443                        return "QmuErrName";
     444                case QmuNPartEnum :
     445                        return "QmuNPart";
     446                case QmuPartEnum :
     447                        return "QmuPart";
     448                case VariableDescriptorsEnum :
     449                        return "VariableDescriptors";
     450                case ResponseDescriptorsEnum :
     451                        return "ResponseDescriptors";
     452                case DakotaParameterEnum :
     453                        return "DakotaParameter";
    352454                default :
    353455                        ISSMERROR("Enum %i not found",en);
  • issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h

    r3675 r3697  
    212212        StokesReconditioningEnum,
    213213        StabilizeConstraintsEnum,
    214         PenaltyOffsetEnum
     214        PenaltyOffsetEnum,
     215        /*}}}*/
     216        /*Parameters{{{1*/
     217        OutputFileNameEnum,
     218        DimEnum,
     219        IsHutterEnum,
     220        IsMacAyealPattynEnum,
     221        IsStokesEnum,
     222        VerboseEnum,
     223        EpsRes,
     224        EpsRel,
     225        EpsAbs,
     226        EpsCmEnum,
     227        MaxNonlinearIterationsEnum,
     228        YtsEnum,
     229        NdtEnum,
     230        SparsityEnum,
     231        LowmemEnum,
     232        ConnectivityEnum,
     233        BetaEnum,
     234        MeltingPointEnum,
     235        LatentHeatEnum,
     236        HeatCapacityEnum,
     237        PenaltyMeltingEnum,
     238        MinThermalConstraintsEnum,
     239        MinMechanicalConstraintsEnum,
     240        WaitOnLockEnum,
     241        SolverStringEnum,
     242        NumberOfVerticesEnum,
     243        NumberOfNodesEnum,
     244        NumberOfElementsEnum,
     245        NumberOfDofsPerNodeEnum,
     246        NumRiftsEnum,
     247        NumOutputEnum,
     248        ParameterOutputEnum,
     249        ExtrudeParamEnum,
     250        ControlSteadyEnum,
     251        NSteps,
     252        TolXEnum,
     253        CmMinEnum,
     254        CmMaxEnum,
     255        CmGradientEnum,
     256        CmJumpEnum,
     257        OptScalEnum,
     258        MaxIterEnum,
     259        ControlParameterEnum,
     260        QmuAnalysisEnum,
     261        QmuInNameEnum,
     262        QmuOutNameEnum,
     263        QmuErrNameEnum,
     264        QmuNPartEnum,
     265        QmuPartEnum,
     266        VariableDescriptorsEnum,
     267        ResponseDescriptorsEnum,
     268        DakotaParameterEnum,
     269        QmuMassFluxSegmentsEnum
    215270        /*}}}*/
    216271
  • issm/trunk/src/c/EnumDefinitions/StringAsEnum.cpp

    r3677 r3697  
    22* \file StringAsEnum.cpp:
    33* \brief: output enum associated with string
     4*
     5*   WARNING: DO NOT MODIFY THIS FILE
     6*            this file has been automatically generated by SynchronizeStrings.sh
     7*            Please read README for more information
    48*/
    59
     
    179183        else if (strcmp(name,"StokesReconditioning")==0) return StokesReconditioningEnum;
    180184        else if (strcmp(name,"StabilizeConstraints")==0) return StabilizeConstraintsEnum;
     185        else if (strcmp(name,"PenaltyOffset")==0) return PenaltyOffsetEnum;
     186        else if (strcmp(name,"OutputFileName")==0) return OutputFileNameEnum;
     187        else if (strcmp(name,"Dim")==0) return DimEnum;
     188        else if (strcmp(name,"IsHutter")==0) return IsHutterEnum;
     189        else if (strcmp(name,"IsMacAyealPattyn")==0) return IsMacAyealPattynEnum;
     190        else if (strcmp(name,"IsStokes")==0) return IsStokesEnum;
     191        else if (strcmp(name,"Verbose")==0) return VerboseEnum;
     192        else if (strcmp(name,"EpsCm")==0) return EpsCmEnum;
     193        else if (strcmp(name,"MaxNonlinearIterations")==0) return MaxNonlinearIterationsEnum;
     194        else if (strcmp(name,"Yts")==0) return YtsEnum;
     195        else if (strcmp(name,"Ndt")==0) return NdtEnum;
     196        else if (strcmp(name,"Sparsity")==0) return SparsityEnum;
     197        else if (strcmp(name,"Lowmem")==0) return LowmemEnum;
     198        else if (strcmp(name,"Connectivity")==0) return ConnectivityEnum;
     199        else if (strcmp(name,"Beta")==0) return BetaEnum;
     200        else if (strcmp(name,"MeltingPoint")==0) return MeltingPointEnum;
     201        else if (strcmp(name,"LatentHeat")==0) return LatentHeatEnum;
     202        else if (strcmp(name,"HeatCapacity")==0) return HeatCapacityEnum;
     203        else if (strcmp(name,"PenaltyMelting")==0) return PenaltyMeltingEnum;
     204        else if (strcmp(name,"MinThermalConstraints")==0) return MinThermalConstraintsEnum;
     205        else if (strcmp(name,"MinMechanicalConstraints")==0) return MinMechanicalConstraintsEnum;
     206        else if (strcmp(name,"WaitOnLock")==0) return WaitOnLockEnum;
     207        else if (strcmp(name,"SolverString")==0) return SolverStringEnum;
     208        else if (strcmp(name,"NumberOfVertices")==0) return NumberOfVerticesEnum;
     209        else if (strcmp(name,"NumberOfNodes")==0) return NumberOfNodesEnum;
     210        else if (strcmp(name,"NumberOfElements")==0) return NumberOfElementsEnum;
     211        else if (strcmp(name,"NumberOfDofsPerNode")==0) return NumberOfDofsPerNodeEnum;
     212        else if (strcmp(name,"NumRifts")==0) return NumRiftsEnum;
     213        else if (strcmp(name,"NumOutput")==0) return NumOutputEnum;
     214        else if (strcmp(name,"ParameterOutput")==0) return ParameterOutputEnum;
     215        else if (strcmp(name,"ExtrudeParam")==0) return ExtrudeParamEnum;
     216        else if (strcmp(name,"ControlSteady")==0) return ControlSteadyEnum;
     217        else if (strcmp(name,"TolX")==0) return TolXEnum;
     218        else if (strcmp(name,"CmMin")==0) return CmMinEnum;
     219        else if (strcmp(name,"CmMax")==0) return CmMaxEnum;
     220        else if (strcmp(name,"CmGradient")==0) return CmGradientEnum;
     221        else if (strcmp(name,"CmJump")==0) return CmJumpEnum;
     222        else if (strcmp(name,"OptScal")==0) return OptScalEnum;
     223        else if (strcmp(name,"MaxIter")==0) return MaxIterEnum;
     224        else if (strcmp(name,"ControlParameter")==0) return ControlParameterEnum;
     225        else if (strcmp(name,"QmuAnalysis")==0) return QmuAnalysisEnum;
     226        else if (strcmp(name,"QmuInName")==0) return QmuInNameEnum;
     227        else if (strcmp(name,"QmuOutName")==0) return QmuOutNameEnum;
     228        else if (strcmp(name,"QmuErrName")==0) return QmuErrNameEnum;
     229        else if (strcmp(name,"QmuNPart")==0) return QmuNPartEnum;
     230        else if (strcmp(name,"QmuPart")==0) return QmuPartEnum;
     231        else if (strcmp(name,"VariableDescriptors")==0) return VariableDescriptorsEnum;
     232        else if (strcmp(name,"ResponseDescriptors")==0) return ResponseDescriptorsEnum;
     233        else if (strcmp(name,"DakotaParameter")==0) return DakotaParameterEnum;
    181234        else ISSMERROR("Enum %i not found",en);
    182         }
     235
     236}
  • issm/trunk/src/c/ModelProcessorx/Balancedthickness/CreateParametersBalancedthickness.cpp

    r3673 r3697  
    1111void CreateParametersBalancedthickness(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle){
    1212       
    13         Param*   param = NULL;
    14         Parameters* parameters=NULL;
    15         int      count;
    16         int      i;
    17         double* u_g=NULL;
    18 
    19         /*recover parameters : */
    20         parameters=*pparameters;
    21 
    22         count=parameters->Size();
    23 
    24         /*Get vx and vy: */
    25         IoModelFetchData(&iomodel->vx,NULL,NULL,iomodel_handle,"vx");
    26         IoModelFetchData(&iomodel->vy,NULL,NULL,iomodel_handle,"vy");
    27         IoModelFetchData(&iomodel->vz,NULL,NULL,iomodel_handle,"vz");
    28 
    29         u_g=(double*)xcalloc(iomodel->numberofvertices*3,sizeof(double));
    30 
    31         if(iomodel->vx) for(i=0;i<iomodel->numberofvertices;i++)u_g[3*i+0]=iomodel->vx[i]/iomodel->yts;
    32         if(iomodel->vy) for(i=0;i<iomodel->numberofvertices;i++)u_g[3*i+1]=iomodel->vy[i]/iomodel->yts;
    33         if(iomodel->vz) for(i=0;i<iomodel->numberofvertices;i++)u_g[3*i+2]=iomodel->vz[i]/iomodel->yts;
    34 
    35         count++;
    36         param= new Param(count,"u_g",DOUBLEVEC);
    37         param->SetDoubleVec(u_g,3*iomodel->numberofvertices,3);
    38         parameters->AddObject(param);
    39 
    40 
    41         xfree((void**)&iomodel->vx);
    42         xfree((void**)&iomodel->vy);
    43         xfree((void**)&iomodel->vz);
    44         xfree((void**)&u_g);
    45 
    46         /*Get melting_rate: */
    47         IoModelFetchData(&iomodel->melting_rate,NULL,NULL,iomodel_handle,"melting_rate");
    48         if(iomodel->melting_rate) for(i=0;i<iomodel->numberofvertices;i++)iomodel->melting_rate[i]=iomodel->melting_rate[i]/iomodel->yts;
    49        
    50         count++;
    51         param= new Param(count,"m_g",DOUBLEVEC);
    52         if(iomodel->melting_rate) param->SetDoubleVec(iomodel->melting_rate,iomodel->numberofvertices,1);
    53         else param->SetDoubleVec(iomodel->melting_rate,0,1);
    54         parameters->AddObject(param);
    55 
    56         /*Free melting_rate: */
    57         xfree((void**)&iomodel->melting_rate);
    58 
    59         /*Get accumulation_rate: */
    60         IoModelFetchData(&iomodel->accumulation_rate,NULL,NULL,iomodel_handle,"accumulation_rate");
    61         if(iomodel->accumulation_rate) for(i=0;i<iomodel->numberofvertices;i++)iomodel->accumulation_rate[i]=iomodel->accumulation_rate[i]/iomodel->yts;
    62        
    63         count++;
    64         param= new Param(count,"a_g",DOUBLEVEC);
    65         if(iomodel->accumulation_rate) param->SetDoubleVec(iomodel->accumulation_rate,iomodel->numberofvertices,1);
    66         else param->SetDoubleVec(iomodel->accumulation_rate,0,0);
    67         parameters->AddObject(param);
    68 
    69         /*Free accumulation_rate: */
    70         xfree((void**)&iomodel->accumulation_rate);
    71 
    72         /*Assign output pointer: */
    73         *pparameters=parameters;
    7413}
  • issm/trunk/src/c/ModelProcessorx/Balancedthickness2/CreateParametersBalancedthickness2.cpp

    r3673 r3697  
    1212void CreateParametersBalancedthickness2(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle){
    1313       
    14         Param*   param = NULL;
    15         Parameters* parameters=NULL;
    16         int      count;
    17         int      i;
    18         int      dim;
    19         double*  vx_g=NULL;
    20         double*  vy_g=NULL;
    21 
    22         /*recover parameters : */
    23         parameters=*pparameters;
    24 
    25         count=parameters->Size();
    26 
    27         /*Get vx and vy: */
    28         IoModelFetchData(&iomodel->vx,NULL,NULL,iomodel_handle,"vx");
    29         IoModelFetchData(&iomodel->vy,NULL,NULL,iomodel_handle,"vy");
    30 
    31         vx_g=(double*)xcalloc(iomodel->numberofvertices,sizeof(double));
    32         vy_g=(double*)xcalloc(iomodel->numberofvertices,sizeof(double));
    33 
    34         if(iomodel->vx) for(i=0;i<iomodel->numberofvertices;i++)vx_g[i]=iomodel->vx[i]/iomodel->yts;
    35         if(iomodel->vy) for(i=0;i<iomodel->numberofvertices;i++)vy_g[i]=iomodel->vy[i]/iomodel->yts;
    36 
    37         count++;
    38         param= new Param(count,"vx_g",DOUBLEVEC);
    39         param->SetDoubleVec(vx_g,iomodel->numberofvertices,1);
    40         parameters->AddObject(param);
    41         count++;
    42         param= new Param(count,"vy_g",DOUBLEVEC);
    43         param->SetDoubleVec(vy_g,iomodel->numberofvertices,1);
    44         parameters->AddObject(param);
    45 
    46         xfree((void**)&iomodel->vx);
    47         xfree((void**)&iomodel->vy);
    48         xfree((void**)&vx_g);
    49         xfree((void**)&vy_g);
    50 
    51         /*Get thickness: */
    52         IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
    53 
    54         count++;
    55         param= new Param(count,"h_g",DOUBLEVEC);
    56         if(iomodel->thickness) param->SetDoubleVec(iomodel->thickness,iomodel->numberofvertices,1);
    57         else param->SetDoubleVec(iomodel->thickness,0,0);
    58         parameters->AddObject(param);
    59 
    60         /*Free thickness: */
    61         xfree((void**)&iomodel->thickness);
    62 
    63         /*Get dhdt: */
    64         IoModelFetchData(&iomodel->dhdt,NULL,NULL,iomodel_handle,"dhdt");
    65         if(iomodel->dhdt) for(i=0;i<iomodel->numberofvertices;i++)iomodel->dhdt[i]=iomodel->dhdt[i]/iomodel->yts;
    66 
    67         count++;
    68         param= new Param(count,"dhdt_g",DOUBLEVEC);
    69         if(iomodel->dhdt) param->SetDoubleVec(iomodel->dhdt,iomodel->numberofvertices,1);
    70         else param->SetDoubleVec(iomodel->dhdt,0,1);
    71         parameters->AddObject(param);
    72 
    73         /*Free dhdt: */
    74         xfree((void**)&iomodel->dhdt);
    75 
    76         /*Get melting_rate: */
    77         IoModelFetchData(&iomodel->melting_rate,NULL,NULL,iomodel_handle,"melting_rate");
    78         if(iomodel->melting_rate) for(i=0;i<iomodel->numberofvertices;i++)iomodel->melting_rate[i]=iomodel->melting_rate[i]/iomodel->yts;
    79        
    80         count++;
    81         param= new Param(count,"m_g",DOUBLEVEC);
    82         if(iomodel->melting_rate) param->SetDoubleVec(iomodel->melting_rate,iomodel->numberofvertices,1);
    83         else param->SetDoubleVec(iomodel->melting_rate,0,1);
    84         parameters->AddObject(param);
    85 
    86         /*Free melting_rate: */
    87         xfree((void**)&iomodel->melting_rate);
    88 
    89         /*Get accumulation_rate: */
    90         IoModelFetchData(&iomodel->accumulation_rate,NULL,NULL,iomodel_handle,"accumulation_rate");
    91         if(iomodel->accumulation_rate) for(i=0;i<iomodel->numberofvertices;i++)iomodel->accumulation_rate[i]=iomodel->accumulation_rate[i]/iomodel->yts;
    92        
    93         count++;
    94         param= new Param(count,"a_g",DOUBLEVEC);
    95         if(iomodel->accumulation_rate) param->SetDoubleVec(iomodel->accumulation_rate,iomodel->numberofvertices,1);
    96         else param->SetDoubleVec(iomodel->accumulation_rate,0,0);
    97         parameters->AddObject(param);
    98 
    99         /*Free accumulation_rate: */
    100         xfree((void**)&iomodel->accumulation_rate);
    101 
    102         /*Assign output pointer: */
    103         *pparameters=parameters;
    10414}
  • issm/trunk/src/c/ModelProcessorx/Balancedvelocities/CreateParametersBalancedvelocities.cpp

    r3673 r3697  
    1212void CreateParametersBalancedvelocities(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle){
    1313       
    14         Param*   param = NULL;
    15         Parameters* parameters=NULL;
    16         int      count;
    17         int      i;
    18         double* u_g=NULL;
    19 
    20         /*recover parameters : */
    21         parameters=*pparameters;
    22 
    23         count=parameters->Size();
    24 
    25         /*Get vx and vy: */
    26         IoModelFetchData(&iomodel->vx,NULL,NULL,iomodel_handle,"vx");
    27         IoModelFetchData(&iomodel->vy,NULL,NULL,iomodel_handle,"vy");
    28         IoModelFetchData(&iomodel->vz,NULL,NULL,iomodel_handle,"vz");
    29 
    30         u_g=(double*)xcalloc(iomodel->numberofvertices*3,sizeof(double));
    31 
    32         if(iomodel->vx) for(i=0;i<iomodel->numberofvertices;i++)u_g[3*i+0]=iomodel->vx[i]/iomodel->yts;
    33         if(iomodel->vy) for(i=0;i<iomodel->numberofvertices;i++)u_g[3*i+1]=iomodel->vy[i]/iomodel->yts;
    34         if(iomodel->vz) for(i=0;i<iomodel->numberofvertices;i++)u_g[3*i+2]=iomodel->vz[i]/iomodel->yts;
    35 
    36         count++;
    37         param= new Param(count,"u_g",DOUBLEVEC);
    38         param->SetDoubleVec(u_g,3*iomodel->numberofvertices,3);
    39         parameters->AddObject(param);
    40 
    41         xfree((void**)&iomodel->vx);
    42         xfree((void**)&iomodel->vy);
    43         xfree((void**)&iomodel->vz);
    44         xfree((void**)&u_g);
    45 
    46         /*Get thickness: */
    47         IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
    48        
    49         count++;
    50         param= new Param(count,"h_g",DOUBLEVEC);
    51         if(iomodel->thickness) param->SetDoubleVec(iomodel->thickness,iomodel->numberofvertices,1);
    52         else param->SetDoubleVec(iomodel->thickness,0,0);
    53         parameters->AddObject(param);
    54 
    55         /*Free thickness: */
    56         xfree((void**)&iomodel->thickness);
    57 
    58         /*Get melting_rate: */
    59         IoModelFetchData(&iomodel->melting_rate,NULL,NULL,iomodel_handle,"melting_rate");
    60         if(iomodel->melting_rate) for(i=0;i<iomodel->numberofvertices;i++)iomodel->melting_rate[i]=iomodel->melting_rate[i]/iomodel->yts;
    61        
    62         count++;
    63         param= new Param(count,"m_g",DOUBLEVEC);
    64         if(iomodel->melting_rate) param->SetDoubleVec(iomodel->melting_rate,iomodel->numberofvertices,1);
    65         else param->SetDoubleVec(iomodel->melting_rate,0,1);
    66         parameters->AddObject(param);
    67 
    68         /*Free melting_rate: */
    69         xfree((void**)&iomodel->melting_rate);
    70 
    71         /*Get accumulation_rate: */
    72         IoModelFetchData(&iomodel->accumulation_rate,NULL,NULL,iomodel_handle,"accumulation_rate");
    73         if(iomodel->accumulation_rate) for(i=0;i<iomodel->numberofvertices;i++)iomodel->accumulation_rate[i]=iomodel->accumulation_rate[i]/iomodel->yts;
    74        
    75         count++;
    76         param= new Param(count,"a_g",DOUBLEVEC);
    77         if(iomodel->accumulation_rate) param->SetDoubleVec(iomodel->accumulation_rate,iomodel->numberofvertices,1);
    78         else param->SetDoubleVec(iomodel->accumulation_rate,0,0);
    79         parameters->AddObject(param);
    80 
    81         /*Free accumulation_rate: */
    82         xfree((void**)&iomodel->accumulation_rate);
    83 
    84 
    85         /*Assign output pointer: */
    86         *pparameters=parameters;
    8714}
  • issm/trunk/src/c/ModelProcessorx/Control/CreateParametersControl.cpp

    r3673 r3697  
    1414       
    1515        int i;
     16        double* control_parameter=NULL;
    1617       
    1718        Parameters* parameters=NULL;
    18         Param*   param = NULL;
    19         int      count;
    20 
    21         double* param_g=NULL;
    22         double* u_g_obs=NULL;
    23         double* control_parameter=NULL;
    2419
    2520        /*Get parameters: */
    2621        parameters=*pparameters;
    27         count=parameters->Size();
    2822       
    29         //control analysis?
    30         count++;
    31         param= new Param(count,"control_analysis",DOUBLE);
    32         param->SetDouble(iomodel->control_analysis);
    33         parameters->AddObject(param);
    34        
     23        parameters->AddObject(new   BoolParam(ControlAnalysisEnum,iomodel->control_analysis));
    3524        if(iomodel->control_analysis){
     25                parameters->AddObject(new   StringParam(ControlTypeEnum,iomodel->control_type));
    3626
    37                 /*control_type: */
    38                 count++;
    39                 param= new Param(count,"control_type",STRING);
    40                 param->SetString(iomodel->control_type);
    41                 parameters->AddObject(param);
     27                if (strcmp(iomodel->control_type,"drag")==0)
     28                 parameters->AddObject(new BoolParam(ExtrudeParamEnum,false));
     29                else  if (strcmp(iomodel->control_type,"B")==0)
     30                 parameters->AddObject(new BoolParam(ExtrudeParamEnum,true));
     31                else
     32                 ISSMERROR("control_type %s not supported yet!",iomodel->control_type);
    4233
    43                 /*extrude_param: */
    44                 count++;
    45                 param= new Param(count,"extrude_param",DOUBLE);
    46                 if (strcmp(iomodel->control_type,"drag")==0)   param->SetDouble(0);
    47                 else if (strcmp(iomodel->control_type,"B")==0) param->SetDouble(1);
    48                 else ISSMERROR("control_type %s not supported yet!",iomodel->control_type);
    49                 parameters->AddObject(param);
    50 
    51                 /*control_steady: */
    52                 count++;
    53                 param= new Param(count,"control_steady",DOUBLE);
    54                 param->SetDouble(0);
    55                 parameters->AddObject(param);
    56 
    57                 /*nsteps: */
    58                 count++;
    59                 param= new Param(count,"nsteps",DOUBLE);
    60                 param->SetDouble(iomodel->nsteps);
    61                 parameters->AddObject(param);
    62 
    63                 /*tolx: */
    64                 count++;
    65                 param= new Param(count,"tolx",DOUBLE);
    66                 param->SetDouble(iomodel->tolx);
    67                 parameters->AddObject(param);
    68 
    69                 /*eps_cm: */
    70                 count++;
    71                 param= new Param(count,"eps_cm",DOUBLE);
    72                 param->SetDouble(iomodel->eps_cm);
    73                 parameters->AddObject(param);
    74 
    75                 /*meanvel: */
    76                 count++;
    77                 param= new Param(count,"meanvel",DOUBLE);
    78                 param->SetDouble(iomodel->meanvel);
    79                 parameters->AddObject(param);
    80 
    81                 /*cm_noisedmp: */
    82                 count++;
    83                 param= new Param(count,"cm_noisedmp",DOUBLE);
    84                 param->SetDouble(iomodel->cm_noisedmp);
    85                 parameters->AddObject(param);
    86 
    87                 /*cm_mindmp_value: */
    88                 count++;
    89                 param= new Param(count,"cm_mindmp_value",DOUBLE);
    90                 param->SetDouble(iomodel->cm_mindmp_value);
    91                 parameters->AddObject(param);
    92 
    93                 /*cm_mindmp_slope: */
    94                 count++;
    95                 param= new Param(count,"cm_mindmp_slope",DOUBLE);
    96                 param->SetDouble(iomodel->cm_mindmp_slope);
    97                 parameters->AddObject(param);
    98 
    99                 /*cm_maxdmp_value: */
    100                 count++;
    101                 param= new Param(count,"cm_maxdmp_value",DOUBLE);
    102                 param->SetDouble(iomodel->cm_maxdmp_value);
    103                 parameters->AddObject(param);
    104 
    105                 /*cm_maxdmp_slope: */
    106                 count++;
    107                 param= new Param(count,"cm_maxdmp_slope",DOUBLE);
    108                 param->SetDouble(iomodel->cm_maxdmp_slope);
    109                 parameters->AddObject(param);
    110                
    111                 /*cm_min: */
    112                 count++;
    113                 param= new Param(count,"cm_min",DOUBLE);
    114                 param->SetDouble(iomodel->cm_min);
    115                 parameters->AddObject(param);
    116 
    117                 /*cm_max: */
    118                 count++;
    119                 param= new Param(count,"cm_max",DOUBLE);
    120                 param->SetDouble(iomodel->cm_max);
    121                 parameters->AddObject(param);
    122 
    123                 /*cm_gradient: */
    124                 count++;
    125                 param= new Param(count,"cm_gradient",DOUBLE);
    126                 param->SetDouble(iomodel->cm_gradient);
    127                 parameters->AddObject(param);
     34                parameters->AddObject(new   BoolParam(ControlSteadyEnum,false));
     35                parameters->AddObject(new    IntParam(NSteps,iomodel->nsteps));
     36                parameters->AddObject(new DoubleParam(TolXEnum,iomodel->tolx));
     37                parameters->AddObject(new DoubleParam(EpsCmEnum,iomodel->eps_cm));
     38                parameters->AddObject(new DoubleParam(MeanVelEnum,iomodel->meanvel));
     39                parameters->AddObject(new DoubleParam(CmNoiseDmpEnum,iomodel->cm_noisedmp));
     40                parameters->AddObject(new DoubleParam(CmMinDmpValueEnum,iomodel->cm_mindmp_value));
     41                parameters->AddObject(new DoubleParam(CmMinDmpSlopeEnum,iomodel->cm_mindmp_slope));
     42                parameters->AddObject(new DoubleParam(CmMaxDmpValueEnum,iomodel->cm_maxdmp_value));
     43                parameters->AddObject(new DoubleParam(CmMaxDmpSlopeEnum,iomodel->cm_maxdmp_slope));
     44                parameters->AddObject(new DoubleParam(CmMinEnum,iomodel->cm_min));
     45                parameters->AddObject(new DoubleParam(CmMaxEnum,iomodel->cm_max));
     46                parameters->AddObject(new   BoolParam(CmGradientEnum,iomodel->cm_gradient));
    12847
    12948                /*Now, recover fit, optscal and maxiter as vectors: */
     
    13352                IoModelFetchData(&iomodel->maxiter,NULL,NULL,iomodel_handle,"maxiter");
    13453
    135                 count++;
    136                 param= new Param(count,"fit",DOUBLEVEC);
    137                 param->SetDoubleVec(iomodel->fit,iomodel->nsteps);
    138                 parameters->AddObject(param);
    139 
    140                 count++;
    141                 param= new Param(count,"cm_jump",DOUBLEVEC);
    142                 param->SetDoubleVec(iomodel->cm_jump,iomodel->nsteps);
    143                 parameters->AddObject(param);
    144 
    145                 count++;
    146                 param= new Param(count,"optscal",DOUBLEVEC);
    147                 param->SetDoubleVec(iomodel->optscal,iomodel->nsteps);
    148                 parameters->AddObject(param);
    149 
    150                 count++;
    151                 param= new Param(count,"maxiter",DOUBLEVEC);
    152                 param->SetDoubleVec(iomodel->maxiter,iomodel->nsteps);
    153                 parameters->AddObject(param);
     54                parameters->AddObject(new DoubleVecParam(FitEnum,iomodel->fit,iomodel->nsteps));
     55                parameters->AddObject(new DoubleVecParam(CmJumpEnum,iomodel->cm_jump,iomodel->nsteps));
     56                parameters->AddObject(new DoubleVecParam(OptScalEnum,iomodel->optscal,iomodel->nsteps));
     57                parameters->AddObject(new DoubleVecParam(MaxIterEnum,iomodel->maxiter,iomodel->nsteps));
    15458
    15559                xfree((void**)&iomodel->fit);
     
    15862                xfree((void**)&iomodel->maxiter);
    15963
    160                 /*Now, recover weights as vectors: */
    161                 IoModelFetchData(&iomodel->weights,NULL,NULL,iomodel_handle,"weights");
    162 
    163                 count++;
    164                 param= new Param(count,"weights",DOUBLEVEC);
    165                 param->SetDoubleVec(iomodel->weights,iomodel->numberofvertices);
    166                 parameters->AddObject(param);
    167 
    168                 xfree((void**)&iomodel->weights);
    169 
    170                 /*Get vx, vx_obs, vy, vy_obs, and the parameter value: */
    171                 IoModelFetchData(&iomodel->vx,NULL,NULL,iomodel_handle,"vx");
    172                 IoModelFetchData(&iomodel->vy,NULL,NULL,iomodel_handle,"vy");
    173                 IoModelFetchData(&iomodel->vz,NULL,NULL,iomodel_handle,"vz");
    174                 IoModelFetchData(&iomodel->vx_obs,NULL,NULL,iomodel_handle,"vx_obs");
    175                 IoModelFetchData(&iomodel->vy_obs,NULL,NULL,iomodel_handle,"vy_obs");
    17664                IoModelFetchData(&control_parameter,NULL,NULL,iomodel_handle,iomodel->control_type);
    177 
    178                 u_g_obs=(double*)xcalloc(iomodel->numberofvertices*2,sizeof(double));
    179                 if(iomodel->vx_obs)for(i=0;i<iomodel->numberofvertices;i++)u_g_obs[2*i+0]=iomodel->vx_obs[i]/iomodel->yts;
    180                 if(iomodel->vy_obs)for(i=0;i<iomodel->numberofvertices;i++)u_g_obs[2*i+1]=iomodel->vy_obs[i]/iomodel->yts;
    181 
    182                 count++;
    183                 param= new Param(count,"u_g_obs",DOUBLEVEC);
    184                 param->SetDoubleVec(u_g_obs,2*iomodel->numberofvertices,2);
    185                 parameters->AddObject(param);
    186                
    187                 param_g=(double*)xcalloc(iomodel->numberofvertices,sizeof(double));
    188                 for(i=0;i<iomodel->numberofvertices;i++)param_g[i]=control_parameter[i];
    189 
    190                 count++;
    191                 param= new Param(count,"param_g",DOUBLEVEC);
    192                 param->SetDoubleVec(param_g,iomodel->numberofvertices,1);
    193                 parameters->AddObject(param);
    194 
    195                 xfree((void**)&iomodel->vx);
    196                 xfree((void**)&iomodel->vy);
    197                 xfree((void**)&iomodel->vz);
    198                 xfree((void**)&iomodel->vx_obs);
    199                 xfree((void**)&iomodel->vy_obs);
    200                 xfree((void**)&u_g_obs);
    201                 xfree((void**)&param_g);
     65                parameters->AddObject(new DoubleVecParam(ControlParameterEnum,control_parameter,iomodel->nsteps));
    20266                xfree((void**)&control_parameter);
    20367        }
  • issm/trunk/src/c/ModelProcessorx/CreateParameters.cpp

    r3686 r3697  
    1515       
    1616        Parameters* parameters = NULL;
    17         Param*   param = NULL;
    18         int      count=0;
    1917        int      numberofdofspernode;
    20         int      dim;
    2118        char**   parameteroutput=NULL;
    2219        char*    descriptor=NULL;
     
    2825
    2926        /*Initialize dataset: */
    30         parameters   = new Parameters(ParametersEnum);
     27        parameters = new Parameters(ParametersEnum);
    3128
    32         //outputfilename
    33         parameters->AddObject(new StringParam(OutputFileNameEnum,iomodel->outputfilename));
    34  
    35         //dimension 2d or 3d:
    36         if (strcmp(iomodel->meshtype,"2d")==0)dim=2;
    37         else dim=3;
     29        if (strcmp(iomodel->meshtype,"2d")==0) parameters->AddObject(new IntParam(DimEnum,2));
     30        else parameters->AddObject(new IntParam(DimEnum,3));
     31        parameters->AddObject(new   StringParam(OutputFileNameEnum,iomodel->outputfilename));
     32        parameters->AddObject(new   BoolParam(IsHutterEnum,iomodel->ishutter));
     33        parameters->AddObject(new   BoolParam(IsMacAyealPattynEnum,iomodel->ismacayealpattyn));
     34        parameters->AddObject(new   BoolParam(IsStokesEnum,iomodel->isstokes));
     35        parameters->AddObject(new   BoolParam(VerboseEnum,iomodel->verbose));
     36        parameters->AddObject(new DoubleParam(EpsResEnum,iomodel->eps_res));
     37        parameters->AddObject(new DoubleParam(EpsRelEnum,iomodel->eps_rel));
     38        parameters->AddObject(new DoubleParam(EpsAbsEnum,iomodel->eps_abs));
     39        parameters->AddObject(new DoubleParam(MaxNonlinearIterationsEnum,iomodel->max_nonlinear_iterations));
     40        parameters->AddObject(new DoubleParam(EpsVelEnum,iomodel->epsvel));
     41        parameters->AddObject(new DoubleParam(YtsEnum,iomodel->yts));
     42        parameters->AddObject(new DoubleParam(DtEnum,iomodel->dt));
     43        parameters->AddObject(new DoubleParam(NdtEnum,iomodel->ndt));
     44        parameters->AddObject(new DoubleParam(PenaltyOffsetEnum,iomodel->penalty_offset));
     45        parameters->AddObject(new DoubleParam(SparsityEnum,iomodel->sparsity));
     46        parameters->AddObject(new   BoolParam(LowmemEnum,iomodel->lowmem));
     47        parameters->AddObject(new DoubleParam(ConnectivityEnum,iomodel->connectivity));
     48        parameters->AddObject(new DoubleParam(BetaEnum,iomodel->beta));
     49        parameters->AddObject(new DoubleParam(MeltingPointEnum,iomodel->meltingpoint));
     50        parameters->AddObject(new DoubleParam(LatentHeatEnum,iomodel->latentheat));
     51        parameters->AddObject(new DoubleParam(HeatCapacityEnum,iomodel->heatcapacity));
     52        parameters->AddObject(new   BoolParam(ArtDiffEnum,iomodel->artdiff));
     53        parameters->AddObject(new DoubleParam(PenaltyMeltingEnum,iomodel->penalty_melting));
     54        parameters->AddObject(new    IntParam(MinThermalConstraintsEnum,iomodel->min_thermal_constraints));
     55        parameters->AddObject(new    IntParam(StabilizeConstraintsEnum,iomodel->stabilize_constraints));
     56        parameters->AddObject(new DoubleParam(StokesReconditioningEnum,iomodel->stokesreconditioning));
     57        parameters->AddObject(new DoubleParam(ViscosityOvershootEnum,iomodel->viscosity_overshoot));
     58        parameters->AddObject(new   BoolParam(WaitOnLockEnum,iomodel->waitonlock));
     59        parameters->AddObject(new   StringParam(SolverStringEnum,iomodel->solverstring));
     60        parameters->AddObject(new    IntParam(NumberOfVerticesEnum,iomodel->numberofvertices));
     61        parameters->AddObject(new    IntParam(NumberOfElementsEnum,iomodel->numberofelements));
    3862
    39         parameters->AddObject(new DoubleParam(DimEnum,dim);
    40        
    41         //elements types
    42         parameters->AddObject(new DoubleParam(IsHutterEnum,iomodel->ishutter));
    43         parameters->AddObject(new DoubleParam(IsMacAyealPattynEnum,iomodel->ismacayealpattyn));
    44         parameters->AddObject(new DoubleParam(IsStokesEnum,iomodel->isstokes));
    45         parameters->AddObject(new DoubleParam(VerboseEnum,iomodel->verbose));
    46 
    47         /*eps_res: */
    48         parameters->AddObject(new DoubleParam(EpsResEnum,iomodel->eps_res));
    49 
    50         /*eps_rel: */
    51         parameters->AddObject(new DoubleParam(EpsRelEnum,iomodel->eps_rel));
    52 
    53         /*eps_abs: */
    54         parameters->AddObject(new DoubleParam(EpsAbsEnum,iomodel->eps_abs));
    55 
    56         /*max_nonlinear_iterations: */
    57         parameters->AddObject(new DoubleParam(MaxNonlinearIterationsEnum,iomodel->max_nonlinear_iterations));
    58 
    59         /*yts: */
    60         parameters->AddObject(new DoubleParam(YtsEnum,iomodel->yts));
    61 
    62         /*dt: */
    63         parameters->AddObject(new DoubleParam(DtEnum,iomodel->dt));
    64 
    65         /*ndt: */
    66         parameters->AddObject(new DoubleParam(NdtEnum,iomodel->ndt));
    67 
    68         /*penalty_offset: */
    69         parameters->AddObject(new DoubleParam(PenaltyOffsetEnum,iomodel->penalty_offset));
    70 
    71         /*sparsity: */
    72         parameters->AddObject(new DoubleParam(SparsityEnum,iomodel->sparsity));
    73 
    74         /*lowmem: */
    75         parameters->AddObject(new DoubleParam(LowmemEnum,iomodel->lowmem));
    76 
    77         /*connectivity: */
    78         parameters->AddObject(new DoubleParam(ConnectivityEnum,iomodel->connectivity));
    79 
    80         /*beta: */
    81         parameters->AddObject(new DoubleParam(BetaEnum,iomodel->beta));
    82 
    83         /*meltingpoint: */
    84         parameters->AddObject(new DoubleParam(BetaEnum,iomodel->beta));
    85         count++;
    86         param= new Param(count,"meltingpoint",DOUBLE);
    87         param->SetDouble(iomodel->meltingpoint);
    88         parameters->AddObject(param);
    89 
    90         /*latentheat: */
    91         count++;
    92         param= new Param(count,"latentheat",DOUBLE);
    93         param->SetDouble(iomodel->latentheat);
    94         parameters->AddObject(param);
    95 
    96         /*heatcapacity: */
    97         count++;
    98         param= new Param(count,"heatcapacity",DOUBLE);
    99         param->SetDouble(iomodel->heatcapacity);
    100         parameters->AddObject(param);
    101 
    102         /*artdiff: */
    103         count++;
    104         param= new Param(count,"artdiff",DOUBLE);
    105         param->SetDouble(iomodel->artdiff);
    106         parameters->AddObject(param);
    107        
    108         /*penalty_melting: */
    109         count++;
    110         param= new Param(count,"penalty_melting",DOUBLE);
    111         param->SetDouble(iomodel->penalty_melting);
    112         parameters->AddObject(param);
    113 
    114         /*min_thermal_constraints: */
    115         count++;
    116         param= new Param(count,"min_thermal_constraints",DOUBLE);
    117         param->SetDouble(iomodel->min_thermal_constraints);
    118         parameters->AddObject(param);
    119 
    120         /*min_mechanical_constraints: */
    121         count++;
    122         param= new Param(count,"min_mechanical_constraints",DOUBLE);
    123         param->SetDouble(iomodel->min_mechanical_constraints);
    124         parameters->AddObject(param);
    125 
    126         /*stabilize_constraints: */
    127         count++;
    128         param= new Param(count,"stabilize_constraints",DOUBLE);
    129         param->SetDouble(iomodel->stabilize_constraints);
    130         parameters->AddObject(param);
    131 
    132         /*stokesreconditioning: */
    133         count++;
    134         param= new Param(count,"stokesreconditioning",DOUBLE);
    135         param->SetDouble(iomodel->stokesreconditioning);
    136         parameters->AddObject(param);
    137 
    138         /*viscosity_overshoot: */
    139         count++;
    140         param= new Param(count,"viscosity_overshoot",DOUBLE);
    141         param->SetDouble(iomodel->viscosity_overshoot);
    142         parameters->AddObject(param);
    143 
    144         /*waitonlock: */
    145         count++;
    146         param= new Param(count,"waitonlock",DOUBLE);
    147         param->SetDouble(iomodel->waitonlock);
    148         parameters->AddObject(param);
    149 
    150         /*solverstring: */
    151         count++;
    152         param= new Param(count,"solverstring",STRING);
    153         param->SetString(iomodel->solverstring);
    154         parameters->AddObject(param);
    155 
    156         /*plot: */
    157         count++;
    158         param= new Param(count,"plot",DOUBLE);
    159         param->SetDouble(iomodel->plot);
    160         parameters->AddObject(param);
    161 
    162         /*numberofvertices: */
    163         count++;
    164         param= new Param(count,"numberofvertices",DOUBLE);
    165         param->SetDouble(iomodel->numberofvertices);
    166         parameters->AddObject(param);
    167 
    168         /*numberofnodes: */
    169         count++;
    170         param= new Param(count,"numberofnodes",DOUBLE);
     63        /*Deal with more complex parameters*/
    17164        if (
    17265                                iomodel->analysis_type==Prognostic2AnalysisEnum ||
    17366                                iomodel->analysis_type==Balancedthickness2AnalysisEnum
    17467                                )
    175          param->SetDouble(3*iomodel->numberofelements);
    176         else param->SetDouble(iomodel->numberofvertices);
    177         parameters->AddObject(param);
     68         parameters->AddObject(new    IntParam(NumberOfNodesEnum,3*iomodel->numberofelements));
     69        else parameters->AddObject(new    IntParam(NumberOfNodesEnum,iomodel->numberofvertices));
    17870
    179         /*numberofelements: */
    180         count++;
    181         param= new Param(count,"numberofelements",DOUBLE);
    182         param->SetDouble(iomodel->numberofelements);
    183         parameters->AddObject(param);
     71        DistributeNumDofs(&numberofdofspernode,iomodel->analysis_type,iomodel->sub_analysis_type);
     72        parameters->AddObject(new    IntParam(NumberOfDofsPerNodeEnum,numberofdofspernode));
    18473
    185         /*Deal with numberofdofspernode: */
    186         DistributeNumDofs(&numberofdofspernode,iomodel->analysis_type,iomodel->sub_analysis_type);
    187         count++;
    188         param= new Param(count,"numberofdofspernode",DOUBLE);
    189         param->SetDouble(numberofdofspernode);
    190         parameters->AddObject(param);
     74        IoModelFetchData(&iomodel->riftinfo,&iomodel->numrifts,NULL,iomodel_handle,"riftinfo");
     75        parameters->AddObject(new    IntParam(NumRiftsEnum,iomodel->numrifts));
     76        xfree((void**)&iomodel->riftinfo);
    19177
    192         /*numrifts: */
    193         IoModelFetchData(&iomodel->riftinfo,&iomodel->numrifts,NULL,iomodel_handle,"riftinfo");
    194         count++;
    195         param= new Param(count,"numrifts",DOUBLE);
    196         param->SetDouble(iomodel->numrifts);
    197         parameters->AddObject(param);
    198         xfree((void**)&iomodel->riftinfo);
    199        
    200         /*epsvel: */
    201         count++;
    202         param= new Param(count,"epsvel",DOUBLE);
    203         param->SetDouble(iomodel->epsvel);
    204         parameters->AddObject(param);
    205 
    206         /*parameteroutput: */
    207         count++;
    208         param= new Param(count,"numoutput",DOUBLE);
    209         param->SetDouble(iomodel->numoutput);
    210         parameters->AddObject(param);
    211 
     78        parameters->AddObject(new    IntParam(NumOutputEnum,iomodel->numoutput));
    21279        if(iomodel->numoutput){
    21380                parameteroutput=(char**)xmalloc(iomodel->numoutput*sizeof(char*));
     
    23097
    23198                /*Ok, we have all the parameter output  descriptors. Build a parameter with it: */
    232                 count++;
    233                 param= new Param(count,"parameteroutput",STRINGARRAY);
    234                 param->SetStringArray(parameteroutput,iomodel->numoutput);
    235                 parameters->AddObject(param);
     99                parameters->AddObject(new StringArrayParam(ParameterOutputEnum,parameteroutput,iomodel->numoutput));
    236100        }
    237101
  • issm/trunk/src/c/ModelProcessorx/DiagnosticHoriz/CreateParametersDiagnosticHoriz.cpp

    r3673 r3697  
    1212void CreateParametersDiagnosticHoriz(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle){
    1313       
    14         Param*   param = NULL;
    15         Parameters* parameters=NULL;
    16         int      count;
    17         int i;
    18 
    19         double* ug=NULL;
    20 
    21         /*recover parameters : */
    22         parameters=*pparameters;
    23 
    24         count=parameters->Size();
    25 
    26         /*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
    27 //      if (!iomodel->ismacayealpattyn)return;
    28 
    29         /*Get vx and vy: */
    30         IoModelFetchData(&iomodel->vx,NULL,NULL,iomodel_handle,"vx");
    31         IoModelFetchData(&iomodel->vy,NULL,NULL,iomodel_handle,"vy");
    32         IoModelFetchData(&iomodel->vz,NULL,NULL,iomodel_handle,"vz");
    33 
    34         ug=(double*)xcalloc(iomodel->numberofvertices*3,sizeof(double));
    35 
    36         if(iomodel->vx) for(i=0;i<iomodel->numberofvertices;i++) ug[3*i+0]=iomodel->vx[i]/iomodel->yts;
    37         if(iomodel->vy) for(i=0;i<iomodel->numberofvertices;i++) ug[3*i+1]=iomodel->vy[i]/iomodel->yts;
    38         if(iomodel->vz) for(i=0;i<iomodel->numberofvertices;i++) ug[3*i+2]=iomodel->vz[i]/iomodel->yts;
    39 
    40         count++;
    41         param= new Param(count,"u_g",DOUBLEVEC);
    42         param->SetDoubleVec(ug,3*iomodel->numberofvertices,3);
    43         parameters->AddObject(param);
    44 
    45         xfree((void**)&iomodel->vx);
    46         xfree((void**)&iomodel->vy);
    47         xfree((void**)&iomodel->vz);
    48         xfree((void**)&ug);
    49        
    50         /*Assign output pointer: */
    51         *pparameters=parameters;
    5214}
  • issm/trunk/src/c/ModelProcessorx/Melting/CreateParametersMelting.cpp

    r3673 r3697  
    1212void CreateParametersMelting(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle){
    1313       
    14         Param*   param = NULL;
    15         Parameters* parameters=NULL;
    16         int      count;
    17         int i;
    18 
    19         /*recover parameters : */
    20         parameters=*pparameters;
    21 
    22         /*if 2d: return*/
    23         if (strcmp(iomodel->meshtype,"2d")==0)goto cleanup_and_return;
    24 
    25         count=parameters->Size();
    26 
    27         /* get initial melting_rate if transient*/
    28         if(iomodel->dt){
    29 
    30                 /*Get melting_rate: */
    31                 IoModelFetchData(&iomodel->melting_rate,NULL,NULL,iomodel_handle,"melting_rate");
    32                 if(iomodel->melting_rate) {
    33                         for(i=0;i<iomodel->numberofvertices;i++)iomodel->melting_rate[i]=iomodel->melting_rate[i]/iomodel->yts;   //m/s instead of m/yr
    34                 }
    35                 else{
    36                         for(i=0;i<iomodel->numberofvertices;i++)iomodel->melting_rate[i]=0;
    37                 }
    38 
    39                 count++;
    40                 param= new Param(count,"m_g",DOUBLEVEC);
    41                 if(iomodel->melting_rate) param->SetDoubleVec(iomodel->melting_rate,iomodel->numberofvertices);
    42                 else param->SetDoubleVec(iomodel->melting_rate,0);
    43                 parameters->AddObject(param);
    44 
    45                 /*Free melting_rate: */
    46                 xfree((void**)&iomodel->melting_rate);
    47         }
    48 
    49         cleanup_and_return:
    50        
    51         /*Assign output pointer: */
    52         *pparameters=parameters;
    5314}
  • issm/trunk/src/c/ModelProcessorx/Prognostic/CreateParametersPrognostic.cpp

    r3673 r3697  
    1313void CreateParametersPrognostic(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle){
    1414       
    15         Param*   param = NULL;
    16         Parameters* parameters=NULL;
    17         int      count;
    18         int      i;
    19         int      dim;
    20         double* u_g=NULL;
    21 
    22         /*recover parameters : */
    23         parameters=*pparameters;
    24 
    25         count=parameters->Size();
    26 
    27         /*Get vx and vy: */
    28         IoModelFetchData(&iomodel->vx,NULL,NULL,iomodel_handle,"vx");
    29         IoModelFetchData(&iomodel->vy,NULL,NULL,iomodel_handle,"vy");
    30         IoModelFetchData(&iomodel->vz,NULL,NULL,iomodel_handle,"vz");
    31 
    32         u_g=(double*)xcalloc(iomodel->numberofvertices*3,sizeof(double));
    33 
    34         if(iomodel->vx) for(i=0;i<iomodel->numberofvertices;i++)u_g[3*i+0]=iomodel->vx[i]/iomodel->yts;
    35         if(iomodel->vy) for(i=0;i<iomodel->numberofvertices;i++)u_g[3*i+1]=iomodel->vy[i]/iomodel->yts;
    36         if(iomodel->vz) for(i=0;i<iomodel->numberofvertices;i++)u_g[3*i+2]=iomodel->vz[i]/iomodel->yts;
    37 
    38         count++;
    39         param= new Param(count,"u_g",DOUBLEVEC);
    40         param->SetDoubleVec(u_g,3*iomodel->numberofvertices,3);
    41         parameters->AddObject(param);
    42 
    43 
    44         xfree((void**)&iomodel->vx);
    45         xfree((void**)&iomodel->vy);
    46         xfree((void**)&iomodel->vz);
    47         xfree((void**)&u_g);
    48 
    49         /*Get pressure if 3d iomodel: */
    50         parameters->FindParam(&dim,"dim");
    51         if (dim==3){
    52                 IoModelFetchData(&iomodel->pressure,NULL,NULL,iomodel_handle,"pressure");
    53                
    54                 count++;
    55                 param= new Param(count,"p_g",DOUBLEVEC);
    56                 if(iomodel->pressure) param->SetDoubleVec(iomodel->pressure,iomodel->numberofvertices,1);
    57                 else param->SetDoubleVec(iomodel->pressure,0,0);
    58                 parameters->AddObject(param);
    59 
    60                 /*Free pressure: */
    61                 xfree((void**)&iomodel->pressure);
    62         }
    63 
    64         /*Get temperature if 3d iomodel: */
    65         parameters->FindParam(&dim,"dim");
    66         if (dim==3){
    67                 IoModelFetchData(&iomodel->temperature,NULL,NULL,iomodel_handle,"temperature");
    68                
    69                 count++;
    70                 param= new Param(count,"t_g",DOUBLEVEC);
    71                 if(iomodel->temperature) param->SetDoubleVec(iomodel->temperature,iomodel->numberofvertices,1);
    72                 else param->SetDoubleVec(iomodel->temperature,0,0);
    73                 parameters->AddObject(param);
    74 
    75                 /*Free temperature: */
    76                 xfree((void**)&iomodel->temperature);
    77         }
    78 
    79         /*Get thickness: */
    80         IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
    81        
    82         count++;
    83         param= new Param(count,"h_g",DOUBLEVEC);
    84         if(iomodel->thickness) param->SetDoubleVec(iomodel->thickness,iomodel->numberofvertices,1);
    85         else param->SetDoubleVec(iomodel->thickness,0,0);
    86         parameters->AddObject(param);
    87 
    88         /*Free thickness: */
    89         xfree((void**)&iomodel->thickness);
    90 
    91         /*Get surface: */
    92         IoModelFetchData(&iomodel->surface,NULL,NULL,iomodel_handle,"surface");
    93        
    94         count++;
    95         param= new Param(count,"s_g",DOUBLEVEC);
    96         if(iomodel->surface) param->SetDoubleVec(iomodel->surface,iomodel->numberofvertices,1);
    97         else param->SetDoubleVec(iomodel->surface,0,0);
    98         parameters->AddObject(param);
    99 
    100         /*Free surface: */
    101         xfree((void**)&iomodel->surface);
    102 
    103         /*Get bed: */
    104         IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
    105        
    106         count++;
    107         param= new Param(count,"b_g",DOUBLEVEC);
    108         if(iomodel->bed) param->SetDoubleVec(iomodel->bed,iomodel->numberofvertices,1);
    109         else param->SetDoubleVec(iomodel->bed,0,0);
    110         parameters->AddObject(param);
    111 
    112         /*Free bed: */
    113         xfree((void**)&iomodel->bed);
    114 
    115         /*Get melting_rate: */
    116         IoModelFetchData(&iomodel->melting_rate,NULL,NULL,iomodel_handle,"melting_rate");
    117         if(iomodel->melting_rate) for(i=0;i<iomodel->numberofvertices;i++)iomodel->melting_rate[i]=iomodel->melting_rate[i]/iomodel->yts;
    118        
    119         count++;
    120         param= new Param(count,"m_g",DOUBLEVEC);
    121         if(iomodel->melting_rate) param->SetDoubleVec(iomodel->melting_rate,iomodel->numberofvertices,1);
    122         else param->SetDoubleVec(iomodel->melting_rate,0,1);
    123         parameters->AddObject(param);
    124 
    125         /*Free melting_rate: */
    126         xfree((void**)&iomodel->melting_rate);
    127 
    128         /*Get accumulation_rate: */
    129         IoModelFetchData(&iomodel->accumulation_rate,NULL,NULL,iomodel_handle,"accumulation_rate");
    130         if(iomodel->accumulation_rate) for(i=0;i<iomodel->numberofvertices;i++)iomodel->accumulation_rate[i]=iomodel->accumulation_rate[i]/iomodel->yts;
    131        
    132         count++;
    133         param= new Param(count,"a_g",DOUBLEVEC);
    134         if(iomodel->accumulation_rate) param->SetDoubleVec(iomodel->accumulation_rate,iomodel->numberofvertices,1);
    135         else param->SetDoubleVec(iomodel->accumulation_rate,0,0);
    136         parameters->AddObject(param);
    137 
    138         /*Free accumulation_rate: */
    139         xfree((void**)&iomodel->accumulation_rate);
    140 
    141         /*Assign output pointer: */
    142         *pparameters=parameters;
    14315}
  • issm/trunk/src/c/ModelProcessorx/Prognostic2/CreateParametersPrognostic2.cpp

    r3673 r3697  
    1313void CreateParametersPrognostic2(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle){
    1414       
    15         Param*   param = NULL;
    16         Parameters* parameters=NULL;
    17         int      count;
    18         int      i;
    19         int      dim;
    20         double*  vx_g=NULL;
    21         double*  vy_g=NULL;
    22 
    23         /*recover parameters : */
    24         parameters=*pparameters;
    25 
    26         count=parameters->Size();
    27 
    28         /*Get vx and vy: */
    29         IoModelFetchData(&iomodel->vx,NULL,NULL,iomodel_handle,"vx");
    30         IoModelFetchData(&iomodel->vy,NULL,NULL,iomodel_handle,"vy");
    31 
    32         vx_g=(double*)xcalloc(iomodel->numberofvertices,sizeof(double));
    33         vy_g=(double*)xcalloc(iomodel->numberofvertices,sizeof(double));
    34 
    35         if(iomodel->vx) for(i=0;i<iomodel->numberofvertices;i++)vx_g[i]=iomodel->vx[i]/iomodel->yts;
    36         if(iomodel->vy) for(i=0;i<iomodel->numberofvertices;i++)vy_g[i]=iomodel->vy[i]/iomodel->yts;
    37 
    38         count++;
    39         param= new Param(count,"vx_g",DOUBLEVEC);
    40         param->SetDoubleVec(vx_g,iomodel->numberofvertices,1);
    41         parameters->AddObject(param);
    42         count++;
    43         param= new Param(count,"vy_g",DOUBLEVEC);
    44         param->SetDoubleVec(vy_g,iomodel->numberofvertices,1);
    45         parameters->AddObject(param);
    46 
    47         xfree((void**)&iomodel->vx);
    48         xfree((void**)&iomodel->vy);
    49         xfree((void**)&vx_g);
    50         xfree((void**)&vy_g);
    51 
    52         /*Get thickness: */
    53         IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
    54        
    55         count++;
    56         param= new Param(count,"h_g",DOUBLEVEC);
    57         if(iomodel->thickness) param->SetDoubleVec(iomodel->thickness,iomodel->numberofvertices,1);
    58         else param->SetDoubleVec(iomodel->thickness,0,0);
    59         parameters->AddObject(param);
    60 
    61         /*Free thickness: */
    62         xfree((void**)&iomodel->thickness);
    63 
    64         /*Get surface: */
    65         IoModelFetchData(&iomodel->surface,NULL,NULL,iomodel_handle,"surface");
    66        
    67         count++;
    68         param= new Param(count,"s_g",DOUBLEVEC);
    69         if(iomodel->surface) param->SetDoubleVec(iomodel->surface,iomodel->numberofvertices,1);
    70         else param->SetDoubleVec(iomodel->surface,0,0);
    71         parameters->AddObject(param);
    72 
    73         /*Free surface: */
    74         xfree((void**)&iomodel->surface);
    75 
    76         /*Get bed: */
    77         IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
    78        
    79         count++;
    80         param= new Param(count,"b_g",DOUBLEVEC);
    81         if(iomodel->bed) param->SetDoubleVec(iomodel->bed,iomodel->numberofvertices,1);
    82         else param->SetDoubleVec(iomodel->bed,0,0);
    83         parameters->AddObject(param);
    84 
    85         /*Free bed: */
    86         xfree((void**)&iomodel->bed);
    87 
    88         /*Get melting_rate: */
    89         IoModelFetchData(&iomodel->melting_rate,NULL,NULL,iomodel_handle,"melting_rate");
    90         if(iomodel->melting_rate) for(i=0;i<iomodel->numberofvertices;i++)iomodel->melting_rate[i]=iomodel->melting_rate[i]/iomodel->yts;
    91        
    92         count++;
    93         param= new Param(count,"m_g",DOUBLEVEC);
    94         if(iomodel->melting_rate) param->SetDoubleVec(iomodel->melting_rate,iomodel->numberofvertices,1);
    95         else param->SetDoubleVec(iomodel->melting_rate,0,1);
    96         parameters->AddObject(param);
    97 
    98         /*Free melting_rate: */
    99         xfree((void**)&iomodel->melting_rate);
    100 
    101         /*Get accumulation_rate: */
    102         IoModelFetchData(&iomodel->accumulation_rate,NULL,NULL,iomodel_handle,"accumulation_rate");
    103         if(iomodel->accumulation_rate) for(i=0;i<iomodel->numberofvertices;i++)iomodel->accumulation_rate[i]=iomodel->accumulation_rate[i]/iomodel->yts;
    104        
    105         count++;
    106         param= new Param(count,"a_g",DOUBLEVEC);
    107         if(iomodel->accumulation_rate) param->SetDoubleVec(iomodel->accumulation_rate,iomodel->numberofvertices,1);
    108         else param->SetDoubleVec(iomodel->accumulation_rate,0,0);
    109         parameters->AddObject(param);
    110 
    111         /*Free accumulation_rate: */
    112         xfree((void**)&iomodel->accumulation_rate);
    113 
    114         /*Assign output pointer: */
    115         *pparameters=parameters;
    11615}
  • issm/trunk/src/c/ModelProcessorx/Qmu/CreateParametersQmu.cpp

    r3673 r3697  
    1717       
    1818        Parameters* parameters = NULL;
    19         Param*   param = NULL;
    20         int      count;
    2119        int      second_count;
    2220       
     
    4240        int num_qmu_mass_flux_segments=0;
    4341        int my_num_qmu_mass_flux_segments=0;
    44        
    45         /*parameters for misfit: */
    46         double* u_g_obs=NULL;
    4742
    4843        #ifdef _SERIAL_
     
    5449        parameters=*pparameters;
    5550
    56         count=parameters->Size();
    57 
    58         //qmu analysis?
    59         count++;
    60         param= new Param(count,"qmu_analysis",DOUBLE);
    61         param->SetDouble(iomodel->qmu_analysis);
    62         parameters->AddObject(param);
    63 
    64 
     51        parameters->AddObject(new   BoolParam(QmuAnalysisEnum,iomodel->qmu_analysis));
    6552        if(iomodel->qmu_analysis){
    6653
     
    6855                qmuinname=(char*)xmalloc((strlen(iomodel->name)+strlen(".qmu.in")+1)*sizeof(char));
    6956                sprintf(qmuinname,"%s%s",iomodel->name,".qmu.in");
    70                
    71                 count++;
    72                 param= new Param(count,"qmuinname",STRING);
    73                 param->SetString(qmuinname);
    74                 parameters->AddObject(param);
     57                parameters->AddObject(new   StringParam(QmuInNameEnum,qmuinname));
    7558
    7659                qmuoutname=(char*)xmalloc((strlen(iomodel->name)+strlen(".qmu.out")+1)*sizeof(char));
    7760                sprintf(qmuoutname,"%s%s",iomodel->name,".qmu.out");
    78                
    79                 count++;
    80                 param= new Param(count,"qmuoutname",STRING);
    81                 param->SetString(qmuoutname);
    82                 parameters->AddObject(param);
     61                parameters->AddObject(new   StringParam(QmuOutNameEnum,qmuoutname));
    8362
    8463                qmuerrname=(char*)xmalloc((strlen(iomodel->name)+strlen(".qmu.err")+1)*sizeof(char));
    8564                sprintf(qmuerrname,"%s%s",iomodel->name,".qmu.err");
     65                parameters->AddObject(new   StringParam(QmuErrNameEnum,qmuerrname));
    8666               
    87                 count++;
    88                 param= new Param(count,"qmuerrname",STRING);
    89                 param->SetString(qmuerrname);
    90                 parameters->AddObject(param);
    91 
    92                 //npart
    93                 count++;
    94                 param= new Param(count,"qmu_npart",DOUBLE);
    95                 param->SetDouble(iomodel->qmu_npart);
    96                 parameters->AddObject(param);
     67                parameters->AddObject(new    IntParam(QmuNPartEnum,iomodel->qmu_npart));
    9768
    9869                /*Deal with variables for qmu iomodeling: */
     
    12091                #endif
    12192
    122 
    12393                /*Ok, we have all the variable descriptors. Build a parameter with it: */
    124                 count++;
    125                 param= new Param(count,"variabledescriptors",STRINGARRAY);
    126                 param->SetStringArray(variabledescriptors,iomodel->numberofvariables);
    127                 parameters->AddObject(param);
    128 
     94                parameters->AddObject(new StringArrayParam(VariableDescriptorsEnum,variabledescriptors,iomodel->numberofvariables));
    12995
    13096                /*Deal with responses and partition for qmu iomodeling: */
     
    151117
    152118                /*Ok, we have all the response descriptors. Build a parameter with it: */
    153                 count++;
    154                 param= new Param(count,"responsedescriptors",STRINGARRAY);
    155                 param->SetStringArray(responsedescriptors,iomodel->numberofresponses);
    156                 parameters->AddObject(param);
     119                parameters->AddObject(new StringArrayParam(ResponseDescriptorsEnum,responsedescriptors,iomodel->numberofresponses));
    157120
    158121                /*partition vertices in iomodel->qmu_npart parts, unless a partition is already present: */
     
    167130                        for(i=0;i<iomodel->numberofvertices;i++)dpart[i]=iomodel->my_vertices[i];
    168131                }
    169 
    170                 count++;
    171                 param= new Param(count,"qmu_part",DOUBLEVEC);
    172                 param->SetDoubleVec(dpart,iomodel->numberofvertices,1);
    173                 parameters->AddObject(param);
    174 
     132                parameters->AddObject(new DoubleVecParam(QmuPartEnum,dpart,iomodel->numberofvertices));
    175133
    176134                /*Ok, now if any of the variables input from Dakota are distributed, we are going to need the parameters: */
     
    183141                                ){
    184142
    185                                 //Fetch data:
    186143                                IoModelFetchData(&dakota_parameter,NULL,NULL,iomodel_handle,descriptor);
    187 
    188                                 //Add parameter
    189                                 count++;
    190                                 param= new Param(count,descriptor,DOUBLEVEC);
    191                                 param->SetDoubleVec(dakota_parameter,iomodel->numberofvertices,1);
    192                                 parameters->AddObject(param);
    193 
    194                                 //free data
     144                                parameters->AddObject(new DoubleVecParam(DakotaParameterEnum,dakota_parameter,iomodel->numberofvertices));
    195145                                xfree((void**)&dakota_parameter);
    196146
     
    230180                                                }
    231181
    232                                                 count++;
    233                                                 param= new Param(count,"qmu_mass_flux_segments",DOUBLEMAT);
    234                                                 param->SetDoubleMat(my_qmu_mass_flux_segments,my_num_qmu_mass_flux_segments,5);
    235                                                 parameters->AddObject(param);
     182                                                parameters->AddObject(new DoubleMatParam(QmuMassFluxSegmentsEnum,my_qmu_mass_flux_segments,my_num_qmu_mass_flux_segments,5));
    236183
    237184                                        }
     
    239186                                #else
    240187
    241                                         count++;
    242                                         param= new Param(count,"qmu_mass_flux_segments",DOUBLEMAT);
    243                                         param->SetDoubleMat(qmu_mass_flux_segments,num_qmu_mass_flux_segments,5);
    244                                         parameters->AddObject(param);
     188                                        parameters->AddObject(new DoubleMatParam(QmuMassFluxSegmentsEnum,qmu_mass_flux_segments,num_qmu_mass_flux_segments,5));
    245189
    246190                                #endif
     
    254198                                IoModelFetchData(&iomodel->vx_obs,NULL,NULL,iomodel_handle,"vx_obs");
    255199                                IoModelFetchData(&iomodel->vy_obs,NULL,NULL,iomodel_handle,"vy_obs");
    256 
    257                                 /*Now, recover fit: */
    258200                                IoModelFetchData(&iomodel->fit,NULL,NULL,iomodel_handle,"fit");
    259201
    260                                 u_g_obs=(double*)xcalloc(iomodel->numberofvertices*2,sizeof(double));
    261                                 if(iomodel->vx_obs)for(i=0;i<iomodel->numberofvertices;i++)u_g_obs[2*i+0]=iomodel->vx_obs[i]/iomodel->yts;
    262                                 if(iomodel->vy_obs)for(i=0;i<iomodel->numberofvertices;i++)u_g_obs[2*i+1]=iomodel->vy_obs[i]/iomodel->yts;
    263 
    264                                 count++;
    265                                 param= new Param(count,"velocity_obs",DOUBLEVEC);
    266                                 param->SetDoubleVec(u_g_obs,2*iomodel->numberofvertices,2);
    267                                 parameters->AddObject(param);
    268 
    269                                 count++;
    270                                 param= new Param(count,"fit",DOUBLEVEC);
    271                                 param->SetDoubleVec(iomodel->fit,iomodel->nsteps);
    272                                 parameters->AddObject(param);
     202                                if(iomodel->vx_obs)for(i=0;i<iomodel->numberofvertices;i++)iomodel->vx_obs[2*i+0]=iomodel->vx_obs[i]/iomodel->yts;
     203                                if(iomodel->vy_obs)for(i=0;i<iomodel->numberofvertices;i++)iomodel->vy_obs[2*i+1]=iomodel->vy_obs[i]/iomodel->yts;
     204
     205                                parameters->AddObject(new DoubleVecParam(VxObsEnum,iomodel->vx_obs,iomodel->numberofvertices));
     206                                parameters->AddObject(new DoubleVecParam(VyObsEnum,iomodel->vy_obs,iomodel->numberofvertices));
     207                                parameters->AddObject(new DoubleVecParam(FitEnum,iomodel->fit,iomodel->nsteps));
    273208
    274209                                xfree((void**)&iomodel->vx_obs);
    275210                                xfree((void**)&iomodel->vy_obs);
    276211                                xfree((void**)&iomodel->fit);
    277                                 xfree((void**)&u_g_obs);
    278212
    279213                        }
  • issm/trunk/src/c/ModelProcessorx/Thermal/CreateParametersThermal.cpp

    r3673 r3697  
    1313void CreateParametersThermal(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle){
    1414       
    15         Param*   param = NULL;
    16         Parameters* parameters=NULL;
    17         int      count;
    18         int i;
    19         double* u_g=NULL;
    20 
    21         /*recover parameters : */
    22         parameters=*pparameters;
    23 
    24         /*return if 2d mesh*/
    25         if (strcmp(iomodel->meshtype,"2d")==0)goto cleanup_and_return;
    26 
    27         count=parameters->Size();
    28 
    29         /*Get vx vy and vz: */
    30         IoModelFetchData(&iomodel->vx,NULL,NULL,iomodel_handle,"vx");
    31         IoModelFetchData(&iomodel->vy,NULL,NULL,iomodel_handle,"vy");
    32         IoModelFetchData(&iomodel->vz,NULL,NULL,iomodel_handle,"vz");
    33 
    34         u_g=(double*)xcalloc(iomodel->numberofvertices*3,sizeof(double));
    35 
    36         if(iomodel->vx) for(i=0;i<iomodel->numberofvertices;i++)u_g[3*i+0]=iomodel->vx[i]/iomodel->yts;
    37         if(iomodel->vy) for(i=0;i<iomodel->numberofvertices;i++)u_g[3*i+1]=iomodel->vy[i]/iomodel->yts;
    38         if(iomodel->vz) for(i=0;i<iomodel->numberofvertices;i++)u_g[3*i+2]=iomodel->vz[i]/iomodel->yts;
    39 
    40         count++;
    41         param= new Param(count,"u_g",DOUBLEVEC);
    42         param->SetDoubleVec(u_g,3*iomodel->numberofvertices,3);
    43         parameters->AddObject(param);
    44 
    45         xfree((void**)&iomodel->vx);
    46         xfree((void**)&iomodel->vy);
    47         xfree((void**)&iomodel->vz);
    48         xfree((void**)&u_g);
    49        
    50         /*Get pressure: */
    51         IoModelFetchData(&iomodel->pressure,NULL,NULL,iomodel_handle,"pressure");
    52        
    53         count++;
    54         param= new Param(count,"p_g",DOUBLEVEC);
    55         if(iomodel->pressure) param->SetDoubleVec(iomodel->pressure,iomodel->numberofvertices,1);
    56         else param->SetDoubleVec(iomodel->pressure,0,0);
    57         parameters->AddObject(param);
    58 
    59         /*Free pressure: */
    60         xfree((void**)&iomodel->pressure);
    61 
    62         /* get initial temperature and melting if transient*/
    63         if(iomodel->dt){
    64 
    65                 /*Get melting and temperature: */
    66                 IoModelFetchData(&iomodel->temperature,NULL,NULL,iomodel_handle,"temperature");
    67 
    68                 count++;
    69                 param= new Param(count,"t_g",DOUBLEVEC);
    70                 if(iomodel->temperature) param->SetDoubleVec(iomodel->temperature,iomodel->numberofvertices,1);
    71                 else ISSMERROR("Missing initial temperature");
    72                 parameters->AddObject(param);
    73 
    74                 /*Free temperature: */
    75                 xfree((void**)&iomodel->temperature);
    76         }
    77 
    78         cleanup_and_return:
    79        
    80         /*Assign output pointer: */
    81         *pparameters=parameters;
    8215}
  • issm/trunk/src/c/objects/Params/DoubleVecParam.cpp

    r3683 r3697  
    2828}
    2929/*}}}*/
    30 /*FUNCTION DoubleVecParam::DoubleVecParam(int enum_type,IssmDoubleVec value){{{1*/
     30/*FUNCTION DoubleVecParam::DoubleVecParam(int enum_type,IssmDoubleVec value,int M){{{1*/
    3131DoubleVecParam::DoubleVecParam(int in_enum_type,double* in_value, int in_M){
    3232
Note: See TracChangeset for help on using the changeset viewer.