Changeset 4114
- Timestamp:
- 06/21/10 18:03:02 (15 years ago)
- Location:
- issm/trunk/src
- Files:
-
- 6 added
- 3 deleted
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/solvers/solver_diagnostic_nonlinear.cpp
r4085 r4114 10 10 #include "./solvers.h" 11 11 12 void solver_diagnostic_nonlinear(Vec* pug,Mat* pKff0,Mat* pKfs0, FemModel* fem ,bool conserve_loads){12 void solver_diagnostic_nonlinear(Vec* pug,Mat* pKff0,Mat* pKfs0, FemModel* femmodel,bool conserve_loads){ 13 13 14 14 … … 42 42 /*Recover parameters: */ 43 43 kflag=1; pflag=1; 44 fem ->parameters->FindParam(&numberofnodes,NumberOfNodesEnum);45 fem ->parameters->FindParam(&solver_string,SolverStringEnum);46 fem ->parameters->FindParam(&dim,DimEnum);47 fem ->parameters->FindParam(&verbose,VerboseEnum);48 fem ->parameters->FindParam(&min_mechanical_constraints,MinMechanicalConstraintsEnum);49 fem ->parameters->FindParam(&max_nonlinear_iterations,MaxNonlinearIterationsEnum);44 femmodel->parameters->FindParam(&numberofnodes,NumberOfNodesEnum); 45 femmodel->parameters->FindParam(&solver_string,SolverStringEnum); 46 femmodel->parameters->FindParam(&dim,DimEnum); 47 femmodel->parameters->FindParam(&verbose,VerboseEnum); 48 femmodel->parameters->FindParam(&min_mechanical_constraints,MinMechanicalConstraintsEnum); 49 femmodel->parameters->FindParam(&max_nonlinear_iterations,MaxNonlinearIterationsEnum); 50 50 51 51 /*Were loads requested as output? : */ 52 52 if(conserve_loads){ 53 loads=fem ->loads->Copy(); //protect loads from being modified by the solution53 loads=femmodel->loads->Copy(); //protect loads from being modified by the solution 54 54 } 55 55 else{ 56 loads=fem ->loads; //modify loads in this solution56 loads=femmodel->loads; //modify loads in this solution 57 57 } 58 58 … … 61 61 62 62 /*Start non-linear iteration using input velocity: */ 63 GetSolutionFromInputsx(&ug, fem ->elements, fem->nodes, fem->vertices, fem->loads, fem->materials, fem->parameters);64 Reducevectorgtofx(&uf, ug, fem ->nodesets);63 GetSolutionFromInputsx(&ug, femmodel->elements, femmodel->nodes, femmodel->vertices, loads, femmodel->materials, femmodel->parameters); 64 Reducevectorgtofx(&uf, ug, femmodel->nodesets); 65 65 66 66 for(;;){ … … 71 71 72 72 if (verbose) _printf_(" Generating matrices\n"); 73 //*Generate system matrices 74 SystemMatricesx(&Kgg, &pg,fem->elements,fem->nodes,fem->vertices,loads,fem->materials,fem->parameters,kflag,pflag); 73 SystemMatricesx(&Kgg, &pg,femmodel->elements,femmodel->nodes,femmodel->vertices,loads,femmodel->materials,femmodel->parameters,kflag,pflag); 75 74 76 75 if (verbose) _printf_(" Generating penalty matrices\n"); 77 //*Generate penalty system matrices 78 PenaltySystemMatricesx(Kgg, pg,NULL,fem->elements,fem->nodes,fem->vertices,loads,fem->materials,fem->parameters,kflag,pflag); 79 76 PenaltySystemMatricesx(Kgg, pg,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,loads,femmodel->materials,femmodel->parameters,kflag,pflag); 77 80 78 if (verbose) _printf_(" reducing matrix from g to f set\n"); 81 /*!Reduce matrix from g to f size:*/ 82 Reducematrixfromgtofx(&Kff,&Kfs,Kgg,fem->Gmn,fem->nodesets); 79 Reducematrixfromgtofx(&Kff,&Kfs,Kgg,femmodel->Gmn,femmodel->nodesets); 83 80 84 81 /*Free ressources: */ … … 86 83 87 84 if (verbose) _printf_(" reducing load from g to f set\n"); 88 /*!Reduce load from g to f size: */ 89 Reduceloadfromgtofx(&pf, pg, fem->Gmn, Kfs, fem->ys, fem->nodesets); 85 Reduceloadfromgtofx(&pf, pg, femmodel->Gmn, Kfs, femmodel->ys, femmodel->nodesets); 90 86 91 87 //no need for pg and Kfs anymore … … 93 89 MatFree(&Kfs); 94 90 95 /*Solve: */96 91 if (verbose) _printf_(" solving\n"); 97 92 Solverx(&uf, Kff, pf, old_uf, solver_string); 98 93 99 //Merge back to g set100 94 if (verbose) _printf_(" merging solution from f to g set\n"); 101 Mergesolutionfromftogx(&ug, uf,fem ->Gmn,fem->ys,fem->nodesets);95 Mergesolutionfromftogx(&ug, uf,femmodel->Gmn,femmodel->ys,femmodel->nodesets); 102 96 103 97 //Update inputs using new solution: 104 InputUpdateFromSolutionx( fem ->elements,fem->nodes, fem->vertices, fem->loads, fem->materials, fem->parameters,ug);98 InputUpdateFromSolutionx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug); 105 99 106 //Deal with penalty loads107 100 if (verbose) _printf_(" penalty constraints\n"); 108 PenaltyConstraintsx(&constraints_converged, &num_unstable_constraints, fem ->elements,fem->nodes,fem->vertices,loads,fem->materials,fem->parameters);101 PenaltyConstraintsx(&constraints_converged, &num_unstable_constraints, femmodel->elements,femmodel->nodes,femmodel->vertices,loads,femmodel->materials,femmodel->parameters); 109 102 110 103 if(verbose)_printf_(" number of unstable constraints: %i\n",num_unstable_constraints); 111 104 112 105 /*Figure out if convergence is reached.*/ 113 convergence(&converged,Kff,pf,uf,old_uf,fem ->parameters);106 convergence(&converged,Kff,pf,uf,old_uf,femmodel->parameters); 114 107 MatFree(&Kff);VecFree(&pf); 115 108 116 109 /*add converged to inputs: */ 117 InputUpdateFromConstantx( fem ->elements,fem->nodes, fem->vertices, fem->loads, fem->materials, fem->parameters,converged,ConvergedEnum);110 InputUpdateFromConstantx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,converged,ConvergedEnum); 118 111 119 112 //rift convergence … … 137 130 if (dim==3){ 138 131 if(verbose)_printf_("%s\n","extruding velocity and pressure in 3d..."); 139 InputExtrudex( fem ->elements,fem->nodes,fem->vertices,fem->loads,fem->materials,fem->parameters,VxEnum);140 InputExtrudex( fem ->elements,fem->nodes,fem->vertices,fem->loads,fem->materials,fem->parameters,VyEnum);132 InputExtrudex( femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VxEnum); 133 InputExtrudex( femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VyEnum); 141 134 } 142 135 … … 146 139 kflag=1; pflag=0; //stiffness generation only 147 140 148 SystemMatricesx(&Kgg, &pg,fem ->elements,fem->nodes,fem->vertices,loads,fem->materials,fem->parameters,kflag,pflag);149 Reducematrixfromgtofx(&Kff,&Kfs,Kgg,fem ->Gmn,fem->nodesets);141 SystemMatricesx(&Kgg, &pg,femmodel->elements,femmodel->nodes,femmodel->vertices,loads,femmodel->materials,femmodel->parameters,kflag,pflag); 142 Reducematrixfromgtofx(&Kff,&Kfs,Kgg,femmodel->Gmn,femmodel->nodesets); 150 143 MatFree(&Kgg);VecFree(&pg); 151 144 -
issm/trunk/src/m/solutions/jpl/NewFemModel.m
r4063 r4114 31 31 32 32 displaystring(md.verbose,'%s',' generating single point constraints...'); 33 [femmodel.nodes,femmodel. yg(i)]=SpcNodes(femmodel.nodes,femmodel.constraints,analysis_type);33 [femmodel.nodes,femmodel.m_yg(i)]=SpcNodes(femmodel.nodes,femmodel.constraints,analysis_type); 34 34 35 35 displaystring(md.verbose,'%s',' generating rigid body constraints...'); 36 [femmodel. Rmg(i),femmodel.nodes]=MpcNodes(femmodel.nodes,femmodel.constraints,analysis_types);36 [femmodel.m_Rmg(i),femmodel.nodes]=MpcNodes(femmodel.nodes,femmodel.constraints,analysis_types); 37 37 38 38 displaystring(md.verbose,'%s',' generating node sets...'); 39 femmodel. nodesets(i)=BuildNodeSets(femmodel.nodes,analysis_type);39 femmodel.m_nodesets(i)=BuildNodeSets(femmodel.nodes,analysis_type); 40 40 41 41 displaystring(md.verbose,'%s',' reducing single point constraints vector...'); 42 femmodel. ys(i)=Reducevectorgtos(femmodel.yg(i).vector,femmodel.nodesets(i));42 femmodel.m_ys(i)=Reducevectorgtos(femmodel.m_yg(i).vector,femmodel.m_nodesets(i)); 43 43 44 44 displaystring(md.verbose,'%s',' normalizing rigid body constraints matrix...'); 45 femmodel. Gmn(i)= NormalizeConstraints(femmodel.Rmg(i),femmodel.nodesets(i));45 femmodel.m_Gmn(i)= NormalizeConstraints(femmodel.m_Rmg(i),femmodel.m_nodesets(i)); 46 46 47 47 displaystring(md.verbose,'%s',' configuring element and loads...');
Note:
See TracChangeset
for help on using the changeset viewer.