CG  Version 25
DomainSolver.h
Go to the documentation of this file.
1 #ifndef EQUATION_DOMAIN_SOLVER_H
2 #define EQUATION_DOMAIN_SOLVER_H
3 
4 #include "Overture.h"
5 #include "GridFunction.h"
6 #include "OgesParameters.h"
7 #include "CompositeGridOperators.h"
9 
10 int
11 checkForSymmetry(realCompositeGridFunction & u, Parameters & parameters, const aString & label,
12  int numberOfGhostLinesToCheck );
13 
14 
15 // --- forward declarations of classes --
16 class Ogen;
17 class Ogmg;
18 class LineSolve;
19 class GridFaceDescriptor;
20 class DialogState;
21 class AdvanceOptions;
22 class AdamsPCData;
23 
24 // Here is the base class for all equation-domain solvers -- these solve a PDE on
25 // a given equation-domain
27 {
28 public:
29 
30 enum
31 {
32  defaultValue=-1234567
33 };
34 
36 {
39 };
40 
41 // Here are options for the DomainSolver::boundaryConditionPredictor
43 {
46 };
47 
48 
50  CompositeGrid & cg, GenericGraphicsInterface *ps=NULL,
51  Ogshow *show=NULL, const int & plotOption=1 );
52 
53 
54 
55 virtual ~DomainSolver();
56 
57 
58 virtual int
59 adaptGrids( GridFunction & gf0,
60  int numberOfGridFunctionsToUpdate=0,
61  realCompositeGridFunction *cgf=NULL,
62  realCompositeGridFunction *uWork =NULL );
63 
64 
65 virtual int
66 addArtificialDissipation( realCompositeGridFunction & u, real dt );
67 virtual int
68 addArtificialDissipation( realMappedGridFunction & u, real dt, int grid );
69 
70 virtual int
72  realCompositeGridFunction &coeff,
73  realCompositeGridFunction &ucur,
74  realCompositeGridFunction &rhs, const int &numberOfComponents);
75 
76 virtual void
77 addForcing(realMappedGridFunction & dvdt, const realMappedGridFunction & u, int iparam[], real rparam[],
78  realMappedGridFunction & dvdtImplicit = Overture::nullRealMappedGridFunction(),
79  realMappedGridFunction *referenceFrameVelocity=NULL);
80 
81 virtual int
82 addGrids();
83 
84 virtual int
85 advance(real & tFinal );
86 
87 virtual void
88 advanceAdamsPredictorCorrector( real & t0, real & dt0, int & numberOfSubSteps, int & init, int initialStep );
89 virtual void
90 advanceAdamsPredictorCorrectorNew( real & t0, real & dt0, int & numberOfSubSteps, int & init, int initialStep );
91 
92 virtual void
93 advanceADI( real & t, real & dt, int & numberOfSubSteps, int & init, int initialStep );
94 
95 void
96 advanceForwardEulerNew( real & t0, real & dt0, int & numberOfSubSteps, int & init, int initialStep );
97 
98 virtual void
99 advanceImplicitMultiStep( real & t0, real & dt0, int & numberOfSubSteps, int & init, int initialStep );
100 
101 virtual void
102 advanceImplicitMultiStepNew( real & t0, real & dt0, int & numberOfSubSteps, int & init, int initialStep );
103 
104 virtual int
105 advanceLineSolve(LineSolve & lineSolve,
106  const int grid, const int direction,
107  realCompositeGridFunction & u0,
108  realMappedGridFunction & f,
109  realMappedGridFunction & residual,
110  const bool refactor,
111  const bool computeTheResidual =false );
112 
113 virtual void
114 advanceMidPoint( real & t0, real & dt0, int & numberOfSubSteps, int initialStep );
115 
116 virtual void
117 advanceNewton( real & t0, real & dt0, int & numberOfSubSteps, int & init, int initialStep );
118 
119 virtual void
120 advanceSecondOrderSystem( real & t0, real & dt0, int & numberOfSubSteps, int & init, int initialStep );
121 
122 virtual void
123 advanceSteadyStateRungeKutta( real & t0, real & dt0, int & numberOfSubSteps, int & init, int initialStep );
124 
125 
126 virtual void
127 advanceTrapezoidal( real & t0, real & dt0, int & numberOfSubSteps, int & init, int initialStep );
128 
129 virtual void
130 advanceVariableTimeStepAdamsPredictorCorrector( real & t0, real & dt0, int & numberOfSubSteps, int & init,
131  int initialStep );
132 
133 virtual void
134 allSpeedImplicitTimeStep(GridFunction & gf, // ** get rid of this **
135  real & t,
136  real & dt0,
137  int & numberOfTimeSteps,
138  const real & nextTimeToPrint );
139 
140 // Here is where boundary conditions are implemented
141 virtual int
143  const int & option =-1,
144  int grid_= -1,
145  GridFunction *puOld=NULL,
146  const real & dt =-1. );
147 
148 virtual int
149 applyBoundaryConditions(const real & t, realMappedGridFunction & u,
150  realMappedGridFunction & gridVelocity,
151  const int & grid,
152  const int & option=-1,
153  realMappedGridFunction *puOld=NULL,
154  realMappedGridFunction *pGridVelocityOld=NULL,
155  const real & dt=-1.);
156 
157 virtual int
159 
160 virtual int
161 applyBoundaryConditionsForImplicitTimeStepping(realMappedGridFunction & u,
162  realMappedGridFunction &uL,
163  realMappedGridFunction & gridVelocity,
164  real t,
165  int scalarSystem,
166  int grid );
167 virtual int
168 assignInitialConditions(int gfIndex);
169 
170 // kkc 101005, added a function to compute the filter
171 virtual int applyFilter(int gfIndex);
172 
173 virtual int
175  const int & option=-1,
176  int grid_ =-1,
177  GridFunction *puOld =NULL,
178  const real & dt=-1.);
179 
180 // virtual void
181 // assignStandardInitialConditions( GridFunction & cgf );
182 
183 virtual void assignTestProblem( GridFunction & gf );
184 
185 virtual void
187 
188 virtual int
190  const AdamsPCData & adamsData,
191  const int orderOfExtrapolation,
192  const int mNew,
193  const int mCur,
194  const int mOld,
195  realCompositeGridFunction *puga=NULL,
196  realCompositeGridFunction *pugb=NULL,
197  realCompositeGridFunction *pugc=NULL,
198  realCompositeGridFunction *pugd=NULL );
199 
200 virtual int
201 buildAdaptiveGridOptionsDialog(DialogData & dialog );
202 
203 virtual int
205 
206 virtual int
207 buildForcingOptionsDialog(DialogData & dialog );
208 
209 virtual int
210 buildGeneralOptionsDialog(DialogData & dialog );
211 
212 virtual int
213 buildGrid( Mapping *&newMapping, int newGridNumber, IntegerArray & sharedBoundaryCondition );
214 
215 virtual int
216 buildOutputOptionsDialog(DialogData & dialog );
217 
218 virtual void
219 buildImplicitSolvers(CompositeGrid & cg);
220 
221 virtual int
222 buildMovingGridOptionsDialog(DialogData & dialog );
223 
224 virtual int
225 buildPlotOptionsDialog(DialogData & dialog );
226 
227 
228 virtual int
230 
231 virtual int
232 buildTimeSteppingDialog(DialogData & dialog );
233 
234 
235 void checkArrays(const aString & label);
236 
237 void
238 checkSolution(const realGridCollectionFunction & u, const aString & title, bool printResults=false );
239 
240 int
241 checkSolution(realMappedGridFunction & u, const aString & title, bool printResults, int grid,
242  real & maxVal, bool printResultsOnFailure=false );
243 
244 virtual void
246 
247 virtual int
248 computeBodyForcing( GridFunction & gf, const real & tForce );
249 
250 virtual void
252  const real & tFinal,
253  const real & nextTimeToPrint,
254  int & numberOfSubSteps,
255  real & dtNew,
256  const bool & adjustTimeStep = true );
257 
258 virtual void
259 correctMovingGrids(const real t1,
260  const real t2,
261  GridFunction & cgf1,
262  GridFunction & cgf2 );
263 
264 const int & debug() const { return parameters.dbase.get<int>("debug");}
265 
266 
267 virtual void
269  const aString & label =nullString );
270 
271 virtual void
272 determineErrors(realCompositeGridFunction & u,
273  realMappedGridFunction **gridVelocity,
274  const real & t,
275  const int options,
276  RealArray & err,
277  const aString & label =nullString );
278 
279 // determine errors if the true solution is known
280 virtual void
281 determineErrors(realMappedGridFunction & v, const real & t);
282 
283 virtual void
284 displayBoundaryConditions(FILE *file = stdout);
285 
286 virtual int
287 displayParameters(FILE *file = stdout );
288 
289 virtual int
290 endTimeStep( real & t0, real & dt0, AdvanceOptions & advanceOptions );
291 
292 // different implementations of endTimeStep:
293 virtual int
294 endTimeStepFE( real & t0, real & dt0, AdvanceOptions & advanceOptions );
295 virtual int
296 endTimeStepIM( real & t0, real & dt0, AdvanceOptions & advanceOptions );
297 virtual int
298 endTimeStepPC( real & t0, real & dt0, AdvanceOptions & advanceOptions );
299 virtual int
300 endTimeStepAF( real & t0, real & dt0, AdvanceOptions & advanceOptions );
301 
302 
303 virtual void
304 eulerStep(const real & t1, const real & t2, const real & t3, const real & dt0,
305  GridFunction & cgf1,
306  GridFunction & cgf2,
307  GridFunction & cgf3,
308  realCompositeGridFunction & ut,
309  realCompositeGridFunction & uti,
310  int stepNumber,
311  int & numberOfSubSteps );
312 
313 void
315 
316 virtual int
317 fixupUnusedPoints( realCompositeGridFunction & u );
318 
319 virtual void
320 formMatrixForImplicitSolve(const real & dt0,
321  GridFunction & cgf1,
322  GridFunction & cgf0 );
323 
324 // virtual int
325 // formImplicitTimeSteppingMatrix(realMappedGridFunction & coeff,
326 // const real & dt0,
327 // int scalarSystem,
328 // realMappedGridFunction & uL,
329 // const int & grid );
330 
331 
332 virtual int
333 getAmrErrorFunction(realCompositeGridFunction & u,
334  real t,
335  intCompositeGridFunction & errorFlag,
336  realCompositeGridFunction & error );
337 
338 virtual int
339 getAmrErrorFunction(realCompositeGridFunction & u,
340  real t,
341  realCompositeGridFunction & error,
342  bool computeOnFinestLevel=false );
343 
344 virtual realCompositeGridFunction &
345 getAugmentedSolution( GridFunction & gf0, realCompositeGridFunction & v );
346 
347 static int
348 getBounds(const realCompositeGridFunction & u,
349  RealArray & uMin,
350  RealArray & uMax,
351  real & uvMax);
352 
353 const aString &
354 getClassName() const;
355 
356 virtual int
357 getAdaptiveGridOption(const aString & answer, DialogData & dialog );
358 
359 virtual int
360 getForcingOption(const aString & command, DialogData & dialog );
361 
362 virtual int
363 getGeneralOption(const aString & answer, DialogData & dialog );
364 
365 virtual void
366 getGridInfo( real & totalNumberOfGridPoints,
367  real dsMin[3], real dsAve[3], real dsMax[3],
368  real & maxMax, real & maxMin, real & minMin );
369 
370 virtual void
371 getGridVelocity( GridFunction & gf0, const real & tGV );
372 
373 
374 virtual int
375 getInitialConditions(const aString & command = nullString,
376  DialogData *interface =NULL,
377  GUIState *guiState = NULL,
378  DialogState *dialogState = NULL );
379 
380 // Return the list of interface data needed by a given interface:
381 virtual int
382 getInterfaceDataOptions( GridFaceDescriptor & info, int & interfaceDataOptions ) const;
383 
384 
385 int
386 getMaterialProperties( GridFunction & solution, realCompositeGridFunction & matProp );
387 
388 real
390 
391 bool
393 
394 virtual int
395 getMovingGridOption(const aString & answer, DialogData & dialog );
396 
397 // name of the DomainSolver (e.g. Solid)
398 const aString &
399 getName() const;
400 
401 static int
402 getOriginalBoundaryConditions(CompositeGrid & cg, IntegerArray & originalBoundaryCondition );
403 
404 virtual int
405 getOutputOption(const aString & command, DialogData & dialog );
406 
407 // name of the PDE (e.g. advection-diffusion)
408 const aString &
409 getPdeName() const;
410 
411 virtual int
412 getPlotOption(const aString & answer, DialogData & dialog );
413 
414 virtual int
415 getResidual( real t, real dt, GridFunction & cgf, realCompositeGridFunction & residual);
416 
417 int
418 getResidualInfo( real t0, const realCompositeGridFunction & residual, real & maximumResidual, real & maximuml2, FILE *file=NULL );
419 
420 virtual void
421 getSolutionBounds(const realMappedGridFunction & u, realArray & uMin, realArray & uMax, real & uvMax);
422 
423 
424 virtual int
426  real t,
427  int grid = 0,
428  int side0 = -1,
429  int axis0 = -1,
431 
432 virtual int
434  const real & t,
435  const int & grid,
436  int side=-1,
437  int axis=-1 );
438 
439 
440 // ===Choose time step====
441 virtual real
443 
444 // determine the time step based on a given solution
445 virtual real
446 getTimeStep(MappedGrid & mg,
447  realMappedGridFunction & u,
448  realMappedGridFunction & gridVelocity,
449  const Parameters::TimeSteppingMethod & timeSteppingMethod,
450  const int & grid );
451 
452 // Re-compute the time-step and number of sub-steps to take
453 int
454 getTimeStepAndNumberOfSubSteps( GridFunction & cgf, int stepNumber, int & numberOfSubSteps, real & dt );
455 
456 // semi-discrete discretization. Lambda is used to determine the time step by requiring
457 // lambda*dt to be in the stability region of the particular time stepping method we are
458 // using
459 virtual void
460 getTimeSteppingEigenvalue(MappedGrid & mg,
461  realMappedGridFunction & u,
462  realMappedGridFunction & gridVelocity,
463  real & reLambda,
464  real & imLambda,
465  const int & grid);
466 
467 virtual int
468 getTimeSteppingOption(const aString & command,
469  DialogData & dialog ) ;
470 
471 virtual void
472 getUt( GridFunction & cgf,
473  const real & t,
474  RealCompositeGridFunction & ut,
475  real tForce );
476 
477 virtual int
478 getUt(const realMappedGridFunction & v,
479  const realMappedGridFunction & gridVelocity,
480  realMappedGridFunction & dvdt,
481  int iparam[], real rparam[],
482  realMappedGridFunction & dvdtImplicit = Overture::nullRealMappedGridFunction(),
483  MappedGrid *pmg2=NULL,
484  const realMappedGridFunction *pGridVelocity2= NULL);
485 
486 
487 virtual void
488 implicitSolve(const real & dt0,
489  GridFunction & cgf1,
490  GridFunction & cgf0);
491 
492 
493 virtual int
495 
496 virtual int
498 
499 virtual int
500 initializeTimeStepping( real & t0, real & dt0 );
501 
502 // different implementations of initializeTimeStepping:
503 virtual int
504 initializeTimeSteppingFE( real & t0, real & dt0 );
505 virtual int
506 initializeTimeSteppingIM( real & t0, real & dt0 );
507 virtual int
508 initializeTimeSteppingPC( real & t0, real & dt0 );
509 virtual int
510 initializeTimeSteppingAF( real & t0, real & dt0 );
511 
512 
513 
514 virtual int
516 
518 {
521 };
522 
523 virtual int
525  int interfaceDataOptions,
526  GridFaceDescriptor & info,
527  GridFaceDescriptor & gfd,
528  int gfIndex, real t );
529 
530 virtual int
531 interpolate( GridFunction & cgf, const Range & R = nullRange );
532 
533 virtual int
535  GridFunction *uOld =NULL,
536  const real & dt =-1. );
537 
538 virtual bool
539 isImplicitMatrixSingular( realCompositeGridFunction &uL );
540 
541 
542 virtual int
543 jetInflow(GridFunction & cgf );
544 
545 virtual void
546 moveGrids(const real & t1,
547  const real & t2,
548  const real & t3,
549  const real & dt0,
550  GridFunction & cgf1,
551  GridFunction & cgf2,
552  GridFunction & cgf3 );
553 
554 virtual bool
556 
557 
558 virtual int
559 newAdaptiveGridBuilt(CompositeGrid & cg, realCompositeGridFunction & u, bool updateSolution );
560 
561 const int & numberOfComponents() const { return parameters.dbase.get<int>("numberOfComponents");}
562 
563 virtual int
564 output( GridFunction & gf0, int stepNumber );
565 
566 virtual void
567 outputHeader();
568 
569 virtual int
570 outputProbes( GridFunction & gf0, int stepNumber );
571 
572 virtual void
573 outputSolution( realCompositeGridFunction & u, const real & t,
574  const aString & label =nullString,
575  int printOption = 0 );
576 
577 virtual void
578 outputSolution( const realMappedGridFunction & u, const real & t );
579 
580 virtual int
582 
583 virtual int
584 plot(const real & t, const int & optionIn, real & tFinal );
585 
586 
587 virtual int
588 printMemoryUsage(FILE *file = stdout );
589 
590 // printF with the DomainSolver name as a prefix (to identify the output).
591 void
592 printP(const char *format, ...) const;
593 
594 virtual int
595 printStatistics(FILE *file = stdout ); // print timing statistics
596 
597 virtual void
598 printTimeStepInfo( const int & step, const real & t, const real & cpuTime );
599 
600 virtual int
601 project(GridFunction & cgf);
602 
603 virtual int
604 readRestartFile(realCompositeGridFunction & v, // this version came from CgSolver
605  real & t,
606  const aString & restartFileName =nullString );
607 
608 virtual int
609 readRestartFile(GridFunction & cgf, const aString & restartFileName =nullString );
610 
611 virtual int
612 saveSequenceInfo( real t0, const realCompositeGridFunction & residual );
613 
614 virtual int
616 
617 virtual int
618 saveRestartFile(const GridFunction & cgf, const aString & restartFileName );
619 
620 virtual void
621 saveShow( GridFunction & gf0 );
622 
623 virtual void
624 saveShowFileComments( Ogshow &show );
625 
626 virtual int
627 setBoundaryConditionsInteractively(const aString & answer,
628  const IntegerArray & originalBoundaryCondition );
629 
630 virtual int
632 
633 virtual int
634 setFinalTime(const real & tFinal);
635 
636 virtual void
637 setInterfacesAtPastTimes(const real & t1,
638  const real & t2,
639  const real & t3,
640  const real & dt0,
641  GridFunction & cgf1,
642  GridFunction & cgf2,
643  GridFunction & cgf3 );
644 
645 virtual int
647 
648 
649 void
650 setName(const aString & name );
651 
652 void
653 setNameOfGridFile( const aString & name );
654 
655 virtual
656 int setOgesBoundaryConditions( GridFunction &cgf, IntegerArray & boundaryConditions, RealArray &boundaryConditionData,
657  const int imp );
658 
659 virtual int
660 setParametersInteractively(bool runSetupOnExit=true);
661 
662 virtual int
663 setPlotTitle(const real &t, const real &dt);
664 
665 virtual void
666 setSensitivity( GUIState & dialog,
667  bool trueOrFalse );
668 
669 virtual int
670 setSolverParameters(const aString & command = nullString,
671  DialogData *interface =NULL );
672 
673 virtual void
674 setup(const real & time = 0.);
675 
676 virtual int
678 
679 virtual int
680 setupPde(aString & reactionName, bool restartChosen, IntegerArray & originalBoundaryCondition);
681 
682 virtual int
684 
685 virtual int
687 
688 virtual int
690 
691 virtual int
692 setVariableBoundaryValues(const real & t,
693  GridFunction & gf0,
694  const int & grid,
695  int side0 = -1,
696  int axis0 = -1,
698 
699 virtual int
700 setVariableMaterialProperties( GridFunction & gf, const real & t );
701 
702 virtual real
703 sizeOf(FILE *file = NULL ) const;
704 
705 virtual void
706 smoothVelocity(GridFunction & cgf,const int numberOfSmooths );
707 
708 virtual int
709 solve();
710 
711 virtual void
712 solveForTimeIndependentVariables( GridFunction & cgf, bool updateSolutionDependentEquations=false );
713 
714 virtual int
715 startTimeStep( real & t0, real & dt0, int & currentGF, int & nextGF, AdvanceOptions & advanceOptions );
716 
717 // different implementations of startTimeStep:
718 virtual int
719 startTimeStepFE( real & t0, real & dt0, int & currentGF, int & nextGF, AdvanceOptions & advanceOptions );
720 virtual int
721 startTimeStepIM( real & t0, real & dt0, int & currentGF, int & nextGF, AdvanceOptions & advanceOptions );
722 virtual int
723 startTimeStepPC( real & t0, real & dt0, int & currentGF, int & nextGF, AdvanceOptions & advanceOptions );
724 virtual int
725 startTimeStepAF( real & t0, real & dt0, int & currentGF, int & nextGF, AdvanceOptions & advanceOptions );
726 
727 
728 //
729 virtual void
730 takeOneStep( real & t, real & dt, int stepNumber, int & numberOfSubSteps );
731 
732 //
733 virtual int
734 takeTimeStep( real & t0, real & dt0, int correction, AdvanceOptions & advanceOptions );
735 
736 // different implementations of takeTimeStep:
737 virtual int
738 takeTimeStepFE( real & t0, real & dt0, int correction, AdvanceOptions & advanceOptions );
739 virtual int
740 takeTimeStepIM( real & t0, real & dt0, int correction, AdvanceOptions & advanceOptions );
741 virtual int
742 takeTimeStepPC( real & t0, real & dt0, int correction, AdvanceOptions & advanceOptions );
743 virtual int
744 takeTimeStepAF( real & t0, real & dt0, int correction, AdvanceOptions & advanceOptions );
745 
746 virtual int
748 
749 virtual void initializeFactorization();
750 
751 virtual int
752 tracking( GridFunction & gf0, int stepNumber );
753 
754 const bool & twilightZoneFlow() const { return parameters.dbase.get<bool>("twilightZoneFlow");}
755 
756 
757 virtual int
758 userDefinedBoundaryValues(const real & t,
759  GridFunction & gf0,
760  const int & grid,
761  int side0 = -1,
762  int axis0 = -1,
764 
765 void virtual
767 
768 virtual int
770  Mapping *&newMapping,
771  int newGridNumber,
772  IntegerArray & sharedBoundaryCondition );
773 
774 virtual int
775 userDefinedForcing( realCompositeGridFunction & f, GridFunction & gf, const real & tForce );
776 
777 virtual void
779 
780 virtual int
781 userDefinedInitialConditions(CompositeGrid & cg, realCompositeGridFunction & u );
782 
783 virtual void
785 
786 virtual int
788 
789 virtual void
791 
792 virtual int
793 userDefinedOutput( GridFunction & gf, int stepNumber );
794 
795 virtual int
796 updateForAdaptiveGrids(CompositeGrid & cg);
797 
798 virtual int
800 
801 virtual int
802 updateForNewTimeStep(GridFunction & gf, const real & dt );
803 
804 virtual int
806 
807 virtual int
808 updateToMatchGrid(CompositeGrid & cg);
809 
810 virtual int
811 updateToMatchNewGrid(CompositeGrid & cgNew,
812  IntegerArray & changes,
813  IntegerArray & sharedBoundaryCondition,
814  GridFunction & gf0 );
815 
816 virtual int
817 updateStateVariables(GridFunction & cgf, int stage=-1 );
818 
819 virtual void
820 updateTimeIndependentVariables(CompositeGrid & cg0, GridFunction & cgf );
821 
822 virtual int
823 updateVariableTimeInterpolation( int newGrid, GridFunction & cgf );
824 
825 virtual int
827 
828 
829 virtual int
831 
832 virtual
833 void writeParameterSummary( FILE * file );
834 
835 // protected:
836 
837 
838  CompositeGrid & cg;
839  // These next objects hold parameters for the two different Oges solvers that may be used.
840  OgesParameters pressureSolverParameters, // for the pressure solve, INS or ASF
842  CompositeGridOperators finiteDifferenceOperators;
843 
844 
846 {
849 };
850 
851 real dt;
852 int numberOfStepsTaken; // count total number of times steps, for statistics
853 
855 
856 GridFunction gf[maximumNumberOfGridFunctionsToUse]; // grid functions for time stepping
857 int current; // gf[current] is the current solution
858 
859 // int globalStepNumber;
860 
863 
864 int numberOfGridFunctionsToUse; // number of entries in gf[] that we use
865 int numberOfExtraFunctionsToUse; // number of entries in fn[] that we use
866 int totalNumberOfArrays; // keep a count of the number of A++ arrays; used to check for leaks
867 realCompositeGridFunction fn[maximumNumberOfExtraFunctionsToUse]; // work arrays for time stepping
868 
869 // These next arrays are for variable time stepping
870 RealArray variableDt; // holds variable dt for each grid.
871 RealArray variableTime; // holds times for different grids
872 realArray *ui; // holds values on interpolation points at different time levels
873 RealArray tv, tvb, tv0;
874 
875 
877 {
883 };
884 
885 
886 realCompositeGridFunction coeff;
887 
889 Oges *implicitSolver; // array of implicit solvers
890 realCompositeGridFunction *implicitCoeff; // coeff matricies for implicit solvers
891 
892 Oges *poisson; // for pressure solve
893 
894 realCompositeGridFunction pressureRightHandSide;
895 realCompositeGridFunction poissonCoefficients;
896 
897 realCompositeGridFunction & p() const{ return *pp;} //
898 realCompositeGridFunction & px() const{ return *ppx;} //
899 realCompositeGridFunction & rL() const{ return *prL;} //
900 realCompositeGridFunction & pL() const{ return *ppL;} //
901 realCompositeGridFunction & rho() const{ return *prho;} //
902 realCompositeGridFunction & gam() const{ return *pgam;} //
903 
904 realCompositeGridFunction *pp,*ppx; // for all-speed
905 realCompositeGridFunction *prL, *ppL, *prho; // for all speed
906 realCompositeGridFunction *pgam; // variable gamma for reactions
907 realCompositeGridFunction *pvIMS, *pwIMS; // for implicit time stepping solve
908 realCompositeGridFunction *previousPressure; // for INS
909 realCompositeGridFunction *puLinearized; // holds linearized solution for implicit time-stepping
910 realMappedGridFunction *pGridVelocityLinearized; // holds linearized grid-velocity for implicit time-stepping
911 
912 LineSolve *pLineSolve; // holds line solver
913 
915 
916 
917 realCompositeGridFunction *pdtVar; // for local time stepping
918 
919 std::vector<real> hMin,hMax;
920 std::vector<real> numberOfGridPoints;
921 std::vector<real> dtv; // dt on each grid
922 
923 std::vector<real> realPartOfEigenvalue;
924 std::vector<real> imaginaryPartOfEigenvalue;
925 
926 int numberSavedToShowFile; // counts number of solutions saved to the show file
927 
928 CG_ApproximateFactorization::FactorList factors; // if there was an "Advance" class it would go there...
929 
930 protected:
931 
932 aString name; // a name given to this object (e.g. "fluid" or "gas")
933 aString className; // class name of this or a derived class
934 aString pdeName; // name of the PDE being solved (e.q. "incompressible Navier Stokes")
935 
937 
938 // pointers to gui dialogs:
940 // for the run-time dialog:
943 
944 private:
945 
946 
947 friend class CgSolver;
948 
949 };
950 
951 #endif