static void epsilon(symmetric_matrix *eps, symmetric_matrix *eps_inv, const real r[3], void *edata_v) { epsilon_data *edata = (epsilon_data *) edata_v; real eps_val; #if INVERSION_SYM if (fabs(r[0]) < 0.5*edata->eps_high_x || fabs(r[0]-1.0) < 0.5*edata->eps_high_x) eps_val = edata->eps_high; #else if ((r[0] < edata->eps_high_x && r[0] >= 0.0) || (r[0] >= 1.0 && r[0] - 1.0 < edata->eps_high_x)) eps_val = edata->eps_high; #endif else eps_val = edata->eps_low; eps->m00 = eps->m11 = eps->m22 = eps_val; eps_inv->m00 = eps_inv->m11 = eps_inv->m22 = 1.0 / eps_val; #ifdef WITH_HERMITIAN_EPSILON CASSIGN_ZERO(eps->m01); CASSIGN_ZERO(eps->m02); CASSIGN_ZERO(eps->m12); CASSIGN_ZERO(eps_inv->m01); CASSIGN_ZERO(eps_inv->m02); CASSIGN_ZERO(eps_inv->m12); #else eps->m01 = eps->m02 = eps->m12 = 0.0; eps_inv->m01 = eps_inv->m02 = eps_inv->m12 = 0.0; #endif }
SCM cscalar_field_make(SCM f0) { int i; field_smob *pf; field_smob *pf0 = assert_field_smob(f0); CHK_MALLOC(pf, field_smob, 1); *pf = *pf0; pf->type = CSCALAR_FIELD_SMOB; pf->type_char = 'C'; CHK_MALLOC(pf->f.cs, scalar_complex, pf->N); for (i = 0; i < pf->N; ++i) CASSIGN_ZERO(pf->f.cs[i]); return field2scm(pf); }
SCM cvector_field_make(SCM f0) { int i; field_smob *pf; field_smob *pf0 = assert_field_smob(f0); CHECK(mdata, "init-params must be called before cvector-field-make"); CHK_MALLOC(pf, field_smob, 1); *pf = *pf0; pf->type = CVECTOR_FIELD_SMOB; pf->type_char = 'c'; CHK_MALLOC(pf->f.cv, scalar_complex, 3 * pf->N); for (i = 0; i < pf->N * 3; ++i) CASSIGN_ZERO(pf->f.cv[i]); return field2scm(pf); }