xref: /petsc/src/ts/trajectory/interface/traj.c (revision aced365e772e4befdd5bd6a4a5d5c120fc426ccf)
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:
17bc952696SBarry Smith + name        - The name of a new user-defined creation routine
18bc952696SBarry Smith - 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 
25bc952696SBarry Smith .keywords: TS, register
26bc952696SBarry Smith 
27bc952696SBarry Smith .seealso: TSTrajectoryRegisterAll(), TSTrajectoryRegisterDestroy()
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 
93bc952696SBarry Smith .keywords: TS, 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) {
117b1d74d50SHong Zhang       ierr = (*tj->ops->view)(tj,viewer);CHKERRQ(ierr);
118bc952696SBarry Smith     }
119bc952696SBarry Smith   }
120bc952696SBarry Smith   PetscFunctionReturn(0);
121bc952696SBarry Smith }
122bc952696SBarry Smith 
123bc952696SBarry Smith #undef  __FUNCT__
124bc952696SBarry Smith #define __FUNCT__ "TSTrajectoryCreate"
125bc952696SBarry Smith /*@C
126bc952696SBarry Smith   TSTrajectoryCreate - This function creates an empty trajectory object used to store the time dependent solution of an ODE/DAE
127bc952696SBarry Smith 
128bc952696SBarry Smith   Collective on MPI_Comm
129bc952696SBarry Smith 
130bc952696SBarry Smith   Input Parameter:
131bc952696SBarry Smith . comm - The communicator
132bc952696SBarry Smith 
133bc952696SBarry Smith   Output Parameter:
134b1d74d50SHong Zhang . tj   - The trajectory object
135bc952696SBarry Smith 
136bc952696SBarry Smith   Level: advanced
137bc952696SBarry Smith 
138bc952696SBarry Smith   Notes: Usually one does not call this routine, it is called automatically when one calls TSSetSaveTrajectory(). One can call
139bc952696SBarry Smith    TSGetTrajectory() to access the created trajectory.
140bc952696SBarry Smith 
141bc952696SBarry Smith .keywords: TS, create
142bc952696SBarry Smith .seealso: TSSetType(), TSSetUp(), TSDestroy(), TSSetProblemType(), TSGetTrajectory()
143bc952696SBarry Smith @*/
144b1d74d50SHong Zhang PetscErrorCode  TSTrajectoryCreate(MPI_Comm comm,TSTrajectory *tj)
145bc952696SBarry Smith {
146bc952696SBarry Smith   TSTrajectory   t;
147bc952696SBarry Smith   PetscErrorCode ierr;
148bc952696SBarry Smith 
149bc952696SBarry Smith   PetscFunctionBegin;
150b1d74d50SHong Zhang   PetscValidPointer(tj,2);
151b1d74d50SHong Zhang   *tj = NULL;
152bc952696SBarry Smith   ierr = TSInitializePackage();CHKERRQ(ierr);
153bc952696SBarry Smith 
15473107ff1SLisandro Dalcin   ierr = PetscHeaderCreate(t,TSTRAJECTORY_CLASSID,"TSTrajectory","Time stepping","TS",comm,TSTrajectoryDestroy,TSTrajectoryView);CHKERRQ(ierr);
15568bece0bSHong Zhang   t->setupcalled = PETSC_FALSE;
156b1d74d50SHong Zhang   *tj = t;
157bc952696SBarry Smith   PetscFunctionReturn(0);
158bc952696SBarry Smith }
159bc952696SBarry Smith 
160bc952696SBarry Smith #undef __FUNCT__
161bc952696SBarry Smith #define __FUNCT__ "TSTrajectorySetType"
162bc952696SBarry Smith /*@C
163bc952696SBarry Smith   TSTrajectorySetType - Sets the storage method to be used as in a trajectory
164bc952696SBarry Smith 
165bc952696SBarry Smith   Collective on TS
166bc952696SBarry Smith 
167bc952696SBarry Smith   Input Parameters:
168bc952696SBarry Smith + ts   - The TS context
169bc952696SBarry Smith - type - A known method
170bc952696SBarry Smith 
171bc952696SBarry Smith   Options Database Command:
172e210cd0eSHong Zhang . -ts_trajectory_type <type> - Sets the method; use -help for a list of available methods (for instance, basic)
173bc952696SBarry Smith 
174bc952696SBarry Smith    Level: intermediate
175bc952696SBarry Smith 
176bc952696SBarry Smith .keywords: TS, set, type
177bc952696SBarry Smith 
178bc952696SBarry Smith .seealso: TS, TSSolve(), TSCreate(), TSSetFromOptions(), TSDestroy(), TSType
179bc952696SBarry Smith 
180bc952696SBarry Smith @*/
181972caf09SHong Zhang PetscErrorCode  TSTrajectorySetType(TSTrajectory tj,TS ts,const TSTrajectoryType type)
182bc952696SBarry Smith {
183972caf09SHong Zhang   PetscErrorCode (*r)(TSTrajectory,TS);
184bc952696SBarry Smith   PetscBool      match;
185bc952696SBarry Smith   PetscErrorCode ierr;
186bc952696SBarry Smith 
187bc952696SBarry Smith   PetscFunctionBegin;
188972caf09SHong Zhang   PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1);
189972caf09SHong Zhang   ierr = PetscObjectTypeCompare((PetscObject)tj,type,&match);CHKERRQ(ierr);
190bc952696SBarry Smith   if (match) PetscFunctionReturn(0);
191bc952696SBarry Smith 
192bc952696SBarry Smith   ierr = PetscFunctionListFind(TSTrajectoryList,type,&r);CHKERRQ(ierr);
193bc952696SBarry Smith   if (!r) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_UNKNOWN_TYPE,"Unknown TSTrajectory type: %s",type);
194972caf09SHong Zhang   if (tj->ops->destroy) {
195972caf09SHong Zhang     ierr = (*(tj)->ops->destroy)(tj);CHKERRQ(ierr);
196bc952696SBarry Smith 
197972caf09SHong Zhang     tj->ops->destroy = NULL;
198bc952696SBarry Smith   }
199972caf09SHong Zhang   ierr = PetscMemzero(tj->ops,sizeof(*tj->ops));CHKERRQ(ierr);
200bc952696SBarry Smith 
201972caf09SHong Zhang   ierr = PetscObjectChangeTypeName((PetscObject)tj,type);CHKERRQ(ierr);
202972caf09SHong Zhang   ierr = (*r)(tj,ts);CHKERRQ(ierr);
203bc952696SBarry Smith   PetscFunctionReturn(0);
204bc952696SBarry Smith }
205bc952696SBarry Smith 
206972caf09SHong Zhang PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Basic(TSTrajectory,TS);
207972caf09SHong Zhang PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Singlefile(TSTrajectory,TS);
2089a53571cSHong Zhang PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Memory(TSTrajectory,TS);
2092b043167SHong Zhang PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Visualization(TSTrajectory,TS);
210bc952696SBarry Smith 
211bc952696SBarry Smith #undef __FUNCT__
212bc952696SBarry Smith #define __FUNCT__ "TSTrajectoryRegisterAll"
213bc952696SBarry Smith /*@C
214bc952696SBarry Smith   TSTrajectoryRegisterAll - Registers all of the trajectory storage schecmes in the TS package.
215bc952696SBarry Smith 
216bc952696SBarry Smith   Not Collective
217bc952696SBarry Smith 
218bc952696SBarry Smith   Level: advanced
219bc952696SBarry Smith 
220bc952696SBarry Smith .keywords: TS, timestepper, register, all
221bc952696SBarry Smith .seealso: TSCreate(), TSRegister(), TSRegisterDestroy()
222bc952696SBarry Smith @*/
223bc952696SBarry Smith PetscErrorCode  TSTrajectoryRegisterAll(void)
224bc952696SBarry Smith {
225bc952696SBarry Smith   PetscErrorCode ierr;
226bc952696SBarry Smith 
227bc952696SBarry Smith   PetscFunctionBegin;
228560360afSLisandro Dalcin   if (TSTrajectoryRegisterAllCalled) PetscFunctionReturn(0);
229bc952696SBarry Smith   TSTrajectoryRegisterAllCalled = PETSC_TRUE;
230bc952696SBarry Smith 
231bc952696SBarry Smith   ierr = TSTrajectoryRegister(TSTRAJECTORYBASIC,TSTrajectoryCreate_Basic);CHKERRQ(ierr);
2321c8c567eSBarry Smith   ierr = TSTrajectoryRegister(TSTRAJECTORYSINGLEFILE,TSTrajectoryCreate_Singlefile);CHKERRQ(ierr);
2339a53571cSHong Zhang   ierr = TSTrajectoryRegister(TSTRAJECTORYMEMORY,TSTrajectoryCreate_Memory);CHKERRQ(ierr);
2342b043167SHong Zhang   ierr = TSTrajectoryRegister(TSTRAJECTORYVISUALIZATION,TSTrajectoryCreate_Visualization);CHKERRQ(ierr);
235bc952696SBarry Smith   PetscFunctionReturn(0);
236bc952696SBarry Smith }
237bc952696SBarry Smith 
238bc952696SBarry Smith #undef __FUNCT__
239bc952696SBarry Smith #define __FUNCT__ "TSTrajectoryDestroy"
240bc952696SBarry Smith /*@
241bc952696SBarry Smith    TSTrajectoryDestroy - Destroys a trajectory context
242bc952696SBarry Smith 
243bc952696SBarry Smith    Collective on TSTrajectory
244bc952696SBarry Smith 
245bc952696SBarry Smith    Input Parameter:
246bc952696SBarry Smith .  ts - the TSTrajectory context obtained from TSTrajectoryCreate()
247bc952696SBarry Smith 
248bc952696SBarry Smith    Level: advanced
249bc952696SBarry Smith 
250bc952696SBarry Smith .keywords: TS, timestepper, destroy
251bc952696SBarry Smith 
252bc952696SBarry Smith .seealso: TSCreate(), TSSetUp(), TSSolve()
253bc952696SBarry Smith @*/
254972caf09SHong Zhang PetscErrorCode  TSTrajectoryDestroy(TSTrajectory *tj)
255bc952696SBarry Smith {
256bc952696SBarry Smith   PetscErrorCode ierr;
257bc952696SBarry Smith 
258bc952696SBarry Smith   PetscFunctionBegin;
259972caf09SHong Zhang   if (!*tj) PetscFunctionReturn(0);
260972caf09SHong Zhang   PetscValidHeaderSpecific((*tj),TSTRAJECTORY_CLASSID,1);
261972caf09SHong Zhang   if (--((PetscObject)(*tj))->refct > 0) {*tj = 0; PetscFunctionReturn(0);}
262bc952696SBarry Smith 
263972caf09SHong Zhang   if ((*tj)->ops->destroy) {ierr = (*(*tj)->ops->destroy)((*tj));CHKERRQ(ierr);}
264*aced365eSHong Zhang   ierr = PetscViewerDestroy(&(*tj)->monitor);CHKERRQ(ierr);
265972caf09SHong Zhang   ierr = PetscHeaderDestroy(tj);CHKERRQ(ierr);
266bc952696SBarry Smith   PetscFunctionReturn(0);
267bc952696SBarry Smith }
268bc952696SBarry Smith 
269bc952696SBarry Smith #undef __FUNCT__
270772b2523SBarry Smith #define __FUNCT__ "TSTrajectorySetTypeFromOptions_Private"
271bc952696SBarry Smith /*
272772b2523SBarry Smith   TSTrajectorySetTypeFromOptions_Private - Sets the type of ts from user options.
273bc952696SBarry Smith 
274bc952696SBarry Smith   Collective on TSTrajectory
275bc952696SBarry Smith 
276bc952696SBarry Smith   Input Parameter:
277972caf09SHong Zhang . tj - TSTrajectory
278bc952696SBarry Smith 
279bc952696SBarry Smith   Level: intermediate
280bc952696SBarry Smith 
281bc952696SBarry Smith .keywords: TS, set, options, database, type
282bc952696SBarry Smith .seealso: TSSetFromOptions(), TSSetType()
283bc952696SBarry Smith */
2842bfe6b3fSBarry Smith static PetscErrorCode TSTrajectorySetTypeFromOptions_Private(PetscOptionItems *PetscOptionsObject,TSTrajectory tj,TS ts)
285bc952696SBarry Smith {
286bc952696SBarry Smith   PetscBool      opt;
287bc952696SBarry Smith   const char     *defaultType;
288bc952696SBarry Smith   char           typeName[256];
2899a53571cSHong Zhang   PetscBool      flg;
290bc952696SBarry Smith   PetscErrorCode ierr;
291bc952696SBarry Smith 
292bc952696SBarry Smith   PetscFunctionBegin;
293b1d74d50SHong Zhang   if (((PetscObject)tj)->type_name) defaultType = ((PetscObject)tj)->type_name;
294bc952696SBarry Smith   else defaultType = TSTRAJECTORYBASIC;
295bc952696SBarry Smith 
296560360afSLisandro Dalcin   ierr = TSTrajectoryRegisterAll();CHKERRQ(ierr);
297e210cd0eSHong Zhang   ierr = PetscOptionsFList("-ts_trajectory_type","TSTrajectory method"," TSTrajectorySetType",TSTrajectoryList,defaultType,typeName,256,&opt);CHKERRQ(ierr);
298bc952696SBarry Smith   if (opt) {
299f416af30SBarry Smith     ierr = PetscStrcmp(typeName,TSTRAJECTORYMEMORY,&flg);CHKERRQ(ierr);
300972caf09SHong Zhang     ierr = TSTrajectorySetType(tj,ts,typeName);CHKERRQ(ierr);
301bc952696SBarry Smith   } else {
302972caf09SHong Zhang     ierr = TSTrajectorySetType(tj,ts,defaultType);CHKERRQ(ierr);
303bc952696SBarry Smith   }
304bc952696SBarry Smith   PetscFunctionReturn(0);
305bc952696SBarry Smith }
306bc952696SBarry Smith 
307bc952696SBarry Smith #undef __FUNCT__
308ed695a29SHong Zhang #define __FUNCT__ "TSTrajectorySetMonitor"
309ed695a29SHong Zhang /*@
310ed695a29SHong Zhang    TSTrajectorySetMonitor - Monitor the schedules generated by the checkpointing controller
311ed695a29SHong Zhang 
312ed695a29SHong Zhang    Collective on TSTrajectory
313ed695a29SHong Zhang 
314ed695a29SHong Zhang    Input Arguments:
315ed695a29SHong Zhang +  tj - the TSTrajectory context
316ed695a29SHong Zhang -  flg - PETSC_TRUE to active a monitor, PETSC_FALSE to disable
317ed695a29SHong Zhang 
318ed695a29SHong Zhang    Level: intermediate
319ed695a29SHong Zhang 
320ed695a29SHong Zhang .seealso: TSTrajectorySetType()
321ed695a29SHong Zhang @*/
322ed695a29SHong Zhang PetscErrorCode TSTrajectorySetMonitor(TSTrajectory tj,PetscBool flg)
323ed695a29SHong Zhang {
324ed695a29SHong Zhang   PetscErrorCode ierr;
325ed695a29SHong Zhang 
326ed695a29SHong Zhang   PetscFunctionBegin;
327ed695a29SHong Zhang   PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1);
328ed695a29SHong Zhang   PetscValidLogicalCollectiveBool(tj,flg,2);
329ed695a29SHong Zhang   if (flg) {
330ed695a29SHong Zhang     if (!tj->monitor) {ierr = PetscViewerASCIIOpen(PetscObjectComm((PetscObject)tj),"stdout",&tj->monitor);CHKERRQ(ierr);}
331ed695a29SHong Zhang   } else {
332ed695a29SHong Zhang     ierr = PetscViewerDestroy(&tj->monitor);CHKERRQ(ierr);
333ed695a29SHong Zhang   }
334ed695a29SHong Zhang   PetscFunctionReturn(0);
335ed695a29SHong Zhang }
336ed695a29SHong Zhang 
337ed695a29SHong Zhang #undef __FUNCT__
338bc952696SBarry Smith #define __FUNCT__ "TSTrajectorySetFromOptions"
339bc952696SBarry Smith /*@
340bc952696SBarry Smith    TSTrajectorySetFromOptions - Sets various TSTrajectory parameters from user options.
341bc952696SBarry Smith 
342bc952696SBarry Smith    Collective on TSTrajectory
343bc952696SBarry Smith 
344bc952696SBarry Smith    Input Parameter:
345b1d74d50SHong Zhang .  tj - the TSTrajectory context obtained from TSTrajectoryCreate()
346bc952696SBarry Smith 
347bc952696SBarry Smith    Options Database Keys:
348e210cd0eSHong Zhang .  -ts_trajectory_type <type> - TSTRAJECTORYBASIC
349e210cd0eSHong Zhang .  -ts_trajectory_max_cps <int>
350bc952696SBarry Smith 
351bc952696SBarry Smith    Level: advanced
352bc952696SBarry Smith 
35362b521acSHong Zhang    Notes: This is not normally called directly by users
354bc952696SBarry Smith 
35562b521acSHong Zhang .keywords: TS, timestep, set, options, database, trajectory
356bc952696SBarry Smith 
357bc952696SBarry Smith .seealso: TSGetType(), TSSetSaveTrajectory(), TSGetTrajectory()
358bc952696SBarry Smith @*/
359972caf09SHong Zhang PetscErrorCode  TSTrajectorySetFromOptions(TSTrajectory tj,TS ts)
360bc952696SBarry Smith {
361bc952696SBarry Smith   PetscErrorCode ierr;
362ed695a29SHong Zhang   PetscBool      set,flg;
363bc952696SBarry Smith 
364bc952696SBarry Smith   PetscFunctionBegin;
365b1d74d50SHong Zhang   PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1);
366972caf09SHong Zhang   PetscValidHeaderSpecific(ts,TS_CLASSID,2);
367b1d74d50SHong Zhang   ierr = PetscObjectOptionsBegin((PetscObject)tj);CHKERRQ(ierr);
368972caf09SHong Zhang   ierr = TSTrajectorySetTypeFromOptions_Private(PetscOptionsObject,tj,ts);CHKERRQ(ierr);
369ed695a29SHong Zhang   ierr = PetscOptionsBool("-ts_trajectory_monitor","Print checkpointing schedules","TSTrajectorySetMonitor",tj->monitor ? PETSC_TRUE:PETSC_FALSE,&flg,&set);CHKERRQ(ierr);
370*aced365eSHong Zhang   if (set) {ierr = TSTrajectorySetMonitor(tj,flg);CHKERRQ(ierr);}
37162b521acSHong Zhang   /* Handle specific TS options */
37262b521acSHong Zhang   if (tj->ops->setfromoptions) {
37362b521acSHong Zhang     ierr = (*tj->ops->setfromoptions)(PetscOptionsObject,tj);CHKERRQ(ierr);
37462b521acSHong Zhang   }
375bc952696SBarry Smith   ierr = PetscOptionsEnd();CHKERRQ(ierr);
376bc952696SBarry Smith   PetscFunctionReturn(0);
377bc952696SBarry Smith }
37868bece0bSHong Zhang 
37968bece0bSHong Zhang #undef __FUNCT__
38068bece0bSHong Zhang #define __FUNCT__ "TSTrajectorySetUp"
38168bece0bSHong Zhang /*@
38268bece0bSHong Zhang    TSTrajectorySetUp - Sets up the internal data structures, e.g. stacks, for the later use
38368bece0bSHong Zhang    of a TS trajectory.
38468bece0bSHong Zhang 
38568bece0bSHong Zhang    Collective on TS
38668bece0bSHong Zhang 
38768bece0bSHong Zhang    Input Parameter:
38868bece0bSHong Zhang .  ts - the TS context obtained from TSCreate()
38968bece0bSHong Zhang .  tj - the TS trajectory context
39068bece0bSHong Zhang 
39168bece0bSHong Zhang    Level: advanced
39268bece0bSHong Zhang 
39368bece0bSHong Zhang .keywords: TS, setup, checkpoint
39468bece0bSHong Zhang 
39568bece0bSHong Zhang .seealso: TSSetSaveTrajectory(), TSTrajectoryCreate(), TSTrajectoryDestroy()
39668bece0bSHong Zhang @*/
39768bece0bSHong Zhang PetscErrorCode  TSTrajectorySetUp(TSTrajectory tj,TS ts)
39868bece0bSHong Zhang {
39968bece0bSHong Zhang   PetscErrorCode ierr;
40068bece0bSHong Zhang 
40168bece0bSHong Zhang   PetscFunctionBegin;
40268bece0bSHong Zhang   if (!tj) PetscFunctionReturn(0);
40368bece0bSHong Zhang   PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1);
40468bece0bSHong Zhang   PetscValidHeaderSpecific(ts,TS_CLASSID,2);
40568bece0bSHong Zhang   if (tj->setupcalled) PetscFunctionReturn(0);
40668bece0bSHong Zhang 
40768bece0bSHong Zhang   if (!((PetscObject)tj)->type_name) {
40868bece0bSHong Zhang     ierr = TSTrajectorySetType(tj,ts,TSTRAJECTORYBASIC);CHKERRQ(ierr);
40968bece0bSHong Zhang   }
41068bece0bSHong Zhang   if (tj->ops->setup) {
41168bece0bSHong Zhang     ierr = (*tj->ops->setup)(tj,ts);CHKERRQ(ierr);
41268bece0bSHong Zhang   }
41368bece0bSHong Zhang 
41468bece0bSHong Zhang   tj->setupcalled = PETSC_TRUE;
41553b27ddbSHong Zhang 
41653b27ddbSHong Zhang   /* Set the counters to zero */
4171a5a771fSHong Zhang   tj->recomps    = 0;
41853b27ddbSHong Zhang   tj->diskreads  = 0;
41953b27ddbSHong Zhang   tj->diskwrites = 0;
42068bece0bSHong Zhang   PetscFunctionReturn(0);
42168bece0bSHong Zhang }
422