Skip to content

Commit 457f2c2

Browse files
committed
get_GDSII_prism_data wrapper
1 parent 587495e commit 457f2c2

File tree

3 files changed

+20
-17
lines changed

3 files changed

+20
-17
lines changed

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: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -214,19 +214,24 @@ volume GDSII_vol(const char *fname, int layer, double zmin, double zmax) {
214214
return meep_geom::get_GDSII_volume(fname, layer, zmin, zmax);
215215
}
216216

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

scheme/meep.scm.in

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

11231123
(export-type (make-list-type 'integer))
11241124

1125-
(define-class simple-prism no-parent
1126-
(define-property vertices no-default (make-list-type 'vector3))
1127-
(define-property height no-default 'number)
1128-
(define-property axis no-default 'vector3))
1129-
(export-type (make-list-type 'simple-prism))
1130-
1125+
(define* (get-GDSII-prisms m GDSIIFile #:optional (layer -1) (zmin 0) (zmax 0))
1126+
(map (lambda (data)
1127+
(make prism (material m) (center auto-center) (vertices (car data)) (height (cadr data)) (axis (caddr data))))
1128+
(get-GDSII-prism-data GDSIIFile layer zmin zmax)))
11311129

11321130
; ****************************************************************
11331131
; harminv functions for extracting bands, etcetera

0 commit comments

Comments
 (0)