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 21bc952696SBarry Smith Level: advanced 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 83bc952696SBarry Smith Level: beginner 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 118*78fbdcc8SBarry Smith TSTrajectorySetVariableNames - Sets the name of each component in the solution vector so that it may be saved with the trajectory 119*78fbdcc8SBarry Smith 120*78fbdcc8SBarry Smith Collective on TSTrajectory 121*78fbdcc8SBarry Smith 122*78fbdcc8SBarry Smith Input Parameters: 123*78fbdcc8SBarry Smith + tr - the trajectory context 124*78fbdcc8SBarry Smith - names - the names of the components, final string must be NULL 125*78fbdcc8SBarry Smith 126*78fbdcc8SBarry Smith Level: intermediate 127*78fbdcc8SBarry Smith 128*78fbdcc8SBarry Smith .keywords: TS, TSTrajectory, vector, monitor, view 129*78fbdcc8SBarry Smith 130*78fbdcc8SBarry Smith .seealso: TSTrajectory, TSGetTrajectory() 131*78fbdcc8SBarry Smith @*/ 132*78fbdcc8SBarry Smith PetscErrorCode TSTrajectorySetVariableNames(TSTrajectory ctx,const char * const *names) 133*78fbdcc8SBarry Smith { 134*78fbdcc8SBarry Smith PetscErrorCode ierr; 135*78fbdcc8SBarry Smith 136*78fbdcc8SBarry Smith PetscFunctionBegin; 137*78fbdcc8SBarry Smith ierr = PetscStrArrayDestroy(&ctx->names);CHKERRQ(ierr); 138*78fbdcc8SBarry Smith ierr = PetscStrArrayallocpy(names,&ctx->names);CHKERRQ(ierr); 139*78fbdcc8SBarry Smith PetscFunctionReturn(0); 140*78fbdcc8SBarry Smith } 141*78fbdcc8SBarry Smith 142*78fbdcc8SBarry Smith /*@C 143bc952696SBarry Smith TSTrajectoryCreate - This function creates an empty trajectory object used to store the time dependent solution of an ODE/DAE 144bc952696SBarry Smith 145bc952696SBarry Smith Collective on MPI_Comm 146bc952696SBarry Smith 147bc952696SBarry Smith Input Parameter: 1483c0fce88SHong Zhang . comm - the communicator 149bc952696SBarry Smith 150bc952696SBarry Smith Output Parameter: 1513c0fce88SHong Zhang . tj - the trajectory object 152bc952696SBarry Smith 153bc952696SBarry Smith Level: advanced 154bc952696SBarry Smith 1553c0fce88SHong Zhang Notes: Usually one does not call this routine, it is called automatically when one calls TSSetSaveTrajectory(). 156bc952696SBarry Smith 1573c0fce88SHong Zhang .keywords: TS, trajectory, create 1583c0fce88SHong Zhang 159*78fbdcc8SBarry Smith .seealso: TSTrajectorySetUp(), TSTrajectoryDestroy(), TSTrajectorySetType(), TSTrajectorySetVariableNames(), TSGetTrajectory() 160bc952696SBarry Smith @*/ 161b1d74d50SHong Zhang PetscErrorCode TSTrajectoryCreate(MPI_Comm comm,TSTrajectory *tj) 162bc952696SBarry Smith { 163bc952696SBarry Smith TSTrajectory t; 164bc952696SBarry Smith PetscErrorCode ierr; 165bc952696SBarry Smith 166bc952696SBarry Smith PetscFunctionBegin; 167b1d74d50SHong Zhang PetscValidPointer(tj,2); 168b1d74d50SHong Zhang *tj = NULL; 169bc952696SBarry Smith ierr = TSInitializePackage();CHKERRQ(ierr); 170bc952696SBarry Smith 17173107ff1SLisandro Dalcin ierr = PetscHeaderCreate(t,TSTRAJECTORY_CLASSID,"TSTrajectory","Time stepping","TS",comm,TSTrajectoryDestroy,TSTrajectoryView);CHKERRQ(ierr); 17268bece0bSHong Zhang t->setupcalled = PETSC_FALSE; 173b1d74d50SHong Zhang *tj = t; 174bc952696SBarry Smith PetscFunctionReturn(0); 175bc952696SBarry Smith } 176bc952696SBarry Smith 177bc952696SBarry Smith /*@C 178bc952696SBarry Smith TSTrajectorySetType - Sets the storage method to be used as in a trajectory 179bc952696SBarry Smith 180bc952696SBarry Smith Collective on TS 181bc952696SBarry Smith 182bc952696SBarry Smith Input Parameters: 1833c0fce88SHong Zhang + tj - the TSTrajectory context 1843c0fce88SHong Zhang . ts - the TS context 1853c0fce88SHong Zhang - type - a known method 186bc952696SBarry Smith 187bc952696SBarry Smith Options Database Command: 188e210cd0eSHong Zhang . -ts_trajectory_type <type> - Sets the method; use -help for a list of available methods (for instance, basic) 189bc952696SBarry Smith 190bc952696SBarry Smith Level: intermediate 191bc952696SBarry Smith 1923c0fce88SHong Zhang .keywords: TS, trajectory, timestep, set, type 193bc952696SBarry Smith 1943c0fce88SHong Zhang .seealso: TS, TSTrajectoryCreate(), TSTrajectorySetFromOptions(), TSTrajectoryDestroy() 195bc952696SBarry Smith 196bc952696SBarry Smith @*/ 197972caf09SHong Zhang PetscErrorCode TSTrajectorySetType(TSTrajectory tj,TS ts,const TSTrajectoryType type) 198bc952696SBarry Smith { 199972caf09SHong Zhang PetscErrorCode (*r)(TSTrajectory,TS); 200bc952696SBarry Smith PetscBool match; 201bc952696SBarry Smith PetscErrorCode ierr; 202bc952696SBarry Smith 203bc952696SBarry Smith PetscFunctionBegin; 204972caf09SHong Zhang PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1); 205972caf09SHong Zhang ierr = PetscObjectTypeCompare((PetscObject)tj,type,&match);CHKERRQ(ierr); 206bc952696SBarry Smith if (match) PetscFunctionReturn(0); 207bc952696SBarry Smith 208bc952696SBarry Smith ierr = PetscFunctionListFind(TSTrajectoryList,type,&r);CHKERRQ(ierr); 209bc952696SBarry Smith if (!r) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_UNKNOWN_TYPE,"Unknown TSTrajectory type: %s",type); 210972caf09SHong Zhang if (tj->ops->destroy) { 211972caf09SHong Zhang ierr = (*(tj)->ops->destroy)(tj);CHKERRQ(ierr); 212bc952696SBarry Smith 213972caf09SHong Zhang tj->ops->destroy = NULL; 214bc952696SBarry Smith } 215972caf09SHong Zhang ierr = PetscMemzero(tj->ops,sizeof(*tj->ops));CHKERRQ(ierr); 216bc952696SBarry Smith 217972caf09SHong Zhang ierr = PetscObjectChangeTypeName((PetscObject)tj,type);CHKERRQ(ierr); 218972caf09SHong Zhang ierr = (*r)(tj,ts);CHKERRQ(ierr); 219bc952696SBarry Smith PetscFunctionReturn(0); 220bc952696SBarry Smith } 221bc952696SBarry Smith 222972caf09SHong Zhang PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Basic(TSTrajectory,TS); 223972caf09SHong Zhang PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Singlefile(TSTrajectory,TS); 2249a53571cSHong Zhang PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Memory(TSTrajectory,TS); 2252b043167SHong Zhang PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Visualization(TSTrajectory,TS); 226bc952696SBarry Smith 227bc952696SBarry Smith /*@C 228bc952696SBarry Smith TSTrajectoryRegisterAll - Registers all of the trajectory storage schecmes in the TS package. 229bc952696SBarry Smith 230bc952696SBarry Smith Not Collective 231bc952696SBarry Smith 232bc952696SBarry Smith Level: advanced 233bc952696SBarry Smith 2343c0fce88SHong Zhang .keywords: TS, trajectory, register, all 2353c0fce88SHong Zhang 2363c0fce88SHong Zhang .seealso: TSTrajectoryRegister() 237bc952696SBarry Smith @*/ 238bc952696SBarry Smith PetscErrorCode TSTrajectoryRegisterAll(void) 239bc952696SBarry Smith { 240bc952696SBarry Smith PetscErrorCode ierr; 241bc952696SBarry Smith 242bc952696SBarry Smith PetscFunctionBegin; 243560360afSLisandro Dalcin if (TSTrajectoryRegisterAllCalled) PetscFunctionReturn(0); 244bc952696SBarry Smith TSTrajectoryRegisterAllCalled = PETSC_TRUE; 245bc952696SBarry Smith 246bc952696SBarry Smith ierr = TSTrajectoryRegister(TSTRAJECTORYBASIC,TSTrajectoryCreate_Basic);CHKERRQ(ierr); 2471c8c567eSBarry Smith ierr = TSTrajectoryRegister(TSTRAJECTORYSINGLEFILE,TSTrajectoryCreate_Singlefile);CHKERRQ(ierr); 2489a53571cSHong Zhang ierr = TSTrajectoryRegister(TSTRAJECTORYMEMORY,TSTrajectoryCreate_Memory);CHKERRQ(ierr); 2492b043167SHong Zhang ierr = TSTrajectoryRegister(TSTRAJECTORYVISUALIZATION,TSTrajectoryCreate_Visualization);CHKERRQ(ierr); 250bc952696SBarry Smith PetscFunctionReturn(0); 251bc952696SBarry Smith } 252bc952696SBarry Smith 253bc952696SBarry Smith /*@ 254bc952696SBarry Smith TSTrajectoryDestroy - Destroys a trajectory context 255bc952696SBarry Smith 256bc952696SBarry Smith Collective on TSTrajectory 257bc952696SBarry Smith 258bc952696SBarry Smith Input Parameter: 2593c0fce88SHong Zhang . tj - the TSTrajectory context obtained from TSTrajectoryCreate() 260bc952696SBarry Smith 261bc952696SBarry Smith Level: advanced 262bc952696SBarry Smith 2633c0fce88SHong Zhang .keywords: TS, trajectory, timestep, destroy 264bc952696SBarry Smith 2653c0fce88SHong Zhang .seealso: TSTrajectoryCreate(), TSTrajectorySetUp() 266bc952696SBarry Smith @*/ 267972caf09SHong Zhang PetscErrorCode TSTrajectoryDestroy(TSTrajectory *tj) 268bc952696SBarry Smith { 269bc952696SBarry Smith PetscErrorCode ierr; 270bc952696SBarry Smith 271bc952696SBarry Smith PetscFunctionBegin; 272972caf09SHong Zhang if (!*tj) PetscFunctionReturn(0); 273972caf09SHong Zhang PetscValidHeaderSpecific((*tj),TSTRAJECTORY_CLASSID,1); 274972caf09SHong Zhang if (--((PetscObject)(*tj))->refct > 0) {*tj = 0; PetscFunctionReturn(0);} 275bc952696SBarry Smith 276972caf09SHong Zhang if ((*tj)->ops->destroy) {ierr = (*(*tj)->ops->destroy)((*tj));CHKERRQ(ierr);} 277aced365eSHong Zhang ierr = PetscViewerDestroy(&(*tj)->monitor);CHKERRQ(ierr); 278*78fbdcc8SBarry Smith ierr = PetscStrArrayDestroy(&(*tj)->names);CHKERRQ(ierr); 279972caf09SHong Zhang ierr = PetscHeaderDestroy(tj);CHKERRQ(ierr); 280bc952696SBarry Smith PetscFunctionReturn(0); 281bc952696SBarry Smith } 282bc952696SBarry Smith 283bc952696SBarry Smith /* 284772b2523SBarry Smith TSTrajectorySetTypeFromOptions_Private - Sets the type of ts from user options. 285bc952696SBarry Smith 286bc952696SBarry Smith Collective on TSTrajectory 287bc952696SBarry Smith 288bc952696SBarry Smith Input Parameter: 2893c0fce88SHong Zhang + tj - the TSTrajectory context 2903c0fce88SHong Zhang - ts - the TS context 2913c0fce88SHong Zhang 2923c0fce88SHong Zhang Options Database Keys: 2933c0fce88SHong Zhang . -ts_trajectory_type <type> - TSTRAJECTORYBASIC, TSTRAJECTORYMEMORY, TSTRAJECTORYSINGLEFILE, TSTRAJECTORYVISUALIZATION 294bc952696SBarry Smith 295bc952696SBarry Smith Level: intermediate 296bc952696SBarry Smith 2973c0fce88SHong Zhang .keywords: TS, trajectory, set, options, type 2983c0fce88SHong Zhang 2993c0fce88SHong Zhang .seealso: TSTrajectorySetFromOptions(), TSTrajectorySetType() 300bc952696SBarry Smith */ 3012bfe6b3fSBarry Smith static PetscErrorCode TSTrajectorySetTypeFromOptions_Private(PetscOptionItems *PetscOptionsObject,TSTrajectory tj,TS ts) 302bc952696SBarry Smith { 303bc952696SBarry Smith PetscBool opt; 304bc952696SBarry Smith const char *defaultType; 305bc952696SBarry Smith char typeName[256]; 3069a53571cSHong Zhang PetscBool flg; 307bc952696SBarry Smith PetscErrorCode ierr; 308bc952696SBarry Smith 309bc952696SBarry Smith PetscFunctionBegin; 310b1d74d50SHong Zhang if (((PetscObject)tj)->type_name) defaultType = ((PetscObject)tj)->type_name; 311bc952696SBarry Smith else defaultType = TSTRAJECTORYBASIC; 312bc952696SBarry Smith 313560360afSLisandro Dalcin ierr = TSTrajectoryRegisterAll();CHKERRQ(ierr); 314e210cd0eSHong Zhang ierr = PetscOptionsFList("-ts_trajectory_type","TSTrajectory method"," TSTrajectorySetType",TSTrajectoryList,defaultType,typeName,256,&opt);CHKERRQ(ierr); 315bc952696SBarry Smith if (opt) { 316f416af30SBarry Smith ierr = PetscStrcmp(typeName,TSTRAJECTORYMEMORY,&flg);CHKERRQ(ierr); 317972caf09SHong Zhang ierr = TSTrajectorySetType(tj,ts,typeName);CHKERRQ(ierr); 318bc952696SBarry Smith } else { 319972caf09SHong Zhang ierr = TSTrajectorySetType(tj,ts,defaultType);CHKERRQ(ierr); 320bc952696SBarry Smith } 321bc952696SBarry Smith PetscFunctionReturn(0); 322bc952696SBarry Smith } 323bc952696SBarry Smith 324ed695a29SHong Zhang /*@ 325ed695a29SHong Zhang TSTrajectorySetMonitor - Monitor the schedules generated by the checkpointing controller 326ed695a29SHong Zhang 327ed695a29SHong Zhang Collective on TSTrajectory 328ed695a29SHong Zhang 329ed695a29SHong Zhang Input Arguments: 330ed695a29SHong Zhang + tj - the TSTrajectory context 331ed695a29SHong Zhang - flg - PETSC_TRUE to active a monitor, PETSC_FALSE to disable 332ed695a29SHong Zhang 3333c0fce88SHong Zhang Options Database Keys: 334063c0c7aSHong Zhang . -ts_trajectory_monitor - print TSTrajectory information 3353c0fce88SHong Zhang 336ed695a29SHong Zhang Level: intermediate 337ed695a29SHong Zhang 3383c0fce88SHong Zhang .keywords: TS, trajectory, set, monitor 3393c0fce88SHong Zhang 3403c0fce88SHong Zhang .seealso: TSTrajectoryCreate(), TSTrajectoryDestroy(), TSTrajectorySetUp() 341ed695a29SHong Zhang @*/ 3422bee684fSHong Zhang PetscErrorCode TSTrajectorySetMonitor(TSTrajectory tj,PetscBool flg) 343ed695a29SHong Zhang { 344ed695a29SHong Zhang PetscErrorCode ierr; 345ed695a29SHong Zhang 346ed695a29SHong Zhang PetscFunctionBegin; 347ed695a29SHong Zhang PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1); 348ed695a29SHong Zhang PetscValidLogicalCollectiveBool(tj,flg,2); 349ed695a29SHong Zhang if (flg) { 350ed695a29SHong Zhang if (!tj->monitor) {ierr = PetscViewerASCIIOpen(PetscObjectComm((PetscObject)tj),"stdout",&tj->monitor);CHKERRQ(ierr);} 351ed695a29SHong Zhang } else { 352ed695a29SHong Zhang ierr = PetscViewerDestroy(&tj->monitor);CHKERRQ(ierr); 353ed695a29SHong Zhang } 354ed695a29SHong Zhang PetscFunctionReturn(0); 355ed695a29SHong Zhang } 356ed695a29SHong Zhang 357bc952696SBarry Smith /*@ 358bc952696SBarry Smith TSTrajectorySetFromOptions - Sets various TSTrajectory parameters from user options. 359bc952696SBarry Smith 360bc952696SBarry Smith Collective on TSTrajectory 361bc952696SBarry Smith 362bc952696SBarry Smith Input Parameter: 3633c0fce88SHong Zhang + tj - the TSTrajectory context obtained from TSTrajectoryCreate() 3643c0fce88SHong Zhang - ts - the TS context 365bc952696SBarry Smith 366bc952696SBarry Smith Options Database Keys: 3673c0fce88SHong Zhang + -ts_trajectory_type <type> - TSTRAJECTORYBASIC, TSTRAJECTORYMEMORY, TSTRAJECTORYSINGLEFILE, TSTRAJECTORYVISUALIZATION 368063c0c7aSHong Zhang - -ts_trajectory_monitor - print TSTrajectory information 369bc952696SBarry Smith 370bc952696SBarry Smith Level: advanced 371bc952696SBarry Smith 37262b521acSHong Zhang Notes: This is not normally called directly by users 373bc952696SBarry Smith 3743c0fce88SHong Zhang .keywords: TS, trajectory, timestep, set, options, database 375bc952696SBarry Smith 3763c0fce88SHong Zhang .seealso: TSSetSaveTrajectory(), TSTrajectorySetUp() 377bc952696SBarry Smith @*/ 378972caf09SHong Zhang PetscErrorCode TSTrajectorySetFromOptions(TSTrajectory tj,TS ts) 379bc952696SBarry Smith { 380bc952696SBarry Smith PetscErrorCode ierr; 381ed695a29SHong Zhang PetscBool set,flg; 382bc952696SBarry Smith 383bc952696SBarry Smith PetscFunctionBegin; 384b1d74d50SHong Zhang PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1); 385972caf09SHong Zhang PetscValidHeaderSpecific(ts,TS_CLASSID,2); 386b1d74d50SHong Zhang ierr = PetscObjectOptionsBegin((PetscObject)tj);CHKERRQ(ierr); 387972caf09SHong Zhang ierr = TSTrajectorySetTypeFromOptions_Private(PetscOptionsObject,tj,ts);CHKERRQ(ierr); 388ed695a29SHong Zhang ierr = PetscOptionsBool("-ts_trajectory_monitor","Print checkpointing schedules","TSTrajectorySetMonitor",tj->monitor ? PETSC_TRUE:PETSC_FALSE,&flg,&set);CHKERRQ(ierr); 389aced365eSHong Zhang if (set) {ierr = TSTrajectorySetMonitor(tj,flg);CHKERRQ(ierr);} 39062b521acSHong Zhang /* Handle specific TS options */ 39162b521acSHong Zhang if (tj->ops->setfromoptions) { 39262b521acSHong Zhang ierr = (*tj->ops->setfromoptions)(PetscOptionsObject,tj);CHKERRQ(ierr); 39362b521acSHong Zhang } 394bc952696SBarry Smith ierr = PetscOptionsEnd();CHKERRQ(ierr); 395bc952696SBarry Smith PetscFunctionReturn(0); 396bc952696SBarry Smith } 39768bece0bSHong Zhang 39868bece0bSHong Zhang /*@ 39968bece0bSHong Zhang TSTrajectorySetUp - Sets up the internal data structures, e.g. stacks, for the later use 40068bece0bSHong Zhang of a TS trajectory. 40168bece0bSHong Zhang 40268bece0bSHong Zhang Collective on TS 40368bece0bSHong Zhang 40468bece0bSHong Zhang Input Parameter: 4053c0fce88SHong Zhang + ts - the TS context obtained from TSCreate() 4063c0fce88SHong Zhang - tj - the TS trajectory context 40768bece0bSHong Zhang 40868bece0bSHong Zhang Level: advanced 40968bece0bSHong Zhang 4103c0fce88SHong Zhang .keywords: TS, trajectory, setup 41168bece0bSHong Zhang 41268bece0bSHong Zhang .seealso: TSSetSaveTrajectory(), TSTrajectoryCreate(), TSTrajectoryDestroy() 41368bece0bSHong Zhang @*/ 41468bece0bSHong Zhang PetscErrorCode TSTrajectorySetUp(TSTrajectory tj,TS ts) 41568bece0bSHong Zhang { 41668bece0bSHong Zhang PetscErrorCode ierr; 41768bece0bSHong Zhang 41868bece0bSHong Zhang PetscFunctionBegin; 41968bece0bSHong Zhang if (!tj) PetscFunctionReturn(0); 42068bece0bSHong Zhang PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1); 42168bece0bSHong Zhang PetscValidHeaderSpecific(ts,TS_CLASSID,2); 42268bece0bSHong Zhang if (tj->setupcalled) PetscFunctionReturn(0); 42368bece0bSHong Zhang 42468bece0bSHong Zhang if (!((PetscObject)tj)->type_name) { 42568bece0bSHong Zhang ierr = TSTrajectorySetType(tj,ts,TSTRAJECTORYBASIC);CHKERRQ(ierr); 42668bece0bSHong Zhang } 42768bece0bSHong Zhang if (tj->ops->setup) { 42868bece0bSHong Zhang ierr = (*tj->ops->setup)(tj,ts);CHKERRQ(ierr); 42968bece0bSHong Zhang } 43068bece0bSHong Zhang 43168bece0bSHong Zhang tj->setupcalled = PETSC_TRUE; 43253b27ddbSHong Zhang 43353b27ddbSHong Zhang /* Set the counters to zero */ 4341a5a771fSHong Zhang tj->recomps = 0; 43553b27ddbSHong Zhang tj->diskreads = 0; 43653b27ddbSHong Zhang tj->diskwrites = 0; 43768bece0bSHong Zhang PetscFunctionReturn(0); 43868bece0bSHong Zhang } 439