Changeset 25239


Ignore:
Timestamp:
07/09/20 09:59:15 (5 years ago)
Author:
Mathieu Morlighem
Message:

CHG: getting rid for input averaging at each spawnbasal element call

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

Legend:

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

    r25118 r25239  
    12911291                case Domain3DEnum:
    12921292                        if(!element->IsOnBase()) return NULL;
    1293                         basalelement = element->SpawnBasalElement();
     1293                        basalelement = element->SpawnBasalElement(true);
    12941294                        break;
    12951295                default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
     
    13771377                case Domain3DEnum: case Domain2DverticalEnum:
    13781378                        if(!element->IsOnBase()) return NULL;
    1379                         basalelement = element->SpawnBasalElement();
     1379                        basalelement = element->SpawnBasalElement(true);
    13801380                        break;
    13811381                default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
     
    20752075
    20762076        /*Get element on base*/
    2077         Element* basalelement = element->GetBasalElement()->SpawnBasalElement();
     2077        Element* basalelement = element->GetBasalElement()->SpawnBasalElement(true);
    20782078
    20792079        /*Fetch number of nodes and dof for this finite element*/
     
    62686268        /*Find penta on bed as this is a SSA elements: */
    62696269        Element* pentabase=element->GetBasalElement();
    6270         Element* basaltria=pentabase->SpawnBasalElement();
     6270        Element* basaltria=pentabase->SpawnBasalElement(true);
    62716271
    62726272        /*Initialize Element matrix*/
  • issm/trunk-jpl/src/c/classes/Elements/Element.h

    r25066 r25239  
    338338                virtual void       SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Materials* materials,Parameters* parameters)=0;
    339339                virtual void       SetTemporaryElementType(int element_type_in)=0;
    340            virtual Element*   SpawnBasalElement(void)=0;
     340           virtual Element*   SpawnBasalElement(bool depthaverage_materials=false)=0;
    341341                virtual Element*   SpawnTopElement(void)=0;
    342342                virtual IssmDouble StabilizationParameter(IssmDouble u, IssmDouble v, IssmDouble w, IssmDouble diameter, IssmDouble kappa)=0;
  • issm/trunk-jpl/src/c/classes/Elements/Penta.cpp

    r25093 r25239  
    34213421}
    34223422/*}}}*/
    3423 Element*   Penta::SpawnBasalElement(void){/*{{{*/
     3423Element*   Penta::SpawnBasalElement(bool depthaverage_materials){/*{{{*/
    34243424
    34253425        _assert_(this->IsOnBase());
    34263426
    3427         switch(this->material->ObjectEnum()){
    3428                 case MaticeEnum:
    3429                         this->InputDepthAverageAtBase(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
    3430                         if(this->material->IsDamage())this->InputDepthAverageAtBase(DamageDEnum,DamageDbarEnum);
    3431                         if(this->material->IsEnhanced())this->InputDepthAverageAtBase(MaterialsRheologyEEnum,MaterialsRheologyEbarEnum);
    3432                         break;
    3433                 case MatestarEnum:
    3434                         this->InputDepthAverageAtBase(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
    3435                         this->InputDepthAverageAtBase(MaterialsRheologyEcEnum,MaterialsRheologyEcbarEnum);
    3436                         this->InputDepthAverageAtBase(MaterialsRheologyEsEnum,MaterialsRheologyEsbarEnum);
    3437                         break;
    3438                 default:
    3439                         _error_("not supported yet");
    3440         }
    3441         if(this->GetInput2(VxEnum)) this->InputDepthAverageAtBase(VxEnum,VxAverageEnum);
    3442         if(this->GetInput2(VyEnum)) this->InputDepthAverageAtBase(VyEnum,VyAverageEnum);
    3443         if(this->GetInput2(CalvingratexEnum)) this->InputDepthAverageAtBase(CalvingratexEnum,CalvingratexAverageEnum);
    3444         if(this->GetInput2(CalvingrateyEnum)) this->InputDepthAverageAtBase(CalvingrateyEnum,CalvingrateyAverageEnum);
    3445 
    3446         Tria* tria=(Tria*)SpawnTria(0,1,2);
    3447 
    3448         return tria;
     3427        if(depthaverage_materials){
     3428                switch(this->material->ObjectEnum()){
     3429                        case MaticeEnum:
     3430                                this->InputDepthAverageAtBase(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
     3431                                if(this->material->IsDamage())this->InputDepthAverageAtBase(DamageDEnum,DamageDbarEnum);
     3432                                if(this->material->IsEnhanced())this->InputDepthAverageAtBase(MaterialsRheologyEEnum,MaterialsRheologyEbarEnum);
     3433                                break;
     3434                        case MatestarEnum:
     3435                                this->InputDepthAverageAtBase(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
     3436                                this->InputDepthAverageAtBase(MaterialsRheologyEcEnum,MaterialsRheologyEcbarEnum);
     3437                                this->InputDepthAverageAtBase(MaterialsRheologyEsEnum,MaterialsRheologyEsbarEnum);
     3438                                break;
     3439                        default:
     3440                                _error_("not supported yet");
     3441                }
     3442        }
     3443
     3444        return SpawnTria(0,1,2);
    34493445}
    34503446/*}}}*/
     
    34523448
    34533449        _assert_(this->IsOnSurface());
    3454 
    3455         Tria* tria=(Tria*)SpawnTria(3,4,5);
    3456 
    3457         return tria;
     3450        return SpawnTria(3,4,5);
    34583451}
    34593452/*}}}*/
  • issm/trunk-jpl/src/c/classes/Elements/Penta.h

    r25066 r25239  
    171171                void           SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Materials* materials,Parameters* parameters);
    172172                void           SetTemporaryElementType(int element_type_in);
    173            Element*       SpawnBasalElement(void);
     173           Element*       SpawnBasalElement(bool depthaverage_materials);
    174174                Element*       SpawnTopElement(void);
    175175                Tria*            SpawnTria(int index1,int index2,int index3);
  • issm/trunk-jpl/src/c/classes/Elements/Seg.h

    r25066 r25239  
    138138                void        SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Materials* materials,Parameters* parameters){_error_("not implemented yet");};
    139139                void        SetTemporaryElementType(int element_type_in){_error_("not implemented yet");};
    140            Element*    SpawnBasalElement(void){_error_("not implemented yet");};
     140           Element*    SpawnBasalElement(bool depthaverage_materials){_error_("not implemented yet");};
    141141                Element*    SpawnTopElement(void){_error_("not implemented yet");};
    142142                IssmDouble  StabilizationParameter(IssmDouble u, IssmDouble v, IssmDouble w, IssmDouble diameter, IssmDouble kappa){_error_("not implemented yet");};
  • issm/trunk-jpl/src/c/classes/Elements/Tetra.cpp

    r24861 r25239  
    769769}
    770770/*}}}*/
    771 Element* Tetra::SpawnBasalElement(void){/*{{{*/
     771Element* Tetra::SpawnBasalElement(bool depthaverage_materials){/*{{{*/
    772772
    773773        _assert_(HasFaceOnBase());
  • issm/trunk-jpl/src/c/classes/Elements/Tetra.h

    r25066 r25239  
    144144                void        SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Materials* materials,Parameters* parameters);
    145145                void        SetTemporaryElementType(int element_type_in){_error_("not implemented yet");};
    146            Element*    SpawnBasalElement(void);
     146           Element*    SpawnBasalElement(bool depthaverage_materials);
    147147                Element*    SpawnTopElement(void);
    148148                Tria*       SpawnTria(int index1,int index2,int index3);
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r25235 r25239  
    40304030}
    40314031/*}}}*/
    4032 Element*   Tria::SpawnBasalElement(void){/*{{{*/
     4032Element*   Tria::SpawnBasalElement(bool depthaverage_materials){/*{{{*/
    40334033
    40344034        int index1,index2;
  • issm/trunk-jpl/src/c/classes/Elements/Tria.h

    r25150 r25239  
    132132                void        SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index);
    133133                void        SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Materials* materials,Parameters* parameters);
    134            Element*    SpawnBasalElement(void);
     134           Element*    SpawnBasalElement(bool depthaverage_materials);
    135135                Element*    SpawnTopElement(void);
    136136                void                    StrainRateparallel();
  • issm/trunk-jpl/src/c/cores/balancethickness_core.cpp

    r23380 r25239  
    1212void balancethickness_core(FemModel* femmodel){
    1313
    14         /*parameters: */
    15         bool save_results;
    16 
    17         /*activate formulation: */
    18         femmodel->SetCurrentConfiguration(BalancethicknessAnalysisEnum);
    1914
    2015        /*recover parameters: */
     16        bool save_results;
    2117        femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
    2218
     19        /*Depth average velocities if necessary*/
     20        int domaintype;
     21        femmodel->parameters->FindParam(&domaintype,DomainTypeEnum);
     22        if(domaintype!=Domain2DhorizontalEnum){
     23                femmodel->parameters->SetParam(VxEnum,InputToDepthaverageInEnum);
     24                femmodel->parameters->SetParam(VxAverageEnum,InputToDepthaverageOutEnum);
     25                depthaverage_core(femmodel);
     26                if(domaintype==Domain3DEnum){
     27                        femmodel->parameters->SetParam(VyEnum,InputToDepthaverageInEnum);
     28                        femmodel->parameters->SetParam(VyAverageEnum,InputToDepthaverageOutEnum);
     29                        depthaverage_core(femmodel);
     30                }
     31        }
     32
    2333        if(VerboseSolution()) _printf0_("   call computational core:\n");
     34        femmodel->SetCurrentConfiguration(BalancethicknessAnalysisEnum);
    2435        solutionsequence_linear(femmodel);
    2536
  • issm/trunk-jpl/src/c/cores/movingfront_core.cpp

    r24040 r25239  
    3434
    3535        if(!ismovingfront) return;
     36
     37        /* Many calving parameterizations and the level set equations require depth
     38         * average velocities so do this calculation once for all here */
     39        if(domaintype!=Domain2DhorizontalEnum){
     40                femmodel->parameters->SetParam(VxEnum,InputToDepthaverageInEnum);
     41                femmodel->parameters->SetParam(VxAverageEnum,InputToDepthaverageOutEnum);
     42                depthaverage_core(femmodel);
     43                if(domaintype==Domain3DEnum){
     44                        femmodel->parameters->SetParam(VyEnum,InputToDepthaverageInEnum);
     45                        femmodel->parameters->SetParam(VyAverageEnum,InputToDepthaverageOutEnum);
     46                        depthaverage_core(femmodel);
     47                }
     48        }
    3649
    3750        /* start the work from here */
Note: See TracChangeset for help on using the changeset viewer.