DataMuseum.dk

Presents historical artifacts from the history of:

RC4000/8000/9000

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RC4000/8000/9000

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦eaf8e64ec⟧ TextFile

    Length: 21504 (0x5400)
    Types: TextFile
    Names: »sethlmtx«

Derivation

└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ.  Detaljer om "HC8000" projekt.
    └─⟦0364f57e3⟧ 
        └─⟦787c125fb⟧ »adjprocfile« 
└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ.
    └─⟦b2ec5d50f⟧ 
        └─⟦787c125fb⟧ »adjprocfile« 
            └─⟦this⟧ 

TextFile



;       set_hlm_tr n-dim      * page 1   23 01 79, 15.32;  

;  set_hlm_2
;  ********

set_hlm = set 1
if listing.yes
char 10 12 10

set_hlm = set 1

set_hlm = algol

external integer procedure set_hlm
___________________________________
_                (N, x);  
array N, x;  

comment

N               (call and return, array)
contains the object system, i.e. the system to which 
the source systems in x can be transformed. the first 4 
bytes are not used by the procedure and may thus contain
invar/outvar parameters. the content of N is as follows:

byte        type        name        content
1-4          -           -         not used
5-6          i          fix        no. of givENPoints
7-8          i          new        no. of new points
9-10         i          grp        no of source groups
11-12        i          dim        no. of axes
13-16        l          C_f(0)     station nmb in GI. format
17-20        l          C_f(1)     northing coordinate
21-24        l          C_f(2)     easting coordinate
25-28        l          C_f(3)     error info (not instld)
29-44        l                     next set of coord etc
.......
.......
13+16*stats  r          reg_lab    reg_lab of the coord system
-> 48+16*stats                     (stats=all=fix+new)

(continued)
;  

\f



comment set_hlm_tr n-dim      * page 2   23 01 79, 15.32
0 1 2 3 4 5 6 7 8 9 ;  

comment

x                (call and return)
contains all source systems which should be transformed 
to the object system in N. the first 4 bytes are not 
used by the proc, and is available for invar/outvar.
the content is as follows:

byte        type        name        content
1-4          -           -          not used
5-8          l          ident       source identification
9-10         i          obs_count   no of points in source
11-12        i          cond        conditions: 
_                                   0 -> no conditions
_                                   1 -> iso-scale
_                                   2 -> orthogon. axes
_                                   3 -> konf. transf = iso+orth
13-16        r          P_t         weight of coord
17-20        r          m           aposteori mean error
21-24        r          enp      norm of reduced rhs
25-52        r          trp         transformation params
25-26        i          dim_f       dimension of coord sys
27-28        -           -          not used
29-32        l          n0          northing of translat
33-36        l          e0          easting of translat
37-52        r          trp         rot  (row-wize)
53-54        i          index       index of 1. point in x
_                                   (e.g. 7. point in N
_                                   has index 7)
55-58        i          index       index of 2.point
........
........
53+2*obsct   r          x_f         x_coord of 1. point
-> 58+2*obsct
........
........
53+6*obsct   r          y_f         y_coord of first pnt
........
........
53+10*obsct  r          w_f         weight red of 1.point coord
........
........
52+14*obsct      is the last byte of 1.group.
next group begins with  53+14*obscount.
a group has a length of 48+14*obscount as the length/sum
bytes only are used once.

ext used
________
nll_trans
hlm_u_tr

Prog.: Knud Poder NOV 1978

;  

\f



comment set_hlm_tr n-dim      * page 3   23 01 79, 15.32
0 1 2 3 4 5 6 7 8 9 ;  

begin
integer       field    fix_f, new_f, dim_f;  
integer                ALL, FIX, NEW, dim, NEQ_lng;  

fix_f := 6;  
new_f := fix_f + 2;  
dim_f := new_f + 4;
FIX := N.fix_f;  
NEW := N.new_f;  
dim := N.dim_f;
comment
write(out, nl, 1, <:FIX,NEW,dim:>, <<-dddddd>, FIX, NEW, dim);  
ALL := FIX + NEW;  
NEQ_lng := (NEW*dim + 2)*(NEW*dim + 1);  

begin 
  array                 NEQ(1:NEQ_lng);  

  long    array         SING(1:1+(NEW*dim)//48);  

  integer               t, t1, t2, RED, OBS, GG, G, g, P_base,  
  _                     dim_1, new, GRP, exp_lim, max_lim,  
  _                     obs_count, unk, unk_1, UNK, UNK_1, 
  _                     iso_mask, uni_mask, ort_mask;  

  real                  M, m, m3, enp, ENP;  

  long                  w;  

  long          field   ident_f;  

  integer       field   obs_count_f, grp, grp_base, cond;  

  real    array field   c_x, rhs, x_f, y_f, P_f, trp, reg_lab;  

  boolean               tpd, solve, SOLVE, cond_appl;  

  integer array field   index;  

  real          field   Pt_f, enp_f, ENP_f, m_f, M_f;  

  long    array field   C_f, C_base, trl;  

  _
  comment init params;  
  ____________________
  P_base := abs_addr(x) + 4;  
  dim_1  := dim + 1;  
  explim := 30;  
  maxlim := 0;  
  grp    := new_f + 2;;  
  GRP    := N.grp;  
  C_base := 12 - 4*dim_1;;  
  tpd    := false add (8 shift 6 add 6);  
  cond_appl := false;

\f



comment set_hlm_tr n-dim      * page 4   23 01 79, 15.32
0 1 2 3 4 5 6 7 8 9 ;  


_
comment loop without and with conditions;
_________________________________________
for GG := 0 step 1 until 1 do
begin
  _
  comment loop over all sources;  
  ______________________________
  ENP := 0;  
  repeat 
  begin

    _
    comment clear normals;  
    ______________________
    for t := 1 step 1 until NEQ_lng do
    NEQ(t) := 0;  

    _
    comment init grp_base;  
    ______________________
    grp_base := 4;  

    OBS := - dim*NEW;  
    RED := 0;  

\f




    _
    comment loop over source;  
    __________________________
    for grp := 1 step 1 until GRP do
    begin

      _
      comment fields and params in x-source;  
      _______________________________________
      ident_f     := grp_base + 4;  
      obs_count_f := ident_f + 2;  
      cond        := obs_count_f + 2;  
      Pt_f        := cond + 4;  
      m_f         := Pt_f + 4;  
      enp_f       := m_f  + 4;  
      trl         :=
      trp         := enp_f;  
      index       := trp + 4*(dim + 1)*dim + 4;  
      obs_count   := x.obs_count_f;  
      cond        := x.cond;
      cond_appl   := cond_appl or cond <> 0;
      ort_mask    := cond shift (-12);  
      iso_mask    := cond extract 6;  
      uni_mask    := (cond shift (-6)) extract 6;  
      cond        := 0;  
      x_f         := index - 2*obs_count;  
      P_f         := x_f   + 4*dim_1*obs_count;  
      m           := '50;  
      enp         := 0;  
      m3          := 3;  
      g           := 0;  
comment * page  ;

      _
      comment count conditions;  
      _________________________
if GG = 1 then
begin
      t := ort_mask;  
      while t <> 0 do
      begin
        if t extract 1 = 1 then cond := cond + 1;  
        t := t shift (-1);  
      end;  
      t := uni_mask;  
      while t <> 0 do
      begin
        if t extract 1 = 1 then cond := cond + 1;  
        t := t shift (-1);  
      end;  
      t := iso_mask;  
      while t <> 0 do
      begin
        if t extract 1 = 1 then cond := cond + 1;  
        t := t shift (-1);  
      end;  

      comment test af iso-uni konflikt mangler;  
end
else
begin
cond      :=
ort_mask  := 
iso_mask  :=
uni_mask  := 0;
end;
 
comment write(out,nl,1,<:obscount, cond:>, obscount,cond);

\f



comment set_hlm_tr n-dim      * page 6   23 01 79, 15.32
0 1 2 3 4 5 6 7 8 9 ;  

      _
      comment group block;  
      ____________________

      begin

        array                coef(1:dim*dim*obs_count
        _                         + (dim_1*dim+1)*cond), 
        _                    w_neq(0:dim_1*dim_1 + 2*cond + 1);  

        integer array        cca(-1:dim1+1+cond+2*obs_count),  
        _                    cond_pair1, cond_pair2(0:cond);  

        real                 m_crit, P_t, red_fct, max_w,   
        _                    sum, c1, c2, last_enp;

        integer              t, t1, t2, t3, col, col1, col2,  
        _                    i, u, obs, red;  

        long    array        N_tr(1:dim);  

        real    array field  cond_pnt, c_p;  

        boolean              headline;  

        _
        comment set cond_pairs;  
        _______________________
        t1   := 0;  

        comment ortho-conditions;  
        t    := ort_mask;  
        col1 :=
        col2 := 1;  
        while t <> 0 do
        begin
          col2 := col2 + 1;  
          if col2 > dim then
          begin
            col1 := col1 + 1;  
            col2 := col1 + 1;  
          end;  
          if t extract 1 = 1 then
          begin
            t1 := t1 + 1;  
            cond_pair1(t1) := col1;  
            cond_pair2(t1) := col2;  
          end;  
          t := t shift (-1);  
        end;  

        comment uni-conditions;  
        t    := uni_mask;  
        col1 := 0;  
        while t <> 0 do
        begin
          col1 := col1 + 1;  
          if t extract 1 = 1 then 
          begin
            t1 := t1 + 1;  
            cond_pair1(t1) := col1;  
            cond_pair2(t1) := 0;  
          end;  
          t := t shift (-1);  
        end;  

\f



comment set_hlm_tr n-dim      * page 7   23 01 79, 15.32
0 1 2 3 4 5 6 7 8 9 ;  

        comment iso-conditions;  
        t    := iso_mask;  
        col1 :=
        col2 := 1;  
        while t <> 0 do
        begin
          col2 := col2 + 1;  
          if col2 > dim then
          begin
            col1 := col1 + 1;  
            col2 := col1 + 1;  
          end;  
          if t extract 1 = 1 then
          begin
            t1 := t1 + 1;  
            cond_pair1(t1) :=  col1;  
            cond_pair2(t1) := -col2;  
          end;  
          t := t shift (-1);  
        end;  














        _
        comment fields in coef;  
        _______________________
        c_x := 0;  
        cond_pnt := 4*dim*obs_count;  
        rhs      := cond_pnt + 4*cond*(dim_1*dim+1);  

        _
        comment absaddr of columns of coeff;  
        ____________________________________
        cca(-1) := 2*NEQ_lng;  
        cca( 0) := abs_addr(NEQ);  
        cca( 1) := P_base + P_f;  
        cca( 2) := abs_addr(coef)  + 4;  

        for t := 3 step 1 until dim_1 + 1 do
        cca( t) := cca(t-1) + 4*obs_count;  

        for t := dim_1 + 2 step 1 until dim_1 + 1 + cond do
        cca( t) := cca(t-1) + 4*(dim*dim_1 + 1);  

\f



comment set_hlm_tr n-dim      * page 8   23 01 79, 15.32
0 1 2 3 4 5 6 7 8 9 ;  

        _
        comment count new and set x-ref;  
        ________________________________
        new := 0;  

        for t := 1 step 1 until obs_count do
        begin
          t2 := dim_1 + cond + 1 + t;  
          cca(t2) :=
          i       := x.index(t) - FIX - 1;  
          if i >= 0 then
          begin
            cca(t2+obs_count) := new;  
            new               := new + 1;  
            for t1 := t - 1 step -1 until 1 do
            if x.index(t) = x.index(t1) then
            begin
              cca(t2+obs_count) := cca(t2+obs_count+t1-t);  
              new               := new - 1;  
              t1                := 0;  
            end t1-loop;  
          end i >= 0
          else
          cca(t2+obs_count) := -1;  
        end t-loop;  

        if fp_mode(1) then
        for t := -1 step 1 until 
        _         dim1 + 1 + cond + 2*obs_count do
        write(out, nl, 1, <<-ddddddd>, t, cca(t));  

        _
        comment obs-eq loop;  
        ____________________
        Pt := 1/(x.Pt_f);
        last_enp  := '-3;
        repeat 
        begin

          _
          comment solve-control;  
          ______________________
          solve       := enp < 3.0
          _           and -,( abs(last_enp - enp)< 0.4 and g>= 10);
          last_enp := enp;
<*
          headline := -, solve or g = 10;  
*>
headline := true;
          obs      := dim*obs_count + cond - dim*dim1;  
          red      := 0;  
          g        := g + 1;  
          if fp_mode(8) then
          write(out, nl, 2, <:pass:>, <<ddd>, g);
          m_crit   := m* ( if g>1 then m3 else '4);

          _
          comment clear coef-array;  
          _________________________
          for t := dim*dim*obs_count + (dim_1*dim+1)*cond
          _        step -1 until 1 do coef(t) := 0;  

\f



comment set_hlm_tr n-dim      * page 9   23 01 79, 15.32
0 1 2 3 4 5 6 7 8 9 ;  

          _
          comment obs_eq;  
          _______________
          for t := 1 step 1 until obs_count do
          begin
            C_f         := C_base + 4*(dim_1+1)*x.index(t);  
            x.P_f(t)    := Pt;  
            coef.rhs(t) := '-6*(N.C_f(1) - hlm_u_tr(
            _                      x.x_f(t+i*obs_count), i, 
            _                      x.trp, N_tr(u), u));  
            red_fct     := abs coef.rhs(t);  
            for col := 2 step 1 until dim do
            begin
              max_w                         := 
              coef.rhs(t+(col-1)*obs_count) :=
              _            '-6*(N.C_f(col) - N_tr(col));  
              if abs max_w > red_fct then
              red_fct := abs max_w;  
            end;  

            _
            comment blunder action;  
            _______________________
            if Pt*red_fct > m_crit then
            begin
              red_fct := Pt*red_fct/m_crit;  
              red_fct := if red_fct < 100 then
              _           exp(-red_fct/2) else '-120;  
              x.P_f(t) := red_fct*Pt;  
              red      := red + dim;  

              _
              comment output of blunders;  
              __________________________
<*
              if -, solve or g = 10 then
              begin
*>
                if headline then
                begin
                  headline := false;  
                  write(out, nl, 3, <<-dddddddddddd>, x.ident_f, nl, 1);  
                end;  
                write(out, nl, 1);  
                write_stn(out, N.C_f(0));  
                write(out, sp, 3);  
                for col := 1 step 1 until dim do
                write(out, nl, if col mod 4 = 0 then 1 else 0, 
                <<__-ddd_ddd.ddd>, coef.rhs(t + (col-1)*obs_count));  
                write(out, nl, 1, sp, 14, <<-d.ddd'-dd>, red_fct);  
<*
              end output;  
*>
            end blunder action;  

            _
            comment normalize obs_eq coef;  
            ______________________________
            for col := 1 step 1 until dim do
            begin
              t1           := t + col*obs_count;  
              t2           := t1 - obs_count;  
              coef.c_x(t2) := x.P_f(t)*x.x_f(t1);  
              coef.rhs(t2) := x.P_f(t)*coef.rhs(t2);  
            end col-loop;  

          end t-loop;  

\f



comment set_hlm_tr n-dim      * page 10   23 01 79, 15.32
0 1 2 3 4 5 6 7 8 9 ;  

          _
          comment condition equations;  
          ____________________________
          c_p := cond_pnt + 4;  
          for t := 1 step 1 until cond do
          begin
            col1 := cond_pair1(t);  
            col2 := cond_pair2(t);  
            sum  := 0;  
            case 2 - sign(col2) of
            begin

              comment case 1, ortho-condition;  
              ________________________________
              begin
                t2 := dim_1*(dim - 1);  
                for t1 := 0 step dim_1 until t2 do
                begin
                  c1                :=
                  coef.c_p(col1+t1) := x.trp(2+col2+t1);  
                  c2                :=
                  coef.c_p(col2+t1) := x.trp(2+col1+t1);  
                  sum               := c1*c2 + sum;  
                end t1-loop;  
                coef.c_p(dim_1*dim) := sum;  
              end case 1;  

              comment case 2, uni-condition;  
              ______________________________
              begin
                t2 := (col1-1)*dim_1 + dim;  
                t3 := 2 + col_1;  
                for t1 := (col1-1)*dim_1+1 step 1 until t2 do
                begin
                  c1           :=
                  coef.c_p(t1) := x.trp(t3);  
                  t3           := t3 + dim_1;  
                  sum          := c1**2 + sum;  
                end;  
                coef.c_p(dim_1*dim) := (sum - 1.0)/2;  
              end case 2;  

              comment case 3, iso-condition;  
              ______________________________
              begin
                t2 := dim_1*(dim - 1);  
                col2 := - col2;  
                for t1 := 0 step dim_1 until t2 do
                begin
                  c1                :=
                  coef.c_p(col1+t1) := x.trp(2+col1+t1);  
                  c2                := 
                  coef.c_p(col2+t1) := -x.trp(2+col2+t1);  
                  sum               := c1**2 - c2**2 + sum;  
                end t1-loop;  
                coef.c_p(dim_1*dim) := sum/2;  
              end case 3;  
            end cases;  

            _
            comment update c_p;  
            ___________________
            c_p := c_p + 4*(dim_1*dim + 1);  
          end t-loop;  

\f



comment set_hlm_tr n-dim      * page 11   23 01 79, 15.32
0 1 2 3 4 5 6 7 8 9 ;  

comment
if fpmode(11) then
          for t := 1 step 1 until dim*dim*obs_count
+ (dim_1*dim+1)*cond do
          write(out, nl, if t mod 5 = 1 then 1 else 0, 
          <<___-d.dd'-dd>, coef(t));  

          _
          comment solve and update source constants;  
          __________________________________________
          m := nll_trans(w_neq, dim, cond,  
          _              if solve then 0 else new, 
          _              cca, obs_count, solve);  

          _
          comment update transf. params;  
          ______________________________
          if solve then
          begin
            t2 := 2 + (dim - 1)*dim1;  
            for t := 2 step dim_1 until t2 do
            begin
              w := '6*w_neq(t-1);  
              x.trl(t) := x.trl(t) + w;  
              for t1 := 1 step 1 until dim do
              x.trp(t+t1) := x.trp(t+t1) + w_neq(t+t1-1);  
            end;  

\f



comment set_hlm_tr n-dim      * page 12   23 01 79, 15.32
0 1 2 3 4 5 6 7 8 9 ;  

            if obs - red > 0 then
            x.m_f   :=
            m       := w_neq(dim*dim1+cond+1)/sqrt(obs-red)  
            else
            x.m_f   :=
            m       := '50;
            x.enp_f :=
            enp     := w_neq(0);  

            if fp_mode(8) then
            begin
              write(out, nl, 2, <:m___=_:>, <<-dd.dd>, m, 
              _         nl, 1, <:enp_=_:>, enp, nl, 1);  
              t2 := 2 + (dim - 1)*dim1;  
              for t := 2 step dim_1 until t2 do
              begin
                write_geo_c(out, x.trl(t), tpd);  
                write_geo_c_r(out, w_neq(t-1), tpd);  
                write(out, nl, 1);  
              end t-loop;  
              for t := 2 step dim_1 until t2 do
              begin
                for t1 := 1 step 1 until dim do
                write(out, <<__-d.ddddd ddddd'-dd>, 
                x.trp(t+t1), w_neq(t+t1-1), nl, 1);  
              end t-loop;  
            end output;  
          end update transf. params  
          else
          begin
            OBS := OBS + obs;  
            RED := RED + red;  
          end;  

        end
        until -, solve;  

      end group-block;  

      _
      comment reset group pointer;  
      ____________________________
      grp_base := index + (2 + 4*dim_1)*obs_count;  

    end grp-loop;  

    _
    comment solve common normals;  
    _____________________________
    if NEW > 0 then
    begin
      max_lim := 0;  

      M := nll_epu(NEQ, NEW*dim + 1, 
      _            exp_lim, max_lim, SING, ENP);  

      if OBS > RED and M > 0 then
      M := sqrt(M/(OBS - RED))  
      else
      begin
        write(out, nl, 1, if M <= 0 then
        <:ej positiv varians:> else <:ej overbestemt:>, nl, 1);  
        M := '5;  
      end;  
if fp_mode(8) then
      write(out, nl, 2, <<___-d.dd>, <:M____=:>, M, nl, 1, 
      <:ENP__=:>, ENP, nl, 1, 
      <:max_l_=:> , <<-dddd>, max_lim, nl, 1);  

\f



comment set_hlm_tr n-dim      * page 13   23 01 79, 15.32
0 1 2 3 4 5 6 7 8 9 ;  

      _
      comment output of sol;  
      ______________________
      t1 := (NEW*dim + 1)*NEW*dim//2;  
      for t := FIX + 1 step 1 until ALL do
      begin
        C_f := C_base + 4*(dim_1 + 1)*t;  
if fp_mode(8) then
begin
        write(out, nl, 1);  
        write_stn(out, N.C_f(0));  
end;
        for t2 := 1 step 1 until dim do
        begin
          w         := '6*NEQ(t1+(t-FIX-1)*dim+t2);  
          N.C_f(t2) := N.C_f(t2) + w;  
if fp_mode(8) then
begin
          write(out, sp, if t2 = 1 then 4 else 15);  
          write_geo_c(out, N.C_f(t2), tpd);  
          write_geo_c(out, w, tpd);  
          write(out, nl, 1);  
end;
        end t2-loop;  
if fp_mode(8) then
        write(out, nl, 1);  
      end;  

if fp_mode(8) then
      write(out, nl, 3);  

    end sol of NEW;  

  end  
  until ENP > 3.0 or NEW = 0;  

if -, cond_appl then GG := 1;
 
 
end GG-loop;
end inner block;  

end;  

end

if ok.no
mode warning.yes

if warning.yes
(mode 0.yes
message set_hlm not ok
lookup set_hlm)

end

finis
▶EOF◀