| 
									
										
										
										
											2016-05-17 17:19:27 +00:00
										 |  |  | subroutine extract(s3,nadd,mode65,ntrials,naggressive,ndepth,nflip,     &
 | 
					
						
							| 
									
										
										
										
											2017-12-02 16:04:51 +00:00
										 |  |  |      mycall_12,hiscall_12,hisgrid,nQSOProgress,ljt65apon,               &
 | 
					
						
							| 
									
										
										
										
											2020-03-19 11:00:21 -04:00
										 |  |  |      ncount,nhist,decoded,ltext,nft,qual)
 | 
					
						
							| 
									
										
										
										
											2014-12-03 00:06:54 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | ! Input:
 | 
					
						
							|  |  |  | !   s3       64-point spectra for each of 63 data symbols
 | 
					
						
							|  |  |  | !   nadd     number of spectra summed into s3
 | 
					
						
							| 
									
										
										
										
											2015-02-05 17:43:43 +00:00
										 |  |  | !   nqd      0/1 to indicate decode attempt at QSO frequency
 | 
					
						
							| 
									
										
										
										
											2014-12-03 00:06:54 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | ! Output:
 | 
					
						
							| 
									
										
										
										
											2015-04-22 17:48:03 +00:00
										 |  |  | !   ncount   number of symbols requiring correction (-1 for no KV decode)
 | 
					
						
							| 
									
										
										
										
											2014-12-03 00:06:54 +00:00
										 |  |  | !   nhist    maximum number of identical symbol values
 | 
					
						
							|  |  |  | !   decoded  decoded message (if ncount >=0)
 | 
					
						
							|  |  |  | !   ltext    true if decoded message is free text
 | 
					
						
							| 
									
										
										
										
											2015-12-09 21:02:37 +00:00
										 |  |  | !   nft      0=no decode; 1=FT decode; 2=hinted decode
 | 
					
						
							| 
									
										
										
										
											2014-12-03 00:06:54 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   use prog_args                       !shm_key, exe_dir, data_dir
 | 
					
						
							| 
									
										
										
										
											2015-04-22 17:48:03 +00:00
										 |  |  |   use packjt
 | 
					
						
							| 
									
										
										
										
											2016-03-10 14:25:22 +00:00
										 |  |  |   use jt65_mod
 | 
					
						
							| 
									
										
										
										
											2015-12-27 15:40:57 +00:00
										 |  |  |   use timer_module, only: timer
 | 
					
						
							| 
									
										
										
										
											2014-12-03 00:06:54 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   real s3(64,63)
 | 
					
						
							| 
									
										
										
										
											2017-12-02 16:04:51 +00:00
										 |  |  |   character decoded*22, apmessage*22
 | 
					
						
							| 
									
										
										
										
											2015-12-16 19:31:12 +00:00
										 |  |  |   character*12 mycall_12,hiscall_12
 | 
					
						
							|  |  |  |   character*6 mycall,hiscall,hisgrid
 | 
					
						
							| 
									
										
										
										
											2017-12-02 16:04:51 +00:00
										 |  |  |   character*6 mycall0,hiscall0,hisgrid0
 | 
					
						
							| 
									
										
										
										
											2018-02-08 02:16:37 +00:00
										 |  |  |   integer apsymbols(7,12),ap(12)
 | 
					
						
							| 
									
										
										
										
											2017-12-02 16:04:51 +00:00
										 |  |  |   integer nappasses(0:5)  ! the number of decoding passes to use for each QSO state
 | 
					
						
							|  |  |  |   integer naptypes(0:5,4) ! (nQSOProgress, decoding pass)  maximum of 4 passes for now 
 | 
					
						
							| 
									
										
										
										
											2014-12-03 00:06:54 +00:00
										 |  |  |   integer dat4(12)
 | 
					
						
							|  |  |  |   integer mrsym(63),mr2sym(63),mrprob(63),mr2prob(63)
 | 
					
						
							| 
									
										
										
										
											2015-11-18 01:28:12 +00:00
										 |  |  |   integer correct(63),tmp(63)
 | 
					
						
							| 
									
										
										
										
											2017-12-02 16:04:51 +00:00
										 |  |  |   logical first,ltext,ljt65apon
 | 
					
						
							| 
									
										
										
										
											2015-11-18 01:28:12 +00:00
										 |  |  |   common/chansyms65/correct
 | 
					
						
							| 
									
										
										
										
											2017-12-02 16:04:51 +00:00
										 |  |  |   data first/.true./
 | 
					
						
							| 
									
										
										
										
											2014-12-03 00:06:54 +00:00
										 |  |  |   save
 | 
					
						
							| 
									
										
										
										
											2017-12-02 16:04:51 +00:00
										 |  |  |   
 | 
					
						
							| 
									
										
										
										
											2016-06-10 14:18:10 +00:00
										 |  |  |   if(mode65.eq.-99) stop                   !Silence compiler warning
 | 
					
						
							| 
									
										
										
										
											2017-12-02 16:04:51 +00:00
										 |  |  |   if(first) then
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! aptype
 | 
					
						
							|  |  |  | !------------------------
 | 
					
						
							|  |  |  | !   1        CQ     ???    ???
 | 
					
						
							|  |  |  | !   2        MyCall ???    ???
 | 
					
						
							|  |  |  | !   3        MyCall DxCall ???
 | 
					
						
							|  |  |  | !   4        MyCall DxCall RRR
 | 
					
						
							|  |  |  | !   5        MyCall DxCall 73
 | 
					
						
							| 
									
										
										
										
											2018-02-07 22:45:26 +00:00
										 |  |  | !   6        MyCall DxCall DxGrid
 | 
					
						
							| 
									
										
										
										
											2018-02-08 02:16:37 +00:00
										 |  |  | !   7        CQ     DxCall DxGrid
 | 
					
						
							| 
									
										
										
										
											2017-12-02 16:04:51 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |      apsymbols=-1
 | 
					
						
							| 
									
										
										
										
											2018-02-08 14:30:04 +00:00
										 |  |  |      nappasses=(/3,4,2,3,3,4/)
 | 
					
						
							|  |  |  |      naptypes(0,1:4)=(/1,2,6,0/)  ! Tx6
 | 
					
						
							|  |  |  |      naptypes(1,1:4)=(/2,3,6,7/)  ! Tx1
 | 
					
						
							|  |  |  |      naptypes(2,1:4)=(/2,3,0,0/)  ! Tx2
 | 
					
						
							|  |  |  |      naptypes(3,1:4)=(/3,4,5,0/)  ! Tx3
 | 
					
						
							|  |  |  |      naptypes(4,1:4)=(/3,4,5,0/)  ! Tx4
 | 
					
						
							|  |  |  |      naptypes(5,1:4)=(/2,3,4,5/)  ! Tx5
 | 
					
						
							| 
									
										
										
										
											2017-12-02 16:04:51 +00:00
										 |  |  |      first=.false.
 | 
					
						
							|  |  |  |   endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-16 19:31:12 +00:00
										 |  |  |   mycall=mycall_12(1:6)
 | 
					
						
							|  |  |  |   hiscall=hiscall_12(1:6)
 | 
					
						
							| 
									
										
										
										
											2017-12-02 16:04:51 +00:00
										 |  |  | ! Fill apsymbols array
 | 
					
						
							| 
									
										
										
										
											2018-02-07 22:45:26 +00:00
										 |  |  |   if(ljt65apon .and.                                             &
 | 
					
						
							|  |  |  |      (mycall.ne.mycall0 .or. hiscall.ne.hiscall0 .or. hisgrid.ne.hisgrid0)) then 
 | 
					
						
							| 
									
										
										
										
											2017-12-02 16:04:51 +00:00
										 |  |  | !write(*,*) 'initializing apsymbols '
 | 
					
						
							|  |  |  |      apsymbols=-1
 | 
					
						
							|  |  |  |      mycall0=mycall
 | 
					
						
							|  |  |  |      hiscall0=hiscall
 | 
					
						
							|  |  |  |      ap=-1
 | 
					
						
							|  |  |  |      apsymbols(1,1:4)=(/62,32,32,49/) ! CQ
 | 
					
						
							|  |  |  |      if(len_trim(mycall).gt.0) then
 | 
					
						
							|  |  |  |         apmessage=mycall//" "//mycall//" RRR" 
 | 
					
						
							| 
									
										
										
										
											2018-07-10 15:09:42 -04:00
										 |  |  |         call packmsg(apmessage,ap,itype)
 | 
					
						
							| 
									
										
										
										
											2017-12-02 16:04:51 +00:00
										 |  |  |         if(itype.ne.1) ap=-1
 | 
					
						
							|  |  |  |         apsymbols(2,1:4)=ap(1:4)
 | 
					
						
							|  |  |  | !write(*,*) 'mycall symbols ',ap(1:4)
 | 
					
						
							|  |  |  |         if(len_trim(hiscall).gt.0) then
 | 
					
						
							|  |  |  |            apmessage=mycall//" "//hiscall//" RRR" 
 | 
					
						
							| 
									
										
										
										
											2018-07-10 15:09:42 -04:00
										 |  |  |            call packmsg(apmessage,ap,itype)
 | 
					
						
							| 
									
										
										
										
											2017-12-02 16:04:51 +00:00
										 |  |  |            if(itype.ne.1) ap=-1
 | 
					
						
							|  |  |  |            apsymbols(3,1:9)=ap(1:9)
 | 
					
						
							|  |  |  |            apsymbols(4,:)=ap
 | 
					
						
							|  |  |  |            apmessage=mycall//" "//hiscall//" 73" 
 | 
					
						
							| 
									
										
										
										
											2018-07-10 15:09:42 -04:00
										 |  |  |            call packmsg(apmessage,ap,itype)
 | 
					
						
							| 
									
										
										
										
											2017-12-02 16:04:51 +00:00
										 |  |  |            if(itype.ne.1) ap=-1
 | 
					
						
							|  |  |  |            apsymbols(5,:)=ap
 | 
					
						
							| 
									
										
										
										
											2018-02-07 22:45:26 +00:00
										 |  |  |            if(len_trim(hisgrid(1:4)).gt.0) then
 | 
					
						
							|  |  |  |               apmessage=mycall//' '//hiscall//' '//hisgrid(1:4)
 | 
					
						
							| 
									
										
										
										
											2018-07-10 15:09:42 -04:00
										 |  |  |               call packmsg(apmessage,ap,itype)
 | 
					
						
							| 
									
										
										
										
											2018-02-07 22:45:26 +00:00
										 |  |  |               if(itype.ne.1) ap=-1
 | 
					
						
							|  |  |  |               apsymbols(6,:)=ap
 | 
					
						
							| 
									
										
										
										
											2018-02-08 02:16:37 +00:00
										 |  |  |               apmessage='CQ'//' '//hiscall//' '//hisgrid(1:4)
 | 
					
						
							| 
									
										
										
										
											2018-07-10 15:09:42 -04:00
										 |  |  |               call packmsg(apmessage,ap,itype)
 | 
					
						
							| 
									
										
										
										
											2018-02-08 02:16:37 +00:00
										 |  |  |               if(itype.ne.1) ap=-1
 | 
					
						
							|  |  |  |               apsymbols(7,:)=ap
 | 
					
						
							| 
									
										
										
										
											2018-02-07 22:45:26 +00:00
										 |  |  |            endif
 | 
					
						
							| 
									
										
										
										
											2017-12-02 16:04:51 +00:00
										 |  |  |         endif
 | 
					
						
							|  |  |  |      endif
 | 
					
						
							|  |  |  |   endif
 | 
					
						
							|  |  |  |    
 | 
					
						
							| 
									
										
										
										
											2015-12-09 21:02:37 +00:00
										 |  |  |   qual=0.
 | 
					
						
							| 
									
										
										
										
											2015-11-18 01:28:12 +00:00
										 |  |  |   nbirdie=20
 | 
					
						
							|  |  |  |   npct=50
 | 
					
						
							|  |  |  |   afac1=1.1
 | 
					
						
							| 
									
										
										
										
											2015-12-09 21:02:37 +00:00
										 |  |  |   nft=0
 | 
					
						
							| 
									
										
										
										
											2014-12-03 00:06:54 +00:00
										 |  |  |   nfail=0
 | 
					
						
							|  |  |  |   decoded='                      '
 | 
					
						
							|  |  |  |   call pctile(s3,4032,npct,base)
 | 
					
						
							|  |  |  |   s3=s3/base
 | 
					
						
							| 
									
										
										
										
											2015-12-15 21:24:22 +00:00
										 |  |  |   s3a=s3                                            !###
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-03 00:06:54 +00:00
										 |  |  | ! Get most reliable and second-most-reliable symbol values, and their
 | 
					
						
							|  |  |  | ! probabilities
 | 
					
						
							|  |  |  | 1 call demod64a(s3,nadd,afac1,mrsym,mrprob,mr2sym,mr2prob,ntest,nlow)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   call chkhist(mrsym,nhist,ipk)       !Test for birdies and QRM
 | 
					
						
							|  |  |  |   if(nhist.ge.nbirdie) then
 | 
					
						
							|  |  |  |      nfail=nfail+1
 | 
					
						
							|  |  |  |      call pctile(s3,4032,npct,base)
 | 
					
						
							|  |  |  |      s3(ipk,1:63)=base
 | 
					
						
							|  |  |  |      if(nfail.gt.30) then
 | 
					
						
							|  |  |  |         decoded='                      '
 | 
					
						
							|  |  |  |         ncount=-1
 | 
					
						
							|  |  |  |         go to 900
 | 
					
						
							|  |  |  |      endif
 | 
					
						
							|  |  |  |      go to 1
 | 
					
						
							|  |  |  |   endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-09 21:02:37 +00:00
										 |  |  |   mrs=mrsym
 | 
					
						
							|  |  |  |   mrs2=mr2sym
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-22 17:48:03 +00:00
										 |  |  |   call graycode65(mrsym,63,-1)        !Remove gray code 
 | 
					
						
							|  |  |  |   call interleave63(mrsym,-1)         !Remove interleaving
 | 
					
						
							| 
									
										
										
										
											2014-12-03 00:06:54 +00:00
										 |  |  |   call interleave63(mrprob,-1)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   call graycode65(mr2sym,63,-1)      !Remove gray code and interleaving
 | 
					
						
							|  |  |  |   call interleave63(mr2sym,-1)       !from second-most-reliable symbols
 | 
					
						
							|  |  |  |   call interleave63(mr2prob,-1)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-02 16:04:51 +00:00
										 |  |  |   npass=1  ! if ap decoding is disabled  
 | 
					
						
							|  |  |  |   if(ljt65apon .and. len_trim(mycall).gt.0) then 
 | 
					
						
							|  |  |  |      npass=1+nappasses(nQSOProgress)
 | 
					
						
							|  |  |  | !write(*,*) 'ap is on: ',npass-1,'ap passes of types ',naptypes(nQSOProgress,:)
 | 
					
						
							| 
									
										
										
										
											2015-12-31 01:30:31 +00:00
										 |  |  |   endif
 | 
					
						
							| 
									
										
										
										
											2017-12-02 16:04:51 +00:00
										 |  |  |   do ipass=1,npass
 | 
					
						
							|  |  |  |      ap=-1
 | 
					
						
							|  |  |  |      ntype=0
 | 
					
						
							|  |  |  |      if(ipass.gt.1) then
 | 
					
						
							|  |  |  |        ntype=naptypes(nQSOProgress,ipass-1)
 | 
					
						
							|  |  |  | !write(*,*) 'ap pass, type ',ntype
 | 
					
						
							|  |  |  |        ap=apsymbols(ntype,:)
 | 
					
						
							|  |  |  |        if(count(ap.ge.0).eq.0) cycle  ! don't bother if all ap symbols are -1
 | 
					
						
							|  |  |  | !write(*,'(12i3)') ap
 | 
					
						
							|  |  |  |      endif
 | 
					
						
							|  |  |  |      ntry=0
 | 
					
						
							|  |  |  |      call timer('ftrsd   ',0)
 | 
					
						
							|  |  |  |      param=0
 | 
					
						
							|  |  |  |      call ftrsdap(mrsym,mrprob,mr2sym,mr2prob,ap,ntrials,correct,param,ntry)
 | 
					
						
							|  |  |  |      call timer('ftrsd   ',1)
 | 
					
						
							|  |  |  |      ncandidates=param(0)
 | 
					
						
							|  |  |  |      nhard=param(1)
 | 
					
						
							|  |  |  |      nsoft=param(2)
 | 
					
						
							|  |  |  |      nerased=param(3)
 | 
					
						
							|  |  |  |      rtt=0.001*param(4)
 | 
					
						
							|  |  |  |      ntotal=param(5)
 | 
					
						
							|  |  |  |      qual=0.001*param(7)
 | 
					
						
							|  |  |  |      nd0=81
 | 
					
						
							|  |  |  |      r0=0.87
 | 
					
						
							|  |  |  |      if(naggressive.eq.10) then
 | 
					
						
							|  |  |  |         nd0=83
 | 
					
						
							|  |  |  |         r0=0.90
 | 
					
						
							|  |  |  |      endif
 | 
					
						
							| 
									
										
										
										
											2015-12-09 21:02:37 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-02 16:04:51 +00:00
										 |  |  |      if(ntotal.le.nd0 .and. rtt.le.r0) then
 | 
					
						
							|  |  |  |         nft=1+ishft(ntype,2)
 | 
					
						
							|  |  |  |      endif 
 | 
					
						
							|  |  |  |   
 | 
					
						
							|  |  |  |      if(nft.gt.0) exit
 | 
					
						
							|  |  |  |   enddo
 | 
					
						
							| 
									
										
										
										
											2016-03-21 16:03:11 +00:00
										 |  |  |   if(nft.eq.0 .and. iand(ndepth,32).eq.32) then
 | 
					
						
							| 
									
										
										
										
											2016-03-22 14:12:59 +00:00
										 |  |  |      qmin=2.0 - 0.1*naggressive
 | 
					
						
							| 
									
										
										
										
											2016-03-07 20:54:12 +00:00
										 |  |  |      call timer('hint65  ',0)
 | 
					
						
							| 
									
										
										
										
											2016-06-10 14:18:10 +00:00
										 |  |  |      call hint65(s3,mrs,mrs2,nadd,nflip,mycall,hiscall,hisgrid,qual,decoded)
 | 
					
						
							| 
									
										
										
										
											2015-12-15 21:24:22 +00:00
										 |  |  |      if(qual.ge.qmin) then
 | 
					
						
							| 
									
										
										
										
											2015-12-09 21:02:37 +00:00
										 |  |  |         nft=2
 | 
					
						
							| 
									
										
										
										
											2016-04-13 13:16:10 +00:00
										 |  |  |         ncount=0
 | 
					
						
							| 
									
										
										
										
											2015-12-09 21:02:37 +00:00
										 |  |  |      else
 | 
					
						
							| 
									
										
										
										
											2015-12-18 20:00:59 +00:00
										 |  |  |         decoded='                      '
 | 
					
						
							| 
									
										
										
										
											2015-12-09 21:02:37 +00:00
										 |  |  |         ntry=0
 | 
					
						
							| 
									
										
										
										
											2015-11-24 19:49:04 +00:00
										 |  |  |      endif
 | 
					
						
							| 
									
										
										
										
											2016-01-08 21:05:00 +00:00
										 |  |  |      call timer('hint65  ',1)
 | 
					
						
							| 
									
										
										
										
											2015-12-09 21:02:37 +00:00
										 |  |  |      go to 900
 | 
					
						
							| 
									
										
										
										
											2015-11-24 19:49:04 +00:00
										 |  |  |   endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-18 01:28:12 +00:00
										 |  |  |   ncount=-1
 | 
					
						
							| 
									
										
										
										
											2014-12-03 00:06:54 +00:00
										 |  |  |   decoded='                      '
 | 
					
						
							|  |  |  |   ltext=.false.
 | 
					
						
							| 
									
										
										
										
											2015-12-09 21:02:37 +00:00
										 |  |  |   if(nft.gt.0) then
 | 
					
						
							| 
									
										
										
										
											2015-12-15 21:24:22 +00:00
										 |  |  | ! Turn the corrected symbol array into channel symbols for subtraction;
 | 
					
						
							|  |  |  | ! pass it back to jt65a via common block "chansyms65".
 | 
					
						
							| 
									
										
										
										
											2015-11-24 19:49:04 +00:00
										 |  |  |      do i=1,12
 | 
					
						
							|  |  |  |         dat4(i)=correct(13-i)
 | 
					
						
							|  |  |  |      enddo
 | 
					
						
							|  |  |  |      do i=1,63
 | 
					
						
							| 
									
										
										
										
											2015-11-18 01:28:12 +00:00
										 |  |  |        tmp(i)=correct(64-i)
 | 
					
						
							|  |  |  |      enddo
 | 
					
						
							|  |  |  |      correct(1:63)=tmp(1:63)
 | 
					
						
							| 
									
										
										
										
											2020-02-21 13:36:49 -05:00
										 |  |  |      call interleave63(correct,1)
 | 
					
						
							| 
									
										
										
										
											2015-11-18 01:28:12 +00:00
										 |  |  |      call graycode65(correct,63,1)
 | 
					
						
							| 
									
										
										
										
											2018-07-11 10:13:42 -04:00
										 |  |  |      call unpackmsg(dat4,decoded)     !Unpack the user message
 | 
					
						
							| 
									
										
										
										
											2015-11-18 01:28:12 +00:00
										 |  |  |      ncount=0
 | 
					
						
							| 
									
										
										
										
											2014-12-03 00:06:54 +00:00
										 |  |  |      if(iand(dat4(10),8).ne.0) ltext=.true.
 | 
					
						
							|  |  |  |   endif
 | 
					
						
							| 
									
										
										
										
											2015-02-13 14:22:54 +00:00
										 |  |  | 900 continue
 | 
					
						
							| 
									
										
										
										
											2015-12-09 21:02:37 +00:00
										 |  |  |   if(nft.eq.1 .and. nhard.lt.0) decoded='                      '
 | 
					
						
							| 
									
										
										
										
											2015-12-15 21:24:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-13 14:22:54 +00:00
										 |  |  |   return
 | 
					
						
							| 
									
										
										
										
											2014-12-03 00:06:54 +00:00
										 |  |  | end subroutine extract
 | 
					
						
							| 
									
										
										
										
											2015-12-15 21:24:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | subroutine getpp(workdat,p)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-10 14:25:22 +00:00
										 |  |  |   use jt65_mod
 | 
					
						
							| 
									
										
										
										
											2015-12-15 21:24:22 +00:00
										 |  |  |   integer workdat(63)
 | 
					
						
							|  |  |  |   integer a(63)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   a(1:63)=workdat(63:1:-1)
 | 
					
						
							|  |  |  |   call interleave63(a,1)
 | 
					
						
							|  |  |  |   call graycode(a,63,1,a)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   psum=0.
 | 
					
						
							|  |  |  |   do j=1,63
 | 
					
						
							|  |  |  |      i=a(j)+1
 | 
					
						
							|  |  |  |      x=s3a(i,j)
 | 
					
						
							|  |  |  |      s3a(i,j)=0.
 | 
					
						
							|  |  |  |      psum=psum + x
 | 
					
						
							|  |  |  |      s3a(i,j)=x
 | 
					
						
							|  |  |  |   enddo
 | 
					
						
							| 
									
										
										
										
											2015-12-31 01:30:31 +00:00
										 |  |  |   p=psum/63.0
 | 
					
						
							| 
									
										
										
										
											2015-12-15 21:24:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   return
 | 
					
						
							|  |  |  | end subroutine getpp
 |