deco1
C DECO1 SOURCE CB215821 24/04/12 21:15:34 11897 IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) *____________________________________________________________________* * * * Sous-programme de l'op{rateur DECO * * * * Entr{es: * * * * IPMODL Pointeur sur un objet MMODEL * * IPCHE2 Pointeur sur un MCHAML de FONCTION DE COURANT * * IPCHE1 Pointeur sur un MCHAML de CARACTERISTIQUES * * * * Sortie: * * * * IPCHL1 Pointeur sur un MCHAML de courants * * IRET 1 si succes , 0 sinon * * * * Auteurs, date de cr{ation: * * * * Yann Stephan, le 22/09/97 * * * *____________________________________________________________________* * -INC PPARAM -INC CCOPTIO -INC CCHAMP -INC SMCHAML -INC SMMODEL -INC SMELEME -INC SMINTE -INC SMCOORD * SEGMENT,MMAT1 REAL*8 VALMAT(NMATR) REAL*8 XE(3,NBNN),XE1(3,NBNN) REAL*8 COSD1(3),COSD2(3) ENDSEGMENT POINTEUR MMAT2.MMAT1,MMATX.MMAT1 * SEGMENT SGAUSS REAL*8 XGAUSS(3,NBPGAU) REAL*8 DX(NBPGAU) ENDSEGMENT POINTEUR SGX.SGAUSS,SGY.SGAUSS * SEGMENT,MWRK1 REAL*8 XDDL(LRE) ENDSEGMENT * SEGMENT INFO INTEGER INFELL(JG) ENDSEGMENT * SEGMENT NOTYPE CHARACTER*16 TYPE(NBTYPE) ENDSEGMENT * SEGMENT MPTVAL INTEGER IPOS(NS) ,NSOF(NS) INTEGER IVAL(NCOSOU) CHARACTER*16 TYVAL(NCOSOU) ENDSEGMENT * CHARACTER*8 CMATE CHARACTER*(NCONCH) CONM PARAMETER ( NINF=3 ) INTEGER INFOS(NINF) LOGICAL lsupgd * lsupgd=.false. IRET=1 MWRK1=0 NMAT = 0 ITHER= 0 IMAGN= 0 NHRM = NIFOUR * * ACTIVATION DU CHAPEAU DE MODELE * MMODEL = IPMODL SEGACT MMODEL NSOUS = KMODEL(/1) * * Initialisation du CHAMELEM de COURANTS * L1 = 8 N1 = NSOUS N3 = 6 SEGINI,MCHELM IPCHL1=MCHELM TITCHE = 'COURANT' IFOCHE=IFOUR * * Boucle sur les zones {l{mentaires du MODELE * DO 500 ISOUS=1,NSOUS * * QUELQUES INITIALISATIONS * NGRA=0 NDEP=0 NCAR = 0 IPMINT=0 IRTD1=1 NSTRS=0 MOGRAD=0 MODEPL=0 MOTEMP=0 MOCARA=0 MOMATR=0 IVAGRA=0 IVADEP=0 IVACAR=0 IVAMAT=0 NMATR=0 NMATF=0 * IMODEL=KMODEL(ISOUS) SEGACT IMODEL MELE=NEFMOD IPMAIL=IMAMOD CONM =CONMOD NFOR=FORMOD(/2) NMAT=MATMOD(/2) IF (CMATE.EQ.' ')THEN SEGDES IMODEL,MMODEL SEGSUP MCHELM IRET=0 RETURN ENDIF * * ACTIVATION DU MAILLAGE * MELEME=IPMAIL SEGACT,MELEME NBNN =NUM(/1) NBELEM=NUM(/2) NBNO=NBNN * * INFORMATIONS SUR L'ELEMENT FINI * * IF(IMAGN.NE.0) THEN * * CAS MAGNETODYNAMIQUE * if(infmod(/1).lt.4) then * IF (IERR.NE.0) THEN SEGDES IMODEL,MMODEL SEGSUP MCHELM IRET=0 RETURN ENDIF INFO=IPINF MFR=INFELL(13) MINTE=INFELL(11) MINTE1= INFELL(12) NSTRS =INFELL(16) LW = INFELL( 7) LRE = INFELL( 9) LHOOK =INFELL(10) * SEGSUP INFO ELSE MFR=INFELE(13) minte=infmod(4) MINTE1= INFMOD(8) NSTRS =INFELE(16) LW = INFELE( 7) LRE = INFELE( 9) LHOOK =INFELE(10) ENDIF * ENDIF * * ACTIVATION DU SEGMENT D'INTEGRATION * SEGACT,MINTE NBPGAU=POIGAU(/1) SEGINI SGAUSS NDIM=IDIM SEGINI MMAT1 C C CREATION DU TABLEAU INFOS C IF (IRTD.EQ.0) GOTO 9990 * * NOMS DE COMPOSANTES OBLIGATOIRES A TROUVER DANS LES CHAMELEMS * MDM=MFR if(lnomid(3).ne.0) then nomid=lnomid(3) segact nomid mograd=nomid ngra=lesobl(/2) nfac=lesfac(/2) lsupgd=.false. else IF(IMAGN.NE.0) MDM=69 lsupgd=.true. endif * IF(IMAGN.NE.0) THEN ENDIF * * EPAISSEUR ET EXCENTREMENT DANS LE CAS DES COQUES * NBROBL=0 NBRFAC=0 MOCARA=0 NCAR=0 * IF (MFR.EQ.3.OR.MFR.EQ.5.OR.MFR.EQ.9) THEN NBROBL=1 NBRFAC=1 SEGINI NOMID MOCARA=NOMID LESOBL(1)='EPAI' LESFAC(1)='EXCE' NCAR=1 ENDIF * * VERIFICATION DE PRESENCE DES COMPOSANTES * NBTYPE=1 SEGINI NOTYPE MOTYPE=NOTYPE TYPE(1)='REAL*8' IF(IMAGN.NE.0) THEN 1 MOTYPE,1,INFOS,3,IVADEP) ENDIF SEGSUP NOTYPE IF (IERR.NE.0) THEN NGRA=0 IF (NCAR.NE.0) THEN NOMID=MOCARA SEGSUP NOMID ENDIF MOCARA=0 NCAR=0 GOTO 9990 ENDIF * IF (NCAR.NE.0) THEN IF (IPCHE1.NE.0) THEN NBTYPE=1 SEGINI NOTYPE MOTYPE=NOTYPE TYPE(1)='REAL*8' 1 1,INFOS,3,IVACAR) SEGSUP NOTYPE ELSE MOTERR(1:8)='CARACTER' MOTERR(9:12)=NOMTP(MELE) MOTERR(13:20)='COURANT' NCAR=0 NGRA=0 NOMID=MOCARA SEGSUP NOMID MOCARA=0 GOTO 9990 ENDIF ENDIF IF (IERR.NE.0) GOTO 9990 * IF(IVACAR.NE.0)THEN MPTVAL=IVACAR IPMELV=IVAL(1) IF(ICONS.NE.0)THEN GOTO 9990 ENDIF ENDIF * * NBROBL=0 NBRFAC=0 MOMATR=0 NMATR=0 NMATF=0 * * CREATION DU MCHAML DE COURANT * N2=NGRA SEGINI,MCHAML ICHAML(ISOUS)=MCHAML IMACHE(ISOUS)=MELEME CONCHE(ISOUS)=CONMOD C INFCHE(ISOUS,1)=0 INFCHE(ISOUS,2)=0 INFCHE(ISOUS,3)=NHRM INFCHE(ISOUS,4)=MINTE INFCHE(ISOUS,5)=0 IF(IMAGN.NE.0) THEN INFCHE(ISOUS,6)=2 ENDIF * * RECHERCHE DES DIMENSIONS LES PLUS GRANDES * N1EL=0 N1PTEL=0 MPTVAL=IVADEP DO 178 IO=1,NDEP MELVAL=IVAL(IO) N1PTEL=MAX(N1PTEL,VELCHE(/1)) N1EL =MAX(N1EL ,VELCHE(/2)) 178 CONTINUE * IF (N1PTEL.EQ.1.OR.NBPGAU.EQ.1) THEN N1PTEL=1 ELSE N1PTEL=NBPGAU ENDIF N1EL =MIN(N1EL ,NBELEM) * * CREATION DES MELVAL DU COURANT * NS=1 NCOSOU=NGRA SEGINI MPTVAL IVAGRA=MPTVAL NOMID=MOGRAD SEGACT NOMID DO 77 IGR=1,NGRA TYPCHE(IGR)='REAL*8' NOMCHE(IGR)=LESOBL(IGR) N2PTEL=0 N2EL=0 SEGINI MELVAL IELVAL(IGR)=MELVAL IVAL(IGR)=MELVAL 77 CONTINUE SEGDES NOMID * IMESS = 0 NBBB=NBNO IF (MFR.EQ.29) THEN NDUM=NGRA NGRA=NDUM*NBBB SEGINI MWRK1 NGRA=NDUM ELSE SEGINI MWRK1 ENDIF * * Boucle sur les {l{ments * DO 100 IB=1,NBELEM * * On cherche les coordonn{es des noeuds de l'{l{ment IB * * * On cherche les d{placements ou les temp{ratures * IE=1 MPTVAL=IVADEP NDDD=NDEP IF (IFOUR.EQ.-3.AND.ITHER.EQ.0) NDDD=NDEP-3 DO 200 IGAU=1,NBNN DO 200 ICOMP=1,NDDD MELVAL=IVAL(ICOMP) IF (MELVAL.NE.0) THEN IGMN=MIN(IGAU,VELCHE(/1)) IBMN=MIN(IB ,VELCHE(/2)) XDDL(IE)=VELCHE(IGMN,IBMN) ELSE XDDL(IE)=0. ENDIF IE=IE+1 200 CONTINUE * * On se dirige vers la zone sp{cifique selon l'{l{ment * GOTO (99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, & 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, & 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, & 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, & 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, & 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, & 99,99,99,99,99,99,99,27),MELE * 99 CONTINUE MOTERR(1:4)=NOMTP(MELE) MOTERR(9:12)='COURANT' IMESS = 86 GOTO 9990 *____________________________________________________________________* * 2/ COQ3 * *____________________________________________________________________* 27 CONTINUE IF(IMAGN.NE.0)THEN C COQUE MAGNETODYNAMIQUE C IF(IFOIS.NE.0.AND.IFOIS.NE.NBPGAU)THEN * * LE JACOBIEN EST NEGATIF ,MAILLAGE INCORRECT INTERR(1)=IB GO TO 9990 ELSEIF(IFOI2.EQ.NBPGAU)THEN * * CAS OU LE JACOBIEN EST TRES PETIT * INTERR(1)=IB GO TO 9990 ENDIF DO 5027 IGAU=1,NBPGAU C C REMPLISSAGE C MPTVAL=IVAGRA DO 7027 IC=1,NGRA MELVAL=IVAL(IC) IBMN=MIN(IB ,VELCHE(/2)) IGMN=MIN(IGAU,VELCHE(/1)) DO 7027 IN=1,NBNN VELCHE(IGMN,IBMN)=VELCHE(IGMN,IBMN)+ 7027 CONTINUE 5027 CONTINUE * ENDIF * 100 CONTINUE * * D{sactivation des segments * IF (MWRK1.NE.0) SEGSUP,MWRK1 * * IF (ITHER.NE.0) THEN NOMID=MOTEMP SEGSUP NOMID ELSE IF(IMAGN.NE.0) THEN NOMID=MOFC SEGSUP NOMID ELSE NOMID=MODEPL SEGSUP NOMID ENDIF IF (MOCARA.NE.0) THEN NOMID=MOCARA SEGSUP NOMID ENDIF IF (MOMATR.NE.0) THEN NOMID=MOMATR SEGSUP NOMID ENDIF NOMID=MOGRAD if(lsupgd)SEGSUP NOMID * * IF(ITHER.EQ.0) SEGSUP INFO SEGDES,IMODEL,MELEME SEGDES,MCHAML,MINTE * 500 CONTINUE SEGDES,MMODEL,MCHELM * CALL DTCHAM(IPCHE2) * RETURN * 9990 CONTINUE * * ERREUR DANS UNE SOUS ZONE, DESACTIVATION ET RETOUR * IRET=0 * * Gestion des messages d'erreur * IF (IMESS.NE.0) THEN INTERR(1) = IB ENDIF * IF (MWRK1.NE.0) SEGSUP,MWRK1 SEGSUP MMAT1 SEGSUP SGAUSS * * IF (MODEPL.NE.0) THEN NOMID=MODEPL SEGSUP NOMID ENDIF IF (MOTEMP.NE.0) THEN NOMID=MOTEMP SEGSUP NOMID ENDIF IF (MOCARA.NE.0)THEN NOMID=MOCARA SEGSUP NOMID ENDIF IF (lsupgd.and.MOGRAD.NE.0)THEN NOMID=MOGRAD SEGSUP NOMID ENDIF IF(MOMATR.NE.0)THEN NOMID=MOMATR SEGSUP NOMID ENDIF * SEGDES MELEME SEGDES IMODEL * SEGDES MMODEL IF (IPCHE1.NE.0) THEN MCHELM=IPCHE1 SEGDES MCHELM ENDIF SEGSUP,MCHAML SEGSUP,MCHELM * * IF (IPCHE2.NE.0) CALL DTCHAM(IPCHE2) SEGDES MINTE * IF(ITHER.EQ.0) SEGSUP INFO RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales