Added debug code to output state variables.

general cleanup - move defs to morse.h
master
AG1LE Mauri 2013-09-25 21:25:34 -04:00
rodzic 54fecec308
commit ec4631649a
10 zmienionych plików z 378 dodań i 632 usunięć

Wyświetl plik

@ -9,6 +9,7 @@
http://www.netlib.org/f2c/libf2c.zip
*/
char debug = '0';
#include "f2c.h"
#include <stdio.h>
@ -37,7 +38,6 @@ int main(int argc, char**argv)
static integer elmhat;
static real spdhat;
int res;
int debug = 0;
FILE *fp;
@ -53,12 +53,12 @@ int main(int argc, char**argv)
fp = fopen(argv[1],"r");
break;
case 3:
debug = 1;
debug = *argv[1];
fp = fopen(argv[2],"r");
}
if (debug)
if (debug=='d')
printf("\nretstat\timax\telmhat\txhat\tltrhat\tx\tpx\tpmax\tspdhat");
L1:
for (n1 = 1; n1 <= 512; ++n1) {
@ -76,7 +76,7 @@ L1:
//bpfdet_(&zrcv, &zdet);
++np;
/* DECIMATE 4 kHz by 40 down to 100Hz - 5 ms sample time for PROCES */
if (np < 30) {
if (np < DECIMATE) {
goto L3;
}
np = 0;
@ -84,8 +84,8 @@ L1:
/* RN = RAND() */
rn = .01f;
retstat = proces_(&x, &rn, &xhat, &px, &elmhat, &spdhat, &imax, &pmax);
printf("\n%f",x);
if (debug)
// printf("\n%f",x);
if (debug=='d')
printf("\n%d\t%d\t%d\t%d\t%f\t%f\t%f\t%f",(int)retstat,(int)imax,(int)elmhat,(int)xhat,x,px,pmax,spdhat);
L3:
;

Wyświetl plik

@ -1,4 +1,4 @@
q
extern int rcvr_(real *, real *);
extern int noise_(real *, real *, real *);
@ -18,3 +18,8 @@ extern int trprob_(integer *, integer *, real *, integer *, real *);
extern int savep_(real *, integer *, integer *, integer *, integer *, real *, integer *, integer *, real *, integer *, integer *, real *);
extern int likhd_(real *, real *, integer *, integer *, real *, integer *, real *, real *);
extern int path_(integer *, integer *, real *, integer *, integer *, real *, integer *);
extern doublereal spdtr_(integer *, integer *, integer *, integer *);
#define FSAMPLE 4000.0 // Sampling Frequency
#define DECIMATE 40 // Decimation
#define SAMPLEDURATION (1000. * DECIMATE) / FSAMPLE // 1000*DECIMATE / FSAMPLE

Wyświetl plik

@ -11,6 +11,7 @@
*/
#include "f2c.h"
#include "morse.h"
/* Common Block Declarations */
@ -42,8 +43,7 @@ struct {
static integer c__1 = 1;
/* Subroutine */ int path_(integer *ip, integer *lambda, real *dur, integer *
ilrate, integer *lamsav, real *dursav, integer *ilrsav)
/* Subroutine */ int path_(integer *ip, integer *lambda, real *dur, integer *ilrate, integer *lamsav, real *dursav, integer *ilrsav)
{
/* Local variables */
static integer i, j, k, n, ixl, ixs, ilelm;
@ -73,41 +73,42 @@ static integer c__1 = 1;
/* Function Body */
for (k = 1; k <= 6; ++k) {
for (i = 1; i <= 5; ++i) {
for (i = 1; i <= 5; ++i) {
/* STATE IDENTITY N: */
n = (i - 1) * 6 + k;
n = (i - 1) * 6 + k;
/* NEW PATH IDENTITY: */
j = (*ip - 1) * 30 + n;
j = (*ip - 1) * 30 + n;
/* NEW LTR STATE: */
if (*lambda != 0) {
goto L50;
}
lamsav[j] = 0;
goto L100;
L50:
lamsav[j] = blkmem_1.memfcn[*lambda + k * 400 - 401];
if (lamsav[j] == 0) {
goto L100;
}
if (*lambda != 0) {
goto L50;
}
lamsav[j] = 0;
goto L100;
L50:
lamsav[j] = blkmem_1.memfcn[*lambda + k * 400 - 401];
if (lamsav[j] == 0) {
goto L100;
}
/* NEW DURATION: */
/* OBTAIN KEYSTATE OF SAVED PATH AND NEW STATE: */
ilelm = blklam_1.ilami[blklam_1.ielmst[*lambda - 1] - 1];
ixl = blklam_1.ilamx[ilelm - 1];
ixs = blks_1.isx[k - 1];
ilelm = blklam_1.ilami[blklam_1.ielmst[*lambda - 1] - 1];
ixl = blklam_1.ilamx[ilelm - 1];
ixs = blks_1.isx[k - 1];
/* CALCULATE DURATION - ADD SAMPLE DURATION 5 ms FOR EACH VALID PATH */
dursav[j] = *dur * (1 - ixs - ixl + (ixs << 1) * ixl) + 5.f;
dursav[j] = *dur * (1 - ixs - ixl + (ixs << 1) * ixl) + SAMPLEDURATION;
/* NEW DATA RATE: */
ilrsav[j] = *ilrate + (i - 3) * blkrat_1.memdel[ilelm + k * 6 -
7];
goto L100;
L100:
;
}
ilrsav[j] = *ilrate + (i - 3) * blkrat_1.memdel[ilelm + k * 6 - 7];
L100:
;
}
}
/* L200: */
return 0;
} /* path_ */

Wyświetl plik

@ -11,6 +11,7 @@
*/
#include "f2c.h"
#include "morse.h"
/* Common Block Declarations */
@ -26,11 +27,10 @@ struct {
#define blkelm_1 blkelm_
/* Subroutine */ int ptrans_(integer *kelem, integer *irate, integer *lambda,
integer *ilrate, real *ptrx, real *psum, real *pin, integer *n)
/* Subroutine */ int ptrans_(integer *kelem, integer *irate, integer *lambda, integer *ilrate, real *ptrx, real *psum, real *pin, integer *n)
{
static real pelem, prate;
extern doublereal spdtr_(integer *, integer *, integer *, integer *);
/* THIS FUNCTION SUBROUTINE RETURNS THE PATH CONDITIONAL TRANSITION */
/* PROBABILITIES TO EACH ALLOWABLE STATE N. */
@ -54,29 +54,27 @@ struct {
/* Function Body */
if (*kelem != blklam_1.ilami[blklam_1.ielmst[*lambda - 1] - 1]) {
goto L100;
goto L100;
}
pin[*n] = *ptrx;
/* HOWEVER, IF CURRENT DATA RATE STATE = 3, THEN TRANS PROB = 0 ... WHY ? */
if (*irate != 3) {
pin[*n] = 0.f;
pin[*n] = 0.f;
}
goto L200;
/* OTHERWISE: */
/* OBTAIN ELEM TRANS PROBS TABLE: */
L100:
pelem = blkelm_1.elemtr[blklam_1.ielmst[*lambda - 1] + (*kelem << 4) - 17]
;
pelem = blkelm_1.elemtr[blklam_1.ielmst[*lambda - 1] + (*kelem << 4) - 17];
/* NEXT COMPUTE ELEM-CONDITIONAL SPEED TRANS PROB: */
prate = spdtr_(irate, ilrate, kelem, &blklam_1.ilami[blklam_1.ielmst[*
lambda - 1] - 1]);
prate = spdtr_(irate, ilrate, kelem, &blklam_1.ilami[blklam_1.ielmst[*lambda - 1] - 1]);
/* TRANS IS THE PRODUCT: */
pin[*n] = (1.f - *ptrx) * pelem * prate;
L200:
*psum += pin[*n];
/* PRINT 50, N, KELEM, IRATE, ILAMI(IELMST(LAMBDA)), PIN(N), PTRX, PELEM, PRATE, PSUM */
/* 50 FORMAT(1X,'PTRANS:',4(I3,2X),5(F8.3,2X)) */
return 0;
} /* ptrans_ */

Wyświetl plik

@ -29,10 +29,10 @@ struct {
static real popt = .9f;
/* System generated locals */
integer i__1, i__2;
integer i1, i2;
/* Local variables */
static integer i__, j, k, n, ip, jsav, nsav;
static integer i, j, k, n, ip, jsav, nsav;
static real psav[25], psum;
static integer iconv[25], ipsav, isavm1, nplus1;
@ -84,156 +84,129 @@ struct {
psum = 0.f;
/* SELECT SIX HIGHEST PROB ELEMENT STATE NODES: */
for (k = 1; k <= 6; ++k) {
*pmax = 0.f;
i__1 = *isave;
for (ip = 1; ip <= i__1; ++ip) {
for (i__ = 1; i__ <= 5; ++i__) {
j = (ip - 1) * 30 + (i__ - 1) * 6 + k;
if (p[j] < *pmax) {
goto L100;
*pmax = 0.f;
i1 = *isave;
for (ip = 1; ip <= i1; ++ip) {
for (i = 1; i <= 5; ++i) {
j = (ip - 1) * 30 + (i - 1) * 6 + k;
if (p[j] >= *pmax) {
*pmax = p[j];
jsav = j;
ipsav = ip;
}
}
}
/* IF FOLLOWING TWO LINES COMMENTED OUT WE GET NSAV = 7 */
if (*pmax >= 1e-6f) {
++nsav;
psum += *pmax;
psav[nsav - 1] = *pmax;
pathsv[nsav] = ipsav;
sort[nsav] = jsav;
}
*pmax = p[j];
jsav = j;
ipsav = ip;
L100:
;
}
}
/* IF FOLLOWING TWO LINES COMMENTED OUT WE GET NSAV = 7 */
if (*pmax >= 1e-6f) {
goto L150;
}
goto L200;
L150:
++nsav;
psum += *pmax;
psav[nsav - 1] = *pmax;
pathsv[nsav] = ipsav;
sort[nsav] = jsav;
L200:
;
}
/* SELECT ENOUGH ADDITIONAL NODES TO MAKE TOTAL */
/* PROBABILITY SAVED EQUAL TO POPT, OR A MAX OF 25: */
L520:
*pmax = 0.f;
i__1 = *isave;
for (ip = 1; ip <= i__1; ++ip) {
for (n = 1; n <= 30; ++n) {
j = (ip - 1) * 30 + n;
i__2 = nsav;
for (i__ = 1; i__ <= i__2; ++i__) {
if (j == sort[i__]) {
goto L500;
do {
*pmax = 0.f;
i1 = *isave;
for (ip = 1; ip <= i1; ++ip) {
for (n = 1; n <= 30; ++n) {
j = (ip - 1) * 30 + n;
i2 = nsav;
for (i = 1; i <= i2; ++i) {
if (j == sort[i]) {
goto L500;
}
}
if (p[j] > *pmax) {
*pmax = p[j];
jsav = j;
ipsav = ip;
}
L500:
;
}
}
/* L510: */
}
if (p[j] <= *pmax) {
goto L500;
}
*pmax = p[j];
jsav = j;
ipsav = ip;
L500:
;
}
}
psum += *pmax;
++nsav;
psav[nsav - 1] = *pmax;
pathsv[nsav] = ipsav;
sort[nsav] = jsav;
if (psum >= popt) {
goto L600;
}
if (nsav >= 25) {
goto L600;
}
goto L520;
psum += *pmax;
++nsav;
psav[nsav - 1] = *pmax;
pathsv[nsav] = ipsav;
sort[nsav] = jsav;
if (psum >= popt) {
break;
}
} while (nsav < 25);
/* NEW ISAVE EQUALS NO. OF NODES SAVED: */
L600:
*isave = nsav;
/* SORT THE SAVED ARRAYS TO OBTAIN THE ARRAYS */
/* TO BE USED FOR THE NEXT ITERATION: */
i__1 = *isave;
for (i__ = 1; i__ <= i__1; ++i__) {
p[i__] = psav[i__ - 1] / psum;
lambda[i__] = lamsav[sort[i__]];
dur[i__] = dursav[sort[i__]];
ilrate[i__] = ilrsav[sort[i__]];
blksv1_1.ykkip[i__ - 1] = blksv1_1.ykksv[sort[i__] - 1];
blksv1_1.pkkip[i__ - 1] = blksv1_1.pkksv[sort[i__] - 1];
/* PRINT 650, I, ILRATE(I), SORT(I), LAMBDA(I), P(I), DUR(I), */
/* &YKKIP(I), PKKIP(I) */
/* 650 FORMAT('SAVEP:',4(I4,1X), 4(F10.4,1X)) */
/* L700: */
i1 = *isave;
for (i = 1; i <= i1; ++i) {
p[i] = psav[i - 1] / psum;
lambda[i] = lamsav[sort[i]];
dur[i] = dursav[sort[i]];
ilrate[i] = ilrsav[sort[i]];
blksv1_1.ykkip[i - 1] = blksv1_1.ykksv[sort[i] - 1];
blksv1_1.pkkip[i - 1] = blksv1_1.pkksv[sort[i] - 1];
}
i__1 = *isave;
for (i__ = 1; i__ <= i__1; ++i__) {
iconv[i__ - 1] = 1;
/* L790: */
i1 = *isave;
for (i = 1; i <= i1; ++i) {
iconv[i - 1] = 1;
}
isavm1 = *isave - 1;
i__1 = isavm1;
for (n = 1; n <= i__1; ++n) {
if (iconv[n - 1] == 0) {
goto L800;
}
nplus1 = n + 1;
i__2 = *isave;
for (k = nplus1; k <= i__2; ++k) {
if (iconv[k - 1] == 0) {
goto L810;
}
if (ilrate[k] != ilrate[n]) {
goto L810;
}
if (dur[k] != dur[n]) {
goto L810;
}
if (lambda[k] != lambda[n]) {
goto L810;
}
iconv[k - 1] = 0;
L810:
;
}
L800:
;
i1 = isavm1;
for (n = 1; n <= i1; ++n) {
if (iconv[n - 1] != 0) {
nplus1 = n + 1;
i2 = *isave;
for (k = nplus1; k <= i2; ++k) {
if (iconv[k - 1] == 0) {
goto L810;
}
if (ilrate[k] != ilrate[n]) {
goto L810;
}
if (dur[k] != dur[n]) {
goto L810;
}
if (lambda[k] != lambda[n]) {
goto L810;
}
iconv[k - 1] = 0;
L810:
;
}
}
}
psum = 0.f;
n = 1;
i__1 = *isave;
for (i__ = 2; i__ <= i__1; ++i__) {
if (iconv[i__ - 1] == 0) {
goto L900;
}
++n;
lambda[n] = lambda[i__];
dur[n] = dur[i__];
ilrate[n] = ilrate[i__];
blksv1_1.ykkip[n - 1] = blksv1_1.ykkip[i__ - 1];
blksv1_1.pkkip[n - 1] = blksv1_1.pkkip[i__ - 1];
pathsv[n] = pathsv[i__];
sort[n] = sort[i__];
p[n] = p[i__];
psum += p[n];
L900:
;
i1 = *isave;
for (i = 2; i <= i1; ++i) {
if (iconv[i - 1] != 0) {
++n;
lambda[n] = lambda[i];
dur[n] = dur[i];
ilrate[n] = ilrate[i];
blksv1_1.ykkip[n - 1] = blksv1_1.ykkip[i - 1];
blksv1_1.pkkip[n - 1] = blksv1_1.pkkip[i - 1];
pathsv[n] = pathsv[i];
sort[n] = sort[i];
p[n] = p[i];
psum += p[n];
}
}
/* ALSO OBTAIN HIGHEST PROBABILITY NODE: */
*isave = n;
*pmax = 0.f;
i__1 = *isave;
for (i__ = 1; i__ <= i__1; ++i__) {
p[i__] /= psum;
if (p[i__] <= *pmax) {
goto L950;
}
*pmax = p[i__];
*imax = i__;
L950:
;
i1 = *isave;
for (i = 1; i <= i1; ++i) {
p[i] /= psum;
if (p[i] > *pmax) {
*pmax = p[i];
*imax = i;
}
}
return 0;
} /* savep_ */

Wyświetl plik

@ -27,8 +27,7 @@ struct {
#define blkrat_1 blkrat_
doublereal spdtr_(integer *isrt, integer *ilrt, integer *iselm, integer *
ilelm)
doublereal spdtr_(integer *isrt, integer *ilrt, integer *iselm, integer *ilelm)
{
/* System generated locals */
real ret_val;
@ -53,11 +52,11 @@ doublereal spdtr_(integer *isrt, integer *ilrt, integer *iselm, integer *
/* THEN THERE CAN BE NO SPEED CHANGE: */
if (*ilelm != *iselm) {
goto L100;
goto L100;
}
ret_val = 1.f;
if (*isrt != 3) {
ret_val = 0.f;
ret_val = 0.f;
}
goto L300;
@ -67,7 +66,7 @@ L100:
idel = blkrat_1.memdel[*ilelm + *iselm * 6 - 7];
ind1 = blkspd_1.mempr[*ilelm + *iselm * 6 - 7];
if (ind1 != 0) {
goto L200;
goto L200;
}
ret_val = 0.f;
goto L300;
@ -76,10 +75,10 @@ L200:
ret_val = blkspd_1.rtrans[*isrt + ind1 * 5 - 6];
israte = *ilrt + idelsp;
if (israte > 60) {
ret_val = 0.f;
ret_val = 0.f;
}
if (israte < 10) {
ret_val = 0.f;
ret_val = 0.f;
}
L300:
return ret_val;

Wyświetl plik

@ -1,11 +1,11 @@
#include "f2c.h"
#include <stdio.h>
#include "morse.h"
extern char debug;
struct TREE {
int dit,dah;
char chr[5];
} tree[] = {
} tree[] = { // check http://en.wikipedia.org/wiki/Morse_code
//dit,dah, chr
{1,2, '*'}, // null state
{3,4, 'E'}, // .
@ -25,7 +25,7 @@ struct TREE {
{31,32,'H'}, // ....
{33,34,'V'}, // ...-
{35,36,'F'}, // ..-.
{37,38,'Ü'}, // ..--
{37,38,'..--'},// ..--
{39,40,'L'}, // .-..
{41,42,'Ä'}, // .-.-
{43,44,'P'}, // .--.
@ -33,14 +33,14 @@ struct TREE {
{47,48,'B'}, // -...
{49,50,'X'}, // -..-
{51,52,'C'}, // -.-.
{53,54,'Y'}, // -.--
{53,00,'Y'}, // -.--
{55,00,'Z'}, // --..
{57,00,'Q'}, // --.-
{54,00,'Ö'}, // ---.
{56,57,'Š'}, // ----
{00,00,'5'}, // .....
{00,00,'4'}, // ....-
{00,00,'*'}, // ...-.
{00,60,'*'}, // ...-.
{00,00,'3'}, // ...--
{00,00,'É'}, // ..-..
{00,00,'*'}, // ..-.-
@ -48,24 +48,29 @@ struct TREE {
{00,00,'2'}, // ..---
{00,00,'*'}, //
{00,00,'È'}, //
{00,00,'+'}, //
{00,00,'*'}, //
{00,00,'*'}, //
{00,00,'*'}, // J ?
{00,63,'+'}, // .-.-.
{00,00,'*'}, // .-.--
{00,00,'*'}, // .--..
{59,00,'à'}, // .--.-
{00,00,'*'}, // .----
{00,00,'1'},
{00,00,'6'},
{00,00,'/'},
{00,00,'*'},
{00,00,'Ç'},
{00,00,'*'},
{00,00,'Ĥ'},
{00,00,''},
{00,00,'8'},
{00,00,'7'},
{00,00,'9'},
{00,00,'0'},
{00,00,'?'}
{00,00,'1'}, // .---.
{00,00,'6'}, // -....
{61,00,'='}, // -...-
{00,00,'/'}, // -..-.
{00,00,'*'}, // -..--
{00,00,'*'}, // -.-..
{00,00,'Ĥ'}, // -.-.-
{00,00,''}, // -.--.
{00,00,'8'}, // ---..
{00,00,'7'}, // --...
{00,00,'9'}, // ----.
{00,00,'0'}, // -----
{00,00,'?'}, // ..--..
{00,00,'@'}, // .--.-.
{00,00,'SK'}, // ...-.-
{00,62,'*'}, // -...-.
{00,00,'BK'}, // -...-.-
{00,00,'.'} // .-.-.-
};
/* Common Block Declarations */
@ -136,6 +141,86 @@ int transl_(int *ltr)
goto L700;
}
if (debug == 't') { // print received tokens
switch (*ltr)
{
/* 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 */
/* .^ .~ .w .p -^ -~ -w -p ^. ^- ~. ~- w. w- p. p- */
case 16: // p-
printf("p-");
newstate = tree[curstate].dah;
break;
case 15: // p.
printf("p.");
newstate = tree[curstate].dit;
break;
case 14: // w-
printf("w-");
newstate = tree[curstate].dah;
break;
case 13: // w.
printf("w.");
newstate = tree[curstate].dit;
break;
case 12: // ~-
printf("~-");
newstate = tree[curstate].dah;
break;
case 11: // ~.
printf("~.");
newstate = tree[curstate].dit;
break;
case 10: // ^-
printf("^-");
newstate = tree[curstate].dah;
break;
case 9: // ^.
printf("^.");
newstate = tree[curstate].dit;
break;
case 8:
printf("-p");
printf("%s ",tree[curstate].chr);
newstate = 0;
break;
case 7:
printf("-w");
printf("%s ",tree[curstate].chr);
newstate = 0;
break;
case 6:
printf("-~");
printf("%s",tree[curstate].chr);
newstate = 0;
break;
case 5:
printf("-^");
break;
case 4:
printf(".p");
printf("%s ",tree[curstate].chr);
newstate = 0;
break;
case 3:
printf(".w");
printf("%s ",tree[curstate].chr);
newstate = 0;
break;
case 2:
printf(".~");
printf("%s",tree[curstate].chr);
newstate = 0;
break;
case 1:
printf(".^");
break;
default:
break;
}
}
else {
// printf("\nltr: %d %d :", *ltr, elmhat);
switch (*ltr)
{
@ -172,6 +257,7 @@ int transl_(int *ltr)
// ltrhat = 0;
break;
}
}
L700:
curstate = newstate;
ixlast = ixl;

Wyświetl plik

@ -33,163 +33,10 @@ int trelis_(integer *isave, integer *pathsv, integer *lambda, integer *imax, int
{
/* Initialized data */
static integer lmdsav[5000] /* was [200][25] */ = { 0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0 };
static integer lmdsav[5000]; /* was [200][25] */
static integer n = 0;
static integer ndelay = 200;
static integer ipnod[25] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1 };
static integer ipnod[25] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 };
static integer ncall = 0;
static integer nmax = 0;
static integer mmax = 0;
@ -202,172 +49,16 @@ int trelis_(integer *isave, integer *pathsv, integer *lambda, integer *imax, int
0,0,0,0,0,0,0,0,0,0,0,0,0 };
static integer kd = 0;
static integer ndelst = 0;
static integer pthtrl[5000] /* was [200][25] */ = { 0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0 };
static integer pthtrl[5000]; /* was [200][25] */
/* System generated locals */
integer i1;
/* Builtin functions */
integer s_wsfe(cilist *), do_fio(integer *, char *, ftnlen), e_wsfe(void),
s_rsfe(cilist *), e_rsfe(void);
/* Local variables */
static int i, k, ip, ieq, ltr, ndel, retstat;
static char wait[1];
static int isavg;
static int isavg, init=0;
static real xsavg, xmmax, xnmax;
static int ndlavg;
static real xdlavg;
@ -381,104 +72,106 @@ int trelis_(integer *isave, integer *pathsv, integer *lambda, integer *imax, int
/* TO A SINGLE PATH DOES NOT OCCURS, THEN DECODING IS */
/* DONE BY READING THE LETTER ON THE PATH WITH HIGHEST */
/* PROBABILITY */
/* DATA PTHTRL/5000*5/, LMDSAV/ 5000*5/ */
/* Parameter adjustments */
--lambda;
--pathsv;
/* Function Body */
if (init ==0) {
init = 1;
for (i=0; i<5000; i++) {
pthtrl[i] = 0;
lmdsav[i] = 0;
}
}
/* KEEP AVERAGE OF ISAVE, NDEL FOR DATA ANALYSIS: */
/* CALL VISBUI('PSV', PATHSV) */
/* CALL VISBUI('LBD', LAMBDA) */
retstat = 1;
++ncall;
if (blkend_1.iend != 1) {
goto L10;
if (blkend_1.iend == 1) {
isavg = xsavg;
ndlavg = xdlavg;
blkend_1.iend = 0;
printf("\nAVG # OF PATHS SAVED:%4.2f,AVG DECODE DELAY:%4.2f)", xsavg, xdlavg);
printf("\nPERCENT OF TIME PATHS = 25: %3.2f, PERCENT OF TIME DELAY = 200: %3.2f", xmmax, xnmax);
}
isavg = xsavg;
ndlavg = xdlavg;
blkend_1.iend = 0;
printf("\nAVG # OF PATHS SAVED:%4.2f,AVG DECODE DELAY:%4.2f)", xsavg, xdlavg);
printf("\nPERCENT OF TIME PATHS = 25: %3.2f, PERCENT OF TIME DELAY = 200: %3.2f", xmmax, xnmax);
L10:
xsavg = (xsavg * (ncall - 1) + *isave) / ncall;
xdlavg = (xdlavg * (ncall - 1) + ndel) / ncall;
if (ndel != ndelay) {
goto L20;
if (ndel == ndelay) {
++nmax;
xnmax = (real) nmax;
xnmax /= ncall;
}
++nmax;
xnmax = (real) nmax;
xnmax /= ncall;
L20:
if (*isave != 25) {
goto L30;
if (*isave == 25) {
++mmax;
xmmax = (real) mmax;
xmmax /= ncall;
}
++mmax;
xmmax = (real) mmax;
xmmax /= ncall;
L30:
/* STORE PATHSV AND CORRESPONDING LAMBDA IN THE */
/* TRELLIS USING A CIRCULAR BUFFER OF LENGTH NDELAY : */
++n;
if (n == ndelay + 1) {
n = 1;
n = 1;
}
i1 = *isave;
for (i = 1; i <= i1; ++i) {
pthtrl[n + i * 200 - 201] = pathsv[i];
lmdsav[n + i * 200 - 201] = lambda[i];
/* L100: */
pthtrl[n + i * 200 - 201] = pathsv[i];
lmdsav[n + i * 200 - 201] = lambda[i];
}
/* PERFORM DYNAMIC PROGRAM ROUTINE TO FIND CONVERGENT PATH: */
k = 0;
i1 = *isave;
for (i = 1; i <= i1; ++i) {
ipnod[i - 1] = i;
/* L180: */
ipnod[i - 1] = i;
}
L190:
++k;
if (k == ndelay) {
goto L700;
goto L700;
}
/* IF IP EQUALS INDEX OF HIGHEST PROBABILITY NODE, STORE NODE TO IPMAX */
i1 = *isave;
for (ip = 1; ip <= i1; ++ip) {
i = n - k + 1;
if (i <= 0) {
i = ndelay + i;
}
ipnod[ip - 1] = pthtrl[i + ipnod[ip - 1] * 200 - 201];
if (ip == *imax) {
*ipmax = ipnod[ip - 1];
}
/* L200: */
i = n - k + 1;
if (i <= 0) {
i = ndelay + i;
}
ipnod[ip - 1] = pthtrl[i + ipnod[ip - 1] * 200 - 201];
if (ip == *imax) {
*ipmax = ipnod[ip - 1];
}
}
/* CALL VISBUI('IPN',IPNOD) */
/* IF ALL NODES ARE EQUAL,THEN PATHS CONVERGE: */
i1 = *isave;
for (ieq = 2; ieq <= i1; ++ieq) {
if (ipnod[0] != ipnod[ieq - 1]) {
goto L190;
}
/* L300: */
if (ipnod[0] != ipnod[ieq - 1]) {
goto L190;
}
}
/* PATHS CONVERGE; SET NDEL: */
ndel = k + 1;
/* IF POINT OF CONVERGENCE IS SAME AS IT WAS ON */
/* LAST CALL, THEN NO NEED TO RE-DECODE SAME NODE: */
if (ndel == ndelst + 1) {
goto L800;
goto L800;
}
/* IF POINT OF CONVERGENCE OCCURS AT SAME DELAY AS LAST CALL, THEN TRANSLATE: */
if (ndel != ndelst) {
goto L350;
goto L350;
}
i = n - ndel + 1;
if (i <= 0) {
i = ndelay + i;
i = ndelay + i;
}
ltr = lmdsav[i + ipnod[0] * 200 - 201];
#ifdef DEBUG
@ -486,6 +179,7 @@ printf("\nSAME DELAY AS LAST: %d",ltr);
#endif
retstat = transl_(&ltr);
goto L800;
/* OTHERWISE,POINT OF CONVERGENCE HAS OCCURED */
/* EARLIER ON THIS CALL, SO NEED TO TRANSLATE */
/* EVERYTHING ON THE CONVERGENT PATH FROM */
@ -495,28 +189,28 @@ L350:
ip = ipnod[0];
i1 = ndelst;
for (k = ndel; k <= i1; ++k) {
++kd;
i = n - k + 1;
if (i <= 0) {
i = ndelay + i;
}
ltrsv[kd - 1] = lmdsav[i + ip * 200 - 201];
ip = pthtrl[i + ip * 200 - 201];
/* L400: */
++kd;
i = n - k + 1;
if (i <= 0) {
i = ndelay + i;
}
ltrsv[kd - 1] = lmdsav[i + ip * 200 - 201];
ip = pthtrl[i + ip * 200 - 201];
}
/* REVERSE ORDER OF DECODED LETTERS, SINCE THEY */
/* WERE OBTAINED FROM THE TRELLIS IN REVERSE; */
/* TRANSLATE EACH: */
i1 = kd;
for (i = 1; i <= i1; ++i) {
ltr = ltrsv[kd - i];
ltr = ltrsv[kd - i];
#ifdef DEBUG
printf("\nIN REVERSE ORDER: %d",ltr);
printf("\nIN REVERSE ORDER: %d",ltr);
#endif
retstat = transl_(&ltr);
/* L500: */
retstat = transl_(&ltr);
}
goto L800;
L700:
/* PATHS HAVE NOT CONVERGED AT MAXIMUM ALLOWABLE */
/* DELAY, SO TRANSLATE WHAT IS ON HIGHEST */
@ -524,7 +218,7 @@ L700:
ndel = ndelay;
i = n - ndelay + 1;
if (i <= 0) {
i = ndelay + i;
i = ndelay + i;
}
ltr = lmdsav[i + *ipmax * 200 - 201];
#ifdef DEBUG
@ -534,13 +228,11 @@ printf("\nHIGHEST PROB: %d", ltr);
/* PRUNE AWAY NODES WHICH ARE NOT ON THIS PATH: */
i1 = *isave;
for (k = 1; k <= i1; ++k) {
if (ipnod[k - 1] == *ipmax) {
goto L750;
}
lambda[k] = 0;
L750:
;
if (ipnod[k - 1] != *ipmax) {
lambda[k] = 0;
}
}
L800:
ndelst = ndel;
return retstat;

Wyświetl plik

@ -23,7 +23,7 @@ struct {
/* Subroutine */ int trprob_(integer *ip, integer *lambda, real *dur, integer
*ilrate, real *p)
{
static integer i__, k, n;
static integer i, k, n;
static real pin[30];
static integer kelm;
static real psum, ptrx;
@ -53,33 +53,31 @@ struct {
p -= 26;
/* Function Body */
if (*lambda != 0) {
goto L20;
if (*lambda == 0) {
for (n = 1; n <= 30; ++n) {
p[*ip + n * 25] = 0.f;
}
return 0;
}
for (n = 1; n <= 30; ++n) {
p[*ip + n * 25] = 0.f;
/* L10: */
}
goto L200;
L20:
ielem = blklam_1.ilami[blklam_1.ielmst[*lambda - 1] - 1];
/* COMPUTE KEYSTATE TRANSITION PROBABILITY: */
ptrx = xtrans_(&ielem, dur, ilrate);
/* FOR EACH STATE, COMPUTE STATE TRANSITION PROBABILITY: */
psum = 0.f;
for (k = 1; k <= 6; ++k) {
for (i__ = 1; i__ <= 5; ++i__) {
n = (i__ - 1) * 6 + k;
kelm = k;
irate = i__;
ptrans_(&kelm, &irate, lambda, ilrate, &ptrx, &psum, pin, &n);
/* L100: */
}
for (i = 1; i <= 5; ++i) {
n = (i - 1) * 6 + k;
kelm = k;
irate = i;
ptrans_(&kelm, &irate, lambda, ilrate, &ptrx, &psum, pin, &n);
}
}
for (n = 1; n <= 30; ++n) {
p[*ip + n * 25] = pin[n - 1] / psum;
/* L300: */
p[*ip + n * 25] = pin[n - 1] / psum;
}
L200:
return 0;
} /* trprob_ */

Wyświetl plik

@ -46,38 +46,32 @@ doublereal xtrans_(integer *ielem, real *d0, integer *irate)
rscale = 1200.f / *irate;
b0 = *d0 / (mscale * rscale);
b1 = (*d0 + 5.f) / (mscale * rscale);
if (*ielem == 6) {
goto L20;
switch (*ielem) {
case 6:
alpha = aparm[2] * 14.f;
break;
case 5:
alpha = aparm[1] * 7.f;
break;
default:
alpha = mscale * aparm[0];
}
if (*ielem == 5) {
goto L10;
}
alpha = mscale * aparm[0];
goto L100;
L10:
alpha = aparm[1] * 7.f;
goto L100;
L20:
alpha = aparm[2] * 14.f;
L100:
if (b1 <= 1.f) {
goto L200;
p1 = 1.f - exp(alpha * (b1 - 1.f)) * .5f;
p0 = 1.f - exp(alpha * (b0 - 1.f)) * .5f;
ret_val = p1 / p0;
return ret_val;
}
if (b0 < 1.f && b1 > 1.f) {
goto L300;
p1 = exp(-alpha * (b1 - 1.f)) * -.5f;
p0 = 1.f - exp(alpha * (b0 - 1.f)) * .5f;
ret_val = p1 / p0;
return ret_val;
}
ret_val = exp(-alpha * (b1 - b0));
goto L400;
L200:
p1 = 1.f - exp(alpha * (b1 - 1.f)) * .5f;
p0 = 1.f - exp(alpha * (b0 - 1.f)) * .5f;
ret_val = p1 / p0;
goto L400;
L300:
p1 = exp(-alpha * (b1 - 1.f)) * -.5f;
p0 = 1.f - exp(alpha * (b0 - 1.f)) * .5f;
ret_val = p1 / p0;
L400:
return ret_val;
} /* xtrans_ */