Changeset 17274


Ignore:
Timestamp:
02/13/14 11:29:04 (11 years ago)
Author:
jbondzio
Message:

CHG: slope of levelset function for derivation of normal is now calculated once before extrapolation, since calculation in element can lead to normal = 0 for equal values on nodes.

Location:
issm/trunk-jpl/src
Files:
3 added
11 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified issm/trunk-jpl/src/c/Makefile.am

    r17241 r17274  
    421421                                        ./cores/meshdeformation_core.cpp\
    422422                                        ./cores/damage_core.cpp\
     423                                        ./cores/levelsetfunctionslope_core.cpp\
    423424                                        ./analyses/DamageEvolutionAnalysis.cpp\
    424425                                        ./solutionsequences/solutionsequence_damage_nonlinear.cpp\
  • TabularUnified issm/trunk-jpl/src/c/analyses/ExtrapolationAnalysis.cpp

    r17261 r17274  
    7474        int        i,row,col,stabilization;
    7575        IssmDouble Jdet,D_scalar,h;
    76         IssmDouble dlevelset[dim],normal[dim];
    77         IssmDouble norm_dlevelset;
     76        IssmDouble dlsf[dim],normal[dim];
     77        IssmDouble norm_dlsf;
    7878        IssmDouble hx,hy,hz,kappa;
    7979        IssmDouble* xyz_list = NULL;
     
    8989
    9090        /*Retrieve all inputs and parameters*/
    91         Input* levelset_input=element->GetInput(MaskIceLevelsetEnum); _assert_(levelset_input);
     91        Input* lsf_slopex_input=element->GetInput(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input);
     92        Input* lsf_slopey_input=element->GetInput(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input);
    9293        element->GetVerticesCoordinates(&xyz_list);
    9394        h = element->CharacteristicLength();
     
    102103                GetBprime(Bprime,element,xyz_list,gauss);
    103104
    104                 /* Get normal on node */
    105                 levelset_input->GetInputDerivativeValue(&dlevelset[0],xyz_list,gauss);
    106                 norm_dlevelset=0.;
    107                 for(i=0;i<dim;i++) norm_dlevelset+=dlevelset[i]*dlevelset[i];
    108                 norm_dlevelset=sqrt(norm_dlevelset)+1.e-14;
    109                 for(i=0;i<dim;i++) normal[i]=dlevelset[i]/norm_dlevelset;
    110 
     105                /* Get normal on ice boundary */
     106                lsf_slopex_input->GetInputValue(&dlsf[0],gauss);
     107                lsf_slopey_input->GetInputValue(&dlsf[1],gauss);
     108                norm_dlsf=0.;
     109                for(i=0;i<dim;i++) norm_dlsf+=dlsf[i]*dlsf[i];
     110                norm_dlsf=sqrt(norm_dlsf); _assert_(norm_dlsf>0.);
     111                for(i=0;i<dim;i++)
     112                        normal[i]=dlsf[i]/norm_dlsf;
     113               
    111114                D_scalar=gauss->weight*Jdet;
    112115
  • TabularUnified issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp

    r17212 r17274  
    169169                case BedSlopeXEnum:     input2 = basalelement->GetInput(BedEnum);     _assert_(input2); break;
    170170                case BedSlopeYEnum:     input2 = basalelement->GetInput(BedEnum);     _assert_(input2); break;
     171                case LevelsetfunctionSlopeXEnum: input2 = basalelement->GetInput(MaskIceLevelsetEnum);     _assert_(input2); break;
     172                case LevelsetfunctionSlopeYEnum: input2 = basalelement->GetInput(MaskIceLevelsetEnum);     _assert_(input2); break;
    171173                default: input = element->GetInput(input_enum);
    172174        }
     
    182184                if(input2) input2->GetInputDerivativeValue(&slopes[0],xyz_list,gauss);
    183185                switch(input_enum){
    184                         case SurfaceSlopeXEnum: case BedSlopeXEnum: value = slopes[0]; break;
    185                         case SurfaceSlopeYEnum: case BedSlopeYEnum: value = slopes[1]; break;
     186                        case SurfaceSlopeXEnum: case BedSlopeXEnum: case LevelsetfunctionSlopeXEnum: value = slopes[0]; break;
     187                        case SurfaceSlopeYEnum: case BedSlopeYEnum: case LevelsetfunctionSlopeYEnum: value = slopes[1]; break;
    186188                        default: input->GetInputValue(&value,gauss);
    187189                }
  • TabularUnified issm/trunk-jpl/src/c/classes/Elements/Penta.cpp

    r17267 r17274  
    19771977                                name==MaskIceLevelsetEnum ||
    19781978                                name==IceMaskNodeActivationEnum ||
     1979                                name==LevelsetfunctionSlopeXEnum ||
     1980                                name==LevelsetfunctionSlopeYEnum ||
    19791981                                name==GradientEnum ||
    19801982                                name==OldGradientEnum  ||
  • TabularUnified issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r17261 r17274  
    910910        }
    911911
    912         if(nrfrontnodes!=2){
    913                 _printf0_("in elt nr: " << this->Id() << "\n");
    914                 _printf0_("nrfrontnodes: " << nrfrontnodes << "\n");
    915                 for(i=0;i<NUMVERTICES;i++){
    916                         _printf_("levelsetfunction[" << i << "]=" << levelset[i] << "; indicesfront: " << indicesfront[i] << ";\n");
    917                 }
    918         }
    919912        _assert_(nrfrontnodes==2);
    920913
     
    16221615                                name==MaskIceLevelsetEnum ||
    16231616                                name==IceMaskNodeActivationEnum ||
     1617                                name==LevelsetfunctionSlopeXEnum ||
     1618                                name==LevelsetfunctionSlopeYEnum ||
    16241619                                name==SurfaceSlopeXEnum ||
    16251620                                name==SurfaceSlopeYEnum ||
  • TabularUnified issm/trunk-jpl/src/c/cores/cores.h

    r16534 r17274  
    2424void thermal_core(FemModel* femmodel);
    2525void surfaceslope_core(FemModel* femmodel);
     26void levelsetfunctionslope_core(FemModel* femmodel);
    2627void bedslope_core(FemModel* femmodel);
    2728void meshdeformation_core(FemModel* femmodel);
  • TabularUnified issm/trunk-jpl/src/c/cores/transient_core.cpp

    r17270 r17274  
    125125                if(islevelset){
    126126                        if(VerboseSolution()) _printf0_("   computing movement of ice boundaries\n");
     127                       
     128                        /* get slope of lsf for computation of normal on ice domain*/
     129                        levelsetfunctionslope_core(femmodel);
    127130
    128                         /* extrapolate required variables */
     131                        /* extrapolate along normal */
    129132                        Analysis* extanalysis = new ExtrapolationAnalysis();
    130133                        const int nvars=2;
  • TabularUnified issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r17236 r17274  
    679679        ExtrapolationVariableEnum,
    680680        IceMaskNodeActivationEnum,
     681        LevelsetfunctionSlopeXEnum,
     682        LevelsetfunctionSlopeYEnum,
    681683        /*}}}*/
    682684        MaximumNumberOfDefinitionsEnum
  • TabularUnified issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r17236 r17274  
    638638                case ExtrapolationVariableEnum : return "ExtrapolationVariable";
    639639                case IceMaskNodeActivationEnum : return "IceMaskNodeActivation";
     640                case LevelsetfunctionSlopeXEnum : return "LevelsetfunctionSlopeX";
     641                case LevelsetfunctionSlopeYEnum : return "LevelsetfunctionSlopeY";
    640642                case MaximumNumberOfDefinitionsEnum : return "MaximumNumberOfDefinitions";
    641643                default : return "unknown";
  • TabularUnified issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r17236 r17274  
    653653              else if (strcmp(name,"ExtrapolationVariable")==0) return ExtrapolationVariableEnum;
    654654              else if (strcmp(name,"IceMaskNodeActivation")==0) return IceMaskNodeActivationEnum;
     655              else if (strcmp(name,"LevelsetfunctionSlopeX")==0) return LevelsetfunctionSlopeXEnum;
     656              else if (strcmp(name,"LevelsetfunctionSlopeY")==0) return LevelsetfunctionSlopeYEnum;
    655657              else if (strcmp(name,"MaximumNumberOfDefinitions")==0) return MaximumNumberOfDefinitionsEnum;
    656658         else stage=7;
  • TabularUnified issm/trunk-jpl/src/m/enum/EnumDefinitions.py

    r17264 r17274  
    630630def ExtrapolationVariableEnum(): return StringToEnum("ExtrapolationVariable")[0]
    631631def IceMaskNodeActivationEnum(): return StringToEnum("IceMaskNodeActivation")[0]
     632def LevelsetfunctionSlopeXEnum(): return StringToEnum("LevelsetfunctionSlopeX")[0]
     633def LevelsetfunctionSlopeYEnum(): return StringToEnum("LevelsetfunctionSlopeY")[0]
    632634def MaximumNumberOfDefinitionsEnum(): return StringToEnum("MaximumNumberOfDefinitions")[0]
Note: See TracChangeset for help on using the changeset viewer.