Changeset 23900
- Timestamp:
- 04/27/19 10:01:12 (6 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified issm/trunk-jpl/src/c/classes/Elements/Element.h ¶
r23888 r23900 241 241 virtual IssmDouble IceVolumeAboveFloatation(bool scaled)=0; 242 242 virtual IssmDouble IcefrontMassFlux(bool scaled){_error_("not implemented");}; 243 virtual IssmDouble IcefrontMassFluxLevelset(bool scaled){_error_("not implemented");}; 243 244 virtual IssmDouble GroundinglineMassFlux(bool scaled){_error_("not implemented");}; 244 245 virtual void InputDepthAverageAtBase(int enum_type,int average_enum_type)=0; -
TabularUnified issm/trunk-jpl/src/c/classes/Elements/Tria.cpp ¶
r23893 r23900 1507 1507 1508 1508 /* Intermediaries */ 1509 int i, dir,nrfrontnodes;1510 1509 IssmDouble levelset[NUMVERTICES]; 1511 1510 int indicesfront[NUMVERTICES]; … … 1515 1514 1516 1515 /* Get nodes where there is no ice */ 1517 nrfrontnodes=0;1518 for(i =0;i<NUMVERTICES;i++){1516 int num_frontnodes=0; 1517 for(int i=0;i<NUMVERTICES;i++){ 1519 1518 if(levelset[i]>=0.){ 1520 indicesfront[nrfrontnodes]=i; 1521 nrfrontnodes++; 1522 } 1523 } 1524 1525 _assert_(nrfrontnodes==2); 1519 indicesfront[num_frontnodes]=i; 1520 num_frontnodes++; 1521 } 1522 } 1523 _assert_(num_frontnodes==2); 1526 1524 1527 1525 /* arrange order of frontnodes such that they are oriented counterclockwise */ … … 1532 1530 } 1533 1531 1534 IssmDouble* xyz_front = xNew<IssmDouble>(3* nrfrontnodes);1532 IssmDouble* xyz_front = xNew<IssmDouble>(3*2); 1535 1533 /* Return nodes */ 1536 for(i =0;i<nrfrontnodes;i++){1537 for( dir=0;dir<3;dir++){1538 xyz_front[3*i+ dir]=xyz_list[3*indicesfront[i]+dir];1534 for(int i=0;i<2;i++){ 1535 for(int j=0;j<3;j++){ 1536 xyz_front[3*i+j]=xyz_list[3*indicesfront[i]+j]; 1539 1537 } 1540 1538 } … … 1953 1951 /*}}}*/ 1954 1952 IssmDouble Tria::IcefrontMassFlux(bool scaled){/*{{{*/ 1953 1954 /*Make sure there is an ice front here*/ 1955 if(!IsIceInElement() || !IsIcefront()) return 0; 1956 1957 /*Scaled not implemented yet...*/ 1958 _assert_(!scaled); 1959 1960 /*Get domain type*/ 1961 int domaintype; 1962 parameters->FindParam(&domaintype,DomainTypeEnum); 1963 1964 /*Get ice front coordinates*/ 1965 IssmDouble *xyz_list = NULL; 1966 IssmDouble* xyz_front = NULL; 1967 this->GetVerticesCoordinates(&xyz_list); 1968 this->GetIcefrontCoordinates(&xyz_front,xyz_list,MaskIceLevelsetEnum); 1969 1970 /*Get normal vector*/ 1971 IssmDouble normal[3]; 1972 this->NormalSection(&normal[0],xyz_front); 1973 normal[0] = -normal[0]; 1974 normal[1] = -normal[1]; 1975 1976 /*Get inputs*/ 1977 IssmDouble flux = 0.; 1978 IssmDouble vx,vy,thickness,Jdet; 1979 IssmDouble rho_ice=FindParam(MaterialsRhoIceEnum); 1980 Input* thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input); 1981 Input* vx_input=NULL; 1982 Input* vy_input=NULL; 1983 if(domaintype==Domain2DhorizontalEnum){ 1984 vx_input=inputs->GetInput(VxEnum); _assert_(vx_input); 1985 vy_input=inputs->GetInput(VyEnum); _assert_(vy_input); 1986 } 1987 else{ 1988 vx_input=inputs->GetInput(VxAverageEnum); _assert_(vx_input); 1989 vy_input=inputs->GetInput(VyAverageEnum); _assert_(vy_input); 1990 } 1991 1992 /*Start looping on Gaussian points*/ 1993 Gauss* gauss=this->NewGauss(xyz_list,xyz_front,3); 1994 for(int ig=gauss->begin();ig<gauss->end();ig++){ 1995 1996 gauss->GaussPoint(ig); 1997 thickness_input->GetInputValue(&thickness,gauss); 1998 vx_input->GetInputValue(&vx,gauss); 1999 vy_input->GetInputValue(&vy,gauss); 2000 this->JacobianDeterminantSurface(&Jdet,xyz_front,gauss); 2001 2002 flux += rho_ice*Jdet*gauss->weight*thickness*(vx*normal[0] + vy*normal[1]); 2003 } 2004 2005 return flux; 2006 } 2007 /*}}}*/ 2008 IssmDouble Tria::IcefrontMassFluxLevelset(bool scaled){/*{{{*/ 1955 2009 1956 2010 /*Make sure there is an ice front here*/ -
TabularUnified issm/trunk-jpl/src/c/classes/Elements/Tria.h ¶
r23888 r23900 96 96 IssmDouble IceVolumeAboveFloatation(bool scaled); 97 97 IssmDouble IcefrontMassFlux(bool scaled); 98 IssmDouble IcefrontMassFluxLevelset(bool scaled); 98 99 IssmDouble GroundinglineMassFlux(bool scaled); 99 100 void Ismip6FloatingiceMeltingRate(void); -
TabularUnified issm/trunk-jpl/src/c/classes/FemModel.cpp ¶
r23888 r23900 1546 1546 1547 1547 }/*}}}*/ 1548 void FemModel::IcefrontMassFluxLevelsetx(IssmDouble* pM, bool scaled){/*{{{*/ 1549 1550 IssmDouble local_mass_flux = 0; 1551 IssmDouble total_mass_flux; 1552 1553 for(int i=0;i<this->elements->Size();i++){ 1554 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i)); 1555 local_mass_flux+=element->IcefrontMassFluxLevelset(scaled); 1556 } 1557 ISSM_MPI_Reduce(&local_mass_flux,&total_mass_flux,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() ); 1558 ISSM_MPI_Bcast(&total_mass_flux,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm()); 1559 1560 /*Assign output pointers: */ 1561 *pM=total_mass_flux; 1562 1563 }/*}}}*/ 1548 1564 void FemModel::GroundinglineMassFluxx(IssmDouble* pM, bool scaled){/*{{{*/ 1549 1565 … … 2215 2231 case IceMassEnum: this->IceMassx(&double_result,false); break; 2216 2232 case IcefrontMassFluxEnum: this->IcefrontMassFluxx(&double_result,false); break; 2233 case IcefrontMassFluxLevelsetEnum: this->IcefrontMassFluxLevelsetx(&double_result,false); break; 2217 2234 case IceMassScaledEnum: this->IceMassx(&double_result,true); break; 2218 2235 case IceVolumeEnum: this->IceVolumex(&double_result,false); break; … … 2421 2438 case IceVolumeAboveFloatationScaledEnum: this->IceVolumeAboveFloatationx(responses, true); break; 2422 2439 case IcefrontMassFluxEnum: this->IcefrontMassFluxx(responses, false); break; 2440 case IcefrontMassFluxLevelsetEnum: this->IcefrontMassFluxLevelsetx(responses, false); break; 2423 2441 case GroundedAreaEnum: this->GroundedAreax(responses, false); break; 2424 2442 case GroundedAreaScaledEnum: this->GroundedAreax(responses, true); break; -
TabularUnified issm/trunk-jpl/src/c/classes/FemModel.h ¶
r23888 r23900 102 102 void IcefrontAreax(); 103 103 void IcefrontMassFluxx(IssmDouble* presponse, bool scaled); 104 void IcefrontMassFluxLevelsetx(IssmDouble* presponse, bool scaled); 104 105 void GroundinglineMassFluxx(IssmDouble* presponse, bool scaled); 105 106 void IceMassx(IssmDouble* pV, bool scaled); -
TabularUnified issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h ¶
r23897 r23900 1056 1056 GroundinglineMassFluxEnum, 1057 1057 IcefrontMassFluxEnum, 1058 IcefrontMassFluxLevelsetEnum, 1058 1059 MasstransportAnalysisEnum, 1059 1060 MasstransportSolutionEnum, -
TabularUnified issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp ¶
r23897 r23900 1060 1060 case GroundinglineMassFluxEnum : return "GroundinglineMassFlux"; 1061 1061 case IcefrontMassFluxEnum : return "IcefrontMassFlux"; 1062 case IcefrontMassFluxLevelsetEnum : return "IcefrontMassFluxLevelset"; 1062 1063 case MasstransportAnalysisEnum : return "MasstransportAnalysis"; 1063 1064 case MasstransportSolutionEnum : return "MasstransportSolution"; -
TabularUnified issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp ¶
r23897 r23900 1084 1084 else if (strcmp(name,"GroundinglineMassFlux")==0) return GroundinglineMassFluxEnum; 1085 1085 else if (strcmp(name,"IcefrontMassFlux")==0) return IcefrontMassFluxEnum; 1086 else if (strcmp(name,"IcefrontMassFluxLevelset")==0) return IcefrontMassFluxLevelsetEnum; 1086 1087 else if (strcmp(name,"MasstransportAnalysis")==0) return MasstransportAnalysisEnum; 1087 1088 else if (strcmp(name,"MasstransportSolution")==0) return MasstransportSolutionEnum; … … 1120 1121 else if (strcmp(name,"Nodal")==0) return NodalEnum; 1121 1122 else if (strcmp(name,"Nodalvalue")==0) return NodalvalueEnum; 1122 else if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;1123 1123 else stage=10; 1124 1124 } 1125 1125 if(stage==10){ 1126 if (strcmp(name,"NoFrictionOnPartiallyFloating")==0) return NoFrictionOnPartiallyFloatingEnum; 1126 if (strcmp(name,"NodeSId")==0) return NodeSIdEnum; 1127 else if (strcmp(name,"NoFrictionOnPartiallyFloating")==0) return NoFrictionOnPartiallyFloatingEnum; 1127 1128 else if (strcmp(name,"NoMeltOnPartiallyFloating")==0) return NoMeltOnPartiallyFloatingEnum; 1128 1129 else if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum; … … 1243 1244 else if (strcmp(name,"Vertices")==0) return VerticesEnum; 1244 1245 else if (strcmp(name,"ViscousHeating")==0) return ViscousHeatingEnum; 1245 else if (strcmp(name,"Water")==0) return WaterEnum;1246 1246 else stage=11; 1247 1247 } 1248 1248 if(stage==11){ 1249 if (strcmp(name,"XTaylorHood")==0) return XTaylorHoodEnum; 1249 if (strcmp(name,"Water")==0) return WaterEnum; 1250 else if (strcmp(name,"XTaylorHood")==0) return XTaylorHoodEnum; 1250 1251 else if (strcmp(name,"XY")==0) return XYEnum; 1251 1252 else if (strcmp(name,"XYZ")==0) return XYZEnum;
Note:
See TracChangeset
for help on using the changeset viewer.