Changeset 5686


Ignore:
Timestamp:
09/07/10 10:59:58 (15 years ago)
Author:
Mathieu Morlighem
Message:

Got rid of solver_string

Location:
issm/trunk/src
Files:
7 edited

Legend:

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

    r4954 r5686  
    44
    55#include "./Solverx.h"
    6 
    76#include "../../shared/shared.h"
    87#include "../../include/include.h"
     
    1413#endif
    1514
    16 
    17 void    Solverx( Vec* puf, Mat Kff, Vec pf, Vec uf0, char* solver_string){
     15void    Solverx(Vec* puf, Mat Kff, Vec pf, Vec uf0,Parameters* parameters){
    1816
    1917        /*output: */
     
    2927        PetscTruth flag;
    3028        int solver_type;
     29        char* solver_string=NULL;
    3130
    3231        /*First, check that f-set is not NULL, ie model is fully constrained: */
    3332        if(!Kff){
    34                 *puf=NULL;
    35                 return;
     33                *puf=NULL; return;
    3634        }
    3735
     
    4644
    4745        /*Before preparing the solver, add options to the options database*/
     46        parameters->FindParam(&solver_string,SolverStringEnum);
    4847        PetscOptionsInsertMultipleString(solver_string);
    4948
     
    9594                }
    9695        }
    97 
    9896        KSPSolve(ksp,pf,uf);
    9997       
    10098        /*Check convergence*/
    10199        KSPGetIterationNumber(ksp,&iteration_number);
    102         if (iteration_number<0){
    103                 ISSMERROR("%s%i"," Solver diverged at iteration number: ",-iteration_number);
    104         }
     100        if (iteration_number<0) ISSMERROR("%s%i"," Solver diverged at iteration number: ",-iteration_number);
    105101
    106102        /*Free ressources:*/
    107103        KSPFree(&ksp);
    108 
     104        xfree((void**)&solver_string);
    109105       
    110106        /*Assign output pointers:*/
  • issm/trunk/src/c/modules/Solverx/Solverx.h

    r3913 r5686  
    88#include "../../objects/objects.h"
    99
    10 
    1110/* local prototypes: */
    12 void    Solverx( Vec* puf, Mat Kff, Vec pf, Vec uf0, char* solver_string);
     11void    Solverx( Vec* puf, Mat Kff, Vec pf, Vec uf0,Parameters* parameters);
    1312
    1413#endif  /* _SOLVERX_H */
  • issm/trunk/src/c/solvers/solver_adjoint_linear.cpp

    r5057 r5686  
    88#include "../modules/modules.h"
    99
    10 void solver_adjoint_linear(FemModel* fem){
     10void solver_adjoint_linear(FemModel* femmodel){
    1111        /*This is axactly the same solver as solver_linear except that Reduceloadfromgtofx and Mergesolutionfromftogx
    1212         * use the flag "true" so that all spc are taken as 0*/
     
    1515        int kflag,pflag;
    1616        int verbose=0;
    17         char* solver_string=NULL;
    1817
    1918        /*output: */
     
    3029        /*Recover parameters: */
    3130        kflag=1; pflag=1;
    32         fem->parameters->FindParam(&verbose,VerboseEnum);
    33         fem->parameters->FindParam(&solver_string,SolverStringEnum);
     31        femmodel->parameters->FindParam(&verbose,VerboseEnum);
    3432
    3533        //*Generate system matrices
    3634        if(verbose)_printf_("   Generating matrices\n");
    37         SystemMatricesx(&Kgg, &pg,fem->elements,fem->nodes,fem->vertices,fem->loads,fem->materials,fem->parameters,kflag,pflag);
     35        SystemMatricesx(&Kgg, &pg,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,kflag,pflag);
    3836
    3937        if(verbose)_printf_("   Generating penalty matrices\n");
    4038        //*Generate penalty system matrices
    41         PenaltySystemMatricesx(Kgg, pg,NULL,fem->elements,fem->nodes,fem->vertices,fem->loads,fem->materials,fem->parameters,kflag,pflag);
     39        PenaltySystemMatricesx(Kgg, pg,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,kflag,pflag);
    4240
    4341        /*!Reduce matrix from g to f size:*/
    4442        if(verbose)_printf_("   reducing matrix from g to f set\n");
    45         Reducematrixfromgtofx(&Kff,&Kfs,Kgg,fem->nodesets); MatFree(&Kgg);
     43        Reducematrixfromgtofx(&Kff,&Kfs,Kgg,femmodel->nodesets); MatFree(&Kgg);
    4644
    4745        /*!Reduce load from g to f size: */
    4846        if(verbose)_printf_("   reducing load from g to f set\n"); //true means spc = 0
    49         Reduceloadfromgtofx(&pf, pg, Kfs, fem->ys, fem->nodesets,true);VecFree(&pg); MatFree(&Kfs);
     47        Reduceloadfromgtofx(&pf, pg, Kfs, femmodel->ys, femmodel->nodesets,true);VecFree(&pg); MatFree(&Kfs);
    5048
    5149        /*Solve: */
    5250        if(verbose)_printf_("   solving\n");
    53         Solverx(&uf, Kff, pf, NULL, solver_string); MatFree(&Kff); VecFree(&pf);
     51        Solverx(&uf, Kff, pf, NULL, femmodel->parameters); MatFree(&Kff); VecFree(&pf);
    5452
    5553        //Merge back to g set
    5654        if(verbose)_printf_("   merging solution from f to g set\n");//true means spc=0
    57         Mergesolutionfromftogx(&ug, uf,fem->ys,fem->nodesets,true);VecFree(&uf);
     55        Mergesolutionfromftogx(&ug, uf,femmodel->ys,femmodel->nodesets,true);VecFree(&uf);
    5856
    5957        //Update inputs using new solution:
    60         InputUpdateFromSolutionx( fem->elements,fem->nodes, fem->vertices, fem->loads, fem->materials, fem->parameters,ug);
     58        InputUpdateFromSolutionx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug);
    6159
    6260        /*free ressources: */
    63         xfree((void**)&solver_string);
    6461        VecFree(&ug);
    6562        VecFree(&uf);
  • issm/trunk/src/c/solvers/solver_diagnostic_nonlinear.cpp

    r5057 r5686  
    3535        /*parameters:*/
    3636        int kflag,pflag;
    37         char* solver_string=NULL;
    3837        int verbose=0;
    3938        int dim;
     
    4140        /*Recover parameters: */
    4241        kflag=1; pflag=1;
    43         femmodel->parameters->FindParam(&solver_string,SolverStringEnum);
    4442        femmodel->parameters->FindParam(&dim,DimEnum);
    4543        femmodel->parameters->FindParam(&verbose,VerboseEnum);
     
    9189
    9290                if(verbose)_printf_("   solving\n");
    93                 Solverx(&uf, Kff, pf, old_uf, solver_string);
     91                Solverx(&uf, Kff, pf, old_uf, femmodel->parameters);
    9492
    9593                if(verbose)_printf_("   merging solution from f to g set\n");
     
    136134        VecFree(&old_uf);
    137135        VecFree(&old_ug);
    138         xfree((void**)&solver_string);
    139136       
    140137}
  • issm/trunk/src/c/solvers/solver_linear.cpp

    r5057 r5686  
    88#include "../modules/modules.h"
    99
    10 void solver_linear(FemModel* fem){
     10void solver_linear(FemModel* femmodel){
    1111
    1212        /*parameters:*/
    1313        int kflag,pflag;
    1414        int verbose=0;
    15         char* solver_string=NULL;
    1615
    1716        /*output: */
     
    2827        /*Recover parameters: */
    2928        kflag=1; pflag=1;
    30         fem->parameters->FindParam(&verbose,VerboseEnum);
    31         fem->parameters->FindParam(&solver_string,SolverStringEnum);
     29        femmodel->parameters->FindParam(&verbose,VerboseEnum);
    3230
    3331        //*Generate system matrices
    3432        if(verbose)_printf_("   Generating matrices\n");
    35         SystemMatricesx(&Kgg, &pg,fem->elements,fem->nodes,fem->vertices,fem->loads,fem->materials,fem->parameters,kflag,pflag);
     33        SystemMatricesx(&Kgg, &pg,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,kflag,pflag);
    3634
    3735        if(verbose)_printf_("   Generating penalty matrices\n");
    3836        //*Generate penalty system matrices
    39         PenaltySystemMatricesx(Kgg, pg,NULL,fem->elements,fem->nodes,fem->vertices,fem->loads,fem->materials,fem->parameters,kflag,pflag);
     37        PenaltySystemMatricesx(Kgg, pg,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,kflag,pflag);
    4038
    4139        /*!Reduce matrix from g to f size:*/
    4240        if(verbose)_printf_("   reducing matrix from g to f set\n");
    43         Reducematrixfromgtofx(&Kff,&Kfs,Kgg,fem->nodesets); MatFree(&Kgg);
     41        Reducematrixfromgtofx(&Kff,&Kfs,Kgg,femmodel->nodesets); MatFree(&Kgg);
    4442
    4543        /*!Reduce load from g to f size: */
    4644        if(verbose)_printf_("   reducing load from g to f set\n");
    47         Reduceloadfromgtofx(&pf, pg, Kfs, fem->ys, fem->nodesets);VecFree(&pg); MatFree(&Kfs);
     45        Reduceloadfromgtofx(&pf, pg, Kfs, femmodel->ys, femmodel->nodesets);VecFree(&pg); MatFree(&Kfs);
    4846
    4947        /*Solve: */
    5048        if(verbose)_printf_("   solving\n");
    51         Solverx(&uf, Kff, pf, NULL, solver_string); MatFree(&Kff); VecFree(&pf);
     49        Solverx(&uf, Kff, pf, NULL, femmodel->parameters); MatFree(&Kff); VecFree(&pf);
    5250
    5351        //Merge back to g set
    5452        if(verbose)_printf_("   merging solution from f to g set\n");
    55         Mergesolutionfromftogx(&ug, uf,fem->ys,fem->nodesets);VecFree(&uf);
     53        Mergesolutionfromftogx(&ug, uf,femmodel->ys,femmodel->nodesets);VecFree(&uf);
    5654
    5755        //Update inputs using new solution:
    58         InputUpdateFromSolutionx( fem->elements,fem->nodes, fem->vertices, fem->loads, fem->materials, fem->parameters,ug);
     56        InputUpdateFromSolutionx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug);
    5957
    6058        /*free ressources: */
    61         xfree((void**)&solver_string);
    6259        VecFree(&ug);
    6360        VecFree(&uf);
  • issm/trunk/src/c/solvers/solver_thermal_nonlinear.cpp

    r5057 r5686  
    88#include "../modules/modules.h"
    99
    10 void solver_thermal_nonlinear(FemModel* fem){
     10void solver_thermal_nonlinear(FemModel* femmodel){
    1111
    1212        /*solution : */
     
    3434        /*parameters:*/
    3535        int kflag,pflag;
    36         char* solver_string=NULL;
    3736        int verbose=0;
    3837        bool lowmem=0;
     
    4140        kflag=1; pflag=1;
    4241
    43         fem->parameters->FindParam(&solver_string,SolverStringEnum);
    44         fem->parameters->FindParam(&verbose,VerboseEnum);
    45         fem->parameters->FindParam(&lowmem,LowmemEnum);
    46         fem->parameters->FindParam(&min_thermal_constraints,MinThermalConstraintsEnum);
     42        femmodel->parameters->FindParam(&verbose,VerboseEnum);
     43        femmodel->parameters->FindParam(&lowmem,LowmemEnum);
     44        femmodel->parameters->FindParam(&min_thermal_constraints,MinThermalConstraintsEnum);
    4745
    4846        count=1;
     
    5452
    5553                if(count==1) reset_penalties=1; else reset_penalties=0;
    56                 InputUpdateFromConstantx( fem->elements,fem->nodes, fem->vertices, fem->loads, fem->materials, fem->parameters,reset_penalties,ResetPenaltiesEnum);
     54                InputUpdateFromConstantx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,reset_penalties,ResetPenaltiesEnum);
    5755
    5856                //*Generate system matrices
     
    6159                        /*Compute Kgg_nopenalty and pg_nopenalty once for all: */
    6260                        if (count==1){
    63                                 SystemMatricesx(&Kgg_nopenalty, &pg_nopenalty,fem->elements,fem->nodes,fem->vertices,fem->loads,fem->materials,fem->parameters,kflag,pflag);
     61                                SystemMatricesx(&Kgg_nopenalty, &pg_nopenalty,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,kflag,pflag);
    6462                        }
    6563
     
    6967
    7068                        //apply penalties each time
    71                         PenaltySystemMatricesx(Kgg, pg,&melting_offset,fem->elements,fem->nodes,fem->vertices,fem->loads,fem->materials,fem->parameters,kflag,pflag);
     69                        PenaltySystemMatricesx(Kgg, pg,&melting_offset,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,kflag,pflag);
    7270                }
    7371                else{
    74                         SystemMatricesx(&Kgg, &pg,fem->elements,fem->nodes,fem->vertices,fem->loads,fem->materials,fem->parameters,kflag,pflag);
     72                        SystemMatricesx(&Kgg, &pg,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,kflag,pflag);
    7573                        //apply penalties
    76                         PenaltySystemMatricesx(Kgg, pg,&melting_offset,fem->elements,fem->nodes,fem->vertices,fem->loads,fem->materials,fem->parameters,kflag,pflag);
     74                        PenaltySystemMatricesx(Kgg, pg,&melting_offset,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,kflag,pflag);
    7775                }
    7876
    7977                /*!Reduce matrix from g to f size:*/
    80                 Reducematrixfromgtofx(&Kff,&Kfs,Kgg,fem->nodesets);
     78                Reducematrixfromgtofx(&Kff,&Kfs,Kgg,femmodel->nodesets);
    8179
    8280                /*Free ressources: */
     
    8482       
    8583                if(verbose)_printf_("   reducing load from g to f set\n");
    86                 Reduceloadfromgtofx(&pf, pg, Kfs, fem->ys, fem->nodesets);
     84                Reduceloadfromgtofx(&pf, pg, Kfs, femmodel->ys, femmodel->nodesets);
    8785
    8886                //no need for pg and Kfs anymore
     
    9391                if(verbose)_printf_("%s\n","solving");
    9492                VecFree(&tf);
    95                 Solverx(&tf, Kff, pf,tf_old, solver_string);
     93                Solverx(&tf, Kff, pf,tf_old, femmodel->parameters);
    9694                VecFree(&tf_old); VecDuplicatePatch(&tf_old,tf);
    9795       
     
    10098
    10199                if(verbose)_printf_("   merging solution from f to g set\n");
    102                 Mergesolutionfromftogx(&tg, tf,fem->ys,fem->nodesets);
     100                Mergesolutionfromftogx(&tg, tf,femmodel->ys,femmodel->nodesets);
    103101
    104102                //Update inputs using new solution:
    105103                if (verbose) _printf_("   updating inputs\n");
    106                 InputUpdateFromSolutionx(fem->elements,fem->nodes, fem->vertices, fem->loads, fem->materials, fem->parameters,tg);
     104                InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,tg);
    107105
    108106                //Deal with penalty loads
    109107                if(verbose)_printf_("   penalty constraints\n");
    110                 PenaltyConstraintsx(&constraints_converged, &num_unstable_constraints, fem->elements,fem->nodes,fem->vertices,fem->loads,fem->materials,fem->parameters);
     108                PenaltyConstraintsx(&constraints_converged, &num_unstable_constraints, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
    111109
    112110                if (!converged){
     
    120118
    121119        //add melting_offset to inputs:
    122         InputUpdateFromConstantx( fem->elements,fem->nodes, fem->vertices, fem->loads, fem->materials, fem->parameters,melting_offset,MeltingOffsetEnum);
     120        InputUpdateFromConstantx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,melting_offset,MeltingOffsetEnum);
    123121
    124122        /*Free ressources: */
     
    128126        VecFree(&tf);
    129127        VecFree(&tf_old);
    130         xfree((void**)&solver_string);
    131128}
  • issm/trunk/src/mex/Solver/Solver.cpp

    r4526 r5686  
    3737                FetchData(&pf,PF);
    3838                FetchData(&uf0,UF0);
    39         }
    40 
    41         /*Run solver code: */
    42         if (strcmp(solver_string,matlabstring)!=0){
    4339                /*Petsc solver: */
    44                 Solverx(&uf, Kff, pf, uf0, solver_string);
     40                Solverx(&uf, Kff, pf, uf0, parameters);
     41                /*Write output*/
     42                WriteData(UF,uf);
    4543        }
    4644        else{
     
    5149        }
    5250
    53         /*write output datasets if running Petsc solver: */
    54         if (strcmp(solver_string,matlabstring)!=0) WriteData(UF,uf);
    55 
    5651        /*Free ressources: */
    57         if (strcmp(solver_string,matlabstring)!=0){
    58                 MatFree(&Kff);
    59                 VecFree(&pf);
    60                 VecFree(&uf0);
    61                 VecFree(&uf);
    62                 delete parameters;
    63         }
     52        MatFree(&Kff);
     53        VecFree(&pf);
     54        VecFree(&uf0);
     55        VecFree(&uf);
     56        delete parameters;
    6457        xfree((void**)&solver_string);
    6558
     
    7164{
    7265        _printf_("\n");
    73         _printf_("   usage: [uf] = %s(Kff,pf,uf0,solver_string);\n",__FUNCT__);
     66        _printf_("   usage: [uf] = %s(Kff,pf,uf0,parameters);\n",__FUNCT__);
    7467        _printf_("\n");
    7568}
Note: See TracChangeset for help on using the changeset viewer.