Changeset 15621


Ignore:
Timestamp:
07/25/13 14:54:51 (12 years ago)
Author:
Mathieu Morlighem
Message:

CHG: spcvx vy and vy need to be scaled before they are marshalled, removed unit conversion in CreateConstraintsDiagnosticHoriz and preparing HO with
quadratic elements

Location:
issm/trunk-jpl/src
Files:
18 edited

Legend:

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

    r15618 r15621  
    30953095        /*Intermediaries*/
    30963096        int        i;
    3097         int        penta_node_ids[6];
    30983097        int        penta_vertex_ids[6];
    30993098        IssmDouble nodeinputs[6];
    31003099        IssmDouble yts;
    3101         int        stabilization;
    31023100        bool       dakota_analysis;
    31033101        bool       isFS;
    31043102        IssmDouble beta,heatcapacity,referencetemperature,meltingpoint,latentheat;
     3103        int        numnodes;
     3104        int*       penta_node_ids = NULL;
    31053105
    31063106        /*Fetch parameters: */
    31073107        iomodel->Constant(&yts,ConstantsYtsEnum);
    3108         iomodel->Constant(&stabilization,PrognosticStabilizationEnum);
    31093108        iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
    31103109        iomodel->Constant(&isFS,FlowequationIsFSEnum);
     
    31203119        /*}}}*/
    31213120
     3121        /*Recover element type*/
    31223122        this->SetElementType(finiteelement_type,analysis_counter);
    31233123
     
    31263126
    31273127        /*Recover nodes ids needed to initialize the node hook.*/
    3128         for(i=0;i<6;i++){
    3129                 //go recover node ids, needed to initialize the node hook.
    3130                 //WARNING: We assume P1 elements here!!!!!
    3131                 penta_node_ids[i]=iomodel->nodecounter+iomodel->elements[6*index+i]; //ids for vertices are in the elements array from Matlab
     3128        switch(finiteelement_type){
     3129                case P1Enum:
     3130                        numnodes         = 6;
     3131                        penta_node_ids   = xNew<int>(numnodes);
     3132                        penta_node_ids[0]=iomodel->nodecounter+iomodel->elements[6*index+0];
     3133                        penta_node_ids[1]=iomodel->nodecounter+iomodel->elements[6*index+1];
     3134                        penta_node_ids[2]=iomodel->nodecounter+iomodel->elements[6*index+2];
     3135                        penta_node_ids[3]=iomodel->nodecounter+iomodel->elements[6*index+3];
     3136                        penta_node_ids[4]=iomodel->nodecounter+iomodel->elements[6*index+4];
     3137                        penta_node_ids[5]=iomodel->nodecounter+iomodel->elements[6*index+5];
     3138                        break;
     3139                case P2Enum:
     3140                        numnodes         = 15;
     3141                        penta_node_ids   = xNew<int>(numnodes);
     3142                        penta_node_ids[ 0]=iomodel->nodecounter+iomodel->elements[6*index+0];
     3143                        penta_node_ids[ 1]=iomodel->nodecounter+iomodel->elements[6*index+1];
     3144                        penta_node_ids[ 2]=iomodel->nodecounter+iomodel->elements[6*index+2];
     3145                        penta_node_ids[ 3]=iomodel->nodecounter+iomodel->elements[6*index+3];
     3146                        penta_node_ids[ 4]=iomodel->nodecounter+iomodel->elements[6*index+4];
     3147                        penta_node_ids[ 5]=iomodel->nodecounter+iomodel->elements[6*index+5];
     3148                        penta_node_ids[ 6]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+0]+1;
     3149                        penta_node_ids[ 7]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+1]+1;
     3150                        penta_node_ids[ 8]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+2]+1;
     3151                        penta_node_ids[ 9]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+3]+1;
     3152                        penta_node_ids[10]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+4]+1;
     3153                        penta_node_ids[11]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+5]+1;
     3154                        penta_node_ids[12]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+6]+1;
     3155                        penta_node_ids[13]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+7]+1;
     3156                        penta_node_ids[14]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+8]+1;
     3157                        break;
     3158                default:
     3159                        _error_("Finite element "<<EnumToStringx(finiteelement_type)<<" not supported yet");
    31323160        }
    31333161
    31343162        /*hooks: */
    3135         this->SetHookNodes(penta_node_ids,6,analysis_counter); this->nodes=NULL; //set hook to nodes, for this analysis type
     3163        this->SetHookNodes(penta_node_ids,numnodes,analysis_counter); this->nodes=NULL; //set hook to nodes, for this analysis type
     3164        xDelete<int>(penta_node_ids);
    31363165
    31373166        /*Fill with IoModel*/
     
    68436872ElementMatrix* Penta::CreateKMatrixDiagnosticHOViscous(void){
    68446873
    6845         /*Constants*/
    6846         const int    numdof=NDOF2*NUMVERTICES;
    6847 
    68486874        /*Intermediaries */
    6849         int        i,j;
    6850         int        approximation;
    6851         IssmDouble xyz_list[NUMVERTICES][3];
    6852         IssmDouble Jdet;
    6853         IssmDouble viscosity,oldviscosity,newviscosity,viscosity_overshoot; //viscosity
    6854         IssmDouble epsilon[5],oldepsilon[5]; /* epsilon=[exx,eyy,exy,exz,eyz];*/
    6855         IssmDouble D_scalar;
    6856         IssmDouble D[5][5]={0.0};            // material matrix, simple scalar matrix.
    6857         IssmDouble B[5][numdof];
    6858         IssmDouble Bprime[5][numdof];
    6859         Tria*      tria=NULL;
     6875        int         i,j;
     6876        int         approximation;
     6877        IssmDouble  xyz_list[NUMVERTICES][3];
     6878        IssmDouble  Jdet;
     6879        IssmDouble  viscosity,oldviscosity,newviscosity,viscosity_overshoot; //viscosity
     6880        IssmDouble  epsilon[5],oldepsilon[5]; /* epsilon=[exx,eyy,exy,exz,eyz];*/
     6881        IssmDouble  D_scalar;
    68606882        GaussPenta *gauss=NULL;
    68616883
    6862         /*Initialize Element matrix*/
    6863         ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,HOApproximationEnum);
     6884        /*Fetch number of nodes and dof for this finite element*/
     6885        int numnodes = this->NumberofNodes();
     6886        int numdof   = numnodes*NDOF2;
     6887
     6888        /*Initialize Element matrix and vectors*/
     6889        ElementMatrix* Ke     = new ElementMatrix(nodes,numnodes,this->parameters,HOApproximationEnum);
     6890        IssmDouble*    B      = xNew<IssmDouble>(5*numdof);
     6891        IssmDouble*    Bprime = xNew<IssmDouble>(5*numdof);
     6892        IssmDouble*    D      = xNewZeroInit<IssmDouble>(5*5);
    68646893
    68656894        /*Retrieve all inputs and parameters*/
     
    68796908
    68806909                GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
    6881                 GetBHO(&B[0][0], &xyz_list[0][0], gauss);
    6882                 GetBprimeHO(&Bprime[0][0], &xyz_list[0][0], gauss);
     6910                GetBHO(&B[0], &xyz_list[0][0], gauss);
     6911                GetBprimeHO(&Bprime[0], &xyz_list[0][0], gauss);
    68836912
    68846913                this->GetStrainRate3dHO(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
     
    68896918
    68906919                D_scalar=2*newviscosity*gauss->weight*Jdet;
    6891                 for (i=0;i<5;i++) D[i][i]=D_scalar;
    6892 
    6893                 TripleMultiply( &B[0][0],5,numdof,1,
    6894                                         &D[0][0],5,5,0,
    6895                                         &Bprime[0][0],5,numdof,0,
     6920                for (i=0;i<5;i++) D[i*5+i]=D_scalar;
     6921
     6922                TripleMultiply(B,5,numdof,1,
     6923                                        D,5,5,0,
     6924                                        Bprime,5,numdof,0,
    68966925                                        &Ke->values[0],1);
    68976926        }
    68986927
    68996928        /*Transform Coordinate System*/
    6900         TransformStiffnessMatrixCoord(Ke,nodes,NUMVERTICES,XYEnum);
     6929        TransformStiffnessMatrixCoord(Ke,nodes,numnodes,XYEnum);
    69016930
    69026931        /*Clean up and return*/
    69036932        delete gauss;
     6933        xDelete<IssmDouble>(D);
     6934        xDelete<IssmDouble>(Bprime);
     6935        xDelete<IssmDouble>(B);
    69046936        return Ke;
    69056937}
     
    69086940ElementMatrix* Penta::CreateKMatrixDiagnosticHOFriction(void){
    69096941
    6910         /*Constants*/
    6911         const int numdof   = NDOF2*NUMVERTICES;
    6912 
    69136942        /*Intermediaries */
    6914         int       i,j;
    6915         int       analysis_type,migration_style;
    6916         IssmDouble xyz_list[NUMVERTICES][3];
    6917         IssmDouble xyz_list_tria[NUMVERTICES2D][3]={0.0};
    6918         IssmDouble alpha2,Jdet;
    6919         IssmDouble phi=1.0;
    6920         IssmDouble L[2][numdof];
    6921         IssmDouble DL[2][2]={{ 0,0 },{0,0}}; //for basal drag
    6922         IssmDouble DL_scalar;
    6923         Friction  *friction = NULL;
    6924         GaussPenta *gauss=NULL;
     6943        int         i,j;
     6944        int         analysis_type,migration_style;
     6945        IssmDouble  xyz_list[NUMVERTICES][3];
     6946        IssmDouble  xyz_list_tria[NUMVERTICES2D][3]={0.};
     6947        IssmDouble  alpha2,Jdet;
     6948        IssmDouble  phi=1.0;
     6949        IssmDouble  DL_scalar;
     6950        Friction   *friction = NULL;
     6951        GaussPenta *gauss    = NULL;
    69256952
    69266953        /*Initialize Element matrix and return if necessary*/
    69276954        if(IsFloating() || !IsOnBed()) return NULL;
    69286955
    6929         ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,HOApproximationEnum);
     6956        /*Fetch number of nodes and dof for this finite element*/
     6957        int numnodes = this->NumberofNodes();
     6958        int numdof   = numnodes*NDOF2;
     6959
     6960        /*Initialize Element matrix and vectors*/
     6961        ElementMatrix* Ke     = new ElementMatrix(nodes,numnodes,this->parameters,HOApproximationEnum);
     6962        IssmDouble*    B      = xNew<IssmDouble>(2*numdof);
     6963        IssmDouble*    D      = xNewZeroInit<IssmDouble>(2*2);
    69306964
    69316965        /*Retrieve all inputs and parameters*/
     
    69516985                gauss->GaussPoint(ig);
    69526986
    6953                 GetTriaJacobianDeterminant(&Jdet, &xyz_list_tria[0][0],gauss);
    6954                 GetBHOFriction(&L[0][0],gauss);
     6987                GetTriaJacobianDeterminant(&Jdet,&xyz_list_tria[0][0],gauss);
     6988                GetBHOFriction(&B[0],gauss);
    69556989
    69566990                friction->GetAlpha2(&alpha2, gauss,VxEnum,VyEnum,VzEnum);
     
    69586992
    69596993                DL_scalar=alpha2*gauss->weight*Jdet;
    6960                 for (i=0;i<2;i++) DL[i][i]=DL_scalar;
    6961 
    6962                 TripleMultiply( &L[0][0],2,numdof,1,
    6963                                         &DL[0][0],2,2,0,
    6964                                         &L[0][0],2,numdof,0,
     6994                for (i=0;i<2;i++) D[i*2+i]=DL_scalar;
     6995
     6996                TripleMultiply(B,2,numdof,1,
     6997                                        D,2,2,0,
     6998                                        B,2,numdof,0,
    69656999                                        &Ke->values[0],1);
    69667000        }
    69677001
    69687002        /*Transform Coordinate System*/
    6969         TransformStiffnessMatrixCoord(Ke,nodes,NUMVERTICES,XYEnum);
     7003        TransformStiffnessMatrixCoord(Ke,nodes,numnodes,XYEnum);
    69707004
    69717005        /*Clean up and return*/
    69727006        delete gauss;
     7007        xDelete<IssmDouble>(D);
     7008        xDelete<IssmDouble>(B);
    69737009        delete friction;
    69747010        return Ke;
  • issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp

    r15567 r15621  
    4545/*FUNCTION PentaRef::SetElementType{{{*/
    4646void PentaRef::SetElementType(int type,int type_counter){
    47 
    48         _assert_(type==P1Enum || type==P1DGEnum);
    4947
    5048        /*initialize element type*/
     
    143141         * where h is the interpolation function for node i.
    144142         *
    145          * We assume B has been allocated already, of size: 5x(NDOF2*NUMNODESP1)
    146          */
    147 
    148         IssmDouble dbasis[3][NUMNODESP1];
    149 
    150         /*Get dbasis in actual coordinate system: */
    151         GetNodalFunctionsP1Derivatives(&dbasis[0][0],xyz_list, gauss);
     143         * We assume B has been allocated already, of size: 5x(NDOF2*numnodes)
     144         */
     145
     146
     147        /*Fetch number of nodes for this finite element*/
     148        int numnodes = this->NumberofNodes();
     149
     150        /*Get nodal functions derivatives*/
     151        IssmDouble* dbasis=xNew<IssmDouble>(3*numnodes);
     152        GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
    152153
    153154        /*Build B: */
    154         for (int i=0;i<NUMNODESP1;i++){
    155                 B[NDOF2*NUMNODESP1*0+NDOF2*i+0] = dbasis[0][i];
    156                 B[NDOF2*NUMNODESP1*0+NDOF2*i+1] = 0.;
    157 
    158                 B[NDOF2*NUMNODESP1*1+NDOF2*i+0] = 0.;
    159                 B[NDOF2*NUMNODESP1*1+NDOF2*i+1] = dbasis[1][i];
    160 
    161                 B[NDOF2*NUMNODESP1*2+NDOF2*i+0] = .5*dbasis[1][i];
    162                 B[NDOF2*NUMNODESP1*2+NDOF2*i+1] = .5*dbasis[0][i];
    163 
    164                 B[NDOF2*NUMNODESP1*3+NDOF2*i+0] = .5*dbasis[2][i];
    165                 B[NDOF2*NUMNODESP1*3+NDOF2*i+1] = 0.;
    166 
    167                 B[NDOF2*NUMNODESP1*4+NDOF2*i+0] = 0.;
    168                 B[NDOF2*NUMNODESP1*4+NDOF2*i+1] = .5*dbasis[2][i];
    169         }
    170 
     155        for(int i=0;i<numnodes;i++){
     156                B[NDOF2*numnodes*0+NDOF2*i+0] = dbasis[0*numnodes+i];
     157                B[NDOF2*numnodes*0+NDOF2*i+1] = 0.;
     158                B[NDOF2*numnodes*1+NDOF2*i+0] = 0.;
     159                B[NDOF2*numnodes*1+NDOF2*i+1] = dbasis[1*numnodes+i];
     160                B[NDOF2*numnodes*2+NDOF2*i+0] = .5*dbasis[1*numnodes+i];
     161                B[NDOF2*numnodes*2+NDOF2*i+1] = .5*dbasis[0*numnodes+i];
     162                B[NDOF2*numnodes*3+NDOF2*i+0] = .5*dbasis[2*numnodes+i];
     163                B[NDOF2*numnodes*3+NDOF2*i+1] = 0.;
     164                B[NDOF2*numnodes*4+NDOF2*i+0] = 0.;
     165                B[NDOF2*numnodes*4+NDOF2*i+1] = .5*dbasis[2*numnodes+i];
     166        }
     167
     168        /*Clean-up*/
     169        xDelete<IssmDouble>(dbasis);
    171170}
    172171/*}}}*/
    173172/*FUNCTION PentaRef::GetBprimeHO {{{*/
    174 void PentaRef::GetBprimeHO(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss_coord){
     173void PentaRef::GetBprimeHO(IssmDouble* B,IssmDouble* xyz_list,GaussPenta* gauss){
    175174        /*Compute B  prime matrix. B=[B1 B2 B3 B4 B5 B6] where Bi is of size 5*NDOF2.
    176175         * For node i, Bi can be expressed in the actual coordinate system
    177176         * by:
    178177         *       Bi=[ 2*dh/dx     dh/dy   ]
    179          *                [   dh/dx    2*dh/dy  ]
    180          *                [ dh/dy      dh/dx    ]
    181          *                [ dh/dz         0     ]
    182          *                [  0         dh/dz    ]
     178         *          [   dh/dx    2*dh/dy  ]
     179         *          [ dh/dy      dh/dx    ]
     180         *          [ dh/dz         0     ]
     181         *          [  0         dh/dz    ]
    183182         * where h is the interpolation function for node i.
    184183         *
    185          * We assume B has been allocated already, of size: 5x(NDOF2*NUMNODESP1)
    186          */
    187         IssmDouble dbasis[3][NUMNODESP1];
    188 
    189         /*Get dbasis in actual coordinate system: */
    190         GetNodalFunctionsP1Derivatives(&dbasis[0][0],xyz_list, gauss_coord);
     184         * We assume B has been allocated already, of size: 5x(NDOF2*numnodes)
     185         */
     186
     187        /*Fetch number of nodes for this finite element*/
     188        int numnodes = this->NumberofNodes();
     189
     190        /*Get nodal functions derivatives*/
     191        IssmDouble* dbasis=xNew<IssmDouble>(3*numnodes);
     192        GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
    191193
    192194        /*Build BPrime: */
    193         for(int i=0;i<NUMNODESP1;i++){
    194                 B[NDOF2*NUMNODESP1*0+NDOF2*i+0]=2.*dbasis[0][i];
    195                 B[NDOF2*NUMNODESP1*0+NDOF2*i+1]=dbasis[1][i];
    196 
    197                 B[NDOF2*NUMNODESP1*1+NDOF2*i+0]=dbasis[0][i];
    198                 B[NDOF2*NUMNODESP1*1+NDOF2*i+1]=2.*dbasis[1][i];
    199 
    200                 B[NDOF2*NUMNODESP1*2+NDOF2*i+0]=dbasis[1][i];
    201                 B[NDOF2*NUMNODESP1*2+NDOF2*i+1]=dbasis[0][i];
    202 
    203                 B[NDOF2*NUMNODESP1*3+NDOF2*i+0]=dbasis[2][i];
    204                 B[NDOF2*NUMNODESP1*3+NDOF2*i+1]=0.;
    205 
    206                 B[NDOF2*NUMNODESP1*4+NDOF2*i+0]=0.;
    207                 B[NDOF2*NUMNODESP1*4+NDOF2*i+1]=dbasis[2][i];
    208         }
     195        for(int i=0;i<numnodes;i++){
     196                B[NDOF2*numnodes*0+NDOF2*i+0]=2.*dbasis[0*numnodes+i];
     197                B[NDOF2*numnodes*0+NDOF2*i+1]=dbasis[1*numnodes+i];
     198                B[NDOF2*numnodes*1+NDOF2*i+0]=dbasis[0*numnodes+i];
     199                B[NDOF2*numnodes*1+NDOF2*i+1]=2.*dbasis[1*numnodes+i];
     200                B[NDOF2*numnodes*2+NDOF2*i+0]=dbasis[1*numnodes+i];
     201                B[NDOF2*numnodes*2+NDOF2*i+1]=dbasis[0*numnodes+i];
     202                B[NDOF2*numnodes*3+NDOF2*i+0]=dbasis[2*numnodes+i];
     203                B[NDOF2*numnodes*3+NDOF2*i+1]=0.;
     204                B[NDOF2*numnodes*4+NDOF2*i+0]=0.;
     205                B[NDOF2*numnodes*4+NDOF2*i+1]=dbasis[2*numnodes+i];
     206        }
     207
     208        /*Clean-up*/
     209        xDelete<IssmDouble>(dbasis);
    209210}
    210211/*}}}*/
     
    11831184                dbasis[numnodes*2+i]=Jinv[2][0]*dbasis_ref[0*numnodes+i]+Jinv[2][1]*dbasis_ref[1*numnodes+i]+Jinv[2][2]*dbasis_ref[2*numnodes+i];
    11841185        }
     1186
     1187        /*Clean up*/
     1188        xDelete<IssmDouble>(dbasis_ref);
    11851189
    11861190}
     
    16221626        switch(this->element_type){
    16231627                case P1Enum:   return NUMNODESP1;
     1628                case P2Enum:   return NUMNODESP2;
    16241629                case MINIEnum: return NUMNODESP1b;
    16251630                default:       _error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r15618 r15621  
    23202320/*}}}*/
    23212321/*FUNCTION Tria::Update{{{*/
    2322 void Tria::Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finitelement_type){
     2322void Tria::Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finiteelement_type){
    23232323
    23242324        /*Intermediaries*/
     
    23462346
    23472347        /*Recover element type*/
    2348         this->SetElementType(finitelement_type,analysis_counter);
     2348        this->SetElementType(finiteelement_type,analysis_counter);
    23492349
    23502350        /*Recover vertices ids needed to initialize inputs*/
     
    23542354
    23552355        /*Recover nodes ids needed to initialize the node hook.*/
    2356         switch(finitelement_type){
     2356        switch(finiteelement_type){
    23572357                case P1Enum:
    23582358                        numnodes        = 3;
     
    23802380                        break;
    23812381                default:
    2382                         _error_("Finite element "<<EnumToStringx(finitelement_type)<<" not supported yet");
     2382                        _error_("Finite element "<<EnumToStringx(finiteelement_type)<<" not supported yet");
    23832383        }
    23842384
  • issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp

    r15611 r15621  
    88#include "../ModelProcessorx/ModelProcessorx.h"
    99
    10 void IoModelToConstraintsx(Constraints* constraints,IoModel* iomodel,int vector_enum,int analysis_type,int finite_element){
     10void IoModelToConstraintsx(Constraints* constraints,IoModel* iomodel,int vector_enum,int analysis_type,int finite_element,int dof){
    1111
    1212        /*intermediary: */
     
    4949                        if((iomodel->my_vertices[i])){
    5050                                if (!xIsNan<IssmDouble>(spcdata[i])){
    51                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcdata[i],analysis_type));
     51                                        constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,spcdata[i],analysis_type));
    5252                                        count++;
    5353                                }
     
    6161                                        if(!xIsNan<IssmDouble>(spcdata[v1]) && !xIsNan<IssmDouble>(spcdata[v2])){
    6262                                                constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
    63                                                                                 1,(spcdata[v1]+spcdata[v2])/2.,analysis_type));
     63                                                                                dof,(spcdata[v1]+spcdata[v2])/2.,analysis_type));
    6464                                                count++;
    6565                                        }
     
    9090
    9191                                if(spcpresent){
    92                                         constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,N,times,values,analysis_type));
     92                                        constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,N,times,values,analysis_type));
    9393                                        count++;
    9494                                }
     
    108108                                        }
    109109                                        if(spcpresent){
    110                                                 constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,1,
     110                                                constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,dof,
    111111                                                                                N,times,values,analysis_type));
    112112                                                count++;
  • issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.h

    r15484 r15621  
    88
    99/* local prototypes: */
    10 void IoModelToConstraintsx(Constraints* constraints,IoModel* iomodel,int vector_enum,int analysis_type,int finite_element);
     10void IoModelToConstraintsx(Constraints* constraints,IoModel* iomodel,int vector_enum,int analysis_type,int finite_element,int dof=1);
    1111
    1212#endif  /* _IOMODELTOELEMENTINPUTX_H */
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp

    r15611 r15621  
    8282                                if(edgestemp[e*2+1]==v2+1){
    8383                                        exist = true;
    84                                         element_edge_connectivity[i*elementnbv+j]=e;
     84                                        element_edge_connectivity[i*elementnbe+j]=e;
    8585                                        break;
    8686                                }
     
    9696
    9797                                /*Update Connectivity*/
    98                                 element_edge_connectivity[i*elementnbv+j]=nbe;
     98                                element_edge_connectivity[i*elementnbe+j]=nbe;
    9999
    100100                                /*Update chain*/
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp

    r15611 r15621  
    1313        int        i,j;
    1414        int        count;
    15         IssmDouble yts;
    1615        IssmDouble g;
    1716        IssmDouble rho_ice;
    1817        IssmDouble FSreconditioning;
    1918        bool       isSSA,isL1L2,isHO,isFS;
    20         int        fe_ssa;
     19        int        fe_ssa,fe_ho;
    2120        bool       spcpresent = false;
    2221        int        Mx,Nx;
     
    4443
    4544        /*Fetch parameters: */
    46         iomodel->Constant(&yts,ConstantsYtsEnum);
    4745        iomodel->Constant(&g,ConstantsGEnum);
    4846        iomodel->Constant(&rho_ice,MaterialsRhoIceEnum);
     
    5351        iomodel->Constant(&isFS,FlowequationIsFSEnum);
    5452        iomodel->Constant(&fe_ssa,FlowequationFeSSAEnum);
     53        iomodel->Constant(&fe_ho,FlowequationFeHOEnum);
    5554
    5655        /*Recover pointer: */
     
    108107                                                count++;
    109108                                                if (!xIsNan<IssmDouble>(spcvx[i])){
    110                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvx[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    111                                                         count++;
    112                                                 }
    113                                                 if (!xIsNan<IssmDouble>(spcvy[i])){
    114                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,spcvy[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     109                                                        constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvx[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     110                                                        count++;
     111                                                }
     112                                                if (!xIsNan<IssmDouble>(spcvy[i])){
     113                                                        constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,spcvy[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    115114                                                        count++;
    116115                                                }
     
    123122                                                count++;
    124123                                                if (!xIsNan<IssmDouble>(spcvx[i])){
    125                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    126                                                         count++;
    127                                                 }
    128                                                 if (!xIsNan<IssmDouble>(spcvy[i])){
    129                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     124                                                        constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     125                                                        count++;
     126                                                }
     127                                                if (!xIsNan<IssmDouble>(spcvy[i])){
     128                                                        constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    130129                                                        count++;
    131130                                                }
     
    145144                                                count++;
    146145                                                if (!xIsNan<IssmDouble>(spcvx[i])){
    147                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    148                                                         count++;
    149                                                 }
    150                                                 if (!xIsNan<IssmDouble>(spcvy[i])){
    151                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     146                                                        constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     147                                                        count++;
     148                                                }
     149                                                if (!xIsNan<IssmDouble>(spcvy[i])){
     150                                                        constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    152151                                                        count++;
    153152                                                }
     
    160159                                                count++;
    161160                                                if (!xIsNan<IssmDouble>(spcvx[i])){
    162                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvx[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    163                                                         count++;
    164                                                 }
    165                                                 if (!xIsNan<IssmDouble>(spcvy[i])){
    166                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,spcvy[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     161                                                        constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvx[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     162                                                        count++;
     163                                                }
     164                                                if (!xIsNan<IssmDouble>(spcvy[i])){
     165                                                        constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,spcvy[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    167166                                                        count++;
    168167                                                }
    169168                                                if (!xIsNan<IssmDouble>(spcvz[i])){
    170                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,spcvz[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     169                                                        constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,spcvz[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    171170                                                        count++;
    172171                                                }
     
    185184                                                count++;
    186185                                                if (!xIsNan<IssmDouble>(spcvx[i])){
    187                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    188                                                         count++;
    189                                                 }
    190                                                 if (!xIsNan<IssmDouble>(spcvy[i])){
    191                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     186                                                        constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     187                                                        count++;
     188                                                }
     189                                                if (!xIsNan<IssmDouble>(spcvy[i])){
     190                                                        constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    192191                                                        count++;
    193192                                                }
     
    200199                                                count++;
    201200                                                if (!xIsNan<IssmDouble>(spcvx[i])){
    202                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvx[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    203                                                         count++;
    204                                                 }
    205                                                 if (!xIsNan<IssmDouble>(spcvy[i])){
    206                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,spcvy[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     201                                                        constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvx[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     202                                                        count++;
     203                                                }
     204                                                if (!xIsNan<IssmDouble>(spcvy[i])){
     205                                                        constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,spcvy[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    207206                                                        count++;
    208207                                                }
    209208                                                if (!xIsNan<IssmDouble>(spcvz[i])){
    210                                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,spcvz[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     209                                                        constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,spcvz[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    211210                                                        count++;
    212211                                                }
     
    217216                        else{
    218217                                if (Mx==iomodel->numberofvertices && !xIsNan<IssmDouble>(spcvx[i])){
    219                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     218                                        constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
    220219                                        count++;
    221220
     
    226225                                        spcpresent=false;
    227226                                        for(j=0;j<Nx;j++){
    228                                                 values[j]=spcvx[i*Nx+j]/yts;
     227                                                values[j]=spcvx[i*Nx+j];
    229228                                                if(!xIsNan<IssmDouble>(values[j]))spcpresent=true; //NaN means no spc by default
    230229                                        }
     
    242241
    243242                                if (My==iomodel->numberofvertices && !xIsNan<IssmDouble>(spcvy[i])){
    244                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vy.
     243                                        constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vy.
    245244                                        count++;
    246245                                }
     
    250249                                        spcpresent=false;
    251250                                        for(j=0;j<Ny;j++){
    252                                                 values[j]=spcvy[i*Ny+j]/yts;
     251                                                values[j]=spcvy[i*Ny+j];
    253252                                                if(!xIsNan<IssmDouble>(values[j]))spcpresent=true; //NaN means no spc by default
    254253                                        }
     
    266265                                if (reCast<int,IssmDouble>(vertices_type[i])==FSApproximationEnum ||  (reCast<int,IssmDouble>(vertices_type[i])==NoneApproximationEnum)){
    267266                                        if (Mz==iomodel->numberofvertices && !xIsNan<IssmDouble>(spcvz[i])){
    268                                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvz[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
     267                                                constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvz[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
    269268                                                count++;
    270269                                        }
     
    274273                                                spcpresent=false;
    275274                                                for(j=0;j<Nz;j++){
    276                                                         values[j]=spcvz[i*Nz+j]/yts;
     275                                                        values[j]=spcvz[i*Nz+j];
    277276                                                        if(!xIsNan<IssmDouble>(values[j]))spcpresent=true; //NaN means no spc by default
    278277                                                }
     
    313312
    314313        /*SPC Quadratic elements*/
    315         if(isSSA && fe_ssa==1){
     314        if((isSSA && fe_ssa==1) || (isHO && fe_ho==1)){
    316315
    317316                int   v1,v2;
     
    330329                                if(!xIsNan<IssmDouble>(spcvx[v1]) && !xIsNan<IssmDouble>(spcvx[v2])){
    331330                                        constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
    332                                                                         1,(spcvx[v1]+spcvx[v2])/(2.*yts),DiagnosticHorizAnalysisEnum));
     331                                                                        1,(spcvx[v1]+spcvx[v2])/(2.),DiagnosticHorizAnalysisEnum));
    333332                                        count++;
    334333                                }
    335334                                if(!xIsNan<IssmDouble>(spcvy[v1]) && !xIsNan<IssmDouble>(spcvy[v2])){
    336335                                        constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
    337                                                                         2,(spcvy[v1]+spcvy[v2])/(2.*yts),DiagnosticHorizAnalysisEnum));
     336                                                                        2,(spcvy[v1]+spcvy[v2])/(2.),DiagnosticHorizAnalysisEnum));
    338337                                        count++;
    339338                                }
     
    341340                                        if(!xIsNan<IssmDouble>(spcvz[v1]) && !xIsNan<IssmDouble>(spcvz[v2])){
    342341                                                constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
    343                                                                                 3,(spcvz[v1]+spcvz[v2])/(2.*yts),DiagnosticHorizAnalysisEnum));
     342                                                                                3,(spcvz[v1]+spcvz[v2])/(2.),DiagnosticHorizAnalysisEnum));
    344343                                                count++;
    345344                                        }
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp

    r15583 r15621  
    4949                else if(isHO){
    5050                        approximation = HOApproximationEnum;
    51                         finiteelement = P1Enum;
     51                        iomodel->Constant(&temp,FlowequationFeHOEnum);
     52                        switch(temp){
     53                                case 0 : finiteelement = P1Enum; break;
     54                                case 1 : finiteelement = P2Enum; break;
     55                                default: _error_("finite element "<<temp<<" not supported");
     56                        }
    5257                }
    5358                else if(isFS){
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp

    r15613 r15621  
    5454                }
    5555                else if(isHO){
    56                         finiteelement = P1Enum;
     56                        iomodel->Constant(&temp,FlowequationFeHOEnum);
     57                        switch(temp){
     58                                case 0 : finiteelement = P1Enum; break;
     59                                case 1 : finiteelement = P2Enum; break;
     60                                default: _error_("finite element "<<temp<<" not supported");
     61                        }
    5762                }
    5863                else if(isFS){
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r15595 r15621  
    7272        FlowequationIsHOEnum,
    7373        FlowequationIsFSEnum,
     74        FlowequationFeSSAEnum,
     75        FlowequationFeHOEnum,
    7476        FlowequationFeFSEnum,
    75         FlowequationFeSSAEnum,
    7677        FlowequationVertexEquationEnum,
    7778        FrictionCoefficientEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r15595 r15621  
    8080                case FlowequationIsHOEnum : return "FlowequationIsHO";
    8181                case FlowequationIsFSEnum : return "FlowequationIsFS";
     82                case FlowequationFeSSAEnum : return "FlowequationFeSSA";
     83                case FlowequationFeHOEnum : return "FlowequationFeHO";
    8284                case FlowequationFeFSEnum : return "FlowequationFeFS";
    83                 case FlowequationFeSSAEnum : return "FlowequationFeSSA";
    8485                case FlowequationVertexEquationEnum : return "FlowequationVertexEquation";
    8586                case FrictionCoefficientEnum : return "FrictionCoefficient";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r15595 r15621  
    8080              else if (strcmp(name,"FlowequationIsHO")==0) return FlowequationIsHOEnum;
    8181              else if (strcmp(name,"FlowequationIsFS")==0) return FlowequationIsFSEnum;
     82              else if (strcmp(name,"FlowequationFeSSA")==0) return FlowequationFeSSAEnum;
     83              else if (strcmp(name,"FlowequationFeHO")==0) return FlowequationFeHOEnum;
    8284              else if (strcmp(name,"FlowequationFeFS")==0) return FlowequationFeFSEnum;
    83               else if (strcmp(name,"FlowequationFeSSA")==0) return FlowequationFeSSAEnum;
    8485              else if (strcmp(name,"FlowequationVertexEquation")==0) return FlowequationVertexEquationEnum;
    8586              else if (strcmp(name,"FrictionCoefficient")==0) return FrictionCoefficientEnum;
     
    136137              else if (strcmp(name,"InversionIscontrol")==0) return InversionIscontrolEnum;
    137138              else if (strcmp(name,"InversionTao")==0) return InversionTaoEnum;
    138               else if (strcmp(name,"InversionIncompleteAdjoint")==0) return InversionIncompleteAdjointEnum;
    139139         else stage=2;
    140140   }
    141141   if(stage==2){
    142               if (strcmp(name,"InversionMaxParameters")==0) return InversionMaxParametersEnum;
     142              if (strcmp(name,"InversionIncompleteAdjoint")==0) return InversionIncompleteAdjointEnum;
     143              else if (strcmp(name,"InversionMaxParameters")==0) return InversionMaxParametersEnum;
    143144              else if (strcmp(name,"InversionMaxiterPerStep")==0) return InversionMaxiterPerStepEnum;
    144145              else if (strcmp(name,"InversionMinParameters")==0) return InversionMinParametersEnum;
     
    259260              else if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum;
    260261              else if (strcmp(name,"GiaMantleViscosity")==0) return GiaMantleViscosityEnum;
    261               else if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum;
    262262         else stage=3;
    263263   }
    264264   if(stage==3){
    265               if (strcmp(name,"Thickness")==0) return ThicknessEnum;
     265              if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum;
     266              else if (strcmp(name,"Thickness")==0) return ThicknessEnum;
    266267              else if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
    267268              else if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
     
    382383              else if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
    383384              else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
    384               else if (strcmp(name,"RiftfrontType")==0) return RiftfrontTypeEnum;
    385385         else stage=4;
    386386   }
    387387   if(stage==4){
    388               if (strcmp(name,"Segment")==0) return SegmentEnum;
     388              if (strcmp(name,"RiftfrontType")==0) return RiftfrontTypeEnum;
     389              else if (strcmp(name,"Segment")==0) return SegmentEnum;
    389390              else if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
    390391              else if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum;
     
    505506              else if (strcmp(name,"MINI")==0) return MINIEnum;
    506507              else if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
    507               else if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
    508508         else stage=5;
    509509   }
    510510   if(stage==5){
    511               if (strcmp(name,"SaveResults")==0) return SaveResultsEnum;
     511              if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
     512              else if (strcmp(name,"SaveResults")==0) return SaveResultsEnum;
    512513              else if (strcmp(name,"BoolElementResult")==0) return BoolElementResultEnum;
    513514              else if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum;
  • issm/trunk-jpl/src/m/classes/flowequation.m

    r15567 r15621  
    1212                isFS             = 0;
    1313                fe_SSA           = 0;
     14                fe_HO            = 0;
    1415                fe_FS            = 0;
    1516                vertex_equation  = NaN;
     
    7879                                md = checkfield(md,'flowequation.isHO','numel',[1],'values',[0 1]);
    7980                                md = checkfield(md,'flowequation.isFS','numel',[1],'values',[0 1]);
     81                                md = checkfield(md,'flowequation.fe_SSA','numel',[1],'values',[0 1]);
     82                                md = checkfield(md,'flowequation.fe_HO','numel',[1],'values',[0 1]);
     83                                md = checkfield(md,'flowequation.fe_FS','numel',[1],'values',[0]);
    8084                                md = checkfield(md,'flowequation.borderSSA','size',[md.mesh.numberofvertices 1],'values',[0 1]);
    8185                                md = checkfield(md,'flowequation.borderHO','size',[md.mesh.numberofvertices 1],'values',[0 1]);
     
    123127                        WriteData(fid,'object',obj,'fieldname','isHO','format','Boolean');
    124128                        WriteData(fid,'object',obj,'fieldname','isFS','format','Boolean');
     129                        WriteData(fid,'object',obj,'fieldname','fe_SSA','format','Integer');
     130                        WriteData(fid,'object',obj,'fieldname','fe_HO','format','Integer');
    125131                        WriteData(fid,'object',obj,'fieldname','fe_FS','format','Integer');
    126                         WriteData(fid,'object',obj,'fieldname','fe_SSA','format','Integer');
    127132                        WriteData(fid,'object',obj,'fieldname','borderSSA','format','DoubleMat','mattype',1);
    128133                        WriteData(fid,'object',obj,'fieldname','borderHO','format','DoubleMat','mattype',1);
  • issm/trunk-jpl/src/m/classes/flowequation.py

    r15567 r15621  
    2222                self.isFS             = 0
    2323                self.fe_SSA           = 0
     24                self.fe_HO            = 0
    2425                self.fe_FS            = 0
    2526                self.vertex_equation  = float('NaN')
     
    6061                        md = checkfield(md,'flowequation.isHO','numel',[1],'values',[0,1])
    6162                        md = checkfield(md,'flowequation.isFS','numel',[1],'values',[0,1])
     63                        md = checkfield(md,'flowequation.fe_SSA','numel',[1],'values',[0,1])
     64                        md = checkfield(md,'flowequation.fe_HO','numel',[1],'values',[0,1])
     65                        md = checkfield(md,'flowequation.fe_FS','numel',[1],'values',[0])
    6266                        md = checkfield(md,'flowequation.borderSSA','size',[md.mesh.numberofvertices],'values',[0,1])
    6367                        md = checkfield(md,'flowequation.borderHO','size',[md.mesh.numberofvertices],'values',[0,1])
     
    8589                WriteData(fid,'object',self,'fieldname','isHO','format','Boolean')
    8690                WriteData(fid,'object',self,'fieldname','isFS','format','Boolean')
     91                WriteData(fid,'object',self,'fieldname','fe_SSA','format','Integer')
     92                WriteData(fid,'object',self,'fieldname','fe_HO','format','Integer')
    8793                WriteData(fid,'object',self,'fieldname','fe_FS','format','Integer')
    88                 WriteData(fid,'object',self,'fieldname','fe_SSA','format','Integer')
    8994                WriteData(fid,'object',self,'fieldname','borderSSA','format','DoubleMat','mattype',1)
    9095                WriteData(fid,'object',self,'fieldname','borderHO','format','DoubleMat','mattype',1)
  • issm/trunk-jpl/src/m/classes/stressbalance.m

    r15614 r15621  
    153153                end % }}}
    154154                function marshall(obj,md,fid) % {{{
    155                         WriteData(fid,'object',obj,'class','diagnostic','fieldname','spcvx','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1);
    156                         WriteData(fid,'object',obj,'class','diagnostic','fieldname','spcvy','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1);
    157                         WriteData(fid,'object',obj,'class','diagnostic','fieldname','spcvz','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1);
     155
     156                        yts=365.0*24.0*3600.0;
     157
     158                        WriteData(fid,'object',obj,'class','diagnostic','fieldname','spcvx','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1);
     159                        WriteData(fid,'object',obj,'class','diagnostic','fieldname','spcvy','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1);
     160                        WriteData(fid,'object',obj,'class','diagnostic','fieldname','spcvz','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1);
    158161                        WriteData(fid,'object',obj,'class','diagnostic','fieldname','restol','format','Double');
    159162                        WriteData(fid,'object',obj,'class','diagnostic','fieldname','reltol','format','Double');
  • issm/trunk-jpl/src/m/classes/stressbalance.py

    r15616 r15621  
    154154        # }}}
    155155        def marshall(self,md,fid):    # {{{
    156                 WriteData(fid,'object',self,'class','diagnostic','fieldname','spcvx','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1)
    157                 WriteData(fid,'object',self,'class','diagnostic','fieldname','spcvy','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1)
    158                 WriteData(fid,'object',self,'class','diagnostic','fieldname','spcvz','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1)
     156
     157                yts=365.0*24.0*3600.0
     158
     159                WriteData(fid,'object',self,'class','diagnostic','fieldname','spcvx','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1)
     160                WriteData(fid,'object',self,'class','diagnostic','fieldname','spcvy','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1)
     161                WriteData(fid,'object',self,'class','diagnostic','fieldname','spcvz','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1)
    159162                WriteData(fid,'object',self,'class','diagnostic','fieldname','restol','format','Double')
    160163                WriteData(fid,'object',self,'class','diagnostic','fieldname','reltol','format','Double')
  • issm/trunk-jpl/src/m/enum/EnumDefinitions.py

    r15595 r15621  
    891891        return StringToEnum('FlowequationIsFS')[0]
    892892
     893def FlowequationFeSSAEnum():
     894        """
     895        FLOWEQUATIONFESSAENUM - Enum of FlowequationFeSSA
     896
     897        WARNING: DO NOT MODIFY THIS FILE
     898                                this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
     899                                Please read src/c/shared/Enum/README for more information
     900
     901           Usage:
     902              macro=FlowequationFeSSAEnum()
     903        """
     904
     905        return StringToEnum('FlowequationFeSSA')[0]
     906
     907def FlowequationFeHOEnum():
     908        """
     909        FLOWEQUATIONFEHOENUM - Enum of FlowequationFeHO
     910
     911        WARNING: DO NOT MODIFY THIS FILE
     912                                this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
     913                                Please read src/c/shared/Enum/README for more information
     914
     915           Usage:
     916              macro=FlowequationFeHOEnum()
     917        """
     918
     919        return StringToEnum('FlowequationFeHO')[0]
     920
    893921def FlowequationFeFSEnum():
    894922        """
     
    905933        return StringToEnum('FlowequationFeFS')[0]
    906934
    907 def FlowequationFeSSAEnum():
    908         """
    909         FLOWEQUATIONFESSAENUM - Enum of FlowequationFeSSA
    910 
    911         WARNING: DO NOT MODIFY THIS FILE
    912                                 this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
    913                                 Please read src/c/shared/Enum/README for more information
    914 
    915            Usage:
    916               macro=FlowequationFeSSAEnum()
    917         """
    918 
    919         return StringToEnum('FlowequationFeSSA')[0]
    920 
    921935def FlowequationVertexEquationEnum():
    922936        """
     
    79317945        """
    79327946
    7933         return 565
    7934 
     7947        return 566
     7948
  • issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m

    r15530 r15621  
    99%      macro=MaximumNumberOfEnums()
    1010
    11 macro=565;
     11macro=566;
Note: See TracChangeset for help on using the changeset viewer.