!--------( GENROFF : generate Random-point Offset data from )-------- implicit none integer :: lwkdir, lrtrim real,allocatable :: var(:,:) real(8),allocatable :: dlat(:), dlon(:) character(80) :: wdr, flog, fnam1, fnam2, fnam3, sfnam, buf character(20) :: sdtm; character(8) :: area, spec, s1, s2 character(3) :: yn real :: coef(3,1), sml(1) integer :: i, k, kd, ktr, ldr, n, npv, IER real :: rmg, vmags real(8) :: dlats, dlons external cviken call premsg('GENROFF : generate Random-point Offset data from ') call opnpin() ldr = lwkdir(50,wdr) + 1 flog = wdr; fnam1 = wdr; fnam2 = wdr; fnam3 = wdr call gparma('Enter LOG filename ==> ', 81-ldr, flog(ldr:80)) call gparma('Enter StdLIN data infile ==> ', 81-ldr, fnam1(ldr:80)) open(1,file=fnam1,status='old') call gparma('Enter Offset data infile ==> ', 81-ldr, fnam2(ldr:80)) open(2,file=fnam2,status='old') call gparma('Enter random Offset Outfile ==> ', 81-ldr, fnam3(ldr:80)) open(3,file=fnam3,status="new") call premsg(' Remove Trend ?') call gparmi(' ( 0: only DC, 1: Linear, or 2: No ) ==> ', ktr) if ((ktr < 0) .or. (ktr > 2)) call abendm('invalid parameter') call gparma(' Invert Sign ? "y" (Yes) or "n" (No) ==> ', 1, yn) if ((yn(1:1) == 'y') .or. (yn(1:1) == 'Y')) then yn = 'Yes' else yn = 'No ' endif call clspin() read(2,'(a8,i6)') area, npv read(2,'(a)') sfnam k = 0; dlats = 0.; dlons = 0.; vmags = 0. allocate(dlat(npv)); allocate(dlon(npv)); allocate(var(4,npv)) do n=1,npv read(2,'(a8,i12,2x,a8,f10.2)') s1, kd, s2, var(4,n) if (yn == 'Yes') var(4,n) = -var(4,n) do read(1,'(a)') buf do while ((buf(1:1) == '#') .or. (buf(1:1) == '&')) read(1,'(a)') buf enddo k = k + 1; if (k == kd) exit enddo i = index(buf,'N'); if (i /= 0) buf(i:i) = ' ' i = index(buf,'E'); if (i /= 0) buf(i:i) = ' ' i = index(buf,'m'); if (i /= 0) buf(i:i) = ' ' i = index(buf,'nT'); if (i /= 0) buf(i:i+1) = ' ' read(buf,*) dlat(n), dlon(n), var(3,n), rmg dlats = dlats + dlat(n) dlons = dlons + dlon(n) vmags = vmags + var(4,n) enddo close(1) read(2,'(a)',iostat=IER) buf if (IER >= 0) call abendm('unexpected excess Offset data') close(2) dlats = dlats / float(npv) dlons = dlons / float(npv) vmags = vmags / float(npv) if (ktr == 0) then do n=1,npv var(4,n) = var(4,n) - vmags enddo spec = 'only DC ' else if (ktr == 1) then call sm1opn(2, 1) do n=1,npv var(1,n) = real(dlat(n) - dlats) var(2,n) = real(dlon(n) - dlons) var(4,n) = var(4,n) - vmags call sm1ex(var(1,n), var(4,n)) enddo call sm1cls(coef, 3, 1) do n=1,npv call sm1rv(var(1,n), sml(1)) var(4,n) = var(4,n) - sml(1) enddo spec = 'Linear ' else spec = 'None ' endif write(6,'(a)') '----------------------------------------' write(6,'(a)') 'GENROFF : generate Random-point Offset data from ' write(6,'(a,a)') ' StdLIN data infile : ', fnam1(1:lrtrim(fnam1)) write(6,'(a,a)') ' Offset data infile : ', fnam2(1:lrtrim(fnam2)) write(6,'(a,a)') ' random Offset Outfile : ', fnam3(1:lrtrim(fnam3)) write(6,'(3x,a8,4x,a4,i6,4x,a16,a8)') & area, 'npv=', npv, 'Trend Removal : ', spec write(6,'(3x,a12,a3)') 'InvertSign: ', yn write(3,'(a)') '# Output from Prog. GENROFF' write(3,'(a,a)') '# source : ', fnam2(1:lrtrim(fnam2)) write(3,'(a1,1x,a8,4x,a4,i6,4x,a16,a8)') & '#', area, 'npv=', npv, 'Trend Removal : ', spec write(3,'(a,a)') '# InvertSign: ', yn do n=1,npv write(3,'(f12.5,2hN ,f12.5,2hE ,f8.2,2hm ,f8.2,2hnT)') & dlat(n), dlon(n), var(3,n), var(4,n) enddo close(3) if (flog(ldr:ldr) /= ' ') then open(99,file=flog,access='append') write(99,'(//a)') & 'GENROFF : generate Random-point Offset data from ' write(99,'(a,a)') ' StdLIN data infile : ', fnam1(1:lrtrim(fnam1)) write(99,'(a,a)') ' Offset data infile : ', fnam2(1:lrtrim(fnam2)) write(99,'(a,a)') ' random Offset Outfile : ', fnam3(1:lrtrim(fnam3)) write(99,'(3x,a8,4x,a4,i6,4x,a16,a8)') & area, 'npv=', npv, 'Trend Removal : ', spec write(99,'(3x,a12,a3)') 'InvertSign: ', yn call strdtm(sdtm) write(99,'(a,a,a)') '=============== ', sdtm, '===============' close(99) endif stop end