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 /*@C 10bc952696SBarry Smith TSTrajectoryRegister - Adds a way of storing trajectories to the TS package 11bc952696SBarry Smith 12bc952696SBarry Smith Not Collective 13bc952696SBarry Smith 14bc952696SBarry Smith Input Parameters: 153c0fce88SHong Zhang + name - the name of a new user-defined creation routine 163c0fce88SHong Zhang - create_func - the creation routine itself 17bc952696SBarry Smith 18bc952696SBarry Smith Notes: 19bc952696SBarry Smith TSTrajectoryRegister() may be called multiple times to add several user-defined tses. 20bc952696SBarry Smith 21*df5474d8SHong Zhang Level: developer 22bc952696SBarry Smith 233c0fce88SHong Zhang .keywords: TS, trajectory, timestep, register 24bc952696SBarry Smith 253c0fce88SHong Zhang .seealso: TSTrajectoryRegisterAll() 26bc952696SBarry Smith @*/ 27972caf09SHong Zhang PetscErrorCode TSTrajectoryRegister(const char sname[],PetscErrorCode (*function)(TSTrajectory,TS)) 28bc952696SBarry Smith { 29bc952696SBarry Smith PetscErrorCode ierr; 30bc952696SBarry Smith 31bc952696SBarry Smith PetscFunctionBegin; 32bc952696SBarry Smith ierr = PetscFunctionListAdd(&TSTrajectoryList,sname,function);CHKERRQ(ierr); 33bc952696SBarry Smith PetscFunctionReturn(0); 34bc952696SBarry Smith } 35bc952696SBarry Smith 36bc952696SBarry Smith PetscErrorCode TSTrajectorySet(TSTrajectory tj,TS ts,PetscInt stepnum,PetscReal time,Vec X) 37bc952696SBarry Smith { 38bc952696SBarry Smith PetscErrorCode ierr; 39bc952696SBarry Smith 40bc952696SBarry Smith PetscFunctionBegin; 41bc952696SBarry Smith if (!tj) PetscFunctionReturn(0); 42d0d044f3SHong Zhang ierr = PetscLogEventBegin(TSTrajectory_Set,tj,ts,0,0);CHKERRQ(ierr); 43bc952696SBarry Smith ierr = (*tj->ops->set)(tj,ts,stepnum,time,X);CHKERRQ(ierr); 44d0d044f3SHong Zhang ierr = PetscLogEventEnd(TSTrajectory_Set,tj,ts,0,0);CHKERRQ(ierr); 45bc952696SBarry Smith PetscFunctionReturn(0); 46bc952696SBarry Smith } 47bc952696SBarry Smith 48c679fc15SHong Zhang PetscErrorCode TSTrajectoryGet(TSTrajectory tj,TS ts,PetscInt stepnum,PetscReal *time) 49bc952696SBarry Smith { 50bc952696SBarry Smith PetscErrorCode ierr; 51bc952696SBarry Smith 52bc952696SBarry Smith PetscFunctionBegin; 53bc952696SBarry Smith if (!tj) SETERRQ(PetscObjectComm((PetscObject)ts),PETSC_ERR_ARG_WRONGSTATE,"TS solver did not save trajectory"); 54d0d044f3SHong Zhang ierr = PetscLogEventBegin(TSTrajectory_Get,tj,ts,0,0);CHKERRQ(ierr); 55bc952696SBarry Smith ierr = (*tj->ops->get)(tj,ts,stepnum,time);CHKERRQ(ierr); 56d0d044f3SHong Zhang ierr = PetscLogEventEnd(TSTrajectory_Get,tj,ts,0,0);CHKERRQ(ierr); 57bc952696SBarry Smith PetscFunctionReturn(0); 58bc952696SBarry Smith } 59bc952696SBarry Smith 60bc952696SBarry Smith /*@C 61bc952696SBarry Smith TSTrajectoryView - Prints information about the trajectory object 62bc952696SBarry Smith 63bc952696SBarry Smith Collective on TSTrajectory 64bc952696SBarry Smith 65bc952696SBarry Smith Input Parameters: 66b1d74d50SHong Zhang + tj - the TSTrajectory context obtained from TSTrajectoryCreate() 67bc952696SBarry Smith - viewer - visualization context 68bc952696SBarry Smith 69bc952696SBarry Smith Options Database Key: 70e210cd0eSHong Zhang . -ts_trajectory_view - calls TSTrajectoryView() at end of TSAdjointStep() 71bc952696SBarry Smith 72bc952696SBarry Smith Notes: 73bc952696SBarry Smith The available visualization contexts include 74bc952696SBarry Smith + PETSC_VIEWER_STDOUT_SELF - standard output (default) 75bc952696SBarry Smith - PETSC_VIEWER_STDOUT_WORLD - synchronized standard 76bc952696SBarry Smith output where only the first processor opens 77bc952696SBarry Smith the file. All other processors send their 78bc952696SBarry Smith data to the first processor to print. 79bc952696SBarry Smith 80bc952696SBarry Smith The user can open an alternative visualization context with 81bc952696SBarry Smith PetscViewerASCIIOpen() - output to a specified file. 82bc952696SBarry Smith 83*df5474d8SHong Zhang Level: developer 84bc952696SBarry Smith 853c0fce88SHong Zhang .keywords: TS, trajectory, timestep, view 86bc952696SBarry Smith 87bc952696SBarry Smith .seealso: PetscViewerASCIIOpen() 88bc952696SBarry Smith @*/ 89b1d74d50SHong Zhang PetscErrorCode TSTrajectoryView(TSTrajectory tj,PetscViewer viewer) 90bc952696SBarry Smith { 91bc952696SBarry Smith PetscErrorCode ierr; 92bc952696SBarry Smith PetscBool iascii; 93bc952696SBarry Smith 94bc952696SBarry Smith PetscFunctionBegin; 951a5a771fSHong Zhang PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1); 96bc952696SBarry Smith if (!viewer) { 97b1d74d50SHong Zhang ierr = PetscViewerASCIIGetStdout(PetscObjectComm((PetscObject)tj),&viewer);CHKERRQ(ierr); 98bc952696SBarry Smith } 99bc952696SBarry Smith PetscValidHeaderSpecific(viewer,PETSC_VIEWER_CLASSID,2); 100b1d74d50SHong Zhang PetscCheckSameComm(tj,1,viewer,2); 101bc952696SBarry Smith 102bc952696SBarry Smith ierr = PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&iascii);CHKERRQ(ierr); 103bc952696SBarry Smith if (iascii) { 104b1d74d50SHong Zhang ierr = PetscObjectPrintClassNamePrefixType((PetscObject)tj,viewer);CHKERRQ(ierr); 1051a5a771fSHong Zhang ierr = PetscViewerASCIIPrintf(viewer," total number of recomputations for adjoint calculation = %D\n",tj->recomps);CHKERRQ(ierr); 10653b27ddbSHong Zhang ierr = PetscViewerASCIIPrintf(viewer," disk checkpoint reads = %D\n",tj->diskreads);CHKERRQ(ierr); 10753b27ddbSHong Zhang ierr = PetscViewerASCIIPrintf(viewer," disk checkpoint writes = %D\n",tj->diskwrites);CHKERRQ(ierr); 108b1d74d50SHong Zhang if (tj->ops->view) { 109285336bfSHong Zhang ierr = PetscViewerASCIIPushTab(viewer);CHKERRQ(ierr); 110b1d74d50SHong Zhang ierr = (*tj->ops->view)(tj,viewer);CHKERRQ(ierr); 111285336bfSHong Zhang ierr = PetscViewerASCIIPopTab(viewer);CHKERRQ(ierr); 112bc952696SBarry Smith } 113bc952696SBarry Smith } 114bc952696SBarry Smith PetscFunctionReturn(0); 115bc952696SBarry Smith } 116bc952696SBarry Smith 117bc952696SBarry Smith /*@C 118bc952696SBarry Smith TSTrajectoryCreate - This function creates an empty trajectory object used to store the time dependent solution of an ODE/DAE 119bc952696SBarry Smith 120bc952696SBarry Smith Collective on MPI_Comm 121bc952696SBarry Smith 122bc952696SBarry Smith Input Parameter: 1233c0fce88SHong Zhang . comm - the communicator 124bc952696SBarry Smith 125bc952696SBarry Smith Output Parameter: 1263c0fce88SHong Zhang . tj - the trajectory object 127bc952696SBarry Smith 128*df5474d8SHong Zhang Level: developer 129bc952696SBarry Smith 1303c0fce88SHong Zhang Notes: Usually one does not call this routine, it is called automatically when one calls TSSetSaveTrajectory(). 131bc952696SBarry Smith 1323c0fce88SHong Zhang .keywords: TS, trajectory, create 1333c0fce88SHong Zhang 1343c0fce88SHong Zhang .seealso: TSTrajectorySetUp(), TSTrajectoryDestroy(), TSTrajectorySetType() 135bc952696SBarry Smith @*/ 136b1d74d50SHong Zhang PetscErrorCode TSTrajectoryCreate(MPI_Comm comm,TSTrajectory *tj) 137bc952696SBarry Smith { 138bc952696SBarry Smith TSTrajectory t; 139bc952696SBarry Smith PetscErrorCode ierr; 140bc952696SBarry Smith 141bc952696SBarry Smith PetscFunctionBegin; 142b1d74d50SHong Zhang PetscValidPointer(tj,2); 143b1d74d50SHong Zhang *tj = NULL; 144bc952696SBarry Smith ierr = TSInitializePackage();CHKERRQ(ierr); 145bc952696SBarry Smith 14673107ff1SLisandro Dalcin ierr = PetscHeaderCreate(t,TSTRAJECTORY_CLASSID,"TSTrajectory","Time stepping","TS",comm,TSTrajectoryDestroy,TSTrajectoryView);CHKERRQ(ierr); 14768bece0bSHong Zhang t->setupcalled = PETSC_FALSE; 148b1d74d50SHong Zhang *tj = t; 149bc952696SBarry Smith PetscFunctionReturn(0); 150bc952696SBarry Smith } 151bc952696SBarry Smith 152bc952696SBarry Smith /*@C 153bc952696SBarry Smith TSTrajectorySetType - Sets the storage method to be used as in a trajectory 154bc952696SBarry Smith 155bc952696SBarry Smith Collective on TS 156bc952696SBarry Smith 157bc952696SBarry Smith Input Parameters: 1583c0fce88SHong Zhang + tj - the TSTrajectory context 1593c0fce88SHong Zhang . ts - the TS context 1603c0fce88SHong Zhang - type - a known method 161bc952696SBarry Smith 162bc952696SBarry Smith Options Database Command: 163e210cd0eSHong Zhang . -ts_trajectory_type <type> - Sets the method; use -help for a list of available methods (for instance, basic) 164bc952696SBarry Smith 165*df5474d8SHong Zhang Level: developer 166bc952696SBarry Smith 1673c0fce88SHong Zhang .keywords: TS, trajectory, timestep, set, type 168bc952696SBarry Smith 1693c0fce88SHong Zhang .seealso: TS, TSTrajectoryCreate(), TSTrajectorySetFromOptions(), TSTrajectoryDestroy() 170bc952696SBarry Smith 171bc952696SBarry Smith @*/ 172972caf09SHong Zhang PetscErrorCode TSTrajectorySetType(TSTrajectory tj,TS ts,const TSTrajectoryType type) 173bc952696SBarry Smith { 174972caf09SHong Zhang PetscErrorCode (*r)(TSTrajectory,TS); 175bc952696SBarry Smith PetscBool match; 176bc952696SBarry Smith PetscErrorCode ierr; 177bc952696SBarry Smith 178bc952696SBarry Smith PetscFunctionBegin; 179972caf09SHong Zhang PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1); 180972caf09SHong Zhang ierr = PetscObjectTypeCompare((PetscObject)tj,type,&match);CHKERRQ(ierr); 181bc952696SBarry Smith if (match) PetscFunctionReturn(0); 182bc952696SBarry Smith 183bc952696SBarry Smith ierr = PetscFunctionListFind(TSTrajectoryList,type,&r);CHKERRQ(ierr); 184bc952696SBarry Smith if (!r) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_UNKNOWN_TYPE,"Unknown TSTrajectory type: %s",type); 185972caf09SHong Zhang if (tj->ops->destroy) { 186972caf09SHong Zhang ierr = (*(tj)->ops->destroy)(tj);CHKERRQ(ierr); 187bc952696SBarry Smith 188972caf09SHong Zhang tj->ops->destroy = NULL; 189bc952696SBarry Smith } 190972caf09SHong Zhang ierr = PetscMemzero(tj->ops,sizeof(*tj->ops));CHKERRQ(ierr); 191bc952696SBarry Smith 192972caf09SHong Zhang ierr = PetscObjectChangeTypeName((PetscObject)tj,type);CHKERRQ(ierr); 193972caf09SHong Zhang ierr = (*r)(tj,ts);CHKERRQ(ierr); 194bc952696SBarry Smith PetscFunctionReturn(0); 195bc952696SBarry Smith } 196bc952696SBarry Smith 197972caf09SHong Zhang PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Basic(TSTrajectory,TS); 198972caf09SHong Zhang PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Singlefile(TSTrajectory,TS); 1999a53571cSHong Zhang PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Memory(TSTrajectory,TS); 2002b043167SHong Zhang PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Visualization(TSTrajectory,TS); 201bc952696SBarry Smith 202bc952696SBarry Smith /*@C 203bc952696SBarry Smith TSTrajectoryRegisterAll - Registers all of the trajectory storage schecmes in the TS package. 204bc952696SBarry Smith 205bc952696SBarry Smith Not Collective 206bc952696SBarry Smith 207*df5474d8SHong Zhang Level: developer 208bc952696SBarry Smith 2093c0fce88SHong Zhang .keywords: TS, trajectory, register, all 2103c0fce88SHong Zhang 2113c0fce88SHong Zhang .seealso: TSTrajectoryRegister() 212bc952696SBarry Smith @*/ 213bc952696SBarry Smith PetscErrorCode TSTrajectoryRegisterAll(void) 214bc952696SBarry Smith { 215bc952696SBarry Smith PetscErrorCode ierr; 216bc952696SBarry Smith 217bc952696SBarry Smith PetscFunctionBegin; 218560360afSLisandro Dalcin if (TSTrajectoryRegisterAllCalled) PetscFunctionReturn(0); 219bc952696SBarry Smith TSTrajectoryRegisterAllCalled = PETSC_TRUE; 220bc952696SBarry Smith 221bc952696SBarry Smith ierr = TSTrajectoryRegister(TSTRAJECTORYBASIC,TSTrajectoryCreate_Basic);CHKERRQ(ierr); 2221c8c567eSBarry Smith ierr = TSTrajectoryRegister(TSTRAJECTORYSINGLEFILE,TSTrajectoryCreate_Singlefile);CHKERRQ(ierr); 2239a53571cSHong Zhang ierr = TSTrajectoryRegister(TSTRAJECTORYMEMORY,TSTrajectoryCreate_Memory);CHKERRQ(ierr); 2242b043167SHong Zhang ierr = TSTrajectoryRegister(TSTRAJECTORYVISUALIZATION,TSTrajectoryCreate_Visualization);CHKERRQ(ierr); 225bc952696SBarry Smith PetscFunctionReturn(0); 226bc952696SBarry Smith } 227bc952696SBarry Smith 228bc952696SBarry Smith /*@ 229bc952696SBarry Smith TSTrajectoryDestroy - Destroys a trajectory context 230bc952696SBarry Smith 231bc952696SBarry Smith Collective on TSTrajectory 232bc952696SBarry Smith 233bc952696SBarry Smith Input Parameter: 2343c0fce88SHong Zhang . tj - the TSTrajectory context obtained from TSTrajectoryCreate() 235bc952696SBarry Smith 236*df5474d8SHong Zhang Level: developer 237bc952696SBarry Smith 2383c0fce88SHong Zhang .keywords: TS, trajectory, timestep, destroy 239bc952696SBarry Smith 2403c0fce88SHong Zhang .seealso: TSTrajectoryCreate(), TSTrajectorySetUp() 241bc952696SBarry Smith @*/ 242972caf09SHong Zhang PetscErrorCode TSTrajectoryDestroy(TSTrajectory *tj) 243bc952696SBarry Smith { 244bc952696SBarry Smith PetscErrorCode ierr; 245bc952696SBarry Smith 246bc952696SBarry Smith PetscFunctionBegin; 247972caf09SHong Zhang if (!*tj) PetscFunctionReturn(0); 248972caf09SHong Zhang PetscValidHeaderSpecific((*tj),TSTRAJECTORY_CLASSID,1); 249972caf09SHong Zhang if (--((PetscObject)(*tj))->refct > 0) {*tj = 0; PetscFunctionReturn(0);} 250bc952696SBarry Smith 251972caf09SHong Zhang if ((*tj)->ops->destroy) {ierr = (*(*tj)->ops->destroy)((*tj));CHKERRQ(ierr);} 252aced365eSHong Zhang ierr = PetscViewerDestroy(&(*tj)->monitor);CHKERRQ(ierr); 253972caf09SHong Zhang ierr = PetscHeaderDestroy(tj);CHKERRQ(ierr); 254bc952696SBarry Smith PetscFunctionReturn(0); 255bc952696SBarry Smith } 256bc952696SBarry Smith 257bc952696SBarry Smith /* 258772b2523SBarry Smith TSTrajectorySetTypeFromOptions_Private - Sets the type of ts from user options. 259bc952696SBarry Smith 260bc952696SBarry Smith Collective on TSTrajectory 261bc952696SBarry Smith 262bc952696SBarry Smith Input Parameter: 2633c0fce88SHong Zhang + tj - the TSTrajectory context 2643c0fce88SHong Zhang - ts - the TS context 2653c0fce88SHong Zhang 2663c0fce88SHong Zhang Options Database Keys: 2673c0fce88SHong Zhang . -ts_trajectory_type <type> - TSTRAJECTORYBASIC, TSTRAJECTORYMEMORY, TSTRAJECTORYSINGLEFILE, TSTRAJECTORYVISUALIZATION 268bc952696SBarry Smith 269*df5474d8SHong Zhang Level: developer 270bc952696SBarry Smith 2713c0fce88SHong Zhang .keywords: TS, trajectory, set, options, type 2723c0fce88SHong Zhang 2733c0fce88SHong Zhang .seealso: TSTrajectorySetFromOptions(), TSTrajectorySetType() 274bc952696SBarry Smith */ 2752bfe6b3fSBarry Smith static PetscErrorCode TSTrajectorySetTypeFromOptions_Private(PetscOptionItems *PetscOptionsObject,TSTrajectory tj,TS ts) 276bc952696SBarry Smith { 277bc952696SBarry Smith PetscBool opt; 278bc952696SBarry Smith const char *defaultType; 279bc952696SBarry Smith char typeName[256]; 2809a53571cSHong Zhang PetscBool flg; 281bc952696SBarry Smith PetscErrorCode ierr; 282bc952696SBarry Smith 283bc952696SBarry Smith PetscFunctionBegin; 284b1d74d50SHong Zhang if (((PetscObject)tj)->type_name) defaultType = ((PetscObject)tj)->type_name; 285bc952696SBarry Smith else defaultType = TSTRAJECTORYBASIC; 286bc952696SBarry Smith 287560360afSLisandro Dalcin ierr = TSTrajectoryRegisterAll();CHKERRQ(ierr); 288e210cd0eSHong Zhang ierr = PetscOptionsFList("-ts_trajectory_type","TSTrajectory method"," TSTrajectorySetType",TSTrajectoryList,defaultType,typeName,256,&opt);CHKERRQ(ierr); 289bc952696SBarry Smith if (opt) { 290f416af30SBarry Smith ierr = PetscStrcmp(typeName,TSTRAJECTORYMEMORY,&flg);CHKERRQ(ierr); 291972caf09SHong Zhang ierr = TSTrajectorySetType(tj,ts,typeName);CHKERRQ(ierr); 292bc952696SBarry Smith } else { 293972caf09SHong Zhang ierr = TSTrajectorySetType(tj,ts,defaultType);CHKERRQ(ierr); 294bc952696SBarry Smith } 295bc952696SBarry Smith PetscFunctionReturn(0); 296bc952696SBarry Smith } 297bc952696SBarry Smith 298ed695a29SHong Zhang /*@ 299ed695a29SHong Zhang TSTrajectorySetMonitor - Monitor the schedules generated by the checkpointing controller 300ed695a29SHong Zhang 301ed695a29SHong Zhang Collective on TSTrajectory 302ed695a29SHong Zhang 303ed695a29SHong Zhang Input Arguments: 304ed695a29SHong Zhang + tj - the TSTrajectory context 305ed695a29SHong Zhang - flg - PETSC_TRUE to active a monitor, PETSC_FALSE to disable 306ed695a29SHong Zhang 3073c0fce88SHong Zhang Options Database Keys: 308063c0c7aSHong Zhang . -ts_trajectory_monitor - print TSTrajectory information 3093c0fce88SHong Zhang 310*df5474d8SHong Zhang Level: developer 311ed695a29SHong Zhang 3123c0fce88SHong Zhang .keywords: TS, trajectory, set, monitor 3133c0fce88SHong Zhang 3143c0fce88SHong Zhang .seealso: TSTrajectoryCreate(), TSTrajectoryDestroy(), TSTrajectorySetUp() 315ed695a29SHong Zhang @*/ 3162bee684fSHong Zhang PetscErrorCode TSTrajectorySetMonitor(TSTrajectory tj,PetscBool flg) 317ed695a29SHong Zhang { 318ed695a29SHong Zhang PetscErrorCode ierr; 319ed695a29SHong Zhang 320ed695a29SHong Zhang PetscFunctionBegin; 321ed695a29SHong Zhang PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1); 322ed695a29SHong Zhang PetscValidLogicalCollectiveBool(tj,flg,2); 323ed695a29SHong Zhang if (flg) { 324ed695a29SHong Zhang if (!tj->monitor) {ierr = PetscViewerASCIIOpen(PetscObjectComm((PetscObject)tj),"stdout",&tj->monitor);CHKERRQ(ierr);} 325ed695a29SHong Zhang } else { 326ed695a29SHong Zhang ierr = PetscViewerDestroy(&tj->monitor);CHKERRQ(ierr); 327ed695a29SHong Zhang } 328ed695a29SHong Zhang PetscFunctionReturn(0); 329ed695a29SHong Zhang } 330ed695a29SHong Zhang 331bc952696SBarry Smith /*@ 332bc952696SBarry Smith TSTrajectorySetFromOptions - Sets various TSTrajectory parameters from user options. 333bc952696SBarry Smith 334bc952696SBarry Smith Collective on TSTrajectory 335bc952696SBarry Smith 336bc952696SBarry Smith Input Parameter: 3373c0fce88SHong Zhang + tj - the TSTrajectory context obtained from TSTrajectoryCreate() 3383c0fce88SHong Zhang - ts - the TS context 339bc952696SBarry Smith 340bc952696SBarry Smith Options Database Keys: 3413c0fce88SHong Zhang + -ts_trajectory_type <type> - TSTRAJECTORYBASIC, TSTRAJECTORYMEMORY, TSTRAJECTORYSINGLEFILE, TSTRAJECTORYVISUALIZATION 342063c0c7aSHong Zhang - -ts_trajectory_monitor - print TSTrajectory information 343bc952696SBarry Smith 344*df5474d8SHong Zhang Level: developer 345bc952696SBarry Smith 34662b521acSHong Zhang Notes: This is not normally called directly by users 347bc952696SBarry Smith 3483c0fce88SHong Zhang .keywords: TS, trajectory, timestep, set, options, database 349bc952696SBarry Smith 3503c0fce88SHong Zhang .seealso: TSSetSaveTrajectory(), TSTrajectorySetUp() 351bc952696SBarry Smith @*/ 352972caf09SHong Zhang PetscErrorCode TSTrajectorySetFromOptions(TSTrajectory tj,TS ts) 353bc952696SBarry Smith { 354bc952696SBarry Smith PetscErrorCode ierr; 355ed695a29SHong Zhang PetscBool set,flg; 356bc952696SBarry Smith 357bc952696SBarry Smith PetscFunctionBegin; 358b1d74d50SHong Zhang PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1); 359972caf09SHong Zhang PetscValidHeaderSpecific(ts,TS_CLASSID,2); 360b1d74d50SHong Zhang ierr = PetscObjectOptionsBegin((PetscObject)tj);CHKERRQ(ierr); 361972caf09SHong Zhang ierr = TSTrajectorySetTypeFromOptions_Private(PetscOptionsObject,tj,ts);CHKERRQ(ierr); 362ed695a29SHong Zhang ierr = PetscOptionsBool("-ts_trajectory_monitor","Print checkpointing schedules","TSTrajectorySetMonitor",tj->monitor ? PETSC_TRUE:PETSC_FALSE,&flg,&set);CHKERRQ(ierr); 363aced365eSHong Zhang if (set) {ierr = TSTrajectorySetMonitor(tj,flg);CHKERRQ(ierr);} 36462b521acSHong Zhang /* Handle specific TS options */ 36562b521acSHong Zhang if (tj->ops->setfromoptions) { 36662b521acSHong Zhang ierr = (*tj->ops->setfromoptions)(PetscOptionsObject,tj);CHKERRQ(ierr); 36762b521acSHong Zhang } 368bc952696SBarry Smith ierr = PetscOptionsEnd();CHKERRQ(ierr); 369bc952696SBarry Smith PetscFunctionReturn(0); 370bc952696SBarry Smith } 37168bece0bSHong Zhang 37268bece0bSHong Zhang /*@ 37368bece0bSHong Zhang TSTrajectorySetUp - Sets up the internal data structures, e.g. stacks, for the later use 37468bece0bSHong Zhang of a TS trajectory. 37568bece0bSHong Zhang 37668bece0bSHong Zhang Collective on TS 37768bece0bSHong Zhang 37868bece0bSHong Zhang Input Parameter: 3793c0fce88SHong Zhang + ts - the TS context obtained from TSCreate() 3803c0fce88SHong Zhang - tj - the TS trajectory context 38168bece0bSHong Zhang 382*df5474d8SHong Zhang Level: developer 38368bece0bSHong Zhang 3843c0fce88SHong Zhang .keywords: TS, trajectory, setup 38568bece0bSHong Zhang 38668bece0bSHong Zhang .seealso: TSSetSaveTrajectory(), TSTrajectoryCreate(), TSTrajectoryDestroy() 38768bece0bSHong Zhang @*/ 38868bece0bSHong Zhang PetscErrorCode TSTrajectorySetUp(TSTrajectory tj,TS ts) 38968bece0bSHong Zhang { 39068bece0bSHong Zhang PetscErrorCode ierr; 39168bece0bSHong Zhang 39268bece0bSHong Zhang PetscFunctionBegin; 39368bece0bSHong Zhang if (!tj) PetscFunctionReturn(0); 39468bece0bSHong Zhang PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1); 39568bece0bSHong Zhang PetscValidHeaderSpecific(ts,TS_CLASSID,2); 39668bece0bSHong Zhang if (tj->setupcalled) PetscFunctionReturn(0); 39768bece0bSHong Zhang 39868bece0bSHong Zhang if (!((PetscObject)tj)->type_name) { 39968bece0bSHong Zhang ierr = TSTrajectorySetType(tj,ts,TSTRAJECTORYBASIC);CHKERRQ(ierr); 40068bece0bSHong Zhang } 40168bece0bSHong Zhang if (tj->ops->setup) { 40268bece0bSHong Zhang ierr = (*tj->ops->setup)(tj,ts);CHKERRQ(ierr); 40368bece0bSHong Zhang } 40468bece0bSHong Zhang 40568bece0bSHong Zhang tj->setupcalled = PETSC_TRUE; 40653b27ddbSHong Zhang 40753b27ddbSHong Zhang /* Set the counters to zero */ 4081a5a771fSHong Zhang tj->recomps = 0; 40953b27ddbSHong Zhang tj->diskreads = 0; 41053b27ddbSHong Zhang tj->diskwrites = 0; 41168bece0bSHong Zhang PetscFunctionReturn(0); 41268bece0bSHong Zhang } 413