MCPcopy Create free account
hub / github.com/NanoComp/meep / derived_component_func

Function derived_component_func

src/vec.cpp:1492–1550  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1490}
1491
1492field_rfunction derived_component_func(derived_component c, const grid_volume &gv, int &nfields,
1493 component cs[12]) {
1494 switch (c) {
1495 case Sx:
1496 case Sy:
1497 case Sz:
1498 case Sr:
1499 case Sp:
1500 switch (c) {
1501 case Sx:
1502 cs[0] = Ey;
1503 cs[1] = Hz;
1504 break;
1505 case Sy:
1506 cs[0] = Ez;
1507 cs[1] = Hx;
1508 break;
1509 case Sz:
1510 cs[0] = Ex;
1511 cs[1] = Hy;
1512 break;
1513 case Sr:
1514 cs[0] = Ep;
1515 cs[1] = Hz;
1516 break;
1517 case Sp:
1518 cs[0] = Ez;
1519 cs[1] = Hr;
1520 break;
1521 default: break; // never reached
1522 }
1523 nfields = 4;
1524 cs[2] = direction_component(Ex, component_direction(cs[1]));
1525 cs[3] = direction_component(Hx, component_direction(cs[0]));
1526 return poynting_fun;
1527
1528 case EnergyDensity:
1529 case D_EnergyDensity:
1530 case H_EnergyDensity:
1531 nfields = 0;
1532 if (c != H_EnergyDensity) FOR_ELECTRIC_COMPONENTS(c0) {
1533 if (gv.has_field(c0)) {
1534 cs[nfields++] = c0;
1535 cs[nfields++] = direction_component(Dx, component_direction(c0));
1536 }
1537 }
1538 if (c != D_EnergyDensity) FOR_MAGNETIC_COMPONENTS(c0) {
1539 if (gv.has_field(c0)) {
1540 cs[nfields++] = c0;
1541 cs[nfields++] = direction_component(Bx, component_direction(c0));
1542 }
1543 }
1544 if (nfields > 12) meep::abort("too many field components");
1545 return energy_fun;
1546
1547 default: meep::abort("unknown derived_component in derived_component_func");
1548 }
1549 return 0;

Callers 3

output_hdf5Method · 0.85
get_array_sliceMethod · 0.85
max_absMethod · 0.85

Calls 6

direction_componentFunction · 0.85
component_directionFunction · 0.85
abortFunction · 0.85
has_fieldMethod · 0.80
FOR_ELECTRIC_COMPONENTSFunction · 0.70
FOR_MAGNETIC_COMPONENTSFunction · 0.70

Tested by

no test coverage detected