Changeset 17526
- Timestamp:
- 03/24/14 12:04:51 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
r17525 r17526 3387 3387 }/*}}}*/ 3388 3388 ElementVector* StressbalanceAnalysis::CreatePVectorFSViscousXTH(Element* element){/*{{{*/ 3389 _error_("STOP"); 3390 3391 int i,meshtype,dim; 3392 IssmDouble Jdet,forcex,forcey,forcez; 3389 3390 int i,tausize,meshtype,dim; 3391 IssmDouble Jdet,r; 3393 3392 IssmDouble *xyz_list = NULL; 3394 3393 … … 3396 3395 element->FindParam(&meshtype,MeshTypeEnum); 3397 3396 switch(meshtype){ 3398 case Mesh2DverticalEnum: dim = 2; break;3399 case Mesh3DEnum: dim = 3; break;3400 case Mesh3DtetrasEnum: dim = 3; break;3397 case Mesh2DverticalEnum: dim = 2; tausize = 3; break; 3398 case Mesh3DEnum: dim = 3; tausize = 6; break; 3399 case Mesh3DtetrasEnum: dim = 3; tausize = 6; break; 3401 3400 default: _error_("mesh "<<EnumToStringx(meshtype)<<" not supported yet"); 3402 3401 } 3402 3403 /*FIXME*/ 3404 r = 1.; 3403 3405 3404 3406 /*Fetch number of nodes and dof for this finite element*/ 3405 3407 int vnumnodes = element->NumberofNodesVelocity(); 3406 3408 int pnumnodes = element->NumberofNodesPressure(); 3409 int tnumnodes = element->GetNumberOfVertices(); //Tensors, P1 DG 3407 3410 3408 3411 /*Prepare coordinate system list*/ … … 3413 3416 3414 3417 /*Initialize vectors*/ 3415 ElementVector* pe = element->NewElementVector(FSvelocityEnum); 3416 IssmDouble* vbasis = xNew<IssmDouble>(vnumnodes); 3418 ElementVector* pe = element->NewElementVector(FSvelocityEnum); 3419 IssmDouble* Dstar = xNew<IssmDouble>(tausize*tnumnodes); 3420 IssmDouble* tau = xNew<IssmDouble>(tausize); 3417 3421 3418 3422 /*Retrieve all inputs and parameters*/ 3419 3423 element->GetVerticesCoordinates(&xyz_list); 3420 IssmDouble rho_ice =element->GetMaterialParameter(MaterialsRhoIceEnum);3421 IssmDouble gravity =element->GetMaterialParameter(ConstantsGEnum);3422 Input* loadingforcex_input=element->GetInput(LoadingforceXEnum); _assert_(loadingforcex_input);3423 Input* loadingforcey_input=element->GetInput(LoadingforceYEnum); _assert_(loadingforcey_input);3424 Input* loadingforcez_input=NULL;3425 if(dim==3){3426 loadingforcez_input=element->GetInput(LoadingforceZEnum); _assert_(loadingforcez_input);3427 }3428 3424 3429 3425 /* Start looping on the number of gaussian points: */ … … 3431 3427 for(int ig=gauss->begin();ig<gauss->end();ig++){ 3432 3428 gauss->GaussPoint(ig); 3433 3434 3429 element->JacobianDeterminant(&Jdet,xyz_list,gauss); 3435 element->NodalFunctionsVelocity(vbasis,gauss); 3436 3437 loadingforcex_input->GetInputValue(&forcex,gauss); 3438 loadingforcey_input->GetInputValue(&forcey,gauss); 3439 if(dim==3) loadingforcez_input->GetInputValue(&forcez,gauss); 3440 3441 for(i=0;i<vnumnodes;i++){ 3442 pe->values[i*dim+0] += +rho_ice*forcex *Jdet*gauss->weight*vbasis[i]; 3443 pe->values[i*dim+1] += +rho_ice*forcey *Jdet*gauss->weight*vbasis[i]; 3444 if(dim==3){ 3445 pe->values[i*dim+2] += +rho_ice*forcez*Jdet*gauss->weight*vbasis[i]; 3446 pe->values[i*dim+2] += -rho_ice*gravity*Jdet*gauss->weight*vbasis[i]; 3447 } 3448 else{ 3449 pe->values[i*dim+1] += -rho_ice*gravity*Jdet*gauss->weight*vbasis[i]; 3450 } 3451 } 3430 _error_("STOP"); 3452 3431 } 3453 3432 … … 3458 3437 delete gauss; 3459 3438 xDelete<int>(cs_list); 3460 xDelete<IssmDouble>(vbasis);3461 3439 xDelete<IssmDouble>(xyz_list); 3462 3440 return pe;
Note:
See TracChangeset
for help on using the changeset viewer.