limodl
C LIMODL SOURCE CB215821 24/04/12 21:16:35 11897 & ,NBANC) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) *--------------------------------------------------------------------* * * * LECTURE D'UN NOUVEAU MODELE SUR LE FICHIER IORES. * * * * Param}tres: * * * * IORES Num{ro du fichier de sortie * * ITLACC Pile contenant les nouveaux MODELEs * * IMAX1 Nombre de MODELEs dans la pile * * IFORM Si sauvegarde en format ou non * * * * APPEL{ PAR: LIPIL * * * * Auteur, date de cr{ation: * * * * Denis ROBERT-MOUGIN, le 5 juillet 1989. * * * *--------------------------------------------------------------------* -INC PPARAM -INC CCOPTIO -INC SMMODEL -INC SMLMOTS -INC SMELEME SEGMENT,ITLACC INTEGER ITLAC(0) ENDSEGMENT SEGMENT,MTABE1 INTEGER ITABE1(NM1) ENDSEGMENT SEGMENT,MTABE2 CHARACTER*(8) ITABE2(NM2) ENDSEGMENT SEGMENT,MTABE3 CHARACTER*(8) ITABE3(NM3) ENDSEGMENT SEGMENT,MTABE4 INTEGER ITABE4(NM4) ENDSEGMENT SEGMENT,MTABE5 CHARACTER*(8) ITABE5(NM5) ENDSEGMENT SEGMENT,MTABE6 CHARACTER*(8) ITABE6(NM6) ENDSEGMENT SEGMENT MTAB6B CHARACTER*(4) ITAB6B(NM6) ENDSEGMENT SEGMENT,MTABE7 CHARACTER*(8) ITABE7(NM7) ENDSEGMENT SEGMENT,MTABE8 Integer ITABE8(NM7) ENDSEGMENT SEGMENT MTABE9 Integer ITABE9(nm9) ENDSEGMENT * INTEGER IDAN(10) * maj modele externe (visco_externe ou utilisateur) CHARACTER*16 MOMODL(10) * * write(6,*) ' niveau limodl ', niveau N45=5 IF(NIVEAU.GE.12) N45=6 NIDAN=4 if( niveau.ge.13) nidan = 7 if(niveau.ge.15) nidan=10 IRETOU=0 MN3=0 NM7=0 * * Boucle sur les MODELEs contenus dans la pile: * DO 10 IEL=1,IMAX1 DO 110 INI=1,NIDAN IDAN(INI) = 0 110 CONTINUE IF(IRETOU.NE.0) RETURN N1 =IDAN(1) NM2 =IDAN(2) NM3 =IDAN(3) NM4 =IDAN(4) idecmo=2 NM5 = N1 * idecmo if(niveau.ge.13) then nm5=idan(5) idecmo=0 if (n1.gt.0) idecmo=nm5/n1 n45=idan(6) nm6=idan(7) segini mtabe6 segini mtab6b if(niveau.ge.15) then nm7=idan(8) segini mtabe7,mtabe8 endif endif * SEGINI MMODEL NM1 = N1 * N45 nm9=n1*16 segini,mtabe9 SEGINI,MTABE1 SEGINI,MTABE2 SEGINI,MTABE3 * IF(NIVEAU.GE.4) THEN SEGINI,MTABE4 SEGINI,MTABE5 * ENDIF * * write(6,*) ' itabe1 ' * write(6,fmt='(10i5)' ) (itabe1(iau),iau=1,nm1) IF(IRETOU.NE.0) RETURN * IF(NIVEAU.GE.4) THEN * write(6,*) 'nm1 nm2 nm3 nm4 nm5 nm6 nm7 ' * write(6,*) nm1, nm2 ,nm3, nm4, nm5, nm6, nm7 IF(IRETOU.NE.0) RETURN * ENDIF IF(IRETOU.NE.0) RETURN IF(IRETOU.NE.0) RETURN * IF(NIVEAU.GE.4) THEN IF(IRETOU.NE.0) RETURN * ENDIF if(niveau.ge.14) then IF(IRETOU.NE.0) RETURN ENDIF if(niveau.eq.13) then if(iretou.ne.0) return endif if(niveau.ge.15.and.nm7.ne.0) then * write(6,*) 'nm7 ' , nm7 * write(6,*) 'itabe7 ',( itabe7(iou),iou=1,nm7) if(iretou.ne.0) return * write(6,*)'itabe8 ', ( itabe8(iou),iou=1,nm7) if(iretou.ne.0) return endif * BOUCLES SUR LES ZONES {L{MENTAIRES DU MODELE: * JFOR= 0 * write(6,*) ' N45 ' , n45 JMAT= 0 JINF= 0 JNOMID=0 nparmo=0 jobj=0 nobmod=0 jderiv=0 DO 20 ISOUEL=1,N1 ISOU = N45 * ( ISOUEL - 1 ) NFOR = ITABE1(ISOU+3) NMAT = ITABE1(ISOU+4) if(niveau.ge.13) nparmo= itabe1(isou+10) if(niveau.ge.15) nobmod = itabe1(isou+11) if(n45.ge.37) nobmod=itabe1(isou+37) if(n45.ge.38) then jderiv=itabe1(isou+38) else c jderiv=mepsil cbp,2020-12-10 : abandon de MEPSIL (CCOPTIO) et IDERIV (MMODEL) jderiv=0 endif IF(NIVEAU.GE.4) MN33 = ITABE1(ISOU+5) mn3=mn33 if(n45.lt.28) mn3=7 * * write(6,*) ' nparmo nm3 ', nparmo ,mn3 SEGINI IMODEL CONMOD=' ' KMODEL(ISOUEL) = IMODEL IMAMOD = ITABE1(ISOU+1) NEFMOD = ITABE1(ISOU+2) IF (NIVEAU.GE.20) THEN IPDPGE = ITABE1(ISOU+6) ELSE * IF (NIVEAU.LE.19) THEN IPDPGE = 0 IF (NIVEAU.GE.12) THEN ii_z = ITABE1(ISOU+6) IF (ii_z.GT.0) THEN IPT1 = ii_z + NBANC C On verifie s'il n'a pas deja ete preconditionne. segdes,ipt1 IPDPGE = IPT1 ENDIF ENDIF * ENDIF ENDIF ideriv=jderiv * IF(NIVEAU.GE.4) THEN CONMOD(1:8) = ITABE5(idecmo*(ISOUEL-1)+1) CONMOD(9:16)= ITABE5(idecmo*(ISOUEL-1)+2) if(niveau.ge.13) then if(n45.le.28) then conmod(17:24)= ITABE5(idecmo*(ISOUEL-1)+3) llmova= ITABE1(ISOU+7) llmoma= ITABE1(ISOU+8) llfama= ITABE1(ISOU+9) * write(6,*)'llmova llmoma llfama',llmova,llmoma,llfama else conmod(17:24)= ITABE5(idecmo*(ISOUEL-1)+3) cmatee=ITABE5(idecmo*(ISOUEL-1)+4) imatee=itabe1(isou+7) inatuu=itabe1(isou+8) do iyu=1,16 infele(iyu)=itabe9( iyu+(isouel-1)*16) enddo endif endif * DO 30 IFOR=1,NFOR JFOR = JFOR + 1 FORMOD(IFOR)(1:8) = ITABE2(JFOR) JFOR = JFOR + 1 FORMOD(IFOR)(9:16) = ITABE2(JFOR) 30 CONTINUE * iplu=0 do ioy=1,nfor if(formod(ioy).eq.'CONVECTION ' ) then iplu=1 formod(ioy)='THERMIQUE' endif enddo DO 40 IMAT=1,NMAT JMAT = JMAT + 1 MATMOD(IMAT)(1:8) = ITABE3(JMAT) JMAT = JMAT + 1 MATMOD(IMAT)(9:16) = ITABE3(JMAT) 40 CONTINUE if(iplu.eq.1) then nmat=nmat+1 segadj imodel matmod(nmat)='CONVECTION ' endif * * IF(NIVEAU.GE.4) THEN DO 50 IMN3=1,MN33 JINF = JINF + 1 INFMOD(IMN3) = ITABE4(JINF) 50 CONTINUE * write(6,*) ' nm3infmod', mn3,(infmod(iou),iou=1,mn3) * ENDIF if ( niveau.ge.13) then if(n45.le.28) then lmotva=0 lmotma=0 lmotmf=0 lmotpa=0 jgn=4 jgm=llmova nbrobl=llmova nbrfac=0 if(nbrobl.ne.0) then segini mlmots lmotva=mlmots do inm6=1,nbrobl jnomid=jnomid+1 * write(6,*) ' jnomid1' , jnomid enddo endif nbrobl=llmoma nbrfac=llfama if(nbrobl.ne.0) then jgm=nbrobl segini mlmots lmotma=mlmots do inm6=1,nbrobl jnomid=jnomid+1 * write(6,*) ' jnomid2 ' , jnomid enddo endif if(nbrfac.ne.0) then jgm=nbrfac segini mlmots lmotmf=mlmots do inm6=1,nbrfac jnomid=jnomid+1 * write(6,*) ' jnomid3 ' , jnomid enddo endif if(nparmo.ne.0) then jgm=nparmo segini mlmots lmotpa=mlmots do inm6=1,nparmo jnomid=jnomid+1 enddo endif IF (FORMOD(1).NE.'NAVIER_STOKES'.AND.FORMOD(1).NE.'EULER') THEN $ lmotmf,lmotpa) ENDIF IF(FORMOD(1).EQ.'MECANIQUE'.or.formod(1).eq.'POREUX'.or. $ FORMOD(1).EQ.'DIFFUSION'.or.formod(1).eq.'ELECTROSTATIQUE'.or. $ formod(/2).eq.2) then ENDIF else do iou=1,14 nbrobl=itabe1(isou+7+2*iou) nbrfac=itabe1(isou+8+2*iou) if(nbrobl+nbrfac.ne.0) then segini nomid lnomid(iou)=nomid do iyto=1,nbrobl jnomid=jnomid+1 lesobl(iyto)=itabe6(jnomid) enddo do iyto=1,nbrfac jnomid=jnomid+1 lesfac(iyto)=itabe6(jnomid) enddo segdes nomid endif enddo endif endif if(niveau.ge.15) then * write(6,*) ' nobmod job' , nobmod,jobj do 15 ihy = 1, nobmod jobj=jobj+1 tymode(ihy)=itabe7(jobj) ivamod(ihy)=itabe8(jobj) 15 continue endif *Petite modification en cas de modele externe : if (formod(/2).eq.1) then if (formod(1).EQ.'MECANIQUE' .OR. & formod(1).EQ.'POREUX') then if (inatuu.ge.0) goto 200 iumat = 0 ivisc = 0 iviex = 0 do i = 1, nmat if (matmod(i).EQ.'NON_LINEAIRE') iumat = i if (matmod(i).EQ.'VISCO_EXTERNE') ivisc = i enddo if (iumat.ne.0) then if (matmod(iumat+1).ne.'UTILISATEUR') then write(ioimp,*) 'maj modele umat incorrect' return endif inatuu = -1 endif if (ivisc.ne.0) then if (inatuu.eq.-2) goto 200 c* mise a jour du modele if (iviex.eq.0) then write(ioimp,*) 'MAJ modele iviex incorrect' return endif inatuu = -2 nobmod = nobmod + 1 segadj,imodel tymode(nobmod+1)='IVIEX ' ivamod(nobmod+1)=iviex endif 200 continue endif endif *Petite verification en diffusion if (formod(1).eq.'DIFFUSION') then if (niveau.lt.17) then write(ioimp,*) 'Incompatibilite de niveau !' endif *gounand: au-dessus du niveau 18, les noms d'inconnues lnomdd et lnomdu * sont sauvegardes if (ierr.ne.0) then write(ioimp,*) 'Revoir votre mise en donnees !' endif endif * SEGDES IMODEL 20 CONTINUE * SEGSUP,MTABE1,MTABE2,MTABE3 IF(NIVEAU.GE.4) THEN SEGSUP,MTABE4,MTABE5 ENDIF if(niveau.ge.14)segsup mtabe6 if(niveau.ge.13) segsup mtab6b if(niveau.ge.15) segsup mtabe7,mtabe8 SEGDES MMODEL ITLAC(**) = MMODEL * 10 CONTINUE * RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales