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: 17*3c0fce88SHong Zhang + name - the name of a new user-defined creation routine 18*3c0fce88SHong Zhang - 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 25*3c0fce88SHong Zhang .keywords: TS, trajectory, timestep, register 26bc952696SBarry Smith 27*3c0fce88SHong Zhang .seealso: TSTrajectoryRegisterAll() 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 93*3c0fce88SHong Zhang .keywords: TS, trajectory, 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) { 117285336bfSHong Zhang ierr = PetscViewerASCIIPushTab(viewer);CHKERRQ(ierr); 118b1d74d50SHong Zhang ierr = (*tj->ops->view)(tj,viewer);CHKERRQ(ierr); 119285336bfSHong Zhang ierr = PetscViewerASCIIPopTab(viewer);CHKERRQ(ierr); 120bc952696SBarry Smith } 121bc952696SBarry Smith } 122bc952696SBarry Smith PetscFunctionReturn(0); 123bc952696SBarry Smith } 124bc952696SBarry Smith 125bc952696SBarry Smith #undef __FUNCT__ 126bc952696SBarry Smith #define __FUNCT__ "TSTrajectoryCreate" 127bc952696SBarry Smith /*@C 128bc952696SBarry Smith TSTrajectoryCreate - This function creates an empty trajectory object used to store the time dependent solution of an ODE/DAE 129bc952696SBarry Smith 130bc952696SBarry Smith Collective on MPI_Comm 131bc952696SBarry Smith 132bc952696SBarry Smith Input Parameter: 133*3c0fce88SHong Zhang . comm - the communicator 134bc952696SBarry Smith 135bc952696SBarry Smith Output Parameter: 136*3c0fce88SHong Zhang . tj - the trajectory object 137bc952696SBarry Smith 138bc952696SBarry Smith Level: advanced 139bc952696SBarry Smith 140*3c0fce88SHong Zhang Notes: Usually one does not call this routine, it is called automatically when one calls TSSetSaveTrajectory(). 141bc952696SBarry Smith 142*3c0fce88SHong Zhang .keywords: TS, trajectory, create 143*3c0fce88SHong Zhang 144*3c0fce88SHong Zhang .seealso: TSTrajectorySetUp(), TSTrajectoryDestroy(), TSTrajectorySetType() 145bc952696SBarry Smith @*/ 146b1d74d50SHong Zhang PetscErrorCode TSTrajectoryCreate(MPI_Comm comm,TSTrajectory *tj) 147bc952696SBarry Smith { 148bc952696SBarry Smith TSTrajectory t; 149bc952696SBarry Smith PetscErrorCode ierr; 150bc952696SBarry Smith 151bc952696SBarry Smith PetscFunctionBegin; 152b1d74d50SHong Zhang PetscValidPointer(tj,2); 153b1d74d50SHong Zhang *tj = NULL; 154bc952696SBarry Smith ierr = TSInitializePackage();CHKERRQ(ierr); 155bc952696SBarry Smith 15673107ff1SLisandro Dalcin ierr = PetscHeaderCreate(t,TSTRAJECTORY_CLASSID,"TSTrajectory","Time stepping","TS",comm,TSTrajectoryDestroy,TSTrajectoryView);CHKERRQ(ierr); 15768bece0bSHong Zhang t->setupcalled = PETSC_FALSE; 158b1d74d50SHong Zhang *tj = t; 159bc952696SBarry Smith PetscFunctionReturn(0); 160bc952696SBarry Smith } 161bc952696SBarry Smith 162bc952696SBarry Smith #undef __FUNCT__ 163bc952696SBarry Smith #define __FUNCT__ "TSTrajectorySetType" 164bc952696SBarry Smith /*@C 165bc952696SBarry Smith TSTrajectorySetType - Sets the storage method to be used as in a trajectory 166bc952696SBarry Smith 167bc952696SBarry Smith Collective on TS 168bc952696SBarry Smith 169bc952696SBarry Smith Input Parameters: 170*3c0fce88SHong Zhang + tj - the TSTrajectory context 171*3c0fce88SHong Zhang . ts - the TS context 172*3c0fce88SHong Zhang - type - a known method 173bc952696SBarry Smith 174bc952696SBarry Smith Options Database Command: 175e210cd0eSHong Zhang . -ts_trajectory_type <type> - Sets the method; use -help for a list of available methods (for instance, basic) 176bc952696SBarry Smith 177bc952696SBarry Smith Level: intermediate 178bc952696SBarry Smith 179*3c0fce88SHong Zhang .keywords: TS, trajectory, timestep, set, type 180bc952696SBarry Smith 181*3c0fce88SHong Zhang .seealso: TS, TSTrajectoryCreate(), TSTrajectorySetFromOptions(), TSTrajectoryDestroy() 182bc952696SBarry Smith 183bc952696SBarry Smith @*/ 184972caf09SHong Zhang PetscErrorCode TSTrajectorySetType(TSTrajectory tj,TS ts,const TSTrajectoryType type) 185bc952696SBarry Smith { 186972caf09SHong Zhang PetscErrorCode (*r)(TSTrajectory,TS); 187bc952696SBarry Smith PetscBool match; 188bc952696SBarry Smith PetscErrorCode ierr; 189bc952696SBarry Smith 190bc952696SBarry Smith PetscFunctionBegin; 191972caf09SHong Zhang PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1); 192972caf09SHong Zhang ierr = PetscObjectTypeCompare((PetscObject)tj,type,&match);CHKERRQ(ierr); 193bc952696SBarry Smith if (match) PetscFunctionReturn(0); 194bc952696SBarry Smith 195bc952696SBarry Smith ierr = PetscFunctionListFind(TSTrajectoryList,type,&r);CHKERRQ(ierr); 196bc952696SBarry Smith if (!r) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_UNKNOWN_TYPE,"Unknown TSTrajectory type: %s",type); 197972caf09SHong Zhang if (tj->ops->destroy) { 198972caf09SHong Zhang ierr = (*(tj)->ops->destroy)(tj);CHKERRQ(ierr); 199bc952696SBarry Smith 200972caf09SHong Zhang tj->ops->destroy = NULL; 201bc952696SBarry Smith } 202972caf09SHong Zhang ierr = PetscMemzero(tj->ops,sizeof(*tj->ops));CHKERRQ(ierr); 203bc952696SBarry Smith 204972caf09SHong Zhang ierr = PetscObjectChangeTypeName((PetscObject)tj,type);CHKERRQ(ierr); 205972caf09SHong Zhang ierr = (*r)(tj,ts);CHKERRQ(ierr); 206bc952696SBarry Smith PetscFunctionReturn(0); 207bc952696SBarry Smith } 208bc952696SBarry Smith 209972caf09SHong Zhang PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Basic(TSTrajectory,TS); 210972caf09SHong Zhang PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Singlefile(TSTrajectory,TS); 2119a53571cSHong Zhang PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Memory(TSTrajectory,TS); 2122b043167SHong Zhang PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Visualization(TSTrajectory,TS); 213bc952696SBarry Smith 214bc952696SBarry Smith #undef __FUNCT__ 215bc952696SBarry Smith #define __FUNCT__ "TSTrajectoryRegisterAll" 216bc952696SBarry Smith /*@C 217bc952696SBarry Smith TSTrajectoryRegisterAll - Registers all of the trajectory storage schecmes in the TS package. 218bc952696SBarry Smith 219bc952696SBarry Smith Not Collective 220bc952696SBarry Smith 221bc952696SBarry Smith Level: advanced 222bc952696SBarry Smith 223*3c0fce88SHong Zhang .keywords: TS, trajectory, register, all 224*3c0fce88SHong Zhang 225*3c0fce88SHong Zhang .seealso: TSTrajectoryRegister() 226bc952696SBarry Smith @*/ 227bc952696SBarry Smith PetscErrorCode TSTrajectoryRegisterAll(void) 228bc952696SBarry Smith { 229bc952696SBarry Smith PetscErrorCode ierr; 230bc952696SBarry Smith 231bc952696SBarry Smith PetscFunctionBegin; 232560360afSLisandro Dalcin if (TSTrajectoryRegisterAllCalled) PetscFunctionReturn(0); 233bc952696SBarry Smith TSTrajectoryRegisterAllCalled = PETSC_TRUE; 234bc952696SBarry Smith 235bc952696SBarry Smith ierr = TSTrajectoryRegister(TSTRAJECTORYBASIC,TSTrajectoryCreate_Basic);CHKERRQ(ierr); 2361c8c567eSBarry Smith ierr = TSTrajectoryRegister(TSTRAJECTORYSINGLEFILE,TSTrajectoryCreate_Singlefile);CHKERRQ(ierr); 2379a53571cSHong Zhang ierr = TSTrajectoryRegister(TSTRAJECTORYMEMORY,TSTrajectoryCreate_Memory);CHKERRQ(ierr); 2382b043167SHong Zhang ierr = TSTrajectoryRegister(TSTRAJECTORYVISUALIZATION,TSTrajectoryCreate_Visualization);CHKERRQ(ierr); 239bc952696SBarry Smith PetscFunctionReturn(0); 240bc952696SBarry Smith } 241bc952696SBarry Smith 242bc952696SBarry Smith #undef __FUNCT__ 243bc952696SBarry Smith #define __FUNCT__ "TSTrajectoryDestroy" 244bc952696SBarry Smith /*@ 245bc952696SBarry Smith TSTrajectoryDestroy - Destroys a trajectory context 246bc952696SBarry Smith 247bc952696SBarry Smith Collective on TSTrajectory 248bc952696SBarry Smith 249bc952696SBarry Smith Input Parameter: 250*3c0fce88SHong Zhang . tj - the TSTrajectory context obtained from TSTrajectoryCreate() 251bc952696SBarry Smith 252bc952696SBarry Smith Level: advanced 253bc952696SBarry Smith 254*3c0fce88SHong Zhang .keywords: TS, trajectory, timestep, destroy 255bc952696SBarry Smith 256*3c0fce88SHong Zhang .seealso: TSTrajectoryCreate(), TSTrajectorySetUp() 257bc952696SBarry Smith @*/ 258972caf09SHong Zhang PetscErrorCode TSTrajectoryDestroy(TSTrajectory *tj) 259bc952696SBarry Smith { 260bc952696SBarry Smith PetscErrorCode ierr; 261bc952696SBarry Smith 262bc952696SBarry Smith PetscFunctionBegin; 263972caf09SHong Zhang if (!*tj) PetscFunctionReturn(0); 264972caf09SHong Zhang PetscValidHeaderSpecific((*tj),TSTRAJECTORY_CLASSID,1); 265972caf09SHong Zhang if (--((PetscObject)(*tj))->refct > 0) {*tj = 0; PetscFunctionReturn(0);} 266bc952696SBarry Smith 267972caf09SHong Zhang if ((*tj)->ops->destroy) {ierr = (*(*tj)->ops->destroy)((*tj));CHKERRQ(ierr);} 268aced365eSHong Zhang ierr = PetscViewerDestroy(&(*tj)->monitor);CHKERRQ(ierr); 269972caf09SHong Zhang ierr = PetscHeaderDestroy(tj);CHKERRQ(ierr); 270bc952696SBarry Smith PetscFunctionReturn(0); 271bc952696SBarry Smith } 272bc952696SBarry Smith 273bc952696SBarry Smith #undef __FUNCT__ 274772b2523SBarry Smith #define __FUNCT__ "TSTrajectorySetTypeFromOptions_Private" 275bc952696SBarry Smith /* 276772b2523SBarry Smith TSTrajectorySetTypeFromOptions_Private - Sets the type of ts from user options. 277bc952696SBarry Smith 278bc952696SBarry Smith Collective on TSTrajectory 279bc952696SBarry Smith 280bc952696SBarry Smith Input Parameter: 281*3c0fce88SHong Zhang + tj - the TSTrajectory context 282*3c0fce88SHong Zhang - ts - the TS context 283*3c0fce88SHong Zhang 284*3c0fce88SHong Zhang Options Database Keys: 285*3c0fce88SHong Zhang . -ts_trajectory_type <type> - TSTRAJECTORYBASIC, TSTRAJECTORYMEMORY, TSTRAJECTORYSINGLEFILE, TSTRAJECTORYVISUALIZATION 286bc952696SBarry Smith 287bc952696SBarry Smith Level: intermediate 288bc952696SBarry Smith 289*3c0fce88SHong Zhang .keywords: TS, trajectory, set, options, type 290*3c0fce88SHong Zhang 291*3c0fce88SHong Zhang .seealso: TSTrajectorySetFromOptions(), TSTrajectorySetType() 292bc952696SBarry Smith */ 2932bfe6b3fSBarry Smith static PetscErrorCode TSTrajectorySetTypeFromOptions_Private(PetscOptionItems *PetscOptionsObject,TSTrajectory tj,TS ts) 294bc952696SBarry Smith { 295bc952696SBarry Smith PetscBool opt; 296bc952696SBarry Smith const char *defaultType; 297bc952696SBarry Smith char typeName[256]; 2989a53571cSHong Zhang PetscBool flg; 299bc952696SBarry Smith PetscErrorCode ierr; 300bc952696SBarry Smith 301bc952696SBarry Smith PetscFunctionBegin; 302b1d74d50SHong Zhang if (((PetscObject)tj)->type_name) defaultType = ((PetscObject)tj)->type_name; 303bc952696SBarry Smith else defaultType = TSTRAJECTORYBASIC; 304bc952696SBarry Smith 305560360afSLisandro Dalcin ierr = TSTrajectoryRegisterAll();CHKERRQ(ierr); 306e210cd0eSHong Zhang ierr = PetscOptionsFList("-ts_trajectory_type","TSTrajectory method"," TSTrajectorySetType",TSTrajectoryList,defaultType,typeName,256,&opt);CHKERRQ(ierr); 307bc952696SBarry Smith if (opt) { 308f416af30SBarry Smith ierr = PetscStrcmp(typeName,TSTRAJECTORYMEMORY,&flg);CHKERRQ(ierr); 309972caf09SHong Zhang ierr = TSTrajectorySetType(tj,ts,typeName);CHKERRQ(ierr); 310bc952696SBarry Smith } else { 311972caf09SHong Zhang ierr = TSTrajectorySetType(tj,ts,defaultType);CHKERRQ(ierr); 312bc952696SBarry Smith } 313bc952696SBarry Smith PetscFunctionReturn(0); 314bc952696SBarry Smith } 315bc952696SBarry Smith 316bc952696SBarry Smith #undef __FUNCT__ 317ed695a29SHong Zhang #define __FUNCT__ "TSTrajectorySetMonitor" 318ed695a29SHong Zhang /*@ 319ed695a29SHong Zhang TSTrajectorySetMonitor - Monitor the schedules generated by the checkpointing controller 320ed695a29SHong Zhang 321ed695a29SHong Zhang Collective on TSTrajectory 322ed695a29SHong Zhang 323ed695a29SHong Zhang Input Arguments: 324ed695a29SHong Zhang + tj - the TSTrajectory context 325ed695a29SHong Zhang - flg - PETSC_TRUE to active a monitor, PETSC_FALSE to disable 326ed695a29SHong Zhang 327*3c0fce88SHong Zhang Options Database Keys: 328*3c0fce88SHong Zhang . -ts_trajecotry_monitor - print TSTrajectory information 329*3c0fce88SHong Zhang 330ed695a29SHong Zhang Level: intermediate 331ed695a29SHong Zhang 332*3c0fce88SHong Zhang .keywords: TS, trajectory, set, monitor 333*3c0fce88SHong Zhang 334*3c0fce88SHong Zhang .seealso: TSTrajectoryCreate(), TSTrajectoryDestroy(), TSTrajectorySetUp() 335ed695a29SHong Zhang @*/ 3362bee684fSHong Zhang PetscErrorCode TSTrajectorySetMonitor(TSTrajectory tj,PetscBool flg) 337ed695a29SHong Zhang { 338ed695a29SHong Zhang PetscErrorCode ierr; 339ed695a29SHong Zhang 340ed695a29SHong Zhang PetscFunctionBegin; 341ed695a29SHong Zhang PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1); 342ed695a29SHong Zhang PetscValidLogicalCollectiveBool(tj,flg,2); 343ed695a29SHong Zhang if (flg) { 344ed695a29SHong Zhang if (!tj->monitor) {ierr = PetscViewerASCIIOpen(PetscObjectComm((PetscObject)tj),"stdout",&tj->monitor);CHKERRQ(ierr);} 345ed695a29SHong Zhang } else { 346ed695a29SHong Zhang ierr = PetscViewerDestroy(&tj->monitor);CHKERRQ(ierr); 347ed695a29SHong Zhang } 348ed695a29SHong Zhang PetscFunctionReturn(0); 349ed695a29SHong Zhang } 350ed695a29SHong Zhang 351ed695a29SHong Zhang #undef __FUNCT__ 352bc952696SBarry Smith #define __FUNCT__ "TSTrajectorySetFromOptions" 353bc952696SBarry Smith /*@ 354bc952696SBarry Smith TSTrajectorySetFromOptions - Sets various TSTrajectory parameters from user options. 355bc952696SBarry Smith 356bc952696SBarry Smith Collective on TSTrajectory 357bc952696SBarry Smith 358bc952696SBarry Smith Input Parameter: 359*3c0fce88SHong Zhang + tj - the TSTrajectory context obtained from TSTrajectoryCreate() 360*3c0fce88SHong Zhang - ts - the TS context 361bc952696SBarry Smith 362bc952696SBarry Smith Options Database Keys: 363*3c0fce88SHong Zhang + -ts_trajectory_type <type> - TSTRAJECTORYBASIC, TSTRAJECTORYMEMORY, TSTRAJECTORYSINGLEFILE, TSTRAJECTORYVISUALIZATION 364*3c0fce88SHong Zhang - -ts_trajecotry_monitor - print TSTrajectory information 365bc952696SBarry Smith 366bc952696SBarry Smith Level: advanced 367bc952696SBarry Smith 36862b521acSHong Zhang Notes: This is not normally called directly by users 369bc952696SBarry Smith 370*3c0fce88SHong Zhang .keywords: TS, trajectory, timestep, set, options, database 371bc952696SBarry Smith 372*3c0fce88SHong Zhang .seealso: TSSetSaveTrajectory(), TSTrajectorySetUp() 373bc952696SBarry Smith @*/ 374972caf09SHong Zhang PetscErrorCode TSTrajectorySetFromOptions(TSTrajectory tj,TS ts) 375bc952696SBarry Smith { 376bc952696SBarry Smith PetscErrorCode ierr; 377ed695a29SHong Zhang PetscBool set,flg; 378bc952696SBarry Smith 379bc952696SBarry Smith PetscFunctionBegin; 380b1d74d50SHong Zhang PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1); 381972caf09SHong Zhang PetscValidHeaderSpecific(ts,TS_CLASSID,2); 382b1d74d50SHong Zhang ierr = PetscObjectOptionsBegin((PetscObject)tj);CHKERRQ(ierr); 383972caf09SHong Zhang ierr = TSTrajectorySetTypeFromOptions_Private(PetscOptionsObject,tj,ts);CHKERRQ(ierr); 384ed695a29SHong Zhang ierr = PetscOptionsBool("-ts_trajectory_monitor","Print checkpointing schedules","TSTrajectorySetMonitor",tj->monitor ? PETSC_TRUE:PETSC_FALSE,&flg,&set);CHKERRQ(ierr); 385aced365eSHong Zhang if (set) {ierr = TSTrajectorySetMonitor(tj,flg);CHKERRQ(ierr);} 38662b521acSHong Zhang /* Handle specific TS options */ 38762b521acSHong Zhang if (tj->ops->setfromoptions) { 38862b521acSHong Zhang ierr = (*tj->ops->setfromoptions)(PetscOptionsObject,tj);CHKERRQ(ierr); 38962b521acSHong Zhang } 390bc952696SBarry Smith ierr = PetscOptionsEnd();CHKERRQ(ierr); 391bc952696SBarry Smith PetscFunctionReturn(0); 392bc952696SBarry Smith } 39368bece0bSHong Zhang 39468bece0bSHong Zhang #undef __FUNCT__ 39568bece0bSHong Zhang #define __FUNCT__ "TSTrajectorySetUp" 39668bece0bSHong Zhang /*@ 39768bece0bSHong Zhang TSTrajectorySetUp - Sets up the internal data structures, e.g. stacks, for the later use 39868bece0bSHong Zhang of a TS trajectory. 39968bece0bSHong Zhang 40068bece0bSHong Zhang Collective on TS 40168bece0bSHong Zhang 40268bece0bSHong Zhang Input Parameter: 403*3c0fce88SHong Zhang + ts - the TS context obtained from TSCreate() 404*3c0fce88SHong Zhang - tj - the TS trajectory context 40568bece0bSHong Zhang 40668bece0bSHong Zhang Level: advanced 40768bece0bSHong Zhang 408*3c0fce88SHong Zhang .keywords: TS, trajectory, setup 40968bece0bSHong Zhang 41068bece0bSHong Zhang .seealso: TSSetSaveTrajectory(), TSTrajectoryCreate(), TSTrajectoryDestroy() 41168bece0bSHong Zhang @*/ 41268bece0bSHong Zhang PetscErrorCode TSTrajectorySetUp(TSTrajectory tj,TS ts) 41368bece0bSHong Zhang { 41468bece0bSHong Zhang PetscErrorCode ierr; 41568bece0bSHong Zhang 41668bece0bSHong Zhang PetscFunctionBegin; 41768bece0bSHong Zhang if (!tj) PetscFunctionReturn(0); 41868bece0bSHong Zhang PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1); 41968bece0bSHong Zhang PetscValidHeaderSpecific(ts,TS_CLASSID,2); 42068bece0bSHong Zhang if (tj->setupcalled) PetscFunctionReturn(0); 42168bece0bSHong Zhang 42268bece0bSHong Zhang if (!((PetscObject)tj)->type_name) { 42368bece0bSHong Zhang ierr = TSTrajectorySetType(tj,ts,TSTRAJECTORYBASIC);CHKERRQ(ierr); 42468bece0bSHong Zhang } 42568bece0bSHong Zhang if (tj->ops->setup) { 42668bece0bSHong Zhang ierr = (*tj->ops->setup)(tj,ts);CHKERRQ(ierr); 42768bece0bSHong Zhang } 42868bece0bSHong Zhang 42968bece0bSHong Zhang tj->setupcalled = PETSC_TRUE; 43053b27ddbSHong Zhang 43153b27ddbSHong Zhang /* Set the counters to zero */ 4321a5a771fSHong Zhang tj->recomps = 0; 43353b27ddbSHong Zhang tj->diskreads = 0; 43453b27ddbSHong Zhang tj->diskwrites = 0; 43568bece0bSHong Zhang PetscFunctionReturn(0); 43668bece0bSHong Zhang } 437