C C----------------------------------------------------MONTAJE_CONTACTO--- C C SUBRUTINA MONTAJE_CONTACTO C C MONTAJE DE LAS ECUACIONES DE CONTACTO C SUBROUTINE MONTAJE_CONTACTO(PRB,SOL,MAT,ZCTO,CNT,ELT,NOD, @ SAij,SFi,SVT,SW) C IMPLICIT NONE INCLUDE '_param.for' INCLUDE '_struct.for' C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C VARIABLES EXTERNAS CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 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 ZCTO : Zonas de contacto del problema RECORD /S_zncto/ ZCTO(N_MAX_ZCTO) 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 SAIJ(,) : Matriz del sistema. REAL*8 SAij(N_MAX_INC,N_MAX_INC) C SFi() : Termino independiente. REAL*8 SFi(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 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C VARIABLES INTERNAS CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C I : Contadores INTEGER I,J,K C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C VALORES INICIALES CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C PRB.NeCTO=0 C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C MONTAJE ECUACIONES DE INTERFASE C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C IF((PRB.ITR).EQ.0)THEN C PRB.NeINT=0 C C Bucle que recorre las zonas de contacto DO i = 1 , PRB.NZCTO C SELECT CASE(ZCTO(i).TIP) C C INTERFASE CASE(11) C Calculo de las posiciones de los nodos de A C en el contorno de B CALL POS_REL_A(PRB,CNT,PRB.ELTP,ELT,NOD,ZCTO(i)) C Calculo de las posiciones de los nodos de B C en el contorno de A CALL POS_REL_B(CNT,ELT,NOD,ZCTO(i)) C Escritura de las condiciones de contacto CALL ESCRIBE_CONTACTO(CNT,PRB.ELTP,ELT,NOD,ZCTO(i)) C Imposicion de las condiciones de contacto CALL CONTACTO_DEBIL(PRB,SOL,MAT,CNT,PRB.ELTP,ELT,NOD, @ ZCTO(i),SAij,SFi) C ZONA DE CONTACTO CASE(21) CONTINUE C ERROR CASE DEFAULT WRITE(F_W,10001) I,ZCTO(i).TIP WRITE (*,10001) I,ZCTO(i).TIP STOP END SELECT C C Fin bucle que recorre las zonas de contacto END DO C PRB.NeINT=PRB.NeCTO PRB.NeCTO=0 C END IF C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C CONDICIONES DE SOLIDO RIGIDO C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C !apoyo C DO i=PRB.NeBIE+1,PRB.NeBIE+PRB.NeINT DO j=1,PRB.NINC DO k=1,PRB.NMSR SAij(i,j)=SAij(i,j)+SW(i,k)*SVT(k,j) ENDDO END DO END DO C !apoyo C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C MONTAJE ECUACIONES DE CONTACTO C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C PRB.ITR=PRB.ITR+1 C C Bucle que recorre las zonas de contacto DO i = 1 , PRB.NZCTO C SELECT CASE(ZCTO(i).TIP) C C INTERFASE CASE(11) CONTINUE C C ZONA DE CONTACTO CASE(21) C Calculo de las posiciones de los nodos de A C en el contorno de B CALL POS_REL_A(PRB,CNT,PRB.ELTP,ELT,NOD,ZCTO(i)) C Calculo de las posiciones de los nodos de B C en el contorno de A CALL POS_REL_B(CNT,ELT,NOD,ZCTO(i)) C Escritura de las condiciones de contacto CALL ESCRIBE_CONTACTO(CNT,PRB.ELTP,ELT,NOD,ZCTO(i)) C Imposicion de las condiciones de contacto CALL CONTACTO_DEBIL(PRB,SOL,MAT,CNT,PRB.ELTP,ELT,NOD, @ ZCTO(i),SAij,SFi) C ERROR CASE DEFAULT WRITE(F_W,10001) I,ZCTO(i).TIP WRITE (*,10001) I,ZCTO(i).TIP STOP END SELECT C C Fin bucle que recorre las zonas de contacto END DO C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C CONDICIONES DE SOLIDO RIGIDO C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C !apoyo C DO i=PRB.NeBIE+PRB.NeINT+1,PRB.NeBIE+PRB.NeINT+PRB.NeCTO DO j=1,PRB.NINC DO k=1,PRB.NMSR SAij(i,j)=SAij(i,j)+SW(i,k)*SVT(k,j) ENDDO END DO END DO C !apoyo C IF(PRB.NINC.NE.(PRB.NeBIE+PRB.NeINT+PRB.NeCTO)) THEN WRITE(F_W,10005) PRB.NINC,(PRB.NeBIE+PRB.NeINT+PRB.NeCTO) WRITE (*,10005) PRB.NINC,(PRB.NeBIE+PRB.NeINT+PRB.NeCTO) STOP END IF C C FIN DE LA RUTINA C RETURN C C FORMATOS DE ESCRITURA. C 10001 FORMAT(/,2x,'ERROR 10001 - MONTAJE_CONTACTO',/, @ ' Zona de contacto: ',i4,'. Tipo de zona (',i2, @ ') no implementada.') 10004 FORMAT(/,2x,'ERROR 10004 - MONTAJE_CONTACTO',/,' Nodo (',i4,').', @ /,' Pertenece a dos zonas de contacto y esta libre', @ /,' Caso no implementado.') 10005 FORMAT(/,2x,'ERROR 10005 - MONTAJE_CONTACTO -', @ ' Numero de incognitas (',i4,')' @ ,/,' distinto del numero de ecuaciones (',i4,').') C END C