xref: /petsc/src/ts/trajectory/interface/traj.c (revision 3c0fce88b0638967d83c5a4f176dc6a2da1aa7f2)
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