From 87412d5f7f5bf84f20f58bb04ec4125431b91664 Mon Sep 17 00:00:00 2001 From: rs028 Date: Wed, 19 Oct 2022 12:10:02 +0100 Subject: [PATCH 01/24] Set up to support KPP formats --- build/fix_mechanism_fac.py | 10 +++++----- build/mech_converter.py | 15 +++++++++++---- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/build/fix_mechanism_fac.py b/build/fix_mechanism_fac.py index a449d1ce8..867f53fb4 100644 --- a/build/fix_mechanism_fac.py +++ b/build/fix_mechanism_fac.py @@ -43,13 +43,13 @@ def fix_fac_full_contents(filename): print(str(filename) + ': file read in ' + str(orig_contents_len) + ' items') contents_count = 0 - # This variable will hold the indices to be deleted once their contents have been concatenated onto the - # previous element. + # This variable will hold the indices to be deleted once their contents have + # been concatenated onto the previous element. to_delete = [] - # Firstly wait until we reach a line containing 'Reaction definitions'. - # Then ignore comment lines. Then correct the lines which don't start with a % - they should be concatenated - # onto the previous entry + # First, wait until we reach a line containing 'Reaction definitions'. + # Then ignore comment lines. + # Then correct the lines which don't start with a '%': they should be concatenated onto the previous entry. in_reaction_definition_section = False for i in range(len(contents)): if not in_reaction_definition_section: diff --git a/build/mech_converter.py b/build/mech_converter.py index 0e9b12996..bf576bda3 100644 --- a/build/mech_converter.py +++ b/build/mech_converter.py @@ -103,7 +103,7 @@ def tokenise_and_process(input_string, variablesDict): return new_rhs -def convert(input_file, mech_dir, mcm_dir): +def convert_to_fortran(input_file, mech_dir, mcm_dir): """ This is the main function of this file. It takes as input a chemical mechanism file (.fac), and from it generates 5 files for use by AtChem2's Fortran code: @@ -489,13 +489,20 @@ def main(): else: mcm_dir = sys.argv[3] - # check the locations supplied exist + # check that the locations supplied exist assert os.path.isfile(input_filename), 'Failed to find file ' + input_filename assert os.path.exists(mech_dir), 'Failed to find directory ' + mech_dir assert os.path.exists(mcm_dir), 'Failed to find directory ' + mcm_dir - # call conversion function - convert(input_filename, mech_dir, mcm_dir) + # check that the mechanism file is in FACSIMILE format + if input_filename.split(".")[1] == "kpp": + # input_file = convert_kpp(input_filename) + print ('KPP format is not supported yet') + else: + input_file = input_filename + + # call conversion to Fortran function + convert_to_fortran(input_file, mech_dir, mcm_dir) if __name__ == '__main__': From 78d3690859d8e0e3ecb7a8c535a2a8ee7db8c6a2 Mon Sep 17 00:00:00 2001 From: rs028 Date: Wed, 19 Apr 2023 15:49:20 +0100 Subject: [PATCH 02/24] Tidy build py scripts --- build/fix_mechanism_fac.py | 22 +++++++++++++++------- build/mech_converter.py | 19 ++++++++++++------- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/build/fix_mechanism_fac.py b/build/fix_mechanism_fac.py index 867f53fb4..df908945b 100644 --- a/build/fix_mechanism_fac.py +++ b/build/fix_mechanism_fac.py @@ -9,22 +9,27 @@ # # ----------------------------------------------------------------------------- +# -------------------------------------------------------------------- # # This script contains functions to fix the contents of a chemical # mechanism file in FACSIMILE format (.fac ) by removing the incorrect # newline characters. # +# The script includes two functions: +# - fix_fac_full_contents +# - fix_fac_full_file +# # ARGUMENT: # - path to the .fac file -# ---------------------------------------------- # +# -------------------------------------------------------------------- # from __future__ import print_function from functools import reduce -import sys -import re +import sys, re -## ------------------------------------------------------------------ ## +## ------------------------------------------------------------ ## +# ---------------------------------------------------- def fix_fac_full_contents(filename): # Given a filename, return the contents of the file, but with # incorrect newline characters removed, and the affected lines @@ -103,6 +108,7 @@ def fix_fac_full_contents(filename): return final_list +# ---------------------------------------------------- def fix_fac_full_file(filename): # Given a filename, overwrite the contents of the file with the same contents, # but with incorrect newline characters removed, and the affected lines @@ -118,18 +124,20 @@ def fix_fac_full_file(filename): return -## ------------------------------------------------------------------ ## +## ------------------------------------------------------------ ## def main(): - # Pass argument from command line as path to file. + # Pass argument from command line as path to file if len(sys.argv) > 1: fix_fac_full_contents(sys.argv[1]) else: print('******************************') - print("Please pass a filename as argument. This script will then fix this file to remove incorrect newlines.") + print('Please pass a filename as script argument.') + print('The script will then fix the file to remove incorrect newlines.') print('******************************') return +# Call the main function if executed as script if __name__ == '__main__': main() diff --git a/build/mech_converter.py b/build/mech_converter.py index bf576bda3..fe5f0ec30 100644 --- a/build/mech_converter.py +++ b/build/mech_converter.py @@ -12,6 +12,7 @@ # # ----------------------------------------------------------------------------- +# -------------------------------------------------------------------- # # This script converts a chemical mechanism file in FACSIMILE format # (.fac) into a Fortran-compatible format. The script generates five files in # the model configuration directory: @@ -21,26 +22,29 @@ # - mechanism.ro2 # - mechanism.f90 # +# The script includes two functions: +# - tokenise_and_process +# - convert_to_fortran +# # Acknowledgements: B. Nelson, M. Newland # # ARGUMENTS: # - path to the .fac file # - path to the model configuration directory [default: model/configuration/] # - path to the MCM data files directory [default: mcm/] -# ---------------------------------------------- # +# -------------------------------------------------------------------- # from __future__ import print_function -import sys -import re -import os +import os, sys, re import fix_mechanism_fac reservedSpeciesList = ['N2', 'O2', 'M', 'RH', 'H2O', 'BLHEIGHT', 'DEC', 'JFAC', 'DILUTE', 'ROOF', 'ASA', 'RO2'] reservedOtherList = ['EXP', 'TEMP', 'PRESS', 'LOG10', 'T', 'J'] -## ------------------------------------------------------------------ ## +## ------------------------------------------------------------ ## +# ---------------------------------------------------- def tokenise_and_process(input_string, variablesDict): """ This function takes in a single string, and a dictionary of known variables from previous lines, @@ -103,6 +107,7 @@ def tokenise_and_process(input_string, variablesDict): return new_rhs +# ---------------------------------------------------- def convert_to_fortran(input_file, mech_dir, mcm_dir): """ This is the main function of this file. It takes as input a chemical mechanism file (.fac), and from it generates @@ -473,7 +478,7 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): raise RuntimeError(error_message) -## ------------------------------------------------------------------ ## +## ------------------------------------------------------------ ## def main(): @@ -504,7 +509,7 @@ def main(): # call conversion to Fortran function convert_to_fortran(input_file, mech_dir, mcm_dir) - +# Call the main function if executed as script if __name__ == '__main__': try: main() From 989ed4186cc233d8ff605a6fab45d3b3a3d36194 Mon Sep 17 00:00:00 2001 From: rs028 Date: Fri, 21 Apr 2023 12:31:04 +0100 Subject: [PATCH 03/24] Rename some variables for clarity --- build/fix_mechanism_fac.py | 167 ++++++++++++++++++++++--------------- 1 file changed, 102 insertions(+), 65 deletions(-) diff --git a/build/fix_mechanism_fac.py b/build/fix_mechanism_fac.py index df908945b..2e4519ada 100644 --- a/build/fix_mechanism_fac.py +++ b/build/fix_mechanism_fac.py @@ -10,58 +10,80 @@ # ----------------------------------------------------------------------------- # -------------------------------------------------------------------- # -# This script contains functions to fix the contents of a chemical -# mechanism file in FACSIMILE format (.fac ) by removing the incorrect -# newline characters. + +# This script corrects the content of a chemical mechanism file in +# FACSIMILE format (.fac ) by removing incorrect newline characters. +# +# Due to a bug of the extraction tool on the MCM website, sometimes +# the newline character is inserted in the wrong place. For example: +# +# % 3.8D-13*EXP(780/TEMP)*(1-1/(1+498*EXP(-1160/TEMP))) : CH3O2 + HO2 = +# CH3OOH ; % 3.8D-13*EXP(780/TEMP)*(1/(1+498*EXP(-1160/TEMP))) : CH3O2 + HO2 = +# HCHO ; +# % 2.3D-12*EXP(360/TEMP)*0.001 : CH3O2 + NO = CH3NO3 ; +# +# This may cause issues during the conversion to Fortran format by +# mech_converter.py. The script fixes these errors, if present, and +# returns the chemical mechanism properly formatted, e.g.: # -# The script includes two functions: -# - fix_fac_full_contents -# - fix_fac_full_file +# % 3.8D-13*EXP(780/TEMP)*(1-1/(1+498*EXP(-1160/TEMP))) : CH3O2 + HO2 = CH3OOH ; +# % 3.8D-13*EXP(780/TEMP)*(1/(1+498*EXP(-1160/TEMP))) : CH3O2 + HO2 = HCHO ; +# % 2.3D-12*EXP(360/TEMP)*0.001 : CH3O2 + NO = CH3NO3 ; # # ARGUMENT: -# - path to the .fac file +# 1. path to the mechanism .fac file # -------------------------------------------------------------------- # from __future__ import print_function from functools import reduce import sys, re -## ------------------------------------------------------------ ## +# =========================== FUNCTIONS =========================== # -# ---------------------------------------------------- -def fix_fac_full_contents(filename): - # Given a filename, return the contents of the file, but with - # incorrect newline characters removed, and the affected lines - # concatenated correctly. This will probably fail if a line is - # REALLY long, stretching over two full lines, but should probably - # then give an error as output. - # - # Using splitlines rather than readlines(), we take out the errant - # carriage returns, and for any line with such on it, we return to - # members of the list. - with open(filename, 'r') as file_open: +def fix_fac_full_contents(input_file): + """ + Given a .fac file, return the contents of the file, but with + incorrect newline characters removed and the affected lines + concatenated correctly. + + WARNING: this will probably fail if a line is REALLY long, + stretching over two full lines, but should probably then give an + error as output. + + Args: + input_file (str): name of the .fac file to be fixed + + Returns: + fixed_file (list): corrected mechanism file, with each line as + a separate string + """ + # Using splitlines() rather than readlines(), we take out the + # errant carriage returns, and, for any line with such on it, we + # return it to the list. + with open(input_file, 'r') as file_open: contents = file_open.read().splitlines() # print contents orig_contents_len = len(contents) - print(str(filename) + ': file read in ' + str(orig_contents_len) + ' items') + print(str(input_file) + ': file read in ' + str(orig_contents_len) + ' items.') contents_count = 0 - # This variable will hold the indices to be deleted once their contents have - # been concatenated onto the previous element. + # This variable will hold the indices to be deleted once their + # contents have been concatenated onto the previous element. to_delete = [] # First, wait until we reach a line containing 'Reaction definitions'. - # Then ignore comment lines. - # Then correct the lines which don't start with a '%': they should be concatenated onto the previous entry. + # Second, ignore comment lines. + # Third, correct the lines which don't start with a '%': they should + # be concatenated onto the previous entry. in_reaction_definition_section = False for i in range(len(contents)): if not in_reaction_definition_section: - # Check to see whether we are entering the 'Reaction definitions' section + # Check to see whether we are entering the 'Reaction definitions' section. if 'Reaction definitions.' in contents[i]: in_reaction_definition_section = True - # Only do other checks if we've reached 'Reaction definitions' sections + # Only do other checks if we've reached the 'Reaction definitions' section. else: if re.match(r'\*', contents[i]): pass @@ -73,69 +95,84 @@ def fix_fac_full_contents(filename): # print contents[i - 1] contents_count += 1 to_delete.append(i) - print(str(contents_count) + ' corrections made - now removing old') + print(str(contents_count) + ' corrections made - now removing old.') - # Remove old elements which have now been concatenated onto previous + # Remove old elements which have now been concatenated onto previous. for i in reversed(to_delete): del contents[i] - assert orig_contents_len == contents_count + len(contents), \ - str(filename) + ': file is probably too messed up with carriage returns for this simple script to fix.' - - # If there are any lines that have now been doubled-stacked, then break them into pieces. - # Find the end of the header section, because we don't want to parse that section anymore - it - # often contains semicolons within the lines as well as at the end, which breaks all our logic - end_of_header_index = [i for i, item in enumerate(contents) if re.search(r'Generic Rate Coefficients', item)] + assert orig_contents_len == contents_count + len(contents), str(input_file) \ + + ': file is probably too messed up with carriage returns for this script to fix.' + + # If there are any lines that have now been doubled-stacked, break them into pieces. + # Find the end of the header section, because we don't want to parse that section + # anymore. It often contains semicolons within the lines as well as at the end, + # which breaks all our logic. + end_of_header_index = [i for i, item in enumerate(contents) \ + if re.search(r'Generic Rate Coefficients', item)] assert len(end_of_header_index) == 1 end_of_header_index = end_of_header_index[0] # Split non-header lines by semicolons, but we keep the semicolons this way. - interim_contents = [reduce(lambda acc, elem: acc[:-1] + [acc[-1] + elem] if elem == ";" else acc + [elem], re.split("(;)", element), []) for element in contents[end_of_header_index:]] + interim_contents = [reduce(lambda acc, elem: acc[:-1] + [acc[-1] + elem] \ + if elem == ";" else acc + [elem], re.split("(;)", element), []) \ + for element in contents[end_of_header_index:]] # Remove empty sub-strings interim_contents = [[item for item in sublist if item] for sublist in interim_contents] - # Look for any lines containing more than 2 elements. These are lines where more than - # one line is broken running together. At this point, the file is too broken to - # easily fix manually - get the user to fix it and run again. + # Look for any lines containing more than 2 elements. These are lines where + # more than one line is broken running together. At this point, the file is + # too broken to easily fix manually - get the user to fix it and run again. if max([len(line) for line in interim_contents]) > 2: # Get index of line with error - error_line = ([len(line) for line in interim_contents]).index(max([len(line) for line in interim_contents])) + end_of_header_index + 1 - exit('The inputted file is broken near to line ' + str(error_line) + ' in a way that this script cannot handle.' + - ' Please manually fix this error and re-run this script.') - - # Reattach the header lines, and unwrap the list of lists in interim_contents - final_list = contents[:end_of_header_index] + [item for sublist in interim_contents for item in sublist] - return final_list - - -# ---------------------------------------------------- -def fix_fac_full_file(filename): - # Given a filename, overwrite the contents of the file with the same contents, - # but with incorrect newline characters removed, and the affected lines - # concatenated correctly. This will probably fail if a line is REALLY long, - # stretching over two full lines, but should probably then give an error as output. - # All the heavy lifting is done by fix_fac_contents - here we just provide a - # simple wrapper to write back to the same file. - print('Running fix_fac_file on ' + str(filename)) - contents = fix_fac_full_contents(filename) + line_lengths = [len(line) for line in interim_contents] + error_line = line_lengths.index(max(line_lengths)) + end_of_header_index + 1 + exit('The inputted file is broken near to line ' + str(error_line) \ + + ' in a way that this script cannot handle.' \ + + ' Please manually fix this error and re-run this script.') + + # Reattach the header lines, and unwrap the list of lists in interim_contents. + fixed_file = contents[:end_of_header_index] \ + + [item for sublist in interim_contents for item in sublist] + return fixed_file + +# ------------------------------------------------------------ # + +def fix_fac_full_file(input_file): + """ + Given a .fac file, overwrite the contents of the file with the + same contents, but with incorrect newline characters removed and + the affected lines concatenated correctly. + + All the work is done by the fix_fac_contents() function -- see its + documentation for details. This function is just a simple wrapper + to write the output of fix_fac_contents() back to the same file. + + Args: + input_file (str): name of the .fac file to be fixed + + Returns: + None + """ + print('Running fix_fac_full_file on ' + str(input_file)) + contents = fix_fac_full_contents(input_file) contents = [item + '\n' for item in contents] - with open(filename, 'w') as file_open: + with open(input_file, 'w') as file_open: file_open.writelines(contents) return -## ------------------------------------------------------------ ## +# =========================== MAIN =========================== # def main(): - # Pass argument from command line as path to file + # Pass argument from command line - name of the .fac file to be fixed if len(sys.argv) > 1: fix_fac_full_contents(sys.argv[1]) else: - print('******************************') + print('******************************************') print('Please pass a filename as script argument.') - print('The script will then fix the file to remove incorrect newlines.') - print('******************************') + print('******************************************') return # Call the main function if executed as script From 8c4c3d67f4e0963e57e884de9c32353c63a093c1 Mon Sep 17 00:00:00 2001 From: rs028 Date: Fri, 21 Apr 2023 18:30:40 +0100 Subject: [PATCH 04/24] Tidy build scripts --- build/fix_mechanism_fac.py | 8 +- build/mech_converter.py | 412 +++++++++++++++++++++---------------- 2 files changed, 237 insertions(+), 183 deletions(-) diff --git a/build/fix_mechanism_fac.py b/build/fix_mechanism_fac.py index 2e4519ada..789664b19 100644 --- a/build/fix_mechanism_fac.py +++ b/build/fix_mechanism_fac.py @@ -90,9 +90,9 @@ def fix_fac_full_contents(input_file): else: if not re.match(r'%', contents[i]): # print 'fail' - # print contents[i - 1], 'XX', contents[i], 'XX', contents[i + 1] - contents[i - 1] += ' ' + contents[i] - # print contents[i - 1] + # print contents[i-1], 'XX', contents[i], 'XX', contents[i+1] + contents[i-1] += ' ' + contents[i] + # print contents[i-1] contents_count += 1 to_delete.append(i) print(str(contents_count) + ' corrections made - now removing old.') @@ -127,7 +127,7 @@ def fix_fac_full_contents(input_file): # Get index of line with error line_lengths = [len(line) for line in interim_contents] error_line = line_lengths.index(max(line_lengths)) + end_of_header_index + 1 - exit('The inputted file is broken near to line ' + str(error_line) \ + exit('The inputted file is broken near line ' + str(error_line) \ + ' in a way that this script cannot handle.' \ + ' Please manually fix this error and re-run this script.') diff --git a/build/mech_converter.py b/build/mech_converter.py index fe5f0ec30..f4e6578f6 100644 --- a/build/mech_converter.py +++ b/build/mech_converter.py @@ -14,54 +14,60 @@ # -------------------------------------------------------------------- # # This script converts a chemical mechanism file in FACSIMILE format -# (.fac) into a Fortran-compatible format. The script generates five files in -# the model configuration directory: +# (.fac) into the Fortran-compatible format used by AtChem2. The +# script generates 5 files in the model configuration directory: + # - mechanism.species # - mechanism.reac # - mechanism.prod # - mechanism.ro2 # - mechanism.f90 # -# The script includes two functions: -# - tokenise_and_process -# - convert_to_fortran -# # Acknowledgements: B. Nelson, M. Newland # # ARGUMENTS: -# - path to the .fac file -# - path to the model configuration directory [default: model/configuration/] -# - path to the MCM data files directory [default: mcm/] +# 1. path to the mechanism .fac file +# 2. path to the model configuration directory [default: model/configuration/] +# 3. path to the MCM data files directory [default: mcm/] # -------------------------------------------------------------------- # from __future__ import print_function import os, sys, re import fix_mechanism_fac -reservedSpeciesList = ['N2', 'O2', 'M', 'RH', 'H2O', 'BLHEIGHT', 'DEC', 'JFAC', 'DILUTE', 'ROOF', 'ASA', 'RO2'] +reservedSpeciesList = ['N2', 'O2', 'M', 'RH', 'H2O', 'BLHEIGHT', 'DEC', 'JFAC', + 'DILUTE', 'ROOF', 'ASA', 'RO2'] reservedOtherList = ['EXP', 'TEMP', 'PRESS', 'LOG10', 'T', 'J'] -## ------------------------------------------------------------ ## +# =========================== FUNCTIONS =========================== # -# ---------------------------------------------------- def tokenise_and_process(input_string, variablesDict): """ - This function takes in a single string, and a dictionary of known variables from previous lines, - and returns the same string but with known variables replaced by a reference to their matching - element in a vector q. This removes the dependence on potentially 100+ named variables, and - replaces them with a single vector. - - :param input_string: this should be a string. Its contents will be used as the basis of the return string. - :param variableDict: this is a Dictionary containing all the known variables up to this pointself. - :returns new_rhs: a string based on input_string, but with references to known variables replaced by - references to elements in the vector q. + This function takes in a single string, and a dictionary of + known variables from previous lines, and returns the same string + but with known variables replaced by a reference to their matching + element in a vector q. This removes the dependence on potentially + 100+ named variables, and replaces them with a single vector. + + Args: + input_string (str): a string which will be used as the basis + of the return string (new_rhs) + variablesDict (dict): a dictionary containing all the known + variables up to this point + + Returns: + new_rhs (str): a string based on input_string, but with references + to known variables replaced by references to elements + in vector q """ - assert isinstance(input_string, str), 'tokenise_and_process: input_string is not of type str: ' + str(input_string) - assert isinstance(variablesDict, dict), 'tokenise_and_process: variablesDict is not of type dict: ' + str(variablesDict) + assert isinstance(input_string, str), \ + 'tokenise_and_process: input_string is not of type str: ' + str(input_string) + assert isinstance(variablesDict, dict), \ + 'tokenise_and_process: variablesDict is not of type dict: ' + str(variablesDict) - # Generate start and end points of sections of symbols and nonsymbols + # Generate start and end points of sections of symbols and non-symbols. symbol_regex = '[()\-+*@/ ]+' nonsymbol_regex = '[^()\-+*@/ ]+' list_of_symbol_starts = [m.start(0) for m in re.finditer(symbol_regex, input_string)] @@ -70,92 +76,122 @@ def tokenise_and_process(input_string, variablesDict): list_of_nonsymbol_ends = [m.end(0) for m in re.finditer(nonsymbol_regex, input_string)] new_rhs = '' - # Now that the symbol/non-symbol sections are identified, we need to create the new string by recombining otherwise - # sections in the right order, with some replaced by q(i) syntax. + # Now that the symbol/non-symbol sections are identified, we need to create + # the new string by recombining otherwise sections in the right order, with + # some replaced by q(i) syntax. # - # Recombine the lists in the right order, but replace the nonsymbols that aren't numbers, reserved words or reserved species - # (and thus must be new species/intermediate values) with q(i) notation. + # Recombine the lists in the right order, but replace the non-symbols that + # aren't numbers, reserved words or reserved species (and thus must be new + # species/intermediate values) with q(i) notation. # # Loop while there are any substrings left while list_of_symbol_starts != [] or list_of_nonsymbol_starts != []: - # We should use the next symbol if either - # 1) both lists are non-empty and the symbols list has a lower first element, or - # 2) only the symbols list has anything left in it - if ((list_of_symbol_starts != [] and list_of_nonsymbol_starts != []) and list_of_symbol_starts[0] < list_of_nonsymbol_starts[0]) \ - or (list_of_symbol_starts != [] and list_of_nonsymbol_starts == []): - # add next symbol - # Print the substring as-is + # We should use the next symbol if: + # 1) both lists are non-empty and the symbols list has a lower first element, or + # 2) only the symbols list has anything left in it + if ((list_of_symbol_starts != [] and list_of_nonsymbol_starts != []) \ + and list_of_symbol_starts[0] < list_of_nonsymbol_starts[0]) \ + or (list_of_symbol_starts != [] and list_of_nonsymbol_starts == []): + # Add next symbol. Print the substring as-is. new_rhs += input_string[list_of_symbol_starts[0]:list_of_symbol_ends[0]] # Remove the indices of this substring from the lists del list_of_symbol_starts[0] del list_of_symbol_ends[0] - else: # This will execute if there are only non-symbols left, or if the non-symbols list has a lower first element. - # add next nonsymbol - # Get the substring of interest + # Otherwise, if there are only non-symbols left, or if the non-symbols + # list has a lower first element. + else: + # Add next non-symbol. Get the substring of interest. varname = input_string[list_of_nonsymbol_starts[0]:list_of_nonsymbol_ends[0]] - # If it's not a number or a reserved word, it must be a variable, so substitute with the relevant element from q. - if not re.match('^[0-9]', varname) and varname not in reservedSpeciesList and varname not in reservedOtherList: + # If it's not a number or a reserved word, it must be a variable, + # so substitute with the relevant element from q. + if not re.match('^[0-9]', varname) and varname not in reservedSpeciesList \ + and varname not in reservedOtherList: new_rhs += 'q(' + str(variablesDict[varname]) + ')' - # Otherwise, just print the substring as-is + # Otherwise, just print the substring as-is. else: new_rhs += input_string[list_of_nonsymbol_starts[0]:list_of_nonsymbol_ends[0]] - # Remove the indices of this substring from the lists + # Remove the indices of this substring from the lists. del list_of_nonsymbol_starts[0] del list_of_nonsymbol_ends[0] - # Return the reconstructed string + # Return the reconstructed string. return new_rhs +# ------------------------------------------------------------ # -# ---------------------------------------------------- def convert_to_fortran(input_file, mech_dir, mcm_dir): """ - This is the main function of this file. It takes as input a chemical mechanism file (.fac), and from it generates - 5 files for use by AtChem2's Fortran code: - - - 'Generic Rate Coefficients' and 'Complex reactions' go to mech_dir/mechanism.f90 with little more than formatting - changes - each line is replicated in full but with each named rate converted to an element in the vector q. - - The rates defined in 'Reaction definitions' also go to mech_dir/mechanism.f90 as elements of the vector p. - - The species involved as reactants (respectively products) in reactions in 'Reaction definitions' are split up into individual - species, and their species and reactions numbers go to mechanism.reac (respectively mechanism.prod). Combining - mechanism.reac, mechanism.prod and the last section of mech_dir/mechanism.f90 gives the original information - contained in 'Reaction definitions' but in the format that AtChem2 can parse. - - The numbers and names of all species encountered go to mechanism.species. - - The numbers and names of all RO2 species in 'Peroxy radicals' end up in mechanism.ro2. - - :param input_file: string containing a relative or absolute reference to the .fac file to be processed. - :param mech_dir: string containing a relative or absolute reference to the directory in which the function should - place mechanism.f90, and where the environmentVariables.config file should be read from. - This is normally model/configuration. - :param mech_dir: string containing a relative or absolute reference to the directory in which the function should - place mechanism.{prod,reac,ro2,species}. This is normally model/configuration/ for the given model. - :param mcm_dir: string containing a relative or absolute reference to the directory housing the reference file peroxy-radicals_v3.3.1. - This is normally mcm/ + Convert a chemical mechanism in FACSIMILE format into a + Fortran-compatible format that can be fed to the ODE solver. + This function takes as input a file with a chemical mechanism (.fac), + and generates 5 Fortran files (mechanism.*) in a given directory (mech_dir): + + * Each species and reaction in the chemical mechanism is assigned + an ID number. + + * The equations defined in sections 'Generic Rate Coefficients' + and 'Complex reactions' go to mechanism.f90 with little more + than formatting changes -- each line is replicated in full, with + each named rate converted to an element in vector q. + + * The reaction rates defined in section 'Reaction definitions' go + to mechanism.f90 as elements of vector p. + + * The species involved as reactants (respectively products) in the + reactions in section 'Reaction definitions' are split up into + individual species, and the species and reactions ID numbers go + to mechanism.reac (respectively mechanism.prod). Combining + mechanism.reac, mechanism.prod and the last section of + mechanism.f90 gives the original information contained in + section 'Reaction definitions' of the .fac file, but in a format + that AtChem2 can parse. + + * The ID numbers and names of all species in the chemical + mechanism go to mechanism.species. + + * The ID numbers and names of all RO2 species in section 'Peroxy + radicals' go to mechanism.ro2. + + Args: + input_file (str): relative or absolute reference to the .fac file + mech_dir (str): relative or absolute reference to the directory where this + function should create the mechanism.* files, and where + the environmentVariables.config file should be read from + By default it is model/configuration/ + mcm_dir (str): relative or absolute reference to the directory containing + the reference file peroxy-radicals_v3.3.1 + By default it is mcm/ + + Returns: + None """ - # Work out the values of directory and filename of input_file, and check their existence. + # Get the directory and filename of input_file, and check that they exist. input_directory = os.path.dirname(os.path.abspath(input_file)) input_filename = os.path.basename(input_file) - assert os.path.isfile(os.path.join(input_directory, input_filename)), 'The input file ' + str( - os.path.join(input_directory, input_filename)) + ' does not exist.' + assert os.path.isfile(os.path.join(input_directory, input_filename)), \ + 'The input file ' + str(os.path.join(input_directory, input_filename)) +\ + ' does not exist.' print(input_directory) - # Fix the input contents of any errant newlines + # Fix the input contents of any errant newlines (see documentation + # of fix_mechanism_fac.py for more info). fix_mechanism_fac.fix_fac_full_file(os.path.join(input_directory, input_filename)) - # Read in the input file + # Read-in the input file. print('Reading input file') with open(os.path.join(input_directory, input_filename), 'r') as input_file: s = input_file.readlines() - # split the lines into the following sections: + # Split the lines into the following sections: # - Ignore everything up to Generic Rate Coefficients # - Generic Rate Coefficients # - Complex reactions # - Peroxy radicals # - Reaction definitions section_headers_indices = [0, 1, 2, 3] - section_headers = ['Generic Rate Coefficients', 'Complex reactions', 'Peroxy radicals', 'Reaction definitions'] + section_headers = ['Generic Rate Coefficients', 'Complex reactions', + 'Peroxy radicals', 'Reaction definitions'] generic_rate_coefficients = [] complex_reactions = [] peroxy_radicals = [] @@ -177,234 +213,243 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): else: assert section == 0, "Error, section is not in [0,4]" - - # Convert peroxy_radicals to a list of strings, each of the RO2 species from 'Peroxy radicals' + # Convert peroxy_radicals to a list of strings, with each of the RO2 species from 'Peroxy radicals'. ro2List = [] for item in peroxy_radicals: if not re.match('\*', item): - # We have an equals sign on the first line. Handle this by splitting against =, then taking the last element of the - # resulting list, which will either be the right-hand side of the first line, or the whole of any other line. - # Similarly, the final line will end with a colon. Handle in a similar way. - # Then split by +. Append each item to ro2_input: multiple appends use 'extend' + # We have an equals sign on the first line. Handle this by splitting against '=', + # then taking the last element of the resulting list, which will either be the + # right-hand side of the first line, or the whole of any other line. Similarly, + # the final line will end with a colon. Handle in a similar way. Then split + # by '+'. Append each item to ro2_input: multiple appends use 'extend'. ro2List.extend([elem.strip() for elem in item.split('=')[-1].split(';')[0].strip().split('+')]) - # Remove empty strings + # Remove empty strings. ro2List = list(filter(None, ro2List)) - - # Read in the reference RO2 species from the peroxy-radicals_v3.3.1 file + # Read in the reference RO2 species from the peroxy-radicals_v3.3.1 file. with open(os.path.join(mcm_dir, 'peroxy-radicals_v3.3.1'), 'r') as RO2List_file: RO2List_reference = [r.rstrip() for r in RO2List_file.readlines()] - # Check each of the RO2s from 'Peroxy radicals' are in the reference RO2 list. If not print a warning at the top of - # mechanism.f90 for each errant species. + # Check each of the RO2s from 'Peroxy radicals' are present in the reference RO2 list. + # If not print a warning at the top of mechanism.f90 for each errant species. # TODO: This will break the exected format when mechanism.f90 is replaced by a parsable format. print('looping over inputted RO2s') with open(os.path.join(mech_dir, 'mechanism.f90'), 'w') as mech_rates_file: - mech_rates_file.write("""! Note that this file is automatically generated by build/mech_converter.py -- Any manual edits to this file will be overwritten when calling build/mech_converter.py -""") + mech_rates_file.write('! Note that this file is automatically generated by build/mech_converter.py -- Any manual edits to this file will be overwritten when calling build/mech_converter.py\n') + for ro2_species in [element for element in ro2List if element not in RO2List_reference]: print(' ****** Warning: ' + ro2_species + ' NOT found in the reference RO2 list ****** ') - mech_rates_file.write('! ' + ro2_species + - ' is not in the MCM list of RO2 species. Should it be in the RO2 sum?\n') + mech_rates_file.write('! ' + ro2_species + ' is not in the MCM list of RO2 species. Should it be in the RO2 sum?\n') - # Identify whether dilution is in use + # Check the DILUTE environment variable to identify whether dilution should be applied. dilute = False with open(mech_dir + '/environmentVariables.config') as env_var_file: environmentVariables = env_var_file.readlines() for x in environmentVariables: x = x.split() - try: if x[1] == "DILUTE" and x[2] != "NOTUSED": dilute = x[2] - except IndexError: continue + # ------------------------------------------------- + # Initialise list, dictionary and a counter. mechanism_rates_coeff_list = [] variablesDict = dict() reactionNumber = 0 - # Process sections 1 and 2 - # - copy comment lines across - # - other lines are reformatted to be Fortran syntax, then its contents edited to convert individual - # rate names to elements in a vector q. + + # Process sections 1 and 2 ('Generic Rate Coefficients', 'Complex reactions'): + # - copy comment lines across. + # - other lines are reformatted to Fortran syntax, then their contents edited + # to convert individual rate names to elements in a vector q. for line in generic_rate_coefficients + complex_reactions: - # Check for comments (beginning with a !), or blank lines + + # Check for comments (beginning with a '!'), or blank lines. if (re.match('!', line) is not None) or (line.isspace()): mechanism_rates_coeff_list.append(line) - # Check for lines starting with either ; or *, and write these as comments + # Check for lines starting with either ';' or '*', and write these as comments. elif (re.match(';', line) is not None) or (re.match('[*]', line) is not None): mechanism_rates_coeff_list.append('!' + line) - # Otherwise assume all remaining lines are in the correct format, and so process them + # Otherwise assume all remaining lines are in the correct format, and process them. else: - # reactionNumber keeps track of the line we are processing - reactionNumber += 1 + reactionNumber += 1 # keep track of the line we are processing - # This matches anything like @-dd.d and replaces with **(-dd.d). This uses (?<=@) as a lookbehind assertion, - # then matches - and any combination of digits and decimal points. This replaces the negative number by its - # bracketed version. - # It also then converts all @ to ** etc. + # Match anything like '@-dd.d' and replaces with '**(-dd.d)'. + # Use '(?<=@)' as a lookbehind assertion, then matches any combination + # of digits and decimal points. Replace the negative number by its + # bracketed version. Also convert all '@' to '**' etc... line2 = re.sub('(?<=@)-[0-9.]*', '(\g<0>)', line.replace(';', '').strip() ).replace('@', '**') - # Append _DP to the end of all digits that aren't followed by more digits or letters (targets a few too many) + # Append _DP to the end of all digits that aren't followed + # by more digits or letters (targets a few too many). line2 = re.sub('[0-9]+(?![a-zA-Z0-9\.])', '\g<0>_DP', line2) - # Undo the suffix _DP for any species names and for LOG10 + # Undo the suffix _DP for any species names and for LOG10. line2 = re.sub(r'\b(?P[a-zA-Z][a-zA-Z0-9]*)_DP', '\g', line2) - # Undo the suffix _DP for any numbers like 1D7 or 2.3D-8 + # Undo the suffix _DP for any numbers like 1D7 or 2.3D-8. line2 = re.sub(r'\b(?P[0-9][0-9\.]*)[dDeE](?P[+-]*[0-9]+)_DP', '\ge\g_DP', line2) - # Add .0 to any literals that don't have a decimal place - this is necessary as it seems you can't use extended - # precision on such a number - gfortran complains about an unknown integer kind, when it should really be a real kind + # Add .0 to any literals that don't have a decimal place - this is necessary + # as it seems you can't use extended precision on such a number - gfortran + # complains about an unknown integer kind, when it should really be a real kind. line2 = re.sub(r'(?[0-9]+)_DP', '\g.0_DP', line2) - # strip whitespace, ; and % + # Strip whitespace, ';' and '%'. cleaned_line = line2.strip().strip('%;').strip() - # Process the assignment: split by = into variable names and values + # Process the assignment: split by '=' into variable names + # and values. The strip each. [lhs, rhs] = re.split('=', cleaned_line) - # Strip each. variable_name = lhs.strip() value = rhs.strip() # TODO: check for duplicates variablesDict[variable_name] = reactionNumber - # Replace any variables declared here with references to q, with each new variable assigned - # to a new element of q. + # Replace any variables declared here with references to q: each new + # variable is assigned to a new element of q. new_rhs = tokenise_and_process(value, variablesDict) - # Save the resulting string to mechanism_rates_coeff_list - mechanism_rates_coeff_list.append('q('+str(variablesDict[variable_name]) + ') = ' + new_rhs + ' !' + cleaned_line + '\n') + # Save the resulting string to mechanism_rates_coeff_list. + mechanism_rates_coeff_list.append('q('+str(variablesDict[variable_name]) + ') = ' \ + + new_rhs + ' !' + cleaned_line + '\n') - # Save the number of such equations to be output to mechanism.{prod,reac} + # Save the number of such equations to be output to mechanism.{prod,reac}. numberOfGenericComplex = reactionNumber + # ------------------------------------------------- - # Initialise a few variables + # Initialise a few variables. speciesList = [] rateConstants = [] reactionNumber = 0 - # Process 'Reaction definitions'. We process this before 'Peroxy radicals' because that relies on our - # SpeciesList generated here. + + # Process 'Reaction definitions'. We process this before 'Peroxy radicals' + # because that relies on SpeciesList, which is generated here. # - copy comment lines across # - other lines are split into their consituent parts: - # - rateConstants are the reaction rates; these are processed via reformatting and tokenisation to use the vector q where needed. - # - the reactants and products of each species are collected up, numbered as necessary, and their placements output to mechanism.{prod,reac,species} + # - rateConstants are the reaction rates; these are processed via + # reformatting and tokenisation to use the vector q where needed. + # - the reactants and products of each species are collected up, numbered + # as necessary, and their placements output to mechanism.{prod,reac,species} mech_reac_list = [] mech_prod_list = [] - # Loop over all lines in the reaction_definitions section of the input file + + # Loop over all lines in the reaction_definitions section of the input file. for line in reaction_definitions: - # Check for comments (beginning with a !), or blank lines + # Check for comments (beginning with a '!'), or blank lines. if (re.match('!', line) is not None) or (line.isspace()): rateConstants.append(line) - # Check for lines starting with either ; or *, and write these as comments + # Check for lines starting with either ';' or '*', and write these as comments. elif (re.match(';', line) is not None) or (re.match('[*]', line) is not None): rateConstants.append('!' + line) - # Otherwise assume all remaining lines are in the correct format, and so process them + # Otherwise assume all remaining lines are in the correct format, and process them. else: - # reactionNumber keeps track of the line we are processing - reactionNumber += 1 + reactionNumber += 1 # keep track of the line we are processing - # strip whitespace, ; and % + # Strip whitespace, ';' and '%'. line = line.strip().strip('%;').strip() - # split by the semi-colon : lhs is reaction rate, rhs is reaction equation + # Split by ':' -- lhs is reaction rate, rhs is reaction equation. [lhs, rhs] = re.split(':', line) - # Add reaction rate to rateConstants + # Add reaction rate to rateConstants. rateConstants.append(lhs) - # Process the reaction: split by = into reactants and products + # Process the reaction: split by '=' into reactants and products. [reactantsList, productsList] = re.split('=', rhs) - # Process each of reactants and products by splitting by +. Strip each at this stage. + # Process each of reactants and products by splitting by '+'. + # Strip each at this stage. reactants = [item.strip() for item in re.split('[+]', reactantsList)] products = [item.strip() for item in re.split('[+]', productsList)] - # Ignore empty reactantsList + # Ignore empty reactantsList. if not reactantsList.strip() == '': # Compare each reactant against known species. reactantNums = [] for x in reactants: - # If the reactant is a known species then add its number to reactantNums + # If the reactant is a known species then add its number to reactantNums. if x in speciesList: reactantNums.append(speciesList.index(x)+1) else: - # Reactant x is not a known species. - # Add reactant to speciesList, and add this number to - # reactantNums to record this reaction. + # Reactant x is not a known species. Add reactant to speciesList, + # then add this number to reactantNums to record this reaction. speciesList.append(x) reactantNums.append(len(speciesList)) - # Write the reactants to mech_reac_list + # Write the reactants to mech_reac_list. mech_reac_list.extend([str(reactionNumber) + ' ' + str(z) + '\n' for z in reactantNums]) - # Ignore empty productsList + # Ignore empty productsList. if not productsList.strip() == '': # Compare each product against known species. productNums = [] for x in products: - # If the reactant is a known species then add its number to reactantNums + # If the reactant is a known species then add its number to reactantNums. if x in speciesList: productNums.append(speciesList.index(x)+1) else: - # Product x is not a known species. - # Add product to speciesList, add this number to - # productNums to record this reaction. + # Product x is not a known species. Add product to speciesList, + # then add this number to productNums to record this reaction. speciesList.append(x) productNums.append(len(speciesList)) - # Write the products to mechanism.prod + # Write the products to mech_prod_list. mech_prod_list.extend([str(reactionNumber) + ' ' + str(z) + '\n' for z in productNums]) - # Write out species for reactions to implement DILUTE factor if it's not NOTUSED. + # ------------------------------------------------- + + # Write out species for reactions to apply dilution factor if DILUTE is not NOTUSED. if dilute: for spec in speciesList: reactionNumber += 1 mech_reac_list.append(str(reactionNumber) + ' ' + str(speciesList.index(spec) + 1) + '\n') with open(os.path.join(mech_dir, 'mechanism.prod'), 'w') as prod_file: - # Output number of species and number of reactions - prod_file.write(str(len(speciesList)) + ' ' + str(reactionNumber) + ' ' + str(numberOfGenericComplex) + ' numberOfSpecies numberOfReactions numberOfGenericComplex\n') - # Write all other lines + # Output number of species and number of reactions. + prod_file.write(str(len(speciesList)) + ' ' + str(reactionNumber) + ' ' + str(numberOfGenericComplex) \ + + ' numberOfSpecies numberOfReactions numberOfGenericComplex\n') + # Write all other lines. for line in mech_prod_list: prod_file.write(line) with open(os.path.join(mech_dir, 'mechanism.reac'), 'w') as reac_file: - # Output number of species and number of reactions - reac_file.write(str(len(speciesList)) + ' ' + str(reactionNumber) + ' ' + str(numberOfGenericComplex) + ' numberOfSpecies numberOfReactions numberOfGenericComplex\n') - # Write all other lines + # Output number of species and number of reactions. + reac_file.write(str(len(speciesList)) + ' ' + str(reactionNumber) + ' ' + str(numberOfGenericComplex) \ + + ' numberOfSpecies numberOfReactions numberOfGenericComplex\n') + # Write all other lines. for line in mech_reac_list: reac_file.write(line) - # Write speciesList to mechanism.species, indexed by (1 to len(speciesList)) + # Write speciesList to mechanism.species, indexed by (1 to len(speciesList)). with open(os.path.join(mech_dir, 'mechanism.species'), 'w') as species_file: for i, x in zip(range(1, len(speciesList) + 1), speciesList): species_file.write(str(i) + ' ' + str(x) + '\n') - - # Write out rate coefficients + # Write out rate coefficients. i = 0 mech_rates_list = [] for rate_counter, x in zip(range(len(s)), rateConstants): if (re.match('!', x) is not None) | (x.isspace()): mech_rates_list.append(str(x)) else: - # This matches anything like @-dd.d and replaces with **(-dd.d). This uses (?<=@) as a lookbehind assertion, - # then matches - and any combination of digits and decimal points. This replaces the negative number by its + # Match anything like '@-dd.d' and replaces with '**(-dd.d)'. + # Use '(?<=@)' as a lookbehind assertion, then matches any combination + # of digits and decimal points. Replace the negative number by its # bracketed version. i += 1 string = re.sub('(?<=@)-[0-9.]*', '(\g<0>)', x) @@ -412,20 +457,22 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): string = string.replace('@', '**') string = string.replace('<', '(') string = string.replace('>', ')') - # Replace any float-type numbers (xxx.xxxE+xx) with double-type - (xxx.xxxD+xx) + # Replace any float-type numbers (xxx.xxxE+xx) with double-type number (xxx.xxxD+xx) string = re.sub(r'(?P[0-9]+\.[0-9]+)[eE]', '\gD', string) mech_rates_list.append('p(' + str(i) + ') = ' + \ tokenise_and_process(string, variablesDict) + ' !' + reaction_definitions[rate_counter]) - # Write out further reactions to implement DILUTE factor if it's not NOTUSED. + # Write out further reactions to implement DILUTE factor. if dilute: for _ in speciesList: i += 1 mech_rates_list.append('p(' + str(i) + ') = DILUTE ! DILUTE\n') - # Combine mechanism rates and RO2 sum files + # ------------------------------------------------- + + # Combine mechanism rates and RO2 sum files. with open(os.path.join(mech_dir, 'mechanism.f90'), 'a') as mech_rates_coeff_file: mech_rates_coeff_file.write(""" module mechanism_mod @@ -440,10 +487,12 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): real(c_double), intent(inout) :: p(*), q(*) real(c_double), intent(in) :: TEMP, N2, O2, M, RH, H2O, BLHEIGHT, DEC, JFAC, DILUTE, ROOFOPEN, ASA, J(*), RO2 """) - # Write out Generic Rate Coefficients and Complex reactions + + # Write out 'Generic Rate Coefficients' and 'Complex reactions'. for item in mechanism_rates_coeff_list: mech_rates_coeff_file.write(item) - # Write out Reaction definitions + + # Write out 'Reaction definitions'. for r in mech_rates_list: mech_rates_coeff_file.write(r) mech_rates_coeff_file.write(""" @@ -451,9 +500,11 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): end module mechanism_mod """) + # ------------------------------------------------- - # Finally, now that we have the full species list, we can output the RO2s to mechanism.ro2 - # loop over RO2 and write the necessary line to mechanism.ro2, using the species number of the RO2 + # Finally, now that we have the full list of species, we can output the RO2s to + # mechanism.ro2, loop over RO2 and write the necessary line to mechanism.ro2, + # using the species ID number of the RO2. print('adding RO2 to ' + mech_dir + '/mechanism.ro2') with open(os.path.join(mech_dir, 'mechanism.ro2'), 'w') as ro2_file: ro2_file.write("""! Note that this file is automatically generated by build/mech_converter.py -- Any manual edits to this file will be overwritten when calling build/mech_converter.py @@ -463,10 +514,10 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): for speciesNumber, y in zip(range(1, len(speciesList) + 1), speciesList): if ro2List_i.strip() == y.strip(): ro2_file.write(str(speciesNumber) + ' !' + ro2List_i.strip() + '\n') - # Exit loop early if species found + # Exit loop early if species found. break - # This code only executes if the break is NOT called, i.e. if the loop runs to completion without the RO2 being - # found in the species list + # This code only executes if the break is NOT called, i.e. if the + # loop runs to completion without the RO2 being found in the speciesList. else: error_message = ''.join([ ' ****** ', @@ -478,36 +529,39 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): raise RuntimeError(error_message) -## ------------------------------------------------------------ ## +# =========================== MAIN =========================== # def main(): - assert len(sys.argv) > 1, 'Please enter a filename as argument, pointing to the chemical mechanism file (.fac ):' - input_filename = sys.argv[1] - # mech_dir defaults to '.' if not given + assert len(sys.argv) > 1, \ + 'Please enter the name of a chemical mechanism file (.fac ) as argument:' + file_name = sys.argv[1] + # mech_dir defaults to model/configuration/, if not given as argument if len(sys.argv) <= 2: mech_dir = './model/configuration/' else: mech_dir = sys.argv[2] + # mcm_dir defaults to mcm/, if not given as argument if len(sys.argv) <= 3: mcm_dir = './mcm/' else: mcm_dir = sys.argv[3] - # check that the locations supplied exist - assert os.path.isfile(input_filename), 'Failed to find file ' + input_filename + # Check that the files and directories exist + assert os.path.isfile(file_name), 'Failed to find file ' + file_name assert os.path.exists(mech_dir), 'Failed to find directory ' + mech_dir assert os.path.exists(mcm_dir), 'Failed to find directory ' + mcm_dir - # check that the mechanism file is in FACSIMILE format - if input_filename.split(".")[1] == "kpp": - # input_file = convert_kpp(input_filename) - print ('KPP format is not supported yet') + # Check that the mechanism file is in FACSIMILE format + if file_name.split(".")[1] == "kpp": + # convert from KPP to FACSIMILE + ##input_fac = convert_kpp(file_name) + exit('KPP format is not supported yet') else: - input_file = input_filename + input_fac = file_name - # call conversion to Fortran function - convert_to_fortran(input_file, mech_dir, mcm_dir) + # Call the conversion to Fortran function + convert_to_fortran(input_fac, mech_dir, mcm_dir) # Call the main function if executed as script if __name__ == '__main__': From 7216a798a1715acafee7fceacc9117a34abdfaf9 Mon Sep 17 00:00:00 2001 From: rs028 Date: Tue, 25 Apr 2023 19:01:24 +0100 Subject: [PATCH 05/24] Further tidying --- build/fix_mechanism_fac.py | 8 ++-- build/mech_converter.py | 75 ++++++++++++++++++++++---------------- mcm/INFO.md | 2 +- 3 files changed, 48 insertions(+), 37 deletions(-) diff --git a/build/fix_mechanism_fac.py b/build/fix_mechanism_fac.py index 789664b19..8f6116c85 100644 --- a/build/fix_mechanism_fac.py +++ b/build/fix_mechanism_fac.py @@ -48,11 +48,11 @@ def fix_fac_full_contents(input_file): concatenated correctly. WARNING: this will probably fail if a line is REALLY long, - stretching over two full lines, but should probably then give an - error as output. + stretching over two full lines, but in this case it should + then give an error as output. Args: - input_file (str): name of the .fac file to be fixed + input_file (str): name of the .fac file to be corrected Returns: fixed_file (list): corrected mechanism file, with each line as @@ -117,7 +117,7 @@ def fix_fac_full_contents(input_file): if elem == ";" else acc + [elem], re.split("(;)", element), []) \ for element in contents[end_of_header_index:]] - # Remove empty sub-strings + # Remove empty sub-strings. interim_contents = [[item for item in sublist if item] for sublist in interim_contents] # Look for any lines containing more than 2 elements. These are lines where diff --git a/build/mech_converter.py b/build/mech_converter.py index f4e6578f6..5547dd6dc 100644 --- a/build/mech_converter.py +++ b/build/mech_converter.py @@ -77,24 +77,24 @@ def tokenise_and_process(input_string, variablesDict): new_rhs = '' # Now that the symbol/non-symbol sections are identified, we need to create - # the new string by recombining otherwise sections in the right order, with + # the new string by recombining the other sections in the right order, with # some replaced by q(i) syntax. # # Recombine the lists in the right order, but replace the non-symbols that # aren't numbers, reserved words or reserved species (and thus must be new # species/intermediate values) with q(i) notation. # - # Loop while there are any substrings left + # Loop while there are any substrings left. while list_of_symbol_starts != [] or list_of_nonsymbol_starts != []: # We should use the next symbol if: - # 1) both lists are non-empty and the symbols list has a lower first element, or - # 2) only the symbols list has anything left in it + # 1) both lists are non-empty and the symbols list has a lower first element, or + # 2) only the symbols list has anything left in it. if ((list_of_symbol_starts != [] and list_of_nonsymbol_starts != []) \ and list_of_symbol_starts[0] < list_of_nonsymbol_starts[0]) \ or (list_of_symbol_starts != [] and list_of_nonsymbol_starts == []): # Add next symbol. Print the substring as-is. new_rhs += input_string[list_of_symbol_starts[0]:list_of_symbol_ends[0]] - # Remove the indices of this substring from the lists + # Remove the indices of this substring from the lists. del list_of_symbol_starts[0] del list_of_symbol_ends[0] # Otherwise, if there are only non-symbols left, or if the non-symbols @@ -121,10 +121,10 @@ def tokenise_and_process(input_string, variablesDict): def convert_to_fortran(input_file, mech_dir, mcm_dir): """ - Convert a chemical mechanism in FACSIMILE format into a - Fortran-compatible format that can be fed to the ODE solver. - This function takes as input a file with a chemical mechanism (.fac), - and generates 5 Fortran files (mechanism.*) in a given directory (mech_dir): + Convert a chemical mechanism in FACSIMILE format into a Fortran-compatible + format that can be fed to the AtChem2 ODE solver. This function takes as + input a file with a chemical mechanism (.fac), and generates 5 Fortran files + (mechanism.*) in a given directory (mech_dir): * Each species and reaction in the chemical mechanism is assigned an ID number. @@ -143,8 +143,8 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): to mechanism.reac (respectively mechanism.prod). Combining mechanism.reac, mechanism.prod and the last section of mechanism.f90 gives the original information contained in - section 'Reaction definitions' of the .fac file, but in a format - that AtChem2 can parse. + section 'Reaction definitions' of the .fac file, but in a + format that AtChem2 can parse. * The ID numbers and names of all species in the chemical mechanism go to mechanism.species. @@ -154,13 +154,13 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): Args: input_file (str): relative or absolute reference to the .fac file - mech_dir (str): relative or absolute reference to the directory where this - function should create the mechanism.* files, and where + mech_dir (str): relative or absolute reference to the directory where + the mechanism.* files will be created, and where the environmentVariables.config file should be read from - By default it is model/configuration/ + By default it is: model/configuration/ mcm_dir (str): relative or absolute reference to the directory containing - the reference file peroxy-radicals_v3.3.1 - By default it is mcm/ + the RO2 reference file (peroxy-radicals_v*) + By default it is: mcm/ Returns: None @@ -213,7 +213,8 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): else: assert section == 0, "Error, section is not in [0,4]" - # Convert peroxy_radicals to a list of strings, with each of the RO2 species from 'Peroxy radicals'. + # Convert peroxy_radicals to a list of strings, with each of the RO2 species from the RO2 sum + # in the 'Peroxy radicals' section. ro2List = [] for item in peroxy_radicals: if not re.match('\*', item): @@ -226,13 +227,21 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): # Remove empty strings. ro2List = list(filter(None, ro2List)) - # Read in the reference RO2 species from the peroxy-radicals_v3.3.1 file. + # Read in the list of reference RO2 species from the MCM + # (peroxy-radicals_v* in mcm_dir). + # + # => the RO2 reference list is specific to each version of the MCM + # => RO2 lists for versions v3.1, v3.2, v3.3.1 of the MCM are available + # => change the filename if using a version of the MCM other than the default (v3.3.1) with open(os.path.join(mcm_dir, 'peroxy-radicals_v3.3.1'), 'r') as RO2List_file: RO2List_reference = [r.rstrip() for r in RO2List_file.readlines()] - # Check each of the RO2s from 'Peroxy radicals' are present in the reference RO2 list. - # If not print a warning at the top of mechanism.f90 for each errant species. - # TODO: This will break the exected format when mechanism.f90 is replaced by a parsable format. + # Check that each of the RO2s from 'Peroxy radicals' are present + # in the RO2 reference list from the MCM. If not, print a warning + # at the top of mechanism.f90 for each errant species. + # + # TODO: This will break the expected format when mechanism.f90 is + # replaced by a parsable format print('looping over inputted RO2s') with open(os.path.join(mech_dir, 'mechanism.f90'), 'w') as mech_rates_file: @@ -285,22 +294,23 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): '(\g<0>)', line.replace(';', '').strip() ).replace('@', '**') - # Append _DP to the end of all digits that aren't followed + # Append `_DP` to the end of all digits that aren't followed # by more digits or letters (targets a few too many). line2 = re.sub('[0-9]+(?![a-zA-Z0-9\.])', '\g<0>_DP', line2) - # Undo the suffix _DP for any species names and for LOG10. + # Undo the suffix `_DP` for any species names and for LOG10. line2 = re.sub(r'\b(?P[a-zA-Z][a-zA-Z0-9]*)_DP', '\g', line2) - # Undo the suffix _DP for any numbers like 1D7 or 2.3D-8. + # Undo the suffix `_DP` for any numbers like 1D7 or 2.3D-8. line2 = re.sub(r'\b(?P[0-9][0-9\.]*)[dDeE](?P[+-]*[0-9]+)_DP', '\ge\g_DP', line2) - # Add .0 to any literals that don't have a decimal place - this is necessary - # as it seems you can't use extended precision on such a number - gfortran - # complains about an unknown integer kind, when it should really be a real kind. + # Add .0 to any literals that don't have a decimal place. This is + # necessary as it seems you can't use extended precision on such a + # number -- gfortran complains about an unknown integer kind, when + # it should really be a real kind. line2 = re.sub(r'(?[0-9]+)_DP', '\g.0_DP', line2) @@ -435,12 +445,12 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): for line in mech_reac_list: reac_file.write(line) - # Write speciesList to mechanism.species, indexed by (1 to len(speciesList)). + # Write speciesList to mechanism.species, indexed by 1 to len(speciesList). with open(os.path.join(mech_dir, 'mechanism.species'), 'w') as species_file: for i, x in zip(range(1, len(speciesList) + 1), speciesList): species_file.write(str(i) + ' ' + str(x) + '\n') - # Write out rate coefficients. + # Write out the rate coefficients. i = 0 mech_rates_list = [] for rate_counter, x in zip(range(len(s)), rateConstants): @@ -453,18 +463,19 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): # bracketed version. i += 1 string = re.sub('(?<=@)-[0-9.]*', '(\g<0>)', x) - # Now convert all @ to ** etc. + # Now convert all '@' to '**' etc... string = string.replace('@', '**') string = string.replace('<', '(') string = string.replace('>', ')') - # Replace any float-type numbers (xxx.xxxE+xx) with double-type number (xxx.xxxD+xx) + # Replace any float-type numbers (xxx.xxxE+xx) + # with a double-type number (xxx.xxxD+xx) string = re.sub(r'(?P[0-9]+\.[0-9]+)[eE]', '\gD', string) mech_rates_list.append('p(' + str(i) + ') = ' + \ tokenise_and_process(string, variablesDict) + ' !' + reaction_definitions[rate_counter]) - # Write out further reactions to implement DILUTE factor. + # Write out further reactions to implement the dilution factor. if dilute: for _ in speciesList: i += 1 diff --git a/mcm/INFO.md b/mcm/INFO.md index 5b3b5adf0..8699807ca 100644 --- a/mcm/INFO.md +++ b/mcm/INFO.md @@ -10,7 +10,7 @@ The `mcm/` directory contains: --- -**MCM version** +**How to set the MCM version** The default version of the Master Chemical Mechanism (MCM) is **v3.3.1**. This means that AtChem2 uses the list of RO2 in the file `peroxy-radicals_v3.3.1` From db3c3979401e8f5132b3b84895e32427d4cf725c Mon Sep 17 00:00:00 2001 From: rs028 Date: Wed, 17 May 2023 12:05:45 +0100 Subject: [PATCH 06/24] Remove logfile printout --- tests/run_model_tests.sh | 1 - tests/run_tests.sh | 1 - 2 files changed, 2 deletions(-) diff --git a/tests/run_model_tests.sh b/tests/run_model_tests.sh index 00fe0d0e6..e63cb2203 100755 --- a/tests/run_model_tests.sh +++ b/tests/run_model_tests.sh @@ -227,5 +227,4 @@ echo "" >> $LOG_FILE echo "Execution of model tests script finished." >> $LOG_FILE echo "==> Model tests logfile:" $LOG_FILE - exit $model_tests_passed diff --git a/tests/run_tests.sh b/tests/run_tests.sh index 246247423..650b2cace 100755 --- a/tests/run_tests.sh +++ b/tests/run_tests.sh @@ -223,5 +223,4 @@ else echo "==> Tests PASSED [" $test_counter/$test_counter "]" model_tests_passed=0 fi - exit $model_tests_passed From ee061d01cb555fafdd7c2ceb34e5e1dad76000af Mon Sep 17 00:00:00 2001 From: rs028 Date: Wed, 17 May 2023 12:10:51 +0100 Subject: [PATCH 07/24] Reset version number to dev status --- CHANGELOG.md | 33 ++++++++++++++---- doc/AtChem2-Manual.pdf | Bin 789511 -> 789506 bytes doc/latex/AtChem2-Manual.tex | 2 +- src/atchem2.f90 | 2 +- .../env_model_1/env_model_1.out.cmp | 2 +- .../env_model_2/env_model_2.out.cmp | 2 +- .../env_model_3/env_model_3.out.cmp | 2 +- .../env_model_4/env_model_4.out.cmp | 2 +- .../model_tests/firstorder/firstorder.out.cmp | 2 +- .../secondorder/secondorder.out.cmp | 2 +- tests/model_tests/static/static.out.cmp | 2 +- tests/tests/short/short.out.cmp | 2 +- tests/tests/short_dense/short_dense.out.cmp | 2 +- .../short_end_of_day/short_end_of_day.out.cmp | 2 +- tests/tests/short_ext1/short_ext1.out.cmp | 2 +- tests/tests/short_ext2/short_ext2.out.cmp | 2 +- tests/tests/short_ext3/short_ext3.out.cmp | 2 +- tests/tests/short_ext4/short_ext4.out.cmp | 2 +- tests/tests/short_no_pre/short_no_pre.out.cmp | 2 +- .../spec_no_env_yes1/spec_no_env_yes1.out.cmp | 2 +- .../spec_no_env_yes2/spec_no_env_yes2.out.cmp | 2 +- .../spec_yes_env_no/spec_yes_env_no.out.cmp | 2 +- .../spec_yes_env_no_with_jfac.out.cmp | 2 +- .../spec_yes_env_no_with_jfac_fail1.out.cmp | 2 +- .../spec_yes_env_no_with_jfac_fixed.out.cmp | 2 +- .../spec_yes_env_no_with_photo.out.cmp | 2 +- .../spec_yes_env_yes/spec_yes_env_yes.out.cmp | 2 +- .../spec_yes_plus_fixed_env_no.out.cmp | 2 +- tools/update_version_number.sh | 4 +-- 29 files changed, 54 insertions(+), 35 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ca61be8e..993329368 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,15 @@ -# AtChem2 - CHANGELOG +AtChem2 - CHANGELOG +=================== -## v1.2.2 (May 2023) + +post v1.2.2 +----------- + +- + + +v1.2.2 (May 2023) +----------------- - move implementation of continuous integration from TravisCI to [GitHub Actions](https://docs.github.com/en/actions) - improve reporting of the testsuite results by using logfiles @@ -20,7 +29,9 @@ - update the `*.md` files, and add _Buy Me a Coffee_ button to the `README.md` file - several updates to the user manual (including new MCM website at Uni. York) and other minor fixes -## v1.2.1 (January 2021) + +v1.2.1 (January 2021) +--------------------- - add a new environment variable: `ASA` (aerosol surface area) - fix a bug in the C-binding for `gfortran` version 9 and above @@ -29,7 +40,9 @@ - tidy the comments and printout messages of various source files - update the user manual -## v1.2 (May 2020) + +v1.2 (May 2020) +--------------- - implement argument parser and named arguments for the `atchem2` executable - streamline the build procedure, rename and tidy the build scripts, and move them to the `build/` directory @@ -52,14 +65,18 @@ - tidy and improve comments in various source files and scripts - various minor fixes and updates -## v1.1.1 (January 2019) + +v1.1.1 (January 2019) +--------------------- - add `doc/` directory containing the documentation in markdown format - add `CONTRIBUTING.md` file - fix the headers of `lossRates.output` and `productionRates.output` - change the name of the environment variable `ROOFOPEN` to `ROOF` -## v1.1 (November 2018) + +v1.1 (November 2018) +-------------------- - implement a new directory structure - add `CHANGELOG.md` and `CITATION.md` files @@ -81,7 +98,9 @@ - extend the documentation on the wiki - fix several minor bugs -## v1.0 (July 2017) + +v1.0 (July 2017) +---------------- - create a code repository and organization on [github.com](https://github.com/AtChem/) - adopt the [MIT open source license](https://opensource.org/licenses/MIT) diff --git a/doc/AtChem2-Manual.pdf b/doc/AtChem2-Manual.pdf index 049dfb329de27a1f445d6656ce842ef59a64e2a0..ce6f9bc6b2e84badb9f37dcd77a9067e8ccd277e 100644 GIT binary patch delta 3054 zcmai#c{me}AIE27jwyx6u__{qcI9_vih5j_3J&{`jO7Y9|+J(>nPIN*NF}!nvHDOK-G~ zonJe=ca9^9>1dC>C07bmq{1lESAQNus-8k#6&G0FHOTDiare*-MR-F#`AlE>44*tP z8<<3t_f6+X7gat=gAT>{mG;e?bF;5XUCYP4XR4UX$u9er!-jBWTA^=2?W#$X&phKq zEuEo%7UEMXNR3@^i~YzA!hpyvJ%>woYS-@o`MKVH`)~cHt%}P866k^Jd(s>@Z4S)C z1;_=&g_jE-mw$bJE&^Nxxd=7Sfg$5-{Q5d@Z9`pT!TTME?EiwL9mq|vW$caHfg#P; zb|LM8j`~Qrfu*jtu8zS4bA$6b2y;E8p@AhFi8zn6IB#hVH$7$Ye^b1K&f5Ej+=#-S zf)}vSKy`vrAs+kG70R5P%-`+D=jjJ)bt(qN*_{n6QtqS{P@Aa*^uR&=;6Zv|aZ_NC z(Q$FTi1U@gz8`d0svr8OXWHOrUCy-Vn9vMs4APc~@F@BFx-sU*!1B){pS_MZojly? z-AgD@nNRq-b#VA}%Q&>u=}i2C6GE6Cp*sPG8X<&Up|`0@STLOa1nZE3qonJlpigTg z#nFA~RXxlX zNQ=&($=rG`glU8YKMhkDOKIX=QJxN9k(z+PSz(Zc3*+h0q%idb%kh-xCt)%R)=QS{ zRtA8kvS7<%r7t|u&wiG9DShDsv%&1TW2<01E4s`}`3q#Hbj7^*v@Gxq7SGl?zRJ(f zvSMqA!g$kISri8`7+3*2&(b=Ul}z9Yc7;H8vL9BG{ZS0Y?}y#O&I>pa^RdmWkD^(m zF98_0dwMo8()JWwsf*wzq8jHW;!fM1M$t%OvXfjC%pvGy)pm{~ORwyS{E%cvdIfUW z4;vo9qF1O0Hqu;KsqF0&4<2CXf3SWjwhK7!D);x{Z)7=vbiWk%0KtUATSUI3?1?fa zMW-ACF+0XQOfOHpKA}b1$rVbM;<(U{Tf9)2^LLqtBQ_bN-Xe^cIuT9;{Yi|_y?*g=ic{^`)7F-TKH39JK3Ln9@gRb(&o7u?_#MiE;2 zg?|2J>*p=eF4T(AOD|jJ+GbsKr0ysn#bQ0qt0`?J-W{_3o+(~+@4c~xGbFd!n+lX) z>rG!%2pvfuS6G{gDXz7|KjK;O!J!V&g4kv?(8}c_DB~-9STlDZ9fAbyg$@Wk%nqEB z=xeh=xP!;SC0qeJkKRTzR_n(E31e3z+5yJBGt!L1S1m_rK^oDdBR&dayn3WyiXIcfo}~>I}z7i_jdvG#|N+s^r)qU+q*UwC$xB%P56kg zc+(iZVF2NxKew;$u6z?50d#u1Sk!v5itX&+K&zhPVPN~@hAD&r_E9DwsH<$s;3P~Sgq9KDHvI<3D7UE z1$ZdRlGm-|4+KN0{p6LZz+@h>S4n$*u4%zCUN)Cz%MlUJ+d}YyHDwaci#<1ErB<(6 zeTq2dQ%~d{%$6Vqu%?Fh1$d8Y#%NAw zrtl3QP96N{@Yjb8YmUiJlTt)PO)oY8M9Pe01K~{ze?h8>Q3ra zhoNRpqm>fj?f$!RqX`|wH)W)tyf=X&Br)y{>z8M5;~F?UWvC;Q4is{TEbG0CBZ$+y zD3x<|&trGHJAVq^!W&WD(L{l4hYhQu3eZp95t`y8q+c$&pxRwJ!Pxp2`o#L8`QMqb z{T7ujUQ>Mtk8t0redPh@kY?^GstvSv7*!rXBjjg0>Ll z4+Xf*`WU(Lw?MLrz#m6t<$#|>t{W|2n%p)%yCVCvxMS~%;A?+nDtny-UN_45fkMAI zLunM@miNW3gYFj6vJGLHF$ZzoIrbMDT^;?A(TPlmL zMMa5(Fl=uhzW7V=!Xd=63cAYjpf}8zeP1^AZ(9-@GK_`aG0bV>wzuW55^+5GKm!q@ zqr}zc54~esESQXN25jvp<_FVk^p4n+;u5oHWP3{XrtBZ8v4431fpT!kV{hy>Vg|cv zkYRlEL6#V`7$^zwC#)Hmx7qoCJ;9GpL76z$#?5~oSInTk*Cj0xLFHvTojPrSvsJrM zaupkVLGc@^!)iB9XQ#yn%vvWZWRmik{9U(ZnP{6grcdj>`pG#4t*N6AKj^l-@V+M- z`(diLE3|P_l7oBL@Q^9vU0d=|3yMyxxZ)c4s`I0kQDGEjk5G-r@f5^B?blOB!+HJU zG^W~Xe>eJ0FpcmZrW!kUF?)OZQAtM`eyRikVay)B0%FuUqnyoW@@VHeCqIxNo^#zX z?;N=5vd`1sahppv9rK<`hVSF@mTl@^0_zuhU#L_+t%>_rlr(K-Opf?@(l;lqk!{yQ zV$!U1=PC%@)olOBlEVrs*AEj?qYE!u4|Wkn$lU`bqAg&RWQL8JkPdJ;I7~&FtRjmV zQVR}C*$zSUH`4tce!I}j5X`p)Go(B1or;{%OcU~OnQ;FmUv0};jU)pJ#?(a;HWLSbt~8EC%U!Wh)^=8Ev}#gKZs4kf3^_S~1$0kJBzu6#q!T_$Sbiu)tOn@igLDIpB;$O} zp%%b0#Kh5Y?!SRiCROk~Xcm7{Qld6sd$1&NX;7q~opEaH$PTg7M~<~txIZ1y?Q)28 erd7OFzw;Mllh5N<@D(C_S^zGjq;$d2O6b2Q9n5{dE*otwMe=2dL=tnEcrnUlhF%p7)yQ(0hSxnY zyWcSL;xV{2Z4`e&CsiL3RA3nSwZ>q6OyR`4 zC%6GK{2HW4lzbQI_-F8ebJ4R;mgl!=Hw;7@7EyRSv~78h5t+V>#zVQ{*UWq zmGl0=5m5~u8?a`GlfDts2xEEXEZ)EhNx)!`##TmX^cg&waMs8eWr@L?tC;@3Egn$B z`5VE0;bfIFXan@4f`g}N>QADBu2>)LT5X&XGF~}szw30!c@wJS;N5-8BvcxU(C7=3 z(FpygMWH)%#7+hH79>^xb#@f95pz}|;3eD+GeyeImY0Dl-3~ss3qPraBdExgG1GA> zyX?D1=#GtTh`nvo`R1|O$oZK0zU&V*I?xz`6eIKTWl1hPpU|bPmNT@I(+m zoqLU|b?q4H86O{bssfOV{&V!~X%r_H7na0gi&3QQ_ln`3chSkCHseqpR5yaXpf-UQ z=ecpEXH~1^C@_{%B*gW8{b5~=Wl;}u@_@i4i#|s-Sg$6X7#G&DH4?XA#%(3i96JL zA&Bv0>OsEhtb`l^n}oJ~sjPr|ifhJ29aONy(vqopYe+e(=DSqJnuO7PbP5`8B*iG0 zw8Wl^QjkUWc3N@`k~BIrxxw7yv;K}&?(||uOg>?lm#;b^o@+JC3)C|EBE}VxH6(;$ zh-d!xLOHh_O;qKAzNPN+VXhhZH`K1jko$^k4Pg%Wb7jcCf1l};YM&5Amwp- z*#jxcq2tDBve7}r;eVFZ3dgU*c;={WY0Y&TMvi$T{KQ+OiGiwu**cpS-BMh6ax+A8 z-BmU^5y6=q-Y*rA?a5Y2veCR0X}{W^TXM`*-zq_3;XJhE zeX}a!L_Co~*bnd%ckA!`+w%4%o};JsR%r{MuC%4AZSnr;sbJBkFE7BSAg<*mu#02X z!Qd=EQAr%l$m{awHsOOWCP5cH!6pMG92<4(G7YD#4A#9CT~(&^t+um^YCnkgoe5tQ zkCfhd=Z%?uo&8X=Hms#x1@^1Dd;H5U!xn zga|J)Iet(X3}yD#M_hUm)Dmdo<+o7i}lFKgd*uoJ6El1rAbB7 zQ#O4+T9p^g6*5CyogzC`PmLlEjRy8s8Ilhe6`jEBb$r9S=*=(F|6gvVJ9 zm#cSNfrJ$u0APyj0q!RiGS`TzTacTD!c6$9QV94mHFgC}{C%ZnHT3LjEq{cgP2Vtb z{Mu&61PixAM_-A++|E1{-zfdn?xZ>Y#rBt^UC{7Jg^VtMxsA1MevHSZ??e;enj_6b zEaa?7@a9NLlh||hmW*l~OVr0Aw|2X0D;!pD^GjtmF$q3o7@s_ZQkjQX7i#vdE{wJL zuU;h0w^LYB=ph!czTXXW8hBOLfAj}Dbt&^q2@>djG4=s-MRDMcucH_YKbUIHbv^2a zlP8NSdL8;Eat>cUm){)y)4N(yhbBJhW#}qqqD$j?Y*YfY@rZH2XrfZD@>X^5#s0Fd zVcK${v6&V^TaQW65xcUz3D}6Rl<>)Wb9iIPe9B%}mr9IhweRfz57?P$v4x$ipspbu zJ0oREim+1TF98}rzB?avI&-^DL)hlmej@}TOS%@kQ2-S#VQXL!f@Y@O}8OF+b+BYEl3rjb%0+?!$ous+EB<1Lm&<-{*AbkyiLsh zU>M=siy^D*-~uaJY1ppB7fgC@dxokcKuUUl1p`iB7C)mX(2=hYtie&eR9qA29=y3i zFz4$b2lg>ZU%-(%@whlLA{-?fD?YdCc5kn9UGUQm$G_5*Fa2z` zFg~Sd&t4Kkih<&G*8J$} z;lo<2t6+6@1zYREe}*CQOcP~S5jxhSId-Q>v( z?ZETT5?un<_6@hWl;#NKrDgrZvGu8&Ol#URSU5oG+~!4O5c6hBIn1Q-pHpdKrrGO0 zyhr{txpbck56!@(|MAM(zWrm#wq^dxlJUFS50`Cgo&#$Z- zu<~u9vNNW9eUHHTRMt5?T+&e{<2hL3^HCfX`zq)oc5k?3uq+LM@ZB8U6q%;&o~N(w zmb4GwJQ`J8*B+)T_IgMJA&`w)@TM!%>f0}P>a8tWz*^RSinRUmrF*tso;k3x#XnD< z&evY+ejy?(5TPwG-rPA9k(2S@^ILJ{y$RMy{koa#B$j% z9Z)YG;|e4txUj`5z^}Xx3}9DpFSXwu5EpEHAyz{KiNNY(k|H~Tzovf+I_Id>pk+}j sucPA!1lZ!Zm!ASZHdq@3zR&C5g7l_dR0jM*mTL1t6 diff --git a/doc/latex/AtChem2-Manual.tex b/doc/latex/AtChem2-Manual.tex index 89ca76197..e9893dd30 100644 --- a/doc/latex/AtChem2-Manual.tex +++ b/doc/latex/AtChem2-Manual.tex @@ -51,7 +51,7 @@ \hspace{0.05\textwidth} % Box for the title page text \parbox[b]{0.75\textwidth}{ - {\Huge\bfseries AtChem2\\[0.5\baselineskip] v1.2.2}\\[2\baselineskip] % Title + {\Huge\bfseries AtChem2\\[0.5\baselineskip] v1.3-dev}\\[2\baselineskip] % Title {\LARGE\textit{User Manual}}\\[4\baselineskip] % Subtitle {\Large\textsc{R. Sommariva\\S. Cox}} % Author(s) \vspace{0.5\textheight}\\ diff --git a/src/atchem2.f90 b/src/atchem2.f90 index c7a42694d..daf2d152f 100644 --- a/src/atchem2.f90 +++ b/src/atchem2.f90 @@ -150,7 +150,7 @@ end subroutine FCVFUN rout(:) = -1.0_DP rpar(:) = -1.0_DP - write (*, '(A)') 'AtChem2 v1.2.2' + write (*, '(A)') 'AtChem2 v1.3-dev' write (*,*) write (*, '(A)') '-------------' write (*, '(A)') ' Directories' diff --git a/tests/model_tests/env_model_1/env_model_1.out.cmp b/tests/model_tests/env_model_1/env_model_1.out.cmp index 77ed242e6..292b5165f 100644 --- a/tests/model_tests/env_model_1/env_model_1.out.cmp +++ b/tests/model_tests/env_model_1/env_model_1.out.cmp @@ -1,4 +1,4 @@ -AtChem2 v1.2.2 +AtChem2 v1.3-dev ------------- Directories diff --git a/tests/model_tests/env_model_2/env_model_2.out.cmp b/tests/model_tests/env_model_2/env_model_2.out.cmp index 06624832f..d18ebbf57 100644 --- a/tests/model_tests/env_model_2/env_model_2.out.cmp +++ b/tests/model_tests/env_model_2/env_model_2.out.cmp @@ -1,4 +1,4 @@ -AtChem2 v1.2.2 +AtChem2 v1.3-dev ------------- Directories diff --git a/tests/model_tests/env_model_3/env_model_3.out.cmp b/tests/model_tests/env_model_3/env_model_3.out.cmp index df4356735..c440a3806 100644 --- a/tests/model_tests/env_model_3/env_model_3.out.cmp +++ b/tests/model_tests/env_model_3/env_model_3.out.cmp @@ -1,4 +1,4 @@ -AtChem2 v1.2.2 +AtChem2 v1.3-dev ------------- Directories diff --git a/tests/model_tests/env_model_4/env_model_4.out.cmp b/tests/model_tests/env_model_4/env_model_4.out.cmp index d6a9e39b7..d4e619aff 100644 --- a/tests/model_tests/env_model_4/env_model_4.out.cmp +++ b/tests/model_tests/env_model_4/env_model_4.out.cmp @@ -1,4 +1,4 @@ -AtChem2 v1.2.2 +AtChem2 v1.3-dev ------------- Directories diff --git a/tests/model_tests/firstorder/firstorder.out.cmp b/tests/model_tests/firstorder/firstorder.out.cmp index e865551e6..2b1e1c321 100644 --- a/tests/model_tests/firstorder/firstorder.out.cmp +++ b/tests/model_tests/firstorder/firstorder.out.cmp @@ -1,4 +1,4 @@ -AtChem2 v1.2.2 +AtChem2 v1.3-dev ------------- Directories diff --git a/tests/model_tests/secondorder/secondorder.out.cmp b/tests/model_tests/secondorder/secondorder.out.cmp index a93541898..68f36330b 100644 --- a/tests/model_tests/secondorder/secondorder.out.cmp +++ b/tests/model_tests/secondorder/secondorder.out.cmp @@ -1,4 +1,4 @@ -AtChem2 v1.2.2 +AtChem2 v1.3-dev ------------- Directories diff --git a/tests/model_tests/static/static.out.cmp b/tests/model_tests/static/static.out.cmp index b6771ed82..d0d66a29c 100644 --- a/tests/model_tests/static/static.out.cmp +++ b/tests/model_tests/static/static.out.cmp @@ -1,4 +1,4 @@ -AtChem2 v1.2.2 +AtChem2 v1.3-dev ------------- Directories diff --git a/tests/tests/short/short.out.cmp b/tests/tests/short/short.out.cmp index cc5ef7b0e..92441ec01 100644 --- a/tests/tests/short/short.out.cmp +++ b/tests/tests/short/short.out.cmp @@ -1,4 +1,4 @@ -AtChem2 v1.2.2 +AtChem2 v1.3-dev ------------- Directories diff --git a/tests/tests/short_dense/short_dense.out.cmp b/tests/tests/short_dense/short_dense.out.cmp index 0a5422508..9355a4f80 100644 --- a/tests/tests/short_dense/short_dense.out.cmp +++ b/tests/tests/short_dense/short_dense.out.cmp @@ -1,4 +1,4 @@ -AtChem2 v1.2.2 +AtChem2 v1.3-dev ------------- Directories diff --git a/tests/tests/short_end_of_day/short_end_of_day.out.cmp b/tests/tests/short_end_of_day/short_end_of_day.out.cmp index db74b0a24..babcfe08e 100644 --- a/tests/tests/short_end_of_day/short_end_of_day.out.cmp +++ b/tests/tests/short_end_of_day/short_end_of_day.out.cmp @@ -1,4 +1,4 @@ -AtChem2 v1.2.2 +AtChem2 v1.3-dev ------------- Directories diff --git a/tests/tests/short_ext1/short_ext1.out.cmp b/tests/tests/short_ext1/short_ext1.out.cmp index 5d7732e1b..ca046185d 100644 --- a/tests/tests/short_ext1/short_ext1.out.cmp +++ b/tests/tests/short_ext1/short_ext1.out.cmp @@ -1,4 +1,4 @@ -AtChem2 v1.2.2 +AtChem2 v1.3-dev ------------- Directories diff --git a/tests/tests/short_ext2/short_ext2.out.cmp b/tests/tests/short_ext2/short_ext2.out.cmp index 3d88c6582..9665a3d13 100644 --- a/tests/tests/short_ext2/short_ext2.out.cmp +++ b/tests/tests/short_ext2/short_ext2.out.cmp @@ -1,4 +1,4 @@ -AtChem2 v1.2.2 +AtChem2 v1.3-dev ------------- Directories diff --git a/tests/tests/short_ext3/short_ext3.out.cmp b/tests/tests/short_ext3/short_ext3.out.cmp index 307e17f8c..56829ea20 100644 --- a/tests/tests/short_ext3/short_ext3.out.cmp +++ b/tests/tests/short_ext3/short_ext3.out.cmp @@ -1,4 +1,4 @@ -AtChem2 v1.2.2 +AtChem2 v1.3-dev ------------- Directories diff --git a/tests/tests/short_ext4/short_ext4.out.cmp b/tests/tests/short_ext4/short_ext4.out.cmp index 8f82f5283..a6c6c1a2d 100644 --- a/tests/tests/short_ext4/short_ext4.out.cmp +++ b/tests/tests/short_ext4/short_ext4.out.cmp @@ -1,4 +1,4 @@ -AtChem2 v1.2.2 +AtChem2 v1.3-dev ------------- Directories diff --git a/tests/tests/short_no_pre/short_no_pre.out.cmp b/tests/tests/short_no_pre/short_no_pre.out.cmp index 054149a51..5c151f4c0 100644 --- a/tests/tests/short_no_pre/short_no_pre.out.cmp +++ b/tests/tests/short_no_pre/short_no_pre.out.cmp @@ -1,4 +1,4 @@ -AtChem2 v1.2.2 +AtChem2 v1.3-dev ------------- Directories diff --git a/tests/tests/spec_no_env_yes1/spec_no_env_yes1.out.cmp b/tests/tests/spec_no_env_yes1/spec_no_env_yes1.out.cmp index df7685792..c4fb4ff5e 100644 --- a/tests/tests/spec_no_env_yes1/spec_no_env_yes1.out.cmp +++ b/tests/tests/spec_no_env_yes1/spec_no_env_yes1.out.cmp @@ -1,4 +1,4 @@ -AtChem2 v1.2.2 +AtChem2 v1.3-dev ------------- Directories diff --git a/tests/tests/spec_no_env_yes2/spec_no_env_yes2.out.cmp b/tests/tests/spec_no_env_yes2/spec_no_env_yes2.out.cmp index 763f560c0..edd286018 100644 --- a/tests/tests/spec_no_env_yes2/spec_no_env_yes2.out.cmp +++ b/tests/tests/spec_no_env_yes2/spec_no_env_yes2.out.cmp @@ -1,4 +1,4 @@ -AtChem2 v1.2.2 +AtChem2 v1.3-dev ------------- Directories diff --git a/tests/tests/spec_yes_env_no/spec_yes_env_no.out.cmp b/tests/tests/spec_yes_env_no/spec_yes_env_no.out.cmp index 34f41b7a9..00bd299d3 100644 --- a/tests/tests/spec_yes_env_no/spec_yes_env_no.out.cmp +++ b/tests/tests/spec_yes_env_no/spec_yes_env_no.out.cmp @@ -1,4 +1,4 @@ -AtChem2 v1.2.2 +AtChem2 v1.3-dev ------------- Directories diff --git a/tests/tests/spec_yes_env_no_with_jfac/spec_yes_env_no_with_jfac.out.cmp b/tests/tests/spec_yes_env_no_with_jfac/spec_yes_env_no_with_jfac.out.cmp index d38139717..dc1785173 100644 --- a/tests/tests/spec_yes_env_no_with_jfac/spec_yes_env_no_with_jfac.out.cmp +++ b/tests/tests/spec_yes_env_no_with_jfac/spec_yes_env_no_with_jfac.out.cmp @@ -1,4 +1,4 @@ -AtChem2 v1.2.2 +AtChem2 v1.3-dev ------------- Directories diff --git a/tests/tests/spec_yes_env_no_with_jfac_fail1/spec_yes_env_no_with_jfac_fail1.out.cmp b/tests/tests/spec_yes_env_no_with_jfac_fail1/spec_yes_env_no_with_jfac_fail1.out.cmp index 9d6f254d6..960d8c916 100644 --- a/tests/tests/spec_yes_env_no_with_jfac_fail1/spec_yes_env_no_with_jfac_fail1.out.cmp +++ b/tests/tests/spec_yes_env_no_with_jfac_fail1/spec_yes_env_no_with_jfac_fail1.out.cmp @@ -1,4 +1,4 @@ -AtChem2 v1.2.2 +AtChem2 v1.3-dev ------------- Directories diff --git a/tests/tests/spec_yes_env_no_with_jfac_fixed/spec_yes_env_no_with_jfac_fixed.out.cmp b/tests/tests/spec_yes_env_no_with_jfac_fixed/spec_yes_env_no_with_jfac_fixed.out.cmp index 5cc1440d9..edf9b8f21 100644 --- a/tests/tests/spec_yes_env_no_with_jfac_fixed/spec_yes_env_no_with_jfac_fixed.out.cmp +++ b/tests/tests/spec_yes_env_no_with_jfac_fixed/spec_yes_env_no_with_jfac_fixed.out.cmp @@ -1,4 +1,4 @@ -AtChem2 v1.2.2 +AtChem2 v1.3-dev ------------- Directories diff --git a/tests/tests/spec_yes_env_no_with_photo/spec_yes_env_no_with_photo.out.cmp b/tests/tests/spec_yes_env_no_with_photo/spec_yes_env_no_with_photo.out.cmp index 68a122f61..6bb6e97be 100644 --- a/tests/tests/spec_yes_env_no_with_photo/spec_yes_env_no_with_photo.out.cmp +++ b/tests/tests/spec_yes_env_no_with_photo/spec_yes_env_no_with_photo.out.cmp @@ -1,4 +1,4 @@ -AtChem2 v1.2.2 +AtChem2 v1.3-dev ------------- Directories diff --git a/tests/tests/spec_yes_env_yes/spec_yes_env_yes.out.cmp b/tests/tests/spec_yes_env_yes/spec_yes_env_yes.out.cmp index f307f05c9..17e5d1083 100644 --- a/tests/tests/spec_yes_env_yes/spec_yes_env_yes.out.cmp +++ b/tests/tests/spec_yes_env_yes/spec_yes_env_yes.out.cmp @@ -1,4 +1,4 @@ -AtChem2 v1.2.2 +AtChem2 v1.3-dev ------------- Directories diff --git a/tests/tests/spec_yes_plus_fixed_env_no/spec_yes_plus_fixed_env_no.out.cmp b/tests/tests/spec_yes_plus_fixed_env_no/spec_yes_plus_fixed_env_no.out.cmp index bfb09ab3a..458eb345b 100644 --- a/tests/tests/spec_yes_plus_fixed_env_no/spec_yes_plus_fixed_env_no.out.cmp +++ b/tests/tests/spec_yes_plus_fixed_env_no/spec_yes_plus_fixed_env_no.out.cmp @@ -1,4 +1,4 @@ -AtChem2 v1.2.2 +AtChem2 v1.3-dev ------------- Directories diff --git a/tools/update_version_number.sh b/tools/update_version_number.sh index 408215b75..3d4aee048 100755 --- a/tools/update_version_number.sh +++ b/tools/update_version_number.sh @@ -14,8 +14,8 @@ # # N.B.: the script MUST be run from the main directory of AtChem2. -VERS_OLD="v1.3-dev" -VERS_NEW="v1.2.2" +VERS_OLD="v1.2.2" +VERS_NEW="v1.3-dev" # ignore the .git/ directory, exclude this script and the changelog file find ./ -not -path "./.git/*" -type f ! -name "update_version_number.sh" ! -name "CHANGELOG.md" -print | xargs perl -pi -e "s/$VERS_OLD/$VERS_NEW/g" From 1b2f9bf466b78d7acd928274d412ff0fe232470e Mon Sep 17 00:00:00 2001 From: rs028 Date: Wed, 17 May 2023 12:28:46 +0100 Subject: [PATCH 08/24] Tidy mech_converter.py script --- build/mech_converter.py | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/build/mech_converter.py b/build/mech_converter.py index 5547dd6dc..36e281288 100644 --- a/build/mech_converter.py +++ b/build/mech_converter.py @@ -546,7 +546,7 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): def main(): assert len(sys.argv) > 1, \ 'Please enter the name of a chemical mechanism file (.fac ) as argument:' - file_name = sys.argv[1] + mech_filename = sys.argv[1] # mech_dir defaults to model/configuration/, if not given as argument if len(sys.argv) <= 2: mech_dir = './model/configuration/' @@ -559,20 +559,12 @@ def main(): mcm_dir = sys.argv[3] # Check that the files and directories exist - assert os.path.isfile(file_name), 'Failed to find file ' + file_name + assert os.path.isfile(mech_filename), 'Failed to find file ' + mech_filename assert os.path.exists(mech_dir), 'Failed to find directory ' + mech_dir assert os.path.exists(mcm_dir), 'Failed to find directory ' + mcm_dir - # Check that the mechanism file is in FACSIMILE format - if file_name.split(".")[1] == "kpp": - # convert from KPP to FACSIMILE - ##input_fac = convert_kpp(file_name) - exit('KPP format is not supported yet') - else: - input_fac = file_name - # Call the conversion to Fortran function - convert_to_fortran(input_fac, mech_dir, mcm_dir) + convert_to_fortran(mech_filename, mech_dir, mcm_dir) # Call the main function if executed as script if __name__ == '__main__': From 16af6b357479b1c581b4ad2ad348c5c27e4ca51a Mon Sep 17 00:00:00 2001 From: rs028 Date: Wed, 9 Aug 2023 12:49:09 +0100 Subject: [PATCH 09/24] Cosmetic changes to sh scripts --- build/build_atchem2.sh | 18 ++++++++++-------- tools/update_version_number.sh | 3 ++- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/build/build_atchem2.sh b/build/build_atchem2.sh index 0ca1a85ca..16e32a6c9 100755 --- a/build/build_atchem2.sh +++ b/build/build_atchem2.sh @@ -10,14 +10,12 @@ # # ----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Script to process the mechanism file (*.fac) and convert it to the # correct format for AtChem2. # -# N.B.: the script MUST be run from the base directory of AtChem2. -# # $1 is the location of the chemical mechanism file in FACSIMILE -# format. This argument is NOT optional, and there is no -# default. +# format. Argument $1 is NOT optional, and there is no default. # # $2 is the directory for the chemical mechanism in Fortran format: # - mechanism.species @@ -25,14 +23,18 @@ # - mechanism.prod # - mechanism.ro2 # - mechanism.f90 -# By default, it is ./model/configuration/ +# By default, argument $2 is: ./model/configuration/ # # $3 is the directory of the MCM data files: # - list of organic peroxy radicals (RO2) # - parameters to calculate photolysis rates -# By default, it is ./mcm/ +# By default, argument $3 is: ./mcm/ +# +# Usage: +# ./build/build_atchem2.sh /path/to/mechanism/file +# ./build/build_atchem2.sh /path/to/mechanism/file /path/to/mechanism/directory +# ----------------------------------------------------------------------------- -set -e echo "" echo "* facsimile mechanism file:" $1 echo "* fortran mechanism directory [ default = ./model/configuration/ ]:" $2 @@ -54,7 +56,7 @@ else fi echo "" -echo "make base executable" +echo "make atchem2 executable" make exit 0 diff --git a/tools/update_version_number.sh b/tools/update_version_number.sh index 3d4aee048..9bd4efa7b 100755 --- a/tools/update_version_number.sh +++ b/tools/update_version_number.sh @@ -17,9 +17,10 @@ VERS_OLD="v1.2.2" VERS_NEW="v1.3-dev" -# ignore the .git/ directory, exclude this script and the changelog file +# Ignore the .git/ directory, exclude this script and the changelog file find ./ -not -path "./.git/*" -type f ! -name "update_version_number.sh" ! -name "CHANGELOG.md" -print | xargs perl -pi -e "s/$VERS_OLD/$VERS_NEW/g" +echo "" echo "==> AtChem2 version number changed to:" $VERS_NEW echo "" From 4e2227220a1a297d45f521a2e3051bb6b60beee1 Mon Sep 17 00:00:00 2001 From: rs028 Date: Wed, 9 Aug 2023 18:26:17 +0100 Subject: [PATCH 10/24] Check python scripts with pylint --- build/fix_mechanism_fac.py | 39 ++++---- tools/fix_indent.py | 64 +++++++------ tools/fix_style.py | 187 +++++++++++++++++++------------------ 3 files changed, 145 insertions(+), 145 deletions(-) diff --git a/build/fix_mechanism_fac.py b/build/fix_mechanism_fac.py index 8f6116c85..3528a98b0 100644 --- a/build/fix_mechanism_fac.py +++ b/build/fix_mechanism_fac.py @@ -35,7 +35,8 @@ # -------------------------------------------------------------------- # from __future__ import print_function from functools import reduce -import sys, re +import sys +import re # =========================== FUNCTIONS =========================== # @@ -78,23 +79,22 @@ def fix_fac_full_contents(input_file): # Third, correct the lines which don't start with a '%': they should # be concatenated onto the previous entry. in_reaction_definition_section = False - for i in range(len(contents)): + for i, line in enumerate(contents): if not in_reaction_definition_section: # Check to see whether we are entering the 'Reaction definitions' section. - if 'Reaction definitions.' in contents[i]: + if 'Reaction definitions.' in line: in_reaction_definition_section = True # Only do other checks if we've reached the 'Reaction definitions' section. else: - if re.match(r'\*', contents[i]): + if re.match(r'\*', line): pass - else: - if not re.match(r'%', contents[i]): - # print 'fail' - # print contents[i-1], 'XX', contents[i], 'XX', contents[i+1] - contents[i-1] += ' ' + contents[i] - # print contents[i-1] - contents_count += 1 - to_delete.append(i) + elif not re.match(r'%', line): + # print 'fail' + # print contents[i-1], 'XX', contents[i], 'XX', contents[i+1] + contents[i-1] += ' ' + line + # print contents[i-1] + contents_count += 1 + to_delete.append(i) print(str(contents_count) + ' corrections made - now removing old.') # Remove old elements which have now been concatenated onto previous. @@ -114,7 +114,7 @@ def fix_fac_full_contents(input_file): # Split non-header lines by semicolons, but we keep the semicolons this way. interim_contents = [reduce(lambda acc, elem: acc[:-1] + [acc[-1] + elem] \ - if elem == ";" else acc + [elem], re.split("(;)", element), []) \ + if elem == ';' else acc + [elem], re.split(r'(;)', element), []) \ for element in contents[end_of_header_index:]] # Remove empty sub-strings. @@ -123,13 +123,13 @@ def fix_fac_full_contents(input_file): # Look for any lines containing more than 2 elements. These are lines where # more than one line is broken running together. At this point, the file is # too broken to easily fix manually - get the user to fix it and run again. - if max([len(line) for line in interim_contents]) > 2: + if max((len(line) for line in interim_contents)) > 2: # Get index of line with error line_lengths = [len(line) for line in interim_contents] error_line = line_lengths.index(max(line_lengths)) + end_of_header_index + 1 - exit('The inputted file is broken near line ' + str(error_line) \ - + ' in a way that this script cannot handle.' \ - + ' Please manually fix this error and re-run this script.') + sys.exit('The inputted file is broken near line ' + str(error_line) \ + + ' in a way that this script cannot handle.' \ + + ' Please manually fix this error and re-run this script.') # Reattach the header lines, and unwrap the list of lists in interim_contents. fixed_file = contents[:end_of_header_index] \ @@ -150,16 +150,12 @@ def fix_fac_full_file(input_file): Args: input_file (str): name of the .fac file to be fixed - - Returns: - None """ print('Running fix_fac_full_file on ' + str(input_file)) contents = fix_fac_full_contents(input_file) contents = [item + '\n' for item in contents] with open(input_file, 'w') as file_open: file_open.writelines(contents) - return # =========================== MAIN =========================== # @@ -173,7 +169,6 @@ def main(): print('******************************************') print('Please pass a filename as script argument.') print('******************************************') - return # Call the main function if executed as script if __name__ == '__main__': diff --git a/tools/fix_indent.py b/tools/fix_indent.py index fc5bbac45..e66d0d6b9 100644 --- a/tools/fix_indent.py +++ b/tools/fix_indent.py @@ -46,13 +46,14 @@ # line ended with an ampersand # -------------------------------------------------------------------- # from __future__ import print_function -import sys, re +import sys +import re # ============================================================ # # Strip newline characters from string def strip_newline(string): - string = re.sub('\n', '', string) + string = re.sub(r'\n', r'', string) return string # Append newline character to string @@ -78,14 +79,14 @@ def even_quotes(string): # Handle input arguments. If only one is provided, use this for both # input and output. Error if none provided. assert len(sys.argv) >= 2, "Please enter a filename as argument." -filename = sys.argv[1] +in_filename = sys.argv[1] if len(sys.argv) == 3: out_filename = sys.argv[2] else: - out_filename = filename + out_filename = in_filename # Read in file contents -with open(filename, 'r') as input_file: +with open(in_filename, 'r') as input_file: lines = input_file.readlines() # ------------------------------------------------- @@ -130,49 +131,49 @@ def even_quotes(string): # Check that this line ends with ampersand if not empty_line: this_line_ends_ampersand = False - if re.search('&\s*$', to_output): + if re.search(r'\&\s*$', to_output): this_line_ends_ampersand = True # This line starts with 'end', so the next line should be unindented if not previous_line_ends_ampersand: - if re.match('^\s*end\s*', to_output, flags=re.IGNORECASE) \ - or re.match('^\s*else\s*', to_output, flags=re.IGNORECASE) \ - or re.match('^\s*contains\s*', to_output, flags=re.IGNORECASE): + if re.match(r'^\s*end\s*', to_output, flags=re.IGNORECASE) \ + or re.match(r'^\s*else\s*', to_output, flags=re.IGNORECASE) \ + or re.match(r'^\s*contains\s*', to_output, flags=re.IGNORECASE): indent = indent - 1 # Handle the fact that each case of a 'select' structure doesn't # end in an 'end', so the 'end select' needs to go back twice - if re.match('^\s*end select\s*', to_output, flags=re.IGNORECASE): + if re.match(r'^\s*end select\s*', to_output, flags=re.IGNORECASE): indent = indent - 1 # Match 'if-then-else', 'do', 'subroutine', 'function', 'module', 'contains', # 'program', 'interface', 'select', 'case', 'type' (definition, not instantiation) # to set the next line indent higher - if re.search('\s*IF.+THEN', to_output, flags=re.IGNORECASE) \ - or re.match('^\s*else\s*', to_output, flags=re.IGNORECASE) \ - or re.match('^\s*do\s*', to_output, flags=re.IGNORECASE) \ - or re.match('^\s*subroutine\s*', to_output, flags=re.IGNORECASE) \ - or re.match('^\s*function\s*', to_output, flags=re.IGNORECASE) \ - or (re.match('^\s*module\s*', to_output, flags=re.IGNORECASE) \ - and not re.match('^\s*module procedure \s*', to_output, flags=re.IGNORECASE)) \ - or re.match('^\s*contains\s*', to_output, flags=re.IGNORECASE) \ - or re.match('^\s*program\s*', to_output, flags=re.IGNORECASE) \ - or re.match('^\s*interface\s*', to_output, flags=re.IGNORECASE) \ - or re.match('^\s*abstract interface\s*', to_output, flags=re.IGNORECASE) \ - or re.match('^\s*pure function\s*', to_output, flags=re.IGNORECASE) \ - or re.match('^\s*select\s*', to_output, flags=re.IGNORECASE) \ - or re.match('^\s*case\s*', to_output, flags=re.IGNORECASE) \ - or re.match('^\s*type\s+', to_output, flags=re.IGNORECASE): + if re.search(r'\s*if.+then', to_output, flags=re.IGNORECASE) \ + or re.match(r'^\s*else\s*', to_output, flags=re.IGNORECASE) \ + or re.match(r'^\s*do\s*', to_output, flags=re.IGNORECASE) \ + or re.match(r'^\s*subroutine\s*', to_output, flags=re.IGNORECASE) \ + or re.match(r'^\s*function\s*', to_output, flags=re.IGNORECASE) \ + or (re.match(r'^\s*module\s*', to_output, flags=re.IGNORECASE) \ + and not re.match(r'^\s*module procedure \s*', to_output, flags=re.IGNORECASE)) \ + or re.match(r'^\s*contains\s*', to_output, flags=re.IGNORECASE) \ + or re.match(r'^\s*program\s*', to_output, flags=re.IGNORECASE) \ + or re.match(r'^\s*interface\s*', to_output, flags=re.IGNORECASE) \ + or re.match(r'^\s*abstract interface\s*', to_output, flags=re.IGNORECASE) \ + or re.match(r'^\s*pure function\s*', to_output, flags=re.IGNORECASE) \ + or re.match(r'^\s*select\s*', to_output, flags=re.IGNORECASE) \ + or re.match(r'^\s*case\s*', to_output, flags=re.IGNORECASE) \ + or re.match(r'^\s*type\s+', to_output, flags=re.IGNORECASE): next_line_indent_more = True # Set start_select when we enter a 'select' structure - if re.match('^\s*select\s*', to_output, flags=re.IGNORECASE): + if re.match(r'^\s*select\s*', to_output, flags=re.IGNORECASE): start_select = True # If at a 'case' statement, check whether it's the first one, via start_select. # If so, don't change the indent, as we just want it to be indented next time; # otherwise, unindent by one - if re.match('^\s*case\s*', to_output, flags=re.IGNORECASE): + if re.match(r'^\s*case\s*', to_output, flags=re.IGNORECASE): if start_select: start_select = False else: @@ -185,9 +186,9 @@ def even_quotes(string): # Check that the previous line does not end with ampersand, # then add correct indentation if not previous_line_ends_ampersand: - if re.search('\S', to_output): - to_output = re.sub('^\s*(?=\S)', ' '*2*indent, to_output) - elif re.search('\S', to_output+comment): + if re.search(r'\S', to_output): + to_output = re.sub(r'^\s*(?=\S)', ' '*2*indent, to_output) + elif re.search(r'\S', to_output+comment): to_output = '' comment = (' '*2*indent)+comment @@ -204,4 +205,5 @@ def even_quotes(string): # ------------------------------------------------- # Write output to file output_file.writelines(outputs) - print('Complete! Now run a find and replace by hand with regex "&\s*\\n" to catch alignment of the lines following ampersands.') + print('Complete! Now run a find and replace by hand with regex "\&\s*\\n" ' + 'to catch alignment of the lines following ampersands.') diff --git a/tools/fix_style.py b/tools/fix_style.py index 1ad803af6..a62d694f1 100644 --- a/tools/fix_style.py +++ b/tools/fix_style.py @@ -24,55 +24,56 @@ # 2. optional output file (if not given, overwrites input file) # -------------------------------------------------------------------- # from __future__ import print_function -import sys, re +import sys +import re # ============================================================ # # Replace the first word(s) with its lowercase if it matches string -def replace_any_case_with_lower_first(string, to_output): - if re.match('^\s*'+string, to_output, flags=re.IGNORECASE): - to_output = re.sub(string, string.lower(), to_output, 1, flags=re.IGNORECASE) - return to_output +def replace_any_case_with_lower_first(string_in, string_out): + if re.match(r'^\s*'+string_in, string_out, flags=re.IGNORECASE): + string_out = re.sub(string_in, string_in.lower(), string_out, 1, flags=re.IGNORECASE) + return string_out # Replace the first word(s) with its lowercase if it matches string -def replace_any_case_with_lower(string, to_output): - if re.search(string, to_output.upper(), flags=re.IGNORECASE): - to_output = re.sub(string, string.lower(), to_output, 1, flags=re.IGNORECASE) - return to_output +def replace_any_case_with_lower(string_in, string_out): + if re.search(string_in, string_out.upper(), flags=re.IGNORECASE): + string_out = re.sub(string_in, string_in.lower(), string_out, 1, flags=re.IGNORECASE) + return string_out # Set first bracket to be preceded by no whitespace, followed by one space -def brackets_for_calls(string, to_output, is_first_line_of_multiline, is_inside_procedure, currently_on_multiline): - if re.match('^\s*'+string, to_output, flags=re.IGNORECASE): - is_inside_procedure = True - to_output = replace_any_case_with_lower_first(string, to_output) - if is_first_line_of_multiline or not currently_on_multiline: - if re.search('(?<=[a-zA-Z0-9\s])\(', to_output): - to_output = re.sub('\s*\(\s*(?=[a-zA-Z0-9\s\'\"\)])', '( ', to_output, 1) - return to_output, is_inside_procedure, currently_on_multiline +def brackets_for_calls(string_in, string_out, first_of_multiline, in_procedure, on_multiline): + if re.match(r'^\s*'+string_in, string_out, flags=re.IGNORECASE): + in_procedure = True + string_out = replace_any_case_with_lower_first(string_in, string_out) + if first_of_multiline or not on_multiline: + if re.search(r'(?<=[a-zA-Z0-9\s])\(', string_out): + string_out = re.sub(r'\s*\(\s*(?=[a-zA-Z0-9\s\'\"\)])', r'( ', string_out, 1) + return string_out, in_procedure, on_multiline # Remove newline characters from string -def strip_newline(string): - string = re.sub('\n', '', string) - return string +def strip_newline(string_in): + string_out = re.sub(r'\n', r'', string_in) + return string_out # Append newline character to string -def add_newline(string): - string = string + '\n' - return string +def add_newline(string_in): + string_out = string_in + '\n' + return string_out # Concatenate two strings def add(string1, string2): - string = add_newline(strip_newline(string1)+string2) - return string + string_out = add_newline(strip_newline(string1)+string2) + return string_out # Check that there are an even number of both single- and # double-quotes in the given string -def even_quotes(string): - if string.count('"') % 2 == 0: +def even_quotes(string_in): + if string_in.count('"') % 2 == 0: double = True else: double = False - if string.count("'") % 2 == 0: + if string_in.count("'") % 2 == 0: single = True else: single = False @@ -83,14 +84,14 @@ def even_quotes(string): # Handle input arguments. If only one is provided, use this for both # input and output. Error if none provided. assert len(sys.argv) >= 2, "Please enter a filename as argument." -filename = sys.argv[1] +in_filename = sys.argv[1] if len(sys.argv) == 3: out_filename = sys.argv[2] else: - out_filename = filename + out_filename = in_filename # Read in file contents -with open(filename, 'r') as input_file: +with open(in_filename, 'r') as input_file: lines = input_file.readlines() # ------------------------------------------------- @@ -128,71 +129,72 @@ def even_quotes(string): is_first_line_of_multiline = False # Handle the case where this line is split onto the next line(s) - if re.search('\&\s*$', to_output): + if re.search(r'\&\s*$', to_output): this_line_ends_ampersand = True if not currently_on_multiline: is_first_line_of_multiline = True currently_on_multiline = True # Replace '.LT.' etc with symbols - to_output = re.sub('\s*\.LT\.\s*', ' < ', to_output, flags=re.IGNORECASE) - to_output = re.sub('\s*\.LE\.\s*', ' <= ', to_output, flags=re.IGNORECASE) - to_output = re.sub('\s*\.GT\.\s*', ' > ', to_output, flags=re.IGNORECASE) - to_output = re.sub('\s*\.GE\.\s*', ' >= ', to_output, flags=re.IGNORECASE) - to_output = re.sub('\s*\.EQ\.\s*', ' == ', to_output, flags=re.IGNORECASE) - to_output = re.sub('\s*\.NE\.\s*', ' /= ', to_output, flags=re.IGNORECASE) + to_output = re.sub(r'\s*\.LT\.\s*', r' < ', to_output, flags=re.IGNORECASE) + to_output = re.sub(r'\s*\.LE\.\s*', r' <= ', to_output, flags=re.IGNORECASE) + to_output = re.sub(r'\s*\.GT\.\s*', r' > ', to_output, flags=re.IGNORECASE) + to_output = re.sub(r'\s*\.GE\.\s*', r' >= ', to_output, flags=re.IGNORECASE) + to_output = re.sub(r'\s*\.EQ\.\s*', r' == ', to_output, flags=re.IGNORECASE) + to_output = re.sub(r'\s*\.NE\.\s*', r' /= ', to_output, flags=re.IGNORECASE) # Put one space after each comma, except where followed by '*' or ':' - to_output = re.sub(',\s*', ', ', to_output) - to_output = re.sub(', \*', ',*', to_output) - to_output = re.sub(', \:', ',:', to_output) - - # Replace, e.g. '( Len =' by '(LEN=', etc... - to_output = re.sub('\(LEN\s*=', '(len=', to_output, flags=re.IGNORECASE) - to_output = re.sub('\(KIND\s*=', '(kind=', to_output, flags=re.IGNORECASE) - to_output = re.sub('STATUS\s*=', 'status=', to_output, flags=re.IGNORECASE) - to_output = re.sub('IOSTAT\s*=', 'iostat=', to_output, flags=re.IGNORECASE) - to_output = re.sub('FILE\s*=', 'file=', to_output, flags=re.IGNORECASE) - to_output = re.sub('EXIST\s*=', 'exist=', to_output, flags=re.IGNORECASE) + to_output = re.sub(r',\s*', r', ', to_output) + to_output = re.sub(r', \*', r',*', to_output) + to_output = re.sub(r', \:', r',:', to_output) + + # Replace, e.g. '(LEN =' with '(len=', etc... + to_output = re.sub(r'\(LEN\s*=', r'(len=', to_output, flags=re.IGNORECASE) + to_output = re.sub(r'\(KIND\s*=', r'(kind=', to_output, flags=re.IGNORECASE) + to_output = re.sub(r'STATUS\s*=', r'status=', to_output, flags=re.IGNORECASE) + to_output = re.sub(r'IOSTAT\s*=', r'iostat=', to_output, flags=re.IGNORECASE) + to_output = re.sub(r'FILE\s*=', r'file=', to_output, flags=re.IGNORECASE) + to_output = re.sub(r'EXIST\s*=', r'exist=', to_output, flags=re.IGNORECASE) # Any ending bracket followed by a double-quote, should have a # single space - to_output = re.sub('\)(?=")', ')', to_output) + to_output = re.sub(r'\)(?=")', r')', to_output) # Any ending bracket should be followed by exactly one space # if it's to be followed by a letter, digit, or single-quote - to_output = re.sub("\)(?=[\w\d])", ') ', to_output) + to_output = re.sub(r'\)(?=[\w\d])', r') ', to_output) # Any ending bracket already followed by whitespace should be # followed by exactly one space - to_output = re.sub('\)[ \t]+', ') ', to_output) + to_output = re.sub(r'\)[ \t]+', r') ', to_output) # These are math functions, so should be lower-case - to_output = re.sub('ABS\(', 'abs(', to_output, flags=re.IGNORECASE) - to_output = re.sub('LOG10\(', 'log10(', to_output, flags=re.IGNORECASE) - to_output = re.sub('EXP\(', 'exp(', to_output, flags=re.IGNORECASE) + to_output = re.sub(r'ABS\(', r'abs(', to_output, flags=re.IGNORECASE) + to_output = re.sub(r'LOG10\(', r'log10(', to_output, flags=re.IGNORECASE) + to_output = re.sub(r'EXP\(', r'exp(', to_output, flags=re.IGNORECASE) # There are intrinsic functions, and should be lowercase - to_output = re.sub('TRIM\(', 'trim(', to_output, flags=re.IGNORECASE) - to_output = re.sub('ADJUSTL\(','adjustl(', to_output, flags=re.IGNORECASE) - to_output = re.sub('ADJUSTR\(','adjustr(', to_output, flags=re.IGNORECASE) + to_output = re.sub(r'TRIM\(', r'trim(', to_output, flags=re.IGNORECASE) + to_output = re.sub(r'ADJUSTL\(', r'adjustl(', to_output, flags=re.IGNORECASE) + to_output = re.sub(r'ADJUSTR\(', r'adjustr(', to_output, flags=re.IGNORECASE) # A comma followed by any letter, digit, (, ', or -, should have a space trailing - to_output = re.sub(",(?=[a-zA-Z0-9('-])", ', ', to_output) + to_output = re.sub(r",(?=[a-zA-Z0-9('-])", r", ", to_output) # These are modifiers so should be lowercase - to_output = re.sub(',\s*ONLY\s*:\s*', ', only : ', to_output, flags=re.IGNORECASE) - to_output = re.sub(',\s*OPTIONAL\s*', ', optional', to_output, flags=re.IGNORECASE) - to_output = re.sub(',\s*CONTIGUOUS\s*', ', contiguous', to_output, flags=re.IGNORECASE) - to_output = re.sub(',\s*PARAMETER\s*', ', parameter', to_output, flags=re.IGNORECASE) - to_output = re.sub(',\s*PRIVATE\s*', ', private', to_output, flags=re.IGNORECASE) - to_output = re.sub(',\s*PUBLIC\s*', ', public', to_output, flags=re.IGNORECASE) + to_output = re.sub(r',\s*ONLY\s*:\s*', r', only : ', to_output, flags=re.IGNORECASE) + to_output = re.sub(r',\s*OPTIONAL\s*', r', optional', to_output, flags=re.IGNORECASE) + to_output = re.sub(r',\s*CONTIGUOUS\s*', r', contiguous', to_output, flags=re.IGNORECASE) + to_output = re.sub(r',\s*PARAMETER\s*', r', parameter', to_output, flags=re.IGNORECASE) + to_output = re.sub(r',\s*PRIVATE\s*', r', private', to_output, flags=re.IGNORECASE) + to_output = re.sub(r',\s*PUBLIC\s*', r', public', to_output, flags=re.IGNORECASE) # Place all '::' with exactly one space either side - to_output = re.sub('\s*::\s*', ' :: ', to_output) + to_output = re.sub(r'\s*::\s*', r' :: ', to_output) - # If it's a CALL etc... line, then make the first opening bracket be preceded by no whitespace, and last - # bracket to be preceded by one space (while handling the case where this is split over multiple lines) + # If it's a CALL, SUBROUTINE, etc... line, then the first bracket is preceded by no + # whitespace and the last bracket is preceded by one space, while handling the case + # where this is split over multiple lines to_output, is_inside_procedure, currently_on_multiline = brackets_for_calls('CALL', to_output, is_first_line_of_multiline, is_inside_procedure, currently_on_multiline) to_output, is_inside_procedure, currently_on_multiline = brackets_for_calls('SUBROUTINE', to_output, is_first_line_of_multiline, is_inside_procedure, currently_on_multiline) to_output, is_inside_procedure, currently_on_multiline = brackets_for_calls('FUNCTION', to_output, is_first_line_of_multiline, is_inside_procedure, currently_on_multiline) @@ -236,10 +238,10 @@ def even_quotes(string): to_output = replace_any_case_with_lower_first('PUBLIC', to_output) # Split 'enddo' and 'endif' into two words, lowercase - if re.match('\s*enddo', to_output, flags=re.IGNORECASE): - to_output = re.sub('enddo', 'end do', to_output, 1, flags=re.IGNORECASE) - if re.match('\s*endif', to_output, flags=re.IGNORECASE): - to_output = re.sub('endif', 'end if', to_output, 1, flags=re.IGNORECASE) + if re.match(r'\s*enddo', to_output, flags=re.IGNORECASE): + to_output = re.sub(r'enddo', r'end do', to_output, 1, flags=re.IGNORECASE) + if re.match(r'\s*endif', to_output, flags=re.IGNORECASE): + to_output = re.sub(r'endif', r'end if', to_output, 1, flags=re.IGNORECASE) # These are all modifiers, so should be lowercase to_output = replace_any_case_with_lower('intent(in)', to_output) @@ -249,40 +251,40 @@ def even_quotes(string): to_output = replace_any_case_with_lower('intrinsic', to_output) # Change boolean and relational operators to lowercase - to_output = re.sub('\.true\.', '.true.', to_output, flags=re.IGNORECASE) - to_output = re.sub('\.false\.', '.false.', to_output, flags=re.IGNORECASE) - to_output = re.sub('\.eqv\.', '.eqv.', to_output, flags=re.IGNORECASE) - to_output = re.sub('\.not\.', '.not.', to_output, flags=re.IGNORECASE) - to_output = re.sub('\.or\.', '.or.', to_output, flags=re.IGNORECASE) - to_output = re.sub('\.and\.', '.and.', to_output, flags=re.IGNORECASE) + to_output = re.sub(r'\.true\.', r'.true.', to_output, flags=re.IGNORECASE) + to_output = re.sub(r'\.false\.', r'.false.', to_output, flags=re.IGNORECASE) + to_output = re.sub(r'\.eqv\.', r'.eqv.', to_output, flags=re.IGNORECASE) + to_output = re.sub(r'\.not\.', r'.not.', to_output, flags=re.IGNORECASE) + to_output = re.sub(r'\.or\.', r'.or.', to_output, flags=re.IGNORECASE) + to_output = re.sub(r'\.and\.', r'.and.', to_output, flags=re.IGNORECASE) # If it's a INTEGER, REAL or CHARACTER line, then make the first # opening bracket be preceded by no whitespace, first closing # bracket to be preceded by one space unless there's a comma - if (re.match('\s*integer\s*\(', to_output) or re.match('\s*real\s*\(', to_output) \ - or re.match('\s*character\s*\(', to_output)): - to_output = re.sub('\s*\(', '(', to_output, 1) - to_output = re.sub('\)[^,]\s*', ') ', to_output, 1) + if (re.match(r'\s*integer\s*\(', to_output) or re.match(r'\s*real\s*\(', to_output) \ + or re.match(r'\s*character\s*\(', to_output)): + to_output = re.sub(r'\s*\(', r'(', to_output, 1) + to_output = re.sub(r'\)[^,]\s*', r') ', to_output, 1) # Match IF-THENs, give one space and change to lowercase - if re.search('\s*IF.+THEN', to_output, flags=re.IGNORECASE): - to_output = re.sub('IF\s*', 'if ', to_output, flags=re.IGNORECASE) - to_output = re.sub('\s*THEN', ' then', to_output, flags=re.IGNORECASE) + if re.search(r'\s*IF.+THEN', to_output, flags=re.IGNORECASE): + to_output = re.sub(r'IF\s*', r'if ', to_output, flags=re.IGNORECASE) + to_output = re.sub(r'\s*THEN', r' then', to_output, flags=re.IGNORECASE) # Add space before last bracket of procedure call or # definition, handling multiple lines if is_inside_procedure and not this_line_ends_ampersand: - if re.search('(?<=[a-zA-Z0-9])\)', to_output): - to_output = re.sub(r"\s*\)(?=[^\)]*$)", r" )", to_output) + if re.search(r'(?<=[a-zA-Z0-9])\)', to_output): + to_output = re.sub(r'\s*\)(?=[^\)]*$)', r' )', to_output) is_inside_procedure = False # Change '( )' to '()' - to_output = re.sub('\s*\(\s+\)\s*', '()', to_output) + to_output = re.sub(r'\s*\(\s+\)\s*', r'()', to_output) # Change ')result' to ') result' - if re.match('^\s*FUNCTION', to_output, flags=re.IGNORECASE) \ - or re.match('^\s*PURE FUNCTION', to_output, flags=re.IGNORECASE): - to_output = re.sub('\)result \(', ') result (', to_output, flags=re.IGNORECASE) + if re.match(r'^\s*FUNCTION', to_output, flags=re.IGNORECASE) \ + or re.match(r'^\s*PURE FUNCTION', to_output, flags=re.IGNORECASE): + to_output = re.sub(r'\)result \(', r') result (', to_output, flags=re.IGNORECASE) # End multiline environment if this line doesn't end with an ampersand if not this_line_ends_ampersand: @@ -294,4 +296,5 @@ def even_quotes(string): # ------------------------------------------------- # Write output to file output_file.writelines(outputs) - print('Complete! Now run a find and replace by hand with regex "[^\\n^ !] " to catch incorrect multiple-spaces.') + print('Complete! Now run a find and replace by hand with regex "[^\\n^ !] " ' + 'to catch incorrect multiple-spaces.') From 9633e6360705d7ba886c5e2977cd0ee37841e765 Mon Sep 17 00:00:00 2001 From: rs028 Date: Wed, 9 Aug 2023 19:49:58 +0100 Subject: [PATCH 11/24] Check with pylint; move kpp conversion --- build/mech_converter.py | 172 +++++++++++++++++++++------------------- 1 file changed, 92 insertions(+), 80 deletions(-) diff --git a/build/mech_converter.py b/build/mech_converter.py index 36e281288..4d2998f9b 100644 --- a/build/mech_converter.py +++ b/build/mech_converter.py @@ -13,10 +13,10 @@ # ----------------------------------------------------------------------------- # -------------------------------------------------------------------- # -# This script converts a chemical mechanism file in FACSIMILE format -# (.fac) into the Fortran-compatible format used by AtChem2. The -# script generates 5 files in the model configuration directory: - +# This script converts a chemical mechanism file -- in FACSIMILE (.fac) +# or KPP (.kpp) format -- into the Fortran-compatible format used by AtChem2. +# The script generates 5 files in the model configuration directory: +# # - mechanism.species # - mechanism.reac # - mechanism.prod @@ -31,8 +31,11 @@ # 3. path to the MCM data files directory [default: mcm/] # -------------------------------------------------------------------- # from __future__ import print_function -import os, sys, re +import os +import sys +import re import fix_mechanism_fac +#import convert_kpp reservedSpeciesList = ['N2', 'O2', 'M', 'RH', 'H2O', 'BLHEIGHT', 'DEC', 'JFAC', 'DILUTE', 'ROOF', 'ASA', 'RO2'] @@ -68,8 +71,8 @@ def tokenise_and_process(input_string, variablesDict): 'tokenise_and_process: variablesDict is not of type dict: ' + str(variablesDict) # Generate start and end points of sections of symbols and non-symbols. - symbol_regex = '[()\-+*@/ ]+' - nonsymbol_regex = '[^()\-+*@/ ]+' + symbol_regex = r'[()\-+*@/ ]+' + nonsymbol_regex = r'[^()\-+*@/ ]+' list_of_symbol_starts = [m.start(0) for m in re.finditer(symbol_regex, input_string)] list_of_symbol_ends = [m.end(0) for m in re.finditer(symbol_regex, input_string)] list_of_nonsymbol_starts = [m.start(0) for m in re.finditer(nonsymbol_regex, input_string)] @@ -104,7 +107,7 @@ def tokenise_and_process(input_string, variablesDict): varname = input_string[list_of_nonsymbol_starts[0]:list_of_nonsymbol_ends[0]] # If it's not a number or a reserved word, it must be a variable, # so substitute with the relevant element from q. - if not re.match('^[0-9]', varname) and varname not in reservedSpeciesList \ + if not re.match(r'^[0-9]', varname) and varname not in reservedSpeciesList \ and varname not in reservedOtherList: new_rhs += 'q(' + str(variablesDict[varname]) + ')' # Otherwise, just print the substring as-is. @@ -119,23 +122,23 @@ def tokenise_and_process(input_string, variablesDict): # ------------------------------------------------------------ # -def convert_to_fortran(input_file, mech_dir, mcm_dir): +def convert_to_fortran(input_file, mech_dir, mcm_vers): """ - Convert a chemical mechanism in FACSIMILE format into a Fortran-compatible - format that can be fed to the AtChem2 ODE solver. This function takes as - input a file with a chemical mechanism (.fac), and generates 5 Fortran files - (mechanism.*) in a given directory (mech_dir): + This function converts a chemical mechanism file into the Fortran-compatible + format used by the AtChem2 ODE solver. The function takes as input a file with + the chemical mechanism (either a .fac or .kpp file), and generates 5 Fortran + files (mechanism.*) in a given directory (mech_dir): * Each species and reaction in the chemical mechanism is assigned an ID number. * The equations defined in sections 'Generic Rate Coefficients' - and 'Complex reactions' go to mechanism.f90 with little more - than formatting changes -- each line is replicated in full, with - each named rate converted to an element in vector q. + and 'Complex reactions' go to the mechanism.f90 file with little + more than formatting changes -- each line is replicated in full, + with each named rate converted to an element in vector q. * The reaction rates defined in section 'Reaction definitions' go - to mechanism.f90 as elements of vector p. + to the mechanism.f90 file as elements of vector p. * The species involved as reactants (respectively products) in the reactions in section 'Reaction definitions' are split up into @@ -147,10 +150,10 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): format that AtChem2 can parse. * The ID numbers and names of all species in the chemical - mechanism go to mechanism.species. + mechanism go to the mechanism.species file. * The ID numbers and names of all RO2 species in section 'Peroxy - radicals' go to mechanism.ro2. + radicals' go to the mechanism.ro2 file. Args: input_file (str): relative or absolute reference to the .fac file @@ -158,30 +161,34 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): the mechanism.* files will be created, and where the environmentVariables.config file should be read from By default it is: model/configuration/ - mcm_dir (str): relative or absolute reference to the directory containing - the RO2 reference file (peroxy-radicals_v*) - By default it is: mcm/ - - Returns: - None + mcm_vers (str): relative or absolute reference to the directory containing + the reference list of RO2 species (peroxy-radicals_v*) + By default it is: mcm/ """ # Get the directory and filename of input_file, and check that they exist. input_directory = os.path.dirname(os.path.abspath(input_file)) input_filename = os.path.basename(input_file) assert os.path.isfile(os.path.join(input_directory, input_filename)), \ - 'The input file ' + str(os.path.join(input_directory, input_filename)) +\ - ' does not exist.' + 'The input file ' + str(os.path.join(input_directory, input_filename)) + ' does not exist.' print(input_directory) - # Fix the input contents of any errant newlines (see documentation - # of fix_mechanism_fac.py for more info). - fix_mechanism_fac.fix_fac_full_file(os.path.join(input_directory, input_filename)) + # Check if the chemical mechanism file is in KPP format, in which case convert it + # to FACSIMILE format (see documentation of `convert_kpp.py` for more info) + if input_filename.split('.')[1] == 'kpp': + ##input_fac = convert_kpp.kpp2fac(input_filename) + sys.exit('KPP format is not supported yet') # TODO + else: + input_fac = input_filename + + # Check and fix the .fac file of any errant newlines (see documentation + # of `fix_mechanism_fac.py` for more info). + fix_mechanism_fac.fix_fac_full_file(os.path.join(input_directory, input_fac)) - # Read-in the input file. + # Read in the input file. print('Reading input file') - with open(os.path.join(input_directory, input_filename), 'r') as input_file: - s = input_file.readlines() + with open(os.path.join(input_directory, input_fac), 'r') as input_mech: + mechList = input_mech.readlines() # Split the lines into the following sections: # - Ignore everything up to Generic Rate Coefficients @@ -198,7 +205,7 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): reaction_definitions = [] section = 0 - for line in s: + for line in mechList: for header_index in section_headers_indices: if section_headers[header_index] in line: section += 1 @@ -211,29 +218,29 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): elif section == 4: reaction_definitions.append(line) else: - assert section == 0, "Error, section is not in [0,4]" + assert section == 0, 'Error, section is not in [0,4]' # Convert peroxy_radicals to a list of strings, with each of the RO2 species from the RO2 sum # in the 'Peroxy radicals' section. ro2List = [] for item in peroxy_radicals: - if not re.match('\*', item): + if not re.match(r'\*', item): # We have an equals sign on the first line. Handle this by splitting against '=', # then taking the last element of the resulting list, which will either be the # right-hand side of the first line, or the whole of any other line. Similarly, # the final line will end with a colon. Handle in a similar way. Then split # by '+'. Append each item to ro2_input: multiple appends use 'extend'. - ro2List.extend([elem.strip() for elem in item.split('=')[-1].split(';')[0].strip().split('+')]) + ro2List.extend([elem.strip() for elem in \ + item.split('=')[-1].split(';')[0].strip().split('+')]) # Remove empty strings. ro2List = list(filter(None, ro2List)) - # Read in the list of reference RO2 species from the MCM - # (peroxy-radicals_v* in mcm_dir). + # Read in the reference list of RO2 species from the MCM (peroxy-radicals_v*). # # => the RO2 reference list is specific to each version of the MCM # => RO2 lists for versions v3.1, v3.2, v3.3.1 of the MCM are available # => change the filename if using a version of the MCM other than the default (v3.3.1) - with open(os.path.join(mcm_dir, 'peroxy-radicals_v3.3.1'), 'r') as RO2List_file: + with open(os.path.join(mcm_vers, 'peroxy-radicals_v3.3.1'), 'r') as RO2List_file: RO2List_reference = [r.rstrip() for r in RO2List_file.readlines()] # Check that each of the RO2s from 'Peroxy radicals' are present @@ -248,7 +255,7 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): mech_rates_file.write('! Note that this file is automatically generated by build/mech_converter.py -- Any manual edits to this file will be overwritten when calling build/mech_converter.py\n') for ro2_species in [element for element in ro2List if element not in RO2List_reference]: - print(' ****** Warning: ' + ro2_species + ' NOT found in the reference RO2 list ****** ') + print('****** Warning: ' + ro2_species + ' NOT found in the reference RO2 list ******') mech_rates_file.write('! ' + ro2_species + ' is not in the MCM list of RO2 species. Should it be in the RO2 sum?\n') # Check the DILUTE environment variable to identify whether dilution should be applied. @@ -258,7 +265,7 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): for x in environmentVariables: x = x.split() try: - if x[1] == "DILUTE" and x[2] != "NOTUSED": + if x[1] == 'DILUTE' and x[2] != 'NOTUSED': dilute = x[2] except IndexError: continue @@ -267,7 +274,7 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): # Initialise list, dictionary and a counter. mechanism_rates_coeff_list = [] - variablesDict = dict() + variablesDict = {} reactionNumber = 0 # Process sections 1 and 2 ('Generic Rate Coefficients', 'Complex reactions'): @@ -277,10 +284,10 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): for line in generic_rate_coefficients + complex_reactions: # Check for comments (beginning with a '!'), or blank lines. - if (re.match('!', line) is not None) or (line.isspace()): + if (re.match(r'!', line) is not None) or (line.isspace()): mechanism_rates_coeff_list.append(line) # Check for lines starting with either ';' or '*', and write these as comments. - elif (re.match(';', line) is not None) or (re.match('[*]', line) is not None): + elif (re.match(r';', line) is not None) or (re.match(r'[*]', line) is not None): mechanism_rates_coeff_list.append('!' + line) # Otherwise assume all remaining lines are in the correct format, and process them. else: @@ -290,29 +297,29 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): # Use '(?<=@)' as a lookbehind assertion, then matches any combination # of digits and decimal points. Replace the negative number by its # bracketed version. Also convert all '@' to '**' etc... - line2 = re.sub('(?<=@)-[0-9.]*', - '(\g<0>)', + line2 = re.sub(r'(?<=@)-[0-9.]*', + r'(\g<0>)', line.replace(';', '').strip() ).replace('@', '**') # Append `_DP` to the end of all digits that aren't followed # by more digits or letters (targets a few too many). - line2 = re.sub('[0-9]+(?![a-zA-Z0-9\.])', - '\g<0>_DP', + line2 = re.sub(r'[0-9]+(?![a-zA-Z0-9\.])', + r'\g<0>_DP', line2) # Undo the suffix `_DP` for any species names and for LOG10. line2 = re.sub(r'\b(?P[a-zA-Z][a-zA-Z0-9]*)_DP', - '\g', + r'\g', line2) # Undo the suffix `_DP` for any numbers like 1D7 or 2.3D-8. line2 = re.sub(r'\b(?P[0-9][0-9\.]*)[dDeE](?P[+-]*[0-9]+)_DP', - '\ge\g_DP', + r'\ge\g_DP', line2) # Add .0 to any literals that don't have a decimal place. This is # necessary as it seems you can't use extended precision on such a # number -- gfortran complains about an unknown integer kind, when # it should really be a real kind. line2 = re.sub(r'(?[0-9]+)_DP', - '\g.0_DP', + r'\g.0_DP', line2) # Strip whitespace, ';' and '%'. @@ -320,7 +327,7 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): # Process the assignment: split by '=' into variable names # and values. The strip each. - [lhs, rhs] = re.split('=', cleaned_line) + [lhs, rhs] = re.split(r'=', cleaned_line) variable_name = lhs.strip() value = rhs.strip() @@ -361,10 +368,10 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): for line in reaction_definitions: # Check for comments (beginning with a '!'), or blank lines. - if (re.match('!', line) is not None) or (line.isspace()): + if (re.match(r'!', line) is not None) or (line.isspace()): rateConstants.append(line) # Check for lines starting with either ';' or '*', and write these as comments. - elif (re.match(';', line) is not None) or (re.match('[*]', line) is not None): + elif (re.match(r';', line) is not None) or (re.match(r'[*]', line) is not None): rateConstants.append('!' + line) # Otherwise assume all remaining lines are in the correct format, and process them. else: @@ -374,18 +381,18 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): line = line.strip().strip('%;').strip() # Split by ':' -- lhs is reaction rate, rhs is reaction equation. - [lhs, rhs] = re.split(':', line) + [lhs, rhs] = re.split(r':', line) # Add reaction rate to rateConstants. rateConstants.append(lhs) # Process the reaction: split by '=' into reactants and products. - [reactantsList, productsList] = re.split('=', rhs) + [reactantsList, productsList] = re.split(r'=', rhs) # Process each of reactants and products by splitting by '+'. # Strip each at this stage. - reactants = [item.strip() for item in re.split('[+]', reactantsList)] - products = [item.strip() for item in re.split('[+]', productsList)] + reactants = [item.strip() for item in re.split(r'[+]', reactantsList)] + products = [item.strip() for item in re.split(r'[+]', productsList)] # Ignore empty reactantsList. if not reactantsList.strip() == '': @@ -396,13 +403,14 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): if x in speciesList: reactantNums.append(speciesList.index(x)+1) else: - # Reactant x is not a known species. Add reactant to speciesList, + # Reactant x is not a known species. Add reactant to speciesList, # then add this number to reactantNums to record this reaction. speciesList.append(x) reactantNums.append(len(speciesList)) # Write the reactants to mech_reac_list. - mech_reac_list.extend([str(reactionNumber) + ' ' + str(z) + '\n' for z in reactantNums]) + mech_reac_list.extend([str(reactionNumber) + ' ' + str(z) \ + + '\n' for z in reactantNums]) # Ignore empty productsList. if not productsList.strip() == '': @@ -419,7 +427,8 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): productNums.append(len(speciesList)) # Write the products to mech_prod_list. - mech_prod_list.extend([str(reactionNumber) + ' ' + str(z) + '\n' for z in productNums]) + mech_prod_list.extend([str(reactionNumber) + ' ' + str(z) \ + + '\n' for z in productNums]) # ------------------------------------------------- @@ -427,11 +436,13 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): if dilute: for spec in speciesList: reactionNumber += 1 - mech_reac_list.append(str(reactionNumber) + ' ' + str(speciesList.index(spec) + 1) + '\n') + mech_reac_list.append(str(reactionNumber) + ' ' \ + + str(speciesList.index(spec) + 1) + '\n') with open(os.path.join(mech_dir, 'mechanism.prod'), 'w') as prod_file: # Output number of species and number of reactions. - prod_file.write(str(len(speciesList)) + ' ' + str(reactionNumber) + ' ' + str(numberOfGenericComplex) \ + prod_file.write(str(len(speciesList)) + ' ' + str(reactionNumber) \ + + ' ' + str(numberOfGenericComplex) \ + ' numberOfSpecies numberOfReactions numberOfGenericComplex\n') # Write all other lines. for line in mech_prod_list: @@ -439,7 +450,8 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): with open(os.path.join(mech_dir, 'mechanism.reac'), 'w') as reac_file: # Output number of species and number of reactions. - reac_file.write(str(len(speciesList)) + ' ' + str(reactionNumber) + ' ' + str(numberOfGenericComplex) \ + reac_file.write(str(len(speciesList)) + ' ' + str(reactionNumber) \ + + ' ' + str(numberOfGenericComplex) \ + ' numberOfSpecies numberOfReactions numberOfGenericComplex\n') # Write all other lines. for line in mech_reac_list: @@ -453,8 +465,8 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): # Write out the rate coefficients. i = 0 mech_rates_list = [] - for rate_counter, x in zip(range(len(s)), rateConstants): - if (re.match('!', x) is not None) | (x.isspace()): + for rate_counter, x in zip(range(len(mechList)), rateConstants): + if (re.match(r'!', x) is not None) | (x.isspace()): mech_rates_list.append(str(x)) else: # Match anything like '@-dd.d' and replaces with '**(-dd.d)'. @@ -462,7 +474,7 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): # of digits and decimal points. Replace the negative number by its # bracketed version. i += 1 - string = re.sub('(?<=@)-[0-9.]*', '(\g<0>)', x) + string = re.sub(r'(?<=@)-[0-9.]*', r'(\g<0>)', x) # Now convert all '@' to '**' etc... string = string.replace('@', '**') string = string.replace('<', '(') @@ -470,10 +482,11 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): # Replace any float-type numbers (xxx.xxxE+xx) # with a double-type number (xxx.xxxD+xx) string = re.sub(r'(?P[0-9]+\.[0-9]+)[eE]', - '\gD', + r'\gD', string) - mech_rates_list.append('p(' + str(i) + ') = ' + \ - tokenise_and_process(string, variablesDict) + ' !' + reaction_definitions[rate_counter]) + mech_rates_list.append('p(' + str(i) + ') = ' \ + + tokenise_and_process(string, variablesDict) \ + + ' !' + reaction_definitions[rate_counter]) # Write out further reactions to implement the dilution factor. if dilute: @@ -518,8 +531,7 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): # using the species ID number of the RO2. print('adding RO2 to ' + mech_dir + '/mechanism.ro2') with open(os.path.join(mech_dir, 'mechanism.ro2'), 'w') as ro2_file: - ro2_file.write("""! Note that this file is automatically generated by build/mech_converter.py -- Any manual edits to this file will be overwritten when calling build/mech_converter.py -""") + ro2_file.write('! Note that this file is automatically generated by build/mech_converter.py -- Any manual edits to this file will be overwritten when calling build/mech_converter.py\n') for ro2List_i in ro2List: for speciesNumber, y in zip(range(1, len(speciesList) + 1), speciesList): @@ -546,12 +558,12 @@ def convert_to_fortran(input_file, mech_dir, mcm_dir): def main(): assert len(sys.argv) > 1, \ 'Please enter the name of a chemical mechanism file (.fac ) as argument:' - mech_filename = sys.argv[1] - # mech_dir defaults to model/configuration/, if not given as argument + mech_file = sys.argv[1] + # config_dir defaults to model/configuration/, if not given as argument if len(sys.argv) <= 2: - mech_dir = './model/configuration/' + config_dir = './model/configuration/' else: - mech_dir = sys.argv[2] + config_dir = sys.argv[2] # mcm_dir defaults to mcm/, if not given as argument if len(sys.argv) <= 3: mcm_dir = './mcm/' @@ -559,12 +571,12 @@ def main(): mcm_dir = sys.argv[3] # Check that the files and directories exist - assert os.path.isfile(mech_filename), 'Failed to find file ' + mech_filename - assert os.path.exists(mech_dir), 'Failed to find directory ' + mech_dir + assert os.path.isfile(mech_file), 'Failed to find file ' + mech_file + assert os.path.exists(config_dir), 'Failed to find directory ' + config_dir assert os.path.exists(mcm_dir), 'Failed to find directory ' + mcm_dir # Call the conversion to Fortran function - convert_to_fortran(mech_filename, mech_dir, mcm_dir) + convert_to_fortran(mech_file, config_dir, mcm_dir) # Call the main function if executed as script if __name__ == '__main__': From 015774c667365c1ef39ea06beae32f0274417144 Mon Sep 17 00:00:00 2001 From: rs028 Date: Thu, 10 Aug 2023 13:16:11 +0100 Subject: [PATCH 12/24] Skeleton convert_kpp.py and other small fixes --- build/convert_kpp.py | 68 +++++++++++++++++++++++++++++++++++++++++ build/mech_converter.py | 18 ++++++----- tools/fix_indent.py | 2 +- 3 files changed, 79 insertions(+), 9 deletions(-) create mode 100644 build/convert_kpp.py diff --git a/build/convert_kpp.py b/build/convert_kpp.py new file mode 100644 index 000000000..bdf7526ee --- /dev/null +++ b/build/convert_kpp.py @@ -0,0 +1,68 @@ +# ----------------------------------------------------------------------------- +# +# Copyright (c) 2017 Sam Cox, Roberto Sommariva +# +# This file is part of the AtChem2 software package. +# +# This file is covered by the MIT license which can be found in the file +# LICENSE.md at the top level of the AtChem2 distribution. +# +# ----------------------------------------------------------------------------- + +# -------------------------------------------------------------------- # +# This script +# -------------------------------------------------------------------- # +from __future__ import print_function +import sys +import re + + +# =========================== FUNCTIONS =========================== # + + +def kpp2fac(input_file): + """ + """ + with open(input_file, 'r') as file_open: + finlist = file_open.readlines() + print(finlist) + # mechlist = [] + # for reac in reaclist: + # if re.match(r'{\d+\.}', reac): + # xx = re.split(r'[}:;]', reac) + # kk = re.sub(r'J\((\d+)\)', r'J<\1>', xx[2]) + # kk = kk.replace('**', '@') + # yy = "%" + kk + ":" + xx[1] + ";\n" + # mechlist.append(yy) + # return mechlist + +# def writefac(mechlist, out_file): +# """ +# """ +# with open(out_file, 'w') as file_open: +# file_open.writelines(contents) +# fout.write("* Generic Rate Coefficients ;\n") +# fout.write("* Complex reactions ;\n") +# fout.write("* Peroxy rdicals. ;\n") +# fout.write("RO2 = ;\n") +# fout.write("* Reaction definitions. ;\n") +# for r in mechlist: +# fout.write(r) +# return + + +# =========================== MAIN =========================== # + + +def main(): + # Pass argument from command line - name of the .kpp file to be converted + if len(sys.argv) > 1: + kpp2fac(sys.argv[1]) + else: + print('******************************************') + print('Please pass a filename as script argument.') + print('******************************************') + +# Call the main function if executed as script +if __name__ == '__main__': + main() diff --git a/build/mech_converter.py b/build/mech_converter.py index 4d2998f9b..68be67bb0 100644 --- a/build/mech_converter.py +++ b/build/mech_converter.py @@ -35,7 +35,7 @@ import sys import re import fix_mechanism_fac -#import convert_kpp +import convert_kpp reservedSpeciesList = ['N2', 'O2', 'M', 'RH', 'H2O', 'BLHEIGHT', 'DEC', 'JFAC', 'DILUTE', 'ROOF', 'ASA', 'RO2'] @@ -45,7 +45,7 @@ # =========================== FUNCTIONS =========================== # -def tokenise_and_process(input_string, variablesDict): +def tokenise_and_process(input_string, vars_dict): """ This function takes in a single string, and a dictionary of known variables from previous lines, and returns the same string @@ -56,7 +56,7 @@ def tokenise_and_process(input_string, variablesDict): Args: input_string (str): a string which will be used as the basis of the return string (new_rhs) - variablesDict (dict): a dictionary containing all the known + vars_dict (dict): a dictionary containing all the known variables up to this point Returns: @@ -67,8 +67,8 @@ def tokenise_and_process(input_string, variablesDict): assert isinstance(input_string, str), \ 'tokenise_and_process: input_string is not of type str: ' + str(input_string) - assert isinstance(variablesDict, dict), \ - 'tokenise_and_process: variablesDict is not of type dict: ' + str(variablesDict) + assert isinstance(vars_dict, dict), \ + 'tokenise_and_process: vars_dict is not of type dict: ' + str(vars_dict) # Generate start and end points of sections of symbols and non-symbols. symbol_regex = r'[()\-+*@/ ]+' @@ -109,7 +109,7 @@ def tokenise_and_process(input_string, variablesDict): # so substitute with the relevant element from q. if not re.match(r'^[0-9]', varname) and varname not in reservedSpeciesList \ and varname not in reservedOtherList: - new_rhs += 'q(' + str(variablesDict[varname]) + ')' + new_rhs += 'q(' + str(vars_dict[varname]) + ')' # Otherwise, just print the substring as-is. else: new_rhs += input_string[list_of_nonsymbol_starts[0]:list_of_nonsymbol_ends[0]] @@ -176,8 +176,8 @@ def convert_to_fortran(input_file, mech_dir, mcm_vers): # Check if the chemical mechanism file is in KPP format, in which case convert it # to FACSIMILE format (see documentation of `convert_kpp.py` for more info) if input_filename.split('.')[1] == 'kpp': - ##input_fac = convert_kpp.kpp2fac(input_filename) - sys.exit('KPP format is not supported yet') # TODO + #input_fac = convert_kpp.kpp2fac(input_filename) + sys.exit('KPP format is not supported yet') else: input_fac = input_filename @@ -240,6 +240,8 @@ def convert_to_fortran(input_file, mech_dir, mcm_vers): # => the RO2 reference list is specific to each version of the MCM # => RO2 lists for versions v3.1, v3.2, v3.3.1 of the MCM are available # => change the filename if using a version of the MCM other than the default (v3.3.1) + # + # TODO: implement a different way to set the mcm version (see issue #297) with open(os.path.join(mcm_vers, 'peroxy-radicals_v3.3.1'), 'r') as RO2List_file: RO2List_reference = [r.rstrip() for r in RO2List_file.readlines()] diff --git a/tools/fix_indent.py b/tools/fix_indent.py index e66d0d6b9..f91d37e5b 100644 --- a/tools/fix_indent.py +++ b/tools/fix_indent.py @@ -187,7 +187,7 @@ def even_quotes(string): # then add correct indentation if not previous_line_ends_ampersand: if re.search(r'\S', to_output): - to_output = re.sub(r'^\s*(?=\S)', ' '*2*indent, to_output) + to_output = re.sub(r'^\s*(?=\S)', r' '*2*indent, to_output) elif re.search(r'\S', to_output+comment): to_output = '' comment = (' '*2*indent)+comment From 89e0d57d4ece68b8b010818b9b9ff3ae65e2c8dc Mon Sep 17 00:00:00 2001 From: rs028 Date: Thu, 10 Aug 2023 20:27:58 +0100 Subject: [PATCH 13/24] Functional conversion script --- build/convert_kpp.py | 68 ---------------- build/fix_mechanism_fac.py | 3 +- build/kpp_conversion.py | 160 +++++++++++++++++++++++++++++++++++++ build/mech_converter.py | 6 +- mcm/mechanism_skel.fac | 6 +- mcm/mechanism_skel.kpp | 9 +++ 6 files changed, 177 insertions(+), 75 deletions(-) delete mode 100644 build/convert_kpp.py create mode 100644 build/kpp_conversion.py create mode 100644 mcm/mechanism_skel.kpp diff --git a/build/convert_kpp.py b/build/convert_kpp.py deleted file mode 100644 index bdf7526ee..000000000 --- a/build/convert_kpp.py +++ /dev/null @@ -1,68 +0,0 @@ -# ----------------------------------------------------------------------------- -# -# Copyright (c) 2017 Sam Cox, Roberto Sommariva -# -# This file is part of the AtChem2 software package. -# -# This file is covered by the MIT license which can be found in the file -# LICENSE.md at the top level of the AtChem2 distribution. -# -# ----------------------------------------------------------------------------- - -# -------------------------------------------------------------------- # -# This script -# -------------------------------------------------------------------- # -from __future__ import print_function -import sys -import re - - -# =========================== FUNCTIONS =========================== # - - -def kpp2fac(input_file): - """ - """ - with open(input_file, 'r') as file_open: - finlist = file_open.readlines() - print(finlist) - # mechlist = [] - # for reac in reaclist: - # if re.match(r'{\d+\.}', reac): - # xx = re.split(r'[}:;]', reac) - # kk = re.sub(r'J\((\d+)\)', r'J<\1>', xx[2]) - # kk = kk.replace('**', '@') - # yy = "%" + kk + ":" + xx[1] + ";\n" - # mechlist.append(yy) - # return mechlist - -# def writefac(mechlist, out_file): -# """ -# """ -# with open(out_file, 'w') as file_open: -# file_open.writelines(contents) -# fout.write("* Generic Rate Coefficients ;\n") -# fout.write("* Complex reactions ;\n") -# fout.write("* Peroxy rdicals. ;\n") -# fout.write("RO2 = ;\n") -# fout.write("* Reaction definitions. ;\n") -# for r in mechlist: -# fout.write(r) -# return - - -# =========================== MAIN =========================== # - - -def main(): - # Pass argument from command line - name of the .kpp file to be converted - if len(sys.argv) > 1: - kpp2fac(sys.argv[1]) - else: - print('******************************************') - print('Please pass a filename as script argument.') - print('******************************************') - -# Call the main function if executed as script -if __name__ == '__main__': - main() diff --git a/build/fix_mechanism_fac.py b/build/fix_mechanism_fac.py index 3528a98b0..908b9b1fb 100644 --- a/build/fix_mechanism_fac.py +++ b/build/fix_mechanism_fac.py @@ -10,7 +10,6 @@ # ----------------------------------------------------------------------------- # -------------------------------------------------------------------- # - # This script corrects the content of a chemical mechanism file in # FACSIMILE format (.fac ) by removing incorrect newline characters. # @@ -134,6 +133,8 @@ def fix_fac_full_contents(input_file): # Reattach the header lines, and unwrap the list of lists in interim_contents. fixed_file = contents[:end_of_header_index] \ + [item for sublist in interim_contents for item in sublist] + + # Return the corrected mechanism file return fixed_file # ------------------------------------------------------------ # diff --git a/build/kpp_conversion.py b/build/kpp_conversion.py new file mode 100644 index 000000000..b8d9f6b56 --- /dev/null +++ b/build/kpp_conversion.py @@ -0,0 +1,160 @@ +# ----------------------------------------------------------------------------- +# +# Copyright (c) 2017 Sam Cox, Roberto Sommariva +# +# This file is part of the AtChem2 software package. +# +# This file is covered by the MIT license which can be found in the file +# LICENSE.md at the top level of the AtChem2 distribution. +# +# ----------------------------------------------------------------------------- + +# -------------------------------------------------------------------- # +# This script +# +# ARGUMENT: +# 1. +# -------------------------------------------------------------------- # +from __future__ import print_function +import sys +import re + + +# =========================== FUNCTIONS =========================== # + + +def extract_section(input_lines, start_marker, end_marker): + """ + Extracts lines between start_marker and end_marker from input_lines. + """ + nlines = len(input_lines) + + start_i = 0 + for i in range(start_i, nlines): + if start_marker in input_lines[i]: + start_i = i + 1 + break + + end_i = nlines + if end_marker: + for i in range (start_i, nlines): + if end_marker in input_lines[i]: + end_i = i + 1 + break + + section_lines = input_lines[start_i:end_i] + return section_lines + +# ------------------------------------------------------------ # + +def convert_rates(section_lines): + """ + Converts the format of section_lines and returns the converted lines. + """ + simplelist = ['KRO2NO','KRO2HO2','KAPHO2','KAPNO','KRO2NO3','KNO3AL','KDEC', + 'KROPRIM','KROSEC','KCH3O2','K298CH3O2','K14ISOM1'] + mechlist1 = [] + mechlist2 =[] + for reac in section_lines: #kk = kk.replace('**', '@') + xx = re.split(r'=', reac) + if xx[0].strip() in simplelist: + mechlist1.append(reac) + else: + mechlist2.append(reac) + return mechlist1, mechlist2 + +# ------------------------------------------------------------ # + +def convert_ro2(section_lines): + """ + Converts the format of section_lines and returns the converted lines. + """ + mechlist = [] + for line in section_lines: + cleaned_line = re.sub(r'C\(ind_([A-Z0-9_]+)\s*\)', r'\1', line) + cleaned_line = re.sub(r'\s*&', r'', cleaned_line.strip()) + mechlist.append(cleaned_line) + return mechlist + +# ------------------------------------------------------------ # + +def convert_reactions(section_lines): + """ + Converts the format of section_lines and returns the converted lines. + """ + mechlist = [] + for reac in section_lines: + if re.match(r'{\d+\.}', reac): + xx = re.split(r'[}:;]', reac) + kk = re.sub(r'J\((\d+)\)', r'J<\1>', xx[2]) + kk = kk.replace('**', '@') + yy = '%' + kk + ':' + xx[1] + ';\n' + mechlist.append(yy) + return mechlist + +# ------------------------------------------------------------ # + +def kpp_to_facsimile(input_file): + """ + workhorse function + """ + + with open(input_file, 'r') as file_open: + contents = file_open.readlines() + + start_ro2 = 'RO2 = & ' + end_ro2 = ') \n' + ro2_lines = extract_section(contents, start_ro2, end_ro2) + converted_ro2 = convert_ro2(ro2_lines) + + start_rates = end_ro2 + end_rates = '#ENDINLINE' + rates_lines = extract_section(contents, start_rates, end_rates)[:-2] + converted_rate1, converted_rate2 = convert_rates(rates_lines) + + start_reactions = '#EQUATIONS' + end_reactions = '' + reactions_lines = extract_section(contents, start_reactions, end_reactions) + converted_reactions = convert_reactions(reactions_lines) + + # + return converted_rate1, converted_rate2, converted_ro2, converted_reactions + +# ------------------------------------------------------------ # + +def write_fac_file(input_file): + """ + wrapper + """ + print('Running write_fac_file on ' + str(input_file)) + contents1, contents2, contents3, contents4 = kpp_to_facsimile(input_file) + output_file = input_file.split('.')[0] + '.fac1' + with open(output_file, 'w') as file_open: + file_open.write('\n* Generic Rate Coefficients ;\n') + file_open.writelines(contents1) + file_open.write('\n* Complex reactions ;\n') + file_open.writelines(contents2) + file_open.write('\n* Peroxy radicals. ;\n') + file_open.write('RO2 = ') + file_open.writelines(contents3) + file_open.write(';\n') + file_open.write('\n* Reaction definitions. ;\n') + file_open.writelines(contents4) + + +# =========================== MAIN =========================== # + + +def main(): + # Pass argument from command line - name of the .kpp file to be converted + if len(sys.argv) > 1: + #aa = kpp_to_facsimile(sys.argv[1]) + write_fac_file(sys.argv[1]) + else: + print('******************************************') + print('Please pass a filename as script argument.') + print('******************************************') + +# Call the main function if executed as script +if __name__ == '__main__': + main() diff --git a/build/mech_converter.py b/build/mech_converter.py index 68be67bb0..dd9b6f307 100644 --- a/build/mech_converter.py +++ b/build/mech_converter.py @@ -35,7 +35,7 @@ import sys import re import fix_mechanism_fac -import convert_kpp +import kpp_conversion reservedSpeciesList = ['N2', 'O2', 'M', 'RH', 'H2O', 'BLHEIGHT', 'DEC', 'JFAC', 'DILUTE', 'ROOF', 'ASA', 'RO2'] @@ -174,9 +174,9 @@ def convert_to_fortran(input_file, mech_dir, mcm_vers): print(input_directory) # Check if the chemical mechanism file is in KPP format, in which case convert it - # to FACSIMILE format (see documentation of `convert_kpp.py` for more info) + # to FACSIMILE format (see documentation of `kpp_conversion.py` for more info) if input_filename.split('.')[1] == 'kpp': - #input_fac = convert_kpp.kpp2fac(input_filename) + #input_fac = kpp_conversion.kpp_to_facsimile(input_filename) sys.exit('KPP format is not supported yet') else: input_fac = input_filename diff --git a/mcm/mechanism_skel.fac b/mcm/mechanism_skel.fac index 260498d9d..ccad76f26 100644 --- a/mcm/mechanism_skel.fac +++ b/mcm/mechanism_skel.fac @@ -1,11 +1,11 @@ * Generic Rate Coefficients ; +... * Complex reactions ; +... * Peroxy radicals. ; - -RO2 = ; +RO2 = ... ; * Reaction definitions. ; - % k : A + B = C ; diff --git a/mcm/mechanism_skel.kpp b/mcm/mechanism_skel.kpp new file mode 100644 index 000000000..cc7eeb593 --- /dev/null +++ b/mcm/mechanism_skel.kpp @@ -0,0 +1,9 @@ +#INLINE F90_RCONST +RO2 = & + C(ind_...) +... +CALL mcm_constants(time, temp, M, N2, O2, RO2, H2O) +#ENDINLINE + +#EQUATIONS +{1.} A + B = C : k ; From cf3e601ab2cd57f6f60f383f83af558db6e573fd Mon Sep 17 00:00:00 2001 From: rs028 Date: Fri, 11 Aug 2023 15:36:47 +0100 Subject: [PATCH 14/24] Amend mcm/ and .fac info --- mcm/INFO.md | 12 ++++++++---- mcm/mechanism_skel.fac | 4 ++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/mcm/INFO.md b/mcm/INFO.md index 8699807ca..8fdfb0bc7 100644 --- a/mcm/INFO.md +++ b/mcm/INFO.md @@ -2,6 +2,8 @@ The `mcm/` directory contains: - a minimal `.fac` file with the required sections headers: `mechanism_skel.fac` +- a minimal `.kpp` file with the required sections headers: `mechanism_skel.kpp` + - the complete lists of organic peroxy radicals (RO2) in the Master Chemical Mechanism v3.1, v3.2 and v3.3.1: `peroxy-radicals_v*` @@ -10,12 +12,14 @@ The `mcm/` directory contains: --- -**How to set the MCM version** +**How to change the MCM version** The default version of the Master Chemical Mechanism (MCM) is **v3.3.1**. This means that AtChem2 uses the list of RO2 in the file `peroxy-radicals_v3.3.1` and the photolysis rates parameters in the file `photolysis-rates_v3.3.1`. -To use previous versions of the MCM, change the corresponding lines in -`build/mech_converter.py` (for the peroxy radicals) and -`src/inputFunctions.f90` (for the photolysis rates). +The filenames are hard-coded in the AtChem2 source code. This will change in future +versions of AtChem2, see [issue #297](https://github.com/AtChem/AtChem2/issues/297). +For now, to use previous versions of the MCM change the corresponding lines in +`build/mech_converter.py` (for the peroxy radicals) and `src/inputFunctions.f90` +(for the photolysis rates). diff --git a/mcm/mechanism_skel.fac b/mcm/mechanism_skel.fac index ccad76f26..b4f11a664 100644 --- a/mcm/mechanism_skel.fac +++ b/mcm/mechanism_skel.fac @@ -4,8 +4,8 @@ * Complex reactions ; ... -* Peroxy radicals. ; +* Peroxy radicals ; RO2 = ... ; -* Reaction definitions. ; +* Reaction definitions ; % k : A + B = C ; From 61c8289a81bd8b6d323b01bad29b6cdb48c29985 Mon Sep 17 00:00:00 2001 From: rs028 Date: Wed, 13 Sep 2023 19:36:19 +0100 Subject: [PATCH 15/24] Tidy comments py scripts --- build/fix_mechanism_fac.py | 24 ++++---- build/kpp_conversion.py | 117 +++++++++++++++++++++++++------------ build/mech_converter.py | 17 +++--- 3 files changed, 103 insertions(+), 55 deletions(-) diff --git a/build/fix_mechanism_fac.py b/build/fix_mechanism_fac.py index 908b9b1fb..8b75fb1a4 100644 --- a/build/fix_mechanism_fac.py +++ b/build/fix_mechanism_fac.py @@ -48,16 +48,17 @@ def fix_fac_full_contents(input_file): concatenated correctly. WARNING: this will probably fail if a line is REALLY long, - stretching over two full lines, but in this case it should - then give an error as output. + stretching over two full lines, but in this case it should then + give an error as output. Args: input_file (str): name of the .fac file to be corrected Returns: - fixed_file (list): corrected mechanism file, with each line as - a separate string + fixed_file (list): corrected mechanism file, with each line + as a separate string """ + # Using splitlines() rather than readlines(), we take out the # errant carriage returns, and, for any line with such on it, we # return it to the list. @@ -146,15 +147,18 @@ def fix_fac_full_file(input_file): the affected lines concatenated correctly. All the work is done by the fix_fac_contents() function -- see its - documentation for details. This function is just a simple wrapper - to write the output of fix_fac_contents() back to the same file. + documentation for details. This function is just a wrapper to + write the output of fix_fac_contents() back to the same .fac file. Args: input_file (str): name of the .fac file to be fixed """ - print('Running fix_fac_full_file on ' + str(input_file)) + + print('Running fix_fac_full_file() on: ' + str(input_file)) + contents = fix_fac_full_contents(input_file) contents = [item + '\n' for item in contents] + with open(input_file, 'w') as file_open: file_open.writelines(contents) @@ -167,9 +171,9 @@ def main(): if len(sys.argv) > 1: fix_fac_full_contents(sys.argv[1]) else: - print('******************************************') - print('Please pass a filename as script argument.') - print('******************************************') + print('*****************************************************') + print('* Please pass a filename (.fac) as script argument. *') + print('*****************************************************') # Call the main function if executed as script if __name__ == '__main__': diff --git a/build/kpp_conversion.py b/build/kpp_conversion.py index b8d9f6b56..19d05cc97 100644 --- a/build/kpp_conversion.py +++ b/build/kpp_conversion.py @@ -10,10 +10,11 @@ # ----------------------------------------------------------------------------- # -------------------------------------------------------------------- # -# This script +# This script converts a chemical mechanism file from KPP format +# (.kpp) to FACSIMILE format (.fac) # # ARGUMENT: -# 1. +# 1. path to the mechanism .kpp file # -------------------------------------------------------------------- # from __future__ import print_function import sys @@ -23,22 +24,25 @@ # =========================== FUNCTIONS =========================== # -def extract_section(input_lines, start_marker, end_marker): +def mechanism_section(input_lines, start_section, end_section): """ - Extracts lines between start_marker and end_marker from input_lines. + Extracts lines between start_section and end_section from + input_lines. + """ + nlines = len(input_lines) start_i = 0 for i in range(start_i, nlines): - if start_marker in input_lines[i]: + if start_section in input_lines[i]: start_i = i + 1 break end_i = nlines - if end_marker: + if end_section: for i in range (start_i, nlines): - if end_marker in input_lines[i]: + if end_section in input_lines[i]: end_i = i + 1 break @@ -49,14 +53,18 @@ def extract_section(input_lines, start_marker, end_marker): def convert_rates(section_lines): """ - Converts the format of section_lines and returns the converted lines. + Converts the format of section_lines and returns the converted + lines. + """ + simplelist = ['KRO2NO','KRO2HO2','KAPHO2','KAPNO','KRO2NO3','KNO3AL','KDEC', 'KROPRIM','KROSEC','KCH3O2','K298CH3O2','K14ISOM1'] mechlist1 = [] mechlist2 =[] - for reac in section_lines: #kk = kk.replace('**', '@') + for reac in section_lines: xx = re.split(r'=', reac) + xx[1] = xx[1].replace('**', '@') if xx[0].strip() in simplelist: mechlist1.append(reac) else: @@ -67,8 +75,11 @@ def convert_rates(section_lines): def convert_ro2(section_lines): """ - Converts the format of section_lines and returns the converted lines. + Converts the format of section_lines and returns the converted + lines. + """ + mechlist = [] for line in section_lines: cleaned_line = re.sub(r'C\(ind_([A-Z0-9_]+)\s*\)', r'\1', line) @@ -80,8 +91,11 @@ def convert_ro2(section_lines): def convert_reactions(section_lines): """ - Converts the format of section_lines and returns the converted lines. + Converts the format of section_lines and returns the converted + lines. + """ + mechlist = [] for reac in section_lines: if re.match(r'{\d+\.}', reac): @@ -96,49 +110,78 @@ def convert_reactions(section_lines): def kpp_to_facsimile(input_file): """ - workhorse function + Split a .kpp file into 4 parts: the summation of organic peroxy + radicals (RO2), the generic and complex rate coefficients, the + chemical reactions. Each part is separately converted to FACSIMILE + format. + + WARNING: this function assumes that the input file is in a similar + KPP format as generated by the MCM web extractor. It may fail for other + + Args: + input_file (str): name of the .kpp file to convert + + Returns: + generic_rates (list): + complex_reactions (list): + peroxy_radicals (list): + reaction_definitions (list): + """ + # Read in the .kpp mechanism file with open(input_file, 'r') as file_open: contents = file_open.readlines() - start_ro2 = 'RO2 = & ' - end_ro2 = ') \n' - ro2_lines = extract_section(contents, start_ro2, end_ro2) - converted_ro2 = convert_ro2(ro2_lines) - - start_rates = end_ro2 - end_rates = '#ENDINLINE' - rates_lines = extract_section(contents, start_rates, end_rates)[:-2] - converted_rate1, converted_rate2 = convert_rates(rates_lines) - - start_reactions = '#EQUATIONS' - end_reactions = '' - reactions_lines = extract_section(contents, start_reactions, end_reactions) - converted_reactions = convert_reactions(reactions_lines) + # Peroxy radicals + start_section = 'RO2 = & ' + end_section = ') \n' + peroxy_lines = mechanism_section(contents, start_section, end_section) + peroxy_radicals = convert_ro2(peroxy_lines) + + # Generic Rate Coefficients, Complex reactions + start_section = ') \n' + end_section = '#ENDINLINE' + rates_lines = mechanism_section(contents, start_section, end_section) + rates_lines = rates_lines[:-2] # remove `CALL mcm_constants()` line + generic_rates, complex_reactions = convert_rates(rates_lines) + + # Reaction definitions + start_section = '#EQUATIONS' + end_section = '' # file ends after list of reactions + reactions_lines = mechanism_section(contents, start_section, end_section) + reaction_definitions = convert_reactions(reactions_lines) # - return converted_rate1, converted_rate2, converted_ro2, converted_reactions + return generic_rates, complex_reactions, peroxy_radicals, reaction_definitions # ------------------------------------------------------------ # def write_fac_file(input_file): """ - wrapper + Convert a .kpp file to FACSIMILE format and save the output to a + .fac file. The format conversion is done by the kpp_to_facsimile() + function -- see its documentation for details. + + Args: + input_file (str): name of the .kpp file to convert """ - print('Running write_fac_file on ' + str(input_file)) + + print('Running write_fac_file() on: ' + str(input_file)) + contents1, contents2, contents3, contents4 = kpp_to_facsimile(input_file) - output_file = input_file.split('.')[0] + '.fac1' + output_file = input_file.split('.')[0] + '.fac' + with open(output_file, 'w') as file_open: file_open.write('\n* Generic Rate Coefficients ;\n') file_open.writelines(contents1) file_open.write('\n* Complex reactions ;\n') file_open.writelines(contents2) - file_open.write('\n* Peroxy radicals. ;\n') + file_open.write('\n* Peroxy radicals ;\n') file_open.write('RO2 = ') file_open.writelines(contents3) file_open.write(';\n') - file_open.write('\n* Reaction definitions. ;\n') + file_open.write('\n* Reaction definitions ;\n') file_open.writelines(contents4) @@ -146,14 +189,14 @@ def write_fac_file(input_file): def main(): - # Pass argument from command line - name of the .kpp file to be converted + # Pass argument from command line - name of the .kpp file to convert if len(sys.argv) > 1: - #aa = kpp_to_facsimile(sys.argv[1]) + #kpp_to_facsimile(sys.argv[1]) <- CHANGE THIS write_fac_file(sys.argv[1]) else: - print('******************************************') - print('Please pass a filename as script argument.') - print('******************************************') + print('*****************************************************') + print('* Please pass a filename (.kpp) as script argument. *') + print('*****************************************************') # Call the main function if executed as script if __name__ == '__main__': diff --git a/build/mech_converter.py b/build/mech_converter.py index dd9b6f307..22d6de4bf 100644 --- a/build/mech_converter.py +++ b/build/mech_converter.py @@ -47,9 +47,9 @@ def tokenise_and_process(input_string, vars_dict): """ - This function takes in a single string, and a dictionary of - known variables from previous lines, and returns the same string - but with known variables replaced by a reference to their matching + This function takes in a single string, and a dictionary of known + variables from previous lines, and returns the same string but + with known variables replaced by a reference to their matching element in a vector q. This removes the dependence on potentially 100+ named variables, and replaces them with a single vector. @@ -124,10 +124,11 @@ def tokenise_and_process(input_string, vars_dict): def convert_to_fortran(input_file, mech_dir, mcm_vers): """ - This function converts a chemical mechanism file into the Fortran-compatible - format used by the AtChem2 ODE solver. The function takes as input a file with - the chemical mechanism (either a .fac or .kpp file), and generates 5 Fortran - files (mechanism.*) in a given directory (mech_dir): + This function converts a chemical mechanism file into the + Fortran-compatible format used by the AtChem2 ODE solver. The + function takes as input a file with the chemical mechanism (either + a .fac or .kpp file), and generates 5 Fortran files (mechanism.*) + in a given directory (mech_dir): * Each species and reaction in the chemical mechanism is assigned an ID number. @@ -328,7 +329,7 @@ def convert_to_fortran(input_file, mech_dir, mcm_vers): cleaned_line = line2.strip().strip('%;').strip() # Process the assignment: split by '=' into variable names - # and values. The strip each. + # and values, then strip each. [lhs, rhs] = re.split(r'=', cleaned_line) variable_name = lhs.strip() From 004cebd75855e2bbb2ed2b3d4c0fe0f407f47275 Mon Sep 17 00:00:00 2001 From: rs028 Date: Fri, 22 Sep 2023 12:55:42 +0100 Subject: [PATCH 16/24] Links for the badges --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 4780f0f0a..d2da7d55b 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -AtChem2 ![license](https://img.shields.io/github/license/AtChem/AtChem2?color=blue) ![release](https://img.shields.io/github/v/release/AtChem/AtChem2?color=blue) ![AtChem2-CI](https://github.com/AtChem/AtChem2/workflows/AtChem2-CI/badge.svg) [![codecov](https://codecov.io/gh/AtChem/AtChem2/graph/badge.svg?token=b6GTNgTXqJ)](https://codecov.io/gh/AtChem/AtChem2) +AtChem2 [![license](https://img.shields.io/github/license/AtChem/AtChem2?color=blue)](https://github.com/AtChem/AtChem2/blob/master/LICENSE) [![release](https://img.shields.io/github/v/release/AtChem/AtChem2?color=blue)](https://github.com/AtChem/AtChem2/releases) [![AtChem2 CI](https://github.com/AtChem/AtChem2/actions/workflows/ci.yml/badge.svg)](https://github.com/AtChem/AtChem2/actions/workflows/ci.yml) [![codecov](https://codecov.io/gh/AtChem/AtChem2/graph/badge.svg)](https://codecov.io/gh/AtChem/AtChem2) ======= -**AtChem2** is a modelling tool for atmospheric chemistry. It is primarily designed to use the **Master Chemical Mechanism** (MCM, http://mcm.york.ac.uk/), but it can be used with any general set of chemical reactions as long as they are provided in the correct format. The MCM is a near-explicit chemical mechanism which describes the gas-phase oxidation of volatile organic compounds (VOC) in the lower atmosphere. +**AtChem2** is a modelling tool for atmospheric chemistry. It is primarily designed to use the **Master Chemical Mechanism** (MCM, https://mcm.york.ac.uk/MCM), but it can be used with any general set of chemical reactions as long as they are provided in the correct format. The MCM is a near-explicit chemical mechanism which describes the gas-phase oxidation of volatile organic compounds (VOC) in the lower atmosphere. AtChem2 is _open source_, under the [MIT license](https://opensource.org/licenses/MIT). @@ -20,16 +20,16 @@ Directory structure - `model/` contains an example directory structure for the chemical mechanism, model configuration, constraints, output, and an example chemical mechanism (in FACSIMILE format). There can be several such directories (with different names). - `obj/` contains the files generated by the Fortran compiler. - `src/` contains the Fortran source files. -- `tests/` contains the Test Suite scripts and files. +- `tests/` contains the Testsuite scripts and files. - `tools/` contains shell scripts to install AtChem2 and its dependencies, plotting scripts in various languages, and other utilities. Installation, Setup and Execution --------------------------------- -AtChem2 requires a **Fortran** compiler (GNU `gfortran` or Intel `ifort`), the **CVODE** (part of [SUNDIALS](https://computing.llnl.gov/projects/sundials)) and **openlibm** libraries, **make**, and **Python**. Compilation of CVODE also requires **cmake**. Optionally, **numdiff**, **FRUIT**, and **Ruby** are required to run the Test Suite. AtChem2 compiles and runs on Unix/Linux and macOS systems. A working knowledge of the **unix shell** is required to install and use AtChem2. +AtChem2 requires a **Fortran** compiler (GNU `gfortran` or Intel `ifort`), the **CVODE** (part of [SUNDIALS](https://computing.llnl.gov/projects/sundials)) and **openlibm** libraries, **make**, and **Python**. Compilation of CVODE also requires **cmake**. Optionally, **numdiff**, **FRUIT**, and **Ruby** are required to run the Testsuite. AtChem2 compiles and runs on Unix/Linux and macOS systems. A working knowledge of the **unix shell** is required to install and use AtChem2. -The latest stable version of AtChem2 can be downloaded from the [Releases page](https://github.com/AtChem/AtChem2/releases). After installing the required dependencies using the scripts in the `tools/install/` directory, copy the file `tools/install/Makefile.skel` to the _Main Directory_ and rename it `Makefile`. Set the variables `CVODELIB`, `OPENLIBMDIR` and `FRUITDIR` in `Makefile` to the paths of CVODE, openlibm and (if installed) FRUIT. To compile the model using the example chemical mechanism, execute the command: +The latest stable version of AtChem2 can be downloaded from the [Releases page](https://github.com/AtChem/AtChem2/releases). After installing the required dependencies using the scripts in the `tools/install/` directory, copy the file `tools/install/Makefile.skel` to the _Main Directory_ and rename it `Makefile`. Set the variables `CVODELIBDIR`, `OPENLIBMDIR` and `FRUITDIR` in `Makefile` to the paths of CVODE, openlibm and (if installed) FRUIT. To compile the model using the example chemical mechanism, execute the command: ``` ./build/build_atchem2.sh ./model/mechanism.fac From 151588ef9e5c7989ff5176612b4babb0a9c0602d Mon Sep 17 00:00:00 2001 From: rs028 Date: Fri, 22 Sep 2023 19:16:39 +0100 Subject: [PATCH 17/24] Call kpp cpnversion script froom mech_converter --- build/kpp_conversion.py | 165 ++++++++++++++++++++++++---------------- build/mech_converter.py | 3 +- 2 files changed, 101 insertions(+), 67 deletions(-) diff --git a/build/kpp_conversion.py b/build/kpp_conversion.py index 19d05cc97..607c56681 100644 --- a/build/kpp_conversion.py +++ b/build/kpp_conversion.py @@ -9,9 +9,11 @@ # # ----------------------------------------------------------------------------- -# -------------------------------------------------------------------- # +# -------------------------------------------------------------------- # This script converts a chemical mechanism file from KPP format -# (.kpp) to FACSIMILE format (.fac) +# (.kpp) to FACSIMILE format (.fac). The KPP file must have the same +# structure of the files generated by the MCM web extractor. A minimal +# example of this structure is: `mcm/mechanism_skel.kpp`. # # ARGUMENT: # 1. path to the mechanism .kpp file @@ -26,8 +28,17 @@ def mechanism_section(input_lines, start_section, end_section): """ - Extracts lines between start_section and end_section from - input_lines. + Parse the content of a file, provided in the form of a list + (each line of the file an item of the list), and extract the + section of the file delimited by two given markers. + + Args: + input_lines (list): file to parse, each line is a separate string + start_section (str): marker for the beginning of the section + end_section (str): marker for the end of the section + + Returns: + section_lines (list): file section, each line is a separate string """ @@ -51,81 +62,100 @@ def mechanism_section(input_lines, start_section, end_section): # ------------------------------------------------------------ # -def convert_rates(section_lines): +def convert_ro2(kpp_lines): """ - Converts the format of section_lines and returns the converted - lines. + Converts the summation of organic peroxy radicals (RO2) to + FACSIMILE format. + Args: + kpp_lines (list): lines with the RO2 sum in KPP + + Returns: + fac_lines (list): lines with the RO2 sum in FACSIMILE """ - simplelist = ['KRO2NO','KRO2HO2','KAPHO2','KAPNO','KRO2NO3','KNO3AL','KDEC', - 'KROPRIM','KROSEC','KCH3O2','K298CH3O2','K14ISOM1'] - mechlist1 = [] - mechlist2 =[] - for reac in section_lines: - xx = re.split(r'=', reac) - xx[1] = xx[1].replace('**', '@') - if xx[0].strip() in simplelist: - mechlist1.append(reac) - else: - mechlist2.append(reac) - return mechlist1, mechlist2 + fac_lines = [] + for line in kpp_lines: + new_line = re.sub(r'C\(ind_([A-Z0-9_]+)\s*\)', r'\1', line) + new_line = re.sub(r'\s*&', r'', new_line.strip()) + fac_lines.append(new_line) + return fac_lines # ------------------------------------------------------------ # -def convert_ro2(section_lines): +def convert_rates(kpp_lines): """ - Converts the format of section_lines and returns the converted - lines. + Converts the generic and complex rate coefficients to + FACSIMILE format. + + Args: + kpp_lines (list): lines with the rate coefficients in KPP + + Returns: + fac_lines1 (list): lines with the generic rate coefficients in FACSIMILE + fac_lines2 (list): lines with the complex rate coefficients in FACSIMILE """ - mechlist = [] - for line in section_lines: - cleaned_line = re.sub(r'C\(ind_([A-Z0-9_]+)\s*\)', r'\1', line) - cleaned_line = re.sub(r'\s*&', r'', cleaned_line.strip()) - mechlist.append(cleaned_line) - return mechlist + # list of generic rate coefficients -- this list may change with + # future updates of the MCM + simple_list = ['KRO2NO','KRO2HO2','KAPHO2','KAPNO','KRO2NO3','KNO3AL','KDEC', + 'KROPRIM','KROSEC','KCH3O2','K298CH3O2','K14ISOM1'] + + fac_lines1 = [] + fac_lines2 = [] + for line in kpp_lines: + react_line = re.split(r'=', line) + react_line[1] = react_line[1].replace('**', '@') + new_line = react_line[0].strip() + ' = ' + react_line[1].strip() + ' ;\n' + if react_line[0].strip() in simple_list: + fac_lines1.append(new_line) + else: + fac_lines2.append(new_line) + return fac_lines1, fac_lines2 # ------------------------------------------------------------ # -def convert_reactions(section_lines): +def convert_reactions(kpp_lines): """ - Converts the format of section_lines and returns the converted - lines. + Converts the chemical reactions to FACSIMILE format. + + Args: + kpp_lines (list): lines with the chemical reactions in KPP + Returns: + fac_lines (list): lines with the chemical reactions in FACSIMILE """ - mechlist = [] - for reac in section_lines: - if re.match(r'{\d+\.}', reac): - xx = re.split(r'[}:;]', reac) - kk = re.sub(r'J\((\d+)\)', r'J<\1>', xx[2]) - kk = kk.replace('**', '@') - yy = '%' + kk + ':' + xx[1] + ';\n' - mechlist.append(yy) - return mechlist + fac_lines = [] + for line in kpp_lines: + if re.match(r'{\d+\.}', line): + react_line = re.split(r'[}:;]', line) + rate_coeff = re.sub(r'J\((\d+)\)', r'J<\1>', react_line[2]) + rate_coeff = rate_coeff.replace('**', '@') + new_line = '%' + rate_coeff + ':' + react_line[1] + ';\n' + fac_lines.append(new_line) + return fac_lines # ------------------------------------------------------------ # def kpp_to_facsimile(input_file): - """ - Split a .kpp file into 4 parts: the summation of organic peroxy - radicals (RO2), the generic and complex rate coefficients, the - chemical reactions. Each part is separately converted to FACSIMILE - format. + """Split a .kpp file into 4 sections: the summation of organic + peroxy radicals (RO2), the generic and complex rate coefficients, + the chemical reactions. Each section is separately converted to + FACSIMILE format. - WARNING: this function assumes that the input file is in a similar - KPP format as generated by the MCM web extractor. It may fail for other + WARNING: this function may fail if the .kpp file has a different + structure from the .kpp files generated by the MCM web extractor. Args: input_file (str): name of the .kpp file to convert Returns: - generic_rates (list): - complex_reactions (list): - peroxy_radicals (list): - reaction_definitions (list): + generic_rates (list): generic rate coefficients + complex_reactions (list): complex rate coefficients + peroxy_radicals (list): summation of organic peroxy radicals + reaction_definitions (list): chemical reactions """ @@ -133,26 +163,26 @@ def kpp_to_facsimile(input_file): with open(input_file, 'r') as file_open: contents = file_open.readlines() - # Peroxy radicals - start_section = 'RO2 = & ' - end_section = ') \n' - peroxy_lines = mechanism_section(contents, start_section, end_section) + # Peroxy radicals section + start_peroxy = 'RO2 = & ' + end_peroxy = ') \n' + peroxy_lines = mechanism_section(contents, start_peroxy, end_peroxy) peroxy_radicals = convert_ro2(peroxy_lines) - # Generic Rate Coefficients, Complex reactions - start_section = ') \n' - end_section = '#ENDINLINE' - rates_lines = mechanism_section(contents, start_section, end_section) + # Generic Rate Coefficients, Complex reactions sections + start_rates = ') \n' + end_rates = '#ENDINLINE' + rates_lines = mechanism_section(contents, start_rates, end_rates) rates_lines = rates_lines[:-2] # remove `CALL mcm_constants()` line generic_rates, complex_reactions = convert_rates(rates_lines) - # Reaction definitions - start_section = '#EQUATIONS' - end_section = '' # file ends after list of reactions - reactions_lines = mechanism_section(contents, start_section, end_section) + # Reaction definitions section + start_reactions = '#EQUATIONS' + end_reactions = '' # file ends after list of reactions + reactions_lines = mechanism_section(contents, start_reactions, end_reactions) reaction_definitions = convert_reactions(reactions_lines) - # + # Sections of the mechanism file converted to KPP format return generic_rates, complex_reactions, peroxy_radicals, reaction_definitions # ------------------------------------------------------------ # @@ -165,6 +195,9 @@ def write_fac_file(input_file): Args: input_file (str): name of the .kpp file to convert + + Returns: + output_file (str): name of the converted .fac file """ print('Running write_fac_file() on: ' + str(input_file)) @@ -184,6 +217,9 @@ def write_fac_file(input_file): file_open.write('\n* Reaction definitions ;\n') file_open.writelines(contents4) + print(type(output_file)) + return output_file + # =========================== MAIN =========================== # @@ -191,7 +227,6 @@ def write_fac_file(input_file): def main(): # Pass argument from command line - name of the .kpp file to convert if len(sys.argv) > 1: - #kpp_to_facsimile(sys.argv[1]) <- CHANGE THIS write_fac_file(sys.argv[1]) else: print('*****************************************************') diff --git a/build/mech_converter.py b/build/mech_converter.py index 22d6de4bf..cb2da1831 100644 --- a/build/mech_converter.py +++ b/build/mech_converter.py @@ -177,8 +177,7 @@ def convert_to_fortran(input_file, mech_dir, mcm_vers): # Check if the chemical mechanism file is in KPP format, in which case convert it # to FACSIMILE format (see documentation of `kpp_conversion.py` for more info) if input_filename.split('.')[1] == 'kpp': - #input_fac = kpp_conversion.kpp_to_facsimile(input_filename) - sys.exit('KPP format is not supported yet') + input_fac = kpp_conversion.write_fac_file(input_filename) else: input_fac = input_filename From 49116767e31d720ef78fd4f21b6cf61612182284 Mon Sep 17 00:00:00 2001 From: rs028 Date: Fri, 22 Sep 2023 19:49:07 +0100 Subject: [PATCH 18/24] Set path of the kpp file --- build/kpp_conversion.py | 2 +- build/mech_converter.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build/kpp_conversion.py b/build/kpp_conversion.py index 607c56681..a645e568f 100644 --- a/build/kpp_conversion.py +++ b/build/kpp_conversion.py @@ -217,7 +217,7 @@ def write_fac_file(input_file): file_open.write('\n* Reaction definitions ;\n') file_open.writelines(contents4) - print(type(output_file)) + # Filename of the .fac file return output_file diff --git a/build/mech_converter.py b/build/mech_converter.py index cb2da1831..972766e7d 100644 --- a/build/mech_converter.py +++ b/build/mech_converter.py @@ -177,7 +177,7 @@ def convert_to_fortran(input_file, mech_dir, mcm_vers): # Check if the chemical mechanism file is in KPP format, in which case convert it # to FACSIMILE format (see documentation of `kpp_conversion.py` for more info) if input_filename.split('.')[1] == 'kpp': - input_fac = kpp_conversion.write_fac_file(input_filename) + input_fac = kpp_conversion.write_fac_file(os.path.join(input_directory, input_filename)) else: input_fac = input_filename From ba7381e8b0e3eceb1c9a7703cbd46a990b264e1f Mon Sep 17 00:00:00 2001 From: rs028 Date: Mon, 25 Sep 2023 19:01:48 +0100 Subject: [PATCH 19/24] Model test for the KPP conversion --- tests/model_tests/INFO.md | 10 +- .../spec_model_1/configuration/.gitignore | 2 + .../configuration/environmentVariables.config | 10 + .../initialConcentrations.config | 5 + .../configuration/model.parameters | 13 + .../configuration/outputRates.config | 2 + .../configuration/outputSpecies.config | 12 + .../configuration/photolysisConstant.config | 0 .../photolysisConstrained.config | 0 .../configuration/solver.parameters | 9 + .../configuration/speciesConstant.config | 0 .../configuration/speciesConstrained.config | 0 .../spec_model_1/output/.gitignore | 2 + .../output/environmentVariables.output.cmp | 31 ++ .../spec_model_1/output/errors.output.cmp | 2 + .../output/finalModelState.output.cmp | 49 +++ .../spec_model_1/output/jacobian.output.cmp | 0 .../spec_model_1/output/lossRates.output.cmp | 358 ++++++++++++++++ .../output/mainSolverParameters.output.cmp | 31 ++ .../output/photolysisRates.output.cmp | 31 ++ .../photolysisRatesParameters.output.cmp | 31 ++ .../output/productionRates.output.cmp | 400 ++++++++++++++++++ .../output/reactionRates/25200.cmp | 147 +++++++ .../output/reactionRates/27000.cmp | 147 +++++++ .../output/reactionRates/28800.cmp | 147 +++++++ .../output/reactionRates/30600.cmp | 147 +++++++ .../output/reactionRates/32400.cmp | 147 +++++++ .../output/reactionRates/34200.cmp | 147 +++++++ .../output/reactionRates/36000.cmp | 147 +++++++ .../output/reactionRates/37800.cmp | 147 +++++++ .../output/reactionRates/39600.cmp | 147 +++++++ .../output/reactionRates/41400.cmp | 147 +++++++ .../output/reactionRates/43200.cmp | 147 +++++++ .../output/reactionRates/45000.cmp | 147 +++++++ .../output/reactionRates/46800.cmp | 147 +++++++ .../output/reactionRates/48600.cmp | 147 +++++++ .../output/reactionRates/50400.cmp | 147 +++++++ .../output/speciesConcentrations.output.cmp | 32 ++ .../model_tests/spec_model_1/spec_model_1.fac | 371 ++++++++++++++++ .../spec_model_1/spec_model_1.out.cmp | 211 +++++++++ .../spec_model_kpp/configuration/.gitignore | 2 + .../configuration/environmentVariables.config | 10 + .../initialConcentrations.config | 5 + .../configuration/model.parameters | 13 + .../configuration/outputRates.config | 2 + .../configuration/outputSpecies.config | 12 + .../configuration/photolysisConstant.config | 0 .../photolysisConstrained.config | 0 .../configuration/solver.parameters | 9 + .../configuration/speciesConstant.config | 0 .../configuration/speciesConstrained.config | 0 .../spec_model_kpp/output/.gitignore | 2 + .../output/environmentVariables.output.cmp | 31 ++ .../spec_model_kpp/output/errors.output.cmp | 2 + .../output/finalModelState.output.cmp | 49 +++ .../spec_model_kpp/output/jacobian.output.cmp | 0 .../output/lossRates.output.cmp | 351 +++++++++++++++ .../output/mainSolverParameters.output.cmp | 31 ++ .../output/photolysisRates.output.cmp | 31 ++ .../photolysisRatesParameters.output.cmp | 31 ++ .../output/productionRates.output.cmp | 379 +++++++++++++++++ .../output/reactionRates/25200.cmp | 142 +++++++ .../output/reactionRates/27000.cmp | 142 +++++++ .../output/reactionRates/28800.cmp | 142 +++++++ .../output/reactionRates/30600.cmp | 142 +++++++ .../output/reactionRates/32400.cmp | 142 +++++++ .../output/reactionRates/34200.cmp | 142 +++++++ .../output/reactionRates/36000.cmp | 142 +++++++ .../output/reactionRates/37800.cmp | 142 +++++++ .../output/reactionRates/39600.cmp | 142 +++++++ .../output/reactionRates/41400.cmp | 142 +++++++ .../output/reactionRates/43200.cmp | 142 +++++++ .../output/reactionRates/45000.cmp | 142 +++++++ .../output/reactionRates/46800.cmp | 142 +++++++ .../output/reactionRates/48600.cmp | 142 +++++++ .../output/reactionRates/50400.cmp | 142 +++++++ .../output/speciesConcentrations.output.cmp | 32 ++ .../spec_model_kpp/spec_model_kpp.fac | 287 +++++++++++++ .../spec_model_kpp/spec_model_kpp.kpp | 367 ++++++++++++++++ .../spec_model_kpp/spec_model_kpp.out.cmp | 211 +++++++++ 80 files changed, 7803 insertions(+), 1 deletion(-) create mode 100644 tests/model_tests/spec_model_1/configuration/.gitignore create mode 100644 tests/model_tests/spec_model_1/configuration/environmentVariables.config create mode 100644 tests/model_tests/spec_model_1/configuration/initialConcentrations.config create mode 100644 tests/model_tests/spec_model_1/configuration/model.parameters create mode 100644 tests/model_tests/spec_model_1/configuration/outputRates.config create mode 100644 tests/model_tests/spec_model_1/configuration/outputSpecies.config create mode 100644 tests/model_tests/spec_model_1/configuration/photolysisConstant.config create mode 100644 tests/model_tests/spec_model_1/configuration/photolysisConstrained.config create mode 100644 tests/model_tests/spec_model_1/configuration/solver.parameters create mode 100644 tests/model_tests/spec_model_1/configuration/speciesConstant.config create mode 100644 tests/model_tests/spec_model_1/configuration/speciesConstrained.config create mode 100644 tests/model_tests/spec_model_1/output/.gitignore create mode 100644 tests/model_tests/spec_model_1/output/environmentVariables.output.cmp create mode 100644 tests/model_tests/spec_model_1/output/errors.output.cmp create mode 100644 tests/model_tests/spec_model_1/output/finalModelState.output.cmp create mode 100644 tests/model_tests/spec_model_1/output/jacobian.output.cmp create mode 100644 tests/model_tests/spec_model_1/output/lossRates.output.cmp create mode 100644 tests/model_tests/spec_model_1/output/mainSolverParameters.output.cmp create mode 100644 tests/model_tests/spec_model_1/output/photolysisRates.output.cmp create mode 100644 tests/model_tests/spec_model_1/output/photolysisRatesParameters.output.cmp create mode 100644 tests/model_tests/spec_model_1/output/productionRates.output.cmp create mode 100644 tests/model_tests/spec_model_1/output/reactionRates/25200.cmp create mode 100644 tests/model_tests/spec_model_1/output/reactionRates/27000.cmp create mode 100644 tests/model_tests/spec_model_1/output/reactionRates/28800.cmp create mode 100644 tests/model_tests/spec_model_1/output/reactionRates/30600.cmp create mode 100644 tests/model_tests/spec_model_1/output/reactionRates/32400.cmp create mode 100644 tests/model_tests/spec_model_1/output/reactionRates/34200.cmp create mode 100644 tests/model_tests/spec_model_1/output/reactionRates/36000.cmp create mode 100644 tests/model_tests/spec_model_1/output/reactionRates/37800.cmp create mode 100644 tests/model_tests/spec_model_1/output/reactionRates/39600.cmp create mode 100644 tests/model_tests/spec_model_1/output/reactionRates/41400.cmp create mode 100644 tests/model_tests/spec_model_1/output/reactionRates/43200.cmp create mode 100644 tests/model_tests/spec_model_1/output/reactionRates/45000.cmp create mode 100644 tests/model_tests/spec_model_1/output/reactionRates/46800.cmp create mode 100644 tests/model_tests/spec_model_1/output/reactionRates/48600.cmp create mode 100644 tests/model_tests/spec_model_1/output/reactionRates/50400.cmp create mode 100644 tests/model_tests/spec_model_1/output/speciesConcentrations.output.cmp create mode 100644 tests/model_tests/spec_model_1/spec_model_1.fac create mode 100644 tests/model_tests/spec_model_1/spec_model_1.out.cmp create mode 100644 tests/model_tests/spec_model_kpp/configuration/.gitignore create mode 100644 tests/model_tests/spec_model_kpp/configuration/environmentVariables.config create mode 100644 tests/model_tests/spec_model_kpp/configuration/initialConcentrations.config create mode 100644 tests/model_tests/spec_model_kpp/configuration/model.parameters create mode 100644 tests/model_tests/spec_model_kpp/configuration/outputRates.config create mode 100644 tests/model_tests/spec_model_kpp/configuration/outputSpecies.config create mode 100644 tests/model_tests/spec_model_kpp/configuration/photolysisConstant.config create mode 100644 tests/model_tests/spec_model_kpp/configuration/photolysisConstrained.config create mode 100644 tests/model_tests/spec_model_kpp/configuration/solver.parameters create mode 100644 tests/model_tests/spec_model_kpp/configuration/speciesConstant.config create mode 100644 tests/model_tests/spec_model_kpp/configuration/speciesConstrained.config create mode 100644 tests/model_tests/spec_model_kpp/output/.gitignore create mode 100644 tests/model_tests/spec_model_kpp/output/environmentVariables.output.cmp create mode 100644 tests/model_tests/spec_model_kpp/output/errors.output.cmp create mode 100644 tests/model_tests/spec_model_kpp/output/finalModelState.output.cmp create mode 100644 tests/model_tests/spec_model_kpp/output/jacobian.output.cmp create mode 100644 tests/model_tests/spec_model_kpp/output/lossRates.output.cmp create mode 100644 tests/model_tests/spec_model_kpp/output/mainSolverParameters.output.cmp create mode 100644 tests/model_tests/spec_model_kpp/output/photolysisRates.output.cmp create mode 100644 tests/model_tests/spec_model_kpp/output/photolysisRatesParameters.output.cmp create mode 100644 tests/model_tests/spec_model_kpp/output/productionRates.output.cmp create mode 100644 tests/model_tests/spec_model_kpp/output/reactionRates/25200.cmp create mode 100644 tests/model_tests/spec_model_kpp/output/reactionRates/27000.cmp create mode 100644 tests/model_tests/spec_model_kpp/output/reactionRates/28800.cmp create mode 100644 tests/model_tests/spec_model_kpp/output/reactionRates/30600.cmp create mode 100644 tests/model_tests/spec_model_kpp/output/reactionRates/32400.cmp create mode 100644 tests/model_tests/spec_model_kpp/output/reactionRates/34200.cmp create mode 100644 tests/model_tests/spec_model_kpp/output/reactionRates/36000.cmp create mode 100644 tests/model_tests/spec_model_kpp/output/reactionRates/37800.cmp create mode 100644 tests/model_tests/spec_model_kpp/output/reactionRates/39600.cmp create mode 100644 tests/model_tests/spec_model_kpp/output/reactionRates/41400.cmp create mode 100644 tests/model_tests/spec_model_kpp/output/reactionRates/43200.cmp create mode 100644 tests/model_tests/spec_model_kpp/output/reactionRates/45000.cmp create mode 100644 tests/model_tests/spec_model_kpp/output/reactionRates/46800.cmp create mode 100644 tests/model_tests/spec_model_kpp/output/reactionRates/48600.cmp create mode 100644 tests/model_tests/spec_model_kpp/output/reactionRates/50400.cmp create mode 100644 tests/model_tests/spec_model_kpp/output/speciesConcentrations.output.cmp create mode 100644 tests/model_tests/spec_model_kpp/spec_model_kpp.fac create mode 100644 tests/model_tests/spec_model_kpp/spec_model_kpp.kpp create mode 100644 tests/model_tests/spec_model_kpp/spec_model_kpp.out.cmp diff --git a/tests/model_tests/INFO.md b/tests/model_tests/INFO.md index c818af995..59594e7ef 100644 --- a/tests/model_tests/INFO.md +++ b/tests/model_tests/INFO.md @@ -6,7 +6,7 @@ These are manufactured ODE systems with known solutions. The `env_model_*` tests check the configuration of the environment variables. They use a minimal inorganic chemical mechanism with a runtime of 4 hours (10 min timestep), -starting at 2 pm on 02/02/2002. +starting at 2:00 pm on 02/02/2002. - `env_model_1`: TEMP=288, PRESS=1010, H2O=1.8e10, RH=NOTUSED, DEC=CALC, JFAC=NOTUSED. No constraints. @@ -15,3 +15,11 @@ starting at 2 pm on 02/02/2002. - `env_model_3`: same as `env_model_1` but JFAC=0. - `env_model_4`: same as `env_model_2` but ROOF=CLOSED. + +The `spec_model_*` tests check the settings of the chemical +species. They use a inorganic+ethene mechanism with a runtime of 7.5 hours (15 min timestep) +starting at 6:30 am on 9/11/2008. + +- `spec_model_1` is the base case + +- `spec_model_kpp` is the same as the base case but the mechanism is in KPP format. diff --git a/tests/model_tests/spec_model_1/configuration/.gitignore b/tests/model_tests/spec_model_1/configuration/.gitignore new file mode 100644 index 000000000..1830d04bb --- /dev/null +++ b/tests/model_tests/spec_model_1/configuration/.gitignore @@ -0,0 +1,2 @@ +# Ignore auto-generated mechanism files in this directory +mechanism.* diff --git a/tests/model_tests/spec_model_1/configuration/environmentVariables.config b/tests/model_tests/spec_model_1/configuration/environmentVariables.config new file mode 100644 index 000000000..f0e11ee48 --- /dev/null +++ b/tests/model_tests/spec_model_1/configuration/environmentVariables.config @@ -0,0 +1,10 @@ +1 TEMP 291.45 +2 PRESS 950.2 +3 RH 67.4 +4 H2O CALC +5 DEC CALC +6 BLHEIGHT NOTUSED +7 DILUTE NOTUSED +8 JFAC NOTUSED +9 ROOF OPEN +10 ASA NOTUSED diff --git a/tests/model_tests/spec_model_1/configuration/initialConcentrations.config b/tests/model_tests/spec_model_1/configuration/initialConcentrations.config new file mode 100644 index 000000000..81e939e0e --- /dev/null +++ b/tests/model_tests/spec_model_1/configuration/initialConcentrations.config @@ -0,0 +1,5 @@ +CO 4.8e+12 +O3 6.11e11 +NO 6.8e10 +NO2 8.37e10 +C2H4 2.76e+9 diff --git a/tests/model_tests/spec_model_1/configuration/model.parameters b/tests/model_tests/spec_model_1/configuration/model.parameters new file mode 100644 index 000000000..b8895756c --- /dev/null +++ b/tests/model_tests/spec_model_1/configuration/model.parameters @@ -0,0 +1,13 @@ +30 number of steps +900 step size (seconds) +2 species interpolation method (pw constant = 1, pw linear = 2) +2 conditions interpolation method (pw constant = 1, pw linear = 2) +3600 rates output step size - ROPA/RODA (seconds) +23400 model start time (seconds) +0 jacobian output step size (seconds) +-7.326 latitude (degrees: North is positive, South is negative) +-72.449 longitude (degrees: West is positive, East is negative) +09 day +11 month +2008 year +1800 reaction rates output step size (seconds) diff --git a/tests/model_tests/spec_model_1/configuration/outputRates.config b/tests/model_tests/spec_model_1/configuration/outputRates.config new file mode 100644 index 000000000..78da78737 --- /dev/null +++ b/tests/model_tests/spec_model_1/configuration/outputRates.config @@ -0,0 +1,2 @@ +OH +HO2 diff --git a/tests/model_tests/spec_model_1/configuration/outputSpecies.config b/tests/model_tests/spec_model_1/configuration/outputSpecies.config new file mode 100644 index 000000000..9affbbc32 --- /dev/null +++ b/tests/model_tests/spec_model_1/configuration/outputSpecies.config @@ -0,0 +1,12 @@ +CO +O3 +NO +NO2 +C2H4 +OH +HO2 +ETHENO3O2 +HOCH2CH2O2 +NO3CH2CO3 +HOCH2CO3 +HCOCO3 diff --git a/tests/model_tests/spec_model_1/configuration/photolysisConstant.config b/tests/model_tests/spec_model_1/configuration/photolysisConstant.config new file mode 100644 index 000000000..e69de29bb diff --git a/tests/model_tests/spec_model_1/configuration/photolysisConstrained.config b/tests/model_tests/spec_model_1/configuration/photolysisConstrained.config new file mode 100644 index 000000000..e69de29bb diff --git a/tests/model_tests/spec_model_1/configuration/solver.parameters b/tests/model_tests/spec_model_1/configuration/solver.parameters new file mode 100644 index 000000000..988f4341d --- /dev/null +++ b/tests/model_tests/spec_model_1/configuration/solver.parameters @@ -0,0 +1,9 @@ +1.0e-03 atol +1.0e-04 rtol +1.0e-04 delta main +100 lookback +100 maximum solver step size (seconds) +100000 maximum number of steps in solver +2 solver type (1 = spgmr, 2 = spgmr + banded preconditioner, 3 = dense) +750 banded preconditioner upper bandwidth +750 banded preconditioner lower bandwidth diff --git a/tests/model_tests/spec_model_1/configuration/speciesConstant.config b/tests/model_tests/spec_model_1/configuration/speciesConstant.config new file mode 100644 index 000000000..e69de29bb diff --git a/tests/model_tests/spec_model_1/configuration/speciesConstrained.config b/tests/model_tests/spec_model_1/configuration/speciesConstrained.config new file mode 100644 index 000000000..e69de29bb diff --git a/tests/model_tests/spec_model_1/output/.gitignore b/tests/model_tests/spec_model_1/output/.gitignore new file mode 100644 index 000000000..a73731eaa --- /dev/null +++ b/tests/model_tests/spec_model_1/output/.gitignore @@ -0,0 +1,2 @@ +# Ignore output files in this directory +*.output diff --git a/tests/model_tests/spec_model_1/output/environmentVariables.output.cmp b/tests/model_tests/spec_model_1/output/environmentVariables.output.cmp new file mode 100644 index 000000000..40e8f7972 --- /dev/null +++ b/tests/model_tests/spec_model_1/output/environmentVariables.output.cmp @@ -0,0 +1,31 @@ + t M TEMP PRESS RH H2O DEC BLHEIGHT DILUTE JFAC ROOF ASA RO2 + 2.430000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.361190E+005 + 2.520000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.576339E+005 + 2.610000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.667814E+005 + 2.700000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.702597E+005 + 2.790000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.706124E+005 + 2.880000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.687862E+005 + 2.970000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.651398E+005 + 3.060000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.598315E+005 + 3.150000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.529670E+005 + 3.240000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.446559E+005 + 3.330000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.350340E+005 + 3.420000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.242717E+005 + 3.510000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.125772E+005 + 3.600000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.001954E+005 + 3.690000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 8.740487E+004 + 3.780000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 7.451247E+004 + 3.870000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 6.184493E+004 + 3.960000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 4.973854E+004 + 4.050000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 3.852646E+004 + 4.140000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 2.852398E+004 + 4.230000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 2.001123E+004 + 4.320000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.321170E+004 + 4.410000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 8.261247E+003 + 4.500000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 5.153759E+003 + 4.590000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 3.752608E+003 + 4.680000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.445055E+004 + 4.770000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 5.287084E+004 + 4.860000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 8.789867E+004 + 4.950000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.081388E+005 + 5.040000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.172364E+005 diff --git a/tests/model_tests/spec_model_1/output/errors.output.cmp b/tests/model_tests/spec_model_1/output/errors.output.cmp new file mode 100644 index 000000000..5dfb20c54 --- /dev/null +++ b/tests/model_tests/spec_model_1/output/errors.output.cmp @@ -0,0 +1,2 @@ +Number of fixed constrained species: 0 +Total number of constrained species: 0 diff --git a/tests/model_tests/spec_model_1/output/finalModelState.output.cmp b/tests/model_tests/spec_model_1/output/finalModelState.output.cmp new file mode 100644 index 000000000..37cc3991a --- /dev/null +++ b/tests/model_tests/spec_model_1/output/finalModelState.output.cmp @@ -0,0 +1,49 @@ + O 4.3170159055868079E-023 + O3 586981542386.26208 + NO 1251605.7215907904 + NO2 91074099569.652161 + NO3 535797109.14958078 + O1D 3.4321242003573723E-107 + N2O5 3054963539.8578095 + OH 612.60920622314143 + HO2 336941.83033787285 + H2 450871027.17211193 + CO 4728287597903.9590 + H2O2 13183359.679792214 + HONO 101404582.80757290 + HNO3 41867636814.367096 + HO2NO2 873178.14939411776 + SO2 0.0000000000000000 + SO3 0.0000000000000000 + HSO3 0.0000000000000000 + NA 11992023691.707747 + SA 0.0000000000000000 + C2H4 1568810599.2413909 + ETHENO3O2 109114.26826669151 + HCHO 745699463.60759270 + CH2OOA 1.1987690855048900E-003 + HOCH2CH2O2 5838.6407324792244 + ETHO2HNO3 732.13013069994827 + ETHENO3O 2.6520030119240568E-003 + ETHOHNO3 5572918.4273876138 + NO3CH2CHO 229732.73526672955 + CH2OO 77.449109121708432 + HYETHO2H 149530.15201618132 + HOCH2CH2O 4.6070357425682114E-005 + ETHGLY 67.044824572532718 + HOCH2CHO 195453655.18968797 + NO3CH2CO3 0.41926019163640654 + HCOCH2O 2.9681068039985024E-095 + HCOOH 9331869.7673617825 + HOCH2CO3 2281.9480515408218 + GLYOX 7174284.7462236332 + NO3CH2CO2H 4.3122751359996221E-003 + NO3CH2CO3H 1.0062506342556307E-002 + NO3CH2PAN 364.43338474277897 + HOCH2CO2H 1082.6952078075763 + HOCH2CO3H 2590.2260616877234 + PHAN 11073143.324588947 + HCOCO 7.9480350436558432E-008 + HCOCO3 1.1322657704956625 + HCOCO2H 1.1247958034088290 + HCOCO3H 6.1703246183914429 diff --git a/tests/model_tests/spec_model_1/output/jacobian.output.cmp b/tests/model_tests/spec_model_1/output/jacobian.output.cmp new file mode 100644 index 000000000..e69de29bb diff --git a/tests/model_tests/spec_model_1/output/lossRates.output.cmp b/tests/model_tests/spec_model_1/output/lossRates.output.cmp new file mode 100644 index 000000000..e40188070 --- /dev/null +++ b/tests/model_tests/spec_model_1/output/lossRates.output.cmp @@ -0,0 +1,358 @@ + time speciesNumber speciesName reactionNumber rate reaction + 2.700000E+004 8 OH 16 2.215678E+005 OH+O3=HO2 + 2.700000E+004 8 OH 17 1.111119E+000 OH+H2=HO2 + 2.700000E+004 8 OH 18 5.682220E+006 OH+CO=HO2 + 2.700000E+004 8 OH 19 2.363295E+001 OH+H2O2=HO2 + 2.700000E+004 8 OH 21 6.369222E+003 OH+HO2= + 2.700000E+004 8 OH 24 3.388006E+006 OH+NO=HONO + 2.700000E+004 8 OH 25 3.873670E+006 OH+NO2=HNO3 + 2.700000E+004 8 OH 26 7.422233E+001 OH+NO3=HO2+NO2 + 2.700000E+004 8 OH 29 3.954937E+002 OH+HO2NO2=NO2 + 2.700000E+004 8 OH 31 5.479423E+004 OH+HONO=NO2 + 2.700000E+004 8 OH 32 1.097701E+004 OH+HNO3=NO3 + 2.700000E+004 8 OH 34 0.000000E+000 OH+SO2=HSO3 + 2.700000E+004 8 OH 51 1.016890E+005 C2H4+OH=HOCH2CH2O2 + 2.700000E+004 8 OH 61 1.871710E+004 OH+HCHO=HO2+CO + 2.700000E+004 8 OH 72 2.685708E-006 ETHO2HNO3+OH=ETHENO3O2 + 2.700000E+004 8 OH 73 1.193158E-006 ETHO2HNO3+OH=NO3CH2CHO+OH + 2.700000E+004 8 OH 77 7.532236E+000 ETHOHNO3+OH=HOCH2CHO+NO2 + 2.700000E+004 8 OH 79 1.311110E-002 NO3CH2CHO+OH=NO3CH2CO3 + 2.700000E+004 8 OH 87 1.073046E+000 HYETHO2H+OH=HOCH2CH2O2 + 2.700000E+004 8 OH 88 4.060893E+000 HYETHO2H+OH=HOCH2CHO+OH + 2.700000E+004 8 OH 92 2.093661E-003 ETHGLY+OH=HOCH2CHO+HO2 + 2.700000E+004 8 OH 94 8.973135E+002 HOCH2CHO+OH=GLYOX+HO2 + 2.700000E+004 8 OH 95 3.589254E+003 HOCH2CHO+OH=HOCH2CO3 + 2.700000E+004 8 OH 106 4.150924E+000 HCOOH+OH=HO2 + 2.700000E+004 8 OH 119 6.761154E+001 OH+GLYOX=HCOCO + 2.700000E+004 8 OH 120 2.513758E-010 NO3CH2CO2H+OH=HCHO+NO2 + 2.700000E+004 8 OH 121 1.415888E-008 NO3CH2CO3H+OH=NO3CH2CO3 + 2.700000E+004 8 OH 123 4.351785E-007 NO3CH2PAN+OH=HCHO+CO+NO2+NO2 + 2.700000E+004 8 OH 125 9.829209E-004 HOCH2CO2H+OH=HCHO+HO2 + 2.700000E+004 8 OH 126 5.821210E-003 HOCH2CO3H+OH=HOCH2CO3 + 2.700000E+004 8 OH 128 1.055317E+001 PHAN+OH=HCHO+CO+NO2 + 2.700000E+004 8 OH 143 4.949327E-006 OH+HCOCO2H=CO+HO2 + 2.700000E+004 8 OH 146 1.803807E-005 OH+HCOCO3H=HCOCO3 + 2.700000E+004 9 HO2 20 1.268479E+004 HO2+O3=OH + 2.700000E+004 9 HO2 21 6.369222E+003 OH+HO2= + 2.700000E+004 9 HO2 22 7.632039E+002 HO2+HO2=H2O2 + 2.700000E+004 9 HO2 23 5.733021E+002 HO2+HO2=H2O2 + 2.700000E+004 9 HO2 27 6.034940E+006 HO2+NO=OH+NO2 + 2.700000E+004 9 HO2 28 5.856478E+005 HO2+NO2=HO2NO2 + 2.700000E+004 9 HO2 30 2.994469E+001 HO2+NO3=OH+NO2 + 2.700000E+004 9 HO2 52 4.911132E-005 ETHENO3O2+HO2=ETHO2HNO3 + 2.700000E+004 9 HO2 65 2.375527E+001 HOCH2CH2O2+HO2=HYETHO2H + 2.700000E+004 9 HO2 97 5.037550E-007 NO3CH2CO3+HO2=HCHO+NO2+OH + 2.700000E+004 9 HO2 98 1.717347E-007 NO3CH2CO3+HO2=NO3CH2CO2H+O3 + 2.700000E+004 9 HO2 99 4.694080E-007 NO3CH2CO3+HO2=NO3CH2CO3H + 2.700000E+004 9 HO2 107 1.366702E-001 HOCH2CO3+HO2=HO2+HCHO+OH + 2.700000E+004 9 HO2 108 4.659212E-002 HOCH2CO3+HO2=HOCH2CO2H+O3 + 2.700000E+004 9 HO2 109 1.273518E-001 HOCH2CO3+HO2=HOCH2CO3H + 2.700000E+004 9 HO2 134 8.327975E-005 HCOCO3+HO2=HCOCO2H+O3 + 2.700000E+004 9 HO2 135 2.276313E-004 HCOCO3+HO2=HCOCO3H + 2.700000E+004 9 HO2 136 2.442872E-004 HCOCO3+HO2=HO2+CO+OH + 3.060000E+004 8 OH 16 2.125165E+005 OH+O3=HO2 + 3.060000E+004 8 OH 17 3.803105E+000 OH+H2=HO2 + 3.060000E+004 8 OH 18 5.371256E+006 OH+CO=HO2 + 3.060000E+004 8 OH 19 5.041078E+001 OH+H2O2=HO2 + 3.060000E+004 8 OH 21 6.511413E+003 OH+HO2= + 3.060000E+004 8 OH 24 2.833492E+006 OH+NO=HONO + 3.060000E+004 8 OH 25 3.407257E+006 OH+NO2=HNO3 + 3.060000E+004 8 OH 26 7.473717E+001 OH+NO3=HO2+NO2 + 3.060000E+004 8 OH 29 3.753668E+002 OH+HO2NO2=NO2 + 3.060000E+004 8 OH 31 4.687782E+004 OH+HONO=NO2 + 3.060000E+004 8 OH 32 2.103379E+004 OH+HNO3=NO3 + 3.060000E+004 8 OH 34 0.000000E+000 OH+SO2=HSO3 + 3.060000E+004 8 OH 51 8.279084E+004 C2H4+OH=HOCH2CH2O2 + 3.060000E+004 8 OH 61 2.909829E+004 OH+HCHO=HO2+CO + 3.060000E+004 8 OH 72 5.521091E-006 ETHO2HNO3+OH=ETHENO3O2 + 3.060000E+004 8 OH 73 2.452812E-006 ETHO2HNO3+OH=NO3CH2CHO+OH + 3.060000E+004 8 OH 77 1.406375E+001 ETHOHNO3+OH=HOCH2CHO+NO2 + 3.060000E+004 8 OH 79 1.868051E-002 NO3CH2CHO+OH=NO3CH2CO3 + 3.060000E+004 8 OH 87 2.079816E+000 HYETHO2H+OH=HOCH2CH2O2 + 3.060000E+004 8 OH 88 7.870969E+000 HYETHO2H+OH=HOCH2CHO+OH + 3.060000E+004 8 OH 92 3.859513E-003 ETHGLY+OH=HOCH2CHO+HO2 + 3.060000E+004 8 OH 94 1.487621E+003 HOCH2CHO+OH=GLYOX+HO2 + 3.060000E+004 8 OH 95 5.950482E+003 HOCH2CHO+OH=HOCH2CO3 + 3.060000E+004 8 OH 106 7.295505E+000 HCOOH+OH=HO2 + 3.060000E+004 8 OH 119 2.180447E+002 OH+GLYOX=HCOCO + 3.060000E+004 8 OH 120 1.023630E-009 NO3CH2CO2H+OH=HCHO+NO2 + 3.060000E+004 8 OH 121 5.613722E-008 NO3CH2CO3H+OH=NO3CH2CO3 + 3.060000E+004 8 OH 123 1.258656E-006 NO3CH2PAN+OH=HCHO+CO+NO2+NO2 + 3.060000E+004 8 OH 125 4.619565E-003 HOCH2CO2H+OH=HCHO+HO2 + 3.060000E+004 8 OH 126 2.670284E-002 HOCH2CO3H+OH=HOCH2CO3 + 3.060000E+004 8 OH 128 3.598297E+001 PHAN+OH=HCHO+CO+NO2 + 3.060000E+004 8 OH 143 3.788601E-005 OH+HCOCO2H=CO+HO2 + 3.060000E+004 8 OH 146 1.471588E-004 OH+HCOCO3H=HCOCO3 + 3.060000E+004 9 HO2 20 1.380405E+004 HO2+O3=OH + 3.060000E+004 9 HO2 21 6.511413E+003 OH+HO2= + 3.060000E+004 9 HO2 22 8.852521E+002 HO2+HO2=H2O2 + 3.060000E+004 9 HO2 23 6.649821E+002 HO2+HO2=H2O2 + 3.060000E+004 9 HO2 27 5.726488E+006 HO2+NO=OH+NO2 + 3.060000E+004 9 HO2 28 5.844620E+005 HO2+NO2=HO2NO2 + 3.060000E+004 9 HO2 30 3.421050E+001 HO2+NO3=OH+NO2 + 3.060000E+004 9 HO2 52 5.461552E-005 ETHENO3O2+HO2=ETHO2HNO3 + 3.060000E+004 9 HO2 65 2.364376E+001 HOCH2CH2O2+HO2=HYETHO2H + 3.060000E+004 9 HO2 97 9.395930E-007 NO3CH2CO3+HO2=HCHO+NO2+OH + 3.060000E+004 9 HO2 98 3.203158E-007 NO3CH2CO3+HO2=NO3CH2CO2H+O3 + 3.060000E+004 9 HO2 99 8.755298E-007 NO3CH2CO3+HO2=NO3CH2CO3H + 3.060000E+004 9 HO2 107 2.946403E-001 HOCH2CO3+HO2=HO2+HCHO+OH + 3.060000E+004 9 HO2 108 1.004456E-001 HOCH2CO3+HO2=HOCH2CO2H+O3 + 3.060000E+004 9 HO2 109 2.745512E-001 HOCH2CO3+HO2=HOCH2CO3H + 3.060000E+004 9 HO2 134 3.231465E-004 HCOCO3+HO2=HCOCO2H+O3 + 3.060000E+004 9 HO2 135 8.832669E-004 HCOCO3+HO2=HCOCO3H + 3.060000E+004 9 HO2 136 9.478962E-004 HCOCO3+HO2=HO2+CO+OH + 3.420000E+004 8 OH 16 1.633187E+005 OH+O3=HO2 + 3.420000E+004 8 OH 17 5.422633E+000 OH+H2=HO2 + 3.420000E+004 8 OH 18 4.080574E+006 OH+CO=HO2 + 3.420000E+004 8 OH 19 5.734272E+001 OH+H2O2=HO2 + 3.420000E+004 8 OH 21 4.333452E+003 OH+HO2= + 3.420000E+004 8 OH 24 1.882975E+006 OH+NO=HONO + 3.420000E+004 8 OH 25 2.487070E+006 OH+NO2=HNO3 + 3.420000E+004 8 OH 26 6.256677E+001 OH+NO3=HO2+NO2 + 3.420000E+004 8 OH 29 2.397265E+002 OH+HO2NO2=NO2 + 3.420000E+004 8 OH 31 2.702917E+004 OH+HONO=NO2 + 3.420000E+004 8 OH 32 2.231291E+004 OH+HNO3=NO3 + 3.420000E+004 8 OH 34 0.000000E+000 OH+SO2=HSO3 + 3.420000E+004 8 OH 51 5.532092E+004 C2H4+OH=HOCH2CH2O2 + 3.420000E+004 8 OH 61 2.558343E+004 OH+HCHO=HO2+CO + 3.420000E+004 8 OH 72 6.395023E-006 ETHO2HNO3+OH=ETHENO3O2 + 3.420000E+004 8 OH 73 2.841066E-006 ETHO2HNO3+OH=NO3CH2CHO+OH + 3.420000E+004 8 OH 77 1.455981E+001 ETHOHNO3+OH=HOCH2CHO+NO2 + 3.420000E+004 8 OH 79 1.753639E-002 NO3CH2CHO+OH=NO3CH2CO3 + 3.420000E+004 8 OH 87 2.049504E+000 HYETHO2H+OH=HOCH2CH2O2 + 3.420000E+004 8 OH 88 7.756254E+000 HYETHO2H+OH=HOCH2CHO+OH + 3.420000E+004 8 OH 92 3.652461E-003 ETHGLY+OH=HOCH2CHO+HO2 + 3.420000E+004 8 OH 94 1.387170E+003 HOCH2CHO+OH=GLYOX+HO2 + 3.420000E+004 8 OH 95 5.548681E+003 HOCH2CHO+OH=HOCH2CO3 + 3.420000E+004 8 OH 106 7.779484E+000 HCOOH+OH=HO2 + 3.420000E+004 8 OH 119 2.685248E+002 OH+GLYOX=HCOCO + 3.420000E+004 8 OH 120 1.567711E-009 NO3CH2CO2H+OH=HCHO+NO2 + 3.420000E+004 8 OH 121 8.390670E-008 NO3CH2CO3H+OH=NO3CH2CO3 + 3.420000E+004 8 OH 123 1.539667E-006 NO3CH2PAN+OH=HCHO+CO+NO2+NO2 + 3.420000E+004 8 OH 125 7.350617E-003 HOCH2CO2H+OH=HCHO+HO2 + 3.420000E+004 8 OH 126 4.152004E-002 HOCH2CO3H+OH=HOCH2CO3 + 3.420000E+004 8 OH 128 4.649251E+001 PHAN+OH=HCHO+CO+NO2 + 3.420000E+004 8 OH 143 6.539885E-005 OH+HCOCO2H=CO+HO2 + 3.420000E+004 8 OH 146 2.761873E-004 OH+HCOCO3H=HCOCO3 + 3.420000E+004 9 HO2 20 1.214561E+004 HO2+O3=OH + 3.420000E+004 9 HO2 21 4.333452E+003 OH+HO2= + 3.420000E+004 9 HO2 22 6.745203E+002 HO2+HO2=H2O2 + 3.420000E+004 9 HO2 23 5.066849E+002 HO2+HO2=H2O2 + 3.420000E+004 9 HO2 27 4.356926E+006 HO2+NO=OH+NO2 + 3.420000E+004 9 HO2 28 4.884371E+005 HO2+NO2=HO2NO2 + 3.420000E+004 9 HO2 30 3.278958E+001 HO2+NO3=OH+NO2 + 3.420000E+004 9 HO2 52 5.263457E-005 ETHENO3O2+HO2=ETHO2HNO3 + 3.420000E+004 9 HO2 65 1.582247E+001 HOCH2CH2O2+HO2=HYETHO2H + 3.420000E+004 9 HO2 97 9.459267E-007 NO3CH2CO3+HO2=HCHO+NO2+OH + 3.420000E+004 9 HO2 98 3.224750E-007 NO3CH2CO3+HO2=NO3CH2CO2H+O3 + 3.420000E+004 9 HO2 99 8.814317E-007 NO3CH2CO3+HO2=NO3CH2CO3H + 3.420000E+004 9 HO2 107 2.960771E-001 HOCH2CO3+HO2=HO2+HCHO+OH + 3.420000E+004 9 HO2 108 1.009354E-001 HOCH2CO3+HO2=HOCH2CO2H+O3 + 3.420000E+004 9 HO2 109 2.758900E-001 HOCH2CO3+HO2=HOCH2CO3H + 3.420000E+004 9 HO2 134 3.846465E-004 HCOCO3+HO2=HCOCO2H+O3 + 3.420000E+004 9 HO2 135 1.051367E-003 HCOCO3+HO2=HCOCO3H + 3.420000E+004 9 HO2 136 1.128296E-003 HCOCO3+HO2=HO2+CO+OH + 3.780000E+004 8 OH 16 9.026490E+004 OH+O3=HO2 + 3.780000E+004 8 OH 17 4.234773E+000 OH+H2=HO2 + 3.780000E+004 8 OH 18 2.246608E+006 OH+CO=HO2 + 3.780000E+004 8 OH 19 3.818066E+001 OH+H2O2=HO2 + 3.780000E+004 8 OH 21 1.543261E+003 OH+HO2= + 3.780000E+004 8 OH 24 8.897593E+005 OH+NO=HONO + 3.780000E+004 8 OH 25 1.388797E+006 OH+NO2=HNO3 + 3.780000E+004 8 OH 26 4.027012E+001 OH+NO3=HO2+NO2 + 3.780000E+004 8 OH 29 8.668263E+001 OH+HO2NO2=NO2 + 3.780000E+004 8 OH 31 9.107035E+003 OH+HONO=NO2 + 3.780000E+004 8 OH 32 1.442048E+004 OH+HNO3=NO3 + 3.780000E+004 8 OH 34 0.000000E+000 OH+SO2=HSO3 + 3.780000E+004 8 OH 51 2.793823E+004 C2H4+OH=HOCH2CH2O2 + 3.780000E+004 8 OH 61 1.426505E+004 OH+HCHO=HO2+CO + 3.780000E+004 8 OH 72 4.576534E-006 ETHO2HNO3+OH=ETHENO3O2 + 3.780000E+004 8 OH 73 2.033180E-006 ETHO2HNO3+OH=NO3CH2CHO+OH + 3.780000E+004 8 OH 77 9.274143E+000 ETHOHNO3+OH=HOCH2CHO+NO2 + 3.780000E+004 8 OH 79 1.198280E-002 NO3CH2CHO+OH=NO3CH2CO3 + 3.780000E+004 8 OH 87 1.192608E+000 HYETHO2H+OH=HOCH2CH2O2 + 3.780000E+004 8 OH 88 4.513372E+000 HYETHO2H+OH=HOCH2CHO+OH + 3.780000E+004 8 OH 92 2.091059E-003 ETHGLY+OH=HOCH2CHO+HO2 + 3.780000E+004 8 OH 94 8.191962E+002 HOCH2CHO+OH=GLYOX+HO2 + 3.780000E+004 8 OH 95 3.276785E+003 HOCH2CHO+OH=HOCH2CO3 + 3.780000E+004 8 OH 106 5.393641E+000 HCOOH+OH=HO2 + 3.780000E+004 8 OH 119 1.719638E+002 OH+GLYOX=HCOCO + 3.780000E+004 8 OH 120 1.200507E-009 NO3CH2CO2H+OH=HCHO+NO2 + 3.780000E+004 8 OH 121 6.299689E-008 NO3CH2CO3H+OH=NO3CH2CO3 + 3.780000E+004 8 OH 123 1.025220E-006 NO3CH2PAN+OH=HCHO+CO+NO2+NO2 + 3.780000E+004 8 OH 125 5.562444E-003 HOCH2CO2H+OH=HCHO+HO2 + 3.780000E+004 8 OH 126 3.078562E-002 HOCH2CO3H+OH=HOCH2CO3 + 3.780000E+004 8 OH 128 3.049391E+001 PHAN+OH=HCHO+CO+NO2 + 3.780000E+004 8 OH 143 4.257738E-005 OH+HCOCO2H=CO+HO2 + 3.780000E+004 8 OH 146 2.057370E-004 OH+HCOCO3H=HCOCO3 + 3.780000E+004 9 HO2 20 7.849545E+003 HO2+O3=OH + 3.780000E+004 9 HO2 21 1.543261E+003 OH+HO2= + 3.780000E+004 9 HO2 22 2.808942E+002 HO2+HO2=H2O2 + 3.780000E+004 9 HO2 23 2.110016E+002 HO2+HO2=H2O2 + 3.780000E+004 9 HO2 27 2.407412E+006 HO2+NO=OH+NO2 + 3.780000E+004 9 HO2 28 3.189346E+005 HO2+NO2=HO2NO2 + 3.780000E+004 9 HO2 30 2.467842E+001 HO2+NO3=OH+NO2 + 3.780000E+004 9 HO2 52 4.233598E-005 ETHENO3O2+HO2=ETHO2HNO3 + 3.780000E+004 9 HO2 65 6.024627E+000 HOCH2CH2O2+HO2=HYETHO2H + 3.780000E+004 9 HO2 97 5.390767E-007 NO3CH2CO3+HO2=HCHO+NO2+OH + 3.780000E+004 9 HO2 98 1.837762E-007 NO3CH2CO3+HO2=NO3CH2CO2H+O3 + 3.780000E+004 9 HO2 99 5.023215E-007 NO3CH2CO3+HO2=NO3CH2CO3H + 3.780000E+004 9 HO2 107 1.519909E-001 HOCH2CO3+HO2=HO2+HCHO+OH + 3.780000E+004 9 HO2 108 5.181507E-002 HOCH2CO3+HO2=HOCH2CO2H+O3 + 3.780000E+004 9 HO2 109 1.416279E-001 HOCH2CO3+HO2=HOCH2CO3H + 3.780000E+004 9 HO2 134 1.740302E-004 HCOCO3+HO2=HCOCO2H+O3 + 3.780000E+004 9 HO2 135 4.756826E-004 HCOCO3+HO2=HCOCO3H + 3.780000E+004 9 HO2 136 5.104886E-004 HCOCO3+HO2=HO2+CO+OH + 4.140000E+004 8 OH 16 2.664537E+004 OH+O3=HO2 + 4.140000E+004 8 OH 17 1.517295E+000 OH+H2=HO2 + 4.140000E+004 8 OH 18 6.691021E+005 OH+CO=HO2 + 4.140000E+004 8 OH 19 1.230508E+001 OH+H2O2=HO2 + 4.140000E+004 8 OH 21 1.785143E+002 OH+HO2= + 4.140000E+004 8 OH 24 2.057102E+005 OH+NO=HONO + 4.140000E+004 8 OH 25 4.576551E+005 OH+NO2=HNO3 + 4.140000E+004 8 OH 26 1.664201E+001 OH+NO3=HO2+NO2 + 4.140000E+004 8 OH 29 1.115070E+001 OH+HO2NO2=NO2 + 4.140000E+004 8 OH 31 1.186397E+003 OH+HONO=NO2 + 4.140000E+004 8 OH 32 4.531830E+003 OH+HNO3=NO3 + 4.140000E+004 8 OH 34 0.000000E+000 OH+SO2=HSO3 + 4.140000E+004 8 OH 51 7.996525E+003 C2H4+OH=HOCH2CH2O2 + 4.140000E+004 8 OH 61 4.089874E+003 OH+HCHO=HO2+CO + 4.140000E+004 8 OH 72 1.604429E-006 ETHO2HNO3+OH=ETHENO3O2 + 4.140000E+004 8 OH 73 7.127871E-007 ETHO2HNO3+OH=NO3CH2CHO+OH + 4.140000E+004 8 OH 77 2.916113E+000 ETHOHNO3+OH=HOCH2CHO+NO2 + 4.140000E+004 8 OH 79 4.854035E-003 NO3CH2CHO+OH=NO3CH2CO3 + 4.140000E+004 8 OH 87 3.474026E-001 HYETHO2H+OH=HOCH2CH2O2 + 4.140000E+004 8 OH 88 1.314729E+000 HYETHO2H+OH=HOCH2CHO+OH + 4.140000E+004 8 OH 92 6.117110E-004 ETHGLY+OH=HOCH2CHO+HO2 + 4.140000E+004 8 OH 94 2.472522E+002 HOCH2CHO+OH=GLYOX+HO2 + 4.140000E+004 8 OH 95 9.890087E+002 HOCH2CHO+OH=HOCH2CO3 + 4.140000E+004 8 OH 106 1.917289E+000 HCOOH+OH=HO2 + 4.140000E+004 8 OH 119 4.948911E+001 OH+GLYOX=HCOCO + 4.140000E+004 8 OH 120 3.998627E-010 NO3CH2CO2H+OH=HCHO+NO2 + 4.140000E+004 8 OH 121 2.071119E-008 NO3CH2CO3H+OH=NO3CH2CO3 + 4.140000E+004 8 OH 123 3.060549E-007 NO3CH2PAN+OH=HCHO+CO+NO2+NO2 + 4.140000E+004 8 OH 125 1.819212E-003 HOCH2CO2H+OH=HCHO+HO2 + 4.140000E+004 8 OH 126 9.925792E-003 HOCH2CO3H+OH=HOCH2CO3 + 4.140000E+004 8 OH 128 8.623457E+000 PHAN+OH=HCHO+CO+NO2 + 4.140000E+004 8 OH 143 1.058268E-005 OH+HCOCO2H=CO+HO2 + 4.140000E+004 8 OH 146 6.242240E-005 OH+HCOCO3H=HCOCO3 + 4.140000E+004 9 HO2 20 3.015456E+003 HO2+O3=OH + 4.140000E+004 9 HO2 21 1.785143E+002 OH+HO2= + 4.140000E+004 9 HO2 22 4.228459E+001 HO2+HO2=H2O2 + 4.140000E+004 9 HO2 23 3.176326E+001 HO2+HO2=H2O2 + 4.140000E+004 9 HO2 27 7.243348E+005 HO2+NO=OH+NO2 + 4.140000E+004 9 HO2 28 1.367751E+005 HO2+NO2=HO2NO2 + 4.140000E+004 9 HO2 30 1.327229E+001 HO2+NO3=OH+NO2 + 4.140000E+004 9 HO2 52 2.812677E-005 ETHENO3O2+HO2=ETHO2HNO3 + 4.140000E+004 9 HO2 65 8.636769E-001 HOCH2CH2O2+HO2=HYETHO2H + 4.140000E+004 9 HO2 97 1.416239E-007 NO3CH2CO3+HO2=HCHO+NO2+OH + 4.140000E+004 9 HO2 98 4.828089E-008 NO3CH2CO3+HO2=NO3CH2CO2H+O3 + 4.140000E+004 9 HO2 99 1.319677E-007 NO3CH2CO3+HO2=NO3CH2CO3H + 4.140000E+004 9 HO2 107 3.517456E-002 HOCH2CO3+HO2=HO2+HCHO+OH + 4.140000E+004 9 HO2 108 1.199133E-002 HOCH2CO3+HO2=HOCH2CO2H+O3 + 4.140000E+004 9 HO2 109 3.277629E-002 HOCH2CO3+HO2=HOCH2CO3H + 4.140000E+004 9 HO2 134 2.138956E-005 HCOCO3+HO2=HCOCO2H+O3 + 4.140000E+004 9 HO2 135 5.846480E-005 HCOCO3+HO2=HCOCO3H + 4.140000E+004 9 HO2 136 6.274271E-005 HCOCO3+HO2=HO2+CO+OH + 4.500000E+004 8 OH 16 1.117582E+003 OH+O3=HO2 + 4.500000E+004 8 OH 17 7.038076E-002 OH+H2=HO2 + 4.500000E+004 8 OH 18 2.909103E+004 OH+CO=HO2 + 4.500000E+004 8 OH 19 5.625889E-001 OH+H2O2=HO2 + 4.500000E+004 8 OH 21 1.104331E+000 OH+HO2= + 4.500000E+004 8 OH 24 2.854596E+003 OH+NO=HONO + 4.500000E+004 8 OH 25 2.601321E+004 OH+NO2=HNO3 + 4.500000E+004 8 OH 26 2.626629E+000 OH+NO3=HO2+NO2 + 4.500000E+004 8 OH 29 9.106431E-002 OH+HO2NO2=NO2 + 4.500000E+004 8 OH 31 1.835555E+001 OH+HONO=NO2 + 4.500000E+004 8 OH 32 1.958773E+002 OH+HNO3=NO3 + 4.500000E+004 8 OH 34 0.000000E+000 OH+SO2=HSO3 + 4.500000E+004 8 OH 51 3.442724E+002 C2H4+OH=HOCH2CH2O2 + 4.500000E+004 8 OH 61 1.735258E+002 OH+HCHO=HO2+CO + 4.500000E+004 8 OH 72 7.885250E-008 ETHO2HNO3+OH=ETHENO3O2 + 4.500000E+004 8 OH 73 3.503117E-008 ETHO2HNO3+OH=NO3CH2CHO+OH + 4.500000E+004 8 OH 77 1.280121E-001 ETHOHNO3+OH=HOCH2CHO+NO2 + 4.500000E+004 8 OH 79 3.689060E-004 NO3CH2CHO+OH=NO3CH2CO3 + 4.500000E+004 8 OH 87 1.491029E-002 HYETHO2H+OH=HOCH2CH2O2 + 4.500000E+004 8 OH 88 5.642734E-002 HYETHO2H+OH=HOCH2CHO+OH + 4.500000E+004 8 OH 92 2.637669E-005 ETHGLY+OH=HOCH2CHO+HO2 + 4.500000E+004 8 OH 94 1.072816E+001 HOCH2CHO+OH=GLYOX+HO2 + 4.500000E+004 8 OH 95 4.291262E+001 HOCH2CHO+OH=HOCH2CO3 + 4.500000E+004 8 OH 106 9.636251E-002 HCOOH+OH=HO2 + 4.500000E+004 8 OH 119 1.975885E+000 OH+GLYOX=HCOCO + 4.500000E+004 8 OH 120 1.772072E-011 NO3CH2CO2H+OH=HCHO+NO2 + 4.500000E+004 8 OH 121 9.138268E-010 NO3CH2CO3H+OH=NO3CH2CO3 + 4.500000E+004 8 OH 123 1.199847E-008 NO3CH2PAN+OH=HCHO+CO+NO2+NO2 + 4.500000E+004 8 OH 125 8.026569E-005 HOCH2CO2H+OH=HCHO+HO2 + 4.500000E+004 8 OH 126 4.358671E-004 HOCH2CO3H+OH=HOCH2CO3 + 4.500000E+004 8 OH 128 3.244875E-001 PHAN+OH=HCHO+CO+NO2 + 4.500000E+004 8 OH 143 3.828657E-007 OH+HCOCO2H=CO+HO2 + 4.500000E+004 8 OH 146 2.665503E-006 OH+HCOCO3H=HCOCO3 + 4.500000E+004 9 HO2 20 4.137510E+002 HO2+O3=OH + 4.500000E+004 9 HO2 21 1.104331E+000 OH+HO2= + 4.500000E+004 9 HO2 22 8.557300E-001 HO2+HO2=H2O2 + 4.500000E+004 9 HO2 23 6.428057E-001 HO2+HO2=H2O2 + 4.500000E+004 9 HO2 27 3.288187E+004 HO2+NO=OH+NO2 + 4.500000E+004 9 HO2 28 2.543261E+004 HO2+NO2=HO2NO2 + 4.500000E+004 9 HO2 30 6.852786E+000 HO2+NO3=OH+NO2 + 4.500000E+004 9 HO2 52 4.429797E-005 ETHENO3O2+HO2=ETHO2HNO3 + 4.500000E+004 9 HO2 65 1.667213E-002 HOCH2CH2O2+HO2=HYETHO2H + 4.500000E+004 9 HO2 97 1.379016E-008 NO3CH2CO3+HO2=HCHO+NO2+OH + 4.500000E+004 9 HO2 98 4.701193E-009 NO3CH2CO3+HO2=NO3CH2CO2H+O3 + 4.500000E+004 9 HO2 99 1.284993E-008 NO3CH2CO3+HO2=NO3CH2CO3H + 4.500000E+004 9 HO2 107 3.580825E-003 HOCH2CO3+HO2=HO2+HCHO+OH + 4.500000E+004 9 HO2 108 1.220736E-003 HOCH2CO3+HO2=HOCH2CO2H+O3 + 4.500000E+004 9 HO2 109 3.336678E-003 HOCH2CO3+HO2=HOCH2CO3H + 4.500000E+004 9 HO2 134 1.564266E-007 HCOCO3+HO2=HCOCO2H+O3 + 4.500000E+004 9 HO2 135 4.275660E-007 HCOCO3+HO2=HCOCO3H + 4.500000E+004 9 HO2 136 4.588513E-007 HCOCO3+HO2=HO2+CO+OH + 4.860000E+004 8 OH 16 1.702313E+001 OH+O3=HO2 + 4.860000E+004 8 OH 17 1.101256E-003 OH+H2=HO2 + 4.860000E+004 8 OH 18 4.543628E+002 OH+CO=HO2 + 4.860000E+004 8 OH 19 9.223576E-003 OH+H2O2=HO2 + 4.860000E+004 8 OH 21 1.313623E-002 OH+HO2= + 4.860000E+004 8 OH 24 4.890725E-003 OH+NO=HONO + 4.860000E+004 8 OH 25 4.178314E+002 OH+NO2=HNO3 + 4.860000E+004 8 OH 26 3.412864E+000 OH+NO3=HO2+NO2 + 4.860000E+004 8 OH 29 1.084833E-003 OH+HO2NO2=NO2 + 4.860000E+004 8 OH 31 2.642532E-001 OH+HONO=NO2 + 4.860000E+004 8 OH 32 2.994487E+000 OH+HNO3=NO3 + 4.860000E+004 8 OH 34 0.000000E+000 OH+SO2=HSO3 + 4.860000E+004 8 OH 51 5.360961E+000 C2H4+OH=HOCH2CH2O2 + 4.860000E+004 8 OH 61 2.725711E+000 OH+HCHO=HO2+CO + 4.860000E+004 8 OH 72 3.351098E-007 ETHO2HNO3+OH=ETHENO3O2 + 4.860000E+004 8 OH 73 1.488766E-007 ETHO2HNO3+OH=NO3CH2CHO+OH + 4.860000E+004 8 OH 77 1.999641E-003 ETHOHNO3+OH=HOCH2CHO+NO2 + 4.860000E+004 8 OH 79 9.374500E-005 NO3CH2CHO+OH=NO3CH2CO3 + 4.860000E+004 8 OH 87 2.328571E-004 HYETHO2H+OH=HOCH2CH2O2 + 4.860000E+004 8 OH 88 8.812371E-004 HYETHO2H+OH=HOCH2CHO+OH + 4.860000E+004 8 OH 92 4.129168E-007 ETHGLY+OH=HOCH2CHO+HO2 + 4.860000E+004 8 OH 94 1.673127E-001 HOCH2CHO+OH=GLYOX+HO2 + 4.860000E+004 8 OH 95 6.692507E-001 HOCH2CHO+OH=HOCH2CO3 + 4.860000E+004 8 OH 106 1.700840E-003 HCOOH+OH=HO2 + 4.860000E+004 8 OH 119 3.056469E-002 OH+GLYOX=HCOCO + 4.860000E+004 8 OH 120 2.803603E-013 NO3CH2CO2H+OH=HCHO+NO2 + 4.860000E+004 8 OH 121 1.443188E-011 NO3CH2CO3H+OH=NO3CH2CO3 + 4.860000E+004 8 OH 123 3.726219E-010 NO3CH2PAN+OH=HCHO+CO+NO2+NO2 + 4.860000E+004 8 OH 125 1.258168E-006 HOCH2CO2H+OH=HCHO+HO2 + 4.860000E+004 8 OH 126 6.830238E-006 HOCH2CO3H+OH=HOCH2CO3 + 4.860000E+004 8 OH 128 5.113494E-003 PHAN+OH=HCHO+CO+NO2 + 4.860000E+004 8 OH 143 5.900741E-009 OH+HCOCO2H=CO+HO2 + 4.860000E+004 8 OH 146 4.162313E-008 OH+HCOCO3H=HCOCO3 + 4.860000E+004 9 HO2 20 3.073130E+002 HO2+O3=OH + 4.860000E+004 9 HO2 21 1.313623E-002 OH+HO2= + 4.860000E+004 9 HO2 22 4.963521E-001 HO2+HO2=H2O2 + 4.860000E+004 9 HO2 23 3.728489E-001 HO2+HO2=H2O2 + 4.860000E+004 9 HO2 27 2.747053E+000 HO2+NO=OH+NO2 + 4.860000E+004 9 HO2 28 1.991957E+004 HO2+NO2=HO2NO2 + 4.860000E+004 9 HO2 30 4.341795E+002 HO2+NO3=OH+NO2 + 4.860000E+004 9 HO2 52 2.189703E-001 ETHENO3O2+HO2=ETHO2HNO3 + 4.860000E+004 9 HO2 65 1.793767E-002 HOCH2CH2O2+HO2=HYETHO2H + 4.860000E+004 9 HO2 97 1.491807E-007 NO3CH2CO3+HO2=HCHO+NO2+OH + 4.860000E+004 9 HO2 98 5.085704E-008 NO3CH2CO3+HO2=NO3CH2CO2H+O3 + 4.860000E+004 9 HO2 99 1.390092E-007 NO3CH2CO3+HO2=NO3CH2CO3H + 4.860000E+004 9 HO2 107 3.624699E-003 HOCH2CO3+HO2=HO2+HCHO+OH + 4.860000E+004 9 HO2 108 1.235693E-003 HOCH2CO3+HO2=HOCH2CO2H+O3 + 4.860000E+004 9 HO2 109 3.377561E-003 HOCH2CO3+HO2=HOCH2CO3H + 4.860000E+004 9 HO2 134 4.889583E-007 HCOCO3+HO2=HCOCO2H+O3 + 4.860000E+004 9 HO2 135 1.336486E-006 HCOCO3+HO2=HCOCO3H + 4.860000E+004 9 HO2 136 1.434278E-006 HCOCO3+HO2=HO2+CO+OH diff --git a/tests/model_tests/spec_model_1/output/mainSolverParameters.output.cmp b/tests/model_tests/spec_model_1/output/mainSolverParameters.output.cmp new file mode 100644 index 000000000..03162cfda --- /dev/null +++ b/tests/model_tests/spec_model_1/output/mainSolverParameters.output.cmp @@ -0,0 +1,31 @@ + t currentStepSize previousStepSize LENRW LENIW NST NFE NETF NCFN NNI NSETUPS QU QCUR NOR LENRWLS LENIWLS LS_FLAG NFELS NJTV NPE NPS NLI NCFL + 2.43E+04 1.00000000E+002 6.65202487E+001 579 50 155 191 1 0 190 44 5 4 0 15546 105 0 278 278 3 447 278 0 + 2.52E+04 1.00000000E+002 1.00000000E+002 579 50 164 201 1 0 200 45 4 4 0 15546 105 0 304 304 3 483 304 0 + 2.61E+04 1.00000000E+002 1.00000000E+002 579 50 173 210 1 0 209 45 4 4 0 15546 105 0 322 322 3 510 322 0 + 2.70E+04 1.00000000E+002 1.00000000E+002 579 50 182 219 1 0 218 46 4 5 0 15546 105 0 333 333 4 530 333 0 + 2.79E+04 1.00000000E+002 1.00000000E+002 579 50 191 228 1 0 227 46 4 4 0 15546 105 0 342 342 4 548 342 0 + 2.88E+04 1.00000000E+002 1.00000000E+002 579 50 200 237 1 0 236 47 4 4 0 15546 105 0 350 350 4 565 350 0 + 2.97E+04 1.00000000E+002 1.00000000E+002 579 50 209 246 1 0 245 47 4 4 0 15546 105 0 360 360 4 584 360 0 + 3.06E+04 1.00000000E+002 1.00000000E+002 579 50 218 255 1 0 254 48 4 3 0 15546 105 0 375 375 4 608 375 0 + 3.15E+04 1.00000000E+002 1.00000000E+002 579 50 227 264 1 0 263 48 4 4 0 15546 105 0 389 389 4 631 389 0 + 3.24E+04 1.00000000E+002 1.00000000E+002 579 50 236 273 1 0 272 49 4 3 0 15546 105 0 403 403 5 654 403 0 + 3.33E+04 1.00000000E+002 1.00000000E+002 579 50 245 282 1 0 281 49 4 4 0 15546 105 0 411 411 5 671 411 0 + 3.42E+04 1.00000000E+002 1.00000000E+002 579 50 254 291 1 0 290 49 4 3 0 15546 105 0 420 420 5 689 420 0 + 3.51E+04 1.00000000E+002 1.00000000E+002 579 50 263 300 1 0 299 50 4 4 0 15546 105 0 429 429 5 707 429 0 + 3.60E+04 1.00000000E+002 1.00000000E+002 579 50 272 309 1 0 308 50 4 3 0 15546 105 0 439 439 5 726 439 0 + 3.69E+04 1.00000000E+002 1.00000000E+002 579 50 281 318 1 0 317 51 4 4 0 15546 105 0 448 448 5 744 448 0 + 3.78E+04 1.00000000E+002 1.00000000E+002 579 50 290 327 1 0 326 51 4 3 0 15546 105 0 460 460 5 765 460 0 + 3.87E+04 1.00000000E+002 1.00000000E+002 579 50 299 336 1 0 335 52 4 4 0 15546 105 0 470 470 6 784 470 0 + 3.96E+04 1.00000000E+002 1.00000000E+002 579 50 308 345 1 0 344 52 4 4 0 15546 105 0 478 478 6 801 478 0 + 4.05E+04 1.00000000E+002 1.00000000E+002 579 50 317 354 1 0 353 53 4 4 0 15546 105 0 487 487 6 819 487 0 + 4.14E+04 1.00000000E+002 1.00000000E+002 579 50 326 363 1 0 362 53 4 4 0 15546 105 0 497 497 6 838 497 0 + 4.23E+04 1.00000000E+002 1.00000000E+002 579 50 335 372 1 0 371 53 4 4 0 15546 105 0 510 510 6 860 510 0 + 4.32E+04 1.00000000E+002 1.00000000E+002 579 50 344 381 1 0 380 54 4 5 0 15546 105 0 528 528 6 887 528 0 + 4.41E+04 1.00000000E+002 1.00000000E+002 579 50 353 390 1 0 389 54 4 4 0 15546 105 0 561 561 6 929 561 0 + 4.50E+04 1.00000000E+002 1.00000000E+002 579 50 362 399 1 0 398 55 4 4 0 15546 105 0 590 590 7 967 590 0 + 4.59E+04 6.58728262E+001 6.58728262E+001 579 50 372 415 2 0 414 56 4 4 0 15546 105 0 644 644 7 1037 644 0 + 4.68E+04 2.50109535E+001 2.50109535E+001 579 50 390 441 4 0 440 58 4 4 0 15546 105 0 766 766 7 1185 766 0 + 4.77E+04 1.00000000E+002 1.00000000E+002 579 50 476 592 30 0 591 107 4 4 0 15546 105 0 923 923 9 1469 923 0 + 4.86E+04 1.00000000E+002 1.00000000E+002 579 50 485 601 30 0 600 107 4 4 0 15546 105 0 941 941 9 1496 941 0 + 4.95E+04 1.00000000E+002 1.00000000E+002 579 50 494 610 30 0 609 107 4 4 0 15546 105 0 958 958 9 1522 958 0 + 5.04E+04 1.00000000E+002 1.00000000E+002 579 50 503 619 30 0 618 108 4 4 0 15546 105 0 970 970 9 1543 970 0 diff --git a/tests/model_tests/spec_model_1/output/photolysisRates.output.cmp b/tests/model_tests/spec_model_1/output/photolysisRates.output.cmp new file mode 100644 index 000000000..50336850a --- /dev/null +++ b/tests/model_tests/spec_model_1/output/photolysisRates.output.cmp @@ -0,0 +1,31 @@ + t J1 J2 J3 J4 J5 J6 J7 J8 J11 J12 J13 J14 J15 J16 J17 J18 J19 J20 J21 J22 J23 J24 J31 J32 J33 J34 J35 J41 J51 J52 J53 J54 J55 J56 J61 + 2.430000E+004 3.663925E-005 4.384407E-004 7.764841E-006 8.855794E-003 2.221914E-002 1.535626E-001 1.967022E-003 6.703261E-007 3.210360E-005 4.905566E-005 4.730384E-006 1.972512E-005 1.959330E-005 1.175458E-005 5.412368E-005 1.089342E-006 1.089342E-006 5.586370E-004 5.937774E-007 3.899272E-006 1.785843E-006 1.785401E-006 5.572421E-005 8.401372E-006 2.745634E-005 1.241698E-004 2.668800E-004 5.708706E-006 1.131655E-006 1.334059E-006 1.751976E-006 2.925916E-006 8.183259E-006 3.097731E-005 5.714504E-004 + 2.520000E+004 3.666388E-005 4.384909E-004 7.767201E-006 8.857172E-003 2.222100E-002 1.535757E-001 1.967350E-003 6.706384E-007 3.211447E-005 4.906758E-005 4.732707E-006 1.973365E-005 1.960010E-005 1.175865E-005 5.414222E-005 1.089572E-006 1.089572E-006 5.587549E-004 5.941098E-007 3.901009E-006 1.786218E-006 1.785776E-006 5.572983E-005 8.402219E-006 2.746430E-005 1.241841E-004 2.669095E-004 5.710370E-006 1.132160E-006 1.334698E-006 1.752785E-006 2.927182E-006 8.186442E-006 3.099057E-005 5.715831E-004 + 2.610000E+004 3.635296E-005 4.378547E-004 7.737332E-006 8.839718E-003 2.219739E-002 1.534100E-001 1.963186E-003 6.666913E-007 3.197699E-005 4.891657E-005 4.703344E-006 1.962586E-005 1.951412E-005 1.170707E-005 5.390772E-005 1.086661E-006 1.086661E-006 5.572622E-004 5.899095E-007 3.879043E-006 1.781467E-006 1.781026E-006 5.565858E-005 8.391476E-006 2.736345E-005 1.240030E-004 2.665354E-004 5.689304E-006 1.125776E-006 1.326627E-006 1.742554E-006 2.911178E-006 8.146178E-006 3.082290E-005 5.699024E-004 + 2.700000E+004 3.571172E-005 4.365282E-004 7.675260E-006 8.803289E-003 2.214807E-002 1.530638E-001 1.954495E-003 6.585187E-007 3.169142E-005 4.860215E-005 4.642556E-006 1.940245E-005 1.933557E-005 1.159996E-005 5.342065E-005 1.080596E-006 1.080596E-006 5.541519E-004 5.812309E-007 3.833527E-006 1.771567E-006 1.771128E-006 5.550963E-005 8.369019E-006 2.715375E-005 1.236245E-004 2.657534E-004 5.645511E-006 1.112551E-006 1.309918E-006 1.721365E-006 2.878015E-006 8.062661E-006 3.047539E-005 5.664032E-004 + 2.790000E+004 3.475091E-005 4.345031E-004 7.581039E-006 8.747579E-003 2.207258E-002 1.525336E-001 1.941208E-003 6.461899E-007 3.125828E-005 4.812330E-005 4.550879E-006 1.906489E-005 1.906489E-005 1.143757E-005 5.268193E-005 1.071347E-006 1.071347E-006 5.494085E-004 5.681872E-007 3.764778E-006 1.756469E-006 1.756034E-006 5.528122E-005 8.334583E-006 2.683514E-005 1.230448E-004 2.645550E-004 5.579001E-006 1.092585E-006 1.284720E-006 1.689392E-006 2.827921E-006 7.936296E-006 2.995035E-005 5.610752E-004 + 2.880000E+004 3.348671E-005 4.317667E-004 7.454749E-006 8.672113E-003 2.197014E-002 1.518136E-001 1.923220E-003 6.298107E-007 3.067836E-005 4.747844E-005 4.429132E-006 1.861538E-005 1.870274E-005 1.122031E-005 5.169298E-005 1.058867E-006 1.058867E-006 5.430087E-004 5.509489E-007 3.673282E-006 1.736097E-006 1.735667E-006 5.497062E-005 8.287754E-006 2.640752E-005 1.222577E-004 2.629265E-004 5.489785E-006 1.066028E-006 1.251259E-006 1.646898E-006 2.761243E-006 7.767701E-006 2.925126E-005 5.539021E-004 + 2.970000E+004 3.194052E-005 4.283011E-004 7.296496E-006 8.576226E-003 2.183972E-002 1.508961E-001 1.900380E-003 6.095228E-007 2.995274E-005 4.666541E-005 4.278411E-006 1.805689E-005 1.825002E-005 1.094870E-005 5.045574E-005 1.043093E-006 1.043093E-006 5.349194E-004 5.297425E-007 3.559689E-006 1.710347E-006 1.709924E-006 5.457398E-005 8.227955E-006 2.587073E-005 1.212545E-004 2.608487E-004 5.377879E-006 1.033083E-006 1.209836E-006 1.594235E-006 2.678448E-006 7.557707E-006 2.838285E-005 5.448614E-004 + 3.060000E+004 3.013870E-005 4.240826E-004 7.106411E-006 8.459047E-003 2.167989E-002 1.497704E-001 1.872493E-003 5.855035E-007 2.908278E-005 4.568135E-005 4.100097E-006 1.739319E-005 1.770785E-005 1.062344E-005 4.897265E-005 1.023941E-006 1.023941E-006 5.250980E-004 5.048487E-007 3.424822E-006 1.679081E-006 1.678666E-006 5.408622E-005 8.154416E-006 2.522457E-005 1.200238E-004 2.582963E-004 5.243295E-006 9.940043E-007 1.160830E-006 1.531846E-006 2.580124E-006 7.307364E-006 2.735100E-005 5.339235E-004 + 3.150000E+004 2.811224E-005 4.190808E-004 6.884647E-006 8.319460E-003 2.148887E-002 1.484230E-001 1.839309E-003 5.579660E-007 2.807015E-005 4.452271E-005 3.895854E-006 1.662883E-005 1.707762E-005 1.024535E-005 4.724672E-005 1.001306E-006 1.001306E-006 5.134902E-004 4.765997E-007 3.269677E-006 1.642127E-006 1.641721E-006 5.350074E-005 8.066145E-006 2.446877E-005 1.185509E-004 2.552368E-004 5.086047E-006 9.491000E-007 1.104697E-006 1.460265E-006 2.466978E-006 7.017946E-006 2.616290E-005 5.210508E-004 + 3.240000E+004 2.589638E-005 4.132571E-004 6.631378E-006 8.156067E-003 2.126433E-002 1.468367E-001 1.800515E-003 5.271596E-007 2.691686E-005 4.318508E-005 3.667635E-006 1.576919E-005 1.636098E-005 9.815414E-006 4.528159E-005 9.750561E-007 9.750561E-007 5.000288E-004 4.453772E-007 3.095428E-006 1.599268E-006 1.598872E-006 5.280918E-005 7.961881E-006 2.360297E-005 1.168170E-004 2.516288E-004 4.906139E-006 8.987301E-007 1.041968E-006 1.380116E-006 2.339846E-006 6.690957E-006 2.482695E-005 5.061968E-004 + 3.330000E+004 2.353018E-005 4.065633E-004 6.346800E-006 7.967129E-003 2.100335E-002 1.449895E-001 1.755726E-003 4.933698E-007 2.562529E-005 4.166311E-005 3.417694E-006 1.482051E-005 1.555988E-005 9.334812E-006 4.308156E-005 9.450308E-007 9.450308E-007 4.846312E-004 4.116086E-007 2.903440E-006 1.550240E-006 1.549856E-006 5.200099E-005 7.840032E-006 2.262672E-005 1.147988E-004 2.474202E-004 4.703572E-006 8.433098E-007 9.732526E-007 1.292116E-006 2.199690E-006 6.328150E-006 2.335292E-005 4.893040E-004 + 3.420000E+004 2.105605E-005 3.989388E-004 6.031129E-006 7.750492E-003 2.070225E-002 1.428536E-001 1.704463E-003 4.569195E-007 2.419827E-005 3.995038E-005 3.148593E-006 1.378996E-005 1.467661E-005 8.804912E-006 4.065179E-005 9.110342E-007 9.110342E-007 4.671970E-004 3.757647E-007 2.695277E-006 1.494721E-006 1.494351E-006 5.106284E-005 7.698590E-006 2.153948E-005 1.124668E-004 2.425456E-004 4.478335E-006 7.833113E-007 8.992406E-007 1.197080E-006 2.047608E-006 5.931542E-006 2.175193E-005 4.703022E-004 + 3.510000E+004 1.851921E-005 3.903070E-004 5.684612E-006 7.503489E-003 2.035631E-002 1.403938E-001 1.646140E-003 4.181699E-007 2.263919E-005 3.803921E-005 2.863223E-006 1.268573E-005 1.371386E-005 8.227332E-006 3.799845E-005 8.728287E-007 8.728287E-007 4.476045E-004 3.383561E-007 2.472723E-006 1.432321E-006 1.431967E-006 4.997785E-005 7.535010E-006 2.034062E-005 1.097839E-004 2.369225E-004 4.230409E-006 7.192674E-007 8.207035E-007 1.095923E-006 1.884846E-006 5.503446E-006 2.003667E-005 4.491064E-004 + 3.600000E+004 1.596717E-005 3.805712E-004 5.307534E-006 7.222804E-003 1.995951E-002 1.375646E-001 1.580031E-003 3.775238E-007 2.095216E-005 3.592054E-005 2.564836E-006 1.151716E-005 1.267484E-005 7.603995E-006 3.512908E-005 8.301271E-007 8.301271E-007 4.257062E-004 2.999300E-007 2.237809E-006 1.362567E-006 1.362230E-006 4.872452E-005 7.346049E-006 1.902947E-005 1.067030E-004 2.304459E-004 3.959769E-006 6.517774E-007 7.385011E-007 9.896706E-007 1.712809E-006 5.046518E-006 1.822147E-005 4.256136E-004 + 3.690000E+004 1.344909E-005 3.696070E-004 4.900246E-006 6.904303E-003 1.950399E-002 1.343073E-001 1.505240E-003 3.354290E-007 1.914232E-005 3.358374E-005 2.257088E-006 1.029494E-005 1.156344E-005 6.937234E-006 3.205310E-005 7.825825E-007 7.825825E-007 4.013244E-004 2.610679E-007 1.992856E-006 1.284888E-006 1.284570E-006 4.727514E-005 7.127531E-006 1.760535E-005 1.031640E-004 2.229817E-004 3.666398E-006 5.815151E-007 6.535898E-007 8.794704E-007 1.533089E-006 4.563820E-006 1.632263E-005 3.996996E-004 + 3.780000E+004 1.101520E-005 3.572524E-004 4.463212E-006 6.542792E-003 1.897940E-002 1.305440E-001 1.420652E-003 2.923849E-007 1.721628E-005 3.101659E-005 1.944102E-006 9.031412E-006 1.038450E-005 6.229955E-006 2.878265E-005 7.297776E-007 7.297776E-007 3.742449E-004 2.223834E-007 1.740531E-006 1.198593E-006 1.198297E-006 4.559359E-005 6.874007E-006 1.606784E-005 9.908917E-005 2.143560E-004 3.350312E-006 5.092429E-007 5.670357E-007 7.666118E-007 1.347498E-006 4.058936E-006 1.435884E-005 3.712157E-004 + 3.870000E+004 8.716015E-006 3.432924E-004 3.997105E-006 6.131706E-003 1.837175E-002 1.261699E-001 1.324877E-003 2.489526E-007 1.518292E-005 2.820542E-005 1.630563E-006 7.741028E-006 9.144268E-006 5.485906E-006 2.533397E-005 6.712134E-007 6.712134E-007 3.442120E-004 1.845211E-007 1.483947E-006 1.102860E-006 1.102587E-006 4.363198E-005 6.578262E-006 1.441704E-005 9.437645E-005 2.043402E-004 3.011618E-006 4.358313E-007 4.800357E-007 6.525561E-007 1.158127E-006 3.536131E-006 1.235174E-005 3.399851E-004 + 3.960000E+004 6.601589E-006 3.274348E-004 3.502986E-006 5.662702E-003 1.766174E-002 1.210406E-001 1.216184E-003 2.057705E-007 1.305470E-005 2.513579E-005 1.321866E-006 6.441054E-006 7.851156E-006 4.710131E-006 2.172980E-005 6.063033E-007 6.063033E-007 3.109248E-004 1.481568E-007 1.226794E-006 9.967153E-007 9.964686E-007 4.132577E-005 6.230562E-006 1.265440E-005 8.888979E-005 1.926292E-004 2.650632E-006 3.622917E-007 3.939497E-007 5.389832E-007 9.674297E-007 3.000631E-006 1.032694E-005 3.058031E-004 + 4.050000E+004 4.720409E-006 3.092706E-004 2.982650E-006 5.125166E-003 1.682186E-002 1.149507E-001 1.092425E-003 1.635794E-007 1.084997E-005 2.179442E-005 1.024320E-006 5.152686E-006 6.517055E-006 3.909766E-006 1.800344E-005 5.343819E-007 5.343819E-007 2.740420E-004 1.140010E-007 9.735651E-007 8.790508E-007 8.788333E-007 3.858613E-005 5.817514E-006 1.078407E-005 8.244459E-005 1.788083E-004 2.268120E-006 2.898260E-007 3.103503E-007 4.278648E-007 7.783672E-007 2.459067E-006 8.315571E-006 2.684429E-004 + 4.140000E+004 3.117865E-006 2.882056E-004 2.439329E-006 4.505728E-003 1.581138E-002 1.075984E-001 9.510071E-004 1.232623E-007 8.597217E-006 1.817405E-005 7.454500E-007 3.902842E-006 5.159708E-006 3.095455E-006 1.420617E-005 4.547617E-007 4.547617E-007 2.332111E-004 8.280457E-008 7.298946E-007 7.487107E-007 7.485255E-007 3.528814E-005 5.320287E-006 8.815988E-006 7.478595E-005 1.623046E-004 1.865794E-006 2.199090E-007 2.311011E-007 3.215805E-007 5.946335E-007 1.920257E-006 6.356852E-006 2.276828E-004 + 4.230000E+004 1.833638E-006 2.633356E-004 1.879158E-006 3.788250E-003 1.456726E-002 9.852066E-002 7.890325E-004 8.590911E-008 6.342925E-006 1.428521E-005 4.944181E-007 2.727063E-006 3.807124E-006 2.284002E-006 1.042079E-005 3.669193E-007 3.669193E-007 1.881637E-004 5.536878E-008 5.030946E-007 6.047888E-007 6.046392E-007 3.125293E-005 4.711910E-006 6.772083E-006 6.555764E-005 1.423175E-004 1.447395E-006 1.544221E-007 1.584777E-007 2.231032E-007 4.210400E-007 1.396567E-006 4.502360E-006 1.833875E-004 + 4.320000E+004 8.967198E-007 2.332006E-004 1.314386E-006 2.955996E-003 1.298621E-002 8.697082E-002 6.040687E-004 5.291976E-008 4.166771E-006 1.018549E-005 2.824903E-007 1.674179E-006 2.506054E-006 1.503453E-006 6.787441E-006 2.710529E-007 2.710529E-007 1.390015E-004 3.255733E-008 3.029659E-007 4.475267E-007 4.474159E-007 2.622290E-005 3.953548E-006 4.700204E-006 5.426574E-005 1.177402E-004 1.021137E-006 9.587242E-008 9.534659E-008 1.362886E-007 2.641603E-007 9.064330E-007 2.823245E-006 1.357409E-004 + 4.410000E+004 3.150514E-007 1.952581E-004 7.708300E-007 2.002538E-003 1.088738E-002 7.168062E-002 3.971175E-004 2.615198E-008 2.210693E-006 6.053476E-006 1.231199E-007 8.128935E-007 1.338295E-006 8.028811E-007 3.551521E-006 1.697272E-007 1.697272E-007 8.703959E-005 1.529486E-008 1.427882E-007 2.809867E-007 2.809171E-007 1.984616E-005 2.992146E-006 2.705741E-006 4.028431E-005 8.718473E-005 6.055379E-007 4.772351E-008 4.537522E-008 6.626736E-008 1.333567E-007 4.789340E-007 1.421678E-006 8.592625E-005 + 4.500000E+004 5.376318E-008 1.446703E-004 3.052413E-007 9.772666E-004 7.934727E-003 5.044893E-002 1.833181E-004 8.008978E-009 7.253621E-007 2.372879E-006 2.945195E-008 2.349433E-007 4.474901E-007 2.684620E-007 1.134815E-006 7.273287E-008 7.273287E-008 3.729891E-005 4.468587E-009 3.910192E-008 1.210217E-007 1.209917E-007 1.180127E-005 1.779241E-006 1.021789E-006 2.321184E-005 4.983127E-005 2.435280E-007 1.465815E-008 1.294547E-008 1.956991E-008 4.182602E-008 1.608018E-007 4.423040E-007 3.817353E-005 + 4.590000E+004 1.169013E-009 7.564653E-005 3.828182E-008 1.741800E-004 3.792653E-003 2.196983E-002 2.856514E-005 6.324189E-010 5.735729E-008 2.648166E-007 1.232053E-009 1.508696E-008 3.771219E-008 2.262461E-008 8.397447E-008 9.869957E-009 9.869957E-009 5.061516E-006 3.562588E-010 2.211032E-009 1.662830E-008 1.662419E-008 3.324377E-006 5.012063E-007 1.103782E-007 6.127910E-006 1.278457E-005 3.128385E-008 1.133764E-009 8.589003E-010 1.391958E-009 3.357119E-009 1.457629E-008 3.450026E-008 5.895228E-006 + 4.680000E+004 7.376316E-027 9.390202E-008 5.124918E-018 1.455665E-013 7.073089E-007 1.143179E-006 4.631457E-015 3.777998E-021 2.471681E-020 1.952241E-018 1.711143E-024 2.479438E-021 4.720058E-020 2.831697E-020 1.553168E-020 5.754781E-019 5.754781E-019 2.951170E-016 1.724885E-020 8.091523E-023 1.132077E-018 1.131797E-018 5.397477E-013 8.137613E-014 1.373821E-018 5.394892E-013 6.868487E-013 4.528438E-018 3.372905E-021 5.858643E-022 1.777919E-021 1.263351E-020 1.217019E-019 7.922904E-020 3.271556E-015 + 4.770000E+004 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 + 4.860000E+004 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 + 4.950000E+004 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 + 5.040000E+004 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 diff --git a/tests/model_tests/spec_model_1/output/photolysisRatesParameters.output.cmp b/tests/model_tests/spec_model_1/output/photolysisRatesParameters.output.cmp new file mode 100644 index 000000000..ac7f73da2 --- /dev/null +++ b/tests/model_tests/spec_model_1/output/photolysisRatesParameters.output.cmp @@ -0,0 +1,31 @@ + t latitude longitude secx cosx lha sinld cosld eqtime + 2.340000E+004 -7.326000E+000 -7.244900E+001 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 + 2.430000E+004 -7.326000E+000 -7.244900E+001 1.014205E+000 9.859942E-001 -3.751710E-002 3.663024E-002 9.500325E-001 6.973437E-002 + 2.520000E+004 -7.326000E+000 -7.244900E+001 1.013898E+000 9.862922E-001 2.793274E-002 3.663024E-002 9.500325E-001 6.973437E-002 + 2.610000E+004 -7.326000E+000 -7.244900E+001 1.017787E+000 9.825235E-001 9.338259E-002 3.663024E-002 9.500325E-001 6.973437E-002 + 2.700000E+004 -7.326000E+000 -7.244900E+001 1.025952E+000 9.747044E-001 1.588324E-001 3.663024E-002 9.500325E-001 6.973437E-002 + 2.790000E+004 -7.326000E+000 -7.244900E+001 1.038564E+000 9.628682E-001 2.242823E-001 3.663024E-002 9.500325E-001 6.973437E-002 + 2.880000E+004 -7.326000E+000 -7.244900E+001 1.055893E+000 9.470658E-001 2.897321E-001 3.663024E-002 9.500325E-001 6.973437E-002 + 2.970000E+004 -7.326000E+000 -7.244900E+001 1.078324E+000 9.273648E-001 3.551820E-001 3.663024E-002 9.500325E-001 6.973437E-002 + 3.060000E+004 -7.326000E+000 -7.244900E+001 1.106379E+000 9.038495E-001 4.206318E-001 3.663024E-002 9.500325E-001 6.973437E-002 + 3.150000E+004 -7.326000E+000 -7.244900E+001 1.140744E+000 8.766206E-001 4.860817E-001 3.663024E-002 9.500325E-001 6.973437E-002 + 3.240000E+004 -7.326000E+000 -7.244900E+001 1.182320E+000 8.457948E-001 5.515315E-001 3.663024E-002 9.500325E-001 6.973437E-002 + 3.330000E+004 -7.326000E+000 -7.244900E+001 1.232280E+000 8.115040E-001 6.169814E-001 3.663024E-002 9.500325E-001 6.973437E-002 + 3.420000E+004 -7.326000E+000 -7.244900E+001 1.292165E+000 7.738951E-001 6.824312E-001 3.663024E-002 9.500325E-001 6.973437E-002 + 3.510000E+004 -7.326000E+000 -7.244900E+001 1.364016E+000 7.331291E-001 7.478811E-001 3.663024E-002 9.500325E-001 6.973437E-002 + 3.600000E+004 -7.326000E+000 -7.244900E+001 1.450578E+000 6.893806E-001 8.133309E-001 3.663024E-002 9.500325E-001 6.973437E-002 + 3.690000E+004 -7.326000E+000 -7.244900E+001 1.555605E+000 6.428369E-001 8.787808E-001 3.663024E-002 9.500325E-001 6.973437E-002 + 3.780000E+004 -7.326000E+000 -7.244900E+001 1.684360E+000 5.936973E-001 9.442306E-001 3.663024E-002 9.500325E-001 6.973437E-002 + 3.870000E+004 -7.326000E+000 -7.244900E+001 1.844432E+000 5.421723E-001 1.009680E+000 3.663024E-002 9.500325E-001 6.973437E-002 + 3.960000E+004 -7.326000E+000 -7.244900E+001 2.047156E+000 4.884825E-001 1.075130E+000 3.663024E-002 9.500325E-001 6.973437E-002 + 4.050000E+004 -7.326000E+000 -7.244900E+001 2.310228E+000 4.328577E-001 1.140580E+000 3.663024E-002 9.500325E-001 6.973437E-002 + 4.140000E+004 -7.326000E+000 -7.244900E+001 2.662858E+000 3.755363E-001 1.206030E+000 3.663024E-002 9.500325E-001 6.973437E-002 + 4.230000E+004 -7.326000E+000 -7.244900E+001 3.156928E+000 3.167636E-001 1.271480E+000 3.663024E-002 9.500325E-001 6.973437E-002 + 4.320000E+004 -7.326000E+000 -7.244900E+001 3.894212E+000 2.567914E-001 1.336930E+000 3.663024E-002 9.500325E-001 6.973437E-002 + 4.410000E+004 -7.326000E+000 -7.244900E+001 5.105261E+000 1.958764E-001 1.402380E+000 3.663024E-002 9.500325E-001 6.973437E-002 + 4.500000E+004 -7.326000E+000 -7.244900E+001 7.447157E+000 1.342794E-001 1.467829E+000 3.663024E-002 9.500325E-001 6.973437E-002 + 4.590000E+004 -7.326000E+000 -7.244900E+001 1.337171E+001 7.478477E-002 1.530624E+000 3.663024E-002 9.500325E-001 6.973437E-002 + 4.680000E+004 -7.326000E+000 -7.244900E+001 8.991747E+001 1.112131E-002 1.597650E+000 3.663024E-002 9.500325E-001 6.973437E-002 + 4.770000E+004 -7.326000E+000 -7.244900E+001 1.000000E+002 0.000000E+000 1.665776E+000 3.663024E-002 9.500325E-001 6.973437E-002 + 4.860000E+004 -7.326000E+000 -7.244900E+001 1.000000E+002 0.000000E+000 1.731226E+000 3.663024E-002 9.500325E-001 6.973437E-002 + 4.950000E+004 -7.326000E+000 -7.244900E+001 1.000000E+002 0.000000E+000 1.796675E+000 3.663024E-002 9.500325E-001 6.973437E-002 diff --git a/tests/model_tests/spec_model_1/output/productionRates.output.cmp b/tests/model_tests/spec_model_1/output/productionRates.output.cmp new file mode 100644 index 000000000..75d2580d5 --- /dev/null +++ b/tests/model_tests/spec_model_1/output/productionRates.output.cmp @@ -0,0 +1,400 @@ + time speciesNumber speciesName reactionNumber rate reaction + 2.700000E+004 8 OH 15 3.983258E+006 O1D=OH+OH + 2.700000E+004 8 OH 20 1.268479E+004 HO2+O3=OH + 2.700000E+004 8 OH 27 6.034940E+006 HO2+NO=OH+NO2 + 2.700000E+004 8 OH 30 2.994469E+001 HO2+NO3=OH+NO2 + 2.700000E+004 8 OH 41 4.100921E+001 H2O2=OH+OH + 2.700000E+004 8 OH 45 3.323675E+006 HONO=OH+NO + 2.700000E+004 8 OH 46 8.259176E+003 HNO3=OH+NO2 + 2.700000E+004 8 OH 64 2.532358E+002 CH2OOA=HO2+CO+OH + 2.700000E+004 8 OH 73 1.193158E-006 ETHO2HNO3+OH=NO3CH2CHO+OH + 2.700000E+004 8 OH 74 7.872378E-007 ETHO2HNO3=ETHENO3O+OH + 2.700000E+004 8 OH 88 4.060893E+000 HYETHO2H+OH=HOCH2CHO+OH + 2.700000E+004 8 OH 89 3.145324E-001 HYETHO2H=HOCH2CH2O+OH + 2.700000E+004 8 OH 97 5.037550E-007 NO3CH2CO3+HO2=HCHO+NO2+OH + 2.700000E+004 8 OH 107 1.366702E-001 HOCH2CO3+HO2=HO2+HCHO+OH + 2.700000E+004 8 OH 122 4.169128E-009 NO3CH2CO3H=HCHO+NO2+OH + 2.700000E+004 8 OH 127 1.005184E-003 HOCH2CO3H=HCHO+HO2+OH + 2.700000E+004 8 OH 132 3.861569E+001 HCOCO=CO+OH + 2.700000E+004 8 OH 136 2.442872E-004 HCOCO3+HO2=HO2+CO+OH + 2.700000E+004 8 OH 144 1.220270E-006 HCOCO3H=HO2+CO+OH + 2.700000E+004 8 OH 145 4.179358E-006 HCOCO3H=HO2+CO+OH + 2.700000E+004 9 HO2 16 2.215678E+005 OH+O3=HO2 + 2.700000E+004 9 HO2 17 1.111119E+000 OH+H2=HO2 + 2.700000E+004 9 HO2 18 5.682220E+006 OH+CO=HO2 + 2.700000E+004 9 HO2 19 2.363295E+001 OH+H2O2=HO2 + 2.700000E+004 9 HO2 26 7.422233E+001 OH+NO3=HO2+NO2 + 2.700000E+004 9 HO2 35 0.000000E+000 HSO3=HO2+SO3 + 2.700000E+004 9 HO2 48 5.846925E+005 HO2NO2=HO2+NO2 + 2.700000E+004 9 HO2 58 2.617403E+004 HCHO=CO+HO2+HO2 + 2.700000E+004 9 HO2 60 1.595827E-001 NO3+HCHO=HNO3+CO+HO2 + 2.700000E+004 9 HO2 61 1.871710E+004 OH+HCHO=HO2+CO + 2.700000E+004 9 HO2 64 2.532358E+002 CH2OOA=HO2+CO+OH + 2.700000E+004 9 HO2 76 2.464991E-001 ETHENO3O=NO3CH2CHO+HO2 + 2.700000E+004 9 HO2 90 7.281123E+004 HOCH2CH2O=HO2+HCHO+HCHO + 2.700000E+004 9 HO2 91 2.834978E+004 HOCH2CH2O=HO2+HOCH2CHO + 2.700000E+004 9 HO2 92 2.093661E-003 ETHGLY+OH=HOCH2CHO+HO2 + 2.700000E+004 9 HO2 94 8.973135E+002 HOCH2CHO+OH=GLYOX+HO2 + 2.700000E+004 9 HO2 96 3.284890E+003 HOCH2CHO=HO2+HCHO+HO2+CO + 2.700000E+004 9 HO2 105 9.567411E-002 HCOCH2O=HCHO+CO+HO2 + 2.700000E+004 9 HO2 106 4.150924E+000 HCOOH+OH=HO2 + 2.700000E+004 9 HO2 107 1.366702E-001 HOCH2CO3+HO2=HO2+HCHO+OH + 2.700000E+004 9 HO2 110 2.561827E+003 HOCH2CO3+NO=NO2+HO2+HCHO + 2.700000E+004 9 HO2 112 5.462221E-003 HOCH2CO3+NO3=NO2+HO2+HCHO + 2.700000E+004 9 HO2 113 2.316530E-003 HOCH2CO3=HCHO+HO2 + 2.700000E+004 9 HO2 116 6.983917E+001 GLYOX=CO+CO+HO2+HO2 + 2.700000E+004 9 HO2 125 9.829209E-004 HOCH2CO2H+OH=HCHO+HO2 + 2.700000E+004 9 HO2 127 1.005184E-003 HOCH2CO3H=HCHO+HO2+OH + 2.700000E+004 9 HO2 130 7.869986E+000 HCOCO=CO+CO+HO2 + 2.700000E+004 9 HO2 131 1.422218E+001 HCOCO=CO+CO+HO2 + 2.700000E+004 9 HO2 136 2.442872E-004 HCOCO3+HO2=HO2+CO+OH + 2.700000E+004 9 HO2 137 4.579063E+000 HCOCO3+NO=HO2+CO+NO2 + 2.700000E+004 9 HO2 138 2.313242E+000 HCOCO3+NO2=HO2+CO+NO3 + 2.700000E+004 9 HO2 139 9.763289E-006 HCOCO3+NO3=HO2+CO+NO2 + 2.700000E+004 9 HO2 140 4.140615E-006 HCOCO3=CO+HO2 + 2.700000E+004 9 HO2 142 1.883629E-005 HCOCO2H=HO2+HO2+CO + 2.700000E+004 9 HO2 143 4.949327E-006 OH+HCOCO2H=CO+HO2 + 2.700000E+004 9 HO2 144 1.220270E-006 HCOCO3H=HO2+CO+OH + 2.700000E+004 9 HO2 145 4.179358E-006 HCOCO3H=HO2+CO+OH + 3.060000E+004 8 OH 15 3.396742E+006 O1D=OH+OH + 3.060000E+004 8 OH 20 1.380405E+004 HO2+O3=OH + 3.060000E+004 8 OH 27 5.726488E+006 HO2+NO=OH+NO2 + 3.060000E+004 8 OH 30 3.421050E+001 HO2+NO3=OH+NO2 + 3.060000E+004 8 OH 41 8.532345E+001 H2O2=OH+OH + 3.060000E+004 8 OH 45 2.869864E+006 HONO=OH+NO + 3.060000E+004 8 OH 46 1.482369E+004 HNO3=OH+NO2 + 3.060000E+004 8 OH 64 2.194666E+002 CH2OOA=HO2+CO+OH + 3.060000E+004 8 OH 73 2.452812E-006 ETHO2HNO3+OH=NO3CH2CHO+OH + 3.060000E+004 8 OH 74 1.583425E-006 ETHO2HNO3=ETHENO3O+OH + 3.060000E+004 8 OH 88 7.870969E+000 HYETHO2H+OH=HOCH2CHO+OH + 3.060000E+004 8 OH 89 5.964822E-001 HYETHO2H=HOCH2CH2O+OH + 3.060000E+004 8 OH 97 9.395930E-007 NO3CH2CO3+HO2=HCHO+NO2+OH + 3.060000E+004 8 OH 107 2.946403E-001 HOCH2CO3+HO2=HO2+HCHO+OH + 3.060000E+004 8 OH 122 1.617308E-008 NO3CH2CO3H=HCHO+NO2+OH + 3.060000E+004 8 OH 127 4.511439E-003 HOCH2CO3H=HCHO+HO2+OH + 3.060000E+004 8 OH 132 1.243111E+002 HCOCO=CO+OH + 3.060000E+004 8 OH 136 9.478962E-004 HCOCO3+HO2=HO2+CO+OH + 3.060000E+004 8 OH 144 9.740414E-006 HCOCO3H=HO2+CO+OH + 3.060000E+004 8 OH 145 3.289568E-005 HCOCO3H=HO2+CO+OH + 3.060000E+004 9 HO2 16 2.125165E+005 OH+O3=HO2 + 3.060000E+004 9 HO2 17 3.803105E+000 OH+H2=HO2 + 3.060000E+004 9 HO2 18 5.371256E+006 OH+CO=HO2 + 3.060000E+004 9 HO2 19 5.041078E+001 OH+H2O2=HO2 + 3.060000E+004 9 HO2 26 7.473717E+001 OH+NO3=HO2+NO2 + 3.060000E+004 9 HO2 35 0.000000E+000 HSO3=HO2+SO3 + 3.060000E+004 9 HO2 48 5.846126E+005 HO2NO2=HO2+NO2 + 3.060000E+004 9 HO2 58 3.933851E+004 HCHO=CO+HO2+HO2 + 3.060000E+004 9 HO2 60 2.772460E-001 NO3+HCHO=HNO3+CO+HO2 + 3.060000E+004 9 HO2 61 2.909829E+004 OH+HCHO=HO2+CO + 3.060000E+004 9 HO2 64 2.194666E+002 CH2OOA=HO2+CO+OH + 3.060000E+004 9 HO2 76 2.242522E-001 ETHENO3O=NO3CH2CHO+HO2 + 3.060000E+004 9 HO2 90 5.931358E+004 HOCH2CH2O=HO2+HCHO+HCHO + 3.060000E+004 9 HO2 91 2.309434E+004 HOCH2CH2O=HO2+HOCH2CHO + 3.060000E+004 9 HO2 92 3.859513E-003 ETHGLY+OH=HOCH2CHO+HO2 + 3.060000E+004 9 HO2 94 1.487621E+003 HOCH2CHO+OH=GLYOX+HO2 + 3.060000E+004 9 HO2 96 5.254143E+003 HOCH2CHO=HO2+HCHO+HO2+CO + 3.060000E+004 9 HO2 105 1.288851E-001 HCOCH2O=HCHO+CO+HO2 + 3.060000E+004 9 HO2 106 7.295505E+000 HCOOH+OH=HO2 + 3.060000E+004 9 HO2 107 2.946403E-001 HOCH2CO3+HO2=HO2+HCHO+OH + 3.060000E+004 9 HO2 110 4.518112E+003 HOCH2CO3+NO=NO2+HO2+HCHO + 3.060000E+004 9 HO2 112 1.159847E-002 HOCH2CO3+NO3=NO2+HO2+HCHO + 3.060000E+004 9 HO2 113 4.342582E-003 HOCH2CO3=HCHO+HO2 + 3.060000E+004 9 HO2 116 2.204154E+002 GLYOX=CO+CO+HO2+HO2 + 3.060000E+004 9 HO2 125 4.619565E-003 HOCH2CO2H+OH=HCHO+HO2 + 3.060000E+004 9 HO2 127 4.511439E-003 HOCH2CO3H=HCHO+HO2+OH + 3.060000E+004 9 HO2 130 2.533495E+001 HCOCO=CO+CO+HO2 + 3.060000E+004 9 HO2 131 4.578383E+001 HCOCO=CO+CO+HO2 + 3.060000E+004 9 HO2 136 9.478962E-004 HCOCO3+HO2=HO2+CO+OH + 3.060000E+004 9 HO2 137 1.453536E+001 HCOCO3+NO=HO2+CO+NO2 + 3.060000E+004 9 HO2 138 7.722796E+000 HCOCO3+NO2=HO2+CO+NO3 + 3.060000E+004 9 HO2 139 3.731379E-005 HCOCO3+NO3=HO2+CO+NO2 + 3.060000E+004 9 HO2 140 1.397065E-005 HCOCO3=CO+HO2 + 3.060000E+004 9 HO2 142 1.474739E-004 HCOCO2H=HO2+HO2+CO + 3.060000E+004 9 HO2 143 3.788601E-005 OH+HCOCO2H=CO+HO2 + 3.060000E+004 9 HO2 144 9.740414E-006 HCOCO3H=HO2+CO+OH + 3.060000E+004 9 HO2 145 3.289568E-005 HCOCO3H=HO2+CO+OH + 3.420000E+004 8 OH 15 2.392025E+006 O1D=OH+OH + 3.420000E+004 8 OH 20 1.214561E+004 HO2+O3=OH + 3.420000E+004 8 OH 27 4.356926E+006 HO2+NO=OH+NO2 + 3.420000E+004 8 OH 30 3.278958E+001 HO2+NO3=OH+NO2 + 3.420000E+004 8 OH 41 1.080381E+002 H2O2=OH+OH + 3.420000E+004 8 OH 45 1.975601E+006 HONO=OH+NO + 3.420000E+004 8 OH 46 1.609572E+004 HNO3=OH+NO2 + 3.420000E+004 8 OH 64 1.938783E+002 CH2OOA=HO2+CO+OH + 3.420000E+004 8 OH 73 2.841066E-006 ETHO2HNO3+OH=NO3CH2CHO+OH + 3.420000E+004 8 OH 74 2.054624E-006 ETHO2HNO3=ETHENO3O+OH + 3.420000E+004 8 OH 88 7.756254E+000 HYETHO2H+OH=HOCH2CHO+OH + 3.420000E+004 8 OH 89 6.584743E-001 HYETHO2H=HOCH2CH2O+OH + 3.420000E+004 8 OH 97 9.459267E-007 NO3CH2CO3+HO2=HCHO+NO2+OH + 3.420000E+004 8 OH 107 2.960771E-001 HOCH2CO3+HO2=HO2+HCHO+OH + 3.420000E+004 8 OH 122 2.708045E-008 NO3CH2CO3H=HCHO+NO2+OH + 3.420000E+004 8 OH 127 7.858380E-003 HOCH2CO3H=HCHO+HO2+OH + 3.420000E+004 8 OH 132 1.535237E+002 HCOCO=CO+OH + 3.420000E+004 8 OH 136 1.128296E-003 HCOCO3+HO2=HO2+CO+OH + 3.420000E+004 8 OH 144 2.047918E-005 HCOCO3H=HO2+CO+OH + 3.420000E+004 8 OH 145 6.711531E-005 HCOCO3H=HO2+CO+OH + 3.420000E+004 9 HO2 16 1.633187E+005 OH+O3=HO2 + 3.420000E+004 9 HO2 17 5.422633E+000 OH+H2=HO2 + 3.420000E+004 9 HO2 18 4.080574E+006 OH+CO=HO2 + 3.420000E+004 9 HO2 19 5.734272E+001 OH+H2O2=HO2 + 3.420000E+004 9 HO2 26 6.256677E+001 OH+NO3=HO2+NO2 + 3.420000E+004 9 HO2 35 0.000000E+000 HSO3=HO2+SO3 + 3.420000E+004 9 HO2 48 4.897041E+005 HO2NO2=HO2+NO2 + 3.420000E+004 9 HO2 58 3.774531E+004 HCHO=CO+HO2+HO2 + 3.420000E+004 9 HO2 60 3.510543E-001 NO3+HCHO=HNO3+CO+HO2 + 3.420000E+004 9 HO2 61 2.558343E+004 OH+HCHO=HO2+CO + 3.420000E+004 9 HO2 64 1.938783E+002 CH2OOA=HO2+CO+OH + 3.420000E+004 9 HO2 76 2.158054E-001 ETHENO3O=NO3CH2CHO+HO2 + 3.420000E+004 9 HO2 90 3.960824E+004 HOCH2CH2O=HO2+HCHO+HCHO + 3.420000E+004 9 HO2 91 1.542187E+004 HOCH2CH2O=HO2+HOCH2CHO + 3.420000E+004 9 HO2 92 3.652461E-003 ETHGLY+OH=HOCH2CHO+HO2 + 3.420000E+004 9 HO2 94 1.387170E+003 HOCH2CHO+OH=GLYOX+HO2 + 3.420000E+004 9 HO2 96 5.326043E+003 HOCH2CHO=HO2+HCHO+HO2+CO + 3.420000E+004 9 HO2 105 1.262054E-001 HCOCH2O=HCHO+CO+HO2 + 3.420000E+004 9 HO2 106 7.779484E+000 HCOOH+OH=HO2 + 3.420000E+004 9 HO2 107 2.960771E-001 HOCH2CO3+HO2=HO2+HCHO+OH + 3.420000E+004 9 HO2 110 4.533498E+003 HOCH2CO3+NO=NO2+HO2+HCHO + 3.420000E+004 9 HO2 112 1.466094E-002 HOCH2CO3+NO3=NO2+HO2+HCHO + 3.420000E+004 9 HO2 113 3.879663E-003 HOCH2CO3=HCHO+HO2 + 3.420000E+004 9 HO2 116 3.040167E+002 GLYOX=CO+CO+HO2+HO2 + 3.420000E+004 9 HO2 125 7.350617E-003 HOCH2CO2H+OH=HCHO+HO2 + 3.420000E+004 9 HO2 127 7.858380E-003 HOCH2CO3H=HCHO+HO2+OH + 3.420000E+004 9 HO2 130 3.128857E+001 HCOCO=CO+CO+HO2 + 3.420000E+004 9 HO2 131 5.654287E+001 HCOCO=CO+CO+HO2 + 3.420000E+004 9 HO2 136 1.128296E-003 HCOCO3+HO2=HO2+CO+OH + 3.420000E+004 9 HO2 137 1.727634E+001 HCOCO3+NO=HO2+CO+NO2 + 3.420000E+004 9 HO2 138 1.008234E+001 HCOCO3+NO2=HO2+CO+NO3 + 3.420000E+004 9 HO2 139 5.587019E-005 HCOCO3+NO3=HO2+CO+NO2 + 3.420000E+004 9 HO2 140 1.478470E-005 HCOCO3=CO+HO2 + 3.420000E+004 9 HO2 142 3.128734E-004 HCOCO2H=HO2+HO2+CO + 3.420000E+004 9 HO2 143 6.539885E-005 OH+HCOCO2H=CO+HO2 + 3.420000E+004 9 HO2 144 2.047918E-005 HCOCO3H=HO2+CO+OH + 3.420000E+004 9 HO2 145 6.711531E-005 HCOCO3H=HO2+CO+OH + 3.780000E+004 8 OH 15 1.253850E+006 O1D=OH+OH + 3.780000E+004 8 OH 20 7.849545E+003 HO2+O3=OH + 3.780000E+004 8 OH 27 2.407412E+006 HO2+NO=OH+NO2 + 3.780000E+004 8 OH 30 2.467842E+001 HO2+NO3=OH+NO2 + 3.780000E+004 8 OH 41 9.646266E+001 H2O2=OH+OH + 3.780000E+004 8 OH 45 1.005338E+006 HONO=OH+NO + 3.780000E+004 8 OH 46 1.206195E+004 HNO3=OH+NO2 + 3.780000E+004 8 OH 64 1.776933E+002 CH2OOA=HO2+CO+OH + 3.780000E+004 8 OH 73 2.033180E-006 ETHO2HNO3+OH=NO3CH2CHO+OH + 3.780000E+004 8 OH 74 1.993259E-006 ETHO2HNO3=ETHENO3O+OH + 3.780000E+004 8 OH 88 4.513372E+000 HYETHO2H+OH=HOCH2CHO+OH + 3.780000E+004 8 OH 89 5.194275E-001 HYETHO2H=HOCH2CH2O+OH + 3.780000E+004 8 OH 97 5.390767E-007 NO3CH2CO3+HO2=HCHO+NO2+OH + 3.780000E+004 8 OH 107 1.519909E-001 HOCH2CO3+HO2=HO2+HCHO+OH + 3.780000E+004 8 OH 122 2.756230E-008 NO3CH2CO3H=HCHO+NO2+OH + 3.780000E+004 8 OH 127 7.898782E-003 HOCH2CO3H=HCHO+HO2+OH + 3.780000E+004 8 OH 132 9.785523E+001 HCOCO=CO+OH + 3.780000E+004 8 OH 136 5.104886E-004 HCOCO3+HO2=HO2+CO+OH + 3.780000E+004 8 OH 144 2.068037E-005 HCOCO3H=HO2+CO+OH + 3.780000E+004 8 OH 145 6.410007E-005 HCOCO3H=HO2+CO+OH + 3.780000E+004 9 HO2 16 9.026490E+004 OH+O3=HO2 + 3.780000E+004 9 HO2 17 4.234773E+000 OH+H2=HO2 + 3.780000E+004 9 HO2 18 2.246608E+006 OH+CO=HO2 + 3.780000E+004 9 HO2 19 3.818066E+001 OH+H2O2=HO2 + 3.780000E+004 9 HO2 26 4.027012E+001 OH+NO3=HO2+NO2 + 3.780000E+004 9 HO2 35 0.000000E+000 HSO3=HO2+SO3 + 3.780000E+004 9 HO2 48 3.208619E+005 HO2NO2=HO2+NO2 + 3.780000E+004 9 HO2 58 2.713318E+004 HCHO=CO+HO2+HO2 + 3.780000E+004 9 HO2 60 4.136801E-001 NO3+HCHO=HNO3+CO+HO2 + 3.780000E+004 9 HO2 61 1.426505E+004 OH+HCHO=HO2+CO + 3.780000E+004 9 HO2 64 1.776933E+002 CH2OOA=HO2+CO+OH + 3.780000E+004 9 HO2 76 2.302334E-001 ETHENO3O=NO3CH2CHO+HO2 + 3.780000E+004 9 HO2 90 2.007526E+004 HOCH2CH2O=HO2+HCHO+HCHO + 3.780000E+004 9 HO2 91 7.816503E+003 HOCH2CH2O=HO2+HOCH2CHO + 3.780000E+004 9 HO2 92 2.091059E-003 ETHGLY+OH=HOCH2CHO+HO2 + 3.780000E+004 9 HO2 94 8.191962E+002 HOCH2CHO+OH=GLYOX+HO2 + 3.780000E+004 9 HO2 96 4.032656E+003 HOCH2CHO=HO2+HCHO+HO2+CO + 3.780000E+004 9 HO2 105 1.031314E-001 HCOCH2O=HCHO+CO+HO2 + 3.780000E+004 9 HO2 106 5.393641E+000 HCOOH+OH=HO2 + 3.780000E+004 9 HO2 107 1.519909E-001 HOCH2CO3+HO2=HO2+HCHO+OH + 3.780000E+004 9 HO2 110 3.087939E+003 HOCH2CO3+NO=NO2+HO2+HCHO + 3.780000E+004 9 HO2 112 1.360217E-002 HOCH2CO3+NO3=NO2+HO2+HCHO + 3.780000E+004 9 HO2 113 1.844002E-003 HOCH2CO3=HCHO+HO2 + 3.780000E+004 9 HO2 116 2.631728E+002 GLYOX=CO+CO+HO2+HO2 + 3.780000E+004 9 HO2 125 5.562444E-003 HOCH2CO2H+OH=HCHO+HO2 + 3.780000E+004 9 HO2 127 7.898782E-003 HOCH2CO3H=HCHO+HO2+OH + 3.780000E+004 9 HO2 130 1.994317E+001 HCOCO=CO+CO+HO2 + 3.780000E+004 9 HO2 131 3.604013E+001 HCOCO=CO+CO+HO2 + 3.780000E+004 9 HO2 136 5.104886E-004 HCOCO3+HO2=HO2+CO+OH + 3.780000E+004 9 HO2 137 1.037140E+001 HCOCO3+NO=HO2+CO+NO2 + 3.780000E+004 9 HO2 138 7.152689E+000 HCOCO3+NO2=HO2+CO+NO3 + 3.780000E+004 9 HO2 139 4.568533E-005 HCOCO3+NO3=HO2+CO+NO2 + 3.780000E+004 9 HO2 140 6.193412E-006 HCOCO3=CO+HO2 + 3.780000E+004 9 HO2 142 3.251979E-004 HCOCO2H=HO2+HO2+CO + 3.780000E+004 9 HO2 143 4.257738E-005 OH+HCOCO2H=CO+HO2 + 3.780000E+004 9 HO2 144 2.068037E-005 HCOCO3H=HO2+CO+OH + 3.780000E+004 9 HO2 145 6.410007E-005 HCOCO3H=HO2+CO+OH + 4.140000E+004 8 OH 15 3.488080E+005 O1D=OH+OH + 4.140000E+004 8 OH 20 3.015456E+003 HO2+O3=OH + 4.140000E+004 8 OH 27 7.243348E+005 HO2+NO=OH+NO2 + 4.140000E+004 8 OH 30 1.327229E+001 HO2+NO3=OH+NO2 + 4.140000E+004 8 OH 41 5.699138E+001 H2O2=OH+OH + 4.140000E+004 8 OH 45 2.940675E+005 HONO=OH+NO + 4.140000E+004 8 OH 46 5.360096E+003 HNO3=OH+NO2 + 4.140000E+004 8 OH 64 1.688799E+002 CH2OOA=HO2+CO+OH + 4.140000E+004 8 OH 73 7.127871E-007 ETHO2HNO3+OH=NO3CH2CHO+OH + 4.140000E+004 8 OH 74 1.305305E-006 ETHO2HNO3=ETHENO3O+OH + 4.140000E+004 8 OH 88 1.314729E+000 HYETHO2H+OH=HOCH2CHO+OH + 4.140000E+004 8 OH 89 2.826341E-001 HYETHO2H=HOCH2CH2O+OH + 4.140000E+004 8 OH 97 1.416239E-007 NO3CH2CO3+HO2=HCHO+NO2+OH + 4.140000E+004 8 OH 107 3.517456E-002 HOCH2CO3+HO2=HO2+HCHO+OH + 4.140000E+004 8 OH 122 1.692645E-008 NO3CH2CO3H=HCHO+NO2+OH + 4.140000E+004 8 OH 127 4.757095E-003 HOCH2CO3H=HCHO+HO2+OH + 4.140000E+004 8 OH 132 3.000590E+001 HCOCO=CO+OH + 4.140000E+004 8 OH 136 6.274271E-005 HCOCO3+HO2=HO2+CO+OH + 4.140000E+004 8 OH 144 1.172062E-005 HCOCO3H=HO2+CO+OH + 4.140000E+004 8 OH 145 3.241248E-005 HCOCO3H=HO2+CO+OH + 4.140000E+004 9 HO2 16 2.664537E+004 OH+O3=HO2 + 4.140000E+004 9 HO2 17 1.517295E+000 OH+H2=HO2 + 4.140000E+004 9 HO2 18 6.691021E+005 OH+CO=HO2 + 4.140000E+004 9 HO2 19 1.230508E+001 OH+H2O2=HO2 + 4.140000E+004 9 HO2 26 1.664201E+001 OH+NO3=HO2+NO2 + 4.140000E+004 9 HO2 35 0.000000E+000 HSO3=HO2+SO3 + 4.140000E+004 9 HO2 48 1.384439E+005 HO2NO2=HO2+NO2 + 4.140000E+004 9 HO2 58 1.302993E+004 HCHO=CO+HO2+HO2 + 4.140000E+004 9 HO2 60 5.514376E-001 NO3+HCHO=HNO3+CO+HO2 + 4.140000E+004 9 HO2 61 4.089874E+003 OH+HCHO=HO2+CO + 4.140000E+004 9 HO2 64 1.688799E+002 CH2OOA=HO2+CO+OH + 4.140000E+004 9 HO2 76 3.065561E-001 ETHENO3O=NO3CH2CHO+HO2 + 4.140000E+004 9 HO2 90 5.494332E+003 HOCH2CH2O=HO2+HCHO+HCHO + 4.140000E+004 9 HO2 91 2.139274E+003 HOCH2CH2O=HO2+HOCH2CHO + 4.140000E+004 9 HO2 92 6.117110E-004 ETHGLY+OH=HOCH2CHO+HO2 + 4.140000E+004 9 HO2 94 2.472522E+002 HOCH2CHO+OH=GLYOX+HO2 + 4.140000E+004 9 HO2 96 2.028472E+003 HOCH2CHO=HO2+HCHO+HO2+CO + 4.140000E+004 9 HO2 105 6.215673E-002 HCOCH2O=HCHO+CO+HO2 + 4.140000E+004 9 HO2 106 1.917289E+000 HCOOH+OH=HO2 + 4.140000E+004 9 HO2 107 3.517456E-002 HOCH2CO3+HO2=HO2+HCHO+OH + 4.140000E+004 9 HO2 110 1.428333E+003 HOCH2CO3+NO=NO2+HO2+HCHO + 4.140000E+004 9 HO2 112 1.124627E-002 HOCH2CO3+NO3=NO2+HO2+HCHO + 4.140000E+004 9 HO2 113 4.184220E-004 HOCH2CO3=HCHO+HO2 + 4.140000E+004 9 HO2 116 1.393840E+002 GLYOX=CO+CO+HO2+HO2 + 4.140000E+004 9 HO2 125 1.819212E-003 HOCH2CO2H+OH=HCHO+HO2 + 4.140000E+004 9 HO2 127 4.757095E-003 HOCH2CO3H=HCHO+HO2+OH + 4.140000E+004 9 HO2 130 6.115286E+000 HCOCO=CO+CO+HO2 + 4.140000E+004 9 HO2 131 1.105119E+001 HCOCO=CO+CO+HO2 + 4.140000E+004 9 HO2 136 6.274271E-005 HCOCO3+HO2=HO2+CO+OH + 4.140000E+004 9 HO2 137 2.547792E+000 HCOCO3+NO=HO2+CO+NO2 + 4.140000E+004 9 HO2 138 2.504451E+000 HCOCO3+NO2=HO2+CO+NO3 + 4.140000E+004 9 HO2 139 2.006057E-005 HCOCO3+NO3=HO2+CO+NO2 + 4.140000E+004 9 HO2 140 7.463614E-007 HCOCO3=CO+HO2 + 4.140000E+004 9 HO2 142 2.046182E-004 HCOCO2H=HO2+HO2+CO + 4.140000E+004 9 HO2 143 1.058268E-005 OH+HCOCO2H=CO+HO2 + 4.140000E+004 9 HO2 144 1.172062E-005 HCOCO3H=HO2+CO+OH + 4.140000E+004 9 HO2 145 3.241248E-005 HCOCO3H=HO2+CO+OH + 4.500000E+004 8 OH 15 5.845277E+003 O1D=OH+OH + 4.500000E+004 8 OH 20 4.137510E+002 HO2+O3=OH + 4.500000E+004 8 OH 27 3.288187E+004 HO2+NO=OH+NO2 + 4.500000E+004 8 OH 30 6.852786E+000 HO2+NO3=OH+NO2 + 4.500000E+004 8 OH 41 7.497904E+000 H2O2=OH+OH + 4.500000E+004 8 OH 45 2.016773E+004 HONO=OH+NO + 4.500000E+004 8 OH 46 3.461632E+002 HNO3=OH+NO2 + 4.500000E+004 8 OH 64 1.612858E+002 CH2OOA=HO2+CO+OH + 4.500000E+004 8 OH 73 3.503117E-008 ETHO2HNO3+OH=NO3CH2CHO+OH + 4.500000E+004 8 OH 74 1.925499E-007 ETHO2HNO3=ETHENO3O+OH + 4.500000E+004 8 OH 88 5.642734E-002 HYETHO2H+OH=HOCH2CHO+OH + 4.500000E+004 8 OH 89 3.640944E-002 HYETHO2H=HOCH2CH2O+OH + 4.500000E+004 8 OH 97 1.379016E-008 NO3CH2CO3+HO2=HCHO+NO2+OH + 4.500000E+004 8 OH 107 3.580825E-003 HOCH2CO3+HO2=HO2+HCHO+OH + 4.500000E+004 8 OH 122 2.241614E-009 NO3CH2CO3H=HCHO+NO2+OH + 4.500000E+004 8 OH 127 6.269992E-004 HOCH2CO3H=HCHO+HO2+OH + 4.500000E+004 8 OH 132 1.176945E+000 HCOCO=CO+OH + 4.500000E+004 8 OH 136 4.588513E-007 HCOCO3+HO2=HO2+CO+OH + 4.500000E+004 8 OH 144 1.502193E-006 HCOCO3H=HO2+CO+OH + 4.500000E+004 8 OH 145 2.760326E-006 HCOCO3H=HO2+CO+OH + 4.500000E+004 9 HO2 16 1.117582E+003 OH+O3=HO2 + 4.500000E+004 9 HO2 17 7.038076E-002 OH+H2=HO2 + 4.500000E+004 9 HO2 18 2.909103E+004 OH+CO=HO2 + 4.500000E+004 9 HO2 19 5.625889E-001 OH+H2O2=HO2 + 4.500000E+004 9 HO2 26 2.626629E+000 OH+NO3=HO2+NO2 + 4.500000E+004 9 HO2 35 0.000000E+000 HSO3=HO2+SO3 + 4.500000E+004 9 HO2 48 2.599987E+004 HO2NO2=HO2+NO2 + 4.500000E+004 9 HO2 58 1.072616E+003 HCHO=CO+HO2+HO2 + 4.500000E+004 9 HO2 60 1.952745E+000 NO3+HCHO=HNO3+CO+HO2 + 4.500000E+004 9 HO2 61 1.735258E+002 OH+HCHO=HO2+CO + 4.500000E+004 9 HO2 64 1.612858E+002 CH2OOA=HO2+CO+OH + 4.500000E+004 9 HO2 76 1.082220E+000 ETHENO3O=NO3CH2CHO+HO2 + 4.500000E+004 9 HO2 90 2.483535E+002 HOCH2CH2O=HO2+HCHO+HCHO + 4.500000E+004 9 HO2 91 9.669894E+001 HOCH2CH2O=HO2+HOCH2CHO + 4.500000E+004 9 HO2 92 2.637669E-005 ETHGLY+OH=HOCH2CHO+HO2 + 4.500000E+004 9 HO2 94 1.072816E+001 HOCH2CHO+OH=GLYOX+HO2 + 4.500000E+004 9 HO2 96 1.755348E+002 HOCH2CHO=HO2+HCHO+HO2+CO + 4.500000E+004 9 HO2 105 7.715841E-003 HCOCH2O=HCHO+CO+HO2 + 4.500000E+004 9 HO2 106 9.636251E-002 HCOOH+OH=HO2 + 4.500000E+004 9 HO2 107 3.580825E-003 HOCH2CO3+HO2=HO2+HCHO+OH + 4.500000E+004 9 HO2 110 3.261718E+002 HOCH2CO3+NO=NO2+HO2+HCHO + 4.500000E+004 9 HO2 112 2.920987E-002 HOCH2CO3+NO3=NO2+HO2+HCHO + 4.500000E+004 9 HO2 113 5.386647E-005 HOCH2CO3=HCHO+HO2 + 4.500000E+004 9 HO2 116 1.483223E+001 GLYOX=CO+CO+HO2+HO2 + 4.500000E+004 9 HO2 125 8.026569E-005 HOCH2CO2H+OH=HCHO+HO2 + 4.500000E+004 9 HO2 127 6.269992E-004 HOCH2CO3H=HCHO+HO2+OH + 4.500000E+004 9 HO2 130 2.398647E-001 HCOCO=CO+CO+HO2 + 4.500000E+004 9 HO2 131 4.334695E-001 HCOCO=CO+CO+HO2 + 4.500000E+004 9 HO2 136 4.588513E-007 HCOCO3+HO2=HO2+CO+OH + 4.500000E+004 9 HO2 137 4.179606E-002 HCOCO3+NO=HO2+CO+NO2 + 4.500000E+004 9 HO2 138 1.682870E-001 HCOCO3+NO2=HO2+CO+NO3 + 4.500000E+004 9 HO2 139 3.742989E-006 HCOCO3+NO3=HO2+CO+NO2 + 4.500000E+004 9 HO2 140 6.902516E-009 HCOCO3=CO+HO2 + 4.500000E+004 9 HO2 142 5.283670E-005 HCOCO2H=HO2+HO2+CO + 4.500000E+004 9 HO2 143 3.828657E-007 OH+HCOCO2H=CO+HO2 + 4.500000E+004 9 HO2 144 1.502193E-006 HCOCO3H=HO2+CO+OH + 4.500000E+004 9 HO2 145 2.760326E-006 HCOCO3H=HO2+CO+OH + 4.860000E+004 8 OH 15 1.212316E-090 O1D=OH+OH + 4.860000E+004 8 OH 20 3.073130E+002 HO2+O3=OH + 4.860000E+004 8 OH 27 2.747053E+000 HO2+NO=OH+NO2 + 4.860000E+004 8 OH 30 4.341795E+002 HO2+NO3=OH+NO2 + 4.860000E+004 8 OH 41 0.000000E+000 H2O2=OH+OH + 4.860000E+004 8 OH 45 0.000000E+000 HONO=OH+NO + 4.860000E+004 8 OH 46 0.000000E+000 HNO3=OH+NO2 + 4.860000E+004 8 OH 64 1.568221E+002 CH2OOA=HO2+CO+OH + 4.860000E+004 8 OH 73 1.488766E-007 ETHO2HNO3+OH=NO3CH2CHO+OH + 4.860000E+004 8 OH 74 0.000000E+000 ETHO2HNO3=ETHENO3O+OH + 4.860000E+004 8 OH 88 8.812371E-004 HYETHO2H+OH=HOCH2CHO+OH + 4.860000E+004 8 OH 89 0.000000E+000 HYETHO2H=HOCH2CH2O+OH + 4.860000E+004 8 OH 97 1.491807E-007 NO3CH2CO3+HO2=HCHO+NO2+OH + 4.860000E+004 8 OH 107 3.624699E-003 HOCH2CO3+HO2=HO2+HCHO+OH + 4.860000E+004 8 OH 122 0.000000E+000 NO3CH2CO3H=HCHO+NO2+OH + 4.860000E+004 8 OH 127 0.000000E+000 HOCH2CO3H=HCHO+HO2+OH + 4.860000E+004 8 OH 132 3.986542E+000 HCOCO=CO+OH + 4.860000E+004 8 OH 136 1.434278E-006 HCOCO3+HO2=HO2+CO+OH + 4.860000E+004 8 OH 144 0.000000E+000 HCOCO3H=HO2+CO+OH + 4.860000E+004 8 OH 145 0.000000E+000 HCOCO3H=HO2+CO+OH + 4.860000E+004 9 HO2 16 1.702313E+001 OH+O3=HO2 + 4.860000E+004 9 HO2 17 1.101256E-003 OH+H2=HO2 + 4.860000E+004 9 HO2 18 4.543628E+002 OH+CO=HO2 + 4.860000E+004 9 HO2 19 9.223576E-003 OH+H2O2=HO2 + 4.860000E+004 9 HO2 26 3.412864E+000 OH+NO3=HO2+NO2 + 4.860000E+004 9 HO2 35 0.000000E+000 HSO3=HO2+SO3 + 4.860000E+004 9 HO2 48 1.983086E+004 HO2NO2=HO2+NO2 + 4.860000E+004 9 HO2 58 0.000000E+000 HCHO=CO+HO2+HO2 + 4.860000E+004 9 HO2 60 1.633775E+002 NO3+HCHO=HNO3+CO+HO2 + 4.860000E+004 9 HO2 61 2.725711E+000 OH+HCHO=HO2+CO + 4.860000E+004 9 HO2 64 1.568221E+002 CH2OOA=HO2+CO+OH + 4.860000E+004 9 HO2 76 6.645706E+001 ETHENO3O=NO3CH2CHO+HO2 + 4.860000E+004 9 HO2 90 3.339452E+000 HOCH2CH2O=HO2+HCHO+HCHO + 4.860000E+004 9 HO2 91 1.300249E+000 HOCH2CH2O=HO2+HOCH2CHO + 4.860000E+004 9 HO2 92 4.129168E-007 ETHGLY+OH=HOCH2CHO+HO2 + 4.860000E+004 9 HO2 94 1.673127E-001 HOCH2CHO+OH=GLYOX+HO2 + 4.860000E+004 9 HO2 96 0.000000E+000 HOCH2CHO=HO2+HCHO+HO2+CO + 4.860000E+004 9 HO2 105 6.850535E-081 HCOCH2O=HCHO+CO+HO2 + 4.860000E+004 9 HO2 106 1.700840E-003 HCOOH+OH=HO2 + 4.860000E+004 9 HO2 107 3.624699E-003 HOCH2CO3+HO2=HO2+HCHO+OH + 4.860000E+004 9 HO2 110 4.755462E-002 HOCH2CO3+NO=NO2+HO2+HCHO + 4.860000E+004 9 HO2 112 3.229740E+000 HOCH2CO3+NO3=NO2+HO2+HCHO + 4.860000E+004 9 HO2 113 1.268622E-003 HOCH2CO3=HCHO+HO2 + 4.860000E+004 9 HO2 116 0.000000E+000 GLYOX=CO+CO+HO2+HO2 + 4.860000E+004 9 HO2 125 1.258168E-006 HOCH2CO2H+OH=HCHO+HO2 + 4.860000E+004 9 HO2 127 0.000000E+000 HOCH2CO3H=HCHO+HO2+OH + 4.860000E+004 9 HO2 130 8.124684E-001 HCOCO=CO+CO+HO2 + 4.860000E+004 9 HO2 131 1.468245E+000 HCOCO=CO+CO+HO2 + 4.860000E+004 9 HO2 136 1.434278E-006 HCOCO3+HO2=HO2+CO+OH + 4.860000E+004 9 HO2 137 1.881715E-005 HCOCO3+NO=HO2+CO+NO2 + 4.860000E+004 9 HO2 138 7.103098E-001 HCOCO3+NO2=HO2+CO+NO3 + 4.860000E+004 9 HO2 139 1.277994E-003 HCOCO3+NO3=HO2+CO+NO2 + 4.860000E+004 9 HO2 140 5.019881E-007 HCOCO3=CO+HO2 + 4.860000E+004 9 HO2 142 0.000000E+000 HCOCO2H=HO2+HO2+CO + 4.860000E+004 9 HO2 143 5.900741E-009 OH+HCOCO2H=CO+HO2 + 4.860000E+004 9 HO2 144 0.000000E+000 HCOCO3H=HO2+CO+OH + 4.860000E+004 9 HO2 145 0.000000E+000 HCOCO3H=HO2+CO+OH diff --git a/tests/model_tests/spec_model_1/output/reactionRates/25200.cmp b/tests/model_tests/spec_model_1/output/reactionRates/25200.cmp new file mode 100644 index 000000000..d751380d6 --- /dev/null +++ b/tests/model_tests/spec_model_1/output/reactionRates/25200.cmp @@ -0,0 +1,147 @@ + reactionNumber reactionRate +1 7.464574E+008 +2 2.145640E+008 +3 5.705864E+001 +4 2.096212E+003 +5 1.073918E+004 +6 2.126017E+003 +7 5.296995E+006 +8 1.531787E+007 +9 6.643100E+008 +10 1.363865E+006 +11 4.759726E+002 +12 1.247764E+006 +13 3.115651E+001 +14 6.505459E+004 +15 2.034546E+006 +16 2.022386E+005 +17 2.494118E-001 +18 5.223211E+006 +19 9.369915E+000 +20 1.093098E+004 +21 5.060077E+003 +22 2.862198E+002 +23 2.150021E+002 +24 3.288220E+006 +25 3.715904E+006 +26 6.695863E+001 +27 5.529782E+006 +28 5.303916E+005 +29 3.275975E+002 +30 2.550411E+001 +31 4.479763E+004 +32 4.623432E+003 +33 0.000000E+000 +34 0.000000E+000 +35 0.000000E+000 +36 3.455209E+004 +37 1.314200E+003 +38 0.000000E+000 +39 2.264940E+007 +40 2.708812E+008 +41 8.968387E+000 +42 6.694347E+008 +43 1.535443E+004 +44 1.061188E+005 +45 2.981673E+006 +46 3.861992E+003 +47 6.380502E+004 +48 5.279616E+005 +49 3.027587E-001 +50 2.089332E+003 +51 1.005529E+005 +52 4.262013E-005 +53 3.027346E-001 +54 7.533156E-007 +55 2.699093E-008 +56 8.996975E-009 +57 8.996975E-009 +58 6.753518E+003 +59 1.031868E+004 +60 7.992121E-002 +61 8.743703E+003 +62 7.730508E+002 +63 1.044663E+003 +64 2.716124E+002 +65 1.922435E+001 +66 5.025526E+002 +67 1.000080E+005 +68 2.501073E-001 +69 9.281010E-003 +70 2.784303E-002 +71 9.281010E-003 +72 1.096745E-006 +73 4.872423E-007 +74 3.544767E-007 +75 4.140201E-002 +76 2.613245E-001 +77 3.201189E+000 +78 7.229956E-007 +79 7.123373E-003 +80 5.762332E-002 +81 7.761331E-001 +82 9.283467E-002 +83 1.020108E-002 +84 0.000000E+000 +85 2.895662E+002 +86 4.826104E+002 +87 4.068958E-001 +88 1.539879E+000 +89 1.315119E-001 +90 7.199136E+004 +91 2.803056E+004 +92 8.135805E-004 +93 6.975705E-002 +94 4.042865E+002 +95 1.617146E+003 +96 8.177318E+002 +97 2.158100E-007 +98 7.357158E-008 +99 2.010957E-007 +100 4.941893E-003 +101 2.467533E-003 +102 9.794181E-009 +103 3.921527E-009 +104 1.680655E-009 +105 5.762335E-002 +106 1.989838E+000 +107 4.879696E-002 +108 1.663533E-002 +109 4.546989E-002 +110 1.117415E+003 +111 5.579357E+002 +112 2.214570E-003 +113 8.866996E-004 +114 3.800141E-004 +115 1.638429E+001 +116 8.074367E+000 +117 2.470210E+000 +118 4.915586E-004 +119 1.417907E+001 +120 4.673018E-011 +121 2.666237E-009 +122 8.656650E-010 +123 1.061086E-007 +124 2.942735E-004 +125 1.546224E-004 +126 9.264889E-004 +127 1.764035E-004 +128 2.157296E+000 +129 5.982878E+001 +130 1.647309E+000 +131 2.976920E+000 +132 8.082856E+000 +133 1.443288E+000 +134 1.432021E-005 +135 3.914190E-005 +136 4.200595E-005 +137 9.619059E-001 +138 4.802885E-001 +139 1.906371E-006 +140 7.632987E-007 +141 3.271280E-007 +142 8.237186E-007 +143 3.952978E-007 +144 1.043129E-007 +145 3.580403E-007 +146 1.398419E-006 diff --git a/tests/model_tests/spec_model_1/output/reactionRates/27000.cmp b/tests/model_tests/spec_model_1/output/reactionRates/27000.cmp new file mode 100644 index 000000000..99399e92e --- /dev/null +++ b/tests/model_tests/spec_model_1/output/reactionRates/27000.cmp @@ -0,0 +1,147 @@ + reactionNumber reactionRate +1 7.204699E+008 +2 2.070941E+008 +3 5.534788E+001 +4 1.912298E+003 +5 9.912114E+003 +6 1.962284E+003 +7 5.185260E+006 +8 1.499475E+007 +9 6.310286E+008 +10 1.310764E+006 +11 4.252076E+002 +12 1.199213E+006 +13 3.029615E+001 +14 6.325816E+004 +15 1.991629E+006 +16 2.215678E+005 +17 1.111119E+000 +18 5.682220E+006 +19 2.363295E+001 +20 1.268479E+004 +21 6.369222E+003 +22 3.816020E+002 +23 2.866511E+002 +24 3.388006E+006 +25 3.873670E+006 +26 7.422233E+001 +27 6.034940E+006 +28 5.856478E+005 +29 3.954937E+002 +30 2.994469E+001 +31 5.479423E+004 +32 1.097701E+004 +33 0.000000E+000 +34 0.000000E+000 +35 0.000000E+000 +36 7.525232E+004 +37 1.277433E+003 +38 0.000000E+000 +39 2.217164E+007 +40 2.710187E+008 +41 2.050461E+001 +42 6.362716E+008 +43 1.556181E+004 +44 1.075466E+005 +45 3.323675E+006 +46 8.259176E+003 +47 6.201996E+004 +48 5.846925E+005 +49 2.855989E-001 +50 1.947968E+003 +51 1.016890E+005 +52 4.911132E-005 +53 2.855505E-001 +54 7.644384E-007 +55 2.901115E-008 +56 9.670383E-009 +57 9.670383E-009 +58 1.308701E+004 +59 2.007032E+004 +60 1.595827E-001 +61 1.871710E+004 +62 7.207480E+002 +63 9.739837E+002 +64 2.532358E+002 +65 2.375527E+001 +66 5.083278E+002 +67 1.011572E+005 +68 2.721657E-001 +69 1.069754E-002 +70 3.209262E-002 +71 1.069754E-002 +72 2.685708E-006 +73 1.193158E-006 +74 7.872378E-007 +75 3.905320E-002 +76 2.464991E-001 +77 7.532236E+000 +78 1.241279E-006 +79 1.311110E-002 +80 9.567478E-002 +81 7.221418E-001 +82 8.180867E-002 +83 9.095155E-003 +84 0.000000E+000 +85 2.699775E+002 +86 4.499625E+002 +87 1.073046E+000 +88 4.060893E+000 +89 3.145324E-001 +90 7.281123E+004 +91 2.834978E+004 +92 2.093661E-003 +93 1.444187E-001 +94 8.973135E+002 +95 3.589254E+003 +96 1.642445E+003 +97 5.037550E-007 +98 1.717347E-007 +99 4.694080E-007 +100 9.442678E-003 +101 4.770234E-003 +102 2.013329E-008 +103 8.538536E-009 +104 3.659373E-009 +105 9.567411E-002 +106 4.150924E+000 +107 1.366702E-001 +108 4.659212E-002 +109 1.273518E-001 +110 2.561827E+003 +111 1.294179E+003 +112 5.462221E-003 +113 2.316530E-003 +114 9.927988E-004 +115 7.138508E+001 +116 3.491958E+001 +117 1.076251E+001 +118 2.186396E-003 +119 6.761154E+001 +120 2.513758E-010 +121 1.415888E-008 +122 4.169128E-009 +123 4.351785E-007 +124 1.107118E-003 +125 9.829209E-004 +126 5.821210E-003 +127 1.005184E-003 +128 1.055317E+001 +129 2.684785E+002 +130 7.869986E+000 +131 1.422218E+001 +132 3.861569E+001 +133 6.895282E+000 +134 8.327975E-005 +135 2.276313E-004 +136 2.442872E-004 +137 4.579063E+000 +138 2.313242E+000 +139 9.763289E-006 +140 4.140615E-006 +141 1.774550E-006 +142 9.418146E-006 +143 4.949327E-006 +144 1.220270E-006 +145 4.179358E-006 +146 1.803807E-005 diff --git a/tests/model_tests/spec_model_1/output/reactionRates/28800.cmp b/tests/model_tests/spec_model_1/output/reactionRates/28800.cmp new file mode 100644 index 000000000..c0230e92a --- /dev/null +++ b/tests/model_tests/spec_model_1/output/reactionRates/28800.cmp @@ -0,0 +1,147 @@ + reactionNumber reactionRate +1 6.914761E+008 +2 1.987600E+008 +3 5.340125E+001 +4 1.725880E+003 +5 9.131456E+003 +6 1.807739E+003 +7 4.887888E+006 +8 1.413481E+007 +9 5.965294E+008 +10 1.264812E+006 +11 3.760005E+002 +12 1.156764E+006 +13 2.983009E+001 +14 6.228505E+004 +15 1.877410E+006 +16 2.226411E+005 +17 2.408797E+000 +18 5.667680E+006 +19 3.826308E+001 +20 1.355421E+004 +21 6.767028E+003 +22 4.311363E+002 +23 3.238602E+002 +24 3.184546E+006 +25 3.716590E+006 +26 7.610251E+001 +27 6.032102E+006 +28 5.975179E+005 +29 4.037280E+002 +30 3.264952E+001 +31 5.329027E+004 +32 1.678467E+004 +33 0.000000E+000 +34 0.000000E+000 +35 0.000000E+000 +36 1.151170E+005 +37 1.257330E+003 +38 0.000000E+000 +39 2.090011E+007 +40 2.694792E+008 +41 3.225846E+001 +42 6.016375E+008 +43 1.583478E+004 +44 1.094183E+005 +45 3.182121E+006 +46 1.208365E+004 +47 6.104396E+004 +48 5.971278E+005 +49 2.710501E-001 +50 1.811795E+003 +51 9.404197E+004 +52 5.268305E-005 +53 2.709966E-001 +54 7.913791E-007 +55 2.898788E-008 +56 9.662626E-009 +57 9.662626E-009 +58 1.743508E+004 +59 2.698288E+004 +60 2.252857E-001 +61 2.574787E+004 +62 6.703640E+002 +63 9.058973E+002 +64 2.355333E+002 +65 2.483276E+001 +66 4.701110E+002 +67 9.355209E+004 +68 2.745688E-001 +69 1.041624E-002 +70 3.124872E-002 +71 1.041624E-002 +72 4.244520E-006 +73 1.885680E-006 +74 1.210371E-006 +75 3.706278E-002 +76 2.339359E-001 +77 1.137430E+001 +78 1.639688E-006 +79 1.687662E-002 +80 1.182578E-001 +81 6.702419E-001 +82 7.155243E-002 +83 8.119960E-003 +84 0.000000E+000 +85 2.511070E+002 +86 4.185117E+002 +87 1.677649E+000 +88 6.348987E+000 +89 4.783996E-001 +90 6.733523E+004 +91 2.621765E+004 +92 3.191723E-003 +93 2.107515E-001 +94 1.275986E+003 +95 5.103946E+003 +96 2.260120E+003 +97 7.589537E-007 +98 2.587342E-007 +99 7.072069E-007 +100 1.258586E-002 +101 6.490020E-003 +102 2.927275E-008 +103 1.198234E-008 +104 5.135289E-009 +105 1.182578E-001 +106 5.983418E+000 +107 2.265247E-001 +108 7.722434E-002 +109 2.110799E-001 +110 3.756498E+003 +111 1.937075E+003 +112 8.737030E-003 +113 3.576366E-003 +114 1.532728E-003 +115 1.512130E+002 +116 7.264170E+001 +117 2.279792E+001 +118 4.797367E-003 +119 1.445605E+002 +120 6.037473E-010 +121 3.355191E-008 +122 9.611165E-009 +123 8.647050E-007 +124 2.200823E-003 +125 2.584280E-003 +126 1.511969E-002 +127 2.539907E-003 +128 2.320014E+001 +129 5.904836E+002 +130 1.682950E+001 +131 3.041329E+001 +132 8.257737E+001 +133 1.474515E+001 +134 1.999412E-004 +135 5.465059E-004 +136 5.864941E-004 +137 9.725932E+000 +138 5.015271E+000 +139 2.262100E-005 +140 9.259552E-006 +141 3.968380E-006 +142 3.374237E-005 +143 1.792232E-005 +144 4.433415E-006 +145 1.510387E-005 +146 6.736433E-005 diff --git a/tests/model_tests/spec_model_1/output/reactionRates/30600.cmp b/tests/model_tests/spec_model_1/output/reactionRates/30600.cmp new file mode 100644 index 000000000..00b0304f8 --- /dev/null +++ b/tests/model_tests/spec_model_1/output/reactionRates/30600.cmp @@ -0,0 +1,147 @@ + reactionNumber reactionRate +1 6.601321E+008 +2 1.897504E+008 +3 5.124203E+001 +4 1.543735E+003 +5 8.415656E+003 +6 1.666033E+003 +7 4.421755E+006 +8 1.278685E+007 +9 5.617739E+008 +10 1.227274E+006 +11 3.300695E+002 +12 1.120792E+006 +13 2.977971E+001 +14 6.217983E+004 +15 1.698371E+006 +16 2.125165E+005 +17 3.803105E+000 +18 5.371256E+006 +19 5.041078E+001 +20 1.380405E+004 +21 6.511413E+003 +22 4.426260E+002 +23 3.324910E+002 +24 2.833492E+006 +25 3.407257E+006 +26 7.473717E+001 +27 5.726488E+006 +28 5.844620E+005 +29 3.753668E+002 +30 3.421050E+001 +31 4.687782E+004 +32 2.103379E+004 +33 0.000000E+000 +34 0.000000E+000 +35 0.000000E+000 +36 1.519071E+005 +37 1.254680E+003 +38 0.000000E+000 +39 1.890697E+007 +40 2.660405E+008 +41 4.266172E+001 +42 5.665335E+008 +43 1.615875E+004 +44 1.116289E+005 +45 2.869864E+006 +46 1.482369E+004 +47 6.091531E+004 +48 5.846126E+005 +49 2.598457E-001 +50 1.688203E+003 +51 8.279084E+004 +52 5.461552E-005 +53 2.597804E-001 +54 8.373175E-007 +55 2.805376E-008 +56 9.351254E-009 +57 9.351254E-009 +58 1.966926E+004 +59 3.089520E+004 +60 2.772460E-001 +61 2.909829E+004 +62 6.246358E+002 +63 8.441025E+002 +64 2.194666E+002 +65 2.364376E+001 +66 4.138943E+002 +67 8.236496E+004 +68 2.668107E-001 +69 9.258320E-003 +70 2.777496E-002 +71 9.258320E-003 +72 5.521091E-006 +73 2.452812E-006 +74 1.583425E-006 +75 3.552858E-002 +76 2.242522E-001 +77 1.406375E+001 +78 1.976378E-006 +79 1.868051E-002 +80 1.288830E-001 +81 6.232408E-001 +82 6.246731E-002 +83 7.304122E-003 +84 0.000000E+000 +85 2.339801E+002 +86 3.899668E+002 +87 2.079816E+000 +88 7.870969E+000 +89 5.964822E-001 +90 5.931358E+004 +91 2.309434E+004 +92 3.859513E-003 +93 2.675606E-001 +94 1.487621E+003 +95 5.950482E+003 +96 2.627072E+003 +97 9.395930E-007 +98 3.203158E-007 +99 8.755298E-007 +100 1.440803E-002 +101 7.655148E-003 +102 3.698694E-008 +103 1.384827E-008 +104 5.934974E-009 +105 1.288851E-001 +106 7.295505E+000 +107 2.946403E-001 +108 1.004456E-001 +109 2.745512E-001 +110 4.518112E+003 +111 2.400524E+003 +112 1.159847E-002 +113 4.342582E-003 +114 1.861107E-003 +115 2.363060E+002 +116 1.102077E+002 +117 3.562715E+001 +118 7.879601E-003 +119 2.180447E+002 +120 1.023630E-009 +121 5.613722E-008 +122 1.617308E-008 +123 1.258656E-006 +124 3.373323E-003 +125 4.619565E-003 +126 2.670284E-002 +127 4.511439E-003 +128 3.598297E+001 +129 9.643797E+002 +130 2.533495E+001 +131 4.578383E+001 +132 1.243111E+002 +133 2.219719E+001 +134 3.231465E-004 +135 8.832669E-004 +136 9.478962E-004 +137 1.453536E+001 +138 7.722796E+000 +139 3.731379E-005 +140 1.397065E-005 +141 5.987422E-006 +142 7.373696E-005 +143 3.788601E-005 +144 9.740414E-006 +145 3.289568E-005 +146 1.471588E-004 diff --git a/tests/model_tests/spec_model_1/output/reactionRates/32400.cmp b/tests/model_tests/spec_model_1/output/reactionRates/32400.cmp new file mode 100644 index 000000000..31873906c --- /dev/null +++ b/tests/model_tests/spec_model_1/output/reactionRates/32400.cmp @@ -0,0 +1,147 @@ + reactionNumber reactionRate +1 6.268124E+008 +2 1.801729E+008 +3 4.887583E+001 +4 1.369974E+003 +5 7.776808E+003 +6 1.539561E+003 +7 3.816533E+006 +8 1.103666E+007 +9 5.274187E+008 +10 1.199801E+006 +11 2.883176E+002 +12 1.092249E+006 +13 3.021976E+001 +14 6.309867E+004 +15 1.465909E+006 +16 1.922918E+005 +17 4.912552E+000 +18 4.828982E+006 +19 5.736993E+001 +20 1.335561E+004 +21 5.649086E+003 +22 4.106094E+002 +23 3.084408E+002 +24 2.385404E+006 +25 2.986886E+006 +26 7.019524E+001 +27 5.154863E+006 +28 5.478466E+005 +29 3.171804E+002 +30 3.435733E+001 +31 3.754497E+004 +32 2.298695E+004 +33 0.000000E+000 +34 0.000000E+000 +35 0.000000E+000 +36 1.843040E+005 +37 1.272564E+003 +38 0.000000E+000 +39 1.631915E+007 +40 2.604227E+008 +41 5.029742E+001 +42 5.316081E+008 +43 1.652594E+004 +44 1.141167E+005 +45 2.453665E+006 +46 1.619294E+004 +47 6.178356E+004 +48 5.484178E+005 +49 2.525585E-001 +50 1.580768E+003 +51 6.951392E+004 +52 5.470384E-005 +53 2.524905E-001 +54 9.079459E-007 +55 2.638328E-008 +56 8.794427E-009 +57 8.794427E-009 +58 2.002782E+004 +59 3.213239E+004 +60 3.180436E-001 +61 2.883579E+004 +62 5.848811E+002 +63 7.903799E+002 +64 2.054988E+002 +65 2.046588E+001 +66 3.476483E+002 +67 6.918202E+004 +68 2.500259E-001 +69 7.524573E-003 +70 2.257372E-002 +71 7.524573E-003 +72 6.291666E-006 +73 2.795149E-006 +74 1.874419E-006 +75 3.453090E-002 +76 2.179549E-001 +77 1.517173E+001 +78 2.302831E-006 +79 1.880286E-002 +80 1.307296E-001 +81 5.824699E-001 +82 5.466767E-002 +83 6.656096E-003 +84 0.000000E+000 +85 2.190906E+002 +86 3.651510E+002 +87 2.205487E+000 +88 8.346564E+000 +89 6.570607E-001 +90 4.984336E+004 +91 1.940701E+004 +92 4.001508E-003 +93 3.162046E-001 +94 1.518732E+003 +95 6.074929E+003 +96 2.751043E+003 +97 1.007114E-006 +98 3.433343E-007 +99 9.384472E-007 +100 1.498582E-002 +101 8.290929E-003 +102 4.291956E-008 +103 1.393703E-008 +104 5.973015E-009 +105 1.307210E-001 +106 7.923300E+000 +107 3.202875E-001 +108 1.091889E-001 +109 2.984497E-001 +110 4.765866E+003 +111 2.636723E+003 +112 1.364950E-002 +113 4.432326E-003 +114 1.899569E-003 +115 3.098936E+002 +116 1.385064E+002 +117 4.672172E+001 +118 1.103527E-002 +119 2.637956E+002 +120 1.386650E-009 +121 7.509102E-008 +122 2.247285E-008 +123 1.505010E-006 +124 4.477992E-003 +125 6.436529E-003 +126 3.677037E-002 +127 6.453335E-003 +128 4.467855E+001 +129 1.329361E+003 +130 3.060178E+001 +131 5.530175E+001 +132 1.501539E+002 +133 2.681172E+001 +134 3.966976E-004 +135 1.084307E-003 +136 1.163646E-003 +137 1.731501E+001 +138 9.579559E+000 +139 4.959040E-005 +140 1.610322E-005 +141 6.901380E-006 +142 1.196890E-004 +143 5.691365E-005 +144 1.578263E-005 +145 5.263185E-005 +146 2.295406E-004 diff --git a/tests/model_tests/spec_model_1/output/reactionRates/34200.cmp b/tests/model_tests/spec_model_1/output/reactionRates/34200.cmp new file mode 100644 index 000000000..d5f9957fd --- /dev/null +++ b/tests/model_tests/spec_model_1/output/reactionRates/34200.cmp @@ -0,0 +1,147 @@ + reactionNumber reactionRate +1 5.914444E+008 +2 1.700066E+008 +3 4.627622E+001 +4 1.205545E+003 +5 7.218706E+003 +6 1.429075E+003 +7 3.113851E+006 +8 9.004644E+006 +9 4.935576E+008 +10 1.184345E+006 +11 2.507615E+002 +12 1.072667E+006 +13 3.130553E+001 +14 6.536575E+004 +15 1.196012E+006 +16 1.633187E+005 +17 5.422633E+000 +18 4.080574E+006 +19 5.734272E+001 +20 1.214561E+004 +21 4.333452E+003 +22 3.372602E+002 +23 2.533425E+002 +24 1.882975E+006 +25 2.487070E+006 +26 6.256677E+001 +27 4.356926E+006 +28 4.884371E+005 +29 2.397265E+002 +30 3.278958E+001 +31 2.702917E+004 +32 2.231291E+004 +33 0.000000E+000 +34 0.000000E+000 +35 0.000000E+000 +36 2.113596E+005 +37 1.317464E+003 +38 0.000000E+000 +39 1.331443E+007 +40 2.522621E+008 +41 5.401905E+001 +42 4.969604E+008 +43 1.694262E+004 +44 1.169107E+005 +45 1.975601E+006 +46 1.609572E+004 +47 6.396347E+004 +48 4.897041E+005 +49 2.500577E-001 +50 1.491371E+003 +51 5.532092E+004 +52 5.263457E-005 +53 2.499914E-001 +54 1.015064E-006 +55 2.403696E-008 +56 8.012320E-009 +57 8.012320E-009 +58 1.887265E+004 +59 3.115800E+004 +60 3.510543E-001 +61 2.558343E+004 +62 5.518074E+002 +63 7.456856E+002 +64 1.938783E+002 +65 1.582247E+001 +66 2.765736E+002 +67 5.503814E+004 +68 2.245997E-001 +69 5.508370E-003 +70 1.652511E-002 +71 5.508370E-003 +72 6.395023E-006 +73 2.841066E-006 +74 2.054624E-006 +75 3.419035E-002 +76 2.158054E-001 +77 1.455981E+001 +78 2.672016E-006 +79 1.753639E-002 +80 1.262051E-001 +81 5.486230E-001 +82 4.810032E-002 +83 6.177657E-003 +84 0.000000E+000 +85 2.067028E+002 +86 3.445046E+002 +87 2.049504E+000 +88 7.756254E+000 +89 6.584743E-001 +90 3.960824E+004 +91 1.542187E+004 +92 3.652461E-003 +93 3.593167E-001 +94 1.387170E+003 +95 5.548681E+003 +96 2.663021E+003 +97 9.459267E-007 +98 3.224750E-007 +99 8.814317E-007 +100 1.448392E-002 +101 8.452702E-003 +102 4.683973E-008 +103 1.239500E-008 +104 5.312145E-009 +105 1.262054E-001 +106 7.779484E+000 +107 2.960771E-001 +108 1.009354E-001 +109 2.758900E-001 +110 4.533498E+003 +111 2.645714E+003 +112 1.466094E-002 +113 3.879663E-003 +114 1.662713E-003 +115 3.603605E+002 +116 1.520084E+002 +117 5.433047E+001 +118 1.397529E-002 +119 2.685248E+002 +120 1.567711E-009 +121 8.390670E-008 +122 2.708045E-008 +123 1.539667E-006 +124 5.412315E-003 +125 7.350617E-003 +126 4.152004E-002 +127 7.858380E-003 +128 4.649251E+001 +129 1.634328E+003 +130 3.128857E+001 +131 5.654287E+001 +132 1.535237E+002 +133 2.741345E+001 +134 3.846465E-004 +135 1.051367E-003 +136 1.128296E-003 +137 1.727634E+001 +138 1.008234E+001 +139 5.587019E-005 +140 1.478470E-005 +141 6.336300E-006 +142 1.564367E-004 +143 6.539885E-005 +144 2.047918E-005 +145 6.711531E-005 +146 2.761873E-004 diff --git a/tests/model_tests/spec_model_1/output/reactionRates/36000.cmp b/tests/model_tests/spec_model_1/output/reactionRates/36000.cmp new file mode 100644 index 000000000..bfd57810e --- /dev/null +++ b/tests/model_tests/spec_model_1/output/reactionRates/36000.cmp @@ -0,0 +1,147 @@ + reactionNumber reactionRate +1 5.532581E+008 +2 1.590302E+008 +3 4.336724E+001 +4 1.047926E+003 +5 6.734664E+003 +6 1.333250E+003 +7 2.365545E+006 +8 6.840692E+006 +9 4.594742E+008 +10 1.183344E+006 +11 2.165347E+002 +12 1.064510E+006 +13 3.334381E+001 +14 6.962166E+004 +15 9.085926E+005 +16 1.279357E+005 +17 5.172184E+000 +18 3.186392E+006 +19 5.024303E+001 +20 1.024338E+004 +21 2.852555E+003 +22 2.390196E+002 +23 1.795463E+002 +24 1.368181E+006 +25 1.939530E+006 +26 5.224695E+001 +27 3.408378E+006 +28 4.100961E+005 +29 1.576012E+002 +30 2.947960E+001 +31 1.705901E+004 +32 1.919126E+004 +33 0.000000E+000 +34 0.000000E+000 +35 0.000000E+000 +36 2.324895E+005 +37 1.401969E+003 +38 0.000000E+000 +39 1.011495E+007 +40 2.410859E+008 +41 5.326879E+001 +42 4.618926E+008 +43 1.744473E+004 +44 1.202323E+005 +45 1.478198E+006 +46 1.462839E+004 +47 6.806624E+004 +48 4.117288E+005 +49 2.538818E-001 +50 1.420416E+003 +51 4.112398E+004 +52 4.841177E-005 +53 2.538073E-001 +54 1.184379E-006 +55 2.113844E-008 +56 7.046145E-009 +57 7.046145E-009 +58 1.659576E+004 +59 2.845190E+004 +60 3.807549E-001 +61 2.031629E+004 +62 5.255535E+002 +63 7.102074E+002 +64 1.846539E+002 +65 1.065838E+001 +66 2.056492E+002 +67 4.092419E+004 +68 1.919303E-001 +69 3.547756E-003 +70 1.064327E-002 +71 3.547756E-003 +72 5.780014E-006 +73 2.567841E-006 +74 2.099938E-006 +75 3.471189E-002 +76 2.190973E-001 +77 1.241188E+001 +78 3.152874E-006 +79 1.515034E-002 +80 1.168096E-001 +81 5.218174E-001 +82 4.257098E-002 +83 5.868118E-003 +84 0.000000E+000 +85 1.968696E+002 +86 3.281160E+002 +87 1.673762E+000 +88 6.334277E+000 +89 6.080949E-001 +90 2.945562E+004 +91 1.146884E+004 +92 2.948587E-003 +93 4.011203E-001 +94 1.133813E+003 +95 4.535251E+003 +96 2.404016E+003 +97 7.731549E-007 +98 2.635756E-007 +99 7.204398E-007 +100 1.306755E-002 +101 8.184894E-003 +102 4.856693E-008 +103 9.686552E-009 +104 4.151379E-009 +105 1.168086E-001 +106 6.878472E+000 +107 2.320061E-001 +108 7.909299E-002 +109 2.161875E-001 +110 3.921273E+003 +111 2.456099E+003 +112 1.457382E-002 +113 2.906712E-003 +114 1.245734E-003 +115 3.818003E+002 +116 1.491130E+002 +117 5.756288E+001 +118 1.657176E-002 +119 2.331345E+002 +120 1.496073E-009 +121 7.923097E-008 +122 2.891624E-008 +123 1.358879E-006 +124 6.109016E-003 +125 6.997151E-003 +126 3.910393E-002 +127 8.369186E-003 +128 4.101658E+001 +129 1.843954E+003 +130 2.713025E+001 +131 4.902820E+001 +132 1.331201E+002 +133 2.377014E+001 +134 2.946862E-004 +135 8.054755E-004 +136 8.644128E-004 +137 1.460995E+001 +138 9.150982E+000 +139 5.429943E-005 +140 1.082988E-005 +141 4.641379E-006 +142 1.716400E-004 +143 5.913759E-005 +144 2.221034E-005 +145 7.109314E-005 +146 2.648859E-004 diff --git a/tests/model_tests/spec_model_1/output/reactionRates/37800.cmp b/tests/model_tests/spec_model_1/output/reactionRates/37800.cmp new file mode 100644 index 000000000..434d25aa6 --- /dev/null +++ b/tests/model_tests/spec_model_1/output/reactionRates/37800.cmp @@ -0,0 +1,147 @@ + reactionNumber reactionRate +1 5.105383E+008 +2 1.467507E+008 +3 4.000587E+001 +4 8.910341E+002 +5 6.305112E+003 +6 1.248212E+003 +7 1.632216E+006 +8 4.720047E+006 +9 4.232390E+008 +10 1.200187E+006 +11 1.838458E+002 +12 1.071196E+006 +13 3.694433E+001 +14 7.713952E+004 +15 6.269248E+005 +16 9.026490E+004 +17 4.234773E+000 +18 2.246608E+006 +19 3.818066E+001 +20 7.849545E+003 +21 1.543261E+003 +22 1.404471E+002 +23 1.055008E+002 +24 8.897593E+005 +25 1.388797E+006 +26 4.027012E+001 +27 2.407412E+006 +28 3.189346E+005 +29 8.668263E+001 +30 2.467842E+001 +31 9.107035E+003 +32 1.442048E+004 +33 0.000000E+000 +34 0.000000E+000 +35 0.000000E+000 +36 2.475220E+005 +37 1.551298E+003 +38 0.000000E+000 +39 6.975728E+006 +40 2.262416E+008 +41 4.823133E+001 +42 4.244970E+008 +43 1.811561E+004 +44 1.246027E+005 +45 1.005338E+006 +46 1.206195E+004 +47 7.531626E+004 +48 3.208619E+005 +49 2.668859E-001 +50 1.366831E+003 +51 2.793823E+004 +52 4.233598E-005 +53 2.668002E-001 +54 1.475590E-006 +55 1.790081E-008 +56 5.966938E-009 +57 5.966938E-009 +58 1.356659E+004 +59 2.444137E+004 +60 4.136801E-001 +61 1.426505E+004 +62 5.057424E+002 +63 6.834357E+002 +64 1.776933E+002 +65 6.024627E+000 +66 1.397299E+002 +67 2.780624E+004 +68 1.545606E-001 +69 1.941931E-003 +70 5.825793E-003 +71 1.941931E-003 +72 4.576534E-006 +73 2.033180E-006 +74 1.993259E-006 +75 3.647620E-002 +76 2.302334E-001 +77 9.274143E+000 +78 3.858629E-006 +79 1.198280E-002 +80 1.031537E-001 +81 5.016444E-001 +82 3.774783E-002 +83 5.729153E-003 +84 0.000000E+000 +85 1.894497E+002 +86 3.157494E+002 +87 1.192608E+000 +88 4.513372E+000 +89 5.194275E-001 +90 2.007526E+004 +91 7.816503E+003 +92 2.091059E-003 +93 4.484475E-001 +94 8.191962E+002 +95 3.276785E+003 +96 2.016328E+003 +97 5.390767E-007 +98 1.837762E-007 +99 5.023215E-007 +100 1.095221E-002 +101 7.553251E-003 +102 4.824377E-008 +103 6.540252E-009 +104 2.802965E-009 +105 1.031314E-001 +106 5.393641E+000 +107 1.519909E-001 +108 5.181507E-002 +109 1.416279E-001 +110 3.087939E+003 +111 2.129614E+003 +112 1.360217E-002 +113 1.844002E-003 +114 7.902867E-004 +115 3.733853E+002 +116 1.315864E+002 +117 5.629418E+001 +118 1.891427E-002 +119 1.719638E+002 +120 1.200507E-009 +121 6.299689E-008 +122 2.756230E-008 +123 1.025220E-006 +124 6.530429E-003 +125 5.562444E-003 +126 3.078562E-002 +127 7.898782E-003 +128 3.049391E+001 +129 1.942396E+003 +130 1.994317E+001 +131 3.604013E+001 +132 9.785523E+001 +133 1.747319E+001 +134 1.740302E-004 +135 4.756826E-004 +136 5.104886E-004 +137 1.037140E+001 +138 7.152689E+000 +139 4.568533E-005 +140 6.193412E-006 +141 2.654320E-006 +142 1.625990E-004 +143 4.257738E-005 +144 2.068037E-005 +145 6.410007E-005 +146 2.057370E-004 diff --git a/tests/model_tests/spec_model_1/output/reactionRates/39600.cmp b/tests/model_tests/spec_model_1/output/reactionRates/39600.cmp new file mode 100644 index 000000000..c124b52cb --- /dev/null +++ b/tests/model_tests/spec_model_1/output/reactionRates/39600.cmp @@ -0,0 +1,147 @@ + reactionNumber reactionRate +1 4.593551E+008 +2 1.320384E+008 +3 3.588432E+001 +4 7.237788E+002 +5 5.880651E+003 +6 1.164182E+003 +7 9.733883E+005 +8 2.814848E+006 +9 3.809234E+008 +10 1.240286E+006 +11 1.498429E+002 +12 1.098098E+006 +13 4.348515E+001 +14 9.079671E+004 +15 3.738729E+005 +16 5.495791E+004 +17 2.883031E+000 +18 1.371162E+006 +19 2.442960E+001 +20 5.307690E+003 +21 6.392790E+002 +22 6.461206E+001 +23 4.853517E+001 +24 4.905852E+005 +25 8.792281E+005 +26 2.792636E+001 +27 1.474151E+006 +28 2.242407E+005 +29 3.731317E+001 +30 1.900634E+001 +31 3.871908E+003 +32 9.135088E+003 +33 0.000000E+000 +34 0.000000E+000 +35 0.000000E+000 +36 2.567416E+005 +37 1.822355E+003 +38 0.000000E+000 +39 4.167796E+006 +40 2.067202E+008 +41 3.965906E+001 +42 3.808445E+008 +43 1.914190E+004 +44 1.311845E+005 +45 5.991300E+005 +46 8.804974E+003 +47 8.847616E+004 +48 2.261505E+005 +49 2.953342E-001 +50 1.327953E+003 +51 1.662863E+004 +52 3.519672E-005 +53 2.952362E-001 +54 2.053708E-006 +55 1.460882E-008 +56 4.869607E-009 +57 4.869607E-009 +58 1.011027E+004 +59 1.946653E+004 +60 4.616473E-001 +61 8.562262E+003 +62 4.913160E+002 +63 6.639406E+002 +64 1.726245E+002 +65 2.694659E+000 +66 8.318668E+001 +67 1.655415E+004 +68 1.157319E-001 +69 8.526236E-004 +70 2.557871E-003 +71 8.526236E-004 +72 3.060588E-006 +73 1.359703E-006 +74 1.726815E-006 +75 4.038029E-002 +76 2.548756E-001 +77 5.864532E+000 +78 5.025188E-006 +79 8.393581E-003 +80 8.508941E-002 +81 4.870237E-001 +82 3.310749E-002 +83 5.769602E-003 +84 0.000000E+000 +85 1.840505E+002 +86 3.067508E+002 +87 7.217085E-001 +88 2.731273E+000 +89 4.071952E-001 +90 1.181315E+004 +91 4.599569E+003 +92 1.266397E-003 +93 5.143548E-001 +94 5.053693E+002 +95 2.021477E+003 +96 1.539854E+003 +97 3.106755E-007 +98 1.059121E-007 +99 2.894930E-007 +100 8.401348E-003 +101 6.652765E-003 +102 4.654554E-008 +103 3.699992E-009 +104 1.585711E-009 +105 8.511952E-002 +106 3.613909E+000 +107 8.162737E-002 +108 2.782751E-002 +109 7.606187E-002 +110 2.207384E+003 +111 1.747958E+003 +112 1.222945E-002 +113 9.721417E-004 +114 4.166322E-004 +115 3.378208E+002 +116 1.034444E+002 +117 5.093222E+001 +118 2.143790E-002 +119 1.048334E+002 +120 7.896876E-010 +121 4.112856E-008 +122 2.331060E-008 +123 6.391704E-007 +124 6.666391E-003 +125 3.620369E-003 +126 1.987320E-002 +127 6.605320E-003 +128 1.854376E+001 +129 1.934069E+003 +130 1.235200E+001 +131 2.232181E+001 +132 6.060759E+001 +133 1.082219E+001 +134 7.521891E-005 +135 2.055984E-004 +136 2.206421E-004 +137 5.966649E+000 +138 4.724803E+000 +139 3.305670E-005 +140 2.627739E-006 +141 1.126174E-006 +142 1.361826E-004 +143 2.427771E-005 +144 1.678116E-005 +145 4.970568E-005 +146 1.288731E-004 diff --git a/tests/model_tests/spec_model_1/output/reactionRates/41400.cmp b/tests/model_tests/spec_model_1/output/reactionRates/41400.cmp new file mode 100644 index 000000000..eedaf8a6b --- /dev/null +++ b/tests/model_tests/spec_model_1/output/reactionRates/41400.cmp @@ -0,0 +1,147 @@ + reactionNumber reactionRate +1 3.927162E+008 +2 1.128836E+008 +3 3.046934E+001 +4 5.315132E+002 +5 5.360792E+003 +6 1.061267E+003 +7 4.540654E+005 +8 1.313068E+006 +9 3.249703E+008 +10 1.313480E+006 +11 1.105585E+002 +12 1.151456E+006 +13 5.660338E+001 +14 1.181875E+005 +15 1.744040E+005 +16 2.664537E+004 +17 1.517295E+000 +18 6.691021E+005 +19 1.230508E+001 +20 3.015456E+003 +21 1.785143E+002 +22 2.114229E+001 +23 1.588163E+001 +24 2.057102E+005 +25 4.576551E+005 +26 1.664201E+001 +27 7.243348E+005 +28 1.367751E+005 +29 1.115070E+001 +30 1.327229E+001 +31 1.186397E+003 +32 4.531830E+003 +33 0.000000E+000 +34 0.000000E+000 +35 0.000000E+000 +36 2.609117E+005 +37 2.363584E+003 +38 0.000000E+000 +39 1.954985E+006 +40 1.807127E+008 +41 2.849569E+001 +42 3.231187E+008 +43 2.091940E+004 +44 1.423592E+005 +45 2.940675E+005 +46 5.360096E+003 +47 1.147531E+005 +48 1.384439E+005 +49 3.551593E-001 +50 1.299248E+003 +51 7.996525E+003 +52 2.812677E-005 +53 3.542795E-001 +54 3.502396E-006 +55 1.166071E-008 +56 3.886903E-009 +57 3.886903E-009 +58 6.514964E+003 +59 1.377228E+004 +60 5.514376E-001 +61 4.089874E+003 +62 4.806583E+002 +63 6.495382E+002 +64 1.688799E+002 +65 8.636769E-001 +66 4.003686E+001 +67 7.967335E+003 +68 7.916064E-002 +69 2.729587E-004 +70 8.188761E-004 +71 2.729587E-004 +72 1.604429E-006 +73 7.127871E-007 +74 1.305305E-006 +75 4.856810E-002 +76 3.065561E-001 +77 2.916113E+000 +78 7.267293E-006 +79 4.854035E-003 +80 6.204950E-002 +81 4.763048E-001 +82 2.782269E-002 +83 6.018855E-003 +84 0.000000E+000 +85 1.800660E+002 +86 3.001100E+002 +87 3.474026E-001 +88 1.314729E+000 +89 2.826341E-001 +90 5.494332E+003 +91 2.139274E+003 +92 6.117110E-004 +93 6.293015E-001 +94 2.472522E+002 +95 9.890087E+002 +96 1.014236E+003 +97 1.416239E-007 +98 4.828089E-008 +99 1.319677E-007 +100 5.750920E-003 +101 5.653090E-003 +102 4.528106E-008 +103 1.684700E-009 +104 7.220142E-010 +105 6.215673E-002 +106 1.917289E+000 +107 3.517456E-002 +108 1.199133E-002 +109 3.277629E-002 +110 1.428333E+003 +111 1.404035E+003 +112 1.124627E-002 +113 4.184220E-004 +114 1.793237E-004 +115 2.789593E+002 +116 6.969200E+001 +117 4.205784E+001 +118 2.530795E-002 +119 4.948911E+001 +120 3.998627E-010 +121 2.071119E-008 +122 1.692645E-008 +123 3.060549E-007 +124 6.538980E-003 +125 1.819212E-003 +126 9.925792E-003 +127 4.757095E-003 +128 8.623457E+000 +129 1.842435E+003 +130 6.115286E+000 +131 1.105119E+001 +132 3.000590E+001 +133 5.357902E+000 +134 2.138956E-005 +135 5.846480E-005 +136 6.274271E-005 +137 2.547792E+000 +138 2.504451E+000 +139 2.006057E-005 +140 7.463614E-007 +141 3.198692E-007 +142 1.023091E-004 +143 1.058268E-005 +144 1.172062E-005 +145 3.241248E-005 +146 6.242240E-005 diff --git a/tests/model_tests/spec_model_1/output/reactionRates/43200.cmp b/tests/model_tests/spec_model_1/output/reactionRates/43200.cmp new file mode 100644 index 000000000..aea2b8cad --- /dev/null +++ b/tests/model_tests/spec_model_1/output/reactionRates/43200.cmp @@ -0,0 +1,147 @@ + reactionNumber reactionRate +1 2.955353E+008 +2 8.494958E+007 +3 2.263773E+001 +4 2.992236E+002 +5 4.480957E+003 +6 8.870874E+002 +7 1.298141E+005 +8 3.753967E+005 +9 2.400126E+008 +10 1.440369E+006 +11 6.187204E+001 +12 1.243571E+006 +13 9.076652E+001 +14 1.895199E+005 +15 4.986085E+004 +16 8.617663E+003 +17 5.202545E-001 +18 2.191566E+005 +19 4.135041E+000 +20 1.320971E+003 +21 2.594793E+001 +22 4.162501E+000 +23 3.126780E+000 +24 5.041218E+004 +25 1.665245E+005 +26 7.870575E+000 +27 2.404316E+005 +28 6.740922E+004 +29 1.810161E+000 +30 8.501962E+000 +31 2.218038E+002 +32 1.486533E+003 +33 0.000000E+000 +34 0.000000E+000 +35 0.000000E+000 +36 2.612558E+005 +37 3.759983E+003 +38 0.000000E+000 +39 5.551139E+005 +40 1.443627E+008 +41 1.575065E+001 +42 2.354574E+008 +43 2.480471E+004 +44 1.661212E+005 +45 1.066008E+005 +46 2.304266E+003 +47 1.825489E+005 +48 6.860577E+004 +49 5.090814E-001 +50 1.273572E+003 +51 2.600889E+003 +52 2.387214E-005 +53 5.069528E-001 +54 9.671810E-006 +55 1.027678E-008 +56 3.425592E-009 +57 3.425592E-009 +58 3.101579E+003 +59 7.581673E+003 +60 7.819835E-001 +61 1.316035E+003 +62 4.712216E+002 +63 6.367860E+002 +64 1.655644E+002 +65 1.667606E-001 +66 1.303323E+001 +67 2.593613E+003 +68 4.973044E-002 +69 5.472672E-005 +70 1.641802E-004 +71 5.472672E-005 +72 5.568248E-007 +73 2.473762E-007 +74 7.568365E-007 +75 6.950648E-002 +76 4.387166E-001 +77 9.625397E-001 +78 1.306185E-005 +79 1.979664E-003 +80 3.430874E-002 +81 4.668625E-001 +82 2.040425E-002 +83 6.553835E-003 +84 0.000000E+000 +85 1.765233E+002 +86 2.942055E+002 +87 1.127031E-001 +88 4.265198E-001 +89 1.531861E-001 +90 1.867224E+003 +91 7.270225E+002 +92 1.990875E-004 +93 9.074773E-001 +94 8.090467E+001 +95 3.236187E+002 +96 4.920498E+002 +97 4.882187E-008 +98 1.664382E-008 +99 4.549311E-008 +100 3.342452E-003 +101 4.878359E-003 +102 5.078849E-008 +103 6.030602E-010 +104 2.584544E-010 +105 3.437477E-002 +106 6.774709E-001 +107 1.207451E-002 +108 4.116311E-003 +109 1.125125E-002 +110 8.266474E+002 +111 1.206505E+003 +112 1.256089E-002 +113 1.491475E-004 +114 6.392035E-005 +115 1.976717E+002 +116 3.543076E+001 +117 2.980237E+001 +118 3.484022E-002 +119 1.545931E+001 +120 1.328976E-010 +121 6.861199E-009 +122 9.368124E-009 +123 9.540558E-008 +124 6.222372E-003 +125 6.024929E-004 +126 3.275722E-003 +127 2.622863E-003 +128 2.619606E+000 +129 1.708512E+003 +130 1.803766E+000 +131 3.259661E+000 +132 8.850546E+000 +133 1.580368E+000 +134 3.201077E-006 +135 8.749611E-006 +136 9.389826E-006 +137 6.428480E-001 +138 9.382465E-001 +139 9.768063E-006 +140 1.159855E-007 +141 4.970809E-008 +142 6.637514E-005 +143 3.099629E-006 +144 6.333662E-006 +145 1.554394E-005 +146 2.019076E-005 diff --git a/tests/model_tests/spec_model_1/output/reactionRates/45000.cmp b/tests/model_tests/spec_model_1/output/reactionRates/45000.cmp new file mode 100644 index 000000000..9b261b459 --- /dev/null +++ b/tests/model_tests/spec_model_1/output/reactionRates/45000.cmp @@ -0,0 +1,147 @@ + reactionNumber reactionRate +1 1.392400E+008 +2 4.002358E+007 +3 1.041974E+001 +4 6.013666E+001 +5 2.484397E+003 +6 4.918318E+002 +7 7.609168E+003 +8 2.200422E+004 +9 1.000213E+008 +10 1.655918E+006 +11 1.125828E+001 +12 1.333617E+006 +13 2.685301E+002 +14 5.606890E+005 +15 2.922638E+003 +16 1.117582E+003 +17 7.038076E-002 +18 2.909103E+004 +19 5.625889E-001 +20 4.137510E+002 +21 1.104331E+000 +22 4.278650E-001 +23 3.214029E-001 +24 2.854596E+003 +25 2.601321E+004 +26 2.626629E+000 +27 3.288187E+004 +28 2.543261E+004 +29 9.106431E-002 +30 6.852786E+000 +31 1.835555E+001 +32 1.958773E+002 +33 0.000000E+000 +34 0.000000E+000 +35 0.000000E+000 +36 2.593314E+005 +37 1.078634E+004 +38 0.000000E+000 +39 3.251470E+004 +40 8.749320E+007 +41 3.748952E+000 +42 9.160452E+007 +43 3.810267E+004 +44 2.422565E+005 +45 2.016773E+004 +46 3.461632E+002 +47 5.236819E+005 +48 2.599987E+004 +49 1.276201E+000 +50 1.240660E+003 +51 3.442724E+002 +52 4.429797E-005 +53 1.251620E+000 +54 1.407330E-004 +55 2.322408E-008 +56 7.741359E-009 +57 7.741359E-009 +58 5.363079E+002 +59 1.754425E+003 +60 1.952745E+000 +61 1.735258E+002 +62 4.590442E+002 +63 6.203300E+002 +64 1.612858E+002 +65 1.667213E-002 +66 1.733653E+000 +67 3.449970E+002 +68 3.898662E-002 +69 6.663250E-006 +70 1.998975E-005 +71 6.663250E-006 +72 7.885250E-008 +73 3.503117E-008 +74 1.925499E-007 +75 1.714576E-001 +76 1.082220E+000 +77 1.280121E-001 +78 4.609782E-005 +79 3.689060E-004 +80 7.545376E-003 +81 4.547916E-001 +82 8.479081E-003 +83 7.513294E-003 +84 0.000000E+000 +85 1.719656E+002 +86 2.866093E+002 +87 1.491029E-002 +88 5.642734E-002 +89 3.640944E-002 +90 2.483535E+002 +91 9.669894E+001 +92 2.637669E-005 +93 2.278970E+000 +94 1.072816E+001 +95 4.291262E+001 +96 8.776740E+001 +97 1.379016E-008 +98 4.701193E-009 +99 1.284993E-008 +100 1.256125E-003 +101 5.057641E-003 +102 1.124905E-007 +103 2.074459E-010 +104 8.890539E-011 +105 7.715841E-003 +106 9.636251E-002 +107 3.580825E-003 +108 1.220736E-003 +109 3.336678E-003 +110 3.261718E+002 +111 1.313293E+003 +112 2.920987E-002 +113 5.386647E-005 +114 2.308563E-005 +115 8.565323E+001 +116 7.416116E+000 +117 1.291368E+001 +118 8.433425E-002 +119 1.975885E+000 +120 1.772072E-011 +121 9.138268E-010 +122 2.241614E-009 +123 1.199847E-008 +124 5.895051E-003 +125 8.026569E-005 +126 4.358671E-004 +127 6.269992E-004 +128 3.244875E-001 +129 1.594262E+003 +130 2.398647E-001 +131 4.334695E-001 +132 1.176945E+000 +133 2.101573E-001 +134 1.564266E-007 +135 4.275660E-007 +136 4.588513E-007 +137 4.179606E-002 +138 1.682870E-001 +139 3.742989E-006 +140 6.902516E-009 +141 2.958221E-009 +142 2.641835E-005 +143 3.828657E-007 +144 1.502193E-006 +145 2.760326E-006 +146 2.665503E-006 diff --git a/tests/model_tests/spec_model_1/output/reactionRates/46800.cmp b/tests/model_tests/spec_model_1/output/reactionRates/46800.cmp new file mode 100644 index 000000000..70e9fb1e6 --- /dev/null +++ b/tests/model_tests/spec_model_1/output/reactionRates/46800.cmp @@ -0,0 +1,147 @@ + reactionNumber reactionRate +1 4.336820E+004 +2 1.246589E+004 +3 3.182072E-003 +4 6.146127E-006 +5 8.448640E-001 +6 1.672563E-001 +7 3.055037E-005 +8 8.834567E-005 +9 3.218052E+004 +10 1.772732E+006 +11 1.212222E-006 +12 1.221074E+004 +13 8.181023E+003 +14 1.708192E+007 +15 1.173423E-005 +16 9.115629E+000 +17 5.865500E-004 +18 2.420024E+002 +19 4.794999E-003 +20 2.238905E+002 +21 5.070046E-003 +22 1.303193E-001 +23 9.789299E-002 +24 7.792221E-003 +25 2.362730E+002 +26 6.097003E-001 +27 5.954736E+000 +28 1.532500E+004 +29 4.437057E-004 +30 1.055296E+002 +31 1.407469E-001 +32 1.612556E+000 +33 0.000000E+000 +34 0.000000E+000 +35 0.000000E+000 +36 2.566399E+005 +37 3.197479E+005 +38 0.000000E+000 +39 4.374012E-015 +40 5.568207E+004 +41 6.448954E-011 +42 1.489786E-002 +43 9.477388E+001 +44 1.531771E+002 +45 4.696552E-007 +46 1.615975E-010 +47 1.552391E+007 +48 1.522847E+004 +49 3.555697E+001 +50 1.214641E+003 +51 2.859654E+000 +52 2.102921E-002 +53 3.532773E-001 +54 3.377848E+000 +55 6.000635E-005 +56 2.000212E-005 +57 2.000212E-005 +58 1.832103E-011 +59 1.447075E-009 +60 5.462603E+001 +61 1.447184E+000 +62 4.494174E+002 +63 6.073207E+002 +64 1.579034E+002 +65 6.552264E-003 +66 4.051041E-004 +67 8.061572E-002 +68 7.746777E-001 +69 1.425299E-005 +70 4.275898E-005 +71 1.425299E-005 +72 4.943451E-009 +73 2.196188E-009 +74 2.698336E-017 +75 5.102839E-001 +76 3.220851E+000 +77 1.065048E-003 +78 2.848778E-003 +79 6.796720E-006 +80 2.993412E-015 +81 4.452594E-001 +82 2.723989E-006 +83 8.031389E-003 +84 0.000000E+000 +85 1.683616E+002 +86 2.806027E+002 +87 1.240064E-004 +88 4.692968E-004 +89 6.768775E-013 +90 6.156526E-001 +91 2.397105E-001 +92 2.194113E-007 +93 6.357622E+001 +94 8.922502E-002 +95 3.569001E-001 +96 9.255441E-012 +97 1.216131E-008 +98 4.145903E-009 +99 1.133213E-008 +100 6.586397E-007 +101 8.824027E-003 +102 5.015707E-006 +103 9.957162E-010 +104 4.267355E-010 +105 -1.309181E-008 +106 8.533145E-004 +107 2.253374E-003 +108 7.681959E-004 +109 2.099735E-003 +110 1.220396E-001 +111 1.635007E+003 +112 9.293622E-001 +113 1.844966E-004 +114 7.906998E-005 +115 3.884627E-006 +116 9.887551E-012 +117 5.856735E-007 +118 2.333477E+000 +119 1.629922E-002 +120 1.476535E-013 +121 7.614383E-012 +122 4.175127E-020 +123 1.012578E-010 +124 5.980376E-003 +125 6.686401E-007 +126 3.630905E-006 +127 1.167524E-014 +128 2.662156E-003 +129 1.572294E+003 +130 2.735480E-001 +131 4.943400E-001 +132 1.342219E+000 +133 2.396689E-001 +134 1.123586E-007 +135 3.071134E-007 +136 3.295852E-007 +137 1.784987E-005 +138 2.391409E-001 +139 1.359312E-004 +140 2.698502E-008 +141 1.156501E-008 +142 6.055035E-013 +143 3.140840E-009 +144 2.792129E-017 +145 2.910278E-019 +146 2.216415E-008 diff --git a/tests/model_tests/spec_model_1/output/reactionRates/48600.cmp b/tests/model_tests/spec_model_1/output/reactionRates/48600.cmp new file mode 100644 index 000000000..469189912 --- /dev/null +++ b/tests/model_tests/spec_model_1/output/reactionRates/48600.cmp @@ -0,0 +1,147 @@ + reactionNumber reactionRate +1 1.013494E-013 +2 2.913218E-014 +3 7.396553E-021 +4 4.801536E-024 +5 1.859689E-018 +6 3.681595E-019 +7 1.578148E-090 +8 4.563694E-090 +9 1.070019E+004 +10 1.660797E+006 +11 1.354690E-007 +12 1.217000E+004 +13 2.297370E+004 +14 4.796894E+007 +15 6.061578E-091 +16 1.702313E+001 +17 1.101256E-003 +18 4.543628E+002 +19 9.223576E-003 +20 3.073130E+002 +21 1.313623E-002 +22 2.481761E-001 +23 1.864245E-001 +24 4.890725E-003 +25 4.178314E+002 +26 3.412864E+000 +27 2.747053E+000 +28 1.991957E+004 +29 1.084833E-003 +30 4.341795E+002 +31 2.642532E-001 +32 2.994487E+000 +33 0.000000E+000 +34 0.000000E+000 +35 0.000000E+000 +36 2.538334E+005 +37 9.566995E+005 +38 0.000000E+000 +39 0.000000E+000 +40 0.000000E+000 +41 0.000000E+000 +42 0.000000E+000 +43 0.000000E+000 +44 0.000000E+000 +45 0.000000E+000 +46 0.000000E+000 +47 4.644821E+007 +48 1.983086E+004 +49 1.058499E+002 +50 1.206324E+003 +51 5.360961E+000 +52 2.189703E-001 +53 8.911099E-001 +54 7.598821E+001 +55 2.670943E-003 +56 8.903143E-004 +57 8.903143E-004 +58 0.000000E+000 +59 0.000000E+000 +60 1.633775E+002 +61 2.725711E+000 +62 4.463398E+002 +63 6.031618E+002 +64 1.568221E+002 +65 1.793767E-002 +66 2.686549E-004 +67 5.346232E-002 +68 4.581838E+000 +69 1.667962E-004 +70 5.003885E-004 +71 1.667962E-004 +72 3.351098E-007 +73 1.488766E-007 +74 0.000000E+000 +75 1.052888E+001 +76 6.645706E+001 +77 1.999641E-003 +78 6.239413E-002 +79 9.374500E-005 +80 0.000000E+000 +81 4.422109E-001 +82 9.043792E-007 +83 7.512954E-003 +84 0.000000E+000 +85 1.672089E+002 +86 2.786815E+002 +87 2.328571E-004 +88 8.812371E-004 +89 0.000000E+000 +90 3.339452E+000 +91 1.300249E+000 +92 4.129168E-007 +93 1.893099E+002 +94 1.673127E-001 +95 6.692507E-001 +96 0.000000E+000 +97 1.491807E-007 +98 5.085704E-008 +99 1.390092E-007 +100 1.957191E-006 +101 7.388003E-002 +102 1.329254E-004 +103 5.221229E-008 +104 2.237670E-008 +105 6.850535E-081 +106 1.700840E-003 +107 3.624699E-003 +108 1.235693E-003 +109 3.377561E-003 +110 4.755462E-002 +111 1.795091E+003 +112 3.229740E+000 +113 1.268622E-003 +114 5.436951E-004 +115 0.000000E+000 +116 0.000000E+000 +117 0.000000E+000 +118 6.948534E+000 +119 3.056469E-002 +120 2.803603E-013 +121 1.443188E-011 +122 0.000000E+000 +123 3.726219E-010 +124 1.172156E-002 +125 1.258168E-006 +126 6.830238E-006 +127 0.000000E+000 +128 5.113494E-003 +129 1.608551E+003 +130 8.124684E-001 +131 1.468245E+000 +132 3.986542E+000 +133 7.118435E-001 +134 4.889583E-007 +135 1.336486E-006 +136 1.434278E-006 +137 1.881715E-005 +138 7.103098E-001 +139 1.277994E-003 +140 5.019881E-007 +141 2.151378E-007 +142 0.000000E+000 +143 5.900741E-009 +144 0.000000E+000 +145 0.000000E+000 +146 4.162313E-008 diff --git a/tests/model_tests/spec_model_1/output/reactionRates/50400.cmp b/tests/model_tests/spec_model_1/output/reactionRates/50400.cmp new file mode 100644 index 000000000..3d74b752b --- /dev/null +++ b/tests/model_tests/spec_model_1/output/reactionRates/50400.cmp @@ -0,0 +1,147 @@ + reactionNumber reactionRate +1 -1.664891E-013 +2 -4.785614E-014 +3 -1.209036E-020 +4 -8.515285E-024 +5 -2.880663E-018 +6 -5.702799E-019 +7 -1.292393E-094 +8 -3.737346E-094 +9 1.149452E+004 +10 1.558293E+006 +11 1.578877E-007 +12 1.773278E+004 +13 2.923819E+004 +14 6.104914E+007 +15 -4.964007E-095 +16 2.452133E+001 +17 1.594217E-003 +18 6.577521E+002 +19 1.366410E-002 +20 3.813198E+002 +21 2.371337E-002 +22 3.859104E-001 +23 2.898875E-001 +24 7.643405E-003 +25 5.703582E+002 +26 6.668228E+000 +27 3.698151E+000 +28 2.342235E+004 +29 1.850487E-003 +30 7.307432E+002 +31 3.825402E-001 +32 4.288531E+000 +33 -0.000000E+000 +34 0.000000E+000 +35 0.000000E+000 +36 2.511167E+005 +37 1.227507E+006 +38 0.000000E+000 +39 0.000000E+000 +40 0.000000E+000 +41 0.000000E+000 +42 0.000000E+000 +43 0.000000E+000 +44 0.000000E+000 +45 0.000000E+000 +46 0.000000E+000 +47 5.959602E+007 +48 2.336711E+004 +49 1.426454E+002 +50 1.198517E+003 +51 7.748849E+000 +52 3.612405E-001 +53 1.272722E+000 +54 1.356833E+002 +55 4.630908E-003 +56 1.543636E-003 +57 1.543636E-003 +58 0.000000E+000 +59 0.000000E+000 +60 2.211561E+002 +61 3.957436E+000 +62 4.434513E+002 +63 5.992586E+002 +64 1.558072E+002 +65 2.630736E-002 +66 3.411118E-004 +67 6.788126E-002 +68 7.273102E+000 +69 2.570913E-004 +70 7.712741E-004 +71 2.570913E-004 +72 1.699106E-006 +73 7.548485E-007 +74 0.000000E+000 +75 1.858572E+001 +76 1.173109E+002 +77 2.894751E-003 +78 3.088363E-001 +79 4.976913E-004 +80 0.000000E+000 +81 4.393497E-001 +82 9.700309E-007 +83 7.038479E-003 +84 0.000000E+000 +85 1.661270E+002 +86 2.768783E+002 +87 3.371771E-004 +88 1.276031E-003 +89 0.000000E+000 +90 5.306814E+000 +91 2.066261E+000 +92 6.012842E-007 +93 2.549805E+002 +94 2.417073E-001 +95 9.668291E-001 +96 0.000000E+000 +97 9.778995E-007 +98 3.333748E-007 +99 9.112245E-007 +100 1.110723E-005 +101 3.662121E-001 +102 9.431019E-004 +103 3.597035E-007 +104 1.541587E-007 +105 -5.610375E-085 +106 2.601328E-003 +107 5.125580E-003 +108 1.747357E-003 +109 4.776108E-003 +110 5.821764E-002 +111 1.919471E+003 +112 4.943191E+000 +113 1.885356E-003 +114 8.080099E-004 +115 0.000000E+000 +116 0.000000E+000 +117 0.000000E+000 +118 9.359279E+000 +119 4.415668E-002 +120 4.508628E-013 +121 2.270305E-011 +122 0.000000E+000 +123 2.648493E-009 +124 5.755149E-002 +125 1.828011E-006 +126 9.915736E-006 +127 0.000000E+000 +128 7.679259E-003 +129 1.668695E+003 +130 1.094696E+000 +131 1.978271E+000 +132 5.371349E+000 +133 9.591169E-001 +134 8.706744E-007 +135 2.379843E-006 +136 2.553978E-006 +137 2.900873E-005 +138 9.564355E-001 +139 2.463097E-003 +140 9.394370E-007 +141 4.026159E-007 +142 0.000000E+000 +143 8.555729E-009 +144 0.000000E+000 +145 0.000000E+000 +146 6.028705E-008 diff --git a/tests/model_tests/spec_model_1/output/speciesConcentrations.output.cmp b/tests/model_tests/spec_model_1/output/speciesConcentrations.output.cmp new file mode 100644 index 000000000..45cc4843d --- /dev/null +++ b/tests/model_tests/spec_model_1/output/speciesConcentrations.output.cmp @@ -0,0 +1,32 @@ + t CO O3 NO NO2 C2H4 OH HO2 ETHENO3O2 HOCH2CH2O2 NO3CH2CO3 HOCH2CO3 HCOCO3 + 2.340000E+004 4.800000E+012 6.110000E+011 6.800000E+010 8.370000E+010 2.760000E+009 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 + 2.430000E+004 4.796633E+012 6.163608E+011 7.065953E+010 7.744115E+010 2.690022E+009 4.149617E+006 7.682670E+006 4.755265E-001 1.358277E+005 1.543195E-003 2.907844E+002 1.104317E-001 + 2.520000E+004 4.792251E+012 6.176982E+011 6.885875E+010 7.565352E+010 2.601894E+009 4.826991E+006 9.183572E+006 4.740316E-001 1.568539E+005 3.464636E-003 7.788542E+002 6.561231E-001 + 2.610000E+004 4.787431E+012 6.191966E+011 6.699721E+010 7.395202E+010 2.508167E+009 5.138277E+006 1.005456E+007 4.729817E-001 1.654383E+005 5.345739E-003 1.340879E+003 1.763351E+000 + 2.700000E+004 4.782420E+012 6.207836E+011 6.509101E+010 7.234147E+010 2.414064E+009 5.277412E+006 1.063286E+007 4.729999E-001 1.683369E+005 7.091283E-003 1.918889E+003 3.394120E+000 + 2.790000E+004 4.777341E+012 6.224167E+011 6.315771E+010 7.083095E+010 2.322054E+009 5.316767E+006 1.104092E+007 4.743649E-001 1.681243E+005 8.678147E-003 2.482185E+003 5.437937E+000 + 2.880000E+004 4.772275E+012 6.240632E+011 6.121446E+010 6.943171E+010 2.233527E+009 5.282332E+006 1.131628E+007 4.772404E-001 1.657697E+005 1.009366E-002 3.008284E+003 7.743539E+000 + 2.970000E+004 4.767286E+012 6.256915E+011 5.927671E+010 6.815622E+010 2.149408E+009 5.183187E+006 1.146381E+007 4.817732E-001 1.616517E+005 1.132481E-002 3.477448E+003 1.013204E+001 + 3.060000E+004 4.762432E+012 6.272679E+011 5.735741E+010 6.701783E+010 2.070387E+009 5.022925E+006 1.147693E+007 4.881409E-001 1.559464E+005 1.235826E-002 3.872154E+003 1.241077E+001 + 3.150000E+004 4.757769E+012 6.287563E+011 5.546635E+010 6.603066E+010 1.996990E+009 4.804120E+006 1.134660E+007 4.965842E-001 1.487742E+005 1.318175E-002 4.177898E+003 1.439051E+001 + 3.240000E+004 4.753349E+012 6.301177E+011 5.360948E+010 6.520977E+010 1.929612E+009 4.530121E+006 1.106556E+007 5.074386E-001 1.402553E+005 1.378514E-002 4.384145E+003 1.590421E+001 + 3.330000E+004 4.749220E+012 6.313119E+011 5.178824E+010 6.457140E+010 1.868524E+009 4.205803E+006 1.063086E+007 5.211749E-001 1.305315E+005 1.416108E-002 4.485115E+003 1.682451E+001 + 3.420000E+004 4.745426E+012 6.322971E+011 4.999875E+010 6.413339E+010 1.813885E+009 3.837873E+006 1.004546E+007 5.384567E-001 1.197738E+005 1.430585E-002 4.480285E+003 1.707751E+001 + 3.510000E+004 4.742002E+012 6.330316E+011 4.823080E+010 6.391589E+010 1.765738E+009 3.434940E+006 9.319328E+006 5.602286E-001 1.081854E+005 1.422003E-002 4.374573E+003 1.665086E+001 + 3.600000E+004 4.738974E+012 6.334729E+011 4.646649E+010 6.394234E+010 1.724018E+009 3.007413E+006 8.469928E+006 5.878570E-001 9.600101E+004 1.390953E-002 4.178165E+003 1.559465E+001 + 3.690000E+004 4.736361E+012 6.335784E+011 4.467841E+010 6.424102E+010 1.688554E+009 2.567240E+006 7.522152E+006 6.233660E-001 8.348423E+004 1.338653E-002 3.905991E+003 1.401473E+001 + 3.780000E+004 4.734165E+012 6.333028E+011 4.282705E+010 6.484739E+010 1.659073E+009 2.127500E+006 6.507484E+006 6.698555E-001 7.092286E+004 1.267058E-002 3.576873E+003 1.205928E+001 + 3.870000E+004 4.732380E+012 6.325959E+011 4.085686E+010 6.580784E+010 1.635199E+009 1.701866E+006 5.462519E+006 7.322872E-001 5.862190E+004 1.178976E-002 3.212388E+003 9.900338E+000 + 3.960000E+004 4.730984E+012 6.313959E+011 3.869029E+010 6.718552E+010 1.616462E+009 1.303930E+006 4.426893E+006 8.190728E-001 4.689441E+004 1.078196E-002 2.835582E+003 7.713170E+000 + 4.050000E+004 4.729944E+012 6.296199E+011 3.621828E+010 6.906978E+010 1.602299E+009 9.464362E+005 3.440826E+006 9.455781E-001 3.605019E+004 9.696266E-003 2.469654E+003 5.656480E+000 + 4.140000E+004 4.729217E+012 6.271471E+011 3.328489E+010 7.159162E+010 1.592066E+009 6.404176E+005 2.542489E+006 1.142778E+000 2.638217E+004 8.594791E-003 2.136801E+003 3.856507E+000 + 4.230000E+004 4.728748E+012 6.237923E+011 2.966302E+010 7.494822E+010 1.585053E+009 3.942002E+005 1.765376E+006 1.482114E+000 1.814990E+004 7.554857E-003 1.857442E+003 2.396899E+000 + 4.320000E+004 4.728478E+012 6.192683E+011 2.502019E+010 7.943745E+010 1.580511E+009 2.121955E+005 1.135651E+006 2.163788E+000 1.155817E+004 6.671593E-003 1.650040E+003 1.314810E+000 + 4.410000E+004 4.728347E+012 6.131640E+011 1.890162E+010 8.547464E+010 1.577694E+009 9.331138E+004 6.690434E+005 3.950797E+000 6.724972E+003 6.059757E-003 1.531717E+003 6.015910E-001 + 4.500000E+004 4.728297E+012 6.051496E+011 1.094758E+010 9.336946E+010 1.575919E+009 2.906148E+004 3.660405E+005 1.193980E+001 3.623624E+003 5.848019E-003 1.517984E+003 2.058421E-001 + 4.590000E+004 4.728286E+012 5.966022E+011 2.581539E+009 1.015525E+011 1.574651E+009 3.729359E+003 2.073880E+005 1.507696E+002 1.998742E+003 6.189569E-003 1.603034E+003 5.657250E-002 + 4.680000E+004 4.728286E+012 5.930215E+011 4.414287E+006 1.024178E+011 1.573529E+009 2.258981E+002 1.960032E+005 1.025227E+004 2.468589E+003 9.214619E-003 1.729437E+003 2.450336E-001 + 4.770000E+004 4.728286E+012 5.914391E+011 9.870461E+005 9.946339E+010 1.572385E+009 3.198740E+002 2.322064E+005 4.697112E+004 4.026377E+003 2.240698E-002 1.872777E+003 5.465698E-001 + 4.860000E+004 4.728287E+012 5.899067E+011 1.153009E+006 9.658467E+010 1.571212E+009 4.205178E+002 2.692791E+005 8.094325E+004 4.943396E+003 7.728065E-002 2.011169E+003 7.854359E-001 + 4.950000E+004 4.728287E+012 5.884212E+011 1.224455E+006 9.378848E+010 1.570018E+009 5.201738E+002 3.051487E+005 1.005288E+005 5.461885E+003 2.057345E-001 2.146950E+003 9.767848E-001 + 5.040000E+004 4.728288E+012 5.869815E+011 1.251606E+006 9.107410E+010 1.568811E+009 6.126092E+002 3.369418E+005 1.091143E+005 5.838641E+003 4.192602E-001 2.281948E+003 1.132266E+000 diff --git a/tests/model_tests/spec_model_1/spec_model_1.fac b/tests/model_tests/spec_model_1/spec_model_1.fac new file mode 100644 index 000000000..942314538 --- /dev/null +++ b/tests/model_tests/spec_model_1/spec_model_1.fac @@ -0,0 +1,371 @@ +****************************************************************** +* +* Citation +* +* A citation to +* the MCM website and the relevant mechanism construction +* protocols should be given in any publication using +* information obtained from this source, using the following +* or comparable wording: +* +* The chemical mechanistic +* information was taken from the Master Chemical Mechanism, +* MCM v3.3.1 (reference), via website: +* http://mcm.york.ac.uk/ +* +* The reference should be: +* +* +* For non-aromatic schemes: +* +* Jenkin et al., +* Atmos. Environ., 31, 81, 1997 +* [doi:10.1016/S1352-2310(96)00105-7] +* Saunders et +* al., Atmos. Chem. Phys., 3, 161, 2003 +* [doi:10.5194/acp-3-161-2003] +* +* For aromatic +* schemes: +* +* Jenkin et al., Atmos. Chem. Phys., +* 3, 181, 2003 [doi:10.5194/acp-3-181-2003] +* Bloss et +* al., Atmos. Chem. Phys., 5, 641, 2005 +* [doi:10.5194/acp-5-641-2005] +* +* For the +* β-caryophyllene scheme: +* +* Jenkin et al., +* Atmos. Chem. Phys., 12, 5275, 2012 +* [doi:10.5194/acp-12-5275-2012] +* +* For the isoprene +* scheme: +* +* Jenkin et al., Atmos. Chem. Phys., +* 15, 11433-11459, 2015 [doi:10.5194/acp-15-11433-2015] +* +* * +* +* +* +****************************************************************** +* C2H4 ; +*; +* Variable definitions. All species are listed here.; +*; +VARIABLE + HCHO HCOCO ETHENO3O NO3CH2CO3 O1D NO3CH2CO3H O3 HO2NO2 NO3 N2O5 +H2O2 NO NA HCOCO3H ETHO2HNO3 PHAN NO3CH2CHO HO2 NO2 HOCH2CHO HSO3 +NO3CH2CO2H CO HOCH2CO3 HOCH2CH2O2 O HNO3 SO3 SO2 CH2OOA HCOCO3 +HOCH2CH2O C2H4 HOCH2CO2H ETHOHNO3 NO3CH2PAN HOCH2CO3H OH H2 HONO +ETHGLY CH2OO HCOOH HYETHO2H HCOCO2H GLYOX ETHENO3O2 HCOCH2O SA ; +****************************************************** ; +*; +* Generic Rate Coefficients ; +*; +KRO2NO = 2.7D-12*EXP(360/TEMP) ; +KRO2HO2 = 2.91D-13*EXP(1300/TEMP) ; +KAPHO2 = 5.2D-13*EXP(980/TEMP) ; +KAPNO = 7.5D-12*EXP(290/TEMP) ; +KRO2NO3 = 2.3D-12 ; +KNO3AL = 1.44D-12*EXP(-1862/TEMP) ; +KDEC = 1.00D+06 ; +KROPRIM = 2.50D-14*EXP(-300/TEMP) ; +KROSEC = 2.50D-14*EXP(-300/TEMP) ; +KCH3O2 = 1.03D-13*EXP(365/TEMP) ; +K298CH3O2 = 3.5D-13 ; +K14ISOM1 = 3.00D7*EXP(-5300/TEMP) ; +*; +* Complex reactions ; +*; +KD0 = 1.10D-05*M*EXP(-10100/TEMP) ; +KDI = 1.90D17*EXP(-14100/TEMP) ; +KRD = KD0/KDI ; +FCD = 0.30 ; +NCD = 0.75-1.27*(LOG10(FCD)) ; +FD = 10@(LOG10(FCD)/(1+(LOG10(KRD)/NCD)**2)) ; +KBPAN = (KD0*KDI)*FD/(KD0+KDI) ; +KC0 = 3.28D-28*M*(TEMP/300)@-6.87 ; +KCI = 1.125D-11*(TEMP/300)@-1.105 ; +KRC = KC0/KCI ; +FCC = 0.30 ; +NC = 0.75-1.27*(LOG10(FCC)) ; +FC = 10@(LOG10(FCC)/(1+(LOG10(KRC)/NC)**2)) ; +KFPAN = (KC0*KCI)*FC/(KC0+KCI) ; +K10 = 1.0D-31*M*(TEMP/300)@-1.6 ; +K1I = 5.0D-11*(TEMP/300)@-0.3 ; +KR1 = K10/K1I ; +FC1 = 0.85 ; +NC1 = 0.75-1.27*(LOG10(FC1)) ; +F1 = 10@(LOG10(FC1)/(1+(LOG10(KR1)/NC1)**2)) ; +KMT01 = (K10*K1I)*F1/(K10+K1I) ; +K20 = 1.3D-31*M*(TEMP/300)@-1.5 ; +K2I = 2.3D-11*(TEMP/300)@0.24 ; +KR2 = K20/K2I ; +FC2 = 0.6 ; +NC2 = 0.75-1.27*(LOG10(FC2)) ; +F2 = 10@(LOG10(FC2)/(1+(LOG10(KR2)/NC2)**2)) ; +KMT02 = (K20*K2I)*F2/(K20+K2I) ; +K30 = 3.6D-30*M*(TEMP/300)@-4.1 ; +K3I = 1.9D-12*(TEMP/300)@0.2 ; +KR3 = K30/K3I ; +FC3 = 0.35 ; +NC3 = 0.75-1.27*(LOG10(FC3)) ; +F3 = 10@(LOG10(FC3)/(1+(LOG10(KR3)/NC3)**2)) ; +KMT03 = (K30*K3I)*F3/(K30+K3I) ; +K40 = 1.3D-3*M*(TEMP/300)@-3.5*EXP(-11000/TEMP) ; +K4I = 9.7D+14*(TEMP/300)@0.1*EXP(-11080/TEMP) ; +KR4 = K40/K4I ; +FC4 = 0.35 ; +NC4 = 0.75-1.27*(LOG10(FC4)) ; +F4 = 10@(LOG10(FC4)/(1+(LOG10(KR4)/NC4)**2)) ; +KMT04 = (K40*K4I)*F4/(K40+K4I) ; +KMT05 = 1.44D-13*(1+(M/4.2D+19)) ; +KMT06 = 1 + (1.40D-21*EXP(2200/TEMP)*H2O) ; +K70 = 7.4D-31*M*(TEMP/300)@-2.4 ; +K7I = 3.3D-11*(TEMP/300)@-0.3 ; +KR7 = K70/K7I ; +FC7 = 0.81 ; +NC7 = 0.75-1.27*(LOG10(FC7)) ; +F7 = 10@(LOG10(FC7)/(1+(LOG10(KR7)/NC7)**2)) ; +KMT07 = (K70*K7I)*F7/(K70+K7I) ; +K80 = 3.2D-30*M*(TEMP/300)@-4.5 ; +K8I = 3.0D-11 ; +KR8 = K80/K8I ; +FC8 = 0.41 ; +NC8 = 0.75-1.27*(LOG10(FC8)) ; +F8 = 10@(LOG10(FC8)/(1+(LOG10(KR8)/NC8)**2)) ; +KMT08 = (K80*K8I)*F8/(K80+K8I) ; +K90 = 1.4D-31*M*(TEMP/300)@-3.1 ; +K9I = 4.0D-12 ; +KR9 = K90/K9I ; +FC9 = 0.4 ; +NC9 = 0.75-1.27*(LOG10(FC9)) ; +F9 = 10@(LOG10(FC9)/(1+(LOG10(KR9)/NC9)**2)) ; +KMT09 = (K90*K9I)*F9/(K90+K9I) ; +K100 = 4.10D-05*M*EXP(-10650/TEMP) ; +K10I = 6.0D+15*EXP(-11170/TEMP) ; +KR10 = K100/K10I ; +FC10 = 0.4 ; +NC10 = 0.75-1.27*(LOG10(FC10)) ; +F10 = 10@(LOG10(FC10)/(1+(LOG10(KR10)/NC10)**2)) ; +KMT10 = (K100*K10I)*F10/(K100+K10I) ; +K1 = 2.40D-14*EXP(460/TEMP) ; +K3 = 6.50D-34*EXP(1335/TEMP) ; +K4 = 2.70D-17*EXP(2199/TEMP) ; +K2 = (K3*M)/(1+(K3*M/K4)) ; +KMT11 = K1 + K2 ; +K120 = 2.5D-31*M*(TEMP/300)@-2.6 ; +K12I = 2.0D-12 ; +KR12 = K120/K12I ; +FC12 = 0.53 ; +NC12 = 0.75-1.27*(LOG10(FC12)) ; +F12 = 10@(LOG10(FC12)/(1.0+(LOG10(KR12)/NC12)**2)) ; +KMT12 = (K120*K12I*F12)/(K120+K12I) ; +K130 = 2.5D-30*M*(TEMP/300)@-5.5 ; +K13I = 1.8D-11 ; +KR13 = K130/K13I ; +FC13 = 0.36 ; +NC13 = 0.75-1.27*(LOG10(FC13)) ; +F13 = 10@(LOG10(FC13)/(1+(LOG10(KR13)/NC13)**2)) ; +KMT13 = (K130*K13I)*F13/(K130+K13I) ; +K140 = 9.0D-5*EXP(-9690/TEMP)*M ; +K14I = 1.1D+16*EXP(-10560/TEMP) ; +KR14 = K140/K14I ; +FC14 = 0.36 ; +NC14 = 0.75-1.27*(LOG10(FC14)) ; +F14 = 10@(LOG10(FC14)/(1+(LOG10(KR14)/NC14)**2)) ; +KMT14 = (K140*K14I)*F14/(K140+K14I) ; +K150 = 8.6D-29*M*(TEMP/300)@-3.1 ; +K15I = 9.0D-12*(TEMP/300)@-0.85 ; +KR15 = K150/K15I ; +FC15 = 0.48 ; +NC15 = 0.75-1.27*(LOG10(FC15)) ; +F15 = 10@(LOG10(FC15)/(1+(LOG10(KR15)/NC15)**2)) ; +KMT15 = (K150*K15I)*F15/(K150+K15I) ; +K160 = 8D-27*M*(TEMP/300)@-3.5 ; +K16I = 3.0D-11*(TEMP/300)@-1 ; +KR16 = K160/K16I ; +FC16 = 0.5 ; +NC16 = 0.75-1.27*(LOG10(FC16)) ; +F16 = 10@(LOG10(FC16)/(1+(LOG10(KR16)/NC16)**2)) ; +KMT16 = (K160*K16I)*F16/(K160+K16I) ; +K170 = 5.0D-30*M*(TEMP/300)@-1.5 ; +K17I = 1.0D-12 ; +KR17 = K170/K17I ; +FC17 = 0.17*EXP(-51/TEMP)+EXP(-TEMP/204) ; +NC17 = 0.75-1.27*(LOG10(FC17)) ; +F17 = 10@(LOG10(FC17)/(1.0+(LOG10(KR17)/NC17)**2)) ; +KMT17 = (K170*K17I*F17)/(K170+K17I) ; +KMT18 = 9.5D-39*O2*EXP(5270/TEMP)/(1+7.5D-29*O2*EXP(5610/TEMP)) ; +KPPN0 = 1.7D-03*EXP(-11280/TEMP)*M ; +KPPNI = 8.3D+16*EXP(-13940/TEMP) ; +KRPPN = KPPN0/KPPNI ; +FCPPN = 0.36 ; +NCPPN = 0.75-1.27*(LOG10(FCPPN)) ; +FPPN = 10@(LOG10(FCPPN)/(1+(LOG10(KRPPN)/NCPPN)**2)) ; +KBPPN = (KPPN0*KPPNI)*FPPN/(KPPN0+KPPNI) ; +KRO2 = 1.26D-12*RO2 ; +****************************************************** ; +*; +* Peroxy radicals. ; +*; +* WARNING: The following species do not have SMILES strings in the database. ; +* If any of these are peroxy radicals the RO2 sum will be wrong!!! ; +****************************************************** ; +* ; +RO2 = ETHENO3O2 + HOCH2CH2O2 + NO3CH2CO3 + HOCH2CO3 + HCOCO3 ; +*; +* Reaction definitions. ; +*; +% 5.6D-34*N2*(TEMP/300)@-2.6*O2 : O = O3 ; +% 6.0D-34*O2*(TEMP/300)@-2.6*O2 : O = O3 ; +% 8.0D-12*EXP(-2060/TEMP) : O + O3 = ; +% KMT01 : O + NO = NO2 ; +% 5.5D-12*EXP(188/TEMP) : O + NO2 = NO ; +% KMT02 : O + NO2 = NO3 ; +% 3.2D-11*EXP(67/TEMP)*O2 : O1D = O ; +% 2.0D-11*EXP(130/TEMP)*N2 : O1D = O ; +% 1.4D-12*EXP(-1310/TEMP) : NO + O3 = NO2 ; +% 1.4D-13*EXP(-2470/TEMP) : NO2 + O3 = NO3 ; +% 3.3D-39*EXP(530/TEMP)*O2 : NO + NO = NO2 + NO2 ; +% 1.8D-11*EXP(110/TEMP) : NO + NO3 = NO2 + NO2 ; +% 4.50D-14*EXP(-1260/TEMP) : NO2 + NO3 = NO + NO2 ; +% KMT03 : NO2 + NO3 = N2O5 ; +% 2.14D-10*H2O : O1D = OH + OH ; +% 1.70D-12*EXP(-940/TEMP) : OH + O3 = HO2 ; +% 7.7D-12*EXP(-2100/TEMP) : OH + H2 = HO2 ; +% KMT05 : OH + CO = HO2 ; +% 2.9D-12*EXP(-160/TEMP) : OH + H2O2 = HO2 ; +% 2.03D-16*(TEMP/300)@4.57*EXP(693/TEMP) : HO2 + O3 = OH ; +% 4.8D-11*EXP(250/TEMP) : OH + HO2 = ; +% 2.20D-13*KMT06*EXP(600/TEMP) : HO2 + HO2 = H2O2 ; +% 1.90D-33*M*KMT06*EXP(980/TEMP) : HO2 + HO2 = H2O2 ; +% KMT07 : OH + NO = HONO ; +% KMT08 : OH + NO2 = HNO3 ; +% 2.0D-11 : OH + NO3 = HO2 + NO2 ; +% 3.45D-12*EXP(270/TEMP) : HO2 + NO = OH + NO2 ; +% KMT09 : HO2 + NO2 = HO2NO2 ; +% 3.2D-13*EXP(690/TEMP)*1.0 : OH + HO2NO2 = NO2 ; +% 4.0D-12 : HO2 + NO3 = OH + NO2 ; +% 2.5D-12*EXP(260/TEMP) : OH + HONO = NO2 ; +% KMT11 : OH + HNO3 = NO3 ; +% 4.0D-32*EXP(-1000/TEMP)*M : O + SO2 = SO3 ; +% KMT12 : OH + SO2 = HSO3 ; +% 1.3D-12*EXP(-330/TEMP)*O2 : HSO3 = HO2 + SO3 ; +% 6.00D-06 : HNO3 = NA ; +% 4.00D-04 : N2O5 = NA + NA ; +% 1.20D-15*H2O : SO3 = SA ; +% J<1> : O3 = O1D ; +% J<2> : O3 = O ; +% J<3> : H2O2 = OH + OH ; +% J<4> : NO2 = NO + O ; +% J<5> : NO3 = NO ; +% J<6> : NO3 = NO2 + O ; +% J<7> : HONO = OH + NO ; +% J<8> : HNO3 = OH + NO2 ; +% KMT04 : N2O5 = NO2 + NO3 ; +% KMT10 : HO2NO2 = HO2 + NO2 ; +% 3.3D-12*EXP(-2880/TEMP) : C2H4 + NO3 = ETHENO3O2 ; +% 9.1D-15*EXP(-2580/TEMP) : C2H4 + O3 = HCHO + CH2OOA ; +% KMT15 : C2H4 + OH = HOCH2CH2O2 ; +% KRO2HO2*0.387 : ETHENO3O2 + HO2 = ETHO2HNO3 ; +% KRO2NO : ETHENO3O2 + NO = ETHENO3O + NO2 ; +% KRO2NO3 : ETHENO3O2 + NO3 = ETHENO3O + NO2 ; +% 6.00D-13*0.6*RO2 : ETHENO3O2 = ETHENO3O ; +% 6.00D-13*0.2*RO2 : ETHENO3O2 = ETHOHNO3 ; +% 6.00D-13*0.2*RO2 : ETHENO3O2 = NO3CH2CHO ; +% J<11> : HCHO = CO + HO2 + HO2 ; +% J<12> : HCHO = H2 + CO ; +% 5.5D-16 : NO3 + HCHO = HNO3 + CO + HO2 ; +% 5.4D-12*EXP(135/TEMP) : OH + HCHO = HO2 + CO ; +% KDEC*0.37 : CH2OOA = CH2OO ; +% KDEC*0.50 : CH2OOA = CO ; +% KDEC*0.13 : CH2OOA = HO2 + CO + OH ; +% 1.53D-13*EXP(1300/TEMP) : HOCH2CH2O2 + HO2 = HYETHO2H ; +% KRO2NO*0.005 : HOCH2CH2O2 + NO = ETHOHNO3 ; +% KRO2NO*0.995 : HOCH2CH2O2 + NO = HOCH2CH2O + NO2 ; +% KRO2NO3 : HOCH2CH2O2 + NO3 = HOCH2CH2O + NO2 ; +% 2*(KCH3O2*7.8D-14*EXP(1000/TEMP))@0.5*RO2*0.2 : HOCH2CH2O2 = ETHGLY ; +% 2*(KCH3O2*7.8D-14*EXP(1000/TEMP))@0.5*RO2*0.6 : HOCH2CH2O2 = HOCH2CH2O ; +% 2*(KCH3O2*7.8D-14*EXP(1000/TEMP))@0.5*RO2*0.2 : HOCH2CH2O2 = HOCH2CHO ; +% 1.90D-12*EXP(190/TEMP) : ETHO2HNO3 + OH = ETHENO3O2 ; +% 1.62D-12 : ETHO2HNO3 + OH = NO3CH2CHO + OH ; +% J<41> : ETHO2HNO3 = ETHENO3O + OH ; +% 7.00D+03 : ETHENO3O = NO2 + HCHO + HCHO ; +% KROPRIM*O2 : ETHENO3O = NO3CH2CHO + HO2 ; +% 8.40D-13 : ETHOHNO3 + OH = HOCH2CHO + NO2 ; +% KNO3AL : NO3CH2CHO + NO3 = NO3CH2CO3 + HNO3 ; +% 3.40D-12 : NO3CH2CHO + OH = NO3CH2CO3 ; +% J<56>*4.3 : NO3CH2CHO = NO2 + HCOCH2O ; +% 1.20D-15 : CH2OO + CO = HCHO ; +% 1.00D-14 : CH2OO + NO = HCHO + NO2 ; +% 1.00D-15 : CH2OO + NO2 = HCHO + NO3 ; +% 7.00D-14 : CH2OO + SO2 = HCHO + SO3 ; +% 6.00D-18*H2O : CH2OO = HCHO + H2O2 ; +% 1.00D-17*H2O : CH2OO = HCOOH ; +% 1.90D-12*EXP(190/TEMP) : HYETHO2H + OH = HOCH2CH2O2 ; +% 1.38D-11 : HYETHO2H + OH = HOCH2CHO + OH ; +% J<41> : HYETHO2H = HOCH2CH2O + OH ; +% 9.50D+13*EXP(-5988/TEMP) : HOCH2CH2O = HO2 + HCHO + HCHO ; +% KROPRIM*O2 : HOCH2CH2O = HO2 + HOCH2CHO ; +% 1.45D-11 : ETHGLY + OH = HOCH2CHO + HO2 ; +% KNO3AL : HOCH2CHO + NO3 = HOCH2CO3 + HNO3 ; +% 1.00D-11*0.200 : HOCH2CHO + OH = GLYOX + HO2 ; +% 1.00D-11*0.800 : HOCH2CHO + OH = HOCH2CO3 ; +% J<15> : HOCH2CHO = HO2 + HCHO + HO2 + CO ; +% KAPHO2*0.44 : NO3CH2CO3 + HO2 = HCHO + NO2 + OH ; +% KAPHO2*0.15 : NO3CH2CO3 + HO2 = NO3CH2CO2H + O3 ; +% KAPHO2*0.41 : NO3CH2CO3 + HO2 = NO3CH2CO3H ; +% KAPNO : NO3CH2CO3 + NO = HCHO + NO2 + NO2 ; +% KFPAN : NO3CH2CO3 + NO2 = NO3CH2PAN ; +% KRO2NO3*1.74 : NO3CH2CO3 + NO3 = HCHO + NO2 + NO2 ; +% 1.00D-11*0.7*RO2 : NO3CH2CO3 = HCHO + NO2 ; +% 1.00D-11*0.3*RO2 : NO3CH2CO3 = NO3CH2CO2H ; +% KDEC : HCOCH2O = HCHO + CO + HO2 ; +% 4.5D-13 : HCOOH + OH = HO2 ; +% KAPHO2*0.44 : HOCH2CO3 + HO2 = HO2 + HCHO + OH ; +% KAPHO2*0.15 : HOCH2CO3 + HO2 = HOCH2CO2H + O3 ; +% KAPHO2*0.41 : HOCH2CO3 + HO2 = HOCH2CO3H ; +% KAPNO : HOCH2CO3 + NO = NO2 + HO2 + HCHO ; +% KFPAN : HOCH2CO3 + NO2 = PHAN ; +% KRO2NO3*1.74 : HOCH2CO3 + NO3 = NO2 + HO2 + HCHO ; +% 1.00D-11*0.7*RO2 : HOCH2CO3 = HCHO + HO2 ; +% 1.00D-11*0.3*RO2 : HOCH2CO3 = HOCH2CO2H ; +% J<31> : GLYOX = CO + CO + H2 ; +% J<33> : GLYOX = CO + CO + HO2 + HO2 ; +% J<32> : GLYOX = HCHO + CO ; +% KNO3AL : NO3 + GLYOX = HCOCO + HNO3 ; +% 3.1D-12*EXP(340/TEMP) : OH + GLYOX = HCOCO ; +% 1.68D-13 : NO3CH2CO2H + OH = HCHO + NO2 ; +% 3.63D-12 : NO3CH2CO3H + OH = NO3CH2CO3 ; +% J<41> : NO3CH2CO3H = HCHO + NO2 + OH ; +% 1.12D-14 : NO3CH2PAN + OH = HCHO + CO + NO2 + NO2 ; +% KBPAN : NO3CH2PAN = NO3CH2CO3 + NO2 ; +% 2.73D-12 : HOCH2CO2H + OH = HCHO + HO2 ; +% 6.19D-12 : HOCH2CO3H + OH = HOCH2CO3 ; +% J<41> : HOCH2CO3H = HCHO + HO2 + OH ; +% 1.12D-12 : PHAN + OH = HCHO + CO + NO2 ; +% KBPAN : PHAN = HOCH2CO3 + NO2 ; +% 7.00D11*EXP(-3160/TEMP) : HCOCO = CO + CO + HO2 ; +% 5.00D-12*O2 : HCOCO = CO + CO + HO2 ; +% 5.00D-12*O2*3.2*(1-EXP(-550/TEMP)) : HCOCO = CO + OH ; +% 5.00D-12*O2*3.2*EXP(-550/TEMP) : HCOCO = HCOCO3 ; +% KAPHO2*0.15 : HCOCO3 + HO2 = HCOCO2H + O3 ; +% KAPHO2*0.41 : HCOCO3 + HO2 = HCOCO3H ; +% KAPHO2*0.44 : HCOCO3 + HO2 = HO2 + CO + OH ; +% KAPNO : HCOCO3 + NO = HO2 + CO + NO2 ; +% KFPAN : HCOCO3 + NO2 = HO2 + CO + NO3 ; +% KRO2NO3*1.74 : HCOCO3 + NO3 = HO2 + CO + NO2 ; +% 1.00D-11*0.7*RO2 : HCOCO3 = CO + HO2 ; +% 1.00D-11*0.3*RO2 : HCOCO3 = HCOCO2H ; +% J<34> : HCOCO2H = HO2 + HO2 + CO ; +% 1.23D-11 : OH + HCOCO2H = CO + HO2 ; +% J<41> : HCOCO3H = HO2 + CO + OH ; +% J<15> : HCOCO3H = HO2 + CO + OH ; +% 1.58D-11 : OH + HCOCO3H = HCOCO3 ; +*; +* End of Subset. No. of Species = 50, No. of Reactions = 146 ; diff --git a/tests/model_tests/spec_model_1/spec_model_1.out.cmp b/tests/model_tests/spec_model_1/spec_model_1.out.cmp new file mode 100644 index 000000000..2fefae202 --- /dev/null +++ b/tests/model_tests/spec_model_1/spec_model_1.out.cmp @@ -0,0 +1,211 @@ +AtChem2 v1.3-dev + +------------- + Directories +------------- + Model directory is: model + Output directory is: tests/model_tests/spec_model_1/output + Reaction Rates directory is: tests/model_tests/spec_model_1/output/reactionRates + Configuration directory is: tests/model_tests/spec_model_1/configuration + Constraints directory is: tests/model_tests/spec_model_1/constraints + Environment Constraints directory is: tests/model_tests/spec_model_1/constraints/environment + Photolysis Constraints directory is: tests/model_tests/spec_model_1/constraints/photolysis + Species Constraints directory is: tests/model_tests/spec_model_1/constraints/species + MCM directory is: mcm + Shared library is: tests/model_tests/spec_model_1/configuration/mechanism.so + +----------------------- + Species and reactions +----------------------- + Number of Species = 49 + Number of Reactions = 146 + + Size of lhs = 231 + Size of rhs = 256 + + Reading reactants (lhs) from mechanism.reac... + Reading products (rhs) from mechanism.prod... + Finished reading lhs and rhs data. + + Reading species names from mechanism.species... + Finished reading species names. + + Reading initial concentrations... + 1 CO 4.800E+12 + ... + 5 C2H4 2.760E+09 + Finished reading initial concentrations. + +---------------------------------------- + Species requiring detailed rate output +---------------------------------------- + Reading which species require detailed rate output... + 1 OH + 2 HO2 + Finished reading which species require detailed rate output. + Species requiring detailed rate output (number of species found): 2 + + Reading ro2 numbers from mechanism.ro2... + Finished reading ro2 numbers. + Reading solver parameters from file... + ------------------ + Solver parameters: + ------------------ + atol: 1.000E-03 + rtol: 1.000E-04 + deltaMain: 1.000E-04 + lookBack: 100 + maxStep: 1.000E+02 + preconBandUpper: 750 + preconBandLower: 750 + solverType: SPGMR + Banded Preconditioner + ------------------ + + Finished reading solver parameters from file. + + Reading model parameters from file... + ----------------- + Model parameters: + ----------------- + number of steps: 30 + step size: 0.900E+03 + species interpolation method: piecewise linear + conditions interpolation method: piecewise linear + rates output step size, ROPA/RODA: 3600 + model start time: 23400 + jacobian output step size: 0 + latitude: -0.733E+01 + longitude: -0.724E+02 + reaction rates output step size: 1800 + day/month/year: 9/11/2008 + ----------------- + + Finished reading model parameters from file. + +--------------------- + Species of Interest +--------------------- + Reading concentration output from file... + Finished reading concentration output from file. + Output required for concentration of 12 species: + 1 CO + ... + 12 HCOCO3 + +------------ + Photolysis +------------ + Reading photolysis numbers from file... + 1 + ... + 61 + Finished reading photolysis numbers. + Number of photolysis numbers: 35 + Looking for photolysis constants file... + Checking that photolysis constants exist in file... + Photolysis constants file is empty. + No photolysis constants applied, so trying constrained photolysis rates file... + Looking for photolysis constraints file... + Checking that photolysis constraints exist in file... + Photolysis constraint file is empty, so all photolysis rates will be calculated. + Reading all photolysis rates from file... + 1 6.073E-05 1.743E+00 4.740E-01 J1 1.000E+00 + ... + 61 7.537E-04 4.990E-01 2.660E-01 J61 1.000E+00 + Finished reading all photolysis rates. + Number of all photolysis rates: 35 + + +----------------------- + Environment variables +----------------------- + Reading environment variables... + Number of environment variables: 11 + 1 TEMP 291.45 + 2 PRESS 950.2 + 3 RH 67.4 + 4 H2O CALC + 5 DEC CALC + 6 BLHEIGHT NOTUSED + 7 DILUTE NOTUSED + 8 JFAC NOTUSED + 9 ROOF OPEN + 10 ASA NOTUSED + Finished reading environment variables. + + Checking for constrained environment variables... + Finished checking for constrained environment variables. + + +------------- + Constraints +------------- + Counting the variable-concentration species to be constrained (in file speciesConstrained.config)... + Finished counting the names of variable-concentration constrained species. + Number of names of variable-concentration constrained species: 0 + Counting the fixed-concentration species to be constrained (in file speciesConstant.config)... + Finished counting the names of fixed-concentration constrained species. + Number of names of fixed-concentration constrained species: 0 + Setting size of constraint arrays, n = 0 + Skipped reading the names of variable-concentration constrained species + Reading concentration data for variable-concentration constrained species... + Reading in the names and concentration of the fixed constrained species (in file speciesConstant.config)... + Finished reading in the names and concentration of fixed-concentration species. + Finished reading constrained species. + Initialising concentrations of constrained species... + Finished initialising concentrations of constrained species. + +--------------- + Problem stats +--------------- + neq = 49 + numberOfConstrainedSpecies = 0 + t0 = 2.340E+04 + + setting maxnumsteps ier = 0 + setting maxstep ier = 0 + +----------- + Model run +----------- + time = 24300 + time = 25200 + time = 26100 + time = 27000 + time = 27900 + time = 28800 + time = 29700 + time = 30600 + time = 31500 + time = 32400 + time = 33300 + time = 34200 + time = 35100 + time = 36000 + time = 36900 + time = 37800 + time = 38700 + time = 39600 + time = 40500 + time = 41400 + time = 42300 + time = 43200 + time = 44100 + time = 45000 + time = 45900 + time = 46800 + time = 47700 + time = 48600 + time = 49500 + time = 50400 + +------------------ + Final statistics +------------------ + No. steps = 503 No. f-s = 619 No. J-s = 970 No. LU-s = 108 + No. nonlinear iterations = 618 + No. nonlinear convergence failures = 0 + No. error test failures = 30 + + Runtime = 0 + Deallocating memory. diff --git a/tests/model_tests/spec_model_kpp/configuration/.gitignore b/tests/model_tests/spec_model_kpp/configuration/.gitignore new file mode 100644 index 000000000..1830d04bb --- /dev/null +++ b/tests/model_tests/spec_model_kpp/configuration/.gitignore @@ -0,0 +1,2 @@ +# Ignore auto-generated mechanism files in this directory +mechanism.* diff --git a/tests/model_tests/spec_model_kpp/configuration/environmentVariables.config b/tests/model_tests/spec_model_kpp/configuration/environmentVariables.config new file mode 100644 index 000000000..f0e11ee48 --- /dev/null +++ b/tests/model_tests/spec_model_kpp/configuration/environmentVariables.config @@ -0,0 +1,10 @@ +1 TEMP 291.45 +2 PRESS 950.2 +3 RH 67.4 +4 H2O CALC +5 DEC CALC +6 BLHEIGHT NOTUSED +7 DILUTE NOTUSED +8 JFAC NOTUSED +9 ROOF OPEN +10 ASA NOTUSED diff --git a/tests/model_tests/spec_model_kpp/configuration/initialConcentrations.config b/tests/model_tests/spec_model_kpp/configuration/initialConcentrations.config new file mode 100644 index 000000000..81e939e0e --- /dev/null +++ b/tests/model_tests/spec_model_kpp/configuration/initialConcentrations.config @@ -0,0 +1,5 @@ +CO 4.8e+12 +O3 6.11e11 +NO 6.8e10 +NO2 8.37e10 +C2H4 2.76e+9 diff --git a/tests/model_tests/spec_model_kpp/configuration/model.parameters b/tests/model_tests/spec_model_kpp/configuration/model.parameters new file mode 100644 index 000000000..b8895756c --- /dev/null +++ b/tests/model_tests/spec_model_kpp/configuration/model.parameters @@ -0,0 +1,13 @@ +30 number of steps +900 step size (seconds) +2 species interpolation method (pw constant = 1, pw linear = 2) +2 conditions interpolation method (pw constant = 1, pw linear = 2) +3600 rates output step size - ROPA/RODA (seconds) +23400 model start time (seconds) +0 jacobian output step size (seconds) +-7.326 latitude (degrees: North is positive, South is negative) +-72.449 longitude (degrees: West is positive, East is negative) +09 day +11 month +2008 year +1800 reaction rates output step size (seconds) diff --git a/tests/model_tests/spec_model_kpp/configuration/outputRates.config b/tests/model_tests/spec_model_kpp/configuration/outputRates.config new file mode 100644 index 000000000..78da78737 --- /dev/null +++ b/tests/model_tests/spec_model_kpp/configuration/outputRates.config @@ -0,0 +1,2 @@ +OH +HO2 diff --git a/tests/model_tests/spec_model_kpp/configuration/outputSpecies.config b/tests/model_tests/spec_model_kpp/configuration/outputSpecies.config new file mode 100644 index 000000000..9affbbc32 --- /dev/null +++ b/tests/model_tests/spec_model_kpp/configuration/outputSpecies.config @@ -0,0 +1,12 @@ +CO +O3 +NO +NO2 +C2H4 +OH +HO2 +ETHENO3O2 +HOCH2CH2O2 +NO3CH2CO3 +HOCH2CO3 +HCOCO3 diff --git a/tests/model_tests/spec_model_kpp/configuration/photolysisConstant.config b/tests/model_tests/spec_model_kpp/configuration/photolysisConstant.config new file mode 100644 index 000000000..e69de29bb diff --git a/tests/model_tests/spec_model_kpp/configuration/photolysisConstrained.config b/tests/model_tests/spec_model_kpp/configuration/photolysisConstrained.config new file mode 100644 index 000000000..e69de29bb diff --git a/tests/model_tests/spec_model_kpp/configuration/solver.parameters b/tests/model_tests/spec_model_kpp/configuration/solver.parameters new file mode 100644 index 000000000..988f4341d --- /dev/null +++ b/tests/model_tests/spec_model_kpp/configuration/solver.parameters @@ -0,0 +1,9 @@ +1.0e-03 atol +1.0e-04 rtol +1.0e-04 delta main +100 lookback +100 maximum solver step size (seconds) +100000 maximum number of steps in solver +2 solver type (1 = spgmr, 2 = spgmr + banded preconditioner, 3 = dense) +750 banded preconditioner upper bandwidth +750 banded preconditioner lower bandwidth diff --git a/tests/model_tests/spec_model_kpp/configuration/speciesConstant.config b/tests/model_tests/spec_model_kpp/configuration/speciesConstant.config new file mode 100644 index 000000000..e69de29bb diff --git a/tests/model_tests/spec_model_kpp/configuration/speciesConstrained.config b/tests/model_tests/spec_model_kpp/configuration/speciesConstrained.config new file mode 100644 index 000000000..e69de29bb diff --git a/tests/model_tests/spec_model_kpp/output/.gitignore b/tests/model_tests/spec_model_kpp/output/.gitignore new file mode 100644 index 000000000..a73731eaa --- /dev/null +++ b/tests/model_tests/spec_model_kpp/output/.gitignore @@ -0,0 +1,2 @@ +# Ignore output files in this directory +*.output diff --git a/tests/model_tests/spec_model_kpp/output/environmentVariables.output.cmp b/tests/model_tests/spec_model_kpp/output/environmentVariables.output.cmp new file mode 100644 index 000000000..9a56868ba --- /dev/null +++ b/tests/model_tests/spec_model_kpp/output/environmentVariables.output.cmp @@ -0,0 +1,31 @@ + t M TEMP PRESS RH H2O DEC BLHEIGHT DILUTE JFAC ROOF ASA RO2 + 2.430000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.361190E+005 + 2.520000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.576339E+005 + 2.610000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.667814E+005 + 2.700000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.702597E+005 + 2.790000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.706124E+005 + 2.880000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.687862E+005 + 2.970000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.651398E+005 + 3.060000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.598315E+005 + 3.150000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.529670E+005 + 3.240000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.446559E+005 + 3.330000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.350340E+005 + 3.420000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.242717E+005 + 3.510000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.125772E+005 + 3.600000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.001954E+005 + 3.690000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 8.740487E+004 + 3.780000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 7.451247E+004 + 3.870000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 6.184493E+004 + 3.960000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 4.973854E+004 + 4.050000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 3.852646E+004 + 4.140000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 2.852398E+004 + 4.230000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 2.001123E+004 + 4.320000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.321170E+004 + 4.410000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 8.261247E+003 + 4.500000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 5.153759E+003 + 4.590000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 3.752608E+003 + 4.680000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.445055E+004 + 4.770000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 5.287084E+004 + 4.860000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 8.789880E+004 + 4.950000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.081390E+005 + 5.040000E+004 2.361390E+019 2.914500E+002 9.502000E+002 6.740000E+001 3.575722E+017 -2.913681E-001 -1.000000E+000 -1.000000E+000 1.000000E+000 1.000000E+000 -1.000000E+000 1.172365E+005 diff --git a/tests/model_tests/spec_model_kpp/output/errors.output.cmp b/tests/model_tests/spec_model_kpp/output/errors.output.cmp new file mode 100644 index 000000000..5dfb20c54 --- /dev/null +++ b/tests/model_tests/spec_model_kpp/output/errors.output.cmp @@ -0,0 +1,2 @@ +Number of fixed constrained species: 0 +Total number of constrained species: 0 diff --git a/tests/model_tests/spec_model_kpp/output/finalModelState.output.cmp b/tests/model_tests/spec_model_kpp/output/finalModelState.output.cmp new file mode 100644 index 000000000..ec5b65ada --- /dev/null +++ b/tests/model_tests/spec_model_kpp/output/finalModelState.output.cmp @@ -0,0 +1,49 @@ + O -4.0494396030697462E-021 + O3 586981542392.37390 + NO 1251605.7157716851 + NO2 91074099574.549210 + NO3 535797093.28700304 + O1D 2.3727372639763986E-108 + N2O5 3054963450.8051767 + OH 612.60917900819550 + HO2 336941.82610936131 + H2 450871027.17203808 + CO 4728287597903.9805 + H2O2 13183359.679675881 + HONO 101404582.80779153 + HNO3 41867636814.745773 + HO2NO2 873178.13819299405 + SO2 0.0000000000000000 + SO3 0.0000000000000000 + HSO3 0.0000000000000000 + NA 11992023880.385431 + SA 0.0000000000000000 + C2H4 1568810599.2381744 + ETHENO3O2 109114.32844104653 + HCHO 745699463.58192408 + CH2OOA 1.1987690855148642E-003 + HOCH2CH2O2 5838.6420691248013 + ETHO2HNO3 732.13035621820552 + ETHENO3O 2.6520035887889360E-003 + ETHOHNO3 5572918.4273867393 + NO3CH2CHO 229732.68694732443 + CH2OO 77.449109122352752 + HYETHO2H 149530.15203548866 + HOCH2CH2O 4.6070381322000347E-005 + ETHGLY 67.044824468982071 + HOCH2CHO 195453655.18136734 + NO3CH2CO3 0.41925992666082729 + HCOCH2O 5.8125687095078119E-092 + HCOOH 9331869.7671197038 + HOCH2CO3 2281.9480432954092 + GLYOX 7174284.7459312333 + NO3CH2CO2H 4.3122754164834918E-003 + NO3CH2CO3H 1.0062506192893114E-002 + NO3CH2PAN 364.43357381220648 + HOCH2CO2H 1082.6952080636470 + HOCH2CO3H 2590.2260616378785 + PHAN 11073143.332720775 + HCOCO 7.9480348078845545E-008 + HCOCO3 1.1322657325687413 + HCOCO2H 1.1247958033479410 + HCOCO3H 6.1703246183165446 diff --git a/tests/model_tests/spec_model_kpp/output/jacobian.output.cmp b/tests/model_tests/spec_model_kpp/output/jacobian.output.cmp new file mode 100644 index 000000000..e69de29bb diff --git a/tests/model_tests/spec_model_kpp/output/lossRates.output.cmp b/tests/model_tests/spec_model_kpp/output/lossRates.output.cmp new file mode 100644 index 000000000..f75623af8 --- /dev/null +++ b/tests/model_tests/spec_model_kpp/output/lossRates.output.cmp @@ -0,0 +1,351 @@ + time speciesNumber speciesName reactionNumber rate reaction + 2.700000E+004 8 OH 14 2.215678E+005 OH+O3=HO2 + 2.700000E+004 8 OH 15 1.111119E+000 OH+H2=HO2 + 2.700000E+004 8 OH 16 5.682220E+006 OH+CO=HO2 + 2.700000E+004 8 OH 17 2.363295E+001 OH+H2O2=HO2 + 2.700000E+004 8 OH 19 6.369222E+003 OH+HO2= + 2.700000E+004 8 OH 21 3.388006E+006 OH+NO=HONO + 2.700000E+004 8 OH 22 3.873670E+006 OH+NO2=HNO3 + 2.700000E+004 8 OH 23 7.422233E+001 OH+NO3=HO2+NO2 + 2.700000E+004 8 OH 26 3.954937E+002 OH+HO2NO2=NO2 + 2.700000E+004 8 OH 28 5.479423E+004 OH+HONO=NO2 + 2.700000E+004 8 OH 29 1.097700E+004 OH+HNO3=NO3 + 2.700000E+004 8 OH 31 0.000000E+000 OH+SO2=HSO3 + 2.700000E+004 8 OH 48 1.016890E+005 C2H4+OH=HOCH2CH2O2 + 2.700000E+004 8 OH 58 1.871710E+004 OH+HCHO=HO2+CO + 2.700000E+004 8 OH 69 2.685708E-006 ETHO2HNO3+OH=ETHENO3O2 + 2.700000E+004 8 OH 70 1.193158E-006 ETHO2HNO3+OH=NO3CH2CHO+OH + 2.700000E+004 8 OH 74 7.532236E+000 ETHOHNO3+OH=HOCH2CHO+NO2 + 2.700000E+004 8 OH 76 1.311110E-002 NO3CH2CHO+OH=NO3CH2CO3 + 2.700000E+004 8 OH 84 1.073046E+000 HYETHO2H+OH=HOCH2CH2O2 + 2.700000E+004 8 OH 85 4.060893E+000 HYETHO2H+OH=HOCH2CHO+OH + 2.700000E+004 8 OH 89 2.093661E-003 ETHGLY+OH=HOCH2CHO+HO2 + 2.700000E+004 8 OH 91 8.973134E+002 HOCH2CHO+OH=GLYOX+HO2 + 2.700000E+004 8 OH 92 3.589254E+003 HOCH2CHO+OH=HOCH2CO3 + 2.700000E+004 8 OH 103 4.150924E+000 HCOOH+OH=HO2 + 2.700000E+004 8 OH 116 6.761154E+001 OH+GLYOX=HCOCO + 2.700000E+004 8 OH 117 2.513757E-010 NO3CH2CO2H+OH=HCHO+NO2 + 2.700000E+004 8 OH 118 1.415888E-008 NO3CH2CO3H+OH=NO3CH2CO3 + 2.700000E+004 8 OH 120 4.351784E-007 NO3CH2PAN+OH=HCHO+CO+NO2+NO2 + 2.700000E+004 8 OH 122 9.829208E-004 HOCH2CO2H+OH=HCHO+HO2 + 2.700000E+004 8 OH 123 5.821209E-003 HOCH2CO3H+OH=HOCH2CO3 + 2.700000E+004 8 OH 125 1.055317E+001 PHAN+OH=HCHO+CO+NO2 + 2.700000E+004 8 OH 139 4.949326E-006 OH+HCOCO2H=CO+HO2 + 2.700000E+004 8 OH 141 1.803806E-005 OH+HCOCO3H=HCOCO3 + 2.700000E+004 9 HO2 18 1.268479E+004 HO2+O3=OH + 2.700000E+004 9 HO2 19 6.369222E+003 OH+HO2= + 2.700000E+004 9 HO2 20 1.336506E+003 HO2+HO2=H2O2 + 2.700000E+004 9 HO2 24 6.034940E+006 HO2+NO=OH+NO2 + 2.700000E+004 9 HO2 25 5.856478E+005 HO2+NO2=HO2NO2 + 2.700000E+004 9 HO2 27 2.994469E+001 HO2+NO3=OH+NO2 + 2.700000E+004 9 HO2 49 4.911132E-005 ETHENO3O2+HO2=ETHO2HNO3 + 2.700000E+004 9 HO2 62 2.375527E+001 HOCH2CH2O2+HO2=HYETHO2H + 2.700000E+004 9 HO2 94 5.037549E-007 NO3CH2CO3+HO2=HCHO+NO2+OH + 2.700000E+004 9 HO2 95 1.717346E-007 NO3CH2CO3+HO2=NO3CH2CO2H+O3 + 2.700000E+004 9 HO2 96 4.694080E-007 NO3CH2CO3+HO2=NO3CH2CO3H + 2.700000E+004 9 HO2 104 1.366702E-001 HOCH2CO3+HO2=HO2+HCHO+OH + 2.700000E+004 9 HO2 105 4.659212E-002 HOCH2CO3+HO2=HOCH2CO2H+O3 + 2.700000E+004 9 HO2 106 1.273518E-001 HOCH2CO3+HO2=HOCH2CO3H + 2.700000E+004 9 HO2 130 8.327974E-005 HCOCO3+HO2=HCOCO2H+O3 + 2.700000E+004 9 HO2 131 2.276313E-004 HCOCO3+HO2=HCOCO3H + 2.700000E+004 9 HO2 132 2.442872E-004 HCOCO3+HO2=HO2+CO+OH + 3.060000E+004 8 OH 14 2.125165E+005 OH+O3=HO2 + 3.060000E+004 8 OH 15 3.803104E+000 OH+H2=HO2 + 3.060000E+004 8 OH 16 5.371256E+006 OH+CO=HO2 + 3.060000E+004 8 OH 17 5.041078E+001 OH+H2O2=HO2 + 3.060000E+004 8 OH 19 6.511413E+003 OH+HO2= + 3.060000E+004 8 OH 21 2.833493E+006 OH+NO=HONO + 3.060000E+004 8 OH 22 3.407257E+006 OH+NO2=HNO3 + 3.060000E+004 8 OH 23 7.473717E+001 OH+NO3=HO2+NO2 + 3.060000E+004 8 OH 26 3.753668E+002 OH+HO2NO2=NO2 + 3.060000E+004 8 OH 28 4.687782E+004 OH+HONO=NO2 + 3.060000E+004 8 OH 29 2.103379E+004 OH+HNO3=NO3 + 3.060000E+004 8 OH 31 0.000000E+000 OH+SO2=HSO3 + 3.060000E+004 8 OH 48 8.279084E+004 C2H4+OH=HOCH2CH2O2 + 3.060000E+004 8 OH 58 2.909829E+004 OH+HCHO=HO2+CO + 3.060000E+004 8 OH 69 5.521091E-006 ETHO2HNO3+OH=ETHENO3O2 + 3.060000E+004 8 OH 70 2.452812E-006 ETHO2HNO3+OH=NO3CH2CHO+OH + 3.060000E+004 8 OH 74 1.406375E+001 ETHOHNO3+OH=HOCH2CHO+NO2 + 3.060000E+004 8 OH 76 1.868051E-002 NO3CH2CHO+OH=NO3CH2CO3 + 3.060000E+004 8 OH 84 2.079816E+000 HYETHO2H+OH=HOCH2CH2O2 + 3.060000E+004 8 OH 85 7.870969E+000 HYETHO2H+OH=HOCH2CHO+OH + 3.060000E+004 8 OH 89 3.859513E-003 ETHGLY+OH=HOCH2CHO+HO2 + 3.060000E+004 8 OH 91 1.487621E+003 HOCH2CHO+OH=GLYOX+HO2 + 3.060000E+004 8 OH 92 5.950482E+003 HOCH2CHO+OH=HOCH2CO3 + 3.060000E+004 8 OH 103 7.295505E+000 HCOOH+OH=HO2 + 3.060000E+004 8 OH 116 2.180447E+002 OH+GLYOX=HCOCO + 3.060000E+004 8 OH 117 1.023630E-009 NO3CH2CO2H+OH=HCHO+NO2 + 3.060000E+004 8 OH 118 5.613722E-008 NO3CH2CO3H+OH=NO3CH2CO3 + 3.060000E+004 8 OH 120 1.258655E-006 NO3CH2PAN+OH=HCHO+CO+NO2+NO2 + 3.060000E+004 8 OH 122 4.619564E-003 HOCH2CO2H+OH=HCHO+HO2 + 3.060000E+004 8 OH 123 2.670284E-002 HOCH2CO3H+OH=HOCH2CO3 + 3.060000E+004 8 OH 125 3.598297E+001 PHAN+OH=HCHO+CO+NO2 + 3.060000E+004 8 OH 139 3.788601E-005 OH+HCOCO2H=CO+HO2 + 3.060000E+004 8 OH 141 1.471588E-004 OH+HCOCO3H=HCOCO3 + 3.060000E+004 9 HO2 18 1.380405E+004 HO2+O3=OH + 3.060000E+004 9 HO2 19 6.511413E+003 OH+HO2= + 3.060000E+004 9 HO2 20 1.550234E+003 HO2+HO2=H2O2 + 3.060000E+004 9 HO2 24 5.726488E+006 HO2+NO=OH+NO2 + 3.060000E+004 9 HO2 25 5.844620E+005 HO2+NO2=HO2NO2 + 3.060000E+004 9 HO2 27 3.421050E+001 HO2+NO3=OH+NO2 + 3.060000E+004 9 HO2 49 5.461552E-005 ETHENO3O2+HO2=ETHO2HNO3 + 3.060000E+004 9 HO2 62 2.364376E+001 HOCH2CH2O2+HO2=HYETHO2H + 3.060000E+004 9 HO2 94 9.395930E-007 NO3CH2CO3+HO2=HCHO+NO2+OH + 3.060000E+004 9 HO2 95 3.203158E-007 NO3CH2CO3+HO2=NO3CH2CO2H+O3 + 3.060000E+004 9 HO2 96 8.755298E-007 NO3CH2CO3+HO2=NO3CH2CO3H + 3.060000E+004 9 HO2 104 2.946403E-001 HOCH2CO3+HO2=HO2+HCHO+OH + 3.060000E+004 9 HO2 105 1.004456E-001 HOCH2CO3+HO2=HOCH2CO2H+O3 + 3.060000E+004 9 HO2 106 2.745512E-001 HOCH2CO3+HO2=HOCH2CO3H + 3.060000E+004 9 HO2 130 3.231464E-004 HCOCO3+HO2=HCOCO2H+O3 + 3.060000E+004 9 HO2 131 8.832669E-004 HCOCO3+HO2=HCOCO3H + 3.060000E+004 9 HO2 132 9.478962E-004 HCOCO3+HO2=HO2+CO+OH + 3.420000E+004 8 OH 14 1.633187E+005 OH+O3=HO2 + 3.420000E+004 8 OH 15 5.422633E+000 OH+H2=HO2 + 3.420000E+004 8 OH 16 4.080574E+006 OH+CO=HO2 + 3.420000E+004 8 OH 17 5.734272E+001 OH+H2O2=HO2 + 3.420000E+004 8 OH 19 4.333452E+003 OH+HO2= + 3.420000E+004 8 OH 21 1.882975E+006 OH+NO=HONO + 3.420000E+004 8 OH 22 2.487070E+006 OH+NO2=HNO3 + 3.420000E+004 8 OH 23 6.256677E+001 OH+NO3=HO2+NO2 + 3.420000E+004 8 OH 26 2.397265E+002 OH+HO2NO2=NO2 + 3.420000E+004 8 OH 28 2.702917E+004 OH+HONO=NO2 + 3.420000E+004 8 OH 29 2.231291E+004 OH+HNO3=NO3 + 3.420000E+004 8 OH 31 0.000000E+000 OH+SO2=HSO3 + 3.420000E+004 8 OH 48 5.532093E+004 C2H4+OH=HOCH2CH2O2 + 3.420000E+004 8 OH 58 2.558343E+004 OH+HCHO=HO2+CO + 3.420000E+004 8 OH 69 6.395023E-006 ETHO2HNO3+OH=ETHENO3O2 + 3.420000E+004 8 OH 70 2.841066E-006 ETHO2HNO3+OH=NO3CH2CHO+OH + 3.420000E+004 8 OH 74 1.455981E+001 ETHOHNO3+OH=HOCH2CHO+NO2 + 3.420000E+004 8 OH 76 1.753639E-002 NO3CH2CHO+OH=NO3CH2CO3 + 3.420000E+004 8 OH 84 2.049504E+000 HYETHO2H+OH=HOCH2CH2O2 + 3.420000E+004 8 OH 85 7.756254E+000 HYETHO2H+OH=HOCH2CHO+OH + 3.420000E+004 8 OH 89 3.652461E-003 ETHGLY+OH=HOCH2CHO+HO2 + 3.420000E+004 8 OH 91 1.387170E+003 HOCH2CHO+OH=GLYOX+HO2 + 3.420000E+004 8 OH 92 5.548681E+003 HOCH2CHO+OH=HOCH2CO3 + 3.420000E+004 8 OH 103 7.779484E+000 HCOOH+OH=HO2 + 3.420000E+004 8 OH 116 2.685248E+002 OH+GLYOX=HCOCO + 3.420000E+004 8 OH 117 1.567711E-009 NO3CH2CO2H+OH=HCHO+NO2 + 3.420000E+004 8 OH 118 8.390670E-008 NO3CH2CO3H+OH=NO3CH2CO3 + 3.420000E+004 8 OH 120 1.539667E-006 NO3CH2PAN+OH=HCHO+CO+NO2+NO2 + 3.420000E+004 8 OH 122 7.350617E-003 HOCH2CO2H+OH=HCHO+HO2 + 3.420000E+004 8 OH 123 4.152004E-002 HOCH2CO3H+OH=HOCH2CO3 + 3.420000E+004 8 OH 125 4.649251E+001 PHAN+OH=HCHO+CO+NO2 + 3.420000E+004 8 OH 139 6.539885E-005 OH+HCOCO2H=CO+HO2 + 3.420000E+004 8 OH 141 2.761873E-004 OH+HCOCO3H=HCOCO3 + 3.420000E+004 9 HO2 18 1.214561E+004 HO2+O3=OH + 3.420000E+004 9 HO2 19 4.333452E+003 OH+HO2= + 3.420000E+004 9 HO2 20 1.181205E+003 HO2+HO2=H2O2 + 3.420000E+004 9 HO2 24 4.356926E+006 HO2+NO=OH+NO2 + 3.420000E+004 9 HO2 25 4.884371E+005 HO2+NO2=HO2NO2 + 3.420000E+004 9 HO2 27 3.278958E+001 HO2+NO3=OH+NO2 + 3.420000E+004 9 HO2 49 5.263457E-005 ETHENO3O2+HO2=ETHO2HNO3 + 3.420000E+004 9 HO2 62 1.582247E+001 HOCH2CH2O2+HO2=HYETHO2H + 3.420000E+004 9 HO2 94 9.459267E-007 NO3CH2CO3+HO2=HCHO+NO2+OH + 3.420000E+004 9 HO2 95 3.224750E-007 NO3CH2CO3+HO2=NO3CH2CO2H+O3 + 3.420000E+004 9 HO2 96 8.814317E-007 NO3CH2CO3+HO2=NO3CH2CO3H + 3.420000E+004 9 HO2 104 2.960771E-001 HOCH2CO3+HO2=HO2+HCHO+OH + 3.420000E+004 9 HO2 105 1.009354E-001 HOCH2CO3+HO2=HOCH2CO2H+O3 + 3.420000E+004 9 HO2 106 2.758900E-001 HOCH2CO3+HO2=HOCH2CO3H + 3.420000E+004 9 HO2 130 3.846465E-004 HCOCO3+HO2=HCOCO2H+O3 + 3.420000E+004 9 HO2 131 1.051367E-003 HCOCO3+HO2=HCOCO3H + 3.420000E+004 9 HO2 132 1.128296E-003 HCOCO3+HO2=HO2+CO+OH + 3.780000E+004 8 OH 14 9.026490E+004 OH+O3=HO2 + 3.780000E+004 8 OH 15 4.234773E+000 OH+H2=HO2 + 3.780000E+004 8 OH 16 2.246608E+006 OH+CO=HO2 + 3.780000E+004 8 OH 17 3.818066E+001 OH+H2O2=HO2 + 3.780000E+004 8 OH 19 1.543261E+003 OH+HO2= + 3.780000E+004 8 OH 21 8.897594E+005 OH+NO=HONO + 3.780000E+004 8 OH 22 1.388797E+006 OH+NO2=HNO3 + 3.780000E+004 8 OH 23 4.027012E+001 OH+NO3=HO2+NO2 + 3.780000E+004 8 OH 26 8.668264E+001 OH+HO2NO2=NO2 + 3.780000E+004 8 OH 28 9.107035E+003 OH+HONO=NO2 + 3.780000E+004 8 OH 29 1.442048E+004 OH+HNO3=NO3 + 3.780000E+004 8 OH 31 0.000000E+000 OH+SO2=HSO3 + 3.780000E+004 8 OH 48 2.793823E+004 C2H4+OH=HOCH2CH2O2 + 3.780000E+004 8 OH 58 1.426505E+004 OH+HCHO=HO2+CO + 3.780000E+004 8 OH 69 4.576534E-006 ETHO2HNO3+OH=ETHENO3O2 + 3.780000E+004 8 OH 70 2.033181E-006 ETHO2HNO3+OH=NO3CH2CHO+OH + 3.780000E+004 8 OH 74 9.274144E+000 ETHOHNO3+OH=HOCH2CHO+NO2 + 3.780000E+004 8 OH 76 1.198280E-002 NO3CH2CHO+OH=NO3CH2CO3 + 3.780000E+004 8 OH 84 1.192608E+000 HYETHO2H+OH=HOCH2CH2O2 + 3.780000E+004 8 OH 85 4.513372E+000 HYETHO2H+OH=HOCH2CHO+OH + 3.780000E+004 8 OH 89 2.091059E-003 ETHGLY+OH=HOCH2CHO+HO2 + 3.780000E+004 8 OH 91 8.191963E+002 HOCH2CHO+OH=GLYOX+HO2 + 3.780000E+004 8 OH 92 3.276785E+003 HOCH2CHO+OH=HOCH2CO3 + 3.780000E+004 8 OH 103 5.393641E+000 HCOOH+OH=HO2 + 3.780000E+004 8 OH 116 1.719638E+002 OH+GLYOX=HCOCO + 3.780000E+004 8 OH 117 1.200507E-009 NO3CH2CO2H+OH=HCHO+NO2 + 3.780000E+004 8 OH 118 6.299689E-008 NO3CH2CO3H+OH=NO3CH2CO3 + 3.780000E+004 8 OH 120 1.025220E-006 NO3CH2PAN+OH=HCHO+CO+NO2+NO2 + 3.780000E+004 8 OH 122 5.562444E-003 HOCH2CO2H+OH=HCHO+HO2 + 3.780000E+004 8 OH 123 3.078562E-002 HOCH2CO3H+OH=HOCH2CO3 + 3.780000E+004 8 OH 125 3.049391E+001 PHAN+OH=HCHO+CO+NO2 + 3.780000E+004 8 OH 139 4.257739E-005 OH+HCOCO2H=CO+HO2 + 3.780000E+004 8 OH 141 2.057370E-004 OH+HCOCO3H=HCOCO3 + 3.780000E+004 9 HO2 18 7.849545E+003 HO2+O3=OH + 3.780000E+004 9 HO2 19 1.543261E+003 OH+HO2= + 3.780000E+004 9 HO2 20 4.918958E+002 HO2+HO2=H2O2 + 3.780000E+004 9 HO2 24 2.407412E+006 HO2+NO=OH+NO2 + 3.780000E+004 9 HO2 25 3.189346E+005 HO2+NO2=HO2NO2 + 3.780000E+004 9 HO2 27 2.467842E+001 HO2+NO3=OH+NO2 + 3.780000E+004 9 HO2 49 4.233598E-005 ETHENO3O2+HO2=ETHO2HNO3 + 3.780000E+004 9 HO2 62 6.024627E+000 HOCH2CH2O2+HO2=HYETHO2H + 3.780000E+004 9 HO2 94 5.390768E-007 NO3CH2CO3+HO2=HCHO+NO2+OH + 3.780000E+004 9 HO2 95 1.837762E-007 NO3CH2CO3+HO2=NO3CH2CO2H+O3 + 3.780000E+004 9 HO2 96 5.023215E-007 NO3CH2CO3+HO2=NO3CH2CO3H + 3.780000E+004 9 HO2 104 1.519909E-001 HOCH2CO3+HO2=HO2+HCHO+OH + 3.780000E+004 9 HO2 105 5.181507E-002 HOCH2CO3+HO2=HOCH2CO2H+O3 + 3.780000E+004 9 HO2 106 1.416279E-001 HOCH2CO3+HO2=HOCH2CO3H + 3.780000E+004 9 HO2 130 1.740302E-004 HCOCO3+HO2=HCOCO2H+O3 + 3.780000E+004 9 HO2 131 4.756826E-004 HCOCO3+HO2=HCOCO3H + 3.780000E+004 9 HO2 132 5.104886E-004 HCOCO3+HO2=HO2+CO+OH + 4.140000E+004 8 OH 14 2.664537E+004 OH+O3=HO2 + 4.140000E+004 8 OH 15 1.517295E+000 OH+H2=HO2 + 4.140000E+004 8 OH 16 6.691021E+005 OH+CO=HO2 + 4.140000E+004 8 OH 17 1.230508E+001 OH+H2O2=HO2 + 4.140000E+004 8 OH 19 1.785144E+002 OH+HO2= + 4.140000E+004 8 OH 21 2.057102E+005 OH+NO=HONO + 4.140000E+004 8 OH 22 4.576551E+005 OH+NO2=HNO3 + 4.140000E+004 8 OH 23 1.664201E+001 OH+NO3=HO2+NO2 + 4.140000E+004 8 OH 26 1.115070E+001 OH+HO2NO2=NO2 + 4.140000E+004 8 OH 28 1.186397E+003 OH+HONO=NO2 + 4.140000E+004 8 OH 29 4.531830E+003 OH+HNO3=NO3 + 4.140000E+004 8 OH 31 0.000000E+000 OH+SO2=HSO3 + 4.140000E+004 8 OH 48 7.996526E+003 C2H4+OH=HOCH2CH2O2 + 4.140000E+004 8 OH 58 4.089875E+003 OH+HCHO=HO2+CO + 4.140000E+004 8 OH 69 1.604429E-006 ETHO2HNO3+OH=ETHENO3O2 + 4.140000E+004 8 OH 70 7.127872E-007 ETHO2HNO3+OH=NO3CH2CHO+OH + 4.140000E+004 8 OH 74 2.916113E+000 ETHOHNO3+OH=HOCH2CHO+NO2 + 4.140000E+004 8 OH 76 4.854036E-003 NO3CH2CHO+OH=NO3CH2CO3 + 4.140000E+004 8 OH 84 3.474026E-001 HYETHO2H+OH=HOCH2CH2O2 + 4.140000E+004 8 OH 85 1.314729E+000 HYETHO2H+OH=HOCH2CHO+OH + 4.140000E+004 8 OH 89 6.117110E-004 ETHGLY+OH=HOCH2CHO+HO2 + 4.140000E+004 8 OH 91 2.472522E+002 HOCH2CHO+OH=GLYOX+HO2 + 4.140000E+004 8 OH 92 9.890088E+002 HOCH2CHO+OH=HOCH2CO3 + 4.140000E+004 8 OH 103 1.917289E+000 HCOOH+OH=HO2 + 4.140000E+004 8 OH 116 4.948911E+001 OH+GLYOX=HCOCO + 4.140000E+004 8 OH 117 3.998627E-010 NO3CH2CO2H+OH=HCHO+NO2 + 4.140000E+004 8 OH 118 2.071119E-008 NO3CH2CO3H+OH=NO3CH2CO3 + 4.140000E+004 8 OH 120 3.060549E-007 NO3CH2PAN+OH=HCHO+CO+NO2+NO2 + 4.140000E+004 8 OH 122 1.819212E-003 HOCH2CO2H+OH=HCHO+HO2 + 4.140000E+004 8 OH 123 9.925793E-003 HOCH2CO3H+OH=HOCH2CO3 + 4.140000E+004 8 OH 125 8.623458E+000 PHAN+OH=HCHO+CO+NO2 + 4.140000E+004 8 OH 139 1.058268E-005 OH+HCOCO2H=CO+HO2 + 4.140000E+004 8 OH 141 6.242241E-005 OH+HCOCO3H=HCOCO3 + 4.140000E+004 9 HO2 18 3.015456E+003 HO2+O3=OH + 4.140000E+004 9 HO2 19 1.785144E+002 OH+HO2= + 4.140000E+004 9 HO2 20 7.404786E+001 HO2+HO2=H2O2 + 4.140000E+004 9 HO2 24 7.243348E+005 HO2+NO=OH+NO2 + 4.140000E+004 9 HO2 25 1.367751E+005 HO2+NO2=HO2NO2 + 4.140000E+004 9 HO2 27 1.327229E+001 HO2+NO3=OH+NO2 + 4.140000E+004 9 HO2 49 2.812677E-005 ETHENO3O2+HO2=ETHO2HNO3 + 4.140000E+004 9 HO2 62 8.636770E-001 HOCH2CH2O2+HO2=HYETHO2H + 4.140000E+004 9 HO2 94 1.416239E-007 NO3CH2CO3+HO2=HCHO+NO2+OH + 4.140000E+004 9 HO2 95 4.828089E-008 NO3CH2CO3+HO2=NO3CH2CO2H+O3 + 4.140000E+004 9 HO2 96 1.319678E-007 NO3CH2CO3+HO2=NO3CH2CO3H + 4.140000E+004 9 HO2 104 3.517456E-002 HOCH2CO3+HO2=HO2+HCHO+OH + 4.140000E+004 9 HO2 105 1.199133E-002 HOCH2CO3+HO2=HOCH2CO2H+O3 + 4.140000E+004 9 HO2 106 3.277630E-002 HOCH2CO3+HO2=HOCH2CO3H + 4.140000E+004 9 HO2 130 2.138957E-005 HCOCO3+HO2=HCOCO2H+O3 + 4.140000E+004 9 HO2 131 5.846481E-005 HCOCO3+HO2=HCOCO3H + 4.140000E+004 9 HO2 132 6.274272E-005 HCOCO3+HO2=HO2+CO+OH + 4.500000E+004 8 OH 14 1.117582E+003 OH+O3=HO2 + 4.500000E+004 8 OH 15 7.038078E-002 OH+H2=HO2 + 4.500000E+004 8 OH 16 2.909103E+004 OH+CO=HO2 + 4.500000E+004 8 OH 17 5.625891E-001 OH+H2O2=HO2 + 4.500000E+004 8 OH 19 1.104332E+000 OH+HO2= + 4.500000E+004 8 OH 21 2.854597E+003 OH+NO=HONO + 4.500000E+004 8 OH 22 2.601322E+004 OH+NO2=HNO3 + 4.500000E+004 8 OH 23 2.626629E+000 OH+NO3=HO2+NO2 + 4.500000E+004 8 OH 26 9.106435E-002 OH+HO2NO2=NO2 + 4.500000E+004 8 OH 28 1.835556E+001 OH+HONO=NO2 + 4.500000E+004 8 OH 29 1.958773E+002 OH+HNO3=NO3 + 4.500000E+004 8 OH 31 0.000000E+000 OH+SO2=HSO3 + 4.500000E+004 8 OH 48 3.442725E+002 C2H4+OH=HOCH2CH2O2 + 4.500000E+004 8 OH 58 1.735259E+002 OH+HCHO=HO2+CO + 4.500000E+004 8 OH 69 7.885252E-008 ETHO2HNO3+OH=ETHENO3O2 + 4.500000E+004 8 OH 70 3.503118E-008 ETHO2HNO3+OH=NO3CH2CHO+OH + 4.500000E+004 8 OH 74 1.280122E-001 ETHOHNO3+OH=HOCH2CHO+NO2 + 4.500000E+004 8 OH 76 3.689061E-004 NO3CH2CHO+OH=NO3CH2CO3 + 4.500000E+004 8 OH 84 1.491030E-002 HYETHO2H+OH=HOCH2CH2O2 + 4.500000E+004 8 OH 85 5.642735E-002 HYETHO2H+OH=HOCH2CHO+OH + 4.500000E+004 8 OH 89 2.637670E-005 ETHGLY+OH=HOCH2CHO+HO2 + 4.500000E+004 8 OH 91 1.072816E+001 HOCH2CHO+OH=GLYOX+HO2 + 4.500000E+004 8 OH 92 4.291263E+001 HOCH2CHO+OH=HOCH2CO3 + 4.500000E+004 8 OH 103 9.636254E-002 HCOOH+OH=HO2 + 4.500000E+004 8 OH 116 1.975886E+000 OH+GLYOX=HCOCO + 4.500000E+004 8 OH 117 1.772073E-011 NO3CH2CO2H+OH=HCHO+NO2 + 4.500000E+004 8 OH 118 9.138270E-010 NO3CH2CO3H+OH=NO3CH2CO3 + 4.500000E+004 8 OH 120 1.199847E-008 NO3CH2PAN+OH=HCHO+CO+NO2+NO2 + 4.500000E+004 8 OH 122 8.026572E-005 HOCH2CO2H+OH=HCHO+HO2 + 4.500000E+004 8 OH 123 4.358672E-004 HOCH2CO3H+OH=HOCH2CO3 + 4.500000E+004 8 OH 125 3.244876E-001 PHAN+OH=HCHO+CO+NO2 + 4.500000E+004 8 OH 139 3.828659E-007 OH+HCOCO2H=CO+HO2 + 4.500000E+004 8 OH 141 2.665504E-006 OH+HCOCO3H=HCOCO3 + 4.500000E+004 9 HO2 18 4.137510E+002 HO2+O3=OH + 4.500000E+004 9 HO2 19 1.104332E+000 OH+HO2= + 4.500000E+004 9 HO2 20 1.498536E+000 HO2+HO2=H2O2 + 4.500000E+004 9 HO2 24 3.288188E+004 HO2+NO=OH+NO2 + 4.500000E+004 9 HO2 25 2.543261E+004 HO2+NO2=HO2NO2 + 4.500000E+004 9 HO2 27 6.852786E+000 HO2+NO3=OH+NO2 + 4.500000E+004 9 HO2 49 4.429796E-005 ETHENO3O2+HO2=ETHO2HNO3 + 4.500000E+004 9 HO2 62 1.667213E-002 HOCH2CH2O2+HO2=HYETHO2H + 4.500000E+004 9 HO2 94 1.379017E-008 NO3CH2CO3+HO2=HCHO+NO2+OH + 4.500000E+004 9 HO2 95 4.701193E-009 NO3CH2CO3+HO2=NO3CH2CO2H+O3 + 4.500000E+004 9 HO2 96 1.284993E-008 NO3CH2CO3+HO2=NO3CH2CO3H + 4.500000E+004 9 HO2 104 3.580826E-003 HOCH2CO3+HO2=HO2+HCHO+OH + 4.500000E+004 9 HO2 105 1.220736E-003 HOCH2CO3+HO2=HOCH2CO2H+O3 + 4.500000E+004 9 HO2 106 3.336679E-003 HOCH2CO3+HO2=HOCH2CO3H + 4.500000E+004 9 HO2 130 1.564267E-007 HCOCO3+HO2=HCOCO2H+O3 + 4.500000E+004 9 HO2 131 4.275662E-007 HCOCO3+HO2=HCOCO3H + 4.500000E+004 9 HO2 132 4.588515E-007 HCOCO3+HO2=HO2+CO+OH + 4.860000E+004 8 OH 14 1.703092E+001 OH+O3=HO2 + 4.860000E+004 8 OH 15 1.101763E-003 OH+H2=HO2 + 4.860000E+004 8 OH 16 4.545722E+002 OH+CO=HO2 + 4.860000E+004 8 OH 17 9.227951E-003 OH+H2O2=HO2 + 4.860000E+004 8 OH 19 1.314492E-002 OH+HO2= + 4.860000E+004 8 OH 21 4.890807E-003 OH+NO=HONO + 4.860000E+004 8 OH 22 4.180098E+002 OH+NO2=HNO3 + 4.860000E+004 8 OH 23 3.415344E+000 OH+NO3=HO2+NO2 + 4.860000E+004 8 OH 26 1.085507E-003 OH+HO2NO2=NO2 + 4.860000E+004 8 OH 28 2.643749E-001 OH+HONO=NO2 + 4.860000E+004 8 OH 29 2.995848E+000 OH+HNO3=NO3 + 4.860000E+004 8 OH 31 0.000000E+000 OH+SO2=HSO3 + 4.860000E+004 8 OH 48 5.363426E+000 C2H4+OH=HOCH2CH2O2 + 4.860000E+004 8 OH 58 2.726972E+000 OH+HCHO=HO2+CO + 4.860000E+004 8 OH 69 3.357650E-007 ETHO2HNO3+OH=ETHENO3O2 + 4.860000E+004 8 OH 70 1.491676E-007 ETHO2HNO3+OH=NO3CH2CHO+OH + 4.860000E+004 8 OH 74 2.000562E-003 ETHOHNO3+OH=HOCH2CHO+NO2 + 4.860000E+004 8 OH 76 9.392756E-005 NO3CH2CHO+OH=NO3CH2CO3 + 4.860000E+004 8 OH 84 2.329644E-004 HYETHO2H+OH=HOCH2CH2O2 + 4.860000E+004 8 OH 85 8.816432E-004 HYETHO2H+OH=HOCH2CHO+OH + 4.860000E+004 8 OH 89 4.131091E-007 ETHGLY+OH=HOCH2CHO+HO2 + 4.860000E+004 8 OH 91 1.673896E-001 HOCH2CHO+OH=GLYOX+HO2 + 4.860000E+004 8 OH 92 6.695584E-001 HOCH2CHO+OH=HOCH2CO3 + 4.860000E+004 8 OH 103 1.701680E-003 HCOOH+OH=HO2 + 4.860000E+004 8 OH 116 3.057874E-002 OH+GLYOX=HCOCO + 4.860000E+004 8 OH 117 2.804944E-013 NO3CH2CO2H+OH=HCHO+NO2 + 4.860000E+004 8 OH 118 1.443879E-011 NO3CH2CO3H+OH=NO3CH2CO3 + 4.860000E+004 8 OH 120 3.728317E-010 NO3CH2PAN+OH=HCHO+CO+NO2+NO2 + 4.860000E+004 8 OH 122 1.258750E-006 HOCH2CO2H+OH=HCHO+HO2 + 4.860000E+004 8 OH 123 6.833394E-006 HOCH2CO3H+OH=HOCH2CO3 + 4.860000E+004 8 OH 125 5.115941E-003 PHAN+OH=HCHO+CO+NO2 + 4.860000E+004 8 OH 139 5.903464E-009 OH+HCOCO2H=CO+HO2 + 4.860000E+004 8 OH 141 4.164232E-008 OH+HCOCO3H=HCOCO3 + 4.860000E+004 9 HO2 18 3.073737E+002 HO2+O3=OH + 4.860000E+004 9 HO2 19 1.314492E-002 OH+HO2= + 4.860000E+004 9 HO2 20 8.695499E-001 HO2+HO2=H2O2 + 4.860000E+004 9 HO2 24 2.746385E+000 HO2+NO=OH+NO2 + 4.860000E+004 9 HO2 25 1.992289E+004 HO2+NO2=HO2NO2 + 4.860000E+004 9 HO2 27 4.343822E+002 HO2+NO3=OH+NO2 + 4.860000E+004 9 HO2 49 2.190066E-001 ETHENO3O2+HO2=ETHO2HNO3 + 4.860000E+004 9 HO2 62 1.793589E-002 HOCH2CH2O2+HO2=HYETHO2H + 4.860000E+004 9 HO2 94 1.495338E-007 NO3CH2CO3+HO2=HCHO+NO2+OH + 4.860000E+004 9 HO2 95 5.097743E-008 NO3CH2CO3+HO2=NO3CH2CO2H+O3 + 4.860000E+004 9 HO2 96 1.393383E-007 NO3CH2CO3+HO2=NO3CH2CO3H + 4.860000E+004 9 HO2 104 3.625706E-003 HOCH2CO3+HO2=HO2+HCHO+OH + 4.860000E+004 9 HO2 105 1.236036E-003 HOCH2CO3+HO2=HOCH2CO2H+O3 + 4.860000E+004 9 HO2 106 3.378499E-003 HOCH2CO3+HO2=HOCH2CO3H + 4.860000E+004 9 HO2 130 4.892009E-007 HCOCO3+HO2=HCOCO2H+O3 + 4.860000E+004 9 HO2 131 1.337149E-006 HCOCO3+HO2=HCOCO3H + 4.860000E+004 9 HO2 132 1.434989E-006 HCOCO3+HO2=HO2+CO+OH diff --git a/tests/model_tests/spec_model_kpp/output/mainSolverParameters.output.cmp b/tests/model_tests/spec_model_kpp/output/mainSolverParameters.output.cmp new file mode 100644 index 000000000..dbdd8d3a4 --- /dev/null +++ b/tests/model_tests/spec_model_kpp/output/mainSolverParameters.output.cmp @@ -0,0 +1,31 @@ + t currentStepSize previousStepSize LENRW LENIW NST NFE NETF NCFN NNI NSETUPS QU QCUR NOR LENRWLS LENIWLS LS_FLAG NFELS NJTV NPE NPS NLI NCFL + 2.43E+04 1.00000000E+002 6.65202318E+001 579 50 155 191 1 0 190 44 5 4 0 15546 105 0 278 278 3 447 278 0 + 2.52E+04 1.00000000E+002 1.00000000E+002 579 50 164 201 1 0 200 45 4 4 0 15546 105 0 304 304 3 483 304 0 + 2.61E+04 1.00000000E+002 1.00000000E+002 579 50 173 210 1 0 209 45 4 4 0 15546 105 0 322 322 3 510 322 0 + 2.70E+04 1.00000000E+002 1.00000000E+002 579 50 182 219 1 0 218 46 4 5 0 15546 105 0 333 333 4 530 333 0 + 2.79E+04 1.00000000E+002 1.00000000E+002 579 50 191 228 1 0 227 46 4 4 0 15546 105 0 342 342 4 548 342 0 + 2.88E+04 1.00000000E+002 1.00000000E+002 579 50 200 237 1 0 236 47 4 4 0 15546 105 0 350 350 4 565 350 0 + 2.97E+04 1.00000000E+002 1.00000000E+002 579 50 209 246 1 0 245 47 4 4 0 15546 105 0 360 360 4 584 360 0 + 3.06E+04 1.00000000E+002 1.00000000E+002 579 50 218 255 1 0 254 48 4 3 0 15546 105 0 375 375 4 608 375 0 + 3.15E+04 1.00000000E+002 1.00000000E+002 579 50 227 264 1 0 263 48 4 4 0 15546 105 0 389 389 4 631 389 0 + 3.24E+04 1.00000000E+002 1.00000000E+002 579 50 236 273 1 0 272 49 4 3 0 15546 105 0 403 403 5 654 403 0 + 3.33E+04 1.00000000E+002 1.00000000E+002 579 50 245 282 1 0 281 49 4 4 0 15546 105 0 411 411 5 671 411 0 + 3.42E+04 1.00000000E+002 1.00000000E+002 579 50 254 291 1 0 290 49 4 3 0 15546 105 0 420 420 5 689 420 0 + 3.51E+04 1.00000000E+002 1.00000000E+002 579 50 263 300 1 0 299 50 4 4 0 15546 105 0 429 429 5 707 429 0 + 3.60E+04 1.00000000E+002 1.00000000E+002 579 50 272 309 1 0 308 50 4 3 0 15546 105 0 439 439 5 726 439 0 + 3.69E+04 1.00000000E+002 1.00000000E+002 579 50 281 318 1 0 317 51 4 4 0 15546 105 0 448 448 5 744 448 0 + 3.78E+04 1.00000000E+002 1.00000000E+002 579 50 290 327 1 0 326 51 4 3 0 15546 105 0 460 460 5 765 460 0 + 3.87E+04 1.00000000E+002 1.00000000E+002 579 50 299 336 1 0 335 52 4 4 0 15546 105 0 470 470 6 784 470 0 + 3.96E+04 1.00000000E+002 1.00000000E+002 579 50 308 345 1 0 344 52 4 4 0 15546 105 0 478 478 6 801 478 0 + 4.05E+04 1.00000000E+002 1.00000000E+002 579 50 317 354 1 0 353 53 4 4 0 15546 105 0 487 487 6 819 487 0 + 4.14E+04 1.00000000E+002 1.00000000E+002 579 50 326 363 1 0 362 53 4 4 0 15546 105 0 497 497 6 838 497 0 + 4.23E+04 1.00000000E+002 1.00000000E+002 579 50 335 372 1 0 371 53 4 4 0 15546 105 0 510 510 6 860 510 0 + 4.32E+04 1.00000000E+002 1.00000000E+002 579 50 344 381 1 0 380 54 4 5 0 15546 105 0 528 528 6 887 528 0 + 4.41E+04 1.00000000E+002 1.00000000E+002 579 50 353 390 1 0 389 54 4 4 0 15546 105 0 561 561 6 929 561 0 + 4.50E+04 1.00000000E+002 1.00000000E+002 579 50 362 399 1 0 398 55 4 4 0 15546 105 0 590 590 7 967 590 0 + 4.59E+04 6.58728346E+001 6.58728346E+001 579 50 372 415 2 0 414 56 4 4 0 15546 105 0 644 644 7 1037 644 0 + 4.68E+04 2.50109551E+001 2.50109551E+001 579 50 390 441 4 0 440 58 4 4 0 15546 105 0 766 766 7 1185 766 0 + 4.77E+04 1.00000000E+002 1.00000000E+002 579 50 509 636 32 0 635 116 4 4 0 15546 105 0 959 959 9 1541 959 0 + 4.86E+04 1.00000000E+002 1.00000000E+002 579 50 518 645 32 0 644 116 5 5 0 15546 105 0 977 977 9 1568 977 0 + 4.95E+04 1.00000000E+002 1.00000000E+002 579 50 527 654 32 0 653 116 4 4 0 15546 105 0 992 992 9 1592 992 0 + 5.04E+04 1.00000000E+002 1.00000000E+002 579 50 536 663 32 0 662 117 4 4 0 15546 105 0 1001 1001 10 1610 1001 0 diff --git a/tests/model_tests/spec_model_kpp/output/photolysisRates.output.cmp b/tests/model_tests/spec_model_kpp/output/photolysisRates.output.cmp new file mode 100644 index 000000000..f5db7d64a --- /dev/null +++ b/tests/model_tests/spec_model_kpp/output/photolysisRates.output.cmp @@ -0,0 +1,31 @@ + t J1 J2 J3 J4 J5 J6 J7 J8 J11 J12 J13 J14 J15 J16 J17 J18 J19 J20 J21 J22 J23 J24 J31 J32 J33 J34 J35 J41 J51 J52 J53 J54 J55 J56 J61 + 2.430000E+004 3.663925E-005 4.384407E-004 7.764841E-006 8.855794E-003 2.221914E-002 1.535626E-001 1.967022E-003 6.703261E-007 3.210360E-005 4.905566E-005 4.730384E-006 1.972512E-005 1.959330E-005 1.175458E-005 5.412368E-005 1.089342E-006 1.089342E-006 5.586370E-004 5.937774E-007 3.899272E-006 1.785843E-006 1.785401E-006 5.572421E-005 8.401372E-006 2.745634E-005 1.241698E-004 2.668800E-004 5.708706E-006 1.131655E-006 1.334059E-006 1.751976E-006 2.925916E-006 8.183259E-006 3.097731E-005 5.714504E-004 + 2.520000E+004 3.666388E-005 4.384909E-004 7.767201E-006 8.857172E-003 2.222100E-002 1.535757E-001 1.967350E-003 6.706384E-007 3.211447E-005 4.906758E-005 4.732707E-006 1.973365E-005 1.960010E-005 1.175865E-005 5.414222E-005 1.089572E-006 1.089572E-006 5.587549E-004 5.941098E-007 3.901009E-006 1.786218E-006 1.785776E-006 5.572983E-005 8.402219E-006 2.746430E-005 1.241841E-004 2.669095E-004 5.710370E-006 1.132160E-006 1.334698E-006 1.752785E-006 2.927182E-006 8.186442E-006 3.099057E-005 5.715831E-004 + 2.610000E+004 3.635296E-005 4.378547E-004 7.737332E-006 8.839718E-003 2.219739E-002 1.534100E-001 1.963186E-003 6.666913E-007 3.197699E-005 4.891657E-005 4.703344E-006 1.962586E-005 1.951412E-005 1.170707E-005 5.390772E-005 1.086661E-006 1.086661E-006 5.572622E-004 5.899095E-007 3.879043E-006 1.781467E-006 1.781026E-006 5.565858E-005 8.391476E-006 2.736345E-005 1.240030E-004 2.665354E-004 5.689304E-006 1.125776E-006 1.326627E-006 1.742554E-006 2.911178E-006 8.146178E-006 3.082290E-005 5.699024E-004 + 2.700000E+004 3.571172E-005 4.365282E-004 7.675260E-006 8.803289E-003 2.214807E-002 1.530638E-001 1.954495E-003 6.585187E-007 3.169142E-005 4.860215E-005 4.642556E-006 1.940245E-005 1.933557E-005 1.159996E-005 5.342065E-005 1.080596E-006 1.080596E-006 5.541519E-004 5.812309E-007 3.833527E-006 1.771567E-006 1.771128E-006 5.550963E-005 8.369019E-006 2.715375E-005 1.236245E-004 2.657534E-004 5.645511E-006 1.112551E-006 1.309918E-006 1.721365E-006 2.878015E-006 8.062661E-006 3.047539E-005 5.664032E-004 + 2.790000E+004 3.475091E-005 4.345031E-004 7.581039E-006 8.747579E-003 2.207258E-002 1.525336E-001 1.941208E-003 6.461899E-007 3.125828E-005 4.812330E-005 4.550879E-006 1.906489E-005 1.906489E-005 1.143757E-005 5.268193E-005 1.071347E-006 1.071347E-006 5.494085E-004 5.681872E-007 3.764778E-006 1.756469E-006 1.756034E-006 5.528122E-005 8.334583E-006 2.683514E-005 1.230448E-004 2.645550E-004 5.579001E-006 1.092585E-006 1.284720E-006 1.689392E-006 2.827921E-006 7.936296E-006 2.995035E-005 5.610752E-004 + 2.880000E+004 3.348671E-005 4.317667E-004 7.454749E-006 8.672113E-003 2.197014E-002 1.518136E-001 1.923220E-003 6.298108E-007 3.067836E-005 4.747844E-005 4.429132E-006 1.861538E-005 1.870274E-005 1.122031E-005 5.169298E-005 1.058867E-006 1.058867E-006 5.430087E-004 5.509489E-007 3.673282E-006 1.736097E-006 1.735667E-006 5.497062E-005 8.287754E-006 2.640752E-005 1.222577E-004 2.629265E-004 5.489785E-006 1.066028E-006 1.251259E-006 1.646898E-006 2.761243E-006 7.767701E-006 2.925127E-005 5.539021E-004 + 2.970000E+004 3.194052E-005 4.283011E-004 7.296496E-006 8.576226E-003 2.183972E-002 1.508961E-001 1.900380E-003 6.095228E-007 2.995274E-005 4.666541E-005 4.278411E-006 1.805689E-005 1.825002E-005 1.094870E-005 5.045574E-005 1.043093E-006 1.043093E-006 5.349194E-004 5.297425E-007 3.559689E-006 1.710347E-006 1.709924E-006 5.457398E-005 8.227955E-006 2.587073E-005 1.212545E-004 2.608487E-004 5.377879E-006 1.033083E-006 1.209836E-006 1.594235E-006 2.678448E-006 7.557707E-006 2.838285E-005 5.448614E-004 + 3.060000E+004 3.013870E-005 4.240826E-004 7.106411E-006 8.459047E-003 2.167989E-002 1.497704E-001 1.872493E-003 5.855035E-007 2.908278E-005 4.568135E-005 4.100097E-006 1.739319E-005 1.770785E-005 1.062344E-005 4.897265E-005 1.023941E-006 1.023941E-006 5.250980E-004 5.048487E-007 3.424822E-006 1.679081E-006 1.678666E-006 5.408622E-005 8.154416E-006 2.522457E-005 1.200238E-004 2.582963E-004 5.243295E-006 9.940043E-007 1.160830E-006 1.531846E-006 2.580124E-006 7.307364E-006 2.735101E-005 5.339235E-004 + 3.150000E+004 2.811224E-005 4.190808E-004 6.884647E-006 8.319460E-003 2.148887E-002 1.484230E-001 1.839309E-003 5.579660E-007 2.807015E-005 4.452271E-005 3.895854E-006 1.662883E-005 1.707762E-005 1.024535E-005 4.724672E-005 1.001306E-006 1.001306E-006 5.134902E-004 4.765997E-007 3.269677E-006 1.642127E-006 1.641721E-006 5.350074E-005 8.066145E-006 2.446877E-005 1.185509E-004 2.552368E-004 5.086047E-006 9.491000E-007 1.104697E-006 1.460265E-006 2.466978E-006 7.017946E-006 2.616290E-005 5.210509E-004 + 3.240000E+004 2.589638E-005 4.132571E-004 6.631379E-006 8.156067E-003 2.126433E-002 1.468367E-001 1.800515E-003 5.271596E-007 2.691686E-005 4.318508E-005 3.667635E-006 1.576919E-005 1.636098E-005 9.815414E-006 4.528159E-005 9.750561E-007 9.750561E-007 5.000288E-004 4.453772E-007 3.095428E-006 1.599268E-006 1.598872E-006 5.280918E-005 7.961881E-006 2.360297E-005 1.168170E-004 2.516288E-004 4.906139E-006 8.987301E-007 1.041968E-006 1.380116E-006 2.339846E-006 6.690957E-006 2.482695E-005 5.061968E-004 + 3.330000E+004 2.353018E-005 4.065633E-004 6.346800E-006 7.967129E-003 2.100335E-002 1.449895E-001 1.755726E-003 4.933698E-007 2.562529E-005 4.166311E-005 3.417694E-006 1.482051E-005 1.555988E-005 9.334812E-006 4.308156E-005 9.450308E-007 9.450308E-007 4.846312E-004 4.116086E-007 2.903440E-006 1.550240E-006 1.549856E-006 5.200099E-005 7.840032E-006 2.262672E-005 1.147988E-004 2.474202E-004 4.703572E-006 8.433098E-007 9.732526E-007 1.292116E-006 2.199690E-006 6.328150E-006 2.335292E-005 4.893040E-004 + 3.420000E+004 2.105605E-005 3.989388E-004 6.031130E-006 7.750492E-003 2.070225E-002 1.428536E-001 1.704463E-003 4.569195E-007 2.419827E-005 3.995038E-005 3.148593E-006 1.378996E-005 1.467661E-005 8.804913E-006 4.065179E-005 9.110342E-007 9.110342E-007 4.671970E-004 3.757647E-007 2.695277E-006 1.494721E-006 1.494351E-006 5.106284E-005 7.698590E-006 2.153948E-005 1.124668E-004 2.425456E-004 4.478335E-006 7.833113E-007 8.992406E-007 1.197080E-006 2.047608E-006 5.931542E-006 2.175194E-005 4.703022E-004 + 3.510000E+004 1.851921E-005 3.903070E-004 5.684612E-006 7.503489E-003 2.035631E-002 1.403938E-001 1.646140E-003 4.181699E-007 2.263919E-005 3.803921E-005 2.863223E-006 1.268573E-005 1.371386E-005 8.227332E-006 3.799845E-005 8.728287E-007 8.728287E-007 4.476045E-004 3.383561E-007 2.472723E-006 1.432321E-006 1.431967E-006 4.997785E-005 7.535010E-006 2.034062E-005 1.097839E-004 2.369225E-004 4.230409E-006 7.192674E-007 8.207035E-007 1.095923E-006 1.884846E-006 5.503446E-006 2.003667E-005 4.491064E-004 + 3.600000E+004 1.596717E-005 3.805712E-004 5.307534E-006 7.222804E-003 1.995951E-002 1.375646E-001 1.580031E-003 3.775239E-007 2.095216E-005 3.592054E-005 2.564836E-006 1.151716E-005 1.267484E-005 7.603995E-006 3.512908E-005 8.301271E-007 8.301271E-007 4.257062E-004 2.999300E-007 2.237809E-006 1.362567E-006 1.362230E-006 4.872452E-005 7.346049E-006 1.902947E-005 1.067030E-004 2.304459E-004 3.959770E-006 6.517774E-007 7.385011E-007 9.896706E-007 1.712809E-006 5.046518E-006 1.822147E-005 4.256136E-004 + 3.690000E+004 1.344909E-005 3.696070E-004 4.900246E-006 6.904303E-003 1.950399E-002 1.343073E-001 1.505240E-003 3.354290E-007 1.914232E-005 3.358374E-005 2.257088E-006 1.029494E-005 1.156344E-005 6.937234E-006 3.205310E-005 7.825825E-007 7.825825E-007 4.013244E-004 2.610679E-007 1.992856E-006 1.284888E-006 1.284570E-006 4.727514E-005 7.127531E-006 1.760535E-005 1.031640E-004 2.229817E-004 3.666398E-006 5.815151E-007 6.535898E-007 8.794704E-007 1.533089E-006 4.563821E-006 1.632264E-005 3.996996E-004 + 3.780000E+004 1.101520E-005 3.572524E-004 4.463212E-006 6.542792E-003 1.897940E-002 1.305440E-001 1.420652E-003 2.923849E-007 1.721628E-005 3.101659E-005 1.944102E-006 9.031412E-006 1.038450E-005 6.229955E-006 2.878265E-005 7.297776E-007 7.297776E-007 3.742449E-004 2.223834E-007 1.740531E-006 1.198593E-006 1.198297E-006 4.559359E-005 6.874007E-006 1.606784E-005 9.908918E-005 2.143560E-004 3.350312E-006 5.092429E-007 5.670357E-007 7.666118E-007 1.347498E-006 4.058936E-006 1.435884E-005 3.712157E-004 + 3.870000E+004 8.716015E-006 3.432924E-004 3.997105E-006 6.131706E-003 1.837175E-002 1.261699E-001 1.324877E-003 2.489526E-007 1.518292E-005 2.820542E-005 1.630563E-006 7.741028E-006 9.144268E-006 5.485906E-006 2.533397E-005 6.712134E-007 6.712134E-007 3.442120E-004 1.845211E-007 1.483947E-006 1.102860E-006 1.102587E-006 4.363198E-005 6.578262E-006 1.441704E-005 9.437646E-005 2.043402E-004 3.011618E-006 4.358314E-007 4.800357E-007 6.525561E-007 1.158127E-006 3.536131E-006 1.235174E-005 3.399851E-004 + 3.960000E+004 6.601589E-006 3.274348E-004 3.502986E-006 5.662702E-003 1.766174E-002 1.210406E-001 1.216184E-003 2.057705E-007 1.305470E-005 2.513579E-005 1.321866E-006 6.441054E-006 7.851156E-006 4.710131E-006 2.172980E-005 6.063033E-007 6.063033E-007 3.109248E-004 1.481568E-007 1.226794E-006 9.967153E-007 9.964686E-007 4.132578E-005 6.230562E-006 1.265440E-005 8.888979E-005 1.926292E-004 2.650632E-006 3.622917E-007 3.939497E-007 5.389832E-007 9.674297E-007 3.000631E-006 1.032694E-005 3.058031E-004 + 4.050000E+004 4.720409E-006 3.092707E-004 2.982650E-006 5.125166E-003 1.682186E-002 1.149507E-001 1.092425E-003 1.635794E-007 1.084997E-005 2.179442E-005 1.024320E-006 5.152687E-006 6.517055E-006 3.909766E-006 1.800344E-005 5.343820E-007 5.343820E-007 2.740420E-004 1.140010E-007 9.735652E-007 8.790508E-007 8.788333E-007 3.858613E-005 5.817514E-006 1.078407E-005 8.244459E-005 1.788083E-004 2.268120E-006 2.898260E-007 3.103503E-007 4.278648E-007 7.783673E-007 2.459068E-006 8.315571E-006 2.684429E-004 + 4.140000E+004 3.117866E-006 2.882056E-004 2.439329E-006 4.505728E-003 1.581138E-002 1.075984E-001 9.510072E-004 1.232623E-007 8.597217E-006 1.817405E-005 7.454501E-007 3.902842E-006 5.159709E-006 3.095456E-006 1.420617E-005 4.547617E-007 4.547617E-007 2.332111E-004 8.280457E-008 7.298946E-007 7.487108E-007 7.485255E-007 3.528814E-005 5.320287E-006 8.815988E-006 7.478596E-005 1.623046E-004 1.865794E-006 2.199090E-007 2.311011E-007 3.215805E-007 5.946335E-007 1.920257E-006 6.356853E-006 2.276828E-004 + 4.230000E+004 1.833638E-006 2.633356E-004 1.879158E-006 3.788250E-003 1.456726E-002 9.852066E-002 7.890325E-004 8.590912E-008 6.342926E-006 1.428521E-005 4.944181E-007 2.727063E-006 3.807124E-006 2.284002E-006 1.042079E-005 3.669193E-007 3.669193E-007 1.881637E-004 5.536878E-008 5.030946E-007 6.047889E-007 6.046392E-007 3.125293E-005 4.711910E-006 6.772084E-006 6.555764E-005 1.423175E-004 1.447395E-006 1.544221E-007 1.584777E-007 2.231033E-007 4.210400E-007 1.396567E-006 4.502361E-006 1.833875E-004 + 4.320000E+004 8.967200E-007 2.332006E-004 1.314386E-006 2.955997E-003 1.298621E-002 8.697082E-002 6.040688E-004 5.291977E-008 4.166771E-006 1.018549E-005 2.824903E-007 1.674180E-006 2.506054E-006 1.503453E-006 6.787442E-006 2.710530E-007 2.710530E-007 1.390015E-004 3.255734E-008 3.029660E-007 4.475267E-007 4.474159E-007 2.622290E-005 3.953548E-006 4.700204E-006 5.426574E-005 1.177402E-004 1.021137E-006 9.587243E-008 9.534660E-008 1.362886E-007 2.641604E-007 9.064331E-007 2.823245E-006 1.357409E-004 + 4.410000E+004 3.150515E-007 1.952581E-004 7.708301E-007 2.002538E-003 1.088738E-002 7.168063E-002 3.971175E-004 2.615198E-008 2.210694E-006 6.053477E-006 1.231199E-007 8.128936E-007 1.338295E-006 8.028812E-007 3.551521E-006 1.697272E-007 1.697272E-007 8.703960E-005 1.529486E-008 1.427882E-007 2.809867E-007 2.809172E-007 1.984617E-005 2.992146E-006 2.705742E-006 4.028432E-005 8.718474E-005 6.055379E-007 4.772352E-008 4.537523E-008 6.626737E-008 1.333567E-007 4.789341E-007 1.421679E-006 8.592626E-005 + 4.500000E+004 5.376321E-008 1.446703E-004 3.052414E-007 9.772668E-004 7.934728E-003 5.044894E-002 1.833181E-004 8.008980E-009 7.253624E-007 2.372879E-006 2.945196E-008 2.349434E-007 4.474903E-007 2.684621E-007 1.134815E-006 7.273289E-008 7.273289E-008 3.729892E-005 4.468589E-009 3.910193E-008 1.210217E-007 1.209917E-007 1.180127E-005 1.779242E-006 1.021790E-006 2.321184E-005 4.983127E-005 2.435280E-007 1.465815E-008 1.294547E-008 1.956991E-008 4.182603E-008 1.608019E-007 4.423042E-007 3.817354E-005 + 4.590000E+004 1.169014E-009 7.564655E-005 3.828184E-008 1.741801E-004 3.792654E-003 2.196983E-002 2.856515E-005 6.324194E-010 5.735733E-008 2.648168E-007 1.232054E-009 1.508698E-008 3.771221E-008 2.262463E-008 8.397454E-008 9.869962E-009 9.869962E-009 5.061519E-006 3.562591E-010 2.211034E-009 1.662831E-008 1.662419E-008 3.324378E-006 5.012065E-007 1.103782E-007 6.127912E-006 1.278457E-005 3.128387E-008 1.133765E-009 8.589009E-010 1.391959E-009 3.357121E-009 1.457630E-008 3.450028E-008 5.895231E-006 + 4.680000E+004 7.376348E-027 9.390209E-008 5.124931E-018 1.455668E-013 7.073096E-007 1.143181E-006 4.631469E-015 3.778008E-021 2.471689E-020 1.952247E-018 1.711149E-024 2.479446E-021 4.720072E-020 2.831705E-020 1.553173E-020 5.754797E-019 5.754797E-019 2.951178E-016 1.724890E-020 8.091551E-023 1.132080E-018 1.131800E-018 5.397486E-013 8.137627E-014 1.373825E-018 5.394902E-013 6.868500E-013 4.528450E-018 3.372914E-021 5.858661E-022 1.777924E-021 1.263355E-020 1.217022E-019 7.922927E-020 3.271564E-015 + 4.770000E+004 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 + 4.860000E+004 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 + 4.950000E+004 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 + 5.040000E+004 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 diff --git a/tests/model_tests/spec_model_kpp/output/photolysisRatesParameters.output.cmp b/tests/model_tests/spec_model_kpp/output/photolysisRatesParameters.output.cmp new file mode 100644 index 000000000..e28e3adf1 --- /dev/null +++ b/tests/model_tests/spec_model_kpp/output/photolysisRatesParameters.output.cmp @@ -0,0 +1,31 @@ + t latitude longitude secx cosx lha sinld cosld eqtime + 2.340000E+004 -7.326000E+000 -7.244900E+001 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 + 2.430000E+004 -7.326000E+000 -7.244900E+001 1.014205E+000 9.859942E-001 -3.751712E-002 3.663024E-002 9.500325E-001 6.973437E-002 + 2.520000E+004 -7.326000E+000 -7.244900E+001 1.013898E+000 9.862922E-001 2.793273E-002 3.663024E-002 9.500325E-001 6.973437E-002 + 2.610000E+004 -7.326000E+000 -7.244900E+001 1.017787E+000 9.825235E-001 9.338258E-002 3.663024E-002 9.500325E-001 6.973437E-002 + 2.700000E+004 -7.326000E+000 -7.244900E+001 1.025952E+000 9.747044E-001 1.588324E-001 3.663024E-002 9.500325E-001 6.973437E-002 + 2.790000E+004 -7.326000E+000 -7.244900E+001 1.038564E+000 9.628682E-001 2.242823E-001 3.663024E-002 9.500325E-001 6.973437E-002 + 2.880000E+004 -7.326000E+000 -7.244900E+001 1.055893E+000 9.470658E-001 2.897321E-001 3.663024E-002 9.500325E-001 6.973437E-002 + 2.970000E+004 -7.326000E+000 -7.244900E+001 1.078324E+000 9.273648E-001 3.551820E-001 3.663024E-002 9.500325E-001 6.973437E-002 + 3.060000E+004 -7.326000E+000 -7.244900E+001 1.106379E+000 9.038495E-001 4.206318E-001 3.663024E-002 9.500325E-001 6.973437E-002 + 3.150000E+004 -7.326000E+000 -7.244900E+001 1.140744E+000 8.766206E-001 4.860817E-001 3.663024E-002 9.500325E-001 6.973437E-002 + 3.240000E+004 -7.326000E+000 -7.244900E+001 1.182320E+000 8.457948E-001 5.515315E-001 3.663024E-002 9.500325E-001 6.973437E-002 + 3.330000E+004 -7.326000E+000 -7.244900E+001 1.232280E+000 8.115040E-001 6.169814E-001 3.663024E-002 9.500325E-001 6.973437E-002 + 3.420000E+004 -7.326000E+000 -7.244900E+001 1.292165E+000 7.738951E-001 6.824312E-001 3.663024E-002 9.500325E-001 6.973437E-002 + 3.510000E+004 -7.326000E+000 -7.244900E+001 1.364016E+000 7.331291E-001 7.478810E-001 3.663024E-002 9.500325E-001 6.973437E-002 + 3.600000E+004 -7.326000E+000 -7.244900E+001 1.450578E+000 6.893806E-001 8.133309E-001 3.663024E-002 9.500325E-001 6.973437E-002 + 3.690000E+004 -7.326000E+000 -7.244900E+001 1.555605E+000 6.428369E-001 8.787807E-001 3.663024E-002 9.500325E-001 6.973437E-002 + 3.780000E+004 -7.326000E+000 -7.244900E+001 1.684360E+000 5.936973E-001 9.442306E-001 3.663024E-002 9.500325E-001 6.973437E-002 + 3.870000E+004 -7.326000E+000 -7.244900E+001 1.844432E+000 5.421723E-001 1.009680E+000 3.663024E-002 9.500325E-001 6.973437E-002 + 3.960000E+004 -7.326000E+000 -7.244900E+001 2.047156E+000 4.884825E-001 1.075130E+000 3.663024E-002 9.500325E-001 6.973437E-002 + 4.050000E+004 -7.326000E+000 -7.244900E+001 2.310228E+000 4.328578E-001 1.140580E+000 3.663024E-002 9.500325E-001 6.973437E-002 + 4.140000E+004 -7.326000E+000 -7.244900E+001 2.662858E+000 3.755363E-001 1.206030E+000 3.663024E-002 9.500325E-001 6.973437E-002 + 4.230000E+004 -7.326000E+000 -7.244900E+001 3.156928E+000 3.167636E-001 1.271480E+000 3.663024E-002 9.500325E-001 6.973437E-002 + 4.320000E+004 -7.326000E+000 -7.244900E+001 3.894212E+000 2.567914E-001 1.336930E+000 3.663024E-002 9.500325E-001 6.973437E-002 + 4.410000E+004 -7.326000E+000 -7.244900E+001 5.105261E+000 1.958764E-001 1.402380E+000 3.663024E-002 9.500325E-001 6.973437E-002 + 4.500000E+004 -7.326000E+000 -7.244900E+001 7.447156E+000 1.342794E-001 1.467829E+000 3.663024E-002 9.500325E-001 6.973437E-002 + 4.590000E+004 -7.326000E+000 -7.244900E+001 1.337170E+001 7.478478E-002 1.530624E+000 3.663024E-002 9.500325E-001 6.973437E-002 + 4.680000E+004 -7.326000E+000 -7.244900E+001 8.991746E+001 1.112131E-002 1.597650E+000 3.663024E-002 9.500325E-001 6.973437E-002 + 4.770000E+004 -7.326000E+000 -7.244900E+001 1.000000E+002 0.000000E+000 1.665852E+000 3.663024E-002 9.500325E-001 6.973437E-002 + 4.860000E+004 -7.326000E+000 -7.244900E+001 1.000000E+002 0.000000E+000 1.731302E+000 3.663024E-002 9.500325E-001 6.973437E-002 + 4.950000E+004 -7.326000E+000 -7.244900E+001 1.000000E+002 0.000000E+000 1.796751E+000 3.663024E-002 9.500325E-001 6.973437E-002 diff --git a/tests/model_tests/spec_model_kpp/output/productionRates.output.cmp b/tests/model_tests/spec_model_kpp/output/productionRates.output.cmp new file mode 100644 index 000000000..64278f19a --- /dev/null +++ b/tests/model_tests/spec_model_kpp/output/productionRates.output.cmp @@ -0,0 +1,379 @@ + time speciesNumber speciesName reactionNumber rate reaction + 2.700000E+004 8 OH 13 3.983258E+006 O1D=OH+OH + 2.700000E+004 8 OH 18 1.268479E+004 HO2+O3=OH + 2.700000E+004 8 OH 24 6.034940E+006 HO2+NO=OH+NO2 + 2.700000E+004 8 OH 27 2.994469E+001 HO2+NO3=OH+NO2 + 2.700000E+004 8 OH 38 4.100921E+001 H2O2=OH+OH + 2.700000E+004 8 OH 42 3.323675E+006 HONO=OH+NO + 2.700000E+004 8 OH 43 8.259176E+003 HNO3=OH+NO2 + 2.700000E+004 8 OH 61 2.532358E+002 CH2OOA=HO2+CO+OH + 2.700000E+004 8 OH 70 1.193158E-006 ETHO2HNO3+OH=NO3CH2CHO+OH + 2.700000E+004 8 OH 71 7.872377E-007 ETHO2HNO3=ETHENO3O+OH + 2.700000E+004 8 OH 85 4.060893E+000 HYETHO2H+OH=HOCH2CHO+OH + 2.700000E+004 8 OH 86 3.145324E-001 HYETHO2H=HOCH2CH2O+OH + 2.700000E+004 8 OH 94 5.037549E-007 NO3CH2CO3+HO2=HCHO+NO2+OH + 2.700000E+004 8 OH 104 1.366702E-001 HOCH2CO3+HO2=HO2+HCHO+OH + 2.700000E+004 8 OH 119 4.169127E-009 NO3CH2CO3H=HCHO+NO2+OH + 2.700000E+004 8 OH 124 1.005184E-003 HOCH2CO3H=HCHO+HO2+OH + 2.700000E+004 8 OH 128 3.861569E+001 HCOCO=CO+OH + 2.700000E+004 8 OH 132 2.442872E-004 HCOCO3+HO2=HO2+CO+OH + 2.700000E+004 8 OH 140 5.399627E-006 HCOCO3H=HO2+CO+OH + 2.700000E+004 9 HO2 14 2.215678E+005 OH+O3=HO2 + 2.700000E+004 9 HO2 15 1.111119E+000 OH+H2=HO2 + 2.700000E+004 9 HO2 16 5.682220E+006 OH+CO=HO2 + 2.700000E+004 9 HO2 17 2.363295E+001 OH+H2O2=HO2 + 2.700000E+004 9 HO2 23 7.422233E+001 OH+NO3=HO2+NO2 + 2.700000E+004 9 HO2 32 0.000000E+000 HSO3=HO2+SO3 + 2.700000E+004 9 HO2 45 5.846925E+005 HO2NO2=HO2+NO2 + 2.700000E+004 9 HO2 55 2.617402E+004 HCHO=CO+HO2+HO2 + 2.700000E+004 9 HO2 57 1.595827E-001 NO3+HCHO=HNO3+CO+HO2 + 2.700000E+004 9 HO2 58 1.871710E+004 OH+HCHO=HO2+CO + 2.700000E+004 9 HO2 61 2.532358E+002 CH2OOA=HO2+CO+OH + 2.700000E+004 9 HO2 73 2.464991E-001 ETHENO3O=NO3CH2CHO+HO2 + 2.700000E+004 9 HO2 87 7.281123E+004 HOCH2CH2O=HO2+HCHO+HCHO + 2.700000E+004 9 HO2 88 2.834978E+004 HOCH2CH2O=HO2+HOCH2CHO + 2.700000E+004 9 HO2 89 2.093661E-003 ETHGLY+OH=HOCH2CHO+HO2 + 2.700000E+004 9 HO2 91 8.973134E+002 HOCH2CHO+OH=GLYOX+HO2 + 2.700000E+004 9 HO2 93 3.284890E+003 HOCH2CHO=HO2+HCHO+HO2+CO + 2.700000E+004 9 HO2 102 9.567411E-002 HCOCH2O=HCHO+CO+HO2 + 2.700000E+004 9 HO2 103 4.150924E+000 HCOOH+OH=HO2 + 2.700000E+004 9 HO2 104 1.366702E-001 HOCH2CO3+HO2=HO2+HCHO+OH + 2.700000E+004 9 HO2 107 2.561827E+003 HOCH2CO3+NO=NO2+HO2+HCHO + 2.700000E+004 9 HO2 109 5.462221E-003 HOCH2CO3+NO3=NO2+HO2+HCHO + 2.700000E+004 9 HO2 110 2.316530E-003 HOCH2CO3=HCHO+HO2 + 2.700000E+004 9 HO2 113 6.983916E+001 GLYOX=CO+CO+HO2+HO2 + 2.700000E+004 9 HO2 122 9.829208E-004 HOCH2CO2H+OH=HCHO+HO2 + 2.700000E+004 9 HO2 124 1.005184E-003 HOCH2CO3H=HCHO+HO2+OH + 2.700000E+004 9 HO2 127 2.209216E+001 HCOCO=CO+CO+HO2 + 2.700000E+004 9 HO2 132 2.442872E-004 HCOCO3+HO2=HO2+CO+OH + 2.700000E+004 9 HO2 133 4.579063E+000 HCOCO3+NO=HO2+CO+NO2 + 2.700000E+004 9 HO2 134 2.313242E+000 HCOCO3+NO2=HO2+CO+NO3 + 2.700000E+004 9 HO2 135 9.763288E-006 HCOCO3+NO3=HO2+CO+NO2 + 2.700000E+004 9 HO2 136 4.140615E-006 HCOCO3=CO+HO2 + 2.700000E+004 9 HO2 138 1.883629E-005 HCOCO2H=HO2+HO2+CO + 2.700000E+004 9 HO2 139 4.949326E-006 OH+HCOCO2H=CO+HO2 + 2.700000E+004 9 HO2 140 5.399627E-006 HCOCO3H=HO2+CO+OH + 3.060000E+004 8 OH 13 3.396742E+006 O1D=OH+OH + 3.060000E+004 8 OH 18 1.380405E+004 HO2+O3=OH + 3.060000E+004 8 OH 24 5.726488E+006 HO2+NO=OH+NO2 + 3.060000E+004 8 OH 27 3.421050E+001 HO2+NO3=OH+NO2 + 3.060000E+004 8 OH 38 8.532345E+001 H2O2=OH+OH + 3.060000E+004 8 OH 42 2.869864E+006 HONO=OH+NO + 3.060000E+004 8 OH 43 1.482369E+004 HNO3=OH+NO2 + 3.060000E+004 8 OH 61 2.194666E+002 CH2OOA=HO2+CO+OH + 3.060000E+004 8 OH 70 2.452812E-006 ETHO2HNO3+OH=NO3CH2CHO+OH + 3.060000E+004 8 OH 71 1.583425E-006 ETHO2HNO3=ETHENO3O+OH + 3.060000E+004 8 OH 85 7.870969E+000 HYETHO2H+OH=HOCH2CHO+OH + 3.060000E+004 8 OH 86 5.964822E-001 HYETHO2H=HOCH2CH2O+OH + 3.060000E+004 8 OH 94 9.395930E-007 NO3CH2CO3+HO2=HCHO+NO2+OH + 3.060000E+004 8 OH 104 2.946403E-001 HOCH2CO3+HO2=HO2+HCHO+OH + 3.060000E+004 8 OH 119 1.617307E-008 NO3CH2CO3H=HCHO+NO2+OH + 3.060000E+004 8 OH 124 4.511439E-003 HOCH2CO3H=HCHO+HO2+OH + 3.060000E+004 8 OH 128 1.243110E+002 HCOCO=CO+OH + 3.060000E+004 8 OH 132 9.478962E-004 HCOCO3+HO2=HO2+CO+OH + 3.060000E+004 8 OH 140 4.263609E-005 HCOCO3H=HO2+CO+OH + 3.060000E+004 9 HO2 14 2.125165E+005 OH+O3=HO2 + 3.060000E+004 9 HO2 15 3.803104E+000 OH+H2=HO2 + 3.060000E+004 9 HO2 16 5.371256E+006 OH+CO=HO2 + 3.060000E+004 9 HO2 17 5.041078E+001 OH+H2O2=HO2 + 3.060000E+004 9 HO2 23 7.473717E+001 OH+NO3=HO2+NO2 + 3.060000E+004 9 HO2 32 0.000000E+000 HSO3=HO2+SO3 + 3.060000E+004 9 HO2 45 5.846126E+005 HO2NO2=HO2+NO2 + 3.060000E+004 9 HO2 55 3.933851E+004 HCHO=CO+HO2+HO2 + 3.060000E+004 9 HO2 57 2.772460E-001 NO3+HCHO=HNO3+CO+HO2 + 3.060000E+004 9 HO2 58 2.909829E+004 OH+HCHO=HO2+CO + 3.060000E+004 9 HO2 61 2.194666E+002 CH2OOA=HO2+CO+OH + 3.060000E+004 9 HO2 73 2.242522E-001 ETHENO3O=NO3CH2CHO+HO2 + 3.060000E+004 9 HO2 87 5.931359E+004 HOCH2CH2O=HO2+HCHO+HCHO + 3.060000E+004 9 HO2 88 2.309434E+004 HOCH2CH2O=HO2+HOCH2CHO + 3.060000E+004 9 HO2 89 3.859513E-003 ETHGLY+OH=HOCH2CHO+HO2 + 3.060000E+004 9 HO2 91 1.487621E+003 HOCH2CHO+OH=GLYOX+HO2 + 3.060000E+004 9 HO2 93 5.254143E+003 HOCH2CHO=HO2+HCHO+HO2+CO + 3.060000E+004 9 HO2 102 1.288851E-001 HCOCH2O=HCHO+CO+HO2 + 3.060000E+004 9 HO2 103 7.295505E+000 HCOOH+OH=HO2 + 3.060000E+004 9 HO2 104 2.946403E-001 HOCH2CO3+HO2=HO2+HCHO+OH + 3.060000E+004 9 HO2 107 4.518112E+003 HOCH2CO3+NO=NO2+HO2+HCHO + 3.060000E+004 9 HO2 109 1.159847E-002 HOCH2CO3+NO3=NO2+HO2+HCHO + 3.060000E+004 9 HO2 110 4.342582E-003 HOCH2CO3=HCHO+HO2 + 3.060000E+004 9 HO2 113 2.204154E+002 GLYOX=CO+CO+HO2+HO2 + 3.060000E+004 9 HO2 122 4.619564E-003 HOCH2CO2H+OH=HCHO+HO2 + 3.060000E+004 9 HO2 124 4.511439E-003 HOCH2CO3H=HCHO+HO2+OH + 3.060000E+004 9 HO2 127 7.111875E+001 HCOCO=CO+CO+HO2 + 3.060000E+004 9 HO2 132 9.478962E-004 HCOCO3+HO2=HO2+CO+OH + 3.060000E+004 9 HO2 133 1.453535E+001 HCOCO3+NO=HO2+CO+NO2 + 3.060000E+004 9 HO2 134 7.722796E+000 HCOCO3+NO2=HO2+CO+NO3 + 3.060000E+004 9 HO2 135 3.731379E-005 HCOCO3+NO3=HO2+CO+NO2 + 3.060000E+004 9 HO2 136 1.397065E-005 HCOCO3=CO+HO2 + 3.060000E+004 9 HO2 138 1.474739E-004 HCOCO2H=HO2+HO2+CO + 3.060000E+004 9 HO2 139 3.788601E-005 OH+HCOCO2H=CO+HO2 + 3.060000E+004 9 HO2 140 4.263609E-005 HCOCO3H=HO2+CO+OH + 3.420000E+004 8 OH 13 2.392025E+006 O1D=OH+OH + 3.420000E+004 8 OH 18 1.214561E+004 HO2+O3=OH + 3.420000E+004 8 OH 24 4.356926E+006 HO2+NO=OH+NO2 + 3.420000E+004 8 OH 27 3.278958E+001 HO2+NO3=OH+NO2 + 3.420000E+004 8 OH 38 1.080381E+002 H2O2=OH+OH + 3.420000E+004 8 OH 42 1.975601E+006 HONO=OH+NO + 3.420000E+004 8 OH 43 1.609572E+004 HNO3=OH+NO2 + 3.420000E+004 8 OH 61 1.938783E+002 CH2OOA=HO2+CO+OH + 3.420000E+004 8 OH 70 2.841066E-006 ETHO2HNO3+OH=NO3CH2CHO+OH + 3.420000E+004 8 OH 71 2.054624E-006 ETHO2HNO3=ETHENO3O+OH + 3.420000E+004 8 OH 85 7.756254E+000 HYETHO2H+OH=HOCH2CHO+OH + 3.420000E+004 8 OH 86 6.584743E-001 HYETHO2H=HOCH2CH2O+OH + 3.420000E+004 8 OH 94 9.459267E-007 NO3CH2CO3+HO2=HCHO+NO2+OH + 3.420000E+004 8 OH 104 2.960771E-001 HOCH2CO3+HO2=HO2+HCHO+OH + 3.420000E+004 8 OH 119 2.708045E-008 NO3CH2CO3H=HCHO+NO2+OH + 3.420000E+004 8 OH 124 7.858380E-003 HOCH2CO3H=HCHO+HO2+OH + 3.420000E+004 8 OH 128 1.535237E+002 HCOCO=CO+OH + 3.420000E+004 8 OH 132 1.128296E-003 HCOCO3+HO2=HO2+CO+OH + 3.420000E+004 8 OH 140 8.759449E-005 HCOCO3H=HO2+CO+OH + 3.420000E+004 9 HO2 14 1.633187E+005 OH+O3=HO2 + 3.420000E+004 9 HO2 15 5.422633E+000 OH+H2=HO2 + 3.420000E+004 9 HO2 16 4.080574E+006 OH+CO=HO2 + 3.420000E+004 9 HO2 17 5.734272E+001 OH+H2O2=HO2 + 3.420000E+004 9 HO2 23 6.256677E+001 OH+NO3=HO2+NO2 + 3.420000E+004 9 HO2 32 0.000000E+000 HSO3=HO2+SO3 + 3.420000E+004 9 HO2 45 4.897041E+005 HO2NO2=HO2+NO2 + 3.420000E+004 9 HO2 55 3.774531E+004 HCHO=CO+HO2+HO2 + 3.420000E+004 9 HO2 57 3.510543E-001 NO3+HCHO=HNO3+CO+HO2 + 3.420000E+004 9 HO2 58 2.558343E+004 OH+HCHO=HO2+CO + 3.420000E+004 9 HO2 61 1.938783E+002 CH2OOA=HO2+CO+OH + 3.420000E+004 9 HO2 73 2.158054E-001 ETHENO3O=NO3CH2CHO+HO2 + 3.420000E+004 9 HO2 87 3.960824E+004 HOCH2CH2O=HO2+HCHO+HCHO + 3.420000E+004 9 HO2 88 1.542187E+004 HOCH2CH2O=HO2+HOCH2CHO + 3.420000E+004 9 HO2 89 3.652461E-003 ETHGLY+OH=HOCH2CHO+HO2 + 3.420000E+004 9 HO2 91 1.387170E+003 HOCH2CHO+OH=GLYOX+HO2 + 3.420000E+004 9 HO2 93 5.326043E+003 HOCH2CHO=HO2+HCHO+HO2+CO + 3.420000E+004 9 HO2 102 1.262054E-001 HCOCH2O=HCHO+CO+HO2 + 3.420000E+004 9 HO2 103 7.779484E+000 HCOOH+OH=HO2 + 3.420000E+004 9 HO2 104 2.960771E-001 HOCH2CO3+HO2=HO2+HCHO+OH + 3.420000E+004 9 HO2 107 4.533498E+003 HOCH2CO3+NO=NO2+HO2+HCHO + 3.420000E+004 9 HO2 109 1.466094E-002 HOCH2CO3+NO3=NO2+HO2+HCHO + 3.420000E+004 9 HO2 110 3.879664E-003 HOCH2CO3=HCHO+HO2 + 3.420000E+004 9 HO2 113 3.040167E+002 GLYOX=CO+CO+HO2+HO2 + 3.420000E+004 9 HO2 122 7.350617E-003 HOCH2CO2H+OH=HCHO+HO2 + 3.420000E+004 9 HO2 124 7.858380E-003 HOCH2CO3H=HCHO+HO2+OH + 3.420000E+004 9 HO2 127 8.783144E+001 HCOCO=CO+CO+HO2 + 3.420000E+004 9 HO2 132 1.128296E-003 HCOCO3+HO2=HO2+CO+OH + 3.420000E+004 9 HO2 133 1.727634E+001 HCOCO3+NO=HO2+CO+NO2 + 3.420000E+004 9 HO2 134 1.008234E+001 HCOCO3+NO2=HO2+CO+NO3 + 3.420000E+004 9 HO2 135 5.587019E-005 HCOCO3+NO3=HO2+CO+NO2 + 3.420000E+004 9 HO2 136 1.478470E-005 HCOCO3=CO+HO2 + 3.420000E+004 9 HO2 138 3.128734E-004 HCOCO2H=HO2+HO2+CO + 3.420000E+004 9 HO2 139 6.539885E-005 OH+HCOCO2H=CO+HO2 + 3.420000E+004 9 HO2 140 8.759449E-005 HCOCO3H=HO2+CO+OH + 3.780000E+004 8 OH 13 1.253850E+006 O1D=OH+OH + 3.780000E+004 8 OH 18 7.849545E+003 HO2+O3=OH + 3.780000E+004 8 OH 24 2.407412E+006 HO2+NO=OH+NO2 + 3.780000E+004 8 OH 27 2.467842E+001 HO2+NO3=OH+NO2 + 3.780000E+004 8 OH 38 9.646266E+001 H2O2=OH+OH + 3.780000E+004 8 OH 42 1.005338E+006 HONO=OH+NO + 3.780000E+004 8 OH 43 1.206195E+004 HNO3=OH+NO2 + 3.780000E+004 8 OH 61 1.776933E+002 CH2OOA=HO2+CO+OH + 3.780000E+004 8 OH 70 2.033181E-006 ETHO2HNO3+OH=NO3CH2CHO+OH + 3.780000E+004 8 OH 71 1.993259E-006 ETHO2HNO3=ETHENO3O+OH + 3.780000E+004 8 OH 85 4.513372E+000 HYETHO2H+OH=HOCH2CHO+OH + 3.780000E+004 8 OH 86 5.194275E-001 HYETHO2H=HOCH2CH2O+OH + 3.780000E+004 8 OH 94 5.390768E-007 NO3CH2CO3+HO2=HCHO+NO2+OH + 3.780000E+004 8 OH 104 1.519909E-001 HOCH2CO3+HO2=HO2+HCHO+OH + 3.780000E+004 8 OH 119 2.756230E-008 NO3CH2CO3H=HCHO+NO2+OH + 3.780000E+004 8 OH 124 7.898782E-003 HOCH2CO3H=HCHO+HO2+OH + 3.780000E+004 8 OH 128 9.785544E+001 HCOCO=CO+OH + 3.780000E+004 8 OH 132 5.104886E-004 HCOCO3+HO2=HO2+CO+OH + 3.780000E+004 8 OH 140 8.478044E-005 HCOCO3H=HO2+CO+OH + 3.780000E+004 9 HO2 14 9.026490E+004 OH+O3=HO2 + 3.780000E+004 9 HO2 15 4.234773E+000 OH+H2=HO2 + 3.780000E+004 9 HO2 16 2.246608E+006 OH+CO=HO2 + 3.780000E+004 9 HO2 17 3.818066E+001 OH+H2O2=HO2 + 3.780000E+004 9 HO2 23 4.027012E+001 OH+NO3=HO2+NO2 + 3.780000E+004 9 HO2 32 0.000000E+000 HSO3=HO2+SO3 + 3.780000E+004 9 HO2 45 3.208619E+005 HO2NO2=HO2+NO2 + 3.780000E+004 9 HO2 55 2.713318E+004 HCHO=CO+HO2+HO2 + 3.780000E+004 9 HO2 57 4.136801E-001 NO3+HCHO=HNO3+CO+HO2 + 3.780000E+004 9 HO2 58 1.426505E+004 OH+HCHO=HO2+CO + 3.780000E+004 9 HO2 61 1.776933E+002 CH2OOA=HO2+CO+OH + 3.780000E+004 9 HO2 73 2.302334E-001 ETHENO3O=NO3CH2CHO+HO2 + 3.780000E+004 9 HO2 87 2.007517E+004 HOCH2CH2O=HO2+HCHO+HCHO + 3.780000E+004 9 HO2 88 7.816469E+003 HOCH2CH2O=HO2+HOCH2CHO + 3.780000E+004 9 HO2 89 2.091059E-003 ETHGLY+OH=HOCH2CHO+HO2 + 3.780000E+004 9 HO2 91 8.191963E+002 HOCH2CHO+OH=GLYOX+HO2 + 3.780000E+004 9 HO2 93 4.032656E+003 HOCH2CHO=HO2+HCHO+HO2+CO + 3.780000E+004 9 HO2 102 1.031314E-001 HCOCH2O=HCHO+CO+HO2 + 3.780000E+004 9 HO2 103 5.393641E+000 HCOOH+OH=HO2 + 3.780000E+004 9 HO2 104 1.519909E-001 HOCH2CO3+HO2=HO2+HCHO+OH + 3.780000E+004 9 HO2 107 3.087939E+003 HOCH2CO3+NO=NO2+HO2+HCHO + 3.780000E+004 9 HO2 109 1.360217E-002 HOCH2CO3+NO3=NO2+HO2+HCHO + 3.780000E+004 9 HO2 110 1.844002E-003 HOCH2CO3=HCHO+HO2 + 3.780000E+004 9 HO2 113 2.631728E+002 GLYOX=CO+CO+HO2+HO2 + 3.780000E+004 9 HO2 122 5.562444E-003 HOCH2CO2H+OH=HCHO+HO2 + 3.780000E+004 9 HO2 124 7.898782E-003 HOCH2CO3H=HCHO+HO2+OH + 3.780000E+004 9 HO2 127 5.598342E+001 HCOCO=CO+CO+HO2 + 3.780000E+004 9 HO2 132 5.104886E-004 HCOCO3+HO2=HO2+CO+OH + 3.780000E+004 9 HO2 133 1.037140E+001 HCOCO3+NO=HO2+CO+NO2 + 3.780000E+004 9 HO2 134 7.152690E+000 HCOCO3+NO2=HO2+CO+NO3 + 3.780000E+004 9 HO2 135 4.568533E-005 HCOCO3+NO3=HO2+CO+NO2 + 3.780000E+004 9 HO2 136 6.193412E-006 HCOCO3=CO+HO2 + 3.780000E+004 9 HO2 138 3.251979E-004 HCOCO2H=HO2+HO2+CO + 3.780000E+004 9 HO2 139 4.257739E-005 OH+HCOCO2H=CO+HO2 + 3.780000E+004 9 HO2 140 8.478044E-005 HCOCO3H=HO2+CO+OH + 4.140000E+004 8 OH 13 3.488077E+005 O1D=OH+OH + 4.140000E+004 8 OH 18 3.015456E+003 HO2+O3=OH + 4.140000E+004 8 OH 24 7.243348E+005 HO2+NO=OH+NO2 + 4.140000E+004 8 OH 27 1.327229E+001 HO2+NO3=OH+NO2 + 4.140000E+004 8 OH 38 5.699138E+001 H2O2=OH+OH + 4.140000E+004 8 OH 42 2.940676E+005 HONO=OH+NO + 4.140000E+004 8 OH 43 5.360096E+003 HNO3=OH+NO2 + 4.140000E+004 8 OH 61 1.688799E+002 CH2OOA=HO2+CO+OH + 4.140000E+004 8 OH 70 7.127872E-007 ETHO2HNO3+OH=NO3CH2CHO+OH + 4.140000E+004 8 OH 71 1.305306E-006 ETHO2HNO3=ETHENO3O+OH + 4.140000E+004 8 OH 85 1.314729E+000 HYETHO2H+OH=HOCH2CHO+OH + 4.140000E+004 8 OH 86 2.826341E-001 HYETHO2H=HOCH2CH2O+OH + 4.140000E+004 8 OH 94 1.416239E-007 NO3CH2CO3+HO2=HCHO+NO2+OH + 4.140000E+004 8 OH 104 3.517456E-002 HOCH2CO3+HO2=HO2+HCHO+OH + 4.140000E+004 8 OH 119 1.692645E-008 NO3CH2CO3H=HCHO+NO2+OH + 4.140000E+004 8 OH 124 4.757095E-003 HOCH2CO3H=HCHO+HO2+OH + 4.140000E+004 8 OH 128 3.000534E+001 HCOCO=CO+OH + 4.140000E+004 8 OH 132 6.274272E-005 HCOCO3+HO2=HO2+CO+OH + 4.140000E+004 8 OH 140 4.413310E-005 HCOCO3H=HO2+CO+OH + 4.140000E+004 9 HO2 14 2.664537E+004 OH+O3=HO2 + 4.140000E+004 9 HO2 15 1.517295E+000 OH+H2=HO2 + 4.140000E+004 9 HO2 16 6.691021E+005 OH+CO=HO2 + 4.140000E+004 9 HO2 17 1.230508E+001 OH+H2O2=HO2 + 4.140000E+004 9 HO2 23 1.664201E+001 OH+NO3=HO2+NO2 + 4.140000E+004 9 HO2 32 0.000000E+000 HSO3=HO2+SO3 + 4.140000E+004 9 HO2 45 1.384440E+005 HO2NO2=HO2+NO2 + 4.140000E+004 9 HO2 55 1.302993E+004 HCHO=CO+HO2+HO2 + 4.140000E+004 9 HO2 57 5.514376E-001 NO3+HCHO=HNO3+CO+HO2 + 4.140000E+004 9 HO2 58 4.089875E+003 OH+HCHO=HO2+CO + 4.140000E+004 9 HO2 61 1.688799E+002 CH2OOA=HO2+CO+OH + 4.140000E+004 9 HO2 73 3.065559E-001 ETHENO3O=NO3CH2CHO+HO2 + 4.140000E+004 9 HO2 87 5.494651E+003 HOCH2CH2O=HO2+HCHO+HCHO + 4.140000E+004 9 HO2 88 2.139397E+003 HOCH2CH2O=HO2+HOCH2CHO + 4.140000E+004 9 HO2 89 6.117110E-004 ETHGLY+OH=HOCH2CHO+HO2 + 4.140000E+004 9 HO2 91 2.472522E+002 HOCH2CHO+OH=GLYOX+HO2 + 4.140000E+004 9 HO2 93 2.028472E+003 HOCH2CHO=HO2+HCHO+HO2+CO + 4.140000E+004 9 HO2 102 6.215652E-002 HCOCH2O=HCHO+CO+HO2 + 4.140000E+004 9 HO2 103 1.917289E+000 HCOOH+OH=HO2 + 4.140000E+004 9 HO2 104 3.517456E-002 HOCH2CO3+HO2=HO2+HCHO+OH + 4.140000E+004 9 HO2 107 1.428333E+003 HOCH2CO3+NO=NO2+HO2+HCHO + 4.140000E+004 9 HO2 109 1.124627E-002 HOCH2CO3+NO3=NO2+HO2+HCHO + 4.140000E+004 9 HO2 110 4.184221E-004 HOCH2CO3=HCHO+HO2 + 4.140000E+004 9 HO2 113 1.393840E+002 GLYOX=CO+CO+HO2+HO2 + 4.140000E+004 9 HO2 122 1.819212E-003 HOCH2CO2H+OH=HCHO+HO2 + 4.140000E+004 9 HO2 124 4.757095E-003 HOCH2CO3H=HCHO+HO2+OH + 4.140000E+004 9 HO2 127 1.716615E+001 HCOCO=CO+CO+HO2 + 4.140000E+004 9 HO2 132 6.274272E-005 HCOCO3+HO2=HO2+CO+OH + 4.140000E+004 9 HO2 133 2.547793E+000 HCOCO3+NO=HO2+CO+NO2 + 4.140000E+004 9 HO2 134 2.504451E+000 HCOCO3+NO2=HO2+CO+NO3 + 4.140000E+004 9 HO2 135 2.006057E-005 HCOCO3+NO3=HO2+CO+NO2 + 4.140000E+004 9 HO2 136 7.463615E-007 HCOCO3=CO+HO2 + 4.140000E+004 9 HO2 138 2.046182E-004 HCOCO2H=HO2+HO2+CO + 4.140000E+004 9 HO2 139 1.058268E-005 OH+HCOCO2H=CO+HO2 + 4.140000E+004 9 HO2 140 4.413310E-005 HCOCO3H=HO2+CO+OH + 4.500000E+004 8 OH 13 5.845280E+003 O1D=OH+OH + 4.500000E+004 8 OH 18 4.137510E+002 HO2+O3=OH + 4.500000E+004 8 OH 24 3.288188E+004 HO2+NO=OH+NO2 + 4.500000E+004 8 OH 27 6.852786E+000 HO2+NO3=OH+NO2 + 4.500000E+004 8 OH 38 7.497906E+000 H2O2=OH+OH + 4.500000E+004 8 OH 42 2.016774E+004 HONO=OH+NO + 4.500000E+004 8 OH 43 3.461634E+002 HNO3=OH+NO2 + 4.500000E+004 8 OH 61 1.612858E+002 CH2OOA=HO2+CO+OH + 4.500000E+004 8 OH 70 3.503118E-008 ETHO2HNO3+OH=NO3CH2CHO+OH + 4.500000E+004 8 OH 71 1.925499E-007 ETHO2HNO3=ETHENO3O+OH + 4.500000E+004 8 OH 85 5.642735E-002 HYETHO2H+OH=HOCH2CHO+OH + 4.500000E+004 8 OH 86 3.640945E-002 HYETHO2H=HOCH2CH2O+OH + 4.500000E+004 8 OH 94 1.379017E-008 NO3CH2CO3+HO2=HCHO+NO2+OH + 4.500000E+004 8 OH 104 3.580826E-003 HOCH2CO3+HO2=HO2+HCHO+OH + 4.500000E+004 8 OH 119 2.241614E-009 NO3CH2CO3H=HCHO+NO2+OH + 4.500000E+004 8 OH 124 6.269993E-004 HOCH2CO3H=HCHO+HO2+OH + 4.500000E+004 8 OH 128 1.176946E+000 HCOCO=CO+OH + 4.500000E+004 8 OH 132 4.588515E-007 HCOCO3+HO2=HO2+CO+OH + 4.500000E+004 8 OH 140 4.262520E-006 HCOCO3H=HO2+CO+OH + 4.500000E+004 9 HO2 14 1.117582E+003 OH+O3=HO2 + 4.500000E+004 9 HO2 15 7.038078E-002 OH+H2=HO2 + 4.500000E+004 9 HO2 16 2.909103E+004 OH+CO=HO2 + 4.500000E+004 9 HO2 17 5.625891E-001 OH+H2O2=HO2 + 4.500000E+004 9 HO2 23 2.626629E+000 OH+NO3=HO2+NO2 + 4.500000E+004 9 HO2 32 0.000000E+000 HSO3=HO2+SO3 + 4.500000E+004 9 HO2 45 2.599988E+004 HO2NO2=HO2+NO2 + 4.500000E+004 9 HO2 55 1.072616E+003 HCHO=CO+HO2+HO2 + 4.500000E+004 9 HO2 57 1.952744E+000 NO3+HCHO=HNO3+CO+HO2 + 4.500000E+004 9 HO2 58 1.735259E+002 OH+HCHO=HO2+CO + 4.500000E+004 9 HO2 61 1.612858E+002 CH2OOA=HO2+CO+OH + 4.500000E+004 9 HO2 73 1.082220E+000 ETHENO3O=NO3CH2CHO+HO2 + 4.500000E+004 9 HO2 87 2.483536E+002 HOCH2CH2O=HO2+HCHO+HCHO + 4.500000E+004 9 HO2 88 9.669897E+001 HOCH2CH2O=HO2+HOCH2CHO + 4.500000E+004 9 HO2 89 2.637670E-005 ETHGLY+OH=HOCH2CHO+HO2 + 4.500000E+004 9 HO2 91 1.072816E+001 HOCH2CHO+OH=GLYOX+HO2 + 4.500000E+004 9 HO2 93 1.755349E+002 HOCH2CHO=HO2+HCHO+HO2+CO + 4.500000E+004 9 HO2 102 7.715843E-003 HCOCH2O=HCHO+CO+HO2 + 4.500000E+004 9 HO2 103 9.636254E-002 HCOOH+OH=HO2 + 4.500000E+004 9 HO2 104 3.580826E-003 HOCH2CO3+HO2=HO2+HCHO+OH + 4.500000E+004 9 HO2 107 3.261719E+002 HOCH2CO3+NO=NO2+HO2+HCHO + 4.500000E+004 9 HO2 109 2.920987E-002 HOCH2CO3+NO3=NO2+HO2+HCHO + 4.500000E+004 9 HO2 110 5.386648E-005 HOCH2CO3=HCHO+HO2 + 4.500000E+004 9 HO2 113 1.483224E+001 GLYOX=CO+CO+HO2+HO2 + 4.500000E+004 9 HO2 122 8.026572E-005 HOCH2CO2H+OH=HCHO+HO2 + 4.500000E+004 9 HO2 124 6.269993E-004 HOCH2CO3H=HCHO+HO2+OH + 4.500000E+004 9 HO2 127 6.733344E-001 HCOCO=CO+CO+HO2 + 4.500000E+004 9 HO2 132 4.588515E-007 HCOCO3+HO2=HO2+CO+OH + 4.500000E+004 9 HO2 133 4.179607E-002 HCOCO3+NO=HO2+CO+NO2 + 4.500000E+004 9 HO2 134 1.682871E-001 HCOCO3+NO2=HO2+CO+NO3 + 4.500000E+004 9 HO2 135 3.742989E-006 HCOCO3+NO3=HO2+CO+NO2 + 4.500000E+004 9 HO2 136 6.902518E-009 HCOCO3=CO+HO2 + 4.500000E+004 9 HO2 138 5.283671E-005 HCOCO2H=HO2+HO2+CO + 4.500000E+004 9 HO2 139 3.828659E-007 OH+HCOCO2H=CO+HO2 + 4.500000E+004 9 HO2 140 4.262520E-006 HCOCO3H=HO2+CO+OH + 4.860000E+004 8 OH 13 -4.106492E-090 O1D=OH+OH + 4.860000E+004 8 OH 18 3.073737E+002 HO2+O3=OH + 4.860000E+004 8 OH 24 2.746385E+000 HO2+NO=OH+NO2 + 4.860000E+004 8 OH 27 4.343822E+002 HO2+NO3=OH+NO2 + 4.860000E+004 8 OH 38 0.000000E+000 H2O2=OH+OH + 4.860000E+004 8 OH 42 0.000000E+000 HONO=OH+NO + 4.860000E+004 8 OH 43 0.000000E+000 HNO3=OH+NO2 + 4.860000E+004 8 OH 61 1.568215E+002 CH2OOA=HO2+CO+OH + 4.860000E+004 8 OH 70 1.491676E-007 ETHO2HNO3+OH=NO3CH2CHO+OH + 4.860000E+004 8 OH 71 0.000000E+000 ETHO2HNO3=ETHENO3O+OH + 4.860000E+004 8 OH 85 8.816432E-004 HYETHO2H+OH=HOCH2CHO+OH + 4.860000E+004 8 OH 86 0.000000E+000 HYETHO2H=HOCH2CH2O+OH + 4.860000E+004 8 OH 94 1.495338E-007 NO3CH2CO3+HO2=HCHO+NO2+OH + 4.860000E+004 8 OH 104 3.625706E-003 HOCH2CO3+HO2=HO2+HCHO+OH + 4.860000E+004 8 OH 119 0.000000E+000 NO3CH2CO3H=HCHO+NO2+OH + 4.860000E+004 8 OH 124 0.000000E+000 HOCH2CO3H=HCHO+HO2+OH + 4.860000E+004 8 OH 128 3.987600E+000 HCOCO=CO+OH + 4.860000E+004 8 OH 132 1.434989E-006 HCOCO3+HO2=HO2+CO+OH + 4.860000E+004 8 OH 140 0.000000E+000 HCOCO3H=HO2+CO+OH + 4.860000E+004 9 HO2 14 1.703092E+001 OH+O3=HO2 + 4.860000E+004 9 HO2 15 1.101763E-003 OH+H2=HO2 + 4.860000E+004 9 HO2 16 4.545722E+002 OH+CO=HO2 + 4.860000E+004 9 HO2 17 9.227951E-003 OH+H2O2=HO2 + 4.860000E+004 9 HO2 23 3.415344E+000 OH+NO3=HO2+NO2 + 4.860000E+004 9 HO2 32 0.000000E+000 HSO3=HO2+SO3 + 4.860000E+004 9 HO2 45 1.983403E+004 HO2NO2=HO2+NO2 + 4.860000E+004 9 HO2 55 0.000000E+000 HCHO=CO+HO2+HO2 + 4.860000E+004 9 HO2 57 1.634212E+002 NO3+HCHO=HNO3+CO+HO2 + 4.860000E+004 9 HO2 58 2.726972E+000 OH+HCHO=HO2+CO + 4.860000E+004 9 HO2 61 1.568215E+002 CH2OOA=HO2+CO+OH + 4.860000E+004 9 HO2 73 6.645650E+001 ETHENO3O=NO3CH2CHO+HO2 + 4.860000E+004 9 HO2 87 3.330106E+000 HOCH2CH2O=HO2+HCHO+HCHO + 4.860000E+004 9 HO2 88 1.296610E+000 HOCH2CH2O=HO2+HOCH2CHO + 4.860000E+004 9 HO2 89 4.131091E-007 ETHGLY+OH=HOCH2CHO+HO2 + 4.860000E+004 9 HO2 91 1.673896E-001 HOCH2CHO+OH=GLYOX+HO2 + 4.860000E+004 9 HO2 93 0.000000E+000 HOCH2CHO=HO2+HCHO+HO2+CO + 4.860000E+004 9 HO2 102 -6.568418E-076 HCOCH2O=HCHO+CO+HO2 + 4.860000E+004 9 HO2 103 1.701680E-003 HCOOH+OH=HO2 + 4.860000E+004 9 HO2 104 3.625706E-003 HOCH2CO3+HO2=HO2+HCHO+OH + 4.860000E+004 9 HO2 107 4.753717E-002 HOCH2CO3+NO=NO2+HO2+HCHO + 4.860000E+004 9 HO2 109 3.230848E+000 HOCH2CO3+NO3=NO2+HO2+HCHO + 4.860000E+004 9 HO2 110 1.268660E-003 HOCH2CO3=HCHO+HO2 + 4.860000E+004 9 HO2 113 0.000000E+000 GLYOX=CO+CO+HO2+HO2 + 4.860000E+004 9 HO2 122 1.258750E-006 HOCH2CO2H+OH=HCHO+HO2 + 4.860000E+004 9 HO2 124 0.000000E+000 HOCH2CO3H=HCHO+HO2+OH + 4.860000E+004 9 HO2 127 2.281319E+000 HCOCO=CO+CO+HO2 + 4.860000E+004 9 HO2 132 1.434989E-006 HCOCO3+HO2=HO2+CO+OH + 4.860000E+004 9 HO2 133 1.881436E-005 HCOCO3+NO=HO2+CO+NO2 + 4.860000E+004 9 HO2 134 7.104956E-001 HCOCO3+NO2=HO2+CO+NO3 + 4.860000E+004 9 HO2 135 1.278711E-003 HCOCO3+NO3=HO2+CO+NO2 + 4.860000E+004 9 HO2 136 5.021128E-007 HCOCO3=CO+HO2 + 4.860000E+004 9 HO2 138 0.000000E+000 HCOCO2H=HO2+HO2+CO + 4.860000E+004 9 HO2 139 5.903464E-009 OH+HCOCO2H=CO+HO2 + 4.860000E+004 9 HO2 140 0.000000E+000 HCOCO3H=HO2+CO+OH diff --git a/tests/model_tests/spec_model_kpp/output/reactionRates/25200.cmp b/tests/model_tests/spec_model_kpp/output/reactionRates/25200.cmp new file mode 100644 index 000000000..4331c813b --- /dev/null +++ b/tests/model_tests/spec_model_kpp/output/reactionRates/25200.cmp @@ -0,0 +1,142 @@ + reactionNumber reactionRate +1 9.610214E+008 +2 5.705865E+001 +3 2.096212E+003 +4 1.073918E+004 +5 2.126017E+003 +6 2.061486E+007 +7 6.643100E+008 +8 1.363865E+006 +9 4.759726E+002 +10 1.247764E+006 +11 3.115651E+001 +12 6.505459E+004 +13 2.034546E+006 +14 2.022386E+005 +15 2.494118E-001 +16 5.223211E+006 +17 9.369914E+000 +18 1.093098E+004 +19 5.060077E+003 +20 5.012218E+002 +21 3.288220E+006 +22 3.715904E+006 +23 6.695863E+001 +24 5.529782E+006 +25 5.303916E+005 +26 3.275975E+002 +27 2.550411E+001 +28 4.479763E+004 +29 4.623431E+003 +30 0.000000E+000 +31 0.000000E+000 +32 0.000000E+000 +33 3.455208E+004 +34 1.314200E+003 +35 0.000000E+000 +36 2.264940E+007 +37 2.708812E+008 +38 8.968386E+000 +39 6.694347E+008 +40 1.535443E+004 +41 1.061188E+005 +42 2.981672E+006 +43 3.861992E+003 +44 6.380502E+004 +45 5.279616E+005 +46 3.027587E-001 +47 2.089332E+003 +48 1.005529E+005 +49 4.262013E-005 +50 3.027346E-001 +51 7.533156E-007 +52 2.699093E-008 +53 8.996975E-009 +54 8.996975E-009 +55 6.753518E+003 +56 1.031868E+004 +57 7.992120E-002 +58 8.743702E+003 +59 7.730508E+002 +60 1.044663E+003 +61 2.716124E+002 +62 1.922435E+001 +63 5.025526E+002 +64 1.000080E+005 +65 2.501073E-001 +66 9.281010E-003 +67 2.784303E-002 +68 9.281010E-003 +69 1.096745E-006 +70 4.872423E-007 +71 3.544767E-007 +72 4.140201E-002 +73 2.613245E-001 +74 3.201189E+000 +75 7.229955E-007 +76 7.123372E-003 +77 5.762332E-002 +78 7.761331E-001 +79 9.283467E-002 +80 1.020108E-002 +81 0.000000E+000 +82 2.895663E+002 +83 4.826104E+002 +84 4.068957E-001 +85 1.539879E+000 +86 1.315119E-001 +87 7.199136E+004 +88 2.803056E+004 +89 8.135803E-004 +90 6.975704E-002 +91 4.042864E+002 +92 1.617146E+003 +93 8.177318E+002 +94 2.158099E-007 +95 7.357158E-008 +96 2.010956E-007 +97 4.941892E-003 +98 2.467533E-003 +99 9.794180E-009 +100 3.921527E-009 +101 1.680654E-009 +102 5.762334E-002 +103 1.989838E+000 +104 4.879695E-002 +105 1.663532E-002 +106 4.546989E-002 +107 1.117415E+003 +108 5.579357E+002 +109 2.214570E-003 +110 8.866994E-004 +111 3.800141E-004 +112 1.638429E+001 +113 8.074365E+000 +114 2.470209E+000 +115 4.915585E-004 +116 1.417907E+001 +117 4.673017E-011 +118 2.666236E-009 +119 8.656648E-010 +120 1.061086E-007 +121 2.942735E-004 +122 1.546224E-004 +123 9.264886E-004 +124 1.764035E-004 +125 2.157295E+000 +126 5.982877E+001 +127 4.624228E+000 +128 8.082854E+000 +129 1.443288E+000 +130 1.432021E-005 +131 3.914189E-005 +132 4.200593E-005 +133 9.619057E-001 +134 4.802884E-001 +135 1.906370E-006 +136 7.632985E-007 +137 3.271279E-007 +138 8.237183E-007 +139 3.952977E-007 +140 4.623530E-007 +141 1.398418E-006 diff --git a/tests/model_tests/spec_model_kpp/output/reactionRates/27000.cmp b/tests/model_tests/spec_model_kpp/output/reactionRates/27000.cmp new file mode 100644 index 000000000..8b401753c --- /dev/null +++ b/tests/model_tests/spec_model_kpp/output/reactionRates/27000.cmp @@ -0,0 +1,142 @@ + reactionNumber reactionRate +1 9.275640E+008 +2 5.534788E+001 +3 1.912298E+003 +4 9.912114E+003 +5 1.962284E+003 +6 2.018001E+007 +7 6.310286E+008 +8 1.310764E+006 +9 4.252076E+002 +10 1.199213E+006 +11 3.029615E+001 +12 6.325816E+004 +13 1.991629E+006 +14 2.215678E+005 +15 1.111119E+000 +16 5.682220E+006 +17 2.363295E+001 +18 1.268479E+004 +19 6.369222E+003 +20 6.682530E+002 +21 3.388006E+006 +22 3.873670E+006 +23 7.422233E+001 +24 6.034940E+006 +25 5.856478E+005 +26 3.954937E+002 +27 2.994469E+001 +28 5.479423E+004 +29 1.097700E+004 +30 0.000000E+000 +31 0.000000E+000 +32 0.000000E+000 +33 7.525232E+004 +34 1.277433E+003 +35 0.000000E+000 +36 2.217164E+007 +37 2.710187E+008 +38 2.050460E+001 +39 6.362716E+008 +40 1.556181E+004 +41 1.075466E+005 +42 3.323675E+006 +43 8.259176E+003 +44 6.201997E+004 +45 5.846925E+005 +46 2.855989E-001 +47 1.947968E+003 +48 1.016890E+005 +49 4.911132E-005 +50 2.855505E-001 +51 7.644384E-007 +52 2.901115E-008 +53 9.670383E-009 +54 9.670383E-009 +55 1.308701E+004 +56 2.007032E+004 +57 1.595827E-001 +58 1.871710E+004 +59 7.207480E+002 +60 9.739837E+002 +61 2.532358E+002 +62 2.375527E+001 +63 5.083278E+002 +64 1.011572E+005 +65 2.721657E-001 +66 1.069754E-002 +67 3.209262E-002 +68 1.069754E-002 +69 2.685708E-006 +70 1.193158E-006 +71 7.872377E-007 +72 3.905320E-002 +73 2.464991E-001 +74 7.532236E+000 +75 1.241279E-006 +76 1.311110E-002 +77 9.567478E-002 +78 7.221418E-001 +79 8.180867E-002 +80 9.095155E-003 +81 0.000000E+000 +82 2.699775E+002 +83 4.499625E+002 +84 1.073046E+000 +85 4.060893E+000 +86 3.145324E-001 +87 7.281123E+004 +88 2.834978E+004 +89 2.093661E-003 +90 1.444187E-001 +91 8.973134E+002 +92 3.589254E+003 +93 1.642445E+003 +94 5.037549E-007 +95 1.717346E-007 +96 4.694080E-007 +97 9.442678E-003 +98 4.770234E-003 +99 2.013329E-008 +100 8.538536E-009 +101 3.659373E-009 +102 9.567411E-002 +103 4.150924E+000 +104 1.366702E-001 +105 4.659212E-002 +106 1.273518E-001 +107 2.561827E+003 +108 1.294179E+003 +109 5.462221E-003 +110 2.316530E-003 +111 9.927987E-004 +112 7.138508E+001 +113 3.491958E+001 +114 1.076251E+001 +115 2.186396E-003 +116 6.761154E+001 +117 2.513757E-010 +118 1.415888E-008 +119 4.169127E-009 +120 4.351784E-007 +121 1.107118E-003 +122 9.829208E-004 +123 5.821209E-003 +124 1.005184E-003 +125 1.055317E+001 +126 2.684785E+002 +127 2.209216E+001 +128 3.861569E+001 +129 6.895281E+000 +130 8.327974E-005 +131 2.276313E-004 +132 2.442872E-004 +133 4.579063E+000 +134 2.313242E+000 +135 9.763288E-006 +136 4.140615E-006 +137 1.774549E-006 +138 9.418144E-006 +139 4.949326E-006 +140 5.399627E-006 +141 1.803806E-005 diff --git a/tests/model_tests/spec_model_kpp/output/reactionRates/28800.cmp b/tests/model_tests/spec_model_kpp/output/reactionRates/28800.cmp new file mode 100644 index 000000000..400940766 --- /dev/null +++ b/tests/model_tests/spec_model_kpp/output/reactionRates/28800.cmp @@ -0,0 +1,142 @@ + reactionNumber reactionRate +1 8.902361E+008 +2 5.340125E+001 +3 1.725880E+003 +4 9.131456E+003 +5 1.807739E+003 +6 1.902270E+007 +7 5.965294E+008 +8 1.264812E+006 +9 3.760005E+002 +10 1.156764E+006 +11 2.983009E+001 +12 6.228505E+004 +13 1.877410E+006 +14 2.226411E+005 +15 2.408797E+000 +16 5.667680E+006 +17 3.826307E+001 +18 1.355421E+004 +19 6.767028E+003 +20 7.549965E+002 +21 3.184546E+006 +22 3.716590E+006 +23 7.610251E+001 +24 6.032102E+006 +25 5.975179E+005 +26 4.037280E+002 +27 3.264952E+001 +28 5.329027E+004 +29 1.678467E+004 +30 0.000000E+000 +31 0.000000E+000 +32 0.000000E+000 +33 1.151170E+005 +34 1.257330E+003 +35 0.000000E+000 +36 2.090011E+007 +37 2.694792E+008 +38 3.225846E+001 +39 6.016375E+008 +40 1.583478E+004 +41 1.094183E+005 +42 3.182121E+006 +43 1.208365E+004 +44 6.104396E+004 +45 5.971278E+005 +46 2.710501E-001 +47 1.811795E+003 +48 9.404197E+004 +49 5.268305E-005 +50 2.709966E-001 +51 7.913791E-007 +52 2.898788E-008 +53 9.662626E-009 +54 9.662626E-009 +55 1.743508E+004 +56 2.698288E+004 +57 2.252857E-001 +58 2.574787E+004 +59 6.703640E+002 +60 9.058973E+002 +61 2.355333E+002 +62 2.483276E+001 +63 4.701110E+002 +64 9.355209E+004 +65 2.745688E-001 +66 1.041624E-002 +67 3.124872E-002 +68 1.041624E-002 +69 4.244520E-006 +70 1.885679E-006 +71 1.210370E-006 +72 3.706278E-002 +73 2.339359E-001 +74 1.137430E+001 +75 1.639688E-006 +76 1.687662E-002 +77 1.182578E-001 +78 6.702419E-001 +79 7.155243E-002 +80 8.119960E-003 +81 0.000000E+000 +82 2.511070E+002 +83 4.185117E+002 +84 1.677649E+000 +85 6.348987E+000 +86 4.783996E-001 +87 6.733523E+004 +88 2.621765E+004 +89 3.191723E-003 +90 2.107515E-001 +91 1.275986E+003 +92 5.103946E+003 +93 2.260120E+003 +94 7.589537E-007 +95 2.587342E-007 +96 7.072069E-007 +97 1.258586E-002 +98 6.490020E-003 +99 2.927275E-008 +100 1.198234E-008 +101 5.135289E-009 +102 1.182578E-001 +103 5.983418E+000 +104 2.265247E-001 +105 7.722434E-002 +106 2.110799E-001 +107 3.756498E+003 +108 1.937075E+003 +109 8.737030E-003 +110 3.576366E-003 +111 1.532728E-003 +112 1.512130E+002 +113 7.264170E+001 +114 2.279792E+001 +115 4.797366E-003 +116 1.445605E+002 +117 6.037472E-010 +118 3.355190E-008 +119 9.611164E-009 +120 8.647050E-007 +121 2.200823E-003 +122 2.584280E-003 +123 1.511969E-002 +124 2.539906E-003 +125 2.320014E+001 +126 5.904836E+002 +127 4.724278E+001 +128 8.257736E+001 +129 1.474515E+001 +130 1.999412E-004 +131 5.465058E-004 +132 5.864941E-004 +133 9.725931E+000 +134 5.015271E+000 +135 2.262100E-005 +136 9.259552E-006 +137 3.968380E-006 +138 3.374236E-005 +139 1.792232E-005 +140 1.953729E-005 +141 6.736432E-005 diff --git a/tests/model_tests/spec_model_kpp/output/reactionRates/30600.cmp b/tests/model_tests/spec_model_kpp/output/reactionRates/30600.cmp new file mode 100644 index 000000000..553c8e805 --- /dev/null +++ b/tests/model_tests/spec_model_kpp/output/reactionRates/30600.cmp @@ -0,0 +1,142 @@ + reactionNumber reactionRate +1 8.498825E+008 +2 5.124203E+001 +3 1.543735E+003 +4 8.415656E+003 +5 1.666033E+003 +6 1.720860E+007 +7 5.617739E+008 +8 1.227274E+006 +9 3.300695E+002 +10 1.120792E+006 +11 2.977971E+001 +12 6.217983E+004 +13 1.698371E+006 +14 2.125165E+005 +15 3.803104E+000 +16 5.371256E+006 +17 5.041078E+001 +18 1.380405E+004 +19 6.511413E+003 +20 7.751171E+002 +21 2.833493E+006 +22 3.407257E+006 +23 7.473717E+001 +24 5.726488E+006 +25 5.844620E+005 +26 3.753668E+002 +27 3.421050E+001 +28 4.687782E+004 +29 2.103379E+004 +30 0.000000E+000 +31 0.000000E+000 +32 0.000000E+000 +33 1.519071E+005 +34 1.254680E+003 +35 0.000000E+000 +36 1.890697E+007 +37 2.660405E+008 +38 4.266172E+001 +39 5.665335E+008 +40 1.615875E+004 +41 1.116289E+005 +42 2.869864E+006 +43 1.482369E+004 +44 6.091531E+004 +45 5.846126E+005 +46 2.598457E-001 +47 1.688203E+003 +48 8.279084E+004 +49 5.461552E-005 +50 2.597804E-001 +51 8.373175E-007 +52 2.805376E-008 +53 9.351254E-009 +54 9.351254E-009 +55 1.966926E+004 +56 3.089520E+004 +57 2.772460E-001 +58 2.909829E+004 +59 6.246359E+002 +60 8.441025E+002 +61 2.194666E+002 +62 2.364376E+001 +63 4.138943E+002 +64 8.236496E+004 +65 2.668107E-001 +66 9.258320E-003 +67 2.777496E-002 +68 9.258320E-003 +69 5.521091E-006 +70 2.452812E-006 +71 1.583425E-006 +72 3.552858E-002 +73 2.242522E-001 +74 1.406375E+001 +75 1.976378E-006 +76 1.868051E-002 +77 1.288830E-001 +78 6.232408E-001 +79 6.246731E-002 +80 7.304122E-003 +81 0.000000E+000 +82 2.339801E+002 +83 3.899668E+002 +84 2.079816E+000 +85 7.870969E+000 +86 5.964822E-001 +87 5.931359E+004 +88 2.309434E+004 +89 3.859513E-003 +90 2.675606E-001 +91 1.487621E+003 +92 5.950482E+003 +93 2.627072E+003 +94 9.395930E-007 +95 3.203158E-007 +96 8.755298E-007 +97 1.440803E-002 +98 7.655148E-003 +99 3.698694E-008 +100 1.384827E-008 +101 5.934974E-009 +102 1.288851E-001 +103 7.295505E+000 +104 2.946403E-001 +105 1.004456E-001 +106 2.745512E-001 +107 4.518112E+003 +108 2.400524E+003 +109 1.159847E-002 +110 4.342582E-003 +111 1.861107E-003 +112 2.363060E+002 +113 1.102077E+002 +114 3.562715E+001 +115 7.879601E-003 +116 2.180447E+002 +117 1.023630E-009 +118 5.613722E-008 +119 1.617307E-008 +120 1.258655E-006 +121 3.373323E-003 +122 4.619564E-003 +123 2.670284E-002 +124 4.511439E-003 +125 3.598297E+001 +126 9.643797E+002 +127 7.111875E+001 +128 1.243110E+002 +129 2.219718E+001 +130 3.231464E-004 +131 8.832669E-004 +132 9.478962E-004 +133 1.453535E+001 +134 7.722796E+000 +135 3.731379E-005 +136 1.397065E-005 +137 5.987422E-006 +138 7.373695E-005 +139 3.788601E-005 +140 4.263609E-005 +141 1.471588E-004 diff --git a/tests/model_tests/spec_model_kpp/output/reactionRates/32400.cmp b/tests/model_tests/spec_model_kpp/output/reactionRates/32400.cmp new file mode 100644 index 000000000..141d35e3a --- /dev/null +++ b/tests/model_tests/spec_model_kpp/output/reactionRates/32400.cmp @@ -0,0 +1,142 @@ + reactionNumber reactionRate +1 8.069853E+008 +2 4.887583E+001 +3 1.369974E+003 +4 7.776808E+003 +5 1.539561E+003 +6 1.485320E+007 +7 5.274187E+008 +8 1.199801E+006 +9 2.883176E+002 +10 1.092249E+006 +11 3.021976E+001 +12 6.309867E+004 +13 1.465909E+006 +14 1.922918E+005 +15 4.912551E+000 +16 4.828982E+006 +17 5.736992E+001 +18 1.335561E+004 +19 5.649087E+003 +20 7.190502E+002 +21 2.385404E+006 +22 2.986886E+006 +23 7.019524E+001 +24 5.154863E+006 +25 5.478466E+005 +26 3.171804E+002 +27 3.435733E+001 +28 3.754497E+004 +29 2.298695E+004 +30 0.000000E+000 +31 0.000000E+000 +32 0.000000E+000 +33 1.843040E+005 +34 1.272564E+003 +35 0.000000E+000 +36 1.631915E+007 +37 2.604227E+008 +38 5.029742E+001 +39 5.316081E+008 +40 1.652594E+004 +41 1.141167E+005 +42 2.453665E+006 +43 1.619294E+004 +44 6.178356E+004 +45 5.484178E+005 +46 2.525585E-001 +47 1.580768E+003 +48 6.951392E+004 +49 5.470384E-005 +50 2.524905E-001 +51 9.079459E-007 +52 2.638328E-008 +53 8.794427E-009 +54 8.794427E-009 +55 2.002782E+004 +56 3.213239E+004 +57 3.180436E-001 +58 2.883579E+004 +59 5.848812E+002 +60 7.903799E+002 +61 2.054988E+002 +62 2.046588E+001 +63 3.476483E+002 +64 6.918202E+004 +65 2.500259E-001 +66 7.524573E-003 +67 2.257372E-002 +68 7.524573E-003 +69 6.291666E-006 +70 2.795149E-006 +71 1.874419E-006 +72 3.453090E-002 +73 2.179549E-001 +74 1.517173E+001 +75 2.302830E-006 +76 1.880286E-002 +77 1.307296E-001 +78 5.824699E-001 +79 5.466767E-002 +80 6.656096E-003 +81 0.000000E+000 +82 2.190906E+002 +83 3.651510E+002 +84 2.205487E+000 +85 8.346564E+000 +86 6.570607E-001 +87 4.984332E+004 +88 1.940700E+004 +89 4.001508E-003 +90 3.162046E-001 +91 1.518732E+003 +92 6.074929E+003 +93 2.751043E+003 +94 1.007114E-006 +95 3.433343E-007 +96 9.384472E-007 +97 1.498582E-002 +98 8.290929E-003 +99 4.291956E-008 +100 1.393703E-008 +101 5.973015E-009 +102 1.307211E-001 +103 7.923299E+000 +104 3.202875E-001 +105 1.091889E-001 +106 2.984497E-001 +107 4.765866E+003 +108 2.636723E+003 +109 1.364950E-002 +110 4.432326E-003 +111 1.899569E-003 +112 3.098936E+002 +113 1.385064E+002 +114 4.672172E+001 +115 1.103527E-002 +116 2.637956E+002 +117 1.386650E-009 +118 7.509102E-008 +119 2.247285E-008 +120 1.505010E-006 +121 4.477992E-003 +122 6.436529E-003 +123 3.677037E-002 +124 6.453335E-003 +125 4.467855E+001 +126 1.329361E+003 +127 8.590361E+001 +128 1.501540E+002 +129 2.681175E+001 +130 3.966976E-004 +131 1.084307E-003 +132 1.163646E-003 +133 1.731501E+001 +134 9.579559E+000 +135 4.959040E-005 +136 1.610322E-005 +137 6.901380E-006 +138 1.196890E-004 +139 5.691365E-005 +140 6.841447E-005 +141 2.295406E-004 diff --git a/tests/model_tests/spec_model_kpp/output/reactionRates/34200.cmp b/tests/model_tests/spec_model_kpp/output/reactionRates/34200.cmp new file mode 100644 index 000000000..2da83cc96 --- /dev/null +++ b/tests/model_tests/spec_model_kpp/output/reactionRates/34200.cmp @@ -0,0 +1,142 @@ + reactionNumber reactionRate +1 7.614510E+008 +2 4.627622E+001 +3 1.205545E+003 +4 7.218706E+003 +5 1.429075E+003 +6 1.211849E+007 +7 4.935576E+008 +8 1.184345E+006 +9 2.507615E+002 +10 1.072667E+006 +11 3.130553E+001 +12 6.536575E+004 +13 1.196012E+006 +14 1.633187E+005 +15 5.422633E+000 +16 4.080574E+006 +17 5.734272E+001 +18 1.214561E+004 +19 4.333452E+003 +20 5.906026E+002 +21 1.882975E+006 +22 2.487070E+006 +23 6.256677E+001 +24 4.356926E+006 +25 4.884371E+005 +26 2.397265E+002 +27 3.278958E+001 +28 2.702917E+004 +29 2.231291E+004 +30 0.000000E+000 +31 0.000000E+000 +32 0.000000E+000 +33 2.113596E+005 +34 1.317464E+003 +35 0.000000E+000 +36 1.331443E+007 +37 2.522621E+008 +38 5.401905E+001 +39 4.969604E+008 +40 1.694262E+004 +41 1.169107E+005 +42 1.975601E+006 +43 1.609572E+004 +44 6.396347E+004 +45 4.897041E+005 +46 2.500577E-001 +47 1.491371E+003 +48 5.532093E+004 +49 5.263457E-005 +50 2.499914E-001 +51 1.015064E-006 +52 2.403696E-008 +53 8.012320E-009 +54 8.012320E-009 +55 1.887265E+004 +56 3.115800E+004 +57 3.510543E-001 +58 2.558343E+004 +59 5.518074E+002 +60 7.456856E+002 +61 1.938783E+002 +62 1.582247E+001 +63 2.765736E+002 +64 5.503814E+004 +65 2.245997E-001 +66 5.508370E-003 +67 1.652511E-002 +68 5.508370E-003 +69 6.395023E-006 +70 2.841066E-006 +71 2.054624E-006 +72 3.419035E-002 +73 2.158054E-001 +74 1.455981E+001 +75 2.672016E-006 +76 1.753639E-002 +77 1.262051E-001 +78 5.486230E-001 +79 4.810032E-002 +80 6.177657E-003 +81 0.000000E+000 +82 2.067028E+002 +83 3.445046E+002 +84 2.049504E+000 +85 7.756254E+000 +86 6.584743E-001 +87 3.960824E+004 +88 1.542187E+004 +89 3.652461E-003 +90 3.593167E-001 +91 1.387170E+003 +92 5.548681E+003 +93 2.663021E+003 +94 9.459267E-007 +95 3.224750E-007 +96 8.814317E-007 +97 1.448392E-002 +98 8.452702E-003 +99 4.683973E-008 +100 1.239501E-008 +101 5.312145E-009 +102 1.262054E-001 +103 7.779484E+000 +104 2.960771E-001 +105 1.009354E-001 +106 2.758900E-001 +107 4.533498E+003 +108 2.645714E+003 +109 1.466094E-002 +110 3.879664E-003 +111 1.662713E-003 +112 3.603605E+002 +113 1.520084E+002 +114 5.433047E+001 +115 1.397529E-002 +116 2.685248E+002 +117 1.567711E-009 +118 8.390670E-008 +119 2.708045E-008 +120 1.539667E-006 +121 5.412315E-003 +122 7.350617E-003 +123 4.152004E-002 +124 7.858380E-003 +125 4.649251E+001 +126 1.634328E+003 +127 8.783144E+001 +128 1.535237E+002 +129 2.741345E+001 +130 3.846465E-004 +131 1.051367E-003 +132 1.128296E-003 +133 1.727634E+001 +134 1.008234E+001 +135 5.587019E-005 +136 1.478470E-005 +137 6.336300E-006 +138 1.564367E-004 +139 6.539885E-005 +140 8.759449E-005 +141 2.761873E-004 diff --git a/tests/model_tests/spec_model_kpp/output/reactionRates/36000.cmp b/tests/model_tests/spec_model_kpp/output/reactionRates/36000.cmp new file mode 100644 index 000000000..0c98a3b7c --- /dev/null +++ b/tests/model_tests/spec_model_kpp/output/reactionRates/36000.cmp @@ -0,0 +1,142 @@ + reactionNumber reactionRate +1 7.122884E+008 +2 4.336724E+001 +3 1.047926E+003 +4 6.734664E+003 +5 1.333250E+003 +6 9.206238E+006 +7 4.594742E+008 +8 1.183344E+006 +9 2.165347E+002 +10 1.064510E+006 +11 3.334381E+001 +12 6.962165E+004 +13 9.085926E+005 +14 1.279357E+005 +15 5.172184E+000 +16 3.186392E+006 +17 5.024304E+001 +18 1.024338E+004 +19 2.852555E+003 +20 4.185660E+002 +21 1.368181E+006 +22 1.939530E+006 +23 5.224695E+001 +24 3.408378E+006 +25 4.100961E+005 +26 1.576012E+002 +27 2.947960E+001 +28 1.705901E+004 +29 1.919126E+004 +30 0.000000E+000 +31 0.000000E+000 +32 0.000000E+000 +33 2.324895E+005 +34 1.401969E+003 +35 0.000000E+000 +36 1.011495E+007 +37 2.410859E+008 +38 5.326879E+001 +39 4.618926E+008 +40 1.744473E+004 +41 1.202323E+005 +42 1.478198E+006 +43 1.462839E+004 +44 6.806624E+004 +45 4.117288E+005 +46 2.538818E-001 +47 1.420416E+003 +48 4.112398E+004 +49 4.841177E-005 +50 2.538073E-001 +51 1.184379E-006 +52 2.113844E-008 +53 7.046145E-009 +54 7.046145E-009 +55 1.659576E+004 +56 2.845190E+004 +57 3.807549E-001 +58 2.031629E+004 +59 5.255535E+002 +60 7.102074E+002 +61 1.846539E+002 +62 1.065838E+001 +63 2.056492E+002 +64 4.092419E+004 +65 1.919303E-001 +66 3.547756E-003 +67 1.064327E-002 +68 3.547756E-003 +69 5.780014E-006 +70 2.567841E-006 +71 2.099938E-006 +72 3.471189E-002 +73 2.190973E-001 +74 1.241188E+001 +75 3.152874E-006 +76 1.515034E-002 +77 1.168096E-001 +78 5.218174E-001 +79 4.257098E-002 +80 5.868118E-003 +81 0.000000E+000 +82 1.968696E+002 +83 3.281160E+002 +84 1.673762E+000 +85 6.334277E+000 +86 6.080949E-001 +87 2.945562E+004 +88 1.146884E+004 +89 2.948587E-003 +90 4.011203E-001 +91 1.133813E+003 +92 4.535251E+003 +93 2.404016E+003 +94 7.731549E-007 +95 2.635756E-007 +96 7.204398E-007 +97 1.306755E-002 +98 8.184894E-003 +99 4.856692E-008 +100 9.686552E-009 +101 4.151380E-009 +102 1.168086E-001 +103 6.878472E+000 +104 2.320061E-001 +105 7.909299E-002 +106 2.161875E-001 +107 3.921273E+003 +108 2.456099E+003 +109 1.457382E-002 +110 2.906713E-003 +111 1.245734E-003 +112 3.818003E+002 +113 1.491130E+002 +114 5.756288E+001 +115 1.657176E-002 +116 2.331345E+002 +117 1.496073E-009 +118 7.923097E-008 +119 2.891624E-008 +120 1.358879E-006 +121 6.109016E-003 +122 6.997151E-003 +123 3.910393E-002 +124 8.369186E-003 +125 4.101659E+001 +126 1.843954E+003 +127 7.615844E+001 +128 1.331201E+002 +129 2.377014E+001 +130 2.946862E-004 +131 8.054756E-004 +132 8.644128E-004 +133 1.460995E+001 +134 9.150982E+000 +135 5.429943E-005 +136 1.082989E-005 +137 4.641380E-006 +138 1.716400E-004 +139 5.913759E-005 +140 9.330348E-005 +141 2.648859E-004 diff --git a/tests/model_tests/spec_model_kpp/output/reactionRates/37800.cmp b/tests/model_tests/spec_model_kpp/output/reactionRates/37800.cmp new file mode 100644 index 000000000..f6c9ca3c0 --- /dev/null +++ b/tests/model_tests/spec_model_kpp/output/reactionRates/37800.cmp @@ -0,0 +1,142 @@ + reactionNumber reactionRate +1 6.572890E+008 +2 4.000587E+001 +3 8.910341E+002 +4 6.305112E+003 +5 1.248212E+003 +6 6.352262E+006 +7 4.232390E+008 +8 1.200187E+006 +9 1.838458E+002 +10 1.071196E+006 +11 3.694433E+001 +12 7.713951E+004 +13 6.269248E+005 +14 9.026490E+004 +15 4.234773E+000 +16 2.246608E+006 +17 3.818066E+001 +18 7.849545E+003 +19 1.543261E+003 +20 2.459479E+002 +21 8.897594E+005 +22 1.388797E+006 +23 4.027012E+001 +24 2.407412E+006 +25 3.189346E+005 +26 8.668264E+001 +27 2.467842E+001 +28 9.107035E+003 +29 1.442048E+004 +30 0.000000E+000 +31 0.000000E+000 +32 0.000000E+000 +33 2.475220E+005 +34 1.551298E+003 +35 0.000000E+000 +36 6.975729E+006 +37 2.262416E+008 +38 4.823133E+001 +39 4.244970E+008 +40 1.811561E+004 +41 1.246027E+005 +42 1.005338E+006 +43 1.206195E+004 +44 7.531626E+004 +45 3.208619E+005 +46 2.668859E-001 +47 1.366831E+003 +48 2.793823E+004 +49 4.233598E-005 +50 2.668002E-001 +51 1.475590E-006 +52 1.790081E-008 +53 5.966938E-009 +54 5.966938E-009 +55 1.356659E+004 +56 2.444137E+004 +57 4.136801E-001 +58 1.426505E+004 +59 5.057424E+002 +60 6.834357E+002 +61 1.776933E+002 +62 6.024627E+000 +63 1.397299E+002 +64 2.780625E+004 +65 1.545606E-001 +66 1.941931E-003 +67 5.825794E-003 +68 1.941931E-003 +69 4.576534E-006 +70 2.033181E-006 +71 1.993259E-006 +72 3.647621E-002 +73 2.302334E-001 +74 9.274144E+000 +75 3.858629E-006 +76 1.198280E-002 +77 1.031537E-001 +78 5.016444E-001 +79 3.774783E-002 +80 5.729153E-003 +81 0.000000E+000 +82 1.894497E+002 +83 3.157494E+002 +84 1.192608E+000 +85 4.513372E+000 +86 5.194275E-001 +87 2.007517E+004 +88 7.816469E+003 +89 2.091059E-003 +90 4.484475E-001 +91 8.191963E+002 +92 3.276785E+003 +93 2.016328E+003 +94 5.390768E-007 +95 1.837762E-007 +96 5.023215E-007 +97 1.095221E-002 +98 7.553251E-003 +99 4.824377E-008 +100 6.540253E-009 +101 2.802966E-009 +102 1.031314E-001 +103 5.393641E+000 +104 1.519909E-001 +105 5.181507E-002 +106 1.416279E-001 +107 3.087939E+003 +108 2.129614E+003 +109 1.360217E-002 +110 1.844002E-003 +111 7.902867E-004 +112 3.733853E+002 +113 1.315864E+002 +114 5.629418E+001 +115 1.891426E-002 +116 1.719638E+002 +117 1.200507E-009 +118 6.299689E-008 +119 2.756230E-008 +120 1.025220E-006 +121 6.530429E-003 +122 5.562444E-003 +123 3.078562E-002 +124 7.898782E-003 +125 3.049391E+001 +126 1.942396E+003 +127 5.598342E+001 +128 9.785544E+001 +129 1.747323E+001 +130 1.740302E-004 +131 4.756826E-004 +132 5.104886E-004 +133 1.037140E+001 +134 7.152690E+000 +135 4.568533E-005 +136 6.193412E-006 +137 2.654320E-006 +138 1.625990E-004 +139 4.257739E-005 +140 8.478044E-005 +141 2.057370E-004 diff --git a/tests/model_tests/spec_model_kpp/output/reactionRates/39600.cmp b/tests/model_tests/spec_model_kpp/output/reactionRates/39600.cmp new file mode 100644 index 000000000..58199ac57 --- /dev/null +++ b/tests/model_tests/spec_model_kpp/output/reactionRates/39600.cmp @@ -0,0 +1,142 @@ + reactionNumber reactionRate +1 5.913935E+008 +2 3.588431E+001 +3 7.237787E+002 +4 5.880651E+003 +5 1.164182E+003 +6 3.788234E+006 +7 3.809234E+008 +8 1.240286E+006 +9 1.498429E+002 +10 1.098098E+006 +11 4.348515E+001 +12 9.079671E+004 +13 3.738727E+005 +14 5.495791E+004 +15 2.883031E+000 +16 1.371162E+006 +17 2.442960E+001 +18 5.307691E+003 +19 6.392790E+002 +20 1.131472E+002 +21 4.905852E+005 +22 8.792282E+005 +23 2.792636E+001 +24 1.474152E+006 +25 2.242407E+005 +26 3.731318E+001 +27 1.900634E+001 +28 3.871908E+003 +29 9.135089E+003 +30 0.000000E+000 +31 0.000000E+000 +32 0.000000E+000 +33 2.567416E+005 +34 1.822355E+003 +35 0.000000E+000 +36 4.167796E+006 +37 2.067202E+008 +38 3.965906E+001 +39 3.808445E+008 +40 1.914190E+004 +41 1.311844E+005 +42 5.991300E+005 +43 8.804974E+003 +44 8.847616E+004 +45 2.261505E+005 +46 2.953342E-001 +47 1.327953E+003 +48 1.662863E+004 +49 3.519672E-005 +50 2.952362E-001 +51 2.053708E-006 +52 1.460882E-008 +53 4.869607E-009 +54 4.869607E-009 +55 1.011027E+004 +56 1.946654E+004 +57 4.616473E-001 +58 8.562263E+003 +59 4.913160E+002 +60 6.639406E+002 +61 1.726245E+002 +62 2.694659E+000 +63 8.318668E+001 +64 1.655415E+004 +65 1.157319E-001 +66 8.526237E-004 +67 2.557871E-003 +68 8.526237E-004 +69 3.060588E-006 +70 1.359703E-006 +71 1.726815E-006 +72 4.038028E-002 +73 2.548755E-001 +74 5.864532E+000 +75 5.025188E-006 +76 8.393581E-003 +77 8.508942E-002 +78 4.870236E-001 +79 3.310749E-002 +80 5.769602E-003 +81 0.000000E+000 +82 1.840505E+002 +83 3.067508E+002 +84 7.217086E-001 +85 2.731274E+000 +86 4.071953E-001 +87 1.181325E+004 +88 4.599607E+003 +89 1.266397E-003 +90 5.143548E-001 +91 5.053693E+002 +92 2.021477E+003 +93 1.539854E+003 +94 3.106755E-007 +95 1.059121E-007 +96 2.894931E-007 +97 8.401349E-003 +98 6.652766E-003 +99 4.654554E-008 +100 3.699992E-009 +101 1.585711E-009 +102 8.511945E-002 +103 3.613910E+000 +104 8.162738E-002 +105 2.782752E-002 +106 7.606187E-002 +107 2.207384E+003 +108 1.747958E+003 +109 1.222945E-002 +110 9.721418E-004 +111 4.166322E-004 +112 3.378208E+002 +113 1.034444E+002 +114 5.093222E+001 +115 2.143790E-002 +116 1.048334E+002 +117 7.896876E-010 +118 4.112856E-008 +119 2.331060E-008 +120 6.391704E-007 +121 6.666391E-003 +122 3.620370E-003 +123 1.987321E-002 +124 6.605320E-003 +125 1.854377E+001 +126 1.934069E+003 +127 3.467383E+001 +128 6.060763E+001 +129 1.082220E+001 +130 7.521892E-005 +131 2.055984E-004 +132 2.206422E-004 +133 5.966649E+000 +134 4.724803E+000 +135 3.305671E-005 +136 2.627739E-006 +137 1.126174E-006 +138 1.361826E-004 +139 2.427771E-005 +140 6.648683E-005 +141 1.288731E-004 diff --git a/tests/model_tests/spec_model_kpp/output/reactionRates/41400.cmp b/tests/model_tests/spec_model_kpp/output/reactionRates/41400.cmp new file mode 100644 index 000000000..b997b5c3e --- /dev/null +++ b/tests/model_tests/spec_model_kpp/output/reactionRates/41400.cmp @@ -0,0 +1,142 @@ + reactionNumber reactionRate +1 5.055997E+008 +2 3.046933E+001 +3 5.315132E+002 +4 5.360791E+003 +5 1.061267E+003 +6 1.767132E+006 +7 3.249703E+008 +8 1.313480E+006 +9 1.105585E+002 +10 1.151456E+006 +11 5.660338E+001 +12 1.181875E+005 +13 1.744039E+005 +14 2.664537E+004 +15 1.517295E+000 +16 6.691021E+005 +17 1.230508E+001 +18 3.015456E+003 +19 1.785144E+002 +20 3.702393E+001 +21 2.057102E+005 +22 4.576551E+005 +23 1.664201E+001 +24 7.243348E+005 +25 1.367751E+005 +26 1.115070E+001 +27 1.327229E+001 +28 1.186397E+003 +29 4.531830E+003 +30 0.000000E+000 +31 0.000000E+000 +32 0.000000E+000 +33 2.609117E+005 +34 2.363584E+003 +35 0.000000E+000 +36 1.954985E+006 +37 1.807127E+008 +38 2.849569E+001 +39 3.231187E+008 +40 2.091940E+004 +41 1.423592E+005 +42 2.940676E+005 +43 5.360096E+003 +44 1.147531E+005 +45 1.384440E+005 +46 3.551592E-001 +47 1.299248E+003 +48 7.996526E+003 +49 2.812677E-005 +50 3.542794E-001 +51 3.502396E-006 +52 1.166071E-008 +53 3.886903E-009 +54 3.886903E-009 +55 6.514964E+003 +56 1.377228E+004 +57 5.514376E-001 +58 4.089875E+003 +59 4.806583E+002 +60 6.495382E+002 +61 1.688799E+002 +62 8.636770E-001 +63 4.003686E+001 +64 7.967335E+003 +65 7.916064E-002 +66 2.729587E-004 +67 8.188762E-004 +68 2.729587E-004 +69 1.604429E-006 +70 7.127872E-007 +71 1.305306E-006 +72 4.856808E-002 +73 3.065559E-001 +74 2.916113E+000 +75 7.267292E-006 +76 4.854036E-003 +77 6.204950E-002 +78 4.763048E-001 +79 2.782269E-002 +80 6.018855E-003 +81 0.000000E+000 +82 1.800660E+002 +83 3.001100E+002 +84 3.474026E-001 +85 1.314729E+000 +86 2.826341E-001 +87 5.494651E+003 +88 2.139397E+003 +89 6.117110E-004 +90 6.293015E-001 +91 2.472522E+002 +92 9.890088E+002 +93 1.014236E+003 +94 1.416239E-007 +95 4.828089E-008 +96 1.319678E-007 +97 5.750921E-003 +98 5.653090E-003 +99 4.528106E-008 +100 1.684700E-009 +101 7.220143E-010 +102 6.215652E-002 +103 1.917289E+000 +104 3.517456E-002 +105 1.199133E-002 +106 3.277630E-002 +107 1.428333E+003 +108 1.404035E+003 +109 1.124627E-002 +110 4.184221E-004 +111 1.793237E-004 +112 2.789593E+002 +113 6.969201E+001 +114 4.205785E+001 +115 2.530795E-002 +116 4.948911E+001 +117 3.998627E-010 +118 2.071119E-008 +119 1.692645E-008 +120 3.060549E-007 +121 6.538980E-003 +122 1.819212E-003 +123 9.925793E-003 +124 4.757095E-003 +125 8.623458E+000 +126 1.842435E+003 +127 1.716615E+001 +128 3.000534E+001 +129 5.357803E+000 +130 2.138957E-005 +131 5.846481E-005 +132 6.274272E-005 +133 2.547793E+000 +134 2.504451E+000 +135 2.006057E-005 +136 7.463615E-007 +137 3.198692E-007 +138 1.023091E-004 +139 1.058268E-005 +140 4.413310E-005 +141 6.242241E-005 diff --git a/tests/model_tests/spec_model_kpp/output/reactionRates/43200.cmp b/tests/model_tests/spec_model_kpp/output/reactionRates/43200.cmp new file mode 100644 index 000000000..7bd54d5e9 --- /dev/null +++ b/tests/model_tests/spec_model_kpp/output/reactionRates/43200.cmp @@ -0,0 +1,142 @@ + reactionNumber reactionRate +1 3.804849E+008 +2 2.263773E+001 +3 2.992236E+002 +4 4.480957E+003 +5 8.870874E+002 +6 5.052109E+005 +7 2.400126E+008 +8 1.440369E+006 +9 6.187204E+001 +10 1.243571E+006 +11 9.076651E+001 +12 1.895199E+005 +13 4.986086E+004 +14 8.617664E+003 +15 5.202546E-001 +16 2.191566E+005 +17 4.135042E+000 +18 1.320971E+003 +19 2.594794E+001 +20 7.289282E+000 +21 5.041219E+004 +22 1.665245E+005 +23 7.870576E+000 +24 2.404316E+005 +25 6.740922E+004 +26 1.810161E+000 +27 8.501963E+000 +28 2.218039E+002 +29 1.486533E+003 +30 0.000000E+000 +31 0.000000E+000 +32 0.000000E+000 +33 2.612558E+005 +34 3.759983E+003 +35 0.000000E+000 +36 5.551140E+005 +37 1.443627E+008 +38 1.575066E+001 +39 2.354574E+008 +40 2.480471E+004 +41 1.661212E+005 +42 1.066008E+005 +43 2.304266E+003 +44 1.825489E+005 +45 6.860578E+004 +46 5.090814E-001 +47 1.273572E+003 +48 2.600890E+003 +49 2.387214E-005 +50 5.069527E-001 +51 9.671809E-006 +52 1.027678E-008 +53 3.425592E-009 +54 3.425592E-009 +55 3.101579E+003 +56 7.581674E+003 +57 7.819834E-001 +58 1.316036E+003 +59 4.712216E+002 +60 6.367860E+002 +61 1.655644E+002 +62 1.667606E-001 +63 1.303323E+001 +64 2.593613E+003 +65 4.973044E-002 +66 5.472673E-005 +67 1.641802E-004 +68 5.472673E-005 +69 5.568249E-007 +70 2.473762E-007 +71 7.568365E-007 +72 6.950648E-002 +73 4.387166E-001 +74 9.625399E-001 +75 1.306185E-005 +76 1.979664E-003 +77 3.430874E-002 +78 4.668625E-001 +79 2.040425E-002 +80 6.553835E-003 +81 0.000000E+000 +82 1.765233E+002 +83 2.942055E+002 +84 1.127031E-001 +85 4.265199E-001 +86 1.531861E-001 +87 1.867224E+003 +88 7.270226E+002 +89 1.990876E-004 +90 9.074772E-001 +91 8.090468E+001 +92 3.236187E+002 +93 4.920499E+002 +94 4.882188E-008 +95 1.664382E-008 +96 4.549311E-008 +97 3.342452E-003 +98 4.878359E-003 +99 5.078849E-008 +100 6.030603E-010 +101 2.584544E-010 +102 3.437477E-002 +103 6.774710E-001 +104 1.207451E-002 +105 4.116312E-003 +106 1.125125E-002 +107 8.266475E+002 +108 1.206505E+003 +109 1.256089E-002 +110 1.491475E-004 +111 6.392035E-005 +112 1.976717E+002 +113 3.543077E+001 +114 2.980237E+001 +115 3.484021E-002 +116 1.545931E+001 +117 1.328976E-010 +118 6.861200E-009 +119 9.368125E-009 +120 9.540559E-008 +121 6.222372E-003 +122 6.024930E-004 +123 3.275723E-003 +124 2.622863E-003 +125 2.619606E+000 +126 1.708512E+003 +127 5.063428E+000 +128 8.850548E+000 +129 1.580368E+000 +130 3.201078E-006 +131 8.749613E-006 +132 9.389828E-006 +133 6.428481E-001 +134 9.382466E-001 +135 9.768064E-006 +136 1.159856E-007 +137 4.970810E-008 +138 6.637514E-005 +139 3.099629E-006 +140 2.187761E-005 +141 2.019077E-005 diff --git a/tests/model_tests/spec_model_kpp/output/reactionRates/45000.cmp b/tests/model_tests/spec_model_kpp/output/reactionRates/45000.cmp new file mode 100644 index 000000000..059b98268 --- /dev/null +++ b/tests/model_tests/spec_model_kpp/output/reactionRates/45000.cmp @@ -0,0 +1,142 @@ + reactionNumber reactionRate +1 1.792636E+008 +2 1.041975E+001 +3 6.013668E+001 +4 2.484397E+003 +5 4.918318E+002 +6 2.961340E+004 +7 1.000213E+008 +8 1.655918E+006 +9 1.125828E+001 +10 1.333617E+006 +11 2.685300E+002 +12 5.606889E+005 +13 2.922640E+003 +14 1.117582E+003 +15 7.038078E-002 +16 2.909103E+004 +17 5.625891E-001 +18 4.137510E+002 +19 1.104332E+000 +20 7.492680E-001 +21 2.854597E+003 +22 2.601322E+004 +23 2.626629E+000 +24 3.288188E+004 +25 2.543261E+004 +26 9.106435E-002 +27 6.852786E+000 +28 1.835556E+001 +29 1.958773E+002 +30 0.000000E+000 +31 0.000000E+000 +32 0.000000E+000 +33 2.593314E+005 +34 1.078634E+004 +35 0.000000E+000 +36 3.251472E+004 +37 8.749321E+007 +38 3.748953E+000 +39 9.160454E+007 +40 3.810267E+004 +41 2.422565E+005 +42 2.016774E+004 +43 3.461634E+002 +44 5.236818E+005 +45 2.599988E+004 +46 1.276200E+000 +47 1.240660E+003 +48 3.442725E+002 +49 4.429796E-005 +50 1.251620E+000 +51 1.407329E-004 +52 2.322407E-008 +53 7.741357E-009 +54 7.741357E-009 +55 5.363081E+002 +56 1.754426E+003 +57 1.952744E+000 +58 1.735259E+002 +59 4.590442E+002 +60 6.203300E+002 +61 1.612858E+002 +62 1.667213E-002 +63 1.733654E+000 +64 3.449971E+002 +65 3.898661E-002 +66 6.663252E-006 +67 1.998976E-005 +68 6.663252E-006 +69 7.885252E-008 +70 3.503118E-008 +71 1.925499E-007 +72 1.714576E-001 +73 1.082220E+000 +74 1.280122E-001 +75 4.609781E-005 +76 3.689061E-004 +77 7.545378E-003 +78 4.547916E-001 +79 8.479082E-003 +80 7.513294E-003 +81 0.000000E+000 +82 1.719656E+002 +83 2.866093E+002 +84 1.491030E-002 +85 5.642735E-002 +86 3.640945E-002 +87 2.483536E+002 +88 9.669897E+001 +89 2.637670E-005 +90 2.278970E+000 +91 1.072816E+001 +92 4.291263E+001 +93 8.776743E+001 +94 1.379017E-008 +95 4.701193E-009 +96 1.284993E-008 +97 1.256125E-003 +98 5.057641E-003 +99 1.124905E-007 +100 2.074459E-010 +101 8.890539E-011 +102 7.715843E-003 +103 9.636254E-002 +104 3.580826E-003 +105 1.220736E-003 +106 3.336679E-003 +107 3.261719E+002 +108 1.313293E+003 +109 2.920987E-002 +110 5.386648E-005 +111 2.308563E-005 +112 8.565325E+001 +113 7.416118E+000 +114 1.291368E+001 +115 8.433424E-002 +116 1.975886E+000 +117 1.772073E-011 +118 9.138270E-010 +119 2.241614E-009 +120 1.199847E-008 +121 5.895051E-003 +122 8.026572E-005 +123 4.358672E-004 +124 6.269993E-004 +125 3.244876E-001 +126 1.594262E+003 +127 6.733344E-001 +128 1.176946E+000 +129 2.101573E-001 +130 1.564267E-007 +131 4.275662E-007 +132 4.588515E-007 +133 4.179607E-002 +134 1.682871E-001 +135 3.742989E-006 +136 6.902518E-009 +137 2.958222E-009 +138 2.641836E-005 +139 3.828659E-007 +140 4.262520E-006 +141 2.665504E-006 diff --git a/tests/model_tests/spec_model_kpp/output/reactionRates/46800.cmp b/tests/model_tests/spec_model_kpp/output/reactionRates/46800.cmp new file mode 100644 index 000000000..21587228b --- /dev/null +++ b/tests/model_tests/spec_model_kpp/output/reactionRates/46800.cmp @@ -0,0 +1,142 @@ + reactionNumber reactionRate +1 5.583413E+004 +2 3.182074E-003 +3 6.146133E-006 +4 8.448646E-001 +5 1.672564E-001 +6 1.188699E-004 +7 3.218052E+004 +8 1.772732E+006 +9 1.212222E-006 +10 1.221075E+004 +11 8.181023E+003 +12 1.708192E+007 +13 1.173164E-005 +14 9.115629E+000 +15 5.865500E-004 +16 2.420024E+002 +17 4.794999E-003 +18 2.238905E+002 +19 5.070046E-003 +20 2.282123E-001 +21 7.792222E-003 +22 2.362730E+002 +23 6.097003E-001 +24 5.954737E+000 +25 1.532500E+004 +26 4.437057E-004 +27 1.055296E+002 +28 1.407469E-001 +29 1.612556E+000 +30 0.000000E+000 +31 0.000000E+000 +32 0.000000E+000 +33 2.566399E+005 +34 3.197479E+005 +35 0.000000E+000 +36 4.374031E-015 +37 5.568211E+004 +38 6.448970E-011 +39 1.489789E-002 +40 9.477397E+001 +41 1.531773E+002 +42 4.696564E-007 +43 1.615980E-010 +44 1.552391E+007 +45 1.522847E+004 +46 3.555697E+001 +47 1.214641E+003 +48 2.859654E+000 +49 2.102921E-002 +50 3.532774E-001 +51 3.377848E+000 +52 6.000635E-005 +53 2.000212E-005 +54 2.000212E-005 +55 1.832109E-011 +56 1.447079E-009 +57 5.462603E+001 +58 1.447184E+000 +59 4.494174E+002 +60 6.073207E+002 +61 1.579034E+002 +62 6.552263E-003 +63 4.051042E-004 +64 8.061573E-002 +65 7.746776E-001 +66 1.425299E-005 +67 4.275898E-005 +68 1.425299E-005 +69 4.943451E-009 +70 2.196188E-009 +71 2.698343E-017 +72 5.102838E-001 +73 3.220851E+000 +74 1.065048E-003 +75 2.848777E-003 +76 6.796720E-006 +77 2.993421E-015 +78 4.452594E-001 +79 2.723990E-006 +80 8.031389E-003 +81 0.000000E+000 +82 1.683616E+002 +83 2.806027E+002 +84 1.240064E-004 +85 4.692968E-004 +86 6.768792E-013 +87 6.156525E-001 +88 2.397105E-001 +89 2.194113E-007 +90 6.357622E+001 +91 8.922502E-002 +92 3.569001E-001 +93 9.255469E-012 +94 1.216131E-008 +95 4.145903E-009 +96 1.133213E-008 +97 6.586398E-007 +98 8.824027E-003 +99 5.015707E-006 +100 9.957161E-010 +101 4.267355E-010 +102 -1.308899E-008 +103 8.533145E-004 +104 2.253374E-003 +105 7.681959E-004 +106 2.099735E-003 +107 1.220396E-001 +108 1.635007E+003 +109 9.293622E-001 +110 1.844966E-004 +111 7.906998E-005 +112 3.884634E-006 +113 9.887578E-012 +114 5.856746E-007 +115 2.333477E+000 +116 1.629922E-002 +117 1.476535E-013 +118 7.614383E-012 +119 4.175137E-020 +120 1.012578E-010 +121 5.980376E-003 +122 6.686401E-007 +123 3.630905E-006 +124 1.167527E-014 +125 2.662156E-003 +126 1.572294E+003 +127 7.678880E-001 +128 1.342219E+000 +129 2.396689E-001 +130 1.123586E-007 +131 3.071134E-007 +132 3.295852E-007 +133 1.784987E-005 +134 2.391409E-001 +135 1.359312E-004 +136 2.698501E-008 +137 1.156501E-008 +138 6.055046E-013 +139 3.140840E-009 +140 2.821239E-017 +141 2.216415E-008 diff --git a/tests/model_tests/spec_model_kpp/output/reactionRates/48600.cmp b/tests/model_tests/spec_model_kpp/output/reactionRates/48600.cmp new file mode 100644 index 000000000..d09f504bb --- /dev/null +++ b/tests/model_tests/spec_model_kpp/output/reactionRates/48600.cmp @@ -0,0 +1,142 @@ + reactionNumber reactionRate +1 -5.724349E-009 +2 -3.244928E-016 +3 -2.105544E-019 +4 -8.158356E-014 +5 -1.615096E-014 +6 -2.080434E-089 +7 1.069541E+004 +8 1.660736E+006 +9 1.353488E-007 +10 1.216783E+004 +11 2.297904E+004 +12 4.798008E+007 +13 -2.053246E-090 +14 1.703092E+001 +15 1.101763E-003 +16 4.545722E+002 +17 9.227951E-003 +18 3.073737E+002 +19 1.314492E-002 +20 4.347750E-001 +21 4.890807E-003 +22 4.180098E+002 +23 3.415344E+000 +24 2.746385E+000 +25 1.992289E+004 +26 1.085507E-003 +27 4.343822E+002 +28 2.643749E-001 +29 2.995848E+000 +30 -0.000000E+000 +31 0.000000E+000 +32 0.000000E+000 +33 2.538318E+005 +34 9.569409E+005 +35 0.000000E+000 +36 0.000000E+000 +37 0.000000E+000 +38 0.000000E+000 +39 0.000000E+000 +40 0.000000E+000 +41 0.000000E+000 +42 0.000000E+000 +43 0.000000E+000 +44 4.645993E+007 +45 1.983403E+004 +46 1.058779E+002 +47 1.206319E+003 +48 5.363426E+000 +49 2.190066E-001 +50 8.906834E-001 +51 7.600578E+001 +52 2.670725E-003 +53 8.902415E-004 +54 8.902415E-004 +55 0.000000E+000 +56 0.000000E+000 +57 1.634212E+002 +58 2.726972E+000 +59 4.463381E+002 +60 6.031595E+002 +61 1.568215E+002 +62 1.793589E-002 +63 2.684550E-004 +64 5.342256E-002 +65 4.581681E+000 +66 1.667383E-004 +67 5.002148E-004 +68 1.667383E-004 +69 3.357650E-007 +70 1.491676E-007 +71 0.000000E+000 +72 1.052880E+001 +73 6.645650E+001 +74 2.000562E-003 +75 6.250347E-002 +76 9.392756E-005 +77 0.000000E+000 +78 4.422092E-001 +79 9.039744E-007 +80 7.512671E-003 +81 0.000000E+000 +82 1.672082E+002 +83 2.786804E+002 +84 2.329644E-004 +85 8.816432E-004 +86 0.000000E+000 +87 3.330106E+000 +88 1.296610E+000 +89 4.131091E-007 +90 1.893601E+002 +91 1.673896E-001 +92 6.695584E-001 +93 0.000000E+000 +94 1.495338E-007 +95 5.097743E-008 +96 1.393383E-007 +97 1.960560E-006 +98 7.403756E-002 +99 1.332488E-004 +100 5.232293E-008 +101 2.242411E-008 +102 -6.568418E-076 +103 1.701680E-003 +104 3.625706E-003 +105 1.236036E-003 +106 3.378499E-003 +107 4.753717E-002 +108 1.795169E+003 +109 3.230848E+000 +110 1.268660E-003 +111 5.437115E-004 +112 0.000000E+000 +113 0.000000E+000 +114 0.000000E+000 +115 6.950376E+000 +116 3.057874E-002 +117 2.804944E-013 +118 1.443879E-011 +119 0.000000E+000 +120 3.728317E-010 +121 1.172276E-002 +122 1.258750E-006 +123 6.833394E-006 +124 0.000000E+000 +125 5.115941E-003 +126 1.608580E+003 +127 2.281319E+000 +128 3.987600E+000 +129 7.120323E-001 +130 4.892009E-007 +131 1.337149E-006 +132 1.434989E-006 +133 1.881436E-005 +134 7.104956E-001 +135 1.278711E-003 +136 5.021128E-007 +137 2.151912E-007 +138 0.000000E+000 +139 5.903464E-009 +140 0.000000E+000 +141 4.164232E-008 diff --git a/tests/model_tests/spec_model_kpp/output/reactionRates/50400.cmp b/tests/model_tests/spec_model_kpp/output/reactionRates/50400.cmp new file mode 100644 index 000000000..ab79f2112 --- /dev/null +++ b/tests/model_tests/spec_model_kpp/output/reactionRates/50400.cmp @@ -0,0 +1,142 @@ + reactionNumber reactionRate +1 2.431715E-012 +2 1.371630E-019 +3 9.660235E-023 +4 3.267957E-017 +5 6.469519E-018 +6 2.036459E-093 +7 1.149422E+004 +8 1.558235E+006 +9 1.578803E-007 +10 1.773420E+004 +11 2.924022E+004 +12 6.105339E+007 +13 2.009845E-094 +14 2.452350E+001 +15 1.594363E-003 +16 6.578122E+002 +17 1.366553E-002 +18 3.813621E+002 +19 2.371823E-002 +20 6.759516E-001 +21 7.643923E-003 +22 5.703909E+002 +23 6.669529E+000 +24 3.698484E+000 +25 2.342422E+004 +26 1.850776E-003 +27 7.309020E+002 +28 3.825752E-001 +29 4.288896E+000 +30 0.000000E+000 +31 0.000000E+000 +32 0.000000E+000 +33 2.511151E+005 +34 1.227601E+006 +35 0.000000E+000 +36 0.000000E+000 +37 0.000000E+000 +38 0.000000E+000 +39 0.000000E+000 +40 0.000000E+000 +41 0.000000E+000 +42 0.000000E+000 +43 0.000000E+000 +44 5.960059E+007 +45 2.336862E+004 +46 1.426600E+002 +47 1.198513E+003 +48 7.749550E+000 +49 3.612994E-001 +50 1.272754E+000 +51 1.357040E+002 +52 4.631375E-003 +53 1.543792E-003 +54 1.543792E-003 +55 0.000000E+000 +56 0.000000E+000 +57 2.211794E+002 +58 3.957804E+000 +59 4.434497E+002 +60 5.992564E+002 +61 1.558066E+002 +62 2.631270E-002 +63 3.411343E-004 +64 6.788572E-002 +65 7.274505E+000 +66 2.571276E-004 +67 7.713827E-004 +68 2.571276E-004 +69 1.700112E-006 +70 7.552952E-007 +71 0.000000E+000 +72 1.871531E+001 +73 1.181288E+002 +74 2.895016E-003 +75 3.090297E-001 +76 4.979967E-004 +77 0.000000E+000 +78 4.393480E-001 +79 9.700044E-007 +80 7.038212E-003 +81 0.000000E+000 +82 1.661263E+002 +83 2.768772E+002 +84 3.372079E-004 +85 1.276148E-003 +86 0.000000E+000 +87 5.283263E+000 +88 2.057091E+000 +89 6.013415E-007 +90 2.550066E+002 +91 2.417290E-001 +92 9.669161E-001 +93 0.000000E+000 +94 9.777988E-007 +95 3.333405E-007 +96 9.111307E-007 +97 1.110456E-005 +98 3.661203E-001 +99 9.429953E-004 +100 3.596441E-007 +101 1.541332E-007 +102 6.429635E-080 +103 2.601646E-003 +104 5.126523E-003 +105 1.747679E-003 +106 4.776988E-003 +107 5.822036E-002 +108 1.919540E+003 +109 4.944051E+000 +110 1.885586E-003 +111 8.081085E-004 +112 0.000000E+000 +113 0.000000E+000 +114 0.000000E+000 +115 9.360237E+000 +116 4.416066E-002 +117 4.509962E-013 +118 2.270852E-011 +119 0.000000E+000 +120 2.650972E-009 +121 5.760009E-002 +122 1.828182E-006 +123 9.916661E-006 +124 0.000000E+000 +125 7.680143E-003 +126 1.668735E+003 +127 3.073281E+000 +128 5.371898E+000 +129 9.592150E-001 +130 8.709093E-007 +131 2.380485E-006 +132 2.554667E-006 +133 2.901258E-005 +134 9.565521E-001 +135 2.463737E-003 +136 9.396320E-007 +137 4.026994E-007 +138 0.000000E+000 +139 8.556520E-009 +140 0.000000E+000 +141 6.029258E-008 diff --git a/tests/model_tests/spec_model_kpp/output/speciesConcentrations.output.cmp b/tests/model_tests/spec_model_kpp/output/speciesConcentrations.output.cmp new file mode 100644 index 000000000..231d3dc35 --- /dev/null +++ b/tests/model_tests/spec_model_kpp/output/speciesConcentrations.output.cmp @@ -0,0 +1,32 @@ + t CO O3 NO NO2 C2H4 OH HO2 ETHENO3O2 HOCH2CH2O2 NO3CH2CO3 HOCH2CO3 HCOCO3 + 2.340000E+004 4.800000E+012 6.110000E+011 6.800000E+010 8.370000E+010 2.760000E+009 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 0.000000E+000 + 2.430000E+004 4.796633E+012 6.163608E+011 7.065953E+010 7.744115E+010 2.690022E+009 4.149617E+006 7.682670E+006 4.755265E-001 1.358277E+005 1.543195E-003 2.907844E+002 1.104317E-001 + 2.520000E+004 4.792251E+012 6.176982E+011 6.885875E+010 7.565352E+010 2.601894E+009 4.826991E+006 9.183572E+006 4.740316E-001 1.568539E+005 3.464636E-003 7.788542E+002 6.561231E-001 + 2.610000E+004 4.787431E+012 6.191966E+011 6.699721E+010 7.395202E+010 2.508167E+009 5.138277E+006 1.005456E+007 4.729817E-001 1.654383E+005 5.345739E-003 1.340879E+003 1.763351E+000 + 2.700000E+004 4.782420E+012 6.207836E+011 6.509101E+010 7.234147E+010 2.414064E+009 5.277412E+006 1.063286E+007 4.729999E-001 1.683369E+005 7.091283E-003 1.918889E+003 3.394120E+000 + 2.790000E+004 4.777341E+012 6.224167E+011 6.315771E+010 7.083095E+010 2.322054E+009 5.316767E+006 1.104092E+007 4.743649E-001 1.681243E+005 8.678147E-003 2.482185E+003 5.437937E+000 + 2.880000E+004 4.772275E+012 6.240632E+011 6.121446E+010 6.943171E+010 2.233527E+009 5.282332E+006 1.131628E+007 4.772404E-001 1.657697E+005 1.009366E-002 3.008284E+003 7.743539E+000 + 2.970000E+004 4.767286E+012 6.256915E+011 5.927671E+010 6.815622E+010 2.149408E+009 5.183187E+006 1.146381E+007 4.817732E-001 1.616517E+005 1.132481E-002 3.477448E+003 1.013204E+001 + 3.060000E+004 4.762432E+012 6.272679E+011 5.735741E+010 6.701783E+010 2.070387E+009 5.022925E+006 1.147693E+007 4.881409E-001 1.559464E+005 1.235826E-002 3.872154E+003 1.241077E+001 + 3.150000E+004 4.757769E+012 6.287563E+011 5.546635E+010 6.603066E+010 1.996990E+009 4.804120E+006 1.134660E+007 4.965842E-001 1.487742E+005 1.318175E-002 4.177898E+003 1.439051E+001 + 3.240000E+004 4.753349E+012 6.301177E+011 5.360948E+010 6.520977E+010 1.929612E+009 4.530121E+006 1.106556E+007 5.074386E-001 1.402553E+005 1.378514E-002 4.384145E+003 1.590421E+001 + 3.330000E+004 4.749220E+012 6.313119E+011 5.178824E+010 6.457140E+010 1.868524E+009 4.205803E+006 1.063086E+007 5.211749E-001 1.305315E+005 1.416108E-002 4.485115E+003 1.682451E+001 + 3.420000E+004 4.745426E+012 6.322971E+011 4.999875E+010 6.413339E+010 1.813885E+009 3.837873E+006 1.004546E+007 5.384567E-001 1.197738E+005 1.430585E-002 4.480285E+003 1.707751E+001 + 3.510000E+004 4.742002E+012 6.330316E+011 4.823080E+010 6.391589E+010 1.765738E+009 3.434940E+006 9.319328E+006 5.602286E-001 1.081854E+005 1.422003E-002 4.374573E+003 1.665086E+001 + 3.600000E+004 4.738974E+012 6.334729E+011 4.646649E+010 6.394234E+010 1.724018E+009 3.007413E+006 8.469928E+006 5.878570E-001 9.600101E+004 1.390953E-002 4.178165E+003 1.559465E+001 + 3.690000E+004 4.736361E+012 6.335784E+011 4.467841E+010 6.424102E+010 1.688554E+009 2.567240E+006 7.522152E+006 6.233660E-001 8.348423E+004 1.338653E-002 3.905991E+003 1.401473E+001 + 3.780000E+004 4.734165E+012 6.333028E+011 4.282705E+010 6.484739E+010 1.659073E+009 2.127500E+006 6.507484E+006 6.698555E-001 7.092286E+004 1.267058E-002 3.576873E+003 1.205928E+001 + 3.870000E+004 4.732380E+012 6.325959E+011 4.085686E+010 6.580784E+010 1.635199E+009 1.701866E+006 5.462519E+006 7.322872E-001 5.862190E+004 1.178976E-002 3.212388E+003 9.900338E+000 + 3.960000E+004 4.730984E+012 6.313959E+011 3.869029E+010 6.718552E+010 1.616462E+009 1.303930E+006 4.426893E+006 8.190728E-001 4.689441E+004 1.078196E-002 2.835582E+003 7.713170E+000 + 4.050000E+004 4.729944E+012 6.296199E+011 3.621828E+010 6.906978E+010 1.602299E+009 9.464362E+005 3.440826E+006 9.455781E-001 3.605019E+004 9.696266E-003 2.469654E+003 5.656480E+000 + 4.140000E+004 4.729217E+012 6.271471E+011 3.328489E+010 7.159162E+010 1.592066E+009 6.404176E+005 2.542489E+006 1.142778E+000 2.638217E+004 8.594791E-003 2.136801E+003 3.856507E+000 + 4.230000E+004 4.728748E+012 6.237923E+011 2.966302E+010 7.494822E+010 1.585053E+009 3.942002E+005 1.765376E+006 1.482114E+000 1.814990E+004 7.554857E-003 1.857442E+003 2.396899E+000 + 4.320000E+004 4.728478E+012 6.192683E+011 2.502019E+010 7.943745E+010 1.580511E+009 2.121955E+005 1.135651E+006 2.163788E+000 1.155817E+004 6.671593E-003 1.650040E+003 1.314810E+000 + 4.410000E+004 4.728347E+012 6.131640E+011 1.890162E+010 8.547464E+010 1.577694E+009 9.331138E+004 6.690434E+005 3.950797E+000 6.724972E+003 6.059757E-003 1.531717E+003 6.015910E-001 + 4.500000E+004 4.728297E+012 6.051496E+011 1.094758E+010 9.336946E+010 1.575919E+009 2.906148E+004 3.660405E+005 1.193980E+001 3.623624E+003 5.848019E-003 1.517984E+003 2.058421E-001 + 4.590000E+004 4.728286E+012 5.966022E+011 2.581539E+009 1.015525E+011 1.574651E+009 3.729359E+003 2.073880E+005 1.507696E+002 1.998742E+003 6.189569E-003 1.603034E+003 5.657250E-002 + 4.680000E+004 4.728286E+012 5.930215E+011 4.414287E+006 1.024178E+011 1.573529E+009 2.258981E+002 1.960032E+005 1.025227E+004 2.468589E+003 9.214619E-003 1.729437E+003 2.450336E-001 + 4.770000E+004 4.728286E+012 5.914391E+011 9.870494E+005 9.946339E+010 1.572385E+009 3.198740E+002 2.322064E+005 4.697112E+004 4.026377E+003 2.240699E-002 1.872777E+003 5.465698E-001 + 4.860000E+004 4.728287E+012 5.899067E+011 1.153006E+006 9.658467E+010 1.571212E+009 4.205177E+002 2.692791E+005 8.094337E+004 4.943400E+003 7.728059E-002 2.011169E+003 7.854358E-001 + 4.950000E+004 4.728287E+012 5.884212E+011 1.224455E+006 9.378848E+010 1.570018E+009 5.201738E+002 3.051487E+005 1.005290E+005 5.461889E+003 2.057343E-001 2.146950E+003 9.767847E-001 + 5.040000E+004 4.728288E+012 5.869815E+011 1.251606E+006 9.107410E+010 1.568811E+009 6.126092E+002 3.369418E+005 1.091143E+005 5.838642E+003 4.192599E-001 2.281948E+003 1.132266E+000 diff --git a/tests/model_tests/spec_model_kpp/spec_model_kpp.fac b/tests/model_tests/spec_model_kpp/spec_model_kpp.fac new file mode 100644 index 000000000..4c11c81f5 --- /dev/null +++ b/tests/model_tests/spec_model_kpp/spec_model_kpp.fac @@ -0,0 +1,287 @@ + +* Generic Rate Coefficients ; +KRO2NO = 2.7D-12*EXP(360/TEMP) ; +KRO2HO2 = 2.91D-13*EXP(1300/TEMP) ; +KAPHO2 = 5.2D-13*EXP(980/TEMP) ; +KAPNO = 7.5D-12*EXP(290/TEMP) ; +KRO2NO3 = 2.3D-12 ; +KNO3AL = 1.44D-12*EXP(-1862/TEMP) ; +KDEC = 1.00D+06 ; +KROPRIM = 2.50D-14*EXP(-300/TEMP) ; +KROSEC = 2.50D-14*EXP(-300/TEMP) ; +KCH3O2 = 1.03D-13*EXP(365/TEMP) ; +K298CH3O2 = 3.5D-13 ; +K14ISOM1 = 3.00D7*EXP(-5300/TEMP) ; +* Complex reactions ; +KD0 = 1.10D-05*M*EXP(-10100/TEMP) ; +KDI = 1.90D17*EXP(-14100/TEMP) ; +KRD = KD0/KDI ; +FCD = 0.30 ; +NCD = 0.75-1.27*(LOG10(FCD)) ; +FD = 10@(LOG10(FCD)/(1+(LOG10(KRD)/NCD)@2)) ; +KBPAN = (KD0*KDI)*FD/(KD0+KDI) ; +KC0 = 3.28D-28*M*(TEMP/300)@-6.87 ; +KCI = 1.125D-11*(TEMP/300)@-1.105 ; +KRC = KC0/KCI ; +FCC = 0.30 ; +NC = 0.75-1.27*(LOG10(FCC)) ; +FC = 10@(LOG10(FCC)/(1+(LOG10(KRC)/NC)@2)) ; +KFPAN = (KC0*KCI)*FC/(KC0+KCI) ; +K10 = 1.0D-31*M*(TEMP/300)@-1.6 ; +K1I = 5.0D-11*(TEMP/300)@-0.3 ; +KR1 = K10/K1I ; +FC1 = 0.85 ; +NC1 = 0.75-1.27*(LOG10(FC1)) ; +F1 = 10@(LOG10(FC1)/(1+(LOG10(KR1)/NC1)@2)) ; +KMT01 = (K10*K1I)*F1/(K10+K1I) ; +K20 = 1.3D-31*M*(TEMP/300)@-1.5 ; +K2I = 2.3D-11*(TEMP/300)@0.24 ; +KR2 = K20/K2I ; +FC2 = 0.6 ; +NC2 = 0.75-1.27*(LOG10(FC2)) ; +F2 = 10@(LOG10(FC2)/(1+(LOG10(KR2)/NC2)@2)) ; +KMT02 = (K20*K2I)*F2/(K20+K2I) ; +K30 = 3.6D-30*M*(TEMP/300)@-4.1 ; +K3I = 1.9D-12*(TEMP/300)@0.2 ; +KR3 = K30/K3I ; +FC3 = 0.35 ; +NC3 = 0.75-1.27*(LOG10(FC3)) ; +F3 = 10@(LOG10(FC3)/(1+(LOG10(KR3)/NC3)@2)) ; +KMT03 = (K30*K3I)*F3/(K30+K3I) ; +K40 = 1.3D-3*M*(TEMP/300)@-3.5*EXP(-11000/TEMP) ; +K4I = 9.7D+14*(TEMP/300)@0.1*EXP(-11080/TEMP) ; +KR4 = K40/K4I ; +FC4 = 0.35 ; +NC4 = 0.75-1.27*(LOG10(FC4)) ; +F4 = 10@(LOG10(FC4)/(1+(LOG10(KR4)/NC4)@2)) ; +KMT04 = (K40*K4I)*F4/(K40+K4I) ; +KMT05 = 1.44D-13*(1+(M/4.2D+19)) ; +KMT06 = 1 + (1.40D-21*EXP(2200/TEMP)*H2O) ; +K70 = 7.4D-31*M*(TEMP/300)@-2.4 ; +K7I = 3.3D-11*(TEMP/300)@-0.3 ; +KR7 = K70/K7I ; +FC7 = 0.81 ; +NC7 = 0.75-1.27*(LOG10(FC7)) ; +F7 = 10@(LOG10(FC7)/(1+(LOG10(KR7)/NC7)@2)) ; +KMT07 = (K70*K7I)*F7/(K70+K7I) ; +K80 = 3.2D-30*M*(TEMP/300)@-4.5 ; +K8I = 3.0D-11 ; +KR8 = K80/K8I ; +FC8 = 0.41 ; +NC8 = 0.75-1.27*(LOG10(FC8)) ; +F8 = 10@(LOG10(FC8)/(1+(LOG10(KR8)/NC8)@2)) ; +KMT08 = (K80*K8I)*F8/(K80+K8I) ; +K90 = 1.4D-31*M*(TEMP/300)@-3.1 ; +K9I = 4.0D-12 ; +KR9 = K90/K9I ; +FC9 = 0.4 ; +NC9 = 0.75-1.27*(LOG10(FC9)) ; +F9 = 10@(LOG10(FC9)/(1+(LOG10(KR9)/NC9)@2)) ; +KMT09 = (K90*K9I)*F9/(K90+K9I) ; +K100 = 4.10D-05*M*EXP(-10650/TEMP) ; +K10I = 6.0D+15*EXP(-11170/TEMP) ; +KR10 = K100/K10I ; +FC10 = 0.4 ; +NC10 = 0.75-1.27*(LOG10(FC10)) ; +F10 = 10@(LOG10(FC10)/(1+(LOG10(KR10)/NC10)@2)) ; +KMT10 = (K100*K10I)*F10/(K100+K10I) ; +K1 = 2.40D-14*EXP(460/TEMP) ; +K3 = 6.50D-34*EXP(1335/TEMP) ; +K4 = 2.70D-17*EXP(2199/TEMP) ; +K2 = (K3*M)/(1+(K3*M/K4)) ; +KMT11 = K1 + K2 ; +K120 = 2.5D-31*M*(TEMP/300)@-2.6 ; +K12I = 2.0D-12 ; +KR12 = K120/K12I ; +FC12 = 0.53 ; +NC12 = 0.75-1.27*(LOG10(FC12)) ; +F12 = 10@(LOG10(FC12)/(1.0+(LOG10(KR12)/NC12)@2)) ; +KMT12 = (K120*K12I*F12)/(K120+K12I) ; +K130 = 2.5D-30*M*(TEMP/300)@-5.5 ; +K13I = 1.8D-11 ; +KR13 = K130/K13I ; +FC13 = 0.36 ; +NC13 = 0.75-1.27*(LOG10(FC13)) ; +F13 = 10@(LOG10(FC13)/(1+(LOG10(KR13)/NC13)@2)) ; +KMT13 = (K130*K13I)*F13/(K130+K13I) ; +K140 = 9.0D-5*EXP(-9690/TEMP)*M ; +K14I = 1.1D+16*EXP(-10560/TEMP) ; +KR14 = K140/K14I ; +FC14 = 0.36 ; +NC14 = 0.75-1.27*(LOG10(FC14)) ; +F14 = 10@(LOG10(FC14)/(1+(LOG10(KR14)/NC14)@2)) ; +KMT14 = (K140*K14I)*F14/(K140+K14I) ; +K150 = 8.6D-29*M*(TEMP/300)@-3.1 ; +K15I = 9.0D-12*(TEMP/300)@-0.85 ; +KR15 = K150/K15I ; +FC15 = 0.48 ; +NC15 = 0.75-1.27*(LOG10(FC15)) ; +F15 = 10@(LOG10(FC15)/(1+(LOG10(KR15)/NC15)@2)) ; +KMT15 = (K150*K15I)*F15/(K150+K15I) ; +K160 = 8D-27*M*(TEMP/300)@-3.5 ; +K16I = 3.0D-11*(TEMP/300)@-1 ; +KR16 = K160/K16I ; +FC16 = 0.5 ; +NC16 = 0.75-1.27*(LOG10(FC16)) ; +F16 = 10@(LOG10(FC16)/(1+(LOG10(KR16)/NC16)@2)) ; +KMT16 = (K160*K16I)*F16/(K160+K16I) ; +K170 = 5.0D-30*M*(TEMP/300)@-1.5 ; +K17I = 1.0D-12 ; +KR17 = K170/K17I ; +FC17 = 0.17*EXP(-51/TEMP)+EXP(-TEMP/204) ; +NC17 = 0.75-1.27*(LOG10(FC17)) ; +F17 = 10@(LOG10(FC17)/(1.0+(LOG10(KR17)/NC17)@2)) ; +KMT17 = (K170*K17I*F17)/(K170+K17I) ; +KMT18 = 9.5D-39*O2*EXP(5270/TEMP)/(1+7.5D-29*O2*EXP(5610/TEMP)) ; +KPPN0 = 1.7D-03*EXP(-11280/TEMP)*M ; +KPPNI = 8.3D+16*EXP(-13940/TEMP) ; +KRPPN = KPPN0/KPPNI ; +FCPPN = 0.36 ; +NCPPN = 0.75-1.27*(LOG10(FCPPN)) ; +FPPN = 10@(LOG10(FCPPN)/(1+(LOG10(KRPPN)/NCPPN)@2)) ; +KBPPN = (KPPN0*KPPNI)*FPPN/(KPPN0+KPPNI) ; +KRO2 = 1.26D-12*RO2 ; +* Peroxy radicals ; +RO2 = ETHENO3O2 + HOCH2CH2O2 + NO3CH2CO3 + HOCH2CO3 +HCOCO3; +* Reaction definitions ; +% 5.6D-34*N2*(TEMP/300)@-2.6*O2+6.0D-34*O2*(TEMP/300)@-2.6*O2 : O = O3 ; +% 8.0D-12*EXP(-2060/TEMP) : O + O3 = ; +% KMT01 : O + NO = NO2 ; +% 5.5D-12*EXP(188/TEMP) : O + NO2 = NO ; +% KMT02 : O + NO2 = NO3 ; +% 3.2D-11*EXP(67/TEMP)*O2+2.0D-11*EXP(130/TEMP)*N2 : O1D = O ; +% 1.4D-12*EXP(-1310/TEMP) : NO + O3 = NO2 ; +% 1.4D-13*EXP(-2470/TEMP) : NO2 + O3 = NO3 ; +% 3.3D-39*EXP(530/TEMP)*O2 : NO + NO = NO2 + NO2 ; +% 1.8D-11*EXP(110/TEMP) : NO + NO3 = NO2 + NO2 ; +% 4.50D-14*EXP(-1260/TEMP) : NO2 + NO3 = NO + NO2 ; +% KMT03 : NO2 + NO3 = N2O5 ; +% 2.14D-10*H2O : O1D = OH + OH ; +% 1.70D-12*EXP(-940/TEMP) : OH + O3 = HO2 ; +% 7.7D-12*EXP(-2100/TEMP) : OH + H2 = HO2 ; +% KMT05 : OH + CO = HO2 ; +% 2.9D-12*EXP(-160/TEMP) : OH + H2O2 = HO2 ; +% 2.03D-16*(TEMP/300)@4.57*EXP(693/TEMP) : HO2 + O3 = OH ; +% 4.8D-11*EXP(250/TEMP) : OH + HO2 = ; +% 2.20D-13*KMT06*EXP(600/TEMP)+1.90D-33*M*KMT06*EXP(980/TEMP) : HO2 + HO2 = H2O2 ; +% KMT07 : OH + NO = HONO ; +% KMT08 : OH + NO2 = HNO3 ; +% 2.0D-11 : OH + NO3 = HO2 + NO2 ; +% 3.45D-12*EXP(270/TEMP) : HO2 + NO = OH + NO2 ; +% KMT09 : HO2 + NO2 = HO2NO2 ; +% 3.2D-13*EXP(690/TEMP)*1.0 : OH + HO2NO2 = NO2 ; +% 4.0D-12 : HO2 + NO3 = OH + NO2 ; +% 2.5D-12*EXP(260/TEMP) : OH + HONO = NO2 ; +% KMT11 : OH + HNO3 = NO3 ; +% 4.0D-32*EXP(-1000/TEMP)*M : O + SO2 = SO3 ; +% KMT12 : OH + SO2 = HSO3 ; +% 1.3D-12*EXP(-330/TEMP)*O2 : HSO3 = HO2 + SO3 ; +% 6.00D-06 : HNO3 = NA ; +% 4.00D-04 : N2O5 = NA + NA ; +% 1.20D-15*H2O : SO3 = SA ; +% J<1> : O3 = O1D ; +% J<2> : O3 = O ; +% J<3> : H2O2 = OH + OH ; +% J<4> : NO2 = NO + O ; +% J<5> : NO3 = NO ; +% J<6> : NO3 = NO2 + O ; +% J<7> : HONO = OH + NO ; +% J<8> : HNO3 = OH + NO2 ; +% KMT04 : N2O5 = NO2 + NO3 ; +% KMT10 : HO2NO2 = HO2 + NO2 ; +% 3.3D-12*EXP(-2880/TEMP) : C2H4 + NO3 = ETHENO3O2 ; +% 9.1D-15*EXP(-2580/TEMP) : C2H4 + O3 = HCHO + CH2OOA ; +% KMT15 : C2H4 + OH = HOCH2CH2O2 ; +% KRO2HO2*0.387 : ETHENO3O2 + HO2 = ETHO2HNO3 ; +% KRO2NO : ETHENO3O2 + NO = ETHENO3O + NO2 ; +% KRO2NO3 : ETHENO3O2 + NO3 = ETHENO3O + NO2 ; +% 6.00D-13*0.6*RO2 : ETHENO3O2 = ETHENO3O ; +% 6.00D-13*0.2*RO2 : ETHENO3O2 = ETHOHNO3 ; +% 6.00D-13*0.2*RO2 : ETHENO3O2 = NO3CH2CHO ; +% J<11> : HCHO = CO + HO2 + HO2 ; +% J<12> : HCHO = H2 + CO ; +% 5.5D-16 : NO3 + HCHO = HNO3 + CO + HO2 ; +% 5.4D-12*EXP(135/TEMP) : OH + HCHO = HO2 + CO ; +% KDEC*0.37 : CH2OOA = CH2OO ; +% KDEC*0.50 : CH2OOA = CO ; +% KDEC*0.13 : CH2OOA = HO2 + CO + OH ; +% 1.53D-13*EXP(1300/TEMP) : HOCH2CH2O2 + HO2 = HYETHO2H ; +% KRO2NO*0.005 : HOCH2CH2O2 + NO = ETHOHNO3 ; +% KRO2NO*0.995 : HOCH2CH2O2 + NO = HOCH2CH2O + NO2 ; +% KRO2NO3 : HOCH2CH2O2 + NO3 = HOCH2CH2O + NO2 ; +% 2*(KCH3O2*7.8D-14*EXP(1000/TEMP))@0.5*RO2*0.2 : HOCH2CH2O2 = ETHGLY ; +% 2*(KCH3O2*7.8D-14*EXP(1000/TEMP))@0.5*RO2*0.6 : HOCH2CH2O2 = HOCH2CH2O ; +% 2*(KCH3O2*7.8D-14*EXP(1000/TEMP))@0.5*RO2*0.2 : HOCH2CH2O2 = HOCH2CHO ; +% 1.90D-12*EXP(190/TEMP) : ETHO2HNO3 + OH = ETHENO3O2 ; +% 1.62D-12 : ETHO2HNO3 + OH = NO3CH2CHO + OH ; +% J<41> : ETHO2HNO3 = ETHENO3O + OH ; +% 7.00D+03 : ETHENO3O = NO2 + HCHO + HCHO ; +% KROPRIM*O2 : ETHENO3O = NO3CH2CHO + HO2 ; +% 8.40D-13 : ETHOHNO3 + OH = HOCH2CHO + NO2 ; +% KNO3AL : NO3CH2CHO + NO3 = NO3CH2CO3 + HNO3 ; +% 3.40D-12 : NO3CH2CHO + OH = NO3CH2CO3 ; +% J<56>*4.3 : NO3CH2CHO = NO2 + HCOCH2O ; +% 1.20D-15 : CH2OO + CO = HCHO ; +% 1.00D-14 : CH2OO + NO = HCHO + NO2 ; +% 1.00D-15 : CH2OO + NO2 = HCHO + NO3 ; +% 7.00D-14 : CH2OO + SO2 = HCHO + SO3 ; +% 6.00D-18*H2O : CH2OO = HCHO + H2O2 ; +% 1.00D-17*H2O : CH2OO = HCOOH ; +% 1.90D-12*EXP(190/TEMP) : HYETHO2H + OH = HOCH2CH2O2 ; +% 1.38D-11 : HYETHO2H + OH = HOCH2CHO + OH ; +% J<41> : HYETHO2H = HOCH2CH2O + OH ; +% 9.50D+13*EXP(-5988/TEMP) : HOCH2CH2O = HO2 + HCHO + HCHO ; +% KROPRIM*O2 : HOCH2CH2O = HO2 + HOCH2CHO ; +% 1.45D-11 : ETHGLY + OH = HOCH2CHO + HO2 ; +% KNO3AL : HOCH2CHO + NO3 = HOCH2CO3 + HNO3 ; +% 1.00D-11*0.200 : HOCH2CHO + OH = GLYOX + HO2 ; +% 1.00D-11*0.800 : HOCH2CHO + OH = HOCH2CO3 ; +% J<15> : HOCH2CHO = HO2 + HCHO + HO2 + CO ; +% KAPHO2*0.44 : NO3CH2CO3 + HO2 = HCHO + NO2 + OH ; +% KAPHO2*0.15 : NO3CH2CO3 + HO2 = NO3CH2CO2H + O3 ; +% KAPHO2*0.41 : NO3CH2CO3 + HO2 = NO3CH2CO3H ; +% KAPNO : NO3CH2CO3 + NO = HCHO + NO2 + NO2 ; +% KFPAN : NO3CH2CO3 + NO2 = NO3CH2PAN ; +% KRO2NO3*1.74 : NO3CH2CO3 + NO3 = HCHO + NO2 + NO2 ; +% 1.00D-11*0.7*RO2 : NO3CH2CO3 = HCHO + NO2 ; +% 1.00D-11*0.3*RO2 : NO3CH2CO3 = NO3CH2CO2H ; +% KDEC : HCOCH2O = HCHO + CO + HO2 ; +% 4.5D-13 : HCOOH + OH = HO2 ; +% KAPHO2*0.44 : HOCH2CO3 + HO2 = HO2 + HCHO + OH ; +% KAPHO2*0.15 : HOCH2CO3 + HO2 = HOCH2CO2H + O3 ; +% KAPHO2*0.41 : HOCH2CO3 + HO2 = HOCH2CO3H ; +% KAPNO : HOCH2CO3 + NO = NO2 + HO2 + HCHO ; +% KFPAN : HOCH2CO3 + NO2 = PHAN ; +% KRO2NO3*1.74 : HOCH2CO3 + NO3 = NO2 + HO2 + HCHO ; +% 1.00D-11*0.7*RO2 : HOCH2CO3 = HCHO + HO2 ; +% 1.00D-11*0.3*RO2 : HOCH2CO3 = HOCH2CO2H ; +% J<31> : GLYOX = CO + CO + H2 ; +% J<33> : GLYOX = CO + CO + HO2 + HO2 ; +% J<32> : GLYOX = HCHO + CO ; +% KNO3AL : NO3 + GLYOX = HCOCO + HNO3 ; +% 3.1D-12*EXP(340/TEMP) : OH + GLYOX = HCOCO ; +% 1.68D-13 : NO3CH2CO2H + OH = HCHO + NO2 ; +% 3.63D-12 : NO3CH2CO3H + OH = NO3CH2CO3 ; +% J<41> : NO3CH2CO3H = HCHO + NO2 + OH ; +% 1.12D-14 : NO3CH2PAN + OH = HCHO + CO + NO2 + NO2 ; +% KBPAN : NO3CH2PAN = NO3CH2CO3 + NO2 ; +% 2.73D-12 : HOCH2CO2H + OH = HCHO + HO2 ; +% 6.19D-12 : HOCH2CO3H + OH = HOCH2CO3 ; +% J<41> : HOCH2CO3H = HCHO + HO2 + OH ; +% 1.12D-12 : PHAN + OH = HCHO + CO + NO2 ; +% KBPAN : PHAN = HOCH2CO3 + NO2 ; +% 7.00D11*EXP(-3160/TEMP)+5.00D-12*O2 : HCOCO = CO + CO + HO2 ; +% 5.00D-12*O2*3.2*(1-EXP(-550/TEMP)) : HCOCO = CO + OH ; +% 5.00D-12*O2*3.2*EXP(-550/TEMP) : HCOCO = HCOCO3 ; +% KAPHO2*0.15 : HCOCO3 + HO2 = HCOCO2H + O3 ; +% KAPHO2*0.41 : HCOCO3 + HO2 = HCOCO3H ; +% KAPHO2*0.44 : HCOCO3 + HO2 = HO2 + CO + OH ; +% KAPNO : HCOCO3 + NO = HO2 + CO + NO2 ; +% KFPAN : HCOCO3 + NO2 = HO2 + CO + NO3 ; +% KRO2NO3*1.74 : HCOCO3 + NO3 = HO2 + CO + NO2 ; +% 1.00D-11*0.7*RO2 : HCOCO3 = CO + HO2 ; +% 1.00D-11*0.3*RO2 : HCOCO3 = HCOCO2H ; +% J<34> : HCOCO2H = HO2 + HO2 + CO ; +% 1.23D-11 : OH + HCOCO2H = CO + HO2 ; +% J<41>+J<15> : HCOCO3H = HO2 + CO + OH ; +% 1.58D-11 : OH + HCOCO3H = HCOCO3 ; diff --git a/tests/model_tests/spec_model_kpp/spec_model_kpp.kpp b/tests/model_tests/spec_model_kpp/spec_model_kpp.kpp new file mode 100644 index 000000000..947126376 --- /dev/null +++ b/tests/model_tests/spec_model_kpp/spec_model_kpp.kpp @@ -0,0 +1,367 @@ +{******************************************************************** ; +* A citation to the MCM website and the relevant mechanism * ; +* construction protocols should be given in any publication using * ; +* information obtained from this source, using the following or * ; +* comparable wording: * ; +* The chemical mechanistic information was taken from the Master * ; +* Chemical Mechanism, MCM v3.3.1 (ref), via website: * ; +* http://mcm.york.ac.uk/. * ; +* The reference should be: (Jenkin et al., Atmos. Environ., 31, 81, * ; +* 1997; Saunders et al., Atmos. Chem. Phys., 3, 161, 2003), for * ; +* non aromatic schemes; (Jenkin et al., Atmos. Chem. Phys., 3, * ; +* 181, 2003; Bloss et al., Atmos. Chem. Phys., 5, 641, 2005), for * ; +* aromatic schemes; and (Jenkin et al., Atmos. Chem. Phys., 12, * ; +* 5275, 2012), for the beta-caryophyllene scheme. * ; +********************************************************************* ;} +#INLINE F90_GLOBAL + REAL(dp)::M, N2, O2, RO2, H2O + #ENDINLINE {above lines go into MODULE KPP_ROOT_Global} +#INCLUDE atoms +#DEFVAR + = IGNORE ; +HCHO = IGNORE ; +HCOCO = IGNORE ; +ETHENO3O = IGNORE ; +NO3CH2CO3 = IGNORE ; +O1D = IGNORE ; +NO3CH2CO3H = IGNORE ; +O3 = IGNORE ; +HO2NO2 = IGNORE ; +NO3 = IGNORE ; +N2O5 = IGNORE ; +H2O2 = IGNORE ; +NO = IGNORE ; +NA = IGNORE ; +HCOCO3H = IGNORE ; +ETHO2HNO3 = IGNORE ; +PHAN = IGNORE ; +NO3CH2CHO = IGNORE ; +HO2 = IGNORE ; +NO2 = IGNORE ; +HOCH2CHO = IGNORE ; +HSO3 = IGNORE ; +NO3CH2CO2H = IGNORE ; +CO = IGNORE ; +HOCH2CO3 = IGNORE ; +HOCH2CH2O2 = IGNORE ; +O = IGNORE ; +HNO3 = IGNORE ; +SO3 = IGNORE ; +SO2 = IGNORE ; +CH2OOA = IGNORE ; +HCOCO3 = IGNORE ; +HOCH2CH2O = IGNORE ; +C2H4 = IGNORE ; +HOCH2CO2H = IGNORE ; +ETHOHNO3 = IGNORE ; +NO3CH2PAN = IGNORE ; +HOCH2CO3H = IGNORE ; +OH = IGNORE ; +H2 = IGNORE ; +HONO = IGNORE ; +ETHGLY = IGNORE ; +CH2OO = IGNORE ; +HCOOH = IGNORE ; +HYETHO2H = IGNORE ; +HCOCO2H = IGNORE ; +GLYOX = IGNORE ; +ETHENO3O2 = IGNORE ; +HCOCH2O = IGNORE ; +SA = IGNORE ; +{ Peroxy radicals. } +{ WARNING: The following species do not have SMILES strings in the database. + If any of these are peroxy radicals the RO2 sum will be wrong. + } +#INLINE F90_RCONST + USE constants + !end of USE statements + ! + ! start of executable statements + RO2 = & + C(ind_ETHENO3O2) + C(ind_HOCH2CH2O2) + C(ind_NO3CH2CO3) + C(ind_HOCH2CO3) + & + C(ind_HCOCO3 ) + KRO2NO = 2.7D-12*EXP(360/TEMP) +KRO2HO2 = 2.91D-13*EXP(1300/TEMP) +KAPHO2 = 5.2D-13*EXP(980/TEMP) +KAPNO = 7.5D-12*EXP(290/TEMP) +KRO2NO3 = 2.3D-12 +KNO3AL = 1.44D-12*EXP(-1862/TEMP) +KDEC = 1.00D+06 +KROPRIM = 2.50D-14*EXP(-300/TEMP) +KROSEC = 2.50D-14*EXP(-300/TEMP) +KCH3O2 = 1.03D-13*EXP(365/TEMP) +K298CH3O2 = 3.5D-13 +K14ISOM1 = 3.00D7*EXP(-5300/TEMP) +KD0 = 1.10D-05*M*EXP(-10100/TEMP) +KDI = 1.90D17*EXP(-14100/TEMP) +KRD = KD0/KDI +FCD = 0.30 +NCD = 0.75-1.27*(LOG10(FCD)) +FD = 10**(LOG10(FCD)/(1+(LOG10(KRD)/NCD)**2)) +KBPAN = (KD0*KDI)*FD/(KD0+KDI) +KC0 = 3.28D-28*M*(TEMP/300)**-6.87 +KCI = 1.125D-11*(TEMP/300)**-1.105 +KRC = KC0/KCI +FCC = 0.30 +NC = 0.75-1.27*(LOG10(FCC)) +FC = 10**(LOG10(FCC)/(1+(LOG10(KRC)/NC)**2)) +KFPAN = (KC0*KCI)*FC/(KC0+KCI) +K10 = 1.0D-31*M*(TEMP/300)**-1.6 +K1I = 5.0D-11*(TEMP/300)**-0.3 +KR1 = K10/K1I +FC1 = 0.85 +NC1 = 0.75-1.27*(LOG10(FC1)) +F1 = 10**(LOG10(FC1)/(1+(LOG10(KR1)/NC1)**2)) +KMT01 = (K10*K1I)*F1/(K10+K1I) +K20 = 1.3D-31*M*(TEMP/300)**-1.5 +K2I = 2.3D-11*(TEMP/300)**0.24 +KR2 = K20/K2I +FC2 = 0.6 +NC2 = 0.75-1.27*(LOG10(FC2)) +F2 = 10**(LOG10(FC2)/(1+(LOG10(KR2)/NC2)**2)) +KMT02 = (K20*K2I)*F2/(K20+K2I) +K30 = 3.6D-30*M*(TEMP/300)**-4.1 +K3I = 1.9D-12*(TEMP/300)**0.2 +KR3 = K30/K3I +FC3 = 0.35 +NC3 = 0.75-1.27*(LOG10(FC3)) +F3 = 10**(LOG10(FC3)/(1+(LOG10(KR3)/NC3)**2)) +KMT03 = (K30*K3I)*F3/(K30+K3I) +K40 = 1.3D-3*M*(TEMP/300)**-3.5*EXP(-11000/TEMP) +K4I = 9.7D+14*(TEMP/300)**0.1*EXP(-11080/TEMP) +KR4 = K40/K4I +FC4 = 0.35 +NC4 = 0.75-1.27*(LOG10(FC4)) +F4 = 10**(LOG10(FC4)/(1+(LOG10(KR4)/NC4)**2)) +KMT04 = (K40*K4I)*F4/(K40+K4I) +KMT05 = 1.44D-13*(1+(M/4.2D+19)) +KMT06 = 1 + (1.40D-21*EXP(2200/TEMP)*H2O) +K70 = 7.4D-31*M*(TEMP/300)**-2.4 +K7I = 3.3D-11*(TEMP/300)**-0.3 +KR7 = K70/K7I +FC7 = 0.81 +NC7 = 0.75-1.27*(LOG10(FC7)) +F7 = 10**(LOG10(FC7)/(1+(LOG10(KR7)/NC7)**2)) +KMT07 = (K70*K7I)*F7/(K70+K7I) +K80 = 3.2D-30*M*(TEMP/300)**-4.5 +K8I = 3.0D-11 +KR8 = K80/K8I +FC8 = 0.41 +NC8 = 0.75-1.27*(LOG10(FC8)) +F8 = 10**(LOG10(FC8)/(1+(LOG10(KR8)/NC8)**2)) +KMT08 = (K80*K8I)*F8/(K80+K8I) +K90 = 1.4D-31*M*(TEMP/300)**-3.1 +K9I = 4.0D-12 +KR9 = K90/K9I +FC9 = 0.4 +NC9 = 0.75-1.27*(LOG10(FC9)) +F9 = 10**(LOG10(FC9)/(1+(LOG10(KR9)/NC9)**2)) +KMT09 = (K90*K9I)*F9/(K90+K9I) +K100 = 4.10D-05*M*EXP(-10650/TEMP) +K10I = 6.0D+15*EXP(-11170/TEMP) +KR10 = K100/K10I +FC10 = 0.4 +NC10 = 0.75-1.27*(LOG10(FC10)) +F10 = 10**(LOG10(FC10)/(1+(LOG10(KR10)/NC10)**2)) +KMT10 = (K100*K10I)*F10/(K100+K10I) +K1 = 2.40D-14*EXP(460/TEMP) +K3 = 6.50D-34*EXP(1335/TEMP) +K4 = 2.70D-17*EXP(2199/TEMP) +K2 = (K3*M)/(1+(K3*M/K4)) +KMT11 = K1 + K2 +K120 = 2.5D-31*M*(TEMP/300)**-2.6 +K12I = 2.0D-12 +KR12 = K120/K12I +FC12 = 0.53 +NC12 = 0.75-1.27*(LOG10(FC12)) +F12 = 10**(LOG10(FC12)/(1.0+(LOG10(KR12)/NC12)**2)) +KMT12 = (K120*K12I*F12)/(K120+K12I) +K130 = 2.5D-30*M*(TEMP/300)**-5.5 +K13I = 1.8D-11 +KR13 = K130/K13I +FC13 = 0.36 +NC13 = 0.75-1.27*(LOG10(FC13)) +F13 = 10**(LOG10(FC13)/(1+(LOG10(KR13)/NC13)**2)) +KMT13 = (K130*K13I)*F13/(K130+K13I) +K140 = 9.0D-5*EXP(-9690/TEMP)*M +K14I = 1.1D+16*EXP(-10560/TEMP) +KR14 = K140/K14I +FC14 = 0.36 +NC14 = 0.75-1.27*(LOG10(FC14)) +F14 = 10**(LOG10(FC14)/(1+(LOG10(KR14)/NC14)**2)) +KMT14 = (K140*K14I)*F14/(K140+K14I) +K150 = 8.6D-29*M*(TEMP/300)**-3.1 +K15I = 9.0D-12*(TEMP/300)**-0.85 +KR15 = K150/K15I +FC15 = 0.48 +NC15 = 0.75-1.27*(LOG10(FC15)) +F15 = 10**(LOG10(FC15)/(1+(LOG10(KR15)/NC15)**2)) +KMT15 = (K150*K15I)*F15/(K150+K15I) +K160 = 8D-27*M*(TEMP/300)**-3.5 +K16I = 3.0D-11*(TEMP/300)**-1 +KR16 = K160/K16I +FC16 = 0.5 +NC16 = 0.75-1.27*(LOG10(FC16)) +F16 = 10**(LOG10(FC16)/(1+(LOG10(KR16)/NC16)**2)) +KMT16 = (K160*K16I)*F16/(K160+K16I) +K170 = 5.0D-30*M*(TEMP/300)**-1.5 +K17I = 1.0D-12 +KR17 = K170/K17I +FC17 = 0.17*EXP(-51/TEMP)+EXP(-TEMP/204) +NC17 = 0.75-1.27*(LOG10(FC17)) +F17 = 10**(LOG10(FC17)/(1.0+(LOG10(KR17)/NC17)**2)) +KMT17 = (K170*K17I*F17)/(K170+K17I) +KMT18 = 9.5D-39*O2*EXP(5270/TEMP)/(1+7.5D-29*O2*EXP(5610/TEMP)) +KPPN0 = 1.7D-03*EXP(-11280/TEMP)*M +KPPNI = 8.3D+16*EXP(-13940/TEMP) +KRPPN = KPPN0/KPPNI +FCPPN = 0.36 +NCPPN = 0.75-1.27*(LOG10(FCPPN)) +FPPN = 10**(LOG10(FCPPN)/(1+(LOG10(KRPPN)/NCPPN)**2)) +KBPPN = (KPPN0*KPPNI)*FPPN/(KPPN0+KPPNI) +KRO2 = 1.26D-12*RO2 +CALL mcm_constants(time, temp, M, N2, O2, RO2, H2O) + #ENDINLINE +{above lines go into the SUBROUTINES UPDATE_RCONST and UPDATE_PHOTO} +#EQUATIONS +{1.} O = O3 : 5.6D-34*N2*(TEMP/300)**-2.6*O2+6.0D-34*O2*(TEMP/300)**-2.6*O2 ; +{2.} O + O3 = : 8.0D-12*EXP(-2060/TEMP) ; +{3.} O + NO = NO2 : KMT01 ; +{4.} O + NO2 = NO : 5.5D-12*EXP(188/TEMP) ; +{5.} O + NO2 = NO3 : KMT02 ; +{6.} O1D = O : 3.2D-11*EXP(67/TEMP)*O2+2.0D-11*EXP(130/TEMP)*N2 ; +{7.} NO + O3 = NO2 : 1.4D-12*EXP(-1310/TEMP) ; +{8.} NO2 + O3 = NO3 : 1.4D-13*EXP(-2470/TEMP) ; +{9.} NO + NO = NO2 + NO2 : 3.3D-39*EXP(530/TEMP)*O2 ; +{10.} NO + NO3 = NO2 + NO2 : 1.8D-11*EXP(110/TEMP) ; +{11.} NO2 + NO3 = NO + NO2 : 4.50D-14*EXP(-1260/TEMP) ; +{12.} NO2 + NO3 = N2O5 : KMT03 ; +{13.} O1D = OH + OH : 2.14D-10*H2O ; +{14.} OH + O3 = HO2 : 1.70D-12*EXP(-940/TEMP) ; +{15.} OH + H2 = HO2 : 7.7D-12*EXP(-2100/TEMP) ; +{16.} OH + CO = HO2 : KMT05 ; +{17.} OH + H2O2 = HO2 : 2.9D-12*EXP(-160/TEMP) ; +{18.} HO2 + O3 = OH : 2.03D-16*(TEMP/300)**4.57*EXP(693/TEMP) ; +{19.} OH + HO2 = : 4.8D-11*EXP(250/TEMP) ; +{20.} HO2 + HO2 = H2O2 : 2.20D-13*KMT06*EXP(600/TEMP)+1.90D-33*M*KMT06*EXP(980/TEMP) ; +{21.} OH + NO = HONO : KMT07 ; +{22.} OH + NO2 = HNO3 : KMT08 ; +{23.} OH + NO3 = HO2 + NO2 : 2.0D-11 ; +{24.} HO2 + NO = OH + NO2 : 3.45D-12*EXP(270/TEMP) ; +{25.} HO2 + NO2 = HO2NO2 : KMT09 ; +{26.} OH + HO2NO2 = NO2 : 3.2D-13*EXP(690/TEMP)*1.0 ; +{27.} HO2 + NO3 = OH + NO2 : 4.0D-12 ; +{28.} OH + HONO = NO2 : 2.5D-12*EXP(260/TEMP) ; +{29.} OH + HNO3 = NO3 : KMT11 ; +{30.} O + SO2 = SO3 : 4.0D-32*EXP(-1000/TEMP)*M ; +{31.} OH + SO2 = HSO3 : KMT12 ; +{32.} HSO3 = HO2 + SO3 : 1.3D-12*EXP(-330/TEMP)*O2 ; +{33.} HNO3 = NA : 6.00D-06 ; +{34.} N2O5 = NA + NA : 4.00D-04 ; +{35.} SO3 = SA : 1.20D-15*H2O ; +{36.} O3 = O1D : J(1) ; +{37.} O3 = O : J(2) ; +{38.} H2O2 = OH + OH : J(3) ; +{39.} NO2 = NO + O : J(4) ; +{40.} NO3 = NO : J(5) ; +{41.} NO3 = NO2 + O : J(6) ; +{42.} HONO = OH + NO : J(7) ; +{43.} HNO3 = OH + NO2 : J(8) ; +{44.} N2O5 = NO2 + NO3 : KMT04 ; +{45.} HO2NO2 = HO2 + NO2 : KMT10 ; +{46.} C2H4 + NO3 = ETHENO3O2 : 3.3D-12*EXP(-2880/TEMP) ; +{47.} C2H4 + O3 = HCHO + CH2OOA : 9.1D-15*EXP(-2580/TEMP) ; +{48.} C2H4 + OH = HOCH2CH2O2 : KMT15 ; +{49.} ETHENO3O2 + HO2 = ETHO2HNO3 : KRO2HO2*0.387 ; +{50.} ETHENO3O2 + NO = ETHENO3O + NO2 : KRO2NO ; +{51.} ETHENO3O2 + NO3 = ETHENO3O + NO2 : KRO2NO3 ; +{52.} ETHENO3O2 = ETHENO3O : 6.00D-13*0.6*RO2 ; +{53.} ETHENO3O2 = ETHOHNO3 : 6.00D-13*0.2*RO2 ; +{54.} ETHENO3O2 = NO3CH2CHO : 6.00D-13*0.2*RO2 ; +{55.} HCHO = CO + HO2 + HO2 : J(11) ; +{56.} HCHO = H2 + CO : J(12) ; +{57.} NO3 + HCHO = HNO3 + CO + HO2 : 5.5D-16 ; +{58.} OH + HCHO = HO2 + CO : 5.4D-12*EXP(135/TEMP) ; +{59.} CH2OOA = CH2OO : KDEC*0.37 ; +{60.} CH2OOA = CO : KDEC*0.50 ; +{61.} CH2OOA = HO2 + CO + OH : KDEC*0.13 ; +{62.} HOCH2CH2O2 + HO2 = HYETHO2H : 1.53D-13*EXP(1300/TEMP) ; +{63.} HOCH2CH2O2 + NO = ETHOHNO3 : KRO2NO*0.005 ; +{64.} HOCH2CH2O2 + NO = HOCH2CH2O + NO2 : KRO2NO*0.995 ; +{65.} HOCH2CH2O2 + NO3 = HOCH2CH2O + NO2 : KRO2NO3 ; +{66.} HOCH2CH2O2 = ETHGLY : 2*(KCH3O2*7.8D-14*EXP(1000/TEMP))**0.5*RO2*0.2 ; +{67.} HOCH2CH2O2 = HOCH2CH2O : 2*(KCH3O2*7.8D-14*EXP(1000/TEMP))**0.5*RO2*0.6 ; +{68.} HOCH2CH2O2 = HOCH2CHO : 2*(KCH3O2*7.8D-14*EXP(1000/TEMP))**0.5*RO2*0.2 ; +{69.} ETHO2HNO3 + OH = ETHENO3O2 : 1.90D-12*EXP(190/TEMP) ; +{70.} ETHO2HNO3 + OH = NO3CH2CHO + OH : 1.62D-12 ; +{71.} ETHO2HNO3 = ETHENO3O + OH : J(41) ; +{72.} ETHENO3O = NO2 + HCHO + HCHO : 7.00D+03 ; +{73.} ETHENO3O = NO3CH2CHO + HO2 : KROPRIM*O2 ; +{74.} ETHOHNO3 + OH = HOCH2CHO + NO2 : 8.40D-13 ; +{75.} NO3CH2CHO + NO3 = NO3CH2CO3 + HNO3 : KNO3AL ; +{76.} NO3CH2CHO + OH = NO3CH2CO3 : 3.40D-12 ; +{77.} NO3CH2CHO = NO2 + HCOCH2O : J(56)*4.3 ; +{78.} CH2OO + CO = HCHO : 1.20D-15 ; +{79.} CH2OO + NO = HCHO + NO2 : 1.00D-14 ; +{80.} CH2OO + NO2 = HCHO + NO3 : 1.00D-15 ; +{81.} CH2OO + SO2 = HCHO + SO3 : 7.00D-14 ; +{82.} CH2OO = HCHO + H2O2 : 6.00D-18*H2O ; +{83.} CH2OO = HCOOH : 1.00D-17*H2O ; +{84.} HYETHO2H + OH = HOCH2CH2O2 : 1.90D-12*EXP(190/TEMP) ; +{85.} HYETHO2H + OH = HOCH2CHO + OH : 1.38D-11 ; +{86.} HYETHO2H = HOCH2CH2O + OH : J(41) ; +{87.} HOCH2CH2O = HO2 + HCHO + HCHO : 9.50D+13*EXP(-5988/TEMP) ; +{88.} HOCH2CH2O = HO2 + HOCH2CHO : KROPRIM*O2 ; +{89.} ETHGLY + OH = HOCH2CHO + HO2 : 1.45D-11 ; +{90.} HOCH2CHO + NO3 = HOCH2CO3 + HNO3 : KNO3AL ; +{91.} HOCH2CHO + OH = GLYOX + HO2 : 1.00D-11*0.200 ; +{92.} HOCH2CHO + OH = HOCH2CO3 : 1.00D-11*0.800 ; +{93.} HOCH2CHO = HO2 + HCHO + HO2 + CO : J(15) ; +{94.} NO3CH2CO3 + HO2 = HCHO + NO2 + OH : KAPHO2*0.44 ; +{95.} NO3CH2CO3 + HO2 = NO3CH2CO2H + O3 : KAPHO2*0.15 ; +{96.} NO3CH2CO3 + HO2 = NO3CH2CO3H : KAPHO2*0.41 ; +{97.} NO3CH2CO3 + NO = HCHO + NO2 + NO2 : KAPNO ; +{98.} NO3CH2CO3 + NO2 = NO3CH2PAN : KFPAN ; +{99.} NO3CH2CO3 + NO3 = HCHO + NO2 + NO2 : KRO2NO3*1.74 ; +{100.} NO3CH2CO3 = HCHO + NO2 : 1.00D-11*0.7*RO2 ; +{101.} NO3CH2CO3 = NO3CH2CO2H : 1.00D-11*0.3*RO2 ; +{102.} HCOCH2O = HCHO + CO + HO2 : KDEC ; +{103.} HCOOH + OH = HO2 : 4.5D-13 ; +{104.} HOCH2CO3 + HO2 = HO2 + HCHO + OH : KAPHO2*0.44 ; +{105.} HOCH2CO3 + HO2 = HOCH2CO2H + O3 : KAPHO2*0.15 ; +{106.} HOCH2CO3 + HO2 = HOCH2CO3H : KAPHO2*0.41 ; +{107.} HOCH2CO3 + NO = NO2 + HO2 + HCHO : KAPNO ; +{108.} HOCH2CO3 + NO2 = PHAN : KFPAN ; +{109.} HOCH2CO3 + NO3 = NO2 + HO2 + HCHO : KRO2NO3*1.74 ; +{110.} HOCH2CO3 = HCHO + HO2 : 1.00D-11*0.7*RO2 ; +{111.} HOCH2CO3 = HOCH2CO2H : 1.00D-11*0.3*RO2 ; +{112.} GLYOX = CO + CO + H2 : J(31) ; +{113.} GLYOX = CO + CO + HO2 + HO2 : J(33) ; +{114.} GLYOX = HCHO + CO : J(32) ; +{115.} NO3 + GLYOX = HCOCO + HNO3 : KNO3AL ; +{116.} OH + GLYOX = HCOCO : 3.1D-12*EXP(340/TEMP) ; +{117.} NO3CH2CO2H + OH = HCHO + NO2 : 1.68D-13 ; +{118.} NO3CH2CO3H + OH = NO3CH2CO3 : 3.63D-12 ; +{119.} NO3CH2CO3H = HCHO + NO2 + OH : J(41) ; +{120.} NO3CH2PAN + OH = HCHO + CO + NO2 + NO2 : 1.12D-14 ; +{121.} NO3CH2PAN = NO3CH2CO3 + NO2 : KBPAN ; +{122.} HOCH2CO2H + OH = HCHO + HO2 : 2.73D-12 ; +{123.} HOCH2CO3H + OH = HOCH2CO3 : 6.19D-12 ; +{124.} HOCH2CO3H = HCHO + HO2 + OH : J(41) ; +{125.} PHAN + OH = HCHO + CO + NO2 : 1.12D-12 ; +{126.} PHAN = HOCH2CO3 + NO2 : KBPAN ; +{127.} HCOCO = CO + CO + HO2 : 7.00D11*EXP(-3160/TEMP)+5.00D-12*O2 ; +{128.} HCOCO = CO + OH : 5.00D-12*O2*3.2*(1-EXP(-550/TEMP)) ; +{129.} HCOCO = HCOCO3 : 5.00D-12*O2*3.2*EXP(-550/TEMP) ; +{130.} HCOCO3 + HO2 = HCOCO2H + O3 : KAPHO2*0.15 ; +{131.} HCOCO3 + HO2 = HCOCO3H : KAPHO2*0.41 ; +{132.} HCOCO3 + HO2 = HO2 + CO + OH : KAPHO2*0.44 ; +{133.} HCOCO3 + NO = HO2 + CO + NO2 : KAPNO ; +{134.} HCOCO3 + NO2 = HO2 + CO + NO3 : KFPAN ; +{135.} HCOCO3 + NO3 = HO2 + CO + NO2 : KRO2NO3*1.74 ; +{136.} HCOCO3 = CO + HO2 : 1.00D-11*0.7*RO2 ; +{137.} HCOCO3 = HCOCO2H : 1.00D-11*0.3*RO2 ; +{138.} HCOCO2H = HO2 + HO2 + CO : J(34) ; +{139.} OH + HCOCO2H = CO + HO2 : 1.23D-11 ; +{140.} HCOCO3H = HO2 + CO + OH : J(41)+J(15) ; +{141.} OH + HCOCO3H = HCOCO3 : 1.58D-11 ; diff --git a/tests/model_tests/spec_model_kpp/spec_model_kpp.out.cmp b/tests/model_tests/spec_model_kpp/spec_model_kpp.out.cmp new file mode 100644 index 000000000..e3f261c74 --- /dev/null +++ b/tests/model_tests/spec_model_kpp/spec_model_kpp.out.cmp @@ -0,0 +1,211 @@ +AtChem2 v1.3-dev + +------------- + Directories +------------- + Model directory is: model + Output directory is: tests/model_tests/spec_model_kpp/output + Reaction Rates directory is: tests/model_tests/spec_model_kpp/output/reactionRates + Configuration directory is: tests/model_tests/spec_model_kpp/configuration + Constraints directory is: tests/model_tests/spec_model_kpp/constraints + Environment Constraints directory is: tests/model_tests/spec_model_kpp/constraints/environment + Photolysis Constraints directory is: tests/model_tests/spec_model_kpp/constraints/photolysis + Species Constraints directory is: tests/model_tests/spec_model_kpp/constraints/species + MCM directory is: mcm + Shared library is: tests/model_tests/spec_model_kpp/configuration/mechanism.so + +----------------------- + Species and reactions +----------------------- + Number of Species = 49 + Number of Reactions = 141 + + Size of lhs = 225 + Size of rhs = 247 + + Reading reactants (lhs) from mechanism.reac... + Reading products (rhs) from mechanism.prod... + Finished reading lhs and rhs data. + + Reading species names from mechanism.species... + Finished reading species names. + + Reading initial concentrations... + 1 CO 4.800E+12 + ... + 5 C2H4 2.760E+09 + Finished reading initial concentrations. + +---------------------------------------- + Species requiring detailed rate output +---------------------------------------- + Reading which species require detailed rate output... + 1 OH + 2 HO2 + Finished reading which species require detailed rate output. + Species requiring detailed rate output (number of species found): 2 + + Reading ro2 numbers from mechanism.ro2... + Finished reading ro2 numbers. + Reading solver parameters from file... + ------------------ + Solver parameters: + ------------------ + atol: 1.000E-03 + rtol: 1.000E-04 + deltaMain: 1.000E-04 + lookBack: 100 + maxStep: 1.000E+02 + preconBandUpper: 750 + preconBandLower: 750 + solverType: SPGMR + Banded Preconditioner + ------------------ + + Finished reading solver parameters from file. + + Reading model parameters from file... + ----------------- + Model parameters: + ----------------- + number of steps: 30 + step size: 0.900E+03 + species interpolation method: piecewise linear + conditions interpolation method: piecewise linear + rates output step size, ROPA/RODA: 3600 + model start time: 23400 + jacobian output step size: 0 + latitude: -0.733E+01 + longitude: -0.724E+02 + reaction rates output step size: 1800 + day/month/year: 9/11/2008 + ----------------- + + Finished reading model parameters from file. + +--------------------- + Species of Interest +--------------------- + Reading concentration output from file... + Finished reading concentration output from file. + Output required for concentration of 12 species: + 1 CO + ... + 12 HCOCO3 + +------------ + Photolysis +------------ + Reading photolysis numbers from file... + 1 + ... + 61 + Finished reading photolysis numbers. + Number of photolysis numbers: 35 + Looking for photolysis constants file... + Checking that photolysis constants exist in file... + Photolysis constants file is empty. + No photolysis constants applied, so trying constrained photolysis rates file... + Looking for photolysis constraints file... + Checking that photolysis constraints exist in file... + Photolysis constraint file is empty, so all photolysis rates will be calculated. + Reading all photolysis rates from file... + 1 6.073E-05 1.743E+00 4.740E-01 J1 1.000E+00 + ... + 61 7.537E-04 4.990E-01 2.660E-01 J61 1.000E+00 + Finished reading all photolysis rates. + Number of all photolysis rates: 35 + + +----------------------- + Environment variables +----------------------- + Reading environment variables... + Number of environment variables: 11 + 1 TEMP 291.45 + 2 PRESS 950.2 + 3 RH 67.4 + 4 H2O CALC + 5 DEC CALC + 6 BLHEIGHT NOTUSED + 7 DILUTE NOTUSED + 8 JFAC NOTUSED + 9 ROOF OPEN + 10 ASA NOTUSED + Finished reading environment variables. + + Checking for constrained environment variables... + Finished checking for constrained environment variables. + + +------------- + Constraints +------------- + Counting the variable-concentration species to be constrained (in file speciesConstrained.config)... + Finished counting the names of variable-concentration constrained species. + Number of names of variable-concentration constrained species: 0 + Counting the fixed-concentration species to be constrained (in file speciesConstant.config)... + Finished counting the names of fixed-concentration constrained species. + Number of names of fixed-concentration constrained species: 0 + Setting size of constraint arrays, n = 0 + Skipped reading the names of variable-concentration constrained species + Reading concentration data for variable-concentration constrained species... + Reading in the names and concentration of the fixed constrained species (in file speciesConstant.config)... + Finished reading in the names and concentration of fixed-concentration species. + Finished reading constrained species. + Initialising concentrations of constrained species... + Finished initialising concentrations of constrained species. + +--------------- + Problem stats +--------------- + neq = 49 + numberOfConstrainedSpecies = 0 + t0 = 2.340E+04 + + setting maxnumsteps ier = 0 + setting maxstep ier = 0 + +----------- + Model run +----------- + time = 24300 + time = 25200 + time = 26100 + time = 27000 + time = 27900 + time = 28800 + time = 29700 + time = 30600 + time = 31500 + time = 32400 + time = 33300 + time = 34200 + time = 35100 + time = 36000 + time = 36900 + time = 37800 + time = 38700 + time = 39600 + time = 40500 + time = 41400 + time = 42300 + time = 43200 + time = 44100 + time = 45000 + time = 45900 + time = 46800 + time = 47700 + time = 48600 + time = 49500 + time = 50400 + +------------------ + Final statistics +------------------ + No. steps = 536 No. f-s = 663 No. J-s = 1001 No. LU-s = 117 + No. nonlinear iterations = 662 + No. nonlinear convergence failures = 0 + No. error test failures = 32 + + Runtime = 0 + Deallocating memory. From 5c59051f38077403ae7b4d72c20b4cd886a74674 Mon Sep 17 00:00:00 2001 From: rs028 Date: Mon, 25 Sep 2023 19:20:03 +0100 Subject: [PATCH 20/24] cmp files for the new model tests --- .../spec_model_1/configuration/.gitignore | 2 - .../configuration/mechanism.prod.cmp | 257 ++++++++++++++++++ .../configuration/mechanism.reac.cmp | 232 ++++++++++++++++ .../configuration/mechanism.ro2.cmp | 6 + .../configuration/mechanism.species.cmp | 49 ++++ .../spec_model_1/output/.gitignore | 2 - .../spec_model_kpp/configuration/.gitignore | 2 - .../configuration/mechanism.prod.cmp | 248 +++++++++++++++++ .../configuration/mechanism.reac.cmp | 226 +++++++++++++++ .../configuration/mechanism.ro2.cmp | 6 + .../configuration/mechanism.species.cmp | 49 ++++ .../spec_model_kpp/output/.gitignore | 2 - 12 files changed, 1073 insertions(+), 8 deletions(-) delete mode 100644 tests/model_tests/spec_model_1/configuration/.gitignore create mode 100644 tests/model_tests/spec_model_1/configuration/mechanism.prod.cmp create mode 100644 tests/model_tests/spec_model_1/configuration/mechanism.reac.cmp create mode 100644 tests/model_tests/spec_model_1/configuration/mechanism.ro2.cmp create mode 100644 tests/model_tests/spec_model_1/configuration/mechanism.species.cmp delete mode 100644 tests/model_tests/spec_model_1/output/.gitignore delete mode 100644 tests/model_tests/spec_model_kpp/configuration/.gitignore create mode 100644 tests/model_tests/spec_model_kpp/configuration/mechanism.prod.cmp create mode 100644 tests/model_tests/spec_model_kpp/configuration/mechanism.reac.cmp create mode 100644 tests/model_tests/spec_model_kpp/configuration/mechanism.ro2.cmp create mode 100644 tests/model_tests/spec_model_kpp/configuration/mechanism.species.cmp delete mode 100644 tests/model_tests/spec_model_kpp/output/.gitignore diff --git a/tests/model_tests/spec_model_1/configuration/.gitignore b/tests/model_tests/spec_model_1/configuration/.gitignore deleted file mode 100644 index 1830d04bb..000000000 --- a/tests/model_tests/spec_model_1/configuration/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Ignore auto-generated mechanism files in this directory -mechanism.* diff --git a/tests/model_tests/spec_model_1/configuration/mechanism.prod.cmp b/tests/model_tests/spec_model_1/configuration/mechanism.prod.cmp new file mode 100644 index 000000000..4fb9ec8f4 --- /dev/null +++ b/tests/model_tests/spec_model_1/configuration/mechanism.prod.cmp @@ -0,0 +1,257 @@ +49 146 140 numberOfSpecies numberOfReactions numberOfGenericComplex +1 2 +2 2 +4 4 +5 3 +6 5 +7 1 +8 1 +9 4 +10 5 +11 4 +11 4 +12 4 +12 4 +13 3 +13 4 +14 7 +15 8 +15 8 +16 9 +17 9 +18 9 +19 9 +20 8 +22 12 +23 12 +24 13 +25 14 +26 9 +26 4 +27 8 +27 4 +28 15 +29 4 +30 8 +30 4 +31 4 +32 5 +33 17 +34 18 +35 9 +35 17 +36 19 +37 19 +37 19 +38 20 +39 6 +40 1 +41 8 +41 8 +42 3 +42 1 +43 3 +44 4 +44 1 +45 8 +45 3 +46 8 +46 4 +47 4 +47 5 +48 9 +48 4 +49 22 +50 23 +50 24 +51 25 +52 26 +53 27 +53 4 +54 27 +54 4 +55 27 +56 28 +57 29 +58 11 +58 9 +58 9 +59 10 +59 11 +60 14 +60 11 +60 9 +61 9 +61 11 +62 30 +63 11 +64 9 +64 11 +64 8 +65 31 +66 28 +67 32 +67 4 +68 32 +68 4 +69 33 +70 32 +71 34 +72 22 +73 29 +73 8 +74 27 +74 8 +75 4 +75 23 +75 23 +76 29 +76 9 +77 34 +77 4 +78 35 +78 14 +79 35 +80 4 +80 36 +81 23 +82 23 +82 4 +83 23 +83 5 +84 23 +84 17 +85 23 +85 12 +86 37 +87 25 +88 34 +88 8 +89 32 +89 8 +90 9 +90 23 +90 23 +91 9 +91 34 +92 34 +92 9 +93 38 +93 14 +94 39 +94 9 +95 38 +96 9 +96 23 +96 9 +96 11 +97 23 +97 4 +97 8 +98 40 +98 2 +99 41 +100 23 +100 4 +100 4 +101 42 +102 23 +102 4 +102 4 +103 23 +103 4 +104 40 +105 23 +105 11 +105 9 +106 9 +107 9 +107 23 +107 8 +108 43 +108 2 +109 44 +110 4 +110 9 +110 23 +111 45 +112 4 +112 9 +112 23 +113 23 +113 9 +114 43 +115 11 +115 11 +115 10 +116 11 +116 11 +116 9 +116 9 +117 23 +117 11 +118 46 +118 14 +119 46 +120 23 +120 4 +121 35 +122 23 +122 4 +122 8 +123 23 +123 11 +123 4 +123 4 +124 35 +124 4 +125 23 +125 9 +126 38 +127 23 +127 9 +127 8 +128 23 +128 11 +128 4 +129 38 +129 4 +130 11 +130 11 +130 9 +131 11 +131 11 +131 9 +132 11 +132 8 +133 47 +134 48 +134 2 +135 49 +136 9 +136 11 +136 8 +137 9 +137 11 +137 4 +138 9 +138 11 +138 5 +139 9 +139 11 +139 4 +140 11 +140 9 +141 48 +142 9 +142 9 +142 11 +143 11 +143 9 +144 9 +144 11 +144 8 +145 9 +145 11 +145 8 +146 47 diff --git a/tests/model_tests/spec_model_1/configuration/mechanism.reac.cmp b/tests/model_tests/spec_model_1/configuration/mechanism.reac.cmp new file mode 100644 index 000000000..44fe674e6 --- /dev/null +++ b/tests/model_tests/spec_model_1/configuration/mechanism.reac.cmp @@ -0,0 +1,232 @@ +49 146 140 numberOfSpecies numberOfReactions numberOfGenericComplex +1 1 +2 1 +3 1 +3 2 +4 1 +4 3 +5 1 +5 4 +6 1 +6 4 +7 6 +8 6 +9 3 +9 2 +10 4 +10 2 +11 3 +11 3 +12 3 +12 5 +13 4 +13 5 +14 4 +14 5 +15 6 +16 8 +16 2 +17 8 +17 10 +18 8 +18 11 +19 8 +19 12 +20 9 +20 2 +21 8 +21 9 +22 9 +22 9 +23 9 +23 9 +24 8 +24 3 +25 8 +25 4 +26 8 +26 5 +27 9 +27 3 +28 9 +28 4 +29 8 +29 15 +30 9 +30 5 +31 8 +31 13 +32 8 +32 14 +33 1 +33 16 +34 8 +34 16 +35 18 +36 14 +37 7 +38 17 +39 2 +40 2 +41 12 +42 4 +43 5 +44 5 +45 13 +46 14 +47 7 +48 15 +49 21 +49 5 +50 21 +50 2 +51 21 +51 8 +52 22 +52 9 +53 22 +53 3 +54 22 +54 5 +55 22 +56 22 +57 22 +58 23 +59 23 +60 5 +60 23 +61 8 +61 23 +62 24 +63 24 +64 24 +65 25 +65 9 +66 25 +66 3 +67 25 +67 3 +68 25 +68 5 +69 25 +70 25 +71 25 +72 26 +72 8 +73 26 +73 8 +74 26 +75 27 +76 27 +77 28 +77 8 +78 29 +78 5 +79 29 +79 8 +80 29 +81 30 +81 11 +82 30 +82 3 +83 30 +83 4 +84 30 +84 16 +85 30 +86 30 +87 31 +87 8 +88 31 +88 8 +89 31 +90 32 +91 32 +92 33 +92 8 +93 34 +93 5 +94 34 +94 8 +95 34 +95 8 +96 34 +97 35 +97 9 +98 35 +98 9 +99 35 +99 9 +100 35 +100 3 +101 35 +101 4 +102 35 +102 5 +103 35 +104 35 +105 36 +106 37 +106 8 +107 38 +107 9 +108 38 +108 9 +109 38 +109 9 +110 38 +110 3 +111 38 +111 4 +112 38 +112 5 +113 38 +114 38 +115 39 +116 39 +117 39 +118 5 +118 39 +119 8 +119 39 +120 40 +120 8 +121 41 +121 8 +122 41 +123 42 +123 8 +124 42 +125 43 +125 8 +126 44 +126 8 +127 44 +128 45 +128 8 +129 45 +130 46 +131 46 +132 46 +133 46 +134 47 +134 9 +135 47 +135 9 +136 47 +136 9 +137 47 +137 3 +138 47 +138 4 +139 47 +139 5 +140 47 +141 47 +142 48 +143 8 +143 48 +144 49 +145 49 +146 8 +146 49 diff --git a/tests/model_tests/spec_model_1/configuration/mechanism.ro2.cmp b/tests/model_tests/spec_model_1/configuration/mechanism.ro2.cmp new file mode 100644 index 000000000..fcea44b81 --- /dev/null +++ b/tests/model_tests/spec_model_1/configuration/mechanism.ro2.cmp @@ -0,0 +1,6 @@ +! Note that this file is automatically generated by build/mech_converter.py -- Any manual edits to this file will be overwritten when calling build/mech_converter.py +22 !ETHENO3O2 +25 !HOCH2CH2O2 +35 !NO3CH2CO3 +38 !HOCH2CO3 +47 !HCOCO3 diff --git a/tests/model_tests/spec_model_1/configuration/mechanism.species.cmp b/tests/model_tests/spec_model_1/configuration/mechanism.species.cmp new file mode 100644 index 000000000..41001fba0 --- /dev/null +++ b/tests/model_tests/spec_model_1/configuration/mechanism.species.cmp @@ -0,0 +1,49 @@ +1 O +2 O3 +3 NO +4 NO2 +5 NO3 +6 O1D +7 N2O5 +8 OH +9 HO2 +10 H2 +11 CO +12 H2O2 +13 HONO +14 HNO3 +15 HO2NO2 +16 SO2 +17 SO3 +18 HSO3 +19 NA +20 SA +21 C2H4 +22 ETHENO3O2 +23 HCHO +24 CH2OOA +25 HOCH2CH2O2 +26 ETHO2HNO3 +27 ETHENO3O +28 ETHOHNO3 +29 NO3CH2CHO +30 CH2OO +31 HYETHO2H +32 HOCH2CH2O +33 ETHGLY +34 HOCH2CHO +35 NO3CH2CO3 +36 HCOCH2O +37 HCOOH +38 HOCH2CO3 +39 GLYOX +40 NO3CH2CO2H +41 NO3CH2CO3H +42 NO3CH2PAN +43 HOCH2CO2H +44 HOCH2CO3H +45 PHAN +46 HCOCO +47 HCOCO3 +48 HCOCO2H +49 HCOCO3H diff --git a/tests/model_tests/spec_model_1/output/.gitignore b/tests/model_tests/spec_model_1/output/.gitignore deleted file mode 100644 index a73731eaa..000000000 --- a/tests/model_tests/spec_model_1/output/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Ignore output files in this directory -*.output diff --git a/tests/model_tests/spec_model_kpp/configuration/.gitignore b/tests/model_tests/spec_model_kpp/configuration/.gitignore deleted file mode 100644 index 1830d04bb..000000000 --- a/tests/model_tests/spec_model_kpp/configuration/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Ignore auto-generated mechanism files in this directory -mechanism.* diff --git a/tests/model_tests/spec_model_kpp/configuration/mechanism.prod.cmp b/tests/model_tests/spec_model_kpp/configuration/mechanism.prod.cmp new file mode 100644 index 000000000..de2398aa3 --- /dev/null +++ b/tests/model_tests/spec_model_kpp/configuration/mechanism.prod.cmp @@ -0,0 +1,248 @@ +49 141 140 numberOfSpecies numberOfReactions numberOfGenericComplex +1 2 +3 4 +4 3 +5 5 +6 1 +7 4 +8 5 +9 4 +9 4 +10 4 +10 4 +11 3 +11 4 +12 7 +13 8 +13 8 +14 9 +15 9 +16 9 +17 9 +18 8 +20 12 +21 13 +22 14 +23 9 +23 4 +24 8 +24 4 +25 15 +26 4 +27 8 +27 4 +28 4 +29 5 +30 17 +31 18 +32 9 +32 17 +33 19 +34 19 +34 19 +35 20 +36 6 +37 1 +38 8 +38 8 +39 3 +39 1 +40 3 +41 4 +41 1 +42 8 +42 3 +43 8 +43 4 +44 4 +44 5 +45 9 +45 4 +46 22 +47 23 +47 24 +48 25 +49 26 +50 27 +50 4 +51 27 +51 4 +52 27 +53 28 +54 29 +55 11 +55 9 +55 9 +56 10 +56 11 +57 14 +57 11 +57 9 +58 9 +58 11 +59 30 +60 11 +61 9 +61 11 +61 8 +62 31 +63 28 +64 32 +64 4 +65 32 +65 4 +66 33 +67 32 +68 34 +69 22 +70 29 +70 8 +71 27 +71 8 +72 4 +72 23 +72 23 +73 29 +73 9 +74 34 +74 4 +75 35 +75 14 +76 35 +77 4 +77 36 +78 23 +79 23 +79 4 +80 23 +80 5 +81 23 +81 17 +82 23 +82 12 +83 37 +84 25 +85 34 +85 8 +86 32 +86 8 +87 9 +87 23 +87 23 +88 9 +88 34 +89 34 +89 9 +90 38 +90 14 +91 39 +91 9 +92 38 +93 9 +93 23 +93 9 +93 11 +94 23 +94 4 +94 8 +95 40 +95 2 +96 41 +97 23 +97 4 +97 4 +98 42 +99 23 +99 4 +99 4 +100 23 +100 4 +101 40 +102 23 +102 11 +102 9 +103 9 +104 9 +104 23 +104 8 +105 43 +105 2 +106 44 +107 4 +107 9 +107 23 +108 45 +109 4 +109 9 +109 23 +110 23 +110 9 +111 43 +112 11 +112 11 +112 10 +113 11 +113 11 +113 9 +113 9 +114 23 +114 11 +115 46 +115 14 +116 46 +117 23 +117 4 +118 35 +119 23 +119 4 +119 8 +120 23 +120 11 +120 4 +120 4 +121 35 +121 4 +122 23 +122 9 +123 38 +124 23 +124 9 +124 8 +125 23 +125 11 +125 4 +126 38 +126 4 +127 11 +127 11 +127 9 +128 11 +128 8 +129 47 +130 48 +130 2 +131 49 +132 9 +132 11 +132 8 +133 9 +133 11 +133 4 +134 9 +134 11 +134 5 +135 9 +135 11 +135 4 +136 11 +136 9 +137 48 +138 9 +138 9 +138 11 +139 11 +139 9 +140 9 +140 11 +140 8 +141 47 diff --git a/tests/model_tests/spec_model_kpp/configuration/mechanism.reac.cmp b/tests/model_tests/spec_model_kpp/configuration/mechanism.reac.cmp new file mode 100644 index 000000000..314e37b24 --- /dev/null +++ b/tests/model_tests/spec_model_kpp/configuration/mechanism.reac.cmp @@ -0,0 +1,226 @@ +49 141 140 numberOfSpecies numberOfReactions numberOfGenericComplex +1 1 +2 1 +2 2 +3 1 +3 3 +4 1 +4 4 +5 1 +5 4 +6 6 +7 3 +7 2 +8 4 +8 2 +9 3 +9 3 +10 3 +10 5 +11 4 +11 5 +12 4 +12 5 +13 6 +14 8 +14 2 +15 8 +15 10 +16 8 +16 11 +17 8 +17 12 +18 9 +18 2 +19 8 +19 9 +20 9 +20 9 +21 8 +21 3 +22 8 +22 4 +23 8 +23 5 +24 9 +24 3 +25 9 +25 4 +26 8 +26 15 +27 9 +27 5 +28 8 +28 13 +29 8 +29 14 +30 1 +30 16 +31 8 +31 16 +32 18 +33 14 +34 7 +35 17 +36 2 +37 2 +38 12 +39 4 +40 5 +41 5 +42 13 +43 14 +44 7 +45 15 +46 21 +46 5 +47 21 +47 2 +48 21 +48 8 +49 22 +49 9 +50 22 +50 3 +51 22 +51 5 +52 22 +53 22 +54 22 +55 23 +56 23 +57 5 +57 23 +58 8 +58 23 +59 24 +60 24 +61 24 +62 25 +62 9 +63 25 +63 3 +64 25 +64 3 +65 25 +65 5 +66 25 +67 25 +68 25 +69 26 +69 8 +70 26 +70 8 +71 26 +72 27 +73 27 +74 28 +74 8 +75 29 +75 5 +76 29 +76 8 +77 29 +78 30 +78 11 +79 30 +79 3 +80 30 +80 4 +81 30 +81 16 +82 30 +83 30 +84 31 +84 8 +85 31 +85 8 +86 31 +87 32 +88 32 +89 33 +89 8 +90 34 +90 5 +91 34 +91 8 +92 34 +92 8 +93 34 +94 35 +94 9 +95 35 +95 9 +96 35 +96 9 +97 35 +97 3 +98 35 +98 4 +99 35 +99 5 +100 35 +101 35 +102 36 +103 37 +103 8 +104 38 +104 9 +105 38 +105 9 +106 38 +106 9 +107 38 +107 3 +108 38 +108 4 +109 38 +109 5 +110 38 +111 38 +112 39 +113 39 +114 39 +115 5 +115 39 +116 8 +116 39 +117 40 +117 8 +118 41 +118 8 +119 41 +120 42 +120 8 +121 42 +122 43 +122 8 +123 44 +123 8 +124 44 +125 45 +125 8 +126 45 +127 46 +128 46 +129 46 +130 47 +130 9 +131 47 +131 9 +132 47 +132 9 +133 47 +133 3 +134 47 +134 4 +135 47 +135 5 +136 47 +137 47 +138 48 +139 8 +139 48 +140 49 +141 8 +141 49 diff --git a/tests/model_tests/spec_model_kpp/configuration/mechanism.ro2.cmp b/tests/model_tests/spec_model_kpp/configuration/mechanism.ro2.cmp new file mode 100644 index 000000000..fcea44b81 --- /dev/null +++ b/tests/model_tests/spec_model_kpp/configuration/mechanism.ro2.cmp @@ -0,0 +1,6 @@ +! Note that this file is automatically generated by build/mech_converter.py -- Any manual edits to this file will be overwritten when calling build/mech_converter.py +22 !ETHENO3O2 +25 !HOCH2CH2O2 +35 !NO3CH2CO3 +38 !HOCH2CO3 +47 !HCOCO3 diff --git a/tests/model_tests/spec_model_kpp/configuration/mechanism.species.cmp b/tests/model_tests/spec_model_kpp/configuration/mechanism.species.cmp new file mode 100644 index 000000000..41001fba0 --- /dev/null +++ b/tests/model_tests/spec_model_kpp/configuration/mechanism.species.cmp @@ -0,0 +1,49 @@ +1 O +2 O3 +3 NO +4 NO2 +5 NO3 +6 O1D +7 N2O5 +8 OH +9 HO2 +10 H2 +11 CO +12 H2O2 +13 HONO +14 HNO3 +15 HO2NO2 +16 SO2 +17 SO3 +18 HSO3 +19 NA +20 SA +21 C2H4 +22 ETHENO3O2 +23 HCHO +24 CH2OOA +25 HOCH2CH2O2 +26 ETHO2HNO3 +27 ETHENO3O +28 ETHOHNO3 +29 NO3CH2CHO +30 CH2OO +31 HYETHO2H +32 HOCH2CH2O +33 ETHGLY +34 HOCH2CHO +35 NO3CH2CO3 +36 HCOCH2O +37 HCOOH +38 HOCH2CO3 +39 GLYOX +40 NO3CH2CO2H +41 NO3CH2CO3H +42 NO3CH2PAN +43 HOCH2CO2H +44 HOCH2CO3H +45 PHAN +46 HCOCO +47 HCOCO3 +48 HCOCO2H +49 HCOCO3H diff --git a/tests/model_tests/spec_model_kpp/output/.gitignore b/tests/model_tests/spec_model_kpp/output/.gitignore deleted file mode 100644 index a73731eaa..000000000 --- a/tests/model_tests/spec_model_kpp/output/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Ignore output files in this directory -*.output From e60558b8fc3b432d88b7527af861cc65611ab97a Mon Sep 17 00:00:00 2001 From: rs028 Date: Tue, 26 Sep 2023 13:52:30 +0100 Subject: [PATCH 21/24] Remove extra fac file --- build/fix_mechanism_fac.py | 8 +- build/kpp_conversion.py | 2 +- build/mech_converter.py | 7 +- .../spec_model_kpp/spec_model_kpp.fac | 287 ------------------ 4 files changed, 9 insertions(+), 295 deletions(-) delete mode 100644 tests/model_tests/spec_model_kpp/spec_model_kpp.fac diff --git a/build/fix_mechanism_fac.py b/build/fix_mechanism_fac.py index 8b75fb1a4..e171b9afa 100644 --- a/build/fix_mechanism_fac.py +++ b/build/fix_mechanism_fac.py @@ -11,7 +11,7 @@ # -------------------------------------------------------------------- # # This script corrects the content of a chemical mechanism file in -# FACSIMILE format (.fac ) by removing incorrect newline characters. +# FACSIMILE format (.fac) by removing incorrect newline characters. # # Due to a bug of the extraction tool on the MCM website, sometimes # the newline character is inserted in the wrong place. For example: @@ -95,7 +95,7 @@ def fix_fac_full_contents(input_file): # print contents[i-1] contents_count += 1 to_delete.append(i) - print(str(contents_count) + ' corrections made - now removing old.') + print(str(contents_count) + ' corrections made -- now removing old.') # Remove old elements which have now been concatenated onto previous. for i in reversed(to_delete): @@ -122,7 +122,7 @@ def fix_fac_full_contents(input_file): # Look for any lines containing more than 2 elements. These are lines where # more than one line is broken running together. At this point, the file is - # too broken to easily fix manually - get the user to fix it and run again. + # too broken to easily fix manually -- get the user to fix it and run again. if max((len(line) for line in interim_contents)) > 2: # Get index of line with error line_lengths = [len(line) for line in interim_contents] @@ -167,7 +167,7 @@ def fix_fac_full_file(input_file): def main(): - # Pass argument from command line - name of the .fac file to be fixed + # Pass argument from command line -- name of the .fac file to be fixed if len(sys.argv) > 1: fix_fac_full_contents(sys.argv[1]) else: diff --git a/build/kpp_conversion.py b/build/kpp_conversion.py index a645e568f..fa92a0628 100644 --- a/build/kpp_conversion.py +++ b/build/kpp_conversion.py @@ -225,7 +225,7 @@ def write_fac_file(input_file): def main(): - # Pass argument from command line - name of the .kpp file to convert + # Pass argument from command line -- name of the .kpp file to convert if len(sys.argv) > 1: write_fac_file(sys.argv[1]) else: diff --git a/build/mech_converter.py b/build/mech_converter.py index 972766e7d..9e0bbd817 100644 --- a/build/mech_converter.py +++ b/build/mech_converter.py @@ -14,8 +14,9 @@ # -------------------------------------------------------------------- # # This script converts a chemical mechanism file -- in FACSIMILE (.fac) -# or KPP (.kpp) format -- into the Fortran-compatible format used by AtChem2. -# The script generates 5 files in the model configuration directory: +# or KPP (.kpp) format -- into the Fortran-compatible format used by +# AtChem2. The script generates 5 files in the model configuration +# directory: # # - mechanism.species # - mechanism.reac @@ -559,7 +560,7 @@ def convert_to_fortran(input_file, mech_dir, mcm_vers): def main(): assert len(sys.argv) > 1, \ - 'Please enter the name of a chemical mechanism file (.fac ) as argument:' + 'Please enter the name of a chemical mechanism file (.fac) as argument:' mech_file = sys.argv[1] # config_dir defaults to model/configuration/, if not given as argument if len(sys.argv) <= 2: diff --git a/tests/model_tests/spec_model_kpp/spec_model_kpp.fac b/tests/model_tests/spec_model_kpp/spec_model_kpp.fac deleted file mode 100644 index 4c11c81f5..000000000 --- a/tests/model_tests/spec_model_kpp/spec_model_kpp.fac +++ /dev/null @@ -1,287 +0,0 @@ - -* Generic Rate Coefficients ; -KRO2NO = 2.7D-12*EXP(360/TEMP) ; -KRO2HO2 = 2.91D-13*EXP(1300/TEMP) ; -KAPHO2 = 5.2D-13*EXP(980/TEMP) ; -KAPNO = 7.5D-12*EXP(290/TEMP) ; -KRO2NO3 = 2.3D-12 ; -KNO3AL = 1.44D-12*EXP(-1862/TEMP) ; -KDEC = 1.00D+06 ; -KROPRIM = 2.50D-14*EXP(-300/TEMP) ; -KROSEC = 2.50D-14*EXP(-300/TEMP) ; -KCH3O2 = 1.03D-13*EXP(365/TEMP) ; -K298CH3O2 = 3.5D-13 ; -K14ISOM1 = 3.00D7*EXP(-5300/TEMP) ; -* Complex reactions ; -KD0 = 1.10D-05*M*EXP(-10100/TEMP) ; -KDI = 1.90D17*EXP(-14100/TEMP) ; -KRD = KD0/KDI ; -FCD = 0.30 ; -NCD = 0.75-1.27*(LOG10(FCD)) ; -FD = 10@(LOG10(FCD)/(1+(LOG10(KRD)/NCD)@2)) ; -KBPAN = (KD0*KDI)*FD/(KD0+KDI) ; -KC0 = 3.28D-28*M*(TEMP/300)@-6.87 ; -KCI = 1.125D-11*(TEMP/300)@-1.105 ; -KRC = KC0/KCI ; -FCC = 0.30 ; -NC = 0.75-1.27*(LOG10(FCC)) ; -FC = 10@(LOG10(FCC)/(1+(LOG10(KRC)/NC)@2)) ; -KFPAN = (KC0*KCI)*FC/(KC0+KCI) ; -K10 = 1.0D-31*M*(TEMP/300)@-1.6 ; -K1I = 5.0D-11*(TEMP/300)@-0.3 ; -KR1 = K10/K1I ; -FC1 = 0.85 ; -NC1 = 0.75-1.27*(LOG10(FC1)) ; -F1 = 10@(LOG10(FC1)/(1+(LOG10(KR1)/NC1)@2)) ; -KMT01 = (K10*K1I)*F1/(K10+K1I) ; -K20 = 1.3D-31*M*(TEMP/300)@-1.5 ; -K2I = 2.3D-11*(TEMP/300)@0.24 ; -KR2 = K20/K2I ; -FC2 = 0.6 ; -NC2 = 0.75-1.27*(LOG10(FC2)) ; -F2 = 10@(LOG10(FC2)/(1+(LOG10(KR2)/NC2)@2)) ; -KMT02 = (K20*K2I)*F2/(K20+K2I) ; -K30 = 3.6D-30*M*(TEMP/300)@-4.1 ; -K3I = 1.9D-12*(TEMP/300)@0.2 ; -KR3 = K30/K3I ; -FC3 = 0.35 ; -NC3 = 0.75-1.27*(LOG10(FC3)) ; -F3 = 10@(LOG10(FC3)/(1+(LOG10(KR3)/NC3)@2)) ; -KMT03 = (K30*K3I)*F3/(K30+K3I) ; -K40 = 1.3D-3*M*(TEMP/300)@-3.5*EXP(-11000/TEMP) ; -K4I = 9.7D+14*(TEMP/300)@0.1*EXP(-11080/TEMP) ; -KR4 = K40/K4I ; -FC4 = 0.35 ; -NC4 = 0.75-1.27*(LOG10(FC4)) ; -F4 = 10@(LOG10(FC4)/(1+(LOG10(KR4)/NC4)@2)) ; -KMT04 = (K40*K4I)*F4/(K40+K4I) ; -KMT05 = 1.44D-13*(1+(M/4.2D+19)) ; -KMT06 = 1 + (1.40D-21*EXP(2200/TEMP)*H2O) ; -K70 = 7.4D-31*M*(TEMP/300)@-2.4 ; -K7I = 3.3D-11*(TEMP/300)@-0.3 ; -KR7 = K70/K7I ; -FC7 = 0.81 ; -NC7 = 0.75-1.27*(LOG10(FC7)) ; -F7 = 10@(LOG10(FC7)/(1+(LOG10(KR7)/NC7)@2)) ; -KMT07 = (K70*K7I)*F7/(K70+K7I) ; -K80 = 3.2D-30*M*(TEMP/300)@-4.5 ; -K8I = 3.0D-11 ; -KR8 = K80/K8I ; -FC8 = 0.41 ; -NC8 = 0.75-1.27*(LOG10(FC8)) ; -F8 = 10@(LOG10(FC8)/(1+(LOG10(KR8)/NC8)@2)) ; -KMT08 = (K80*K8I)*F8/(K80+K8I) ; -K90 = 1.4D-31*M*(TEMP/300)@-3.1 ; -K9I = 4.0D-12 ; -KR9 = K90/K9I ; -FC9 = 0.4 ; -NC9 = 0.75-1.27*(LOG10(FC9)) ; -F9 = 10@(LOG10(FC9)/(1+(LOG10(KR9)/NC9)@2)) ; -KMT09 = (K90*K9I)*F9/(K90+K9I) ; -K100 = 4.10D-05*M*EXP(-10650/TEMP) ; -K10I = 6.0D+15*EXP(-11170/TEMP) ; -KR10 = K100/K10I ; -FC10 = 0.4 ; -NC10 = 0.75-1.27*(LOG10(FC10)) ; -F10 = 10@(LOG10(FC10)/(1+(LOG10(KR10)/NC10)@2)) ; -KMT10 = (K100*K10I)*F10/(K100+K10I) ; -K1 = 2.40D-14*EXP(460/TEMP) ; -K3 = 6.50D-34*EXP(1335/TEMP) ; -K4 = 2.70D-17*EXP(2199/TEMP) ; -K2 = (K3*M)/(1+(K3*M/K4)) ; -KMT11 = K1 + K2 ; -K120 = 2.5D-31*M*(TEMP/300)@-2.6 ; -K12I = 2.0D-12 ; -KR12 = K120/K12I ; -FC12 = 0.53 ; -NC12 = 0.75-1.27*(LOG10(FC12)) ; -F12 = 10@(LOG10(FC12)/(1.0+(LOG10(KR12)/NC12)@2)) ; -KMT12 = (K120*K12I*F12)/(K120+K12I) ; -K130 = 2.5D-30*M*(TEMP/300)@-5.5 ; -K13I = 1.8D-11 ; -KR13 = K130/K13I ; -FC13 = 0.36 ; -NC13 = 0.75-1.27*(LOG10(FC13)) ; -F13 = 10@(LOG10(FC13)/(1+(LOG10(KR13)/NC13)@2)) ; -KMT13 = (K130*K13I)*F13/(K130+K13I) ; -K140 = 9.0D-5*EXP(-9690/TEMP)*M ; -K14I = 1.1D+16*EXP(-10560/TEMP) ; -KR14 = K140/K14I ; -FC14 = 0.36 ; -NC14 = 0.75-1.27*(LOG10(FC14)) ; -F14 = 10@(LOG10(FC14)/(1+(LOG10(KR14)/NC14)@2)) ; -KMT14 = (K140*K14I)*F14/(K140+K14I) ; -K150 = 8.6D-29*M*(TEMP/300)@-3.1 ; -K15I = 9.0D-12*(TEMP/300)@-0.85 ; -KR15 = K150/K15I ; -FC15 = 0.48 ; -NC15 = 0.75-1.27*(LOG10(FC15)) ; -F15 = 10@(LOG10(FC15)/(1+(LOG10(KR15)/NC15)@2)) ; -KMT15 = (K150*K15I)*F15/(K150+K15I) ; -K160 = 8D-27*M*(TEMP/300)@-3.5 ; -K16I = 3.0D-11*(TEMP/300)@-1 ; -KR16 = K160/K16I ; -FC16 = 0.5 ; -NC16 = 0.75-1.27*(LOG10(FC16)) ; -F16 = 10@(LOG10(FC16)/(1+(LOG10(KR16)/NC16)@2)) ; -KMT16 = (K160*K16I)*F16/(K160+K16I) ; -K170 = 5.0D-30*M*(TEMP/300)@-1.5 ; -K17I = 1.0D-12 ; -KR17 = K170/K17I ; -FC17 = 0.17*EXP(-51/TEMP)+EXP(-TEMP/204) ; -NC17 = 0.75-1.27*(LOG10(FC17)) ; -F17 = 10@(LOG10(FC17)/(1.0+(LOG10(KR17)/NC17)@2)) ; -KMT17 = (K170*K17I*F17)/(K170+K17I) ; -KMT18 = 9.5D-39*O2*EXP(5270/TEMP)/(1+7.5D-29*O2*EXP(5610/TEMP)) ; -KPPN0 = 1.7D-03*EXP(-11280/TEMP)*M ; -KPPNI = 8.3D+16*EXP(-13940/TEMP) ; -KRPPN = KPPN0/KPPNI ; -FCPPN = 0.36 ; -NCPPN = 0.75-1.27*(LOG10(FCPPN)) ; -FPPN = 10@(LOG10(FCPPN)/(1+(LOG10(KRPPN)/NCPPN)@2)) ; -KBPPN = (KPPN0*KPPNI)*FPPN/(KPPN0+KPPNI) ; -KRO2 = 1.26D-12*RO2 ; -* Peroxy radicals ; -RO2 = ETHENO3O2 + HOCH2CH2O2 + NO3CH2CO3 + HOCH2CO3 +HCOCO3; -* Reaction definitions ; -% 5.6D-34*N2*(TEMP/300)@-2.6*O2+6.0D-34*O2*(TEMP/300)@-2.6*O2 : O = O3 ; -% 8.0D-12*EXP(-2060/TEMP) : O + O3 = ; -% KMT01 : O + NO = NO2 ; -% 5.5D-12*EXP(188/TEMP) : O + NO2 = NO ; -% KMT02 : O + NO2 = NO3 ; -% 3.2D-11*EXP(67/TEMP)*O2+2.0D-11*EXP(130/TEMP)*N2 : O1D = O ; -% 1.4D-12*EXP(-1310/TEMP) : NO + O3 = NO2 ; -% 1.4D-13*EXP(-2470/TEMP) : NO2 + O3 = NO3 ; -% 3.3D-39*EXP(530/TEMP)*O2 : NO + NO = NO2 + NO2 ; -% 1.8D-11*EXP(110/TEMP) : NO + NO3 = NO2 + NO2 ; -% 4.50D-14*EXP(-1260/TEMP) : NO2 + NO3 = NO + NO2 ; -% KMT03 : NO2 + NO3 = N2O5 ; -% 2.14D-10*H2O : O1D = OH + OH ; -% 1.70D-12*EXP(-940/TEMP) : OH + O3 = HO2 ; -% 7.7D-12*EXP(-2100/TEMP) : OH + H2 = HO2 ; -% KMT05 : OH + CO = HO2 ; -% 2.9D-12*EXP(-160/TEMP) : OH + H2O2 = HO2 ; -% 2.03D-16*(TEMP/300)@4.57*EXP(693/TEMP) : HO2 + O3 = OH ; -% 4.8D-11*EXP(250/TEMP) : OH + HO2 = ; -% 2.20D-13*KMT06*EXP(600/TEMP)+1.90D-33*M*KMT06*EXP(980/TEMP) : HO2 + HO2 = H2O2 ; -% KMT07 : OH + NO = HONO ; -% KMT08 : OH + NO2 = HNO3 ; -% 2.0D-11 : OH + NO3 = HO2 + NO2 ; -% 3.45D-12*EXP(270/TEMP) : HO2 + NO = OH + NO2 ; -% KMT09 : HO2 + NO2 = HO2NO2 ; -% 3.2D-13*EXP(690/TEMP)*1.0 : OH + HO2NO2 = NO2 ; -% 4.0D-12 : HO2 + NO3 = OH + NO2 ; -% 2.5D-12*EXP(260/TEMP) : OH + HONO = NO2 ; -% KMT11 : OH + HNO3 = NO3 ; -% 4.0D-32*EXP(-1000/TEMP)*M : O + SO2 = SO3 ; -% KMT12 : OH + SO2 = HSO3 ; -% 1.3D-12*EXP(-330/TEMP)*O2 : HSO3 = HO2 + SO3 ; -% 6.00D-06 : HNO3 = NA ; -% 4.00D-04 : N2O5 = NA + NA ; -% 1.20D-15*H2O : SO3 = SA ; -% J<1> : O3 = O1D ; -% J<2> : O3 = O ; -% J<3> : H2O2 = OH + OH ; -% J<4> : NO2 = NO + O ; -% J<5> : NO3 = NO ; -% J<6> : NO3 = NO2 + O ; -% J<7> : HONO = OH + NO ; -% J<8> : HNO3 = OH + NO2 ; -% KMT04 : N2O5 = NO2 + NO3 ; -% KMT10 : HO2NO2 = HO2 + NO2 ; -% 3.3D-12*EXP(-2880/TEMP) : C2H4 + NO3 = ETHENO3O2 ; -% 9.1D-15*EXP(-2580/TEMP) : C2H4 + O3 = HCHO + CH2OOA ; -% KMT15 : C2H4 + OH = HOCH2CH2O2 ; -% KRO2HO2*0.387 : ETHENO3O2 + HO2 = ETHO2HNO3 ; -% KRO2NO : ETHENO3O2 + NO = ETHENO3O + NO2 ; -% KRO2NO3 : ETHENO3O2 + NO3 = ETHENO3O + NO2 ; -% 6.00D-13*0.6*RO2 : ETHENO3O2 = ETHENO3O ; -% 6.00D-13*0.2*RO2 : ETHENO3O2 = ETHOHNO3 ; -% 6.00D-13*0.2*RO2 : ETHENO3O2 = NO3CH2CHO ; -% J<11> : HCHO = CO + HO2 + HO2 ; -% J<12> : HCHO = H2 + CO ; -% 5.5D-16 : NO3 + HCHO = HNO3 + CO + HO2 ; -% 5.4D-12*EXP(135/TEMP) : OH + HCHO = HO2 + CO ; -% KDEC*0.37 : CH2OOA = CH2OO ; -% KDEC*0.50 : CH2OOA = CO ; -% KDEC*0.13 : CH2OOA = HO2 + CO + OH ; -% 1.53D-13*EXP(1300/TEMP) : HOCH2CH2O2 + HO2 = HYETHO2H ; -% KRO2NO*0.005 : HOCH2CH2O2 + NO = ETHOHNO3 ; -% KRO2NO*0.995 : HOCH2CH2O2 + NO = HOCH2CH2O + NO2 ; -% KRO2NO3 : HOCH2CH2O2 + NO3 = HOCH2CH2O + NO2 ; -% 2*(KCH3O2*7.8D-14*EXP(1000/TEMP))@0.5*RO2*0.2 : HOCH2CH2O2 = ETHGLY ; -% 2*(KCH3O2*7.8D-14*EXP(1000/TEMP))@0.5*RO2*0.6 : HOCH2CH2O2 = HOCH2CH2O ; -% 2*(KCH3O2*7.8D-14*EXP(1000/TEMP))@0.5*RO2*0.2 : HOCH2CH2O2 = HOCH2CHO ; -% 1.90D-12*EXP(190/TEMP) : ETHO2HNO3 + OH = ETHENO3O2 ; -% 1.62D-12 : ETHO2HNO3 + OH = NO3CH2CHO + OH ; -% J<41> : ETHO2HNO3 = ETHENO3O + OH ; -% 7.00D+03 : ETHENO3O = NO2 + HCHO + HCHO ; -% KROPRIM*O2 : ETHENO3O = NO3CH2CHO + HO2 ; -% 8.40D-13 : ETHOHNO3 + OH = HOCH2CHO + NO2 ; -% KNO3AL : NO3CH2CHO + NO3 = NO3CH2CO3 + HNO3 ; -% 3.40D-12 : NO3CH2CHO + OH = NO3CH2CO3 ; -% J<56>*4.3 : NO3CH2CHO = NO2 + HCOCH2O ; -% 1.20D-15 : CH2OO + CO = HCHO ; -% 1.00D-14 : CH2OO + NO = HCHO + NO2 ; -% 1.00D-15 : CH2OO + NO2 = HCHO + NO3 ; -% 7.00D-14 : CH2OO + SO2 = HCHO + SO3 ; -% 6.00D-18*H2O : CH2OO = HCHO + H2O2 ; -% 1.00D-17*H2O : CH2OO = HCOOH ; -% 1.90D-12*EXP(190/TEMP) : HYETHO2H + OH = HOCH2CH2O2 ; -% 1.38D-11 : HYETHO2H + OH = HOCH2CHO + OH ; -% J<41> : HYETHO2H = HOCH2CH2O + OH ; -% 9.50D+13*EXP(-5988/TEMP) : HOCH2CH2O = HO2 + HCHO + HCHO ; -% KROPRIM*O2 : HOCH2CH2O = HO2 + HOCH2CHO ; -% 1.45D-11 : ETHGLY + OH = HOCH2CHO + HO2 ; -% KNO3AL : HOCH2CHO + NO3 = HOCH2CO3 + HNO3 ; -% 1.00D-11*0.200 : HOCH2CHO + OH = GLYOX + HO2 ; -% 1.00D-11*0.800 : HOCH2CHO + OH = HOCH2CO3 ; -% J<15> : HOCH2CHO = HO2 + HCHO + HO2 + CO ; -% KAPHO2*0.44 : NO3CH2CO3 + HO2 = HCHO + NO2 + OH ; -% KAPHO2*0.15 : NO3CH2CO3 + HO2 = NO3CH2CO2H + O3 ; -% KAPHO2*0.41 : NO3CH2CO3 + HO2 = NO3CH2CO3H ; -% KAPNO : NO3CH2CO3 + NO = HCHO + NO2 + NO2 ; -% KFPAN : NO3CH2CO3 + NO2 = NO3CH2PAN ; -% KRO2NO3*1.74 : NO3CH2CO3 + NO3 = HCHO + NO2 + NO2 ; -% 1.00D-11*0.7*RO2 : NO3CH2CO3 = HCHO + NO2 ; -% 1.00D-11*0.3*RO2 : NO3CH2CO3 = NO3CH2CO2H ; -% KDEC : HCOCH2O = HCHO + CO + HO2 ; -% 4.5D-13 : HCOOH + OH = HO2 ; -% KAPHO2*0.44 : HOCH2CO3 + HO2 = HO2 + HCHO + OH ; -% KAPHO2*0.15 : HOCH2CO3 + HO2 = HOCH2CO2H + O3 ; -% KAPHO2*0.41 : HOCH2CO3 + HO2 = HOCH2CO3H ; -% KAPNO : HOCH2CO3 + NO = NO2 + HO2 + HCHO ; -% KFPAN : HOCH2CO3 + NO2 = PHAN ; -% KRO2NO3*1.74 : HOCH2CO3 + NO3 = NO2 + HO2 + HCHO ; -% 1.00D-11*0.7*RO2 : HOCH2CO3 = HCHO + HO2 ; -% 1.00D-11*0.3*RO2 : HOCH2CO3 = HOCH2CO2H ; -% J<31> : GLYOX = CO + CO + H2 ; -% J<33> : GLYOX = CO + CO + HO2 + HO2 ; -% J<32> : GLYOX = HCHO + CO ; -% KNO3AL : NO3 + GLYOX = HCOCO + HNO3 ; -% 3.1D-12*EXP(340/TEMP) : OH + GLYOX = HCOCO ; -% 1.68D-13 : NO3CH2CO2H + OH = HCHO + NO2 ; -% 3.63D-12 : NO3CH2CO3H + OH = NO3CH2CO3 ; -% J<41> : NO3CH2CO3H = HCHO + NO2 + OH ; -% 1.12D-14 : NO3CH2PAN + OH = HCHO + CO + NO2 + NO2 ; -% KBPAN : NO3CH2PAN = NO3CH2CO3 + NO2 ; -% 2.73D-12 : HOCH2CO2H + OH = HCHO + HO2 ; -% 6.19D-12 : HOCH2CO3H + OH = HOCH2CO3 ; -% J<41> : HOCH2CO3H = HCHO + HO2 + OH ; -% 1.12D-12 : PHAN + OH = HCHO + CO + NO2 ; -% KBPAN : PHAN = HOCH2CO3 + NO2 ; -% 7.00D11*EXP(-3160/TEMP)+5.00D-12*O2 : HCOCO = CO + CO + HO2 ; -% 5.00D-12*O2*3.2*(1-EXP(-550/TEMP)) : HCOCO = CO + OH ; -% 5.00D-12*O2*3.2*EXP(-550/TEMP) : HCOCO = HCOCO3 ; -% KAPHO2*0.15 : HCOCO3 + HO2 = HCOCO2H + O3 ; -% KAPHO2*0.41 : HCOCO3 + HO2 = HCOCO3H ; -% KAPHO2*0.44 : HCOCO3 + HO2 = HO2 + CO + OH ; -% KAPNO : HCOCO3 + NO = HO2 + CO + NO2 ; -% KFPAN : HCOCO3 + NO2 = HO2 + CO + NO3 ; -% KRO2NO3*1.74 : HCOCO3 + NO3 = HO2 + CO + NO2 ; -% 1.00D-11*0.7*RO2 : HCOCO3 = CO + HO2 ; -% 1.00D-11*0.3*RO2 : HCOCO3 = HCOCO2H ; -% J<34> : HCOCO2H = HO2 + HO2 + CO ; -% 1.23D-11 : OH + HCOCO2H = CO + HO2 ; -% J<41>+J<15> : HCOCO3H = HO2 + CO + OH ; -% 1.58D-11 : OH + HCOCO3H = HCOCO3 ; From dbca873025c5821bc46d310847430c454a557bbe Mon Sep 17 00:00:00 2001 From: rs028 Date: Tue, 26 Sep 2023 15:04:00 +0100 Subject: [PATCH 22/24] Fix compilation of model in kpp test --- CHANGELOG.md | 15 +++++++++------ tests/run_model_tests.sh | 6 +++++- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 993329368..153e6de67 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,16 +5,19 @@ AtChem2 - CHANGELOG post v1.2.2 ----------- -- +- new implementation of the Testsuite code coverage using Codecov +- restructure the `ci.yml` file and streamline the continuous integration process +- update the `Makefile` and move the instructions for the Testsuite to a secondary makefile +- support for chemical mechanisms in KPP format (as generated by the MCM website) v1.2.2 (May 2023) ----------------- - move implementation of continuous integration from TravisCI to [GitHub Actions](https://docs.github.com/en/actions) -- improve reporting of the testsuite results by using logfiles -- begin implementation of the new testsuite ("behaviour tests" now referred to as "old tests") -- remove unit testing from CodeCov (coverage reporting is broken) +- improve reporting of the Testsuite results by using logfiles +- begin implementation of the new Testsuite ("behaviour tests" now referred to as "model tests") +- remove unit testing from Codecov (coverage reporting is broken) - disable (provisionally) CVODE support for LAPACK and BLAS - upgrade the install scripts to **openlibm v0.8.1** and **numdiff v5.9.0**, and add error handling - in the `Makefile`, add optimisation flag for `gfortran` and compilation flags for `ifort` @@ -69,7 +72,7 @@ v1.2 (May 2020) v1.1.1 (January 2019) --------------------- -- add `doc/` directory containing the documentation in markdown format +- create the directory `doc/`, containing the documentation in markdown format - add `CONTRIBUTING.md` file - fix the headers of `lossRates.output` and `productionRates.output` - change the name of the environment variable `ROOFOPEN` to `ROOF` @@ -92,7 +95,7 @@ v1.1 (November 2018) - implement a unit testing framework (new requirements: **Ruby**, **FRUIT**) - add unit tests for atmosphere, configuration, date and solar functions - add exact solution behaviour tests -- improve running and reporting of the testsuite +- improve running and reporting of the Testsuite - rework the mechanism conversion procedure, and the related Python scripts - add plotting tools in R, Python, Matlab, gnuplot - extend the documentation on the wiki diff --git a/tests/run_model_tests.sh b/tests/run_model_tests.sh index e63cb2203..5b78f4358 100755 --- a/tests/run_model_tests.sh +++ b/tests/run_model_tests.sh @@ -90,7 +90,11 @@ for test in $1; do test_counter=$((test_counter+1)) echo "" >> $LOG_FILE echo "Set up and make" $TESTS_DIR/$test >> $LOG_FILE - ./build/build_atchem2.sh $TESTS_DIR/$test/$test.fac $TESTS_DIR/$test/configuration/ mcm/ &> /dev/null + if [ -f *.kpp ]; then # mechanism in KPP format + ./build/build_atchem2.sh $TESTS_DIR/$test/$test.kpp $TESTS_DIR/$test/configuration/ mcm/ &> /dev/null + else # default is mechanism in FACSIMILE format + ./build/build_atchem2.sh $TESTS_DIR/$test/$test.fac $TESTS_DIR/$test/configuration/ mcm/ &> /dev/null + fi exitcode=$? if [ $exitcode -ne 0 ]; then echo "Building" $test "test failed with exit code" $exitcode >> $LOG_FILE From 635966ca6bb2b6e3f5bcb41d4cf7124cd15eb3d4 Mon Sep 17 00:00:00 2001 From: rs028 Date: Tue, 26 Sep 2023 15:31:22 +0100 Subject: [PATCH 23/24] Upload coverage only if tests are run --- .github/workflows/ci.yml | 1 + tests/run_model_tests.sh | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 18062618f..6f4afbd69 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -148,6 +148,7 @@ jobs: make modeltests CCOV=true # Run only the new model Testsuite - name: Upload coverage reports to Codecov + if: matrix.os == 'ubuntu-22.04' && matrix.fortran == 11 uses: codecov/codecov-action@v3 with: gcov: true diff --git a/tests/run_model_tests.sh b/tests/run_model_tests.sh index 5b78f4358..92e82a789 100755 --- a/tests/run_model_tests.sh +++ b/tests/run_model_tests.sh @@ -90,11 +90,12 @@ for test in $1; do test_counter=$((test_counter+1)) echo "" >> $LOG_FILE echo "Set up and make" $TESTS_DIR/$test >> $LOG_FILE - if [ -f *.kpp ]; then # mechanism in KPP format - ./build/build_atchem2.sh $TESTS_DIR/$test/$test.kpp $TESTS_DIR/$test/configuration/ mcm/ &> /dev/null - else # default is mechanism in FACSIMILE format - ./build/build_atchem2.sh $TESTS_DIR/$test/$test.fac $TESTS_DIR/$test/configuration/ mcm/ &> /dev/null + if [ -f $TESTS_DIR/$test/$test.kpp ]; then # chemical mechanism in KPP format + mechanism_file=$TESTS_DIR/$test/$test.kpp + else # by default, the chemical mechanism is in FACSIMILE format + mechanism_file=$TESTS_DIR/$test/$test.fac fi + ./build/build_atchem2.sh $mechanism_file $TESTS_DIR/$test/configuration/ mcm/ &> /dev/null exitcode=$? if [ $exitcode -ne 0 ]; then echo "Building" $test "test failed with exit code" $exitcode >> $LOG_FILE From 7d1fdc17590e10ce8da9e1a62f4632245061262d Mon Sep 17 00:00:00 2001 From: rs028 Date: Tue, 26 Sep 2023 19:39:47 +0100 Subject: [PATCH 24/24] Compile manual --- doc/AtChem2-Manual.pdf | Bin 789506 -> 789607 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/AtChem2-Manual.pdf b/doc/AtChem2-Manual.pdf index ce6f9bc6b2e84badb9f37dcd77a9067e8ccd277e..0378374fe8e2b0411b1f2ac56bcd969f607ed10f 100644 GIT binary patch delta 9958 zcmai(RZtvIlZ9~)gF}M55AN<3G&sS7yE}su+}(o(3+@u!ZEyy6mjJ;A`Lp{!?BhOs zRef)Dom+JuPIa9Q$z(suWUuQ&gyZGT!2X5K2og~fQ5|5%+IVGlY@&62yd)7KD}tk; zL6Xm`#0)M8T2N!4y}ot9$>IR4ugcH^|7uyf3%Am4hsmTyk!boFNBYTrA_?j0f z?X&8}f(K?;Naq-fO+J#G7ivG8HmDyhYru6f1{bcvtpx!&z0KS$5S5Yb0!+j1T>e4; zAbVbA#c)Z43U_o797XWoy}{BhODU_NWn*b?4Z(?P955G!@6Coh5Ul3i#Z=f3F)&x^ZyCN^3Klg=ZxdNJC zE=Kh0E`@PUBm)L_?u5m_hSkN$e5agc?08f}jj&8qy7;ohwZ3 zc!ef^WokyJk->PB&RX9&pB6n9hDiI|{hZg+&dAd`9dk6jtZLZ>1g-kGkI&6tMg4X#hkx zMZ!7zDPZL@Zc`%mc?6w5>`u~=th7Zg1AY$@yIRQ*YSZpJF}pwWS<%{8+l3JUqA-ru z2=@M8a9EVtK*$e&h%xS{b3p{ItiH2z^V^(nubb`9xv5o%%zyw{8CkkX!D-HP41-?p{<<}k%`FdWED*n;Vzrqlmq89eYHOHk|!z# zRVR)Q5hMk&J_GF^hmrJX(zHx1azz0Gbf~N@EYn6-^Y`G`_Vyi7fw+|dk-IFSPZZtw z+V&pzAbzL)rB*o2&6<_guZu@k%^#|yv;tgSzW#~xFP+C6VXRSO@zZTLaLxQtTJXd1 zO~{jG+_pTGeBDEl%pnLX z_AXW;L)w4OrMTz}94HGIWw9pD$JhXj%=CdV9Nl2W7uaI!p(PEImS>SGHVOSUGQv)i zM2X6G6pO2Chqza?$irE@>=CbZCihZ**TOgqn2vs(+7&HGkX>%<LM?^W+W32=5U z%KtQ6@!`1mGFUl(@aRJNA1K#9!q;s91Ivb4lj*%4HQGPMxOm4t47Laa9_ABX3EdUN5-u2JScGF|~{?!v>sS297F zjPg_p4&P0_UG>C@rVAgE%|o;kY%qH z>YdD@vy!Ttc^x+{dLE~>f=Xgt?NY#deuok%t}8Jk{VqA~GwFGku1D%?`XwqWGx5wo zGP4w~OodrH?nC6gACnMMiF%;KEi_aJI;MoW@1do`+d85-o~-?{4bpj$;DLeY*5v7C z(7ggK>M>a%tJV=rox*KZSM46Rjk0U*lE>1KOMXK~LcYpk&4&1jE3!k}P1SvwEv%jI z3iM@hHItNMg_x2q2=_~G3(d?PTN)B){pZTG_)3l4<-_!{8kKfk&zL?_h^&v>VO~6V zO+87jA|kvF>foQ8pssS5QmFKWmka7lVC8(*&->t=wNlDg0z=`!{cg0~H`7uo&O(qgA- zp3j0`2rDag=m^T>)7S3pJCW=>JDP{T;|EA7Iz%y65{pq_fGklq(kCsed~-|Cm+rkf zpV^u+_gjB>ETH1%c6g<`HwQL>U|JvfCJu;0KlIj7(}hOyDz%s?GA>`_6c#lr`&60VdrXWAEua#1d-Sw`OVy1h#a7g27+V=Ws zaQT-pB8oiZ0u-(yF>Dohlg-KHGs?EX<-m?AbanLVxX#P`OhpInQ3ij=c!rvVwuC{Rt(c#w~<#@1jGzPk6cS zE<>7BtS&^8gxnVtrP`}!-xy5U7}2iD3q{&?$woR>zFWN^hThqiI+_prdX#=?1A`~k zBqa<`I`r$yTTb6G&8z{8Hz}hGG1s^_-goclDPb^N|LeSwL+Qx>K=}u1>rgt{Jq9d) zhAA2xW5z)-8X;{mzb6fC%icIV>padfPDP?7$xLm*RW5w8wYsLf!k5O*v`Q4|49XHT zd{C`j_0;2#^IV+EuRnC#t9+uTbQX&UEDEdK9E_92PA^7^y14a*n99?4cEmLwJiZpk zjbIA!Kz?v+azg}SuoEyb$I+-I)a7^t^}{i>OR*lTOQ#_w2)(Ov?m-nApGXVKgZzdS zx8n~!p=3!}{hp`blUo+RsesMzhr)(s zAS?@CAKxUCH2p2N8o!>?&pNVY{K5hRsF@A(r<38x$3p;R?kme5xF3pum9l+H0uhrwce9+6*%&l9xN;Ez4~mb~hBZBpyE-lb#`ZHt+GIkjdSTx$nXAP;iL z=^gxYu)6Bx_x^|sFP0U1G!=@h{D9EUvyzk{0xP*Rcmty?WIis{8)_gNB!wwx)LU30 z-XUx)%;E{(6)Kzdf#T)h6Z=vckN8hNo;(tA%%iE!GQYo%3iG5N-gEhsz9#g1#o*xJ z|9I(<5cJ?IT+mmott|f4_yyf*NHtf`joT7@V0&GSlC_74LFa}A8&P7ZQNdhg&=CL zvizi>L^)=}Q5qKd06S+$lVE>Glapyfkl!d3zkNq}O0fbwY9LRizt{lBF8JGe_EO8C z-L7h11VXMPtqG~Vd_i?FZRrK7Hz_}79eiD|mSgb;k+FNt;&PZe?+o*DG)k2Bzh~7U zGQAlYvE^tVK`{)-^m7d}N*&E8xYJPH(ldu5qL8zkKEpVT)_jeiR0Fvq<}FKa0d(qS z{r5EWknh^YJmXz4>W6l*a~-q3Kl`VF9U4Wad8G|x?q`Gy7^p17NGA)8MYb`O=N zCUkAMy_yI{)|n2}!h$%lOCLeS(N8?8N&*K1$p zt!WJl)8*v?BCp3n&qmI2E1dU^*(u9B^qaD7wk;*B;f;-*zjR#;LYfVzb#sKWqnG$H z$30qt9g8zsf};^zf_8`9WXxYj^&QO=tnJWx zdkXUZwx*v?spXSCVO9H58K*gbktZp=BC@G)6PX9f-zp1lM;;|ATGLRVIz%v*tW@Cj!~fg>bB8I_riE|+Gr zAOc2}-81&@q;KmokGCj)26|05I%7cmVx-d%jrX@F)}py8mIJ#R%`-)vq1m4_`&Dk! z5YSBb7`c8-2qBxRzKe3}we|z`i9Nqd^RT;$Bz&8ox6f@2(}F!sZV8b|-m<-D4QZ|m z=+J|p5d_b-)riNnI`lsB)_wZz4sG)j25lzRZZ3IV_&T=;As*RpEUwRA?jqT3_ve1+ zValm737ulyaCd}1qrOv!G&~E*(SuIQv6rEe#h3nZ9`gZv;gxz2_X=(dbJ{9P8V`rM z)UZ(tgln^DYhT0dY1p20eCm>}(l4R9(r9u|zbA^3|4C9kd#7I$(zkoFN5Mc&0=jq4 ze<%qEvgp+VN(sg-N2|zn1J=1K1BO$mkX`qN{UG!GhbNdqdkZjEVJ;1C!vikhaI7l; zwEwNJA16OOUzmhVg{v#XAQBHYQ(th^1~Mbr%ss8ndUr-@x^2^qx-u{R>P{ViAhO-E zxmCtGnP|}o+_XKrY4j-*?G&2_89>OOlO{{?-L%6HTHz>B zhQ#&h9h5_Ib4kWHzok=62MMufL!+A#Lzq~SH%SDNJ#WIo)oBEVp!ziRA8xcIsf+gK z&Q&FGcY5kY;tw8FOIC=2y-f*TaKaa+kjp+mVi5D|qNAJ1+ntZqJ2#g=FU;AkOG_aY z7xM14`DpF)&v4%y-)CBA6r`>m-`+a+$Xzs2n%_6x z*c|l~N2%W4Pes(zX=A`QNk~5u*lKndteW>eGdS6sm#iEKA2?eKs>kEk-NCq{d5vHD@w8$sy2_#?inivWelhCODH`&RE#Wb$IJ9-j z(Pj>U-n70pu<{-pK7)sRs*=#W|9<`A$NDp>M;xiryhK?(#LY%v`L8Beo*Cb$RkE&NDxUx#AW4|*PtwYNpPS}sl}g^oddrhwz!ko}awnbpCb ziDXV%R|y3)^wfcp*srh(>dBf)1)>UB(nIce+5Bh>Ku@Ch80>=YRg~Casx7IW{n#Bw z)FAKd4>eEBL#RKHjfus%5HOPvWOpCoM+%QQ z`)Gj}X%-uMoX9s^cdsPn$Ur$pceo6L>Mcff*ep)43BIWX>r6C~qcu7k{8&)4D(>(c z!FL*7>2(^EfkQTWH3(c+GZC{+QR&PP7by12Acu{`i0_hbi1E26ZrNIs#Y|;dqb=^Mo&i?l6*)42!fcF|G9L1r5RE*#v6DJa)R8fCNSRlzT`8I&_@L0lP2M8Wc_y& zA*UHHNu-KmV;dFv8;WD?>$YhgP9X7L-)t?bAN;C!<6;o10#%=dH|NoMjw@^Zqk&rg z9LfYen~j&ytlBD^;)L)q4fq-md`-@BS3-uG{z}`LRm)S_oZVG?P(3L3`(Dl~+i|CW z)6YODNneo4q#l;ZWQ4zzZsqs>;& zu;O}2RTGQip+L{;T!t>I_%ZS8U4#1VB3nTFp}h%kcD$NDVULjbTZjKtOy~-$T;K!c zD^2UhO5{ZHSm}t!c%JTlt)PP?N&mFl%N0Y+f z%60MTxm7JmmXT^-9?d-A=gQ;VcC_v_x#WbW+6Cs?P7!tx>7WTz%fia>o%&=TCaBuJfz#JpHVLKY{A#H7MPXD&5{3e2|UitD>(kB&9;{ zLS1?XItypIYF(|{iBgh{4_Cr=p-AtG$oE$0ie9{(`i|+~V5TshSo!xHYkc$ulZEv> zZz6tllifBje29)dQ6-c5Z&xu@)V!(-jO)`7bo|+MxWSo~9)+Y;pIJq$vIxueUF|8J zXO3n>#$jl&{4k>d0W`AS;$O2}a+>}%6F(IuHs*XlT_S*#h0bn4|1#&ZBu_gQRjbmy>i7>dj&pEPi*~gT0HfEm79s6 zLb5wkobqNxPkW;QR%yW=<-N9SXyMA+z)YOW1yqkzSZN$oyUFq6%**d)AbAC z+;sP)vK|6koQMkYm*=+qs!P+>Es;|)uPsm2j`Dv~xXgq3LxbNUse9yx`h(kp65lb> z5#hjzJ^R~i_f>r7-q_PqA$0ab=g#ARi6LN(u zReTBR0I6>1d2PmZD)4;-bjDnU^c)Bf2j(g{DYkj=TXH|mDtGGf5x=fZbv~WA^Pe9U z&~I2g$UU?}8=-TrjnE@!!6$v)`)>%6jaLD&Z#q=o_s?s5$jDT1jS>jy(uF6+G>1^^ z;BkZKpq@qOFDPutiay309_&kyD^X2iE|i;I;JY_Y6Qy5-A2MTQEhXJi3)ZK?T`;Z+JR5p9&x z5nV~6Bj+&RKXZEE95ABLUHQQ3A8lla)(Ex#9$^FdKZj7w#vJ8PCGwz~cH9wG+B#`0 zMz0XlJR3fg5q~aEnJG^hqxX~_p?LfT5+s?7{1S#aw{xphMkaa^D>?1&yt*g8KK7@} z|9*Gp4cpBmbdLkwK^6yOj3H0_5#}cAo6B6IsD+SE5xv-Nes4FFaZKK*rHXKCtsZm> zTXfbQU|qmWb^yooLi#m-5Nh1tC zBG{~6T+bu9+>vhMFDrs+o0)?fBA^~#s~91~gw{y8+5(Miw>rv+`k2(Xw*-cVe*M;P z5cZX8x7Ek53K=o41sqjQDrqAbM^`(Mvh;hbjfcecZ_!0g1)Ak~W@~3Uk+lVCm7b5D zUr^YwK-ljyU(`%^IiAzLQ`D{@@|E+VMNxOwZHxG~JT?PDQ*Z}8pI~DMz(&G%PY0|1 z?k-EJu5&8E*K6c}2ax}m{mMT4_U=B2M~dy-yaxcZzlXC!C`cIojuU@8pctwE zCohKpmjDNQ#`rz@r~f;)UfiQIqiIM=vr9;Faq@CY@=Ee^@o`8-t=hG=Y`EgY@fttmKpx!6;RuoytJnKt%@avvjRy!>mgR`{Ya>{W6HT}XsH zNvvE5grGhA?bC-VdU^bqrEsX~K9vnWH7V2!HKKoN;*SF$m1_Eh_|j>zwupGCXoDzP zOih(xNG?Nkk9um*V#xzxr#IpJE0GbmnY^plX@9pymI=}6MwS_t3H?W|R^W`H@+}CA zv2UFNKE&n?!hxXZr`2J60?UH4QJH&-NG0v4@Up=wg#wbw>;MNi<@YjxaS(6JlKcvs zK00f2@d@>sxR5?TKgyX>H>?F)IiZt?MPe;19T$j5YK=U5rJv0O@EEoM&Lu)IXiCaV?l}km!F!=u$#U(!Zx3hn%E~fz(4}P#9XWWdrTNU_Rw@ zWcc-RWMeelDnWGhWjRNf3@Zc-aS*??-rmTwtSf2DPd4}q>jm|aWa>rSidXq5=}m$p z#i%Z0s=wGi)H0P+H<&RClKVA;6+xqZoV(D`9G>0#(N6wNv$I(vOK~Ax_}LyUBuEXD zxSuBO?6f8#B;gSLLXuVdjkvY?nQ>~}*5}AHjsVUxw|yumz|xV?#4F1H3AFO%P!LvV zY+bSUjbj;ch3BxN@6#;&Qiu^d%CkhL#RUD|qyUz3;U2{6mg_FZ7rI`hVW*=W<@CQG zx%YZ9dl)GbbfUUytIs-o*#Rq6VC}jO)*&J$Y%7QnQ=)=Dpq|$V%)v&rOhvrFY-vLa}9hO;|Cb~Bxl`z;;3`_t|VX9t$Tnn`(VSF8z0x) zQF1^6HIBA|P_U$HzHD#Z0aUC8b%ES^K+CJxYV`xVPXE`a!E*J9k+M7TOuC)#?kL-# z?t?c`ULN>PCActvQcwzvT*+R#>Z^Y1c5@gX4uL#w(0O@dx~kYugF2ahWYmA#$HZSS z!l}PtUGtr#vm0J|SfBYWM8;29+GOVYWc9gv@Ad3pXnU(@r*z*|{aRBc!ckYEPwlGj z#!L;Zk+kYy@TQK7^E%i8O(DFqm;@o1bqGzmZ;#zMguxaj0-$4rsy?Q=g`09g_bs$K z9QROdr*5x`9V*9eNkr5`__0NNP%6B(tN7!!Q>H7kCWmFJ5eCppiZqc2u;guE5{G z*@4Ar*p4O$0;pxNan^eg2oI@&Xo;t2^N9ovab?x5aTOeh0rG;e3)er%(@Gh?rCa2>(zx3f<)jd~T1WFGUBG2qi-5h!St> z@JxcmZKZP3$V97A<^3s|g9njsi1~HGfXpKLU{-eqkjFInKPlIb{2E~ry%JQ3m%V=| z6JN#4Lh~*1(j4D48tq~Ki9ObBD5|!c^rKMB2Y*Ix_;e4i4;2rDj{>+~!;&K;lPuU* zp>H{qmj5oQkoWJ!*uhY{QU-`MUeHZBDfE1% zQ*#6P$CPQ1vJRc3PMm4`x`eUt_f@<8WsF-mm@5?Er7a(B{-7zbs#q&l2tD>cbMJ{y zpKsPb$@_`klpDWXw8y%AsCP0&W~k;gA$#hrD%j#BhkM)sJ5_FAS=xGeYMHG$@^+@J z_jKQ#rBJgsxXZuWzNj6z8v&dR7W74u>pTS=tCGf*?TsGuQww$=^L;xg-&zLE{u0ba z9Z}j+AB%4+*t59we(l8WT^+hWl*2nRS72N3MA}?Zy{Gz=Xf| zZXFqCdsQTi4>7MMx6@w^b^GaZmvR}FcJ(6v5T|!A>-Nco+beg76j^ZubuJJ72-X60 z#V^sJz>WxnQ%Q{9>!{K@*k@H93LZ5?T!ukbl)LaVcOPIndaH!8$IVnfJ^ilI7C`qA z-gm27fAF&*$rTp8#;+2drTqZ)?(j_r5U%O2)jud&>!>t}Ch?iv9_w*x9H(Y>PissY zAvUThmSC(jhVx$mWgEDe}j-C(5$9>OOQCl%cTFE|Kf{t zC9v#^*^p1;mwav)RPEbvI#x+vmH$5lef7=D`yCNs^-YieHvLqbXc0KI9fY1GOE@L+ zSR|VOQ%L@`(RFt3m88 z1ROt%1+v2|g-X=HV!*!Mm2W-Y4IB`#W3+@gmJW4UznXv_%kv3-#fAR@jhb{L02JjtZB<_&1Hd2l0AozUd@P-bFmFgMbe9kb-5z)nFd}xq-ug@RG2mZUOm6 z&r9$u-d7O~%?MTG(GDXTjN;=*_gN3~UxZ0o$1e2}u}xSFH%CP>S*o4$tsxb z;=~4?a>v1a^Me1P$`r>{!1!C``zcRd;WokO%&&l*5exnZgFk#zav`=vNna~;6- zn?;eSAoO$EpGCCZ(2PF=qXU8xA;>;;u`N$DNeYSDq%T1!5tjk(9zH6D;SG&!e6gf> z+IbL%h|02F7be)xgja=z$Qm@Oo$xell1p$br(2POQF@!__|I_7SujUwUthE_?hCuG zI)r}|rs^R2)kIq+Mzbu_Qs~-6@F2eWn_kEr@0Jg_7TZdham8?HlDGy2w;TGXYPRf1 zo${5~sOQAcR$tUdzYNX#(aaK!EIw>$_&Wn&rtr^x5vIbj?XD-fLut*^lv<<5P2&K! zlArTVhGkZHcw3@ENMM!?PK=BaNZ8XoGU_AZ!X|nf@q5do{w>15$NA#N&uI;6`sW8Z zWb8j`*+yB9kPnjXsizw3HKWj)^7V|CnO%d%C8I^*JX^yTLu#R}JMEz`1C)SLK(O5m z{)7HEYEe=ueLCFCHCwJ-=bF1hCdRaD6gHLMl%Jjs5~~zA7vNLHwu_>axQ(GY3#xF`5O{tN+cdFUO z?;vY1EUAMvZ0iQ|p>&O-jaHir0rfA&UzifiuN0%KN#ROFMpOB|Wi=Ih%-AH|KB=S?e243Rvy~UCtNO}P1ZC-8OYOmHh z+9T|M@G^ZRBZ^RNMkWDcrK(f*l>eUf{=VYNBn9JBG8n@y>G<&MlJ$Z)D*9k0c);&m z@Tu@oZz7ZXrLNqaIc-JPF&GS3ywgs+AgBM`qzX$vy`R;nPM97C2)BOsWLg#JG|b}{ zRDKHR3|`~zW2;y98gvj{Gt=cmGp&V(1#-2nKUcXr?Y9}xxDl1Kn3MXuVP6nm6=)nh z^dFu-g6mIo^(a3bB&T~3p1Y72cp8zP#PHuDcjalgPInKw*>8FDFD>SrvmNL^8?DW* zZ*$qo5)7==pT#Ws=r))2#KqR!_P|5^g2-m!nz- zx}-q7pO-x6qE5jdDLY8>oFxaU23PKfVQ5As0MYG$p7tAz$9NEBOCWx6&w7a8YC_jR z$}0>$$eAyx;XmV`ZBDpq^5?HGwre(PQS9I-nV0OsIz&4kjR^8B8I1&qPb@X$e+JoL z)MHf)zw3n4H;bWC{T);5quppd5vz_shLre#xGWQw$43H+;Ks4i=SLw@5LbH2rA{|G z-HhxVs7r3iNMfn&9ri)kuBUtsLJ`$Lh+vO*D4U$NVvZ1|b{e6*xy0r=EDBz8b(wxZ zB)^927nEgpe&`r*>n<%RP+4l832raag7cbZwrxr$PV)?iIl%QVQ`8H0x*r-a>K-MR=*>l=H+*xZ8b{a|)RftTx0N z`tkvtVa%uq(H~XH>ZI0UJ`gJv_N5feT!qoat;2sahIBZ#Q8eRlLcUHKgA>DDSku2h z%~=lPZU0*`7pehvq~y^ik96(*R+r#)<3z<=qp;PJyzJ9@0^#2UUhE>46``egu;)NnArBA7p60+!9!3yQk^jZ(xlX{i>AcT&QiM-1aiyi0UJ4ea6`1P`e3Y86fj zxWKuM;mu>)FY!IxBpe&lk02*0mMPQ`(0C72(?-8pf!54R6jrf8>^Sfl;d9m3#ggX4!!_yW4iyvP?XAAG#M$C>K)z@^#2bRjj@b&2?^N>g1@9#8s!hqq?; zUs4steI#nSt*?w>>CO4GQ(xJ^i=tw5?d9nAvqW(ExU$p36tD`&rEvW^RQ0VLf%@+E zK#_|TiJ5Dhf5ZUV@XKV(`9LjVZ@y{jhr20wlvBm8)sfWQ-7}xqccw;V+4y8=-?14& zLzS>*E>ij8KBNs@X4kv@=IXcTMO5j-MT#LxV?sl$HX3$yJqayj?)mU?Ojm+zE{bn4 zjf|p_w|gBQcmk#`^*Z@-TivJLdK48GINkRzYg}XSqgm#rUIEvyjCTWkpZJr+Ae5sLW^OepEY#9X)g55Ns4TqG<{`kXUSlYfx|NC9ep zR#wq%=t!@?mj|Hrwpq-aL2W4Jp_vp1*=h3DUIP}3hS`^7{VJkEZA00?_M7)**=c%2 zwM@3~0VrQ$_a%tkN@KuBTu2;lu?lo9+of=p@);?Ik;Y$^z^07ie7)R0>AwSG#7I=Y zU>shx91*QboZbtlj0jWGKLP6Lvxf-pQPu?Yk-l*)%8oD@(@F zF8Oy^eg>6qIdaG(1!d+2m(@P!;Jv;rTlAe_7IkA^%2w|(KHxr#`zHgKIe6z|O`RYU zu}VZemPXvWDO`U$6?LdoLimY*3PJoZkgnM`ngjnt*(B|9E=;vtoeK@u*ktdnK1v_> zQz-T4yNeL4H00DyjB={EsN0Xc4#&y24h(1>i(4$Y(M>$^)Pm5GJ_buH+Xb5T1_(XX znb|;FQpYU;)fj%pZMZf#@{jl5nMLdvujp`EE;S_uV%_PeLvWpi&pp7;=Qikq_RVsOHTAO7?{C3To@^^B z=(3*GG6MzaAHurNP#W4{h-WOC+lbsS*1I&~9d&jTT~>{6LeJJ4T<-55uf9Zo?;CZi0U>ur?LJ`RM!?oia3dQ=_pW`# ztZDl{@J7)pg}sc@PD(}~*0wS4Di1_G)0ESE1Fkc-o(i~m?IP#q;Kt7}4SWwz47 zXVm-NhJZ?B9X<+!h9LK3nFVE9T>=GMG@MMXgfB}iKOkuq64v5!L$wxQDYLi8ow!uw zONdLoeqW1l-jCjXE-FQsv1hF6Y2s@zC$sC0=i@wXSP9XC%$H)~p>JNFRD~+^;z3SJ zG0DMLwCJp}_0wwYO&q$Wj=Jp|q%riZ-Q;WYY~E`8FzA|ugvEnM|G3e+^7+S_IKq#O zj}_YcW^n=*)@ch73m-^)d|>IAX6~@}8kLP#8Cez zU-|y8l-sam%f_jDO1+61KjSg>7Sdx9O9C*5K$w1cC$rlew@!AoCC(1!+PeOjj%0q` z{`Gay#UZGV+G>2M!$H%0F~^s3vV1wEnRsgIy#33dGsc2TyruIwki&S>l4EfhwLRW^ zB@%;lBOxYyO$Q~65SimoxvE1lPme_wrHRSi-#&nJA!uYDM(ra*EmgW{Pzp^ zIM104a#JYV7Cme1xprq$(A~3?g`l8@W7w9Flb7Ep3x8NK!|4uqn8oGoYlQbbC`kUu z3+STPbPdVYagJl7^>V}z23D2SlYuuR{Xvp*Q&Cr=rCLS1Rv>`~YE^&GX`^SgK2)&; z=WkgV%!ET%!)JuRb+qmB(voGt6EB)R0^N(8z&Lhi{eBMB6RSBsN>?5z(axYz-x)Ey zHdgY~3$}tUBI>sNnf38LDfwD@u;%K#<-Xo~k!f?FLkbt3GQ(bB7*+|O1*6u%yENmf zW7}Z(GI5}9mv{%I{mX6(LE_YtQSi~PhMgU^;$Giobi#C&9J*6wnZHUED|&$rR&3xs zcp3}UwXqA4W{u5AiuDJ{&VKh%IW6IOh{q|-p$ZwBj%O{QO~ii+iB0+#+$dT|%H)#J z-)*Am@A8_-oYN$VGF7!Sfz3K-a?UjS#7({lKQwl<_EEI*v3`jkv*TQ{6dc>{B&kZA zVWsxr#&)qglcep-WbqZt7@{N|kL@l3IYARGb6u>-n^0jLacH~77K$F2)#g=ITPQ=t z;YLwQC@r*~oi;AI)L^qlE7n{Lg&wu?aHl3r)Yx%aG`WYZ+S02|FzXqB3ozwDKI_n_ z?@Bk-zjs7^%RDw=44 zgw6oD8=9i0MKY<*rwE1FN=Btw&AeK^7^YHR3srqeXmz+E<_{LCAM)W(L$_iX7P84- ztdVyjj12u_<&XCPaMZIwBrQXQ!Ii|%V%KG6u1>EclO|41;J!H@rgnqrG3i;}EDYli zEtUYN7D0KU-sE%>yzuA-1KjdvZ;}Engam-!&hHsD9qVs)i8_(-YmLU$LekP zjk{-MuP=**srIUTaxnJdo#Tj~a!RRw#fgp8G5DBQDX_;IRUb0T;EnIkVn$OL-#IB~ zv+JccQ|U~DB`}w7T)sIttwGZps2-ae1sI@8_$^El+7xo0^g72$#Ja!TGBUriZ5Pig zSNoxW@9CaKB$kbgw=ovd*HIEo{$Qnv%zX$Ety!+!xZua2Bx`f$^`JSeSXM;~?hRdc z_`ZOtvwu|a!@R03qAWvDKKQzAPd)SB4i5LeHBW0cD#8hE&D`? z?4VkaV{6`1#N$%z>YE%uC@|F-_Mq zVmQeQE%tO72GOa;v;o69NXn!F@k#auX%e;hITSFi5ON9_3_S@ZoQ{q&Vy#twj)psQ zaW{qRu2`BCtHV;W+MU5SD<^RiCMi7b5vsK9t#l7em!2YZ7xhr}@1~zpek1Miu`?RT z>ZCEv|GWES%A(Cr9l?@-6cbAwx%*{+b;nT|c{`Q6IM*%w*CH4_&+da(`|Ph)hJTE_ zl&zf*`JB&Y{G}?4W(?{_9bDaFa@Si<0AOS#g5Az3=1o>A-+HuhiSmj~NNa#VO}fktq2T{^03jfV6JZ z=B?PicP6^($H$9KupAlF`Q<~1wSTjR+<%0wR+dATw6>ok7FnZ+^i-NvBW&Q9WfN{Q z5@5oqym^|R)y=aM*@zvPD^!bH#Q4WuH&gr`=`%S z?!t8qovEq8Ip!oHAC-20C18)7YcaeD45c!?a~gRh{n=f`5nT^A>B((1Gud6}aMlgz z@2`$Szw|1qB(sT)q41ETHxc>dV}tFmOzk%;o=i^x*j)Mp6qCDAdmX_o&i`}%x!R@p zkEu)3SUXsh&Oks|aN+5_{^gKDs9q0iAkBpXiiOv_fwTgI!#Bje7G;tw8;gITK|bjk z>sb}@+AVvJN9wPWh&=w9vO2MtHEXP~0rSw`DYAHi<(8P-mriUf=s?r%_r*=TZB&c} zZN7tS4SYEVwPU9lfJgJ6reMEj|9!u~&B0TClK`KJyo?<)lcJbRnL*PD3VDtOP^Y~5 zl-U6(vF0L<-H*jui#a$GD8@fX4&0x=gsDSn{M_+7_C_wGq4|HBv&r+(Lv=C54V_d@ zQLtPXuhjVP^xio1Hh7`z_3VK}%kex=_M)aZz^1~uGSA{_rw0Z%enQc&tF`*C$41-f z*WhAq3c?4+kYar@_7rP1&gIf{itQ|_^!jN%eG7=-bJ!RK9raINxbF_+Nu8phxGpf#rBqKqeTA`AK4 z@ZSa~Haq%Qvo(ar(ZYwR`EW6_z>)#QE;pXWEsW#3=$-w&(RLbric_?2VEEMo=_p)W zXIhdYMeKzbjSgbbSyRPp&xN(<5!&ls*|c+AM1fg&iPkuA0{H?|f&w;}J!i-&EN2d*FW5ug)WLyZ*}drMCIkT-;*)ry~oUWj!y2 zM4Z$M1ZWesJ%Rn7;-8yKV<$?|j9>{;zQmzHsb?yZK4VFfAu^CBQkIvvc0qAZXbK3! zK<=|77f95)Rl~%miq9IeisvDJ+rBXUTofKU)%z`5#C>gd4e1=OouEx~@dvy5_bbR@ z+Xf!-7IN@cCQtf9wfv0+avA#ARr` zXgjP#slZednjKo}tdFj9m*5_}4z1L2hi|jFKBZvu9NgjcvZwrWu;;gh+;6)svl>JF z=RZ3NT>YjZ^Y>@730Qr`%D3g0jliSV!`IW-^kTH{(;O_aSUm!%euiU8n z>!p-SJ(jP&$Q!PV;E>IasQsID&!{S<=^th~Mz$x5@@ZcmL-&$IqUp)h_!c%3-^DGn zq0TI@4xP(Sy!MOM^nfP^{@@HiBa99}42r|?1JQPIhUY}2`<+@jn-Q(7J<^hoezXJc zB?21zoE!|wbop<~uO2bIeH3z6WR0r^ZM-#>8JoW&0vX3Lz%;ve=ZVrG?qo=t(x98` zc|rX9=R+V-2nDjSKX1xWKG0wm-mXOZo~PJedE1e&hu#G}nckJ@AHO65L#lf2M?cKa zQIL7?g5RBe{zC5B=B|N^RG=@dt{Ma%wpGAG~2u^A!I6hUf1w$yDu*_~zmj6~CU z7F104EkK-BztDv*j4;kF-wK_!By4xOU))LgNNwh)kfpB(Iq!#^VVIjlPQ2atk|AOG zwkss8!D%+Vfl@G|I+VrTVLOgzipM^>pvO#ezdw<73bN9KNrBug>DvXlZ^EPne|a0M zjQY5Ndev-2UNzU1MAna^D9iFUeEosoz@2u1xLLDUl*Rqqbbig`@{VTT?%6hsSBrg8 zd?{&fNnxzyYb)(SJNI*}FXZI?_?BwB>FHaXQJ`mqRJYU{f{c&^x$6(%P0K3-?7%0e z#2N8wkYC{aIFaf+?xqVSA}YfU_zi@KIl-dXLrCz)yJKsAPLbZ-hKw{Ic$&25*4@n` zbcqMt`%|Hj3@;XJEgY}eo5r&oB)l1QL zP{jXp;3n<-&$z|Q{r>Pp51?2n8!q1ScYkPISA=L*Uti_+zMaErkvn-(>TfuFb)KY8 zp$9jY?5g#5N$!{5mHh|27S!n36B^nfF+sK$u^QR^8)~&Sy(*iT-%nW^9gfo9P&S7B z3I6XZ%C-fw#kK`&K!!`0UzA^fPh3!#laHU3kB^ldlUKvl=A)IDEgjoO2?0I6Sz6&4WtAjl`kFQyfz1J)VoPgil{SB7n6g(8m~hZOBWOZZGl1>9pIwQ@J5I1 zW``^Z0%8%5kEPgF6Z|vm6XQ^}b^%^JwpM;D^;{ zeI`@Xj3Q?x`0g(RPMA-DZTMLM;0!&h+mY2ULSKOs-zQ`qm}*q`%O~3n$1v81)H%eB z+AvWB9OV;ROZjyK)2NBYInRx8DZCl^jAh$yCaf9BIl&FLNC(MoW@WX1jPp%u~ zq0-5R4n;A9<|5}0+01K*K0j}Y%$V0uP+_RBU-;*!pc$VcGnO^1+rl%sYc<`a$&817s$k=EY&O~O-qn~WJvzM|JiAYZ|{Z>x78AoP#4yfZrAjCzG$ zzCuKz(H8heO6RnWKqJ;OIO$8G1`uuLuNriTQQYHk%}PGzeRIL&&+R7Vx?zz>3R#GY9A+G(F(~Ahb58m%&V6rv~gr5by0va#z>7= z!hi?YSED zz#s8or|zOHv3CI0UKPHnfE5nC6yr+IEvZZ-(O#-nR2D8LsbUr0;Mf98o)B_3a#KVD zL|*cqRG0?eG!KufX-k!}j_x|rJqH0xK>A<3-v$^K%mL}g+)vM&URW8bh8$Mq;l+d* zs=kck>gW@Hv-c*lN&kdrFGMd_;p zuVn5s#qccVMi4EoMlfNb%J{3u@Py$Coy<5ZcL+tyFw5^qO_qk7f~b;fRafwcQ?7)N zQMoAtKN6M6%tTh6D^7dhTmA}fBmAz_pOKq43%1M(XPo5^#+%Kwg}a_`Y$%r^(5Qlm z5R{Ll60ka0lIG!)Nh=IdXby?lO0m?&lOb8pa5Ai3ON)m6hFboYgIEK z5_bVfV~A}5pbB|1BXDnfa$Jtp5Cz=c>t9RSXma~3u--yZg}82swS>K3bo<-hJJw%c zIA5|C;jr#>gUs8T^Al(JtE&bTLb)f?5D@23qvkso){U+s0^~|=$g-qP7${$%~spq(p&t=;I4>&gk*i=A-KcY#S zvhn~2Y$lGRl~1)h*7<*wD zhe;;IoSOb{l8%2y~zw;0aQ##N4Qk9NXvLO5{E|3hL_6*!s9&u zrTvZvs=kkBF?)w(Baw6@tKZL7(1iD&+r2Cr?O!>%QMt+H_P=5JomXik43~(4;hwTx zqHWm6t)(H4Up;8%%&fBtXflN&RXDr(ip&2hezMjm30pZbk)6B*J7=kSHxifX@*Gt8 zx+Zan^;HF&iO0|F%@&A@FqaNBk$jdNjj0LLxr03{90pKxmpaw$NV*;)ahL9TANpdo zvT(loSM!v$*fM%|vQn>h6k&L+2k*nZjW56T%uEWEC%i0HH_bNS*|Rhy5XJ6BA1s(0 zwHcWe0KBiU6MW{uuzU#$jp1aNyP}sDo=dOlx7Uid0yA$Rq6A2HQ3|!a%<%Zy<>R*x z!40vJ*h9T?wX3S%Xn~~uh@wbhcoMk5=Vj^Uey#Guz3#m<7q~`8!!nBzL|aTJ!&wX0 zTU3rzFHlL_VhFh4Nz>$E>6_3F@LVib5;rY@2%3#VhF}Z65R+?HvqUvT&7q?n_BLqx zH;_}ZBm3u9$Vo7uxahWvzujT4{LYKEHsEAve8O;k6Ny6nfL7f??k2Z!1P3X#6RU!rM?EK{&=*4 zwKA{D|9?n+^S{{51#8pBf166e?KUpHQHp~5CE%V)n5}32Yl))4#5(!nVMW{1olutW z-P5p8yWM%14A5(x!cOn$HBwmWTsW&C67pII({O6+rDx1;;s}RCd0VuW^9q(B>yN0xz7>jBF3P6}|Pv@3`Y*^!?=Fi>mrg@+0^BudIFlo)MX`__{KBcu*pMV&%f0U z@s0hEjqPrk$phaz`GmV6kGb2udr#Md9`!>{?|1Xls*lv=n;f*WpGhe*LhWXdj6;Gl zOi(kzNGzFwXw(HnRY+!*!iIo_P;blkvWKXY!9k0w|J@s!f=yOXpZ*M5b4U;$!ZkcU z=md@j>FA|f!nqCZvZS54$b8)P=+S!>)~PM|%^C3qP)S9!hDc*$(_)J73t%!cD`+WV F{vSAD8R!52