OpenMCTDHB v2.3
|
00001 ******************************************************************** 00002 C 00003 C XVLIB 00004 C 00005 C Library module containing linear algebra routines that involve the 00006 C multiplication of vectors or scalars. 00007 C 00008 C Nomenclature: 00009 C Each name has 6 basic characters: 00010 C First 2 characters denote the objects being multiplied: 00011 C q: quadratic matrix 00012 C m: general (rectangular) matrix 00013 C h: hermitian matrix 00014 C p: positive definite matrix 00015 C s: symmetric matrix 00016 C u: unitary matrix 00017 C d: diagonal matrix (only diagonal elements are supplied as a 00018 C vector) 00019 C t: tensor of third order 00020 C v: vector 00021 C x: scalar 00022 C e.g. 'xv' denotes the operation (scalar * vector) 00023 C Character 3 denotes how first object is used: 00024 C x: unchanged from input 00025 C t: transpose of input 00026 C a: adjoint of input 00027 C c: complex conjugate of input 00028 C i: inverse (real and complex scalar only) 00029 C Character 4 denotes how second object is used: 00030 C see Character 3 above. 00031 C Character 5, 6 denote data types of first, second object 00032 C respectively: 00033 C z: complex double precision (complex*16) 00034 C c: complex single precision (complex*8) 00035 C d: real double precision (real*8) 00036 C r: real single precision (real*4) 00037 C y: complex matrix stored as two double precision (real*8) 00038 C matrices 00039 C Further characters, if present, give more informaion: 00040 C a: the result is added to a further object 00041 C r: the result is subtracted (removed) from a further object 00042 C o: the result is stored (overwritten) in the second input object 00043 C c: the input matrices commute 00044 C h: the resulting matrix is hermitian 00045 C s: the resulting matrix is symmetric 00046 C 1: the physical dimensions of the matrices differs from those 00047 C used. 00048 C 00049 CC xqxxzz (x,a,c,dim) 00050 CC Definition: x*a(j,i) = c(j,i) 00051 CC Dimensions: a(dim,dim),c(dim,dim),x 00052 C 00053 CC xqxxzza (x,a,c,dim) 00054 CC Definition: x*a(j,i) + c(j,i) = c(j,i) 00055 CC Dimensions: a(dim,dim),c(dim,dim),x 00056 C 00057 CC xmxxzz (x,a,c,dim1,dim2) 00058 CC Definition: x*a(j,i) = c(j,i) 00059 CC Dimensions: a(dim1,dim2),c(dim1,dim2),x 00060 C 00061 C xmxxzza (x,a,c,dim1,dim2) 00062 C Definition: x*a(j,i) + c(j,i) = c(j,i) 00063 C Dimensions: a(dim1,dim2),c(dim1,dim2),x 00064 C 00065 C xmxxdza (x,a,c,dim1,dim2) 00066 C Definition: x*a(j,i) + c(j,i) = c(j,i) 00067 C Dimensions: a(dim1,dim2),c(dim1,dim2),x 00068 C 00069 C xmxtzza (x,a,c,dim1,dim2) 00070 C Definition: x*a(i,j) + c(j,i) = c(j,i) 00071 C Dimensions: a(dim2,dim1),c(dim1,dim2),x 00072 C 00073 C xqxxdd (x,a,c,dim) 00074 C Definition: x*a(j,i) = c(j,i) 00075 C Dimensions: a(dim,dim),c(dim,dim),x 00076 C 00077 C xqxxdda (x,a,c,dim) 00078 C Definition: x*a(j,i) + c(j,i) = c(j,i) 00079 C Dimensions: a(dim,dim),c(dim,dim),x 00080 C 00081 C xqxxzza (x,a,c,dim) 00082 C Definition: x*a(j,i) + c(j,i) = c(j,i) 00083 C Dimensions: a(dim,dim),c(dim,dim),x 00084 C 00085 C xqxxdda1 (x,a,c,phdim,dim) 00086 C Definition: x*a(j,i) + c(j,i) = c(j,i) ; 1 <= i,j <= dim 00087 C Dimensions: a(phdim,dim),c(phdim,dim),x 00088 C 00089 C xqxxzd (x,a,c,dim) 00090 C Definition: x*a(j,i) = c(j,i) 00091 C Dimensions: a(dim,dim),c(dim,dim),x 00092 C 00093 C xdxxdda (x,a,c,dim) 00094 C Definition: x*a(i) + c(i,i) = c(i,i) 00095 C Dimensions: a(dim),c(dim,dim),x 00096 C 00097 C xdxsdda (x,a,c,dim) 00098 C Definition: x*a(i)**2 + c(i,i) = c(i,i) 00099 C Dimensions: a(dim),c(dim,dim),x 00100 C 00101 C xuxxdda (x,c,dim) 00102 C Definition: x + c(i,i) = c(i,i) 00103 C Dimensions: c(dim,dim),x 00104 C 00105 C xvixddo (x,v,dim) 00106 C Definition: inv(x)*v(i) = v(i) 00107 C Dimensions: v(dim),x 00108 C 00109 C xvixzzo (x,v,dim) 00110 C Definition: inv(x)*v(i) = v(i) 00111 C Dimensions: v(dim),x 00112 C 00113 C xvixdzo (x,v,dim) 00114 C Definition: inv(x)*v(i) = v(i) 00115 C Dimensions: v(dim),x 00116 C 00117 C xvxxzza (x,v,w,dim) 00118 C Definition: x*v(i) + w(i) = w(i) 00119 C Dimensions: v(dim),w(dim),x 00120 C 00121 C xvxxdzr (x,v,w,dim) 00122 C Definition: w(i) - x*v(i) = w(i) 00123 C Dimensions: v(dim),w(dim),x 00124 C 00125 C xvxxdza (x,v,w,dim) 00126 C Definition: w(i) + x*v(i) = w(i) 00127 C Dimensions: v(dim),w(dim),x 00128 C 00129 C xvxxzzo (x,v,dim) 00130 C Definition: x*v(i) = v(i) 00131 C Dimensions: v(dim),x 00132 C 00133 C xvxxdzo (x,v,dim) 00134 C Definition: x*v(i) = v(i) 00135 C Dimensions: v(dim),x 00136 C 00137 C xvxxddo (x,v,dim) 00138 C Definition: x*v(i) = v(i) 00139 C Dimensions: v(dim),x 00140 C 00141 C xvxxdds (x,v,w,dim) 00142 C Definition: w(i) - x*v(i) = w(i) 00143 C Dimensions: v(dim),w(dim),x 00144 C 00145 C xvxxzzs (x,v,w,dim) 00146 C Definition: w(i) - x*v(i) = w(i) 00147 C Dimensions: v(dim),w(dim),x 00148 C 00149 C xqxxzzo (x,a,dim) 00150 C Definition: x*a(j,i) = a(j,i) 00151 C Dimensions: a(dim,dim),x 00152 C 00153 C xqxxdzo (x,a,dim) 00154 C Definition: x*a(j,i) = a(j,i) 00155 C Dimensions: a(dim,dim),x 00156 C 00157 C xqixdzo (x,a,dim) 00158 C Definition: inv(x)*a(j,i) = a(j,i) 00159 C Dimensions: a(dim,dim),x 00160 C 00161 C xmxxzzo (x,a,dim1,dim2) 00162 C Definition: x*a(j,i) = a(j,i) 00163 C Dimensions: a(dim1,dim2),x 00164 C 00165 C vvtxdd (u,v,x,dim) 00166 C Definition: u(i)*v(i) = x 00167 C Dimensions: u(dim),v(dim),x 00168 C 00169 C vvtxzz (u,v,x,dim) 00170 C Definition: u(i)*v(i) = x 00171 C Dimensions: u(dim),v(dim),x 00172 C 00173 C vvtxzza (u,v,x,dim) 00174 C Definition: u(i)*v(i) = x 00175 C Dimensions: u(dim),v(dim),x 00176 C 00177 C vvaxzz (u,v,x,dim) 00178 C Definition: dconjg(u(i))*v(i) = x 00179 C Dimensions: u(dim),v(dim),x 00180 C 00181 C vvxazz (u,v,m,dim) 00182 C Definition: u(i)*dconjg(v(j)) = m(i,j) 00183 C Dimensions: d(dim),v(dim),m(dim,dim) 00184 C 00185 C qvxxdd (a,v,w,dim) 00186 C Definition: a(i,j)*v(j) = w(i) . 00187 C Dimensions: a(dim,dim),v(dim),w(dim) 00188 C 00189 C qvxxzz (a,v,w,dim) 00190 C Definition: a(i,j)*v(j) = w(i) . 00191 C Dimensions: a(dim,dim),v(dim),w(dim) 00192 C 00193 C qvxxdd1 (a,v,w,phdim,dim) 00194 C Definition: a(i,j)*v(j) = w(i) ; 1 <= i,j <= dim . 00195 C Dimensions: a(phdim,dim),v(dim),w(dim) 00196 C 00197 C qvtxdd (a,v,w,dim) 00198 C Definition: a(j,i)*v(j) = w(i) . 00199 C Dimensions: a(dim,dim),v(dim),w(dim) 00200 C 00201 C qvtxdd1 (a,v,w,phdim,dim) 00202 C Definition: a(j,i)*v(j) = w(i) ; 1 <= i,j <= dim . 00203 C Dimensions: a(phdim,dim),v(dim),w(dim) 00204 C 00205 C mvtxdd (a,v,w,dim1,dim2) 00206 C Definition: a(j,i)*v(j) = w(i) 00207 C Dimensions: a(dim1,dim2),v(dim1),w(dim2) 00208 C 00209 C mvtxdd1 (a,v,w,phdim,dim1,dim2) 00210 C Definition: a(j,i)*v(j) = w(i) 00211 C Dimensions: a(dim1,dim2),v(dim1),w(dim2) (= used dimensions) 00212 C Dimensions: a(phdim,phdim) (= allocated dimensions) 00213 C 00214 C mvtxzz (a,v,w,dim1,dim2) 00215 C Definition: a(j,i)*v(j) = w(i) . 00216 C Dimensions: a(dim1,dim2),v(dim1),w(dim2) 00217 C 00218 C mvxxzz (a,v,w,dim1,dim2) 00219 C Definition: a(i,j)*v(j) = w(i) . 00220 C Dimensions: a(dim1,dim2),v(dim2),w(dim1) 00221 C 00222 C dvxxdd (a,v,w,dim) 00223 C Definition: a(i)*v(i) = w(i) . 00224 C Dimensions: a(dim),v(dim),w(dim) 00225 C 00226 C dvxxdz (a,v,w,dim) 00227 C Definition: a(i)*v(i) = w(i) . 00228 C Dimensions: a(dim),v(dim),w(dim) 00229 C 00230 C dvxxdzo (a,v,dim) 00231 C Definition: a(i)*v(i) = v(i) . 00232 C Dimensions: a(dim),v(dim) 00233 C 00234 C dvxxddo (a,v,dim) 00235 C Definition: a(i)*v(i) = v(i) . 00236 C Dimensions: a(dim),v(dim) 00237 C 00238 C qvxxdz (a,v,w,dim) 00239 C Definition: a(i,j)*v(j) = w(i) . 00240 C Dimensions: a(dim,dim),v(dim),w(dim) 00241 C 00242 C qvxxdz1 (a,v,w,phdim,dim) 00243 C Definition: a(i,j)*v(j) = w(i) ; 1 <= i,j <= dim . 00244 C Dimensions: a(phdim,dim),v(dim),w(dim) 00245 C 00246 C qvxxzz1 (a,v,w,phdim,dim) 00247 C Definition: a(i,j)*v(j) = w(i) ; 1 <= i,j <= dim . 00248 C Dimensions: a(phdim,dim),v(dim),w(dim) 00249 C 00250 C qvxxyz (a,v,w,dim) 00251 C Definition: a(i,j)*v(j) = w(i) . 00252 C Dimensions: a(dim,dim),v(dim),w(dim) 00253 C 00254 C ---------------------------------------------------------------------- 00255 00256 00257 C----------------------------------------------------------------------- 00258 C Library subroutine xqxxzz 00259 C 00260 C Multiplication of a complex scalar with a complex quadratic matrix: 00261 C x*a(j,i)=c(j,i) 00262 C----------------------------------------------------------------------- 00263 00264 C subroutine xqxxzz (x,a,c,dim) 00265 00266 C implicit none 00267 00268 C integer dim,i,j 00269 C complex*16 x,a(dim,dim),c(dim,dim) 00270 00271 C do i = 1,dim 00272 C do j = 1,dim 00273 C c(j,i) = x*a(j,i) 00274 C enddo 00275 C enddo 00276 00277 C return 00278 C end 00279 00280 C ---------------------------------------------------------------------- 00281 C Library subroutine xqxxzza 00282 C 00283 C Multiplication of a complex scalar with a complex quadratic matrix, 00284 C the result of which is added to a further input complex quadratic 00285 C matrix: 00286 C x*a(j,i) + c(j,i) = c(j,i) 00287 C 00288 C NB Input c matrix is overwritten on output 00289 C----------------------------------------------------------------------- 00290 00291 C subroutine xqxxzza (x,a,c,dim) 00292 00293 C implicit none 00294 00295 C integer dim,i,j 00296 C complex*16 x,a(dim,dim),c(dim,dim) 00297 00298 C do i = 1,dim 00299 C do j = 1,dim 00300 C c(j,i) = c(j,i)+x*a(j,i) 00301 C enddo 00302 C enddo 00303 00304 C return 00305 C end 00306 00307 C ---------------------------------------------------------------------- 00308 C Library subroutine xmxxzz 00309 C 00310 C Multiplication of a complex scalar with a complex rectangular matrix: 00311 C x*a(j,i)=c(j,i) 00312 C----------------------------------------------------------------------- 00313 00314 C subroutine xmxxzz (x,a,c,dim1,dim2) 00315 00316 C implicit none 00317 00318 C integer dim1,dim2,i,j 00319 C complex*16 x,a(dim1,dim2),c(dim1,dim2) 00320 00321 C do i = 1,dim2 00322 C do j = 1,dim1 00323 C c(j,i) = x*a(j,i) 00324 C enddo 00325 C enddo 00326 00327 C return 00328 C end 00329 00330 C ---------------------------------------------------------------------- 00331 C Library subroutine xmxxzza 00332 C 00333 C Multiplication of a complex scalar with a complex rectangular matrix, 00334 C the result of which is added to a further input complex rectangular 00335 C matrix: 00336 C x*a(j,i) + c(j,i) = c(j,i) 00337 C 00338 C NB Input c matrix is overwritten on output 00339 C----------------------------------------------------------------------- 00340 00341 subroutine xmxxzza (x,a,c,dim1,dim2) 00342 00343 implicit none 00344 00345 integer dim1,dim2,i,j 00346 complex*16 x,a(dim1,dim2),c(dim1,dim2) 00347 00348 do i = 1,dim2 00349 do j = 1,dim1 00350 c(j,i) = c(j,i)+x*a(j,i) 00351 enddo 00352 enddo 00353 00354 return 00355 end 00356 00357 C ---------------------------------------------------------------------- 00358 C Library subroutine xmxxdza 00359 C 00360 C Multiplication of a real scalar with a complex rectangular matrix, 00361 C the result of which is added to a further input complex rectangular 00362 C matrix: 00363 C x*a(j,i) + c(j,i) = c(j,i) 00364 C 00365 C NB Input c matrix is overwritten on output 00366 C----------------------------------------------------------------------- 00367 00368 subroutine xmxxdza (x,a,c,dim1,dim2) 00369 00370 implicit none 00371 00372 integer dim1,dim2,i,j 00373 real*8 x 00374 complex*16 a(dim1,dim2),c(dim1,dim2) 00375 00376 do i = 1,dim2 00377 do j = 1,dim1 00378 c(j,i) = c(j,i)+x*a(j,i) 00379 enddo 00380 enddo 00381 00382 return 00383 end 00384 00385 C ---------------------------------------------------------------------- 00386 C Library subroutine xmxtzza 00387 C 00388 C Multiplication of a complex scalar with a transposed complex 00389 C rectangular matrix, the result of which is added to a further input 00390 C complex rectangular matrix: 00391 C x*a(i,j) + c(j,i) = c(j,i) 00392 C 00393 C NB Input c matrix is overwritten on output 00394 C----------------------------------------------------------------------- 00395 00396 subroutine xmxtzza (x,a,c,dim1,dim2) 00397 00398 implicit none 00399 00400 integer dim1,dim2,i,j 00401 complex*16 x,a(dim2,dim1),c(dim1,dim2) 00402 00403 do i = 1,dim2 00404 do j = 1,dim1 00405 c(j,i) = c(j,i)+x*a(i,j) 00406 enddo 00407 enddo 00408 00409 return 00410 end 00411 00412 C ---------------------------------------------------------------------- 00413 C Library subroutine xqxxdd 00414 C 00415 C Multiplication of a real scalar with a real quadratic matrix: 00416 C x*a(j,i)=c(j,i) 00417 C----------------------------------------------------------------------- 00418 00419 subroutine xqxxdd (x,a,c,dim) 00420 00421 implicit none 00422 00423 integer dim,i,j 00424 real*8 x,a(dim,dim),c(dim,dim) 00425 00426 do i = 1,dim 00427 do j = 1,dim 00428 c(j,i) = x*a(j,i) 00429 enddo 00430 enddo 00431 00432 return 00433 end 00434 00435 C ---------------------------------------------------------------------- 00436 C Library subroutine xqxxdda 00437 C 00438 C Multiplication of a real scalar with a real quadratic matrix, 00439 C the result of which is added to a further input real quadratic matrix: 00440 C x*a(j,i) + c(j,i) = c(j,i) 00441 C 00442 C NB Input c matrix is overwritten on output 00443 C----------------------------------------------------------------------- 00444 00445 subroutine xqxxdda (x,a,c,dim) 00446 00447 implicit none 00448 00449 integer dim,i,j 00450 real*8 x,a(dim,dim),c(dim,dim) 00451 00452 do i = 1,dim 00453 do j = 1,dim 00454 c(j,i) = c(j,i)+x*a(j,i) 00455 enddo 00456 enddo 00457 00458 return 00459 end 00460 00461 C ---------------------------------------------------------------------- 00462 C Library subroutine xqxxzza 00463 C 00464 C Multiplication of a complex scalar with a complex quadratic matrix, 00465 C the result of which is added to a further input complex quadratic 00466 C matrix: 00467 C x*a(j,i) + c(j,i) = c(j,i) 00468 C 00469 C NB Input c matrix is overwritten on output 00470 C----------------------------------------------------------------------- 00471 00472 subroutine xqxxzza (x,a,c,dim) 00473 00474 implicit none 00475 00476 integer dim,i,j 00477 complex*16 x,a(dim,dim),c(dim,dim) 00478 00479 do i = 1,dim 00480 do j = 1,dim 00481 c(j,i) = c(j,i)+x*a(j,i) 00482 enddo 00483 enddo 00484 00485 return 00486 end 00487 00488 C ---------------------------------------------------------------------- 00489 C Library subroutine xqxxdda1 00490 C 00491 C Multiplication of a real scalar with a real quadratic matrix, 00492 C the result of which is added to a further input real quadratic matrix: 00493 C x*a(j,i) + c(j,i) = c(j,i) 00494 C 00495 C NB Input c matrix is overwritten on output 00496 C----------------------------------------------------------------------- 00497 00498 subroutine xqxxdda1 (x,a,c,phdim,dim) 00499 00500 implicit none 00501 00502 integer phdim,dim,i,j 00503 real*8 x,a(phdim,dim),c(phdim,dim) 00504 00505 do i = 1,dim 00506 do j = 1,dim 00507 c(j,i) = c(j,i)+x*a(j,i) 00508 enddo 00509 enddo 00510 00511 return 00512 end 00513 00514 C ---------------------------------------------------------------------- 00515 C Library subroutine xqxxzd 00516 C 00517 C Multiplication of a complex scalar with a real quadratic matrix: 00518 C x*a(j,i)=c(j,i) 00519 C----------------------------------------------------------------------- 00520 00521 subroutine xqxxzd (x,a,c,dim) 00522 00523 implicit none 00524 00525 integer dim,i,j 00526 real*8 a(dim,dim) 00527 complex*16 x,c(dim,dim) 00528 00529 do i = 1,dim 00530 do j = 1,dim 00531 c(j,i) = x*a(j,i) 00532 enddo 00533 enddo 00534 00535 return 00536 end 00537 00538 C ---------------------------------------------------------------------- 00539 C Library subroutine xdxxdda 00540 C 00541 C Multiplication of a real scalar with a real diagonal matrix, where 00542 C the result is added to a complex quadratic matrix 00543 C x*a(i,i) + c(i,i) = c(i,i) 00544 C----------------------------------------------------------------------- 00545 00546 subroutine xdxxdda (x,a,c,dim) 00547 00548 implicit none 00549 00550 integer dim,i 00551 real*8 x, a(dim) 00552 complex*16 c(dim,dim) 00553 00554 do i = 1,dim 00555 c(i,i) = c(i,i) + x*a(i) 00556 enddo 00557 00558 return 00559 end 00560 00561 C ---------------------------------------------------------------------- 00562 C Library subroutine xdxsdda 00563 C 00564 C Multiplication of a real scalar with a squared real diagonal matrix, 00565 C where the result is added to a complex quadratic matrix 00566 C x*a(i,i)**2 + c(i,i) = c(i,i) 00567 C----------------------------------------------------------------------- 00568 00569 subroutine xdxsdda (x,a,c,dim) 00570 00571 implicit none 00572 00573 integer dim,i 00574 real*8 x, a(dim) 00575 complex*16 c(dim,dim) 00576 00577 do i = 1,dim 00578 c(i,i) = c(i,i) + x*a(i)**2 00579 enddo 00580 00581 return 00582 end 00583 00584 C ---------------------------------------------------------------------- 00585 C Library subroutine xuxxdda 00586 C 00587 C Multiplication of a real scalar with the unity matrix, where 00588 C the result is added to a complex quadratic matrix 00589 C x + c(i,i) = c(i,i) 00590 C----------------------------------------------------------------------- 00591 00592 subroutine xuxxdda (x,c,dim) 00593 00594 implicit none 00595 00596 integer dim,i 00597 real*8 x 00598 complex*16 c(dim,dim) 00599 00600 do i = 1,dim 00601 c(i,i) = c(i,i) + x 00602 enddo 00603 00604 return 00605 end 00606 00607 C ---------------------------------------------------------------------- 00608 C Library subroutine xvixddo 00609 C 00610 C Multiplication of the inverse of a real scalar with a real vector, 00611 C where the result is stored in the initial array: 00612 C inv(x)*v(i) = v(i) 00613 C 00614 C NB Input v vector is overwritten on output 00615 C This routine can be used for the normalisation of a vector if 00616 C x is the sqrt of the vector scalar product. 00617 C----------------------------------------------------------------------- 00618 00619 subroutine xvixddo (x,v,dim) 00620 00621 implicit none 00622 00623 integer dim,i 00624 real*8 v(dim),x,inv 00625 00626 inv=1.0d0/x 00627 do i = 1,dim 00628 v(i) = inv*v(i) 00629 enddo 00630 00631 return 00632 end 00633 00634 C ---------------------------------------------------------------------- 00635 C Library subroutine xvixzzo 00636 C 00637 C Multiplication of the inverse of a complex scalar with a complex 00638 C vector, where the result is stored in the initial array: 00639 C inv(x)*v(i) = v(i) 00640 C 00641 C NB Input v vector is overwritten on output 00642 C This routine can be used for the normalisation of a vector if 00643 C x is the sqrt of the vector's SYMMETRIC scalar product. 00644 C----------------------------------------------------------------------- 00645 00646 subroutine xvixzzo (x,v,dim) 00647 00648 implicit none 00649 00650 integer dim,i 00651 complex*16 v(dim),x,inv 00652 00653 inv=(1.0d0,0.0d0)/x 00654 do i = 1,dim 00655 v(i) = inv*v(i) 00656 enddo 00657 00658 return 00659 end 00660 00661 C ---------------------------------------------------------------------- 00662 C Library subroutine xvixdzo 00663 C 00664 C Multiplication of the inverse of a real scalar with a complex vector, 00665 C where the result is stored in the initial array: 00666 C inv(x)*v(i) = v(i) 00667 C 00668 C NB Input v vector is overwritten on output 00669 C This routine can be used for the normalisation of a vector if 00670 C x is the sqrt of the vector scalar product. 00671 C----------------------------------------------------------------------- 00672 00673 subroutine xvixdzo (x,v,dim) 00674 00675 implicit none 00676 00677 integer dim,i 00678 real*8 x,inv 00679 complex*16 v(dim) 00680 00681 inv=1.0d0/x 00682 do i = 1,dim 00683 v(i) = inv*v(i) 00684 enddo 00685 00686 return 00687 end 00688 00689 C ---------------------------------------------------------------------- 00690 C Library subroutine xvxxzza 00691 C 00692 C Multiplication of a complex scalar with a complex vector, 00693 C where the result is added to a further vector 00694 C x*v(i) +w(i) = w(i) 00695 C 00696 C NB Input w vector is overwritten on output 00697 C----------------------------------------------------------------------- 00698 00699 subroutine xvxxzza (x,v,w,dim) 00700 00701 implicit none 00702 00703 integer dim,i 00704 complex*16 v(dim),w(dim),x 00705 00706 do i = 1,dim 00707 w(i) = w(i)+x*v(i) 00708 enddo 00709 00710 return 00711 end 00712 00713 C ---------------------------------------------------------------------- 00714 C Library subroutine xvxxdzr 00715 C 00716 C Multiplication of a real scalar with a complex vector, 00717 C where the result is subtracted from a further vector 00718 C w(i) - x*v(i) = w(i) 00719 C 00720 C NB Input w vector is overwritten on output 00721 C----------------------------------------------------------------------- 00722 00723 subroutine xvxxdzr (x,v,w,dim) 00724 00725 implicit none 00726 00727 integer dim,i 00728 real*8 x 00729 complex*16 v(dim),w(dim) 00730 00731 do i = 1,dim 00732 w(i) = w(i)-x*v(i) 00733 enddo 00734 00735 return 00736 end 00737 00738 C ---------------------------------------------------------------------- 00739 C Library subroutine xvxxdza 00740 C 00741 C Multiplication of a real scalar with a complex vector, 00742 C where the result is added to a further vector 00743 C w(i) + x*v(i) = w(i) 00744 C 00745 C NB Input w vector is overwritten on output 00746 C----------------------------------------------------------------------- 00747 00748 subroutine xvxxdza (x,v,w,dim) 00749 00750 implicit none 00751 00752 integer dim,i 00753 real*8 x 00754 complex*16 v(dim),w(dim) 00755 00756 do i = 1,dim 00757 w(i) = w(i)+x*v(i) 00758 enddo 00759 00760 return 00761 end 00762 00763 C ---------------------------------------------------------------------- 00764 C Library subroutine xvxxdds 00765 C 00766 C Multiplication of a real scalar with a real vector, 00767 C where the result is subtracted from a further vector 00768 C w(i) - x*v(i) = w(i) 00769 C 00770 C NB Input w vector is overwritten on output 00771 C----------------------------------------------------------------------- 00772 00773 subroutine xvxxdds (x,v,w,dim) 00774 00775 implicit none 00776 00777 integer dim,i 00778 real*8 v(dim),w(dim),x 00779 00780 do i = 1,dim 00781 w(i) = w(i)-x*v(i) 00782 enddo 00783 00784 return 00785 end 00786 00787 C ---------------------------------------------------------------------- 00788 C Library subroutine xvxxzzo 00789 C 00790 C Multiplication of a complex scalar with a complex vector, 00791 C where the result is stored in the input vector 00792 C x*v(i) = v(i) 00793 C 00794 C NB Input v vector is overwritten on output 00795 C----------------------------------------------------------------------- 00796 00797 subroutine xvxxzzo (x,v,dim) 00798 00799 implicit none 00800 00801 integer dim,i 00802 complex*16 v(dim),x 00803 00804 do i = 1,dim 00805 v(i) = x*v(i) 00806 enddo 00807 00808 return 00809 end 00810 00811 C ---------------------------------------------------------------------- 00812 C Library subroutine xvxxdzo 00813 C 00814 C Multiplication of a real scalar with a complex vector, 00815 C where the result is stored in the input vector 00816 C x*v(i) = v(i) 00817 C 00818 C NB Input v vector is overwritten on output 00819 C----------------------------------------------------------------------- 00820 00821 subroutine xvxxdzo (x,v,dim) 00822 00823 implicit none 00824 00825 integer dim,i 00826 real*8 x 00827 complex*16 v(dim) 00828 00829 do i = 1,dim 00830 v(i) = x*v(i) 00831 enddo 00832 00833 return 00834 end 00835 00836 C ---------------------------------------------------------------------- 00837 C Library subroutine xvxxddo 00838 C 00839 C Multiplication of a real scalar with a real vector, 00840 C where the result is stored in the input vector 00841 C x*v(i) = v(i) 00842 C 00843 C NB Input v vector is overwritten on output 00844 C----------------------------------------------------------------------- 00845 00846 subroutine xvxxddo (x,v,dim) 00847 00848 implicit none 00849 00850 integer dim,i 00851 real*8 v(dim),x 00852 00853 do i = 1,dim 00854 v(i) = x*v(i) 00855 enddo 00856 00857 return 00858 end 00859 00860 C ---------------------------------------------------------------------- 00861 C Library subroutine xvxxzzs 00862 C 00863 C Multiplication of a complex scalar with a complex vector, 00864 C where the result is subtracted from a further vector 00865 C w(i) - x*v(i) = w(i) 00866 C 00867 C NB Input w vector is overwritten on output 00868 C----------------------------------------------------------------------- 00869 00870 subroutine xvxxzzs (x,v,w,dim) 00871 00872 implicit none 00873 00874 integer dim,i 00875 complex*16 v(dim),w(dim),x 00876 00877 do i = 1,dim 00878 w(i) = w(i)-x*v(i) 00879 enddo 00880 00881 return 00882 end 00883 00884 C ---------------------------------------------------------------------- 00885 C Library subroutine xqxxzzo 00886 C 00887 C Multiplication of a complex scalar with a quadratic complex matrix, 00888 C where the result is stored in the input matrix 00889 C x*a(j,i) = a(j,i) 00890 C 00891 C NB Input a matrix is overwritten on output 00892 C----------------------------------------------------------------------- 00893 00894 subroutine xqxxzzo (x,a,dim) 00895 00896 implicit none 00897 00898 integer dim,i,j 00899 complex*16 a(dim,dim),x 00900 00901 do i = 1,dim 00902 do j = 1,dim 00903 a(j,i) = x*a(j,i) 00904 enddo 00905 enddo 00906 00907 return 00908 end 00909 00910 C ---------------------------------------------------------------------- 00911 C Library subroutine xqxxdzo 00912 C 00913 C Multiplication of a real scalar with a quadratic complex matrix, 00914 C where the result is stored in the input matrix 00915 C x*a(j,i) = a(j,i) 00916 C 00917 C NB Input a matrix is overwritten on output 00918 C----------------------------------------------------------------------- 00919 00920 subroutine xqxxdzo (x,a,dim) 00921 00922 implicit none 00923 00924 integer dim,i,j 00925 real*8 x 00926 complex*16 a(dim,dim) 00927 00928 do i = 1,dim 00929 do j = 1,dim 00930 a(j,i) = x*a(j,i) 00931 enddo 00932 enddo 00933 00934 return 00935 end 00936 00937 C ---------------------------------------------------------------------- 00938 C Library subroutine xqixdzo 00939 C 00940 C Multiplication of the inverse of a real scalar with a quadratic 00941 C complex matrix, where the result is stored in the input matrix 00942 C x*a(j,i) = a(j,i) 00943 C 00944 C NB Input a matrix is overwritten on output 00945 C----------------------------------------------------------------------- 00946 00947 subroutine xqixdzo (x,a,dim) 00948 00949 implicit none 00950 00951 integer dim,i,j 00952 real*8 x,inv 00953 complex*16 a(dim,dim) 00954 00955 inv=1.0d0/x 00956 do i = 1,dim 00957 do j = 1,dim 00958 a(j,i) = inv*a(j,i) 00959 enddo 00960 enddo 00961 00962 return 00963 end 00964 00965 C ---------------------------------------------------------------------- 00966 C Library subroutine xmxxzzo 00967 C 00968 C Multiplication of a complex scalar with a rectangular complex matrix, 00969 C where the result is stored in the input matrix 00970 C x*a(j,i) = a(j,i) 00971 C 00972 C NB Input a matrix is overwritten on output 00973 C----------------------------------------------------------------------- 00974 00975 subroutine xmxxzzo (x,a,dim1,dim2) 00976 00977 implicit none 00978 00979 integer dim1,dim2,i,j 00980 complex*16 a(dim1,dim2),x 00981 00982 do i = 1,dim2 00983 do j = 1,dim1 00984 a(j,i) = x*a(j,i) 00985 enddo 00986 enddo 00987 00988 return 00989 end 00990 00991 C----------------------------------------------------------------------- 00992 C Library subroutine vvtxdd 00993 C 00994 C scalar product of two real vectors: 00995 C u(i)*v(i)=s 00996 C----------------------------------------------------------------------- 00997 00998 subroutine vvtxdd (u,v,s,dim) 00999 01000 implicit none 01001 01002 integer dim,i 01003 real*8 u(dim),v(dim),s 01004 01005 s = u(1)*v(1) 01006 do i = 2,dim 01007 s = s+u(i)*v(i) 01008 enddo 01009 01010 return 01011 end 01012 01013 C----------------------------------------------------------------------- 01014 C Library subroutine vvtxzz 01015 C 01016 C symmetric product of two complex vectors: 01017 C u(i)*v(i)=s 01018 C----------------------------------------------------------------------- 01019 01020 subroutine vvtxzz (u,v,s,dim) 01021 01022 implicit none 01023 01024 integer dim,i 01025 complex*16 u(dim),v(dim),s 01026 01027 s = u(1)*v(1) 01028 do i = 2,dim 01029 s = s+u(i)*v(i) 01030 enddo 01031 01032 return 01033 end 01034 01035 C----------------------------------------------------------------------- 01036 C Library subroutine vvtxzz 01037 C 01038 C symmetric product of two complex vectors (result is added to s): 01039 C u(i)*v(i)=s 01040 C----------------------------------------------------------------------- 01041 01042 subroutine vvtxzza (u,v,s,dim) 01043 01044 implicit none 01045 01046 integer dim,i 01047 complex*16 u(dim),v(dim),s 01048 01049 do i = 1,dim 01050 s = s+u(i)*v(i) 01051 enddo 01052 01053 return 01054 end 01055 01056 C----------------------------------------------------------------------- 01057 C Library subroutine vvaxzz 01058 C 01059 C scalar product of two complex vectors: 01060 C dconjg(u(i))*v(i)=s 01061 C----------------------------------------------------------------------- 01062 subroutine vvaxzz (u,v,s,dim) 01063 01064 implicit none 01065 01066 integer dim,i 01067 complex*16 u(dim),v(dim),s 01068 01069 s = dconjg(u(1))*v(1) 01070 do i = 2,dim 01071 s = s+dconjg(u(i))*v(i) 01072 enddo 01073 01074 return 01075 end 01076 01077 01078 C----------------------------------------------------------------------- 01079 C Library subroutine vvxazz 01080 C 01081 C u(i)*dconjg(v(j)) = m(i,j) 01082 C Dimensions: d(dim),v(dim),m(dim,dim) 01083 C----------------------------------------------------------------------- 01084 subroutine vvxazz(u,v,m,dim) 01085 01086 implicit none 01087 01088 integer dim,i,j 01089 complex*16 u(dim),v(dim),m(dim,dim) 01090 01091 do i=1,dim 01092 do j=1,dim 01093 m(i,j) = u(i)*dconjg(v(j)) 01094 enddo 01095 enddo 01096 01097 return 01098 end 01099 01100 01101 01102 C----------------------------------------------------------------------- 01103 C Library subroutine qvxxdd 01104 C 01105 C Multiplication of a real quadratic matrix with a real vector 01106 C a(i,j)*v(j)=w(i) 01107 C----------------------------------------------------------------------- 01108 subroutine qvxxdd (a,v,w,dim) 01109 01110 implicit none 01111 01112 integer dim,i,j 01113 real*8 a(dim,dim),v(dim),w(dim) 01114 01115 do i = 1,dim 01116 w(i) = a(i,1)*v(1) 01117 enddo 01118 do j = 2,dim 01119 do i = 1,dim 01120 w(i) = w(i)+a(i,j)*v(j) 01121 enddo 01122 enddo 01123 01124 return 01125 end 01126 01127 C----------------------------------------------------------------------- 01128 C Library subroutine qvxxzz 01129 C 01130 C Multiplication of a complex quadratic matrix with a complex vector 01131 C a(i,j)*v(j)=w(i) 01132 C----------------------------------------------------------------------- 01133 01134 subroutine qvxxzz (a,v,w,dim) 01135 01136 implicit none 01137 01138 integer dim,i,j 01139 complex*16 a(dim,dim),v(dim),w(dim) 01140 01141 do i = 1,dim 01142 w(i) = a(i,1)*v(1) 01143 enddo 01144 do j = 2,dim 01145 do i = 1,dim 01146 w(i) = w(i)+a(i,j)*v(j) 01147 enddo 01148 enddo 01149 01150 return 01151 end 01152 01153 C----------------------------------------------------------------------- 01154 C Library subroutine qvxxdd1 01155 C 01156 C Multiplication of a real quadratic matrix with a real vector 01157 C a(i,j)*v(j)=w(i) 01158 C 01159 C NB phdim is physical (leading) dimension, dim is used dimension 01160 C----------------------------------------------------------------------- 01161 01162 subroutine qvxxdd1 (a,v,w,phdim,dim) 01163 01164 implicit none 01165 01166 integer phdim,dim,i,j 01167 real*8 a(phdim,dim),v(dim),w(dim) 01168 01169 do i = 1,dim 01170 w(i) = a(i,1)*v(1) 01171 enddo 01172 do j = 2,dim 01173 do i = 1,dim 01174 w(i) = w(i)+a(i,j)*v(j) 01175 enddo 01176 enddo 01177 01178 return 01179 end 01180 01181 C ---------------------------------------------------------------------- 01182 C Library subroutine qvtxdd 01183 C 01184 C Multiplication of the transpose of a real quadratic matrix with a 01185 C real vector 01186 C a(j,i)*v(j)=w(i) 01187 C----------------------------------------------------------------------- 01188 01189 subroutine qvtxdd (a,v,w,dim) 01190 01191 implicit none 01192 01193 integer dim,i,j 01194 real*8 a(dim,dim),v(dim),w(dim) 01195 01196 do i = 1,dim 01197 w(i) = a(1,i)*v(1) 01198 do j = 2,dim 01199 w(i) = w(i)+a(j,i)*v(j) 01200 enddo 01201 enddo 01202 01203 return 01204 end 01205 01206 C ---------------------------------------------------------------------- 01207 C Library subroutine qvtxdd1 01208 C 01209 C Multiplication of the transpose of a real quadratic matrix with a 01210 C real vector 01211 C a(j,i)*v(j)=w(i) 01212 C 01213 C NB phdim is physical (leading) dimension, dim is used dimension 01214 C----------------------------------------------------------------------- 01215 01216 subroutine qvtxdd1 (a,v,w,phdim,dim) 01217 01218 implicit none 01219 01220 integer phdim,dim,i,j 01221 real*8 a(phdim,dim),v(dim),w(dim) 01222 01223 do i = 1,dim 01224 w(i) = a(1,i)*v(1) 01225 do j = 2,dim 01226 w(i) = w(i)+a(j,i)*v(j) 01227 enddo 01228 enddo 01229 01230 return 01231 end 01232 01233 C ---------------------------------------------------------------------- 01234 C Library subroutine mvtxdd 01235 C 01236 C Multiplication of the transpose of a real rectangular matrix with a 01237 C real vector 01238 C a(j,i)*v(j)=w(i) 01239 C 01240 C----------------------------------------------------------------------- 01241 01242 subroutine mvtxdd (a,v,w,dim1,dim2) 01243 01244 implicit none 01245 01246 integer dim1,dim2,i,j 01247 real*8 a(dim1,dim2),v(dim1),w(dim2) 01248 01249 do i = 1,dim2 01250 w(i) = a(1,i)*v(1) 01251 do j = 2,dim1 01252 w(i) = w(i)+a(j,i)*v(j) 01253 enddo 01254 enddo 01255 01256 return 01257 end 01258 01259 C ---------------------------------------------------------------------- 01260 C Library subroutine mvtxdd1 01261 C 01262 C Multiplication of the transpose of a real rectangular matrix with a 01263 C real vector 01264 C a(j,i)*v(j)=w(i) 01265 C 01266 C NB phdim is physical (leading) dimension, dim1-2 is used dimension 01267 C----------------------------------------------------------------------- 01268 01269 subroutine mvtxdd1 (a,v,w,phdim,dim1,dim2) 01270 01271 implicit none 01272 01273 integer phdim,dim1,dim2,i,j 01274 real*8 a(phdim,phdim),v(dim1),w(dim2) 01275 01276 do i = 1,dim2 01277 w(i) = a(1,i)*v(1) 01278 do j = 2,dim1 01279 w(i) = w(i)+a(j,i)*v(j) 01280 enddo 01281 enddo 01282 01283 return 01284 end 01285 01286 C ---------------------------------------------------------------------- 01287 C Library subroutine mvtxzz 01288 C 01289 C Multiplication of the transpose of a complex rectangular matrix with a 01290 C complex vector 01291 C a(j,i)*v(j)=w(i) 01292 C----------------------------------------------------------------------- 01293 01294 subroutine mvtxzz (a,v,w,dim1,dim2) 01295 01296 implicit none 01297 01298 integer dim1,dim2,i,j 01299 complex*16 a(dim1,dim2),v(dim1),w(dim2) 01300 01301 do i = 1,dim2 01302 w(i) = a(1,i)*v(1) 01303 do j = 2,dim1 01304 w(i) = w(i)+a(j,i)*v(j) 01305 enddo 01306 enddo 01307 01308 return 01309 end 01310 01311 01312 C ---------------------------------------------------------------------- 01313 C Library subroutine mvxxzz 01314 C 01315 C Multiplication of a complex rectangular matrix with a complex vector. 01316 C a(i,j)*v(j)=w(i) 01317 C----------------------------------------------------------------------- 01318 01319 subroutine mvxxzz (a,v,w,dim1,dim2) 01320 01321 implicit none 01322 01323 integer dim1,dim2,i,j 01324 complex*16 a(dim1,dim2),v(dim2),w(dim1) 01325 01326 do i = 1,dim1 01327 w(i) = a(i,1)*v(1) 01328 enddo 01329 do j = 2,dim2 01330 do i = 1,dim1 01331 w(i) = w(i)+a(i,j)*v(j) 01332 enddo 01333 enddo 01334 01335 return 01336 end 01337 01338 C ---------------------------------------------------------------------- 01339 C Library subroutine dvxxdd 01340 C 01341 C Multiplication of a diagonal real matrix with a real vector 01342 C a(i)*v(i)=w(i) 01343 C----------------------------------------------------------------------- 01344 01345 subroutine dvxxdd (a,v,w,dim) 01346 01347 implicit none 01348 01349 integer dim,i 01350 real*8 a(dim),v(dim),w(dim) 01351 01352 do i = 1,dim 01353 w(i) = a(i)*v(i) 01354 enddo 01355 01356 return 01357 end 01358 01359 C ---------------------------------------------------------------------- 01360 C Library subroutine dvxxdz 01361 C 01362 C Multiplication of a diagonal real matrix with a complex vector 01363 C a(i)*v(i)=w(i) 01364 C----------------------------------------------------------------------- 01365 01366 subroutine dvxxdz (a,v,w,dim) 01367 01368 implicit none 01369 01370 integer dim,i 01371 real*8 a(dim) 01372 complex*16 v(dim),w(dim) 01373 01374 do i = 1,dim 01375 w(i) = a(i)*v(i) 01376 enddo 01377 01378 return 01379 end 01380 01381 C ---------------------------------------------------------------------- 01382 C Library subroutine dvxxdzo 01383 C 01384 C Multiplication of a diagonal real matrix with a complex vector 01385 C a(i)*v(i)=v(i) 01386 C----------------------------------------------------------------------- 01387 01388 subroutine dvxxdzo (a,v,dim) 01389 01390 implicit none 01391 01392 integer dim,i 01393 real*8 a(dim) 01394 complex*16 v(dim) 01395 01396 do i = 1,dim 01397 v(i) = a(i)*v(i) 01398 enddo 01399 01400 return 01401 end 01402 01403 C ---------------------------------------------------------------------- 01404 C Library subroutine dvxxddo 01405 C 01406 C Multiplication of a diagonal real matrix with a real vector 01407 C a(i)*v(i)=v(i) 01408 C----------------------------------------------------------------------- 01409 01410 subroutine dvxxddo (a,v,dim) 01411 01412 implicit none 01413 01414 integer dim,i 01415 real*8 a(dim),v(dim) 01416 01417 do i = 1,dim 01418 v(i) = a(i)*v(i) 01419 enddo 01420 01421 return 01422 end 01423 01424 C----------------------------------------------------------------------- 01425 C Library subroutine qvxxdz 01426 C 01427 C Multiplication of a real quadratic matrix with a complex vector 01428 C a(i,j)*v(j)=w(i) 01429 C----------------------------------------------------------------------- 01430 01431 subroutine qvxxdz (a,v,w,dim) 01432 01433 implicit none 01434 01435 integer dim,i,j 01436 real*8 a(dim,dim) 01437 complex*16 v(dim),w(dim) 01438 01439 do i = 1,dim 01440 w(i) = a(i,1)*v(1) 01441 enddo 01442 do j = 2,dim 01443 do i = 1,dim 01444 w(i) = w(i)+a(i,j)*v(j) 01445 enddo 01446 enddo 01447 01448 return 01449 end 01450 01451 C----------------------------------------------------------------------- 01452 C Library subroutine qvxxdz1 01453 C 01454 C Multiplication of a real quadratic matrix with a complex vector 01455 C a(i,j)*v(j)=w(i) 01456 C 01457 C NB phdim is physical (leading) dimension, dim is used dimension 01458 C----------------------------------------------------------------------- 01459 01460 subroutine qvxxdz1 (a,v,w,phdim,dim) 01461 01462 implicit none 01463 01464 integer phdim,dim,i,j 01465 real*8 a(phdim,dim) 01466 complex*16 v(dim),w(dim) 01467 01468 do i = 1,dim 01469 w(i) = a(i,1)*v(1) 01470 enddo 01471 do j = 2,dim 01472 do i = 1,dim 01473 w(i) = w(i)+a(i,j)*v(j) 01474 enddo 01475 enddo 01476 01477 return 01478 end 01479 01480 C----------------------------------------------------------------------- 01481 C Library subroutine qvxxzz1 01482 C 01483 C Multiplication of a complex quadratic matrix with a complex vector 01484 C a(i,j)*v(j)=w(i) 01485 C 01486 C NB phdim is physical (leading) dimension, dim is used dimension 01487 C----------------------------------------------------------------------- 01488 01489 subroutine qvxxzz1 (a,v,w,phdim,dim) 01490 01491 implicit none 01492 01493 integer phdim,dim,i,j 01494 complex*16 a(phdim,dim),v(dim),w(dim) 01495 01496 do i = 1,dim 01497 w(i) = a(i,1)*v(1) 01498 enddo 01499 do j = 2,dim 01500 do i = 1,dim 01501 w(i) = w(i)+a(i,j)*v(j) 01502 enddo 01503 enddo 01504 01505 return 01506 end 01507 01508 C----------------------------------------------------------------------- 01509 C Library subroutine qvxxyz 01510 C 01511 C Multiplication of a complex quadratic matrix with a complex vector, 01512 C where the complex matrix is stored as 2 real matrices. 01513 C a(i,j)*v(j)=w(i) 01514 C----------------------------------------------------------------------- 01515 01516 subroutine qvxxyz (a,v,w,dim) 01517 01518 implicit none 01519 01520 integer dim,i,j 01521 real*8 a(dim,dim,2) 01522 complex*16 v(dim),w(dim) 01523 01524 do i = 1,dim 01525 w(i) = a(i,1,1)*v(1)+(0,1)*a(i,1,2)*v(1) 01526 enddo 01527 do j = 2,dim 01528 do i = 1,dim 01529 w(i) = w(i)+a(i,j,1)*v(j)+(0,1)*a(i,j,2)*v(j) 01530 enddo 01531 enddo 01532 01533 return 01534 end 01535 01536