16 USE yomhook
,ONLY : lhook, dr_hook
17 USE parkind1
,ONLY : jprb
40 MODULE PROCEDURE splie
63 MODULE PROCEDURE tred2
90 MODULE PROCEDURE splri
93 MODULE PROCEDURE splrs
99 MODULE PROCEDURE splpr
102 MODULE PROCEDURE spldv
108 MODULE PROCEDURE splpv
111 MODULE PROCEDURE splp
114 MODULE PROCEDURE spltt
121 MODULE PROCEDURE splu
124 MODULE PROCEDURE splw
130 MODULE PROCEDURE splc
133 MODULE PROCEDURE splm
163 REAL,
DIMENSION(:),
INTENT(IN) :: a
164 INTEGER,
INTENT(IN) :: ia
165 INTEGER,
INTENT(IN) :: ib
166 REAL,
DIMENSION(:),
INTENT(OUT) :: b
169 REAL(KIND=JPRB) :: zhook_handle
171 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SSCOPY_1',0,zhook_handle)
179 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SSCOPY_1',1,zhook_handle)
188 REAL,
DIMENSION(:,:),
INTENT(IN) :: a
189 INTEGER,
INTENT(IN) :: ia
190 INTEGER,
INTENT(IN) :: ib
191 REAL,
DIMENSION(:,:),
INTENT(OUT) :: b
193 REAL,
DIMENSION(SIZE(A,1)*SIZE(A,2)) :: a1
194 REAL,
DIMENSION(SIZE(B,1)*SIZE(B,2)) :: b1
198 REAL(KIND=JPRB) :: zhook_handle
200 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SSCOPY_2',0,zhook_handle)
201 n=
SIZE(a,1)*
SIZE(a,2)
204 a1((j-1)*
SIZE(a,1)+1:j*
SIZE(a,1))=a(:,j)
216 b(:,j)=b1((j-1)*
SIZE(b,1)+1:j*
SIZE(b,1))
218 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SSCOPY_2',1,zhook_handle)
230 REAL,
DIMENSION(:),
INTENT(IN) :: a
231 REAL,
DIMENSION(:,:),
INTENT(IN) :: b
232 REAL,
DIMENSION(:,:),
INTENT(OUT):: r
235 REAL(KIND=JPRB) :: zhook_handle
237 IF (lhook) CALL dr_hook(
'MODE_SPLINES:MXIDML',0,zhook_handle)
238 IF (
SIZE(b,1).EQ.0 .OR.
SIZE(b,2).EQ.0 .AND. lhook) &
239 CALL dr_hook(
'MODE_SPLINES:MXIDML',1,zhook_handle)
240 IF (
SIZE(b,1).EQ.0 .OR.
SIZE(b,2).EQ.0)
RETURN
245 IF (lhook) CALL dr_hook(
'MODE_SPLINES:MXIDML',1,zhook_handle)
254 REAL,
DIMENSION(:,:),
INTENT(IN) :: a
255 REAL,
DIMENSION(:,:),
INTENT(IN) :: b
256 REAL,
DIMENSION(:,:),
INTENT(OUT)::r
260 REAL(KIND=JPRB) :: zhook_handle
262 IF (lhook) CALL dr_hook(
'MODE_SPLINES:MTXAXM',0,zhook_handle)
268 rij=rij+b(j,k)*a(k,i)
271 r(l,i)=r(l,i)+rij*a(j,l)
276 IF (lhook) CALL dr_hook(
'MODE_SPLINES:MTXAXM',1,zhook_handle)
286 REAL,
DIMENSION(:,:),
INTENT(IN) :: a
287 REAL,
DIMENSION(:,:),
INTENT(IN) :: b
288 REAL,
DIMENSION(:,:),
INTENT(OUT)::r
291 REAL(KIND=JPRB) :: zhook_handle
293 IF (lhook) CALL dr_hook(
'MODE_SPLINES:MXMSPL_1',0,zhook_handle)
299 r(i,j)=r(i,j)+a(i,k)*b(k,j)
303 IF (lhook) CALL dr_hook(
'MODE_SPLINES:MXMSPL_1',1,zhook_handle)
312 REAL,
DIMENSION(:,:),
INTENT(IN) :: a
313 REAL,
DIMENSION(:),
INTENT(IN) :: b
314 REAL,
DIMENSION(:),
INTENT(OUT)::r
317 REAL(KIND=JPRB) :: zhook_handle
319 IF (lhook) CALL dr_hook(
'MODE_SPLINES:MXMSPL_2',0,zhook_handle)
324 r(i)=r(i)+a(i,j)*b(j)
327 IF (lhook) CALL dr_hook(
'MODE_SPLINES:MXMSPL_2',1,zhook_handle)
336 REAL,
DIMENSION(:),
INTENT(IN) :: a
337 REAL,
DIMENSION(:),
INTENT(IN) :: b
338 REAL,
INTENT(OUT)::res
341 REAL(KIND=JPRB) :: zhook_handle
343 IF (lhook) CALL dr_hook(
'MODE_SPLINES:MXMSPL_3',0,zhook_handle)
349 IF (lhook) CALL dr_hook(
'MODE_SPLINES:MXMSPL_3',1,zhook_handle)
359 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: a
360 INTEGER,
INTENT(OUT) :: irep
362 REAL,
DIMENSION(SIZE(A,1)*SIZE(A,2)) :: a2
363 INTEGER,
DIMENSION(SIZE(A,1)) :: index
364 REAL,
DIMENSION(SIZE(A,1)) :: ri
365 INTEGER :: n, np, np1, i, j, jj, k, l, kk, kj, jl
366 INTEGER :: ij0, ji0, ij, ji
368 REAL(KIND=JPRB) :: zhook_handle
370 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SMXINV',0,zhook_handle)
379 a2((j-1)*n+1:j*n)=a(:,j)
388 IF(index(j).NE.0)
THEN
390 IF (elm.GT.pivot)
THEN
400 IF (pivot.EQ.0.)
THEN
402 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SMXINV',1,zhook_handle)
430 a2(jl)=a2(jl)+elm*ri(l)
445 a(:,j)= a2((j-1)*n+1:j*n)
454 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SMXINV',1,zhook_handle)
466 INTEGER,
INTENT(IN) :: ndeg
467 INTEGER,
DIMENSION(:,:),
INTENT(OUT) :: ie
469 INTEGER,
DIMENSION(SIZE(IE,1)) :: nv
470 INTEGER :: i, j, k, t, n, n0, nc
471 REAL(KIND=JPRB) :: zhook_handle
473 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLIE',0,zhook_handle)
491 IF (j.EQ.i) ie(j,n)=ie(j,n)+1
498 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLIE',1,zhook_handle)
508 INTEGER,
INTENT(IN) :: nord
509 REAL,
DIMENSION(:),
INTENT(IN) :: x1
510 REAL,
DIMENSION(:,:),
INTENT(IN) :: x2
511 REAL,
DIMENSION(:,:),
INTENT(IN) :: g
512 REAL,
DIMENSION(:),
INTENT(OUT):: rk
514 INTEGER :: i, id, jd, exp, isigne
515 INTEGER :: nd, n, di, dj
517 REAL(KIND=JPRB) :: zhook_handle
519 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLK_1',0,zhook_handle)
526 IF (mod(nd,2).EQ.0)
THEN
528 isigne=(-1)**(1+nord+nd/2)
531 isigne=(-1)**(nord+nd/2)
546 rk(i) = isigne*d2**exp
547 IF (mod(nd,2).EQ.0) rk(i)=rk(i)*0.5*log(d2)
550 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLK_1',1,zhook_handle)
559 INTEGER,
INTENT(IN) :: nord
560 REAL,
DIMENSION(:,:),
INTENT(IN) :: x1
561 REAL,
DIMENSION(:,:),
INTENT(IN) :: x2
562 REAL,
DIMENSION(:,:),
INTENT(IN) :: g
563 REAL,
DIMENSION(:,:),
INTENT(OUT):: rk
565 INTEGER :: i1, i2, id, jd, isigne
566 INTEGER :: nd, n1, n2
567 REAL :: exp, d2, di, dj
568 REAL(KIND=JPRB) :: zhook_handle
570 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLK_2',0,zhook_handle)
578 IF (mod(nd,2).EQ.0)
THEN
580 isigne=(-1)**(1+nord+nd/2)
583 isigne=(-1)**(nord+nd/2)
593 di=x1(id,i1)-x2(id,i2)
594 dj=x1(jd,i1)-x2(jd,i2)
599 rk(i1,i2) = isigne*d2**exp
600 IF (mod(nd,2).EQ.0) rk(i1,i2)=rk(i1,i2)*0.5*log(d2)
604 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLK_2',1,zhook_handle)
615 INTEGER,
INTENT(IN) :: id
616 INTEGER,
DIMENSION(:),
INTENT(IN) :: nsd
617 REAL,
DIMENSION(:),
INTENT(IN) :: xe
618 REAL,
DIMENSION(:,:,:),
INTENT(IN) :: ai
619 INTEGER,
INTENT(OUT) :: idx
620 INTEGER,
INTENT(OUT) :: idx1
624 REAL(KIND=JPRB) :: zhook_handle
626 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLBFIN',0,zhook_handle)
629 IF (xe(id).LE.ai(id,2,i))
THEN
632 IF (xe(id).GT.ai(id,1,i1)) idx1=i1
633 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLBFIN',1,zhook_handle)
638 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLBFIN',1,zhook_handle)
647 REAL,
DIMENSION(:),
INTENT(IN) :: x
648 INTEGER,
DIMENSION(:,:),
INTENT(IN) :: ie
649 REAL,
DIMENSION(:),
INTENT(OUT) :: t
652 REAL(KIND=JPRB) :: zhook_handle
654 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLT_1',0,zhook_handle)
659 IF (ie(k,j).NE.0) t(j)=t(j)*x(k)**ie(k,j)
662 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLT_1',1,zhook_handle)
671 REAL,
DIMENSION(:,:),
INTENT(IN) :: x
672 INTEGER,
DIMENSION(:,:),
INTENT(IN) :: ie
673 REAL,
DIMENSION(:,:),
INTENT(OUT) :: t
676 REAL(KIND=JPRB) :: zhook_handle
678 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLT_2',0,zhook_handle)
684 IF (ie(k,j).NE.0) t(i,j)=t(i,j)*x(k,i)**ie(k,j)
688 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLT_2',1,zhook_handle)
698 SUBROUTINE sple(NORD,X,G,C,XE,ZE)
702 INTEGER,
INTENT(IN) :: nord
703 REAL,
DIMENSION(:,:),
INTENT(IN) :: x
704 REAL,
DIMENSION(:,:),
INTENT(IN) :: g
705 REAL,
DIMENSION(:),
INTENT(IN) :: c
706 REAL,
DIMENSION(:),
INTENT(IN) :: xe
707 REAL,
INTENT(OUT) :: ze
709 INTEGER,
DIMENSION(SIZE(X,1),SIZE(C)-SIZE(X,2)) :: iw
710 REAL,
DIMENSION(SIZE(X,2)) :: we1
711 REAL,
DIMENSION(SIZE(IW,2)) :: we2
713 INTEGER :: m, n, ne, m1, m2, m3
714 REAL(KIND=JPRB) :: zhook_handle
716 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLE',0,zhook_handle)
721 CALL
splk(nord,xe,x,g,we1)
723 CALL
mxmspl(we1,c(1:n),zout1)
727 CALL
splie(nord-1,iw)
731 CALL
mxmspl(we2,c(n+1:n+m),zout2)
735 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLE',1,zhook_handle)
740 SUBROUTINE splb2e1(NORD,M,G,C,XE,IDX,IDX1,IDY,IDY1,ZE)
745 INTEGER,
INTENT(IN) :: nord
746 INTEGER,
INTENT(IN) :: m
747 REAL,
DIMENSION(:,:),
INTENT(IN) :: g
748 REAL,
DIMENSION(:,:,:),
INTENT(IN) :: c
749 REAL,
DIMENSION(:),
INTENT(IN) :: xe
750 INTEGER,
INTENT(IN) :: idx,idx1,idy,idy1
751 REAL,
INTENT(OUT) :: ze
754 REAL :: rx,ry,alphax,alphay,sum_ax,sum_ay,sum_a
755 REAL :: zxy, zx1y, zxy1, zx1y1
756 REAL(KIND=JPRB) :: zhook_handle
759 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLB2E1',0,zhook_handle)
763 IF (idx1.NE.0) rx=(xe(1)-ai(1,1,idx1))/(ai(1,2,idx)-ai(1,1,idx1))
764 IF (idy1.NE.0) ry=(xe(2)-ai(2,1,idy1))/(ai(2,2,idy)-ai(2,1,idy1))
765 alphax=(rx-1.)*(rx-1.)*(2*rx+1.)
766 alphay=(ry-1.)*(ry-1.)*(2*ry+1.)
777 IF (ns(idx,idy).GE.m)
THEN
781 sum_a=sum_a+alphax*alphay
784 CALL
sple(nord,xs(:,1:nn,idx,idy),g,c(1:nn+m,idx,idy),xe,zxy)
788 IF (ns(idx1,idy).GE.m)
THEN
790 sum_ax=sum_ax+1.-alphax
791 sum_a=sum_a+(1-alphax)*alphay
793 CALL
sple(nord,xs(:,1:nn,idx1,idy),g,c(1:nn+m,idx1,idy),xe,zx1y)
798 IF (ns(idx,idy1).GE.m)
THEN
800 sum_ay=sum_ay+1.-alphay
801 sum_a=sum_a+alphax*(1-alphay)
803 CALL
sple(nord,xs(:,1:nn,idx,idy1),g,c(1:nn+m,idx,idy1),xe,zxy1)
807 IF (idx1.NE.0 .AND. idy1.NE.0)
THEN
808 IF (ns(idx1,idy1).GE.m)
THEN
810 sum_a=sum_a+(1-alphax)*(1-alphay)
812 CALL
sple(nord,xs(:,1:nn,idx1,idy1),g,c(1:nn+m,idx1,idy1),xe,zx1y1)
817 IF (idx1.NE.0 .AND. idy1.EQ.0)
THEN
818 ze=(alphax*zxy+(1-alphax)*zx1y)/sum_ax
819 ELSEIF (idx1.EQ.0 .AND. idy1.NE.0)
THEN
820 ze=(alphay*zxy+(1-alphay)*zxy1)/sum_ay
821 ELSEIF (idx1.NE.0 .AND. idy1.NE.0)
THEN
822 ze=(alphax*alphay *zxy + (1-alphax)* alphay*zx1y + &
823 alphax*(1-alphay)*zxy1 + (1-alphax)*(1-alphay)*zx1y1) / sum_a
828 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLB2E1',1,zhook_handle)
835 SUBROUTINE splb2e(NORD,M,NSDI,NSDJ,G,C,XE,ZE)
839 INTEGER,
INTENT(IN) :: nord
840 INTEGER,
INTENT(IN) :: m
841 INTEGER,
INTENT(IN) :: nsdi,nsdj
842 REAL,
DIMENSION(:,:),
INTENT(IN) :: g
843 REAL,
DIMENSION(:,:,:),
INTENT(IN) :: c
844 REAL,
DIMENSION(:,:),
INTENT(IN) :: xe
845 REAL,
DIMENSION(:),
INTENT(OUT) :: ze
847 INTEGER,
DIMENSION(2) :: nsd
849 INTEGER :: idx, idx1, idy, idy1
850 REAL(KIND=JPRB) :: zhook_handle
852 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLB2E',0,zhook_handle)
860 CALL
splbfin(id,nsd,xe(:,j),ai,idx,idx1)
862 CALL
splbfin(id,nsd,xe(:,j),ai,idy,idy1)
863 CALL
splb2e1(nord,m,g,c,xe(:,j),idx,idx1,idy,idy1,ze(j))
865 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLB2E',1,zhook_handle)
882 REAL,
DIMENSION(:,:),
INTENT(IN) :: a
883 REAL,
DIMENSION(:),
INTENT(OUT) :: d
884 REAL,
DIMENSION(:),
INTENT(OUT) :: e
885 REAL,
DIMENSION(:,:),
INTENT(OUT):: z
887 INTEGER :: n, i, ii, j, k, l, jp1
888 REAL :: f, g, h, scale, hh
889 REAL(KIND=JPRB) :: zhook_handle
892 IF (lhook) CALL dr_hook(
'MODE_SPLINES:TRED2',0,zhook_handle)
913 scale=scale+abs(z(i,k))
915 IF (scale.NE.0.0)
THEN
931 z(j,i)=z(i,j)/(scale*h)
951 z(j,k)=z(j,k)-f*e(k)-g*z(i,k)
971 IF (d(i).NE.0.0)
THEN
978 z(k,j)=z(k,j)-g*z(k,i)
991 IF (lhook) CALL dr_hook(
'MODE_SPLINES:TRED2',1,zhook_handle)
1000 REAL,
DIMENSION(:),
INTENT(INOUT) :: d
1001 REAL,
DIMENSION(:),
INTENT(INOUT) :: e
1002 REAL,
DIMENSION(:,:),
INTENT(OUT) :: z
1003 INTEGER,
INTENT(OUT) :: ierr
1005 INTEGER :: i, ii, j, k, l, m, n, mml
1006 REAL :: b, c, f, g, h, p, r, s
1008 REAL(KIND=JPRB) :: zhook_handle
1011 IF (lhook) CALL dr_hook(
'MODE_SPLINES:TQL2_2',0,zhook_handle)
1025 h=machep*(abs(d(l))+abs(e(l)))
1028 IF (abs(e(m)).LE.b)
EXIT
1031 DO WHILE (abs(e(l)).GT.b)
1034 IF (lhook) CALL dr_hook(
'MODE_SPLINES:TQL2_2',1,zhook_handle)
1038 p=(d(l+1)-d(l)) / (2.0 * e(l))
1040 h=d(l)-e(l) / (p+sign(r,p))
1053 IF (abs(p).GE.abs(e(i)))
THEN
1067 d(i+1)=h+s*(c*g+s*d(i))
1070 z(k,i+1)=s*z(k,i)+c*h
1101 IF (lhook) CALL dr_hook(
'MODE_SPLINES:TQL2_2',1,zhook_handle)
1113 REAL,
DIMENSION(:,:),
INTENT(IN) :: ar
1114 REAL,
DIMENSION(:),
INTENT(OUT) :: wr
1115 REAL,
DIMENSION(:,:),
INTENT(OUT) :: zr
1116 REAL,
DIMENSION(:),
INTENT(OUT) :: work
1117 INTEGER,
INTENT(OUT) :: ierr
1118 REAL(KIND=JPRB) :: zhook_handle
1120 IF (lhook) CALL dr_hook(
'MODE_SPLINES:EISRS1',0,zhook_handle)
1121 CALL
tred2(ar,wr,work,zr)
1122 CALL
tql2_2(wr,work,zr,ierr)
1123 IF (lhook) CALL dr_hook(
'MODE_SPLINES:EISRS1',1,zhook_handle)
1136 REAL,
DIMENSION(:),
INTENT(IN) :: b
1137 REAL,
DIMENSION(:),
INTENT(IN) :: w
1138 INTEGER,
INTENT(IN) :: n
1139 REAL,
INTENT(IN) :: p
1140 REAL,
INTENT(OUT) :: res
1143 REAL(KIND=JPRB) :: zhook_handle
1145 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLV',0,zhook_handle)
1151 res=res+w(i)**2 / d**2
1154 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLV',1,zhook_handle)
1168 REAL,
DIMENSION(:),
INTENT(IN) :: w
1169 REAL,
INTENT(OUT) :: res
1172 REAL(KIND=JPRB) :: zhook_handle
1174 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLS2VI',0,zhook_handle)
1180 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLS2VI',1,zhook_handle)
1189 REAL,
DIMENSION(:),
INTENT(IN) :: b, w
1190 INTEGER,
INTENT(IN) :: n
1191 REAL,
INTENT(IN) :: p
1192 REAL,
INTENT(OUT) :: res
1196 REAL(KIND=JPRB) :: zhook_handle
1198 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLBVM',0,zhook_handle)
1202 res=res+(w(i)**2)/(b(i)+n*p)**2
1206 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLBVM',1,zhook_handle)
1215 REAL,
DIMENSION(:),
INTENT(IN) :: bi
1216 REAL,
DIMENSION(:),
INTENT(IN) :: wi
1217 INTEGER,
INTENT(IN) :: n
1218 REAL,
INTENT(IN) :: p
1219 REAL,
INTENT(OUT) :: res
1220 REAL(KIND=JPRB) :: zhook_handle
1222 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLS2V',0,zhook_handle)
1223 CALL
splbvm(bi,wi,n,p,res)
1225 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLS2V',1,zhook_handle)
1234 REAL,
DIMENSION(:),
INTENT(IN) :: b
1235 REAL,
DIMENSION(:),
INTENT(IN) :: w
1236 INTEGER,
INTENT(IN) :: n
1237 REAL,
INTENT(IN) :: p
1238 REAL,
INTENT(OUT) :: res
1240 REAL :: da, db, a1, a2, a3, b2, c1, c2
1242 REAL(KIND=JPRB) :: zhook_handle
1244 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLDS2V',0,zhook_handle)
1256 db=db+b2*(a2*c1+n*p*(-2*a3*c1+a2*c2))
1260 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLDS2V',1,zhook_handle)
1270 REAL,
DIMENSION(:),
INTENT(IN) :: b
1271 REAL,
DIMENSION(:),
INTENT(IN) :: w
1272 INTEGER,
INTENT(IN) :: n
1273 REAL,
INTENT(INOUT) :: p0
1274 REAL,
INTENT(IN) :: s2
1275 REAL,
INTENT(OUT) :: p
1276 INTEGER,
INTENT(OUT) :: irep
1278 INTEGER,
PARAMETER :: eps=1.e-2
1279 REAL :: p1, rinf, rs, drs
1281 REAL(KIND=JPRB) :: zhook_handle
1284 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLPS2V',0,zhook_handle)
1286 IF (rinf.LE.s2)
THEN
1289 WRITE(*,fmt=
'(A53,G15.5)') &
1290 "SPLPS2V : S2 > VALEUR DE LA FONCTION POUR P INFINI = ",rinf
1291 p=(b(
SIZE(b))**2)/b(1)
1292 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLPS2V',1,zhook_handle)
1305 IF (abs(p1-p0)/p0.LT.eps)
THEN
1314 WRITE(*,fmt=
'(A34,G15.5)') &
1315 "SPLPS2V : SOLUTION NEGATIVE : P = ",p
1317 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLPS2V',1,zhook_handle)
1325 WRITE(*,fmt=
'(A48,A23,G15.5)') &
1326 "SPLPS2V : NOMBRE MAXIMAL D ITERATIONS ATTEINT : ",&
1327 "VALEUR DE P ATTEINTE : ",p1
1328 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLPS2V',1,zhook_handle)
1340 REAL,
DIMENSION(:),
INTENT(IN) :: w
1341 INTEGER,
INTENT(IN) :: n
1342 REAL,
INTENT(OUT) :: res
1345 REAL(KIND=JPRB) :: zhook_handle
1347 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLRI',0,zhook_handle)
1353 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLRI',1,zhook_handle)
1355 END SUBROUTINE splri
1362 REAL,
DIMENSION(:),
INTENT(IN) :: b
1363 REAL,
DIMENSION(:),
INTENT(IN) :: w
1364 INTEGER,
INTENT(IN) :: n
1365 REAL,
INTENT(IN) :: s2
1366 REAL,
INTENT(OUT) :: p
1370 REAL(KIND=JPRB) :: zhook_handle
1372 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLPR0',0,zhook_handle)
1375 res=res+(w(i)/b(i))**2
1378 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLPR0',1,zhook_handle)
1387 REAL,
DIMENSION(:),
INTENT(IN) :: b
1388 REAL,
DIMENSION(:),
INTENT(IN) :: w
1389 INTEGER,
INTENT(IN) :: n
1390 REAL,
INTENT(IN) :: p
1391 REAL,
INTENT(OUT):: res
1394 REAL(KIND=JPRB) :: zhook_handle
1396 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLRS',0,zhook_handle)
1399 res=res+(w(i)/(b(i)+n*p))**2
1402 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLRS',1,zhook_handle)
1404 END SUBROUTINE splrs
1411 REAL,
DIMENSION(:),
INTENT(IN) :: b
1412 REAL,
DIMENSION(:),
INTENT(IN) :: w
1413 INTEGER,
INTENT(IN) :: n
1414 REAL,
INTENT(IN) :: p
1415 REAL,
INTENT(OUT) :: res
1419 REAL(KIND=JPRB) :: zhook_handle
1421 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLDRS',0,zhook_handle)
1425 res=res+w(j)**2*b(j)/(d**3)
1428 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLDRS',1,zhook_handle)
1438 INTEGER,
INTENT(IN) :: n
1439 REAL,
DIMENSION(:),
INTENT(IN) :: w
1440 REAL,
DIMENSION(:),
INTENT(IN) :: b
1441 REAL,
INTENT(INOUT) :: p0
1442 REAL,
INTENT(INOUT) :: s2
1443 REAL,
INTENT(INOUT) :: p
1444 INTEGER,
INTENT(OUT) :: irep
1446 INTEGER,
PARAMETER :: eps=1.e-2
1447 REAL :: rs, drs, p1, rinf
1449 REAL(KIND=JPRB) :: zhook_handle
1453 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLPR',0,zhook_handle)
1454 CALL
splri(w,n,rinf)
1455 IF (rinf.LE.s2)
THEN
1458 WRITE(*,fmt=
'(A51,G15.5)') &
1459 "SPLPR : S2 > VALEUR DE LA FONCTION POUR P INFINI = ",rinf
1460 p=(b(
SIZE(b))**2)/b(1)
1461 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLPR',1,zhook_handle)
1466 IF (p0.EQ.0.) CALL
splpr0(b,w,n,s2,p0)
1472 CALL
splrs(b,w,n,p0,rs)
1473 CALL
spldrs(b,w,n,p0,drs)
1477 IF (abs(p1-p0)/p0.LT.eps)
THEN
1486 WRITE(*,fmt=
'(A32,G15.5)') &
1487 "SPLPR : SOLUTION NEGATIVE : P = ",p
1489 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLPR',1,zhook_handle)
1497 WRITE(*,fmt=
'(A45,A23,G15.5)') &
1498 "SPLPR : NOMBRE MAXIMAL D ITERATIONS ATTEINT: ",&
1499 "VALEUR DE P ATTEINTE : ",p1
1500 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLPR',1,zhook_handle)
1502 END SUBROUTINE splpr
1512 REAL,
DIMENSION(:),
INTENT(IN) :: b
1513 REAL,
DIMENSION(:),
INTENT(IN) :: w
1514 INTEGER,
INTENT(IN) :: n
1515 REAL,
INTENT(IN) :: p
1516 REAL,
INTENT(OUT) :: res
1518 REAL :: s1, s2, sb2, sb3, a1, a2, b2
1520 REAL(KIND=JPRB) :: zhook_handle
1522 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLDV',0,zhook_handle)
1537 res=2.*n**2*res/(s1**3)
1538 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLDV',1,zhook_handle)
1540 END SUBROUTINE spldv
1547 REAL,
DIMENSION(:),
INTENT(IN) :: b
1548 REAL,
DIMENSION(:),
INTENT(IN) :: w
1549 INTEGER,
INTENT(IN) :: n
1550 REAL,
INTENT(IN) :: p
1551 REAL,
INTENT(OUT) :: res
1553 REAL :: s1, s2, s3, sb2, sb3, sb4
1556 REAL(KIND=JPRB) :: zhook_handle
1558 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLD2V',0,zhook_handle)
1576 res=3.*s2**2*sb2-4.*s2*s1*sb3+3.*s1**2*sb4-2.*s3*s1*sb2
1579 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLD2V',1,zhook_handle)
1589 INTEGER,
INTENT(IN) :: n
1590 REAL,
DIMENSION(:),
INTENT(IN):: b, w
1591 REAL,
INTENT(INOUT) :: p0
1592 REAL,
INTENT(OUT) :: p
1593 INTEGER,
INTENT(OUT) :: irep
1595 INTEGER,
PARAMETER:: eps=xsurf_tiny, epsr=1.e-2
1596 REAL :: dvm, d2vm, p1
1597 INTEGER :: iflag, niter
1598 REAL(KIND=JPRB) :: zhook_handle
1602 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLPV',0,zhook_handle)
1603 CALL
spldv(b,w,n,0.,dvm)
1608 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLPV',1,zhook_handle)
1625 CALL
spld2v(b,w,n,p0,d2vm)
1626 IF (d2vm.GT.0.)
EXIT
1630 IF (d2vm.LE.0.)
THEN
1634 WRITE(*,fmt=
'(A41)') &
1635 "SPLPV : PAS DE MINIMUM: D2VM < 0 PARTOUT "
1636 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLPV',1,zhook_handle)
1647 CALL
spldv(b,w,n,p0,dvm)
1648 CALL
spld2v(b,w,n,p0,d2vm)
1651 IF (abs(d2vm).LT.eps)
THEN
1653 IF (iflag.EQ.0)
EXIT
1656 WRITE(*,fmt=
'(A28)')
"SPLPV : PASSAGE PAR D2VM = 0"
1657 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLPV',1,zhook_handle)
1664 IF (abs(p1-p0)/p0.LT.epsr)
THEN
1668 IF (iflag.EQ.0)
EXIT
1671 WRITE(*,fmt=
'(A33,G15.5)') &
1672 "SPLPV : SOLUTION NEGATIVE : P = ",p1
1675 IF (d2vm.GE.0.)
THEN
1682 IF (iflag.EQ.0)
EXIT
1685 WRITE(*,fmt=
'(A28,G15.5)') &
1686 "SPLPV : MAXIMUM DE VM : P = ",p1
1689 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLPV',1,zhook_handle)
1695 IF (iflag.NE.0)
THEN
1698 WRITE(*,fmt=
'(A46,A23,G15.5)') &
1699 "SPLPV : NOMBRE MAXIMAL D ITERATIONS ATTEINT : ",&
1700 "VALEUR DE P ATTEINTE : ",p1
1701 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLPV',1,zhook_handle)
1706 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLPV',1,zhook_handle)
1708 END SUBROUTINE splpv
1713 SUBROUTINE splp(LISSAGE,N,B,W,P,S2,IREP)
1717 INTEGER,
INTENT(IN) :: lissage
1718 INTEGER,
INTENT(IN) :: n
1719 REAL,
DIMENSION(:),
INTENT(IN) :: b
1720 REAL,
DIMENSION(:),
INTENT(IN) :: w
1721 REAL,
INTENT(INOUT) :: p
1722 REAL,
INTENT(INOUT) :: s2
1723 INTEGER,
INTENT(OUT) :: irep
1726 REAL(KIND=JPRB) :: zhook_handle
1728 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLP',0,zhook_handle)
1729 IF (lissage.EQ.1)
THEN
1732 CALL
splps2v(b,w,n,p0,s2,p,irep)
1735 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLP',1,zhook_handle)
1738 ELSEIF (lissage.EQ.10)
THEN
1741 CALL
splpr(n,w,b,p0,s2,p,irep)
1744 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLP',1,zhook_handle)
1747 ELSEIF (lissage.EQ.2)
THEN
1750 CALL
splpv(n,b,w,p0,p,irep)
1751 IF (irep.NE.0) irep=-3
1754 ELSEIF (lissage.EQ.3)
THEN
1756 CALL
splrs(b,w,n,p,s2)
1758 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLP',1,zhook_handle)
1770 REAL,
DIMENSION(:,:),
INTENT(IN) :: x
1771 REAL,
DIMENSION(:),
INTENT(IN) :: ds
1772 INTEGER,
DIMENSION(:,:),
INTENT(IN) :: iw
1773 REAL,
DIMENSION(:,:),
INTENT(OUT) :: tm
1774 REAL,
DIMENSION(:,:),
INTENT(OUT) :: tt
1775 INTEGER,
INTENT(OUT) :: irep
1777 REAL(KIND=JPRB) :: zhook_handle
1780 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLTT',0,zhook_handle)
1785 CALL
mxmspl(transpose(tm),tm,tt)
1789 IF (irep.NE.0)
WRITE(*,fmt=
'(A27)')
"SPLTT: MATRICE TT NON INVERSIBLE"
1790 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLTT',1,zhook_handle)
1792 END SUBROUTINE spltt
1799 INTEGER,
INTENT(IN) :: nord
1800 REAL,
DIMENSION(:,:),
INTENT(IN) :: x
1801 REAL,
DIMENSION(:),
INTENT(IN) :: ds
1802 INTEGER,
DIMENSION(:),
INTENT(OUT) :: iw
1803 REAL,
DIMENSION(:),
INTENT(OUT) :: ttt
1804 REAL,
DIMENSION(:,:),
INTENT(OUT) :: r
1805 INTEGER,
INTENT(OUT)::irep
1808 REAL(KIND=JPRB) :: zhook_handle
1810 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLR_1',0,zhook_handle)
1829 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLR_1',1,zhook_handle)
1838 INTEGER,
INTENT(IN) :: nord
1839 REAL,
DIMENSION(:,:),
INTENT(IN) :: x
1840 REAL,
DIMENSION(:),
INTENT(IN) :: ds
1841 INTEGER,
DIMENSION(:,:),
INTENT(OUT) :: iw
1842 REAL,
DIMENSION(:,:),
INTENT(OUT) :: ttt
1843 REAL,
DIMENSION(:,:),
INTENT(OUT) :: r
1844 INTEGER,
INTENT(OUT)::irep
1846 REAL,
DIMENSION(SIZE(X,2),SIZE(X,2)) :: c
1847 REAL,
DIMENSION(SIZE(X,2),SIZE(IW,2)) :: tm
1848 REAL,
DIMENSION(SIZE(IW,2),SIZE(IW,2)) :: tt
1849 REAL,
DIMENSION(SIZE(X,2),SIZE(X,2)) :: r1
1850 REAL,
DIMENSION(SIZE(X,2)) :: vp
1851 REAL,
DIMENSION(SIZE(X,2)) :: work
1853 INTEGER,
DIMENSION(1) :: imin
1854 REAL(KIND=JPRB) :: zhook_handle
1856 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLR_2',0,zhook_handle)
1861 CALL
splie(nord-1,iw)
1864 CALL
spltt(x,ds,iw,tm,tt,irep)
1866 CALL
mxmspl(tt,transpose(tm),ttt)
1870 CALL
mtxaxm(transpose(tm),tt,c)
1877 CALL
eisrs1(c,vp,r1,work,irep)
1880 imin=minloc(vp(m+1:n))
1881 IF(vp(m+imin(1)).LE.0)
THEN
1883 WRITE(*,fmt=
'(A31)')
"SPLR: VALEUR PROPRE < 0 DE PROJ"
1884 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLR_2',1,zhook_handle)
1892 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLR_2',1,zhook_handle)
1899 SUBROUTINE splu(NORD,X,G,R,RK,U,DB)
1903 INTEGER,
INTENT(IN) :: nord
1904 REAL,
DIMENSION(:,:),
INTENT(IN) :: x
1905 REAL,
DIMENSION(:,:),
INTENT(IN) :: g
1906 REAL,
DIMENSION(:,:),
INTENT(IN) :: r
1907 REAL,
DIMENSION(:,:),
INTENT(OUT) :: rk
1908 REAL,
DIMENSION(:,:),
INTENT(OUT) :: u
1909 REAL,
DIMENSION(:),
INTENT(OUT) :: db
1911 REAL,
DIMENSION(SIZE(R,2),SIZE(R,2)) :: rkr
1912 REAL,
DIMENSION(SIZE(R,2)) :: work
1914 INTEGER :: m, n, irep
1915 INTEGER,
DIMENSION(1) :: imin
1916 REAL(KIND=JPRB) :: zhook_handle
1918 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLU',0,zhook_handle)
1920 m=
SIZE(x,2)-
SIZE(r,2)
1923 CALL
splk(nord,x,x,g,rk)
1927 CALL
eisrs1(rkr,db,u,work,irep)
1930 IF (db(imin(1)).LE.0) &
1931 WRITE(*,fmt=
'(A31)')
"SPLU : VALEUR PROPRE < 0 DE RKR"
1932 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLU',1,zhook_handle)
1943 REAL,
DIMENSION(:),
INTENT(IN) :: z
1944 REAL,
DIMENSION(:,:),
INTENT(IN) :: r
1945 REAL,
DIMENSION(:,:),
INTENT(IN) :: u
1946 REAL,
DIMENSION(:),
INTENT(OUT) :: w
1947 REAL,
DIMENSION(:),
INTENT(OUT) :: rz
1950 REAL(KIND=JPRB) :: zhook_handle
1952 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLW',0,zhook_handle)
1957 CALL
mxmspl(transpose(r),z,rz)
1959 CALL
mxmspl(transpose(u),rz,w)
1960 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLW',1,zhook_handle)
1972 REAL,
INTENT(IN) :: p
1973 REAL,
DIMENSION(:,:),
INTENT(IN) :: r
1974 REAL,
DIMENSION(:,:),
INTENT(IN) :: rk
1975 REAL,
DIMENSION(:,:),
INTENT(IN) :: u
1976 REAL,
DIMENSION(:),
INTENT(IN) :: db
1977 REAL,
DIMENSION(:,:),
INTENT(OUT) :: q
1979 REAL,
DIMENSION(SIZE(R,1),SIZE(R,1)):: q1
1980 REAL,
DIMENSION(SIZE(U,1),SIZE(U,2))::qw1,qw2
1982 REAL(KIND=JPRB) :: zhook_handle
1984 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLVPQ',0,zhook_handle)
1990 qw1(j,j)=1./(db(j)+n*p)
1994 CALL
mtxaxm(transpose(u),qw1,qw2)
1996 CALL
mtxaxm(transpose(r),qw2,q)
2005 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLVPQ',1,zhook_handle)
2012 SUBROUTINE splc(Q,Z,RK,DS,TTT,RKC,C)
2016 REAL,
DIMENSION(:,:),
INTENT(IN) :: q
2017 REAL,
DIMENSION(:),
INTENT(IN) :: z
2018 REAL,
DIMENSION(:,:),
INTENT(IN) :: rk
2019 REAL,
DIMENSION(:),
INTENT(IN) :: ds
2020 REAL,
DIMENSION(:,:),
INTENT(IN) :: ttt
2021 REAL,
DIMENSION(:),
INTENT(OUT) :: rkc
2022 REAL,
DIMENSION(:),
INTENT(OUT) :: c
2023 REAL(KIND=JPRB) :: zhook_handle
2027 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLC',0,zhook_handle)
2040 CALL
mxmspl(rk,c(1:n),rkc)
2046 CALL
mxmspl(ttt,rkc,c(n+1:n+m))
2049 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLC',1,zhook_handle)
2061 INTEGER,
INTENT(IN) :: nd
2062 INTEGER,
INTENT(IN) :: nord
2063 INTEGER,
INTENT(OUT):: m
2064 REAL(KIND=JPRB) :: zhook_handle
2067 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLM',0,zhook_handle)
2073 m=nord*(nord+1)*(nord+2)/6.
2075 m=nord*(nord+1)*(nord+2)*(nord+3)/24.
2077 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLM',1,zhook_handle)
2083 SUBROUTINE sp0nop(X,G,Z,DS,LISSAGE,LORDRE,IOPT,NORDOPT,M,S2,P,&
2084 iw,ttt,r,rk,u,db,w,rz,irep)
2088 REAL,
DIMENSION(:,:),
INTENT(IN) :: x
2089 REAL,
DIMENSION(:,:),
INTENT(IN) :: g
2090 REAL,
DIMENSION(:),
INTENT(IN) :: z
2091 REAL,
DIMENSION(:),
INTENT(IN) :: ds
2092 INTEGER,
INTENT(IN) :: lissage
2093 INTEGER,
INTENT(IN) :: lordre
2094 INTEGER,
INTENT(IN) :: iopt
2095 INTEGER,
INTENT(INOUT) :: nordopt
2096 INTEGER,
INTENT(INOUT) :: m
2097 REAL,
INTENT(INOUT) :: s2
2098 REAL,
INTENT(INOUT) :: p
2099 INTEGER,
DIMENSION(:,:),
INTENT(OUT):: iw
2100 REAL,
DIMENSION(:,:),
INTENT(OUT) :: ttt
2101 REAL,
DIMENSION(:,:),
INTENT(OUT) :: r
2102 REAL,
DIMENSION(:,:),
INTENT(OUT) :: rk
2103 REAL,
DIMENSION(:,:),
INTENT(OUT) :: u
2104 REAL,
DIMENSION(:),
INTENT(OUT) :: db
2105 REAL,
DIMENSION(:),
INTENT(OUT) :: w
2106 REAL,
DIMENSION(:),
INTENT(OUT) :: rz
2107 INTEGER,
INTENT (OUT) :: irep
2110 REAL,
DIMENSION(NORDMAX) :: vm, s2save, psave, msave
2112 INTEGER :: nordmi, nordma, nordm, nord
2114 REAL(KIND=JPRB) :: zhook_handle
2116 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SP0NOP',0,zhook_handle)
2120 IF (lordre.EQ.0)
THEN
2126 CALL
splr(nordopt,x,ds,iw,ttt,r,irep)
2128 CALL
splu(nordopt,x,g,r,rk,u,db)
2131 CALL
splw(z,r,u,w,rz)
2133 CALL
splp(lissage,n,db,w,p,s2,irep)
2143 CALL
splm(nd,nord,m)
2146 CALL
splm(nd,nord,m)
2148 nordma=min(nord,nordmax)
2152 DO nord=nordmi,nordma
2154 CALL
splm(nd,nord,m)
2155 CALL
splr(nord,x,ds,iw,ttt,r,irep)
2156 CALL
splu(nord,x,g,r,rk,u,db)
2157 CALL
splw(z,r,u,w,rz)
2158 CALL
splp(lissage,n,db,w,p,s2,irep)
2164 CALL
splv(db,w,n,p,vm(nord))
2165 WRITE(*,fmt=
'(A15,I5,A5,G15.5,A6,G15.5)')&
2166 "CNORD : NORD = ",nord,
" P = ",p,
" VM = ",vm(nord)
2168 IF (nord.EQ.nordmi)
THEN
2170 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SP0NOP',1,zhook_handle)
2182 DO nord=nordmi,nordm
2183 IF(vm(nord).LT.vmmin)
THEN
2191 WRITE(*,fmt=
'(A24,I5)')
"CNORD : ORDRE OPTIMAL = ",nordopt
2193 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SP0NOP',1,zhook_handle)
2199 SUBROUTINE sp0cvq(NORD,M,X,G,Z,DS,S2,P,LISSAGE,LORDRE,IOPT,C,IREP)
2203 INTEGER,
INTENT(INOUT) :: nord
2204 INTEGER,
INTENT(INOUT) :: m
2205 REAL,
DIMENSION(:,:),
INTENT(IN) :: x
2206 REAL,
DIMENSION(:,:),
INTENT(IN) :: g
2207 REAL,
DIMENSION(:),
INTENT(IN) :: z
2208 REAL,
DIMENSION(:),
INTENT(IN) :: ds
2209 REAL,
INTENT(INOUT) :: s2
2210 REAL,
INTENT(INOUT) :: p
2211 INTEGER,
INTENT(IN) :: lissage
2212 INTEGER,
INTENT(IN) :: lordre
2213 INTEGER,
INTENT(IN) :: iopt
2214 REAL,
DIMENSION(:),
INTENT(OUT) :: c
2215 INTEGER,
INTENT(OUT) :: irep
2217 INTEGER,
DIMENSION(SIZE(X,1),SIZE(C)-SIZE(X,2)) :: iw
2218 REAL,
DIMENSION(SIZE(C)-SIZE(X,2),SIZE(X,2)) :: ttt
2219 REAL,
DIMENSION(SIZE(X,2),2*SIZE(X,2)-SIZE(C)) :: r
2220 REAL,
DIMENSION(SIZE(X,2),SIZE(X,2)) :: rk
2221 REAL,
DIMENSION(2*SIZE(X,2)-SIZE(C),2*SIZE(X,2)-SIZE(C)) :: u
2222 REAL,
DIMENSION(2*SIZE(X,2)-SIZE(C)):: db
2223 REAL,
DIMENSION(2*SIZE(X,2)-SIZE(C)) :: w
2224 REAL,
DIMENSION(SIZE(R,2)) :: rz
2225 REAL,
DIMENSION(SIZE(X,2),SIZE(X,2)) :: q
2227 REAL,
DIMENSION(SIZE(X,2)) :: rkc
2231 REAL(KIND=JPRB) :: zhook_handle
2233 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SP0CVQ',0,zhook_handle)
2238 WRITE(*,fmt=
'(A17)')
"SP0CVQ : NORD < 1"
2239 ELSEIF (m.LT.0)
THEN
2240 WRITE(*,
'(A14)')
"SP0CVQ : M < 0"
2241 ELSEIF (n.LT.m)
THEN
2242 WRITE(*,
'(A14)')
"SP0CVQ : N < M"
2243 ELSEIF (s2.LT.0.)
THEN
2244 WRITE(*,
'(A15)')
"SP0CVQ : S2 < 0"
2245 ELSEIF (p.LT.0.)
THEN
2246 WRITE(*,
'(A14)')
"SP0CVQ : P < 0"
2247 ELSEIF ((lissage.LT.0.OR.lissage.GT.3).AND.lissage.NE.10)
THEN
2248 WRITE(*,
'(A27)')
"SP0CVQ : LISSAGE < 0 OU > 3"
2249 ELSEIF (lordre.LT.0.OR.lordre.GT.1)
THEN
2250 WRITE(*,
'(A26)')
"SP0CVQ : LORDRE < 0 OU > 1"
2251 ELSEIF (iopt.LT.0.OR.iopt.GT.1)
THEN
2252 WRITE(*,
'(A24)')
"SP0CVQ : IOPT < 0 OU > 1"
2257 IF (lordre.EQ.1 .OR. &
2258 lissage.EQ.1 .OR. lissage.EQ.2 .OR. lissage.EQ.10)
THEN
2261 CALL
sp0nop(x,g,z,ds,lissage,lordre,iopt,nord,m,s2,p,&
2262 iw,ttt,r,rk,u,db,w,rz,irep)
2263 ELSEIF (lissage.EQ.0)
THEN
2269 IF (lordre.EQ.1 .OR. lissage.EQ.0 .OR. lissage.EQ.3)
THEN
2272 CALL
splr(nord,x,ds,iw,ttt,r,irep)
2273 IF (irep.NE.0 .AND. lhook) CALL dr_hook(
'MODE_SPLINES:SP0CVQ',1,zhook_handle)
2274 IF (irep.NE.0)
RETURN
2276 CALL
splu(nord,x,g,r,rk,u,db)
2280 CALL
splw(z,r,u,w,rz)
2282 IF (lissage.EQ.3) CALL
splrs(db,w,n,p,s2)
2288 CALL
splvpq(p,r,rk,u,db,q)
2292 CALL
splc(q,z,rk,ds,ttt,rkc,c)
2293 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SP0CVQ',1,zhook_handle)
2299 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SP0CVQ',1,zhook_handle)
2310 INTEGER,
DIMENSION(:),
INTENT(IN) :: nsd
2311 INTEGER,
INTENT(IN) :: inter
2312 REAL,
DIMENSION(:,:),
INTENT(IN) :: xd
2313 REAL,
DIMENSION(:,:,:),
INTENT(OUT) :: ai
2314 REAL(KIND=JPRB) :: zhook_handle
2316 REAL,
DIMENSION(SIZE(NSD)) :: dxi, dxr
2319 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLBSD',0,zhook_handle)
2321 dxi(j)=(xd(2,j)-xd(1,j))/nsd(j)
2322 dxr(j)=dxi(j)/(2*inter-2)
2328 ai(j,1,i)=xd(1,j)+(i-1)*dxi(j)-dxr(j)
2330 ai(j,2,nsd(j))=xd(2,j)
2332 ai(j,2,i)=xd(2,j)-(nsd(j)-i)*dxi(j)+dxr(j)
2335 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLBSD',1,zhook_handle)
2345 REAL,
DIMENSION(:,:),
INTENT(IN) :: x
2346 REAL,
DIMENSION(:),
INTENT(IN) :: z
2347 REAL,
DIMENSION(:),
INTENT(IN) :: ai
2348 REAL,
DIMENSION(:),
INTENT(IN) :: bi
2349 INTEGER,
INTENT(OUT) :: ns
2350 REAL,
DIMENSION(:,:),
INTENT(OUT) :: xs
2351 REAL,
DIMENSION(:),
INTENT(OUT) :: zs
2352 INTEGER,
INTENT(OUT) :: irep
2355 REAL(KIND=JPRB) :: zhook_handle
2357 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLBSEL',0,zhook_handle)
2364 IF (x(i,j).LT.ai(i).OR.x(i,j).GT.bi(i))
THEN
2371 IF (ns.GT.
SIZE(zs))
THEN
2373 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLBSEL',1,zhook_handle)
2382 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLBSEL',1,zhook_handle)
2387 SUBROUTINE splb2c(NORD,M,X,G,Z,S2,P,LISSAGE,IOPT,NSDI,NSDJ,&
2392 INTEGER,
INTENT(INOUT) :: nord
2393 INTEGER,
INTENT(INOUT) :: m
2394 REAL,
DIMENSION(:,:),
INTENT(IN) :: x
2395 REAL,
DIMENSION(:,:),
INTENT(IN) :: g
2396 REAL,
DIMENSION(:),
INTENT(IN) :: z
2397 REAL,
INTENT(INOUT) :: s2
2398 REAL,
INTENT(INOUT) :: p
2399 INTEGER,
INTENT(IN) :: lissage
2400 INTEGER,
INTENT(IN) :: iopt
2401 INTEGER,
INTENT(IN) :: nsdi
2402 INTEGER,
INTENT(IN) :: nsdj
2403 INTEGER,
INTENT(IN) :: inter
2404 REAL,
DIMENSION(:,:),
INTENT(IN) :: xd
2405 REAL,
DIMENSION(:,:,:),
INTENT(OUT) :: c
2406 INTEGER,
INTENT(OUT) :: irep
2409 INTEGER :: lordre, i, j
2410 INTEGER,
DIMENSION(2) :: nsd
2411 REAL,
DIMENSION(NMAX) :: ds
2412 REAL,
DIMENSION(2,2) :: ci
2414 REAL(KIND=JPRB) :: zhook_handle
2416 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLB2C',0,zhook_handle)
2418 IF (.NOT.
ALLOCATED(ai))
ALLOCATE(ai(nd,2,nsdmax))
2419 IF (.NOT.
ALLOCATED(ns))
ALLOCATE(ns(nsdmax,nsdmax))
2420 IF (.NOT.
ALLOCATED(zs))
ALLOCATE(zs(nmax,nsdmax,nsdmax))
2421 IF (.NOT.
ALLOCATED(xs))
ALLOCATE(xs(nd,nmax,nsdmax,nsdmax))
2429 CALL
splbsd(nsd,inter,xd,ai)
2441 CALL
splbsel(x,z,ci(:,1),ci(:,2),ns(i,j),xs(:,:,i,j),zs(:,i,j),irep)
2443 WRITE(*,fmt=
'(A35)')
"SPLB2C: NOMBRE DE POINTS TROP GRAND"
2445 CALL
abor1_sfx(
'SPLINES: SPLB2C: NOMBRE DE POINTS TROP GRAND')
2446 ELSEIF (ns(i,j).LE.m)
THEN
2447 WRITE(*,fmt=
'(A42)') &
2448 "SPB2C : NB DE PTS <= M : COEF NON CALCULES"
2451 IF (ns(i,j).GT.m)
THEN
2454 CALL
sp0cvq(nord,m,xs(:,1:nn,i,j),g,zs(1:nn,i,j),ds(1:nn),s2,p,&
2455 lissage,lordre,iopt,c(1:nn+m,i,j),irep)
2459 IF (lhook) CALL dr_hook(
'MODE_SPLINES:SPLB2C',1,zhook_handle)
subroutine splk_1(NORD, X1, X2, G, RK)
subroutine splk_2(NORD, X1, X2, G, RK)
subroutine splr_1(NORD, X, DS, IW, TTT, R, IREP)
subroutine splr_2(NORD, X, DS, IW, TTT, R, IREP)
subroutine sscopy_2(A, B, IA, IB)
subroutine splt_1(X, IE, T)
subroutine abor1_sfx(YTEXT)
subroutine mxmspl_1(A, B, R)
subroutine sscopy_1(A, B, IA, IB)
subroutine mxmspl_2(A, B, R)
subroutine splt_2(X, IE, T)
subroutine mxmspl_3(A, B, RES)
subroutine splpr0(B, W, N, S2, P)