xref: /petsc/src/ts/trajectory/interface/traj.c (revision df5474d84acec2ff875bba86f2a6ea4a275aaf5c)
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 
21*df5474d8SHong Zhang   Level: developer
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 
83*df5474d8SHong Zhang     Level: developer
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
118bc952696SBarry Smith   TSTrajectoryCreate - This function creates an empty trajectory object used to store the time dependent solution of an ODE/DAE
119bc952696SBarry Smith 
120bc952696SBarry Smith   Collective on MPI_Comm
121bc952696SBarry Smith 
122bc952696SBarry Smith   Input Parameter:
1233c0fce88SHong Zhang . comm - the communicator
124bc952696SBarry Smith 
125bc952696SBarry Smith   Output Parameter:
1263c0fce88SHong Zhang . tj   - the trajectory object
127bc952696SBarry Smith 
128*df5474d8SHong Zhang   Level: developer
129bc952696SBarry Smith 
1303c0fce88SHong Zhang   Notes: Usually one does not call this routine, it is called automatically when one calls TSSetSaveTrajectory().
131bc952696SBarry Smith 
1323c0fce88SHong Zhang .keywords: TS, trajectory, create
1333c0fce88SHong Zhang 
1343c0fce88SHong Zhang .seealso: TSTrajectorySetUp(), TSTrajectoryDestroy(), TSTrajectorySetType()
135bc952696SBarry Smith @*/
136b1d74d50SHong Zhang PetscErrorCode  TSTrajectoryCreate(MPI_Comm comm,TSTrajectory *tj)
137bc952696SBarry Smith {
138bc952696SBarry Smith   TSTrajectory   t;
139bc952696SBarry Smith   PetscErrorCode ierr;
140bc952696SBarry Smith 
141bc952696SBarry Smith   PetscFunctionBegin;
142b1d74d50SHong Zhang   PetscValidPointer(tj,2);
143b1d74d50SHong Zhang   *tj = NULL;
144bc952696SBarry Smith   ierr = TSInitializePackage();CHKERRQ(ierr);
145bc952696SBarry Smith 
14673107ff1SLisandro Dalcin   ierr = PetscHeaderCreate(t,TSTRAJECTORY_CLASSID,"TSTrajectory","Time stepping","TS",comm,TSTrajectoryDestroy,TSTrajectoryView);CHKERRQ(ierr);
14768bece0bSHong Zhang   t->setupcalled = PETSC_FALSE;
148b1d74d50SHong Zhang   *tj = t;
149bc952696SBarry Smith   PetscFunctionReturn(0);
150bc952696SBarry Smith }
151bc952696SBarry Smith 
152bc952696SBarry Smith /*@C
153bc952696SBarry Smith   TSTrajectorySetType - Sets the storage method to be used as in a trajectory
154bc952696SBarry Smith 
155bc952696SBarry Smith   Collective on TS
156bc952696SBarry Smith 
157bc952696SBarry Smith   Input Parameters:
1583c0fce88SHong Zhang + tj   - the TSTrajectory context
1593c0fce88SHong Zhang . ts   - the TS context
1603c0fce88SHong Zhang - type - a known method
161bc952696SBarry Smith 
162bc952696SBarry Smith   Options Database Command:
163e210cd0eSHong Zhang . -ts_trajectory_type <type> - Sets the method; use -help for a list of available methods (for instance, basic)
164bc952696SBarry Smith 
165*df5474d8SHong Zhang    Level: developer
166bc952696SBarry Smith 
1673c0fce88SHong Zhang .keywords: TS, trajectory, timestep, set, type
168bc952696SBarry Smith 
1693c0fce88SHong Zhang .seealso: TS, TSTrajectoryCreate(), TSTrajectorySetFromOptions(), TSTrajectoryDestroy()
170bc952696SBarry Smith 
171bc952696SBarry Smith @*/
172972caf09SHong Zhang PetscErrorCode  TSTrajectorySetType(TSTrajectory tj,TS ts,const TSTrajectoryType type)
173bc952696SBarry Smith {
174972caf09SHong Zhang   PetscErrorCode (*r)(TSTrajectory,TS);
175bc952696SBarry Smith   PetscBool      match;
176bc952696SBarry Smith   PetscErrorCode ierr;
177bc952696SBarry Smith 
178bc952696SBarry Smith   PetscFunctionBegin;
179972caf09SHong Zhang   PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1);
180972caf09SHong Zhang   ierr = PetscObjectTypeCompare((PetscObject)tj,type,&match);CHKERRQ(ierr);
181bc952696SBarry Smith   if (match) PetscFunctionReturn(0);
182bc952696SBarry Smith 
183bc952696SBarry Smith   ierr = PetscFunctionListFind(TSTrajectoryList,type,&r);CHKERRQ(ierr);
184bc952696SBarry Smith   if (!r) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_UNKNOWN_TYPE,"Unknown TSTrajectory type: %s",type);
185972caf09SHong Zhang   if (tj->ops->destroy) {
186972caf09SHong Zhang     ierr = (*(tj)->ops->destroy)(tj);CHKERRQ(ierr);
187bc952696SBarry Smith 
188972caf09SHong Zhang     tj->ops->destroy = NULL;
189bc952696SBarry Smith   }
190972caf09SHong Zhang   ierr = PetscMemzero(tj->ops,sizeof(*tj->ops));CHKERRQ(ierr);
191bc952696SBarry Smith 
192972caf09SHong Zhang   ierr = PetscObjectChangeTypeName((PetscObject)tj,type);CHKERRQ(ierr);
193972caf09SHong Zhang   ierr = (*r)(tj,ts);CHKERRQ(ierr);
194bc952696SBarry Smith   PetscFunctionReturn(0);
195bc952696SBarry Smith }
196bc952696SBarry Smith 
197972caf09SHong Zhang PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Basic(TSTrajectory,TS);
198972caf09SHong Zhang PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Singlefile(TSTrajectory,TS);
1999a53571cSHong Zhang PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Memory(TSTrajectory,TS);
2002b043167SHong Zhang PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Visualization(TSTrajectory,TS);
201bc952696SBarry Smith 
202bc952696SBarry Smith /*@C
203bc952696SBarry Smith   TSTrajectoryRegisterAll - Registers all of the trajectory storage schecmes in the TS package.
204bc952696SBarry Smith 
205bc952696SBarry Smith   Not Collective
206bc952696SBarry Smith 
207*df5474d8SHong Zhang   Level: developer
208bc952696SBarry Smith 
2093c0fce88SHong Zhang .keywords: TS, trajectory, register, all
2103c0fce88SHong Zhang 
2113c0fce88SHong Zhang .seealso: TSTrajectoryRegister()
212bc952696SBarry Smith @*/
213bc952696SBarry Smith PetscErrorCode  TSTrajectoryRegisterAll(void)
214bc952696SBarry Smith {
215bc952696SBarry Smith   PetscErrorCode ierr;
216bc952696SBarry Smith 
217bc952696SBarry Smith   PetscFunctionBegin;
218560360afSLisandro Dalcin   if (TSTrajectoryRegisterAllCalled) PetscFunctionReturn(0);
219bc952696SBarry Smith   TSTrajectoryRegisterAllCalled = PETSC_TRUE;
220bc952696SBarry Smith 
221bc952696SBarry Smith   ierr = TSTrajectoryRegister(TSTRAJECTORYBASIC,TSTrajectoryCreate_Basic);CHKERRQ(ierr);
2221c8c567eSBarry Smith   ierr = TSTrajectoryRegister(TSTRAJECTORYSINGLEFILE,TSTrajectoryCreate_Singlefile);CHKERRQ(ierr);
2239a53571cSHong Zhang   ierr = TSTrajectoryRegister(TSTRAJECTORYMEMORY,TSTrajectoryCreate_Memory);CHKERRQ(ierr);
2242b043167SHong Zhang   ierr = TSTrajectoryRegister(TSTRAJECTORYVISUALIZATION,TSTrajectoryCreate_Visualization);CHKERRQ(ierr);
225bc952696SBarry Smith   PetscFunctionReturn(0);
226bc952696SBarry Smith }
227bc952696SBarry Smith 
228bc952696SBarry Smith /*@
229bc952696SBarry Smith    TSTrajectoryDestroy - Destroys a trajectory context
230bc952696SBarry Smith 
231bc952696SBarry Smith    Collective on TSTrajectory
232bc952696SBarry Smith 
233bc952696SBarry Smith    Input Parameter:
2343c0fce88SHong Zhang .  tj - the TSTrajectory context obtained from TSTrajectoryCreate()
235bc952696SBarry Smith 
236*df5474d8SHong Zhang    Level: developer
237bc952696SBarry Smith 
2383c0fce88SHong Zhang .keywords: TS, trajectory, timestep, destroy
239bc952696SBarry Smith 
2403c0fce88SHong Zhang .seealso: TSTrajectoryCreate(), TSTrajectorySetUp()
241bc952696SBarry Smith @*/
242972caf09SHong Zhang PetscErrorCode  TSTrajectoryDestroy(TSTrajectory *tj)
243bc952696SBarry Smith {
244bc952696SBarry Smith   PetscErrorCode ierr;
245bc952696SBarry Smith 
246bc952696SBarry Smith   PetscFunctionBegin;
247972caf09SHong Zhang   if (!*tj) PetscFunctionReturn(0);
248972caf09SHong Zhang   PetscValidHeaderSpecific((*tj),TSTRAJECTORY_CLASSID,1);
249972caf09SHong Zhang   if (--((PetscObject)(*tj))->refct > 0) {*tj = 0; PetscFunctionReturn(0);}
250bc952696SBarry Smith 
251972caf09SHong Zhang   if ((*tj)->ops->destroy) {ierr = (*(*tj)->ops->destroy)((*tj));CHKERRQ(ierr);}
252aced365eSHong Zhang   ierr = PetscViewerDestroy(&(*tj)->monitor);CHKERRQ(ierr);
253972caf09SHong Zhang   ierr = PetscHeaderDestroy(tj);CHKERRQ(ierr);
254bc952696SBarry Smith   PetscFunctionReturn(0);
255bc952696SBarry Smith }
256bc952696SBarry Smith 
257bc952696SBarry Smith /*
258772b2523SBarry Smith   TSTrajectorySetTypeFromOptions_Private - Sets the type of ts from user options.
259bc952696SBarry Smith 
260bc952696SBarry Smith   Collective on TSTrajectory
261bc952696SBarry Smith 
262bc952696SBarry Smith   Input Parameter:
2633c0fce88SHong Zhang + tj - the TSTrajectory context
2643c0fce88SHong Zhang - ts - the TS context
2653c0fce88SHong Zhang 
2663c0fce88SHong Zhang   Options Database Keys:
2673c0fce88SHong Zhang . -ts_trajectory_type <type> - TSTRAJECTORYBASIC, TSTRAJECTORYMEMORY, TSTRAJECTORYSINGLEFILE, TSTRAJECTORYVISUALIZATION
268bc952696SBarry Smith 
269*df5474d8SHong Zhang   Level: developer
270bc952696SBarry Smith 
2713c0fce88SHong Zhang .keywords: TS, trajectory, set, options, type
2723c0fce88SHong Zhang 
2733c0fce88SHong Zhang .seealso: TSTrajectorySetFromOptions(), TSTrajectorySetType()
274bc952696SBarry Smith */
2752bfe6b3fSBarry Smith static PetscErrorCode TSTrajectorySetTypeFromOptions_Private(PetscOptionItems *PetscOptionsObject,TSTrajectory tj,TS ts)
276bc952696SBarry Smith {
277bc952696SBarry Smith   PetscBool      opt;
278bc952696SBarry Smith   const char     *defaultType;
279bc952696SBarry Smith   char           typeName[256];
2809a53571cSHong Zhang   PetscBool      flg;
281bc952696SBarry Smith   PetscErrorCode ierr;
282bc952696SBarry Smith 
283bc952696SBarry Smith   PetscFunctionBegin;
284b1d74d50SHong Zhang   if (((PetscObject)tj)->type_name) defaultType = ((PetscObject)tj)->type_name;
285bc952696SBarry Smith   else defaultType = TSTRAJECTORYBASIC;
286bc952696SBarry Smith 
287560360afSLisandro Dalcin   ierr = TSTrajectoryRegisterAll();CHKERRQ(ierr);
288e210cd0eSHong Zhang   ierr = PetscOptionsFList("-ts_trajectory_type","TSTrajectory method"," TSTrajectorySetType",TSTrajectoryList,defaultType,typeName,256,&opt);CHKERRQ(ierr);
289bc952696SBarry Smith   if (opt) {
290f416af30SBarry Smith     ierr = PetscStrcmp(typeName,TSTRAJECTORYMEMORY,&flg);CHKERRQ(ierr);
291972caf09SHong Zhang     ierr = TSTrajectorySetType(tj,ts,typeName);CHKERRQ(ierr);
292bc952696SBarry Smith   } else {
293972caf09SHong Zhang     ierr = TSTrajectorySetType(tj,ts,defaultType);CHKERRQ(ierr);
294bc952696SBarry Smith   }
295bc952696SBarry Smith   PetscFunctionReturn(0);
296bc952696SBarry Smith }
297bc952696SBarry Smith 
298ed695a29SHong Zhang /*@
299ed695a29SHong Zhang    TSTrajectorySetMonitor - Monitor the schedules generated by the checkpointing controller
300ed695a29SHong Zhang 
301ed695a29SHong Zhang    Collective on TSTrajectory
302ed695a29SHong Zhang 
303ed695a29SHong Zhang    Input Arguments:
304ed695a29SHong Zhang +  tj - the TSTrajectory context
305ed695a29SHong Zhang -  flg - PETSC_TRUE to active a monitor, PETSC_FALSE to disable
306ed695a29SHong Zhang 
3073c0fce88SHong Zhang    Options Database Keys:
308063c0c7aSHong Zhang .  -ts_trajectory_monitor - print TSTrajectory information
3093c0fce88SHong Zhang 
310*df5474d8SHong Zhang    Level: developer
311ed695a29SHong Zhang 
3123c0fce88SHong Zhang .keywords: TS, trajectory, set, monitor
3133c0fce88SHong Zhang 
3143c0fce88SHong Zhang .seealso: TSTrajectoryCreate(), TSTrajectoryDestroy(), TSTrajectorySetUp()
315ed695a29SHong Zhang @*/
3162bee684fSHong Zhang PetscErrorCode TSTrajectorySetMonitor(TSTrajectory tj,PetscBool flg)
317ed695a29SHong Zhang {
318ed695a29SHong Zhang   PetscErrorCode ierr;
319ed695a29SHong Zhang 
320ed695a29SHong Zhang   PetscFunctionBegin;
321ed695a29SHong Zhang   PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1);
322ed695a29SHong Zhang   PetscValidLogicalCollectiveBool(tj,flg,2);
323ed695a29SHong Zhang   if (flg) {
324ed695a29SHong Zhang     if (!tj->monitor) {ierr = PetscViewerASCIIOpen(PetscObjectComm((PetscObject)tj),"stdout",&tj->monitor);CHKERRQ(ierr);}
325ed695a29SHong Zhang   } else {
326ed695a29SHong Zhang     ierr = PetscViewerDestroy(&tj->monitor);CHKERRQ(ierr);
327ed695a29SHong Zhang   }
328ed695a29SHong Zhang   PetscFunctionReturn(0);
329ed695a29SHong Zhang }
330ed695a29SHong Zhang 
331bc952696SBarry Smith /*@
332bc952696SBarry Smith    TSTrajectorySetFromOptions - Sets various TSTrajectory parameters from user options.
333bc952696SBarry Smith 
334bc952696SBarry Smith    Collective on TSTrajectory
335bc952696SBarry Smith 
336bc952696SBarry Smith    Input Parameter:
3373c0fce88SHong Zhang +  tj - the TSTrajectory context obtained from TSTrajectoryCreate()
3383c0fce88SHong Zhang -  ts - the TS context
339bc952696SBarry Smith 
340bc952696SBarry Smith    Options Database Keys:
3413c0fce88SHong Zhang +  -ts_trajectory_type <type> - TSTRAJECTORYBASIC, TSTRAJECTORYMEMORY, TSTRAJECTORYSINGLEFILE, TSTRAJECTORYVISUALIZATION
342063c0c7aSHong Zhang -  -ts_trajectory_monitor - print TSTrajectory information
343bc952696SBarry Smith 
344*df5474d8SHong Zhang    Level: developer
345bc952696SBarry Smith 
34662b521acSHong Zhang    Notes: This is not normally called directly by users
347bc952696SBarry Smith 
3483c0fce88SHong Zhang .keywords: TS, trajectory, timestep, set, options, database
349bc952696SBarry Smith 
3503c0fce88SHong Zhang .seealso: TSSetSaveTrajectory(), TSTrajectorySetUp()
351bc952696SBarry Smith @*/
352972caf09SHong Zhang PetscErrorCode  TSTrajectorySetFromOptions(TSTrajectory tj,TS ts)
353bc952696SBarry Smith {
354bc952696SBarry Smith   PetscErrorCode ierr;
355ed695a29SHong Zhang   PetscBool      set,flg;
356bc952696SBarry Smith 
357bc952696SBarry Smith   PetscFunctionBegin;
358b1d74d50SHong Zhang   PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1);
359972caf09SHong Zhang   PetscValidHeaderSpecific(ts,TS_CLASSID,2);
360b1d74d50SHong Zhang   ierr = PetscObjectOptionsBegin((PetscObject)tj);CHKERRQ(ierr);
361972caf09SHong Zhang   ierr = TSTrajectorySetTypeFromOptions_Private(PetscOptionsObject,tj,ts);CHKERRQ(ierr);
362ed695a29SHong Zhang   ierr = PetscOptionsBool("-ts_trajectory_monitor","Print checkpointing schedules","TSTrajectorySetMonitor",tj->monitor ? PETSC_TRUE:PETSC_FALSE,&flg,&set);CHKERRQ(ierr);
363aced365eSHong Zhang   if (set) {ierr = TSTrajectorySetMonitor(tj,flg);CHKERRQ(ierr);}
36462b521acSHong Zhang   /* Handle specific TS options */
36562b521acSHong Zhang   if (tj->ops->setfromoptions) {
36662b521acSHong Zhang     ierr = (*tj->ops->setfromoptions)(PetscOptionsObject,tj);CHKERRQ(ierr);
36762b521acSHong Zhang   }
368bc952696SBarry Smith   ierr = PetscOptionsEnd();CHKERRQ(ierr);
369bc952696SBarry Smith   PetscFunctionReturn(0);
370bc952696SBarry Smith }
37168bece0bSHong Zhang 
37268bece0bSHong Zhang /*@
37368bece0bSHong Zhang    TSTrajectorySetUp - Sets up the internal data structures, e.g. stacks, for the later use
37468bece0bSHong Zhang    of a TS trajectory.
37568bece0bSHong Zhang 
37668bece0bSHong Zhang    Collective on TS
37768bece0bSHong Zhang 
37868bece0bSHong Zhang    Input Parameter:
3793c0fce88SHong Zhang +  ts - the TS context obtained from TSCreate()
3803c0fce88SHong Zhang -  tj - the TS trajectory context
38168bece0bSHong Zhang 
382*df5474d8SHong Zhang    Level: developer
38368bece0bSHong Zhang 
3843c0fce88SHong Zhang .keywords: TS, trajectory, setup
38568bece0bSHong Zhang 
38668bece0bSHong Zhang .seealso: TSSetSaveTrajectory(), TSTrajectoryCreate(), TSTrajectoryDestroy()
38768bece0bSHong Zhang @*/
38868bece0bSHong Zhang PetscErrorCode  TSTrajectorySetUp(TSTrajectory tj,TS ts)
38968bece0bSHong Zhang {
39068bece0bSHong Zhang   PetscErrorCode ierr;
39168bece0bSHong Zhang 
39268bece0bSHong Zhang   PetscFunctionBegin;
39368bece0bSHong Zhang   if (!tj) PetscFunctionReturn(0);
39468bece0bSHong Zhang   PetscValidHeaderSpecific(tj,TSTRAJECTORY_CLASSID,1);
39568bece0bSHong Zhang   PetscValidHeaderSpecific(ts,TS_CLASSID,2);
39668bece0bSHong Zhang   if (tj->setupcalled) PetscFunctionReturn(0);
39768bece0bSHong Zhang 
39868bece0bSHong Zhang   if (!((PetscObject)tj)->type_name) {
39968bece0bSHong Zhang     ierr = TSTrajectorySetType(tj,ts,TSTRAJECTORYBASIC);CHKERRQ(ierr);
40068bece0bSHong Zhang   }
40168bece0bSHong Zhang   if (tj->ops->setup) {
40268bece0bSHong Zhang     ierr = (*tj->ops->setup)(tj,ts);CHKERRQ(ierr);
40368bece0bSHong Zhang   }
40468bece0bSHong Zhang 
40568bece0bSHong Zhang   tj->setupcalled = PETSC_TRUE;
40653b27ddbSHong Zhang 
40753b27ddbSHong Zhang   /* Set the counters to zero */
4081a5a771fSHong Zhang   tj->recomps    = 0;
40953b27ddbSHong Zhang   tj->diskreads  = 0;
41053b27ddbSHong Zhang   tj->diskwrites = 0;
41168bece0bSHong Zhang   PetscFunctionReturn(0);
41268bece0bSHong Zhang }
413