5 &(npoin,nsegb,gloseg,maxseg,da,xa,xinc,rhs,infogr,typext)
202 & indtri_ss1,inx_ss1,ac_ss1,
203 & actri_ss1,isp_ss1,rsp_ss1,
204 & indtri_ss1,size_in,size_ip,
205 & size_isegip,size_iw1,size_indtri,
206 & size_inx,size_ac,size_actri,
207 & size_isp,size_rsp,size_ipx,
215 INTEGER,
INTENT(IN) :: NPOIN,NSEGB,MAXSEG
216 INTEGER,
INTENT(IN) :: GLOSEG(maxseg,2)
217 LOGICAL,
INTENT(IN) :: INFOGR
218 DOUBLE PRECISION,
INTENT(IN) :: XA(*),RHS(npoin)
219 DOUBLE PRECISION,
INTENT(INOUT) :: XINC(npoin),DA(npoin)
220 CHARACTER(LEN=1),
INTENT(IN) :: TYPEXT
224 INTEGER MEMFACTOR,IERR,NPBLK,NSEGBLK,NSP,ESP,INDIC,FLAG,I,IERRK
233 IF(abs(da(i)).LT.1.d-15) da(i)=1.d0
239 WRITE(
lu,*)
' DIRECT SYSTEM SOLVER' 248 IF(typext.EQ.
'S')
THEN 253 nsp=memfactor*(npblk+4*nsegblk)
254 esp=memfactor*(npblk+4*nsegblk)
259 IF(size_in.EQ.0)
THEN 262 ELSEIF( npblk+1.GT.size_in)
THEN 268 IF(size_ip.EQ.0)
THEN 269 ALLOCATE(
ip_ss1(nsegblk*2))
271 ELSEIF( nsegblk*2.GT.size_ip)
THEN 273 ALLOCATE(
ip_ss1(nsegblk*2))
277 IF(size_isegip.EQ.0)
THEN 279 size_isegip= nsegblk*2+1
280 ELSEIF( nsegblk*2+1.GT.size_isegip)
THEN 283 size_isegip= nsegblk*2+1
286 IF(size_iw1.EQ.0)
THEN 289 ELSEIF( npblk.GT.size_iw1)
THEN 295 IF(size_indtri.EQ.0)
THEN 296 ALLOCATE(indtri_ss1(npblk))
298 ELSEIF( npblk.GT.size_indtri)
THEN 299 DEALLOCATE(indtri_ss1)
300 ALLOCATE(indtri_ss1(npblk))
304 IF(size_inx.EQ.0)
THEN 305 ALLOCATE(inx_ss1(npblk+1))
307 ELSEIF( npblk+1.GT.size_inx)
THEN 309 ALLOCATE(inx_ss1(npblk+1))
313 IF(size_ipx.EQ.0)
THEN 314 ALLOCATE(ipx_ss1(nsegblk*2+npblk+1))
315 size_ipx= nsegblk*2+npblk+1
316 ELSEIF( nsegblk*2+npblk+1.GT.size_ipx)
THEN 318 ALLOCATE(ipx_ss1(nsegblk*2+npblk+1))
319 size_ipx= nsegblk*2+npblk+1
322 IF(size_ac.EQ.0)
THEN 323 ALLOCATE(ac_ss1(nsegblk*2+npblk+1))
324 size_ac= nsegblk*2+npblk+1
325 ELSEIF( nsegblk*2+npblk+1.GT.size_ac)
THEN 327 ALLOCATE(ac_ss1(nsegblk*2+npblk+1))
328 size_ac= nsegblk*2+npblk+1
331 IF(size_actri.EQ.0)
THEN 332 ALLOCATE(actri_ss1(npblk))
334 ELSEIF( npblk.GT.size_actri)
THEN 335 DEALLOCATE(actri_ss1)
336 ALLOCATE(actri_ss1(npblk))
340 IF(typext.EQ.
'S')
THEN 342 IF(size_isp.EQ.0)
THEN 343 ALLOCATE(isp_ss1(nsp))
344 ELSEIF( nsp.GT.size_isp)
THEN 346 ALLOCATE(isp_ss1(nsp))
352 IF(2*nsp.LT.nsp)
THEN 353 WRITE(
lu,*)
'SIZE OF LARGEST INTEGER ',huge(1)
354 WRITE(
lu,*)
'TRESPASSED BY 2*NSP, NSP=',nsp
359 IF(size_isp.EQ.0)
THEN 360 ALLOCATE(isp_ss1(2*nsp))
361 ELSEIF( 2*nsp.GT.size_isp)
THEN 363 ALLOCATE(isp_ss1(2*nsp))
369 IF(size_rsp.EQ.0)
THEN 370 ALLOCATE(rsp_ss1(esp))
372 ELSEIF( esp.GT.size_rsp)
THEN 374 ALLOCATE(rsp_ss1(esp))
382 CALL sd_strssd(npblk,nsegblk,gloseg(1,1),gloseg(1,2),
385 IF(typext.EQ.
'S')
THEN 390 & indtri_ss1,
iw1_ss1,inx_ss1,ipx_ss1,actri_ss1,xa,
395 & indtri_ss1,
iw1_ss1,inx_ss1,ipx_ss1,actri_ss1,xa,
396 & xa(nsegblk+1),da,ac_ss1)
405 & isp_ss1,indic,flag)
409 WRITE(
lu,*)
'INCREASE THE MEMORY FACTOR (MEMFACTOR)',
410 &
' IN_SS1 THE ROUTINE SD_SOLVE_1' 419 IF(typext.EQ.
'S')
THEN 422 & xinc,nsp,isp_ss1,rsp_ss1,esp,indic,flag)
426 & nsp,isp_ss1,rsp_ss1,esp,indic,flag)
429 IF(typext.EQ.
'S')
THEN 433 WRITE(
lu,*)
'MATRIX WITH ZERO PIVOT AT ROW' 436 WRITE(
lu,*)
'ADD 1 TO THE MEMORY FACTOR (MEMFACTOR)',
437 &
' IN_SS1 SUBROUTINE SD_SOLVE_1' 460 IF(ierr.EQ.3.OR.ierr.EQ.5.OR.ierr.EQ.8)
THEN 461 ierrk=flag-ierr*npblk
462 WRITE(
lu,*)
'MATRIX WITH ZERO PIVOT AT ROW' 465 WRITE(
lu,*)
'INCREASE THE MEMORY FACTOR (MEMFACTOR)',
466 &
' IN_SS1 SUBROUTINE SD_SOLVE_1'
subroutine sd_sdrv(N, P, IP, IA, JA, A, B, Z, NSP, ISP, RSP, ESP, PATH, FLAG)
integer, dimension(:), allocatable ip_ss1
integer, dimension(:), allocatable iw1_ss1
subroutine sd_solve_1(NPOIN, NSEGB, GLOSEG, MAXSEG, DA, XA, XINC, RHS, INFOGR, TYPEXT)
subroutine sd_odrv(N, IA, JA, A, P, IP, NSP, ISP, PATH, FLAG)
integer, dimension(:), allocatable in_ss1
subroutine sd_cdrv(N, R, C, IC, IA, JA, A, B, Z, NSP, ISP, RSP, ESP, PATH, FLAG)
integer, dimension(:), allocatable isegip_ss1
subroutine sd_fabcad(NPBLK, NSEGBLK, IN, IP, ISEGIP, INDTRI, ISTRI, INX, IPX, ACTRI, XA1, XA2, DA, AC)