Changeset 17394


Ignore:
Timestamp:
03/08/14 13:37:59 (11 years ago)
Author:
seroussi
Message:

NEW: added divergence calculation in elements

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

Legend:

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

    r17359 r17394  
    77#include "../cores/cores.h"
    88
    9 //#define FSANALYTICAL 101
     9//#define FSANALYTICAL 4
    1010
    1111/*Model processing*/
  • issm/trunk-jpl/src/c/classes/Elements/Element.cpp

    r17364 r17394  
    129129void Element::DeleteMaterials(void){/*{{{*/
    130130        delete this->material;
     131}/*}}}*/
     132IssmDouble Element::Divergence(void){/*{{{*/
     133        /*Compute element divergence*/
     134
     135        /*Intermediaries*/
     136        IssmDouble Jdet;
     137        IssmDouble divergence=0.;
     138        IssmDouble dvx[3],dvy[3],dvz[3];
     139        IssmDouble *xyz_list = NULL;
     140
     141        /*Get inputs and parameters*/
     142        Input* vx_input        = this->GetInput(VxEnum); _assert_(vx_input);
     143        Input* vy_input        = this->GetInput(VyEnum); _assert_(vy_input);
     144        Input* vz_input        = this->GetInput(VzEnum); _assert_(vz_input);
     145        this->GetVerticesCoordinates(&xyz_list);
     146
     147        Gauss* gauss=this->NewGaussBase(5);
     148        for(int ig=gauss->begin();ig<gauss->end();ig++){
     149                gauss->GaussPoint(ig);
     150                this->JacobianDeterminant(&Jdet,xyz_list,gauss);
     151
     152                /*Get strain rate assuming that epsilon has been allocated*/
     153                vx_input->GetInputDerivativeValue(&dvx[0],xyz_list,gauss);
     154                vy_input->GetInputDerivativeValue(&dvy[0],xyz_list,gauss);
     155                vz_input->GetInputDerivativeValue(&dvz[0],xyz_list,gauss);
     156
     157                divergence += (dvx[0]+dvy[1]+dvz[2])*gauss->weight*Jdet;
     158        }
     159
     160        /*Clean up and return*/
     161        delete gauss;
     162        return divergence;
    131163}/*}}}*/
    132164void Element::FindParam(bool* pvalue,int paramenum){/*{{{*/
  • issm/trunk-jpl/src/c/classes/Elements/Element.h

    r17372 r17394  
    5656                void       CoordinateSystemTransform(IssmDouble** ptransform,Node** nodes,int numnodes,int* cs_array);
    5757                void       DeleteMaterials(void);
     58                IssmDouble Divergence(void);
    5859                void       FindParam(bool* pvalue,int paramenum);
    5960                void       FindParam(int* pvalue,int paramenum);
  • issm/trunk-jpl/src/c/classes/FemModel.cpp

    r17372 r17394  
    432432        switch (response_descriptor_enum){
    433433
     434                case DivergenceEnum:               this->Divergencex(responses); break;
    434435                case IceVolumeEnum:                this->IceVolumex(responses); break;
    435436                case IceVolumeAboveFloatationEnum: this->IceVolumeAboveFloatationx(responses); break;
     
    504505
    505506                                /*Scalar output*/
     507                                case DivergenceEnum:               this->Divergencex(&double_result);               break;
    506508                                case IceVolumeEnum:                this->IceVolumex(&double_result);                break;
    507509                                case IceVolumeAboveFloatationEnum: this->IceVolumeAboveFloatationx(&double_result); break;
     
    10421044
    10431045}/*}}}*/
     1046void FemModel::Divergencex(IssmDouble* pdiv){/*{{{*/
     1047
     1048        IssmDouble local_divergence=0;
     1049        IssmDouble total_divergence;
     1050
     1051        for(int i=0;i<this->elements->Size();i++){
     1052                Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
     1053                local_divergence+=element->Divergence();
     1054        }
     1055        ISSM_MPI_Reduce(&local_divergence,&total_divergence,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
     1056        ISSM_MPI_Bcast(&total_divergence,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
     1057
     1058        /*Assign output pointers: */
     1059        *pdiv=total_divergence;
     1060
     1061}/*}}}*/
    10441062void FemModel::IceVolumex(IssmDouble* pV){/*{{{*/
    10451063
  • issm/trunk-jpl/src/c/classes/FemModel.h

    r17361 r17394  
    7272                void MinVzx(IssmDouble* presponse);
    7373                void TotalSmbx(IssmDouble* pSmb);
     74                void Divergencex(IssmDouble* pdiv);
    7475                void IceVolumex(IssmDouble* pV);
    7576                void IceVolumeAboveFloatationx(IssmDouble* pV);
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r17369 r17394  
    533533        StressTensoryzEnum,
    534534        StressTensorzzEnum,
     535        DivergenceEnum,
    535536        GiaCrossSectionShapeEnum,
    536537        GiadWdtEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r17369 r17394  
    522522                case StressTensoryzEnum : return "StressTensoryz";
    523523                case StressTensorzzEnum : return "StressTensorzz";
     524                case DivergenceEnum : return "Divergence";
    524525                case GiaCrossSectionShapeEnum : return "GiaCrossSectionShape";
    525526                case GiadWdtEnum : return "GiadWdt";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r17369 r17394  
    534534              else if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum;
    535535              else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
     536              else if (strcmp(name,"Divergence")==0) return DivergenceEnum;
    536537              else if (strcmp(name,"GiaCrossSectionShape")==0) return GiaCrossSectionShapeEnum;
    537538              else if (strcmp(name,"GiadWdt")==0) return GiadWdtEnum;
     
    628629              else if (strcmp(name,"QmuOutName")==0) return QmuOutNameEnum;
    629630              else if (strcmp(name,"Regular")==0) return RegularEnum;
    630               else if (strcmp(name,"Scaled")==0) return ScaledEnum;
    631631         else stage=6;
    632632   }
    633633   if(stage==6){
    634               if (strcmp(name,"Separate")==0) return SeparateEnum;
     634              if (strcmp(name,"Scaled")==0) return ScaledEnum;
     635              else if (strcmp(name,"Separate")==0) return SeparateEnum;
    635636              else if (strcmp(name,"Sset")==0) return SsetEnum;
    636637              else if (strcmp(name,"Verbose")==0) return VerboseEnum;
Note: See TracChangeset for help on using the changeset viewer.