Changeset 16142
- Timestamp:
- 09/16/13 22:05:45 (12 years ago)
- Location:
- issm/trunk-jpl
- Files:
-
- 2 added
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/FemModel.cpp
r16141 r16142 189 189 /*Open input file on cpu 0: */ 190 190 if(my_rank==0) IOMODEL = pfopen0(inputfilename ,"rb"); 191 192 /*Open toolkits file: */ 193 toolkitsoptionsfid=pfopen(toolkitsfilename,"r"); 191 194 192 195 /*Initialize internal data: */ … … 203 206 204 207 /*create datasets for all analyses*/ 205 ModelProcessorx(&this->elements,&this->nodes,&this->vertices,&this->materials,&this->constraints,&this->loads,&this->parameters,IOMODEL, rootpath,this->solution_type,nummodels,analyses);208 ModelProcessorx(&this->elements,&this->nodes,&this->vertices,&this->materials,&this->constraints,&this->loads,&this->parameters,IOMODEL,toolkitsoptionsfid,rootpath,this->solution_type,nummodels,analyses); 206 209 207 210 /*do the post-processing of the datasets to get an FemModel that can actually run analyses: */ … … 227 230 } 228 231 229 /*Close input file descriptors: */232 /*Close input file and toolkits file descriptors: */ 230 233 if(my_rank==0) pfclose(IOMODEL,inputfilename); 234 pfclose(toolkitsoptionsfid,toolkitsfilename); 231 235 232 236 /*Open output file once for all and add output file name and file descriptor to parameters*/ … … 238 242 this->parameters->AddObject(new StringParam(LockFileNameEnum,lockfilename)); 239 243 240 /*Now, deal with toolkits options, which need to be put into the parameters dataset: */ 241 toolkitsoptionsfid=pfopen(toolkitsfilename,"r"); 242 ParseToolkitsOptionsx(this->parameters,toolkitsoptionsfid); 243 pfclose(toolkitsoptionsfid,toolkitsfilename); 244 } 244 } 245 245 /*}}}*/ 246 246 /*FUNCTION FemModel::OutputResults {{{*/ -
issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp
r16141 r16142 21 21 int* indices=NULL; 22 22 int num_indices; 23 char* options=NULL; 23 24 24 25 IssmDouble* xp=NULL; … … 116 117 /*initialize a placeholder to store solver pointers: {{{*/ 117 118 GenericParam<Adolc_edf> *theAdolcEDF_p=new GenericParam<Adolc_edf>(AdolcParamEnum); 118 #ifdef _HAVE_GSL_ 119 theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p=reg_ext_fct(EDF_for_solverx); 120 #endif 121 #ifdef _HAVE_MUMPS_ 122 theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p=reg_ext_fct(mumpsSolveEDF); 123 #endif 119 120 /*Solver pointers depend on what type of solver we are implementing: */ 121 options=OptionsFromAnalysis(parameters,DefaultAnalysisEnum); //options database is not filled in yet, use default. 122 ToolkitOptions::Init(options); 123 124 switch(IssmSolverTypeFromToolkitOptions()){ 125 case MumpsEnum:{ 126 #ifdef _HAVE_MUMPS_ 127 theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p=reg_ext_fct(mumpsSolveEDF); 128 #else 129 _error_("requesting mumps solver without MUMPS being compiled in!"); 130 #endif 131 break; 132 } 133 case GslEnum: { 134 #ifdef _HAVE_GSL_ 135 theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p=reg_ext_fct(EDF_for_solverx); 136 #endif 137 break; 138 } 139 default: 140 _error_("solver type not supported yet!"); 141 } 142 124 143 // to save some space: 125 144 // we know we won't use adolc inside of the solver: -
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp
r16007 r16142 14 14 #include "./ModelProcessorx.h" 15 15 16 void CreateDataSets(Elements** pelements,Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads,Parameters** pparameters,IoModel* iomodel, char* rootpath,const int solution_type,const int analysis_type,const int nummodels,int analysis_counter){16 void CreateDataSets(Elements** pelements,Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads,Parameters** pparameters,IoModel* iomodel,FILE* toolkitfile,char* rootpath,const int solution_type,const int analysis_type,const int nummodels,int analysis_counter){ 17 17 18 18 Elements *elements = NULL; … … 178 178 179 179 /*Generate objects that are not dependent on any analysis_type: */ 180 CreateParameters(pparameters,iomodel,rootpath, solution_type,analysis_type,analysis_counter);180 CreateParameters(pparameters,iomodel,rootpath,toolkitfile,solution_type,analysis_type,analysis_counter); 181 181 182 182 /*Update Elements in case we are running a transient solution: */ -
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
r15877 r16142 13 13 #include "../../shared/shared.h" 14 14 #include "../MeshPartitionx/MeshPartitionx.h" 15 #include "../ParseToolkitsOptionsx/ParseToolkitsOptionsx.h" 15 16 #include "./ModelProcessorx.h" 16 17 17 void CreateParameters(Parameters** pparameters,IoModel* iomodel,char* rootpath, const int solution_type,int analysis_type,int analysis_counter){18 void CreateParameters(Parameters** pparameters,IoModel* iomodel,char* rootpath,FILE* toolkitsoptionsfid,const int solution_type,int analysis_type,int analysis_counter){ 18 19 19 20 int i,j,m,k; … … 244 245 CreateParametersDakota(¶meters,iomodel,rootpath,solution_type,analysis_type); 245 246 #endif 247 248 /*Now, deal with toolkits options, which need to be put into the parameters dataset: */ 249 ParseToolkitsOptionsx(parameters,toolkitsoptionsfid); 246 250 247 251 #ifdef _HAVE_ADOLC_ -
issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp
r15771 r16142 13 13 #include "./ModelProcessorx.h" 14 14 15 void ModelProcessorx(Elements** pelements, Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads, Parameters** pparameters, FILE* IOMODEL, char* rootpath,const int solution_type,const int nummodels,const int* analysis_type_list){15 void ModelProcessorx(Elements** pelements, Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads, Parameters** pparameters, FILE* IOMODEL,FILE* toolkitfile, char* rootpath,const int solution_type,const int nummodels,const int* analysis_type_list){ 16 16 17 17 int i,analysis_type,verbose; … … 65 65 66 66 if(VerboseMProcessor()) _printf0_(" creating datasets for analysis " << EnumToStringx(analysis_type) << "\n"); 67 CreateDataSets(&elements,&nodes,&vertices,&materials,&constraints,&loads,¶meters,iomodel, rootpath,solution_type,analysis_type,nummodels,i);67 CreateDataSets(&elements,&nodes,&vertices,&materials,&constraints,&loads,¶meters,iomodel,toolkitfile,rootpath,solution_type,analysis_type,nummodels,i); 68 68 } 69 69 if(VerboseMProcessor()) _printf0_(" done with model processor \n"); -
issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
r16007 r16142 10 10 #include "../../classes/classes.h" 11 11 12 void ModelProcessorx(Elements** pelements, Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads, Parameters** pparameters, FILE* iomodel_handle, char* rootpath,const int solution_type,const int nummodels,const int* analysis_type_listh);12 void ModelProcessorx(Elements** pelements, Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads, Parameters** pparameters, FILE* iomodel_handle,FILE* toolkitfile, char* rootpath,const int solution_type,const int nummodels,const int* analysis_type_listh); 13 13 14 14 /*Creation of fem datasets: general drivers*/ 15 void CreateDataSets(Elements** pelements,Nodes** pnodes,Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads,Parameters** pparameters,IoModel* iomodel, char* rootpath,const int solution_type,int analysis_type,const int nummodels,int analysis_counter);15 void CreateDataSets(Elements** pelements,Nodes** pnodes,Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads,Parameters** pparameters,IoModel* iomodel,FILE* toolkitfile,char* rootpath,const int solution_type,int analysis_type,const int nummodels,int analysis_counter); 16 16 void CreateElementsVerticesAndMaterials(Elements** pelements,Vertices** pvertices,Materials** pmaterials, IoModel* iomodel,const int nummodels); 17 void CreateParameters(Parameters** pparameters,IoModel* iomodel,char* rootpath, const int solution_type,int analysis_type,int analysis_counter);17 void CreateParameters(Parameters** pparameters,IoModel* iomodel,char* rootpath,FILE* toolkitfile,const int solution_type,int analysis_type,int analysis_counter); 18 18 void CreateParametersAutodiff(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type); 19 19 void CreateParametersControl(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type); -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r16026 r16142 608 608 SeqEnum, 609 609 MpiEnum, 610 MumpsEnum, 611 GslEnum, 610 612 /*}}}*/ 611 613 /*Options{{{*/ -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r16029 r16142 582 582 case SeqEnum : return "Seq"; 583 583 case MpiEnum : return "Mpi"; 584 case MumpsEnum : return "Mumps"; 585 case GslEnum : return "Gsl"; 584 586 case OptionEnum : return "Option"; 585 587 case GenericOptionEnum : return "GenericOption"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r16030 r16142 594 594 else if (strcmp(name,"Seq")==0) return SeqEnum; 595 595 else if (strcmp(name,"Mpi")==0) return MpiEnum; 596 else if (strcmp(name,"Mumps")==0) return MumpsEnum; 597 else if (strcmp(name,"Gsl")==0) return GslEnum; 596 598 else if (strcmp(name,"Option")==0) return OptionEnum; 597 599 else if (strcmp(name,"GenericOption")==0) return GenericOptionEnum; -
issm/trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h
r16070 r16142 513 513 pf=(IssmMpiVec<IssmDouble>*)pfin; 514 514 515 /*Initialize output: */ 516 uf=pf->Duplicate(); 517 518 /*Let's try and use the MUMPS solver here: */ 519 #ifdef _HAVE_MUMPS_ 520 MpiDenseMumpsSolve(/*output*/ uf->vector,uf->M,uf->m, /*stiffness matrix:*/ this->matrix,this->M,this->N,this->m, /*right hand side load vector: */ pf->vector,pf->M,pf->m,parameters); 521 #else 522 _error_("IssmMpiDenseMat solver requires MUMPS solver"); 523 #endif 524 return (IssmAbsVec<IssmDouble>*)uf; 515 516 switch(IssmSolverTypeFromToolkitOptions()){ 517 case MumpsEnum: { 518 /*Initialize output: */ 519 uf=pf->Duplicate(); 520 #ifdef _HAVE_MUMPS_ 521 MpiDenseMumpsSolve(/*output*/ uf->vector,uf->M,uf->m, /*stiffness matrix:*/ this->matrix,this->M,this->N,this->m, /*right hand side load vector: */ pf->vector,pf->M,pf->m,parameters); 522 #else 523 _error_("IssmMpiDenseMat solver requires MUMPS solver"); 524 #endif 525 return (IssmAbsVec<IssmDouble>*)uf; 526 break; 527 } 528 case GslEnum: { 529 530 IssmDouble* x=NULL; 531 #ifdef _HAVE_GSL_ 532 533 DenseGslSolve(/*output*/ &x,/*stiffness matrix:*/ this->matrix,this->M,this->N, /*right hand side load vector: */ pf->vector,pf->M,parameters); 534 535 uf=new IssmMpiVec<IssmDouble>(x,this->N); xDelete(x); 536 537 return (IssmAbsVec<IssmDouble>*)uf; 538 break; 539 #else 540 _error_("GSL support not compiled in!"); 541 #endif 542 } 543 default: 544 _error_("solver type not supported yet!"); 545 } 525 546 526 547 }/*}}}*/ -
issm/trunk-jpl/src/c/toolkits/issm/IssmToolkitUtils.cpp
r15839 r16142 36 36 mat_type=ToolkitOptions::GetToolkitOptionValue("mat_type"); 37 37 38 if ((strcmp(mat_type,"mpidense")==0) || (strcmp(mat_type,"dense")==0)){ 39 if (isparallel) mat_type_enum=MpiDenseEnum; 38 if (strcmp(mat_type,"mpidense")==0){ 39 mat_type_enum=MpiDenseEnum; 40 } 41 else if (strcmp(mat_type,"dense")==0){ 42 if (isparallel) _error_("Dense matrix type not supported for parallel runs with num_procs>1"); 40 43 else mat_type_enum=DenseEnum; 41 44 } … … 62 65 *we try and stick with the Petsc vector types: */ 63 66 vec_type=ToolkitOptions::GetToolkitOptionValue("vec_type"); 64 65 if ((strcmp(vec_type,"mpi")==0) || (strcmp(vec_type,"seq")==0)){ 66 if (isparallel) vec_type_enum=MpiEnum; 67 68 if (strcmp(vec_type,"mpi")==0){ 69 vec_type_enum=MpiEnum; 70 } 71 else if (strcmp(vec_type,"seq")==0){ 72 if (isparallel) _error_("Dense vector type not supported for parallel runs with num_procs>1"); 67 73 else vec_type_enum=SeqEnum; 68 74 } … … 75 81 return vec_type_enum; 76 82 } /*}}}*/ 83 int IssmSolverTypeFromToolkitOptions(void){ /*{{{*/ 84 85 char* solver_type=NULL; 86 int solver_type_enum; 87 int num_procs=0; 88 bool isparallel=false; 89 90 /*first, figure out if we are running in parallel: */ 91 num_procs=IssmComm::GetSize(); 92 if(num_procs>1)isparallel=true; 93 94 /*retrieve solver type as a string, from the Toolkits Options database, similar to what Petsc does. Actually, 95 *we try and stick with the Petsc vector types: */ 96 solver_type=ToolkitOptions::GetToolkitOptionValue("solver_type"); 97 98 if (strcmp(solver_type,"mumps")==0){ 99 solver_type_enum=MumpsEnum; 100 } 101 else if (strcmp(solver_type,"gsl")==0){ 102 if (isparallel) _error_("Gsl solver type not supported for parallel runs with num_procs>1"); 103 else solver_type_enum=GslEnum; 104 } 105 else _error_("solver type not supported yet!"); 106 107 /*free ressources: */ 108 xDelete<char>(solver_type); 109 110 /*return: */ 111 return solver_type_enum; 112 } /*}}}*/ -
issm/trunk-jpl/src/c/toolkits/issm/IssmToolkitUtils.h
r14656 r16142 18 18 int IssmMatTypeFromToolkitOptions(void); 19 19 int IssmVecTypeFromToolkitOptions(void); 20 int IssmSolverTypeFromToolkitOptions(void); 20 21 21 22 #endif //#ifndef _ISSMMAT_H_ -
issm/trunk-jpl/src/m/enum/EnumDefinitions.py
r16028 r16142 574 574 def SeqEnum(): return StringToEnum("Seq")[0] 575 575 def MpiEnum(): return StringToEnum("Mpi")[0] 576 def MumpsEnum(): return StringToEnum("Mumps")[0] 577 def GslEnum(): return StringToEnum("Gsl")[0] 576 578 def OptionEnum(): return StringToEnum("Option")[0] 577 579 def GenericOptionEnum(): return StringToEnum("GenericOption")[0] -
issm/trunk-jpl/src/m/solvers/issmsolver.m
r14728 r16142 13 13 issmoptions.mat_type=getfieldvalue(options,'mat_type','mpidense'); 14 14 issmoptions.vec_type=getfieldvalue(options,'vec_type','mpi'); 15 issmoptions.solver_type=getfieldvalue(options,'solver_type','mumps'); -
issm/trunk-jpl/src/m/solvers/issmsolver.py
r15907 r16142 9 9 arguments=pairoptions(*args) 10 10 11 options=[['toolkit','issm'],['mat_type','mpidense'],['vec_type','mpi'] ];11 options=[['toolkit','issm'],['mat_type','mpidense'],['vec_type','mpi'],['solver_type','mumps']]; 12 12 13 13 #now, go through our arguments, and write over default options. -
issm/trunk-jpl/test/NightlyRun/testad.m
r16141 r16142 1 1 %test reverse scalar vs forward vectorial drivers in ADOLC, using the test3009 setup, equivalent to test109 setup. 2 md=triangle(model(),'../Exp/Square.exp', 100000.);2 md=triangle(model(),'../Exp/Square.exp',500000.); 3 3 md=setmask(md,'all',''); 4 4 md=parameterize(md,'../Par/SquareShelfConstrained.par'); 5 5 md=setflowequation(md,'SSA','all'); 6 md.cluster=generic('name',oshostname(),'np', 1);6 md.cluster=generic('name',oshostname(),'np',2); 7 7 %md.debug.valgrind=true; 8 8 %md.verbose=verbose('11111111') 9 9 md.toolkits.DefaultAnalysis=issmsolver(); 10 %md.toolkits.DefaultAnalysis.solver_type='gsl'; 10 11 11 12 md.autodiff.isautodiff=true;
Note:
See TracChangeset
for help on using the changeset viewer.