Changeset 22558
- Timestamp:
- 03/18/18 14:28:54 (7 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/Params/Parameters.cpp
r22471 r22558 572 572 573 573 /*Methods relating to parameters: */ 574 char* OptionsFromAnalysis( Parameters* parameters,int analysis_type){ /*{{{*/574 char* OptionsFromAnalysis(char** pouttoolkit,Parameters* parameters,int analysis_type){ /*{{{*/ 575 575 576 576 /* figure out ISSM options for current analysis, return a string. */ 577 577 578 578 /*output: */ 579 char* outstring=NULL; 579 char *outstring = NULL; 580 char *outtoolkit = NULL; 580 581 581 582 /*intermediary: */ 582 583 int dummy; 583 IssmDouble*analyses = NULL;584 int *analyses = NULL; 584 585 char **strings = NULL; 585 586 char *string = NULL; 587 char **toolkits = NULL; 588 char *toolkit = NULL; 586 589 int numanalyses; 587 590 int found = -1; 588 591 int i; 589 592 590 numanalyses=0;591 593 parameters->FindParam(&strings,&numanalyses,ToolkitsOptionsStringsEnum); 592 593 parameters->FindParam(&analyses,&dummy,ToolkitsOptionsAnalysesEnum); 594 parameters->FindParam(&toolkits,&dummy,ToolkitsTypesEnum); _assert_(dummy==numanalyses); 595 parameters->FindParam(&analyses,&dummy,ToolkitsOptionsAnalysesEnum); _assert_(dummy==numanalyses); 594 596 595 597 if(numanalyses==0)return NULL; //we did not find petsc options, don't bother. … … 611 613 } 612 614 } 613 if 615 if(found==-1){ 614 616 _error_("could find neither a default analysis nor analysis " << EnumToStringx(analysis_type)); 615 617 } 616 618 617 /*ok, grab the option string: */ 619 /*1. Grab the option toolkit: */ 620 outtoolkit=xNew<char>(strlen(toolkits[found])+1); 621 strcpy(outtoolkit,toolkits[found]); 622 *pouttoolkit = outtoolkit; 623 624 /*2. Grab the option string: */ 618 625 outstring=xNew<char>(strlen(strings[found])+1); 619 626 strcpy(outstring,strings[found]); 620 627 621 628 /*Free ressources*/ 622 xDelete<IssmDouble>(analyses);623 629 for(i=0;i<numanalyses;i++){ 624 string=strings[i]; 625 xDelete<char>(string); 626 } 630 xDelete<char>(toolkits[i]); 631 xDelete<char>(strings[i]); 632 } 633 xDelete<char*>(toolkits); 627 634 xDelete<char*>(strings); 635 xDelete<int>(analyses); 628 636 return outstring; 629 637 } … … 638 646 */ 639 647 640 char* options=NULL; 648 char* options = NULL; 649 char* toolkit = NULL; 641 650 642 651 /*Recover first the options string for this analysis: */ 643 options=OptionsFromAnalysis( parameters,analysis_type);652 options=OptionsFromAnalysis(&toolkit,parameters,analysis_type); 644 653 645 654 /*Initialize our Toolkit Options: */ 646 ToolkitOptions::Init( options);655 ToolkitOptions::Init(toolkit,options); 647 656 648 657 #ifdef _HAVE_PETSC_ … … 672 681 673 682 xDelete<char>(options); 683 xDelete<char>(toolkit); 674 684 } 675 685 /*}}}*/ -
issm/trunk-jpl/src/c/main/globals.h
r19714 r22558 16 16 * database if we use Petsc. Can also be used to characterize the ISSM toolkit, 17 17 * often used when Petsc is not allowed*/ 18 char* ToolkitOptions::toolkittype; 18 19 char* ToolkitOptions::toolkitoptions; 19 20 #endif -
issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp
r20698 r22558 21 21 int num_indices; 22 22 char* options=NULL; 23 char* toolkit=NULL; 23 24 24 25 IssmDouble* xp=NULL; … … 35 36 36 37 /*Solver pointers depend on what type of solver we are implementing: */ 37 options=OptionsFromAnalysis( parameters,DefaultAnalysisEnum); //options database is not filled in yet, use default.38 ToolkitOptions::Init( options);38 options=OptionsFromAnalysis(&toolkit,parameters,DefaultAnalysisEnum); 39 ToolkitOptions::Init(toolkit,options); 39 40 40 41 switch(IssmSolverTypeFromToolkitOptions()){ -
issm/trunk-jpl/src/c/modules/ParseToolkitsOptionsx/ParseToolkitsOptionsx.cpp
r15838 r22558 19 19 void ParseToolkitsOptionsx(Parameters* parameters,FILE* fid){ 20 20 21 char line [1000]; 21 char line[1000]; 22 char word1[1000]; 23 char word2[1000]; 22 24 int my_rank; 23 25 int i; 24 26 25 27 /*intermediary: */ 26 IssmDouble* analyses=NULL; 27 char** strings=NULL; 28 int numanalyses; 29 char* string=NULL; 30 char* newstring=NULL; 31 char* catstring=NULL; 32 int stringlength; 28 int *analyses = NULL; 29 char **strings = NULL; 30 char *string = NULL; 31 char **toolkits = NULL; 32 char *toolkit = NULL; 33 char *newstring = NULL; 34 char *catstring = NULL; 35 int numanalyses; 36 int stringlength,toolkitlength; 33 37 34 38 /*Get my_rank:*/ … … 39 43 /*Now, go through lines and figure out how many analyses we have: */ 40 44 numanalyses=0; 41 while ( fgets(line, sizeof line, fid)){45 while(fgets(line, sizeof line, fid)){ 42 46 /*skip comments and empty lines: */ 43 if ((line[0]=='%') || (line[0]=='\n') || (line[0]==' ') || (line[0]=='\t') || (line[0]=='\r')) continue;47 if ((line[0]=='%') || (line[0]=='\n') || (line[0]==' ') || (line[0]=='\t') || (line[0]=='\r')) continue; 44 48 /*ok, first time, we should get an analysis enum, starting with a +: */ 45 if (line[0]=='+')numanalyses++; 46 else continue; 49 if (line[0]=='+'){ 50 numanalyses++; 51 } 52 else{ 53 continue; 54 } 47 55 } 48 56 49 57 /*Now, allocate analyses and strings: */ 50 analyses=xNew<IssmDouble>(numanalyses); 51 strings=xNew<char*>(numanalyses); 52 for(i=0;i<numanalyses;i++)strings[i]=NULL; 58 analyses = xNew<int>(numanalyses); 59 strings = xNew<char*>(numanalyses); 60 toolkits = xNew<char*>(numanalyses); 61 for(i=0;i<numanalyses;i++) strings[i] = NULL; 62 for(i=0;i<numanalyses;i++) toolkits[i] = NULL; 53 63 54 64 /*Go back to beginning of file:*/ 55 65 fseek(fid,0,SEEK_SET); 56 66 numanalyses=0; 57 while ( fgets(line, sizeof line, fid)){67 while( fgets(line, sizeof line, fid)){ 58 68 59 69 /*skip comments and empty lines: */ … … 63 73 line[strlen(line)-1]='\0'; 64 74 65 if 75 if(line[0]=='+'){ /*this is the analysis line: */ 66 76 analyses[numanalyses]=StringToEnumx(&line[1]); //skip the '+' 67 77 numanalyses++; 78 /*Now get toolkit (should be following line)*/ 79 if(!fgets(line, sizeof line, fid)) _error_("could not read toolkit for analysis " << &line[1]); 80 sscanf(line,"-%s %s",&word1[0],&word2[0]); 81 if(strcmp(word1,"toolkit")!=0) _error_("toolkit option does not follow analysis"); 82 toolkit=xNew<char>((strlen(word2)+1)); 83 xMemCpy<char>(toolkit,word2,(strlen(word2)+1)); 84 toolkits[numanalyses-1]=toolkit; 85 continue; 68 86 } 69 else{ /*this is an option corresponding to analysis numanalyses-1. Add it70 to the already existing options*/87 else{ 88 /*this is an option corresponding to analysis numanalyses-1. Add it to the already existing options*/ 71 89 if(strings[numanalyses-1]==NULL){ 72 90 string=xNew<char>((strlen(line)+1)); … … 97 115 ISSM_MPI_Bcast(&numanalyses,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 98 116 if(my_rank!=0){ 99 analyses=xNew<IssmDouble>(numanalyses); 100 strings=xNew<char*>(numanalyses); 117 analyses = xNew<int>(numanalyses); 118 toolkits = xNew<char*>(numanalyses); 119 strings = xNew<char*>(numanalyses); 101 120 } 102 ISSM_MPI_Bcast(analyses,numanalyses,ISSM_MPI_ DOUBLE,0,IssmComm::GetComm());121 ISSM_MPI_Bcast(analyses,numanalyses,ISSM_MPI_INT,0,IssmComm::GetComm()); 103 122 for(i=0;i<numanalyses;i++){ 123 char* toolkit=toolkits[i]; 124 if(my_rank==0){ 125 if(toolkit==NULL) _error_("PETSc options for analysis " << EnumToStringx(reCast<int>(analyses[i])) << " have been declared but were not found"); 126 } 127 if(my_rank==0)toolkitlength=(strlen(toolkit)+1)*sizeof(char); 128 ISSM_MPI_Bcast(&toolkitlength,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 129 if(my_rank!=0)toolkit=xNew<char>(toolkitlength); 130 ISSM_MPI_Bcast(toolkit,toolkitlength,ISSM_MPI_CHAR,0,IssmComm::GetComm()); 131 if(my_rank!=0)toolkits[i]=toolkit; 132 104 133 char* string=strings[i]; 105 134 if(my_rank==0){ … … 115 144 /*Ok, out of strings and analyses and numanalyses, create parameters, and plug them into parameters container: */ 116 145 parameters->AddObject(new StringArrayParam(ToolkitsOptionsStringsEnum,strings,numanalyses)); 117 parameters->AddObject(new DoubleVecParam(ToolkitsOptionsAnalysesEnum,analyses,numanalyses)); 146 parameters->AddObject(new StringArrayParam(ToolkitsTypesEnum,toolkits,numanalyses)); 147 parameters->AddObject(new IntVecParam(ToolkitsOptionsAnalysesEnum,analyses,numanalyses)); 118 148 119 149 /*Clean up and return*/ 120 150 for(i=0;i<numanalyses;i++) xDelete<char>(strings[i]); 151 for(i=0;i<numanalyses;i++) xDelete<char>(toolkits[i]); 121 152 xDelete<char*>(strings); 122 xDelete<IssmDouble>(analyses); 153 xDelete<char*>(toolkits); 154 xDelete<int>(analyses); 123 155 return; 124 156 } -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r22539 r22558 809 809 LockFileNameEnum, 810 810 RestartFileNameEnum, 811 ToolkitsTypesEnum, 811 812 ToolkitsOptionsAnalysesEnum, 812 813 ToolkitsOptionsStringsEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r22539 r22558 797 797 case LockFileNameEnum : return "LockFileName"; 798 798 case RestartFileNameEnum : return "RestartFileName"; 799 case ToolkitsTypesEnum : return "ToolkitsTypes"; 799 800 case ToolkitsOptionsAnalysesEnum : return "ToolkitsOptionsAnalyses"; 800 801 case ToolkitsOptionsStringsEnum : return "ToolkitsOptionsStrings"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r22539 r22558 815 815 else if (strcmp(name,"LockFileName")==0) return LockFileNameEnum; 816 816 else if (strcmp(name,"RestartFileName")==0) return RestartFileNameEnum; 817 else if (strcmp(name,"ToolkitsTypes")==0) return ToolkitsTypesEnum; 817 818 else if (strcmp(name,"ToolkitsOptionsAnalyses")==0) return ToolkitsOptionsAnalysesEnum; 818 819 else if (strcmp(name,"ToolkitsOptionsStrings")==0) return ToolkitsOptionsStringsEnum; … … 874 875 else if (strcmp(name,"SealevelriseTransitions")==0) return SealevelriseTransitionsEnum; 875 876 else if (strcmp(name,"SealevelriseRequestedOutputs")==0) return SealevelriseRequestedOutputsEnum; 876 else if (strcmp(name,"SealevelriseNumRequestedOutputs")==0) return SealevelriseNumRequestedOutputsEnum;877 877 else stage=8; 878 878 } 879 879 if(stage==8){ 880 if (strcmp(name,"LoveNfreq")==0) return LoveNfreqEnum; 880 if (strcmp(name,"SealevelriseNumRequestedOutputs")==0) return SealevelriseNumRequestedOutputsEnum; 881 else if (strcmp(name,"LoveNfreq")==0) return LoveNfreqEnum; 881 882 else if (strcmp(name,"LoveFrequencies")==0) return LoveFrequenciesEnum; 882 883 else if (strcmp(name,"LoveShNmax")==0) return LoveShNmaxEnum; … … 997 998 else if (strcmp(name,"SegInput")==0) return SegInputEnum; 998 999 else if (strcmp(name,"Tria")==0) return TriaEnum; 999 else if (strcmp(name,"TriaInput")==0) return TriaInputEnum;1000 1000 else stage=9; 1001 1001 } 1002 1002 if(stage==9){ 1003 if (strcmp(name,"Tetra")==0) return TetraEnum; 1003 if (strcmp(name,"TriaInput")==0) return TriaInputEnum; 1004 else if (strcmp(name,"Tetra")==0) return TetraEnum; 1004 1005 else if (strcmp(name,"TetraInput")==0) return TetraInputEnum; 1005 1006 else if (strcmp(name,"Penta")==0) return PentaEnum; … … 1120 1121 else if (strcmp(name,"P1xP2")==0) return P1xP2Enum; 1121 1122 else if (strcmp(name,"P1xP3")==0) return P1xP3Enum; 1122 else if (strcmp(name,"P1xP4")==0) return P1xP4Enum;1123 1123 else stage=10; 1124 1124 } 1125 1125 if(stage==10){ 1126 if (strcmp(name,"P2xP4")==0) return P2xP4Enum; 1126 if (strcmp(name,"P1xP4")==0) return P1xP4Enum; 1127 else if (strcmp(name,"P2xP4")==0) return P2xP4Enum; 1127 1128 else if (strcmp(name,"P1P1")==0) return P1P1Enum; 1128 1129 else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum; -
issm/trunk-jpl/src/c/toolkits/ToolkitOptions.cpp
r15728 r22558 9 9 #include "../shared/MemOps/MemOps.h" 10 10 11 void ToolkitOptions::Init(char* options){ /*{{{*/11 void ToolkitOptions::Init(const char* toolkit_in,const char* options){ /*{{{*/ 12 12 13 13 /*First, avoid a leak: */ 14 14 xDelete<char>(toolkitoptions); 15 xDelete<char>(toolkittype); 15 16 16 17 /*copy options into toolkitoptions:*/ 18 _assert_(toolkit_in); 17 19 _assert_(options); 18 toolkitoptions= xNew<char>(strlen(options)+1); 19 sprintf(toolkitoptions, "%s",options); 20 20 toolkittype = xNew<char>(strlen(toolkit_in)+1); 21 sprintf(toolkittype,"%s",toolkit_in); 22 toolkitoptions = xNew<char>(strlen(options)+1); 23 sprintf(toolkitoptions,"%s",options); 21 24 }/*}}}*/ 22 25 char* ToolkitOptions::GetToolkitType(){ /*{{{*/ 23 26 24 /*Look for token: -toolkit, and return value:*/25 26 return TokenValue(toolkitoptions,"toolkit");27 27 _assert_(toolkittype); 28 char* toolkittype_out = xNew<char>(strlen(toolkittype)+1); 29 sprintf(toolkittype_out,"%s",toolkittype); 30 return toolkittype_out; 28 31 }/*}}}*/ 29 32 char* ToolkitOptions::GetToolkitOptionValue(const char* option){ /*{{{*/ -
issm/trunk-jpl/src/c/toolkits/ToolkitOptions.h
r15728 r22558 11 11 12 12 private: 13 static char* toolkittype; 13 14 static char* toolkitoptions; 14 15 15 16 public: 16 static void Init(c har* options);17 static void Init(const char* type_in,const char* options); 17 18 static char* GetToolkitType(void); 18 19 static char* GetToolkitOptionValue(const char* option); -
issm/trunk-jpl/src/c/toolkits/objects/Matrix.h
r18063 r22558 127 127 void InitCheckAndSetType(void){/*{{{*/ 128 128 129 char* toolkittype=NULL;130 131 129 #ifdef _HAVE_PETSC_ 132 130 pmatrix=NULL; … … 135 133 136 134 /*retrieve toolkittype: */ 137 toolkittype=ToolkitOptions::GetToolkitType();135 char* toolkittype=ToolkitOptions::GetToolkitType(); 138 136 139 137 /*set matrix type: */ … … 149 147 type=IssmMatType; 150 148 } 151 else _error_("unknow toolkit type "); 149 else{ 150 _error_("unknow toolkit type "); 151 } 152 152 153 153 /*Free ressources: */ -
issm/trunk-jpl/src/c/toolkits/objects/Vector.h
r19977 r22558 98 98 void InitCheckAndSetType(void){ /*{{{*/ 99 99 100 char* toolkittype=NULL;101 102 100 #ifdef _HAVE_PETSC_ 103 101 pvector=NULL; … … 106 104 107 105 /*retrieve toolkittype: */ 108 toolkittype=ToolkitOptions::GetToolkitType(); 106 char* toolkittype=ToolkitOptions::GetToolkitType(); 107 _assert_(toolkittype); 109 108 110 109 /*set vector type: */ 111 if 110 if(strcmp(toolkittype,"petsc")==0){ 112 111 #ifdef _HAVE_PETSC_ 113 112 type=PetscVecType; … … 120 119 type=IssmVecType; 121 120 } 122 else _error_("unknow toolkit type "); 121 else{ 122 _error_("unknow toolkit type "); 123 } 123 124 124 125 /*Free ressources: */
Note:
See TracChangeset
for help on using the changeset viewer.