xref: /petsc/src/ts/trajectory/interface/traj.c (revision 78fbdcc8da47d2da69f91a746197bf2bceb22ad2)
1bc952696SBarry Smith 
2af0996ceSBarry Smith #include <petsc/private/tsimpl.h>        /*I "petscts.h"  I*/
3bc952696SBarry Smith 
4bc952696SBarry Smith PetscFunctionList TSTrajectoryList              = NULL;
5bc952696SBarry Smith PetscBool         TSTrajectoryRegisterAllCalled = PETSC_FALSE;
6bc952696SBarry Smith PetscClassId      TSTRAJECTORY_CLASSID;
7d0d044f3SHong Zhang PetscLogEvent     TSTrajectory_Set, TSTrajectory_Get;
8bc952696SBarry Smith 
9bc952696SBarry Smith /*@C
10bc952696SBarry Smith   TSTrajectoryRegister - Adds a way of storing trajectories to the TS package
11bc952696SBarry Smith 
12bc952696SBarry Smith   Not Collective
13bc952696SBarry Smith 
14bc952696SBarry Smith   Input Parameters:
153c0fce88SHong Zhang + name        - the name of a new user-defined creation routine
163c0fce88SHong Zhang - create_func - the creation routine itself
17bc952696SBarry Smith 
18bc952696SBarry Smith   Notes:
19bc952696SBarry Smith   TSTrajectoryRegister() may be called multiple times to add several user-defined tses.
20bc952696SBarry Smith 
21bc952696SBarry Smith   Level: advanced
22bc952696SBarry Smith 
233c0fce88SHong Zhang .keywords: TS, trajectory, timestep, register
24bc952696SBarry Smith 
253c0fce88SHong Zhang .seealso: TSTrajectoryRegisterAll()
26bc952696SBarry Smith @*/
27972caf09SHong Zhang PetscErrorCode TSTrajectoryRegister(const char sname[],PetscErrorCode (*function)(TSTrajectory,TS))
28bc952696SBarry Smith {
29bc952696SBarry Smith   PetscErrorCode ierr;
30bc952696SBarry Smith 
31bc952696SBarry Smith   PetscFunctionBegin;
32bc952696SBarry Smith   ierr = PetscFunctionListAdd(&TSTrajectoryList,sname,function);CHKERRQ(ierr);
33bc952696SBarry Smith   PetscFunctionReturn(0);
34bc952696SBarry Smith }
35bc952696SBarry Smith 
36bc952696SBarry Smith PetscErrorCode TSTrajectorySet(TSTrajectory tj,TS ts,PetscInt stepnum,PetscReal time,Vec X)
37bc952696SBarry Smith {
38bc952696SBarry Smith   PetscErrorCode ierr;
39bc952696SBarry Smith 
40bc952696SBarry Smith   PetscFunctionBegin;
41bc952696SBarry Smith   if (!tj) PetscFunctionReturn(0);
42d0d044f3SHong Zhang   ierr = PetscLogEventBegin(TSTrajectory_Set,tj,ts,0,0);CHKERRQ(ierr);
43bc952696SBarry Smith   ierr = (*tj->ops->set)(tj,ts,stepnum,time,X);CHKERRQ(ierr);
44d0d044f3SHong Zhang   ierr = PetscLogEventEnd(TSTrajectory_Set,tj,ts,0,0);CHKERRQ(ierr);
45bc952696SBarry Smith   PetscFunctionReturn(0);
46bc952696SBarry Smith }
47bc952696SBarry Smith 
48c679fc15SHong Zhang PetscErrorCode TSTrajectoryGet(TSTrajectory tj,TS ts,PetscInt stepnum,PetscReal *time)
49bc952696SBarry Smith {
50bc952696SBarry Smith   PetscErrorCode ierr;
51bc952696SBarry Smith 
52bc952696SBarry Smith   PetscFunctionBegin;
53bc952696SBarry Smith   if (!tj) SETERRQ(PetscObjectComm((PetscObject)ts),PETSC_ERR_ARG_WRONGSTATE,"TS solver did not save trajectory");
54d0d044f3SHong Zhang   ierr = PetscLogEventBegin(TSTrajectory_Get,tj,ts,0,0);CHKERRQ(ierr);
55bc952696SBarry Smith   ierr = (*tj->ops->get)(tj,ts,stepnum,time);CHKERRQ(ierr);
56d0d044f3SHong Zhang   ierr = PetscLogEventEnd(TSTrajectory_Get,tj,ts,0,0);CHKERRQ(ierr);
57bc952696SBarry Smith   PetscFunctionReturn(0);
58bc952696SBarry Smith }
59bc952696SBarry Smith 
60bc952696SBarry Smith /*@C
61bc952696SBarry Smith     TSTrajectoryView - Prints information about the trajectory object
62bc952696SBarry Smith 
63bc952696SBarry Smith     Collective on TSTrajectory
64bc952696SBarry Smith 
65bc952696SBarry Smith     Input Parameters:
66b1d74d50SHong Zhang +   tj - the TSTrajectory context obtained from TSTrajectoryCreate()
67bc952696SBarry Smith -   viewer - visualization context
68bc952696SBarry Smith 
69bc952696SBarry Smith     Options Database Key:
70e210cd0eSHong Zhang .   -ts_trajectory_view - calls TSTrajectoryView() at end of TSAdjointStep()
71bc952696SBarry Smith 
72bc952696SBarry Smith     Notes:
73bc952696SBarry Smith     The available visualization contexts include
74bc952696SBarry Smith +     PETSC_VIEWER_STDOUT_SELF - standard output (default)
75bc952696SBarry Smith -     PETSC_VIEWER_STDOUT_WORLD - synchronized standard
76bc952696SBarry Smith          output where only the first processor opens
77bc952696SBarry Smith          the file.  All other processors send their
78bc952696SBarry Smith          data to the first processor to print.
79bc952696SBarry Smith 
80bc952696SBarry Smith     The user can open an alternative visualization context with
81bc952696SBarry Smith     PetscViewerASCIIOpen() - output to a specified file.
82bc952696SBarry Smith 
83bc952696SBarry Smith     Level: beginner
84bc952696SBarry Smith 
853c0fce88SHong Zhang .keywords: TS, trajectory, timestep, view
86bc952696SBarry Smith 
87bc952696SBarry Smith .seealso: PetscViewerASCIIOpen()
88bc952696SBarry Smith @*/
89b1d74d50SHong Zhang PetscErrorCode  TSTrajectoryView(TSTrajectory tj,PetscViewer viewer)
90bc952696SBarry Smith {
91bc952696SBarry Smith   PetscErrorCode ierr;
92bc952696SBarry Smith   PetscBool      iascii;
93bc952696SBarry Smith 
94bc952696SBarry Smith   PetscFunctionBegin;
951a5a771fSHong Zhang   PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1);
96bc952696SBarry Smith   if (!viewer) {
97b1d74d50SHong Zhang     ierr = PetscViewerASCIIGetStdout(PetscObjectComm((PetscObject)tj),&viewer);CHKERRQ(ierr);
98bc952696SBarry Smith   }
99bc952696SBarry Smith   PetscValidHeaderSpecific(viewer,PETSC_VIEWER_CLASSID,2);
100b1d74d50SHong Zhang   PetscCheckSameComm(tj,1,viewer,2);
101bc952696SBarry Smith 
102bc952696SBarry Smith   ierr = PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&iascii);CHKERRQ(ierr);
103bc952696SBarry Smith   if (iascii) {
104b1d74d50SHong Zhang     ierr = PetscObjectPrintClassNamePrefixType((PetscObject)tj,viewer);CHKERRQ(ierr);
1051a5a771fSHong Zhang     ierr = PetscViewerASCIIPrintf(viewer,"  total number of recomputations for adjoint calculation = %D\n",tj->recomps);CHKERRQ(ierr);
10653b27ddbSHong Zhang     ierr = PetscViewerASCIIPrintf(viewer,"  disk checkpoint reads = %D\n",tj->diskreads);CHKERRQ(ierr);
10753b27ddbSHong Zhang     ierr = PetscViewerASCIIPrintf(viewer,"  disk checkpoint writes = %D\n",tj->diskwrites);CHKERRQ(ierr);
108b1d74d50SHong Zhang     if (tj->ops->view) {
109285336bfSHong Zhang       ierr = PetscViewerASCIIPushTab(viewer);CHKERRQ(ierr);
110b1d74d50SHong Zhang       ierr = (*tj->ops->view)(tj,viewer);CHKERRQ(ierr);
111285336bfSHong Zhang       ierr = PetscViewerASCIIPopTab(viewer);CHKERRQ(ierr);
112bc952696SBarry Smith     }
113bc952696SBarry Smith   }
114bc952696SBarry Smith   PetscFunctionReturn(0);
115bc952696SBarry Smith }
116bc952696SBarry Smith 
117bc952696SBarry Smith /*@C
118*78fbdcc8SBarry Smith    TSTrajectorySetVariableNames - Sets the name of each component in the solution vector so that it may be saved with the trajectory
119*78fbdcc8SBarry Smith 
120*78fbdcc8SBarry Smith    Collective on TSTrajectory
121*78fbdcc8SBarry Smith 
122*78fbdcc8SBarry Smith    Input Parameters:
123*78fbdcc8SBarry Smith +  tr - the trajectory context
124*78fbdcc8SBarry Smith -  names - the names of the components, final string must be NULL
125*78fbdcc8SBarry Smith 
126*78fbdcc8SBarry Smith    Level: intermediate
127*78fbdcc8SBarry Smith 
128*78fbdcc8SBarry Smith .keywords: TS, TSTrajectory, vector, monitor, view
129*78fbdcc8SBarry Smith 
130*78fbdcc8SBarry Smith .seealso: TSTrajectory, TSGetTrajectory()
131*78fbdcc8SBarry Smith @*/
132*78fbdcc8SBarry Smith PetscErrorCode  TSTrajectorySetVariableNames(TSTrajectory ctx,const char * const *names)
133*78fbdcc8SBarry Smith {
134*78fbdcc8SBarry Smith   PetscErrorCode    ierr;
135*78fbdcc8SBarry Smith 
136*78fbdcc8SBarry Smith   PetscFunctionBegin;
137*78fbdcc8SBarry Smith   ierr = PetscStrArrayDestroy(&ctx->names);CHKERRQ(ierr);
138*78fbdcc8SBarry Smith   ierr = PetscStrArrayallocpy(names,&ctx->names);CHKERRQ(ierr);
139*78fbdcc8SBarry Smith   PetscFunctionReturn(0);
140*78fbdcc8SBarry Smith }
141*78fbdcc8SBarry Smith 
142*78fbdcc8SBarry Smith /*@C
143bc952696SBarry Smith   TSTrajectoryCreate - This function creates an empty trajectory object used to store the time dependent solution of an ODE/DAE
144bc952696SBarry Smith 
145bc952696SBarry Smith   Collective on MPI_Comm
146bc952696SBarry Smith 
147bc952696SBarry Smith   Input Parameter:
1483c0fce88SHong Zhang . comm - the communicator
149bc952696SBarry Smith 
150bc952696SBarry Smith   Output Parameter:
1513c0fce88SHong Zhang . tj   - the trajectory object
152bc952696SBarry Smith 
153bc952696SBarry Smith   Level: advanced
154bc952696SBarry Smith 
1553c0fce88SHong Zhang   Notes: Usually one does not call this routine, it is called automatically when one calls TSSetSaveTrajectory().
156bc952696SBarry Smith 
1573c0fce88SHong Zhang .keywords: TS, trajectory, create
1583c0fce88SHong Zhang 
159*78fbdcc8SBarry Smith .seealso: TSTrajectorySetUp(), TSTrajectoryDestroy(), TSTrajectorySetType(), TSTrajectorySetVariableNames(), TSGetTrajectory()
160bc952696SBarry Smith @*/
161b1d74d50SHong Zhang PetscErrorCode  TSTrajectoryCreate(MPI_Comm comm,TSTrajectory *tj)
162bc952696SBarry Smith {
163bc952696SBarry Smith   TSTrajectory   t;
164bc952696SBarry Smith   PetscErrorCode ierr;
165bc952696SBarry Smith 
166bc952696SBarry Smith   PetscFunctionBegin;
167b1d74d50SHong Zhang   PetscValidPointer(tj,2);
168b1d74d50SHong Zhang   *tj = NULL;
169bc952696SBarry Smith   ierr = TSInitializePackage();CHKERRQ(ierr);
170bc952696SBarry Smith 
17173107ff1SLisandro Dalcin   ierr = PetscHeaderCreate(t,TSTRAJECTORY_CLASSID,"TSTrajectory","Time stepping","TS",comm,TSTrajectoryDestroy,TSTrajectoryView);CHKERRQ(ierr);
17268bece0bSHong Zhang   t->setupcalled = PETSC_FALSE;
173b1d74d50SHong Zhang   *tj = t;
174bc952696SBarry Smith   PetscFunctionReturn(0);
175bc952696SBarry Smith }
176bc952696SBarry Smith 
177bc952696SBarry Smith /*@C
178bc952696SBarry Smith   TSTrajectorySetType - Sets the storage method to be used as in a trajectory
179bc952696SBarry Smith 
180bc952696SBarry Smith   Collective on TS
181bc952696SBarry Smith 
182bc952696SBarry Smith   Input Parameters:
1833c0fce88SHong Zhang + tj   - the TSTrajectory context
1843c0fce88SHong Zhang . ts   - the TS context
1853c0fce88SHong Zhang - type - a known method
186bc952696SBarry Smith 
187bc952696SBarry Smith   Options Database Command:
188e210cd0eSHong Zhang . -ts_trajectory_type <type> - Sets the method; use -help for a list of available methods (for instance, basic)
189bc952696SBarry Smith 
190bc952696SBarry Smith    Level: intermediate
191bc952696SBarry Smith 
1923c0fce88SHong Zhang .keywords: TS, trajectory, timestep, set, type
193bc952696SBarry Smith 
1943c0fce88SHong Zhang .seealso: TS, TSTrajectoryCreate(), TSTrajectorySetFromOptions(), TSTrajectoryDestroy()
195bc952696SBarry Smith 
196bc952696SBarry Smith @*/
197972caf09SHong Zhang PetscErrorCode  TSTrajectorySetType(TSTrajectory tj,TS ts,const TSTrajectoryType type)
198bc952696SBarry Smith {
199972caf09SHong Zhang   PetscErrorCode (*r)(TSTrajectory,TS);
200bc952696SBarry Smith   PetscBool      match;
201bc952696SBarry Smith   PetscErrorCode ierr;
202bc952696SBarry Smith 
203bc952696SBarry Smith   PetscFunctionBegin;
204972caf09SHong Zhang   PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1);
205972caf09SHong Zhang   ierr = PetscObjectTypeCompare((PetscObject)tj,type,&match);CHKERRQ(ierr);
206bc952696SBarry Smith   if (match) PetscFunctionReturn(0);
207bc952696SBarry Smith 
208bc952696SBarry Smith   ierr = PetscFunctionListFind(TSTrajectoryList,type,&r);CHKERRQ(ierr);
209bc952696SBarry Smith   if (!r) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_UNKNOWN_TYPE,"Unknown TSTrajectory type: %s",type);
210972caf09SHong Zhang   if (tj->ops->destroy) {
211972caf09SHong Zhang     ierr = (*(tj)->ops->destroy)(tj);CHKERRQ(ierr);
212bc952696SBarry Smith 
213972caf09SHong Zhang     tj->ops->destroy = NULL;
214bc952696SBarry Smith   }
215972caf09SHong Zhang   ierr = PetscMemzero(tj->ops,sizeof(*tj->ops));CHKERRQ(ierr);
216bc952696SBarry Smith 
217972caf09SHong Zhang   ierr = PetscObjectChangeTypeName((PetscObject)tj,type);CHKERRQ(ierr);
218972caf09SHong Zhang   ierr = (*r)(tj,ts);CHKERRQ(ierr);
219bc952696SBarry Smith   PetscFunctionReturn(0);
220bc952696SBarry Smith }
221bc952696SBarry Smith 
222972caf09SHong Zhang PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Basic(TSTrajectory,TS);
223972caf09SHong Zhang PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Singlefile(TSTrajectory,TS);
2249a53571cSHong Zhang PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Memory(TSTrajectory,TS);
2252b043167SHong Zhang PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Visualization(TSTrajectory,TS);
226bc952696SBarry Smith 
227bc952696SBarry Smith /*@C
228bc952696SBarry Smith   TSTrajectoryRegisterAll - Registers all of the trajectory storage schecmes in the TS package.
229bc952696SBarry Smith 
230bc952696SBarry Smith   Not Collective
231bc952696SBarry Smith 
232bc952696SBarry Smith   Level: advanced
233bc952696SBarry Smith 
2343c0fce88SHong Zhang .keywords: TS, trajectory, register, all
2353c0fce88SHong Zhang 
2363c0fce88SHong Zhang .seealso: TSTrajectoryRegister()
237bc952696SBarry Smith @*/
238bc952696SBarry Smith PetscErrorCode  TSTrajectoryRegisterAll(void)
239bc952696SBarry Smith {
240bc952696SBarry Smith   PetscErrorCode ierr;
241bc952696SBarry Smith 
242bc952696SBarry Smith   PetscFunctionBegin;
243560360afSLisandro Dalcin   if (TSTrajectoryRegisterAllCalled) PetscFunctionReturn(0);
244bc952696SBarry Smith   TSTrajectoryRegisterAllCalled = PETSC_TRUE;
245bc952696SBarry Smith 
246bc952696SBarry Smith   ierr = TSTrajectoryRegister(TSTRAJECTORYBASIC,TSTrajectoryCreate_Basic);CHKERRQ(ierr);
2471c8c567eSBarry Smith   ierr = TSTrajectoryRegister(TSTRAJECTORYSINGLEFILE,TSTrajectoryCreate_Singlefile);CHKERRQ(ierr);
2489a53571cSHong Zhang   ierr = TSTrajectoryRegister(TSTRAJECTORYMEMORY,TSTrajectoryCreate_Memory);CHKERRQ(ierr);
2492b043167SHong Zhang   ierr = TSTrajectoryRegister(TSTRAJECTORYVISUALIZATION,TSTrajectoryCreate_Visualization);CHKERRQ(ierr);
250bc952696SBarry Smith   PetscFunctionReturn(0);
251bc952696SBarry Smith }
252bc952696SBarry Smith 
253bc952696SBarry Smith /*@
254bc952696SBarry Smith    TSTrajectoryDestroy - Destroys a trajectory context
255bc952696SBarry Smith 
256bc952696SBarry Smith    Collective on TSTrajectory
257bc952696SBarry Smith 
258bc952696SBarry Smith    Input Parameter:
2593c0fce88SHong Zhang .  tj - the TSTrajectory context obtained from TSTrajectoryCreate()
260bc952696SBarry Smith 
261bc952696SBarry Smith    Level: advanced
262bc952696SBarry Smith 
2633c0fce88SHong Zhang .keywords: TS, trajectory, timestep, destroy
264bc952696SBarry Smith 
2653c0fce88SHong Zhang .seealso: TSTrajectoryCreate(), TSTrajectorySetUp()
266bc952696SBarry Smith @*/
267972caf09SHong Zhang PetscErrorCode  TSTrajectoryDestroy(TSTrajectory *tj)
268bc952696SBarry Smith {
269bc952696SBarry Smith   PetscErrorCode ierr;
270bc952696SBarry Smith 
271bc952696SBarry Smith   PetscFunctionBegin;
272972caf09SHong Zhang   if (!*tj) PetscFunctionReturn(0);
273972caf09SHong Zhang   PetscValidHeaderSpecific((*tj),TSTRAJECTORY_CLASSID,1);
274972caf09SHong Zhang   if (--((PetscObject)(*tj))->refct > 0) {*tj = 0; PetscFunctionReturn(0);}
275bc952696SBarry Smith 
276972caf09SHong Zhang   if ((*tj)->ops->destroy) {ierr = (*(*tj)->ops->destroy)((*tj));CHKERRQ(ierr);}
277aced365eSHong Zhang   ierr = PetscViewerDestroy(&(*tj)->monitor);CHKERRQ(ierr);
278*78fbdcc8SBarry Smith   ierr = PetscStrArrayDestroy(&(*tj)->names);CHKERRQ(ierr);
279972caf09SHong Zhang   ierr = PetscHeaderDestroy(tj);CHKERRQ(ierr);
280bc952696SBarry Smith   PetscFunctionReturn(0);
281bc952696SBarry Smith }
282bc952696SBarry Smith 
283bc952696SBarry Smith /*
284772b2523SBarry Smith   TSTrajectorySetTypeFromOptions_Private - Sets the type of ts from user options.
285bc952696SBarry Smith 
286bc952696SBarry Smith   Collective on TSTrajectory
287bc952696SBarry Smith 
288bc952696SBarry Smith   Input Parameter:
2893c0fce88SHong Zhang + tj - the TSTrajectory context
2903c0fce88SHong Zhang - ts - the TS context
2913c0fce88SHong Zhang 
2923c0fce88SHong Zhang   Options Database Keys:
2933c0fce88SHong Zhang . -ts_trajectory_type <type> - TSTRAJECTORYBASIC, TSTRAJECTORYMEMORY, TSTRAJECTORYSINGLEFILE, TSTRAJECTORYVISUALIZATION
294bc952696SBarry Smith 
295bc952696SBarry Smith   Level: intermediate
296bc952696SBarry Smith 
2973c0fce88SHong Zhang .keywords: TS, trajectory, set, options, type
2983c0fce88SHong Zhang 
2993c0fce88SHong Zhang .seealso: TSTrajectorySetFromOptions(), TSTrajectorySetType()
300bc952696SBarry Smith */
3012bfe6b3fSBarry Smith static PetscErrorCode TSTrajectorySetTypeFromOptions_Private(PetscOptionItems *PetscOptionsObject,TSTrajectory tj,TS ts)
302bc952696SBarry Smith {
303bc952696SBarry Smith   PetscBool      opt;
304bc952696SBarry Smith   const char     *defaultType;
305bc952696SBarry Smith   char           typeName[256];
3069a53571cSHong Zhang   PetscBool      flg;
307bc952696SBarry Smith   PetscErrorCode ierr;
308bc952696SBarry Smith 
309bc952696SBarry Smith   PetscFunctionBegin;
310b1d74d50SHong Zhang   if (((PetscObject)tj)->type_name) defaultType = ((PetscObject)tj)->type_name;
311bc952696SBarry Smith   else defaultType = TSTRAJECTORYBASIC;
312bc952696SBarry Smith 
313560360afSLisandro Dalcin   ierr = TSTrajectoryRegisterAll();CHKERRQ(ierr);
314e210cd0eSHong Zhang   ierr = PetscOptionsFList("-ts_trajectory_type","TSTrajectory method"," TSTrajectorySetType",TSTrajectoryList,defaultType,typeName,256,&opt);CHKERRQ(ierr);
315bc952696SBarry Smith   if (opt) {
316f416af30SBarry Smith     ierr = PetscStrcmp(typeName,TSTRAJECTORYMEMORY,&flg);CHKERRQ(ierr);
317972caf09SHong Zhang     ierr = TSTrajectorySetType(tj,ts,typeName);CHKERRQ(ierr);
318bc952696SBarry Smith   } else {
319972caf09SHong Zhang     ierr = TSTrajectorySetType(tj,ts,defaultType);CHKERRQ(ierr);
320bc952696SBarry Smith   }
321bc952696SBarry Smith   PetscFunctionReturn(0);
322bc952696SBarry Smith }
323bc952696SBarry Smith 
324ed695a29SHong Zhang /*@
325ed695a29SHong Zhang    TSTrajectorySetMonitor - Monitor the schedules generated by the checkpointing controller
326ed695a29SHong Zhang 
327ed695a29SHong Zhang    Collective on TSTrajectory
328ed695a29SHong Zhang 
329ed695a29SHong Zhang    Input Arguments:
330ed695a29SHong Zhang +  tj - the TSTrajectory context
331ed695a29SHong Zhang -  flg - PETSC_TRUE to active a monitor, PETSC_FALSE to disable
332ed695a29SHong Zhang 
3333c0fce88SHong Zhang    Options Database Keys:
334063c0c7aSHong Zhang .  -ts_trajectory_monitor - print TSTrajectory information
3353c0fce88SHong Zhang 
336ed695a29SHong Zhang    Level: intermediate
337ed695a29SHong Zhang 
3383c0fce88SHong Zhang .keywords: TS, trajectory, set, monitor
3393c0fce88SHong Zhang 
3403c0fce88SHong Zhang .seealso: TSTrajectoryCreate(), TSTrajectoryDestroy(), TSTrajectorySetUp()
341ed695a29SHong Zhang @*/
3422bee684fSHong Zhang PetscErrorCode TSTrajectorySetMonitor(TSTrajectory tj,PetscBool flg)
343ed695a29SHong Zhang {
344ed695a29SHong Zhang   PetscErrorCode ierr;
345ed695a29SHong Zhang 
346ed695a29SHong Zhang   PetscFunctionBegin;
347ed695a29SHong Zhang   PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1);
348ed695a29SHong Zhang   PetscValidLogicalCollectiveBool(tj,flg,2);
349ed695a29SHong Zhang   if (flg) {
350ed695a29SHong Zhang     if (!tj->monitor) {ierr = PetscViewerASCIIOpen(PetscObjectComm((PetscObject)tj),"stdout",&tj->monitor);CHKERRQ(ierr);}
351ed695a29SHong Zhang   } else {
352ed695a29SHong Zhang     ierr = PetscViewerDestroy(&tj->monitor);CHKERRQ(ierr);
353ed695a29SHong Zhang   }
354ed695a29SHong Zhang   PetscFunctionReturn(0);
355ed695a29SHong Zhang }
356ed695a29SHong Zhang 
357bc952696SBarry Smith /*@
358bc952696SBarry Smith    TSTrajectorySetFromOptions - Sets various TSTrajectory parameters from user options.
359bc952696SBarry Smith 
360bc952696SBarry Smith    Collective on TSTrajectory
361bc952696SBarry Smith 
362bc952696SBarry Smith    Input Parameter:
3633c0fce88SHong Zhang +  tj - the TSTrajectory context obtained from TSTrajectoryCreate()
3643c0fce88SHong Zhang -  ts - the TS context
365bc952696SBarry Smith 
366bc952696SBarry Smith    Options Database Keys:
3673c0fce88SHong Zhang +  -ts_trajectory_type <type> - TSTRAJECTORYBASIC, TSTRAJECTORYMEMORY, TSTRAJECTORYSINGLEFILE, TSTRAJECTORYVISUALIZATION
368063c0c7aSHong Zhang -  -ts_trajectory_monitor - print TSTrajectory information
369bc952696SBarry Smith 
370bc952696SBarry Smith    Level: advanced
371bc952696SBarry Smith 
37262b521acSHong Zhang    Notes: This is not normally called directly by users
373bc952696SBarry Smith 
3743c0fce88SHong Zhang .keywords: TS, trajectory, timestep, set, options, database
375bc952696SBarry Smith 
3763c0fce88SHong Zhang .seealso: TSSetSaveTrajectory(), TSTrajectorySetUp()
377bc952696SBarry Smith @*/
378972caf09SHong Zhang PetscErrorCode  TSTrajectorySetFromOptions(TSTrajectory tj,TS ts)
379bc952696SBarry Smith {
380bc952696SBarry Smith   PetscErrorCode ierr;
381ed695a29SHong Zhang   PetscBool      set,flg;
382bc952696SBarry Smith 
383bc952696SBarry Smith   PetscFunctionBegin;
384b1d74d50SHong Zhang   PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1);
385972caf09SHong Zhang   PetscValidHeaderSpecific(ts,TS_CLASSID,2);
386b1d74d50SHong Zhang   ierr = PetscObjectOptionsBegin((PetscObject)tj);CHKERRQ(ierr);
387972caf09SHong Zhang   ierr = TSTrajectorySetTypeFromOptions_Private(PetscOptionsObject,tj,ts);CHKERRQ(ierr);
388ed695a29SHong Zhang   ierr = PetscOptionsBool("-ts_trajectory_monitor","Print checkpointing schedules","TSTrajectorySetMonitor",tj->monitor ? PETSC_TRUE:PETSC_FALSE,&flg,&set);CHKERRQ(ierr);
389aced365eSHong Zhang   if (set) {ierr = TSTrajectorySetMonitor(tj,flg);CHKERRQ(ierr);}
39062b521acSHong Zhang   /* Handle specific TS options */
39162b521acSHong Zhang   if (tj->ops->setfromoptions) {
39262b521acSHong Zhang     ierr = (*tj->ops->setfromoptions)(PetscOptionsObject,tj);CHKERRQ(ierr);
39362b521acSHong Zhang   }
394bc952696SBarry Smith   ierr = PetscOptionsEnd();CHKERRQ(ierr);
395bc952696SBarry Smith   PetscFunctionReturn(0);
396bc952696SBarry Smith }
39768bece0bSHong Zhang 
39868bece0bSHong Zhang /*@
39968bece0bSHong Zhang    TSTrajectorySetUp - Sets up the internal data structures, e.g. stacks, for the later use
40068bece0bSHong Zhang    of a TS trajectory.
40168bece0bSHong Zhang 
40268bece0bSHong Zhang    Collective on TS
40368bece0bSHong Zhang 
40468bece0bSHong Zhang    Input Parameter:
4053c0fce88SHong Zhang +  ts - the TS context obtained from TSCreate()
4063c0fce88SHong Zhang -  tj - the TS trajectory context
40768bece0bSHong Zhang 
40868bece0bSHong Zhang    Level: advanced
40968bece0bSHong Zhang 
4103c0fce88SHong Zhang .keywords: TS, trajectory, setup
41168bece0bSHong Zhang 
41268bece0bSHong Zhang .seealso: TSSetSaveTrajectory(), TSTrajectoryCreate(), TSTrajectoryDestroy()
41368bece0bSHong Zhang @*/
41468bece0bSHong Zhang PetscErrorCode  TSTrajectorySetUp(TSTrajectory tj,TS ts)
41568bece0bSHong Zhang {
41668bece0bSHong Zhang   PetscErrorCode ierr;
41768bece0bSHong Zhang 
41868bece0bSHong Zhang   PetscFunctionBegin;
41968bece0bSHong Zhang   if (!tj) PetscFunctionReturn(0);
42068bece0bSHong Zhang   PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1);
42168bece0bSHong Zhang   PetscValidHeaderSpecific(ts,TS_CLASSID,2);
42268bece0bSHong Zhang   if (tj->setupcalled) PetscFunctionReturn(0);
42368bece0bSHong Zhang 
42468bece0bSHong Zhang   if (!((PetscObject)tj)->type_name) {
42568bece0bSHong Zhang     ierr = TSTrajectorySetType(tj,ts,TSTRAJECTORYBASIC);CHKERRQ(ierr);
42668bece0bSHong Zhang   }
42768bece0bSHong Zhang   if (tj->ops->setup) {
42868bece0bSHong Zhang     ierr = (*tj->ops->setup)(tj,ts);CHKERRQ(ierr);
42968bece0bSHong Zhang   }
43068bece0bSHong Zhang 
43168bece0bSHong Zhang   tj->setupcalled = PETSC_TRUE;
43253b27ddbSHong Zhang 
43353b27ddbSHong Zhang   /* Set the counters to zero */
4341a5a771fSHong Zhang   tj->recomps    = 0;
43553b27ddbSHong Zhang   tj->diskreads  = 0;
43653b27ddbSHong Zhang   tj->diskwrites = 0;
43768bece0bSHong Zhang   PetscFunctionReturn(0);
43868bece0bSHong Zhang }
439