condu
C CONDU SOURCE CB215821 24/04/12 21:15:27 11897 SUBROUTINE CONDU IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC SMCHAML -INC SMMODEL POINTEUR MOELEC.MMODEL,MODIFF.MMODEL -INC SMRIGID -INC SMCOORD CHARACTER*(LOCOMP) MOCOMP segact mcoord IPRIGI = 0 IPMODR = 0 IPMODC = 0 C ========================================= C 1- LECTURE DES ARGUMENTS DE L'OPERATEUR C ========================================= C 1.1 - Lecture OBLIGATOIRE du modele (MODORI) C ===== MOTERR(1:8)=' MODELE ' IF (IERR.NE.0) RETURN C ===== C 1.2 - Lecture OBLIGATOIRE du champ de caracteristiques (MCHORI) C ===== IF (IERR.NE.0) RETURN IF(IERR .NE. 0) RETURN C ========================================= C 2- QUELQUES VERIFICATIONS DES ARGUMENTS C ========================================= C 2.1 - Verification du type du champ (MCHORI) C ===== MCHELM = MCHORI SEGACT,MCHELM IF (TITCHE(1:8).NE.'CARACTER') THEN MOTERR(1:16) = 'CARACTERISTIQUES' RETURN ENDIF C ===== C 2.2 - Verification du contenu du modele (MODORI) C Separation des formulations DIFFUSION & ELECTROSTATIQUE C et des formulations THERMIQUE & THERMOHYDRIQUE C ===== MMODEL = MODORI SEGACT,MMODEL NSOUS = KMODEL(/1) N1 = NSOUS SEGINI,MOELEC,MODTHM,MODRAY,MODCNV,MODTHR,MODIFF IELEC = 0 ITHEM = 0 IRAYE = 0 ICONV = 0 ITHER = 0 IDIFF = 0 DO isous = 1, NSOUS IMODEL = KMODEL(isous) SEGACT,IMODEL IF (FORMOD(1).EQ.'ELECTROSTATIQUE ') THEN IELEC = IELEC + 1 MOELEC.KMODEL(IELEC) = IMODEL ELSE IF (FORMOD(1).EQ.'THERMOHYDRIQUE ') THEN ITHEM = ITHEM + 1 MODTHM.KMODEL(ITHEM) = IMODEL ELSE IF (FORMOD(1).EQ.'DIFFUSION ') THEN IDIFF = IDIFF + 1 MODIFF.KMODEL(IDIFF) = IMODEL ELSE IF (FORMOD(1).EQ.'THERMIQUE ') then NMAT = MATMOD(/2) IF (ipl.NE.0) THEN IRAYE = IRAYE + 1 ELSE IF (ipl.NE.0) THEN ICONV = ICONV + 1 MODCNV.KMODEL(ICONV) = IMODEL ELSE ITHER = ITHER + 1 MODTHR.KMODEL(ITHER) = IMODEL ENDIF ENDIF ELSE N1 = N1 - 1 ENDIF ENDDO C Verification que le modele MODORI contient au moins un sous-modele C dont la formulation est traitee ici ! IF (N1.LE.0) THEN MOTERR(1:8) = 'MMODEL ' INTERR(1) = MODORI GOTO 9991 ENDIF IF (IELEC.GT.0) THEN C ======================================================= C 3- CONSTRUCTION DE LA MATRICE DE CONDUCTIVITE C POUR LA FORMULATION ELECTROSTATIQUE C ======================================================= C Modele contenant uniquement des formulations DIFFUSION et ELECTROSTATIQUE N1 = IELEC SEGADJ,MOELEC IPMODR = MOELEC C Calcul de la matrice : tout est fait dans RIGI1 ipch = 0 imat = 1 noer=0 IF (IRET.NE.1) GOTO 9991 MRIGID = IPRIGI ENDIF NSOUS = ITHEM + IRAYE + ICONV + ITHER + IDIFF IF (NSOUS.GT.0) THEN C ================================================================ C 4- CONSTRUCTION DE LA MATRICE DE CONDUCTIVITE C POUR LES FORMULATIONS THERMIQUE, DIFFUSION ET THERMOHYDRIQUE C ================================================================ C 4.1 - Initialisation de la matrice si necessaire C ===== IF (IPRIGI.EQ.0) THEN NRIGEL = 0 SEGINI,MRIGID MTYMAT = 'RIGIDITE' ICHOLE = 0 IMGEO1 = 0 IMGEO2 = 0 IFORIG = IFOUR ISUPEQ = 0 IPRIGI = MRIGID ELSE MRIGID = IPRIGI SEGACT,MRIGID*MOD ENDIF C ===== C 4.2 - Modele avec uniquement les formulations THERMIQUE, DIFFUSION et THERMOHYDRIQUE C ===== N1 = NSOUS SEGINI,MMODEL isous = 0 IF (ITHEM.GT.0) THEN DO i = 1, ITHEM isous = isous + 1 KMODEL(isous) = MODTHM.KMODEL(i) ENDDO ENDIF IF (IRAYE.GT.0) THEN DO i = 1, IRAYE isous = isous + 1 ENDDO ENDIF IF (ICONV.GT.0) THEN DO i = 1, ICONV isous = isous + 1 KMODEL(isous) = MODCNV.KMODEL(i) ENDDO ENDIF IF (ITHER.GT.0) THEN DO i = 1, ITHER isous = isous + 1 KMODEL(isous) = MODTHR.KMODEL(i) ENDDO ENDIF IF (IDIFF.GT.0) THEN DO i = 1, IDIFF isous = isous + 1 KMODEL(isous) = MODIFF.KMODEL(i) ENDDO ENDIF IPMODC = MMODEL C ===== C 4.3 - Reduction du champ au modele precedemment reduit C ===== MCHELM = MCHORI IF (IRET.NE.1) THEN GOTO 9990 ENDIF ISUPCH = 0 IF (ISUPCH.GT.1) GOTO 9990 C NB : La verification du support est effectuee ici pour l'instant, C car tous les formulations considerees ici s'appuient sur le C meme support (IRET = 1, 2 ou 6). C ===== C 4.4 - Remplissage de la matrice pour chaque modele concerne C ===== c Formulation thermohydrique IF (ITHEM.GT.0) THEN DO i = 1, ITHEM IMODEL = MODTHM.KMODEL(i) SEGACT,IMODEL IF (IERR.NE.0) GOTO 9990 ENDDO ENDIF c Formulation rayonnement IF (IRAYE.GT.0) THEN MCHELM = IPCHEC DO i = 1, IRAYE SEGACT,IMODEL * on accepte le sous-modele de rayonnement que si le mchaml * correspondant contient une composante H ! SEGACT,MCHELM imaray = IMACHE(/1) MOCOMP ='H' DO j = 1, imaray IF (imache(j).eq.IMAMOD .AND. conche(j).eq.CONMOD) then mchaml = ichaml(j) SEGACT,mchaml IF (ipl.NE.0) then IF (IERR.NE.0) GOTO 9990 GOTO 4420 ENDIF ENDIF ENDDO 4420 CONTINUE ENDDO ENDIF c Formulation convection IF (ICONV.GT.0) THEN DO i = 1, ICONV IMODEL = MODCNV.KMODEL(i) SEGACT,IMODEL IF (IERR.NE.0) GOTO 9990 ENDDO ENDIF c Formulation conduction IF (ITHER.GT.0) THEN DO i = 1, ITHER IMODEL = MODTHR.KMODEL(i) SEGACT,IMODEL IF (IERR.NE.0) GOTO 9990 ENDDO ENDIF c Formulation diffusion IF (IDIFF.GT.0) THEN DO i = 1, IDIFF IMODEL = MODIFF.KMODEL(i) SEGACT,IMODEL IF (IERR.NE.0) GOTO 9990 ENDDO ENDIF ENDIF NRIGEL = IRIGEL(/2) IF (NRIGEL.EQ.0) THEN ENDIF 9990 CONTINUE IF (IERR.NE.0) THEN SEGSUP,MRIGID ELSE SEGDES,MRIGID ENDIF 9991 CONTINUE C SEGSUP,MOELEC,MODTHR,MODTHM,MODRAY,MODCNV,MODIFF END
© Cast3M 2003 - Tous droits réservés.
Mentions légales