contents

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:


Each phase structure has 1 member related to the ranking of hypocentres:


The event structure has 10 members related to the choice of starting point and the number of unknowns:

There is one member of the solution structure related to the number of unknowns:


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:



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;
    }