Changeset 17297
- Timestamp:
- 02/18/14 16:13:16 (11 years ago)
- Location:
- issm/trunk-jpl/src/c/analyses
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
r17291 r17297 6 6 #include "../solutionsequences/solutionsequences.h" 7 7 8 //#define FSANALYTICAL 58 #define FSANALYTICAL 5 9 9 10 10 /*Model processing*/ … … 1176 1176 1177 1177 /*Intermediaries*/ 1178 int dim,meshtype; 1178 1179 bool mainlyfloating; 1179 1180 int migration_style,point1; … … 1183 1184 Gauss* gauss = NULL; 1184 1185 1186 /*Get problem dimension*/ 1187 element->FindParam(&meshtype,MeshTypeEnum); 1188 switch(meshtype){ 1189 case Mesh2DverticalEnum: dim = 1;break; 1190 case Mesh2DhorizontalEnum: dim = 2;break; 1191 case Mesh3DEnum: dim = 2;break; 1192 default: _error_("mesh "<<EnumToStringx(meshtype)<<" not supported yet"); 1193 } 1194 1185 1195 /*Fetch number of nodes and dof for this finite element*/ 1186 1196 int numnodes = element->GetNumberOfNodes(); … … 1188 1198 1189 1199 /*Initialize Element matrix and vectors*/ 1190 ElementMatrix* Ke 1191 IssmDouble* B = xNew<IssmDouble>(2*numdof);1192 IssmDouble D[2][2] = {0.};1200 ElementMatrix* Ke = element->NewElementMatrix(SSAApproximationEnum); 1201 IssmDouble* B = xNew<IssmDouble>(dim*numdof); 1202 IssmDouble* D = xNewZeroInit<IssmDouble>(dim*dim); 1193 1203 1194 1204 /*Retrieve all inputs and parameters*/ … … 1197 1207 Input* surface_input = element->GetInput(SurfaceEnum); _assert_(surface_input); 1198 1208 Input* vx_input = element->GetInput(VxEnum); _assert_(vx_input); 1199 Input* vy_input = element->GetInput(VyEnum); _assert_(vy_input);1200 1209 Input* gllevelset_input = NULL; 1210 Input* vy_input = NULL; 1211 if(dim==2){vy_input = element->GetInput(VyEnum); _assert_(vy_input);} 1201 1212 1202 1213 /*build friction object, used later on: */ … … 1225 1236 } 1226 1237 1227 this->GetBSSAFriction(B, element, xyz_list,gauss);1238 this->GetBSSAFriction(B,element,dim,xyz_list,gauss); 1228 1239 element->JacobianDeterminant(&Jdet, xyz_list,gauss); 1229 for(int i=0;i< 2;i++) D[i][i]=alpha2*gauss->weight*Jdet;1230 1231 TripleMultiply(B, 2,numdof,1,1232 &D[0][0],2,2,0,1233 B, 2,numdof,0,1240 for(int i=0;i<dim;i++) D[i*dim+i]=alpha2*gauss->weight*Jdet; 1241 1242 TripleMultiply(B,dim,numdof,1, 1243 D,dim,dim,0, 1244 B,dim,numdof,0, 1234 1245 &Ke->values[0],1); 1235 1246 } … … 1243 1254 xDelete<IssmDouble>(xyz_list); 1244 1255 xDelete<IssmDouble>(B); 1256 xDelete<IssmDouble>(D); 1245 1257 return Ke; 1246 1258 }/*}}}*/ … … 1251 1263 1252 1264 /*Intermediaries*/ 1265 int dim,meshtype,bsize; 1253 1266 IssmDouble viscosity,newviscosity,oldviscosity; 1254 1267 IssmDouble viscosity_overshoot,thickness,Jdet; … … 1256 1269 IssmDouble *xyz_list = NULL; 1257 1270 1271 /*Get problem dimension*/ 1272 element->FindParam(&meshtype,MeshTypeEnum); 1273 switch(meshtype){ 1274 case Mesh2DverticalEnum: dim = 1; bsize = 1; break; 1275 case Mesh2DhorizontalEnum: dim = 2; bsize = 1; break; 1276 case Mesh3DEnum: dim = 2; bsize = 3; break; 1277 default: _error_("mesh "<<EnumToStringx(meshtype)<<" not supported yet"); 1278 } 1279 1258 1280 /*Fetch number of nodes and dof for this finite element*/ 1259 1281 int numnodes = element->GetNumberOfNodes(); 1260 int numdof = numnodes* 2;1282 int numdof = numnodes*dim; 1261 1283 1262 1284 /*Initialize Element matrix and vectors*/ 1263 1285 ElementMatrix* Ke = element->NewElementMatrix(SSAApproximationEnum); 1264 IssmDouble* B = xNew<IssmDouble>( 3*numdof);1265 IssmDouble* Bprime = xNew<IssmDouble>( 3*numdof);1266 IssmDouble* D = xNewZeroInit<IssmDouble>( 3*3);1286 IssmDouble* B = xNew<IssmDouble>(bsize*numdof); 1287 IssmDouble* Bprime = xNew<IssmDouble>(bsize*numdof); 1288 IssmDouble* D = xNewZeroInit<IssmDouble>(bsize*bsize); 1267 1289 1268 1290 /*Retrieve all inputs and parameters*/ … … 1270 1292 Input* thickness_input=element->GetInput(ThicknessEnum); _assert_(thickness_input); 1271 1293 Input* vx_input=element->GetInput(VxEnum); _assert_(vx_input); 1272 Input* vy_input=element->GetInput(VyEnum); _assert_(vy_input);1273 1294 Input* vxold_input=element->GetInput(VxPicardEnum); _assert_(vxold_input); 1274 Input* vyold_input=element->GetInput(VyPicardEnum); _assert_(vyold_input); 1295 Input* vy_input = NULL; 1296 Input* vyold_input = NULL; 1297 if(dim==3){ 1298 vy_input=element->GetInput(VyEnum); _assert_(vy_input); 1299 vyold_input=element->GetInput(VyPicardEnum); _assert_(vyold_input); 1300 } 1275 1301 element->FindParam(&viscosity_overshoot,StressbalanceViscosityOvershootEnum); 1276 1302 … … 1281 1307 1282 1308 element->JacobianDeterminant(&Jdet,xyz_list,gauss); 1283 this->GetBSSA(B,element, xyz_list,gauss);1284 this->GetBSSAprime(Bprime,element, xyz_list,gauss);1285 1286 element->ViscositySSA(&viscosity, xyz_list,gauss,vx_input,vy_input);1287 element->ViscositySSA(&oldviscosity, xyz_list,gauss,vxold_input,vyold_input);1309 this->GetBSSA(B,element,dim,xyz_list,gauss); 1310 this->GetBSSAprime(Bprime,element,dim,xyz_list,gauss); 1311 1312 element->ViscositySSA(&viscosity,dim,xyz_list,gauss,vx_input,vy_input); 1313 element->ViscositySSA(&oldviscosity,dim,xyz_list,gauss,vxold_input,vyold_input); 1288 1314 thickness_input->GetInputValue(&thickness, gauss); 1289 1315 … … 1292 1318 for(int i=0;i<3;i++) D[i*3+i]=D_scalar; 1293 1319 1294 TripleMultiply(B, 3,numdof,1,1295 D, 3,3,0,1296 Bprime, 3,numdof,0,1320 TripleMultiply(B,bsize,numdof,1, 1321 D,bsize,bsize,0, 1322 Bprime,bsize,numdof,0, 1297 1323 &Ke->values[0],1); 1298 1324 } 1299 1325 1300 1326 /*Transform Coordinate System*/ 1301 element->TransformStiffnessMatrixCoord(Ke,XYEnum);1327 if(dim==2) element->TransformStiffnessMatrixCoord(Ke,XYEnum); 1302 1328 1303 1329 /*Clean up and return*/ … … 1348 1374 1349 1375 /*Intermediaries */ 1376 int dim,meshtype; 1350 1377 IssmDouble thickness,Jdet,slope[2]; 1351 1378 IssmDouble* xyz_list = NULL; 1379 1380 /*Get problem dimension*/ 1381 element->FindParam(&meshtype,MeshTypeEnum); 1382 switch(meshtype){ 1383 case Mesh2DverticalEnum: dim = 1;break; 1384 case Mesh2DhorizontalEnum: dim = 2;break; 1385 case Mesh3DEnum: dim = 2;break; 1386 default: _error_("mesh "<<EnumToStringx(meshtype)<<" not supported yet"); 1387 } 1352 1388 1353 1389 /*Fetch number of nodes and dof for this finite element*/ … … 1377 1413 1378 1414 for(int i=0;i<numnodes;i++){ 1379 pe->values[i* 2+0]+=-rhog*thickness*slope[0]*Jdet*gauss->weight*basis[i];1380 pe->values[i*2+1]+=-rhog*thickness*slope[1]*Jdet*gauss->weight*basis[i];1415 pe->values[i*dim+0]+=-rhog*thickness*slope[0]*Jdet*gauss->weight*basis[i]; 1416 if(dim==2) pe->values[i*dim+1]+=-rhog*thickness*slope[1]*Jdet*gauss->weight*basis[i]; 1381 1417 } 1382 1418 } … … 1400 1436 1401 1437 /*Intermediaries*/ 1438 int dim,meshtype; 1402 1439 IssmDouble Jdet,thickness,bed,water_pressure,ice_pressure; 1403 1440 IssmDouble surface_under_water,base_under_water,pressure; … … 1405 1442 IssmDouble *xyz_list_front = NULL; 1406 1443 IssmDouble normal[2]; 1444 1445 /*Get problem dimension*/ 1446 element->FindParam(&meshtype,MeshTypeEnum); 1447 switch(meshtype){ 1448 case Mesh2DverticalEnum: dim = 1;break; 1449 case Mesh2DhorizontalEnum: dim = 2;break; 1450 case Mesh3DEnum: dim = 2;break; 1451 default: _error_("mesh "<<EnumToStringx(meshtype)<<" not supported yet"); 1452 } 1407 1453 1408 1454 /*Fetch number of nodes for this finite element*/ … … 1420 1466 IssmDouble gravity = element->GetMaterialParameter(ConstantsGEnum); 1421 1467 element->GetVerticesCoordinates(&xyz_list); 1422 //element->ZeroLevelsetCoordinates(&xyz_list_front,xyz_list,MaskIceLevelsetEnum);1468 //element->ZeroLevelsetCoordinates(&xyz_list_front,xyz_list,MaskIceLevelsetEnum); 1423 1469 element->GetIcefrontCoordinates(&xyz_list_front,xyz_list,MaskIceLevelsetEnum); 1424 1470 element->NormalSection(&normal[0],xyz_list_front); … … 1440 1486 pressure = ice_pressure + water_pressure; 1441 1487 1442 for 1443 pe->values[ 2*i+0]+= pressure*Jdet*gauss->weight*normal[0]*basis[i];1444 pe->values[2*i+1]+= pressure*Jdet*gauss->weight*normal[1]*basis[i];1488 for(int i=0;i<numnodes;i++){ 1489 pe->values[dim*i+0]+= pressure*Jdet*gauss->weight*normal[0]*basis[i]; 1490 if(dim==2) pe->values[dim*i+1]+= pressure*Jdet*gauss->weight*normal[1]*basis[i]; 1445 1491 } 1446 1492 } … … 1456 1502 return pe; 1457 1503 }/*}}}*/ 1458 void StressbalanceAnalysis::GetBSSA(IssmDouble* B,Element* element, IssmDouble* xyz_list,Gauss* gauss){/*{{{*/1504 void StressbalanceAnalysis::GetBSSA(IssmDouble* B,Element* element,int dim,IssmDouble* xyz_list,Gauss* gauss){/*{{{*/ 1459 1505 /*Compute B matrix. B=[B1 B2 B3] where Bi is of size 3*NDOF2. 1460 1506 * For node i, Bi can be expressed in the actual coordinate system 1461 1507 * by: 1462 * Bi=[ dN/dx 0 ] 1463 * [ 0 dN/dy ] 1464 * [ 1/2*dN/dy 1/2*dN/dx ] 1508 * 2D 1D 1509 * Bi=[ dN/dx 0 ] Bi=[ dN/dx ] 1510 * [ 0 dN/dy ] 1511 * [ 1/2*dN/dy 1/2*dN/dx ] 1465 1512 * where N is the finiteelement function for node i. 1466 1513 * … … 1472 1519 1473 1520 /*Get nodal functions derivatives*/ 1474 IssmDouble* dbasis=xNew<IssmDouble>( 2*numnodes);1521 IssmDouble* dbasis=xNew<IssmDouble>(dim*numnodes); 1475 1522 element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss); 1476 1523 1477 1524 /*Build B: */ 1478 for(int i=0;i<numnodes;i++){ 1479 B[2*numnodes*0+2*i+0] = dbasis[0*numnodes+i]; 1480 B[2*numnodes*0+2*i+1] = 0.; 1481 B[2*numnodes*1+2*i+0] = 0.; 1482 B[2*numnodes*1+2*i+1] = dbasis[1*numnodes+i]; 1483 B[2*numnodes*2+2*i+0] = .5*dbasis[1*numnodes+i]; 1484 B[2*numnodes*2+2*i+1] = .5*dbasis[0*numnodes+i]; 1525 if(dim==2){ 1526 for(int i=0;i<numnodes;i++){ 1527 B[i] = dbasis[i]; 1528 } 1529 } 1530 else{ 1531 for(int i=0;i<numnodes;i++){ 1532 B[2*numnodes*0+2*i+0] = dbasis[0*numnodes+i]; 1533 B[2*numnodes*0+2*i+1] = 0.; 1534 B[2*numnodes*1+2*i+0] = 0.; 1535 B[2*numnodes*1+2*i+1] = dbasis[1*numnodes+i]; 1536 B[2*numnodes*2+2*i+0] = .5*dbasis[1*numnodes+i]; 1537 B[2*numnodes*2+2*i+1] = .5*dbasis[0*numnodes+i]; 1538 } 1485 1539 } 1486 1540 … … 1488 1542 xDelete<IssmDouble>(dbasis); 1489 1543 }/*}}}*/ 1490 void StressbalanceAnalysis::GetBSSAFriction(IssmDouble* B,Element* element, IssmDouble* xyz_list,Gauss* gauss){/*{{{*/1544 void StressbalanceAnalysis::GetBSSAFriction(IssmDouble* B,Element* element,int dim,IssmDouble* xyz_list,Gauss* gauss){/*{{{*/ 1491 1545 /*Compute B matrix. B=[B1 B2 B3] where Bi is square and of size 2. 1492 1546 * For node i, Bi can be expressed in the actual coordinate system 1493 1547 * by: 1494 * Bi=[ N 0 ] 1548 * 2D 1D 1549 * Bi=[ N 0 ] Bi = N 1495 1550 * [ 0 N ] 1496 1551 * where N is the finiteelement function for node i. … … 1507 1562 1508 1563 /*Build L: */ 1509 for(int i=0;i<numnodes;i++){ 1510 B[2*numnodes*0+2*i+0] = basis[i]; 1511 B[2*numnodes*0+2*i+1] = 0.; 1512 B[2*numnodes*1+2*i+0] = 0.; 1513 B[2*numnodes*1+2*i+1] = basis[i]; 1564 if(dim==2){ 1565 for(int i=0;i<numnodes;i++){ 1566 B[2*numnodes*0+2*i+0] = basis[i]; 1567 B[2*numnodes*0+2*i+1] = 0.; 1568 B[2*numnodes*1+2*i+0] = 0.; 1569 B[2*numnodes*1+2*i+1] = basis[i]; 1570 } 1571 } 1572 else{ 1573 for(int i=0;i<numnodes;i++){ 1574 B[i] = basis[i]; 1575 } 1514 1576 } 1515 1577 … … 1517 1579 xDelete<IssmDouble>(basis); 1518 1580 }/*}}}*/ 1519 void StressbalanceAnalysis::GetBSSAprime(IssmDouble* Bprime,Element* element, IssmDouble* xyz_list,Gauss* gauss){/*{{{*/1581 void StressbalanceAnalysis::GetBSSAprime(IssmDouble* Bprime,Element* element,int dim,IssmDouble* xyz_list,Gauss* gauss){/*{{{*/ 1520 1582 /*Compute B' matrix. B'=[B1' B2' B3'] where Bi' is of size 3*NDOF2. 1521 1583 * For node i, Bi' can be expressed in the actual coordinate system 1522 1584 * by: 1523 * Bi_prime=[ 2*dN/dx dN/dy ] 1585 * 2D 1D 1586 * Bi_prime=[ 2*dN/dx dN/dy ] Bi_prime=[ 2*dN/dx ] 1524 1587 * [ dN/dx 2*dN/dy ] 1525 1588 * [ dN/dy dN/dx ] … … 1533 1596 1534 1597 /*Get nodal functions derivatives*/ 1535 IssmDouble* dbasis=xNew<IssmDouble>( 2*numnodes);1598 IssmDouble* dbasis=xNew<IssmDouble>(dim*numnodes); 1536 1599 element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss); 1537 1600 1538 1601 /*Build B': */ 1539 for(int i=0;i<numnodes;i++){ 1540 Bprime[2*numnodes*0+2*i+0] = 2.*dbasis[0*numnodes+i]; 1541 Bprime[2*numnodes*0+2*i+1] = dbasis[1*numnodes+i]; 1542 Bprime[2*numnodes*1+2*i+0] = dbasis[0*numnodes+i]; 1543 Bprime[2*numnodes*1+2*i+1] = 2.*dbasis[1*numnodes+i]; 1544 Bprime[2*numnodes*2+2*i+0] = dbasis[1*numnodes+i]; 1545 Bprime[2*numnodes*2+2*i+1] = dbasis[0*numnodes+i]; 1602 if(dim==2){ 1603 for(int i=0;i<numnodes;i++){ 1604 Bprime[2*numnodes*0+2*i+0] = 2.*dbasis[0*numnodes+i]; 1605 Bprime[2*numnodes*0+2*i+1] = dbasis[1*numnodes+i]; 1606 Bprime[2*numnodes*1+2*i+0] = dbasis[0*numnodes+i]; 1607 Bprime[2*numnodes*1+2*i+1] = 2.*dbasis[1*numnodes+i]; 1608 Bprime[2*numnodes*2+2*i+0] = dbasis[1*numnodes+i]; 1609 Bprime[2*numnodes*2+2*i+1] = dbasis[0*numnodes+i]; 1610 } 1611 } 1612 else{ 1613 for(int i=0;i<numnodes;i++){ 1614 Bprime[i] = 2.*dbasis[i]; 1615 } 1546 1616 } 1547 1617 … … 1551 1621 void StressbalanceAnalysis::InputUpdateFromSolutionSSA(IssmDouble* solution,Element* element){/*{{{*/ 1552 1622 1553 int i, meshtype;1623 int i,dim,meshtype; 1554 1624 IssmDouble rho_ice,g; 1555 1625 int* doflist=NULL; … … 1570 1640 element->GetInputListOnVertices(thickness,ThicknessEnum); 1571 1641 for(i=0;i<numvertices;i++) pressure[i]=rho_ice*g*thickness[i]; 1642 dim=2; 1572 1643 break; 1573 1644 case Mesh3DEnum: … … 1575 1646 element->GetInputListOnVertices(surface,SurfaceEnum); 1576 1647 for(i=0;i<numvertices;i++) pressure[i]=rho_ice*g*(surface[i]-xyz_list[i*3+2]); 1648 dim=2; 1649 break; 1650 case Mesh2DverticalEnum: 1651 element->GetVerticesCoordinates(&xyz_list); 1652 element->GetInputListOnVertices(surface,SurfaceEnum); 1653 for(i=0;i<numvertices;i++) pressure[i]=rho_ice*g*(surface[i]-xyz_list[i*3+2]); 1654 dim=1; 1577 1655 break; 1578 1656 default: _error_("mesh "<<EnumToStringx(meshtype)<<" not supported yet"); … … 1588 1666 basalelement = element; 1589 1667 break; 1590 case Mesh3DEnum: 1668 case Mesh3DEnum: case Mesh2DverticalEnum: 1591 1669 if(!element->IsOnBed()){xDelete<IssmDouble>(xyz_list); return;} 1592 1670 basalelement=element->SpawnBasalElement(); … … 1597 1675 /*Fetch number of nodes and dof for this finite element*/ 1598 1676 int numnodes = basalelement->GetNumberOfNodes(); 1599 int numdof = numnodes* 2;1677 int numdof = numnodes*dim; 1600 1678 1601 1679 /*Fetch dof list and allocate solution vectors*/ … … 1611 1689 1612 1690 /*Transform solution in Cartesian Space*/ 1613 basalelement->TransformSolutionCoord(&values[0],XYEnum); 1614 basalelement->FindParam(&meshtype,MeshTypeEnum); 1691 if(dim==2) basalelement->TransformSolutionCoord(&values[0],XYEnum); 1615 1692 1616 1693 /*Ok, we have vx and vy in values, fill in vx and vy arrays: */ 1617 1694 for(i=0;i<numnodes;i++){ 1618 1695 vx[i]=values[i*2+0]; 1619 vy[i]=values[i*2+1];1620 1621 /*Check solution*/1622 1696 if(xIsNan<IssmDouble>(vx[i])) _error_("NaN found in solution vector"); 1623 if(xIsNan<IssmDouble>(vy[i])) _error_("NaN found in solution vector"); 1697 1698 if(dim==2){ 1699 vy[i]=values[i*2+1]; 1700 if(xIsNan<IssmDouble>(vy[i])) _error_("NaN found in solution vector"); 1701 } 1624 1702 } 1625 1703 1626 1704 /*Get Vz and compute vel*/ 1627 basalelement->GetInputListOnNodes(&vz[0],VzEnum,0.); 1628 for(i=0;i<numnodes;i++) vel[i]=sqrt(vx[i]*vx[i] + vy[i]*vy[i] + vz[i]*vz[i]); 1705 if(dim==2){ 1706 basalelement->GetInputListOnNodes(&vz[0],VzEnum,0.); 1707 for(i=0;i<numnodes;i++) vel[i]=sqrt(vx[i]*vx[i] + vy[i]*vy[i] + vz[i]*vz[i]); 1708 } 1709 else{ 1710 element->GetInputListOnNodes(&vy[0],VyEnum,0.); 1711 for(i=0;i<numnodes;i++) vel[i]=sqrt(vx[i]*vx[i] + vy[i]*vy[i]); 1712 } 1629 1713 1630 1714 /*Now, we have to move the previous Vx and Vy inputs to old 1631 1715 * status, otherwise, we'll wipe them off: */ 1632 1716 element->InputChangeName(VxEnum,VxPicardEnum); 1633 element->InputChangeName(VyEnum,VyPicardEnum);1717 if(dim==2)element->InputChangeName(VyEnum,VyPicardEnum); 1634 1718 1635 1719 /*Add vx and vy as inputs to the tria element: */ 1636 1720 element->AddBasalInput(VxEnum,vx,P1Enum); 1637 element->AddBasalInput(VyEnum,vy,P1Enum);1721 if(dim==2)element->AddBasalInput(VyEnum,vy,P1Enum); 1638 1722 element->AddBasalInput(VelEnum,vel,P1Enum); 1639 1723 … … 1706 1790 1707 1791 element->JacobianDeterminant(&Jdet,xyz_list,gauss); 1708 this->GetBSSA(B,basalelement, xyz_list,gauss_base);1709 this->GetBSSAprime(Bprime,basalelement, xyz_list,gauss_base);1792 this->GetBSSA(B,basalelement,2,xyz_list,gauss_base); 1793 this->GetBSSAprime(Bprime,basalelement,2,xyz_list,gauss_base); 1710 1794 1711 1795 element->ViscosityL1L2(&viscosity,xyz_list,gauss,vx_input,vy_input,surface_input); … … 2428 2512 Bprime[numnodes*1+i] = dbasis[1*numnodes+i]; 2429 2513 } 2430 2514 } 2431 2515 2432 2516 /*Clean-up*/ … … 3696 3780 3697 3781 element->JacobianDeterminant(&Jdet, xyz_list,gauss); 3698 this->GetBSSA(&B[0][0],basaltria, 3699 this->GetBSSAprime(&Bprime[0][0], basaltria,xyz_list, gauss_tria);3782 this->GetBSSA(&B[0][0],basaltria,2,xyz_list, gauss_tria); 3783 this->GetBSSAprime(&Bprime[0][0],basaltria,2,xyz_list, gauss_tria); 3700 3784 3701 3785 if(approximation==SSAHOApproximationEnum){ … … 3998 4082 element->JacobianDeterminant(&Jdet, xyz_list,gauss); 3999 4083 this->GetBSSAHO(B, element,xyz_list, gauss); 4000 this->GetBSSAprime(Bprime, basaltria,xyz_list, gauss_tria);4084 this->GetBSSAprime(Bprime,basaltria,2,xyz_list, gauss_tria); 4001 4085 element->ViscosityHO(&viscosity,3,xyz_list,gauss,vx_input,vy_input); 4002 4086 element->ViscosityHO(&oldviscosity,3,xyz_list,gauss,vxold_input,vyold_input); -
issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.h
r17242 r17297 39 39 ElementVector* CreatePVectorSSADrivingStress(Element* element); 40 40 ElementVector* CreatePVectorSSAFront(Element* element); 41 void GetBSSA(IssmDouble* B,Element* element, IssmDouble* xyz_list,Gauss* gauss);42 void GetBSSAprime(IssmDouble* B,Element* element, IssmDouble* xyz_list,Gauss* gauss);43 void GetBSSAFriction(IssmDouble* B,Element* element, IssmDouble* xyz_list,Gauss* gauss);41 void GetBSSA(IssmDouble* B,Element* element,int dim,IssmDouble* xyz_list,Gauss* gauss); 42 void GetBSSAprime(IssmDouble* B,Element* element,int dim,IssmDouble* xyz_list,Gauss* gauss); 43 void GetBSSAFriction(IssmDouble* B,Element* element,int dim,IssmDouble* xyz_list,Gauss* gauss); 44 44 void InputUpdateFromSolutionSSA(IssmDouble* solution,Element* element); 45 45 /*L1L2*/
Note:
See TracChangeset
for help on using the changeset viewer.