Changeset 18654
- Timestamp:
- 10/17/14 11:57:36 (10 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/UzawaPressureAnalysis.cpp
r18561 r18654 81 81 IssmDouble* M = xNew<IssmDouble>(numnodes); 82 82 83 IssmDouble connectivity; 83 84 /*Retrieve all inputs and parameters*/ 84 85 element->GetVerticesCoordinates(&xyz_list); 85 86 Gauss* gauss = element->NewGauss(5); 87 for(int ig=gauss->begin();ig<gauss->end();ig++){ 88 gauss->GaussPoint(ig); 89 90 element->JacobianDeterminant(&Jdet,xyz_list,gauss); 91 this->GetM(M,element,gauss); 92 D_scalar=gauss->weight*Jdet; 93 TripleMultiply(M,1,numnodes,1, 94 &D_scalar,1,1,0, 95 M,1,numnodes,0, 96 &Ke->values[0],1); 86 int numvertices = element->GetNumberOfVertices(); 87 88 //Gauss* gauss = element->NewGauss(5); 89 //for(int ig=gauss->begin();ig<gauss->end();ig++){ 90 // gauss->GaussPoint(ig); 91 92 // element->JacobianDeterminant(&Jdet,xyz_list,gauss); 93 // this->GetM(M,element,gauss); 94 // D_scalar=gauss->weight*Jdet; 95 // //TripleMultiply(M,1,numnodes,1, 96 // // &D_scalar,1,1,0, 97 // // M,1,numnodes,0, 98 // // &Ke->values[0],1); 99 100 //} 101 for(int iv=0;iv<numvertices;iv++){ 102 connectivity=(IssmDouble)element->VertexConnectivity(iv); 103 Ke->values[iv*numvertices+iv]=1./connectivity; 97 104 } 98 105 99 106 /*Clean up and return*/ 100 delete gauss;107 //delete gauss; 101 108 xDelete<IssmDouble>(xyz_list); 102 109 xDelete<IssmDouble>(M); … … 202 209 IssmDouble* valueslambda = xNewZeroInit<IssmDouble>(numnodessigma); 203 210 IssmDouble* pressure = xNew<IssmDouble>(numnodes); 204 Input* sigmann_input = element->GetInput(SigmaNNEnum); _assert_(sigmann_input);205 211 Input* vx_input = element->GetInput(VxEnum); _assert_(vx_input); 206 212 Input* vy_input = element->GetInput(VyEnum); _assert_(vy_input); … … 217 223 /*Now compute sigmann if on base*/ 218 224 if(element->IsOnBase() && 0){ 225 Input* sigmann_input = element->GetInput(SigmaNNEnum); _assert_(sigmann_input); 219 226 if(dim==3) _error_("not implemented yet"); 220 227 -
issm/trunk-jpl/src/c/solutionsequences/solutionsequence_la.cpp
r18208 r18654 39 39 40 40 /*Convergence criterion*/ 41 int count = 0; 42 Vector<IssmDouble>* vel = NULL; 43 Vector<IssmDouble>* vel_old = NULL; 41 int count = 0; 42 int count_local = 0; 43 Vector<IssmDouble>* vel = NULL; 44 Vector<IssmDouble>* vel_old = NULL; 45 Vector<IssmDouble>* vel_old_local = NULL; 44 46 GetVectorFromInputsx(&vel,femmodel,VxEnum,VertexEnum); 45 47 GetVectorFromInputsx(&pug,femmodel,PressureEnum,VertexEnum); … … 49 51 50 52 /*save pointer to old velocity*/ 51 delete vel_old;vel_old=vel ;53 delete vel_old;vel_old=vel->Duplicate(); vel->Copy(vel_old); 52 54 delete pug_old;pug_old=pug; 53 55 pressure_converged=false; vel_converged=false; 54 56 55 /*Solve KU=F*/ 56 femmodel->SetCurrentConfiguration(StressbalanceAnalysisEnum); 57 femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum); 58 SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL,femmodel); 59 CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type); 60 Reduceloadx(pf, Kfs, ys); delete Kfs; 61 Solverx(&uf, Kff, pf, NULL, df, femmodel->parameters); 62 delete Kff; delete pf; delete df; 63 Mergesolutionfromftogx(&ug, uf,ys,femmodel->nodes,femmodel->parameters);delete uf; delete ys; 57 while(true){ 58 count_local++; 59 delete vel_old_local;vel_old_local=vel; 60 /*Solve KU=F*/ 61 femmodel->SetCurrentConfiguration(StressbalanceAnalysisEnum); 62 femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum); 63 SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL,femmodel); 64 CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type); 65 Reduceloadx(pf, Kfs, ys); delete Kfs; 66 Solverx(&uf, Kff, pf, NULL, df, femmodel->parameters); 67 delete Kff; delete pf; delete df; 68 Mergesolutionfromftogx(&ug, uf,ys,femmodel->nodes,femmodel->parameters);delete uf; delete ys; 64 69 65 /*Update solution*/ 66 InputUpdateFromSolutionx(femmodel,ug); delete ug; 67 GetVectorFromInputsx(&vel,femmodel,VxEnum,VertexEnum); 70 /*Update solution*/ 71 InputUpdateFromSolutionx(femmodel,ug); delete ug; 72 GetVectorFromInputsx(&vel,femmodel,VxEnum,VertexEnum); 73 /*Check for convergence*/ 74 Vector<IssmDouble>* dvel_local=vel_old_local->Duplicate(); vel_old_local->Copy(dvel_local); dvel_local->AYPX(vel,-1.0); 75 IssmDouble ndu=dvel_local->Norm(NORM_TWO); delete dvel_local; 76 IssmDouble nu =vel_old_local->Norm(NORM_TWO); 77 if (xIsNan<IssmDouble>(ndu) || xIsNan<IssmDouble>(nu)) _error_("convergence criterion is NaN!"); 78 if((ndu/nu)<eps_rel){ 79 if(VerboseConvergence()) _printf0_(setw(50) << left << " Convergence criterion: norm(du)/norm(u)" << ndu/nu*100 << " < " << eps_rel*100 << " %\n"); 80 break; 81 } 82 else{ 83 if(VerboseConvergence()) _printf0_(setw(50) << left << " Convergence criterion: norm(du)/norm(u)" << ndu/nu*100 << " > " << eps_rel*100 << " %\n"); 84 } 85 if(count_local>=max_nonlinear_iterations){ 86 _printf0_(" maximum number of nonlinear iterations (" << max_nonlinear_iterations << ") exceeded\n"); 87 break; 88 } 89 } 90 count_local=0; 68 91 69 92 femmodel->SetCurrentConfiguration(UzawaPressureAnalysisEnum); … … 81 104 82 105 /*Check for convergence*/ 83 Vector<IssmDouble>* dvel=vel_old ->Duplicate(); vel_old->Copy(dvel); dvel->AYPX(vel,-1.0);106 Vector<IssmDouble>* dvel=vel_old_local->Duplicate(); vel_old_local->Copy(dvel); dvel->AYPX(vel,-1.0); 84 107 IssmDouble ndu=dvel->Norm(NORM_TWO); delete dvel; 85 IssmDouble nu =vel_old ->Norm(NORM_TWO);108 IssmDouble nu =vel_old_local->Norm(NORM_TWO); 86 109 if (xIsNan<IssmDouble>(ndu) || xIsNan<IssmDouble>(nu)) _error_("convergence criterion is NaN!"); 87 110 if((ndu/nu)<eps_rel){ … … 119 142 delete vel; 120 143 delete vel_old; 144 delete vel_old_local; 121 145 delete stressanalysis; 122 146 delete pressureanalysis;
Note:
See TracChangeset
for help on using the changeset viewer.