1af0996ceSBarry Smith #include <petsc/private/tsimpl.h> /*I "petscts.h" I*/ 23f3760d9SBarry Smith 30298fd71SBarry Smith PetscFunctionList TSList = NULL; 4ace3abfcSBarry Smith PetscBool TSRegisterAllCalled = PETSC_FALSE; 53f3760d9SBarry Smith 682bf6240SBarry Smith /*@C 78f6c3df8SBarry Smith TSSetType - Sets the method to be used as the timestepping solver. 83f3760d9SBarry Smith 9fee21e36SBarry Smith Collective on TS 10fee21e36SBarry Smith 11bef22f13SLois Curfman McInnes Input Parameters: 12bdad233fSMatthew Knepley + ts - The TS context 13bdad233fSMatthew Knepley - type - A known method 14bef22f13SLois Curfman McInnes 15ae12b187SLois Curfman McInnes Options Database Command: 16bdad233fSMatthew Knepley . -ts_type <type> - Sets the method; use -help for a list of available methods (for instance, euler) 17ae12b187SLois Curfman McInnes 183f3760d9SBarry Smith Notes: 19e090d566SSatish Balay See "petsc/include/petscts.h" for available methods (for instance) 209596e0b4SJed Brown + TSEULER - Euler 219596e0b4SJed Brown . TSSUNDIALS - SUNDIALS interface 229596e0b4SJed Brown . TSBEULER - Backward Euler 239596e0b4SJed Brown - TSPSEUDO - Pseudo-timestepping 243f3760d9SBarry Smith 25ae12b187SLois Curfman McInnes Normally, it is best to use the TSSetFromOptions() command and 26ae12b187SLois Curfman McInnes then set the TS type from the options database rather than by using 27ae12b187SLois Curfman McInnes this routine. Using the options database provides the user with 28ae12b187SLois Curfman McInnes maximum flexibility in evaluating the many different solvers. 29ae12b187SLois Curfman McInnes The TSSetType() routine is provided for those situations where it 30ae12b187SLois Curfman McInnes is necessary to set the timestepping solver independently of the 31ae12b187SLois Curfman McInnes command line or options database. This might be the case, for example, 32ae12b187SLois Curfman McInnes when the choice of solver changes during the execution of the 33ae12b187SLois Curfman McInnes program, and the user's application is taking responsibility for 34ae12b187SLois Curfman McInnes choosing the appropriate method. In other words, this routine is 35d5d37b61SLois Curfman McInnes not for beginners. 36d5d37b61SLois Curfman McInnes 37d5d37b61SLois Curfman McInnes Level: intermediate 383f3760d9SBarry Smith 39ae12b187SLois Curfman McInnes .keywords: TS, set, type 40437fc6d7SBarry Smith 418f6c3df8SBarry Smith .seealso: TS, TSSolve(), TSCreate(), TSSetFromOptions(), TSDestroy(), TSType 428f6c3df8SBarry Smith 433f3760d9SBarry Smith @*/ 4419fd82e9SBarry Smith PetscErrorCode TSSetType(TS ts,TSType type) 453f3760d9SBarry Smith { 466849ba73SBarry Smith PetscErrorCode (*r)(TS); 47ace3abfcSBarry Smith PetscBool match; 48dfbe8321SBarry Smith PetscErrorCode ierr; 49df8cb225SBarry Smith 503a40ed3dSBarry Smith PetscFunctionBegin; 510700a824SBarry Smith PetscValidHeaderSpecific(ts, TS_CLASSID,1); 52b92453a8SLisandro Dalcin PetscValidCharPointer(type,2); 53251f4c67SDmitry Karpeev ierr = PetscObjectTypeCompare((PetscObject) ts, type, &match);CHKERRQ(ierr); 54958c9bccSBarry Smith if (match) PetscFunctionReturn(0); 55bdad233fSMatthew Knepley 561c9cd337SJed Brown ierr = PetscFunctionListFind(TSList,type,&r);CHKERRQ(ierr); 57e32f2f54SBarry Smith if (!r) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_UNKNOWN_TYPE, "Unknown TS type: %s", type); 58958c9bccSBarry Smith if (ts->ops->destroy) { 59bdad233fSMatthew Knepley ierr = (*(ts)->ops->destroy)(ts);CHKERRQ(ierr); 60bdad233fSMatthew Knepley } 6179531b15SSean Farley ierr = PetscMemzero(ts->ops,sizeof(*ts->ops));CHKERRQ(ierr); 62*825ab935SBarry Smith ts->usessnes = PETSC_FALSE; 63b92453a8SLisandro Dalcin ts->default_adapt_type = TSADAPTNONE; 64bbd56ea5SKarl Rupp 65277b19d0SLisandro Dalcin ts->setupcalled = PETSC_FALSE; 66bbd56ea5SKarl Rupp 67bdad233fSMatthew Knepley ierr = PetscObjectChangeTypeName((PetscObject)ts, type);CHKERRQ(ierr); 68d372ba47SLisandro Dalcin ierr = (*r)(ts);CHKERRQ(ierr); 693a40ed3dSBarry Smith PetscFunctionReturn(0); 703f3760d9SBarry Smith } 713f3760d9SBarry Smith 723f3760d9SBarry Smith /*@C 73fee21e36SBarry Smith TSGetType - Gets the TS method type (as a string). 743f3760d9SBarry Smith 75bef22f13SLois Curfman McInnes Not Collective 76bef22f13SLois Curfman McInnes 773f3760d9SBarry Smith Input Parameter: 78bdad233fSMatthew Knepley . ts - The TS 793f3760d9SBarry Smith 803f3760d9SBarry Smith Output Parameter: 81bdad233fSMatthew Knepley . type - The name of TS method 823f3760d9SBarry Smith 83d5d37b61SLois Curfman McInnes Level: intermediate 84d5d37b61SLois Curfman McInnes 85df8cb225SBarry Smith .keywords: TS, timestepper, get, type, name 86bdad233fSMatthew Knepley .seealso TSSetType() 873f3760d9SBarry Smith @*/ 8819fd82e9SBarry Smith PetscErrorCode TSGetType(TS ts, TSType *type) 893f3760d9SBarry Smith { 903a40ed3dSBarry Smith PetscFunctionBegin; 910700a824SBarry Smith PetscValidHeaderSpecific(ts,TS_CLASSID,1); 924482741eSBarry Smith PetscValidPointer(type,2); 937adad957SLisandro Dalcin *type = ((PetscObject)ts)->type_name; 943a40ed3dSBarry Smith PetscFunctionReturn(0); 953f3760d9SBarry Smith } 963f3760d9SBarry Smith 97bdad233fSMatthew Knepley /*--------------------------------------------------------------------------------------------------------------------*/ 983cea93caSBarry Smith 993cea93caSBarry Smith /*@C 1001c84c290SBarry Smith TSRegister - Adds a creation method to the TS package. 1011c84c290SBarry Smith 1021c84c290SBarry Smith Not Collective 1031c84c290SBarry Smith 1041c84c290SBarry Smith Input Parameters: 1051c84c290SBarry Smith + name - The name of a new user-defined creation routine 1061c84c290SBarry Smith - create_func - The creation routine itself 1071c84c290SBarry Smith 1081c84c290SBarry Smith Notes: 1091c84c290SBarry Smith TSRegister() may be called multiple times to add several user-defined tses. 1101c84c290SBarry Smith 1111c84c290SBarry Smith Sample usage: 1121c84c290SBarry Smith .vb 113bdf89e91SBarry Smith TSRegister("my_ts", MyTSCreate); 1141c84c290SBarry Smith .ve 1151c84c290SBarry Smith 1161c84c290SBarry Smith Then, your ts type can be chosen with the procedural interface via 1171c84c290SBarry Smith .vb 1181c84c290SBarry Smith TS ts; 1191c84c290SBarry Smith TSCreate(MPI_Comm, &ts); 1201c84c290SBarry Smith TSSetType(ts, "my_ts") 1211c84c290SBarry Smith .ve 1221c84c290SBarry Smith or at runtime via the option 1231c84c290SBarry Smith .vb 1241c84c290SBarry Smith -ts_type my_ts 1251c84c290SBarry Smith .ve 1263cea93caSBarry Smith 1277f6c08e0SMatthew Knepley Level: advanced 1281c84c290SBarry Smith 1291c84c290SBarry Smith .keywords: TS, register 1301c84c290SBarry Smith 1311c84c290SBarry Smith .seealso: TSRegisterAll(), TSRegisterDestroy() 1323cea93caSBarry Smith @*/ 133bdf89e91SBarry Smith PetscErrorCode TSRegister(const char sname[], PetscErrorCode (*function)(TS)) 134bdad233fSMatthew Knepley { 135dfbe8321SBarry Smith PetscErrorCode ierr; 136bdad233fSMatthew Knepley 137bdad233fSMatthew Knepley PetscFunctionBegin; 138a240a19fSJed Brown ierr = PetscFunctionListAdd(&TSList,sname,function);CHKERRQ(ierr); 139bdad233fSMatthew Knepley PetscFunctionReturn(0); 140bdad233fSMatthew Knepley } 141bdad233fSMatthew Knepley 142