Changeset 17850


Ignore:
Timestamp:
04/25/14 13:51:31 (11 years ago)
Author:
Mathieu Morlighem
Message:

CHG: added new enums for balancethickness2solution

Location:
issm/trunk-jpl/src
Files:
8 added
2 deleted
9 edited

Legend:

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

    r17839 r17850  
    2626        }
    2727
     28        iomodel->FetchDataToInput(elements,BalancethicknessApparentMassbalanceEnum);
     29        iomodel->FetchDataToInput(elements,BalancethicknessNuxEnum);
     30        iomodel->FetchDataToInput(elements,BalancethicknessNuyEnum);
     31        iomodel->FetchDataToInput(elements,BalancethicknessVxObsEnum);
     32        iomodel->FetchDataToInput(elements,BalancethicknessVyObsEnum);
     33        iomodel->FetchDataToInput(elements,BalancethicknessThicknessObsEnum);
     34        iomodel->FetchDataToInput(elements,MeshVertexonboundaryEnum);
    2835        iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
    29         iomodel->FetchDataToInput(elements,VxEnum);
    30         iomodel->FetchDataToInput(elements,VyEnum);
    31         iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
    32         iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
    33         iomodel->FetchDataToInput(elements,BalancethicknessThickeningRateEnum);
    34         iomodel->FetchDataToInput(elements,MeshVertexonboundaryEnum);
    35         iomodel->FetchDataToInput(elements,ThicknessEnum);
    3636}/*}}}*/
    3737void Balancethickness2Analysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
     
    4242void Balancethickness2Analysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
    4343
    44         /*Do not add constraints in DG*/
    45         IoModelToConstraintsx(constraints,iomodel,BalancethicknessSpcthicknessEnum,Balancethickness2AnalysisEnum,P1Enum);
     44
     45        int finiteelement = P1Enum;
     46        IoModelToConstraintsx(constraints,iomodel,BalancethicknessSpcpotentialEnum,Balancethickness2AnalysisEnum,finiteelement);
    4647
    4748}/*}}}*/
     
    7273        /*Initialize Element vector and other vectors*/
    7374        ElementMatrix* Ke  = element->NewElementMatrix();
    74         IssmDouble*    B   = xNew<IssmDouble>(2*numnodes);
    75         IssmDouble     D[2][2];
    7675
    7776        /*Retrieve all inputs and parameters*/
     
    8382                gauss->GaussPoint(ig);
    8483
    85                 element->JacobianDeterminant(&Jdet,xyz_list,gauss);
    86 
    8784                IssmDouble* dbasis=xNew<IssmDouble>(2*numnodes);
    8885                element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss);
     86                element->JacobianDeterminant(&Jdet,xyz_list,gauss);
    8987
    9088                for(int i=0;i<numnodes;i++){
     
    9391                        }
    9492                }
    95                 //GetB(B,element,xyz_list,gauss);
    96 
    97                 //D_scalar=gauss->weight*Jdet;
    98 
    99                 //D[0][0]=D_scalar;
    100                 //D[0][1]=0.;
    101                 //D[1][0]=0.;
    102                 //D[1][1]=D_scalar;
    103                 //TripleMultiply(B,2,numnodes,1,
    104                 //                      &D[0][0],2,2,0,
    105                 //                      B,2,numnodes,0,
    106                 //                      &Ke->values[0],1);
    107         }
    108 
    109         /*Clean up and return*/
    110         xDelete<IssmDouble>(xyz_list);
    111         xDelete<IssmDouble>(B);
     93        }
     94
     95        /*Clean up and return*/
     96        xDelete<IssmDouble>(xyz_list);
    11297        delete gauss;
    11398        return Ke;
     
    128113
    129114        /*Intermediaries */
    130         IssmDouble  dhdt,mb,ms,Jdet;
     115        IssmDouble  adot,Jdet;
    131116        IssmDouble* xyz_list = NULL;
    132117
     
    140125        /*Retrieve all inputs and parameters*/
    141126        element->GetVerticesCoordinates(&xyz_list);
    142         Input* mb_input   = element->GetInput(BasalforcingsMeltingRateEnum);       _assert_(mb_input);
    143         Input* ms_input   = element->GetInput(SurfaceforcingsMassBalanceEnum);     _assert_(ms_input);
    144         Input* dhdt_input = element->GetInput(BalancethicknessThickeningRateEnum); _assert_(dhdt_input);
    145 
    146         /*Initialize mb_correction to 0, do not forget!:*/
     127        Input* adot_input   = element->GetInput(BalancethicknessApparentMassbalanceEnum); _assert_(adot_input);
     128
    147129        /* Start  looping on the number of gaussian points: */
    148130        Gauss* gauss=element->NewGauss(2);
     
    152134                element->JacobianDeterminant(&Jdet,xyz_list,gauss);
    153135                element->NodalFunctions(basis,gauss);
    154 
    155                 ms_input->GetInputValue(&ms,gauss);
    156                 mb_input->GetInputValue(&mb,gauss);
    157                 dhdt_input->GetInputValue(&dhdt,gauss);
    158 
    159                 for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*(ms-mb-dhdt)*basis[i];
     136                adot_input->GetInputValue(&adot,gauss);
     137
     138                for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*adot*basis[i];
    160139        }
    161140
     
    185164
    186165        /*Retrieve all inputs and parameters*/
    187         Input* thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input);
    188         Input* vx_input        = element->GetInput(VxEnum);        _assert_(vx_input);
    189         Input* vy_input        = element->GetInput(VyEnum);        _assert_(vy_input);
     166        Input* thickness_input = element->GetInput(BalancethicknessThicknessObsEnum); _assert_(thickness_input);
     167        Input* vx_input        = element->GetInput(BalancethicknessVxObsEnum);        _assert_(vx_input);
     168        Input* vy_input        = element->GetInput(BalancethicknessVyObsEnum);        _assert_(vy_input);
    190169
    191170        element->GetVerticesCoordinates(&xyz_list);
     
    204183                element->NodalFunctions(basis,gauss);
    205184
    206                 for(int i=0;i<numnodes;i++) pe->values[i] += Jdet*gauss->weight*thickness*(vx*normal[0] + vy*normal[1])*basis[i];
     185                for(int i=0;i<numnodes;i++) pe->values[i] += - Jdet*gauss->weight*thickness*(vx*normal[0] + vy*normal[1])*basis[i];
    207186        }
    208187
     
    214193        return pe;
    215194}/*}}}*/
    216 void Balancethickness2Analysis::GetB(IssmDouble* B,Element* element,IssmDouble* xyz_list,Gauss* gauss){/*{{{*/
    217         /*Compute B'  matrix. B'=[B1' B2' B3'] where Bi' is of size 3*NDOF2.
    218          * For node i, Bi can be expressed in the actual coordinate system
    219          * by:
    220          *       Bi=[ dN/dx ]
    221          *          [ dN/dy ]
    222          * where N is the finiteelement function for node i.
    223          *
    224          * We assume B' has been allocated already, of size: 3x(NDOF2*numnodes)
    225          */
    226 
    227         /*Fetch number of nodes for this finite element*/
    228         int numnodes = element->GetNumberOfNodes();
    229 
    230         /*Get nodal functions derivatives*/
    231         IssmDouble* dbasis=xNew<IssmDouble>(2*numnodes);
    232         element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss);
    233 
    234         /*Build B': */
    235         for(int i=0;i<numnodes;i++){
    236                 B[numnodes*0+i] = dbasis[0*numnodes+i];
    237                 B[numnodes*1+i] = dbasis[1*numnodes+i];
    238         }
    239 
    240         /*Clean-up*/
    241         xDelete<IssmDouble>(dbasis);
    242 
    243 }/*}}}*/
    244195void Balancethickness2Analysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
    245196           _error_("not implemented yet");
     
    248199
    249200        /*Intermediaries */
    250         IssmDouble  vx,vy,vel,h,normdphi,dphi[2];
     201        IssmDouble  vx,vy,vbar,nux,nuy,normdphi,dphi[2];
    251202        IssmDouble* xyz_list = NULL;
    252203        int       * doflist  = NULL;
     
    271222        }
    272223
    273         element->AddInput(EnthalpyEnum,values,element->GetElementType());//FIXME
    274 
    275         /*Retrieve all inputs and parameters*/
    276         element->GetVerticesCoordinates(&xyz_list);
    277         Input* potential_input = element->GetInput(EnthalpyEnum); _assert_(potential_input);
    278         Input* vx_input        = element->GetInput(VxEnum);       _assert_(vx_input);
    279         Input* vy_input        = element->GetInput(VyEnum);       _assert_(vy_input);
     224        element->AddInput(PotentialEnum,values,element->GetElementType());
     225
     226        /*Retrieve all inputs and parameters*/
     227        element->GetVerticesCoordinates(&xyz_list);
     228        Input* potential_input = element->GetInput(PotentialEnum);             _assert_(potential_input);
     229        Input* vx_input        = element->GetInput(BalancethicknessVxObsEnum); _assert_(vx_input);
     230        Input* vy_input        = element->GetInput(BalancethicknessVyObsEnum); _assert_(vy_input);
     231        Input* nux_input       = element->GetInput(BalancethicknessNuxEnum);   _assert_(nux_input);
     232        Input* nuy_input       = element->GetInput(BalancethicknessNuyEnum);   _assert_(nuy_input);
    280233
    281234        Gauss* gauss=element->NewGauss();
     
    285238                vx_input->GetInputValue(&vx,gauss);
    286239                vy_input->GetInputValue(&vy,gauss);
     240                nux_input->GetInputValue(&nux,gauss);
     241                nuy_input->GetInputValue(&nuy,gauss);
    287242                potential_input->GetInputDerivativeValue(&dphi[0],xyz_list,gauss);
    288243
    289                 vel = sqrt(vx*vx + vy*vy) + 1.e-10;
     244                vx = vx*nux; vy = vy*nuy;
     245                vbar = sqrt(vx*vx + vy*vy) + 1.e-10;
    290246                normdphi = sqrt(dphi[0]*dphi[0] + dphi[1]*dphi[1]);
    291247
    292                 thickness_list[iv] = normdphi/vel;
    293                 vx_list[iv]        = 1./thickness_list[iv] * dphi[0];
    294                 vy_list[iv]        = 1./thickness_list[iv] * dphi[1];
     248                thickness_list[iv] = normdphi/vbar;
     249                vx_list[iv]        = -1./thickness_list[iv] * dphi[0];
     250                vy_list[iv]        = -1./thickness_list[iv] * dphi[1];
    295251        }
    296252        element->AddInput(ThicknessEnum,thickness_list,P1Enum);
  • TabularUnified issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.h

    r17831 r17850  
    2828                ElementVector* CreatePVectorVolume(Element* element);
    2929                ElementVector* CreatePVectorBoundary(Element* element);
    30                 void GetB(IssmDouble* B,Element* element,IssmDouble* xyz_list,Gauss* gauss);
    3130                void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
    3231                void InputUpdateFromSolution(IssmDouble* solution,Element* element);
  • TabularUnified issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp

    r17700 r17850  
    1010}/*}}}*/
    1111void BalancethicknessAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
     12        parameters->AddObject(iomodel->CopyConstantObject(BalancethicknessStabilizationEnum));
    1213}/*}}}*/
    1314void BalancethicknessAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
  • TabularUnified issm/trunk-jpl/src/c/cores/balancethickness2_core.cpp

    r17839 r17850  
    2626        if(save_results){
    2727                if(VerboseSolution()) _printf0_("   saving results\n");
    28                 int outputs[4] = {ThicknessEnum,EnthalpyEnum,VxEnum,VyEnum};
     28                int outputs[4] = {ThicknessEnum,PotentialEnum,VxEnum,VyEnum};
    2929                femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],4);
    3030        }
  • TabularUnified issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp

    r17757 r17850  
    5757        parameters->AddObject(iomodel->CopyConstantObject(MeshAverageVertexConnectivityEnum));
    5858        parameters->AddObject(iomodel->CopyConstantObject(ConstantsReferencetemperatureEnum));
    59         parameters->AddObject(iomodel->CopyConstantObject(BalancethicknessStabilizationEnum));
    6059        parameters->AddObject(iomodel->CopyConstantObject(GroundinglineMeltingRateEnum));
    6160        parameters->AddObject(iomodel->CopyConstantObject(SettingsWaitonlockEnum));
     
    219218        /*}}}*/
    220219
    221        
    222220        /*Before returning, create parameters in case we are running Qmu or control types runs: */
    223221        CreateParametersControl(parameters,iomodel,solution_type);
  • TabularUnified issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r17839 r17850  
    288288        TransientRequestedOutputsEnum,
    289289        PotentialEnum,
     290        BalancethicknessSpcpotentialEnum,
     291        BalancethicknessApparentMassbalanceEnum,
    290292        Balancethickness2MisfitEnum,
    291         NuXEnum,
    292         NuYEnum,
     293        BalancethicknessNuxEnum,
     294        BalancethicknessNuyEnum,
     295        BalancethicknessVxObsEnum,
     296        BalancethicknessVyObsEnum,
     297        BalancethicknessThicknessObsEnum,
    293298        /*}}}*/
    294299        /*Surfaceforcings{{{*/
  • TabularUnified issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r17839 r17850  
    296296                case TransientRequestedOutputsEnum : return "TransientRequestedOutputs";
    297297                case PotentialEnum : return "Potential";
     298                case BalancethicknessSpcpotentialEnum : return "BalancethicknessSpcpotential";
     299                case BalancethicknessApparentMassbalanceEnum : return "BalancethicknessApparentMassbalance";
    298300                case Balancethickness2MisfitEnum : return "Balancethickness2Misfit";
    299                 case NuXEnum : return "NuX";
    300                 case NuYEnum : return "NuY";
     301                case BalancethicknessNuxEnum : return "BalancethicknessNux";
     302                case BalancethicknessNuyEnum : return "BalancethicknessNuy";
     303                case BalancethicknessVxObsEnum : return "BalancethicknessVxObs";
     304                case BalancethicknessVyObsEnum : return "BalancethicknessVyObs";
     305                case BalancethicknessThicknessObsEnum : return "BalancethicknessThicknessObs";
    301306                case SurfaceforcingsEnum : return "Surfaceforcings";
    302307                case SMBEnum : return "SMB";
  • TabularUnified issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r17839 r17850  
    302302              else if (strcmp(name,"TransientRequestedOutputs")==0) return TransientRequestedOutputsEnum;
    303303              else if (strcmp(name,"Potential")==0) return PotentialEnum;
     304              else if (strcmp(name,"BalancethicknessSpcpotential")==0) return BalancethicknessSpcpotentialEnum;
     305              else if (strcmp(name,"BalancethicknessApparentMassbalance")==0) return BalancethicknessApparentMassbalanceEnum;
    304306              else if (strcmp(name,"Balancethickness2Misfit")==0) return Balancethickness2MisfitEnum;
    305               else if (strcmp(name,"NuX")==0) return NuXEnum;
    306               else if (strcmp(name,"NuY")==0) return NuYEnum;
     307              else if (strcmp(name,"BalancethicknessNux")==0) return BalancethicknessNuxEnum;
     308              else if (strcmp(name,"BalancethicknessNuy")==0) return BalancethicknessNuyEnum;
     309              else if (strcmp(name,"BalancethicknessVxObs")==0) return BalancethicknessVxObsEnum;
     310              else if (strcmp(name,"BalancethicknessVyObs")==0) return BalancethicknessVyObsEnum;
     311              else if (strcmp(name,"BalancethicknessThicknessObs")==0) return BalancethicknessThicknessObsEnum;
    307312              else if (strcmp(name,"Surfaceforcings")==0) return SurfaceforcingsEnum;
    308313              else if (strcmp(name,"SMB")==0) return SMBEnum;
     
    378383              else if (strcmp(name,"MeshdeformationSolution")==0) return MeshdeformationSolutionEnum;
    379384              else if (strcmp(name,"MeshdeformationAnalysis")==0) return MeshdeformationAnalysisEnum;
    380               else if (strcmp(name,"LevelsetAnalysis")==0) return LevelsetAnalysisEnum;
     385         else stage=4;
     386   }
     387   if(stage==4){
     388              if (strcmp(name,"LevelsetAnalysis")==0) return LevelsetAnalysisEnum;
    381389              else if (strcmp(name,"ExtrapolationAnalysis")==0) return ExtrapolationAnalysisEnum;
    382390              else if (strcmp(name,"LsfReinitializationAnalysis")==0) return LsfReinitializationAnalysisEnum;
    383391              else if (strcmp(name,"Approximation")==0) return ApproximationEnum;
    384392              else if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum;
    385          else stage=4;
    386    }
    387    if(stage==4){
    388               if (strcmp(name,"SIAApproximation")==0) return SIAApproximationEnum;
     393              else if (strcmp(name,"SIAApproximation")==0) return SIAApproximationEnum;
    389394              else if (strcmp(name,"SSAApproximation")==0) return SSAApproximationEnum;
    390395              else if (strcmp(name,"SSAHOApproximation")==0) return SSAHOApproximationEnum;
     
    501506              else if (strcmp(name,"ResetPenalties")==0) return ResetPenaltiesEnum;
    502507              else if (strcmp(name,"SegmentOnIceShelf")==0) return SegmentOnIceShelfEnum;
    503               else if (strcmp(name,"SurfaceAbsVelMisfit")==0) return SurfaceAbsVelMisfitEnum;
     508         else stage=5;
     509   }
     510   if(stage==5){
     511              if (strcmp(name,"SurfaceAbsVelMisfit")==0) return SurfaceAbsVelMisfitEnum;
    504512              else if (strcmp(name,"SurfaceArea")==0) return SurfaceAreaEnum;
    505513              else if (strcmp(name,"SurfaceAverageVelMisfit")==0) return SurfaceAverageVelMisfitEnum;
    506514              else if (strcmp(name,"SurfaceLogVelMisfit")==0) return SurfaceLogVelMisfitEnum;
    507515              else if (strcmp(name,"SurfaceLogVxVyMisfit")==0) return SurfaceLogVxVyMisfitEnum;
    508          else stage=5;
    509    }
    510    if(stage==5){
    511               if (strcmp(name,"SurfaceRelVelMisfit")==0) return SurfaceRelVelMisfitEnum;
     516              else if (strcmp(name,"SurfaceRelVelMisfit")==0) return SurfaceRelVelMisfitEnum;
    512517              else if (strcmp(name,"SurfaceSlopeX")==0) return SurfaceSlopeXEnum;
    513518              else if (strcmp(name,"SurfaceSlopeY")==0) return SurfaceSlopeYEnum;
     
    624629              else if (strcmp(name,"MinVz")==0) return MinVzEnum;
    625630              else if (strcmp(name,"MaxVz")==0) return MaxVzEnum;
    626               else if (strcmp(name,"MaxAbsVz")==0) return MaxAbsVzEnum;
     631         else stage=6;
     632   }
     633   if(stage==6){
     634              if (strcmp(name,"MaxAbsVz")==0) return MaxAbsVzEnum;
    627635              else if (strcmp(name,"IceVolume")==0) return IceVolumeEnum;
    628636              else if (strcmp(name,"IceVolumeAboveFloatation")==0) return IceVolumeAboveFloatationEnum;
    629637              else if (strcmp(name,"TotalSmb")==0) return TotalSmbEnum;
    630638              else if (strcmp(name,"Absolute")==0) return AbsoluteEnum;
    631          else stage=6;
    632    }
    633    if(stage==6){
    634               if (strcmp(name,"Incremental")==0) return IncrementalEnum;
     639              else if (strcmp(name,"Incremental")==0) return IncrementalEnum;
    635640              else if (strcmp(name,"AugmentedLagrangianR")==0) return AugmentedLagrangianREnum;
    636641              else if (strcmp(name,"AugmentedLagrangianTheta")==0) return AugmentedLagrangianThetaEnum;
  • TabularUnified issm/trunk-jpl/src/m/enum/EnumDefinitions.py

    r17839 r17850  
    288288def TransientRequestedOutputsEnum(): return StringToEnum("TransientRequestedOutputs")[0]
    289289def PotentialEnum(): return StringToEnum("Potential")[0]
     290def BalancethicknessSpcpotentialEnum(): return StringToEnum("BalancethicknessSpcpotential")[0]
     291def BalancethicknessApparentMassbalanceEnum(): return StringToEnum("BalancethicknessApparentMassbalance")[0]
    290292def Balancethickness2MisfitEnum(): return StringToEnum("Balancethickness2Misfit")[0]
    291 def NuXEnum(): return StringToEnum("NuX")[0]
    292 def NuYEnum(): return StringToEnum("NuY")[0]
     293def BalancethicknessNuxEnum(): return StringToEnum("BalancethicknessNux")[0]
     294def BalancethicknessNuyEnum(): return StringToEnum("BalancethicknessNuy")[0]
     295def BalancethicknessVxObsEnum(): return StringToEnum("BalancethicknessVxObs")[0]
     296def BalancethicknessVyObsEnum(): return StringToEnum("BalancethicknessVyObs")[0]
     297def BalancethicknessThicknessObsEnum(): return StringToEnum("BalancethicknessThicknessObs")[0]
    293298def SurfaceforcingsEnum(): return StringToEnum("Surfaceforcings")[0]
    294299def SMBEnum(): return StringToEnum("SMB")[0]
Note: See TracChangeset for help on using the changeset viewer.