Selection of Starting Point and Number of Unknowns
The starting
point used to begin the iterative solution process can make a big difference
as to whether convergence is reached or not. The iscloc program
uses each of the hypocentres input for an event in turn as a seed hypocentre
until one of them converges. The user can choose on the instruction
line which hypocentre to use as the first starting point, otherwise they
are ranked automatically. By default an attempt is made to solve for
the depth, location, and time of an event but it is possible to fix one or
more parameters on the instruction line so that they are not solved for -
i.e. the number of unknowns has been reduced.
Each hypocentre
structure has 7 members related to the choice of starting point and the number of unknowns:
-
nsta - number of stations from which phases have been associated with
this hypocentre. Set in whatever function is being used for data input
or in function calc_gap
-
ndefsta - number of stations from which phases were used to solve for
this hypocentre. Set in whatever function is being used for data input.
-
nass - number of phases associated with this hypocentre. Set in whatever function is being used for data input.
-
ndef - number of phases used to solve for this hypocentre. Set in whatever function is being used for data input.
-
mindist - distance in degrees between the epicentre and the closest
station for which a phase was used in the solution. Set in whatever
function is being used for data input or in function calc_gap.
-
azimgap - azimuthal gap. Set in whatever function is being used for data input or in function calc_gap
-
rank - score given to hypocentre in function rank_hyp. The hypocentre with the highest value will be used as the first seed, then the next highest and so on.
Each phase
structure has 1 member related to the ranking of hypocentres:
-
hypid - the ID of the hypocentre that the reporting agency associated
this phase with. Set in whatever function is being used for data input.
The event
structure has 10 members related to the choice of starting point and the number of unknowns:
-
seed_agency - agency code of the hypocentre to be used as the first starting point. Set in function read_instruction
from instruction seed=AGENCY. Can be reset in function init_event.
-
depth_agency - agency code of the hypocentre to take depth from as fixed depth. Set in function read_instruction
from instruction depth=AGENCY.
-
location_agency- agency code of the hypocentre to take latitude, longitude,
and probably depth from to fix location and depth. Set in function
read_instruction
from instruction location=AGENCY.
-
time_agency - agency code of the hypocentre to take time, and probably
location and depth from to fix time, location, and depth. Set in
function read_instruction
from instruction time=AGENCY.
-
fix_on_depdp - either 0 or 1. Set in function read_instruction
. Will be 0 unless fix_on_depdp is included on the
instruction line for this event by the operator.
There is one member of the solution
structure related to the number of unknowns:
-
number_of_unkowns - 0,1,3, or 4. Number of unfixed solution parameters. Set in main
depending on option.
There is one external variable related to the choice of starting point and the number of unknowns assigned in
read_config and corresponding to a line in
config.txt:
-
default_depth - Starting point depth if the hypocentre being
used as seed does not have a depth. Also the depth that a solution
will be fixed to if the location is explicitly fixed but the depth is not.
After an event and its corresponding instructions have been read function init_event
is called to set members of the event structure. These members control
the starting option and, if a smaller number of unknowns is required, the
values that parameters will be fixed to. Function rank_hyp
is then called and gives every hypocentre a ranking. The highest ranked
hypocentre will be used as the first starting point for each option, followed
by the next highest and so on.
It is also possible to fix the depth of a solution by giving instruction fix_on_depdp. If this is done then solution starts using option 1 and function calc_depdp
is called for each hypocentre to calculate a depth phase depth assuming
the source to be at the location given by that hypocentre. The solution
depth is then fixed to the resulting depth phase depth. If depth instruction is also given then the depth phase depth calculation will be done with a starting depth set to this value.
Loops for option and starting point
The iscloc program loops over all possible hypocentres using each as a
starting point or seed until convergence is reached or no more hypocentres
remain. It will first use each starting point to try and solve for
all 4 parameters (option 0) and then, if none of the seeds converge, it will
go back to the first hypocentre and try to solve for location and time using
each seed in turn, fixing the depth (option 1). If that fails then
a series of attempts is made to solve solely for the source time (option
2). It is possible for the operator to explicitly fix one or more parameters
and so skip a set of solution attempts, going directly to a later option.
However, the order in which the options are tried is not adjustable
- to fix the latitude and longitude the operator must also fix the depth.
Here are some of the loop control lines from main.c
/* Option loop */
/* option 0 is free depth , option 1 is fixed depth, option 2 is fixed depth and location. */
for (option=0;option<3;option++){
/* No free depth pass if fixed depth instruction. */
if (e.fixed_depth != NULLVAL || e.fix_on_depdp)
option++;
/* If location is fixed then depth will always be fixed. */
if (e.fixed_lat != NULLVAL)
option++;
/* Seed loop */
hyp=0;
while (hyp<e.numhyps){
/* Unless convergence has been */
/* reached try another seed. */
if (s.converged)
break;
hyp++;
}
/* Don't need another option if converged already. */
if (s.converged)
break;
}