cakizd
C CAKIZD SOURCE GOUNAND 23/07/31 21:15:03 11713 SUBROUTINE CAKIZD C************************************************************************ C OBJET : C Cet operateur construit une table KIZD C SYNTAXE C kdia RV ; C************************************************************************ C C Aout 96 : correction d'erreurs pour le calcul de la matrice masse C diagonale dans le cas d'un CHPO centre sans C.L C (testé uniquement dans ce cas : P.Galon) C C 26/10/98 : lecture d'une table domaine OU d'un objet modèle C************************************************************************ IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) -INC SMCOORD -INC PPARAM -INC CCOPTIO -INC CCREEL -INC SMTABLE POINTEUR KIZD.MTABLE C -INC SMCHPOI POINTEUR IPHI.MPOVAL POINTEUR IZD.MCHPOI ,IZD0.MCHPOI POINTEUR IZDD.MPOVAL,IZDD0.MPOVAL C -INC SMLMOTS POINTEUR MINCOG.MLMOTS C -INC SMELEME POINTEUR MELEMI.MELEME C -INC SMLENTI POINTEUR IZIPAD.MLENTI C PARAMETER (NTB=1) DIMENSION KTAB(NTB) CHARACTER*8 LTAB(NTB) DATA LTAB/'EQEX '/ C CHARACTER*8 TYPE,TYP0,TYPC CHARACTER*(LOCOMP) NOC,NOMCP(9),NOMI,NOM,NOMZ C NTO=1 Cne sert jamais IAXI=0 Cne sert jamais IF(IFOMOD.EQ.0)IAXI=2 C C ---- Lecture de la Table "RV" C ----------------------- IF(IRET.EQ.0)RETURN C MTABLE=KTAB(1) SEGACT MTABLE C C ----- Lecture de la Table DOMINC C -------------------------- TYPE=' ' IF(TYPE.NE.'TABLE')THEN MOTERR(1:40)='On ne trouve pas DOMINC ds la Table EQEX' RETURN ENDIF C C ----- Lecture de la Table INCO C ------------------------ TYPE=' ' IF(TYPE.NE.'TABLE')THEN MOTERR(1:40)='On ne trouve pas INCO ds la Table EQEX ' RETURN ENDIF C C ----- Lecture de la liste des inconnues C --------------------------------- TYPE=' ' IF(TYPE.NE.'LISTMOTS')THEN MOTERR(1:40)='On ne trouve pas LISTINCO dans EQEX ' RETURN ENDIF C SEGACT MLMOT2 C C ----- Lecture du CHPO des conditions limites (facultatif) C -------------------------------------- TYPE=' ' IF(TYPE.NE.'CHPOINT')THEN KCLIM=0 ELSE KCLIM=1 SEGACT MCHPOI NSOUPO=IPCHP(/1) ENDIF C C ----- Creation de la Table KIZD C ------------------------- C C ----- On Boucle sur la liste des inconnues C ==================================== C C WRITE(IOIMP,*)' NBINC1=',nbinc1 SEGACT,MCOORD DO 1 L=1,NBINC1 C WRITE(IOIMP,*)' CAKIZD : NOMI=',nomi C C ----- lecture de la table domaine ou de l'objet modèle N-Stokes C --------------------------------------------------------- TYPE=' ' * WRITE(IOIMP,*)' KDIA nomi,type=',nomi,type IF(TYPE.NE.'TABLE')THEN IF (TYPE.EQ.'MMODEL') THEN MTABD=MTABD2 ELSE MOTERR(1:40)='On ne trouve pas la Table Domaine ' RETURN ENDIF ENDIF C C ----- la table sous table INCO contient elle l'inconnue C ------------------------------------------------- TYPE=' ' * WRITE(IOIMP,*)' KDIA nomi,type=',nomi,type IF(TYPE.NE.'CHPOINT ')THEN MOTERR(1:40)='L inconnue n est pas dans la Table INCO ' MOTERR(1:40)='ou l inconnue n est pas un Champoint ' GO TO 1 ELSE ENDIF C NPT=IPHI.VPOCHA(/1) NC=IPHI.VPOCHA(/2) * WRITE(IOIMP,*)' NPT,NC,TYPC=',NPT,NC,TYPC IF(TYPC.EQ.'SOMMET')THEN C C ----- On cree une diagonale 'SOMMET' C ----------------------------- SEGACT,MCOORD CALL CADGSI SEGDES,MCOORD ELSEIF(TYPC.EQ.'CENTRE')THEN C C ----- On cree une diagonale 'CENTRE' C ----------------------------- C IF(IZD0.EQ.0)RETURN ELSE MOTERR(1:40)='CHPO CENTRE ou SOMMET pour l inconnue ' RETURN ENDIF C C ----- Creation des CHPO de la Table KIZD C ---------------------------------- TYPE=' ' C IF(TYPE.NE.'CHPOINT ')THEN IF(NC.EQ.1)THEN NOMCP(1)=NOMI ELSE DO 15 I=1,NC WRITE(NOMCP(I),FMT='(I1)')I NOMCP(I)=NOMCP(I)(1:1)//NOMI(1:LOCOMP-1) 15 CONTINUE ENDIF C DO 2 I=1,NC 2 CONTINUE C ELSE ENDIF C C C ----- Boucle sur les composantes du Champoint C ======================================= DO 3 I=1,NC IF(NC.EQ.1)THEN NOC=NOMI ELSE WRITE(NOC,FMT='(I1)')I NOC=NOC(1:1)//NOMI(1:LOCOMP-1) ENDIF C C ---- Si pas de condition limite on ne fait rien de plus C -------------------------------------------------- IF(KCLIM.EQ.0)GO TO 3 C Grande valeur de penalisation mais pas trop grande car sinon on C peut depasser la valeur max. XBIG=SQRT(XGRAND) DO 10111 NSP=1,NSOUPO C MSOUPO=IPCHP(NSP) SEGACT MSOUPO NCOMP=NOCOMP(/2) C DO 10112 NCP=1,NCOMP IF(NOCOMP(NCP).EQ.NOC)THEN MELEMI=IGEOC SEGACT MELEMI IF(IRET.NE.0)THEN MOTERR(1:40) $ ='C.Limites non incluses dans le domaine ' RETURN ENDIF CALL RSETX1 $ ,IZIPAD.LECT) ENDIF 10112 CONTINUE C 10111 CONTINUE C 3 CONTINUE C SEGSUP IZIPAD 1 CONTINUE SEGDES,MCOORD C C ---- FIN DE LA BOUCLE SUR LES INCONNUES C ---------------------------------- SEGDES KIZD,INCO SEGDES MTABLE END
© Cast3M 2003 - Tous droits réservés.
Mentions légales