diff --git a/.github/workflows/integ.yml b/.github/workflows/integ.yml index 9080ab77..661ce6c3 100644 --- a/.github/workflows/integ.yml +++ b/.github/workflows/integ.yml @@ -10,7 +10,7 @@ jobs: test: [ CYL ] env: MOR_DIR: /home/runner/work/NekROM/NekROM - USR: "ana.o aux.o conv.o dump.o ei.o filter.o lapack.o pod.o qoi.o rom.o read.o time.o const.o unit.o rk.o legacy.o mpar.o tensor.o riesz.o" + USR: "ana.o aux.o conv.o dump.o ei.o filter.o lapack.o pod.o qoi.o rom.o read.o time.o const.o unit.o rk.o legacy.o mpar.o tensor.o riesz.o batch.o" steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/integ_t.yaml b/.github/workflows/integ_t.yaml index fb743670..4a333caa 100644 --- a/.github/workflows/integ_t.yaml +++ b/.github/workflows/integ_t.yaml @@ -10,7 +10,7 @@ jobs: test: [ ANN ] env: MOR_DIR: /home/runner/work/NekROM/NekROM - USR: "ana.o aux.o conv.o dump.o ei.o filter.o lapack.o pod.o qoi.o rom.o read.o time.o const.o unit.o rk.o legacy.o mpar.o tensor.o riesz.o" + USR: "ana.o aux.o conv.o dump.o ei.o filter.o lapack.o pod.o qoi.o rom.o read.o time.o const.o unit.o rk.o legacy.o mpar.o tensor.o riesz.o batch.o" steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/unit.yml b/.github/workflows/unit.yml index 80f3b5a1..a4096dd5 100644 --- a/.github/workflows/unit.yml +++ b/.github/workflows/unit.yml @@ -11,7 +11,7 @@ jobs: ips: [L2, H10] env: MOR_DIR: /home/runner/work/NekROM/NekROM - USR: "ana.o aux.o conv.o dump.o ei.o filter.o lapack.o pod.o qoi.o rom.o read.o time.o const.o unit.o rk.o legacy.o mpar.o tensor.o riesz.o" + USR: "ana.o aux.o conv.o dump.o ei.o filter.o lapack.o pod.o qoi.o rom.o read.o time.o const.o unit.o rk.o legacy.o mpar.o tensor.o riesz.o batch.o" steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/unit_rbf.yaml b/.github/workflows/unit_rbf.yaml index 15a058e3..ffb8b017 100644 --- a/.github/workflows/unit_rbf.yaml +++ b/.github/workflows/unit_rbf.yaml @@ -10,7 +10,7 @@ jobs: test: [RBF_WT] env: MOR_DIR: /home/runner/work/NekROM/NekROM - USR: "ana.o aux.o conv.o dump.o ei.o filter.o lapack.o pod.o qoi.o rom.o read.o time.o const.o unit.o rk.o legacy.o mpar.o tensor.o riesz.o" + USR: "ana.o aux.o conv.o dump.o ei.o filter.o lapack.o pod.o qoi.o rom.o read.o time.o const.o unit.o rk.o legacy.o mpar.o tensor.o riesz.o batch.o" steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/unit_rf.yaml b/.github/workflows/unit_rf.yaml index 6eb104a1..5677e8bb 100644 --- a/.github/workflows/unit_rf.yaml +++ b/.github/workflows/unit_rf.yaml @@ -10,7 +10,7 @@ jobs: test: [rf] env: MOR_DIR: /home/runner/work/NekROM/NekROM - USR: "ana.o aux.o conv.o dump.o ei.o filter.o lapack.o pod.o qoi.o rom.o read.o time.o const.o unit.o rk.o legacy.o mpar.o tensor.o riesz.o" + USR: "ana.o aux.o conv.o dump.o ei.o filter.o lapack.o pod.o qoi.o rom.o read.o time.o const.o unit.o rk.o legacy.o mpar.o tensor.o riesz.o batch.o" steps: - uses: actions/checkout@v2 diff --git a/bin/makerom b/bin/makerom index b40116db..bafb1e08 100755 --- a/bin/makerom +++ b/bin/makerom @@ -1,4 +1,4 @@ #!/bin/bash $MOR_DIR/bin/linkm -USR="$USR ana.o aux.o conv.o dump.o ei.o filter.o lapack.o pod.o qoi.o rom.o read.o time.o const.o rk.o legacy.o tensor.o mpar.o riesz.o" makenek $1 +USR="$USR ana.o aux.o conv.o dump.o ei.o filter.o lapack.o pod.o qoi.o rom.o read.o time.o const.o rk.o legacy.o tensor.o mpar.o riesz.o batch.o" makenek $1 diff --git a/bin/setup b/bin/setup index 803d2f31..49fb40dc 100755 --- a/bin/setup +++ b/bin/setup @@ -2,4 +2,4 @@ export MOR_DIR=$(cd ..; pwd -P) export PATH=$MOR_DIR/bin:$PATH -export USR="$USR ana.o aux.o conv.o dump.o ei.o filter.o lapack.o pod.o qoi.o rom.o read.o time.o const.o unit.o rk.o legacy.o mpar.o riesz.o" +export USR="$USR ana.o aux.o conv.o dump.o ei.o filter.o lapack.o pod.o qoi.o rom.o read.o time.o const.o unit.o rk.o legacy.o mpar.o riesz.o batch.o" diff --git a/code/MOR b/code/MOR index 13d20abc..dd857130 100644 --- a/code/MOR +++ b/code/MOR @@ -121,7 +121,7 @@ c parameters and common blocks for MOR integer ad_nsteps,ad_iostep,ad_step,ad_qstep common /moripar/ ad_nsteps,ad_iostep,ad_step,ad_qstep,inus, - $ navg_step,mb,nb,nbo,nplay,nintp,iaug + $ navg_step,mb,nb,nbo,nplay,nintp,iaug,nbat common /morivars/ i0,j0,k0,i1,j1,k1,nns,ns,nskip,navg,ncloc,npr, $ npart,isolve,ic1,ic2,jc1,jc2,kc1,kc2,idirf diff --git a/code/MORDICT b/code/MORDICT index 0ad617c1..342b1967 100644 --- a/code/MORDICT +++ b/code/MORDICT @@ -4,7 +4,7 @@ c Note: Keys have to be in capital letters c integer MORDICT_NKEYS - parameter (MORDICT_NKEYS = 60) + parameter (MORDICT_NKEYS = 61) character*132 mordictkey(MORDICT_NKEYS) data @@ -21,50 +21,51 @@ c & mordictkey(11) / 'GENERAL:DECOUPLED' / & mordictkey(12) / 'GENERAL:CFLOW' / & mordictkey(13) / 'GENERAL:EDDY_VIS' / - & mordictkey(14) / 'POD' / - & mordictkey(15) / 'POD:TYPE' / - & mordictkey(16) / 'POD:MODE0' / - & mordictkey(17) / 'POD:COMBINED' / - & mordictkey(18) / 'POD:RATIO' / - & mordictkey(19) / 'POD:AUGMENT' / - & mordictkey(20) / 'QOI' / - & mordictkey(21) / 'QOI:FREQ' / - & mordictkey(22) / 'QOI:TKE' / - & mordictkey(23) / 'QOI:DRAG' / - & mordictkey(24) / 'QOI:NU' / - & mordictkey(25) / 'QOI:NINTP' / - & mordictkey(26) / 'COPT' / - & mordictkey(27) / 'COPT:MODE' / - & mordictkey(28) / 'COPT:FIELD' / - & mordictkey(29) / 'COPT:BARRIER' / - & mordictkey(30) / 'COPT:BOXTOL' / - & mordictkey(31) / 'COPT:VPAR0' / - & mordictkey(32) / 'COPT:VNLOOP' / - & mordictkey(33) / 'COPT:TPAR0' / - & mordictkey(34) / 'COPT:TNLOOP' / - & mordictkey(35) / 'FAST' / - & mordictkey(36) / 'FAST:CEVAL' / - & mordictkey(37) / 'FAST:HEVAL' / - & mordictkey(38) / 'FORCING' / - & mordictkey(39) / 'FORCING:BODY' / - & mordictkey(40) / 'FORCING:SOURCE' / - & mordictkey(41) / 'FORCING:BUOYANCY' / - & mordictkey(42) / 'FILTER' / - & mordictkey(43) / 'FILTER:LOCATION' / - & mordictkey(44) / 'FILTER:TYPE' / - & mordictkey(45) / 'FILTER:MODES' / - & mordictkey(46) / 'FILTER:RADIUS' / - & mordictkey(47) / 'BUOYANCY' / - & mordictkey(48) / 'BUOYANCY:MAGNITUDE' / - & mordictkey(49) / 'BUOYANCY:ANGLE' / - & mordictkey(50) / 'BUOYANCY:GX' / - & mordictkey(51) / 'BUOYANCY:GY' / - & mordictkey(52) / 'BUOYANCY:GZ' / - & mordictkey(53) / 'EI' / - & mordictkey(54) / 'EI:MODE' / - & mordictkey(55) / 'EI:EQN' / - & mordictkey(56) / 'TENDEC' / - & mordictkey(57) / 'TENDEC:MODE' / - & mordictkey(58) / 'TENDEC:RANK' / - & mordictkey(59) / 'TENDEC:CORE' / - & mordictkey(60) / 'TENDEC:SKEW' / + & mordictkey(14) / 'GENERAL:NBAT' / + & mordictkey(15) / 'POD' / + & mordictkey(16) / 'POD:TYPE' / + & mordictkey(17) / 'POD:MODE0' / + & mordictkey(18) / 'POD:COMBINED' / + & mordictkey(19) / 'POD:RATIO' / + & mordictkey(20) / 'POD:AUGMENT' / + & mordictkey(21) / 'QOI' / + & mordictkey(22) / 'QOI:FREQ' / + & mordictkey(23) / 'QOI:TKE' / + & mordictkey(24) / 'QOI:DRAG' / + & mordictkey(25) / 'QOI:NU' / + & mordictkey(26) / 'QOI:NINTP' / + & mordictkey(27) / 'COPT' / + & mordictkey(28) / 'COPT:MODE' / + & mordictkey(29) / 'COPT:FIELD' / + & mordictkey(30) / 'COPT:BARRIER' / + & mordictkey(31) / 'COPT:BOXTOL' / + & mordictkey(32) / 'COPT:VPAR0' / + & mordictkey(33) / 'COPT:VNLOOP' / + & mordictkey(34) / 'COPT:TPAR0' / + & mordictkey(35) / 'COPT:TNLOOP' / + & mordictkey(36) / 'FAST' / + & mordictkey(37) / 'FAST:CEVAL' / + & mordictkey(38) / 'FAST:HEVAL' / + & mordictkey(39) / 'FORCING' / + & mordictkey(40) / 'FORCING:BODY' / + & mordictkey(41) / 'FORCING:SOURCE' / + & mordictkey(42) / 'FORCING:BUOYANCY' / + & mordictkey(43) / 'FILTER' / + & mordictkey(44) / 'FILTER:LOCATION' / + & mordictkey(45) / 'FILTER:TYPE' / + & mordictkey(46) / 'FILTER:MODES' / + & mordictkey(47) / 'FILTER:RADIUS' / + & mordictkey(48) / 'BUOYANCY' / + & mordictkey(49) / 'BUOYANCY:MAGNITUDE' / + & mordictkey(50) / 'BUOYANCY:ANGLE' / + & mordictkey(51) / 'BUOYANCY:GX' / + & mordictkey(52) / 'BUOYANCY:GY' / + & mordictkey(53) / 'BUOYANCY:GZ' / + & mordictkey(54) / 'EI' / + & mordictkey(55) / 'EI:MODE' / + & mordictkey(56) / 'EI:EQN' / + & mordictkey(57) / 'TENDEC' / + & mordictkey(58) / 'TENDEC:MODE' / + & mordictkey(59) / 'TENDEC:RANK' / + & mordictkey(60) / 'TENDEC:CORE' / + & mordictkey(61) / 'TENDEC:SKEW' / diff --git a/code/batch.f b/code/batch.f new file mode 100644 index 00000000..f973df61 --- /dev/null +++ b/code/batch.f @@ -0,0 +1,62 @@ +c----------------------------------------------------------------------- + subroutine breduce(a,n,m) + + include 'SIZE' + include 'LMOR' + + ! global reduction of vector a of length n (batch size m) + + common /workbr/ v(lbat),w(lbat) + + real a(n) + + if (m.gt.lbat) m = lbat + i=1 + + do while (i.le.n) + call gop(a(i),w,'+ ',min(m,n-i+1)) + i=i+m + enddo + + return + end +c----------------------------------------------------------------------- + subroutine brprofile + + include 'SIZE' + include 'PARALLEL' + include 'LMOR' + + common /workbr/ v(lbat),w(lbat) + + ntrial = 1024 + + do n=1,lbat + time_min = 1.0e+10 + time_max = 0.0 + time_avg = 0.0 + time_avg2 = 0.0 + do ir=1,n + v(ir) = rand() + enddo + do i=1,ntrial + start_time=dnekclock() + call breduce(v,n,n) + end_time=dnekclock() + time = end_time - start_time + time_min = min(time_min,time) + time_max = max(time_max,time) + time_avg = time_avg + time + time_avg2 = time_avg2 + time*time + enddo + time_avg = time_avg / ntrial + time_avg2 = time_avg2 / ntrial + time_std = sqrt(time_avg2 - time_avg*time_avg) + if (nio.eq.0) then + write (6,*) n, time_min, time_avg, time_max, time_std, np + endif + enddo + + return + end +c----------------------------------------------------------------------- diff --git a/code/makefile_usr.inc b/code/makefile_usr.inc index 1bfc6263..7b593f66 100644 --- a/code/makefile_usr.inc +++ b/code/makefile_usr.inc @@ -1,5 +1,6 @@ $(OBJDIR)/ana.o :$(MOR_DIR)/code/ana.f MOR LMOR; $(FC) -c $(FL2) $< -o $@ $(OBJDIR)/aux.o :$(MOR_DIR)/code/aux.f MOR LMOR; $(FC) -c $(FL2) $< -o $@ +$(OBJDIR)/batch.o :$(MOR_DIR)/code/batch.f MOR LMOR; $(FC) -c $(FL2) $< -o $@ $(OBJDIR)/conv.o :$(MOR_DIR)/code/conv.f MOR LMOR; $(FC) -c $(FL2) $< -o $@ $(OBJDIR)/const.o :$(MOR_DIR)/code/const.f MOR LMOR; $(FC) -c $(FL2) $< -o $@ $(OBJDIR)/dump.o :$(MOR_DIR)/code/dump.f MOR LMOR; $(FC) -c $(FL2) $< -o $@ diff --git a/code/mpar.f b/code/mpar.f index 083c8c1d..441d441e 100644 --- a/code/mpar.f +++ b/code/mpar.f @@ -157,6 +157,9 @@ subroutine mpar_read(ierr) call finiparser_getbool(i_out,'general:setbases',ifnd) if (ifnd.eq.1) ifsetbases=i_out.eq.1 + call finiparser_getdbl(d_out,'general:nbat',ifnd) + if (ifnd.eq.1) nbat=nint(d_out) + ibuoy=0 call finiparser_getdbl(d_out,'buoyancy:magnitude',ifnd) @@ -534,6 +537,7 @@ subroutine bcastmpar call bcast(tbarrseq,isize) call bcast(nintp,isize) call bcast(iaug,isize) + call bcast(nbat,isize) ! reals diff --git a/code/pod.f b/code/pod.f index c093136f..58cbb8cb 100644 --- a/code/pod.f +++ b/code/pod.f @@ -25,8 +25,8 @@ subroutine setbases call loadbases else if (rmode.eq.'ALL'.or.rmode.eq.'OFF'.or.rmode.eq.'AEQ') then if (ifrom(1)) then - call pod( - $ uvwb(1,1,1),eval,ug,us0,ldim,ips,nb,ns,ifpb,'ops/gu ') + call pod(uvwb(1,1,1),eval,ug,us0,ldim,ips,nb,ns,ifpb, + $ 'ops/gu ',nbat) if (ifcflow) call set0flow(uvwb(1,1,1),nb,idirf) do ib=1,nb call opcopy(ub(1,ib),vb(1,ib),wb(1,ib), @@ -38,12 +38,12 @@ subroutine setbases endif if (ifrom(2)) then call pod(tb(1,1,1),eval,ug,ts0(1,1,1),1,ips, - $ nb,ns,ifpb,'ops/gt ') + $ nb,ns,ifpb,'ops/gt ',nbat) if (.not.ifcomb.and.ifpb) call snorm(tb) endif if (ifedvs) then call pod(tb(1,1,4),eval,ug,ts0(1,1,4),1,ips,nb - $ ,ns,ifpb,'ops/ged ') + $ ,ns,ifpb,'ops/ged ',nbat) c if (.not.ifcomb.and.ifpb) call snorm(edb) endif @@ -677,15 +677,15 @@ subroutine hlmgg(gram,s,ms,mdim) if (mdim.ge.2) call axhelm(vv,s(1,2,j),ones,zeros,1,2) if (mdim.eq.3) call axhelm(ww,s(1,3,j),ones,zeros,1,3) do i=j,ms ! Form the Gramian, U=U_K^T A U_K using H^1_0 Norm - gram(i,j)=s1*glsc2(uu,s(1,1,i),n) - $ +s2*glsc3(s(1,1,i),s(1,1,j),bm1,n) + gram(i,j)=s1*vlsc2(uu,s(1,1,i),n) + $ +s2*vlsc3(s(1,1,i),s(1,1,j),bm1,n) if (mdim.ge.2) then - gram(i,j)=gram(i,j)+s1*glsc2(vv,s(1,2,i),n) - $ +s2*glsc3(s(1,2,i),s(1,2,j),bm1,n) + gram(i,j)=gram(i,j)+s1*vlsc2(vv,s(1,2,i),n) + $ +s2*vlsc3(s(1,2,i),s(1,2,j),bm1,n) endif if (mdim.eq.3) then - gram(i,j)=gram(i,j)+s1*glsc2(ww,s(1,3,i),n) - $ +s2*glsc3(s(1,3,i),s(1,3,j),bm1,n) + gram(i,j)=gram(i,j)+s1*vlsc2(ww,s(1,3,i),n) + $ +s2*vlsc3(s(1,3,i),s(1,3,j),bm1,n) endif if (i.ne.j) gram(j,i)=gram(i,j) enddo @@ -727,12 +727,12 @@ subroutine h10gg(gram,s,ms,mdim) if (mdim.ge.2) call axhelm(vv,s(1,2,j),ones,zeros,1,2) if (mdim.eq.3) call axhelm(ww,s(1,3,j),ones,zeros,1,3) do i=j,ms ! Form the Gramian, U=U_K^T A U_K using H^1_0 Norm - gram(i,j)=glsc2(uu,s(1,1,i),n) + gram(i,j)=vlsc2(uu,s(1,1,i),n) if (mdim.ge.2) then - gram(i,j)=gram(i,j)+glsc2(vv,s(1,2,i),n) + gram(i,j)=gram(i,j)+vlsc2(vv,s(1,2,i),n) endif if (mdim.eq.3) then - gram(i,j)=gram(i,j)+glsc2(ww,s(1,3,i),n) + gram(i,j)=gram(i,j)+vlsc2(ww,s(1,3,i),n) endif if (i.ne.j) gram(j,i)=gram(i,j) enddo @@ -814,11 +814,11 @@ subroutine gengraml2(gram,s,ms,mdim) do j=1,ms ! Form the Gramian, U=U_K^T A U_K using L2 Norm do i=j,ms - gram(i,j)=glsc3(s(1,1,i),s(1,1,j),bm1,n) + gram(i,j)=vlsc3(s(1,1,i),s(1,1,j),bm1,n) if (mdim.ge.2) - $ gram(i,j)=gram(i,j)+glsc3(s(1,2,i),s(1,2,j),bm1,n) + $ gram(i,j)=gram(i,j)+vlsc3(s(1,2,i),s(1,2,j),bm1,n) if (mdim.ge.3) - $ gram(i,j)=gram(i,j)+glsc3(s(1,3,i),s(1,3,j),bm1,n) + $ gram(i,j)=gram(i,j)+vlsc3(s(1,3,i),s(1,3,j),bm1,n) if (i.ne.j) gram(j,i)=gram(i,j) enddo if (nio.eq.0) write (6,1) j,gram(1,j) @@ -831,7 +831,7 @@ subroutine gengraml2(gram,s,ms,mdim) return end c----------------------------------------------------------------------- - subroutine gengram(gram,s,ms,mdim,cips) + subroutine gengram(gram,s,ms,mdim,cips,nbat) ! set the Gramian based on the inner-product set by ips @@ -840,10 +840,15 @@ subroutine gengram(gram,s,ms,mdim,cips) ! ms := number of snapshots ! mdim := vector dimension ! cips := inner-product space specifier + ! nbat := number of inner-products in batch + + include 'SIZE' real gram(1),s(1) character*3 cips + start_time=dnekclock() + if (cips.eq.'L2 ') then call gengraml2(gram,s,ms,mdim) else if (cips.eq.'H10') then @@ -855,6 +860,10 @@ subroutine gengram(gram,s,ms,mdim,cips) call exitti('failed in gengram, exiting...$',1) endif + call breduce(gram,ms*ms,nbat) + + if (nio.eq.0) write (6,*) 'gg_time:',dnekclock()-start_time + return end c----------------------------------------------------------------------- @@ -1293,7 +1302,8 @@ subroutine cenpm(val,fname,ifld) return end c----------------------------------------------------------------------- - subroutine pod(basis,eval,gram,snaps,mdim,cips,nb,ns,ifpod,cop) + subroutine pod(basis,eval,gram,snaps,mdim,cips,nb,ns,ifpod,cop, + $ nbat) ! return pod basis created from snapshots @@ -1307,6 +1317,7 @@ subroutine pod(basis,eval,gram,snaps,mdim,cips,nb,ns,ifpod,cop) ! ns := number of snapshots ! ifpod := apply POD procedure ! cop := Gramian dump target + ! nbat := number of inner-products in batch include 'SIZE' @@ -1322,16 +1333,18 @@ subroutine pod(basis,eval,gram,snaps,mdim,cips,nb,ns,ifpod,cop) n=lx1*ly1*lz1*nelt - call gengram(gram,snaps,ns,mdim,cips) + call gengram(gram,snaps,ns,mdim,cips,nbat) call dump_serial(gram,ns*ns,cop,nid) if (ifpod) then call genevec(gram,eval,ns,nb,mdim) + start_time=dnekclock() do i=1,mdim call dgemm('N','N',n,nb,ns,1., $ snaps(1,i,1),lt*mdim,gram,ns,0.,basis(1,i,1),lt*mdim) enddo + if (nio.eq.0) write (6,*) 'dgemm_time:',dnekclock()-start_time endif return diff --git a/code/rom.f b/code/rom.f index a2041473..e96fa573 100644 --- a/code/rom.f +++ b/code/rom.f @@ -717,6 +717,7 @@ subroutine mor_init_params gz=0. nintp=0 + nbat=200 if (nio.eq.0) write (6,*) 'exiting mor_init_params' @@ -1337,13 +1338,17 @@ subroutine setc(cl,fname) endif do i=1,nb if (ifield.eq.1) then - cel=op_glsc2_wt(ub(1,i),vb(1,i),wb(1,i), + rtmp1(i,1)=op_vlsc2_wt(ub(1,i),vb(1,i),wb(1,i), $ cu(1,1),cu(1,2),cu(1,ldim),ones) else - cel=glsc2(tb(1,i,1),cu,n) + rtmp1(i,1)=vlsc2(tb(1,i,1),cu,n) endif - call setc_local(cl,cel,ic1,ic2,jc1,jc2,kc1,kc2,i,j,k) - if (nid.eq.0) write (100,*) cel + enddo + call breduce(rtmp1,nb,nbat) + do i=1,nb + call setc_local(cl,rtmp1(i,1), + $ ic1,ic2,jc1,jc2,kc1,kc2,i,j,k) + if (nid.eq.0) write (100,*) rtmp1(i,1) enddo enddo enddo diff --git a/templates/LMOR.template b/templates/LMOR.template index 7a47dec8..43e62043 100644 --- a/templates/LMOR.template +++ b/templates/LMOR.template @@ -17,6 +17,7 @@ parameter (lmsk=1) ! number of partitions parameter (lintp=1) ! max number of interpolation points + parameter (lbat=1024) ! max size of batch vector (inner-product iter.) parameter (lbavg=1+0*(lb-1)) ! size of average field allocation diff --git a/tests/unit.f b/tests/unit.f index 1cae1710..733e010a 100644 --- a/tests/unit.f +++ b/tests/unit.f @@ -30,7 +30,7 @@ subroutine gramian_unit(iflag) param(173) = 0. call rom_setup - call gengram(ug,us0,ns,ldim,ips) + call gengram(ug,us0,ns,ldim,ips,1) call read_serial(vv,ls*ls,'tops/gu ',wk,nid)