source: palm/trunk/UTIL/chemistry/gasphase_preproc/kpp4palm/src/program_line.C @ 3697

Last change on this file since 3697 was 3458, checked in by kanani, 6 years ago

Reintegrated fixes/changes from branch chemistry

File size: 3.4 KB
Line 
1
2// ############################################################################
3//
4//     create_mz_kpp_module                       
5//
6//     create vectorcode from .90 sources created by KPP to be used in MESSy
7//
8//     COPYRIGHT Klaus Ketelsen and MPI-CH   April 2007
9//
10// ############################################################################
11//
12//Current revisions:
13//------------------
14//
15//
16// Former revisions:
17// -----------------------
18// $Id: program_line.C 3327 2018-10-09 19:55:00Z forkel $
19//
20// global_subtolower     (June 2018, forkel)
21//
22// initial version       (Nov. 2016, ketelsen)
23//
24
25
26#include "program_line.h"
27
28void  program_line::set_line(string s) {
29
30   line = s;
31
32   tokens.fill_token(line);
33
34   return;
35}
36void  program_line::substitute(string old_s, string new_s) {
37
38   int pos = line.find (old_s, 0);       // look for string
39
40   if (pos != string::npos) {                // found
41     line.replace(pos,old_s.size(),new_s);
42   }   
43
44   return;
45}
46
47void  program_line::global_substitute(string old_s, string new_s) {
48   int         pos;
49
50   int start = line.size()-1;
51
52   while (1) {
53     pos = line.rfind (old_s, start);       // look for string
54
55     if (pos == string::npos) {
56       break;
57     }
58
59     line.replace(pos,old_s.size(),new_s);
60
61     start = pos-1;
62   }
63
64   return;
65}
66
67int  program_line::get_token_number_from_string (string s) {
68
69   for (int i=0; i<tokens.size(); i++) {
70     if(tokens.get_token_by_index(i) == s)  {
71       return i;
72     }
73   }
74
75   return -1;
76}
77
78int  program_line::get_token_number_from_string_upper (string s) {
79
80   string s1 = my_to_upper(s);
81   for (int i=0; i<tokens.size(); i++) {
82     if(my_to_upper(tokens.get_token_by_index(i)) == s1)  {
83       return i;
84     }
85   }
86
87   return -1;
88}
89
90void  program_line::update_token (int i, string s) {
91
92  string s_old=tokens.get_token_by_index(i);
93  tokens.update (i,s);
94  int pos=tokens.get_position(i);
95  line.replace(pos,s_old.size(),s);
96
97  return;
98}
99
100void  program_line::change_variable_to_vector (string var) {
101  string   U_token;
102
103  int     ind = tokens.size()-2;
104  for (int i=ind; i >= 0; i--) {
105    U_token.clear();
106    U_token = my_to_upper(tokens.get_token_by_index(i));
107    if(U_token == my_to_upper(var) && tokens.get_token_by_index(i+1) == "(" ) {
108      string new_s="(1:VL,";
109      tokens.update (i+1,new_s);
110      int pos=tokens.get_position(i+1);
111      line.replace(pos,1,new_s);
112      tokens.reset (line);
113    }
114  }
115
116  return;
117}
118
119void  program_line::change_variable_to_vector_g (Vvar &var) {
120  string   U_token;
121  string   new_s;
122
123  tokens.reset (line);
124
125  int     ind = tokens.size()-2;
126  for (int i=ind; i >= 0; i--) {
127    U_token.clear();
128    U_token = tokens.get_token_by_index(i);
129    if(var.nr_dim() == 0) {
130      if(my_to_upper(U_token) == my_to_upper(var.name) ) {
131        new_s=U_token + "(k)";
132        tokens.update (i,new_s);
133        int pos=tokens.get_position(i);
134        line.replace(pos,U_token.size(),new_s);
135        tokens.reset (line);
136      }
137    } else {
138      if(my_to_upper(U_token) == my_to_upper(var.name) && tokens.get_token_by_index(i+1) == "(" ) {
139        new_s="(k,";
140        tokens.update (i+1,new_s);
141        int pos=tokens.get_position(i+1);
142        line.replace(pos,1,new_s);
143        tokens.reset (line);
144      }
145    }
146  }
147
148  return;
149}
150void   program_line::global_subtolower(string &line) {
151
152   int start = line.size()-1;
153   char c;
154
155    int i = 0;
156    while (line[i])
157    {
158      c = line[i];
159      line[i] = tolower(c);
160      i++;
161    }
162   return;
163}
164
Note: See TracBrowser for help on using the repository browser.