Changeset 5997
- Timestamp:
- 09/23/10 14:59:06 (14 years ago)
- Location:
- issm/trunk/src/c
- Files:
-
- 2 deleted
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/Makefile.am
r5989 r5997 1146 1146 ./solvers/solver_adjoint_linear.cpp\ 1147 1147 ./solvers/solver_diagnostic_nonlinear.cpp\ 1148 ./solvers/solver_diagnostic_nonlinear_kgg.cpp\1149 ./solvers/solver_diagnostic_nonlinear_kff.cpp\1150 1148 ./solvers/solver_thermal_nonlinear.cpp\ 1151 1149 ./modules/Bamgx/Bamgx.cpp\ -
issm/trunk/src/c/solvers/solver_diagnostic_nonlinear.cpp
r5772 r5997 12 12 void solver_diagnostic_nonlinear(FemModel* femmodel,bool conserve_loads){ 13 13 14 /*intermediary: */ 15 Mat Kgg = NULL, Kff = NULL, Kfs = NULL; 16 Vec ug = NULL, uf = NULL, old_ug= NULL, old_uf = NULL; 17 Vec pg = NULL, pf = NULL; 18 Loads* loads=NULL; 19 int converged; 20 int constraints_converged; 21 int num_unstable_constraints; 22 int count; 23 14 24 /*parameters:*/ 25 int verbose=0; 15 26 bool kff=false; 27 int min_mechanical_constraints; 28 int max_nonlinear_iterations; 16 29 17 30 /*Recover parameters: */ 31 femmodel->parameters->FindParam(&verbose,VerboseEnum); 18 32 femmodel->parameters->FindParam(&kff,KffEnum); 33 femmodel->parameters->FindParam(&min_mechanical_constraints,MinMechanicalConstraintsEnum); 34 femmodel->parameters->FindParam(&max_nonlinear_iterations,MaxNonlinearIterationsEnum); 35 36 /*Were loads requested as output? : */ 37 if(conserve_loads) loads=(Loads*)femmodel->loads->Copy(); //protect loads from being modified by the solution 38 else loads=(Loads*)femmodel->loads; //modify loads in this solution 19 39 20 if(!kff) solver_diagnostic_nonlinear_kgg(femmodel,conserve_loads);21 else solver_diagnostic_nonlinear_kff(femmodel,conserve_loads);40 count=1; 41 converged=0; 22 42 43 /*Start non-linear iteration using input velocity: */ 44 GetSolutionFromInputsx(&ug, femmodel->elements, femmodel->nodes, femmodel->vertices, loads, femmodel->materials, femmodel->parameters); 45 Reducevectorgtofx(&uf, ug, femmodel->nodesets,femmodel->parameters); 46 47 //Update once again the solution to make sure that vx and vxold are similar (for next step in transient or steadystate) 48 InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug); 49 50 for(;;){ 51 52 //save pointer to old velocity 53 VecFree(&old_ug);old_ug=ug; 54 VecFree(&old_uf);old_uf=uf; 55 56 if(kff){ 57 SystemMatricesx(NULL,&Kff, &Kfs, NULL,&pf, NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,loads,femmodel->materials,femmodel->parameters); 58 Reduceloadx(pf, Kfs, femmodel->ys, femmodel->parameters); MatFree(&Kfs); 59 } 60 else{ 61 SystemMatricesx(&Kgg, NULL, NULL, &pg,NULL, NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,loads,femmodel->materials,femmodel->parameters); 62 Reducematrixfromgtofx(&Kff,&Kfs,Kgg,femmodel->nodesets,femmodel->parameters); MatFree(&Kgg); 63 Reduceloadfromgtofx(&pf, pg, Kfs, femmodel->ys, femmodel->nodesets,femmodel->parameters); VecFree(&pg); MatFree(&Kfs); 64 } 65 66 Solverx(&uf, Kff, pf, old_uf, femmodel->parameters); 67 68 Mergesolutionfromftogx(&ug, uf,femmodel->ys,femmodel->nodesets,femmodel->parameters); 69 70 InputUpdateFromSolutionx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug); 71 72 PenaltyConstraintsx(&constraints_converged, &num_unstable_constraints, femmodel->elements,femmodel->nodes,femmodel->vertices,loads,femmodel->materials,femmodel->parameters); 73 if(verbose)_printf_(" number of unstable constraints: %i\n",num_unstable_constraints); 74 75 convergence(&converged,Kff,pf,uf,old_uf,femmodel->parameters); MatFree(&Kff);VecFree(&pf); 76 77 InputUpdateFromConstantx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,converged,ConvergedEnum); 78 79 //rift convergence 80 if (!constraints_converged) { 81 if (converged){ 82 if (num_unstable_constraints <= min_mechanical_constraints) converged=1; 83 else converged=0; 84 } 85 } 86 87 /*Increase count: */ 88 count++; 89 if(converged==1)break; 90 if(count>=max_nonlinear_iterations){ 91 _printf_(" maximum number of iterations (%i) exceeded\n",max_nonlinear_iterations); 92 break; 93 } 94 } 95 96 /*clean-up*/ 97 if(conserve_loads) delete loads; 98 VecFree(&uf); 99 VecFree(&ug); 100 VecFree(&old_uf); 101 VecFree(&old_ug); 23 102 } -
issm/trunk/src/c/solvers/solvers.h
r5772 r5997 14 14 void solver_thermal_nonlinear(FemModel* femmodel); 15 15 void solver_diagnostic_nonlinear(FemModel* femmodel,bool conserve_loads); 16 void solver_diagnostic_nonlinear_kgg(FemModel* femmodel,bool conserve_loads);17 void solver_diagnostic_nonlinear_kff(FemModel* femmodel,bool conserve_loads);18 16 void solver_linear(FemModel* femmodel); 19 17 void solver_adjoint_linear(FemModel* femmodel);
Note:
See TracChangeset
for help on using the changeset viewer.