Ignore:
Timestamp:
01/04/18 10:54:01 (7 years ago)
Author:
seroussi
Message:

CHG: adding scale factor in volume computation

File:
1 edited

Legend:

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

    r22294 r22326  
    10421042
    10431043}/*}}}*/
    1044 void FemModel::FloatingAreax(IssmDouble* pV){/*{{{*/
     1044void FemModel::FloatingAreax(IssmDouble* pV, bool scaled){/*{{{*/
    10451045
    10461046        IssmDouble local_floating_area= 0;
     
    10491049        for(int i=0;i<this->elements->Size();i++){
    10501050                Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
    1051                 local_floating_area+=element->FloatingArea();
     1051                local_floating_area+=element->FloatingArea(scaled);
    10521052        }
    10531053        ISSM_MPI_Reduce(&local_floating_area,&total_floating_area,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
     
    10911091
    10921092}/*}}}*/
    1093 void FemModel::GroundedAreax(IssmDouble* pV){/*{{{*/
     1093void FemModel::GroundedAreax(IssmDouble* pV, bool scaled){/*{{{*/
    10941094
    10951095        IssmDouble local_grounded_area= 0;
     
    10981098        for(int i=0;i<this->elements->Size();i++){
    10991099                Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
    1100                 local_grounded_area+=element->GroundedArea();
     1100                local_grounded_area+=element->GroundedArea(scaled);
    11011101        }
    11021102        ISSM_MPI_Reduce(&local_grounded_area,&total_grounded_area,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
     
    11071107
    11081108}/*}}}*/
    1109 void FemModel::IceMassx(IssmDouble* pM){/*{{{*/
     1109void FemModel::IceMassx(IssmDouble* pM, bool scaled){/*{{{*/
    11101110
    11111111        IssmDouble local_ice_mass = 0;
     
    11141114        for(int i=0;i<this->elements->Size();i++){
    11151115                Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
    1116                 local_ice_mass+=element->IceMass();
     1116                local_ice_mass+=element->IceMass(scaled);
    11171117        }
    11181118        ISSM_MPI_Reduce(&local_ice_mass,&total_ice_mass,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
     
    11231123
    11241124}/*}}}*/
    1125 void FemModel::IceVolumeAboveFloatationx(IssmDouble* pV){/*{{{*/
     1125void FemModel::IceVolumeAboveFloatationx(IssmDouble* pV, bool scaled){/*{{{*/
    11261126
    11271127        IssmDouble local_ice_volume_af = 0;
     
    11301130        for(int i=0;i<this->elements->Size();i++){
    11311131                Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
    1132                 local_ice_volume_af+=element->IceVolumeAboveFloatation();
     1132                local_ice_volume_af+=element->IceVolumeAboveFloatation(scaled);
    11331133        }
    11341134        ISSM_MPI_Reduce(&local_ice_volume_af,&total_ice_volume_af,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
     
    11391139
    11401140}/*}}}*/
    1141 void FemModel::IceVolumex(IssmDouble* pV){/*{{{*/
     1141void FemModel::IceVolumex(IssmDouble* pV, bool scaled){/*{{{*/
    11421142
    11431143        IssmDouble local_ice_volume = 0;
     
    11461146        for(int i=0;i<this->elements->Size();i++){
    11471147                Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
    1148                 local_ice_volume+=element->IceVolume();
     1148                local_ice_volume+=element->IceVolume(scaled);
    11491149        }
    11501150        ISSM_MPI_Reduce(&local_ice_volume,&total_ice_volume,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
     
    17441744
    17451745                                        /*Scalar output*/
    1746                                         case DivergenceEnum:               this->Divergencex(&double_result);               break;
    1747                                         case MaxDivergenceEnum:            this->MaxDivergencex(&double_result);            break;
    1748                                         case IceMassEnum:                  this->IceMassx(&double_result);                  break;
    1749                                         case IceVolumeEnum:                this->IceVolumex(&double_result);                break;
    1750                                         case IceVolumeAboveFloatationEnum: this->IceVolumeAboveFloatationx(&double_result); break;
    1751                                         case GroundedAreaEnum:             this->GroundedAreax(&double_result);             break;
    1752                                         case FloatingAreaEnum:             this->FloatingAreax(&double_result);             break;
    1753                                         case MinVelEnum:                   this->MinVelx(&double_result);                   break;
    1754                                         case MaxVelEnum:                   this->MaxVelx(&double_result);                   break;
    1755                                         case MinVxEnum:                    this->MinVxx(&double_result);                    break;
    1756                                         case MaxVxEnum:                    this->MaxVxx(&double_result);                    break;
    1757                                         case MaxAbsVxEnum:                 this->MaxAbsVxx(&double_result);                 break;
    1758                                         case MinVyEnum:                    this->MinVyx(&double_result);                    break;
    1759                                         case MaxVyEnum:                    this->MaxVyx(&double_result);                    break;
    1760                                         case MaxAbsVyEnum:                 this->MaxAbsVyx(&double_result);                 break;
    1761                                         case MinVzEnum:                    this->MinVzx(&double_result);                    break;
    1762                                         case MaxVzEnum:                    this->MaxVzx(&double_result);                    break;
    1763                                         case MaxAbsVzEnum:                 this->MaxAbsVzx(&double_result);                 break;
    1764                                         case MassFluxEnum:                 this->MassFluxx(&double_result);                 break;
    1765                                         case TotalFloatingBmbEnum:         this->TotalFloatingBmbx(&double_result);         break;
    1766                                         case TotalGroundedBmbEnum:         this->TotalGroundedBmbx(&double_result);         break;
    1767                                         case TotalSmbEnum:                 this->TotalSmbx(&double_result);                 break;
     1746                                        case DivergenceEnum:                     this->Divergencex(&double_result);                     break;
     1747                                        case MaxDivergenceEnum:                  this->MaxDivergencex(&double_result);                  break;
     1748                                        case IceMassEnum:                        this->IceMassx(&double_result,false);                  break;
     1749                                        case IceMassScaledEnum:                  this->IceMassx(&double_result,true);                   break;
     1750                                        case IceVolumeEnum:                      this->IceVolumex(&double_result,false);                break;
     1751                                        case IceVolumeScaledEnum:                this->IceVolumex(&double_result,true);                 break;
     1752                                        case IceVolumeAboveFloatationEnum:       this->IceVolumeAboveFloatationx(&double_result,false); break;
     1753                                        case IceVolumeAboveFloatationScaledEnum: this->IceVolumeAboveFloatationx(&double_result,true);  break;
     1754                                        case GroundedAreaEnum:                   this->GroundedAreax(&double_result,false);             break;
     1755                                        case GroundedAreaScaledEnum:             this->GroundedAreax(&double_result,true);              break;
     1756                                        case FloatingAreaEnum:                   this->FloatingAreax(&double_result,false);             break;
     1757                                        case FloatingAreaScaledEnum:             this->FloatingAreax(&double_result,true);              break;
     1758                                        case MinVelEnum:                         this->MinVelx(&double_result);                         break;
     1759                                        case MaxVelEnum:                         this->MaxVelx(&double_result);                         break;
     1760                                        case MinVxEnum:                          this->MinVxx(&double_result);                          break;
     1761                                        case MaxVxEnum:                          this->MaxVxx(&double_result);                          break;
     1762                                        case MaxAbsVxEnum:                       this->MaxAbsVxx(&double_result);                       break;
     1763                                        case MinVyEnum:                          this->MinVyx(&double_result);                          break;
     1764                                        case MaxVyEnum:                          this->MaxVyx(&double_result);                          break;
     1765                                        case MaxAbsVyEnum:                       this->MaxAbsVyx(&double_result);                       break;
     1766                                        case MinVzEnum:                          this->MinVzx(&double_result);                          break;
     1767                                        case MaxVzEnum:                          this->MaxVzx(&double_result);                          break;
     1768                                        case MaxAbsVzEnum:                       this->MaxAbsVzx(&double_result);                       break;
     1769                                        case MassFluxEnum:                       this->MassFluxx(&double_result);                       break;
     1770                                        case TotalFloatingBmbEnum:               this->TotalFloatingBmbx(&double_result,false);         break;
     1771                                        case TotalFloatingBmbScaledEnum:         this->TotalFloatingBmbx(&double_result,true);          break;
     1772                                        case TotalGroundedBmbEnum:               this->TotalGroundedBmbx(&double_result,false);         break;
     1773                                        case TotalGroundedBmbScaledEnum:         this->TotalGroundedBmbx(&double_result,true);          break;
     1774                                        case TotalSmbEnum:                       this->TotalSmbx(&double_result,false);                 break;
     1775                                        case TotalSmbScaledEnum:                 this->TotalSmbx(&double_result,true);                  break;
    17681776
    17691777                           /*Scalar control output*/
     
    19942002        switch (response_descriptor_enum){
    19952003
    1996                 case DivergenceEnum:               this->Divergencex(responses); break;
    1997                 case MaxDivergenceEnum:            this->MaxDivergencex(responses); break;
    1998                 case IceMassEnum:                  this->IceMassx(responses); break;
    1999                 case IceVolumeEnum:                this->IceVolumex(responses); break;
    2000                 case IceVolumeAboveFloatationEnum: this->IceVolumeAboveFloatationx(responses); break;
    2001                 case GroundedAreaEnum:             this->GroundedAreax(responses); break;
    2002                 case FloatingAreaEnum:             this->FloatingAreax(responses); break;
    2003                 case MinVelEnum:                   this->MinVelx(responses); break;
    2004                 case MaxVelEnum:                   this->MaxVelx(responses); break;
    2005                 case MinVxEnum:                    this->MinVxx(responses); break;
    2006                 case MaxVxEnum:                    this->MaxVxx(responses); break;
    2007                 case MaxAbsVxEnum:                 this->MaxAbsVxx(responses); break;
    2008                 case MinVyEnum:                    this->MinVyx(responses); break;
    2009                 case MaxVyEnum:                    this->MaxVyx(responses); break;
    2010                 case MaxAbsVyEnum:                 this->MaxAbsVyx(responses); break;
    2011                 case MinVzEnum:                    this->MinVzx(responses); break;
    2012                 case MaxVzEnum:                    this->MaxVzx(responses); break;
    2013                 case MaxAbsVzEnum:                 this->MaxAbsVzx(responses); break;
    2014                 case MassFluxEnum:                 this->MassFluxx(responses); break;
    2015                 case SurfaceAbsVelMisfitEnum:      SurfaceAbsVelMisfitx(responses, elements,nodes, vertices, loads, materials,parameters); break;
    2016                 case SurfaceRelVelMisfitEnum:      SurfaceRelVelMisfitx(responses, elements,nodes, vertices, loads, materials,parameters); break;
    2017                 case SurfaceLogVelMisfitEnum:      SurfaceLogVelMisfitx(responses, elements,nodes, vertices, loads, materials,parameters); break;
    2018                 case SurfaceLogVxVyMisfitEnum:     SurfaceLogVxVyMisfitx(responses, elements,nodes, vertices, loads, materials,parameters); break;
    2019                 case SurfaceAverageVelMisfitEnum:  SurfaceAverageVelMisfitx(responses,this); break;
    2020                 case ThicknessAbsMisfitEnum:       ThicknessAbsMisfitx(responses, elements,nodes, vertices, loads, materials, parameters); break;
    2021                 case ThicknessAbsGradientEnum:     this->ThicknessAbsGradientx(responses); break;
    2022                 case ThicknessAlongGradientEnum:   ThicknessAlongGradientx(responses, elements,nodes, vertices, loads, materials, parameters); break;
    2023                 case ThicknessAcrossGradientEnum:  ThicknessAcrossGradientx(responses, elements,nodes, vertices, loads, materials, parameters); break;
    2024                 case RheologyBbarAbsGradientEnum:  RheologyBbarAbsGradientx(responses, elements,nodes, vertices, loads, materials, parameters); break;
    2025                 case DragCoefficientAbsGradientEnum:DragCoefficientAbsGradientx(responses, elements,nodes, vertices, loads, materials, parameters); break;
    2026                 case BalancethicknessMisfitEnum:   BalancethicknessMisfitx(responses); break;
    2027                 case TotalFloatingBmbEnum:                        this->TotalFloatingBmbx(responses); break;
    2028                 case TotalGroundedBmbEnum:                        this->TotalGroundedBmbx(responses); break;
    2029                 case TotalSmbEnum:                                        this->TotalSmbx(responses); break;
    2030                 case MaterialsRheologyBbarEnum:    this->ElementResponsex(responses,MaterialsRheologyBbarEnum); break;
    2031                 case VelEnum:                      this->ElementResponsex(responses,VelEnum); break;
    2032                 case FrictionCoefficientEnum:      NodalValuex(responses, FrictionCoefficientEnum,elements,nodes, vertices, loads, materials, parameters); break;
     2004                case DivergenceEnum:                     this->Divergencex(responses); break;
     2005                case MaxDivergenceEnum:                  this->MaxDivergencex(responses); break;
     2006                case IceMassEnum:                        this->IceMassx(responses, false); break;
     2007                case IceMassScaledEnum:                  this->IceMassx(responses, true); break;
     2008                case IceVolumeEnum:                      this->IceVolumex(responses, false); break;
     2009                case IceVolumeScaledEnum:                this->IceVolumex(responses, true); break;
     2010                case IceVolumeAboveFloatationEnum:       this->IceVolumeAboveFloatationx(responses, false); break;
     2011                case IceVolumeAboveFloatationScaledEnum: this->IceVolumeAboveFloatationx(responses, true); break;
     2012                case GroundedAreaEnum:                   this->GroundedAreax(responses, false); break;
     2013                case GroundedAreaScaledEnum:             this->GroundedAreax(responses, true); break;
     2014                case FloatingAreaEnum:                   this->FloatingAreax(responses, false); break;
     2015                case FloatingAreaScaledEnum:             this->FloatingAreax(responses, true); break;
     2016                case MinVelEnum:                         this->MinVelx(responses); break;
     2017                case MaxVelEnum:                         this->MaxVelx(responses); break;
     2018                case MinVxEnum:                          this->MinVxx(responses); break;
     2019                case MaxVxEnum:                          this->MaxVxx(responses); break;
     2020                case MaxAbsVxEnum:                       this->MaxAbsVxx(responses); break;
     2021                case MinVyEnum:                          this->MinVyx(responses); break;
     2022                case MaxVyEnum:                          this->MaxVyx(responses); break;
     2023                case MaxAbsVyEnum:                       this->MaxAbsVyx(responses); break;
     2024                case MinVzEnum:                          this->MinVzx(responses); break;
     2025                case MaxVzEnum:                          this->MaxVzx(responses); break;
     2026                case MaxAbsVzEnum:                       this->MaxAbsVzx(responses); break;
     2027                case MassFluxEnum:                       this->MassFluxx(responses); break;
     2028                case SurfaceAbsVelMisfitEnum:            SurfaceAbsVelMisfitx(responses, elements,nodes, vertices, loads, materials,parameters); break;
     2029                case SurfaceRelVelMisfitEnum:            SurfaceRelVelMisfitx(responses, elements,nodes, vertices, loads, materials,parameters); break;
     2030                case SurfaceLogVelMisfitEnum:            SurfaceLogVelMisfitx(responses, elements,nodes, vertices, loads, materials,parameters); break;
     2031                case SurfaceLogVxVyMisfitEnum:           SurfaceLogVxVyMisfitx(responses, elements,nodes, vertices, loads, materials,parameters); break;
     2032                case SurfaceAverageVelMisfitEnum:        SurfaceAverageVelMisfitx(responses,this); break;
     2033                case ThicknessAbsMisfitEnum:             ThicknessAbsMisfitx(responses, elements,nodes, vertices, loads, materials, parameters); break;
     2034                case ThicknessAbsGradientEnum:           this->ThicknessAbsGradientx(responses); break;
     2035                case ThicknessAlongGradientEnum:         ThicknessAlongGradientx(responses, elements,nodes, vertices, loads, materials, parameters); break;
     2036                case ThicknessAcrossGradientEnum:        ThicknessAcrossGradientx(responses, elements,nodes, vertices, loads, materials, parameters); break;
     2037                case RheologyBbarAbsGradientEnum:        RheologyBbarAbsGradientx(responses, elements,nodes, vertices, loads, materials, parameters); break;
     2038                case DragCoefficientAbsGradientEnum:     DragCoefficientAbsGradientx(responses, elements,nodes, vertices, loads, materials, parameters); break;
     2039                case BalancethicknessMisfitEnum:         BalancethicknessMisfitx(responses); break;
     2040                case TotalFloatingBmbEnum:                              this->TotalFloatingBmbx(responses, false); break;
     2041                case TotalFloatingBmbScaledEnum:                          this->TotalFloatingBmbx(responses, true); break;
     2042                case TotalGroundedBmbEnum:                              this->TotalGroundedBmbx(responses, false); break;
     2043                case TotalGroundedBmbScaledEnum:                          this->TotalGroundedBmbx(responses, true); break;
     2044                case TotalSmbEnum:                                              this->TotalSmbx(responses, false); break;
     2045                case TotalSmbScaledEnum:                                          this->TotalSmbx(responses, true); break;
     2046                case MaterialsRheologyBbarEnum:          this->ElementResponsex(responses,MaterialsRheologyBbarEnum); break;
     2047                case VelEnum:                            this->ElementResponsex(responses,VelEnum); break;
     2048                case FrictionCoefficientEnum:            NodalValuex(responses, FrictionCoefficientEnum,elements,nodes, vertices, loads, materials, parameters); break;
    20332049                default:
    20342050                        if(response_descriptor_enum>=Outputdefinition1Enum && response_descriptor_enum <=Outputdefinition100Enum){
     
    22782294}
    22792295/*}}}*/
    2280 void FemModel::TotalFloatingBmbx(IssmDouble* pFbmb){/*{{{*/
     2296void FemModel::TotalFloatingBmbx(IssmDouble* pFbmb, bool scaled){/*{{{*/
    22812297
    22822298        IssmDouble local_fbmb = 0;
     
    22852301        for(int i=0;i<this->elements->Size();i++){
    22862302                Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
    2287                 local_fbmb+=element->TotalFloatingBmb();
     2303                local_fbmb+=element->TotalFloatingBmb(scaled);
    22882304        }
    22892305        ISSM_MPI_Reduce(&local_fbmb,&total_fbmb,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
     
    22942310
    22952311}/*}}}*/
    2296 void FemModel::TotalGroundedBmbx(IssmDouble* pGbmb){/*{{{*/
     2312void FemModel::TotalGroundedBmbx(IssmDouble* pGbmb, bool scaled){/*{{{*/
    22972313
    22982314        IssmDouble local_gbmb = 0;
     
    23012317        for(int i=0;i<this->elements->Size();i++){
    23022318                Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
    2303                 local_gbmb+=element->TotalGroundedBmb();
     2319                local_gbmb+=element->TotalGroundedBmb(scaled);
    23042320        }
    23052321        ISSM_MPI_Reduce(&local_gbmb,&total_gbmb,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
     
    23102326
    23112327}/*}}}*/
    2312 void FemModel::TotalSmbx(IssmDouble* pSmb){/*{{{*/
     2328void FemModel::TotalSmbx(IssmDouble* pSmb, bool scaled){/*{{{*/
    23132329
    23142330        IssmDouble local_smb = 0;
     
    23172333        for(int i=0;i<this->elements->Size();i++){
    23182334                Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
    2319                 local_smb+=element->TotalSmb();
     2335                local_smb+=element->TotalSmb(scaled);
    23202336        }
    23212337        ISSM_MPI_Reduce(&local_smb,&total_smb,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
Note: See TracChangeset for help on using the changeset viewer.