Changeset 5693
- Timestamp:
- 09/07/10 14:36:42 (15 years ago)
- Location:
- issm/trunk/src
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/modules/SystemMatricesx/SystemMatricesx.cpp
r5689 r5693 4 4 5 5 #include "./SystemMatricesx.h" 6 7 6 #include "../../shared/shared.h" 8 7 #include "../../include/include.h" … … 10 9 #include "../../EnumDefinitions/EnumDefinitions.h" 11 10 12 void SystemMatricesx(Mat* pKgg, Vec* ppg, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters, int kflag,intpflag){11 void SystemMatricesx(Mat* pKgg, Vec* ppg,double* pkmax,Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters,bool kflag,bool pflag,bool penalty_kflag,bool penalty_pflag){ 13 12 14 13 /*intermediary: */ 15 int gsize; 16 int i,j; 17 int connectivity; 18 int numberofdofspernode; 19 Element* element=NULL; 20 Load* load=NULL; 14 int i,j,gsize; 15 int connectivity, numberofdofspernode; 16 int analysis_type, configuration_type; 17 Element *element = NULL; 18 Load *load = NULL; 21 19 22 20 /*output: */ 23 Mat Kgg=NULL; 24 Vec pg=NULL; 25 26 int analysis_type; 27 int configuration_type; 28 29 /*Display message*/ 30 int verbose; parameters->FindParam(&verbose,VerboseEnum); 31 if (verbose) printf(" Generating matrices\n"); 21 Mat Kgg = NULL; 22 Vec pg = NULL; 23 double kmax = 0; 32 24 33 25 /*retrive parameters: */ 34 26 parameters->FindParam(&analysis_type,AnalysisTypeEnum); 35 27 parameters->FindParam(&configuration_type,ConfigurationTypeEnum); 36 37 /*Recover parameters: */38 28 parameters->FindParam(&connectivity,ConnectivityEnum); 39 29 40 30 /*Get size of matrix: */ 41 31 gsize=nodes->NumberOfDofs(configuration_type); 42 43 /*Get numberofdofspernode: */44 32 numberofdofspernode=nodes->MaxNumDofs(configuration_type); 45 33 46 /*Compute stiffness matrix*/ 34 /*Checks in debugging mode {{{1*/ 35 ISSMASSERT(*pKgg==NULL); 36 ISSMASSERT(*ppg==NULL); 37 if(penalty_kflag)ISSMASSERT(kflag); 38 if(penalty_pflag)ISSMASSERT(pflag); 39 /*}}}*/ 40 41 /*Compute penalty free mstiffness matrix and load vector*/ 47 42 if(kflag){ 48 43 49 /*Allocate Kgg*/50 44 Kgg=NewMat(gsize,gsize,NULL,&connectivity,&numberofdofspernode); 51 45 … … 67 61 MatCompress(Kgg); 68 62 } 69 70 /*Compute Load vector*/71 63 if(pflag){ 72 64 73 /*Allocate pg*/74 65 pg=NewVec(gsize); 75 66 … … 86 77 } 87 78 88 /*Assemble right hand side: */89 79 VecAssemblyBegin(pg); 90 80 VecAssemblyEnd(pg); 91 81 } 92 82 83 /*Now, deal with penalties*/ 84 if(penalty_kflag){ 85 86 /*Now, figure out maximum value of K_gg, so that we can penalize it correctly: */ 87 MatNorm(Kgg,NORM_INFINITY,&kmax); 88 89 /*Fill stiffness matrix from loads: */ 90 for (i=0;i<loads->Size();i++){ 91 load=(Load*)loads->GetObjectByOffset(i); 92 if (load->InAnalysis(configuration_type)) load->PenaltyCreateKMatrix(Kgg,kmax); 93 } 94 95 /*Assemble matrix and compress matrix to save memory: */ 96 MatAssemblyBegin(Kgg,MAT_FINAL_ASSEMBLY); 97 MatAssemblyEnd(Kgg,MAT_FINAL_ASSEMBLY); 98 MatCompress(Kgg); 99 } 100 if(penalty_pflag){ 101 102 /*Fill right hand side vector, from loads: */ 103 for (i=0;i<loads->Size();i++){ 104 load=(Load*)loads->GetObjectByOffset(i); 105 if (load->InAnalysis(configuration_type)) load->PenaltyCreatePVector(pg,kmax); 106 } 107 108 VecAssemblyBegin(pg); 109 VecAssemblyEnd(pg); 110 } 93 111 94 112 /*Assign output pointers: */ 95 113 *pKgg=Kgg; 96 114 *ppg=pg; 97 115 if(pkmax) *pkmax=kmax; 98 116 } -
issm/trunk/src/c/modules/SystemMatricesx/SystemMatricesx.h
r4236 r5693 10 10 11 11 /* local prototypes: */ 12 void SystemMatricesx(Mat* pKgg, Vec* ppg,Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters, int kflag,int pflag); 12 void SystemMatricesx(Mat* pKgg, Vec* ppg,double* pkmax,Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters, 13 bool kflag=true,bool pflag=true,bool penalty_kflag=true,bool penalty_pflag=true); 13 14 14 15 #endif /* _SYSTEMMATRICESX_H */ 15 -
issm/trunk/src/c/solvers/solver_adjoint_linear.cpp
r5689 r5693 26 26 Vec pf=NULL; 27 27 28 kflag=1; pflag=1; 29 SystemMatricesx(&Kgg, &pg,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,kflag,pflag); 30 PenaltySystemMatricesx(Kgg, pg,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,kflag,pflag); 28 SystemMatricesx(&Kgg, &pg,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters); 31 29 32 30 Reducematrixfromgtofx(&Kff,&Kfs,Kgg,femmodel->nodesets,femmodel->parameters); MatFree(&Kgg); -
issm/trunk/src/c/solvers/solver_diagnostic_nonlinear.cpp
r5689 r5693 34 34 35 35 /*parameters:*/ 36 int kflag,pflag;37 36 int verbose=0; 38 37 39 38 /*Recover parameters: */ 40 kflag=1; pflag=1;41 39 femmodel->parameters->FindParam(&verbose,VerboseEnum); 42 40 femmodel->parameters->FindParam(&min_mechanical_constraints,MinMechanicalConstraintsEnum); … … 67 65 VecFree(&old_uf);old_uf=uf; 68 66 69 SystemMatricesx(&Kgg, &pg,femmodel->elements,femmodel->nodes,femmodel->vertices,loads,femmodel->materials,femmodel->parameters,kflag,pflag); 70 PenaltySystemMatricesx(Kgg, pg,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,loads,femmodel->materials,femmodel->parameters,kflag,pflag); 67 SystemMatricesx(&Kgg, &pg,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,loads,femmodel->materials,femmodel->parameters); 71 68 72 69 Reducematrixfromgtofx(&Kff,&Kfs,Kgg,femmodel->nodesets,femmodel->parameters); -
issm/trunk/src/c/solvers/solver_linear.cpp
r5689 r5693 9 9 10 10 void solver_linear(FemModel* femmodel){ 11 12 /*parameters:*/13 int kflag,pflag;14 int verbose=0;15 11 16 12 /*output: */ … … 25 21 Vec pf=NULL; 26 22 27 /*Recover parameters: */ 28 kflag=1; pflag=1; 29 femmodel->parameters->FindParam(&verbose,VerboseEnum); 30 31 SystemMatricesx(&Kgg, &pg,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,kflag,pflag); 32 PenaltySystemMatricesx(Kgg, pg,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,kflag,pflag); 23 SystemMatricesx(&Kgg,&pg,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters); 33 24 34 25 Reducematrixfromgtofx(&Kff,&Kfs,Kgg,femmodel->nodesets,femmodel->parameters); MatFree(&Kgg); -
issm/trunk/src/c/solvers/solver_thermal_nonlinear.cpp
r5689 r5693 54 54 InputUpdateFromConstantx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,reset_penalties,ResetPenaltiesEnum); 55 55 56 //*Generate system matrices 57 if (!lowmem){ 58 59 /*Compute Kgg_nopenalty and pg_nopenalty once for all: */ 60 if (count==1){ 61 SystemMatricesx(&Kgg_nopenalty, &pg_nopenalty,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,kflag,pflag); 62 } 63 64 /*Copy K_gg_nopenalty into Kgg, same for pg: */ 65 MatDuplicate(Kgg_nopenalty,MAT_COPY_VALUES,&Kgg); 66 VecDuplicatePatch(&pg,pg_nopenalty); 67 68 //apply penalties each time 69 PenaltySystemMatricesx(Kgg, pg,&melting_offset,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,kflag,pflag); 70 } 71 else{ 72 SystemMatricesx(&Kgg, &pg,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,kflag,pflag); 73 //apply penalties 74 PenaltySystemMatricesx(Kgg, pg,&melting_offset,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,kflag,pflag); 75 } 56 /*===================== DEBUGING ====================*/ 57 if (count==1) SystemMatricesx(&Kgg_nopenalty,&pg_nopenalty,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters); 58 MatDuplicate(Kgg_nopenalty,MAT_COPY_VALUES,&Kgg); 59 VecDuplicatePatch(&pg,pg_nopenalty); 60 PenaltySystemMatricesx(Kgg, pg,&melting_offset,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,kflag,pflag); 61 /*===================== DEBUGING ====================*/ 62 //SystemMatricesx(&Kgg,&pg,&melting_offset,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters); 63 /*===================== DEBUGING ====================*/ 76 64 77 65 Reducematrixfromgtofx(&Kff,&Kfs,Kgg,femmodel->nodesets,femmodel->parameters); -
issm/trunk/src/m/solvers/solver_adjoint_linear.m
r5689 r5693 5 5 % femmodel =solver_adjoint_linear(femmodel) 6 6 7 femmodel.parameters.Kflag=1; femmodel.parameters.Pflag=1; 8 9 [K_gg, p_g]=SystemMatrices(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters); 10 [K_gg, p_g,kmax]=PenaltySystemMatrices(K_gg,p_g,femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters); 7 [K_gg, p_g, kmax]=SystemMatrices(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters); 11 8 12 9 [K_ff, K_fs] = Reducematrixfromgtof( K_gg, femmodel.nodesets,femmodel.parameters); -
issm/trunk/src/m/solvers/solver_diagnostic_nonlinear.m
r5689 r5693 4 4 % Usage: 5 5 % [femmodel]=solver_diagnostic_nonlinear(femmodel,conserve_loads) 6 7 6 8 7 %Recover parameters 9 femmodel.parameters.Kflag=1;10 femmodel.parameters.Pflag=1;11 dim=femmodel.parameters.Dim;12 8 min_mechanical_constraints=femmodel.parameters.MinMechanicalConstraints; 13 9 … … 31 27 old_uf=uf; 32 28 33 [K_gg_nopenalty , p_g_nopenalty]=SystemMatrices(femmodel.elements,femmodel.nodes,femmodel.vertices,loads,femmodel.materials,femmodel.parameters); 34 [K_gg , p_g, kmax]=PenaltySystemMatrices(K_gg_nopenalty,p_g_nopenalty,femmodel.elements,femmodel.nodes,femmodel.vertices,loads,femmodel.materials,femmodel.parameters); 29 [K_gg, p_g, kmax]=SystemMatrices(femmodel.elements,femmodel.nodes,femmodel.vertices,loads,femmodel.materials,femmodel.parameters); 35 30 36 31 [K_ff, K_fs] = Reducematrixfromgtof( K_gg, femmodel.nodesets,femmodel.parameters); -
issm/trunk/src/m/solvers/solver_linear.m
r5689 r5693 5 5 % femmodel =solver_linear(femmodel) 6 6 7 femmodel.parameters.Kflag=1; femmodel.parameters.Pflag=1; 8 9 [K_gg, p_g]=SystemMatrices(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters); 10 [K_gg, p_g,kmax]=PenaltySystemMatrices(K_gg,p_g,femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters); 7 [K_gg, p_g,kmax]=SystemMatrices(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters); 11 8 12 9 [K_ff, K_fs] = Reducematrixfromgtof( K_gg, femmodel.nodesets,femmodel.parameters); -
issm/trunk/src/m/solvers/solver_thermal_nonlinear.m
r5689 r5693 19 19 [femmodel.elements femmodel.loads]=InputUpdateFromConstant(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,reset_penalties,ResetPenaltiesEnum); 20 20 21 %system matrices 22 if count==1 23 displaystring(femmodel.parameters.Verbose,'%s',[' system matrices']); 24 [K_gg_nopenalty, p_g_nopenalty]=SystemMatrices(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters); 21 % ================= DEBUG FOR NOW ==================== 22 if count==1 23 [K_gg_nopenalty,p_g_nopenalty,melting_offset]=SystemMatrices(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters); 25 24 end 26 displaystring(femmodel.parameters.Verbose,'%s',[' penalty system matrices']);27 25 [K_gg , p_g, melting_offset]=PenaltySystemMatrices(K_gg_nopenalty,p_g_nopenalty,femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters); 26 % ================= DEBUG FOR NOW ==================== 27 %[K_gg,p_g,melting_offset]=SystemMatrices(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters); 28 % ================= DEBUG FOR NOW ==================== 28 29 29 30 [K_ff, K_fs] = Reducematrixfromgtof( K_gg, femmodel.nodesets,femmodel.parameters); … … 35 36 t_g= Mergesolutionfromftog( t_f, femmodel.ys, femmodel.nodesets,femmodel.parameters); 36 37 [femmodel.elements,femmodel.materials]=InputUpdateFromSolution(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,t_g); 37 38 38 39 [femmodel.loads,constraints_converged,num_unstable_constraints] =PenaltyConstraints(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads, femmodel.materials,femmodel.parameters); 39 40 -
issm/trunk/src/mex/SystemMatrices/SystemMatrices.cpp
r5689 r5693 14 14 Materials *materials = NULL; 15 15 Parameters *parameters = NULL; 16 int kflag,pflag;17 16 18 17 /* output datasets: */ 19 Mat Kgg=NULL; 20 Vec pg=NULL; 18 Mat Kgg = NULL; 19 Vec pg = NULL; 20 double kmax; 21 21 22 22 /*Boot module: */ … … 34 34 FetchParams(¶meters,PARAMETERS); 35 35 36 /*parameters: */37 parameters->FindParam(&kflag,KflagEnum);38 parameters->FindParam(&pflag,PflagEnum);39 40 36 /*configure: */ 41 37 elements-> Configure(elements,loads, nodes,vertices, materials,parameters); … … 45 41 46 42 /*!Generate internal degree of freedom numbers: */ 47 SystemMatricesx(&Kgg, &pg,elements,nodes,vertices,loads,materials,parameters,kflag,pflag);43 SystemMatricesx(&Kgg,&pg,&kmax,elements,nodes,vertices,loads,materials,parameters); 48 44 49 45 /*write output datasets: */ 50 46 WriteData(KGG,Kgg); 51 47 WriteData(PG,pg); 48 WriteData(KMAX,kmax); 52 49 53 50 /*Free ressources: */ … … 68 65 { 69 66 _printf_("\n"); 70 _printf_(" usage: [Kgg,pg ] = %s(elements,nodes,vertices,loads,materials,parameters);\n",__FUNCT__);67 _printf_(" usage: [Kgg,pg,kmax] = %s(elements,nodes,vertices,loads,materials,parameters);\n",__FUNCT__); 71 68 _printf_("\n"); 72 69 } -
issm/trunk/src/mex/SystemMatrices/SystemMatrices.h
r4236 r5693 18 18 19 19 /* serial input macros: */ 20 #define ELEMENTS (mxArray*)prhs[0]21 #define NODES (mxArray*)prhs[1]22 #define VERTICES (mxArray*)prhs[2]23 #define LOADS (mxArray*)prhs[3]24 #define MATERIALS (mxArray*)prhs[4]25 #define PARAMETERS (mxArray *)prhs[5]20 #define ELEMENTS (mxArray *)prhs[0] 21 #define NODES (mxArray *)prhs[1] 22 #define VERTICES (mxArray *)prhs[2] 23 #define LOADS (mxArray *)prhs[3] 24 #define MATERIALS (mxArray *)prhs[4] 25 #define PARAMETERS (mxArray *)prhs[5] 26 26 27 27 /* serial output macros: */ 28 #define KGG (mxArray**)&plhs[0] 29 #define PG (mxArray**)&plhs[1] 28 #define KGG (mxArray**)&plhs[0] 29 #define PG (mxArray**)&plhs[1] 30 #define KMAX (mxArray**)&plhs[2] 30 31 31 32 /* serial arg counts: */ 32 33 #undef NLHS 33 #define NLHS 234 #define NLHS 3 34 35 #undef NRHS 35 36 #define NRHS 6
Note:
See TracChangeset
for help on using the changeset viewer.