Changeset 16371


Ignore:
Timestamp:
10/10/13 15:58:56 (11 years ago)
Author:
Mathieu Morlighem
Message:

NEW: preparing mesh deformation module

Location:
issm/trunk-jpl
Files:
8 added
10 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/m4/issm_options.m4

    r16226 r16371  
    17661766        AC_MSG_RESULT($HAVE_SLOPE)
    17671767        dnl }}}
     1768        dnl with-meshdeformation{{{
     1769                AC_ARG_WITH([meshdeformation],
     1770                                        AS_HELP_STRING([--with-meshdeformation = YES], [compile with meshdeformation capabilities (default is yes)]),
     1771                                        [MESHDEFORMATION=$withval],[MESHDEFORMATION=yes])
     1772                  AC_MSG_CHECKING(for meshdeformation capability compilation)
     1773
     1774                  if test "x$MESHDEFORMATION" = "xyes"; then
     1775
     1776                        dnl defaults
     1777                          HAVE_MESHDEFORMATION=yes
     1778
     1779                          AC_DEFINE([_HAVE_MESHDEFORMATION_],[1],[with meshdeformation capability])
     1780                  else
     1781                                HAVE_MESHDEFORMATION=no
     1782                  fi
     1783          AM_CONDITIONAL([MESHDEFORMATION], [test x$HAVE_MESHDEFORMATION = xyes])
     1784          AC_MSG_RESULT($HAVE_MESHDEFORMATION)
     1785          dnl }}}
    17681786        dnl with-groundingline{{{
    17691787        AC_ARG_WITH([groundingline],
  • issm/trunk-jpl/src/c/Makefile.am

    r16343 r16371  
    528528                                          ./analyses/bedslope_core.cpp
    529529#}}}
     530#MeshDeformation sources  {{{
     531meshdeformation_sources =  ./modules/ModelProcessorx/MeshDeformation/UpdateElementsMeshDeformation.cpp\
     532                                          ./modules/ModelProcessorx/MeshDeformation/CreateNodesMeshDeformation.cpp \
     533                                          ./modules/ModelProcessorx/MeshDeformation/CreateConstraintsMeshDeformation.cpp\
     534                                          ./modules/ModelProcessorx/MeshDeformation/CreateLoadsMeshDeformation.cpp\
     535                                          ./analyses/meshdeformation_core.cpp
     536#}}}
    530537#Gia sources  {{{
    531538gia_sources =  ./analyses/gia_core.cpp\
     
    934941endif
    935942
     943if MESHDEFORMATION
     944issm_sources  +=  $(meshdeformation_sources)
     945endif
     946
    936947if GROUNDINGLINE
    937948issm_sources +=  $(groundingline_sources)
  • issm/trunk-jpl/src/c/analyses/analyses.h

    r16181 r16371  
    2626void surfaceslope_core(FemModel* femmodel);
    2727void bedslope_core(FemModel* femmodel);
     28void meshdeformation_core(FemModel* femmodel);
    2829void control_core(FemModel* femmodel);
    2930void controltao_core(FemModel* femmodel);
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r16365 r16371  
    32093209        int         i,j;
    32103210        int         analysis_type,approximation;
    3211         IssmDouble  alpha2,Jdet2d;
     3211        int         indices[2];
     3212        IssmDouble  alpha2,Jdet;
    32123213        IssmDouble  FSreconditioning,viscosity;
    32133214        IssmDouble  epsilon[3]; /* epsilon=[exx,eyy,exy];*/
     
    32153216        IssmDouble  xyz_list_seg[NUMVERTICES1D][3];
    32163217        Friction   *friction = NULL;
    3217         GaussTria  *gauss    = NULL;
    32183218
    32193219        /*Initialize Element matrix and return if necessary*/
    32203220        if(IsFloating() || !HasEdgeOnBed()) return NULL;
    32213221
    3222         _error_("STOP");
     3222        /*Fetch number of nodes and dof for this finite element*/
     3223        int vnumnodes = this->NumberofNodesVelocity();
     3224        int pnumnodes = this->NumberofNodesPressure();
     3225        int  numdof   = vnumnodes*NDOF2 + pnumnodes*NDOF1;
     3226
     3227        /*Prepare coordinate system list*/
     3228        int* cs_list = xNew<int>(vnumnodes+pnumnodes);
     3229        for(i=0;i<vnumnodes;i++) cs_list[i]           = XYEnum;
     3230        for(i=0;i<pnumnodes;i++) cs_list[vnumnodes+i] = PressureEnum;
     3231
     3232        /*Initialize Element matrix and vectors*/
     3233        ElementMatrix* Ke        = new ElementMatrix(nodes,vnumnodes+pnumnodes,this->parameters,FSvelocityEnum);
     3234        IssmDouble*    BFriction = xNew<IssmDouble>(2*numdof);
     3235        IssmDouble*    D         = xNewZeroInit<IssmDouble>(2*2);
     3236
     3237        /*Retrieve all inputs and parameters*/
     3238        GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
     3239        parameters->FindParam(&analysis_type,AnalysisTypeEnum);
     3240        parameters->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
     3241        Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
     3242        Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
     3243
     3244        /*Get vertex indices that lie on bed*/
     3245        this->EdgeOnBedIndices(&indices[0],&indices[1]);
     3246        for(i=0;i<NUMVERTICES1D;i++) for(j=0;j<2;j++) xyz_list_seg[i][j]=xyz_list[indices[i]][j];
     3247
     3248        /*build friction object, used later on: */
     3249        friction=new Friction("1d",inputs,matpar,analysis_type);
     3250
     3251        /* Start looping on the number of gauss 1d (nodes on the bedrock) */
     3252        GaussTria* gauss=new GaussTria(indices[0],indices[1],2);
     3253        for(int ig=gauss->begin();ig<gauss->end();ig++){
     3254
     3255                gauss->GaussPoint(ig);
     3256
     3257                GetSegmentJacobianDeterminant(&Jdet,&xyz_list_seg[0][0],gauss);
     3258
     3259                _error_("STOP");
     3260        }
     3261
     3262        /*DO NOT Transform Coordinate System: this stiffness matrix is already expressed in tangential coordinates*/
     3263        //TransformStiffnessMatrixCoord(Ke,nodes,(vnumnodes+pnumnodes),cs_list);
     3264
     3265        /*Clean up and return*/
     3266        delete gauss;
     3267        delete friction;
     3268        xDelete<IssmDouble>(BFriction);
     3269        xDelete<IssmDouble>(D);
     3270        xDelete<int>(cs_list);
     3271        return Ke;
    32233272}
    32243273/*}}}*/
  • issm/trunk-jpl/src/c/classes/Elements/TriaRef.cpp

    r16364 r16371  
    5757         *       Bi=[ dN/dx ]
    5858         *          [ dN/dy ]
    59          * where N is the interpolation function for node i.
     59         * where N is the finiteelement function for node i.
    6060         *
    6161         * We assume B has been allocated already, of size: 3x(NDOF2*numnodes)
     
    8787         *          [   0           dN/dy  ]
    8888         *          [ 1/2*dN/dy  1/2*dN/dx ]
    89          * where N is the interpolation function for node i.
     89         * where N is the finiteelement function for node i.
    9090         *
    9191         * We assume B has been allocated already, of size: 3x(NDOF2*numnodes)
     
    122122         *          [       0       dN/dy   ]
    123123         *          [  1/2*dN/dy  1/2*dN/dx ]
    124          * where N is the interpolation function for node i.
     124         * where N is the finiteelement function for node i.
    125125         *
    126126         * We assume B has been allocated already, of size: 3x(NDOF2*numnodes)
     
    215215         *                                      [ phi_p ]
    216216         *                                      [  0    ]
    217          *      where phi is the interpolation function for node i.
     217         *      where phi is the finiteelement function for node i.
    218218         *      Same thing for Bb except the last column that does not exist.
    219219         */
     
    271271         *                                      [  0  ]
    272272         *                                      [ phi ]
    273          *      where phi is the interpolation function for node i.
     273         *      where phi is the finiteelement function for node i.
    274274         */
    275275
     
    317317         *       Bi=[ N ]
    318318         *          [ N ]
    319          * where N is the interpolation function for node i.
     319         * where N is the finiteelement function for node i.
    320320         *
    321321         * We assume B_prog has been allocated already, of size: 2x(NDOF1*numnodes)
     
    348348         *                [   dN/dx  2*dN/dy ]
    349349         *                [   dN/dy    dN/dx ]
    350          * where hNis the interpolation function for node i.
     350         * where hNis the finiteelement function for node i.
    351351         *
    352352         * We assume B' has been allocated already, of size: 3x(NDOF2*numnodes)
     
    383383         *               [  dN/dy  dN/dx ]
    384384         N               [  dN/dx  dN/dy ]
    385          * where N is the interpolation function for node i.
     385         * where N is the finiteelement function for node i.
    386386         *
    387387         * We assume Bprime has been allocated already, of size: 3x(NDOF2*numnodes)
     
    418418         *       Bi_prime=[ dN/dx ]
    419419         *                [ dN/dy ]
    420          * where N is the interpolation function for node i.
     420         * where N is the finiteelement function for node i.
    421421         *
    422422         * We assume B' has been allocated already, of size: 3x(NDOF2*numnodes)
     
    447447         *                 Bi=[ N   0 ]
    448448         *                    [ 0   N ]
    449          * where N is the interpolation function for node i.
     449         * where N is the finiteelement function for node i.
    450450         *
    451451         * We assume B has been allocated already, of size: 2 x (numdof*numnodes)
     
    542542}
    543543/*}}}*/
    544 /*FUNCTION TriaRef::GetNodalFunctions(IssmDouble* basis,GaussTria* gauss,int interpolation){{{*/
    545 void TriaRef::GetNodalFunctions(IssmDouble* basis,GaussTria* gauss,int interpolation){
     544/*FUNCTION TriaRef::GetNodalFunctions(IssmDouble* basis,GaussTria* gauss,int finiteelement){{{*/
     545void TriaRef::GetNodalFunctions(IssmDouble* basis,GaussTria* gauss,int finiteelement){
    546546        /*This routine returns the values of the nodal functions  at the gaussian point.*/
    547547
    548548        _assert_(basis);
    549549
    550         switch(interpolation){
     550        switch(finiteelement){
    551551                case P1Enum: case P1DGEnum:
    552552                        basis[0]=gauss->coord1;
     
    687687}
    688688/*}}}*/
    689 /*FUNCTION TriaRef::GetNodalFunctionsDerivatives{{{*/
     689/*FUNCTION TriaRef::GetNodalFunctionsDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list, GaussTria* gauss){{{*/
    690690void TriaRef::GetNodalFunctionsDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list, GaussTria* gauss){
     691
     692        GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss,this->element_type);
     693
     694}
     695/*}}}*/
     696/*FUNCTION TriaRef::GetNodalFunctionsDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list, GaussTria* gauss,int finiteelement){{{*/
     697void TriaRef::GetNodalFunctionsDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list, GaussTria* gauss,int finiteelement){
    691698
    692699        /*This routine returns the values of the nodal functions derivatives  (with respect to the
     
    695702
    696703        /*Fetch number of nodes for this finite element*/
    697         int numnodes = this->NumberofNodes();
     704        int numnodes = this->NumberofNodes(finiteelement);
    698705
    699706        /*Get nodal functions derivatives in reference triangle*/
    700707        IssmDouble* dbasis_ref=xNew<IssmDouble>(2*numnodes);
    701         GetNodalFunctionsDerivativesReference(dbasis_ref,gauss);
     708        GetNodalFunctionsDerivativesReference(dbasis_ref,gauss,finiteelement);
    702709
    703710        /*Get Jacobian invert: */
     
    784791}
    785792/*}}}*/
    786 /*FUNCTION TriaRef::GetNodalFunctionsDerivativesReference{{{*/
     793/*FUNCTION TriaRef::GetNodalFunctionsDerivativesReference(IssmDouble* dbasis,GaussTria* gauss){{{*/
    787794void TriaRef::GetNodalFunctionsDerivativesReference(IssmDouble* dbasis,GaussTria* gauss){
    788795        /*This routine returns the values of the nodal functions derivatives  (with respect to the
    789796         * natural coordinate system) at the gaussian point. */
    790797
     798        GetNodalFunctionsDerivativesReference(dbasis,gauss,this->element_type);
     799
     800}
     801/*}}}*/
     802/*FUNCTION TriaRef::GetNodalFunctionsDerivativesReference(IssmDouble* dbasis,GaussTria* gauss,int finiteelement){{{*/
     803void TriaRef::GetNodalFunctionsDerivativesReference(IssmDouble* dbasis,GaussTria* gauss,int finiteelement){
     804        /*This routine returns the values of the nodal functions derivatives  (with respect to the
     805         * natural coordinate system) at the gaussian point. */
     806
    791807        _assert_(dbasis && gauss);
    792808
    793         switch(this->element_type){
     809        switch(finiteelement){
    794810                case P1Enum: case P1DGEnum:
    795811                        /*Nodal function 1*/
     
    882898}
    883899/*}}}*/
    884 /*FUNCTION TriaRef::GetInputValue(IssmDouble* p, IssmDouble* plist, GaussTria* gauss,int interpolation){{{*/
    885 void TriaRef::GetInputValue(IssmDouble* p, IssmDouble* plist, GaussTria* gauss,int interpolation){
     900/*FUNCTION TriaRef::GetInputValue(IssmDouble* p, IssmDouble* plist, GaussTria* gauss,int finiteelement){{{*/
     901void TriaRef::GetInputValue(IssmDouble* p, IssmDouble* plist, GaussTria* gauss,int finiteelement){
    886902
    887903        /*Output*/
     
    889905
    890906        /*Fetch number of nodes for this finite element*/
    891         int numnodes = this->NumberofNodes(interpolation);
     907        int numnodes = this->NumberofNodes(finiteelement);
    892908
    893909        /*Get nodal functions*/
    894910        IssmDouble* basis=xNew<IssmDouble>(numnodes);
    895         GetNodalFunctions(basis, gauss,interpolation);
     911        GetNodalFunctions(basis, gauss,finiteelement);
    896912
    897913        /*Calculate parameter for this Gauss point*/
     
    909925}
    910926/*}}}*/
    911 /*FUNCTION TriaRef::NumberofNodes(int interpolation){{{*/
    912 int TriaRef::NumberofNodes(int interpolation){
    913 
    914         switch(interpolation){
     927/*FUNCTION TriaRef::NumberofNodes(int finiteelement){{{*/
     928int TriaRef::NumberofNodes(int finiteelement){
     929
     930        switch(finiteelement){
    915931                case P1Enum:                return NUMNODESP1;
    916932                case P1DGEnum:              return NUMNODESP1;
  • issm/trunk-jpl/src/c/classes/Elements/TriaRef.h

    r16364 r16371  
    3838                void GetJacobianInvert(IssmDouble*  Jinv, IssmDouble* xyz_list,GaussTria* gauss);
    3939                void GetNodalFunctions(IssmDouble* basis,GaussTria* gauss);
    40                 void GetNodalFunctions(IssmDouble* basis,GaussTria* gauss,int interpolation);
     40                void GetNodalFunctions(IssmDouble* basis,GaussTria* gauss,int finiteelement);
    4141                void GetNodalFunctionsVelocity(IssmDouble* basis, GaussTria* gauss);
    4242                void GetNodalFunctionsPressure(IssmDouble* basis, GaussTria* gauss);
     
    4545                void GetSegmentBprimeFlux(IssmDouble* Bprime,GaussTria* gauss, int index1,int index2);
    4646                void GetNodalFunctionsDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list, GaussTria* gauss);
     47                void GetNodalFunctionsDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list, GaussTria* gauss,int finiteelement);
    4748                void GetNodalFunctionsDerivativesVelocity(IssmDouble* dbasis,IssmDouble* xyz_list,GaussTria* gauss);
    4849                void GetNodalFunctionsDerivativesPressure(IssmDouble* dbasis,IssmDouble* xyz_list,GaussTria* gauss);
    4950                void GetNodalFunctionsDerivativesReference(IssmDouble* dbasis,GaussTria* gauss);
     51                void GetNodalFunctionsDerivativesReference(IssmDouble* dbasis,GaussTria* gauss,int finiteelement);
    5052                void GetInputValue(IssmDouble* pp, IssmDouble* plist, GaussTria* gauss);
    51                 void GetInputValue(IssmDouble* pp, IssmDouble* plist, GaussTria* gauss,int interpolation);
     53                void GetInputValue(IssmDouble* pp, IssmDouble* plist, GaussTria* gauss,int finiteelement);
    5254                void GetInputDerivativeValue(IssmDouble* pp, IssmDouble* plist,IssmDouble* xyz_list, GaussTria* gauss);
    5355
    5456                int  NumberofNodes(void);
    55                 int  NumberofNodes(int interpolation);
     57                int  NumberofNodes(int finiteelement);
    5658                int  NumberofNodesVelocity(void);
    5759                int  NumberofNodesPressure(void);
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r16343 r16371  
    332332        GiaSolutionEnum,
    333333        GiaAnalysisEnum,
     334        MeshdeformationSolutionEnum,
     335        MeshdeformationAnalysisEnum,
    334336        /*}}}*/
    335337        /*Approximations {{{*/
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r16343 r16371  
    338338                case GiaSolutionEnum : return "GiaSolution";
    339339                case GiaAnalysisEnum : return "GiaAnalysis";
     340                case MeshdeformationSolutionEnum : return "MeshdeformationSolution";
     341                case MeshdeformationAnalysisEnum : return "MeshdeformationAnalysis";
    340342                case ApproximationEnum : return "Approximation";
    341343                case NoneApproximationEnum : return "NoneApproximation";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r16367 r16371  
    344344              else if (strcmp(name,"GiaSolution")==0) return GiaSolutionEnum;
    345345              else if (strcmp(name,"GiaAnalysis")==0) return GiaAnalysisEnum;
     346              else if (strcmp(name,"MeshdeformationSolution")==0) return MeshdeformationSolutionEnum;
     347              else if (strcmp(name,"MeshdeformationAnalysis")==0) return MeshdeformationAnalysisEnum;
    346348              else if (strcmp(name,"Approximation")==0) return ApproximationEnum;
    347349              else if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum;
     
    381383              else if (strcmp(name,"ExternalResult")==0) return ExternalResultEnum;
    382384              else if (strcmp(name,"FileParam")==0) return FileParamEnum;
    383               else if (strcmp(name,"Input")==0) return InputEnum;
    384               else if (strcmp(name,"IntInput")==0) return IntInputEnum;
    385385         else stage=4;
    386386   }
    387387   if(stage==4){
    388               if (strcmp(name,"IntParam")==0) return IntParamEnum;
     388              if (strcmp(name,"Input")==0) return InputEnum;
     389              else if (strcmp(name,"IntInput")==0) return IntInputEnum;
     390              else if (strcmp(name,"IntParam")==0) return IntParamEnum;
    389391              else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
    390392              else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
     
    504506              else if (strcmp(name,"StressTensor")==0) return StressTensorEnum;
    505507              else if (strcmp(name,"StressTensorxx")==0) return StressTensorxxEnum;
    506               else if (strcmp(name,"StressTensorxy")==0) return StressTensorxyEnum;
    507               else if (strcmp(name,"StressTensorxz")==0) return StressTensorxzEnum;
    508508         else stage=5;
    509509   }
    510510   if(stage==5){
    511               if (strcmp(name,"StressTensoryy")==0) return StressTensoryyEnum;
     511              if (strcmp(name,"StressTensorxy")==0) return StressTensorxyEnum;
     512              else if (strcmp(name,"StressTensorxz")==0) return StressTensorxzEnum;
     513              else if (strcmp(name,"StressTensoryy")==0) return StressTensoryyEnum;
    512514              else if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum;
    513515              else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
  • issm/trunk-jpl/src/m/enum/EnumDefinitions.py

    r16343 r16371  
    330330def GiaSolutionEnum(): return StringToEnum("GiaSolution")[0]
    331331def GiaAnalysisEnum(): return StringToEnum("GiaAnalysis")[0]
     332def MeshdeformationSolutionEnum(): return StringToEnum("MeshdeformationSolution")[0]
     333def MeshdeformationAnalysisEnum(): return StringToEnum("MeshdeformationAnalysis")[0]
    332334def ApproximationEnum(): return StringToEnum("Approximation")[0]
    333335def NoneApproximationEnum(): return StringToEnum("NoneApproximation")[0]
Note: See TracChangeset for help on using the changeset viewer.