Changeset 17250


Ignore:
Timestamp:
02/10/14 15:37:11 (11 years ago)
Author:
jbondzio
Message:

BUG: minor bugs; transient coupling between stressbalance and lsm

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

Legend:

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

    r17230 r17250  
    6666        /*parameters: */
    6767        bool save_results;
    68 
    69         /* extrapolate */
    70         Analysis* analysis = new ExtrapolationAnalysis();
    71         femmodel->parameters->SetParam(VxEnum,ExtrapolationVariableEnum);
    72         analysis->Core(femmodel);
    73         delete analysis;
    7468
    7569        /*activate formulation: */
     
    165159                                /* Artificial Diffusion */
    166160                                element->ElementSizes(&hx,&hy,&hz);
    167                                 vel=sqrt(vx*vx + vy*vy );
     161                                vel=sqrt(vx*vx + vy*vy) + 1e-14;
    168162                                h=sqrt( pow(hx*vx/vel,2) + pow(hy*vy/vel,2) ); //FIXME: is this correct?
    169163
  • issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp

    r17247 r17250  
    10441044void StressbalanceAnalysis::UpdateConstraints(FemModel* femmodel){/*{{{*/
    10451045        /*Default, do nothing*/
    1046         _printf0_("   Updating active and non-active nodes in Femmodel \n");
    1047         //SetActiveNodesLSMx(femmodel->elements);
     1046        _printf0_("   Updating active and non-active nodes for StressbalanceAnalysis \n");
     1047        SetActiveNodesLSMx(femmodel->elements);
    10481048        return;
    10491049}/*}}}*/
  • issm/trunk-jpl/src/c/cores/transient_core.cpp

    r17236 r17250  
    150150                if(islevelset){
    151151                        if(VerboseSolution()) _printf0_("   computing movement of ice boundaries\n");
     152
     153                        /* extrapolate required variables */
     154                        Analysis* extanalysis = new ExtrapolationAnalysis();
     155                        int vars[2] = {VxEnum, VyEnum};
     156                        for(int iv=0;iv<2;iv++){
     157                                femmodel->parameters->SetParam(vars[iv],ExtrapolationVariableEnum);
     158                                extanalysis->Core(femmodel);
     159                        }
     160                        delete extanalysis;     
     161
    152162                        analysis = new LevelsetAnalysis();
    153163                        analysis->Core(femmodel);
    154164                        delete analysis;
     165
     166                        /* update vertices included for next calculation */
     167                        GetMaskOfIceVerticesLSMx(femmodel);
    155168                }
    156169
  • issm/trunk-jpl/src/c/modules/SetActiveNodesLSMx/SetActiveNodesLSMx.cpp

    r17249 r17250  
    1616                int         numnodes = element->GetNumberOfNodes();
    1717                IssmDouble *mask     = xNew<IssmDouble>(numnodes);
    18                 element->GetInputListOnNodes(&mask[0],IceMaskNodeActivationEnum);
    19                
     18                // include switch for elements with multiple different sets of nodes
     19                switch(element->GetElementType()){
     20                        case MINIEnum:case TaylorHoodEnum:{
     21                                Input* input=element->GetInput(IceMaskNodeActivationEnum);
     22                                if(!input) _error_("Input " << EnumToStringx(IceMaskNodeActivationEnum) << " not found in element");
     23
     24                                /* Start looping on the number of vertices: */
     25                                Gauss* gauss=element->NewGauss();
     26                                for(int iv=0;iv<element->NumberofNodesVelocity();iv++){
     27                                        gauss->GaussNode(element->VelocityInterpolation(),iv);
     28                                        input->GetInputValue(&mask[iv],gauss);
     29                                }
     30                                for(int iv=0;iv<element->NumberofNodesPressure();iv++){
     31                                        gauss->GaussNode(element->PressureInterpolation(),iv);
     32                                        input->GetInputValue(&mask[element->NumberofNodesVelocity()+iv],gauss);
     33                                }
     34                                delete gauss;
     35                                break;
     36                        }
     37                        default:
     38                                element->GetInputListOnNodes(&mask[0],IceMaskNodeActivationEnum);
     39                                break;
     40                }
     41
    2042                for(int in=0;in<numnodes;in++){
    2143                        Node* node=element->GetNode(in);
     
    3355void GetMaskOfIceVerticesLSMx(FemModel* femmodel){/*{{{*/
    3456
     57        /* Intermediaries */
     58        int i;
    3559        /*Initialize vector with number of vertices*/
    3660        int numvertices=femmodel->vertices->NumberOfVertices();
    3761        Vector<IssmDouble>* vec_mask_ice=new Vector<IssmDouble>(numvertices); //vertices that have ice at next time step
    38 
     62        for(i=0;i<numvertices;i++){
     63                vec_mask_ice->SetValue(i,0.,INS_VAL);
     64        }
    3965        /*Fill vector with values: */
    40         for(int i=0;i<femmodel->elements->Size();i++){
     66        for(i=0;i<femmodel->elements->Size();i++){
    4167                Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
    4268                SetMaskOfIceElement(vec_mask_ice, element);
Note: See TracChangeset for help on using the changeset viewer.