Changeset 15448


Ignore:
Timestamp:
07/05/13 15:45:34 (12 years ago)
Author:
Mathieu Morlighem
Message:

BUG: fixed spc pb for quadratic elements. Only works for StaticSpc for now

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

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/classes/Constraints/SpcStatic.cpp

    r15104 r15448  
    2222SpcStatic::SpcStatic(int spc_sid,int spc_nodeid, int spc_dof,IssmDouble spc_value,int spc_analysis_type){
    2323
    24         sid=spc_sid;
    25         nodeid=spc_nodeid;
    26         dof=spc_dof;
    27         value=spc_value;
    28         analysis_type=spc_analysis_type;
     24        sid           = spc_sid;
     25        nodeid        = spc_nodeid;
     26        dof           = spc_dof;
     27        value         = spc_value;
     28        analysis_type = spc_analysis_type;
    2929
    3030        return;
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp

    r15428 r15448  
    1818        IssmDouble  stokesreconditioning;
    1919        bool    isstokes,isl1l2,ismacayealpattyn;
     20        int     fe_ssa;
    2021   bool    spcpresent=false;
    2122        int Mx,Nx;
     
    5051        iomodel->Constant(&isl1l2,FlowequationIsl1l2Enum);
    5152        iomodel->Constant(&ismacayealpattyn,FlowequationIsmacayealpattynEnum);
     53        iomodel->Constant(&fe_ssa,FlowequationFeSsaEnum);
    5254
    5355        /*Recover pointer: */
     
    219221                                        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.
    220222                                        count++;
     223
    221224                                }
    222225                                else if (Mx==iomodel->numberofvertices+1) {
     
    306309                                                break;
    307310                                        default: _error_("Vertex approximation " << EnumToStringx(reCast<int,IssmDouble>(vertices_type[i])) << " not supported");
     311                                }
     312                        }
     313                }
     314        }
     315
     316        /*SPC Quadratic elements*/
     317        if(ismacayealpattyn&& fe_ssa==1){
     318
     319                int v1,v2,el1,el2;
     320                bool my_edge;
     321
     322                if(Mx!=iomodel->numberofvertices) _error_("transient spc not supported yet");
     323                CreateEdges(iomodel);
     324
     325                for(i=0;i<iomodel->numberofedges;i++){
     326
     327                        v1 = iomodel->edges[4*i+0]-1;
     328                        v2 = iomodel->edges[4*i+1]-1;
     329                        el1= iomodel->edges[4*i+2]-1;
     330                        el2= iomodel->edges[4*i+3]-1;
     331
     332                        my_edge = iomodel->my_elements[el1];
     333                        if(!my_edge && el2>=0){
     334                                my_edge = iomodel->my_elements[el2];
     335                        }
     336
     337                        if(my_edge){
     338                                if(!xIsNan<IssmDouble>(spcvx[v1]) && !xIsNan<IssmDouble>(spcvx[v2])){
     339                                        constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
     340                                                                        1,(spcvx[v1]+spcvx[v2])/yts,DiagnosticHorizAnalysisEnum));
     341                                        count++;
     342                                }
     343                                if(!xIsNan<IssmDouble>(spcvx[v1]) && !xIsNan<IssmDouble>(spcvx[v2])){
     344                                        constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
     345                                                                        2,(spcvy[v1]+spcvy[v2])/yts,DiagnosticHorizAnalysisEnum));
     346                                        count++;
     347                                }
     348                                if(!xIsNan<IssmDouble>(spcvx[v1]) && !xIsNan<IssmDouble>(spcvx[v2])){
     349                                        constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
     350                                                                        3,(spcvz[v1]+spcvz[v2])/yts,DiagnosticHorizAnalysisEnum));
     351                                        count++;
    308352                                }
    309353                        }
Note: See TracChangeset for help on using the changeset viewer.