C Rutina 061 C-----------------------------------------------------------PC_BIE_POT--- C C SUBRUTINA PC_BIE_POT C C MONTAJE DE LAS ECUACIONES INTEGRALES DE CONTORNO C CORRESPONDIENTES A UN PUNTO DE COLOCACION C PROBLEMA POTENCIAL 2-D C SUBROUTINE PC_BIE_POT(PRB,SOL,MAT,CNT,ELT,NOD,PC,SAij,SFi,CEC,NPG) 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 : Solido RECORD /S_solido/ SOL C MAT : Material RECORD /S_material/ MAT 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 PC : Punto de colocacion RECORD /S_coloc/ PC 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 CEC : Ecuacion INTEGER CEC C NPG : Numero de puntos de Gauss INTEGER NPG C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C VARIABLES INTERNAS CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C K,M,N,P,Q,R,S : Contadores INTEGER k,m,n,p,q,r,s C CCNT,CELTP,CELT,CNOD,CMAT,CINC,CNDTP,CBC :Contadores INTEGER CCNT,CELTP,CELT,CNOD,CINC,CNDTP,CBC C ELTPNNI,N1,N2 : Variables auxiliares INTEGER ELTPNNI,N1,N2 C INTEGER II,JJ C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C VALORES INICIALES CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C Calculo de las constantes de integracion C C ESCRITURA EN LA BASE DE DATOS C IF(W_D.GE.1) THEN WRITE(F_D,01) 'P.C.: ', PC.NUM WRITE(F_D,*) 'Cij: ' WRITE(F_D,02) ((PC.Cij(ii,jj),jj=1,2),ii=1,2) 01 FORMAT(2x,a,i4) 02 FORMAT(2x,e14.8,1x,e14.8,1x) END IF C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C CALCULO DE LAS MATRICES Eij C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C CALL CALC_EIJ_POT(PRB,PC,MAT,SOL,CNT,ELT,NOD,NPG) C C SEGUN SEA EL P.C. MONTAMOS LAS COMPONENTES DE LA ECUACION C SELECT CASE (PRB.TP.TIP) CASE(41) n1=1 n2=1 CASE DEFAULT WRITE(F_W,08212) PRB.TP.TIP WRITE (*,08212) PRB.TP.TIP STOP END SELECT C C BUCLE QUE RECORRE LAS COMPONENTES DE LA ECUACION C DO n = n1 , n2 cec=cec+1 C C BUCLE QUE RECORRE LOS CONTORNOS DEL SOLIDO C DO k = 1 , SOL.NCNT ccnt=SOL.CNT(k) C C BUCLE QUE RECORRE LOS ELEMENTOS DEL CONTORNO C DO m = 1 , CNT(ccnt).NELT celt=CNT(ccnt).ELT(m) celtp=ELT(celt).TIP ELTPNNI=PRB.ELTP(celtp).NNI C C BUCLE QUE RECORRE LOS NODOS DEL ELEMENTO C DO p = 1 , ELTPNNI cnod=ELT(celt).NI(p) cndtp=PRB.ELTP(celtp).TNI(p) C DO r = 1 , PRB.ELTP(celtp).NVE DO s = 1 , PRB.NDTP(cndtp).NINC C C CALCULO DE LA MATRIZ DEL SISTEMA C DO q = 1 , NOD(cnod).NINC cinc=NOD(cnod).INC(q) SAij(cec,cinc)=SAij(cec,cinc)+ @ PC.Eij(celt).Eij(n,r)* @ PRB.ELTP(celtp).Rij(p,r,s)* @ NOD(cnod).Gij(s,q) END DO C C CALCULO DEL TERMINO INDEPENDIENTE C DO q=1 , NOD(cnod).NBC cbc=NOD(cnod).NINC+q SFi(cec)=SFi(cec)- @ PC.EIJ(celt).Eij(n,r)* @ PRB.ELTP(celtp).Rij(p,r,s)* @ NOD(cnod).Gij(s,cbc)* @ NOD(cnod).VBC(q) END DO END DO END DO C C FIN BUCLE QUE RECORRE LOS NODOS DEL ELEMENTO C END DO C C FIN BUCLE QUE RECORRE LOS ELEMENTOS DEL CONTORNO C END DO C C FIN BUCLE QUE RECORRE LOS CONTORNOS DEL SOLIDO C END DO C C FIN BUCLE QUE RECORRE LAS COMPONENTES DE LA ECUACION C END DO C C FIN DE LA RUTINA C RETURN C C FORMATOS DE ESCRITURA. C 08211 FORMAT(/,2x,'ERROR 08211 - PC_BIE_POT - Punto de colocacion ',i4, @ '. Codigo ',i2,' no valido.') 08212 FORMAT(/,2x,'ERROR 08212 - PC_BIE_POT - Tipo de problema ',i2, @ '. No implementado.') 08213 FORMAT(/,2x,'ERROR 08213 - PC_BIE_POT - Tipo de formulacion ',i2, @ '. No implementada.') C END C