source: issm/trunk/src/c/solutions/prognostic2.cpp@ 4236

Last change on this file since 4236 was 4236, checked in by Eric.Larour, 15 years ago

New Container directory, with the format DataSet files. Split the header files from DataSet.h into Inputs.h, Elements.h, etc ...

File size: 3.5 KB
Line 
1/*!\file: prognostic2.cpp
2 * \brief: prognostic2 solution
3 */
4
5#ifdef HAVE_CONFIG_H
6 #include "config.h"
7#else
8#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
9#endif
10
11#include "../objects/objects.h"
12#include "../shared/shared.h"
13#include "../Container/Container.h"
14#include "../EnumDefinitions/EnumDefinitions.h"
15#include "../include/include.h"
16#include "../modules/modules.h"
17#include "./solutions.h"
18
19int main(int argc,char* *argv){
20
21 /*I/O: */
22 FILE* fid=NULL;
23 char* inputfilename=NULL;
24 char* outputfilename=NULL;
25 char* lockname=NULL;
26 bool qmu_analysis=false;
27 bool waitonlock=false;
28
29 /*FemModel: */
30 FemModel* femmodel=NULL;
31
32 /*time*/
33 double start, finish;
34 double start_core, finish_core;
35 double start_init, finish_init;
36
37 int analyses[1]={Prognostic2AnalysisEnum};
38 int solution_type=Prognostic2AnalysisEnum;
39
40 MODULEBOOT();
41
42 #if !defined(_PARALLEL_) || (defined(_PARALLEL_) && !defined(_HAVE_PETSC_))
43 ISSMERROR(" parallel executable was compiled without support of parallel libraries!");
44 #endif
45
46 /*Initialize Petsc and get start time*/
47 PetscInitialize(&argc,&argv,(char *)0,"");
48 MPI_Barrier(MPI_COMM_WORLD); start=MPI_Wtime();
49
50 /*Size and rank: */
51 MPI_Comm_rank(MPI_COMM_WORLD,&my_rank);
52 MPI_Comm_size(MPI_COMM_WORLD,&num_procs);
53
54 _printf_("recover input file name and output file name:\n");
55 inputfilename=argv[2];
56 outputfilename=argv[3];
57 lockname=argv[4];
58
59 /*Initialize model structure: */
60 MPI_Barrier(MPI_COMM_WORLD); start_init=MPI_Wtime();
61
62 /*Open handle to data on disk: */
63 fid=pfopen(inputfilename,"rb");
64
65 _printf_("create finite element model:\n");
66 femmodel=new FemModel(fid,solution_type,analyses,1);
67
68 /*add outputfilename in parameters: */
69 femmodel->parameters->AddObject(new StringParam(OutputFileNameEnum,outputfilename));
70
71 /*get parameters: */
72 femmodel->parameters->FindParam(&qmu_analysis,QmuAnalysisEnum);
73 femmodel->parameters->FindParam(&waitonlock,WaitOnLockEnum);
74
75 MPI_Barrier(MPI_COMM_WORLD); finish_init=MPI_Wtime();
76
77 /*are we running the solutoin sequence, or a qmu wrapper around it? : */
78 if(!qmu_analysis){
79
80 /*run prognostic2 analysis: */
81 _printf_("call computational core:\n");
82 MPI_Barrier(MPI_COMM_WORLD); start_core=MPI_Wtime( );
83 prognostic2_core(femmodel);
84 MPI_Barrier(MPI_COMM_WORLD); finish_core=MPI_Wtime( );
85
86 _printf_("write results to disk:\n");
87 OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,femmodel->results);
88
89 }
90 else{
91
92 /*run qmu analysis: */
93 _printf_("calling qmu analysis on prognostic2 core:\n");
94
95 #ifdef _HAVE_DAKOTA_
96 MPI_Barrier(MPI_COMM_WORLD); start_core=MPI_Wtime( );
97 Qmux(femmodel,Prognostic2AnalysisEnum,NoneAnalysisEnum);
98 MPI_Barrier(MPI_COMM_WORLD); finish_core=MPI_Wtime( );
99 #else
100 ISSMERROR(" Dakota not present, cannot do qmu!");
101 #endif
102 }
103
104 if (waitonlock>0){
105 _printf_("write lock file:\n");
106 WriteLockFile(lockname);
107 }
108
109 /*Free ressources:*/
110 delete femmodel;
111
112 /*Get finish time and close*/
113 MPI_Barrier(MPI_COMM_WORLD); finish = MPI_Wtime( );
114 _printf_("\n %-34s %f seconds \n","Model initialization elapsed time:",finish_init-start_init);
115 _printf_(" %-34s %f seconds \n","Core solution elapsed time:",finish_core-start_core);
116 _printf_("\n %s %i hrs %i min %i sec\n\n","Total elapsed time:",int((finish-start)/3600),int(int(finish-start)%3600/60),int(finish-start)%60);
117 _printf_("closing MPI and Petsc\n");
118 PetscFinalize();
119
120 /*end module: */
121 MODULEEND();
122
123 return 0; //unix success return;
124}
Note: See TracBrowser for help on using the repository browser.