commit 6c80a19de3a7e0b5659cd723e098c759d4b99440
parent dd9d93b6ae889c5ba752d7ce86b8a02bbb7d856f
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Wed, 4 May 2022 12:02:28 +0200
Eval the line for at its vertices (i.e. wavenumbers)
Diffstat:
1 file changed, 42 insertions(+), 7 deletions(-)
diff --git a/src/sln_line.c b/src/sln_line.c
@@ -209,6 +209,36 @@ error:
goto exit;
}
+static res_T
+eval_mesh
+ (struct sln_tree* tree,
+ const size_t iline,
+ const struct darray_double* wavenumbers,
+ struct darray_double* values)
+{
+ size_t ivertex, nvertices;
+ res_T res = RES_OK;
+ ASSERT(tree && wavenumbers && values);
+
+ nvertices = darray_double_size_get(wavenumbers);
+ ASSERT(nvertices);
+
+ res = darray_double_resize(values, nvertices);
+ if(res != RES_OK) goto error;
+
+ FOR_EACH(ivertex, 0, nvertices) {
+ const double nu = darray_double_cdata_get(wavenumbers)[ivertex];
+ darray_double_data_get(values)[ivertex] = line_value(tree, iline, nu);
+ }
+
+exit:
+ return res;
+error:
+ log_err(tree->sln, "Error evaluating the line mesh -- %s.\n",
+ res_to_cstr(res));
+ goto exit;
+}
+
/*******************************************************************************
* Local function
******************************************************************************/
@@ -265,6 +295,7 @@ line_mesh
const size_t iline,
const size_t nvertices_hint)
{
+ struct darray_double values; /* List of evaluated values */
struct darray_double wavenumbers; /* List of considered wavenumbers */
const struct shtr_line* shtr_line = NULL;
const struct molecule_params* mol_params = NULL;
@@ -276,12 +307,13 @@ line_mesh
size_t i;
res_T res = RES_OK;
- ASSERT(tree && line && nvertices_hint);
+ ASSERT(tree && nvertices_hint);
ASSERT(iline < darray_line_size_get(&tree->lines));
line = darray_line_cdata_get(&tree->lines) + iline;
SHTR(lines_view_get_line(tree->lines_view, iline, &shtr_line));
+ darray_double_init(tree->sln->allocator, &values);
darray_double_init(tree->sln->allocator, &wavenumbers);
/* Adjust the hint on the number of vertices. This is not actually the real
@@ -301,6 +333,8 @@ line_mesh
(tree, line, mol_params, line->gamma_l, nvertices_adjusted, &wavenumbers);
if(res != RES_OK) goto error;
+ eval_mesh(tree, iline, &wavenumbers, &values);
+
line_nvertices = darray_double_size_get(&wavenumbers);
res = darray_vertex_resize
(&tree->vertices, tree_nvertices + line_nvertices*2 - 1);
@@ -310,24 +344,25 @@ line_mesh
goto error;
}
- /* TODO compute the line value for each vertex */
-
/* Copy the first half of the line vertices */
i = tree_nvertices;
FOR_EACH_REVERSE(ivertex, line_nvertices-1, 0) {
- darray_vertex_data_get(&tree->vertices)[i].wavenumber =
- (float)darray_double_cdata_get(&wavenumbers)[ivertex];
+ struct vertex* vtx = darray_vertex_data_get(&tree->vertices) + i;
+ vtx->wavenumber = (float)darray_double_cdata_get(&wavenumbers)[ivertex];
+ vtx->ka = (float)darray_double_cdata_get(&values)[ivertex];
++i;
}
/* Copy the vertex of the line center and the second half of the line
* vertices */
FOR_EACH(ivertex, 0, line_nvertices) {
- darray_vertex_data_get(&tree->vertices)[i].wavenumber =
- (float)darray_double_cdata_get(&wavenumbers)[ivertex];
+ struct vertex* vtx = darray_vertex_data_get(&tree->vertices) + i;
+ vtx->wavenumber = (float)darray_double_cdata_get(&wavenumbers)[ivertex];
+ vtx->ka = (float)darray_double_cdata_get(&values)[ivertex];
++i;
}
exit:
+ darray_double_release(&values);
darray_double_release(&wavenumbers);
return res;
error: