Changeset 18450


Ignore:
Timestamp:
08/20/14 15:01:47 (11 years ago)
Author:
Mathieu Morlighem
Message:

NEW: can now extrude from base or from top

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

Legend:

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

    r18403 r18450  
    202202        /*Intermediaries */
    203203        int         Hinterpolation;
    204         IssmDouble  vx,vy,vbar,nu,normdphi,dphi[2];
     204        IssmDouble  vx,vy,vbar,nu,normdphi,dphi[2],H;
    205205        IssmDouble* xyz_list = NULL;
    206206        int       * doflist  = NULL;
     
    233233        Input* vy_input        = element->GetInput(BalancethicknessVyObsEnum); _assert_(vy_input);
    234234        Input* nu_input        = element->GetInput(BalancethicknessNuEnum);    _assert_(nu_input);
     235        Input* thickness_input = element->GetInput(BalancethicknessThicknessObsEnum);             _assert_(thickness_input);
    235236
    236237        switch(element->GetElementType()){
     
    246247                vy_input->GetInputValue(&vy,gauss);
    247248                nu_input->GetInputValue(&nu,gauss);
     249                thickness_input->GetInputValue(&H,gauss);
    248250                potential_input->GetInputDerivativeValue(&dphi[0],xyz_list,gauss);
    249251
     
    253255
    254256                thickness_list[iv] = normdphi/vbar;
    255                 vx_list[iv]        = -1./thickness_list[iv] * dphi[0];
    256                 vy_list[iv]        = -1./thickness_list[iv] * dphi[1];
     257                vx_list[iv]        = -1./H * dphi[0];
     258                vy_list[iv]        = -1./H * dphi[1];
    257259        }
    258260        element->AddInput(ThicknessEnum,thickness_list,Hinterpolation);
  • issm/trunk-jpl/src/c/classes/Elements/Element.h

    r18385 r18450  
    220220
    221221                virtual void   Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finite_element)=0;
    222                 virtual void   InputExtrude(int input_enum)=0;
     222                virtual void   InputExtrude(int input_enum,int start)=0;
    223223                virtual void   InputUpdateFromSolutionOneDofCollapsed(IssmDouble* solution,int inputenum)=0;
    224224                virtual void   InputUpdateFromSolutionOneDof(IssmDouble* solution,int inputenum)=0;
  • issm/trunk-jpl/src/c/classes/Elements/Penta.cpp

    r18400 r18450  
    447447        this->inputs->AddInput(NewPrecipitationInput);
    448448
    449         this->InputExtrude(SurfaceforcingsMonthlytemperaturesEnum);
    450         this->InputExtrude(SurfaceforcingsPrecipitationEnum);
     449        this->InputExtrude(SurfaceforcingsMonthlytemperaturesEnum,-1);
     450        this->InputExtrude(SurfaceforcingsPrecipitationEnum,-1);
    451451
    452452        /*clean-up*/
     
    11911191}
    11921192/*}}}*/
    1193 void       Penta::InputExtrude(int enum_type){/*{{{*/
    1194 
    1195         /*Are we on the base, not on the surface?:*/
    1196         if(!IsOnBase()) return;
     1193void       Penta::InputExtrude(int enum_type,int start){/*{{{*/
     1194
     1195        _assert_(start==-1 || start==+1);
     1196
     1197        /*Are we on the the boundary we want to be?*/
     1198        if(start==-1 && !IsOnBase())    return;
     1199        if(start==+1 && !IsOnSurface()) return;
    11971200
    11981201        /*Step1: Get and Extrude original input: */
    11991202        Input* base_input=(Input*)this->inputs->GetInput(enum_type);
    12001203        if(!base_input) _error_("could not find input with enum " << EnumToStringx(enum_type));
    1201         base_input->Extrude();
     1204        base_input->Extrude(start);
    12021205
    12031206        /*Stop if there is only one layer of element*/
    1204         if(this->IsOnSurface()) return;
     1207        if(start==-1 && this->IsOnSurface()) return;
     1208        if(start==+1 && this->IsOnBase())    return;
    12051209
    12061210        /*Step 2: this input has been extruded for this element, now follow the upper element*/
    12071211        Penta* penta=this;
    12081212        for(;;){
    1209                 /* get upper Penta*/
    1210                 penta=penta->GetUpperPenta();
     1213                /*get upper/lower Penta*/
     1214                if(start==-1) penta=penta->GetUpperPenta();
     1215                else          penta=penta->GetLowerPenta();
    12111216                _assert_(penta->Id()!=this->id);
    12121217
     
    12151220                penta->inputs->AddInput((Input*)copy);
    12161221
    1217                 /*Stop if we have reached the surface*/
    1218                 if(penta->IsOnSurface()) break;
     1222                /*Stop if we have reached the surface/base*/
     1223                if(start==-1 && penta->IsOnSurface()) break;
     1224                if(start==+1 && penta->IsOnBase())    break;
    12191225        }
    12201226}
     
    17851791   this->inputs->AddInput(new PentaInput(SurfaceforcingsMassBalanceEnum,&agd[0],P1Enum));
    17861792   //this->inputs->AddInput(new PentaVertexInput(ThermalSpcTemperatureEnum,&Tsurf[0]));
    1787    this->InputExtrude(SurfaceforcingsMassBalanceEnum);
     1793   this->InputExtrude(SurfaceforcingsMassBalanceEnum,-1);
    17881794
    17891795        /*clean-up*/
     
    28602866
    28612867                if(control_type[i]==MaterialsRheologyBbarEnum){
    2862                         this->InputExtrude(MaterialsRheologyBEnum);
     2868                        this->InputExtrude(MaterialsRheologyBEnum,-1);
    28632869                }
    28642870                else if(control_type[i]==DamageDbarEnum){
    2865                         this->InputExtrude(DamageDEnum);
     2871                        this->InputExtrude(DamageDEnum,-1);
    28662872                }
    28672873        }
     
    29302936
    29312937        if(control_init==MaterialsRheologyBbarEnum){
    2932                 this->InputExtrude(control_enum);
     2938                this->InputExtrude(control_enum,-1);
    29332939        }
    29342940        if(control_init==DamageDbarEnum){
    2935                 this->InputExtrude(control_enum);
     2941                this->InputExtrude(control_enum,-1);
    29362942        }
    29372943}
     
    31713177        }
    31723178        this->inputs->AddInput(new PentaInput(MaskGroundediceLevelsetEnum,&phi[0],P1Enum));
    3173         this->InputExtrude(MaskGroundediceLevelsetEnum);
     3179        this->InputExtrude(MaskGroundediceLevelsetEnum,-1);
    31743180
    31753181        /*Update inputs*/
     
    31783184
    31793185        /*Extrude inputs*/
    3180         this->InputExtrude(SurfaceEnum);
    3181         this->InputExtrude(BaseEnum);
     3186        this->InputExtrude(SurfaceEnum,-1);
     3187        this->InputExtrude(BaseEnum,-1);
    31823188}
    31833189/*}}}*/
  • issm/trunk-jpl/src/c/classes/Elements/Penta.h

    r18293 r18450  
    144144                void           GetInputValue(IssmDouble* pvalue,Node* node,int enumtype);
    145145                Node*          GetNode(int node_number);
    146                 void             InputExtrude(int enum_type);
     146                void             InputExtrude(int enum_type,int start);
    147147                void           InputUpdateFromSolutionOneDof(IssmDouble* solutiong,int enum_type);
    148148                void           InputUpdateFromSolutionOneDofCollapsed(IssmDouble* solutiong,int enum_type);
  • issm/trunk-jpl/src/c/classes/Elements/Seg.h

    r18293 r18450  
    130130                void        GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution,int enum_type){_error_("not implemented yet");};
    131131                void        InputDepthAverageAtBase(int enum_type,int average_enum_type){_error_("not implemented yet");};
    132                 void        InputExtrude(int enum_type){_error_("not implemented"); /*For penta only*/};
     132                void        InputExtrude(int enum_type,int start){_error_("not implemented"); /*For penta only*/};
    133133                void        InputScale(int enum_type,IssmDouble scale_factor){_error_("not implemented yet");};
    134134                void        MaterialUpdateFromTemperature(void){_error_("not implemented yet");};
  • issm/trunk-jpl/src/c/classes/Elements/Tetra.h

    r18293 r18450  
    134134                void        GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution,int enum_type){_error_("not implemented yet");};
    135135                void        InputDepthAverageAtBase(int enum_type,int average_enum_type){_error_("not implemented yet");};
    136                 void        InputExtrude(int enum_type){_error_("not implemented"); /*For penta only*/};
     136                void        InputExtrude(int enum_type,int start){_error_("not implemented"); /*For penta only*/};
    137137                void        InputScale(int enum_type,IssmDouble scale_factor){_error_("not implemented yet");};
    138138                void        MaterialUpdateFromTemperature(void){_error_("not implemented yet");};
  • issm/trunk-jpl/src/c/classes/Elements/Tria.h

    r18293 r18450  
    8686                void        GetVerticesCoordinatesTop(IssmDouble** pxyz_list);
    8787                void        InputDepthAverageAtBase(int enum_type,int average_enum_type);
    88                 void        InputExtrude(int enum_type){_error_("not implemented"); /*For penta only*/};
     88                void        InputExtrude(int enum_type,int start){_error_("not implemented"); /*For penta only*/};
    8989                void        InputScale(int enum_type,IssmDouble scale_factor);
    9090                void        MaterialUpdateFromTemperature(void){_error_("not implemented yet");};
  • issm/trunk-jpl/src/c/classes/Inputs/BoolInput.cpp

    r18064 r18450  
    133133}
    134134/*}}}*/
    135 void BoolInput::Extrude(void){/*{{{*/
     135void BoolInput::Extrude(int start){/*{{{*/
    136136
    137137        /*do nothing*/
  • issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h

    r17514 r18450  
    6464                void AXPY(Input* xinput,IssmDouble scalar);
    6565                void Constrain(IssmDouble cm_min, IssmDouble cm_max){_error_("Constrain not implemented for booleans");};
    66                 void Extrude(void);
     66                void Extrude(int start);
    6767                void VerticallyIntegrate(Input* thickness_input){_error_("not supported yet");};
    6868                void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist);
  • issm/trunk-jpl/src/c/classes/Inputs/ControlInput.cpp

    r18118 r18450  
    121121           values->Constrain(min,max);
    122122}/*}}}*/
    123 void ControlInput::Extrude(void){/*{{{*/
    124         values->Extrude();
    125         savedvalues->Extrude();
     123void ControlInput::Extrude(int start){/*{{{*/
     124        values->Extrude(start);
     125        savedvalues->Extrude(start);
    126126        //gradient->Extrude();
    127127}/*}}}*/
  • issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h

    r18118 r18450  
    7272                IssmDouble Min(void);
    7373                IssmDouble MinAbs(void){_error_("not implemented yet");};
    74                 void Extrude(void);
     74                void Extrude(int start);
    7575                void VerticallyIntegrate(Input* thickness_input);
    7676                void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist,const char* data);
  • issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h

    r17514 r18450  
    6868                IssmDouble Min(void){_error_("not implemented yet");};
    6969                IssmDouble MinAbs(void){_error_("not implemented yet");};
    70                 void Extrude(void){_error_("not implemented yet");};
     70                void Extrude(int start){_error_("not implemented yet");};
    7171                void VerticallyIntegrate(Input* thickness_input){_error_("not implemented yet");};
    7272                void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist){_error_("not implemented yet");};
  • issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h

    r17514 r18450  
    6767                IssmDouble Min(void);
    6868                IssmDouble MinAbs(void);
    69                 void Extrude(void){_error_("not supported yet");};
     69                void Extrude(int start){_error_("not supported yet");};
    7070                void VerticallyIntegrate(Input* thickness_input);
    7171                void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist);
  • issm/trunk-jpl/src/c/classes/Inputs/Input.h

    r17514 r18450  
    5151                virtual void   Constrain(IssmDouble cm_min, IssmDouble cm_max)=0;
    5252                virtual void   VerticallyIntegrate(Input* thickness_input)=0;
    53                 virtual void   Extrude()=0;
     53                virtual void   Extrude(int start)=0;
    5454                virtual void   GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist)=0;
    5555
  • issm/trunk-jpl/src/c/classes/Inputs/IntInput.h

    r17514 r18450  
    6868                IssmDouble Min(void){_error_("Min not implemented for integers");};
    6969                IssmDouble MinAbs(void){_error_("Min not implemented for integers");};
    70                 void Extrude(void){_error_("not supported yet");};
     70                void Extrude(int start){_error_("not supported yet");};
    7171                void VerticallyIntegrate(Input* thickness_input){_error_("not supported yet");};
    7272                void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist);
  • issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp

    r18237 r18450  
    291291}
    292292/*}}}*/
    293 void PentaInput::Extrude(void){/*{{{*/
     293void PentaInput::Extrude(int start){/*{{{*/
    294294
    295295        switch(this->interpolation_type){
    296296                case P1Enum:
    297                         for(int i=0;i<3;i++) this->values[3+i]=this->values[i];
     297                        if(start==-1){
     298                                for(int i=0;i<3;i++) this->values[3+i]=this->values[i];
     299                        }
     300                        else{
     301                                for(int i=3;i<6;i++) this->values[i]  =this->values[3+i];
     302                        }
    298303                        break;
    299304                default:
  • issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h

    r18078 r18450  
    6868                IssmDouble Min(void);
    6969                IssmDouble MinAbs(void);
    70                 void Extrude(void);
     70                void Extrude(int start);
    7171                void VerticallyIntegrate(Input* thickness_input);
    7272                void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist);
  • issm/trunk-jpl/src/c/classes/Inputs/SegInput.h

    r18078 r18450  
    6969                IssmDouble Min(void);
    7070                IssmDouble MinAbs(void){_error_("not implemented yet");};
    71                 void Extrude(void){_error_("not supported yet");};
     71                void Extrude(int start){_error_("not supported yet");};
    7272                void VerticallyIntegrate(Input* thickness_input){_error_("not supported yet");};
    7373                void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist){_error_("not implemented yet");};
  • issm/trunk-jpl/src/c/classes/Inputs/TetraInput.h

    r18078 r18450  
    6969                IssmDouble Min(void);
    7070                IssmDouble MinAbs(void);
    71                 void Extrude(void){_error_("not supported yet");};
     71                void Extrude(int start){_error_("not supported yet");};
    7272                void VerticallyIntegrate(Input* thickness_input){_error_("not supported yet");};
    7373                void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist);
  • issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp

    r18237 r18450  
    345345}
    346346/*}}}*/
    347 void TransientInput::Extrude(void){/*{{{*/
     347void TransientInput::Extrude(int start){/*{{{*/
    348348
    349349        for(int i=0;i<this->numtimesteps;i++){
    350                 ((Input*)this->inputs->GetObjectByOffset(i))->Extrude();
     350                ((Input*)this->inputs->GetObjectByOffset(i))->Extrude(start);
    351351        }
    352352}
  • issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h

    r17514 r18450  
    7373                IssmDouble Min(void);
    7474                IssmDouble MinAbs(void);
    75                 void Extrude(void);
     75                void Extrude(int start);
    7676                void VerticallyIntegrate(Input* thickness_forcing){_error_("not supported yet");};
    7777                void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist);
  • issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h

    r18078 r18450  
    6969                IssmDouble Min(void);
    7070                IssmDouble MinAbs(void);
    71                 void Extrude(void){_error_("not supported yet");};
     71                void Extrude(int start){_error_("not supported yet");};
    7272                void VerticallyIntegrate(Input* thickness_input){_error_("not supported yet");};
    7373                void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist);
  • issm/trunk-jpl/src/c/cores/extrudefrombase_core.cpp

    r17887 r18450  
    2727        if(elementtype==PentaEnum){
    2828                int inputenum; femmodel->parameters->FindParam(&inputenum,InputToExtrudeEnum);
    29                 InputExtrudex(femmodel,inputenum);
     29                InputExtrudex(femmodel,inputenum,-1);
    3030        }
    3131        else{
  • issm/trunk-jpl/src/c/modules/InputExtrudex/InputExtrudex.cpp

    r17862 r18450  
    88#include "../../toolkits/toolkits.h"
    99
    10 void InputExtrudex(FemModel* femmodel,int input_enum){
     10void InputExtrudex(FemModel* femmodel,int input_enum,int start){
    1111        for(int i=0;i<femmodel->elements->Size();i++){
    1212                Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
    13                 element->InputExtrude(input_enum);
     13                element->InputExtrude(input_enum,start);
    1414        }
    1515}
  • issm/trunk-jpl/src/c/modules/InputExtrudex/InputExtrudex.h

    r17862 r18450  
    99
    1010/* local prototypes: */
    11 void InputExtrudex(FemModel* femmodel,int input_enum);
     11void InputExtrudex(FemModel* femmodel,int input_enum,int start);
    1212
    1313#endif  /* _INPUTDUPLICATEX_H */
Note: See TracChangeset for help on using the changeset viewer.