lektab
C LEKTAB SOURCE CB215821 24/04/12 21:16:35 11897 C--------------------------------------------------------------------- C Ce sous-programme recherche dans la table MTABLE l'indice NOMI. C NOMI doit se trouver dans la liste LISTS. Le soustype de la table C est controlé par l'opérateur appelé. C C Si l'objet trouvé à l'indice NOMI est du bon type, son pointeur C IPOINT est renvoyé au sous-programme appelant. C Sinon, il est calculé et placé à l'indice NOMI de la table MTABLE C et son pointeur IPOINT est renvoyé au sous-programme appelant. C--------------------------------------------------------------------- C C--------------------------- C Paramètres Entrée/Sortie : C--------------------------- C C E/ MTABLE : Pointeur de la table contenant l'information cherchée C E/ NOMI : Indice de la table où on cherche une donnée C /S IPOINT : Pointeur sur l'objet trouvé ou ajouté à l'indice NOMI C En cas de problème IPOINT est nul. C C--------------------------------------------------------------------- IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) -INC SMCOORD -INC PPARAM -INC CCOPTIO -INC CCGEOME -INC SMELEME POINTEUR MELEMQ.MELEME -INC SMMODEL -INC SMTABLE POINTEUR IPTR.MTABLE,MTABM.MTABLE CHARACTER*8 MOTYP,TYPOBJ CHARACTER*72 ICHAI,CHARRE LOGICAL IRETL,IBOOL,LOGRE,VLOGI REAL*8 XRET,XVALRE * CHARACTER*(*) NOMI PARAMETER (NBO=60) CHARACTER*8 LISTS(NBO),TYPE,NOM,MIND,MINDS,TYPI,MNEFMD DATA LISTS/'MATESI ','XXVOLUM ','XXCOTE ','XXDIAME ','XXDIEMIN', & 'MATC ','XXPSOML ','INCO ','KIZG ','KOPT ', & 'PASDETPS','DOMAINE ','DOMZ ','EQEX ','EQPR ', & 'XXDIAGSI','KIZG1 ','KIZD ','SOMMET ','CENTRE ', & 'FACE ','FACEL ','FACEP ','XXNORMAF','XXSURFAC', & 'MAILLAGE','CETR&FAC','MATRIS ','ELTFA ','XXNORMAE', & 'KIZA ','ARGS ','SOMCEN ','CESOCE ','NORMALEV', & 'OENVELOP','XXMSOMME','MATEEF ','ELKONV ','XXDIAGFA', & 'M1BULLE ','CENTREP0','ELTP1NC ','CENTREP1','VOLUMAC ', & 'MACRO ','QUADRATI','MACRO1 ','XXDXDY ','MSOMMET ', & 'MMAIL ','MLGVNIMP','MLGVTIMP','ENVELOPP','FACEL2 ', & 'QUAF ','XXCTREP1','XXCTREP0','MAILFACE','ARETE '/ C C- Initialisations C C write(6,*)'DEBUT LEKTAB MTB,NOMI=',MTB,NOMI MTABLE = ABS(MTB) CALL EXIS IF(IRET.EQ.0)THEN write(6,*)'LEKTAB : Pb avec INEFMD' go to 5000 ENDIF IF(VLOGI)THEN TYPE=' ' IF(TYPE.EQ.'MOT')THEN IF(MNEFMD.EQ.'LINE')THEN INEFMD=1 ELSEIF(MNEFMD.EQ.'MACRO')THEN INEFMD=2 ELSEIF(MNEFMD.EQ.'QUAF ')THEN INEFMD=3 ELSEIF(MNEFMD.EQ.'LINB ')THEN INEFMD=4 ELSEIF(MNEFMD.EQ.'ISOQ ')THEN INEFMD=5 ELSE INEFMD=0 ENDIF ELSEIF(TYPE.EQ.'ENTIER')THEN ELSE write(6,*)'LEKTAB : Pb avec INEFMD' GO TO 5000 ENDIF ELSE INEFMD=0 ENDIF KECR=0 IF(MTB.LT.0)KECR=1 NOM = NOMI IPOINT = 0 I211 = 0 I221 = 0 I231 = 0 I241 = 0 I251 = 0 I271 = 0 I291 = 0 I301 = 0 I331 = 0 I341 = 0 I371 = 0 I391 = 0 I501 = 0 I511 = 0 I1201 = 0 I541 = 0 I542 = 0 I551 = 0 I591 = 0 C C- Détermination du cas à traiter et ventilation C CG SEGACT MTABLE IPREC=0 ISTOK=0 IF (TYPE.EQ.'DOMAINE ') THEN c c traitement special pour le cas ou PRECONDI n'existait pas c ICHAI(1:8)='PRECONDI' MOTYP='MOT' TYPOBJ=' ' $ ,IOBJ,TYPOBJ,IVALRE,XVALRE,CHARRE,LOGRE,IOBRE) IRETL=.TRUE. IF(TYPOBJ.EQ.' ') IRETL = .FALSE. ENDIF ISTOK=IPREC C write(6,*)' LEKTAB NOM=',nom IF (IP.EQ.0) THEN IF (NOM(1:4).EQ.'ARGS') THEN IP = 32 ELSE C Indice %m1:8 : N'est pas un indice de table reconnu MOTERR(1:8) = NOM RETURN ENDIF ENDIF C write(6,*)' LEKTAB IP=',IP, ' NOMI==========',NOMI GOTO ( 10, 20, 30, 40, 50, 60, 70, 80, 90,100 & ,110,120,130,140,150,160,170,180,190,200 & ,210,220,230,240,250,260,270,280,290,300 & ,310,320,330,340,350,360,370,380,390,400 & ,410,420,430,440,450,460,470,480,490,500 & ,510,520,530,540,550,560,570,580,590,600),IP C C Si PRECONDI = 0 (IPREC=0) On recaclcule systématiquement les numéros C suivant : 10 20 30 40 50 60 70 160 240 250 300 350 360 370 380 400 C 450 490 C C-*DOMAINE.'MATESI' C 10 CONTINUE TYPE = ' ' IF (TYPE.NE.'MATRIK '.OR.IPREC.EQ.0) THEN CALL HRSI TYPE='MATRIK' IF (IRET.EQ.0) GOTO 5000 ENDIF IPOINT = MATRIK RETURN C C-*DOMAINE.'XXVOLUM' : CHPO CENTRE contenant le volume des éléments C 20 CONTINUE TYPE = ' ' IF (TYPE.NE.'CHPOINT '.OR.IPREC.EQ.0) THEN C write(6,*) 'On ne trouve pas XXVOLUM -> On le calcule' TYPE=' ' ENDIF IPOINT = MCHPOI IF(KECR.EQ.1)THEN ENDIF C write(6,*) 'Retour XXVOLUM : MTABLE=',MTABLE RETURN C C-*DOMAINE.'XXCOTE' C 30 CONTINUE TYPE=' ' IF (TYPE.NE.'CHPOINT '.OR.IPREC.EQ.0) THEN C write(6,*) 'On ne trouve pas XXCOTE -> On le calcule' CALL KCOT TYPE = 'CHPOINT ' IF (IRET.EQ.0) GOTO 5000 ENDIF IPOINT = MCHPOI IF(KECR.EQ.1)THEN ENDIF C write(6,*) 'Retour XXCOTE : MTABLE=',MTABLE RETURN C C-*DOMAINE.'XXDIAME' C 40 CONTINUE TYPE = ' ' IF (TYPE.NE.'CHPOINT '.OR.IPREC.EQ.0) THEN C write(6,*) 'On ne trouve pas XXDIAME -> On le calcule' CALL KDME TYPE = 'CHPOINT ' IF (IRET.EQ.0) GOTO 5000 ENDIF IPOINT = MCHPOI IF(KECR.EQ.1)THEN ENDIF C write(6,*) 'Retour XXDIAME : MTABLE=',MTABLE RETURN C C-*DOMAINE.'XXDIEMIN' C 50 CONTINUE TYPE = ' ' IF (TYPE.NE.'CHPOINT '.OR.IPREC.EQ.0) THEN C write(6,*) 'On ne trouve pas XXDIEMIN -> On le calcule' CALL KDMI TYPE = 'CHPOINT ' IF (IRET.EQ.0) GOTO 5000 ENDIF IPOINT = MCHPOI IF(KECR.EQ.1)THEN ENDIF C write(6,*) 'Retour XXDIEMIN : MTABLE=',MTABLE RETURN C C-*????.'MATC' C 60 CONTINUE TYPE = ' ' IF (TYPE.NE.'MATRAK '.OR.IPREC.EQ.0) THEN c? IF (TYPE.NE.'MATRAK ') THEN IF (MATRAK.EQ.0) GOTO 5000 ENDIF IPOINT = MATRAK RETURN C C-*DOMAINE.'XXPSOML' : MCHAML, intégrale des fonctions tests par élément C 70 CONTINUE IF (TYPE.NE.'DOMAINE ') GOTO 5010 TYPE = ' ' IF (TYPE.NE.'MCHAML '.OR.IPREC.EQ.0) THEN CALL KPSOML TYPE = 'MCHAML' IF (IRET.EQ.0) GOTO 5000 ENDIF IPOINT = ICHE IF(KECR.EQ.1)THEN ENDIF RETURN C C- ????-INCO : TABLE de sous-type INCO C 80 CONTINUE MIND = LISTS(8) MINDS = LISTS(8) GOTO 1000 C C- ????-KIZG : TABLE de sous-type KIZG C 90 CONTINUE MIND = LISTS(9) MINDS = LISTS(9) GOTO 1000 C C- ????-KOPT : TABLE de sous-type KOPT C 100 CONTINUE MIND = LISTS(10) MINDS = LISTS(10) GOTO 1000 C C- ????-PASDETPS : TABLE de sous-type PASDETPS C 110 CONTINUE MIND = LISTS(11) MINDS = LISTS(11) GOTO 1000 C C- ????-DOMAINE : TABLE de sous-type DOMAINE C 120 CONTINUE MIND = LISTS(12) MINDS = LISTS(12) GOTO 1000 C C- ????-DOMZ : TABLE de sous-type DOMAINE C 130 CONTINUE MIND = LISTS(13) MINDS = LISTS(12) GOTO 1000 C C- ????-EQEX : TABLE de sous-type EQEX C 140 CONTINUE MIND = LISTS(14) MINDS = LISTS(14) GOTO 1000 C C- ????-EQPR : TABLE de sous-type EQPR C 150 CONTINUE MIND = LISTS(15) MINDS = LISTS(15) GOTO 1000 C C-*DOMAINE.'XXDIAGSI' C 160 CONTINUE TYPE = ' ' IF (TYPE.NE.'CHPOINT '.OR.IPREC.EQ.0) THEN C write(6,*) 'On ne trouve pas XXDIAGSI -> On le calcule' SEGACT,MCOORD CALL CADGSI TYPE = 'CHPOINT ' IF (IRET.EQ.0) GOTO 5000 ENDIF IPOINT = MCHPOI IF(KECR.EQ.1)THEN ENDIF C write(6,*) 'Retour XXDIAGSI : MTABLE=',MTABLE RETURN C C- ????-KIZG1 : TABLE de sous-type KIZG1 C 170 CONTINUE MIND = LISTS(17) MINDS = LISTS(17) GOTO 1000 C C- ????-KIZD : TABLE de sous-type KIZD C 180 CONTINUE MIND = LISTS(18) MINDS = LISTS(18) GOTO 1000 C C- DOMAINE.'SOMMET' : MELEME de POI1 contenant les sommets du maillage C 190 CONTINUE IF (TYPE.NE.'DOMAINE ') GOTO 5010 TYPE = ' ' IF (TYPE.NE.'MAILLAGE') THEN TYPE = ' ' IF (TYPE.NE.'MAILLAGE') GOTO 5000 CALL PRCHAN IF (IRET.EQ.0) GOTO 5000 ENDIF IPOINT = MELEM1 IF(KECR.EQ.1)THEN ENDIF RETURN C C- DOMAINE.'CENTRE' : MELEME de POI1 contenant les centres du maillage C 200 CONTINUE IF (TYPE.NE.'DOMAINE ') GOTO 5010 TYPE = ' ' IF (TYPE.NE.'MAILLAGE') THEN TYPE = ' ' IF (TYPE.NE.'MAILLAGE') GOTO 5000 CALL CRECTR IF (IRET.EQ.0) GOTO 5000 ENDIF IPOINT = MELEMC IF(KECR.EQ.1)THEN ENDIF RETURN C C- DOMAINE.'FACE' : MELEME de POI1 contenant les faces du maillage C 210 CONTINUE IF (TYPE.NE.'DOMAINE ') GOTO 5010 TYPE = ' ' IF (TYPE.NE.'MAILLAGE') THEN I211 = 1 GOTO 1100 ENDIF 211 CONTINUE IPOINT = MELEF1 IF(KECR.EQ.1)THEN ENDIF RETURN C C- DOMAINE.'FACEL' : MELEME des connectivités centre-face-centre C 220 CONTINUE IF (TYPE.NE.'DOMAINE ') GOTO 5010 TYPE = ' ' IF (TYPE.NE.'MAILLAGE') THEN I221 = 1 GOTO 1100 ENDIF 221 CONTINUE IPOINT = MELEMF IF(KECR.EQ.1)THEN ENDIF RETURN C C- DOMAINE.'FACEP' : MELEME des connectivités sommet-face-sommet C 230 CONTINUE IF (TYPE.NE.'DOMAINE ') GOTO 5010 TYPE = ' ' IF (TYPE.NE.'MAILLAGE') THEN I231 = 1 GOTO 1100 ENDIF 231 CONTINUE IPOINT = MELEMP IF(KECR.EQ.1)THEN ENDIF RETURN C C-*DOMAINE.'XXNORMAE' : CHPO FACE contenant la normale choisie à la face C 240 CONTINUE IF (TYPE.NE.'DOMAINE ') GOTO 5010 TYPE = ' ' IF (TYPE.NE.'CHPOINT '.OR.IPREC.EQ.0)THEN I241 = 1 GOTO 1200 ENDIF 241 CONTINUE IPOINT = ICHPV IF(KECR.EQ.1)THEN ENDIF RETURN C C-*DOMAINE.'XXSURFAC' : CHPO FACE contenant l'aire de la face C 250 CONTINUE IF (TYPE.NE.'DOMAINE ') GOTO 5010 TYPE = ' ' IF (TYPE.NE.'CHPOINT '.OR.IPREC.EQ.0) THEN I251 = 1 GOTO 1200 ENDIF 251 CONTINUE IPOINT = ICHP IF(KECR.EQ.1)THEN ENDIF RETURN C C- DOMAINE.'MAILLAGE' : Maillage géométrique du domaine considéré C 260 CONTINUE IF (TYPE.NE.'DOMAINE ') GOTO 5010 TYPE=' ' IF (TYPE.NE.'MAILLAGE') THEN C Indice %m1:8 : Objet de type %m9:16 incorrect MOTERR(1:8) = NOM MOTERR(9:16) = TYPE RETURN ENDIF IPOINT = MELEME IF(KECR.EQ.1)THEN ENDIF RETURN C C- DOMAINE.'CETR&FAC' : Inutilisé (à verifier) -> renvoie 'CENTRE' C 270 CONTINUE IF (TYPE.NE.'DOMAINE ') GOTO 5010 TYPE = ' ' IF (TYPE.NE.'MAILLAGE') THEN I271 = 1 GOTO 1100 ENDIF 271 CONTINUE IPOINT = MELEMK IF(KECR.EQ.1)THEN ENDIF RETURN C C- ????.'MATRIS' C 280 CONTINUE TYPE = ' ' IF (TYPE.NE.'TABLE ') THEN IMPR=1 CALL PROGCS IF (IRET.EQ.0) GOTO 5000 ENDIF IPOINT = MTABM RETURN C C- DOMAINE.'ELTFA' : MELEME connectivite face par élément (Hdiv) C 290 CONTINUE IF (TYPE.NE.'DOMAINE ') GOTO 5010 TYPE = ' ' IF (TYPE.NE.'MAILLAGE') THEN I291 = 1 GOTO 1100 ENDIF 291 CONTINUE IPOINT = MELAF IF(KECR.EQ.1)THEN ENDIF RETURN C C-*DOMAINE.'XXNORMAE' : MCHAML d'orientation des normales C 300 CONTINUE IF (TYPE.NE.'DOMAINE ') GOTO 5010 TYPE = ' ' IF (TYPE.NE.'MCHAML '.OR.IPREC.EQ.0) THEN I301 = 1 GOTO 1200 ENDIF 301 CONTINUE IPOINT = ICHE IF(KECR.EQ.1)THEN ENDIF RETURN C C- ????.'KIZA' : TABLE de sous-type KIZA C 310 CONTINUE MIND=LISTS(31) MINDS=LISTS(31) GOTO 1000 C C- ????.'ARGS...' : CHPO C 320 CONTINUE TYPE = ' ' IF (TYPE.NE.'CHPOINT ') THEN NC = 10 ENDIF IPOINT = MCHP IF(KECR.EQ.1)THEN ENDIF RETURN C C- DOMAINE.'SOMCEN' C Cet indice contient un maillage de connectivités sommet-centre C Il est constitué d'éléments de type POLY : C - le premier noeud est le sommet considéré ; C - les noeuds suivants sont les centres des éléments C contenant le sommet considéré. C 330 CONTINUE IF (TYPE.NE.'DOMAINE ') GOTO 5010 TYPE = ' ' * CALL ACMO(MTABLE,'MMAIL',TYPE,MMELEM) IF (TYPE.NE.'MAILLAGE') THEN C Indice %m1:8 : Objet de type %m9:16 incorrect MOTERR(1:8) = NOM MOTERR(9:16) = TYPE RETURN ENDIF * IF (TYPE.NE.'MAILLAGE') THEN * I331 = 1 * GOTO 1300 * ENDIF 331 CONTINUE TYPE = ' ' IF (TYPE.NE.'MAILLAGE') THEN TYPE = 'MAILLAGE' * CALL ACMO(MTABLE,'MSOMMET',TYPE,MMLEMS) ENDIF IPOINT = MSOCEN IF(KECR.EQ.1)THEN ENDIF RETURN C C- DOMAINE.'CESOCE' C cet indice contient un maillage de connectivités C centre-(sommet)-centre. C Il est constitué d'éléments de type POLY : C - le premier noeud est le centre de l'élément considéré ; C - les noeuds suivants sont les centres des éléments C ayant au moins un sommet commun avec l'élément considéré. C 340 CONTINUE IF (TYPE.NE.'DOMAINE ') GOTO 5010 TYPE=' ' * CALL ACMO(MTABLE,'MMAIL',TYPE,MMELEM) IF (TYPE.NE.'MAILLAGE') THEN C Indice %m1:8 : Objet de type %m9:16 incorrect MOTERR(1:8) = NOM MOTERR(9:16) = TYPE RETURN ENDIF * IF (TYPE.NE.'MAILLAGE') THEN * I341 = 1 * GOTO 1300 * ENDIF 341 CONTINUE TYPE = ' ' IF (TYPE.NE.'MAILLAGE') THEN TYPE = 'MAILLAGE' * CALL ACMO(MTABLE,'MSOMMET',TYPE,MMLEMS) ENDIF IPOINT = MCESOC IF(KECR.EQ.1)THEN ENDIF RETURN C C-*NORMALEV C 350 CONTINUE TYPE = ' ' 351 CONTINUE IF (TYPE.NE.'MAILLAGE'.OR.IPREC.EQ.0) THEN TYPE = 'MAILLAGE' C petite verification SEGACT MELEMQ ICONF=1 DO 62486 L=1,MAX(1,MELEMQ.LISOUS(/1)) IPT1=MELEMQ IF(MELEMQ.LISOUS(/1).NE.0)IPT1=MELEMQ.LISOUS(L) SEGACT IPT1 IF(IDIM.EQ.2.AND.NOMS(IPT1.ITYPEL).NE.'SEG3')THEN ICONF=0 ENDIF IF(IDIM.EQ.3.AND.NOMS(IPT1.ITYPEL).NE.'TRI7' & .AND.NOMS(IPT1.ITYPEL).NE.'QUA9')THEN ICONF=0 ENDIF 62486 CONTINUE IF(ICONF.EQ.0)THEN TYPE=' ' IF(TYPE.NE.'MAILLAGE')THEN IF (IRET.EQ.0) GOTO 5000 IF(KECR.EQ.1.AND.NOMI.EQ.'ENVELOPP')THEN ENDIF IF(KECR.EQ.1.AND.NOMI.EQ.'OENVELOP')THEN ENDIF ENDIF MACRO=0 MTABI=0 ELSE ENDIF IF (IRET.EQ.0) THEN C Indice %m1:8 : Objet de type %m9:16 incorrect MOTERR(1:8) = 'NORMALEV' MOTERR(9:16) = TYPE RETURN ENDIF ENDIF IPOINT=MNORM IF(NOM.EQ.'OENVELOP')IPOINT=MCHPOI IF(KECR.EQ.1.AND.NOMI.EQ.'NORMALEV')THEN ENDIF IF(KECR.EQ.1.AND.NOMI.EQ.'OENVELOP')THEN ENDIF RETURN C C-*OENVELOP C 360 CONTINUE IF (TYPE.NE.'DOMAINE ') GOTO 5010 TYPE=' ' IF (TYPE.NE.'CHPOINT'.OR.IPREC.EQ.0)THEN TYPE=' ' GO TO 351 ENDIF IPOINT = MCHPOI IF(KECR.EQ.1)THEN ENDIF RETURN C C-*DOMAINE.'XXMSOMME' C 370 CONTINUE TYPE = ' ' IF (TYPE.NE.'CHPOINT '.OR.IPREC.EQ.0) THEN C write(6,*) 'On ne trouve pas XXDIAGSI -> On le calcule' IF (TYPE.NE.'MAILLAGE') THEN I371 = 1 GOTO 1300 ENDIF CALL CADGSI TYPE = 'CHPOINT ' IF (IRET.EQ.0) GOTO 5000 ENDIF IPOINT = MCHPOI IF(KECR.EQ.1)THEN ENDIF C write(6,*) 'Retour XXDIAGSI : MTABLE=',MTABLE RETURN C /\ C-*DOMAINE.'MATEEF' : En chantier /! \ / C / <-/ 380 CONTINUE IF (TYPE.NE.'DOMAINE ') GOTO 5010 TYPE=' ' IF (TYPE.NE.'MATRIK '.OR.IPREC.EQ.0) THEN C CALL HREF MOTERR(1:27) = ' LEKTAB : HREF hors service' TYPE='MATRIK' IF (IRET.EQ.0) GOTO 5000 ENDIF IPOINT = MATRIK RETURN C C- DOMAINE.'ELKONV' C 390 CONTINUE IF (TYPE.NE.'DOMAINE ') GOTO 5010 TYPE = ' ' IF (TYPE.NE.'MAILLAGE') THEN C write(6,*)' LEKTAB FACEL n existe pas on le cree ' I391 = 1 GOTO 1100 ENDIF C write(6,*)' LEKTAB FACEL existe ' 391 CONTINUE TYPE = ' ' IF (TYPE.NE.'MAILLAGE') THEN TYPI = 'MAILLAGE' C write(6,*)' melef1,melemf,melemk,melaf=' C & ,melef1,melemf,melemk,melaf ENDIF IPOINT = MKONV IF(KECR.EQ.1)THEN ENDIF RETURN C C-*DOMAINE.'XXDIAGFA' C 400 CONTINUE TYPE=' ' IF(TYPE.NE.'CHPOINT '.OR.IPREC.EQ.0)THEN C write(6,*)' On a pas trouve XXDIAGFA On le calcule ' CALL CADGFA TYPE='CHPOINT ' IF (IRET.EQ.0) GOTO 5000 ENDIF IPOINT = MCHPOI IF(KECR.EQ.1)THEN ENDIF C write(6,*)' retour XXDIAGFA : MTABLE=',MTABLE RETURN C C- ????.'M1BULLE' : En chantier C 410 CONTINUE TYPE = ' ' IF(TYPE.NE.'MAILLAGE')THEN C write(6,*)' On a pas trouve M1BULLE On le calcule ' IF(KECR.EQ.1)THEN ENDIF ENDIF RETURN C C- DOMAINE.'CENTREP0' C 420 CONTINUE TYPE = ' ' IF (TYPE.NE.'MAILLAGE') THEN ENDIF IF(KECR.EQ.1)THEN ENDIF RETURN C C- DOMAINE.'ELTP1NC ' C 430 CONTINUE IF(INEFMD.EQ.0.OR.INEFMD.EQ.1.OR.INEFMD.EQ.4)GO TO 5000 TYPE=' ' IF (TYPE.NE.'MAILLAGE') THEN ENDIF IF(KECR.EQ.1)THEN ENDIF RETURN C C- DOMAINE.'CENTREP1' C 440 CONTINUE IF(INEFMD.EQ.0.OR.INEFMD.EQ.1.OR.INEFMD.EQ.4)GO TO 5000 TYPE=' ' IF (TYPE.NE.'MAILLAGE') THEN ENDIF IF(KECR.EQ.1)THEN ENDIF RETURN C C-*DOMAINE.'VOLUMAC ' C 450 CONTINUE TYPE=' ' IF(IPOINT.NE.0)RETURN TYPE=' ' IF(MELEME.EQ.0)THEN C Indice %m1:8 : Objet de type %m9:16 incorrect MOTERR(1:8) = 'VOLUMAC ' MOTERR(9:16) = 'NONMACRO' RETURN ENDIF TYPE=' ' IF (TYPE.NE.'MAILLAGE') THEN RETURN ENDIF TYPE = ' ' IF (TYPE.NE.'MAILLAGE') THEN RETURN ENDIF IF(KECR.EQ.1)THEN ENDIF RETURN C C- DOMAINE.'MACRO ' C 460 CONTINUE TYPE=' ' IPOINT = MELEME IF(KECR.EQ.1)THEN ENDIF RETURN C C- DOMAINE.'QUADRATI' C 470 CONTINUE TYPE=' ' IPOINT = MELEME IF(KECR.EQ.1)THEN ENDIF RETURN C C- DOMAINE.'MACRO1' C 480 CONTINUE TYPE=' ' IF (TYPE.NE.'MAILLAGE') THEN TYPE=' ' IF(TYPE.NE.'MAILLAGE')THEN TYPE=' ' RETURN ELSE RETURN ENDIF ENDIF IPOINT = MELEME IF(KECR.EQ.1)THEN ENDIF RETURN C C-*????.'XXDXDY' : En chantier C 490 CONTINUE TYPE = ' ' C write(6,*)' ACMO XXDXDY : MTABLE=',MTABLE IF (TYPE.NE.'CHPOINT '.OR.IPREC.EQ.0) THEN C write(6,*)' On a pas trouve XXDXDY On le calcule ' C write(6,*)' ECROBJ XXDXDY : MTABLE=',MTABLE CALL KDXDY TYPE = 'CHPOINT ' IF (IRET.EQ.0) GOTO 5000 ENDIF IPOINT = MCHPOI IF(KECR.EQ.1)THEN ENDIF C write(6,*)' retour XXDXDY : MTABLE=',MTABLE RETURN C C- DOMAINE.'MSOMMET' C 500 CONTINUE IF (TYPE.NE.'DOMAINE ') GOTO 5010 TYPE=' ' IF(TYPE.NE.'MAILLAGE')THEN I501 = 1 GO TO 1300 ENDIF 501 CONTINUE IPOINT = MMLEMS IF(KECR.EQ.1)THEN ENDIF RETURN C C- DOMAINE.'MMAIL ' C 510 CONTINUE IF (TYPE.NE.'DOMAINE ') GOTO 5010 TYPE=' ' IF(TYPE.NE.'MAILLAGE')THEN I511 = 1 GOTO 1300 ENDIF 511 CONTINUE IPOINT = MMELEM IF(KECR.EQ.1)THEN ENDIF RETURN C C- DOMAINE.'MLGVNIMP' C 520 CONTINUE IF (TYPE.NE.'DOMAINE ') GOTO 5010 TYPE=' ' IF(TYPE.EQ.'MAILLAGE')THEN IPOINT = MELETI IF(KECR.EQ.1)THEN ENDIF RETURN ELSE TYPE=' ' IF (TYPE.NE.'MAILLAGE') GO TO 5000 IF (TYPE.NE.'MAILLAGE') THEN C Indice %m1:8 : Objet de type %m9:16 incorrect MOTERR(1:8) = NOM MOTERR(9:16) = TYPE RETURN ENDIF IPOINT = MELETI IF(KECR.EQ.1)THEN ENDIF RETURN ENDIF C C- DOMAINE.'MLGVTIMP' C 530 CONTINUE IF (TYPE.NE.'DOMAINE ') GOTO 5010 TYPE=' ' IF(TYPE.EQ.'MAILLAGE')THEN IPOINT = MELETI IF(KECR.EQ.1)THEN ENDIF RETURN ELSE TYPE=' ' IF (TYPE.NE.'MAILLAGE') GO TO 5000 IF (TYPE.NE.'MAILLAGE') THEN C Indice %m1:8 : Objet de type %m9:16 incorrect MOTERR(1:8) = NOM MOTERR(9:16) = TYPE RETURN ENDIF IPOINT = MELETI IF(KECR.EQ.1)THEN ENDIF RETURN ENDIF C C- DOMAINE.'ENVELOPP' C 540 CONTINUE IF (TYPE.NE.'DOMAINE ') GOTO 5010 TYPE=' ' IF(TYPE.EQ.'MAILLAGE')THEN IPOINT = MENVEL IF(KECR.EQ.1)THEN ENDIF RETURN ELSE TYPE = ' ' C CALL ACMO(MTABLE,'FACEP',TYPE,MELEMP) IF (TYPE.NE.'MAILLAGE') THEN I541 = 1 GOTO 1100 ENDIF ENDIF 541 CONTINUE TYPE = ' ' 542 CONTINUE IF (IRET.EQ.0) GOTO 5000 IPOINT = MENVEL IF(KECR.EQ.1.AND.NOMI.EQ.'ENVELOPP')THEN ENDIF RETURN C C- DOMAINE.'FACEL2' : MELEME connectivite face -> centre (partitionne) C rgt partitionne 550 CONTINUE IF (TYPE.NE.'DOMAINE ') GOTO 5010 TYPE = ' ' IF (TYPE.NE.'MAILLAGE') THEN I551 = 1 GOTO 1100 ENDIF 551 CONTINUE IPOINT = MELEF2 IF(KECR.EQ.1)THEN ENDIF RETURN C C- DOMAINE.'QUAF ' : Maillage QUAF du domaine considéré C 560 CONTINUE IF (TYPE.NE.'DOMAINE ') GOTO 5010 TYPE=' ' IF (TYPE.NE.'MAILLAGE') THEN C Indice %m1:8 : Objet de type %m9:16 incorrect MOTERR(1:8) = NOM MOTERR(9:16) = TYPE RETURN ENDIF IPOINT = MELEME IF(KECR.EQ.1)THEN ENDIF RETURN C C- DOMAINE.'XXCTREP1' C 570 CONTINUE TYPE = ' ' IF (TYPE.NE.'CHPOINT ') THEN CALL CADGSI TYPE = 'CHPOINT ' IF (IRET.EQ.0) GOTO 5000 ENDIF IPOINT = MCHPOI IF(KECR.EQ.1)THEN ENDIF C write(6,*) 'Retour XXDIAGSI : MTABLE=',MTABLE RETURN C C- DOMAINE.'XXCTREP0' C 580 CONTINUE TYPE = ' ' IF (TYPE.NE.'CHPOINT ') THEN TYPE = ' ' IF (TYPE.NE.'CHPOINT ') THEN write(6,*) 'On ne trouve pas XXVOLUM -> On le calcule' TYPE=' ' ENDIF ENDIF IPOINT = MCHPOI IF(KECR.EQ.1)THEN ENDIF RETURN C C- DOMAINE.'MAILFACE' : MELEME des elements face C 590 CONTINUE IF (TYPE.NE.'DOMAINE ') GOTO 5010 TYPE = ' ' IF (TYPE.NE.'MAILLAGE') THEN I591 = 1 GOTO 1100 ENDIF 591 CONTINUE IPOINT = MFF2 IF(KECR.EQ.1)THEN ENDIF RETURN C C- DOMAINE.'ARETE ' : MELEME des éléments arêtes C 600 CONTINUE IF (TYPE.NE.'DOMAINE ') GOTO 5010 TYPE = ' ' IF (TYPE.NE.'MAILLAGE') THEN C Indice %m1:8 : Objet de type %m9:16 incorrect MOTERR(1:8) = NOM MOTERR(9:16) = TYPE RETURN ENDIF TYPE = ' ' IF (TYPE.NE.'MAILLAGE') THEN CALL CHANLG IF (IRETOU.NE.1) THEN C Indice %m1:8 : Objet de type %m9:16 incorrect MOTERR(1:8) = 'ARETE' MOTERR(9:16) = 'MAILLAGE' RETURN ENDIF ENDIF IPOINT = MARET IF(KECR.EQ.1)THEN ENDIF RETURN C C- Emplacement libre C 610 CONTINUE IPOINT = 0 RETURN C C C--------------------------------------------------------- C Traitement commun à plusieures options et mise en facteur C--------------------------------------------------------- C C C- Recherche à l'indice mot MIND d'une table de sous-type MINDS C- ATTENTION : ERREUR NON GERE POUR L'INSTANT : Si IPTR.EQ.0 5000 C 1000 CONTINUE TYPE = ' ' IF (TYPE.EQ.'TABLE ') THEN TYPE = ' ' IF (TYPE.EQ.MINDS) THEN IPOINT = IPTR ENDIF ELSE IF(TYPE.EQ.'MMODEL')THEN IF(IPOINT.EQ.0)RETURN ENDIF RETURN C C- Construction des indices 'FACE', 'FACEP', 'FACEL', 'CENTRE', 'ELTFA', 'FACEL2' C- d'une table de sous-type 'DOMAINE' utilisé pour certaines options C 1100 CONTINUE TYPE = ' ' IF (TYPE.NE.'MAILLAGE') GOTO 5000 IF(IKR.EQ.1)IQUAD=1 IF(IQUAD.EQ.1)THEN ENDIF IF (I211 .EQ.1) GOTO 211 IF (I221 .EQ.1) GOTO 221 IF (I231 .EQ.1) GOTO 231 IF (I271 .EQ.1) GOTO 271 IF (I291 .EQ.1) GOTO 291 IF (I391 .EQ.1) GOTO 391 IF (I541 .EQ.1) GOTO 541 IF (I551 .EQ.1) GOTO 551 IF (I1201.EQ.1) GOTO 1201 IF (I591 .EQ.1) GOTO 591 C C- Construction des indices 'XXNORMAE', 'XXSURFAC' et 'XXNORMAF' C- d'une table de sous-type 'DOMAINE' utilisé pour certaines options C 1200 CONTINUE TYPE = ' ' IF (TYPE.NE.'MAILLAGE') THEN I1201 = 1 GOTO 1100 ENDIF 1201 CONTINUE IF(ISTOK.EQ.1)THEN ENDIF IF (I241.EQ.1) GOTO 241 IF (I251.EQ.1) GOTO 251 IF (I301.EQ.1) GOTO 301 IF (I542.EQ.1) GOTO 542 C C Construction des indices 'MSOMMET' et 'MMAIL' d'une table C de sous-types 'DOMAINE'. C A l'indice 'MSOMMET', on trouve le maillage des "vrais" C sommets (les sommets géométriques des éléments), par C opposition à l'indice 'SOMMET' qui est le spg des inconnues C définies dans l'espace L2. C A l'indice 'MMAIL' qui lui correspond, on trouve le maillage C des "vrais" éléments (les éléments géométriques : C ils ont le type le plus simple pour un forme C géométrique donnée (ex. TRI3, PYR5, CUB8...)) C par opposition à l'indice 'MAILLAGE' qui contient C éventuellement des éléments avec plus de points qui sont les C spg des différentes inconnues. C spg=support géométrique. C 1300 CONTINUE TYPE=' ' IF (TYPE.NE.'MAILLAGE') GO TO 5000 IF (TYPE.NE.'MAILLAGE') THEN C Indice %m1:8 : Objet de type %m9:16 incorrect MOTERR(1:8) = NOM MOTERR(9:16) = TYPE RETURN ENDIF IF (I331.EQ.1) GOTO 331 IF (I341.EQ.1) GOTO 341 IF (I371.EQ.1) GOTO 370 IF (I501.EQ.1) GOTO 501 IF (I511.EQ.1) GOTO 511 C C---------------------------------------- C Erreur détectée : traitement impossible C---------------------------------------- C 5000 CONTINUE C Indice %m1:8 : Problème de données détecté dans lektab IPOINT = 0 MOTERR = NOM RETURN 5010 CONTINUE C Indice %m1:8 : La table n'est pas de sous-type %m9:16 IPOINT = 0 MOTERR = NOM MOTERR(9:16) ='DOMAINE ' RETURN C END
© Cast3M 2003 - Tous droits réservés.
Mentions légales