Changeset 15375


Ignore:
Timestamp:
07/01/13 14:16:46 (12 years ago)
Author:
schlegel
Message:

CHG: save z and thermal params so dakota will work with thermal

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

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/analyses/thermal_core.cpp

    r15104 r15375  
    1515        bool   save_results;
    1616        bool   dakota_analysis  = false;
     17        int    solution_type;
    1718
    1819        //first recover parameters common to all solutions
    1920        femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
    2021        femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
     22        femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
    2123
    22         if(dakota_analysis){
     24        if(dakota_analysis && solution_type!=TransientSolutionEnum){
    2325                femmodel->SetCurrentConfiguration(ThermalAnalysisEnum);
    2426                ResetConstraintsx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
  • issm/trunk-jpl/src/c/analyses/transient_core.cpp

    r15104 r15375  
    6666                InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuSurfaceEnum,SurfaceEnum);
    6767                InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuBedEnum,BedEnum);
     68                if(dim==2)InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuMaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
    6869                if(isthermal && dim==3){
     70                        //Update Vertex Position after updating Thickness and Bed
     71                        femmodel->SetCurrentConfiguration(PrognosticAnalysisEnum);
     72                        femmodel->UpdateVertexPositionsx();
     73                        InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVxMeshEnum,VxMeshEnum);
     74                        InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVyMeshEnum,VyMeshEnum);
     75                        InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVzMeshEnum,VzMeshEnum);
    6976                        InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuTemperatureEnum,TemperatureEnum);
    7077                        InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuMeltingEnum,BasalforcingsMeltingRateEnum);
     78                        InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuMaterialsRheologyBEnum,MaterialsRheologyBEnum);
     79                        //Reset Thermal Constraints
     80                        femmodel->SetCurrentConfiguration(ThermalAnalysisEnum);
     81                        ResetConstraintsx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
    7182                }
    7283        }
     
    152163                                InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SurfaceforcingsMonthlytemperaturesEnum);
    153164                                InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SurfaceforcingsPrecipitationEnum);
    154                                 InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,BasalFrictionEnum);
     165                                InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,BasalFrictionEnum);
    155166                        }
    156167                        if(isgroundingline && (groundingline_migration==SubelementMigrationEnum || groundingline_migration==SubelementMigration2Enum)){
  • issm/trunk-jpl/src/c/classes/Elements/Elements.cpp

    r15128 r15375  
    323323}
    324324/*}}}*/
    325 /*FUNCTION Elements::InputCopy{{{*/
     325/*FUNCTION Elements::InputDuplicate{{{*/
    326326void Elements::InputDuplicate(int input_enum,int output_enum){
    327327
  • issm/trunk-jpl/src/c/classes/Elements/Penta.cpp

    r15372 r15375  
    21422142                                name==QmuVyEnum ||
    21432143                                name==QmuVzEnum ||
     2144                                name==QmuVxMeshEnum ||
     2145                                name==QmuVyMeshEnum ||
     2146                                name==QmuVzMeshEnum ||
    21442147                                name==QmuPressureEnum ||
    21452148                                name==QmuBedEnum ||
     
    31173120                        this->inputs->AddInput(new PentaP1Input(VyMeshEnum,nodeinputs));
    31183121                        this->inputs->AddInput(new PentaP1Input(VzMeshEnum,nodeinputs));
     3122                        if(dakota_analysis){
     3123                                this->inputs->AddInput(new PentaP1Input(QmuVxMeshEnum,nodeinputs));
     3124                                this->inputs->AddInput(new PentaP1Input(QmuVyMeshEnum,nodeinputs));
     3125                                this->inputs->AddInput(new PentaP1Input(QmuVzMeshEnum,nodeinputs));
     3126                        }
    31193127                        break;
    31203128
  • issm/trunk-jpl/src/c/classes/Materials/Materials.cpp

    r15012 r15375  
    4747}
    4848/*}}}*/
     49/*FUNCTION Materials::InputDuplicate{{{*/
     50void Materials::InputDuplicate(int input_enum,int output_enum){
     51
     52        for(int i=0;i<this->Size();i++){
     53                Material* material=(Material*)this->GetObjectByOffset(i);
     54                material->InputDuplicate(input_enum,output_enum);
     55        }
     56}
  • issm/trunk-jpl/src/c/classes/Materials/Materials.h

    r15067 r15375  
    2424                /*numerics*/
    2525                void  Configure(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters);
     26                void  InputDuplicate(int input_enum,int output_enum);
    2627
    2728};
  • issm/trunk-jpl/src/c/classes/Materials/Matice.cpp

    r15300 r15375  
    567567                                        return;
    568568                                }
     569                                case PentaEnum: {
     570                                        IssmDouble valuesp[6];
     571                                        for (int i=0;i<6;i++) valuesp[i]=vector[((Penta*)element)->vertices[i]->Sid()]; //use sid list, to index into serial oriented vector
     572                                        this->inputs->AddInput(new PentaP1Input(name,valuesp));
     573                                        return;
     574                                }
    569575                                default: _error_("element " << EnumToStringx(element->ObjectEnum()) << " not implemented yet");
    570576                        }
     
    618624                                                parameters->FindParam(&dim,MeshDimensionEnum);
    619625                                                if(dim==2){
    620                                                         /*Dupliacte rheology input: */
     626                                                        /*Duplicate rheology input: */
    621627                                                        this->inputs->AddInput(new TriaInput(MaterialsRheologyBbarEnum,values,P1Enum));
    622628                                                }
     
    782788                                name==MaterialsRheologyBEnum ||
    783789                                name==MaterialsRheologyBbarEnum ||
    784                                 name==MaterialsRheologyNEnum
     790                                name==MaterialsRheologyNEnum ||
     791                                name==QmuMaterialsRheologyBEnum
    785792                ){
    786793                return true;
  • issm/trunk-jpl/src/c/classes/Materials/Matpar.cpp

    r15128 r15375  
    242242
    243243/*Matpar management: */
     244/*FUNCTION Matpar::InputDuplicate{{{*/
     245void  Matpar::InputDuplicate(int original_enum,int new_enum){
     246
     247           /*Call inputs method*/
     248           if (IsInput(original_enum)) inputs->DuplicateInput(original_enum,new_enum);
     249
     250}
     251/*}}}*/
    244252/*FUNCTION Matpar::Configure {{{*/
    245253void  Matpar::Configure(Elements* elementsin){
     
    455463}               
    456464/*}}}*/
     465/*FUNCTION Matpar::IsInput{{{*/
     466bool Matpar::IsInput(int name){
     467        return false;
     468}
     469/*}}}*/
  • issm/trunk-jpl/src/c/classes/Materials/Matpar.h

    r15128 r15375  
    8484                /*}}}*/
    8585                /*Material virtual functions resolution: {{{*/
    86                 void   InputDuplicate(int original_enum,int new_enum){_error_("not implemented yet");};
     86                void   InputDuplicate(int original_enum,int new_enum);
    8787                void   Configure(Elements* elements);
    8888                void   GetVectorFromInputs(Vector<IssmDouble>* vector,int input_enum){return;}
     
    136136                IssmDouble GetDesFac();
    137137                IssmDouble GetS0p();
     138                bool       IsInput(int name);
    138139                /*}}}*/
    139140
  • issm/trunk-jpl/src/c/classes/Vertex.cpp

    r15104 r15375  
    124124int    Vertex::Pid(void){ return pid; }
    125125/*}}}*/
    126 /*FUNCTION Vertex::UpdateVertexPosition {{{*/
     126/*FUNCTION Vertex::UpdatePosition {{{*/
    127127void  Vertex::UpdatePosition(Vector<IssmDouble>* vz,Parameters* parameters,IssmDouble* thickness,IssmDouble* bed){
    128128
  • issm/trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.cpp

    r14999 r15375  
    1818        for(i=0;i<materials->Size();i++){
    1919                Material* material=(Material*)materials->GetObjectByOffset(i);
    20                 //material->InputDuplicate(original_enum,new_enum);
     20                material->InputDuplicate(original_enum,new_enum);
    2121        }
    2222
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp

    r15000 r15375  
    1717        int numberofvertices;
    1818        bool control_analysis;
     19        bool dakota_analysis;
    1920
    2021        /*DataSets: */
     
    2829        iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
    2930        iomodel->Constant(&control_analysis,InversionIscontrolEnum);
     31        iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
    3032        iomodel->Constant(&materials_type,MaterialsEnum);
    3133
     
    6466                        iomodel->FetchData(2,MaterialsRheologyBEnum,MaterialsRheologyNEnum);
    6567                        for (i=0;i<numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matice(i+1,i,iomodel));
     68                        if(dakota_analysis){
     69                                if(dim==2) materials->InputDuplicate(MaterialsRheologyBbarEnum,QmuMaterialsRheologyBEnum);
     70           #ifdef _HAVE_3D_
     71                                else       materials->InputDuplicate(MaterialsRheologyBEnum,QmuMaterialsRheologyBEnum);
     72           #endif
     73                        }
    6674                        break;
    6775                case MatdamageiceEnum:
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp

    r15000 r15375  
    5858                elements->InputDuplicate(ThicknessEnum,QmuThicknessEnum);
    5959                elements->InputDuplicate(SurfaceEnum,QmuSurfaceEnum);
     60                elements->InputDuplicate(BasalforcingsMeltingRateEnum,QmuMeltingEnum);
     61                elements->InputDuplicate(VxEnum,QmuVxEnum);
     62                elements->InputDuplicate(VyEnum,QmuVyEnum);
    6063        }
    6164
     
    6568                iomodel->FetchDataToInput(elements,PressureEnum);
    6669                iomodel->FetchDataToInput(elements,TemperatureEnum);
     70                iomodel->FetchDataToInput(elements,VzEnum);
     71                if(dakota_analysis){
     72                        elements->InputDuplicate(PressureEnum,QmuPressureEnum);
     73                        elements->InputDuplicate(TemperatureEnum,QmuTemperatureEnum);
     74                        elements->InputDuplicate(VzEnum,QmuVzEnum);
     75                }
    6776        }
    6877        if(issmbgradients){
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp

    r15000 r15375  
    5858        if(dakota_analysis){
    5959                elements->InputDuplicate(TemperatureEnum,QmuTemperatureEnum);
     60                elements->InputDuplicate(PressureEnum,QmuPressureEnum);
    6061                elements->InputDuplicate(BasalforcingsMeltingRateEnum,QmuMeltingEnum);
    6162        }
     63
    6264        /*Free data: */
    6365        iomodel->DeleteData(1,MeshElementsEnum);
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r15339 r15375  
    204204        QmuResponsedescriptorsEnum,
    205205        QmuVariabledescriptorsEnum,
     206        QmuMaterialsRheologyBEnum,
    206207        RiftsNumriftsEnum,
    207208        RiftsRiftstructEnum,
     
    431432        QmuSurfaceEnum,
    432433        QmuMeltingEnum,
     434        QmuVxMeshEnum,
     435        QmuVyMeshEnum,
     436        QmuVzMeshEnum,
    433437        AndroidFrictionCoefficientEnum,
    434438        ResetPenaltiesEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r15339 r15375  
    212212                case QmuResponsedescriptorsEnum : return "QmuResponsedescriptors";
    213213                case QmuVariabledescriptorsEnum : return "QmuVariabledescriptors";
     214                case QmuMaterialsRheologyBEnum : return "QmuMaterialsRheologyB";
    214215                case RiftsNumriftsEnum : return "RiftsNumrifts";
    215216                case RiftsRiftstructEnum : return "RiftsRiftstruct";
     
    425426                case QmuSurfaceEnum : return "QmuSurface";
    426427                case QmuMeltingEnum : return "QmuMelting";
     428                case QmuVxMeshEnum : return "QmuVxMesh";
     429                case QmuVyMeshEnum : return "QmuVyMesh";
     430                case QmuVzMeshEnum : return "QmuVzMesh";
    427431                case AndroidFrictionCoefficientEnum : return "AndroidFrictionCoefficient";
    428432                case ResetPenaltiesEnum : return "ResetPenalties";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r15339 r15375  
    215215              else if (strcmp(name,"QmuResponsedescriptors")==0) return QmuResponsedescriptorsEnum;
    216216              else if (strcmp(name,"QmuVariabledescriptors")==0) return QmuVariabledescriptorsEnum;
     217              else if (strcmp(name,"QmuMaterialsRheologyB")==0) return QmuMaterialsRheologyBEnum;
    217218              else if (strcmp(name,"RiftsNumrifts")==0) return RiftsNumriftsEnum;
    218219              else if (strcmp(name,"RiftsRiftstruct")==0) return RiftsRiftstructEnum;
     
    259260              else if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum;
    260261              else if (strcmp(name,"Thickness")==0) return ThicknessEnum;
    261               else if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
    262262         else stage=3;
    263263   }
    264264   if(stage==3){
    265               if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
     265              if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
     266              else if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
    266267              else if (strcmp(name,"TimesteppingCflCoefficient")==0) return TimesteppingCflCoefficientEnum;
    267268              else if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum;
     
    382383              else if (strcmp(name,"RiftfrontType")==0) return RiftfrontTypeEnum;
    383384              else if (strcmp(name,"Segment")==0) return SegmentEnum;
    384               else if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
    385385         else stage=4;
    386386   }
    387387   if(stage==4){
    388               if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum;
     388              if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
     389              else if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum;
    389390              else if (strcmp(name,"SpcStatic")==0) return SpcStaticEnum;
    390391              else if (strcmp(name,"SpcTransient")==0) return SpcTransientEnum;
     
    434435              else if (strcmp(name,"QmuSurface")==0) return QmuSurfaceEnum;
    435436              else if (strcmp(name,"QmuMelting")==0) return QmuMeltingEnum;
     437              else if (strcmp(name,"QmuVxMesh")==0) return QmuVxMeshEnum;
     438              else if (strcmp(name,"QmuVyMesh")==0) return QmuVyMeshEnum;
     439              else if (strcmp(name,"QmuVzMesh")==0) return QmuVzMeshEnum;
    436440              else if (strcmp(name,"AndroidFrictionCoefficient")==0) return AndroidFrictionCoefficientEnum;
    437441              else if (strcmp(name,"ResetPenalties")==0) return ResetPenaltiesEnum;
     
    502506              else if (strcmp(name,"DoubleElementResult")==0) return DoubleElementResultEnum;
    503507              else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
    504               else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
     508         else stage=5;
     509   }
     510   if(stage==5){
     511              if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
    505512              else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
    506513              else if (strcmp(name,"J")==0) return JEnum;
    507514              else if (strcmp(name,"Patch")==0) return PatchEnum;
    508          else stage=5;
    509    }
    510    if(stage==5){
    511               if (strcmp(name,"PatchNodes")==0) return PatchNodesEnum;
     515              else if (strcmp(name,"PatchNodes")==0) return PatchNodesEnum;
    512516              else if (strcmp(name,"PatchVertices")==0) return PatchVerticesEnum;
    513517              else if (strcmp(name,"PentaP1ElementResult")==0) return PentaP1ElementResultEnum;
Note: See TracChangeset for help on using the changeset viewer.