melext
C MELEXT SOURCE FANDEUR 16/02/12 21:15:08 8823 C----------------------------------------------------------------------- C EXTension/Accroissement des dimensions d'un MELVAL C C ich1 segment de type MELVAL (ACTIF en MODification en E/S) C segment modifie par ajustement si necessaire C nbpi2 nombre de points supports cible C nel2 nombre d'elements cible C C La modification du nombre de points support (resp. d'elements) n'a C lieu que si ce nombre est superieur a celui du melval fourni C C L'operation inverse de REDuction/compactage du MELVAL est effectuee C dans le sous-programme COMRED (comred.eso). C----------------------------------------------------------------------- IMPLICIT REAL*8(A-H,O-Z) IMPLICIT INTEGER (I-N) -INC PPARAM -INC CCOPTIO -INC SMCHAML melva1 = ich1 C* SEGACT,melva1*MOD <- suppose ACTIF en MODification en Entree * 1---------------------------1 * 1. MELVAL a valeurs reelles : * 1---------------------------1 nbpi1 = melva1.velche(/1) nbel1 = melva1.velche(/2) C* if (nbel1.ge.1) then <- Ce test devrait suffire... IF (nbel1.GT.0 .OR. nbpi1.GT.0) THEN n2ptel = 0 n2el = 0 * --- * 1.1 Le champ final aura plus d'elements qu'initialement : * --- IF (nbel1.LT.nbel2) THEN n1el = nbel2 * - - - * 1.1.1 Augmentation du nombre de points d'integration (1 a nbpi2) * - - - IF (nbpi1.EQ.1 .AND. nbpi1.LT.nbpi2) then n1ptel = nbpi2 SEGADJ,melva1 * Cas d'un champ uniforme : IF (nbel1.EQ.1) THEN vale1 = melva1.velche(1,1) IF (vale1.NE.0.D0) THEN DO iel = 1, nbel1 DO inn = 1, n1ptel melva1.velche(inn,iel) = vale1 ENDDO ENDDO ENDIF * Cas d'un champ constant par element ELSE DO iel = 1, nbel1 vale1 = melva1.velche(1,iel) IF (vale1.NE.0.D0) THEN DO inn = 2, n1ptel melva1.velche(inn,iel) = vale1 ENDDO ENDIF ENDDO ENDIF * - - - * 1.1.2 Augmentation du nombre d'elements a meme nombre de points d'integration * - - - ELSE IF (nbpi1.EQ.nbpi2) THEN n1ptel = nbpi2 SEGADJ,melva1 * Cas d'un champ uniforme : IF (nbel1.EQ.1 .AND. nbpi1.EQ.1) THEN vale1 = melva1.velche(1,1) IF (vale1.NE.0.D0) THEN DO iel = 2, n1el melva1.velche(1,iel) = vale1 ENDDO ENDIF ENDIF * - - - * 1.1.3 On ne diminue pas le nombre de points d'integration (qui est > 1) * - - - ELSE n1ptel = nbpi1 SEGADJ,melva1 ENDIF * --- * 1.2 On conserve le meme nombre d'elements du champ : * --- ELSE n1el = nbel1 * - - - * 1.2.1 Augmentation du nombre de points d'integration (1 a nbpi2) * - - - IF (nbpi1.EQ.1 .AND. nbpi1.LT.nbpi2) THEN n1ptel = nbpi2 SEGADJ,melva1 DO iel = 1, nbel1 vale1 = melva1.velche(1,iel) IF (vale1.NE.0.D0) THEN DO inn = 2, n1ptel melva1.velche(inn,iel) = vale1 ENDDO ENDIF ENDDO ELSE * - - - * 1.2.2 Pas de modification du nombre de points d'integration * - - - n1ptel = nbpi1 ENDIF ENDIF * 1---------------------------- ENDIF * 1---------------------------- * 2------------------------------------2 * 2. MELVAL a valeurs de type pointeur : * 2------------------------------------2 nbpi1 = melva1.ielche(/1) nbel1 = melva1.ielche(/2) C* if (nbel1.ge.1) then <- Ce test devrait suffire... IF (nbel1.GT.0 .OR. nbpi1.GT.0) THEN n1ptel = 0 n1el = 0 * --- * 2.1 Le champ final aura plus d'elements qu'initialement : * --- IF (nbel1.LT.nbel2) THEN n2el = nbel2 * - - - * 2.1.1 Augmentation du nombre de points d'integration (1 a nbpi2) * - - - IF (nbpi1.EQ.1 .AND. nbpi1.LT.nbpi2) then n2ptel = nbpi2 SEGADJ,melva1 * Cas d'un champ uniforme : IF (nbel1.EQ.1) THEN jale1 = melva1.ielche(1,1) IF (jale1.NE.0) THEN DO iel = 1, nbel1 DO inn = 1, n2ptel melva1.ielche(inn,iel) = jale1 ENDDO ENDDO ENDIF * Cas d'un champ constant par element ELSE DO iel = 1, nbel1 jale1 = melva1.ielche(1,iel) IF (jale1.NE.0) THEN DO inn = 2, n2ptel melva1.ielche(inn,iel) = jale1 ENDDO ENDIF ENDDO ENDIF * - - - * 2.1.2 Augmentation du nombre d'elements a meme nombre de points d'integration * - - - ELSE IF (nbpi1.EQ.nbpi2) THEN n2ptel = nbpi2 SEGADJ,melva1 * Cas d'un champ uniforme : IF (nbel1.EQ.1 .AND. nbpi1.EQ.1) THEN jale1 = melva1.ielche(1,1) IF (jale1.NE.0) THEN DO iel = 2, n2el melva1.ielche(1,iel) = jale1 ENDDO ENDIF ENDIF * - - - * 1.1.3 On ne diminue pas le nombre de points d'integration (qui est > 1) * - - - ELSE n2ptel = nbpi1 SEGADJ,melva1 ENDIF * --- * 2.2 On conserve le meme nombre d'elements du champ : * --- ELSE n2el = nbel1 * - - - * 2.2.1 Augmentation du nombre de points d'integration (1 a nbpi2) * - - - IF (nbpi1.EQ.1 .AND. nbpi1.LT.nbpi2) THEN n2ptel = nbpi2 SEGADJ,melva1 DO iel = 1, nbel1 jale1 = melva1.ielche(1,iel) IF (jale1.NE.0) THEN DO inn = 2, n1ptel melva1.ielche(inn,iel) = jale1 ENDDO ENDIF ENDDO ELSE * - - - * 2.2.2 Pas de modification du nombre de points d'integration * - - - n2ptel = nbpi1 ENDIF ENDIF * 2------------------------------------- ENDIF * 2------------------------------------- ich1 = melva1 C** On reactive le segment pour enlever le statut *mod suite au segadj C* SEGACT,melva1 <- suppose ACTIF en MODification en SORTIE RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales