| 查看: 550 | 回复: 3 | ||
| 当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖 | ||
13659938271铁虫 (初入文坛)
|
[求助]
谁能帮我看一下这个程序是什么意思啊,谢谢 已有1人参与
|
|
|
/* This file is part of Astrochem. Astrochem is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Astrochem is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Astrochem. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #endiflm,[ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "astrochem.h" void add_specie (char *new_specie, char *species[], int *n_species); void read_network (const char *chem_file, struct react reactions[], int *n_reactions, char *species[], int *n_species, int verbose) { FILE *f; char line[MAX_LINE]; int line_number = 0; char reactant1[MAX_CHAR_SPECIES]; char reactant2[MAX_CHAR_SPECIES]; char reactant3[MAX_CHAR_SPECIES]; char product1[MAX_CHAR_SPECIES]; char product2[MAX_CHAR_SPECIES]; char product3[MAX_CHAR_SPECIES]; char product4[MAX_CHAR_SPECIES]; double alpha; double beta; double gamma; int reaction_type; int reaction_no; *n_species = 0; *n_reactions = 0; if (verbose >= 1) { fprintf (stdout, "Reading reactions network from %s... ", chem_file); fflush (stdout); } /* Open the input file. We first look in the current directory, and then in the PKGDATADIR directory. Exit if we can't find it. */ f = fopen (chem_file, "r"); if ( !f ) { char chem_file1[MAX_LINE]; strncpy (chem_file1, PKGDATADIR, sizeof (chem_file1) - 1); strncat (chem_file1, "/", sizeof (chem_file1) - strlen (chem_file1) - 1); strncat (chem_file1, chem_file, sizeof (chem_file1) - strlen (chem_file1) - 1); f = fopen (chem_file1, "r"); if ( !f ) { fprintf (stderr, "astrochem: error: can't find %s.\n", chem_file); exit (1); } } /* Loop over the lines, and look for the reactants and products, and the parameters of the reactions. */ while (fgets (line, MAX_LINE, f) != NULL) { line_number++; if (line[0] == '#') continue; /* Skip comments. */ /* Initialize reactants, products, and reaction parameters. */ strcpy (reactant1, ""); strcpy (reactant2, ""); strcpy (reactant3, ""); strcpy (product1, ""); strcpy (product2, ""); strcpy (product3, ""); strcpy (product4, ""); alpha = 0; beta = 0; gamma = 0; reaction_type = 0; reaction_no = 0; /* Read the reactants, products, and reaction parameters. */ if ((sscanf (line, "%s -> %s %lf %lf %lf %d %d", reactant1, product1, &alpha, &beta, &gamma, &reaction_type, &reaction_no) == 7) || (sscanf (line, "%s + %s -> %s %lf %lf %lf %d %d", reactant1, reactant2, product1, &alpha, &beta, &gamma, &reaction_type, &reaction_no) == 8) || (sscanf (line, "%s + %s -> %s + %s %lf %lf %lf %d %d", reactant1, reactant2, product1, product2, &alpha, &beta, &gamma, &reaction_type, &reaction_no) == 9) || (sscanf (line, "%s + %s -> %s + %s + %s %lf %lf %lf %d %d", reactant1, reactant2, product1, product2, product3, &alpha, &beta, &gamma, &reaction_type, &reaction_no) == 10) || (sscanf (line, "%s + %s -> %s + %s + %s + %s %lf %lf %lf %d %d", reactant1, reactant2, product1, product2, product3, product4, &alpha, &beta, &gamma, &reaction_type, &reaction_no) == 11) || (sscanf (line, "%s + %s + %s -> %s + %s %lf %lf %lf %d %d", reactant1, reactant2, reactant3, product1, product2, &alpha, &beta, &gamma, &reaction_type, &reaction_no) == 10)) ; else { input_error (chem_file, line_number); } /* Ignore the following species: cosmic-ray, uv-photon, photon. Replace them by an empty string, and re-sort species. */ if ((strcmp (reactant1, "cosmic-ray") == 0) || (strcmp (reactant1, "uv-photon") == 0) || (strcmp (reactant1, "photon") == 0)) { strcpy (reactant1, reactant2); strcpy (reactant2, reactant3); strcpy (reactant3, ""); } if ((strcmp (reactant2, "cosmic-ray") == 0) || (strcmp (reactant2, "uv-photon") == 0) || (strcmp (reactant2, "photon") == 0)) { strcpy (reactant2, reactant3); strcpy (reactant3, ""); } if ((strcmp (reactant3, "cosmic-ray") == 0) || (strcmp (reactant3, "uv-photon") == 0) || (strcmp (reactant3, "photon") == 0)) { strcpy (reactant3, ""); } if ((strcmp (product1, "cosmic-ray") == 0) ||(strcmp (product1, "uv-photon") == 0) || (strcmp (product1, "photon") == 0)) { strcpy (product1, product2); strcpy (product2, product3); strcpy (product3, ""); } if ((strcmp (product2, "cosmic-ray") == 0) || (strcmp (product2, "uv-photon") == 0) || (strcmp (product2, "photon") == 0)) { strcpy (product2, product3); strcpy (product3, ""); } if ((strcmp (product3, "cosmic-ray") == 0) || (strcmp (product3, "uv-photon") == 0) || (strcmp (product3, "photon") == 0)) { strcpy (product3, ""); } if ((strcmp (product4, "cosmic-ray") == 0) || (strcmp (product4, "uv-photon") == 0) || (strcmp (product4, "photon") == 0)) { strcpy (product4, ""); } /* Fill the array of species. */ add_specie (reactant1, species, n_species); add_specie (reactant2, species, n_species); add_specie (reactant3, species, n_species); add_specie (product1, species, n_species); add_specie (product2, species, n_species); add_specie (product3, species, n_species); add_specie (product4, species, n_species); /* Fill the array of reactions. Exit if of the reactant and product is not in the specie array. */ if (*n_reactions < MAX_REACTIONS) { if (((reactions[*n_reactions].reactant1 = specie_index (reactant1, species, *n_species)) == -2) || ((reactions[*n_reactions].reactant2 = specie_index (reactant2, species, *n_species)) == -2) || ((reactions[*n_reactions].reactant3 = specie_index (reactant3, species, *n_species)) == -2) || ((reactions[*n_reactions].product1 = specie_index (product1, species, *n_species)) == -2) || ((reactions[*n_reactions].product2 = specie_index (product2, species, *n_species)) == -2) || ((reactions[*n_reactions].product3 = specie_index (product3, species, *n_species)) == -2) || ((reactions[*n_reactions].product4 = specie_index (product4, species, *n_species)) == -2)) { fprintf (stderr, "astrochem: %s:%d: can't find specie index.\n", __FILE__, __LINE__); exit(1); } reactions[*n_reactions].alpha = alpha; reactions[*n_reactions].beta = beta; reactions[*n_reactions].gamma = gamma; reactions[*n_reactions].reaction_type = reaction_type; reactions[*n_reactions].reaction_no = reaction_no; (*n_reactions)++; } else { fprintf (stderr, "astrochem: error: the number of reactions exceed %i.\n", MAX_REACTIONS); exit(1); } } if (verbose >= 1) { fprintf (stdout, "done.\n"); fprintf (stdout, "Found %d reactions involving %d species.\n", *n_reactions, *n_species); } /* Close the file. */ fclose (f); } /* Add a specie in the species array, if not already present. */ void add_specie (char *new_specie, char *species[], int *n_species) { int i; if (strcmp (new_specie, "") == 0) return; for (i = 0; i < *n_species; i++) { if (strcmp (species, new_specie) == 0) return; } i = *n_species; if (i < MAX_SPECIES) { if ((species = malloc (sizeof (char) * MAX_CHAR_SPECIES)) == NULL) { fprintf (stderr, "astrochem: %s:%d: %s\n", __FILE__, __LINE__, "array allocation failed.\n"); exit (1); } if (strlen (new_specie) < MAX_CHAR_SPECIES - 1) { strcpy (species, new_specie); (*n_species)++; } else { fprintf (stderr, "astrochem: error: the number of characters of some " "species of the chemical network file exceeds %i.\n", MAX_CHAR_SPECIES); exit (1); } } else { fprintf (stderr, "astrochem: error: the number of species in the chemical" "network file exceeds %i.\n", MAX_SPECIES); exit (1); } return; } /* Look up the index of a given specie in the species array. */ int specie_index (const char *specie, char *species[], int n_species) { int i; /* Return -1 if the specie name is empty. */ if (strcmp (specie, "") == 0) { return -1; } for (i = 0; i < n_species; i++) { if (strncmp (species, specie, sizeof (char) * MAX_CHAR_SPECIES) == 0) { return i; } } /* Return -2 if we can not find the specie */ return -2; } |
» 猜你喜欢
有没有人能给点建议
已经有5人回复
假如你的研究生提出不合理要求
已经有12人回复
实验室接单子
已经有7人回复
全日制(定向)博士
已经有5人回复
萌生出自己或许不适合搞科研的想法,现在跑or等等看?
已经有4人回复
Materials Today Chemistry审稿周期
已经有4人回复
参与限项
已经有3人回复
对氯苯硼酸纯化
已经有3人回复
所感
已经有4人回复
要不要辞职读博?
已经有7人回复
» 本主题相关价值贴推荐,对您同样有帮助:
一个论文贡献的问题,大家讨论下,也许对大家都有帮助
已经有22人回复
【转】女神的QQ动了,我大喜,点开后默泪了-----仅以此文祭典我死去的爱情
已经有49人回复
催化版上2008-04-25前 沸石分子筛,ZSM-系、SAPO-系 共466个话题集锦
已经有110人回复

baghnac
金虫 (小有名气)
- 应助: 14 (小学生)
- 金币: 1706.4
- 红花: 6
- 帖子: 177
- 在线: 44小时
- 虫号: 1365578
- 注册: 2011-08-11
- 性别: GG
- 专业: 宇宙学

4楼2015-07-27 22:41:20
ll550
木虫 (职业作家)
- 应助: 259 (大学生)
- 金币: 4586.3
- 散金: 230
- 红花: 34
- 帖子: 3331
- 在线: 767小时
- 虫号: 3180771
- 注册: 2014-05-05
- 专业: 马、恩、列、斯思想研究

2楼2015-07-21 19:21:13
13659938271
铁虫 (初入文坛)
- 应助: 0 (幼儿园)
- 金币: 30.5
- 帖子: 7
- 在线: 2.4小时
- 虫号: 3500407
- 注册: 2014-10-26
- 性别: GG
- 专业: 天文学同其他学科的交叉

3楼2015-07-22 10:49:34












回复此楼