Compare View
Commits (2)
-
le tableau rwork doit être alloué lors de l'appel query
Diff
Showing 1 changed file Side-by-side Diff
fvn_linear/fvn_linear.f90
... | ... | @@ -1281,12 +1281,12 @@ subroutine fvn_c_matev(d,a,evala,eveca,status,sortval) |
1281 | 1281 | !call ccopy(d*d,a,1,wc_a,1) |
1282 | 1282 | wc_a(:,:)=a(:,:) |
1283 | 1283 | |
1284 | - | |
1284 | + ! rwork must be allocated before query | |
1285 | + allocate(rwork(2*d)) | |
1285 | 1286 | ! query optimal work size |
1286 | 1287 | call cgeev('N','V',d,wc_a,d,evala,vl,1,eveca,d,twork,-1,rwork,info) |
1287 | 1288 | lwork=int(twork(1)) |
1288 | - allocate(work(lwork)) | |
1289 | - allocate(rwork(2*d)) | |
1289 | + allocate(work(lwork)) | |
1290 | 1290 | call cgeev('N','V',d,wc_a,d,evala,vl,1,eveca,d,work,lwork,rwork,info) |
1291 | 1291 | |
1292 | 1292 | if (info /= 0) then |
... | ... | @@ -1335,11 +1335,12 @@ subroutine fvn_z_matev(d,a,evala,eveca,status,sortval) |
1335 | 1335 | !call zcopy(d*d,a,1,wc_a,1) |
1336 | 1336 | wc_a(:,:)=a(:,:) |
1337 | 1337 | |
1338 | + ! rwork must be allocated before query | |
1339 | + allocate(rwork(2*d)) | |
1338 | 1340 | ! query optimal work size |
1339 | 1341 | call zgeev('N','V',d,wc_a,d,evala,vl,1,eveca,d,twork,-1,rwork,info) |
1340 | 1342 | lwork=int(twork(1)) |
1341 | - allocate(work(lwork)) | |
1342 | - allocate(rwork(2*d)) | |
1343 | + allocate(work(lwork)) | |
1343 | 1344 | call zgeev('N','V',d,wc_a,d,evala,vl,1,eveca,d,work,lwork,rwork,info) |
1344 | 1345 | |
1345 | 1346 | if (info /= 0) then |
... | ... | @@ -1408,8 +1409,8 @@ bmat=reshape ( (/ (y(i),i=1,np) /) ,shape = (/ np,1 /)) |
1408 | 1409 | |
1409 | 1410 | ! query workspace size |
1410 | 1411 | call dgels('N',np,deg+1,1,mat,np,bmat,np,twork,-1,info) |
1411 | -lwork=twork(1) | |
1412 | -allocate(work(int(lwork))) | |
1412 | +lwork=int(twork(1)) | |
1413 | +allocate(work(lwork)) | |
1413 | 1414 | ! real(kind=sp_kind) call |
1414 | 1415 | call dgels('N',np,deg+1,1,mat,np,bmat,np,work,lwork,info) |
1415 | 1416 | |
... | ... | @@ -1464,8 +1465,8 @@ bmat=reshape ( (/ (y(i),i=1,np) /) ,shape = (/ np,1 /)) |
1464 | 1465 | |
1465 | 1466 | ! query workspace size |
1466 | 1467 | call sgels('N',np,deg+1,1,mat,np,bmat,np,twork,-1,info) |
1467 | -lwork=twork(1) | |
1468 | -allocate(work(int(lwork))) | |
1468 | +lwork=int(twork(1)) | |
1469 | +allocate(work(lwork)) | |
1469 | 1470 | ! real(kind=sp_kind) call |
1470 | 1471 | call sgels('N',np,deg+1,1,mat,np,bmat,np,work,lwork,info) |
1471 | 1472 | |
... | ... | @@ -1527,8 +1528,8 @@ bmat=reshape ( (/ (y(i),i=1,np) /) ,shape = (/ np,1 /)) |
1527 | 1528 | |
1528 | 1529 | ! query workspace size |
1529 | 1530 | call dgelss(np,deg+1,1,mat,np,bmat,np,singval,-1.,rank,twork,-1,info) |
1530 | -lwork=twork(1) | |
1531 | -allocate(work(int(lwork))) | |
1531 | +lwork=int(twork(1)) | |
1532 | +allocate(work(lwork)) | |
1532 | 1533 | ! real(kind=sp_kind) call |
1533 | 1534 | call dgelss(np,deg+1,1,mat,np,bmat,np,singval,-1.,rank,work,lwork,info) |
1534 | 1535 | |
... | ... | @@ -1583,8 +1584,8 @@ bmat=reshape ( (/ (y(i),i=1,np) /) ,shape = (/ np,1 /)) |
1583 | 1584 | |
1584 | 1585 | ! query workspace size |
1585 | 1586 | call sgelss(np,deg+1,1,mat,np,bmat,np,singval,-1.,rank,twork,-1,info) |
1586 | -lwork=twork(1) | |
1587 | -allocate(work(int(lwork))) | |
1587 | +lwork=int(twork(1)) | |
1588 | +allocate(work(lwork)) | |
1588 | 1589 | ! real(kind=sp_kind) call |
1589 | 1590 | call sgelss(np,deg+1,1,mat,np,bmat,np,singval,-1.,rank,work,lwork,info) |
1590 | 1591 |