Changeset 22326 for issm/trunk-jpl/src/c/classes/FemModel.cpp
- Timestamp:
- 01/04/18 10:54:01 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/FemModel.cpp
r22294 r22326 1042 1042 1043 1043 }/*}}}*/ 1044 void FemModel::FloatingAreax(IssmDouble* pV ){/*{{{*/1044 void FemModel::FloatingAreax(IssmDouble* pV, bool scaled){/*{{{*/ 1045 1045 1046 1046 IssmDouble local_floating_area= 0; … … 1049 1049 for(int i=0;i<this->elements->Size();i++){ 1050 1050 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i)); 1051 local_floating_area+=element->FloatingArea( );1051 local_floating_area+=element->FloatingArea(scaled); 1052 1052 } 1053 1053 ISSM_MPI_Reduce(&local_floating_area,&total_floating_area,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() ); … … 1091 1091 1092 1092 }/*}}}*/ 1093 void FemModel::GroundedAreax(IssmDouble* pV ){/*{{{*/1093 void FemModel::GroundedAreax(IssmDouble* pV, bool scaled){/*{{{*/ 1094 1094 1095 1095 IssmDouble local_grounded_area= 0; … … 1098 1098 for(int i=0;i<this->elements->Size();i++){ 1099 1099 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i)); 1100 local_grounded_area+=element->GroundedArea( );1100 local_grounded_area+=element->GroundedArea(scaled); 1101 1101 } 1102 1102 ISSM_MPI_Reduce(&local_grounded_area,&total_grounded_area,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() ); … … 1107 1107 1108 1108 }/*}}}*/ 1109 void FemModel::IceMassx(IssmDouble* pM ){/*{{{*/1109 void FemModel::IceMassx(IssmDouble* pM, bool scaled){/*{{{*/ 1110 1110 1111 1111 IssmDouble local_ice_mass = 0; … … 1114 1114 for(int i=0;i<this->elements->Size();i++){ 1115 1115 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i)); 1116 local_ice_mass+=element->IceMass( );1116 local_ice_mass+=element->IceMass(scaled); 1117 1117 } 1118 1118 ISSM_MPI_Reduce(&local_ice_mass,&total_ice_mass,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() ); … … 1123 1123 1124 1124 }/*}}}*/ 1125 void FemModel::IceVolumeAboveFloatationx(IssmDouble* pV ){/*{{{*/1125 void FemModel::IceVolumeAboveFloatationx(IssmDouble* pV, bool scaled){/*{{{*/ 1126 1126 1127 1127 IssmDouble local_ice_volume_af = 0; … … 1130 1130 for(int i=0;i<this->elements->Size();i++){ 1131 1131 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i)); 1132 local_ice_volume_af+=element->IceVolumeAboveFloatation( );1132 local_ice_volume_af+=element->IceVolumeAboveFloatation(scaled); 1133 1133 } 1134 1134 ISSM_MPI_Reduce(&local_ice_volume_af,&total_ice_volume_af,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() ); … … 1139 1139 1140 1140 }/*}}}*/ 1141 void FemModel::IceVolumex(IssmDouble* pV ){/*{{{*/1141 void FemModel::IceVolumex(IssmDouble* pV, bool scaled){/*{{{*/ 1142 1142 1143 1143 IssmDouble local_ice_volume = 0; … … 1146 1146 for(int i=0;i<this->elements->Size();i++){ 1147 1147 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i)); 1148 local_ice_volume+=element->IceVolume( );1148 local_ice_volume+=element->IceVolume(scaled); 1149 1149 } 1150 1150 ISSM_MPI_Reduce(&local_ice_volume,&total_ice_volume,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() ); … … 1744 1744 1745 1745 /*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; 1768 1776 1769 1777 /*Scalar control output*/ … … 1994 2002 switch (response_descriptor_enum){ 1995 2003 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; 2033 2049 default: 2034 2050 if(response_descriptor_enum>=Outputdefinition1Enum && response_descriptor_enum <=Outputdefinition100Enum){ … … 2278 2294 } 2279 2295 /*}}}*/ 2280 void FemModel::TotalFloatingBmbx(IssmDouble* pFbmb ){/*{{{*/2296 void FemModel::TotalFloatingBmbx(IssmDouble* pFbmb, bool scaled){/*{{{*/ 2281 2297 2282 2298 IssmDouble local_fbmb = 0; … … 2285 2301 for(int i=0;i<this->elements->Size();i++){ 2286 2302 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i)); 2287 local_fbmb+=element->TotalFloatingBmb( );2303 local_fbmb+=element->TotalFloatingBmb(scaled); 2288 2304 } 2289 2305 ISSM_MPI_Reduce(&local_fbmb,&total_fbmb,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() ); … … 2294 2310 2295 2311 }/*}}}*/ 2296 void FemModel::TotalGroundedBmbx(IssmDouble* pGbmb ){/*{{{*/2312 void FemModel::TotalGroundedBmbx(IssmDouble* pGbmb, bool scaled){/*{{{*/ 2297 2313 2298 2314 IssmDouble local_gbmb = 0; … … 2301 2317 for(int i=0;i<this->elements->Size();i++){ 2302 2318 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i)); 2303 local_gbmb+=element->TotalGroundedBmb( );2319 local_gbmb+=element->TotalGroundedBmb(scaled); 2304 2320 } 2305 2321 ISSM_MPI_Reduce(&local_gbmb,&total_gbmb,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() ); … … 2310 2326 2311 2327 }/*}}}*/ 2312 void FemModel::TotalSmbx(IssmDouble* pSmb ){/*{{{*/2328 void FemModel::TotalSmbx(IssmDouble* pSmb, bool scaled){/*{{{*/ 2313 2329 2314 2330 IssmDouble local_smb = 0; … … 2317 2333 for(int i=0;i<this->elements->Size();i++){ 2318 2334 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i)); 2319 local_smb+=element->TotalSmb( );2335 local_smb+=element->TotalSmb(scaled); 2320 2336 } 2321 2337 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.