Changeset 3871


Ignore:
Timestamp:
05/21/10 09:13:51 (15 years ago)
Author:
Mathieu Morlighem
Message:

some improvements

Location:
issm/trunk/src/c/objects
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/objects/Elements/Penta.cpp

    r3870 r3871  
    159159        }
    160160
    161         /*default vx,vy and vz: */
    162         if (!iomodel->vx && iomodel->vx_obs) {
    163                 for(i=0;i<6;i++)nodeinputs[i]=iomodel->vx_obs[penta_node_ids[i]-1]/iomodel->yts;
     161        /*default vx,vy and vz: either observation or 0 */
     162        if (!iomodel->vx){
     163                if (iomodel->vx_obs) for(i=0;i<6;i++)nodeinputs[i]=iomodel->vx_obs[penta_node_ids[i]-1]/iomodel->yts;
     164                else                 for(i=0;i<6;i++)nodeinputs[i]=0;
    164165                this->inputs->AddInput(new PentaVertexInput(VxEnum,nodeinputs));
    165166                this->inputs->AddInput(new PentaVertexInput(VxOldEnum,nodeinputs));
    166167        }
    167         if (!iomodel->vy && iomodel->vy_obs) {
    168                 for(i=0;i<6;i++)nodeinputs[i]=iomodel->vy_obs[penta_node_ids[i]-1]/iomodel->yts;
     168        if (!iomodel->vy){
     169                if (iomodel->vy_obs) for(i=0;i<6;i++)nodeinputs[i]=iomodel->vy_obs[penta_node_ids[i]-1]/iomodel->yts;
     170                else                 for(i=0;i<6;i++)nodeinputs[i]=0;
    169171                this->inputs->AddInput(new PentaVertexInput(VyEnum,nodeinputs));
    170172                this->inputs->AddInput(new PentaVertexInput(VyOldEnum,nodeinputs));
    171173        }
    172         if (!iomodel->vz && iomodel->vz_obs) {
    173                 for(i=0;i<6;i++)nodeinputs[i]=iomodel->vz_obs[penta_node_ids[i]-1]/iomodel->yts;
     174        if (!iomodel->vz){
     175                if (iomodel->vz_obs) for(i=0;i<6;i++)nodeinputs[i]=iomodel->vz_obs[penta_node_ids[i]-1]/iomodel->yts;
     176                else                 for(i=0;i<6;i++)nodeinputs[i]=0;
    174177                this->inputs->AddInput(new PentaVertexInput(VzEnum,nodeinputs));
    175178                this->inputs->AddInput(new PentaVertexInput(VzOldEnum,nodeinputs));
     
    330333                                name==AccumulationRateEnum ||
    331334                                name==GeothermalFluxEnum ||
     335                                name==PressureEnum ||
    332336                                name==TemperatureEnum ||
    333337                                name==TemperatureAverageEnum ||
     
    589593                        GetSolutionFromInputsDiagnosticHoriz(solution,analysis_type,sub_analysis_type);
    590594                }
    591                 else ISSMERROR("%s%i%s\n","sub_analysis: ",sub_analysis_type," not supported yet");
     595                else if(sub_analysis_type==VertAnalysisEnum){
     596                        GetSolutionFromInputsDiagnosticVert(solution,analysis_type,sub_analysis_type);
     597                }
     598                else if(sub_analysis_type==StokesAnalysisEnum){
     599                        GetSolutionFromInputsDiagnosticStokes(solution,analysis_type,sub_analysis_type);
     600                }
     601                else ISSMERROR("sub_analysis: %i (%s) not supported yet",sub_analysis_type,EnumAsString(sub_analysis_type));
    592602        }
    593603        else{
    594                 ISSMERROR("%s%i%s\n","analysis: ",analysis_type," not supported yet");
     604                ISSMERROR("analysis: %i (%s) not supported yet",analysis_type,EnumAsString(analysis_type));
    595605        }
    596606}
     
    625635                values[i*numdofpervertex+0]=vx;
    626636                values[i*numdofpervertex+1]=vy;
     637        }
     638
     639        /*Add value to global vector*/
     640        VecSetValues(solution,numdof,doflist,(const double*)values,INSERT_VALUES);
     641
     642}
     643/*}}}*/
     644/*FUNCTION Penta::GetSolutionFromInputsDiagnosticVert(Vec solution,int analysis_type,int sub_analysis_type){{{1*/
     645void  Penta::GetSolutionFromInputsDiagnosticVert(Vec solution,int analysis_type,int sub_analysis_type){
     646
     647        int i;
     648
     649        const int    numvertices=6;
     650        const int    numdofpervertex=1;
     651        const int    numdof=numdofpervertex*numvertices;
     652        double       gauss[numvertices][4]={{1,0,0,-1},{0,1,0,-1},{0,0,1,-1},{1,0,0,1},{0,1,0,1},{0,0,1,1}};
     653
     654        int          doflist[numdof];
     655        double       values[numdof];
     656        double       vz;
     657
     658        int          dummy;
     659
     660        /*Get dof list: */
     661        GetDofList(&doflist[0],&dummy);
     662
     663        /*Ok, we have vx and vy in values, fill in vx and vy arrays: */
     664        /*P1 element only for now*/
     665        for(i=0;i<numvertices;i++){
     666
     667                /*Recover vz */
     668                inputs->GetParameterValue(&vz,&gauss[i][0],VxEnum);
     669                values[i]=vz;
     670        }
     671
     672        /*Add value to global vector*/
     673        VecSetValues(solution,numdof,doflist,(const double*)values,INSERT_VALUES);
     674}
     675/*}}}*/
     676/*FUNCTION Penta::GetSolutionFromInputsDiagnosticStokes(Vec solution,int analysis_type,int sub_analysis_type){{{1*/
     677void  Penta::GetSolutionFromInputsDiagnosticStokes(Vec solution,int analysis_type,int sub_analysis_type){
     678
     679        int i;
     680
     681        const int    numvertices=6;
     682        const int    numdofpervertex=4;
     683        const int    numdof=numdofpervertex*numvertices;
     684        double       gauss[numvertices][4]={{1,0,0,-1},{0,1,0,-1},{0,0,1,-1},{1,0,0,1},{0,1,0,1},{0,0,1,1}};
     685
     686        int          doflist[numdof];
     687        double       values[numdof];
     688        double       vx,vy,vz,p;
     689
     690        int          dummy;
     691
     692        /*Get dof list: */
     693        GetDofList(&doflist[0],&dummy);
     694
     695        /*Ok, we have vx vy vz and P in values, fill in vx vy vz P arrays: */
     696        /*P1 element only for now*/
     697        for(i=0;i<numvertices;i++){
     698
     699                /*Recover vx and vy*/
     700                inputs->GetParameterValue(&vx,&gauss[i][0],VxEnum);
     701                inputs->GetParameterValue(&vy,&gauss[i][0],VyEnum);
     702                inputs->GetParameterValue(&vz,&gauss[i][0],VzEnum);
     703                inputs->GetParameterValue(&p ,&gauss[i][0],PressureEnum);
     704                values[i*numdofpervertex+0]=vx;
     705                values[i*numdofpervertex+1]=vy;
     706                values[i*numdofpervertex+2]=vz;
     707                values[i*numdofpervertex+3]=p;
    627708        }
    628709
  • issm/trunk/src/c/objects/Elements/Penta.h

    r3869 r3871  
    6767                void  GetSolutionFromInputs(Vec solution,  int analysis_type,int sub_analysis_type);
    6868                void  GetSolutionFromInputsDiagnosticHoriz(Vec solution,int analysis_type,int sub_analysis_type);
     69                void  GetSolutionFromInputsDiagnosticVert(Vec solution,int analysis_type,int sub_analysis_type);
     70                void  GetSolutionFromInputsDiagnosticStokes(Vec solution,int analysis_type,int sub_analysis_type);
    6971                void  GetDofList(int* doflist,int* pnumberofdofs);
    7072                void  GetDofList1(int* doflist);
  • issm/trunk/src/c/objects/Loads/Pengrid.cpp

    r3813 r3871  
    710710}
    711711/*}}}1*/
     712/*FUNCTION Pengrid::UpdateInputsFromVector(double* vector, int name, int type) {{{1*/
     713void  Pengrid::UpdateInputsFromVector(double* vector, int name, int type){
     714        /*Nothing updated yet*/
     715}
     716/*}}}*/
     717/*FUNCTION Pengrid::UpdateInputsFromVector(int* vector, int name, int type) {{{1*/
     718void  Pengrid::UpdateInputsFromVector(int* vector, int name, int type){
     719        /*Nothing updated yet*/
     720}
     721/*}}}*/
     722/*FUNCTION Pengrid::UpdateInputsFromVector(bool* vector, int name, int type) {{{1*/
     723void  Pengrid::UpdateInputsFromVector(bool* vector, int name, int type){
     724        /*Nothing updated yet*/
     725}
     726/*}}}*/
     727/*FUNCTION Pengrid::UpdateInputsFromConstant(double constant, int name) {{{1*/
     728void  Pengrid::UpdateInputsFromConstant(double constant, int name){
     729        /*Nothing updated yet*/
     730}
     731/*}}}*/
     732/*FUNCTION Pengrid::UpdateInputsFromConstant(int constant, int name) {{{1*/
     733void  Pengrid::UpdateInputsFromConstant(int constant, int name){
     734        /*Nothing updated yet*/
     735}
     736/*}}}*/
     737/*FUNCTION Pengrid::UpdateInputsFromConstant(bool constant, int name) {{{1*/
     738void  Pengrid::UpdateInputsFromConstant(bool constant, int name){
     739        /*Nothing updated yet*/
     740}
     741/*}}}*/
     742/*FUNCTION Pengrid::UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type) {{{1*/
     743void  Pengrid::UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){
     744        /*Nothing updated yet*/
     745}
     746/*}}}*/
  • issm/trunk/src/c/objects/Loads/Pengrid.h

    r3751 r3871  
    5151                int   MarshallSize();
    5252                int   MyRank();
    53                 void    UpdateInputsFromVector(double* vector, int name, int type){ISSMERROR("Not implemented yet!");}
    54                 void    UpdateInputsFromVector(int* vector, int name, int type){ISSMERROR("Not implemented yet!");}
    55                 void    UpdateInputsFromVector(bool* vector, int name, int type){ISSMERROR("Not implemented yet!");}
    56                 void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
    57                 void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
    58                 void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
     53                void  UpdateInputsFromVector(double* vector, int name, int type);
     54                void  UpdateInputsFromVector(int* vector, int name, int type);
     55                void  UpdateInputsFromVector(bool* vector, int name, int type);
     56                void  UpdateInputsFromConstant(double constant, int name);
     57                void  UpdateInputsFromConstant(int constant, int name);
     58                void  UpdateInputsFromConstant(bool constant, int name);
    5959
    60                 void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
     60                void  UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type);
    6161
    6262                /*}}}*/
Note: See TracChangeset for help on using the changeset viewer.