Changeset 17511
- Timestamp:
- 03/20/14 17:16:09 (11 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/DepthAverageAnalysis.cpp
r17494 r17511 50 50 51 51 /*Intermediaries */ 52 IssmDouble Jdet,D ;52 IssmDouble Jdet,D,dt=1.e+9; 53 53 IssmDouble *xyz_list = NULL; 54 54 … … 59 59 case Mesh2DverticalEnum: dim = 2; break; 60 60 case Mesh3DEnum: dim = 3; break; 61 case Mesh3DtetrasEnum: dim = 3; break; 61 62 default: _error_("mesh "<<EnumToStringx(meshtype)<<" not supported yet"); 62 63 } … … 68 69 ElementMatrix* Ke = element->NewElementMatrix(); 69 70 IssmDouble* B = xNew<IssmDouble>(numnodes); 70 IssmDouble* Bprime = xNew<IssmDouble>(numnodes);71 71 72 72 /*Retrieve all inputs and parameters*/ … … 79 79 80 80 element->JacobianDeterminant(&Jdet,xyz_list,gauss); 81 element->NodalFunctions(Bprime,gauss);82 81 GetB(B,element,dim,xyz_list,gauss); 83 D=gauss->weight*Jdet ;82 D=gauss->weight*Jdet*dt; 84 83 84 /*vertical diffusion*/ 85 85 TripleMultiply(B,1,numnodes,1, 86 86 &D,1,1,0, 87 Bprime,1,numnodes,0, 87 B,1,numnodes,0, 88 &Ke->values[0],1); 89 90 /*Next value*/ 91 D=gauss->weight*Jdet; 92 element->NodalFunctions(B,gauss); 93 TripleMultiply(B,numnodes,1,0, 94 &D,1,1,0, 95 B,1,numnodes,0, 88 96 &Ke->values[0],1); 89 97 } … … 92 100 xDelete<IssmDouble>(xyz_list); 93 101 xDelete<IssmDouble>(B); 94 xDelete<IssmDouble>(Bprime);95 102 delete gauss; 96 103 return Ke; 97 104 }/*}}}*/ 98 105 ElementVector* DepthAverageAnalysis::CreatePVector(Element* element){/*{{{*/ 99 return NULL; 106 107 /*Intermediaries*/ 108 int input_enum; 109 IssmDouble Jdet,scalar,value; 110 IssmDouble* xyz_list = NULL; 111 112 /*Fetch number of nodes and dof for this finite element*/ 113 int numnodes = element->GetNumberOfNodes(); 114 115 /*Initialize Element vector*/ 116 ElementVector* pe = element->NewElementVector(); 117 IssmDouble* basis = xNew<IssmDouble>(numnodes); 118 119 /*Retrieve all inputs and parameters*/ 120 element->GetVerticesCoordinates(&xyz_list); 121 element->FindParam(&input_enum,InputToDepthaverageEnum); 122 Input* input = element->GetInput(input_enum); _assert_(input); 123 124 /* Start looping on the number of gaussian points: */ 125 Gauss* gauss=element->NewGauss(3); 126 for(int ig=gauss->begin();ig<gauss->end();ig++){ 127 gauss->GaussPoint(ig); 128 129 element->JacobianDeterminant(&Jdet,xyz_list,gauss); 130 element->NodalFunctions(basis,gauss); 131 132 /* Build transient now */ 133 input->GetInputValue(&value, gauss); 134 scalar=value*Jdet*gauss->weight; 135 for(int i=0;i<numnodes;i++) pe->values[i]+=scalar*basis[i]; 136 137 } 138 139 /*Clean up and return*/ 140 xDelete<IssmDouble>(basis); 141 xDelete<IssmDouble>(xyz_list); 142 delete gauss; 143 return pe; 100 144 }/*}}}*/ 101 145 void DepthAverageAnalysis::GetB(IssmDouble* B,Element* element,int dim,IssmDouble* xyz_list,Gauss* gauss){/*{{{*/ -
issm/trunk-jpl/src/c/classes/Elements/Tetra.cpp
r17493 r17511 445 445 } 446 446 /*}}}*/ 447 /*FUNCTION Tetra::InputUpdateFromSolutionOneDof{{{*/ 448 void Tetra::InputUpdateFromSolutionOneDof(IssmDouble* solution,int enum_type){ 449 450 /*Intermediary*/ 451 int* doflist = NULL; 452 453 /*Fetch number of nodes for this finite element*/ 454 int numnodes = this->NumberofNodes(); 455 456 /*Fetch dof list and allocate solution vector*/ 457 GetDofList(&doflist,NoneApproximationEnum,GsetEnum); 458 IssmDouble* values = xNew<IssmDouble>(numnodes); 459 460 /*Use the dof list to index into the solution vector: */ 461 for(int i=0;i<numnodes;i++){ 462 values[i]=solution[doflist[i]]; 463 if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector"); 464 } 465 466 /*Add input to the element: */ 467 this->inputs->AddInput(new TetraInput(enum_type,values,P1Enum)); 468 469 /*Free ressources:*/ 470 xDelete<IssmDouble>(values); 471 xDelete<int>(doflist); 472 } 473 /*}}}*/ 447 474 /*FUNCTION Tetra::IsIceInElement THIS ONE{{{*/ 448 475 bool Tetra::IsIceInElement(){ -
issm/trunk-jpl/src/c/classes/Elements/Tetra.h
r17493 r17511 47 47 /*Update virtual functions resolution: {{{*/ 48 48 void InputUpdateFromSolutionOneDofCollapsed(IssmDouble* solution,int inputenum){_error_("not implemented yet");}; 49 void InputUpdateFromSolutionOneDof(IssmDouble* solution,int inputenum) {_error_("not implemented yet");};49 void InputUpdateFromSolutionOneDof(IssmDouble* solution,int inputenum); 50 50 void InputUpdateFromVector(IssmDouble* vector, int name, int type){_error_("not implemented yet");}; 51 51 #ifdef _HAVE_DAKOTA_ -
issm/trunk-jpl/src/c/cores/AnalysisConfiguration.cpp
r17305 r17511 26 26 27 27 case StressbalanceSolutionEnum: 28 numanalyses= 5;28 numanalyses=6; 29 29 analyses=xNew<int>(numanalyses); 30 30 analyses[0]=StressbalanceAnalysisEnum; … … 33 33 analyses[3]=L2ProjectionBaseAnalysisEnum; 34 34 analyses[4]=ExtrudeFromBaseAnalysisEnum; 35 analyses[5]=DepthAverageAnalysisEnum; 35 36 break; 36 37 -
issm/trunk-jpl/src/c/cores/cores.h
r17274 r17511 30 30 void controltao_core(FemModel* femmodel); 31 31 void masstransport_core(FemModel* femmodel); 32 void depthaverage_core(FemModel* femmodel); 32 33 void extrudefrombase_core(FemModel* femmodel); 33 34 void extrudefromtop_core(FemModel* femmodel); -
issm/trunk-jpl/src/c/cores/depthaverage_core.cpp
r17494 r17511 12 12 void depthaverage_core(FemModel* femmodel){ 13 13 14 if(VerboseSolution()) _printf0_(" extruding solution from base...\n");14 if(VerboseSolution()) _printf0_("depth averaging...\n"); 15 15 16 16 /*Call on core computations: */ -
issm/trunk-jpl/src/c/cores/surfaceslope_core.cpp
r16612 r17511 33 33 } 34 34 if(meshtype==Mesh2DverticalEnum){ 35 35 femmodel->parameters->SetParam(SurfaceSlopeXEnum,InputToExtrudeEnum); 36 36 extrudefrombase_core(femmodel); 37 37 }
Note:
See TracChangeset
for help on using the changeset viewer.