Skip to content

Commit 4e42ffd

Browse files
committed
get_GDSII_prism_data wrapper
1 parent df29fde commit 4e42ffd

3 files changed

Lines changed: 19 additions & 16 deletions

File tree

scheme/meep-ctl-swig.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ ctlio::cnumber_list make_casimir_g_kz(double T, double dt, double sigma, meep::f
5757

5858
ctlio::integer_list GDSII_layers(const char *fname);
5959
meep::volume GDSII_vol(const char *fname, int layer = -1, double zmin = 0, double zmax = 0);
60-
ctlio::simple_prism_list get_GDSII_prisms(const char *GDSIIFile, int Layer = -1, double zmin = 0.0, double zmax = 0.0);
60+
SCM get_GDSII_prism_data(const char *GDSIIFile, int Layer = -1, double zmin = 0.0, double zmax = 0.0);
6161

6262
// wrapper around constructor to fool SWIG
6363
meep::volume_list *make_volume_list(const meep::volume &v, int c, std::complex<double> weight,

scheme/meep.cpp

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -222,17 +222,22 @@ volume GDSII_vol(const char *fname, int layer, double zmin, double zmax) {
222222
return meep_geom::get_GDSII_volume(fname, layer, zmin, zmax);
223223
}
224224

225-
ctlio::simple_prism_list get_GDSII_prisms(const char *GDSIIFile, int Layer, double zmin, double zmax) {
225+
/* We have to jump through some hoops here because the geometric_object data type used
226+
in meepgeom (from libctlgeom) is different from the generated ctlio::geometric_object.
227+
So we take the list of prisms from meep_geom::get_GDSII_prisms and return a simple
228+
Scheme list of triples (vertices height axis). meep.scm then defines a higher-level
229+
function get-GDSII-prisms that constructs the actual prism objects again */
230+
SCM get_GDSII_prism_data(const char *GDSIIFile, int Layer, double zmin, double zmax) {
226231
geometric_object_list go = meep_geom::get_GDSII_prisms(NULL, GDSIIFile, Layer, zmin, zmax);
227-
ctlio::simple_prism_list res;
228-
res.num_items = go.num_items;
229-
res.items = new ctlio::simple_prism[res.num_items];
230-
for (int i = 0; i < res.num_items; ++i) {
232+
SCM res = SCM_EOL;
233+
for (int i = go.num_items - 1; i >= 0; --i) {
231234
prism *p = go.items[i].subclass.prism_data;
232-
res.items[i].vertices.num_items = p->vertices.num_items;
233-
res.items[i].vertices.items = p->vertices.items;
234-
res.items[i].height = p->height;
235-
res.items[i].axis = p->axis;
235+
res = scm_cons(scm_list_3(ctl_convert_list_to_scm(make_vector3_list(p->vertices.num_items, p->vertices.items)),
236+
ctl_convert_number_to_scm(p->height),
237+
ctl_convert_vector3_to_scm(p->axis)),
238+
res);
239+
free(p->vertices.items);
240+
// fixme: free the rest of the prism data
236241
free(p);
237242
}
238243
delete[] go.items;

scheme/meep.scm.in

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1110,12 +1110,10 @@
11101110

11111111
(export-type (make-list-type 'integer))
11121112

1113-
(define-class simple-prism no-parent
1114-
(define-property vertices no-default (make-list-type 'vector3))
1115-
(define-property height no-default 'number)
1116-
(define-property axis no-default 'vector3))
1117-
(export-type (make-list-type 'simple-prism))
1118-
1113+
(define* (get-GDSII-prisms m GDSIIFile #:optional (layer -1) (zmin 0) (zmax 0))
1114+
(map (lambda (data)
1115+
(make prism (material m) (center auto-center) (vertices (car data)) (height (cadr data)) (axis (caddr data))))
1116+
(get-GDSII-prism-data GDSIIFile layer zmin zmax)))
11191117

11201118
; ****************************************************************
11211119
; harminv functions for extracting bands, etcetera

0 commit comments

Comments
 (0)