source: issm/trunk/src/c/solutions/diagnostic.cpp@ 4055

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

Keep simplifying solutions.
New convergence module at the input level, instead at the solution level, when solution vectors are not
available anymore.

File size: 3.9 KB
Line 
1/*!\file: diagnostic.cpp
2 * \brief: diagnostic 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 "../DataSet/DataSet.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 control_analysis=false;
28 bool waitonlock=false;
29
30 /*FemModel: */
31 FemModel* femmodel=NULL;
32
33 /*time*/
34 double start, finish;
35 double start_core, finish_core;
36 double start_init, finish_init;
37
38 int analyses[5]={DiagnosticHorizAnalysisEnum,DiagnosticVertAnalysisEnum,DiagnosticStokesAnalysisEnum,DiagnosticHutterAnalysisEnum,SlopeAnalysisEnum};
39 int solution_type=DiagnosticAnalysisEnum;
40
41 MODULEBOOT();
42
43 #if !defined(_PARALLEL_) || (defined(_PARALLEL_) && !defined(_HAVE_PETSC_))
44 ISSMERROR(" parallel executable was compiled without support of parallel libraries!");
45 #endif
46
47 /*Initialize Petsc and get start time*/
48 PetscInitialize(&argc,&argv,(char *)0,"");
49 MPI_Barrier(MPI_COMM_WORLD); start=MPI_Wtime();
50
51 /*Size and rank: */
52 MPI_Comm_rank(MPI_COMM_WORLD,&my_rank);
53 MPI_Comm_size(MPI_COMM_WORLD,&num_procs);
54
55 _printf_("recover , input file name and output file name:\n");
56 inputfilename=argv[2];
57 outputfilename=argv[3];
58 lockname=argv[4];
59
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,5);
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(&control_analysis,ControlAnalysisEnum);
74 femmodel->parameters->FindParam(&waitonlock,WaitOnLockEnum);
75
76 MPI_Barrier(MPI_COMM_WORLD); finish_init=MPI_Wtime();
77
78 /*are we running the solution sequence, or a qmu wrapper around it? : */
79 if(!qmu_analysis){
80 if(!control_analysis){
81
82 _printf_("call computational core:\n");
83 MPI_Barrier(MPI_COMM_WORLD); start_core=MPI_Wtime( );
84 diagnostic_core(femmodel);
85 MPI_Barrier(MPI_COMM_WORLD); finish_core=MPI_Wtime( );
86
87 }
88 else{
89 /*run control analysis: */
90 _printf_("call computational core:\n");
91 MPI_Barrier(MPI_COMM_WORLD); start_core=MPI_Wtime( );
92 control_core(femmodel);
93 MPI_Barrier(MPI_COMM_WORLD); finish_core=MPI_Wtime( );
94
95 }
96
97 _printf_("write results to disk:\n");
98 OutputResults(femmodel->elements, femmodel->loads, femmodel->nodes, femmodel->vertices, femmodel->materials, femmodel->parameters);
99 }
100 else{
101 /*run qmu analysis: */
102 _printf_("calling qmu analysis on diagnostic core:\n");
103
104 #ifdef _HAVE_DAKOTA_
105 MPI_Barrier(MPI_COMM_WORLD); start_core=MPI_Wtime( );
106 Qmux(femmodel,DiagnosticAnalysisEnum,NoneAnalysisEnum);
107 MPI_Barrier(MPI_COMM_WORLD); finish_core=MPI_Wtime( );
108 #else
109 ISSMERROR(" Dakota not present, cannot do qmu!");
110 #endif
111 }
112
113 if (waitonlock>0){
114 _printf_("write lock file:\n");
115 WriteLockFile(lockname);
116 }
117
118 /*Free ressources */
119 delete femmodel;
120
121 /*Get finish time and close*/
122 MPI_Barrier(MPI_COMM_WORLD); finish = MPI_Wtime( );
123 _printf_("\n %-34s %f seconds \n","FemModel initialization elapsed time:",finish_init-start_init);
124 _printf_(" %-34s %f seconds \n","Core solution elapsed time:",finish_core-start_core);
125 _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);
126 _printf_("closing MPI and Petsc\n");
127 PetscFinalize();
128
129 /*end module: */
130 MODULEEND();
131
132 return 0; //unix success return;
133}
Note: See TracBrowser for help on using the repository browser.