|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 8448 (0x2100) Types: TextFile Names: »nlloctx«
└─⟦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⟧
; nll_oc_tx * page 1 15 03 78, 11.14; ; nll_oc ; ****** if listing.yes char nl ff nl nll_oc = set 1 nll_oc = algol external integer procedure nll_oc _________________________________ _ (OC_a, unk, cca, obs_count, epu, epu_lng, sol); value unk, obs_count, epu_lng, sol; array OC_a; integer unk, obs_count, epu_lng; integer array cca; zone epu; boolean sol; comment nll_oc (return, integer proc) service proc for orientation unknowns. the procedure has a value equal to the array field value for the unknowns in the array OC_a in the sol case. the value in the -, sol case is irrelevant. OC_a (array, return) work array of length at least 1 : (unk+1)*(unk+2)//2. the array needs no initialization and should not be a fielded array. the content becomes the upper triangular CHOLESKY matrix, and when sol is true also the solutions, fielded by the value of nll_oc. unk (call, integer) the number of unknowns cca (call, integer array) the abs addr of the first elements in each col of obs-eq incl. the rhs. the last is not used in the -, sol case, but then cca(0) = first oc coeff in obs-eq coeff, cca(unk+2) = first coord col addr in the array pointed by cca _ the cols must be consecutive cca(unk+3) = coord_pr_stat cca(unk+4) = eq_pr_stat obs_count (call, integer) the number of obs_eq (mostly observations*eq_pr_stat) epu (call and return, zone) a zone buffer opened to the epu and after an outrec_6 of the full buffer length. the zone is left in the same state. the zone should have not less than 4*24 bytes. epu_lng (call, integer) the zone buffer length in bytes sol (call, boolean) true when the orientation unknowns are computed and false when their cholesky reduction is done \f comment nll_oc_tx * page 2 15 03 78, 11.14 0 1 2 3 4 5 6 7 8 9 ; comment _ ext. used __________ abs_addr Prog: Knud Poder, 19 FEB 1978 GI_nr: 78010 ; begin integer t, t1, unk1, row, col, _ coef_pnt, coef_step, status_addr, _ coord_pr_stat, eq_pr_stat, _ cca_disp, cca_step, _ z_mla_obs_count, mls_m1, z_mls_m1, _ epu_op, chl_30, stp_1; real status; integer array cwa(1:unk+1), coord_pnt(1:3); integer array field word; _ comment proc value; ___________________ nll_oc := (unk + 1)*unk*2; _ comment init of variables; __________________________ unk1 := if sol then (unk + 1) else unk; epu_lng := epu_lng - 24; word := 0; _ comment epu-instr; __________________ zmla_obs_count := 1 shift 23 + 2 shift 12 + obs_count; mls_m1 := 0 shift 23 + 3 shift 12 - 1; z_mls_m1 := 1 shift 23 + 3 shift 12 - 1; chl_30 := 0 shift 23 + 8 shift 12 + 30; stp_1 := 4095 shift 12 + 1; _ comment abs_addresses; ______________________ status_addr := abs_addr(status); cwa(1) := abs_addr(OC_a) + 4; for t := 1 step 1 until unk do cwa(t+1) := cwa(t) + 4*t; _ comment reduction of oc-normals; ________________________________ _ comment clear orientation normals; __________________________________ for t := ((unk1 + 1)*unk1)//2 step - 1 until 1 do OC_a(t) := 0.0; \f comment nll_oc_tx * page 3 15 03 78, 11.14 0 1 2 3 4 5 6 7 8 9 ; _ comment orientation normals; ____________________________ for t := 1 step 1 until unk1 do begin for t1 := 1 step 1 until t do begin epu.word(1) := zmla_obs_count; epu.word(2) := cca(t); epu.word(3) := cca(t1); epu.word(4) := mls_m1 + t1; epu.word(5) := cwa(t); epu.word(6) := cwa(t1); epu.word(7) := chl_30; epu.word(8) := status_addr; epu.word(9) := 0; word := word + 18; _ comment test epu action; ________________________ if word > epu_lng then begin epu.word(1) := stp_1; changerec_6(epu, word + 6); outrec_6(epu, epu_lng + 24); word := 0; end; end t1-loop; end t-loop; _ comment start epu; __________________ if word <> 0 then begin epu.word(1) := stp_1; changerec_6(epu, word + 6); outrec_6(epu, epu_lng + 24); word := 0; end; _ comment back-sol of normals; ____________________________ if sol then begin row := ((unk1 + 1)*unk1)//2; col := row - unk; _ comment pseudo-enp; ___________________ OC_a(row+1) := status := 0; for t := row - 1 step -1 until col do status := status + OC_a(t)**2; OC_a(row+1) := sqrt(status); _ comment mean error; ___________________ if obs_count - unk > 0 then OC_a(row) := OC_a(row)/sqrt(obs_count - unk); _ comment back-sol; _________________ for t := unk - 1 step -1 until 0 do begin row := row - 1; col := col - 1; OC_a(row) := OC_a(row)/OC_a(col); for t1 := 1 step 1 until t do begin col := col - 1; OC_a(row-t1) := OC_a(row-t1) - OC_a(row)*OC_a(col); end t1-loop; end t-loop; end sol-clause else \f <* nll_oc_tx * page 4 15 03 78, 11.14 0 1 2 3 4 5 6 7 8 9 *> <*reduce oc-normal coeff*> __________________________ begin coef_pnt := cca(0); coord_pnt(1) := cca(unk+2); coord_pr_stat := cca(unk+3); eq_pr_stat := cca(unk+4); for col := 2 step 1 until coord_pr_stat do coord_pnt(col) := coord_pnt(col-1) + 4*obs_count; cca_disp := 0; cca_step := 4*eq_pr_stat; coef_step := 4*unk; obs_count := obs_count//eq_pr_stat; epu_op := 1 shift 23 + 2 shift 12 <*z_mla*> _ + eq_pr_stat; _ comment clear oc part of coef_zn; _________________________________ epu.word(1) := 1 shift 23 + 4 shift 12 <*clear and store*> _ + coord_pr_stat*unk*obs_count; epu.word(2) := epu.word(3) := coef_pnt; word := word + 6; _ comment loop over objects; __________________________ for t := 1 step 1 until obs_count do begin _ comment loop over coord cols; _____________________________ for col := 1 step 1 until coord_pr_stat do begin _ comment col of oc-oc coeff; ___________________________ for t1 := 1 step 1 until unk do begin epu.word(1) := epu_op; epu.word(2) := coord_pnt(col) + cca_disp; epu.word(3) := cca(t1) + cca_disp; epu.word(4) := mls_m1 + t1; epu.word(5) := coef_pnt; epu.word(6) := cwa(t1); epu.word(7) := chl_30; epu.word(8) := status_addr; epu.word(9) := 0; word := word + 18; \f comment nll_oc_tx * page 5 15 03 78, 11.14 0 1 2 3 4 5 6 7 8 9 ; _ comment test epu action; ________________________ if word > epu_lng then begin epu.word(1) := stp_1; changerec_6(epu, word + 6); outrec_6(epu, epu_lng + 24); word := 0; end; end t1-loop; _ comment move obs-eq coef-pointer; _________________________________ coef_pnt := coef_pnt + coef_step; end col-loop; _ comment move oc-array pointer; ______________________________ cca_disp := cca_disp + cca_step; end t-loop; _ comment start epu; __________________ if word <> 0 then begin epu.word(1) := stp_1; changerec_6(epu, word + 6); outrec_6(epu, epu_lng + 24); word := 0; end; end no sol clause; end nll_oc; end if ok.no mode warning.yes if warning.yes (mode 0.yes message nll_oc not ok lookup nll_oc) end ▶EOF◀