C C----------------------------------------------------------LEE_SOLIDO--- C C SUBRUTINA LEE_SOLIDO C C LECTURA DE DATOS DEL SOLIDO Y DEL MATERIAL C SUBROUTINE LEE_SOLIDO(csol,SOL,MAT,TM,TF) C IMPLICIT NONE INCLUDE '_param.for' INCLUDE '_struct.for' C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C VARIABLES EXTERNAS CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C CSOL : Numero del solido que se va a leer INTEGER CSOL C SOL : Solidos del problema RECORD /S_solido/ SOL C MAT : Materiales RECORD /S_material/ MAT C TM : Tipos de material RECORD /S_tipmat/ TM(N_MAX_TPMT) C TF : Tipo de formulacion INTEGER TF C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C VARIABLES INTERNAS CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C I : Contador INTEGER I C !APOYOC APO : Condicion de apoyo !APOYO INTEGER APO C C MOD: Modulo de los vectores REAL *8 MOD C CCCCCCCCCCCCCCC C RUTINA CCCCCCCCCCCCCCC C C DATOS DEL SOLIDO C SELECT CASE(TF) CASE(11,12,13,14) C C PROBLEMA ELASTICO READ(F_E,*) SOL.NUM,SOL.NNOD,SOL.NCNT,SOL.NPINT,SOL.NAPO C CASE(21,22,23,24) !xx_temperatura C !xx_temperatura C PROBLEMA TERMOELASTICO !xx_temperatura READ(F_E,*) SOL.NUM,SOL.NNOD,SOL.NCNT,SOL.NPINT,SOL.NAPO, !xx_temperatura @ SOL.TEMP !xx_temperatura C !xx_temperatura CASE DEFAULT WRITE(F_W,01107) SOL.NUM , TF WRITE (*,01107) SOL.NUM , TF STOP END SELECT C C Comprobacion de lectura correcta C IF(csol.NE.SOL.NUM) THEN WRITE(F_W,01101) csol , SOL.NUM WRITE (*,01101) csol , SOL.NUM STOP END IF C C NUMERO DE NODOS C IF(SOL.NNOD.LT.1.OR.SOL.NNOD.GT.N_MAX_NOD) THEN WRITE(F_W,01102) SOL.NUM , SOL.NNOD WRITE (*,01102) SOL.NUM , SOL.NNOD STOP ENDIF C C NUMERO DE CONTORNOS C IF(SOL.NCNT.LT.1.OR.SOL.NCNT.GT.N_MAX_CNT) THEN WRITE(F_W,01103) SOL.NUM , SOL.NCNT WRITE (*,01103) SOL.NUM , SOL.NCNT STOP ENDIF C C NUMERO DE PUNTOS INTERNOS C IF(SOL.NPINT.LT.0.OR.SOL.NPINT.GT.N_MAX_PINT) THEN WRITE(F_W,01104) SOL.NUM , SOL.NPINT WRITE (*,01104) SOL.NUM , SOL.NPINT STOP ENDIF C !APOYO C C CONDICIONES DE APOYO (Mov.Sol.Rig.) C DO i=1,SOL.NAPO C READ(F_E,*) SOL.APO(i).NOD,SOL.APO(i).DIR(1),SOL.APO(i).DIR(2), @ SOL.APO(i).TIP,SOL.APO(i).MSR(1),SOL.APO(i).MSR(2) C MOD=DSQRT(SOL.APO(i).DIR(1)*SOL.APO(i).DIR(1)+ @ SOL.APO(i).DIR(2)*SOL.APO(i).DIR(2)) C IF(MOD.EQ.0.d0)THEN WRITE(F_W,01108) SOL.NUM , i WRITE (*,01108) SOL.NUM , i STOP END IF C SOL.APO(i).DIR(1)=SOL.APO(i).DIR(1)/MOD SOL.APO(i).DIR(2)=SOL.APO(i).DIR(2)/MOD C SELECT CASE(SOL.APO(i).TIP) CASE(1) MOD=DSQRT(SOL.APO(i).MSR(1)*SOL.APO(i).MSR(1)+ @ SOL.APO(i).MSR(2)*SOL.APO(i).MSR(2)) C IF(MOD.EQ.0.d0)THEN WRITE(F_W,01108) SOL.NUM , i WRITE (*,01108) SOL.NUM , i STOP END IF C SOL.APO(i).MSR(1)=SOL.APO(i).MSR(1)/MOD SOL.APO(i).MSR(2)=SOL.APO(i).MSR(2)/MOD CASE(2) CONTINUE CASE DEFAULT WRITE(F_W,01105) SOL.NUM , SOL.APO(i).TIP WRITE (*,01105) SOL.NUM , SOL.APO(i).TIP END SELECT C C END DO C !APOYO C !APOYO SELECT CASE(APO) !APOYO CASE(0) !APOYO SOL.APO.INC1=0 !APOYO SOL.APO.INC2=0 !APOYO CASE(1) !APOYO READ (F_E,*) SOL.APO.INC1 !APOYO SOL.APO.INC2=0 !APOYO CASE(2) !APOYO SOL.APO.INC1=0 !APOYO READ (F_E,*) SOL.APO.INC2 !APOYO CASE(12) !APOYO READ (F_E,*) SOL.APO.INC1,SOL.APO.INC2 !APOYO CASE DEFAULT !APOYO WRITE(F_W,01105) SOL.NUM , APO !APOYO WRITE (*,01105) SOL.NUM , APO !APOYO STOP !APOYO END SELECT C C DATOS DEL MATERIAL C C Lectura del tipo READ(F_E,*) MAT.TIP C i=1 DO WHILE((i.EQ.(TM(i).TIP)).AND.((TM(i).TIP).NE.(MAT.TIP))) IF(i.EQ.N_MAX_TPMT)THEN WRITE(F_W,01106) SOL.NUM , MAT.TIP WRITE (*,01106) SOL.NUM , MAT.TIP STOP END IF i=i+1 END DO C C Tipo de material erroneo C IF(MAT.TIP.NE.TM(MAT.TIP).TIP) THEN WRITE(F_W,01106) SOL.NUM , MAT.TIP WRITE (*,01106) SOL.NUM , MAT.TIP STOP END IF C C Lectura de las propiedades READ(F_E,*) (MAT.PRP(i) , i=1,TM(MAT.TIP).NPRP) C C FIN DE LA RUTINA C RETURN C C FORMATOS DE ESCRITURA C 01101 FORMAT(/,2x,'ERROR 01101 - LEE_SOLIDO - Solido: ',i2,'.',/,2x, @ 'Numero de solido errorneo (',i2,').') 01102 FORMAT(/,2x,'ERROR 01102 - LEE_SOLIDO - Solido: ',i2,'.',/,2x, @ 'Numero de nodos (',i4,') fuera del rango permitido.') 01103 FORMAT(/,2x,'ERROR 01103 - LEE_SOLIDO - Solido: ',i2,'.',/,2x, @ 'Numero de contornos (',i2,') fuera del rango permitido.') 01104 FORMAT(/,2x,'ERROR 01104 - LEE_SOLIDO - Solido: ',i2,'.',/,2x, @ 'Numero de puntos internos (',i4, @ ') fuera del rango permitido.') 01105 FORMAT(/,2x,'ERROR 01105 - LEE_SOLIDO - Solido: ',i2,'.',/,2x, @ 'Tipo de condicion de apoyo (',i2,') erronea.') 01106 FORMAT(/,2x,'ERROR 01106 - LEE_SOLIDO - Solido: ',i2,'.',/,2x, @ 'Tipo de material (',i2,') no implementado.') 01107 FORMAT(/,2x,'ERROR 01107 - LEE_SOLIDO - Solido: ',i2,'.',/,2x, @ 'Tipo de formulacion (',i2,') no implementada.') 01108 FORMAT(/,2x,'ERROR 01108 - LEE_SOLIDO - Solido: ',i2,'.',/,2x, @ 'Condicion de apoyo (',i2,') erronea.',/) C END C