Changeset 5787
- Timestamp:
- 09/13/10 17:35:22 (15 years ago)
- Location:
- issm/trunk
- Files:
-
- 5 added
- 19 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/modules/Reduceloadfromgtofx/Reduceloadfromgtofx.cpp
r5703 r5787 22 22 PetscScalar a; 23 23 24 /*Display message*/ 25 int verbose; parameters->FindParam(&verbose,VerboseEnum); 24 /*Parameters: */ 25 int verbose; 26 bool kffpartition=false; 27 28 parameters->FindParam(&verbose,VerboseEnum); 29 parameters->FindParam(&kffpartition,KffEnum); 26 30 if (verbose) _printf_(" Reducing Load vector from gset to fset\n"); 27 31 … … 39 43 40 44 if(nodesets->GetFSize()){ 41 VecPartition(&pf, pn, nodesets->GetPV_F(),nodesets->GetFSize() );45 VecPartition(&pf, pn, nodesets->GetPV_F(),nodesets->GetFSize(),kffpartition); 42 46 43 47 /*pf = pf - Kfs * y_s;*/ -
issm/trunk/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.cpp
r5057 r5787 5 5 6 6 #include "./Reducevectorgtofx.h" 7 8 void Reducevectorgtofx(Vec* puf, Vec ug, NodeSets* nodesets ){7 8 void Reducevectorgtofx(Vec* puf, Vec ug, NodeSets* nodesets,Parameters* parameters){ 9 9 10 10 /*output: */ 11 11 Vec uf=NULL; 12 13 /*what type of partitioning: */ 14 bool kffpartitioning=false; 15 16 /*find parameter: */ 17 parameters->FindParam(&kffpartitioning,KffEnum); 12 18 13 19 if(nodesets){ … … 16 22 if (nodesets->GetGSize() && nodesets->GetFSize()){ 17 23 18 VecPartition(&uf,ug,nodesets->GetPV_F(),nodesets->GetFSize() );24 VecPartition(&uf,ug,nodesets->GetPV_F(),nodesets->GetFSize(),kffpartitioning); 19 25 20 26 } -
issm/trunk/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.h
r3913 r5787 10 10 11 11 /* local prototypes: */ 12 void Reducevectorgtofx(Vec* puf, Vec ug, NodeSets* nodesets );12 void Reducevectorgtofx(Vec* puf, Vec ug, NodeSets* nodesets, Parameters* parameters); 13 13 14 14 #endif /* _REDUCEVECTORGTOFX_H */ -
issm/trunk/src/c/modules/Reducevectorgtosx/Reducevectorgtosx.cpp
r5057 r5787 6 6 #include "./Reducevectorgtosx.h" 7 7 8 void Reducevectorgtosx( Vec* pys, Vec yg, NodeSets* nodesets ){8 void Reducevectorgtosx( Vec* pys, Vec yg, NodeSets* nodesets,Parameters* parameters){ 9 9 10 10 /*output: */ 11 11 Vec ys=NULL; 12 12 13 /*what type of partitioning: */ 14 bool kffpartitioning=false; 15 16 /*find parameter: */ 17 parameters->FindParam(&kffpartitioning,KffEnum); 18 13 19 if(nodesets){ 14 20 if (nodesets->GetGSize() && nodesets->GetSSize()){ 15 VecPartition(&ys,yg,nodesets->GetPV_S(),nodesets->GetSSize() );21 VecPartition(&ys,yg,nodesets->GetPV_S(),nodesets->GetSSize(),kffpartitioning); 16 22 } 17 23 } -
issm/trunk/src/c/modules/Reducevectorgtosx/Reducevectorgtosx.h
r3959 r5787 10 10 11 11 /* local prototypes: */ 12 void Reducevectorgtosx( Vec* pys, Vec yg, NodeSets* nodesets );12 void Reducevectorgtosx( Vec* pys, Vec yg, NodeSets* nodesets,Parameters* parameters); 13 13 14 14 #endif /* _REDUCEVECTORGTOSX_H */ -
issm/trunk/src/c/solutions/ResetBoundaryConditions.cpp
r5772 r5787 27 27 28 28 //Reduce from g to s set 29 Reducevectorgtosx(&ys,yg,femmodel->m_nodesets[analysis_counter] );29 Reducevectorgtosx(&ys,yg,femmodel->m_nodesets[analysis_counter],femmodel->parameters); 30 30 31 31 /*Plug into femmodel->m_ys: */ -
issm/trunk/src/c/solvers/solver_diagnostic_nonlinear_kff.cpp
r5772 r5787 45 45 /*Start non-linear iteration using input velocity: */ 46 46 GetSolutionFromInputsx(&ug, femmodel->elements, femmodel->nodes, femmodel->vertices, loads, femmodel->materials, femmodel->parameters); 47 Reducevectorgtofx(&uf, ug, femmodel->nodesets );47 Reducevectorgtofx(&uf, ug, femmodel->nodesets,femmodel->parameters); 48 48 49 49 //Update once again the solution to make sure that vx and vxold are similar (for next step in transient or steadystate) … … 59 59 60 60 Reduceloadx(pf, Kfs, femmodel->ys, femmodel->parameters); MatFree(&Kfs); 61 61 62 62 Solverx(&uf, Kff, pf, old_uf, femmodel->parameters); 63 63 -
issm/trunk/src/c/solvers/solver_diagnostic_nonlinear_kgg.cpp
r5772 r5787 45 45 /*Start non-linear iteration using input velocity: */ 46 46 GetSolutionFromInputsx(&ug, femmodel->elements, femmodel->nodes, femmodel->vertices, loads, femmodel->materials, femmodel->parameters); 47 Reducevectorgtofx(&uf, ug, femmodel->nodesets );47 Reducevectorgtofx(&uf, ug, femmodel->nodesets,femmodel->parameters); 48 48 49 49 //Update once again the solution to make sure that vx and vxold are similar (for next step in transient or steadystate) -
issm/trunk/src/c/toolkits/petsc/patches/VecPartition.cpp
r3595 r5787 16 16 #include "../../../shared/shared.h" 17 17 18 void VecPartition(Vec* poutvector,Vec vectorA, double* row_partition_vector, int row_partition_vector_size ){18 void VecPartition(Vec* poutvector,Vec vectorA, double* row_partition_vector, int row_partition_vector_size,bool kffpartition){ 19 19 20 20 … … 84 84 /*Ok, each node now have count values corresponding to the node_rows extracted values from vectorA. 85 85 * From count and values, create a new vector*/ 86 87 VecCreate(PETSC_COMM_WORLD,&outvector); ; 86 VecCreate(PETSC_COMM_WORLD,&outvector); 88 87 VecSetSizes(outvector,count,PETSC_DECIDE); 89 88 VecSetFromOptions(outvector); 89 VecGetOwnershipRange(outvector,&lower_row,&upper_row); 90 90 91 VecGetOwnershipRange(outvector,&lower_row,&upper_row); 92 upper_row--; 93 range=upper_row-lower_row+1; 94 95 /*Set values using the values vector. First build new node_rows index.*/ 91 /*build new node_rows index.*/ 96 92 if (count){ 97 93 for (i=0;i<count;i++){ … … 99 95 } 100 96 } 97 98 /* outvector should not be partitioned like it was previously, but according to row_partition_vector_size, this in case we 99 * are running with the special kffpartition schema: */ 100 if(kffpartition){ 101 VecFree(&outvector); 102 outvector=NewVec(row_partition_vector_size); 103 } 104 101 105 if (count){ 102 106 VecSetValues(outvector,count,node_rows,values,INSERT_VALUES); -
issm/trunk/src/c/toolkits/petsc/patches/petscpatches.h
r586 r5787 32 32 void VecFree(Vec* pvec); 33 33 void KSPFree(KSP* pksp); 34 void VecPartition(Vec* poutvector,Vec vectorA, double* row_partition_vector, int row_partition_vector_size );34 void VecPartition(Vec* poutvector,Vec vectorA, double* row_partition_vector, int row_partition_vector_size,bool kffpartitioning); 35 35 int MatPartition(Mat* poutmatrix,Mat matrixA,double* row_partition_vector,int row_partition_vector_size , 36 36 double* col_partition_vector,int col_partition_vector_size); -
issm/trunk/src/m/solutions/ResetBoundaryConditions.m
r5776 r5787 23 23 24 24 %Reduce from g to s set 25 ys=Reducevectorgtos(ug,femmodel.m_nodesets{analysis_counter} );25 ys=Reducevectorgtos(ug,femmodel.m_nodesets{analysis_counter},femmodel.parameters); 26 26 27 27 %in the s-set -
issm/trunk/src/m/solvers/solver_diagnostic_nonlinear.m
r5776 r5787 5 5 % [femmodel]=solver_diagnostic_nonlinear(femmodel,conserve_loads) 6 6 7 % Recover parameters8 min_mechanical_constraints=femmodel.parameters.MinMechanicalConstraints;7 %Branch on partitioning schema requested 8 kffpartitioning=femmodel.parameters.Kff; 9 9 10 %keep a copy of loads for now 11 loads=femmodel.loads; 12 13 %initialize solution vector 14 converged=0; count=1; 15 16 %Start non-linear iteration using input velocity: 17 ug=GetSolutionFromInputs(femmodel.elements, femmodel.nodes, femmodel.vertices, loads, femmodel.materials, femmodel.parameters); 18 uf=Reducevectorgtof( ug, femmodel.nodesets); 19 20 %Update the solution to make sure that vx and vxold are similar 21 [femmodel.elements,femmodel.materials]=InputUpdateFromSolution(femmodel.elements,femmodel.nodes,femmodel.vertices,loads,femmodel.materials,femmodel.parameters,ug); 22 23 while(~converged), 24 25 %save pointer to old velocity 26 old_ug=ug; 27 old_uf=uf; 28 29 [K_gg,K_ff,K_fs,p_g,p_f,kmax]=SystemMatrices(femmodel.elements,femmodel.nodes,femmodel.vertices,loads,femmodel.materials,femmodel.parameters); 30 31 [K_ff, K_fs] = Reducematrixfromgtof( K_gg, femmodel.nodesets,femmodel.parameters); 32 p_f = Reduceloadfromgtof( p_g, K_fs, femmodel.ys, femmodel.nodesets,femmodel.parameters); 33 34 uf=Solver(K_ff,p_f,old_uf,femmodel.parameters); 35 36 ug= Mergesolutionfromftog( uf, femmodel.ys, femmodel.nodesets,femmodel.parameters); 37 38 [femmodel.elements,femmodel.materials]=InputUpdateFromSolution(femmodel.elements,femmodel.nodes,femmodel.vertices,loads,femmodel.materials,femmodel.parameters,ug); 39 [loads,constraints_converged,num_unstable_constraints] =PenaltyConstraints( femmodel.elements,femmodel.nodes,femmodel.vertices,loads, femmodel.materials,femmodel.parameters); 40 41 displaystring(femmodel.parameters.Verbose,'%s%i',' number of unstable constraints: ',num_unstable_constraints); 42 43 %Figure out if convergence have been reached 44 converged=convergence(K_ff,p_f,uf,old_uf,femmodel.parameters); 45 46 %add convergence status into status 47 [femmodel.elements loads]=InputUpdateFromConstant(femmodel.elements,femmodel.nodes,femmodel.vertices,loads,femmodel.materials,femmodel.parameters,double(converged),ConvergedEnum); 48 49 %rift convergence 50 if ~constraints_converged, 51 if converged, 52 if num_unstable_constraints <= min_mechanical_constraints, 53 converged=1; 54 else 55 converged=0; 56 end 57 end 58 end 59 60 %increase count 61 count=count+1; 62 if(converged==1)break; 63 if(count>max_nonlinear_iterations), 64 displaystring(femmodel.parameters.Verbose,'%s%i%s',' maximum number of iterations ',max_nonlinear_iterations,' exceeded'); 65 end 66 end 67 68 end 69 70 %deal with loads: 71 if conserve_loads==false, 72 femmodel.loads=loads; 10 if ~kffpartitioning, 11 femmodel=solver_diagnostic_nonlinear_kgg(femmodel,conserve_loads); 12 else 13 femmodel=solver_diagnostic_nonlinear_kff(femmodel,conserve_loads); 73 14 end 74 15 end -
issm/trunk/src/mex/Makefile.am
r5775 r5787 49 49 ProcessParams\ 50 50 Qmu\ 51 Reduceload\ 51 52 Reduceloadfromgtof\ 52 53 Reducematrixfromgtof\ … … 231 232 Qmu/Qmu.h 232 233 234 Reduceload_SOURCES = Reduceload/Reduceload.cpp\ 235 Reduceload/Reduceload.h 236 233 237 Reducematrixfromgtof_SOURCES = Reducematrixfromgtof/Reducematrixfromgtof.cpp\ 234 238 Reducematrixfromgtof/Reducematrixfromgtof.h -
issm/trunk/src/mex/Reducevectorgtof/Reducevectorgtof.cpp
r4453 r5787 10 10 Vec ug=NULL; 11 11 NodeSets* nodesets=NULL; 12 Parameters* parameters=NULL; 12 13 13 14 /* output datasets: */ … … 23 24 FetchData(&ug,UG); 24 25 FetchNodeSets(&nodesets,NODESETS); 26 FetchParams(¶meters,PARAMETERS); 25 27 26 28 /*!Reduce vector: */ 27 Reducevectorgtofx(&uf,ug,nodesets );29 Reducevectorgtofx(&uf,ug,nodesets,parameters); 28 30 29 31 /*write output datasets: */ … … 32 34 /*Free ressources: */ 33 35 delete nodesets; 36 delete parameters; 34 37 VecFree(&ug); 35 38 VecFree(&uf); … … 42 45 { 43 46 _printf_("\n"); 44 _printf_(" usage: uf = %s(ug,nodesets );\n",__FUNCT__);47 _printf_(" usage: uf = %s(ug,nodesets,parameters);\n",__FUNCT__); 45 48 _printf_("\n"); 46 49 } -
issm/trunk/src/mex/Reducevectorgtof/Reducevectorgtof.h
r4236 r5787 21 21 #define UG (mxArray*)prhs[0] 22 22 #define NODESETS (mxArray*)prhs[1] 23 #define PARAMETERS (mxArray*)prhs[2] 23 24 24 25 /* serial output macros: */ … … 29 30 #define NLHS 1 30 31 #undef NRHS 31 #define NRHS 232 #define NRHS 3 32 33 33 34 -
issm/trunk/src/mex/Reducevectorgtos/Reducevectorgtos.cpp
r4453 r5787 10 10 Vec yg=NULL; 11 11 NodeSets* nodesets=NULL; 12 Parameters* parameters=NULL; 12 13 13 14 /* output datasets: */ … … 23 24 FetchData(&yg,YG); 24 25 FetchNodeSets(&nodesets,NODESETS); 26 FetchParams(¶meters,PARAMETERS); 25 27 26 28 /*!Reduce vector: */ 27 Reducevectorgtosx(&ys,yg,nodesets );29 Reducevectorgtosx(&ys,yg,nodesets,parameters); 28 30 29 31 /*write output datasets: */ … … 32 34 /*Free ressources: */ 33 35 delete nodesets; 36 delete parameters; 34 37 VecFree(&yg); 35 38 VecFree(&ys); … … 42 45 { 43 46 _printf_("\n"); 44 _printf_(" usage: ys = %s(yg,nodesets );\n",__FUNCT__);47 _printf_(" usage: ys = %s(yg,nodesets,parameters);\n",__FUNCT__); 45 48 _printf_("\n"); 46 49 } -
issm/trunk/src/mex/Reducevectorgtos/Reducevectorgtos.h
r4443 r5787 19 19 #define YG (mxArray*)prhs[0] 20 20 #define NODESETS (mxArray*)prhs[1] 21 #define PARAMETERS (mxArray*)prhs[2] 21 22 22 23 /* serial output macros: */ … … 27 28 #define NLHS 1 28 29 #undef NRHS 29 #define NRHS 230 #define NRHS 3 30 31 31 32 #endif /* _REDUCEVECTORGTOS_H */ -
issm/trunk/test/NightlyRun/test101.m
r5098 r5787 1 md=mesh(model,'../Exp/Square.exp', 150000);1 md=mesh(model,'../Exp/Square.exp',50000); 2 2 md=geography(md,'all',''); 3 3 md=parameterize(md,'../Par/SquareShelfConstrained.par'); 4 4 md=setelementstype(md,'macayeal','all'); 5 5 md.cluster='none'; 6 md.kff=1; 7 tic 6 8 md=solve(md,'analysis_type',DiagnosticSolutionEnum); 9 toc 10 error; 7 11 8 12 %Fields and tolerances to track changes -
issm/trunk/test/NightlyRun/test102.m
r5098 r5787 4 4 md=setelementstype(md,'macayeal','all'); 5 5 md.cluster=oshostname; 6 md.np=2; 7 md.verbose=1; 8 md.mem_debug=0; 9 md.kff=1; 6 10 md=solve(md,'analysis_type',DiagnosticSolutionEnum); 7 11
Note:
See TracChangeset
for help on using the changeset viewer.