1351
1352
1353
1354
1355
1356
1357
1358
1359 logical, intent(in) :: Ltrans
1360
1361 integer, intent(in) :: ng, Lscale, outLoop, NinnLoop
1362
1363 real(dp), intent(inout) :: py(Ndatum(ng))
1364
1365
1366
1367 integer :: is, ie, inc, iss, i
1368 integer :: nol, nols, nole, ninc
1369 integer :: ingood
1370 integer :: iobs, nvec
1371
1372 real(dp) :: dla, fac, facritz
1373
1374
1375
1376
1377 IF (ltrans) THEN
1378 nols=outloop-1
1379 nole=1
1380 ninc=-1
1381 ELSE
1382 nols=1
1383 nole=outloop-1
1384 ninc=1
1385 END IF
1386
1387
1388
1389
1390 DO nol=nols,nole,ninc
1391
1392
1393
1394
1395 ingood=0
1396 DO i=1,ninnloop
1397 IF (cg_ritzerr(i,nol).le.ritzmaxerr) THEN
1398 ingood=ingood+1
1399 END IF
1400 END DO
1401 IF (nritzev.gt.0) THEN
1402 nconvritz=nritzev
1403 ingood=nconvritz
1404 ELSE
1405 nconvritz=ingood
1406 END IF
1407
1408 IF (lscale.gt.0) THEN
1409 is=1
1410 ie=ingood
1411 inc=1
1412 ELSE
1413 is=ingood
1414 ie=1
1415 inc=-1
1416 END IF
1417
1418 IF (ltrans) THEN
1419 iss=is
1420 is=ie
1421 ie=iss
1422 inc=-inc
1423 END IF
1424
1425
1426
1427
1428
1429
1430
1431
1432 DO nvec=is,ie,inc
1433
1434 fac=0.0_dp
1435
1436 IF (lritz) THEN
1437
1438
1439
1440
1441 facritz=cg_beta(ninnloop+1,nol)* &
1442 & cg_zv(ninnloop,ninnloop+1-nvec,nol)
1443
1444
1445
1446 IF (.not.ltrans) THEN
1447 dla=0.0_dp
1448 DO iobs=1,ndatum(ng)
1449 dla=dla+zcglwk(iobs,ninnloop+1,nol)*py(iobs)
1450 END DO
1451 facritz=facritz*dla
1452 END IF
1453
1454 END IF
1455
1456
1457
1458
1459
1460
1461
1462
1463 dla=0.0_dp
1464 DO iobs=1,ndatum(ng)
1465 dla=dla+vcglev(iobs,nvec,nol)*py(iobs)
1466 END DO
1467
1468
1469
1470 IF (lscale.eq.-1) THEN
1471 fac=(cg_ritz(ninnloop+1-nvec,nol)-1.0_dp)*dla
1472 ELSE IF (lscale.eq.1) THEN
1473 fac=(1.0_dp/cg_ritz(ninnloop+1-nvec,nol)-1.0_dp)*dla
1474 ELSE IF (lscale.eq.-2) THEN
1475 fac=(sqrt(cg_ritz(ninnloop+1-nvec,nol))-1.0_dp)*dla
1476 ELSE IF (lscale.eq.2) THEN
1477 fac=(1.0_dp/sqrt(cg_ritz(ninnloop+1-nvec,nol))-1.0_dp)*dla
1478 END IF
1479
1480 IF (.not.ltrans) THEN
1481 IF (lritz.and.(lscale.eq.-2)) THEN
1482 fac=fac+facritz/sqrt(cg_ritz(ninnloop+1-nvec,nol))
1483 END IF
1484 IF (lritz.and.(lscale.eq.2)) THEN
1485 fac=fac-facritz/cg_ritz(ninnloop+1-nvec,nol)
1486 END IF
1487 END IF
1488
1489 DO iobs=1,ndatum(ng)
1490 py(iobs)=py(iobs)+fac*vcglev(iobs,nvec,nol)
1491 END DO
1492
1493 IF (lritz.and.ltrans) THEN
1494
1495 IF (lscale.eq.2) THEN
1496 fac=-facritz*dla/cg_ritz(ninnloop+1-nvec,nol)
1497 END IF
1498 IF (lscale.eq.-2) THEN
1499 fac=facritz*dla/sqrt(cg_ritz(ninnloop+1-nvec,nol))
1500 END IF
1501
1502 DO iobs=1,ndatum(ng)
1503 py(iobs)=py(iobs)+fac*zcglwk(iobs,ninnloop+1,nol)
1504 END DO
1505
1506 END IF
1507
1508 END DO
1509 END DO
1510
1511 RETURN