moca
C MOCA SOURCE SP204843 26/02/16 21:15:07 12477 subroutine moca IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC CCREEL -INC SMLREEL -INC SMLOBJE pointeur mlree4.mlreel, mlree5.mlreel character*4 mot(1) LOGICAL LOK1 segment itra integer ipoi(m),npara,ibon(m) endsegment segment itrav real*8 a(n,n),b(n),c(n),bb(n,n) integer is(n) endsegment data MOT /'POID'/ * lecture de la valeur de depart des paramatres mlreel=mlpar segact mlreel * lecture de la valeur theorique if(ierr.ne.0) return segact mlreel * lecture de la valeur de depart if(ierr.ne.0) return segact mlree1 return endif * lecture des derivees par rapport au n parametres * Cas de la donnee d'un LISTOBJE IF (IRET.NE.0) THEN MLOBJE = ILOBJ1 SEGACT,MLOBJE IF (TYPOBJ.NE.'LISTREEL') THEN MOTERR(1:8)='LISTREEL' RETURN ENDIF NOBJ1 = LISOBJ(/1) M = NOBJ1 SEGINI,ITRA NPARA = 0 IF (NOBJ1.NE.NPARR) THEN INTERR = NPARR RETURN ENDIF ZPREC1 = 10.*XZPREC DO IO1=1,NOBJ1 MLREE2 = LISOBJ(IO1) SEGACT,MLREE2 INTERR = NPMES RETURN ENDIF LOK1 = .FALSE. LOK1 = XVAL1.GT.((1.-ZPREC1)*XVAL1) IF (LOK1) GOTO 30 ENDDO 30 CONTINUE IF (LOK1) THEN IBON(IO1) = 1 NPARA = NPARA+1 IPOI(NPARA) = MLREE2 ENDIF ENDDO ELSE * Cas de la donnee de plusieurs LISTREEL m=100 segini itra NPARA = 0 * write(ioimp,*) ' nb de parametres ',nparr do 1 i=1,nparr if(ierr.ne.0) then write(ioimp,*) ' erreur 1' return endif segact mlree2 enddo go to 1 10 continue ibon(i)=1 return endif npara=npara+1 ipoi(npara)=mlree2 1 continue ENDIF if (npara.eq.0) then write(ioimp,*) ' erreur 3 npara ',npara return endif * lecture de l'option POIDS if( itrou.eq.0) then jg=npmes isup=1 segini mlree5 do io=1,npmes enddo else * lecture du poids if(ierr.ne.0)return segact mlree5 isup=0 endif n = npara segini itrav do 3 i=1,npmes do 4 j=1,npara mlree3=ipoi(j) do 5 k=1,npara mlree4=ipoi(k) a(j,k)=a(j,k)+x1*xk 5 continue 4 continue 3 continue * ** appel a l'inversion * * write(6,*) ' avant inversion' * write(6,*) ( a(1,it),it=1,npara) * write(6,*) ( a(2,it),it=1,npara) * write(6,*) ( a(3,it),it=1,npara) diamax=0. do io=1,npara if( abs(a(io,io)).gt.diamax) diamax=abs(a(io,io)) enddo eps = diamax / 1.e10 if(icrit.ne.0) then write(ioimp,*) '***** Inversion systeme impossible' return endif * write(6,*) ' apres inversion' * write(6,*) ( a(1,it),it=1,npara) * write(6,*) ( a(2,it),it=1,npara) * write(6,*) ( a(3,it),it=1,npara) * write(6,*) ' b ' * write(6,*) ( b(it),it=1,npara) if(isup.eq.1) then segsup mlree5 else segdes mlree5 endif jg=npara segini mlree5 do 50 io=1,npara do 6 iu=1,npara 6 continue 50 continue * write(6,*) 'valeur trouvées dans moca' * write(6,*) (mlree5.prog(io),io=1,npara) segdes mlreel,mlree1 do io=1,npara mlree3=ipoi(io) segdes mlree3 enddo jg=nparr segini mlreel ia=1 mlree2=mlpar do ib=1,nparr if(ibon(ib).eq.1)then ia=ia+1 else endif enddo segdes mlreel,mlree2 segsup mlree5 segsup itrav,itra return end
© Cast3M 2003 - Tous droits réservés.
Mentions légales