Flow123d
che_read.cc
Go to the documentation of this file.
1 #include "che_semchem.h"
2 #include "io/read_ini.h"
3 #include <cstring>
4 
5 extern struct TS_prm G_prm;
6 extern struct TS_lat *P_lat;
7 extern struct TS_che *P_che;
8 
9 // Cte CHEMIE-OBECNE ze souboru parametru .ich
10 void ctiich_obecne( void )
11 {
12  int i;
13  const char *section = "Semchem_module";
14  char buffer[ 1024 ];
15  char *pString;
16 
17  G_prm.pocet_latekvefazi = OptGetInt("Transport", "N_substances", NULL );
18  if (G_prm.pocet_latekvefazi < 1){
19  printf(/*Msg,*/ "\nNumber of aqueous species must be higher then 1.");
20  exit(133);
21  }
22 /*------------------------------------------------------------------*/
23  G_prm.T = OptGetDbl(section,"Temperature","0.0");
24  if ( G_prm.T <= 0.0 )
25  {
26  printf(/*Msg,*/ "\nTeplota musi byt kladna!");
27  exit(133);
28  }
29 /*------------------------------------------------------------------*/
30  G_prm.TGf = OptGetDbl(section,"Temperature_Gf","-1.0");
31  if ( G_prm.TGf == -1.0 )
32  {
33  G_prm.TGf = G_prm.T;
34  }
35  if ( G_prm.T <= 0.0 )
36  {
37  printf(/*Msg,*/ "\nTeplota pro zadani dGf musi byt kladna!");
38  exit(133);
39  }
40 /*------------------------------------------------------------------*/
41  G_prm.epsilon = OptGetDbl(section,"Epsilon","0.0");
42  if ( G_prm.epsilon<= 0.0 )
43  {
44  printf(/*Msg,*/ "\nEpsilon musi byt kladne!");
45  exit(133);
46  }
47 /*------------------------------------------------------------------*/
48  pString = strcpy(buffer,OptGetStr(section, "Error_norm_type", "Absolute"));
49  if ( pString == NULL )
50  {
51  printf(/*Msg,*/ "\nChybi typ normy!");
52  exit(133);
53  }
54  G_prm.abs_norma = -1;
55  if ( strcmp( buffer, "relative" ) == 0 ) G_prm.abs_norma = 0;
56  if ( strcmp( buffer, "Relative" ) == 0 ) G_prm.abs_norma = 0;
57  if ( strcmp( buffer, "rel" ) == 0 ) G_prm.abs_norma = 0;
58  if ( strcmp( buffer, "Rel" ) == 0 ) G_prm.abs_norma = 0;
59  if ( strcmp( buffer, "r" ) == 0 ) G_prm.abs_norma = 0;
60  if ( strcmp( buffer, "R" ) == 0 ) G_prm.abs_norma = 0;
61  if ( strcmp( buffer, "0" ) == 0 ) G_prm.abs_norma = 0;
62  if ( strcmp( buffer, "absolute" ) == 0 ) G_prm.abs_norma = 1;
63  if ( strcmp( buffer, "Absolute" ) == 0 ) G_prm.abs_norma = 1;
64  if ( strcmp( buffer, "abs" ) == 0 ) G_prm.abs_norma = 1;
65  if ( strcmp( buffer, "Abs" ) == 0 ) G_prm.abs_norma = 1;
66  if ( strcmp( buffer, "a" ) == 0 ) G_prm.abs_norma = 1;
67  if ( strcmp( buffer, "A" ) == 0 ) G_prm.abs_norma = 1;
68  if ( strcmp( buffer, "1" ) == 0 ) G_prm.abs_norma = 1;
69  if (G_prm.abs_norma == -1)
70  {
71  printf(/*Msg,*/ "\nTyp normy neni platny!");
72  exit(133);
73  }
74  G_prm.omega = 1.0;
75 /*------------------------------------------------------------------*/
76  pString = strcpy(buffer,OptGetStr(section,"Scaling","No"));
77  if ( pString == NULL )
78  {
79  printf(/*Msg,*/ "\nChybi definice skalovani!");
80  exit(133);
81  }
82  G_prm.skaluj_matici = -1;
83  if ( strcmp( buffer, "N" ) == 0 ) G_prm.skaluj_matici = 0;
84  if ( strcmp( buffer, "Ne" ) == 0 ) G_prm.skaluj_matici = 0;
85  if ( strcmp( buffer, "No" ) == 0 ) G_prm.skaluj_matici = 0;
86  if ( strcmp( buffer, "0" ) == 0 ) G_prm.skaluj_matici = 0;
87  if ( strcmp( buffer, "A" ) == 0 ) G_prm.skaluj_matici = 1;
88  if ( strcmp( buffer, "Ano" ) == 0 ) G_prm.skaluj_matici = 1;
89  if ( strcmp( buffer, "Y" ) == 0 ) G_prm.skaluj_matici = 1;
90  if ( strcmp( buffer, "Yes" ) == 0 ) G_prm.skaluj_matici = 1;
91  if ( strcmp( buffer, "1" ) == 0 ) G_prm.skaluj_matici = 1;
92  if (G_prm.skaluj_matici == -1)
93  {
94  printf(/*Msg,*/ "\nSkalovani matice neni platne!");
95  exit(133);
96  }
97 /*-----------------------------------------------*/
98  G_prm.Afi = OptGetDbl(section,"Param_Afi","-1.0");
99  if ( G_prm.Afi < 0.0 )
100  {
101  printf(/*Msg,*/ "\nAfi musi byt nezaporne!");
102  exit(133);
103  }
104 /*------------------------------------------------------------------*/
105  G_prm.b = OptGetDbl(section,"Param_b","0.0");
106  if ( G_prm.b <= 0.0 )
107  {
108  printf(/*Msg,*/ "\nb musi byt kladne!");
109  exit(133);
110  }
111 /*------------------------------------------------------------------*/
112  G_prm.cas_kroku = OptGetInt(section,"Time_steps","0");
113  if ( G_prm.cas_kroku <= 0 )
114  {
115  printf(/*Msg,*/ "\nPocet casovych kroku musi byt kladny!");
116  exit(133);
117  }
118 /*------------------------------------------------------------------*/
119  G_prm.vypisy = OptGetInt(section,"Output_precission","0");
120 /*------------------------------------------------------------------*/
121  i = OptGetInt(section, "Number_of_further_species","0");
122  if ( i < 0 )
123  {
124  printf(/*Msg,*/ "\nPocet dalsich latek nesmi byt zaporny!");
125  exit(133);
126  }
129  {
130  printf ("Celkovy pocet latek muze byt maximalne %d!\n", MAX_POC_LATEK);
131  exit(121);
132  }
133 /*------------------------------------------------------------------*/
134  G_prm.deleni_RK = OptGetInt(section,"Slow_kinetics_substeps","1");
135  if ( G_prm.deleni_RK < 1 )
136  {
137  printf(/*Msg,*/ "\nPocet kroku pomale kinetiky musi byt kladny!");
138  exit(133);
139  }
140 }
141 /********************************************************************/
142 /* Cte LATKY_VE_FAZI ze souboru parametru .ich */
143 /********************************************************************/
144 void ctiich_latkyvefazi( void )
145 {
146  char buffer[1024];
147  int j;
148  char nazev[30], *pom_buf; //, nazev1[30]
149  const char *separators = " ,\t";
150  char *pString;
151 
152 // Alokace seznamu latek
153  P_lat = (TS_lat *)malloc( (G_prm.pocet_latek)*sizeof( TS_lat ) );
154  if ( P_lat == NULL )
155  {
156  printf ("Malo pameti!\n");
157  exit(0);
158  }
159 // Nacteni obsahu seznamu latek
160 /*-----------------------------------------------*/
161  sprintf( nazev, "Aqueous_species" );
162  {
163  for (j=0; j<G_prm.pocet_latekvefazi; j++)
164  {
165  strcpy(P_lat[j].nazev,"");
166  }
167  }
168 /*-----------------------------------------------*/
169  pString = strcpy(buffer,OptGetStr(nazev,"dGf","<NeplatnyNazev>"));
170  pom_buf = strtok( buffer, separators );
171  if ( strcmp( buffer, "<NeplatnyNazev>" ) == 0 )
172  {
173  pom_buf = NULL;
174  }
175  for (j=0; j<G_prm.pocet_latekvefazi; j++)
176  {
177  if ( pom_buf == NULL )
178  {
179  printf(/*Msg,*/ "\nChybi dGf %d. latky ve fazi!", j+1);
180  exit(133);
181  }
182  P_lat[j].dGf = atof(pom_buf);
183  printf(/*Msg,*/ "\n P_lat[%d].dGf %f\n",j,P_lat[j].dGf);
184  pom_buf = strtok( NULL, separators );
185  }
186  if ( pom_buf != NULL )
187  {
188  printf(/*Msg,*/ "\nPrilis mnoho dGf pro latky ve fazi!");
189  exit(133);
190  }
191 /*-----------------------------------------------*/
192  pString = strcpy(buffer,OptGetStr(nazev,"dHf","<NeplatnyNazev>"));
193  pom_buf = strtok( buffer, separators );
194  if ( strcmp( buffer, "<NeplatnyNazev>" ) == 0 )
195  {
196  for (j=0; j<G_prm.pocet_latekvefazi; j++)
197  {
198  P_lat[j].dHf = 0.0;
199  }
200  pom_buf = NULL;
201  }
202  else for (j=0; j<G_prm.pocet_latekvefazi; j++)
203  {
204  if ( pom_buf == NULL )
205  {
206  printf(/*Msg,*/ "\nChybi dHf %d. latky ve fazi!", j+1);
207  exit(133);
208  }
209  P_lat[j].dHf = atof(pom_buf);
210  pom_buf = strtok( NULL, separators );
211  }
212  if ( pom_buf != NULL )
213  {
214  printf(/*Msg,*/ "\nPrilis mnoho dHf pro latky ve fazi!");
215  exit(133);
216  }
217 /*-----------------------------------------------*/
218  pString = strcpy(buffer,OptGetStr(nazev,"Molar_mass","<NeplatnyNazev>"));
219  pom_buf = strtok( buffer, separators );
220  if ( strcmp( buffer, "<NeplatnyNazev>" ) == 0 )
221  {
222  pom_buf = NULL;
223  }
224  for (j=0; j<G_prm.pocet_latekvefazi; j++)
225  {
226  if ( pom_buf == NULL )
227  {
228  printf(/*Msg,*/ "\nChybi molarni hmotnost %d. latky ve fazi!", j+1);
229  exit(133);
230  }
231  P_lat[j].M = atof(pom_buf);
232  pom_buf = strtok( NULL, separators );
233  }
234  if ( pom_buf != NULL )
235  {
236  printf(/*Msg,*/ "\nPrilis mnoho molarnich hmotnosti pro latky ve fazi!");
237  exit(133);
238  }
239 /*-----------------------------------------------*/
240  pString = strcpy(buffer,OptGetStr(nazev,"El_charge","<NeplatnyNazev>"));
241  pom_buf = strtok( buffer, separators );
242  if ( strcmp( buffer, "<NeplatnyNazev>" ) == 0 )
243  {
244  pom_buf = NULL;
245  }
246  for (j=0; j<G_prm.pocet_latekvefazi; j++)
247  {
248  if ( pom_buf == NULL )
249  {
250  printf(/*Msg,*/ "\nChybi naboj %d. latky ve fazi!", j+1);
251  exit(133);
252  }
253  P_lat[j].Q = atoi(pom_buf);
254  pom_buf = strtok( NULL, separators );
255  }
256  if ( pom_buf != NULL )
257  {
258  printf(/*Msg,*/ "\nPrilis mnoho naboju pro latky ve fazi!");
259  exit(133);
260  }
261 /*-----------------------------------------------*/
262  for (j=0; j<G_prm.pocet_latekvefazi; j++)
263  {
264  P_lat[j].typ_sorpce = 0; //Sorption has been suppressed in semchem module.
265  }
266 /*-----------------------------------------------*/
267 }
268 // Cte DALSI_LATKY ze souboru parametru .ini
269 void ctiich_dalsilatky( void )
270 {
271  char buffer[1024];
272  int j;
273  char nazev[30], *pom_buf;
274  const char* separators = " ,\t";
275  char *pString = NULL;
276 
277  if (G_prm.pocet_latekvefazi == 0)
278  {
279  return;
280  }
281 // Nacteni obsahu seznamu latek
282  sprintf( nazev, "Further_species" );
283  pString = strcpy(buffer,OptGetStr(nazev,"Specie_name","<NeplatnyNazev>"));
284  pom_buf = strtok( buffer, separators );
285  if ( strcmp( buffer, "<NeplatnyNazev>" ) == 0 )
286  {
288  {
289  sprintf( P_lat[j].nazev, "Dalsi_latka_%d", j+1-G_prm.pocet_latek );
290  }
291  }
292  else
293  {
295  {
296  if ( pom_buf == NULL )
297  {
298  printf(/*Msg,*/ "\nChybi nazev %d. dalsi latky!", j+1-G_prm.pocet_latek);
299  exit(133);
300  }
301  strcpy (P_lat[j].nazev, pom_buf);
302  pom_buf = strtok( NULL, separators );
303  }
304  if ( pom_buf != NULL )
305  {
306  printf(/*Msg,*/ "\nPrilis mnoho nazvu dalsich latek!");
307  exit(133);
308  }
309  }
310 /*-----------------------------------------------*/
311  pString = strcpy(buffer,OptGetStr(nazev,"dGf","<NeplatnyNazev>"));
312  pom_buf = strtok( buffer, separators );
313  if ( strcmp( buffer, "<NeplatnyNazev>" ) == 0 )
314  {
315  pom_buf = NULL;
316  }
318  {
319  if ( pom_buf == NULL )
320  {
321  printf(/*Msg,*/ "\nChybi dGf %d. dalsi latky!", j+1-G_prm.pocet_latek);
322  exit(133);
323  }
324  P_lat[j].dGf = atof(pom_buf);
325  pom_buf = strtok( NULL, separators );
326  }
327  if ( pom_buf != NULL )
328  {
329  printf(/*Msg,*/ "\nPrilis mnoho dGf pro dalsi latky!");
330  exit(133);
331  }
332 /*-----------------------------------------------*/
333  pString = strcpy(buffer,OptGetStr(nazev,"dHf","<NeplatnyNazev>"));
334  pom_buf = strtok( buffer, separators );
335  if ( strcmp( buffer, "<NeplatnyNazev>" ) == 0 )
336  {
338  {
339  P_lat[j].dHf = 0.0;
340  }
341  pom_buf = NULL;
342  }
343  else for (j=G_prm.pocet_latekvefazi;j<G_prm.pocet_latek; j++)
344  {
345  if ( pom_buf == NULL )
346  {
347  printf(/*Msg,*/ "\nChybi dHf %d. dalsi latky!", j+1-G_prm.pocet_latek);
348  exit(133);
349  }
350  P_lat[j].dHf = atof(pom_buf);
351  pom_buf = strtok( NULL, separators );
352  }
353  if ( pom_buf != NULL )
354  {
355  printf(/*Msg,*/ "\nPrilis mnoho dHf pro dalsi latky!");
356  exit(133);
357  }
358 /*-----------------------------------------------*/
359  pString = strcpy(buffer,OptGetStr(nazev,"Molar_mass","<NeplatnyNazev>"));
360  pom_buf = strtok( buffer, separators );
361  if ( strcmp( buffer, "<NeplatnyNazev>" ) == 0 )
362  {
363  pom_buf = NULL;
364  }
366  {
367  if ( pom_buf == NULL )
368  {
369  printf(/*Msg,*/ "\nChybi molarni hmotnost %d. dalsi latky!", j+1-G_prm.pocet_latek);
370  exit(133);
371  }
372  P_lat[j].M = atof(pom_buf);
373  pom_buf = strtok( NULL, separators );
374  }
375  if ( pom_buf != NULL )
376  {
377  printf(/*Msg,*/ "\nPrilis mnoho molarnich hmotnosti pro dalsi latky!");
378  exit(133);
379  }
380 /*-----------------------------------------------*/
381  pString = strcpy(buffer,OptGetStr(nazev,"Activity","<NeplatnyNazev>"));
382  pom_buf = strtok( buffer, separators );
383  if ( strcmp( buffer, "<NeplatnyNazev>" ) == 0 )
384  {
385  pom_buf = NULL;
386  }
388  {
389  if ( pom_buf == NULL )
390  {
391  printf(/*Msg,*/ "\nChybi aktivita %d. dalsi latky!", j+1-G_prm.pocet_latek);
392  exit(133);
393  }
394  P_lat[j].aktivita = atof(pom_buf);
395  pom_buf = strtok( NULL, separators );
396  }
397  if ( pom_buf != NULL )
398  {
399  printf(/*Msg,*/ "\nPrilis mnoho aktivit pro dalsi latky!");
400  exit(133);
401  }
402 }
403 
404 // Cte REAKCE ze souboru parametru .ich
405 void ctiich_reakce( void )
406 {
407  char buffer[1024];
408  int i,j;
409  char nazev[30], *pom_buf;
410  const char* separators = " ,\t";
411  TS_che pom_che;
412  double max_poloc_rozp;
413 
414 // Zjisteni delky seznamu reakci
415  for ( i = 1;; ++i )
416  {
417  sprintf( nazev, "Reaction_%d", i );
418  strcpy(buffer,OptGetStr(nazev,"Reaction_type","<NeplatnyNazev>")); printf(/*Msg,*/ "probehlo zjisteni typu reakce %d: %s\n",i, buffer);
419  if ( strcmp( buffer, "<NeplatnyNazev>" ) == 0 ) break;
420  }
422  if ( i==1 )
423  {
424  printf(/*Msg,*/ "\nNeni definovana zadna reakce!");
425  exit(133);
426  }
427 // Alokace seznamu reakci
428  P_che = (TS_che *)malloc( (G_prm.celkovy_pocet_reakci)*sizeof( TS_che ) );
429  if ( P_che == NULL )
430  {
431  printf ("Malo pameti!\n");
432  exit(0);
433  }
434 // Nacteni obsahu seznamu reakci
436  G_prm.pocet_rozpadu = 0;
437  G_prm.pocet_pom_kin = 0;
438  max_poloc_rozp = 0.0;
439  for (i=0; i<G_prm.celkovy_pocet_reakci; i++)
440  {
441  sprintf( nazev, "Reaction_%d", i+1 );
442  sprintf(P_che[i].nazev,"Reaction_%d",i+1);
443 /*-----------------------------------------------*/
444  strcpy(buffer,OptGetStr(nazev,"Reaction_type","<NeplatnyTyp>"));
445  pom_buf = strtok( buffer, separators );
446  P_che[i].typ_reakce = -888;
447  if ( strcmp( pom_buf, "Radioactive_decay" ) == 0 ) P_che[i].typ_reakce = 4;
448  if ( strcmp( pom_buf, "radioactive_decay" ) == 0 ) P_che[i].typ_reakce = 4;
449  if ( strcmp( pom_buf, "Decay" ) == 0 ) P_che[i].typ_reakce = 4;
450  if ( strcmp( pom_buf, "decay" ) == 0 ) P_che[i].typ_reakce = 4;
451  if ( strcmp( pom_buf, "RD" ) == 0 ) P_che[i].typ_reakce = 4;
452  if ( strcmp( pom_buf, "rd" ) == 0 ) P_che[i].typ_reakce = 4;
453  if ( strcmp( pom_buf, "4" ) == 0 ) P_che[i].typ_reakce = 4;
454  if ( strcmp( pom_buf, "Slow_kinetics" ) == 0 ) P_che[i].typ_reakce = 3;
455  if ( strcmp( pom_buf, "slow_kinetics" ) == 0 ) P_che[i].typ_reakce = 3;
456  if ( strcmp( pom_buf, "3" ) == 0 ) P_che[i].typ_reakce = 3;
457  if ( strcmp( pom_buf, "Kinetics" ) == 0 ) P_che[i].typ_reakce = 1;
458  if ( strcmp( pom_buf, "kinetics" ) == 0 ) P_che[i].typ_reakce = 1;
459  if ( strcmp( pom_buf, "1" ) == 0 ) P_che[i].typ_reakce = 1;
460  if ( strcmp( pom_buf, "Equilibrium" ) == 0 ) P_che[i].typ_reakce = 0;
461  if ( strcmp( pom_buf, "equilibrium" ) == 0 ) P_che[i].typ_reakce = 0;
462  if ( strcmp( pom_buf, "0" ) == 0 ) P_che[i].typ_reakce = 0;
463  if (P_che[i].typ_reakce == -888)
464  {
465  printf(/*Msg,*/ "\nThe type of reaction nr. %d is not valid!", i);
466  exit(133);
467  }
468  if (P_che[i].typ_reakce==0)
469  {
471  }
472  if (P_che[i].typ_reakce==1)
473  {
475  }
476  if (P_che[i].typ_reakce==3)
477  {
479  }
480  if (P_che[i].typ_reakce==4)
481  {
483  }
485 /*------------------------------------------------------------------*/
486  strcpy(buffer,OptGetStr(nazev,"Stoichiometry",""));
487  pom_buf = strtok( buffer, separators );
488  for (j = 0; j<G_prm.pocet_latek; j++)
489  {
490  if ( pom_buf == NULL )
491  {
492  printf(/*Msg,*/ "\nChybi %d. stechometricky koeficient v %d. rovnici!", j+1, i+1);
493  exit(133);
494  }
495  P_che[i].stech_koef_p[j] = atoi( pom_buf );
496  printf(/*Msg,*/ "\nP_che[%d].stech_koef_p[%d]: %d",i,j,P_che[i].stech_koef_p[j]);
497  pom_buf = strtok( NULL, separators );
498  }
499  if ( pom_buf != NULL )
500  {
501  printf(/*Msg,*/ "\nV %d. rovnici je prilis mnoho stechiometrickych koeficientu!", i+1);
502  exit(133);
503  }
504 /*------------------------------------------------------------------*/
505  if ((P_che[i].typ_reakce==1)||(P_che[i].typ_reakce==3))
506  {
507  P_che[i].K = OptGetDbl(nazev,"Kinetic_constant","0.0");
508  if(P_che[i].typ_reakce==1)printf(/*Msg,*/ "\nKineticka konstanta v %d. rovnici ma hodnotu %f", i+1, P_che[i].K);
509  if ( P_che[i].K <= 0.0 )
510  {
511  printf(/*Msg,*/ "\nKineticka konstanta v %d. rovnici neni kladna!", i+1);
512  exit(133);
513  }
514 /*------------------------------------------------------------------*/
515  strcpy(buffer,OptGetStr(nazev,"Order_of_reaction",""));
516  pom_buf = strtok( buffer, separators );
517  for (j = 0; j<G_prm.pocet_latek; j++)
518  {
519  if(j >= G_prm.pocet_latekvefazi) ;//P_che[i].exponent[j] = 0.0;
520  else
521  {
522  if( pom_buf == NULL )
523  {
524  printf(/*Msg,*/ "\nChybi %d. mocnina pro kinetiku %d. rovnice!", j+1, i+1);
525  exit(133);
526  }
527  P_che[i].exponent[j] = atof( pom_buf );
528  printf(/*Msg,*/ "\nP_che[%d].exponent[%d]: %f",i,j,P_che[i].exponent[j]);
529  pom_buf = strtok( NULL, separators );
530  }
531  }
532  if ( pom_buf != NULL )
533  {
534  printf(/*Msg,*/ "\nV %d. rovnici je prilis mnoho exponentu pro kinetiku!", i+1);
535  exit(133);
536  }
537  }
538 /*------------------------------------------------------------------*/
539  if (P_che[i].typ_reakce==0)
540  {
541  P_che[i].K = OptGetDbl(nazev, "Equilibrium_constant","-1.0");
542  }
543 /*------------------------------------------------------------------*/
544  }
546  {
547  for (j=0; j<G_prm.celkovy_pocet_reakci; j++)
548  {
549  for (i=0; i<G_prm.celkovy_pocet_reakci-1; i++)
550  {
551  if (che_poradi(P_che[i].typ_reakce,max_poloc_rozp,P_che[i].K) > che_poradi(P_che[i+1].typ_reakce,max_poloc_rozp,P_che[i+1].K))
552  {
553  pom_che = P_che[i];
554  P_che[i] = P_che[i+1];
555  P_che[i+1] = pom_che;
556  }
557  }
558  }
559  }
560 }
561 
562 // Cte soubor parametru chemie .ICH
563 void ctiich( void )
564 {
565  printf(/*MsgLog,*/ "Cteni parametru (%s): \n", G_prm.jmeno_ich );
566  ctiich_obecne(); printf(/*MsgLog,*/"probehla funkce ctiich_obecne()\n");
567  ctiich_latkyvefazi(); printf(/*MsgLog,*/"probehla funkce ctiich_latkyvefazi()\n");
568  ctiich_dalsilatky(); printf(/*MsgLog,*/"probehla funkce ctiich_dalsilatky()\n");
569  ctiich_reakce(); printf(/*MsgLog,*/"probehla funkce ctiich_reakce()\n");
570  printf(/*MsgLog,*/ "O.K.\n" );
571 }