Changeset 16313


Ignore:
Timestamp:
10/07/13 15:30:39 (11 years ago)
Author:
Mathieu Morlighem
Message:

CHG: weights are now in DatasetInput, fetch by Enum instead of weightindex

Location:
issm/trunk-jpl/src/c
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/classes/Elements/Penta.cpp

    r16309 r16313  
    21772177        IssmDouble  yts;
    21782178        bool    control_analysis;
    2179         int     num_control_type;
    2180         int     num_cm_responses;
     2179        int     num_control_type,num_responses;
    21812180
    21822181        /*Fetch parameters: */
     
    21842183        iomodel->Constant(&control_analysis,InversionIscontrolEnum);
    21852184        if(control_analysis) iomodel->Constant(&num_control_type,InversionNumControlParametersEnum);
    2186         if(control_analysis) iomodel->Constant(&num_cm_responses,InversionNumCostFunctionsEnum);
     2185        if(control_analysis) iomodel->Constant(&num_responses,InversionNumCostFunctionsEnum);
    21872186
    21882187        /*Checks if debuging*/
     
    22822281                /*Create inputs and add to DataSetInput*/
    22832282                DatasetInput* datasetinput=new DatasetInput(InversionCostFunctionsCoefficientsEnum);
    2284                 for(i=0;i<num_cm_responses;i++){
    2285                         for(j=0;j<6;j++)nodeinputs[j]=iomodel->Data(InversionCostFunctionsCoefficientsEnum)[(penta_vertex_ids[j]-1)*num_cm_responses+i];
    2286                         datasetinput->inputs->AddObject(new PentaInput(InversionCostFunctionsCoefficientsEnum,nodeinputs,P1Enum));
     2283                for(i=0;i<num_responses;i++){
     2284                        for(j=0;j<6;j++)nodeinputs[j]=iomodel->Data(InversionCostFunctionsCoefficientsEnum)[(penta_vertex_ids[j]-1)*num_responses+i];
     2285                        datasetinput->AddInput(new PentaInput(InversionCostFunctionsCoefficientsEnum,nodeinputs,P1Enum),int(iomodel->Data(InversionCostFunctionsEnum)[i]));
    22872286                }
    22882287
     
    56095608                for(resp=0;resp<num_responses;resp++){
    56105609
    5611                         weights_input->GetInputValue(&weight,gauss,resp);
     5610                        weights_input->GetInputValue(&weight,gauss,responses[resp]);
    56125611
    56135612                        switch(responses[resp]){
     
    58055804                for(resp=0;resp<num_responses;resp++){
    58065805
    5807                         weights_input->GetInputValue(&weight,gauss,resp);
     5806                        weights_input->GetInputValue(&weight,gauss,responses[resp]);
    58085807
    58095808                        switch(responses[resp]){
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r16309 r16313  
    15191519        IssmDouble cmmaxinputs[3];
    15201520        bool       control_analysis   = false;
    1521         int        num_control_type;
     1521        int        num_control_type,num_responses;
    15221522        IssmDouble yts;
    1523         int        num_cm_responses;
    15241523
    15251524        /*Get parameters: */
     
    15271526        iomodel->Constant(&control_analysis,InversionIscontrolEnum);
    15281527        if(control_analysis) iomodel->Constant(&num_control_type,InversionNumControlParametersEnum);
    1529         if(control_analysis) iomodel->Constant(&num_cm_responses,InversionNumCostFunctionsEnum);
     1528        if(control_analysis) iomodel->Constant(&num_responses,InversionNumCostFunctionsEnum);
    15301529
    15311530        /*Recover vertices ids needed to initialize inputs*/
     
    15941593                /*Create inputs and add to DataSetInput*/
    15951594                DatasetInput* datasetinput=new DatasetInput(InversionCostFunctionsCoefficientsEnum);
    1596                 for(i=0;i<num_cm_responses;i++){
    1597                         for(j=0;j<3;j++)nodeinputs[j]=iomodel->Data(InversionCostFunctionsCoefficientsEnum)[(tria_vertex_ids[j]-1)*num_cm_responses+i];
    1598                         datasetinput->inputs->AddObject(new TriaInput(InversionCostFunctionsCoefficientsEnum,nodeinputs,P1Enum));
     1595                for(i=0;i<num_responses;i++){
     1596                        for(j=0;j<3;j++)nodeinputs[j]=iomodel->Data(InversionCostFunctionsCoefficientsEnum)[(tria_vertex_ids[j]-1)*num_responses+i];
     1597                        datasetinput->AddInput(new TriaInput(InversionCostFunctionsCoefficientsEnum,nodeinputs,P1Enum),int(iomodel->Data(InversionCostFunctionsEnum)[i]));
    15991598                }
    16001599
     
    36503649
    36513650                /*Get all parameters at gaussian point*/
    3652                 weights_input->GetInputValue(&weight,gauss,weight_index);
     3651                weights_input->GetInputValue(&weight,gauss,BalancethicknessMisfitEnum);
    36533652                thickness_input->GetInputValue(&H, gauss);
    36543653                thickness_input->GetInputDerivativeValue(&dH[0],&xyz_list[0][0],gauss);
     
    38593858                GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
    38603859                GetNodalFunctionsDerivatives(&dbasis[0][0],&xyz_list[0][0],gauss);
    3861                 weights_input->GetInputValue(&weight,gauss,weight_index);
     3860                weights_input->GetInputValue(&weight,gauss,RheologyBbarAbsGradientEnum);
    38623861
    38633862                /*Build alpha_complement_list: */
     
    41004099                GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
    41014100                GetNodalFunctionsDerivatives(&dbasis[0][0],&xyz_list[0][0],gauss);
    4102                 weights_input->GetInputValue(&weight,gauss,weight_index);
     4101                weights_input->GetInputValue(&weight,gauss,DragCoefficientAbsGradientEnum);
    41034102
    41044103                /*Build alpha_complement_list: */
     
    42704269
    42714270                /*Loop over all requested responses*/
    4272                 for(resp=0;resp<num_responses;resp++) switch(responses[resp]){
    4273 
    4274                         case ThicknessAbsMisfitEnum:
    4275                                 weights_input->GetInputValue(&weight, gauss,resp);
    4276                                 for(i=0;i<NUMVERTICES;i++) grade_g[i]+= (thicknessobs-thickness)*weight*Jdet*gauss->weight*basis[i];
    4277                                 break;
    4278                         case ThicknessAbsGradientEnum:
    4279                                 weights_input->GetInputValue(&weight, gauss,resp);
    4280                                 for(i=0;i<NUMVERTICES;i++) grade_g[i]+= - weight*dH[0]*dbasis[0][i]*Jdet*gauss->weight;
    4281                                 for(i=0;i<NUMVERTICES;i++) grade_g[i]+= - weight*dH[1]*dbasis[1][i]*Jdet*gauss->weight;
    4282                                 break;
    4283                         case ThicknessAlongGradientEnum:
    4284                                 weights_input->GetInputValue(&weight, gauss,resp);
    4285                                 vx_input->GetInputValue(&vx,gauss);
    4286                                 vy_input->GetInputValue(&vy,gauss);
    4287                                 vel = sqrt(vx*vx+vy*vy);
    4288                                 vx  = vx/(vel+1.e-9);
    4289                                 vy  = vy/(vel+1.e-9);
    4290                                 for(i=0;i<NUMVERTICES;i++) grade_g[i]+= - weight*(dH[0]*vx+dH[1]*vy)*(dbasis[0][i]*vx+dbasis[1][i]*vy)*Jdet*gauss->weight;
    4291                                 break;
    4292                         case ThicknessAcrossGradientEnum:
    4293                                 weights_input->GetInputValue(&weight, gauss,resp);
    4294                                 vx_input->GetInputValue(&vx,gauss);
    4295                                 vy_input->GetInputValue(&vy,gauss);
    4296                                 vel = sqrt(vx*vx+vy*vy);
    4297                                 vx  = vx/(vel+1.e-9);
    4298                                 vy  = vy/(vel+1.e-9);
    4299                                 for(i=0;i<NUMVERTICES;i++) grade_g[i]+= - weight*(dH[0]*(-vy)+dH[1]*vx)*(dbasis[0][i]*(-vy)+dbasis[1][i]*vx)*Jdet*gauss->weight;
    4300                                 break;
    4301                         case BalancethicknessMisfitEnum:
    4302                                 weights_input->GetInputValue(&weight, gauss,resp);
    4303                                 surface_mass_balance_input->GetInputValue(&surface_mass_balance,gauss);
    4304                                 basal_melting_input->GetInputValue(&basal_melting,gauss);
    4305                                 dhdt_input->GetInputValue(&dhdt,gauss);
    4306                                 vx_input->GetInputValue(&vx,gauss);
    4307                                 vx_input->GetInputDerivativeValue(&dvx[0],&xyz_list[0][0],gauss);
    4308                                 vy_input->GetInputValue(&vy,gauss);
    4309                                 vy_input->GetInputDerivativeValue(&dvy[0],&xyz_list[0][0],gauss);
    4310                                 for(i=0;i<NUMVERTICES;i++){
    4311                                         grade_g[i]+= - weight*Jdet*gauss->weight*(
    4312                                                                 (vx*dH[0]+vy*dH[1] + thickness*(dvx[0]+dvy[1]))*(vx*dbasis[0][i]+ vy*dbasis[1][i] + basis[i]*(dvx[0]+dvy[1]))
    4313                                                                 -(surface_mass_balance-basal_melting-dhdt)*(vx*dbasis[0][i]+ vy*dbasis[1][i] + basis[i]*(dvx[0]+dvy[1]))
    4314                                                                 );
    4315                                 }
    4316                                 break;
    4317                         default:
    4318                                 _error_("response " << EnumToStringx(responses[resp]) << " not supported yet");
     4271                for(resp=0;resp<num_responses;resp++){
     4272
     4273                        weights_input->GetInputValue(&weight,gauss,responses[resp]);
     4274
     4275                        switch(responses[resp]){
     4276
     4277                                case ThicknessAbsMisfitEnum:
     4278                                        for(i=0;i<NUMVERTICES;i++) grade_g[i]+= (thicknessobs-thickness)*weight*Jdet*gauss->weight*basis[i];
     4279                                        break;
     4280                                case ThicknessAbsGradientEnum:
     4281                                        for(i=0;i<NUMVERTICES;i++) grade_g[i]+= - weight*dH[0]*dbasis[0][i]*Jdet*gauss->weight;
     4282                                        for(i=0;i<NUMVERTICES;i++) grade_g[i]+= - weight*dH[1]*dbasis[1][i]*Jdet*gauss->weight;
     4283                                        break;
     4284                                case ThicknessAlongGradientEnum:
     4285                                        vx_input->GetInputValue(&vx,gauss);
     4286                                        vy_input->GetInputValue(&vy,gauss);
     4287                                        vel = sqrt(vx*vx+vy*vy);
     4288                                        vx  = vx/(vel+1.e-9);
     4289                                        vy  = vy/(vel+1.e-9);
     4290                                        for(i=0;i<NUMVERTICES;i++) grade_g[i]+= - weight*(dH[0]*vx+dH[1]*vy)*(dbasis[0][i]*vx+dbasis[1][i]*vy)*Jdet*gauss->weight;
     4291                                        break;
     4292                                case ThicknessAcrossGradientEnum:
     4293                                        vx_input->GetInputValue(&vx,gauss);
     4294                                        vy_input->GetInputValue(&vy,gauss);
     4295                                        vel = sqrt(vx*vx+vy*vy);
     4296                                        vx  = vx/(vel+1.e-9);
     4297                                        vy  = vy/(vel+1.e-9);
     4298                                        for(i=0;i<NUMVERTICES;i++) grade_g[i]+= - weight*(dH[0]*(-vy)+dH[1]*vx)*(dbasis[0][i]*(-vy)+dbasis[1][i]*vx)*Jdet*gauss->weight;
     4299                                        break;
     4300                                case BalancethicknessMisfitEnum:
     4301                                        surface_mass_balance_input->GetInputValue(&surface_mass_balance,gauss);
     4302                                        basal_melting_input->GetInputValue(&basal_melting,gauss);
     4303                                        dhdt_input->GetInputValue(&dhdt,gauss);
     4304                                        vx_input->GetInputValue(&vx,gauss);
     4305                                        vx_input->GetInputDerivativeValue(&dvx[0],&xyz_list[0][0],gauss);
     4306                                        vy_input->GetInputValue(&vy,gauss);
     4307                                        vy_input->GetInputDerivativeValue(&dvy[0],&xyz_list[0][0],gauss);
     4308                                        for(i=0;i<NUMVERTICES;i++){
     4309                                                grade_g[i]+= - weight*Jdet*gauss->weight*(
     4310                                                                        (vx*dH[0]+vy*dH[1] + thickness*(dvx[0]+dvy[1]))*(vx*dbasis[0][i]+ vy*dbasis[1][i] + basis[i]*(dvx[0]+dvy[1]))
     4311                                                                        -(surface_mass_balance-basal_melting-dhdt)*(vx*dbasis[0][i]+ vy*dbasis[1][i] + basis[i]*(dvx[0]+dvy[1]))
     4312                                                                        );
     4313                                        }
     4314                                        break;
     4315                                default:
     4316                                        _error_("response " << EnumToStringx(responses[resp]) << " not supported yet");
     4317                        }
    43194318                }
    43204319        }
     
    43724371
    43734372                /*Get all parameters at gaussian point*/
    4374                 weights_input->GetInputValue(&weight,gauss,weight_index);
     4373                weights_input->GetInputValue(&weight,gauss,RheologyBbarAbsGradientEnum);
    43754374                rheologyb_input->GetInputDerivativeValue(&dp[0],&xyz_list[0][0],gauss);
    43764375
     
    44174416
    44184417                /*Get all parameters at gaussian point*/
    4419                 weights_input->GetInputValue(&weight,gauss,weight_index);
     4418                weights_input->GetInputValue(&weight,gauss,SurfaceAverageVelMisfitEnum);
    44204419                vx_input->GetInputValue(&vx,gauss);
    44214420                vy_input->GetInputValue(&vy,gauss);
     
    44754474
    44764475                /*Get all parameters at gaussian point*/
    4477                 weights_input->GetInputValue(&weight,gauss,weight_index);
     4476                weights_input->GetInputValue(&weight,gauss,SurfaceLogVelMisfitEnum);
    44784477                vx_input->GetInputValue(&vx,gauss);
    44794478                vy_input->GetInputValue(&vy,gauss);
     
    45344533
    45354534                /*Get all parameters at gaussian point*/
    4536                 weights_input->GetInputValue(&weight,gauss,weight_index);
     4535                weights_input->GetInputValue(&weight,gauss,SurfaceLogVxVyMisfitEnum);
    45374536                vx_input->GetInputValue(&vx,gauss);
    45384537                vy_input->GetInputValue(&vy,gauss);
     
    45924591
    45934592                /*Get all parameters at gaussian point*/
    4594                 weights_input->GetInputValue(&weight,gauss,weight_index);
     4593                weights_input->GetInputValue(&weight,gauss,SurfaceAbsVelMisfitEnum);
    45954594                vx_input->GetInputValue(&vx,gauss);
    45964595                vy_input->GetInputValue(&vy,gauss);
     
    46514650
    46524651                /*Get all parameters at gaussian point*/
    4653                 weights_input->GetInputValue(&weight,gauss,weight_index);
     4652                weights_input->GetInputValue(&weight,gauss,SurfaceRelVelMisfitEnum);
    46544653                vx_input->GetInputValue(&vx,gauss);
    46554654                vy_input->GetInputValue(&vy,gauss);
     
    47084707
    47094708                /*Get all parameters at gaussian point*/
    4710                 weights_input->GetInputValue(&weight,gauss,weight_index);
     4709                weights_input->GetInputValue(&weight,gauss,ThicknessAbsGradientEnum);
    47114710                thickness_input->GetInputDerivativeValue(&dp[0],&xyz_list[0][0],gauss);
    47124711
     
    47544753
    47554754                /*Get all parameters at gaussian point*/
    4756                 weights_input->GetInputValue(&weight,gauss,weight_index);
     4755                weights_input->GetInputValue(&weight,gauss,ThicknessAlongGradientEnum);
    47574756                thickness_input->GetInputDerivativeValue(&dp[0],&xyz_list[0][0],gauss);
    47584757                vx_input->GetInputValue(&vx,gauss);
     
    48054804
    48064805                /*Get all parameters at gaussian point*/
    4807                 weights_input->GetInputValue(&weight,gauss,weight_index);
     4806                weights_input->GetInputValue(&weight,gauss,ThicknessAcrossGradientEnum);
    48084807                thickness_input->GetInputDerivativeValue(&dp[0],&xyz_list[0][0],gauss);
    48094808                vx_input->GetInputValue(&vx,gauss);
     
    48554854                thickness_input->GetInputDerivativeValue(&dH[0],&xyz_list[0][0],gauss);
    48564855                thicknessobs_input->GetInputValue(&thicknessobs,gauss);
    4857                 weights_input->GetInputValue(&weight,gauss,weight_index);
     4856                weights_input->GetInputValue(&weight,gauss,ThicknessAbsGradientEnum);
    48584857
    48594858                /*compute ThicknessAbsMisfit*/
     
    49124911
    49134912                /*Loop over all requested responses*/
    4914                 for(resp=0;resp<num_responses;resp++) switch(responses[resp]){
    4915 
    4916                         case ThicknessAbsMisfitEnum:
    4917                                 weights_input->GetInputValue(&weight, gauss,resp);
    4918                                 for(i=0;i<numnodes;i++) pe->values[i]+=(thicknessobs-thickness)*weight*Jdet*gauss->weight*basis[i];
    4919                                 break;
    4920                         case ThicknessAbsGradientEnum:
    4921                                 weights_input->GetInputValue(&weight, gauss,resp);
    4922                                 for(i=0;i<numnodes;i++) pe->values[i]+= - weight*dH[0]*dbasis[0*numnodes+i]*Jdet*gauss->weight;
    4923                                 for(i=0;i<numnodes;i++) pe->values[i]+= - weight*dH[1]*dbasis[1*numnodes+i]*Jdet*gauss->weight;
    4924                                 break;
    4925                         case ThicknessAlongGradientEnum:
    4926                                 weights_input->GetInputValue(&weight, gauss,resp);
    4927                                 vx_input->GetInputValue(&vx,gauss);
    4928                                 vy_input->GetInputValue(&vy,gauss);
    4929                                 vel = sqrt(vx*vx+vy*vy);
    4930                                 vx  = vx/(vel+1.e-9);
    4931                                 vy  = vy/(vel+1.e-9);
    4932                                 for(i=0;i<numnodes;i++) pe->values[i]+= - weight*(dH[0]*vx+dH[1]*vy)*(dbasis[0*numnodes+i]*vx+dbasis[1*numnodes+i]*vy)*Jdet*gauss->weight;
    4933                                 break;
    4934                         case ThicknessAcrossGradientEnum:
    4935                                 weights_input->GetInputValue(&weight, gauss,resp);
    4936                                 vx_input->GetInputValue(&vx,gauss);
    4937                                 vy_input->GetInputValue(&vy,gauss);
    4938                                 vel = sqrt(vx*vx+vy*vy);
    4939                                 vx  = vx/(vel+1.e-9);
    4940                                 vy  = vy/(vel+1.e-9);
    4941                                 for(i=0;i<numnodes;i++) pe->values[i]+= - weight*(dH[0]*(-vy)+dH[1]*vx)*(dbasis[0*numnodes+i]*(-vy)+dbasis[1*numnodes+i]*vx)*Jdet*gauss->weight;
    4942                                 break;
    4943                         default:
    4944                                 _error_("response " << EnumToStringx(responses[resp]) << " not supported yet");
     4913                for(resp=0;resp<num_responses;resp++){
     4914
     4915                        weights_input->GetInputValue(&weight,gauss,responses[resp]);
     4916
     4917                        switch(responses[resp]){
     4918                                case ThicknessAbsMisfitEnum:
     4919                                        for(i=0;i<numnodes;i++) pe->values[i]+=(thicknessobs-thickness)*weight*Jdet*gauss->weight*basis[i];
     4920                                        break;
     4921                                case ThicknessAbsGradientEnum:
     4922                                        for(i=0;i<numnodes;i++) pe->values[i]+= - weight*dH[0]*dbasis[0*numnodes+i]*Jdet*gauss->weight;
     4923                                        for(i=0;i<numnodes;i++) pe->values[i]+= - weight*dH[1]*dbasis[1*numnodes+i]*Jdet*gauss->weight;
     4924                                        break;
     4925                                case ThicknessAlongGradientEnum:
     4926                                        vx_input->GetInputValue(&vx,gauss);
     4927                                        vy_input->GetInputValue(&vy,gauss);
     4928                                        vel = sqrt(vx*vx+vy*vy);
     4929                                        vx  = vx/(vel+1.e-9);
     4930                                        vy  = vy/(vel+1.e-9);
     4931                                        for(i=0;i<numnodes;i++) pe->values[i]+= - weight*(dH[0]*vx+dH[1]*vy)*(dbasis[0*numnodes+i]*vx+dbasis[1*numnodes+i]*vy)*Jdet*gauss->weight;
     4932                                        break;
     4933                                case ThicknessAcrossGradientEnum:
     4934                                        vx_input->GetInputValue(&vx,gauss);
     4935                                        vy_input->GetInputValue(&vy,gauss);
     4936                                        vel = sqrt(vx*vx+vy*vy);
     4937                                        vx  = vx/(vel+1.e-9);
     4938                                        vy  = vy/(vel+1.e-9);
     4939                                        for(i=0;i<numnodes;i++) pe->values[i]+= - weight*(dH[0]*(-vy)+dH[1]*vx)*(dbasis[0*numnodes+i]*(-vy)+dbasis[1*numnodes+i]*vx)*Jdet*gauss->weight;
     4940                                        break;
     4941                                default:
     4942                                        _error_("response " << EnumToStringx(responses[resp]) << " not supported yet");
     4943                        }
    49454944                }
    49464945        }
     
    50135012                for(resp=0;resp<num_responses;resp++){
    50145013
    5015                         weights_input->GetInputValue(&weight,gauss,resp);
     5014                        weights_input->GetInputValue(&weight,gauss,responses[resp]);
    50165015
    50175016                        switch(responses[resp]){
     
    51705169
    51715170                /*Get all parameters at gaussian point*/
    5172                 weights_input->GetInputValue(&weight,gauss,weight_index);
     5171                weights_input->GetInputValue(&weight,gauss,DragCoefficientAbsGradientEnum);
    51735172                drag_input->GetInputDerivativeValue(&dp[0],&xyz_list[0][0],gauss);
    51745173
  • issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp

    r15737 r16313  
    1616/*FUNCTION DatasetInput::DatasetInput(){{{*/
    1717DatasetInput::DatasetInput(){
    18         enum_type=UNDEF;
    19         inputs=NULL;
     18        enum_type = UNDEF;
     19        inputs    = NULL;
     20        numids    = 0;
     21        ids       = NULL;
    2022}
    2123/*}}}*/
    22 /*FUNCTION DatasetInput::DatasetInput(int in_enum_type) {{{*/
     24/*FUNCTION DatasetInput::DatasetInput(int in_enum_type,int* idlist,int numids) {{{*/
    2325DatasetInput::DatasetInput(int in_enum_type){
    2426
    25         enum_type  = in_enum_type;
    26         inputs     = new Inputs();
     27        enum_type = in_enum_type;
     28        numids    = 0;
     29        inputs    = new Inputs();
     30        ids       = NULL;
    2731}
    2832/*}}}*/
     
    4448        _printf_("DatasetInput:\n");
    4549        _printf_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")\n");
    46         _printf_("---inputs: \n"); inputs->Echo();
     50        _printf_("   numids:"<< this->numids<< "\n");
     51        _printf_("      ids: ");
     52        for(int i=0;i<this->numids;i++) _printf_(this->ids[i]<<" ");
     53        _printf_("\n");
     54        _printf_("   inputs: \n"); inputs->Echo();
    4755}
    4856/*}}}*/
     
    7987        outinput->enum_type=this->enum_type;
    8088        outinput->inputs=dynamic_cast<Inputs*>(this->inputs->SpawnTriaInputs(location));
     89        outinput->numids=this->numids;
     90        outinput->ids=xNew<int>(this->numids);
     91        xMemCpy(outinput->ids,this->ids,this->numids);
    8192
    8293        /*Assign output*/
     
    8697
    8798/*DatasetInput management*/
     99/*FUNCTION DatasetInput::AddInput{{{*/
     100void DatasetInput::AddInput(Input* input,int id){
     101
     102        _assert_(this->numids == this->inputs->Size());
     103
     104        int *old_ids = NULL;
     105
     106        if(this->numids>0){
     107                old_ids=xNew<int>(this->numids);
     108                xMemCpy(old_ids,this->ids,this->numids);
     109                xDelete<int>(this->ids);
     110        }
     111
     112        this->numids=this->numids+1;
     113        this->ids=xNew<int>(this->numids);
     114
     115        if(this->numids>1){
     116                xMemCpy(this->ids,old_ids,this->numids-1);
     117                xDelete<int>(old_ids);
     118        }
     119
     120        /*go ahead and plug: */
     121        this->ids[this->numids-1]=id;
     122        inputs->AddObject(input);
     123
     124        _assert_(this->numids == this->inputs->Size());
     125}
     126/*}}}*/
    88127/*FUNCTION DatasetInput::InstanceEnum{{{*/
    89128int DatasetInput::InstanceEnum(void){
     
    100139}
    101140/*}}}*/
    102 /*FUNCTION DatasetInput::GetInputValue(IssmDouble* pvalue,GaussTria* gauss,int index){{{*/
    103 void DatasetInput::GetInputValue(IssmDouble* pvalue,GaussTria* gauss,int index){
     141/*FUNCTION DatasetInput::GetInputValue(IssmDouble* pvalue,GaussTria* gauss,int id){{{*/
     142void DatasetInput::GetInputValue(IssmDouble* pvalue,GaussTria* gauss,int id){
     143
     144        int  offset = -1;
     145        _assert_(this->numids == this->inputs->Size());
     146
     147        /*Get requested input within dataset*/
     148        for(int i=0;i<this->numids;i++) if(this->ids[i]==id) offset=i;
     149        if(offset<0){
     150                this->Echo();
     151                _error_("Could not find input of id "<<id);
     152        }
     153
     154        Input* input=dynamic_cast<Input*>(this->inputs->GetObjectByOffset(offset));
     155        input->GetInputValue(pvalue,gauss);
     156}
     157/*}}}*/
     158/*FUNCTION DatasetInput::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,int index){{{*/
     159void DatasetInput::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,int index){
     160
     161        _assert_(this->numids == this->inputs->Size());
    104162
    105163        /*Get requested input within dataset*/
     
    110168}
    111169/*}}}*/
    112 /*FUNCTION DatasetInput::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,int index){{{*/
    113 void DatasetInput::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,int index){
    114 
    115         /*Get requested input within dataset*/
    116         if(index<0 || index > inputs->Size()-1) _error_("index requested (" << index << ") exceeds dataset size (" << inputs->Size() << ")");
    117         Input* input=dynamic_cast<Input*>(this->inputs->GetObjectByOffset(index));
    118 
    119         input->GetInputValue(pvalue,gauss);
    120 }
    121 /*}}}*/
  • issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h

    r16238 r16313  
    1717        public:
    1818                int     enum_type;
     19                int     numids;
    1920                Inputs *inputs;
     21                int    *ids;
    2022
    2123                /*DatasetInput constructors, destructors: {{{*/
     
    3234                /*}}}*/
    3335                /*DatasetInput management: {{{*/
     36                void   AddInput(Input* input,int id);
    3437                int    InstanceEnum();
    3538                Input* SpawnTriaInput(int location);
  • issm/trunk-jpl/src/c/classes/IoModel.cpp

    r16304 r16313  
    714714        fid=this->SetFilePointerToData(&code,NULL,data_enum);
    715715
    716         if((code!=5) && (code!=6) && (code!=7))_error_("expecting a IssmDouble, integer or boolean matrix for enum " << EnumToStringx(data_enum));
     716        if(code!=5 && code!=6 && code!=7)_error_("expecting a IssmDouble, integer or boolean matrix for enum " << EnumToStringx(data_enum)<<" (Code is "<<code<<")");
    717717
    718718        /*Now fetch: */
     
    780780        /*Set file pointer to beginning of the data: */
    781781        fid=this->SetFilePointerToData(&code,NULL,data_enum);
    782         if((code!=5) && (code!=6) && (code!=7))_error_("expecting a IssmDouble, integer or boolean matrix for enum " << EnumToStringx(data_enum));
     782        if(code!=5 && code!=6 && code!=7)_error_("expecting a IssmDouble, integer or boolean matrix for enum " << EnumToStringx(data_enum)<<" (Code is "<<code<<")");
    783783
    784784        /*Now fetch: */
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp

    r16307 r16313  
    4949                /*Now, recover fit, optscal and maxiter as vectors: */
    5050                iomodel->FetchData(&control_type,NULL,&num_control_type,InversionControlParametersEnum);
    51                 iomodel->FetchData(&cm_responses,&nsteps,&num_cm_responses,InversionCostFunctionsEnum);
     51                iomodel->FetchData(&cm_responses,NULL,&num_cm_responses,InversionCostFunctionsEnum);
    5252                if(!tao_analysis){
    5353                        iomodel->FetchData(&cm_jump,&nsteps,NULL,InversionStepThresholdEnum);
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp

    r16212 r16313  
    3131        iomodel->FetchDataToInput(elements,InversionThicknessObsEnum,0.);
    3232
    33         iomodel->FetchData(4,InversionControlParametersEnum,InversionCostFunctionsCoefficientsEnum,InversionMinParametersEnum,InversionMaxParametersEnum);
     33        iomodel->FetchData(5,InversionControlParametersEnum,InversionCostFunctionsEnum,InversionCostFunctionsCoefficientsEnum,InversionMinParametersEnum,InversionMaxParametersEnum);
    3434        for(i=0;i<num_control_type;i++){
    3535                switch(reCast<int,IssmDouble>(iomodel->Data(InversionControlParametersEnum)[i])){
     
    5959
    6060        /*Free data: */
    61         iomodel->DeleteData(4+7,InversionControlParametersEnum,InversionCostFunctionsCoefficientsEnum,InversionMinParametersEnum,InversionMaxParametersEnum,BalancethicknessThickeningRateEnum,VxEnum,VyEnum,ThicknessEnum,FrictionCoefficientEnum,MaterialsRheologyBEnum,DamageDEnum);
     61        iomodel->DeleteData(5+7,InversionControlParametersEnum,InversionCostFunctionsCoefficientsEnum,InversionCostFunctionsEnum,InversionMinParametersEnum,InversionMaxParametersEnum,BalancethicknessThickeningRateEnum,VxEnum,VyEnum,ThicknessEnum,FrictionCoefficientEnum,MaterialsRheologyBEnum,DamageDEnum);
    6262}
Note: See TracChangeset for help on using the changeset viewer.