Skip to content

Commit

Permalink
Add lw solver test (#8)
Browse files Browse the repository at this point in the history
* run conda on pr/push

* remove pybind11 submodule

* Link gfortran only for Linux builds. Not required for macos

* Fix error in cmake that wasn't caught on mac

* Test LW solver

---------

Co-authored-by: Alex Soklev <[email protected]>
  • Loading branch information
tcmetzger and makepath-alex authored Mar 19, 2024
1 parent 5a6ec38 commit 75c717b
Show file tree
Hide file tree
Showing 4 changed files with 98 additions and 0 deletions.
1 change: 1 addition & 0 deletions tests/lw_solver_test/lw_solver_input.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"ncol": 8, "nlay": 16, "ngpt": 1, "top_at_1": true, "nmus": 1, "Ds": [1.66, 1.66, 1.66, 1.66, 1.66, 1.66, 1.66, 1.66], "weights": 0.5, "tau": [0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125], "lay_source": [55.262424040190126, 34.223494451559205, 9.723321608024499, 5.034661079536288, 77.35658094313622, 47.90619602161601, 13.610747774297323, 7.047540423437901, 55.83281279792635, 37.59907382111288, 16.365590690049466, 12.302084898693016, 78.15501360100855, 52.63134666902437, 22.9086248546815, 17.22051181727, 56.40320155566256, 40.97465319066656, 23.007859772074433, 19.569508717849743, 78.95344625888087, 57.356497316432716, 32.20650193506568, 27.3934832111021, 56.97359031339879, 44.35023256022022, 29.6501288540994, 26.836932537006472, 79.75187891675321, 62.081647963841064, 41.50437901544986, 37.5664546049342, 57.543979071135, 47.72581192977389, 36.292397936124374, 34.1043563561632, 80.55031157462552, 66.8067986112494, 50.80225609583404, 47.73942599876631, 58.11436782887121, 51.10139129932756, 42.93466701814934, 41.37178017531993, 81.34874423249784, 71.53194925865776, 60.10013317621822, 57.91239739259841, 58.68475658660742, 54.476970668881236, 49.5769361001743, 48.63920399447666, 82.14717689037018, 76.25709990606612, 69.39801025660239, 68.08536878643051, 59.25514534434363, 57.852550038434906, 56.21920518219927, 55.906627813633385, 82.9456095482425, 80.98225055347447, 78.69588733698657, 78.2583401802626, 59.82553410207986, 61.228129407988575, 62.86147426422424, 63.17405163279011, 83.74404220611483, 85.70740120088283, 87.99376441737076, 88.4313115740947, 60.39592285981607, 64.60370877754224, 69.50374334624921, 70.44147545194684, 84.54247486398715, 90.43255184829118, 97.29164149775494, 98.60428296792682, 60.96631161755229, 67.97928814709591, 76.14601242827418, 77.70889927110358, 85.34090752185948, 95.15770249569952, 106.58951857813912, 108.7772543617589, 61.536700375288504, 71.35486751664959, 82.78828151029914, 84.9763230902603, 86.1393401797318, 99.8828531431079, 115.8873956585233, 118.95022575559102, 62.10708913302473, 74.73044688620327, 89.43055059232411, 92.24374690941703, 86.93777283760414, 104.60800379051625, 125.18527273890746, 129.1231971494231, 62.67747789076094, 78.10602625575693, 96.07281967434906, 99.51117072857375, 87.73620549547647, 109.33315443792458, 134.48314981929164, 139.2961685432552, 63.24786664849716, 81.4816056253106, 102.71508875637403, 106.77859454773048, 88.5346381533488, 114.05830508533293, 143.78102689967585, 149.4691399370873, 63.81825540623337, 84.85718499486427, 109.357357838399, 114.04601836688721, 89.33307081122112, 118.7834557327413, 153.07890398006003, 159.64211133091942], "lev_source": [54.97722966132202, 32.535704766782374, 6.402187067012017, 1.4009491699579235, 76.95736461420006, 45.543620697911834, 8.961809234105234, 1.9610547265218508, 55.54761841905824, 35.91128413633604, 13.044456149036982, 8.668372989114651, 77.75579727207239, 50.26877134532019, 18.25968631448941, 12.134026120353951, 56.11800717679446, 39.28686350588972, 19.68672523106195, 15.93579680827138, 78.55422992994471, 54.99392199272854, 27.55756339487359, 22.30699751418605, 56.688395934530675, 42.66244287544339, 26.32899431308692, 23.20322062742811, 79.35266258781704, 59.71907264013689, 36.85544047525777, 32.47996890801815, 57.25878469226689, 46.03802224499706, 32.97126339511188, 30.470644446584835, 80.15109524568938, 64.44422328754524, 46.15331755564195, 42.65294030185025, 57.8291734500031, 49.41360161455072, 39.61353247713686, 37.73806826574157, 80.94952790356167, 69.16937393495358, 55.45119463602613, 52.82591169568236, 58.399562207739315, 52.789180984104405, 46.25580155916182, 45.00549208489829, 81.74796056143401, 73.89452458236195, 64.74907171641031, 62.99888308951446, 58.969950965475526, 56.16476035365807, 52.898070641186784, 52.27291590405502, 82.54639321930634, 78.6196752297703, 74.04694879679448, 73.17185448334655, 59.540339723211744, 59.540339723211744, 59.54033972321175, 59.54033972321175, 83.34482587717866, 83.34482587717866, 83.34482587717866, 83.34482587717866, 60.11072848094796, 62.915919092765414, 66.18260880523673, 66.80776354236848, 84.14325853505099, 88.069976524587, 92.64270295756286, 93.51779727101076, 60.68111723868418, 66.29149846231907, 72.82487788726169, 74.07518736152521, 84.94169119292332, 92.79512717199535, 101.94058003794703, 103.69076866484286, 61.2515059964204, 69.66707783187276, 79.46714696928666, 81.34261118068193, 85.74012385079564, 97.5202778194037, 111.23845711833121, 113.86374005867496, 61.82189475415662, 73.04265720142644, 86.10941605131163, 88.61003499983866, 86.53855650866797, 102.24542846681207, 120.53633419871538, 124.03671145250706, 62.392283511892835, 76.4182365709801, 92.7516851333366, 95.8774588189954, 87.3369891665403, 106.97057911422041, 129.83421127909955, 134.20968284633915, 62.96267226962905, 79.79381594053376, 99.39395421536155, 103.14488263815211, 88.13542182441263, 111.69572976162875, 139.13208835948373, 144.38265424017126, 63.533061027365264, 83.16939531008744, 106.03622329738653, 110.41230645730884, 88.93385448228496, 116.42088040903712, 148.42996543986794, 154.55562563400335, 64.10344978510147, 86.54497467964111, 112.67849237941148, 117.67973027646558, 89.73228714015727, 121.14603105644548, 157.7278425202521, 164.72859702783546], "sfc_emis": [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], "sfc_src": [119.08067944642347, 119.08067944642347, 119.08067944642347, 119.08067944642347, 166.6896517543573, 166.6896517543573, 166.6896517543573, 166.6896517543573], "inc_flux": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], "flux_up": [NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN], "flux_dn": [NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN], "do_broadband": true, "broadband_up": [NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN], "broadband_dn": [NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN], "do_Jacobians": false, "sfc_srcJac": [1.6713077817041893, 1.6713077817041893, 1.6713077817041893, 1.6713077817041893, 2.1508342161852556, 2.1508342161852556, 2.1508342161852556, 2.1508342161852556], "flux_upJac": [NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN], "do_rescaling": false, "ssa": [0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125], "g": [0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125, 0.00625, 0.0625, 0.625, 3.125]}
73 changes: 73 additions & 0 deletions tests/lw_solver_test/lw_solver_noscat_parser.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
#!/usr/bin/env python3
import json

# This is the code that was used to save the output of the lw_solver_noscat function, you can use it as reference for other functions
# open(1, file = 'asd/asd/asd/fortran_data.txt', status = 'new')

# ! Write data to the file
# write(1, *) 'ncol: ', ncol
# write(1, *) 'nlay: ', nlay
# write(1, *) 'ngpt: ', ngpt
# write(1, *) 'top_at_1: ', logical(top_at_1, wl)
# write(1, *) 'nmus: ', n_quad_angs
# write(1, *) 'Ds: ', secants
# write(1, *) 'weights: ', gauss_wts(1:n_quad_angs,n_quad_angs)
# write(1, *) 'tau: ', optical_props%tau
# write(1, *) 'lay_source: ', sources%lay_source
# write(1, *) 'lev_source: ', sources%lev_source
# write(1, *) 'sfc_emis: ', sfc_emis_gpt
# write(1, *) 'sfc_src: ', sources%sfc_source
# write(1, *) 'inc_flux: ', inc_flux_diffuse
# write(1, *) 'flux_up: ', gpt_flux_up
# write(1, *) 'flux_dn: ', gpt_flux_dn
# write(1, *) 'do_broadband: ', do_broadband
# write(1, *) 'broadband_up: ', flux_up_loc
# write(1, *) 'broadband_dn: ', flux_dn_loc
# write(1, *) 'do_Jacobians: ', logical(do_Jacobians, wl)
# write(1, *) 'sfc_srcJac: ', sources%sfc_source_Jac
# write(1, *) 'flux_upJac: ', jacobian
# write(1, *) 'do_rescaling: ', logical(.false., wl)
# write(1, *) 'ssa: ', optical_props%tau
# write(1, *) 'g: ', optical_props%tau

# ! Close the file
# close(1)

def parse_value(value):
# Handle NaN
if 'NaN' in value:
res = float('nan')
# Handle bool
elif value in ['T', 'F']:
res = True if value == 'T' else False
# Handle float
elif "." in value:
res = float(value)
else:
try:
# Handle int
res = int(value)
except ValueError:
# Keeping as string if not an int
res = value
return res

def load_data_from_file(file_path):
data = {}
with open(file_path, 'r') as file:
for line in file:
parts = line.split(':')
assert(len(parts) == 2)
key = parts[0].strip()
values = parts[1].strip().split()
if len(values) == 1:
data[key] = parse_value(values[0])
else:
data[key] = [float(val) for val in values]
return data

file_path = 'fortran_data.txt'
data = load_data_from_file(file_path)

with open('lw_solver_input.json', 'w') as f:
json.dump(data, f)
24 changes: 24 additions & 0 deletions tests/lw_solver_test/lw_solver_noscat_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#!/usr/bin/env python3
import json
import numpy as np
import pyrte.pyrte as py
import os

def test_lw_solver(request):
path = os.path.dirname(request.path)
with open(f'{path}/lw_solver_input.json', 'r') as f:
data = json.load(f)

for key in data:
values = data[key]
if isinstance(values, list):
values = np.array(values)
data[key] = values

args = list(data.values())

py.rte_lw_solver_noscat(*args)

test_data = np.load(f"{path}/lw_solver_output.npy")

assert(np.allclose(test_data - data['broadband_up'], 0.))
Binary file added tests/lw_solver_test/lw_solver_output.npy
Binary file not shown.

0 comments on commit 75c717b

Please sign in to comment.