Ignore:
Timestamp:
10/17/12 16:44:25 (12 years ago)
Author:
Mathieu Morlighem
Message:

CHG: moved a bunch of modules to FemModel and fix bug in MassFluxx

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/classes/FemModel.cpp

    r13721 r13722  
    380380void FemModel::Responsex(IssmDouble* responses,const char* response_descriptor,bool process_units,int weight_index){/*{{{*/
    381381
    382 
    383         int response_descriptor_enum;
    384 
    385         response_descriptor_enum=StringToEnumx(response_descriptor);
     382        int response_descriptor_enum=StringToEnumx(response_descriptor);
    386383        this->Responsex(responses, response_descriptor_enum, process_units, weight_index);
    387384
     
    396393                case IceVolumeEnum:              IceVolumex(               responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
    397394                case MinVelEnum:                 MinVelx(                  responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
    398                 case MaxVelEnum:                 MaxVelx(                  responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
     395                case MaxVelEnum:                 this->MaxVelx(                  responses,process_units); break;
    399396                case MinVxEnum:                  MinVxx(                   responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
    400                 case MaxVxEnum:                  MaxVxx(                   responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
    401                 case MaxAbsVxEnum:               MaxAbsVxx(                responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
     397                case MaxVxEnum:                  this->MaxVxx(                   responses,process_units); break;
     398                case MaxAbsVxEnum:               this->MaxAbsVxx(                responses,process_units); break;
    402399                case MinVyEnum:                  MinVyx(                   responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
    403                 case MaxVyEnum:                  MaxVyx(                   responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
    404                 case MaxAbsVyEnum:               MaxAbsVyx(                responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
     400                case MaxVyEnum:                  this->MaxVyx(                   responses,process_units); break;
     401                case MaxAbsVyEnum:               this->MaxAbsVyx(                responses,process_units); break;
    405402                case MinVzEnum:                  MinVzx(                   responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
    406                 case MaxVzEnum:                  MaxVzx(                   responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
    407                 case MaxAbsVzEnum:               MaxAbsVzx(                responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
     403                case MaxVzEnum:                  this->MaxVzx(                   responses,process_units); break;
     404                case MaxAbsVzEnum:               this->MaxAbsVzx(                responses,process_units); break;
    408405                case MassFluxEnum:               this->MassFluxx(          responses,process_units); break;
    409406                case SurfaceAbsVelMisfitEnum:    SurfaceAbsVelMisfitx(     responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
     
    414411                case ThicknessAbsMisfitEnum:     ThicknessAbsMisfitx(      responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
    415412                case ThicknessAbsGradientEnum:   this->ThicknessAbsGradientx(    responses, process_units,weight_index); break;
    416                 case ThicknessAlongGradientEnum:   ThicknessAlongGradientx(    responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
    417                 case ThicknessAcrossGradientEnum:   ThicknessAcrossGradientx(    responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
     413                case ThicknessAlongGradientEnum: ThicknessAlongGradientx(    responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
     414                case ThicknessAcrossGradientEnum:ThicknessAcrossGradientx(    responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
    418415                case TotalSmbEnum:                                      TotalSmbx(                responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
    419416                case RheologyBbarAbsGradientEnum:RheologyBbarAbsGradientx( responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
     
    590587
    591588        /*Free ressources:*/
    592         for(i=0;j<M;i++){
    593                 IssmDouble* matrix=array[j];
     589        for(i=0;i<M;i++){
     590                IssmDouble* matrix=array[i];
    594591                xDelete<IssmDouble>(matrix);
    595592        }
     
    600597        /*Assign output pointers: */
    601598        *pmass_flux=mass_flux;
     599
     600}/*}}}*/
     601void FemModel::MaxAbsVxx(IssmDouble* pmaxabsvx,bool process_units){/*{{{*/
     602
     603        int i;
     604        IssmDouble maxabsvx;
     605        IssmDouble node_maxabsvx;
     606        IssmDouble element_maxabsvx;
     607
     608        /*Go through elements, and request velocity: */
     609        maxabsvx=-INFINITY;
     610        for(i=0;i<this->elements->Size();i++){
     611                Element* element=(Element*)this->elements->GetObjectByOffset(i);
     612                element->MaxAbsVx(&element_maxabsvx,process_units);
     613                if(element_maxabsvx>maxabsvx) maxabsvx=element_maxabsvx;
     614        }
     615
     616        /*Figure out maximum across the cluster: */
     617#ifdef _HAVE_MPI_
     618        MPI_Reduce(&maxabsvx,&node_maxabsvx,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
     619        MPI_Bcast(&node_maxabsvx,1,MPI_DOUBLE,0,IssmComm::GetComm());   
     620        maxabsvx=node_maxabsvx;
     621#endif
     622
     623        /*Assign output pointers:*/
     624        *pmaxabsvx=maxabsvx;
     625
     626}/*}}}*/
     627void FemModel::MaxAbsVyx(IssmDouble* pmaxabsvy,bool process_units){/*{{{*/
     628
     629        int i;
     630        IssmDouble maxabsvy;
     631        IssmDouble node_maxabsvy;
     632        IssmDouble element_maxabsvy;
     633
     634        /*Go through elements, and request velocity: */
     635        maxabsvy=-INFINITY;
     636        for(i=0;i<this->elements->Size();i++){
     637                Element* element=(Element*)this->elements->GetObjectByOffset(i);
     638                element->MaxAbsVy(&element_maxabsvy,process_units);
     639                if(element_maxabsvy>maxabsvy) maxabsvy=element_maxabsvy;
     640        }
     641
     642        /*Figure out maximum across the cluster: */
     643#ifdef _HAVE_MPI_
     644        MPI_Reduce(&maxabsvy,&node_maxabsvy,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
     645        MPI_Bcast(&node_maxabsvy,1,MPI_DOUBLE,0,IssmComm::GetComm());   
     646        maxabsvy=node_maxabsvy;
     647#endif
     648
     649        /*Assign output pointers:*/
     650        *pmaxabsvy=maxabsvy;
     651
     652}/*}}}*/
     653void FemModel::MaxAbsVzx(IssmDouble* pmaxabsvz,bool process_units){/*{{{*/
     654
     655        int i;
     656        IssmDouble maxabsvz;
     657        IssmDouble node_maxabsvz;
     658        IssmDouble element_maxabsvz;
     659
     660        /*Go through elements, and request velocity: */
     661        maxabsvz=-INFINITY;
     662        for(i=0;i<this->elements->Size();i++){
     663                Element* element=(Element*)this->elements->GetObjectByOffset(i);
     664                element->MaxAbsVz(&element_maxabsvz,process_units);
     665                if(element_maxabsvz>maxabsvz) maxabsvz=element_maxabsvz;
     666        }
     667
     668        /*Figure out maximum across the cluster: */
     669#ifdef _HAVE_MPI_
     670        MPI_Reduce(&maxabsvz,&node_maxabsvz,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
     671        MPI_Bcast(&node_maxabsvz,1,MPI_DOUBLE,0,IssmComm::GetComm());   
     672        maxabsvz=node_maxabsvz;
     673#endif
     674
     675        /*Assign output pointers:*/
     676        *pmaxabsvz=maxabsvz;
     677
     678}/*}}}*/
     679void FemModel::MaxVelx(IssmDouble* pmaxvel,bool process_units){/*{{{*/
     680
     681        int i;
     682        IssmDouble maxvel;
     683        IssmDouble node_maxvel;
     684        IssmDouble element_maxvel;
     685
     686        /*Go through elements, and request velocity: */
     687        maxvel=-INFINITY;
     688        for(i=0;i<this->elements->Size();i++){
     689                Element* element=(Element*)this->elements->GetObjectByOffset(i);
     690                element->MaxVel(&element_maxvel,process_units);
     691                if(element_maxvel>maxvel) maxvel=element_maxvel;
     692        }
     693
     694        /*Figure out maximum across the cluster: */
     695#ifdef _HAVE_MPI_
     696        MPI_Reduce(&maxvel,&node_maxvel,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
     697        MPI_Bcast(&node_maxvel,1,MPI_DOUBLE,0,IssmComm::GetComm());   
     698        maxvel=node_maxvel;
     699#endif
     700
     701        /*Assign output pointers:*/
     702        *pmaxvel=maxvel;
     703
     704}/*}}}*/
     705void FemModel::MaxVxx(IssmDouble* pmaxvx,bool process_units){/*{{{*/
     706
     707        int i;
     708        IssmDouble maxvx;
     709        IssmDouble node_maxvx;
     710        IssmDouble element_maxvx;
     711
     712        /*Go through elements, and request velocity: */
     713        maxvx=-INFINITY;
     714        for(i=0;i<this->elements->Size();i++){
     715                Element* element=(Element*)this->elements->GetObjectByOffset(i);
     716                element->MaxVx(&element_maxvx,process_units);
     717                if(element_maxvx>maxvx) maxvx=element_maxvx;
     718        }
     719
     720        /*Figure out maximum across the cluster: */
     721#ifdef _HAVE_MPI_
     722        MPI_Reduce(&maxvx,&node_maxvx,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
     723        MPI_Bcast(&node_maxvx,1,MPI_DOUBLE,0,IssmComm::GetComm());   
     724        maxvx=node_maxvx;
     725#endif
     726
     727        /*Assign output pointers:*/
     728        *pmaxvx=maxvx;
     729
     730}/*}}}*/
     731void FemModel::MaxVyx(IssmDouble* pmaxvy,bool process_units){/*{{{*/
     732
     733        int i;
     734        IssmDouble maxvy;
     735        IssmDouble node_maxvy;
     736        IssmDouble element_maxvy;
     737
     738        /*Go through elements, and request velocity: */
     739        maxvy=-INFINITY;
     740        for(i=0;i<this->elements->Size();i++){
     741                Element* element=(Element*)this->elements->GetObjectByOffset(i);
     742                element->MaxVy(&element_maxvy,process_units);
     743                if(element_maxvy>maxvy) maxvy=element_maxvy;
     744        }
     745
     746        /*Figure out maximum across the cluster: */
     747#ifdef _HAVE_MPI_
     748        MPI_Reduce(&maxvy,&node_maxvy,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
     749        MPI_Bcast(&node_maxvy,1,MPI_DOUBLE,0,IssmComm::GetComm());   
     750        maxvy=node_maxvy;
     751#endif
     752
     753        /*Assign output pointers:*/
     754        *pmaxvy=maxvy;
     755
     756}/*}}}*/
     757void FemModel::MaxVzx(IssmDouble* pmaxvz,bool process_units){/*{{{*/
     758
     759        int i;
     760        IssmDouble maxvz;
     761        IssmDouble node_maxvz;
     762        IssmDouble element_maxvz;
     763
     764        /*Go through elements, and request velocity: */
     765        maxvz=-INFINITY;
     766        for(i=0;i<this->elements->Size();i++){
     767                Element* element=(Element*)this->elements->GetObjectByOffset(i);
     768                element->MaxVz(&element_maxvz,process_units);
     769                if(element_maxvz>maxvz) maxvz=element_maxvz;
     770        }
     771
     772        /*Figure out maximum across the cluster: */
     773#ifdef _HAVE_MPI_
     774        MPI_Reduce(&maxvz,&node_maxvz,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
     775        MPI_Bcast(&node_maxvz,1,MPI_DOUBLE,0,IssmComm::GetComm());   
     776        maxvz=node_maxvz;
     777#endif
     778
     779        /*Assign output pointers:*/
     780        *pmaxvz=maxvz;
    602781
    603782}/*}}}*/
Note: See TracChangeset for help on using the changeset viewer.