Changeset 26155


Ignore:
Timestamp:
03/26/21 13:23:35 (4 years ago)
Author:
tsantos
Message:

CHG: working on mono layer HO - not fully tested

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

Legend:

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

    r26148 r26155  
    188188                }
    189189                else{
    190                         IoModelToConstraintsx(constraints,iomodel,"md.stressbalance.spcvx",StressbalanceAnalysisEnum,finiteelement,0);
    191                         if(iomodel->domaintype!=Domain2DverticalEnum){
    192                                 IoModelToConstraintsx(constraints,iomodel,"md.stressbalance.spcvy",StressbalanceAnalysisEnum,finiteelement,1);
     190                        if(!isMLHO){
     191                                IoModelToConstraintsx(constraints,iomodel,"md.stressbalance.spcvx",StressbalanceAnalysisEnum,finiteelement,0);
     192                                if(iomodel->domaintype!=Domain2DverticalEnum){
     193                                        IoModelToConstraintsx(constraints,iomodel,"md.stressbalance.spcvy",StressbalanceAnalysisEnum,finiteelement,1);
     194                                }
     195                        }
     196                        else{//itapopo testing here
     197                                IoModelToConstraintsx(constraints,iomodel,"md.stressbalance.spcvx",StressbalanceAnalysisEnum,finiteelement,0);
     198                                IoModelToConstraintsx(constraints,iomodel,"md.stressbalance.spcvx",StressbalanceAnalysisEnum,finiteelement,1);
     199                                if(iomodel->domaintype!=Domain2DverticalEnum){
     200                                        IoModelToConstraintsx(constraints,iomodel,"md.stressbalance.spcvy",StressbalanceAnalysisEnum,finiteelement,2);
     201                                        IoModelToConstraintsx(constraints,iomodel,"md.stressbalance.spcvy",StressbalanceAnalysisEnum,finiteelement,3);
     202                                }
    193203                        }
    194204                }
     
    773783        iomodel->FetchDataToInput(inputs,elements,"md.initialization.vx",VxEnum,0.);
    774784        iomodel->FetchDataToInput(inputs,elements,"md.initialization.vy",VyEnum,0.);
     785        if(isMLHO){//itapopo
     786                iomodel->FetchDataToInput(inputs,elements,"md.initialization.vx",VxBaseEnum,0.);
     787                iomodel->FetchDataToInput(inputs,elements,"md.initialization.vy",VyBaseEnum,0.);
     788        }
    775789        iomodel->FetchDataToInput(inputs,elements,"md.stressbalance.loadingforcex",LoadingforceXEnum);
    776790        iomodel->FetchDataToInput(inputs,elements,"md.stressbalance.loadingforcey",LoadingforceYEnum);
     
    12111225                        GetSolutionFromInputsFS(solution,element);
    12121226                        return;
    1213                 case SSAApproximationEnum: case HOApproximationEnum: case L1L2ApproximationEnum: case MLHOApproximationEnum: case SIAApproximationEnum:
     1227                case SSAApproximationEnum: case HOApproximationEnum: case L1L2ApproximationEnum: case SIAApproximationEnum:
    12141228                        GetSolutionFromInputsHoriz(solution,element);
     1229                        return;
     1230                case MLHOApproximationEnum:
     1231                        GetSolutionFromInputsMLHO(solution,element);
    12151232                        return;
    12161233                case SSAHOApproximationEnum: case HOFSApproximationEnum: case SSAFSApproximationEnum:
     
    27072724/*MLHO*/
    27082725ElementMatrix* StressbalanceAnalysis::CreateKMatrixMLHO(Element* element){/*{{{*/
    2709 _error_("not implemented yet");
     2726
    27102727        /* Check if ice in element */
    27112728        if(!element->IsIceInElement()) return NULL;
    2712 
    27132729        /*compute all stiffness matrices for this element*/
    27142730        ElementMatrix* Ke1=CreateKMatrixMLHOViscous(element);
     
    27242740
    27252741        if(!element->IsOnBase() || element->IsFloating()) return NULL;
    2726         Element* basalelement = element->SpawnBasalElement();
     2742       
     2743        /*Intermediaries*/
     2744        int      domaintype;
     2745   Element* basalelement;
     2746
     2747   /*Get basal element*/
     2748   element->FindParam(&domaintype,DomainTypeEnum);
     2749   switch(domaintype){
     2750      case Domain2DhorizontalEnum:
     2751         basalelement = element;
     2752         break;
     2753      case Domain3DEnum: case Domain2DverticalEnum:
     2754          _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
     2755                        //basalelement = element->SpawnBasalElement();
     2756         break;
     2757      default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
     2758   }
     2759
     2760        //Element* basalelement = element->SpawnBasalElement();
    27272761        ElementMatrix* Ke    = basalelement->NewElementMatrix(MLHOApproximationEnum);
    27282762        ElementMatrix* KeSSA = CreateKMatrixSSAFriction(basalelement); //only to get K11 and K33
     
    27332767        for(int i=0;i<numnodes;i++){
    27342768      for(int j=0;j<numnodes;j++){
    2735          Ke->values[(i+0*numnodes)*2*2*numnodes+j+0*numnodes] = KeSSA->values[2*i*2*numnodes+2*j]; //K11
    2736          Ke->values[(i+2*numnodes)*2*2*numnodes+j+2*numnodes] = KeSSA->values[(2*i+1)*2*numnodes+2*j+1]; //K33
     2769         Ke->values[(4*i+0)*2*2*numnodes+4*j+0] = KeSSA->values[2*i*2*numnodes+2*j]; //K11
     2770         Ke->values[(4*i+2)*2*2*numnodes+4*j+2] = KeSSA->values[(2*i+1)*2*numnodes+2*j+1]; //K33
    27372771      } 
    27382772   }
     2773       
     2774        /*Transform Coordinate System*/
     2775        //basalelement->TransformStiffnessMatrixCoord(Ke,XYMLHOEnum);
    27392776
    27402777        /*clean-up and return*/
     
    27482785        IssmDouble  viscosity,Jdet,thickness,n;
    27492786        IssmDouble *xyz_list = NULL;
     2787        int      domaintype;
     2788        Element* basalelement;
     2789
     2790        /*Get basal element*/
     2791        element->FindParam(&domaintype,DomainTypeEnum);
     2792        switch(domaintype){
     2793                case Domain2DhorizontalEnum:
     2794                        basalelement = element;
     2795                        break;
     2796                case Domain3DEnum: case Domain2DverticalEnum:
     2797                        _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
     2798                        //basalelement = element->GetBasalElement()->SpawnBasalElement(true);
     2799                        break;
     2800                default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
     2801        }
    27502802
    27512803        /*Get element on base*/
    2752         Element* basalelement = element->GetBasalElement()->SpawnBasalElement(true);
     2804        //Element* basalelement = element->GetBasalElement()->SpawnBasalElement(true);
    27532805
    27542806        /*Fetch number of nodes and dof for this finite element*/
     
    27812833                n_input->GetInputValue(&n,gauss);
    27822834                element->material->ViscosityL1L2(&viscosity,xyz_list,gauss,vx_input,vy_input,surface_input);
    2783                
     2835                //viscosity=10e10;//itapopo
     2836
    27842837                for(int i=0;i<numnodes;i++){//shape functions on tria element
    27852838                        for(int j=0;j<numnodes;j++){
    2786                                 Ke->values[(i+0*numnodes)*2*2*numnodes+j+0*numnodes] += gauss->weight*Jdet*viscosity*thickness*(
     2839                                Ke->values[(4*i+0)*2*2*numnodes+4*j+0] += gauss->weight*Jdet*viscosity*thickness*(
    27872840                                                        4.*dbasis[0*numnodes+j]*dbasis[0*numnodes+i] + dbasis[1*numnodes+j]*dbasis[1*numnodes+i]
    27882841                                                        );//K11
    2789                                 Ke->values[(i+0*numnodes)*2*2*numnodes+j+1*numnodes] += gauss->weight*Jdet*viscosity*thickness*(
     2842                                Ke->values[(4*i+0)*2*2*numnodes+4*j+1] += gauss->weight*Jdet*viscosity*thickness*(
    27902843                                                        4.*dbasis[0*numnodes+j]*dbasis[0*numnodes+i] + dbasis[1*numnodes+j]*dbasis[1*numnodes+i]
    27912844                                                        )*(n+1)/(n+2);//K12
    2792                                 Ke->values[(i+0*numnodes)*2*2*numnodes+j+2*numnodes] += gauss->weight*Jdet*viscosity*thickness*(
     2845                                Ke->values[(4*i+0)*2*2*numnodes+4*j+2] += gauss->weight*Jdet*viscosity*thickness*(
    27932846                                                        2.*dbasis[1*numnodes+j]*dbasis[0*numnodes+i] + dbasis[0*numnodes+j]*dbasis[1*numnodes+i]
    27942847                                                        );//K13
    2795                                 Ke->values[(i+0*numnodes)*2*2*numnodes+j+3*numnodes] += gauss->weight*Jdet*viscosity*thickness*(
     2848                                Ke->values[ (4*i+0)*2*2*numnodes+4*j+3] += gauss->weight*Jdet*viscosity*thickness*(
    27962849                     2.*dbasis[1*numnodes+j]*dbasis[0*numnodes+i] + dbasis[0*numnodes+j]*dbasis[1*numnodes+i]
    27972850                     )*(n+1)/(n+2);//K14
    27982851                               
    2799                                 Ke->values[(i+1*numnodes)*2*2*numnodes+j+0*numnodes] += gauss->weight*Jdet*viscosity*thickness*(
     2852                                Ke->values[(4*i+1)*2*2*numnodes+4*j+0] += gauss->weight*Jdet*viscosity*thickness*(
    28002853                                                        4.*dbasis[0*numnodes+j]*dbasis[0*numnodes+i] + dbasis[1*numnodes+j]*dbasis[1*numnodes+i]
    28012854                                                        )*(n+1)/(n+2);//K21
    2802                                 Ke->values[(i+1*numnodes)*2*2*numnodes+j+1*numnodes] += gauss->weight*Jdet*viscosity*thickness*(
     2855                                Ke->values[(4*i+1)*2*2*numnodes+4*j+1] += gauss->weight*Jdet*viscosity*thickness*(
    28032856                                                        4.*dbasis[0*numnodes+j]*dbasis[0*numnodes+i] + dbasis[1*numnodes+j]*dbasis[1*numnodes+i]
    28042857                                                        )*2*pow(n+1,2)/((2*n+3)*(n+2))
     
    28062859                                                        gauss->weight*Jdet*viscosity*basis[j]*basis[i]*pow(n+1,2)/(thickness*(2*n+1))
    28072860                                                        ;//K22
    2808                                 Ke->values[(i+1*numnodes)*2*2*numnodes+j+2*numnodes] += gauss->weight*Jdet*viscosity*thickness*(
     2861                                Ke->values[(4*i+1)*2*2*numnodes+4*j+2] += gauss->weight*Jdet*viscosity*thickness*(
    28092862                                                        2.*dbasis[1*numnodes+j]*dbasis[0*numnodes+i] + dbasis[0*numnodes+j]*dbasis[1*numnodes+i]
    28102863                                                        )*(n+1)/(n+2);//K23
    2811                                 Ke->values[(i+1*numnodes)*2*2*numnodes+j+3*numnodes] += gauss->weight*Jdet*viscosity*thickness*(
     2864                                Ke->values[(4*i+1)*2*2*numnodes+4*j+3] += gauss->weight*Jdet*viscosity*thickness*(
    28122865                                                        2.*dbasis[1*numnodes+j]*dbasis[0*numnodes+i] + dbasis[0*numnodes+j]*dbasis[1*numnodes+i]
    28132866                                                        )*2*pow(n+1,2)/((2*n+3)*(n+2));//K24
    28142867                               
    2815                                 Ke->values[(i+2*numnodes)*2*2*numnodes+j+0*numnodes] += gauss->weight*Jdet*viscosity*thickness*(
     2868                                Ke->values[(4*i+2)*2*2*numnodes+4*j+0] += gauss->weight*Jdet*viscosity*thickness*(
    28162869                                                        2.*dbasis[0*numnodes+j]*dbasis[1*numnodes+i] + dbasis[1*numnodes+j]*dbasis[0*numnodes+i]
    28172870                                                        );//K31
    2818                                 Ke->values[(i+2*numnodes)*2*2*numnodes+j+1*numnodes] += gauss->weight*Jdet*viscosity*thickness*(
     2871                                Ke->values[(4*i+2)*2*2*numnodes+4*j+1] += gauss->weight*Jdet*viscosity*thickness*(
    28192872                                                        2.*dbasis[0*numnodes+j]*dbasis[1*numnodes+i] + dbasis[1*numnodes+j]*dbasis[0*numnodes+i]
    28202873                                                        )*(n+1)/(n+2);//K32
    2821                                 Ke->values[(i+2*numnodes)*2*2*numnodes+j+2*numnodes] += gauss->weight*Jdet*viscosity*thickness*(
     2874                                Ke->values[(4*i+2)*2*2*numnodes+4*j+2] += gauss->weight*Jdet*viscosity*thickness*(
    28222875                                                        4.*dbasis[1*numnodes+j]*dbasis[1*numnodes+i] + dbasis[0*numnodes+j]*dbasis[0*numnodes+i]
    28232876                                                        );//K33
    2824                                 Ke->values[(i+2*numnodes)*2*2*numnodes+j+3*numnodes] += gauss->weight*Jdet*viscosity*thickness*(
     2877                                Ke->values[(4*i+2)*2*2*numnodes+4*j+3] += gauss->weight*Jdet*viscosity*thickness*(
    28252878                                                        4.*dbasis[1*numnodes+j]*dbasis[1*numnodes+i] + dbasis[0*numnodes+j]*dbasis[0*numnodes+i]
    28262879                                                        )*(n+1)/(n+2);//K34
    28272880
    2828                                 Ke->values[(i+3*numnodes)*2*2*numnodes+j+0*numnodes] += gauss->weight*Jdet*viscosity*thickness*(
     2881                                Ke->values[(4*i+3)*2*2*numnodes+4*j+0] += gauss->weight*Jdet*viscosity*thickness*(
    28292882                     2.*dbasis[0*numnodes+j]*dbasis[1*numnodes+i] + dbasis[1*numnodes+j]*dbasis[0*numnodes+i]
    28302883                     )*(n+1)/(n+2);//K41
    2831                                 Ke->values[(i+3*numnodes)*2*2*numnodes+j+1*numnodes] += gauss->weight*Jdet*viscosity*thickness*(
     2884                                Ke->values[(4*i+3)*2*2*numnodes+4*j+1] += gauss->weight*Jdet*viscosity*thickness*(
    28322885                     2.*dbasis[0*numnodes+j]*dbasis[1*numnodes+i] + dbasis[1*numnodes+j]*dbasis[0*numnodes+i]
    28332886                     )*2*pow(n+1,2)/((2*n+3)*(n+2));//K42
    2834                                 Ke->values[(i+3*numnodes)*2*2*numnodes+j+2*numnodes] += gauss->weight*Jdet*viscosity*thickness*(
     2887                                Ke->values[(4*i+3)*2*2*numnodes+4*j+2] += gauss->weight*Jdet*viscosity*thickness*(
    28352888                                                        4.*dbasis[1*numnodes+j]*dbasis[1*numnodes+i] + dbasis[0*numnodes+j]*dbasis[0*numnodes+i]
    28362889                                                        )*(n+1)/(n+2);//K43
    2837                                 Ke->values[(i+3*numnodes)*2*2*numnodes+j+3*numnodes] += gauss->weight*Jdet*viscosity*thickness*(
     2890                                Ke->values[(4*i+3)*2*2*numnodes+4*j+3] += gauss->weight*Jdet*viscosity*thickness*(
    28382891                                                        4.*dbasis[1*numnodes+j]*dbasis[1*numnodes+i] + dbasis[0*numnodes+j]*dbasis[0*numnodes+i]
    28392892                                                        )*2*pow(n+1,2)/((2*n+3)*(n+2))
     
    28442897                }
    28452898        }
    2846 
     2899 
    28472900        /*Transform Coordinate System*/
    2848         basalelement->TransformStiffnessMatrixCoord(Ke,XYEnum);
     2901        //basalelement->TransformStiffnessMatrixCoord(Ke,XYMLHOEnum);
    28492902
    28502903        /*Clean up and return*/
     
    28782931                default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
    28792932        }
    2880 
     2933       
    28812934        /*compute all load vectors for this element*/
    28822935        ElementVector* pe1=CreatePVectorMLHODrivingStress(basalelement);
     
    29202973                n_input->GetInputValue(&n,gauss);
    29212974
    2922                 for(int i=0;i<numnodes;i++){
    2923                         pe->values[i+0*numnodes]+=-rhog*thickness*slope[0]*Jdet*gauss->weight*basis[i]; //F1
    2924                         pe->values[i+1*numnodes]+=-rhog*thickness*slope[0]*Jdet*gauss->weight*basis[i]*(n+1)/(n+2); //F2
    2925                         pe->values[i+2*numnodes]+=-rhog*thickness*slope[1]*Jdet*gauss->weight*basis[i]; //F3
    2926                         pe->values[i+3*numnodes]+=-rhog*thickness*slope[1]*Jdet*gauss->weight*basis[i]*(n+1)/(n+2); //F4
     2975                for(int i=0;i<numnodes;i++){// per node: vx (basal vx), vshx, vy (basal vy), vshy
     2976                        pe->values[i*4+0]+=-rhog*thickness*slope[0]*Jdet*gauss->weight*basis[i]; //F1
     2977                        pe->values[i*4+1]+=-rhog*thickness*slope[0]*Jdet*gauss->weight*basis[i]*(n+1)/(n+2); //F2
     2978                        pe->values[i*4+2]+=-rhog*thickness*slope[1]*Jdet*gauss->weight*basis[i]; //F3
     2979                        pe->values[i*4+3]+=-rhog*thickness*slope[1]*Jdet*gauss->weight*basis[i]*(n+1)/(n+2); //F4
    29272980                }
    29282981        }
    29292982
    29302983        /*Transform coordinate system*/
    2931         element->TransformLoadVectorCoord(pe,XYEnum);
     2984        //element->TransformLoadVectorCoord(pe,XYMLHOEnum);
    29322985
    29332986        /*Clean up and return*/
     
    29933046
    29943047                for (int i=0;i<numnodes;i++){
    2995                         pe->values[i+0*numnodes]+= pressure*Jdet*gauss->weight*normal[0]*basis[i]; // F1
    2996                         pe->values[i+1*numnodes]+= pressure_sh*Jdet*gauss->weight*normal[0]*basis[i]; // F2
    2997                         pe->values[i+2*numnodes]+= pressure*Jdet*gauss->weight*normal[1]*basis[i]; // F3
    2998                         pe->values[i+3*numnodes]+= pressure_sh*Jdet*gauss->weight*normal[1]*basis[i]; // F4
     3048                        pe->values[i*4+0]+= pressure*Jdet*gauss->weight*normal[0]*basis[i]; // F1
     3049                        pe->values[i*4+1]+= pressure_sh*Jdet*gauss->weight*normal[0]*basis[i]; // F2
     3050                        pe->values[i*4+2]+= pressure*Jdet*gauss->weight*normal[1]*basis[i]; // F3
     3051                        pe->values[i*4+3]+= pressure_sh*Jdet*gauss->weight*normal[1]*basis[i]; // F4
    29993052                }
    30003053        }
    30013054
    30023055        /*Transform coordinate system*/
    3003         element->TransformLoadVectorCoord(pe,XYEnum);
     3056        //element->TransformLoadVectorCoord(pe,XYMLHOEnum);
    30043057
    30053058        /*Clean up and return*/
     
    30603113
    30613114        /*Fetch dof list and allocate solution vectors*/
    3062         basalelement->GetDofListLocal(&doflist,MLHOApproximationEnum,GsetEnum); //itapopo check this
     3115        basalelement->GetDofListLocal(&doflist,MLHOApproximationEnum,GsetEnum);
    30633116        //basalelement->GetDofListLocal(&doflist,NoneApproximationEnum,GsetEnum);
    30643117        IssmDouble* values    = xNew<IssmDouble>(numdof);
     
    30733126        for(i=0;i<numdof;i++) values[i]=solution[doflist[i]];
    30743127
     3128        std::cout<<"********  Element ID="<<element->Id()<<"\n";
     3129        for(i=0;i<numdof;i++){
     3130                std::cout<<values[i]<<"\n";
     3131        }
     3132
    30753133        /*Transform solution in Cartesian Space*/
    30763134        basalelement->TransformSolutionCoord(&values[0],XYEnum);
     
    30793137   /*Ok, we have vx and vy in values, fill in vx and vy arrays: */
    30803138   for(i=0;i<numnodes;i++){ //numnodes of the 2D mesh in which the MLHO is written
    3081       vx[i]  =values[i+0*numnodes]; //basal vx
    3082       vshx[i]=values[i+1*numnodes];
     3139      vx[i]  =values[i*4+0]; //basal vx
     3140      vshx[i]=values[i*4+1];
    30833141                if(xIsNan<IssmDouble>(vx[i]))           _error_("NaN found in solution vector");
    30843142      if(xIsInf<IssmDouble>(vx[i]))             _error_("Inf found in solution vector");
     
    30863144      if(xIsInf<IssmDouble>(vshx[i]))   _error_("Inf found in solution vector");
    30873145      //if(dim==3){
    3088          vy[i] =values[i+2*numnodes];
    3089          vshy[i]=values[i+3*numnodes];
     3146         vy[i] =values[i*4+2]; //basal vy
     3147         vshy[i]=values[i*4+3];
    30903148         if(xIsNan<IssmDouble>(vy[i]))          _error_("NaN found in solution vector");
    30913149         if(xIsInf<IssmDouble>(vy[i]))          _error_("Inf found in solution vector");
     
    30953153   }
    30963154
     3155        /*Add vx and vy as inputs to the tria element (basal velocities): */
     3156        element->AddBasalInput(VxBaseEnum,vx,element->GetElementType());
     3157        element->AddBasalInput(VyBaseEnum,vy,element->GetElementType());
     3158
    30973159        /*Compute suface velocities vx and vy*/
    30983160        if(domaintype==Domain2DhorizontalEnum) {
     
    31013163        }
    31023164
    3103         /*Get Vz and compute vel*/
     3165        /*Get Vz and compute vel (surface)*/
    31043166        basalelement->GetInputListOnNodes(&vz[0],VzEnum,0.);
    31053167        for(i=0;i<numnodes;i++) vel[i]=sqrt(vx[i]*vx[i] + vy[i]*vy[i] + vz[i]*vz[i]);
    31063168
    3107         /*Add vx and vy as inputs to the tria element: */
     3169        /*Add vx and vy as inputs to the tria element surface velocities): */
    31083170        element->AddBasalInput(VxEnum,vx,element->GetElementType());
    31093171        element->AddBasalInput(VyEnum,vy,element->GetElementType());
     
    31213183        xDelete<int>(doflist);
    31223184        if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
     3185}/*}}}*/
     3186void           StressbalanceAnalysis::GetSolutionFromInputsMLHO(Vector<IssmDouble>* solution,Element* element){/*{{{*/
     3187
     3188        IssmDouble   vx,vy,vbx,vby;
     3189        int          domaintype,dim,approximation,dofpernode;
     3190        int*         doflist = NULL;
     3191
     3192        /*Get some parameters*/
     3193        element->FindParam(&domaintype,DomainTypeEnum);
     3194        switch(domaintype){
     3195                case Domain2DhorizontalEnum: dim = 2; dofpernode = 4; break;
     3196                case Domain2DverticalEnum: case Domain3DEnum: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet"); break;
     3197                default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
     3198        }
     3199
     3200        /*Fetch number of nodes and dof for this finite element*/
     3201        int numnodes = element->GetNumberOfNodes();
     3202        int numdof   = numnodes*dofpernode;
     3203        element->GetInputValue(&approximation,ApproximationEnum);
     3204        if(approximation!=MLHOApproximationEnum) _error_("mesh "<<EnumToStringx(approximation)<<" not supported here");
     3205
     3206        /*Fetch dof list and allocate solution vector*/
     3207        element->GetDofList(&doflist,approximation,GsetEnum);
     3208        IssmDouble* values = xNew<IssmDouble>(numdof);
     3209
     3210        /*Get inputs*/
     3211        Input* vx_input         =element->GetInput(VxEnum);             _assert_(vx_input);
     3212        Input* vxbase_input     =element->GetInput(VxBaseEnum); _assert_(vxbase_input);
     3213        Input* vy_input         =NULL;
     3214        Input* vybase_input     =NULL;
     3215        if(domaintype!=Domain2DverticalEnum){
     3216                vy_input                =element->GetInput(VyEnum);             _assert_(vy_input);
     3217                vybase_input=element->GetInput(VyBaseEnum);     _assert_(vybase_input);
     3218        }
     3219
     3220        /*Ok, we have vx and vy in values, fill in vx and vy arrays: */
     3221        Gauss* gauss=element->NewGauss();
     3222        for(int i=0;i<numnodes;i++){
     3223                gauss->GaussNode(element->FiniteElement(),i);
     3224
     3225                /*Recover vx and vy*/
     3226                vx_input->GetInputValue(&vx,gauss);
     3227                vxbase_input->GetInputValue(&vbx,gauss);
     3228                values[i*4+0]=vbx; //basal vx
     3229                values[i*4+1]=vx-vbx; //shear vx
     3230                //if(dofpernode==2){
     3231                        vy_input->GetInputValue(&vy,gauss);
     3232                        vybase_input->GetInputValue(&vby,gauss);
     3233                        values[i*4+2]=vby; //basal vy
     3234                        values[i*4+3]=vy-vby; //shear vy 
     3235                //}
     3236        }
     3237
     3238        solution->SetValues(numdof,doflist,values,INS_VAL);
     3239       
     3240        /*Free ressources:*/
     3241        delete gauss;
     3242        xDelete<IssmDouble>(values);
     3243        xDelete<int>(doflist);
    31233244}/*}}}*/
    31243245
  • issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.h

    r26047 r26155  
    6565                ElementVector* CreatePVectorMLHODrivingStress(Element* element);
    6666                void           InputUpdateFromSolutionMLHO(IssmDouble* solution,Element* element);
     67                void           GetSolutionFromInputsMLHO(Vector<IssmDouble>* solution,Element* element);
    6768                /*HO*/
    6869                ElementMatrix* CreateJacobianMatrixHO(Element* element);
  • issm/trunk-jpl/src/c/classes/gauss/GaussTria.cpp

    r25514 r26155  
    636636} /*}}}*/
    637637void GaussTria::SynchronizeGaussBase(Gauss* gauss){/*{{{*/
    638 
    639         _error_("not supported");
    640 }
    641 /*}}}*/
     638        //itapopo check this
     639        _assert_(gauss->Enum()==GaussTriaEnum);
     640   GaussTria* gauss_tria = xDynamicCast<GaussTria*>(gauss);
     641
     642   gauss_tria->coord1=this->coord1;
     643   gauss_tria->coord2=this->coord2;
     644   gauss_tria->coord3=this->coord3;
     645   gauss_tria->weight=UNDEF;
     646        //_error_("not supported");
     647}
     648/*}}}*/
  • issm/trunk-jpl/src/c/cores/stressbalance_core.cpp

    r25945 r26155  
    1919        bool       dakota_analysis,control_analysis;
    2020        int        domaintype;
    21         bool       isSIA,isSSA,isL1L2,isHO,isFS,isNitsche;
     21        bool       isSIA,isSSA,isL1L2,isMLHO,isHO,isFS,isNitsche;
    2222        bool       save_results;
    2323        int        solution_type;
     
    3131        femmodel->parameters->FindParam(&isSSA,FlowequationIsSSAEnum);
    3232        femmodel->parameters->FindParam(&isL1L2,FlowequationIsL1L2Enum);
     33        femmodel->parameters->FindParam(&isMLHO,FlowequationIsMLHOEnum);
    3334        femmodel->parameters->FindParam(&isHO,FlowequationIsHOEnum);
    3435        femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
     
    7475
    7576        /*Compute stressbalance for SSA L1L2 HO and FS*/
    76         if(isSSA || isL1L2 || isHO || isFS){
     77        if(isSSA || isL1L2 || isMLHO || isHO || isFS){
    7778                analysis = new StressbalanceAnalysis();
    7879                analysis->Core(femmodel);
     
    8182
    8283        /*Compute vertical velocities*/
    83         if (domaintype==Domain3DEnum && (isSIA || isSSA || isL1L2 || isHO)){
     84        if (domaintype==Domain3DEnum && (isSIA || isSSA || isL1L2 || isMLHO || isHO)){
    8485
    8586                /*We need basal melt rates for vertical velocity*/
  • issm/trunk-jpl/src/c/shared/Enum/Enum.vim

    r26126 r26155  
    936936syn keyword cConstant VelEnum
    937937syn keyword cConstant VxAverageEnum
     938syn keyword cConstant VxBaseEnum
    938939syn keyword cConstant VxEnum
    939940syn keyword cConstant VxMeshEnum
    940941syn keyword cConstant VxObsEnum
    941942syn keyword cConstant VyAverageEnum
     943syn keyword cConstant VyBaseEnum
    942944syn keyword cConstant VyEnum
    943945syn keyword cConstant VyMeshEnum
     
    14501452syn keyword cType Cfsurfacesquare
    14511453syn keyword cType Channel
     1454syn keyword cType classes
    14521455syn keyword cType Constraint
    14531456syn keyword cType Constraints
     
    14561459syn keyword cType ControlInput
    14571460syn keyword cType Covertree
     1461syn keyword cType DatasetInput
    14581462syn keyword cType DataSetParam
    1459 syn keyword cType DatasetInput
    14601463syn keyword cType Definition
    14611464syn keyword cType DependentObject
     
    14701473syn keyword cType ElementInput
    14711474syn keyword cType ElementMatrix
     1475syn keyword cType Elements
    14721476syn keyword cType ElementVector
    1473 syn keyword cType Elements
    14741477syn keyword cType ExponentialVariogram
    14751478syn keyword cType ExternalResult
     
    14781481syn keyword cType Friction
    14791482syn keyword cType Gauss
     1483syn keyword cType GaussianVariogram
     1484syn keyword cType gaussobjects
    14801485syn keyword cType GaussPenta
    14811486syn keyword cType GaussSeg
    14821487syn keyword cType GaussTetra
    14831488syn keyword cType GaussTria
    1484 syn keyword cType GaussianVariogram
    14851489syn keyword cType GenericExternalResult
    14861490syn keyword cType GenericOption
     
    14971501syn keyword cType IssmDirectApplicInterface
    14981502syn keyword cType IssmParallelDirectApplicInterface
     1503syn keyword cType krigingobjects
    14991504syn keyword cType Load
    15001505syn keyword cType Loads
     
    15071512syn keyword cType Matice
    15081513syn keyword cType Matlitho
     1514syn keyword cType matrixobjects
    15091515syn keyword cType MatrixParam
    15101516syn keyword cType Misfit
     
    15191525syn keyword cType Observations
    15201526syn keyword cType Option
     1527syn keyword cType Options
    15211528syn keyword cType OptionUtilities
    1522 syn keyword cType Options
    15231529syn keyword cType Param
    15241530syn keyword cType Parameters
     
    15341540syn keyword cType Regionaloutput
    15351541syn keyword cType Results
     1542syn keyword cType Riftfront
    15361543syn keyword cType RiftStruct
    1537 syn keyword cType Riftfront
    15381544syn keyword cType SealevelMasks
    15391545syn keyword cType Seg
    15401546syn keyword cType SegInput
     1547syn keyword cType Segment
    15411548syn keyword cType SegRef
    1542 syn keyword cType Segment
    15431549syn keyword cType SpcDynamic
    15441550syn keyword cType SpcStatic
     
    15591565syn keyword cType Vertex
    15601566syn keyword cType Vertices
    1561 syn keyword cType classes
    1562 syn keyword cType gaussobjects
    1563 syn keyword cType krigingobjects
    1564 syn keyword cType matrixobjects
    15651567syn keyword cType AdjointBalancethickness2Analysis
    15661568syn keyword cType AdjointBalancethicknessAnalysis
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r26126 r26155  
    933933        VelEnum,
    934934        VxAverageEnum,
     935        VxBaseEnum,
    935936        VxEnum,
    936937        VxMeshEnum,
    937938        VxObsEnum,
    938939        VyAverageEnum,
     940        VyBaseEnum,
    939941        VyEnum,
    940942        VyMeshEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r26126 r26155  
    938938                case VelEnum : return "Vel";
    939939                case VxAverageEnum : return "VxAverage";
     940                case VxBaseEnum : return "VxBase";
    940941                case VxEnum : return "Vx";
    941942                case VxMeshEnum : return "VxMesh";
    942943                case VxObsEnum : return "VxObs";
    943944                case VyAverageEnum : return "VyAverage";
     945                case VyBaseEnum : return "VyBase";
    944946                case VyEnum : return "Vy";
    945947                case VyMeshEnum : return "VyMesh";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r26126 r26155  
    959959              else if (strcmp(name,"Vel")==0) return VelEnum;
    960960              else if (strcmp(name,"VxAverage")==0) return VxAverageEnum;
     961              else if (strcmp(name,"VxBase")==0) return VxBaseEnum;
    961962              else if (strcmp(name,"Vx")==0) return VxEnum;
    962963              else if (strcmp(name,"VxMesh")==0) return VxMeshEnum;
    963964              else if (strcmp(name,"VxObs")==0) return VxObsEnum;
    964965              else if (strcmp(name,"VyAverage")==0) return VyAverageEnum;
     966              else if (strcmp(name,"VyBase")==0) return VyBaseEnum;
    965967              else if (strcmp(name,"Vy")==0) return VyEnum;
    966968              else if (strcmp(name,"VyMesh")==0) return VyMeshEnum;
     
    996998              else if (strcmp(name,"Outputdefinition22")==0) return Outputdefinition22Enum;
    997999              else if (strcmp(name,"Outputdefinition23")==0) return Outputdefinition23Enum;
    998               else if (strcmp(name,"Outputdefinition24")==0) return Outputdefinition24Enum;
    999               else if (strcmp(name,"Outputdefinition25")==0) return Outputdefinition25Enum;
    10001000         else stage=9;
    10011001   }
    10021002   if(stage==9){
    1003               if (strcmp(name,"Outputdefinition26")==0) return Outputdefinition26Enum;
     1003              if (strcmp(name,"Outputdefinition24")==0) return Outputdefinition24Enum;
     1004              else if (strcmp(name,"Outputdefinition25")==0) return Outputdefinition25Enum;
     1005              else if (strcmp(name,"Outputdefinition26")==0) return Outputdefinition26Enum;
    10041006              else if (strcmp(name,"Outputdefinition27")==0) return Outputdefinition27Enum;
    10051007              else if (strcmp(name,"Outputdefinition28")==0) return Outputdefinition28Enum;
     
    11191121              else if (strcmp(name,"CalvingHab")==0) return CalvingHabEnum;
    11201122              else if (strcmp(name,"CalvingLevermann")==0) return CalvingLevermannEnum;
    1121               else if (strcmp(name,"CalvingVonmises")==0) return CalvingVonmisesEnum;
    1122               else if (strcmp(name,"Cfdragcoeffabsgrad")==0) return CfdragcoeffabsgradEnum;
    11231123         else stage=10;
    11241124   }
    11251125   if(stage==10){
    1126               if (strcmp(name,"Cfsurfacelogvel")==0) return CfsurfacelogvelEnum;
     1126              if (strcmp(name,"CalvingVonmises")==0) return CalvingVonmisesEnum;
     1127              else if (strcmp(name,"Cfdragcoeffabsgrad")==0) return CfdragcoeffabsgradEnum;
     1128              else if (strcmp(name,"Cfsurfacelogvel")==0) return CfsurfacelogvelEnum;
    11271129              else if (strcmp(name,"Cfsurfacesquare")==0) return CfsurfacesquareEnum;
    11281130              else if (strcmp(name,"Channel")==0) return ChannelEnum;
     
    12421244              else if (strcmp(name,"IntParam")==0) return IntParamEnum;
    12431245              else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
    1244               else if (strcmp(name,"Inputs")==0) return InputsEnum;
    1245               else if (strcmp(name,"Internal")==0) return InternalEnum;
    12461246         else stage=11;
    12471247   }
    12481248   if(stage==11){
    1249               if (strcmp(name,"Intersect")==0) return IntersectEnum;
     1249              if (strcmp(name,"Inputs")==0) return InputsEnum;
     1250              else if (strcmp(name,"Internal")==0) return InternalEnum;
     1251              else if (strcmp(name,"Intersect")==0) return IntersectEnum;
    12501252              else if (strcmp(name,"InversionVzObs")==0) return InversionVzObsEnum;
    12511253              else if (strcmp(name,"J")==0) return JEnum;
     
    13651367              else if (strcmp(name,"SMBd18opdd")==0) return SMBd18opddEnum;
    13661368              else if (strcmp(name,"SMBforcing")==0) return SMBforcingEnum;
    1367               else if (strcmp(name,"SMBgcm")==0) return SMBgcmEnum;
    1368               else if (strcmp(name,"SMBgemb")==0) return SMBgembEnum;
    13691369         else stage=12;
    13701370   }
    13711371   if(stage==12){
    1372               if (strcmp(name,"SMBgradients")==0) return SMBgradientsEnum;
     1372              if (strcmp(name,"SMBgcm")==0) return SMBgcmEnum;
     1373              else if (strcmp(name,"SMBgemb")==0) return SMBgembEnum;
     1374              else if (strcmp(name,"SMBgradients")==0) return SMBgradientsEnum;
    13731375              else if (strcmp(name,"SMBgradientscomponents")==0) return SMBgradientscomponentsEnum;
    13741376              else if (strcmp(name,"SMBgradientsela")==0) return SMBgradientselaEnum;
Note: See TracChangeset for help on using the changeset viewer.