Changeset 13875


Ignore:
Timestamp:
11/05/12 13:26:35 (12 years ago)
Author:
Mathieu Morlighem
Message:

CHG: moved some modules to FemModel.cpp

Location:
issm/trunk-jpl/src/c
Files:
3 deleted
4 edited

Legend:

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

    r13874 r13875  
    481481                                                ./solutions/balancethickness_core.cpp
    482482#}}}
    483 #Responses sources  {{{
    484 responses_sources = ./modules/TotalSmbx/TotalSmbx.h\
    485                                              ./modules/TotalSmbx/TotalSmbx.cpp\
    486                                              ./modules/IceVolumex/IceVolumex.h\
    487                                              ./modules/IceVolumex/IceVolumex.cpp\
    488                                              ./modules/ElementResponsex/ElementResponsex.h\
    489                                              ./modules/ElementResponsex/ElementResponsex.cpp
    490 #}}}
    491483#Slope sources  {{{
    492484slope_sources =  ./modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp\
     
    863855endif
    864856
    865 if RESPONSES
    866 issm_sources +=  $(responses_sources)
    867 endif
    868 
    869857if SLOPE
    870858issm_sources  +=  $(slope_sources)
  • TabularUnified issm/trunk-jpl/src/c/classes/FemModel.cpp

    r13874 r13875  
    404404
    405405                #ifdef _HAVE_RESPONSES_
    406                 case IceVolumeEnum:              IceVolumex(               responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
     406                case IceVolumeEnum:              this->IceVolumex(responses,process_units); break;
    407407                case MinVelEnum:                 this->MinVelx(responses,process_units); break;
    408408                case MaxVelEnum:                 this->MaxVelx(                  responses,process_units); break;
     
    416416                case MaxVzEnum:                  this->MaxVzx(                   responses,process_units); break;
    417417                case MaxAbsVzEnum:               this->MaxAbsVzx(                responses,process_units); break;
    418                 case MassFluxEnum:               this->MassFluxx(          responses,process_units); break;
    419                 case SurfaceAbsVelMisfitEnum:    SurfaceAbsVelMisfitx(     responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
    420                 case SurfaceRelVelMisfitEnum:    SurfaceRelVelMisfitx(     responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
    421                 case SurfaceLogVelMisfitEnum:    SurfaceLogVelMisfitx(     responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
    422                 case SurfaceLogVxVyMisfitEnum:   SurfaceLogVxVyMisfitx(    responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
     418                case MassFluxEnum:               this->MassFluxx(         responses,process_units); break;
     419                case SurfaceAbsVelMisfitEnum:    SurfaceAbsVelMisfitx(responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
     420                case SurfaceRelVelMisfitEnum:    SurfaceRelVelMisfitx(responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
     421                case SurfaceLogVelMisfitEnum:    SurfaceLogVelMisfitx(responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
     422                case SurfaceLogVxVyMisfitEnum:   SurfaceLogVxVyMisfitx(responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
    423423                case SurfaceAverageVelMisfitEnum:SurfaceAverageVelMisfitx( responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
    424                 case ThicknessAbsMisfitEnum:     ThicknessAbsMisfitx(      responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
    425                 case ThicknessAbsGradientEnum:   this->ThicknessAbsGradientx(    responses, process_units,weight_index); break;
    426                 case ThicknessAlongGradientEnum: ThicknessAlongGradientx(    responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
    427                 case ThicknessAcrossGradientEnum:ThicknessAcrossGradientx(    responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
    428                 case TotalSmbEnum:                                      TotalSmbx(                responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
    429                 case RheologyBbarAbsGradientEnum:RheologyBbarAbsGradientx( responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
     424                case ThicknessAbsMisfitEnum:     ThicknessAbsMisfitx(responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
     425                case ThicknessAbsGradientEnum:   this->ThicknessAbsGradientx(responses, process_units,weight_index); break;
     426                case ThicknessAlongGradientEnum: ThicknessAlongGradientx(responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
     427                case ThicknessAcrossGradientEnum:ThicknessAcrossGradientx(responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
     428                case TotalSmbEnum:                                      this->TotalSmbx(responses,process_units); break;
     429                case RheologyBbarAbsGradientEnum:RheologyBbarAbsGradientx(responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
    430430                case DragCoefficientAbsGradientEnum:DragCoefficientAbsGradientx(responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
    431                 case MaterialsRheologyBbarEnum:ElementResponsex(responses, elements,nodes, vertices, loads, materials, parameters,MaterialsRheologyBbarEnum,process_units); break;
    432                 case VelEnum:ElementResponsex(responses, elements,nodes, vertices, loads, materials, parameters,VelEnum,process_units); break;
     431                case MaterialsRheologyBbarEnum: this->ElementResponsex(responses,MaterialsRheologyBbarEnum,process_units); break;
     432                case VelEnum:                   this->ElementResponsex(responses,VelEnum,process_units); break;
    433433                case FrictionCoefficientEnum:NodalValuex(responses, FrictionCoefficientEnum,elements,nodes, vertices, loads, materials, parameters,process_units); break;
    434434                default: _error_("response descriptor \"" << EnumToStringx(response_descriptor_enum) << "\" not supported yet!"); break;
     
    897897
    898898}/*}}}*/
     899void FemModel::TotalSmbx(IssmDouble* pSmb,bool process_units){/*{{{*/
     900
     901        IssmDouble local_smb = 0;
     902        IssmDouble total_smb;
     903
     904        for(int i=0;i<this->elements->Size();i++){
     905                Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
     906                local_smb+=element->TotalSmb();
     907        }
     908#ifdef _HAVE_MPI_
     909        MPI_Reduce(&local_smb,&total_smb,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
     910        MPI_Bcast(&total_smb,1,MPI_DOUBLE,0,IssmComm::GetComm());
     911#else
     912        total_smb=local_smb;
     913#endif
     914
     915        /*Assign output pointers: */
     916        *pSmb=total_smb;
     917
     918}/*}}}*/
     919void FemModel::IceVolumex(IssmDouble* pV,bool process_units){/*{{{*/
     920
     921        IssmDouble local_ice_volume = 0;
     922        IssmDouble total_ice_volume;
     923
     924        for(int i=0;i<this->elements->Size();i++){
     925                Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
     926                local_ice_volume+=element->IceVolume();
     927        }
     928        #ifdef _HAVE_MPI_
     929        MPI_Reduce(&local_ice_volume,&total_ice_volume,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
     930        MPI_Bcast(&total_ice_volume,1,MPI_DOUBLE,0,IssmComm::GetComm());
     931        #else
     932        total_ice_volume=local_ice_volume;
     933        #endif
     934
     935        /*Assign output pointers: */
     936        *pV=total_ice_volume;
     937
     938}/*}}}*/
     939void FemModel::ElementResponsex(IssmDouble* presponse,int response_enum,bool process_units){/*{{{*/
     940
     941        int found=0;
     942        int sumfound=0;
     943        int cpu_found=-1;
     944        int index;
     945        IssmDouble response;
     946        Element* element=NULL;
     947
     948        /*retrieve element we are interested in: */
     949        this->parameters->FindParam(&index,IndexEnum);
     950        int my_rank=IssmComm::GetRank();
     951
     952        /*now, go through our elements, and retrieve the one with this id: index: */
     953        for(int i=0;i<this->elements->Size();i++){
     954                element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
     955                if (element->Id()==index){
     956                        found=1;
     957                        cpu_found=my_rank;
     958                        break;
     959                }
     960        }
     961
     962        /*Broadcast whether we found the element: */
     963#ifdef _HAVE_MPI_
     964        MPI_Allreduce ( &found,&sumfound,1,MPI_INT,MPI_SUM,IssmComm::GetComm());
     965        if(!sumfound)_error_("could not find material with id" << index << " to compute ElementResponse");
     966#endif
     967
     968        /*Ok, we found the element, compute responseocity: */
     969        if(my_rank==cpu_found){
     970                element->ElementResponse(&response,response_enum,IuToExtEnum);
     971        }
     972
     973        /*Broadcast and plug into response: */
     974#ifdef _HAVE_MPI_
     975        MPI_Allreduce ( &cpu_found,&cpu_found,1,MPI_INT,MPI_MAX,IssmComm::GetComm());
     976        MPI_Bcast(&response,1,MPI_DOUBLE,cpu_found,IssmComm::GetComm());
     977#endif
     978
     979        /*Assign output pointers: */
     980        *presponse=response;
     981
     982}/*}}}*/
    899983#endif
    900984#ifdef _HAVE_CONTROL_
  • TabularUnified issm/trunk-jpl/src/c/classes/FemModel.h

    r13874 r13875  
    7474                void MinVyx(IssmDouble* presponse,bool process_units);
    7575                void MinVzx(IssmDouble* presponse,bool process_units);
     76                void TotalSmbx(IssmDouble* pSmb,bool process_units);
     77                void IceVolumex(IssmDouble* pV,bool process_units);
     78                void ElementResponsex(IssmDouble* presponse,int response_enum,bool process_units);
    7679                #endif
    7780                #ifdef  _HAVE_DAKOTA_
  • TabularUnified issm/trunk-jpl/src/c/modules/modules.h

    r13874 r13875  
    3434#include "./GroundinglineMigrationx/GroundinglineMigrationx.h"
    3535#include "./HoleFillerx/HoleFillerx.h"
    36 #include "./TotalSmbx/TotalSmbx.h"
    37 #include "./IceVolumex/IceVolumex.h"
    3836#include "./InputControlUpdatex/InputControlUpdatex.h"
    3937#include "./InputConvergencex/InputConvergencex.h"
     
    6361#include "./Krigingx/Krigingx.h"
    6462#include "./Shp2Kmlx/Shp2Kmlx.h"
    65 #include "./ElementResponsex/ElementResponsex.h"
    6663#include "./Mergesolutionfromftogx/Mergesolutionfromftogx.h"
    6764#include "./MeshPartitionx/MeshPartitionx.h"
Note: See TracChangeset for help on using the changeset viewer.