LOCAL int delete_phys_curves_at_old_node( NODE *oldn, int status) { boolean untrack = NO; CURVE **c; int wtype = FIRST_VECTOR_PHYSICS_WAVE_TYPE; for (c = oldn->in_curves; c && *c; ++c) { if (wave_type(*c) < wtype) continue; untracked_hyper_surf(*c) = YES; untrack = YES; status = REPEAT_TIME_STEP; } for (c = oldn->out_curves; c && *c; ++c) { if (wave_type(*c) < wtype) continue; untracked_hyper_surf(*c) = YES; untrack = YES; status = REPEAT_TIME_STEP; } if (untrack == YES) { (void) printf("WARNING in delete_phys_curves_at_old_node(), " "turning off tracking of vector curves at node\n"); print_node(oldn); } return status; } /*end delete_phys_curves_at_old_node*/
EXPORT int reg_to_mach_diff_reconfigure( O_CURVE **newc, O_CURVE **oldc, NODE *oldn) { int i; debug_print("mach_diff","Entering reg_to_mach_diff_reconfigure()\n"); if (debugging("mach_diff")) { (void) printf("WARNING in diffraction_node_propagate(), " "bifurcation from regular diffraction " "to mach difraction.\n"); } if (newc[5]->orient == POSITIVE_ORIENTATION) { start_status(oldc[5]->curve) = INCIDENT; start_status(newc[5]->curve) = INCIDENT; } else { end_status(oldc[5]->curve) = INCIDENT; end_status(newc[5]->curve) = INCIDENT; } if (newc[0]->orient == POSITIVE_ORIENTATION) { start_status(oldc[0]->curve) = TRANSMITTED; start_status(newc[0]->curve) = TRANSMITTED; } else { end_status(oldc[0]->curve) = TRANSMITTED; end_status(newc[0]->curve) = TRANSMITTED; } /* untrack any reflected waves */ for (i = 1; i < 4; i++) if (newc[i]->curve != NULL) untracked_hyper_surf(newc[i]->curve) = YES; node_type(oldn) = TRANSMISSION_NODE; debug_print("mach_diff","Leaving reg_to_mach_diff_reconfigure()\n"); return REPEAT_TIME_STEP_NODE; } /*end reg_to_mach_diff_reconfigure*/