00001 #include "ptrfelinit.h"
00002 #include "pglobalt.h"
00003 #include "xfile.h"
00004 #include "stochdrivert.h"
00005 #include "stacktrace.h"
00006
00007 void ptrfel_init (int argc,const char *argv[], stochdrivert *stochd)
00008 {
00009 char name[1100];
00010 char *dot;
00011 XFILE *in;
00012
00013 set_prgname(argv[0]);
00014
00015 Ptp = new pprobdesct;
00016
00017 Tp = new probdesct;
00018 Gtt = new gtopology;
00019 Tt = new transtop;
00020 Tm = new transmat;
00021 Tc = new transcrsec;
00022 Tb = new transbclc;
00023 Outdt = new outdrivert;
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 if (process_argst(argc, argv))
00034 {
00035 delete Tp;
00036 delete Gtt;
00037 delete Tt;
00038 delete Tm;
00039 delete Tc;
00040 delete Tb;
00041 delete Outdt;
00042 delete stochd;
00043 abort();
00044 }
00045
00046
00047 strcpy (name,argv[1]);
00048 sprintf (&name[strlen (argv[1])],"%d.in",Myrank+1);
00049 in = xfopen (name,"r");
00050 if (in==NULL){
00051 par_print_err(Myrank+1, proc_namet, "input file cannot be opened.",__FILE__, __LINE__, __func__);
00052 delete Tp;
00053 delete Gtt;
00054 delete Tt;
00055 delete Tm;
00056 delete Tc;
00057 delete Tb;
00058 delete Outdt;
00059 delete stochd;
00060 abort();
00061 }
00062 in->warning = 1;
00063 in->ignorecase = 1;
00064 if ((Tp->kwdsw == nokwd) || (Tp->kwdsw == kwd_outd))
00065 in->kwdmode = ignore;
00066 else
00067 in->kwdmode = sequent_mode;
00068
00069
00070 xfscanf (in,"%k%ld","domain_num",&Ndom);
00071 Ndom--;
00072
00073
00074
00075
00076
00077
00078 Tp->read (in);
00079
00080
00081 Psolt = new psolver (Nproc,Myrank,proc_namet,nameLengtht);
00082
00083 Psolt->read (in,Gtt,Ndom,Tp->tstorkm,Mesprt);
00084
00085 if (Tp->kwdsw == kwd_full)
00086 in->kwdmode = sequent_mode;
00087 else
00088 in->kwdmode = ignore;
00089
00090 char buf[1001];
00091 strcpy (buf,argv[1]);
00092 sprintf (&buf[strlen (argv[1])],"%d.log",Myrank+1);
00093 Outt = fopen (buf,"w");
00094 if (Outt==NULL){
00095 par_print_err (Myrank+1,proc_namet,"log file cannot be opened",__FILE__, __LINE__, __func__);
00096 }
00097
00098
00099 Psolt->procdomcorr ();
00100
00101
00102
00103
00104
00105
00106
00107 Tt->read (in);
00108
00109
00110 Psolt->initiate (Gtt,argc,argv);
00111
00112 Psolt->read_ltg (in,Gtt,Outt);
00113
00114 fprintf (Outt,"\n Nproc %d",Nproc);
00115 fprintf (Outt,"\n Ndom %d",Ndom);
00116 fprintf (Outt,"\n Myrank %d",Myrank);
00117
00118 if (Tp->tprob == discont_nonstat_problem || Tp->tprob == discont_nonlin_nonstat_problem){
00119 Gtt->auto_subdom_detection (Outt);
00120 Tt->alloc_enodes ();
00121 Tt->alloc_edges ();
00122 }
00123
00124
00125
00126
00127
00128
00129 Ndoft=Psolt->ordering (Gtt,Outt,proc_namet);
00130
00131 if (Mesprt==1)
00132 fprintf (stdout,"\n jouda number of degrees of freedom %ld",Ndoft);
00133
00134 if (Tp->tprob == growing_np_problem || Tp->tprob == growing_np_problem_nonlin){
00135 Gtt->read_gf (in);
00136 }
00137
00138
00139 Tm->read (in);
00140
00141
00142 Tm->intpointalloc ();
00143 Tm->intpointinit ();
00144
00145
00146 Tc->read (in);
00147
00148
00149 Tb->read (in);
00150
00151
00152
00153
00154 Tb->elemsource ();
00155
00156
00157
00158 Lsrst = new lhsrhst;
00159 Lsrst->alloc ();
00160 Lsrst->initcond (in);
00161
00162 if (Tp->stochasticcalc){
00163 stochd->read (in);
00164 };
00165
00166 if (Tp->tprob == discont_nonstat_problem || Tp->tprob == discont_nonlin_nonstat_problem){
00167
00168 Tt->enodes_init ();
00169 Tt->edge_init ();
00170
00171
00172 }
00173
00174
00175
00176 if ((Tp->kwdsw == nokwd) || (Tp->kwdsw == kwd_pd))
00177 in->kwdmode = ignore;
00178 else
00179 in->kwdmode = sequent_mode;
00180
00181
00182 Outdt->read(in);
00183
00184 if (Tp->kwdsw == kwd_full)
00185 in->kwdmode = sequent_mode;
00186 else
00187 in->kwdmode = ignore;
00188
00189
00190 if (Tp->hdbcont.restore_stat())
00191 {
00192 strcpy (name,Tp->hdbcont.hdbnamer);
00193 dot = strchr (name,'.');
00194 if (dot == NULL)
00195 {
00196 print_err("cannot locate '.' in the backup file name '%s'", __FILE__, __LINE__, __func__, name);
00197 abort();
00198 }
00199 sprintf (dot,"%d",Myrank+1);
00200 sprintf (&name[strlen(name)], "%s", Tp->hdbcont.hdbnamer+int(dot-name));
00201 strcpy (Tp->hdbcont.hdbnamer, name);
00202 }
00203 if (Tp->hdbcont.save_stat())
00204 {
00205 strcpy (name,Tp->hdbcont.hdbnames);
00206 sprintf (&name[strlen(Tp->hdbcont.hdbnames)],"%d",Myrank+1);
00207 strcpy (Tp->hdbcont.hdbnames, name);
00208 }
00209
00210
00211 strcpy (name,Outdt->outfn);
00212 sprintf (&name[strlen (Outdt->outfn)],"%d.out",Myrank+1);
00213 strcpy (Outdt->outfn, name);
00214 if (Outdt->gf != grftt_no)
00215 {
00216 strcpy (name,Outdt->outgrfn);
00217 sprintf (&name[strlen (Outdt->outgrfn)],"%d",Myrank+1);
00218 strcpy (Outdt->outgrfn, name);
00219 }
00220 if (Outdt->ndiag > 0)
00221 {
00222 strcpy (name,Outdt->outdiagfn);
00223 sprintf (&name[strlen (Outdt->outdiagfn)],"%d.dat",Myrank+1);
00224 strcpy (Outdt->outdiagfn, name);
00225 }
00226
00227
00228 Tt->alloc_nodes ();
00229
00230 fflush(stdout);
00231 fflush(stderr);
00232
00233 Ptp->shift_indices ();
00234 xfclose (in);
00235
00236 }