34!||--- uses -----------------------------------------------------
39 1 IADK ,JDIK ,DIAG_K ,LT_K ,ITASK ,
40 2 NODFT1_SMS,NODLT1_SMS,INDX1_SMS,NODNX_SMS,IAD_ELEM ,
41 3 FR_ELEM ,WEIGHT ,JADI_SMS ,JDII_SMS ,LTI_SMS ,
42 4 ISKYI_SMS ,MSKYI_SMS ,FR_SMS ,FR_RMS ,LIST_SMS ,
43 5 LIST_RMS ,MSKYI_FI_SMS ,VFI ,IMV ,MV ,
44 6 MV6 ,MW6 ,MS ,NODFT ,NODLT )
53#include "implicit_f.inc"
59#include "timeri_c.inc"
65 TYPE(timer_),
INTENT(INOUT) :: TIMERS
66 INTEGER NODFT, NODLT, ITASK, IADK(*) ,JDIK(*),
67 . NODFT1_SMS,NODLT1_SMS,INDX1_SMS(*), NODNX_SMS(*),
68 . IAD_ELEM(2,NSPMD+1) ,FR_ELEM(*),WEIGHT(*),
69 . JADI_SMS(*),JDII_SMS(*),
70 . ISKYI_SMS(LSKYI_SMS,*),FR_SMS(NSPMD+1),FR_RMS(NSPMD+1),
71 . list_sms(*), list_rms(*), imv(*)
72 my_real diag_k(*), lt_k(*) ,lti_sms(*), mskyi_sms(*),mskyi_fi_sms(*), vfi(*), mv(*), ms(*)
73 DOUBLE PRECISION MV6(6,3,*), MW6(6,3,*)
90#if !defined(WITHOUT_LINALG)
92 INTEGER I,J,IT,IP,NLIM,ND,IUPD,IPRI,,NNZI,M,F_DDLI,L_DDLI,INFO,LW,, M_VS1
93 my_real WORK(3*M_VS_SMS+9),W(M_VS_SMS+3)
102 proj_t(nodft:nodlt,m)=zero
107 IF(imonm>0.AND.itask==0)
CALL startime(timers,71)
110 1 nodft ,nodlt ,numnod ,iadk ,jdik ,
111 2 itask ,diag_k ,lt_k ,proj_s(1,m),proj_t(1,m),
112 3 nodft1_sms,nodlt1_sms,indx1_sms,nodnx_sms,iad_elem ,
113 4 fr_elem ,weight ,jadi_sms ,jdii_sms ,lti_sms ,
114 5 iskyi_sms ,mskyi_sms ,fr_sms ,fr_rms ,list_sms ,
115 6 list_rms ,mskyi_fi_sms ,vfi ,imv ,mv ,
121 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,71)
125 IF(imonm>0.AND.itask==0)
CALL startime(timers,72)
126 CALL sms_mam_nm(nodft ,nodlt ,numnod,m_vs1,proj_s ,
127 . proj_t ,proj_k ,weight ,itask )
128 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,72)
139 CALL dsyev(jobz, uplo, m_vs1,proj_k, m_vs1,
142 CALL ssyev(jobz, uplo, m_vs1,proj_k, m_vs1,
148 CALL mav_mm(numnod ,m_vs1 ,proj_s ,proj_k ,itask )
152 CALL mav_mm(numnod ,m_vs1 ,proj_t ,proj_k ,itask )
157 proj_la_1(i)= one/sign(
max(em20,abs(w(i))),w(i))
160 if (ncprisms/=0)
then
161 write(iout,*)
' ** INFO ** EIGENVALUES =',(one/proj_la_1(i),i=1,m_vs_sms)
182 SUBROUTINE sms_inix(TIMERS, NODFT,NODLT,NUMNOD,X ,R ,WEIGHT,ITASK ,
192#include "implicit_f.inc"
197#include "timeri_c.inc"
201 TYPE(timer_),
intent(inout) :: TIMERS
202 INTEGER NODFT,NODLT,NUMNOD,ITASK,(*)
203 my_real X(3,*), R(3,*), DIAG_SMS(*)
220 INTEGER I,J,M,NPV, I3, I2, I1
222 . RSAV(3,NUMNOD), UNS
230 IF(diag_sms(i)/=zero)
THEN
231 uns=one/sqrt(diag_sms(i))
240 IF(imonm>0.AND.itask==0)
CALL startime(timers,72)
241 CALL sms_mav_nm(nodft,nodlt,numnod ,npv ,proj_s ,
242 . r ,proj_w,weight,itask )
243 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,72)
255 proj_w(i3)=proj_w(i3)*proj_la_1(i)
256 proj_w(i2)=proj_w(i2)*proj_la_1(i)
257 proj_w(i1)=proj_w(i1)*proj_la_1(i)
262 IF(imonm>0.AND.itask==0)
CALL startime(timers,73)
263 CALL sms_mav_mn(numnod ,npv ,proj_s ,proj_w ,x ,itask )
264 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,73)
266 END IF !(itask ==0)
THEN
274 IF(diag_sms(i)/=zero)
THEN
275 uns=one/sqrt(diag_sms(i))
299!||====================================================================
300 SUBROUTINE sms_pro_p(TIMERS, NODFT ,NODLT ,NUMNOD ,P ,WEIGHT,ITASK ,
310#include "implicit_f.inc"
315#include "timeri_c.inc"
319 TYPE(timer_),
INTENT(inout) :: TIMERS
320 INTEGER NODFT ,NODLT ,NUMNOD ,ITASK,WEIGHT(*)
321 my_real P(3,*) ,PJ(3,*), DIAG_SMS(*)
337 INTEGER I,J,NPV, I3, I2, I1
354 IF(imonm>0.AND.itask==0)
CALL startime(timers,73)
355 CALL sms_mav_nm(nodft,nodlt,numnod ,npv ,proj_t ,
356 . p ,proj_w ,weight,itask )
357 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,73)
368 proj_w(i3)=proj_w(i3)*proj_la_1(i)
369 proj_w(i2)=proj_w(i2)*proj_la_1(i)
370 proj_w(i1)=proj_w(i1)*proj_la_1(i)
375 IF(imonm>0.AND.itask==0)
CALL startime(timers,73)
376 CALL sms_mav_mn(numnod,npv ,proj_s ,proj_w ,pj ,itask )
377 IF(imonm>0.AND.itask==0)
CALL stoptime(timers,73)
383 p(1,i)=p(1,i)-pj(1,i)
384 p(2,i)=p(2,i)-pj(2,i)
385 p(3,i)=p(3,i)-pj(3,i)
386 IF(diag_sms(i)/=zero)
THEN
387 uns=one/sqrt(diag_sms(i))
405!||--- uses -----------------------------------------------------
409 1 IADK ,JDIK ,DIAG_K ,LT_K ,ITASK ,
410 2 NODFT1_SMS,NODLT1_SMS,INDX1_SMS,NODNX_SMS,IAD_ELEM ,
411 3 FR_ELEM ,WEIGHT ,JADI_SMS ,JDII_SMS ,LTI_SMS ,
412 4 ISKYI_SMS ,MSKYI_SMS ,FR_SMS ,FR_RMS ,LIST_SMS ,
413 5 LIST_RMS ,MSKYI_FI_SMS ,VFI ,IMV ,MV ,
414 6 MV6 ,MW6 ,MS ,U ,P ,
415 7 Y ,NODFT ,NODLT ,KINET )
423#include "implicit_f.inc"
427#include "com01_c.inc"
432 INTEGER NODFT, NODLT, ITASK, IADK(*) ,JDIK(*),
433 . NODFT1_SMS,NODLT1_SMS,INDX1_SMS(*), NODNX_SMS(*),
434 . iad_elem(2,nspmd+1) ,fr_elem(*),weight(*),
435 . jadi_sms(*),jdii_sms(*),
436 . iskyi_sms(lskyi_sms,*),fr_sms(nspmd+1),fr_rms(nspmd+1),
437 . list_sms(*), list_rms(*), imv(*), kinet(*)
439 . diag_k(*), lt_k(*) ,lti_sms(*), mskyi_sms(*),
440 . mskyi_fi_sms(*), vfi(*), mv(*), ms(*), u(3,*), p(3,*), y(3,*)
441 DOUBLE PRECISION MV6(6,*), MW6(6,*)
459 INTEGER I,J,N,IT,IP,NLIM,ND,IUPD,,IERROR,NNZI,M,
462 . WORK(3*M_VS_SMS+9), W(M_VS_SMS+3), S
464 IF (NUPDTL_SMS == 0) return
468 m_vs1 = nupdtl_sms + 3
471 IF(kinet(n)==0.AND.nodnx_sms(n)/=0)
THEN
473 proj_s(n,nupdtl_sms+1)=u(1,n)*s
474 proj_s(n,nupdtl_sms+2)=u(2,n)*s
475 proj_s(n,nupdtl_sms+3)=u(3,n)*s
477 proj_s(n,nupdtl_sms+1)=zero
478 proj_s(n,nupdtl_sms+2)=zero
479 proj_s(n,nupdtl_sms+3)=zero
500 1 IADK ,JDIK ,DIAG_K ,LT_K ,ITASK ,
501 2 NODFT1_SMS,NODLT1_SMS,INDX1_SMS,NODNX_SMS,IAD_ELEM ,
502 3 FR_ELEM ,WEIGHT ,JADI_SMS ,JDII_SMS ,LTI_SMS ,
503 4 ISKYI_SMS ,MSKYI_SMS ,FR_SMS ,FR_RMS ,LIST_SMS ,
504 5 LIST_RMS ,MSKYI_FI_SMS ,VFI ,IMV ,MV ,
505 6 MV6 ,MW6 ,MS ,NODFT ,NODLT ,
514#include "implicit_f.inc"
518#include "com01_c.inc"
519#include "com04_c.inc"
524 INTEGER NODFT, NODLT, ITASK, (*) ,JDIK(*),
525 . NODFT1_SMS,NODLT1_SMS,INDX1_SMS(*), (*),
526 . IAD_ELEM(2,NSPMD+1) ,FR_ELEM(*),WEIGHT(*),
527 . JADI_SMS(*),JDII_SMS(*),
528 . ISKYI_SMS(LSKYI_SMS,*),FR_SMS(NSPMD+1),FR_RMS(NSPMD+1),
529 . LIST_SMS(*), LIST_RMS(*), IMV(*), KINET(*)
530 my_real (*), LT_K(*) ,LTI_SMS(*), MSKYI_SMS(*),
531 . MSKYI_FI_SMS(*), VFI(*), (*), MS(*), (*)
532 DOUBLE PRECISION MV6(6,3,*), MW6(6,3,*)
548 INTEGER I,J,IT,IP,NLIM,ND,IUPD,IPRI,IERROR,M,
549 . INFO,LW,INORM,NPV,ITP,SIZE,LENR,N
551 NPV=
min(numnod-3,m_vs_sms)
555 IF (ncg_run_sms == 0)
THEN
559 CALL sms_inis(numnod,1 , numnod,1 ,npv ,proj_s ,
569 lenr = iad_elem(1,nspmd+1)-iad_elem(1,1)
578 . proj_s ,weight ,itask )
584 IF(kinet(n)/=0.OR.nodnx_sms(n)==0)
THEN
594 . proj_s ,weight ,itask )
606 SUBROUTINE sms_inis(NUMNOD,NODFT ,NODLT, NPF, NPL, S ,
611#include "implicit_f.inc"
615 INTEGER NUMNOD, NODFT, NODLT, NPF, NPL,
616 . nodnx_sms(*), kinet(*)
641 IF(kinet(n)==0.AND.nodnx_sms(n)/=0)
THEN
661!||====================================================================
666#include "implicit_f.inc"
667#include "comlock.inc"
671#include "mvsiz_p.inc"
675#include "com01_c.inc"
676#include
"parit_c.inc"
681 INTEGER ,NODLT ,WEIGHT(*) ,ITASK
682 my_real X(*), Y(*) ,R
686 INTEGER , N, J, K, L, LLT
688 DOUBLE PRECISION R6T(6), DBUF(6)
691 IF (itask==0) r_n2_sms = zero
696 DO n=nodft,nodlt,mvsiz
697 llt =
min(nodlt-n+1,mvsiz)
701 rtmp(i)=x(j)*y(j)*weight(j)
708 r_n2_sms = r_n2_sms + rl
709#include "lockoff.inc"
713 IF (nspmd > 1 .AND. itask == 0)
CALL spmd_sum_s(r_n2_sms)
726 DO n=nodft,nodlt,mvsiz
727 llt =
min(nodlt-n+1,mvsiz)
731 rtmp(i)=x(j)*y(j)*weight(j)
739 r6sms(k)=r6sms(k)+r6t(k)
741#include "lockoff.inc"
748 r_n2_sms=r6sms(1)+r6sms(2)+r6sms(3)+
749 . r6sms(4)+r6sms(5)+r6sms(6)
756 rbuf = dbuf(1)+dbuf(2)+dbuf(3)+
757 . dbuf(4)+dbuf(5)+dbuf(6)
787#include "implicit_f.inc"
788#include "comlock.inc"
792#include "mvsiz_p.inc"
796#include "com01_c.inc"
797#include "parit_c.inc"
802 INTEGER NODFT ,NODLT ,WEIGHT(*) ,ITASK
803 my_real X(*), Y(3,*) ,R(3)
807 INTEGER I , N, J, K, L, LLT
809 . RTMP(3,MVSIZ), RL(3), RBUF(3)
810 DOUBLE PRECISION R6(6,3,MVSIZ), R6T(3,6), DBUF(3,6)
822 DO n=nodft,nodlt,mvsiz
823 llt =
min(nodlt-n+1,mvsiz)
827 rtmp(1,i)=x(j)*y(1,j)*weight(j)
828 rtmp(2,i)=x(j)*y(2,j)*weight(j)
829 rtmp(3,i)=x(j)*y(3,j)*weight(j)
832 rl(1) = rl(1) + rtmp(1,i)
833 rl(2) = rl(2) + rtmp(2,i)
838 r_n2_sms1 = r_n2_sms1 + rl(1)
839 r_n2_sms2 = r_n2_sms2 + rl(2)
840 r_n2_sms3 = r_n2_sms3
841#include "lockoff.inc"
845 IF (nspmd > 1 .AND. itask == 0)
THEN
870 DO n=nodft,nodlt,mvsiz
871 llt =
min(nodlt-n+1,mvsiz)
875 rtmp(1,i)=x(j)*y(1,j)*weight(j)
876 rtmp(2,i)=x(j)*y(2,j)*weight(j)
877 rtmp(3,i)=x(j)*y(3,j)*weight(j)
885 r6t(1,k) = r6t(1,k) + r6(k,1,l)
886 r6t(2,k) = r6t(2,k) + r6(k,2,l)
887 r6t(3,k) = r6t(3,k) + r6(k,3,l)
892 x6sms(1,k)=x6sms(1,k)+r6t(1,k)
893 x6sms(2,k)=x6sms(2,k)+r6t(2,k)
894 x6sms(3,k)=x6sms(3,k)+r6t(3,k)
896#include "lockoff.inc"
903 r_n2_sms1=x6sms(1,1)+x6sms(1,2)+x6sms(1,3)+
904 . x6sms(1,4)+x6sms(1,5)+x6sms(1,6)
905 r_n2_sms2=x6sms(2,1)+x6sms(2,2)+x6sms(2,3)+
906 . x6sms(2,4)+x6sms(2,5)+x6sms(2,6)
907 r_n2_sms3=x6sms(3,1)+x6sms(3,2)+x6sms(3,3)+
908 . x6sms(3,4)+x6sms(3,5)+x6sms(3,6)
912 dbuf(1,k) =x6sms(1,k)
913 dbuf(2,k) =x6sms(2,k)
914 dbuf(3,k) =x6sms(3,k)
917 rbuf(1) = dbuf(1,1)+dbuf(1,2)+dbuf(1,3)+
918 . dbuf(1,4)+dbuf(1,5)+dbuf(1,6)
919 rbuf(2) = dbuf(2,1)+dbuf(2,2)+dbuf(2,3)+
920 . dbuf(2,4)+dbuf(2,5)+dbuf(2,6)
921 rbuf(3) = dbuf(3,1)+dbuf(3,2)+dbuf(3,3)+
922 . dbuf(3,4)+dbuf(3,5)+dbuf(3,6)
949 . B ,C ,WEIGHT,ITASK )
953#include "implicit_f.inc"
957 INTEGER NODFT ,NODLT ,NUMNOD ,MD ,ITASK ,WEIGHT(*)
958 my_real a(numnod,*), b(3,*), c(3,*)
977 CALL sms_produt3(nodft ,nodlt ,a(1,i) ,b ,weight ,c(1,i),itask)
990 . B ,C ,WEIGHT,ITASK)
994#include "implicit_f.inc"
998 INTEGER NODFT ,NODLT ,NUMNOD,MD ,ITASK,WEIGHT(*)
999 my_real a(numnod,*), b(numnod,*), c(md,*)
1019 CALL sms_produt_h( nodft ,nodlt ,a(1,i) ,b(1,j) ,weight,
1037 . A ,WEIGHT ,ITASK )
1041#include "implicit_f.inc"
1045 INTEGER NUMNOD ,MD_F,MD_L,NODFT ,NODLT ,WEIGHT(*), ITASK
1060 INTEGER I,J,F_DDL,L_DDL
1066 CALL sms_produt_h(nodft ,nodlt ,a(1,i) ,a(1,j) ,weight,
1069 CALL vaxpy_h(nodft ,nodlt ,a(1,i) ,a(1,j) ,s ,itask )
1074 CALL sms_produt_h(nodft ,nodlt ,a(1,j) ,a(1,j) ,weight,
1076 s= one/
max(em20,sqrt(sjj))
1077 CALL vscal_h(nodft ,nodlt ,a(1,j) ,s ,itask )
1097#include "implicit_f.inc"
1101 INTEGER ND ,MD ,ITASK
1102 my_real a(nd,*), b(3,*), c(3,*)
1121 IF (itask /= 0)
RETURN
1142#include "implicit_f.inc"
1157 r(1) = r(1) + x(i)*y(1,i)
1158 r(2) = r(2) + x(i)*y(2,i)
1159 r(3) = r(3) + x(i)*y(3,i)
subroutine dsyev(jobz, uplo, n, a, lda, w, work, lwork, info)
DSYEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for SY matrices
subroutine ssyev(jobz, uplo, n, a, lda, w, work, lwork, info)
SSYEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for SY matrices
subroutine sum_6_float(jft, jlt, f, f6, n)
subroutine foat_to_6_float(jft, jlt, f, f6)
subroutine vscal_h(f_ddl, l_ddl, v, s, itask)
subroutine mav_mm(nd, md, a, b, itask)
subroutine vaxpy_h(f_ddl, l_ddl, a, b, s, itask)
subroutine sms_mav_lt2(timers, nodft, nodlt, numnod, iadl, jdil, itask, diag_k, lt_k, v, w, nodft1_sms, nodlt1_sms, indx1_sms, nodnx_sms, iad_elem, fr_elem, weight, jadi_sms, jdii_sms, lti_sms, iskyi_sms, mskyi_sms, fr_sms, fr_rms, list_sms, list_rms, mskyi_fi_sms, vfi, imv, mv, mv6, mw6)
subroutine sms_mortho_gs(nodft, nodlt, numnod, md_f, md_l, a, weight, itask)
subroutine sms_mav_nm(nodft, nodlt, numnod, md, a, b, c, weight, itask)
subroutine sms_mam_nm(nodft, nodlt, numnod, md, a, b, c, weight, itask)
subroutine sms_produt_h(nodft, nodlt, x, y, weight, r, itask)
subroutine sms_inist(timers, iadk, jdik, diag_k, lt_k, itask, nodft1_sms, nodlt1_sms, indx1_sms, nodnx_sms, iad_elem, fr_elem, weight, jadi_sms, jdii_sms, lti_sms, iskyi_sms, mskyi_sms, fr_sms, fr_rms, list_sms, list_rms, mskyi_fi_sms, vfi, imv, mv, mv6, mw6, ms, nodft, nodlt)
subroutine sms_produt3(nodft, nodlt, x, y, weight, r, itask)
subroutine sms_inisi(iadk, jdik, diag_k, lt_k, itask, nodft1_sms, nodlt1_sms, indx1_sms, nodnx_sms, iad_elem, fr_elem, weight, jadi_sms, jdii_sms, lti_sms, iskyi_sms, mskyi_sms, fr_sms, fr_rms, list_sms, list_rms, mskyi_fi_sms, vfi, imv, mv, mv6, mw6, ms, nodft, nodlt, prec_sms, kinet)
subroutine sms_mav_mn(nd, md, a, b, c, itask)
subroutine sms_pro_p(timers, nodft, nodlt, numnod, p, weight, itask, pj, diag_sms)
subroutine sms_produt_v_loc(nddl, x, y, r)
subroutine sms_updst(iadk, jdik, diag_k, lt_k, itask, nodft1_sms, nodlt1_sms, indx1_sms, nodnx_sms, iad_elem, fr_elem, weight, jadi_sms, jdii_sms, lti_sms, iskyi_sms, mskyi_sms, fr_sms, fr_rms, list_sms, list_rms, mskyi_fi_sms, vfi, imv, mv, mv6, mw6, ms, u, p, y, nodft, nodlt, kinet)
subroutine sms_inix(timers, nodft, nodlt, numnod, x, r, weight, itask, diag_sms)
subroutine sms_inis(numnod, nodft, nodlt, npf, npl, s, nodnx_sms, kinet)
subroutine spmd_exch_sms(v, nodnx_sms, iad_elem, fr_elem, size, lenr)
subroutine spmd_rbcast(tabi, tabr, n1, n2, from, add)
subroutine spmd_glob_dsum9(v, len)
subroutine spmd_glob_dpsum9(v, len)
subroutine startime(event, itask)
subroutine stoptime(event, itask)