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 11878fbdcc8SBarry Smith TSTrajectorySetVariableNames - Sets the name of each component in the solution vector so that it may be saved with the trajectory 11978fbdcc8SBarry Smith 12078fbdcc8SBarry Smith Collective on TSTrajectory 12178fbdcc8SBarry Smith 12278fbdcc8SBarry Smith Input Parameters: 12378fbdcc8SBarry Smith + tr - the trajectory context 12478fbdcc8SBarry Smith - names - the names of the components, final string must be NULL 12578fbdcc8SBarry Smith 12678fbdcc8SBarry Smith Level: intermediate 12778fbdcc8SBarry Smith 12878fbdcc8SBarry Smith .keywords: TS, TSTrajectory, vector, monitor, view 12978fbdcc8SBarry Smith 13078fbdcc8SBarry Smith .seealso: TSTrajectory, TSGetTrajectory() 13178fbdcc8SBarry Smith @*/ 13278fbdcc8SBarry Smith PetscErrorCode TSTrajectorySetVariableNames(TSTrajectory ctx,const char * const *names) 13378fbdcc8SBarry Smith { 13478fbdcc8SBarry Smith PetscErrorCode ierr; 13578fbdcc8SBarry Smith 13678fbdcc8SBarry Smith PetscFunctionBegin; 13778fbdcc8SBarry Smith ierr = PetscStrArrayDestroy(&ctx->names);CHKERRQ(ierr); 13878fbdcc8SBarry Smith ierr = PetscStrArrayallocpy(names,&ctx->names);CHKERRQ(ierr); 13978fbdcc8SBarry Smith PetscFunctionReturn(0); 14078fbdcc8SBarry Smith } 14178fbdcc8SBarry Smith 14278fbdcc8SBarry Smith /*@C 143*08347785SBarry Smith TSTrjactorySetTransform - Solution vector will be transformed by provided function before being saved to disk 144*08347785SBarry Smith 145*08347785SBarry Smith Collective on TSLGCtx 146*08347785SBarry Smith 147*08347785SBarry Smith Input Parameters: 148*08347785SBarry Smith + tj - the TSTrajectory context 149*08347785SBarry Smith . transform - the transform function 150*08347785SBarry Smith . destroy - function to destroy the optional context 151*08347785SBarry Smith - ctx - optional context used by transform function 152*08347785SBarry Smith 153*08347785SBarry Smith Level: intermediate 154*08347785SBarry Smith 155*08347785SBarry Smith .keywords: TSTrajectory, vector, monitor, view 156*08347785SBarry Smith 157*08347785SBarry Smith .seealso: TSTrajectorySetVariableNames(), TSTrajectory, TSMonitorLGSetTransform() 158*08347785SBarry Smith @*/ 159*08347785SBarry Smith PetscErrorCode TSTrajectorySetTransform(TSTrajectory tj,PetscErrorCode (*transform)(void*,Vec,Vec*),PetscErrorCode (*destroy)(void*),void *tctx) 160*08347785SBarry Smith { 161*08347785SBarry Smith PetscFunctionBegin; 162*08347785SBarry Smith tj->transform = transform; 163*08347785SBarry Smith tj->transformdestroy = destroy; 164*08347785SBarry Smith tj->transformctx = tctx; 165*08347785SBarry Smith PetscFunctionReturn(0); 166*08347785SBarry Smith } 167*08347785SBarry Smith 168*08347785SBarry Smith 169*08347785SBarry Smith /*@C 170bc952696SBarry Smith TSTrajectoryCreate - This function creates an empty trajectory object used to store the time dependent solution of an ODE/DAE 171bc952696SBarry Smith 172bc952696SBarry Smith Collective on MPI_Comm 173bc952696SBarry Smith 174bc952696SBarry Smith Input Parameter: 1753c0fce88SHong Zhang . comm - the communicator 176bc952696SBarry Smith 177bc952696SBarry Smith Output Parameter: 1783c0fce88SHong Zhang . tj - the trajectory object 179bc952696SBarry Smith 180bc952696SBarry Smith Level: advanced 181bc952696SBarry Smith 1823c0fce88SHong Zhang Notes: Usually one does not call this routine, it is called automatically when one calls TSSetSaveTrajectory(). 183bc952696SBarry Smith 1843c0fce88SHong Zhang .keywords: TS, trajectory, create 1853c0fce88SHong Zhang 18678fbdcc8SBarry Smith .seealso: TSTrajectorySetUp(), TSTrajectoryDestroy(), TSTrajectorySetType(), TSTrajectorySetVariableNames(), TSGetTrajectory() 187bc952696SBarry Smith @*/ 188b1d74d50SHong Zhang PetscErrorCode TSTrajectoryCreate(MPI_Comm comm,TSTrajectory *tj) 189bc952696SBarry Smith { 190bc952696SBarry Smith TSTrajectory t; 191bc952696SBarry Smith PetscErrorCode ierr; 192bc952696SBarry Smith 193bc952696SBarry Smith PetscFunctionBegin; 194b1d74d50SHong Zhang PetscValidPointer(tj,2); 195b1d74d50SHong Zhang *tj = NULL; 196bc952696SBarry Smith ierr = TSInitializePackage();CHKERRQ(ierr); 197bc952696SBarry Smith 19873107ff1SLisandro Dalcin ierr = PetscHeaderCreate(t,TSTRAJECTORY_CLASSID,"TSTrajectory","Time stepping","TS",comm,TSTrajectoryDestroy,TSTrajectoryView);CHKERRQ(ierr); 19968bece0bSHong Zhang t->setupcalled = PETSC_FALSE; 200b1d74d50SHong Zhang *tj = t; 201bc952696SBarry Smith PetscFunctionReturn(0); 202bc952696SBarry Smith } 203bc952696SBarry Smith 204bc952696SBarry Smith /*@C 205bc952696SBarry Smith TSTrajectorySetType - Sets the storage method to be used as in a trajectory 206bc952696SBarry Smith 207bc952696SBarry Smith Collective on TS 208bc952696SBarry Smith 209bc952696SBarry Smith Input Parameters: 2103c0fce88SHong Zhang + tj - the TSTrajectory context 2113c0fce88SHong Zhang . ts - the TS context 2123c0fce88SHong Zhang - type - a known method 213bc952696SBarry Smith 214bc952696SBarry Smith Options Database Command: 215e210cd0eSHong Zhang . -ts_trajectory_type <type> - Sets the method; use -help for a list of available methods (for instance, basic) 216bc952696SBarry Smith 217bc952696SBarry Smith Level: intermediate 218bc952696SBarry Smith 2193c0fce88SHong Zhang .keywords: TS, trajectory, timestep, set, type 220bc952696SBarry Smith 2213c0fce88SHong Zhang .seealso: TS, TSTrajectoryCreate(), TSTrajectorySetFromOptions(), TSTrajectoryDestroy() 222bc952696SBarry Smith 223bc952696SBarry Smith @*/ 224972caf09SHong Zhang PetscErrorCode TSTrajectorySetType(TSTrajectory tj,TS ts,const TSTrajectoryType type) 225bc952696SBarry Smith { 226972caf09SHong Zhang PetscErrorCode (*r)(TSTrajectory,TS); 227bc952696SBarry Smith PetscBool match; 228bc952696SBarry Smith PetscErrorCode ierr; 229bc952696SBarry Smith 230bc952696SBarry Smith PetscFunctionBegin; 231972caf09SHong Zhang PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1); 232972caf09SHong Zhang ierr = PetscObjectTypeCompare((PetscObject)tj,type,&match);CHKERRQ(ierr); 233bc952696SBarry Smith if (match) PetscFunctionReturn(0); 234bc952696SBarry Smith 235bc952696SBarry Smith ierr = PetscFunctionListFind(TSTrajectoryList,type,&r);CHKERRQ(ierr); 236bc952696SBarry Smith if (!r) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_UNKNOWN_TYPE,"Unknown TSTrajectory type: %s",type); 237972caf09SHong Zhang if (tj->ops->destroy) { 238972caf09SHong Zhang ierr = (*(tj)->ops->destroy)(tj);CHKERRQ(ierr); 239bc952696SBarry Smith 240972caf09SHong Zhang tj->ops->destroy = NULL; 241bc952696SBarry Smith } 242972caf09SHong Zhang ierr = PetscMemzero(tj->ops,sizeof(*tj->ops));CHKERRQ(ierr); 243bc952696SBarry Smith 244972caf09SHong Zhang ierr = PetscObjectChangeTypeName((PetscObject)tj,type);CHKERRQ(ierr); 245972caf09SHong Zhang ierr = (*r)(tj,ts);CHKERRQ(ierr); 246bc952696SBarry Smith PetscFunctionReturn(0); 247bc952696SBarry Smith } 248bc952696SBarry Smith 249972caf09SHong Zhang PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Basic(TSTrajectory,TS); 250972caf09SHong Zhang PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Singlefile(TSTrajectory,TS); 2519a53571cSHong Zhang PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Memory(TSTrajectory,TS); 2522b043167SHong Zhang PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Visualization(TSTrajectory,TS); 253bc952696SBarry Smith 254bc952696SBarry Smith /*@C 255bc952696SBarry Smith TSTrajectoryRegisterAll - Registers all of the trajectory storage schecmes in the TS package. 256bc952696SBarry Smith 257bc952696SBarry Smith Not Collective 258bc952696SBarry Smith 259bc952696SBarry Smith Level: advanced 260bc952696SBarry Smith 2613c0fce88SHong Zhang .keywords: TS, trajectory, register, all 2623c0fce88SHong Zhang 2633c0fce88SHong Zhang .seealso: TSTrajectoryRegister() 264bc952696SBarry Smith @*/ 265bc952696SBarry Smith PetscErrorCode TSTrajectoryRegisterAll(void) 266bc952696SBarry Smith { 267bc952696SBarry Smith PetscErrorCode ierr; 268bc952696SBarry Smith 269bc952696SBarry Smith PetscFunctionBegin; 270560360afSLisandro Dalcin if (TSTrajectoryRegisterAllCalled) PetscFunctionReturn(0); 271bc952696SBarry Smith TSTrajectoryRegisterAllCalled = PETSC_TRUE; 272bc952696SBarry Smith 273bc952696SBarry Smith ierr = TSTrajectoryRegister(TSTRAJECTORYBASIC,TSTrajectoryCreate_Basic);CHKERRQ(ierr); 2741c8c567eSBarry Smith ierr = TSTrajectoryRegister(TSTRAJECTORYSINGLEFILE,TSTrajectoryCreate_Singlefile);CHKERRQ(ierr); 2759a53571cSHong Zhang ierr = TSTrajectoryRegister(TSTRAJECTORYMEMORY,TSTrajectoryCreate_Memory);CHKERRQ(ierr); 2762b043167SHong Zhang ierr = TSTrajectoryRegister(TSTRAJECTORYVISUALIZATION,TSTrajectoryCreate_Visualization);CHKERRQ(ierr); 277bc952696SBarry Smith PetscFunctionReturn(0); 278bc952696SBarry Smith } 279bc952696SBarry Smith 280bc952696SBarry Smith /*@ 281bc952696SBarry Smith TSTrajectoryDestroy - Destroys a trajectory context 282bc952696SBarry Smith 283bc952696SBarry Smith Collective on TSTrajectory 284bc952696SBarry Smith 285bc952696SBarry Smith Input Parameter: 2863c0fce88SHong Zhang . tj - the TSTrajectory context obtained from TSTrajectoryCreate() 287bc952696SBarry Smith 288bc952696SBarry Smith Level: advanced 289bc952696SBarry Smith 2903c0fce88SHong Zhang .keywords: TS, trajectory, timestep, destroy 291bc952696SBarry Smith 2923c0fce88SHong Zhang .seealso: TSTrajectoryCreate(), TSTrajectorySetUp() 293bc952696SBarry Smith @*/ 294972caf09SHong Zhang PetscErrorCode TSTrajectoryDestroy(TSTrajectory *tj) 295bc952696SBarry Smith { 296bc952696SBarry Smith PetscErrorCode ierr; 297bc952696SBarry Smith 298bc952696SBarry Smith PetscFunctionBegin; 299972caf09SHong Zhang if (!*tj) PetscFunctionReturn(0); 300972caf09SHong Zhang PetscValidHeaderSpecific((*tj),TSTRAJECTORY_CLASSID,1); 301972caf09SHong Zhang if (--((PetscObject)(*tj))->refct > 0) {*tj = 0; PetscFunctionReturn(0);} 302bc952696SBarry Smith 303*08347785SBarry Smith if ((*tj)->transformdestroy) {ierr = (*(*tj)->transformdestroy)((*tj)->transformctx);} 304972caf09SHong Zhang if ((*tj)->ops->destroy) {ierr = (*(*tj)->ops->destroy)((*tj));CHKERRQ(ierr);} 305aced365eSHong Zhang ierr = PetscViewerDestroy(&(*tj)->monitor);CHKERRQ(ierr); 30678fbdcc8SBarry Smith ierr = PetscStrArrayDestroy(&(*tj)->names);CHKERRQ(ierr); 307972caf09SHong Zhang ierr = PetscHeaderDestroy(tj);CHKERRQ(ierr); 308bc952696SBarry Smith PetscFunctionReturn(0); 309bc952696SBarry Smith } 310bc952696SBarry Smith 311bc952696SBarry Smith /* 312772b2523SBarry Smith TSTrajectorySetTypeFromOptions_Private - Sets the type of ts from user options. 313bc952696SBarry Smith 314bc952696SBarry Smith Collective on TSTrajectory 315bc952696SBarry Smith 316bc952696SBarry Smith Input Parameter: 3173c0fce88SHong Zhang + tj - the TSTrajectory context 3183c0fce88SHong Zhang - ts - the TS context 3193c0fce88SHong Zhang 3203c0fce88SHong Zhang Options Database Keys: 3213c0fce88SHong Zhang . -ts_trajectory_type <type> - TSTRAJECTORYBASIC, TSTRAJECTORYMEMORY, TSTRAJECTORYSINGLEFILE, TSTRAJECTORYVISUALIZATION 322bc952696SBarry Smith 323bc952696SBarry Smith Level: intermediate 324bc952696SBarry Smith 3253c0fce88SHong Zhang .keywords: TS, trajectory, set, options, type 3263c0fce88SHong Zhang 3273c0fce88SHong Zhang .seealso: TSTrajectorySetFromOptions(), TSTrajectorySetType() 328bc952696SBarry Smith */ 3292bfe6b3fSBarry Smith static PetscErrorCode TSTrajectorySetTypeFromOptions_Private(PetscOptionItems *PetscOptionsObject,TSTrajectory tj,TS ts) 330bc952696SBarry Smith { 331bc952696SBarry Smith PetscBool opt; 332bc952696SBarry Smith const char *defaultType; 333bc952696SBarry Smith char typeName[256]; 3349a53571cSHong Zhang PetscBool flg; 335bc952696SBarry Smith PetscErrorCode ierr; 336bc952696SBarry Smith 337bc952696SBarry Smith PetscFunctionBegin; 338b1d74d50SHong Zhang if (((PetscObject)tj)->type_name) defaultType = ((PetscObject)tj)->type_name; 339bc952696SBarry Smith else defaultType = TSTRAJECTORYBASIC; 340bc952696SBarry Smith 341560360afSLisandro Dalcin ierr = TSTrajectoryRegisterAll();CHKERRQ(ierr); 342e210cd0eSHong Zhang ierr = PetscOptionsFList("-ts_trajectory_type","TSTrajectory method"," TSTrajectorySetType",TSTrajectoryList,defaultType,typeName,256,&opt);CHKERRQ(ierr); 343bc952696SBarry Smith if (opt) { 344f416af30SBarry Smith ierr = PetscStrcmp(typeName,TSTRAJECTORYMEMORY,&flg);CHKERRQ(ierr); 345972caf09SHong Zhang ierr = TSTrajectorySetType(tj,ts,typeName);CHKERRQ(ierr); 346bc952696SBarry Smith } else { 347972caf09SHong Zhang ierr = TSTrajectorySetType(tj,ts,defaultType);CHKERRQ(ierr); 348bc952696SBarry Smith } 349bc952696SBarry Smith PetscFunctionReturn(0); 350bc952696SBarry Smith } 351bc952696SBarry Smith 352ed695a29SHong Zhang /*@ 353ed695a29SHong Zhang TSTrajectorySetMonitor - Monitor the schedules generated by the checkpointing controller 354ed695a29SHong Zhang 355ed695a29SHong Zhang Collective on TSTrajectory 356ed695a29SHong Zhang 357ed695a29SHong Zhang Input Arguments: 358ed695a29SHong Zhang + tj - the TSTrajectory context 359ed695a29SHong Zhang - flg - PETSC_TRUE to active a monitor, PETSC_FALSE to disable 360ed695a29SHong Zhang 3613c0fce88SHong Zhang Options Database Keys: 362063c0c7aSHong Zhang . -ts_trajectory_monitor - print TSTrajectory information 3633c0fce88SHong Zhang 364ed695a29SHong Zhang Level: intermediate 365ed695a29SHong Zhang 3663c0fce88SHong Zhang .keywords: TS, trajectory, set, monitor 3673c0fce88SHong Zhang 3683c0fce88SHong Zhang .seealso: TSTrajectoryCreate(), TSTrajectoryDestroy(), TSTrajectorySetUp() 369ed695a29SHong Zhang @*/ 3702bee684fSHong Zhang PetscErrorCode TSTrajectorySetMonitor(TSTrajectory tj,PetscBool flg) 371ed695a29SHong Zhang { 372ed695a29SHong Zhang PetscErrorCode ierr; 373ed695a29SHong Zhang 374ed695a29SHong Zhang PetscFunctionBegin; 375ed695a29SHong Zhang PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1); 376ed695a29SHong Zhang PetscValidLogicalCollectiveBool(tj,flg,2); 377ed695a29SHong Zhang if (flg) { 378ed695a29SHong Zhang if (!tj->monitor) {ierr = PetscViewerASCIIOpen(PetscObjectComm((PetscObject)tj),"stdout",&tj->monitor);CHKERRQ(ierr);} 379ed695a29SHong Zhang } else { 380ed695a29SHong Zhang ierr = PetscViewerDestroy(&tj->monitor);CHKERRQ(ierr); 381ed695a29SHong Zhang } 382ed695a29SHong Zhang PetscFunctionReturn(0); 383ed695a29SHong Zhang } 384ed695a29SHong Zhang 385bc952696SBarry Smith /*@ 386bc952696SBarry Smith TSTrajectorySetFromOptions - Sets various TSTrajectory parameters from user options. 387bc952696SBarry Smith 388bc952696SBarry Smith Collective on TSTrajectory 389bc952696SBarry Smith 390bc952696SBarry Smith Input Parameter: 3913c0fce88SHong Zhang + tj - the TSTrajectory context obtained from TSTrajectoryCreate() 3923c0fce88SHong Zhang - ts - the TS context 393bc952696SBarry Smith 394bc952696SBarry Smith Options Database Keys: 3953c0fce88SHong Zhang + -ts_trajectory_type <type> - TSTRAJECTORYBASIC, TSTRAJECTORYMEMORY, TSTRAJECTORYSINGLEFILE, TSTRAJECTORYVISUALIZATION 396063c0c7aSHong Zhang - -ts_trajectory_monitor - print TSTrajectory information 397bc952696SBarry Smith 398bc952696SBarry Smith Level: advanced 399bc952696SBarry Smith 40062b521acSHong Zhang Notes: This is not normally called directly by users 401bc952696SBarry Smith 4023c0fce88SHong Zhang .keywords: TS, trajectory, timestep, set, options, database 403bc952696SBarry Smith 4043c0fce88SHong Zhang .seealso: TSSetSaveTrajectory(), TSTrajectorySetUp() 405bc952696SBarry Smith @*/ 406972caf09SHong Zhang PetscErrorCode TSTrajectorySetFromOptions(TSTrajectory tj,TS ts) 407bc952696SBarry Smith { 408bc952696SBarry Smith PetscErrorCode ierr; 409ed695a29SHong Zhang PetscBool set,flg; 410bc952696SBarry Smith 411bc952696SBarry Smith PetscFunctionBegin; 412b1d74d50SHong Zhang PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1); 413972caf09SHong Zhang PetscValidHeaderSpecific(ts,TS_CLASSID,2); 414b1d74d50SHong Zhang ierr = PetscObjectOptionsBegin((PetscObject)tj);CHKERRQ(ierr); 415972caf09SHong Zhang ierr = TSTrajectorySetTypeFromOptions_Private(PetscOptionsObject,tj,ts);CHKERRQ(ierr); 416ed695a29SHong Zhang ierr = PetscOptionsBool("-ts_trajectory_monitor","Print checkpointing schedules","TSTrajectorySetMonitor",tj->monitor ? PETSC_TRUE:PETSC_FALSE,&flg,&set);CHKERRQ(ierr); 417aced365eSHong Zhang if (set) {ierr = TSTrajectorySetMonitor(tj,flg);CHKERRQ(ierr);} 41862b521acSHong Zhang /* Handle specific TS options */ 41962b521acSHong Zhang if (tj->ops->setfromoptions) { 42062b521acSHong Zhang ierr = (*tj->ops->setfromoptions)(PetscOptionsObject,tj);CHKERRQ(ierr); 42162b521acSHong Zhang } 422bc952696SBarry Smith ierr = PetscOptionsEnd();CHKERRQ(ierr); 423bc952696SBarry Smith PetscFunctionReturn(0); 424bc952696SBarry Smith } 42568bece0bSHong Zhang 42668bece0bSHong Zhang /*@ 42768bece0bSHong Zhang TSTrajectorySetUp - Sets up the internal data structures, e.g. stacks, for the later use 42868bece0bSHong Zhang of a TS trajectory. 42968bece0bSHong Zhang 43068bece0bSHong Zhang Collective on TS 43168bece0bSHong Zhang 43268bece0bSHong Zhang Input Parameter: 4333c0fce88SHong Zhang + ts - the TS context obtained from TSCreate() 4343c0fce88SHong Zhang - tj - the TS trajectory context 43568bece0bSHong Zhang 43668bece0bSHong Zhang Level: advanced 43768bece0bSHong Zhang 4383c0fce88SHong Zhang .keywords: TS, trajectory, setup 43968bece0bSHong Zhang 44068bece0bSHong Zhang .seealso: TSSetSaveTrajectory(), TSTrajectoryCreate(), TSTrajectoryDestroy() 44168bece0bSHong Zhang @*/ 44268bece0bSHong Zhang PetscErrorCode TSTrajectorySetUp(TSTrajectory tj,TS ts) 44368bece0bSHong Zhang { 44468bece0bSHong Zhang PetscErrorCode ierr; 44568bece0bSHong Zhang 44668bece0bSHong Zhang PetscFunctionBegin; 44768bece0bSHong Zhang if (!tj) PetscFunctionReturn(0); 44868bece0bSHong Zhang PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1); 44968bece0bSHong Zhang PetscValidHeaderSpecific(ts,TS_CLASSID,2); 45068bece0bSHong Zhang if (tj->setupcalled) PetscFunctionReturn(0); 45168bece0bSHong Zhang 45268bece0bSHong Zhang if (!((PetscObject)tj)->type_name) { 45368bece0bSHong Zhang ierr = TSTrajectorySetType(tj,ts,TSTRAJECTORYBASIC);CHKERRQ(ierr); 45468bece0bSHong Zhang } 45568bece0bSHong Zhang if (tj->ops->setup) { 45668bece0bSHong Zhang ierr = (*tj->ops->setup)(tj,ts);CHKERRQ(ierr); 45768bece0bSHong Zhang } 45868bece0bSHong Zhang 45968bece0bSHong Zhang tj->setupcalled = PETSC_TRUE; 46053b27ddbSHong Zhang 46153b27ddbSHong Zhang /* Set the counters to zero */ 4621a5a771fSHong Zhang tj->recomps = 0; 46353b27ddbSHong Zhang tj->diskreads = 0; 46453b27ddbSHong Zhang tj->diskwrites = 0; 46568bece0bSHong Zhang PetscFunctionReturn(0); 46668bece0bSHong Zhang } 467