Changeset 17933


Ignore:
Timestamp:
05/05/14 15:27:07 (11 years ago)
Author:
Mathieu Morlighem
Message:

CHG: preparing adjoint for irrotational flow

Location:
issm/trunk-jpl/src
Files:
4 added
12 edited

Legend:

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

    r17926 r17933  
    421421                                        ./cores/adjointstressbalance_core.cpp\
    422422                                        ./cores/adjointbalancethickness_core.cpp\
     423                                        ./cores/adjointbalancethickness2_core.cpp\
    423424                                        ./cores/AdjointCorePointerFromSolutionEnum.cpp\
    424425                                        ./solutionsequences/solutionsequence_adjoint_linear.cpp\
     
    514515if ADJOINTBALANCETHICKNESS
    515516issm_sources += ./analyses/AdjointBalancethicknessAnalysis.cpp
     517endif
     518if ADJOINTBALANCETHICKNESS2
     519issm_sources += ./analyses/AdjointBalancethickness2Analysis.cpp
    516520endif
    517521if ADJOINTHORIZ
  • issm/trunk-jpl/src/c/analyses/EnumToAnalysis.cpp

    r17831 r17933  
    1616                #ifdef _HAVE_ADJOINTBALANCETHICKNESS_
    1717                case AdjointBalancethicknessAnalysisEnum : return new AdjointBalancethicknessAnalysis();
     18                #endif
     19                #ifdef _HAVE_ADJOINTBALANCETHICKNESS2_
     20                case AdjointBalancethickness2AnalysisEnum : return new AdjointBalancethickness2Analysis();
    1821                #endif
    1922                #ifdef _HAVE_ADJOINTHORIZ_
  • issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp

    r17886 r17933  
    3838                if(iomodel->my_elements[i]){
    3939                        Element* element=(Element*)elements->GetObjectByOffset(counter);
    40                         element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
     40                        element->Update(i,iomodel,analysis_counter,analysis_type,P2Enum);
    4141                        counter++;
    4242                }
     
    6060        }
    6161        iomodel->FetchDataToInput(elements,FlowequationElementEquationEnum);
     62        iomodel->FetchDataToInput(elements,MeshVertexonbaseEnum);
     63        iomodel->FetchDataToInput(elements,MeshVertexonsurfaceEnum);
    6264        iomodel->FetchDataToInput(elements,MaterialsRheologyBEnum);
    6365        iomodel->FetchDataToInput(elements,MaterialsRheologyNEnum);
     
    8688
    8789        if(iomodel->domaintype==Domain3DEnum) iomodel->FetchData(2,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum);
    88         ::CreateNodes(nodes,iomodel,ThermalAnalysisEnum,P1Enum);
     90        ::CreateNodes(nodes,iomodel,ThermalAnalysisEnum,P2Enum);
    8991        iomodel->DeleteData(2,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum);
    9092}/*}}}*/
     
    9395        /*Only 3d mesh supported*/
    9496        if(iomodel->domaintype==Domain3DEnum){
    95                 IoModelToConstraintsx(constraints,iomodel,ThermalSpctemperatureEnum,ThermalAnalysisEnum,P1Enum);
     97                IoModelToConstraintsx(constraints,iomodel,ThermalSpctemperatureEnum,ThermalAnalysisEnum,P2Enum);
    9698        }
    9799
  • issm/trunk-jpl/src/c/analyses/analyses.h

    r17831 r17933  
    99
    1010#include "./AdjointBalancethicknessAnalysis.h"
     11#include "./AdjointBalancethickness2Analysis.h"
    1112#include "./AdjointHorizAnalysis.h"
    1213#include "./BalancethicknessAnalysis.h"
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r17926 r17933  
    10191019        if (control_analysis && iomodel->Data(InversionControlParametersEnum)){
    10201020                for(i=0;i<num_control_type;i++){
    1021                         switch(reCast<int>(iomodel->Data(InversionControlParametersEnum)[i])){
     1021                        int control = reCast<int>(iomodel->Data(InversionControlParametersEnum)[i]);
     1022                        switch(control){
     1023                                /*yts conversion*/
    10221024                                case BalancethicknessThickeningRateEnum:
    1023                                         if (iomodel->Data(BalancethicknessThickeningRateEnum)){
    1024                                                 for(j=0;j<3;j++)nodeinputs[j]=iomodel->Data(BalancethicknessThickeningRateEnum)[tria_vertex_ids[j]-1];
     1025                                case VxEnum:
     1026                                case VyEnum:
     1027                                        if(iomodel->Data(control)){
     1028                                                for(j=0;j<3;j++)nodeinputs[j]=iomodel->Data(control)[tria_vertex_ids[j]-1];
    10251029                                                for(j=0;j<3;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
    10261030                                                for(j=0;j<3;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
    1027                                                 this->inputs->AddInput(new ControlInput(BalancethicknessThickeningRateEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
     1031                                                this->inputs->AddInput(new ControlInput(control,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
    10281032                                        }
    10291033                                        break;
    1030                                 case VxEnum:
    1031                                         if (iomodel->Data(VxEnum)){
    1032                                                 for(j=0;j<3;j++)nodeinputs[j]=iomodel->Data(VxEnum)[tria_vertex_ids[j]-1];
    1033                                                 for(j=0;j<3;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
    1034                                                 for(j=0;j<3;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
    1035                                                 this->inputs->AddInput(new ControlInput(VxEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
     1034
     1035                                /*No yts conversion*/
     1036                                case ThicknessEnum:
     1037                                case FrictionCoefficientEnum:
     1038                                case BalancethicknessNuxEnum:
     1039                                case BalancethicknessNuyEnum:
     1040                                        if(iomodel->Data(control)){
     1041                                                for(j=0;j<3;j++)nodeinputs[j]=iomodel->Data(control)[tria_vertex_ids[j]-1];
     1042                                                for(j=0;j<3;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i];
     1043                                                for(j=0;j<3;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i];
     1044                                                this->inputs->AddInput(new ControlInput(control,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
    10361045                                        }
    10371046                                        break;
    1038                                 case VyEnum:
    1039                                         if (iomodel->Data(VyEnum)){
    1040                                                 for(j=0;j<3;j++)nodeinputs[j]=iomodel->Data(VyEnum)[tria_vertex_ids[j]-1];
    1041                                                 for(j=0;j<3;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
    1042                                                 for(j=0;j<3;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
    1043                                                 this->inputs->AddInput(new ControlInput(VyEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
    1044                                         }
    1045                                         break;
    1046                                 case ThicknessEnum:
    1047                                         if (iomodel->Data(ThicknessEnum)){
    1048                                                 for(j=0;j<3;j++)nodeinputs[j]=iomodel->Data(ThicknessEnum)[tria_vertex_ids[j]-1];
    1049                                                 for(j=0;j<3;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i];
    1050                                                 for(j=0;j<3;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i];
    1051                                                 this->inputs->AddInput(new ControlInput(ThicknessEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
    1052                                         }
    1053                                         break;
    1054                                 case FrictionCoefficientEnum:
    1055                                         if (iomodel->Data(FrictionCoefficientEnum)){
    1056                                                 for(j=0;j<3;j++)nodeinputs[j]=iomodel->Data(FrictionCoefficientEnum)[tria_vertex_ids[j]-1];
    1057                                                 for(j=0;j<3;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i];
    1058                                                 for(j=0;j<3;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i];
    1059                                                 this->inputs->AddInput(new ControlInput(FrictionCoefficientEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
    1060                                         }
    1061                                         break;
     1047
     1048                                /*Special cases (depth averaged quantities)*/
    10621049                                case MaterialsRheologyBbarEnum:
    10631050                                        if(iomodel->Data(MaterialsRheologyBEnum)){
     
    10771064                                        break;
    10781065                                default:
    1079                                         _error_("Control " << EnumToStringx(reCast<int,IssmDouble>(iomodel->Data(InversionControlParametersEnum)[i])) << " not implemented yet");
     1066                                        _error_("Control " << EnumToStringx(control) << " not implemented yet");
    10801067                        }
    10811068                }
  • issm/trunk-jpl/src/c/cores/AdjointCorePointerFromSolutionEnum.cpp

    r16518 r17933  
    3232                        adjointcore=&adjointbalancethickness_core;
    3333                        break;
     34                case Balancethickness2SolutionEnum:
     35                        adjointcore=&adjointbalancethickness2_core;
     36                        break;
    3437                case BalancethicknessSoftSolutionEnum:
    3538                        adjointcore=&dummy_core;
  • issm/trunk-jpl/src/c/cores/cores.h

    r17907 r17933  
    1818void adjointstressbalance_core(FemModel* femmodel);
    1919void adjointbalancethickness_core(FemModel* femmodel);
     20void adjointbalancethickness2_core(FemModel* femmodel);
    2021void gradient_core(FemModel* femmodel,int n=0,bool orthogonalize=false);
    2122void stressbalance_core(FemModel* femmodel);
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp

    r17275 r17933  
    1616        Element  *element = NULL;
    1717        Material *material = NULL;
    18         int    num_control_type;
    19         bool   control_analysis;
     18        int       num_control_type;
     19        bool      control_analysis;
    2020
    2121        /*Fetch parameters: */
     
    3232
    3333        iomodel->FetchData(5,InversionControlParametersEnum,InversionCostFunctionsEnum,InversionCostFunctionsCoefficientsEnum,InversionMinParametersEnum,InversionMaxParametersEnum);
     34
    3435        for(i=0;i<num_control_type;i++){
    35                 switch(reCast<int,IssmDouble>(iomodel->Data(InversionControlParametersEnum)[i])){
    36                         case BalancethicknessThickeningRateEnum: iomodel->FetchData(1,BalancethicknessThickeningRateEnum); break;
    37                         case VxEnum:   iomodel->FetchData(1,VxEnum); break;
    38                         case VyEnum:   iomodel->FetchData(1,VyEnum); break;
    39                         case ThicknessEnum:             iomodel->FetchData(1,ThicknessEnum); break;
    40                         case FrictionCoefficientEnum:   iomodel->FetchData(1,FrictionCoefficientEnum); break;
    41                         case MaterialsRheologyBbarEnum: iomodel->FetchData(1,MaterialsRheologyBEnum); break;
    42                         case DamageDbarEnum: iomodel->FetchData(1,DamageDEnum); break;
    43                         default: _error_("Control " << EnumToStringx(reCast<int,IssmDouble>(iomodel->Data(InversionControlParametersEnum)[i])) << " not implemented yet");
     36                int control = reCast<int,IssmDouble>(iomodel->Data(InversionControlParametersEnum)[i]);
     37                switch(control){
     38                        /*List of supported controls*/
     39                        case BalancethicknessThickeningRateEnum:
     40                        case VxEnum:
     41                        case VyEnum:
     42                        case ThicknessEnum:
     43                        case FrictionCoefficientEnum:
     44                        case MaterialsRheologyBbarEnum:
     45                        case DamageDbarEnum:
     46                        case BalancethicknessNuxEnum:
     47                        case BalancethicknessNuyEnum:
     48                                iomodel->FetchData(1,control);
     49                                break;
     50                        default:
     51                                _error_("Control " << EnumToStringx(control) << " not implemented yet");
    4452                }
    4553        }
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r17918 r17933  
    329329        ConfigurationTypeEnum,
    330330        AdjointBalancethicknessAnalysisEnum,
     331        AdjointBalancethickness2AnalysisEnum,
    331332        AdjointHorizAnalysisEnum,
    332333        AnalysisCounterEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r17918 r17933  
    332332                case ConfigurationTypeEnum : return "ConfigurationType";
    333333                case AdjointBalancethicknessAnalysisEnum : return "AdjointBalancethicknessAnalysis";
     334                case AdjointBalancethickness2AnalysisEnum : return "AdjointBalancethickness2Analysis";
    334335                case AdjointHorizAnalysisEnum : return "AdjointHorizAnalysis";
    335336                case AnalysisCounterEnum : return "AnalysisCounter";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r17918 r17933  
    338338              else if (strcmp(name,"ConfigurationType")==0) return ConfigurationTypeEnum;
    339339              else if (strcmp(name,"AdjointBalancethicknessAnalysis")==0) return AdjointBalancethicknessAnalysisEnum;
     340              else if (strcmp(name,"AdjointBalancethickness2Analysis")==0) return AdjointBalancethickness2AnalysisEnum;
    340341              else if (strcmp(name,"AdjointHorizAnalysis")==0) return AdjointHorizAnalysisEnum;
    341342              else if (strcmp(name,"AnalysisCounter")==0) return AnalysisCounterEnum;
     
    382383              else if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum;
    383384              else if (strcmp(name,"GiaSolution")==0) return GiaSolutionEnum;
    384               else if (strcmp(name,"GiaAnalysis")==0) return GiaAnalysisEnum;
    385385         else stage=4;
    386386   }
    387387   if(stage==4){
    388               if (strcmp(name,"MeshdeformationSolution")==0) return MeshdeformationSolutionEnum;
     388              if (strcmp(name,"GiaAnalysis")==0) return GiaAnalysisEnum;
     389              else if (strcmp(name,"MeshdeformationSolution")==0) return MeshdeformationSolutionEnum;
    389390              else if (strcmp(name,"MeshdeformationAnalysis")==0) return MeshdeformationAnalysisEnum;
    390391              else if (strcmp(name,"LevelsetAnalysis")==0) return LevelsetAnalysisEnum;
     
    505506              else if (strcmp(name,"QmuVyMesh")==0) return QmuVyMeshEnum;
    506507              else if (strcmp(name,"QmuVzMesh")==0) return QmuVzMeshEnum;
    507               else if (strcmp(name,"AndroidFrictionCoefficient")==0) return AndroidFrictionCoefficientEnum;
    508508         else stage=5;
    509509   }
    510510   if(stage==5){
    511               if (strcmp(name,"ResetPenalties")==0) return ResetPenaltiesEnum;
     511              if (strcmp(name,"AndroidFrictionCoefficient")==0) return AndroidFrictionCoefficientEnum;
     512              else if (strcmp(name,"ResetPenalties")==0) return ResetPenaltiesEnum;
    512513              else if (strcmp(name,"SegmentOnIceShelf")==0) return SegmentOnIceShelfEnum;
    513514              else if (strcmp(name,"SurfaceAbsVelMisfit")==0) return SurfaceAbsVelMisfitEnum;
     
    628629              else if (strcmp(name,"MinVy")==0) return MinVyEnum;
    629630              else if (strcmp(name,"MaxVy")==0) return MaxVyEnum;
    630               else if (strcmp(name,"MaxAbsVy")==0) return MaxAbsVyEnum;
    631631         else stage=6;
    632632   }
    633633   if(stage==6){
    634               if (strcmp(name,"MinVz")==0) return MinVzEnum;
     634              if (strcmp(name,"MaxAbsVy")==0) return MaxAbsVyEnum;
     635              else if (strcmp(name,"MinVz")==0) return MinVzEnum;
    635636              else if (strcmp(name,"MaxVz")==0) return MaxVzEnum;
    636637              else if (strcmp(name,"MaxAbsVz")==0) return MaxAbsVzEnum;
  • issm/trunk-jpl/src/m/enum/EnumDefinitions.py

    r17918 r17933  
    324324def ConfigurationTypeEnum(): return StringToEnum("ConfigurationType")[0]
    325325def AdjointBalancethicknessAnalysisEnum(): return StringToEnum("AdjointBalancethicknessAnalysis")[0]
     326def AdjointBalancethickness2AnalysisEnum(): return StringToEnum("AdjointBalancethickness2Analysis")[0]
    326327def AdjointHorizAnalysisEnum(): return StringToEnum("AdjointHorizAnalysis")[0]
    327328def AnalysisCounterEnum(): return StringToEnum("AnalysisCounter")[0]
Note: See TracChangeset for help on using the changeset viewer.