$$$$ COQ2MAS * COQ2MAS PROCEDUR PASCAL 14/01/23 21:15:02 7911 ************************************************************************* * * * Génère un maillage volumique à partir d'un modèle * de coques multicouches * ************************************************************************** DEBPROC COQ2MAS MOD1*MMODEL MAT1*MCHAML MOTCLE/MOT TAB1*TABLE; * OPTI ELEM CUB8; * ZONMOD = extr MOD1 ZONE; * FLAGDEFO = FAUX; FLAGCONT = FAUX; FLAGVARI = FAUX; FLAGRELA = FAUX; * SI (NEG (TYPE TAB1) TABLE); TAB1 = TABLE; FINSI; * * On regarde si la table TAB1 existe sinon on la crée * On la complète le cas échéant * SI (EXISTE TAB1); * SI (EXISTE TAB1 'DEPLACEMENTS'); FLAGDEFO = VRAI; NDEFO = DIME (TAB1.'DEPLACEMENTS'); SINON; FLAGDEFO = FAUX; NDEFO = 0; FINSI; * SI (EXISTE TAB1 'CONTRAINTES'); FLAGCONT = VRAI; NCONT = DIME (TAB1.'CONTRAINTES'); SINON; FLAGCONT = FAUX; NCONT = 0; FINSI; * * SI (EXISTE TAB1 'VARIABLES_INTERNES'); FLAGVARI = VRAI; NVARI = DIME (TAB1.'VARIABLES_INTERNES'); SINON; FLAGVARI = FAUX; NVARI = 0; FINSI; * * * Si on veut creer les relations pour les sections au droit des noeuds * BLCOQ3D = MOT 'BLCOQ3D'; SI (EXISTE TAB1 'RELATION_3D'); SI (EGA (TAB1.'RELATION_3D') VRAI); FLAGRELA = VRAI; SINON; FLAGRELA = FAUX; FINSI; SINON; FLAGRELA = FAUX; FINSI; * SI (NON (EXISTE TAB1 'MODELE')); TAB1. 'MODELE' = TABLE; FINSI; * SI (NON (EXISTE TAB1 'MATERIAU')); TAB1. 'MATERIAU' = TABLE; FINSI; * SI (NON (EXISTE TAB1 'MAILLAGE_FIBRE_MOYENNE')); TAB1. 'MAILLAGE_FIBRE_MOYENNE' = TABLE; FINSI; * SI (NON (EXISTE TAB1 'MAILLAGE_FIBRE_INFERIEURE')); TAB1. 'MAILLAGE_FIBRE_INFERIEURE' = TABLE; FINSI; * SI (NON (EXISTE TAB1 'MAILLAGE_FIBRE_SUPERIEURE')); TAB1. 'MAILLAGE_FIBRE_SUPERIEURE' = TABLE; FINSI; * SI (NON (EXISTE TAB1 'MAILLAGE_VOLUMIQUE')); TAB1. 'MAILLAGE_VOLUMIQUE' = TABLE; FINSI; * SI (NON (EXISTE TAB1 'DEPLACEMENTS_FIBRE_MOYENNE')); TAB1. 'DEPLACEMENTS_FIBRE_MOYENNE' = TABLE; FINSI; * SI (NON (EXISTE TAB1 'VARI_FIBRE_MOYENNE')); TAB1. 'VARI_FIBRE_MOYENNE' = TABLE; FINSI; * SI (NON (EXISTE TAB1 'CONTRAINTES_FIBRE_MOYENNE')); TAB1. 'CONTRAINTES_FIBRE_MOYENNE' = TABLE; FINSI; * SI (NON (EXISTE TAB1 'CONTRAINTES_FIBRE_SUPERIEURE')); TAB1. 'CONTRAINTES_FIBRE_SUPERIEURE' = TABLE; FINSI; * SI (NON (EXISTE TAB1 'CONTRAINTES_FIBRE_INFERIEURE')); TAB1. 'CONTRAINTES_FIBRE_INFERIEURE' = TABLE; FINSI; * SI (NON (EXISTE TAB1 'CONTRAINTES_VOLUMIQUE')); TAB1. 'CONTRAINTES_VOLUMIQUE' = TABLE; FINSI; * SI (NON (EXISTE TAB1 'DEPLACEMENTS_FIBRE_INFERIEURE')); TAB1. 'DEPLACEMENTS_FIBRE_INFERIEURE' = TABLE; FINSI; * SI (NON (EXISTE TAB1 'DEPLACEMENTS_FIBRE_SUPERIEURE')); TAB1. 'DEPLACEMENTS_FIBRE_SUPERIEURE' = TABLE; FINSI; * SI (NON (EXISTE TAB1 'DEPLACEMENTS_VOLUMIQUE')); TAB1. 'DEPLACEMENTS_VOLUMIQUE' = TABLE; FINSI; * SI (NON (EXISTE TAB1 'NORMALE')); TAB1. 'NORMALE' = TABLE; FINSI; * SINON; * TAB1 = TABLE; TAB1. 'MODELE' = TABLE; TAB1. 'MATERIAU' = TABLE; TAB1. 'MAILLAGE_FIBRE_MOYENNE' = TABLE; TAB1. 'MAILLAGE_FIBRE_INFERIEURE' = TABLE; TAB1. 'MAILLAGE_FIBRE_SUPERIEURE' = TABLE; TAB1. 'MAILLAGE_VOLUMIQUE' = TABLE; TAB1. 'DEPLACEMENTS_FIBRE_MOYENNE' = TABLE; TAB1. 'DEPLACEMENTS_FIBRE_INFERIEURE' = TABLE; TAB1. 'DEPLACEMENTS_FIBRE_SUPERIEURE' = TABLE; TAB1. 'DEPLACEMENTS_VOLUMIQUE' = TABLE; TAB1. 'NORMALE' = TABLE; TAB1. 'VARI_FIBRE_MOYENNE' = TABLE; TAB1. 'CONTRAINTES_FIBRE_MOYENNE' = TABLE; TAB1. 'CONTRAINTES_FIBRE_INFERIEURE' = TABLE; TAB1. 'CONTRAINTES_FIBRE_SUPERIEURE' = TABLE; TAB1. 'CONTRAINTES_VOLUMIQUE' = TABLE; * FINSI; * SI FLAGDEFO; REPETER LAB3 NDEFO; i3 = (INDEX (TAB1. 'DEPLACEMENTS')) . &lab3 ; TAB1. 'DEPLACEMENTS_FIBRE_MOYENNE' . i3 = TABLE; TAB1. 'DEPLACEMENTS_FIBRE_INFERIEURE' . i3 = TABLE; TAB1. 'DEPLACEMENTS_FIBRE_SUPERIEURE' . i3 = TABLE; TAB1. 'DEPLACEMENTS_VOLUMIQUE' . i3 = TABLE; FIN LAB3; FINSI; SI FLAGCONT; REPETER LAB3 NCONT; i3 = (INDEX (TAB1. 'CONTRAINTES')) . &lab3 ; TAB1. 'CONTRAINTES_FIBRE_MOYENNE' . i3 = TABLE; TAB1. 'CONTRAINTES_FIBRE_INFERIEURE' . i3 = TABLE; TAB1. 'CONTRAINTES_FIBRE_SUPERIEURE' . i3 = TABLE; TAB1. 'CONTRAINTES_VOLUMIQUE' . i3 = TABLE; FIN LAB3; FINSI; SI FLAGVARI; REPETER LAB3 NVARI; i3 = (INDEX (TAB1. 'VARIABLES_INTERNES')) . &lab3 ; TAB1. 'VARI_FIBRE_MOYENNE' . i3 = TABLE; FIN LAB3; FINSI; * * Fin de la lecture de la table d'entrée * * Génération du maillage * NBZONE = ENTIER ((DIME ZONMOD)/2.); * * On boucle sur les zones * REPETER LAB1 NBZONE; * I1= &LAB1; * * On ne crée les maillages que s'ils n'existent pas * SI (NON (EXISTE TAB1.'MAILLAGE_FIBRE_MOYENNE' I1)); * MESHCOUI = ZONMOD.(2*I1); MODCOUI = ZONMOD.((2*I1) - 1); MATCOUI = REDU MAT1 MODCOUI; * VVJ = VSUR MODCOUI NORM; VVJP = EXCO (CHAN VVJ CHPO MODCOUI) (mots 'VX' 'VY' 'VZ') (mots 'UX' 'UY' 'UZ') NATURE DIFFUS; EPAP = CHAN (EXCO MATCOUI 'EPAI' SCAL) CHPO MODCOUI; SI (EXISTE MATCOUI 'EXCE'); EXCP = CHAN (EXCO MATCOUI 'EXCE' SCAL) CHPO MODCOUI; SINON; EXCP = 0.*EPAP; FINSI; MESHMOY = MESHCOUI PLUS (excp*vvjp); MESHINF = (MESHCOUI PLUS ((excp - (0.5*epap))*vvjp)); MESHSUP = (MESHCOUI PLUS ((excp + (0.5*epap))*vvjp)); MESHVOL = VOLU 1 MESHSUP MESHINF; * TAB1. 'MODELE' . I1 = MODCOUI; TAB1. 'MATERIAU' . I1 = MATCOUI; TAB1. 'NORMALE' . I1 = VVJP; TAB1. 'MAILLAGE_FIBRE_MOYENNE' . I1 = MESHMOY; TAB1. 'MAILLAGE_FIBRE_INFERIEURE' . I1 = MESHINF; TAB1. 'MAILLAGE_FIBRE_SUPERIEURE' . I1 = MESHSUP; TAB1. 'MAILLAGE_VOLUMIQUE'. I1 = MESHVOL; * SI FLAGRELA; NNN1 = NBNO MESHCOUI; REPETER LAB100 NNN1; I100 = &LAB100; MESHINF2 = CHAN POI1 MESHINF; MESHSUP2 = CHAN POI1 MESHSUP; MESHCOU2 = CHAN POI1 MESHCOUI; PSUPJ = MESHINF2 POIN I100; PINFJ = MESHSUP2 POIN I100; PCOQJ = MESHCOU2 POIN I100; BLCOQJ = RELA CORI DEPL ROTA PCOQJ (PSUPJ ET PINFJ); SI (EGA (TYPE BLCOQ3D) MOT); BLCOQ3D = BLCOQJ; SINON; BLCOQ3D = BLCOQ3D ET BLCOQJ; FINSI; FIN LAB100; FINSI; * SI (I1 EGA 1); TAB1. 'MODELE' . 'TOTAL' = MODCOUI; TAB1. 'MATERIAU' . 'TOTAL' = MATCOUI; * TAB1. 'NORMALE' . 'TOTAL' = VVJP; TAB1. 'MAILLAGE_FIBRE_MOYENNE' . 'TOTAL' = MESHMOY; TAB1. 'MAILLAGE_FIBRE_INFERIEURE' . 'TOTAL' = MESHINF; TAB1. 'MAILLAGE_FIBRE_SUPERIEURE' . 'TOTAL' = MESHSUP; TAB1. 'MAILLAGE_VOLUMIQUE'. 'TOTAL' = MESHVOL; SINON; TAB1. 'MODELE' . 'TOTAL' = TAB1. 'MODELE' . 'TOTAL' et MODCOUI; TAB1. 'MATERIAU' . 'TOTAL' = TAB1. 'MATERIAU' . 'TOTAL' et MATCOUI; * TAB1. 'NORMALE' . 'TOTAL' = * TAB1. 'NORMALE' . 'TOTAL' et VVJP; TAB1. 'MAILLAGE_FIBRE_MOYENNE' . 'TOTAL' = TAB1. 'MAILLAGE_FIBRE_MOYENNE' . 'TOTAL' et MESHMOY; TAB1. 'MAILLAGE_FIBRE_INFERIEURE' . 'TOTAL' = TAB1. 'MAILLAGE_FIBRE_INFERIEURE' . 'TOTAL' et MESHSUP; TAB1. 'MAILLAGE_FIBRE_SUPERIEURE' . 'TOTAL' = TAB1. 'MAILLAGE_FIBRE_SUPERIEURE' . 'TOTAL' et MESHINF; TAB1. 'MAILLAGE_VOLUMIQUE'. 'TOTAL' = TAB1. 'MAILLAGE_VOLUMIQUE'. 'TOTAL' et MESHVOL; FINSI; * FINSI; * * Transport des contraintes * SI FLAGCONT; MESHORI = (EXTR (TAB1 . 'MODELE' . I1) MAILLAGE) ; MODCOUI = TAB1 . 'MODELE' . I1; MATCOUI = TAB1 . 'MATERIAU' . I1; REPETER LAB21 NCONT; i21 = (INDEX (TAB1.'CONTRAINTES')). &LAB21; CONJ = REDU ((TAB1.'CONTRAINTES'). i21) MODCOUI; CONJM = CALP CONJ MODCOUI MATCOUI MOYE; CONJS = CALP CONJ MODCOUI MATCOUI SUPE; CONJI = CALP CONJ MODCOUI MATCOUI INFE; CONJMB = CHAN CHPO CONJM MODCOUI; CONJSB = CHAN CHPO CONJS MODCOUI; CONJIB = CHAN CHPO CONJI MODCOUI; * CONJM3D = DEDU CONJMB TRAN MESHORI (TAB1. 'MAILLAGE_FIBRE_MOYENNE' . I1); TAB1. 'CONTRAINTES_FIBRE_MOYENNE' . i21 . I1 = CONJM3D; SI (I1 EGA 1); TAB1. 'CONTRAINTES_FIBRE_MOYENNE' . i21 . 'TOTAL' = CONJM3D; SINON; TAB1. 'CONTRAINTES_FIBRE_MOYENNE' . i21 . 'TOTAL' = (TAB1. 'CONTRAINTES_FIBRE_MOYENNE' . i21 . 'TOTAL') ET CONJM3D; FINSI; CONJS3D = DEDU CONJSB TRAN MESHORI (TAB1. 'MAILLAGE_FIBRE_SUPERIEURE' . I1); TAB1. 'CONTRAINTES_FIBRE_SUPERIEURE' . i21 . I1 = CONJS3D; SI (I1 EGA 1); TAB1. 'CONTRAINTES_FIBRE_SUPERIEURE' . i21 . 'TOTAL' = CONJS3D; SINON; TAB1. 'CONTRAINTES_FIBRE_SUPERIEURE' . i21 . 'TOTAL' = (TAB1. 'CONTRAINTES_FIBRE_SUPERIEURE' . i21 . 'TOTAL') ET CONJS3D; FINSI; CONJI3D = DEDU CONJIB TRAN MESHORI (TAB1. 'MAILLAGE_FIBRE_INFERIEURE' . I1); TAB1. 'CONTRAINTES_FIBRE_INFERIEURE' . i21 . I1 = CONJi3D; SI (I1 EGA 1); TAB1. 'CONTRAINTES_FIBRE_INFERIEURE' . i21 . 'TOTAL' = CONJi3D; SINON; TAB1. 'CONTRAINTES_FIBRE_INFERIEURE' . i21 . 'TOTAL' = (TAB1. 'CONTRAINTES_FIBRE_INFERIEURE' . i21 . 'TOTAL') ET CONJI3D; FINSI; * TAB1. 'CONTRAINTES_VOLUMIQUE' . i21 . I1 = CONJS3D ET CONJI3D; SI (I1 EGA 1); TAB1. 'CONTRAINTES_VOLUMIQUE' . i21 . 'TOTAL' = CONJS3D ET CONJI3D; SINON; TAB1. 'CONTRAINTES_VOLUMIQUE' . i21. 'TOTAL' = (TAB1. 'CONTRAINTES_VOLUMIQUE' . i21 . 'TOTAL') ET CONJS3D ET CONJI3D; FINSI; FIN LAB21; FINSI; * * * Transport des variables internes * SI FLAGVARI; MESHORI = (EXTR (TAB1 . 'MODELE' . I1) MAILLAGE) ; MODCOUI = TAB1 . 'MODELE' . I1; MATCOUI = TAB1 . 'MATERIAU' . I1; REPETER LAB22 NVARI; i22 = (INDEX (TAB1.'VARIABLES_INTERNES')). &LAB22; VARJ = REDU ((TAB1.'VARIABLES_INTERNES'). i22) MODCOUI; VARJB = CHAN CHPO VARJ MODCOUI; VARJ3D = DEDU VARJB TRAN MESHORI (TAB1. 'MAILLAGE_FIBRE_MOYENNE' . I1); TAB1. 'VARI_FIBRE_MOYENNE' . i22 . I1 = VARJ3D; SI (I1 EGA 1); TAB1. 'VARI_FIBRE_MOYENNE' . i22 . 'TOTAL' = VARJ3D; SINON; TAB1. 'VARI_FIBRE_MOYENNE' . i22 . 'TOTAL' = (TAB1. 'VARI_FIBRE_MOYENNE' . i22 . 'TOTAL') ET VARJ3D; FINSI; FIN LAB22; FINSI; * * Calcul des deformees sur le 3D * SI FLAGDEFO; * VECOP = TAB1. 'NORMALE' . I1; MESHORI = (EXTR (TAB1 . 'MODELE' . I1) MAILLAGE) ; MODCOUI = TAB1 . 'MODELE' . I1; MATCOUI = TAB1 . 'MATERIAU' . I1; EPAP = CHAN (EXCO MATCOUI EPAI SCAL) CHPO MODCOUI; SI (EXISTE MATCOUI 'EXCE'); EXCP = CHAN (EXCO MATCOUI 'EXCE' SCAL) CHPO MODCOUI; SINON; EXCP = 0.*EPAP; FINSI; VECOPM= (DEDU (EXCP* VECOP) TRAN MESHORI (TAB1. 'MAILLAGE_FIBRE_MOYENNE' . I1)); VECOPI= (DEDU ((excp - (0.5*epap))*VECOP) TRAN MESHORI (TAB1. 'MAILLAGE_FIBRE_INFERIEURE' . I1)); VECOPS= (DEDU ((excp + (0.5*epap))*VECOP) TRAN MESHORI (TAB1. 'MAILLAGE_FIBRE_SUPERIEURE' . I1)); * REPETER LAB2 NDEFO; i2 = (INDEX (TAB1.'DEPLACEMENTS')). &LAB2; DEPJ = REDU ((TAB1.'DEPLACEMENTS'). i2) MESHORI; * DEPT = EXCO DEPJ (mots UX UY UZ) (mots UX UY UZ) NATURE DIFFUS; DEPR = EXCO DEPJ (mots RX RY RZ) (mots RX RY RZ) NATURE DIFFUS; * DEPTM DEPRM = DEDU DEPT DEPR TRAN MESHORI (TAB1. 'MAILLAGE_FIBRE_MOYENNE' . I1); DEPMOY = DEPTM + ((EXCO DEPRM RY SCAL)*(EXCO VECOPM UZ UX)) - ((EXCO DEPRM RZ SCAL)*(EXCO VECOPM UY UX)) + ((EXCO DEPRM RZ SCAL)*(EXCO VECOPM UX UY)) - ((EXCO DEPRM RX SCAL)*(EXCO VECOPM UZ UY)); DEPMOY = DEPMOY + ((EXCO DEPRM RX SCAL)*(EXCO VECOPM UY UZ)) - ((EXCO DEPRM RY SCAL)*(EXCO VECOPM UX UZ)); DEPMOY = CHAN ATTRIBUT DEPMOY NATURE DIFFUS; TAB1. 'DEPLACEMENTS_FIBRE_MOYENNE' . i2 . I1 = DEPMOY; SI (I1 EGA 1); TAB1. 'DEPLACEMENTS_FIBRE_MOYENNE' . i2 . 'TOTAL' = DEPMOY; SINON; TAB1. 'DEPLACEMENTS_FIBRE_MOYENNE' . i2. 'TOTAL' = (TAB1. 'DEPLACEMENTS_FIBRE_MOYENNE' . i2 . 'TOTAL') ET DEPMOY; FINSI; * * DEPTI DEPRI = DEDU DEPT DEPR TRAN MESHORI (TAB1. 'MAILLAGE_FIBRE_INFERIEURE' . I1); DEPINF = DEPTI + ((EXCO DEPRI RY SCAL)*(EXCO VECOPI UZ UX)) - ((EXCO DEPRI RZ SCAL)*(EXCO VECOPI UY UX)) + ((EXCO DEPRI RZ SCAL)*(EXCO VECOPI UX UY)) - ((EXCO DEPRI RX SCAL)*(EXCO VECOPI UZ UY)); DEPINF = DEPINF + ((EXCO DEPRI RX SCAL)*(EXCO VECOPI UY UZ)) - ((EXCO DEPRI RY SCAL)*(EXCO VECOPI UX UZ)); DEPINF = CHAN ATTRIBUT DEPINF NATURE DIFFUS; TAB1. 'DEPLACEMENTS_FIBRE_INFERIEURE' . i2 . I1 = DEPINF; SI (I1 EGA 1); TAB1. 'DEPLACEMENTS_FIBRE_INFERIEURE' . i2 . 'TOTAL' = DEPINF; SINON; TAB1. 'DEPLACEMENTS_FIBRE_INFERIEURE' . i2. 'TOTAL' = (TAB1. 'DEPLACEMENTS_FIBRE_INFERIEURE' . i2 . 'TOTAL') ET DEPINF; FINSI; * * DEPTS DEPRS = DEDU DEPT DEPR TRAN MESHORI (TAB1. 'MAILLAGE_FIBRE_SUPERIEURE' . I1); DEPSUP = DEPTS + ((EXCO DEPRS RY SCAL)*(EXCO VECOPS UZ UX)) - ((EXCO DEPRS RZ SCAL)*(EXCO VECOPS UY UX)) + ((EXCO DEPRS RZ SCAL)*(EXCO VECOPS UX UY)) - ((EXCO DEPRS RX SCAL)*(EXCO VECOPS UZ UY)); DEPSUP = DEPSUP + ((EXCO DEPRS RX SCAL)*(EXCO VECOPS UY UZ)) - ((EXCO DEPRS RY SCAL)*(EXCO VECOPS UX UZ)); DEPSUP = CHAN ATTRIBUT DEPSUP NATURE DIFFUS; TAB1. 'DEPLACEMENTS_FIBRE_SUPERIEURE' . i2 . I1 = DEPSUP; SI (I1 EGA 1); TAB1. 'DEPLACEMENTS_FIBRE_SUPERIEURE' . i2 . 'TOTAL' = DEPSUP; SINON; TAB1. 'DEPLACEMENTS_FIBRE_SUPERIEURE' . i2. 'TOTAL' = (TAB1. 'DEPLACEMENTS_FIBRE_SUPERIEURE' . i2 . 'TOTAL') ET DEPSUP; FINSI; * TAB1. 'DEPLACEMENTS_VOLUMIQUE' . i2 . I1 = DEPSUP ET DEPINF; SI (I1 EGA 1); TAB1. 'DEPLACEMENTS_VOLUMIQUE' . i2 . 'TOTAL' = DEPSUP ET DEPINF; SINON; TAB1. 'DEPLACEMENTS_VOLUMIQUE' . i2. 'TOTAL' = (TAB1. 'DEPLACEMENTS_VOLUMIQUE' . i2 . 'TOTAL') ET DEPSUP ET DEPINF; FINSI; * FIN LAB2; * FINSI; * * Fin de la boucle sur la sous-zone * FIN LAB1; * MESH3D = TAB1. 'MAILLAGE_VOLUMIQUE'. 'TOTAL'; * SI FLAGRELA; TAB1.'RELATION_3D' = BLCOQ3D; FINSI; * 'FINPROC' MESH3D; *