1bc952696SBarry Smith 2af0996ceSBarry Smith #include <petsc/private/tsimpl.h> /*I "petscts.h" I*/ 3bc952696SBarry Smith 4bc952696SBarry Smith PetscFunctionList TSTrajectoryList = NULL; 5bc952696SBarry Smith PetscBool TSTrajectoryRegisterAllCalled = PETSC_FALSE; 6bc952696SBarry Smith PetscClassId TSTRAJECTORY_CLASSID; 7d0d044f3SHong Zhang PetscLogEvent TSTrajectory_Set, TSTrajectory_Get; 8bc952696SBarry Smith 9bc952696SBarry Smith #undef __FUNCT__ 10bc952696SBarry Smith #define __FUNCT__ "TSTrajectoryRegister" 11bc952696SBarry Smith /*@C 12bc952696SBarry Smith TSTrajectoryRegister - Adds a way of storing trajectories to the TS package 13bc952696SBarry Smith 14bc952696SBarry Smith Not Collective 15bc952696SBarry Smith 16bc952696SBarry Smith Input Parameters: 17bc952696SBarry Smith + name - The name of a new user-defined creation routine 18bc952696SBarry Smith - create_func - The creation routine itself 19bc952696SBarry Smith 20bc952696SBarry Smith Notes: 21bc952696SBarry Smith TSTrajectoryRegister() may be called multiple times to add several user-defined tses. 22bc952696SBarry Smith 23bc952696SBarry Smith Level: advanced 24bc952696SBarry Smith 25bc952696SBarry Smith .keywords: TS, register 26bc952696SBarry Smith 27bc952696SBarry Smith .seealso: TSTrajectoryRegisterAll(), TSTrajectoryRegisterDestroy() 28bc952696SBarry Smith @*/ 29972caf09SHong Zhang PetscErrorCode TSTrajectoryRegister(const char sname[],PetscErrorCode (*function)(TSTrajectory,TS)) 30bc952696SBarry Smith { 31bc952696SBarry Smith PetscErrorCode ierr; 32bc952696SBarry Smith 33bc952696SBarry Smith PetscFunctionBegin; 34bc952696SBarry Smith ierr = PetscFunctionListAdd(&TSTrajectoryList,sname,function);CHKERRQ(ierr); 35bc952696SBarry Smith PetscFunctionReturn(0); 36bc952696SBarry Smith } 37bc952696SBarry Smith 38bc952696SBarry Smith #undef __FUNCT__ 39bc952696SBarry Smith #define __FUNCT__ "TSTrajectorySet" 40bc952696SBarry Smith PetscErrorCode TSTrajectorySet(TSTrajectory tj,TS ts,PetscInt stepnum,PetscReal time,Vec X) 41bc952696SBarry Smith { 42bc952696SBarry Smith PetscErrorCode ierr; 43bc952696SBarry Smith 44bc952696SBarry Smith PetscFunctionBegin; 45bc952696SBarry Smith if (!tj) PetscFunctionReturn(0); 46d0d044f3SHong Zhang ierr = PetscLogEventBegin(TSTrajectory_Set,tj,ts,0,0);CHKERRQ(ierr); 47bc952696SBarry Smith ierr = (*tj->ops->set)(tj,ts,stepnum,time,X);CHKERRQ(ierr); 48d0d044f3SHong Zhang ierr = PetscLogEventEnd(TSTrajectory_Set,tj,ts,0,0);CHKERRQ(ierr); 49bc952696SBarry Smith PetscFunctionReturn(0); 50bc952696SBarry Smith } 51bc952696SBarry Smith 52bc952696SBarry Smith #undef __FUNCT__ 53bc952696SBarry Smith #define __FUNCT__ "TSTrajectoryGet" 54c679fc15SHong Zhang PetscErrorCode TSTrajectoryGet(TSTrajectory tj,TS ts,PetscInt stepnum,PetscReal *time) 55bc952696SBarry Smith { 56bc952696SBarry Smith PetscErrorCode ierr; 57bc952696SBarry Smith 58bc952696SBarry Smith PetscFunctionBegin; 59bc952696SBarry Smith if (!tj) SETERRQ(PetscObjectComm((PetscObject)ts),PETSC_ERR_ARG_WRONGSTATE,"TS solver did not save trajectory"); 60d0d044f3SHong Zhang ierr = PetscLogEventBegin(TSTrajectory_Get,tj,ts,0,0);CHKERRQ(ierr); 61bc952696SBarry Smith ierr = (*tj->ops->get)(tj,ts,stepnum,time);CHKERRQ(ierr); 62d0d044f3SHong Zhang ierr = PetscLogEventEnd(TSTrajectory_Get,tj,ts,0,0);CHKERRQ(ierr); 63bc952696SBarry Smith PetscFunctionReturn(0); 64bc952696SBarry Smith } 65bc952696SBarry Smith 66bc952696SBarry Smith #undef __FUNCT__ 67bc952696SBarry Smith #define __FUNCT__ "TSTrajectoryView" 68bc952696SBarry Smith /*@C 69bc952696SBarry Smith TSTrajectoryView - Prints information about the trajectory object 70bc952696SBarry Smith 71bc952696SBarry Smith Collective on TSTrajectory 72bc952696SBarry Smith 73bc952696SBarry Smith Input Parameters: 74b1d74d50SHong Zhang + tj - the TSTrajectory context obtained from TSTrajectoryCreate() 75bc952696SBarry Smith - viewer - visualization context 76bc952696SBarry Smith 77bc952696SBarry Smith Options Database Key: 78e210cd0eSHong Zhang . -ts_trajectory_view - calls TSTrajectoryView() at end of TSAdjointStep() 79bc952696SBarry Smith 80bc952696SBarry Smith Notes: 81bc952696SBarry Smith The available visualization contexts include 82bc952696SBarry Smith + PETSC_VIEWER_STDOUT_SELF - standard output (default) 83bc952696SBarry Smith - PETSC_VIEWER_STDOUT_WORLD - synchronized standard 84bc952696SBarry Smith output where only the first processor opens 85bc952696SBarry Smith the file. All other processors send their 86bc952696SBarry Smith data to the first processor to print. 87bc952696SBarry Smith 88bc952696SBarry Smith The user can open an alternative visualization context with 89bc952696SBarry Smith PetscViewerASCIIOpen() - output to a specified file. 90bc952696SBarry Smith 91bc952696SBarry Smith Level: beginner 92bc952696SBarry Smith 93bc952696SBarry Smith .keywords: TS, timestep, view 94bc952696SBarry Smith 95bc952696SBarry Smith .seealso: PetscViewerASCIIOpen() 96bc952696SBarry Smith @*/ 97b1d74d50SHong Zhang PetscErrorCode TSTrajectoryView(TSTrajectory tj,PetscViewer viewer) 98bc952696SBarry Smith { 99bc952696SBarry Smith PetscErrorCode ierr; 100bc952696SBarry Smith PetscBool iascii; 101bc952696SBarry Smith 102bc952696SBarry Smith PetscFunctionBegin; 1031a5a771fSHong Zhang PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1); 104bc952696SBarry Smith if (!viewer) { 105b1d74d50SHong Zhang ierr = PetscViewerASCIIGetStdout(PetscObjectComm((PetscObject)tj),&viewer);CHKERRQ(ierr); 106bc952696SBarry Smith } 107bc952696SBarry Smith PetscValidHeaderSpecific(viewer,PETSC_VIEWER_CLASSID,2); 108b1d74d50SHong Zhang PetscCheckSameComm(tj,1,viewer,2); 109bc952696SBarry Smith 110bc952696SBarry Smith ierr = PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&iascii);CHKERRQ(ierr); 111bc952696SBarry Smith if (iascii) { 112b1d74d50SHong Zhang ierr = PetscObjectPrintClassNamePrefixType((PetscObject)tj,viewer);CHKERRQ(ierr); 1131a5a771fSHong Zhang ierr = PetscViewerASCIIPrintf(viewer," total number of recomputations for adjoint calculation = %D\n",tj->recomps);CHKERRQ(ierr); 11453b27ddbSHong Zhang ierr = PetscViewerASCIIPrintf(viewer," disk checkpoint reads = %D\n",tj->diskreads);CHKERRQ(ierr); 11553b27ddbSHong Zhang ierr = PetscViewerASCIIPrintf(viewer," disk checkpoint writes = %D\n",tj->diskwrites);CHKERRQ(ierr); 116b1d74d50SHong Zhang if (tj->ops->view) { 117b1d74d50SHong Zhang ierr = (*tj->ops->view)(tj,viewer);CHKERRQ(ierr); 118bc952696SBarry Smith } 119bc952696SBarry Smith } 120bc952696SBarry Smith PetscFunctionReturn(0); 121bc952696SBarry Smith } 122bc952696SBarry Smith 123bc952696SBarry Smith #undef __FUNCT__ 124bc952696SBarry Smith #define __FUNCT__ "TSTrajectoryCreate" 125bc952696SBarry Smith /*@C 126bc952696SBarry Smith TSTrajectoryCreate - This function creates an empty trajectory object used to store the time dependent solution of an ODE/DAE 127bc952696SBarry Smith 128bc952696SBarry Smith Collective on MPI_Comm 129bc952696SBarry Smith 130bc952696SBarry Smith Input Parameter: 131bc952696SBarry Smith . comm - The communicator 132bc952696SBarry Smith 133bc952696SBarry Smith Output Parameter: 134b1d74d50SHong Zhang . tj - The trajectory object 135bc952696SBarry Smith 136bc952696SBarry Smith Level: advanced 137bc952696SBarry Smith 138bc952696SBarry Smith Notes: Usually one does not call this routine, it is called automatically when one calls TSSetSaveTrajectory(). One can call 139bc952696SBarry Smith TSGetTrajectory() to access the created trajectory. 140bc952696SBarry Smith 141bc952696SBarry Smith .keywords: TS, create 142bc952696SBarry Smith .seealso: TSSetType(), TSSetUp(), TSDestroy(), TSSetProblemType(), TSGetTrajectory() 143bc952696SBarry Smith @*/ 144b1d74d50SHong Zhang PetscErrorCode TSTrajectoryCreate(MPI_Comm comm,TSTrajectory *tj) 145bc952696SBarry Smith { 146bc952696SBarry Smith TSTrajectory t; 147bc952696SBarry Smith PetscErrorCode ierr; 148bc952696SBarry Smith 149bc952696SBarry Smith PetscFunctionBegin; 150b1d74d50SHong Zhang PetscValidPointer(tj,2); 151b1d74d50SHong Zhang *tj = NULL; 152bc952696SBarry Smith ierr = TSInitializePackage();CHKERRQ(ierr); 153bc952696SBarry Smith 15473107ff1SLisandro Dalcin ierr = PetscHeaderCreate(t,TSTRAJECTORY_CLASSID,"TSTrajectory","Time stepping","TS",comm,TSTrajectoryDestroy,TSTrajectoryView);CHKERRQ(ierr); 15568bece0bSHong Zhang t->setupcalled = PETSC_FALSE; 156b1d74d50SHong Zhang *tj = t; 157bc952696SBarry Smith PetscFunctionReturn(0); 158bc952696SBarry Smith } 159bc952696SBarry Smith 160bc952696SBarry Smith #undef __FUNCT__ 161bc952696SBarry Smith #define __FUNCT__ "TSTrajectorySetType" 162bc952696SBarry Smith /*@C 163bc952696SBarry Smith TSTrajectorySetType - Sets the storage method to be used as in a trajectory 164bc952696SBarry Smith 165bc952696SBarry Smith Collective on TS 166bc952696SBarry Smith 167bc952696SBarry Smith Input Parameters: 168bc952696SBarry Smith + ts - The TS context 169bc952696SBarry Smith - type - A known method 170bc952696SBarry Smith 171bc952696SBarry Smith Options Database Command: 172e210cd0eSHong Zhang . -ts_trajectory_type <type> - Sets the method; use -help for a list of available methods (for instance, basic) 173bc952696SBarry Smith 174bc952696SBarry Smith Level: intermediate 175bc952696SBarry Smith 176bc952696SBarry Smith .keywords: TS, set, type 177bc952696SBarry Smith 178bc952696SBarry Smith .seealso: TS, TSSolve(), TSCreate(), TSSetFromOptions(), TSDestroy(), TSType 179bc952696SBarry Smith 180bc952696SBarry Smith @*/ 181972caf09SHong Zhang PetscErrorCode TSTrajectorySetType(TSTrajectory tj,TS ts,const TSTrajectoryType type) 182bc952696SBarry Smith { 183972caf09SHong Zhang PetscErrorCode (*r)(TSTrajectory,TS); 184bc952696SBarry Smith PetscBool match; 185bc952696SBarry Smith PetscErrorCode ierr; 186bc952696SBarry Smith 187bc952696SBarry Smith PetscFunctionBegin; 188972caf09SHong Zhang PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1); 189972caf09SHong Zhang ierr = PetscObjectTypeCompare((PetscObject)tj,type,&match);CHKERRQ(ierr); 190bc952696SBarry Smith if (match) PetscFunctionReturn(0); 191bc952696SBarry Smith 192bc952696SBarry Smith ierr = PetscFunctionListFind(TSTrajectoryList,type,&r);CHKERRQ(ierr); 193bc952696SBarry Smith if (!r) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_UNKNOWN_TYPE,"Unknown TSTrajectory type: %s",type); 194972caf09SHong Zhang if (tj->ops->destroy) { 195972caf09SHong Zhang ierr = (*(tj)->ops->destroy)(tj);CHKERRQ(ierr); 196bc952696SBarry Smith 197972caf09SHong Zhang tj->ops->destroy = NULL; 198bc952696SBarry Smith } 199972caf09SHong Zhang ierr = PetscMemzero(tj->ops,sizeof(*tj->ops));CHKERRQ(ierr); 200bc952696SBarry Smith 201972caf09SHong Zhang ierr = PetscObjectChangeTypeName((PetscObject)tj,type);CHKERRQ(ierr); 202972caf09SHong Zhang ierr = (*r)(tj,ts);CHKERRQ(ierr); 203bc952696SBarry Smith PetscFunctionReturn(0); 204bc952696SBarry Smith } 205bc952696SBarry Smith 206972caf09SHong Zhang PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Basic(TSTrajectory,TS); 207972caf09SHong Zhang PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Singlefile(TSTrajectory,TS); 2089a53571cSHong Zhang PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Memory(TSTrajectory,TS); 2092b043167SHong Zhang PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Visualization(TSTrajectory,TS); 210bc952696SBarry Smith 211bc952696SBarry Smith #undef __FUNCT__ 212bc952696SBarry Smith #define __FUNCT__ "TSTrajectoryRegisterAll" 213bc952696SBarry Smith /*@C 214bc952696SBarry Smith TSTrajectoryRegisterAll - Registers all of the trajectory storage schecmes in the TS package. 215bc952696SBarry Smith 216bc952696SBarry Smith Not Collective 217bc952696SBarry Smith 218bc952696SBarry Smith Level: advanced 219bc952696SBarry Smith 220bc952696SBarry Smith .keywords: TS, timestepper, register, all 221bc952696SBarry Smith .seealso: TSCreate(), TSRegister(), TSRegisterDestroy() 222bc952696SBarry Smith @*/ 223bc952696SBarry Smith PetscErrorCode TSTrajectoryRegisterAll(void) 224bc952696SBarry Smith { 225bc952696SBarry Smith PetscErrorCode ierr; 226bc952696SBarry Smith 227bc952696SBarry Smith PetscFunctionBegin; 228560360afSLisandro Dalcin if (TSTrajectoryRegisterAllCalled) PetscFunctionReturn(0); 229bc952696SBarry Smith TSTrajectoryRegisterAllCalled = PETSC_TRUE; 230bc952696SBarry Smith 231bc952696SBarry Smith ierr = TSTrajectoryRegister(TSTRAJECTORYBASIC,TSTrajectoryCreate_Basic);CHKERRQ(ierr); 2321c8c567eSBarry Smith ierr = TSTrajectoryRegister(TSTRAJECTORYSINGLEFILE,TSTrajectoryCreate_Singlefile);CHKERRQ(ierr); 2339a53571cSHong Zhang ierr = TSTrajectoryRegister(TSTRAJECTORYMEMORY,TSTrajectoryCreate_Memory);CHKERRQ(ierr); 2342b043167SHong Zhang ierr = TSTrajectoryRegister(TSTRAJECTORYVISUALIZATION,TSTrajectoryCreate_Visualization);CHKERRQ(ierr); 235bc952696SBarry Smith PetscFunctionReturn(0); 236bc952696SBarry Smith } 237bc952696SBarry Smith 238bc952696SBarry Smith #undef __FUNCT__ 239bc952696SBarry Smith #define __FUNCT__ "TSTrajectoryDestroy" 240bc952696SBarry Smith /*@ 241bc952696SBarry Smith TSTrajectoryDestroy - Destroys a trajectory context 242bc952696SBarry Smith 243bc952696SBarry Smith Collective on TSTrajectory 244bc952696SBarry Smith 245bc952696SBarry Smith Input Parameter: 246bc952696SBarry Smith . ts - the TSTrajectory context obtained from TSTrajectoryCreate() 247bc952696SBarry Smith 248bc952696SBarry Smith Level: advanced 249bc952696SBarry Smith 250bc952696SBarry Smith .keywords: TS, timestepper, destroy 251bc952696SBarry Smith 252bc952696SBarry Smith .seealso: TSCreate(), TSSetUp(), TSSolve() 253bc952696SBarry Smith @*/ 254972caf09SHong Zhang PetscErrorCode TSTrajectoryDestroy(TSTrajectory *tj) 255bc952696SBarry Smith { 256bc952696SBarry Smith PetscErrorCode ierr; 257bc952696SBarry Smith 258bc952696SBarry Smith PetscFunctionBegin; 259972caf09SHong Zhang if (!*tj) PetscFunctionReturn(0); 260972caf09SHong Zhang PetscValidHeaderSpecific((*tj),TSTRAJECTORY_CLASSID,1); 261972caf09SHong Zhang if (--((PetscObject)(*tj))->refct > 0) {*tj = 0; PetscFunctionReturn(0);} 262bc952696SBarry Smith 263972caf09SHong Zhang if ((*tj)->ops->destroy) {ierr = (*(*tj)->ops->destroy)((*tj));CHKERRQ(ierr);} 264*aced365eSHong Zhang ierr = PetscViewerDestroy(&(*tj)->monitor);CHKERRQ(ierr); 265972caf09SHong Zhang ierr = PetscHeaderDestroy(tj);CHKERRQ(ierr); 266bc952696SBarry Smith PetscFunctionReturn(0); 267bc952696SBarry Smith } 268bc952696SBarry Smith 269bc952696SBarry Smith #undef __FUNCT__ 270772b2523SBarry Smith #define __FUNCT__ "TSTrajectorySetTypeFromOptions_Private" 271bc952696SBarry Smith /* 272772b2523SBarry Smith TSTrajectorySetTypeFromOptions_Private - Sets the type of ts from user options. 273bc952696SBarry Smith 274bc952696SBarry Smith Collective on TSTrajectory 275bc952696SBarry Smith 276bc952696SBarry Smith Input Parameter: 277972caf09SHong Zhang . tj - TSTrajectory 278bc952696SBarry Smith 279bc952696SBarry Smith Level: intermediate 280bc952696SBarry Smith 281bc952696SBarry Smith .keywords: TS, set, options, database, type 282bc952696SBarry Smith .seealso: TSSetFromOptions(), TSSetType() 283bc952696SBarry Smith */ 2842bfe6b3fSBarry Smith static PetscErrorCode TSTrajectorySetTypeFromOptions_Private(PetscOptionItems *PetscOptionsObject,TSTrajectory tj,TS ts) 285bc952696SBarry Smith { 286bc952696SBarry Smith PetscBool opt; 287bc952696SBarry Smith const char *defaultType; 288bc952696SBarry Smith char typeName[256]; 2899a53571cSHong Zhang PetscBool flg; 290bc952696SBarry Smith PetscErrorCode ierr; 291bc952696SBarry Smith 292bc952696SBarry Smith PetscFunctionBegin; 293b1d74d50SHong Zhang if (((PetscObject)tj)->type_name) defaultType = ((PetscObject)tj)->type_name; 294bc952696SBarry Smith else defaultType = TSTRAJECTORYBASIC; 295bc952696SBarry Smith 296560360afSLisandro Dalcin ierr = TSTrajectoryRegisterAll();CHKERRQ(ierr); 297e210cd0eSHong Zhang ierr = PetscOptionsFList("-ts_trajectory_type","TSTrajectory method"," TSTrajectorySetType",TSTrajectoryList,defaultType,typeName,256,&opt);CHKERRQ(ierr); 298bc952696SBarry Smith if (opt) { 299f416af30SBarry Smith ierr = PetscStrcmp(typeName,TSTRAJECTORYMEMORY,&flg);CHKERRQ(ierr); 300972caf09SHong Zhang ierr = TSTrajectorySetType(tj,ts,typeName);CHKERRQ(ierr); 301bc952696SBarry Smith } else { 302972caf09SHong Zhang ierr = TSTrajectorySetType(tj,ts,defaultType);CHKERRQ(ierr); 303bc952696SBarry Smith } 304bc952696SBarry Smith PetscFunctionReturn(0); 305bc952696SBarry Smith } 306bc952696SBarry Smith 307bc952696SBarry Smith #undef __FUNCT__ 308ed695a29SHong Zhang #define __FUNCT__ "TSTrajectorySetMonitor" 309ed695a29SHong Zhang /*@ 310ed695a29SHong Zhang TSTrajectorySetMonitor - Monitor the schedules generated by the checkpointing controller 311ed695a29SHong Zhang 312ed695a29SHong Zhang Collective on TSTrajectory 313ed695a29SHong Zhang 314ed695a29SHong Zhang Input Arguments: 315ed695a29SHong Zhang + tj - the TSTrajectory context 316ed695a29SHong Zhang - flg - PETSC_TRUE to active a monitor, PETSC_FALSE to disable 317ed695a29SHong Zhang 318ed695a29SHong Zhang Level: intermediate 319ed695a29SHong Zhang 320ed695a29SHong Zhang .seealso: TSTrajectorySetType() 321ed695a29SHong Zhang @*/ 322ed695a29SHong Zhang PetscErrorCode TSTrajectorySetMonitor(TSTrajectory tj,PetscBool flg) 323ed695a29SHong Zhang { 324ed695a29SHong Zhang PetscErrorCode ierr; 325ed695a29SHong Zhang 326ed695a29SHong Zhang PetscFunctionBegin; 327ed695a29SHong Zhang PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1); 328ed695a29SHong Zhang PetscValidLogicalCollectiveBool(tj,flg,2); 329ed695a29SHong Zhang if (flg) { 330ed695a29SHong Zhang if (!tj->monitor) {ierr = PetscViewerASCIIOpen(PetscObjectComm((PetscObject)tj),"stdout",&tj->monitor);CHKERRQ(ierr);} 331ed695a29SHong Zhang } else { 332ed695a29SHong Zhang ierr = PetscViewerDestroy(&tj->monitor);CHKERRQ(ierr); 333ed695a29SHong Zhang } 334ed695a29SHong Zhang PetscFunctionReturn(0); 335ed695a29SHong Zhang } 336ed695a29SHong Zhang 337ed695a29SHong Zhang #undef __FUNCT__ 338bc952696SBarry Smith #define __FUNCT__ "TSTrajectorySetFromOptions" 339bc952696SBarry Smith /*@ 340bc952696SBarry Smith TSTrajectorySetFromOptions - Sets various TSTrajectory parameters from user options. 341bc952696SBarry Smith 342bc952696SBarry Smith Collective on TSTrajectory 343bc952696SBarry Smith 344bc952696SBarry Smith Input Parameter: 345b1d74d50SHong Zhang . tj - the TSTrajectory context obtained from TSTrajectoryCreate() 346bc952696SBarry Smith 347bc952696SBarry Smith Options Database Keys: 348e210cd0eSHong Zhang . -ts_trajectory_type <type> - TSTRAJECTORYBASIC 349e210cd0eSHong Zhang . -ts_trajectory_max_cps <int> 350bc952696SBarry Smith 351bc952696SBarry Smith Level: advanced 352bc952696SBarry Smith 35362b521acSHong Zhang Notes: This is not normally called directly by users 354bc952696SBarry Smith 35562b521acSHong Zhang .keywords: TS, timestep, set, options, database, trajectory 356bc952696SBarry Smith 357bc952696SBarry Smith .seealso: TSGetType(), TSSetSaveTrajectory(), TSGetTrajectory() 358bc952696SBarry Smith @*/ 359972caf09SHong Zhang PetscErrorCode TSTrajectorySetFromOptions(TSTrajectory tj,TS ts) 360bc952696SBarry Smith { 361bc952696SBarry Smith PetscErrorCode ierr; 362ed695a29SHong Zhang PetscBool set,flg; 363bc952696SBarry Smith 364bc952696SBarry Smith PetscFunctionBegin; 365b1d74d50SHong Zhang PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1); 366972caf09SHong Zhang PetscValidHeaderSpecific(ts,TS_CLASSID,2); 367b1d74d50SHong Zhang ierr = PetscObjectOptionsBegin((PetscObject)tj);CHKERRQ(ierr); 368972caf09SHong Zhang ierr = TSTrajectorySetTypeFromOptions_Private(PetscOptionsObject,tj,ts);CHKERRQ(ierr); 369ed695a29SHong Zhang ierr = PetscOptionsBool("-ts_trajectory_monitor","Print checkpointing schedules","TSTrajectorySetMonitor",tj->monitor ? PETSC_TRUE:PETSC_FALSE,&flg,&set);CHKERRQ(ierr); 370*aced365eSHong Zhang if (set) {ierr = TSTrajectorySetMonitor(tj,flg);CHKERRQ(ierr);} 37162b521acSHong Zhang /* Handle specific TS options */ 37262b521acSHong Zhang if (tj->ops->setfromoptions) { 37362b521acSHong Zhang ierr = (*tj->ops->setfromoptions)(PetscOptionsObject,tj);CHKERRQ(ierr); 37462b521acSHong Zhang } 375bc952696SBarry Smith ierr = PetscOptionsEnd();CHKERRQ(ierr); 376bc952696SBarry Smith PetscFunctionReturn(0); 377bc952696SBarry Smith } 37868bece0bSHong Zhang 37968bece0bSHong Zhang #undef __FUNCT__ 38068bece0bSHong Zhang #define __FUNCT__ "TSTrajectorySetUp" 38168bece0bSHong Zhang /*@ 38268bece0bSHong Zhang TSTrajectorySetUp - Sets up the internal data structures, e.g. stacks, for the later use 38368bece0bSHong Zhang of a TS trajectory. 38468bece0bSHong Zhang 38568bece0bSHong Zhang Collective on TS 38668bece0bSHong Zhang 38768bece0bSHong Zhang Input Parameter: 38868bece0bSHong Zhang . ts - the TS context obtained from TSCreate() 38968bece0bSHong Zhang . tj - the TS trajectory context 39068bece0bSHong Zhang 39168bece0bSHong Zhang Level: advanced 39268bece0bSHong Zhang 39368bece0bSHong Zhang .keywords: TS, setup, checkpoint 39468bece0bSHong Zhang 39568bece0bSHong Zhang .seealso: TSSetSaveTrajectory(), TSTrajectoryCreate(), TSTrajectoryDestroy() 39668bece0bSHong Zhang @*/ 39768bece0bSHong Zhang PetscErrorCode TSTrajectorySetUp(TSTrajectory tj,TS ts) 39868bece0bSHong Zhang { 39968bece0bSHong Zhang PetscErrorCode ierr; 40068bece0bSHong Zhang 40168bece0bSHong Zhang PetscFunctionBegin; 40268bece0bSHong Zhang if (!tj) PetscFunctionReturn(0); 40368bece0bSHong Zhang PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1); 40468bece0bSHong Zhang PetscValidHeaderSpecific(ts,TS_CLASSID,2); 40568bece0bSHong Zhang if (tj->setupcalled) PetscFunctionReturn(0); 40668bece0bSHong Zhang 40768bece0bSHong Zhang if (!((PetscObject)tj)->type_name) { 40868bece0bSHong Zhang ierr = TSTrajectorySetType(tj,ts,TSTRAJECTORYBASIC);CHKERRQ(ierr); 40968bece0bSHong Zhang } 41068bece0bSHong Zhang if (tj->ops->setup) { 41168bece0bSHong Zhang ierr = (*tj->ops->setup)(tj,ts);CHKERRQ(ierr); 41268bece0bSHong Zhang } 41368bece0bSHong Zhang 41468bece0bSHong Zhang tj->setupcalled = PETSC_TRUE; 41553b27ddbSHong Zhang 41653b27ddbSHong Zhang /* Set the counters to zero */ 4171a5a771fSHong Zhang tj->recomps = 0; 41853b27ddbSHong Zhang tj->diskreads = 0; 41953b27ddbSHong Zhang tj->diskwrites = 0; 42068bece0bSHong Zhang PetscFunctionReturn(0); 42168bece0bSHong Zhang } 422