Changeset 5787


Ignore:
Timestamp:
09/13/10 17:35:22 (15 years ago)
Author:
Eric.Larour
Message:

Now, Kff partition schema in serial mode also

Location:
issm/trunk
Files:
5 added
19 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/modules/Reduceloadfromgtofx/Reduceloadfromgtofx.cpp

    r5703 r5787  
    2222        PetscScalar a;
    2323
    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);
    2630        if (verbose) _printf_("   Reducing Load vector from gset to fset\n");
    2731
     
    3943
    4044                        if(nodesets->GetFSize()){
    41                                 VecPartition(&pf, pn, nodesets->GetPV_F(),nodesets->GetFSize());
     45                                VecPartition(&pf, pn, nodesets->GetPV_F(),nodesets->GetFSize(),kffpartition);
    4246
    4347                                /*pf = pf - Kfs * y_s;*/
  • issm/trunk/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.cpp

    r5057 r5787  
    55
    66#include "./Reducevectorgtofx.h"
    7 
    8 void Reducevectorgtofx(Vec* puf, Vec ug, NodeSets* nodesets){
     7 
     8void Reducevectorgtofx(Vec* puf, Vec ug, NodeSets* nodesets,Parameters* parameters){
    99
    1010        /*output: */
    1111        Vec uf=NULL;
     12
     13        /*what type of partitioning: */
     14        bool kffpartitioning=false;
     15
     16        /*find parameter: */
     17        parameters->FindParam(&kffpartitioning,KffEnum);
    1218
    1319        if(nodesets){
     
    1622                if (nodesets->GetGSize() && nodesets->GetFSize()){
    1723
    18                         VecPartition(&uf,ug,nodesets->GetPV_F(),nodesets->GetFSize());
     24                        VecPartition(&uf,ug,nodesets->GetPV_F(),nodesets->GetFSize(),kffpartitioning);
    1925               
    2026                }
  • issm/trunk/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.h

    r3913 r5787  
    1010
    1111/* local prototypes: */
    12 void    Reducevectorgtofx(Vec* puf, Vec ug, NodeSets* nodesets);
     12void    Reducevectorgtofx(Vec* puf, Vec ug, NodeSets* nodesets, Parameters* parameters);
    1313
    1414#endif  /* _REDUCEVECTORGTOFX_H */
  • issm/trunk/src/c/modules/Reducevectorgtosx/Reducevectorgtosx.cpp

    r5057 r5787  
    66#include "./Reducevectorgtosx.h"
    77
    8 void Reducevectorgtosx( Vec* pys, Vec yg, NodeSets* nodesets){
     8void Reducevectorgtosx( Vec* pys, Vec yg, NodeSets* nodesets,Parameters* parameters){
    99
    1010        /*output: */
    1111        Vec ys=NULL;
    1212
     13        /*what type of partitioning: */
     14        bool kffpartitioning=false;
     15
     16        /*find parameter: */
     17        parameters->FindParam(&kffpartitioning,KffEnum);
     18
    1319        if(nodesets){
    1420                if (nodesets->GetGSize() && nodesets->GetSSize()){
    15                         VecPartition(&ys,yg,nodesets->GetPV_S(),nodesets->GetSSize());
     21                        VecPartition(&ys,yg,nodesets->GetPV_S(),nodesets->GetSSize(),kffpartitioning);
    1622                }
    1723        }
  • issm/trunk/src/c/modules/Reducevectorgtosx/Reducevectorgtosx.h

    r3959 r5787  
    1010
    1111/* local prototypes: */
    12 void    Reducevectorgtosx( Vec* pys, Vec yg, NodeSets* nodesets);
     12void    Reducevectorgtosx( Vec* pys, Vec yg, NodeSets* nodesets,Parameters* parameters);
    1313
    1414#endif  /* _REDUCEVECTORGTOSX_H */
  • issm/trunk/src/c/solutions/ResetBoundaryConditions.cpp

    r5772 r5787  
    2727
    2828        //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);
    3030
    3131        /*Plug into femmodel->m_ys: */
  • issm/trunk/src/c/solvers/solver_diagnostic_nonlinear_kff.cpp

    r5772 r5787  
    4545        /*Start non-linear iteration using input velocity: */
    4646        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);
    4848
    4949        //Update once again the solution to make sure that vx and vxold are similar (for next step in transient or steadystate)
     
    5959
    6060                Reduceloadx(pf, Kfs, femmodel->ys, femmodel->parameters); MatFree(&Kfs);
    61 
     61               
    6262                Solverx(&uf, Kff, pf, old_uf, femmodel->parameters);
    6363
  • issm/trunk/src/c/solvers/solver_diagnostic_nonlinear_kgg.cpp

    r5772 r5787  
    4545        /*Start non-linear iteration using input velocity: */
    4646        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);
    4848
    4949        //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  
    1616#include "../../../shared/shared.h"
    1717
    18 void VecPartition(Vec* poutvector,Vec vectorA, double* row_partition_vector, int row_partition_vector_size){
     18void VecPartition(Vec* poutvector,Vec vectorA, double* row_partition_vector, int row_partition_vector_size,bool kffpartition){
    1919
    2020               
     
    8484                /*Ok, each node now have count values corresponding to the node_rows extracted values from vectorA.
    8585                 * From count and values, create a new vector*/
    86 
    87                 VecCreate(PETSC_COMM_WORLD,&outvector);    ;
     86                VecCreate(PETSC_COMM_WORLD,&outvector);
    8887                VecSetSizes(outvector,count,PETSC_DECIDE);
    8988                VecSetFromOptions(outvector);
     89                VecGetOwnershipRange(outvector,&lower_row,&upper_row);
    9090
    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.*/
    9692                if (count){
    9793                        for (i=0;i<count;i++){
     
    9995                        }
    10096                }
     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
    101105                if (count){
    102106                        VecSetValues(outvector,count,node_rows,values,INSERT_VALUES);
  • issm/trunk/src/c/toolkits/petsc/patches/petscpatches.h

    r586 r5787  
    3232void VecFree(Vec* pvec);
    3333void KSPFree(KSP* pksp);
    34 void VecPartition(Vec* poutvector,Vec vectorA, double* row_partition_vector, int row_partition_vector_size);
     34void VecPartition(Vec* poutvector,Vec vectorA, double* row_partition_vector, int row_partition_vector_size,bool kffpartitioning);
    3535int MatPartition(Mat* poutmatrix,Mat matrixA,double* row_partition_vector,int row_partition_vector_size ,
    3636                double* col_partition_vector,int col_partition_vector_size);
  • issm/trunk/src/m/solutions/ResetBoundaryConditions.m

    r5776 r5787  
    2323
    2424        %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);
    2626
    2727        %in the s-set
  • issm/trunk/src/m/solvers/solver_diagnostic_nonlinear.m

    r5776 r5787  
    55%      [femmodel]=solver_diagnostic_nonlinear(femmodel,conserve_loads)
    66
    7         %Recover parameters
    8         min_mechanical_constraints=femmodel.parameters.MinMechanicalConstraints;
     7        %Branch on partitioning schema requested
     8        kffpartitioning=femmodel.parameters.Kff;
    99
    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);
    7314        end
    7415end
  • issm/trunk/src/mex/Makefile.am

    r5775 r5787  
    4949                                ProcessParams\
    5050                                Qmu\
     51                                Reduceload\
    5152                                Reduceloadfromgtof\
    5253                                Reducematrixfromgtof\
     
    231232                          Qmu/Qmu.h
    232233
     234Reduceload_SOURCES = Reduceload/Reduceload.cpp\
     235                          Reduceload/Reduceload.h
     236
    233237Reducematrixfromgtof_SOURCES = Reducematrixfromgtof/Reducematrixfromgtof.cpp\
    234238                          Reducematrixfromgtof/Reducematrixfromgtof.h
  • issm/trunk/src/mex/Reducevectorgtof/Reducevectorgtof.cpp

    r4453 r5787  
    1010        Vec ug=NULL;
    1111        NodeSets* nodesets=NULL;
     12        Parameters* parameters=NULL;
    1213
    1314        /* output datasets: */
     
    2324        FetchData(&ug,UG);
    2425        FetchNodeSets(&nodesets,NODESETS);
     26        FetchParams(&parameters,PARAMETERS);
    2527
    2628        /*!Reduce vector: */
    27         Reducevectorgtofx(&uf,ug,nodesets);
     29        Reducevectorgtofx(&uf,ug,nodesets,parameters);
    2830
    2931        /*write output datasets: */
     
    3234        /*Free ressources: */
    3335        delete nodesets;
     36        delete parameters;
    3437        VecFree(&ug);
    3538        VecFree(&uf);
     
    4245{
    4346        _printf_("\n");
    44         _printf_("   usage: uf = %s(ug,nodesets);\n",__FUNCT__);
     47        _printf_("   usage: uf = %s(ug,nodesets,parameters);\n",__FUNCT__);
    4548        _printf_("\n");
    4649}
  • issm/trunk/src/mex/Reducevectorgtof/Reducevectorgtof.h

    r4236 r5787  
    2121#define UG (mxArray*)prhs[0]
    2222#define NODESETS (mxArray*)prhs[1]
     23#define PARAMETERS (mxArray*)prhs[2]
    2324
    2425/* serial output macros: */
     
    2930#define NLHS  1
    3031#undef NRHS
    31 #define NRHS  2
     32#define NRHS 3
    3233
    3334
  • issm/trunk/src/mex/Reducevectorgtos/Reducevectorgtos.cpp

    r4453 r5787  
    1010        Vec yg=NULL;
    1111        NodeSets* nodesets=NULL;
     12        Parameters* parameters=NULL;
    1213
    1314        /* output datasets: */
     
    2324        FetchData(&yg,YG);
    2425        FetchNodeSets(&nodesets,NODESETS);
     26        FetchParams(&parameters,PARAMETERS);
    2527
    2628        /*!Reduce vector: */
    27         Reducevectorgtosx(&ys,yg,nodesets);
     29        Reducevectorgtosx(&ys,yg,nodesets,parameters);
    2830
    2931        /*write output datasets: */
     
    3234        /*Free ressources: */
    3335        delete nodesets;
     36        delete parameters;
    3437        VecFree(&yg);
    3538        VecFree(&ys);
     
    4245{
    4346        _printf_("\n");
    44         _printf_("   usage: ys = %s(yg,nodesets);\n",__FUNCT__);
     47        _printf_("   usage: ys = %s(yg,nodesets,parameters);\n",__FUNCT__);
    4548        _printf_("\n");
    4649}
  • issm/trunk/src/mex/Reducevectorgtos/Reducevectorgtos.h

    r4443 r5787  
    1919#define YG (mxArray*)prhs[0]
    2020#define NODESETS (mxArray*)prhs[1]
     21#define PARAMETERS (mxArray*)prhs[2]
    2122
    2223/* serial output macros: */
     
    2728#define NLHS  1
    2829#undef NRHS
    29 #define NRHS  2
     30#define NRHS  3
    3031
    3132#endif  /* _REDUCEVECTORGTOS_H */
  • issm/trunk/test/NightlyRun/test101.m

    r5098 r5787  
    1 md=mesh(model,'../Exp/Square.exp',150000);
     1md=mesh(model,'../Exp/Square.exp',50000);
    22md=geography(md,'all','');
    33md=parameterize(md,'../Par/SquareShelfConstrained.par');
    44md=setelementstype(md,'macayeal','all');
    55md.cluster='none';
     6md.kff=1;
     7tic
    68md=solve(md,'analysis_type',DiagnosticSolutionEnum);
     9toc
     10error;
    711
    812%Fields and tolerances to track changes
  • issm/trunk/test/NightlyRun/test102.m

    r5098 r5787  
    44md=setelementstype(md,'macayeal','all');
    55md.cluster=oshostname;
     6md.np=2;
     7md.verbose=1;
     8md.mem_debug=0;
     9md.kff=1;
    610md=solve(md,'analysis_type',DiagnosticSolutionEnum);
    711
Note: See TracChangeset for help on using the changeset viewer.