| 1136 | } |
| 1137 | |
| 1138 | void geom_epsilon::sigma_row(meep::component c, double sigrow[3], const meep::vec &r) { |
| 1139 | vector3 p = vec_to_vector3(r); |
| 1140 | |
| 1141 | boolean inobject; |
| 1142 | material_type material = |
| 1143 | material_of_unshifted_point_in_tree_inobject(p, restricted_tree, &inobject); |
| 1144 | |
| 1145 | int destroy_material = 0; |
| 1146 | if (material.which_subclass == MTS::MATERIAL_TYPE_SELF) { material = default_material; } |
| 1147 | if (material.which_subclass == MTS::MATERIAL_FUNCTION) { |
| 1148 | material = eval_material_func(material.subclass.material_function_data->material_func, p); |
| 1149 | destroy_material = 1; |
| 1150 | } |
| 1151 | |
| 1152 | sigrow[0] = sigrow[1] = sigrow[2] = 0.0; |
| 1153 | if (material.which_subclass == MTS::MEDIUM) { |
| 1154 | susceptibility_list slist = type(c) == meep::E_stuff |
| 1155 | ? material.subclass.medium_data->E_susceptibilities |
| 1156 | : material.subclass.medium_data->H_susceptibilities; |
| 1157 | for (int j = 0; j < slist.num_items; ++j) |
| 1158 | if (susceptibility_equiv(&slist.items[j], ¤t_pol->user_s)) { |
| 1159 | int ic = meep::component_index(c); |
| 1160 | switch (ic) { // which row of the sigma tensor to return |
| 1161 | case 0: |
| 1162 | sigrow[0] = slist.items[j].sigma_diag.x; |
| 1163 | sigrow[1] = slist.items[j].sigma_offdiag.x; |
| 1164 | sigrow[2] = slist.items[j].sigma_offdiag.y; |
| 1165 | break; |
| 1166 | case 1: |
| 1167 | sigrow[0] = slist.items[j].sigma_offdiag.x; |
| 1168 | sigrow[1] = slist.items[j].sigma_diag.y; |
| 1169 | sigrow[2] = slist.items[j].sigma_offdiag.z; |
| 1170 | break; |
| 1171 | default: // case 2: |
| 1172 | sigrow[0] = slist.items[j].sigma_offdiag.y; |
| 1173 | sigrow[1] = slist.items[j].sigma_offdiag.z; |
| 1174 | sigrow[2] = slist.items[j].sigma_diag.z; |
| 1175 | break; |
| 1176 | } |
| 1177 | break; |
| 1178 | } |
| 1179 | } |
| 1180 | |
| 1181 | if (destroy_material) material_type_destroy(material); |
| 1182 | } |
| 1183 | |
| 1184 | /* make multilevel_susceptibility from scheme input data */ |
| 1185 | static meep::susceptibility *make_multilevel_sus(const multilevel_atom *d) { |
nothing calls this directly
no test coverage detected