C C-------------------------------------------------------ALG_ITERATIVO--- C C SUBRUTINA ALG_ITERATIVO C C ALGORITMO ITERATIVO DE CONTACTO C SUBROUTINE ALG_ITERATIVO(PRB,SOL,MAT,CNT,ELT,NOD,ZCTO, @ SAij,SFi,SXj,SVT,SW) C IMPLICIT NONE INCLUDE '_param.for' INCLUDE '_struct.for' C CCCCCCCCCCCCCCCCCCCCCCCCCCC C VARIABLES EXTERNAS CCCCCCCCCCCCCCCCCCCCCCCCCCC C C PRB : Variables globales del problema RECORD /S_problema/ PRB C SOL : Solidos del problema RECORD /S_solido/ SOL(N_MAX_SOL) C MAT : Materiales RECORD /S_material/ MAT(N_MAX_SOL) C CNT : Contornos del problema RECORD /S_contorno/ CNT(N_MAX_CNT) C ELT : Elementos del problema RECORD /S_elemento/ ELT(N_MAX_ELT) C NOD : Nodos del problema RECORD /S_nodo/ NOD(N_MAX_NOD) C ZCTO : Zonas de contacto del problema RECORD /S_zncto/ ZCTO(N_MAX_ZCTO) C SAIJ(,) : Matriz del sistema. REAL*8 SAij(N_MAX_INC,N_MAX_INC) C SFI() : Termino independiente. REAL*8 SFi(N_MAX_INC) C SXJ() : Vector de incógnitas. REAL*8 SXj(N_MAX_INC) C SVT : Ecuación correspondiente a los apoyos puntuales REAL*8 SVT(3*N_MAX_SOL,N_MAX_INC) C SW : Proyeccion de los MSR sobre las incognitas REAL*8 SW(N_MAX_INC,3*N_MAX_SOL) C CCCCCCCCCCCCCCCCCCCCCCCCCCC C VARIABLES INTERNAS CCCCCCCCCCCCCCCCCCCCCCCCCCC C C D_AIJ(,) : Matriz del sistema en cada incremento de carga REAL*8 D_Aij(N_MAX_INC,N_MAX_INC) C D_FI() : Termino independiente en cada incremento de carga REAL*8 D_Fi(N_MAX_INC) C D_LAMBDA : Coef. de ponderacion de la solucion un incremento de carga REAL*8 D_LAMBDA C I,J : Contadores INTEGER I,J C CCCCCCCCCCCCCCC C RUTINA CCCCCCCCCCCCCCC C C Montaje de las ecuaciones de contacto C CALL MONTAJE_CONTACTO(PRB,SOL,MAT,ZCTO,CNT,ELT,NOD, @ SAij,SFi,SVT,SW) C C Escritura de la matriz del sistema en la base de datos C CALL ESC_MATRIZ(PRB,NOD,SAij,SFi) C C Pivotaje de las BIE y las ecuaciones de INTERFASE C CALL RESUELVE3(SAij,SFi,(PRB.NeBIE+PRB.NeINT),PRB.NINC) C C Guarda las BIE pivotadas C DO i=1,PRB.NINC DO j=1,PRB.NINC D_Aij(i,j)=SAij(i,j) END DO D_Fi(i)=SFi(i) END DO C C Pivotaje de las ecuaciones de CONTACTO C CALL RESUELVE2(D_Aij,D_Fi,SXj,PRB.NINC,(PRB.NeBIE+PRB.NeINT)) C C Algoritmo iterativo C D_LAMBDA=0.d0 C DO WHILE(D_LAMBDA.LT.1.d0) C C Calculo de la solucion nodal corresp. al incremento C CALL SOLUCION(PRB,SOL,CNT,ELT,NOD,SXj) C borrar IF(W_I.GE.1)THEN borrar CALL ESC_DEF(PRB,ZCTO,CNT,ELT,NOD) borrar END IF C C Comprobacion de contacto y calculo de D_LAMBDA C CALL ITERA_CONTACTO(PRB.NZCTO,ZCTO,CNT,PRB.ELTP,ELT,NOD, @ D_LAMBDA) C C Actualizacion de la solucion acumulada de los incrementos ateriores C CALL ESC_ITR(PRB,SOL,CNT,ELT,NOD,D_LAMBDA,0.d0) C IF(D_LAMBDA.EQ.1.d0)THEN CALL INCR_SOLUCION(PRB,SOL,CNT,ELT,NOD,D_LAMBDA) ELSE CALL INCR_SOLUCION(PRB,SOL,CNT,ELT,NOD,0.d0) END IF C C Actualizacion de LAMBDA C IF(D_LAMBDA.LT.1.d0)THEN C C Reescritura de las BIE (pivotadas) C y borrado de las ecuaciones previas de contacto C DO i=1,PRB.NeBIE+PRB.NeINT DO j=1,PRB.NINC D_Aij(i,j)=SAij(i,j) END DO D_Fi(i)=SFi(i) END DO C DO i=PRB.NeBIE+PRB.NeINT+1,PRB.NeBIE+PRB.NeINT+PRB.NeCTO DO j=1,PRB.NINC D_Aij(i,j)=0.d0 END DO D_Fi(i)=0.d0 END DO C C Montaje de las ecuaciones de contacto del proximo incremento C CALL MONTAJE_CONTACTO(PRB,SOL,MAT,ZCTO,CNT,ELT,NOD, @ D_Aij,D_Fi,SVT,SW) C CALL RESUELVE2(D_Aij,D_Fi,SXj,PRB.NINC,PRB.NeBIE+PRB.NeINT) C END IF C END DO C C FORMATOS DE ESCRITURA C 11101 FORMAT(/,2x,'ERROR 11101 - ALG_DIRECTO - Tipo de formulacion (', @ i2,') erronea.') C C FINAL DEL PROGRAMA C END C