C CUPMOD    SOURCE    CB215821  24/04/12    21:15:33     11897          
      subroutine cupmod(bu,bufPos,pModel)
C=======================================================================
C     COLlaborateur UnPAQuettage MODele
C     Lecture d'un modele dans le buffer d'envoi bu
C=======================================================================
      integer mn3,nlconmo,nfor,nmat,nObMod,ntyp,nbrobl,nbrfac,n1
      integer iMod,iInfo,iNomid
      integer bufPos
      integer lonBuf
      integer iObl,iFac
      integer lconmo

-INC PPARAM
-INC CCOPTIO
-INC SMMODEL
      segment BUFFER
         character ffer(lonBuf)
      endsegment
      pointeur pNomid.NOMID
      pointeur pModel.MMODEL
      pointeur modele.IMODEL
      pointeur bu.BUFFER

C      write(ioimp,*) 'Entre dans CUPMOD'
C      write(ioimp,*) 'Position du buffer',bufPos
      lonBuf=bu.ffer(/2)
      call mpiupI( n1,1,bu,bufPos)
      if(pModel.ne.0)then
         segact pModel*mod
         segadj pModel
      else
         segini pModel
      endif
      if(n1.ne.0) then
         do iMod=1,n1
C            write(ioimp,*) 'Modele elem',iMod,'sur',n1
         call mpiupI( mn3,1,bu,bufPos)
C            write(ioimp,*) 'Position du buffer',bufPos
         call mpiupI( nlconmo,1,bu,bufPos)
C            write(ioimp,*) 'Position du buffer',bufPos
         call mpiupI( nfor,1,bu,bufPos)
C            write(ioimp,*) 'Position du buffer',bufPos
         call mpiupI( nmat,1,bu,bufPos)
C            write(ioimp,*) 'Position du buffer',bufPos
         call mpiupI( ntyp,1,bu,bufPos)
C            write(ioimp,*) 'Position du buffer',bufPos
         call mpiupI( nObMod,1,bu,bufPos)
C            write(ioimp,*) 'Position du buffer',bufPos
C            write(ioimp,*) 'Taille du modele',mn3,nlconmo,nfor,nmat,ntyp,nObMod
         segini modele
         if (ntyp.gt.modele.lnomid(/1)) then
           write(ioimp,*) 'Incompatibilite ntyp taille lnomid'
           call erreur(5)
         endif
         pModel.kmodel(iMod)=modele
C            write(ioimp,*) 'ss modele', iMod, 'pointeur',modele
         call mpiupI( modele.imamod,1,bu,bufPos)
         call mpiupI( modele.nefmod,1,bu,bufPos)
         call mpiupI( modele.infmod(1),mn3,bu,bufPos)
         call mpiupC( modele.conmod,lconmo,bu,bufPos)
         call mpiupC( modele.cmatee,8,bu,bufPos)
         call mpiupC( modele.formod,16*nfor,bu,bufPos)
         call mpiupC( modele.matmod,16*nmat,bu,bufPos)
         call mpiupI( modele.ipdpge,1,bu,bufPos)
         call mpiupI( modele.imatee,1,bu,bufPos)
         call mpiupI( modele.inatuu,1,bu,bufPos)
         call mpiupI( modele.ideriv,1,bu,bufPos)
         do iNomid=1,ntyp
C                  write(ioimp,*) 'nomid',iNomid,'sur ',ntyp
           call mpiupI( nbrobl,1,bu,bufPos)
           call mpiupI( nbrfac,1,bu,bufPos)
           segini pNomid
           modele.lnomid(iNomid)=pNomid
           call mpiupC( pNomid.lesobl(1),nbrobl*8,bu,bufPos)
           call mpiupC( pNomid.lesfac(1),nbrfac*8,bu,bufPos)
C                   do iObl=1,nbrObl
C                     write(ioimp,*) 'Obl',iObl,'/',nbrobl,pNomid.lesobl(iObl)
C                   enddo
C                   do iFac=1,nbrFac
C                     write(ioimp,*) 'Fac',iFac,'/',nbrFac,pNomid.lesFac(iFac)
C                   enddo
C                   write(ioimp,*) 'Position du buffer',bufPos
           segdes pNomid
         enddo
C            write(ioimp,*) 'Nomids recus'
C      write(ioimp,*) 'Position du buffer',bufPos
         call mpiupI( modele.infele(1),16,bu,bufPos)
C            write(ioimp,*) 'Infele recus'
C            write(ioimp,*) 'Position du buffer',bufPos
C            write(ioimp,*) 'Nombre d objets',nObMod
         if(nObMod.gt.0) then
            call mpiupC( modele.tymode(1),nObMod*8,bu,bufPos)
C               write(ioimp,*) 'Liste des types recue'
C               write(ioimp,*) 'Position du buffer',bufPos
            call mpiupI( modele.ivamod(1),nObMod,bu,bufPos)
C               write(ioimp,*) 'Liste des pointeurs recue'
C               write(ioimp,*) 'Position du buffer',bufPos
         endif
         segdes modele
         enddo
      else
         write(ioimp,*) 'Modele vide'
      endif

      segdes pModel
C      write(ioimp,*) 'Sortie de CUPMOD'
C      write(ioimp,*) 'Position du buffer',bufPos
      end


 
 
 
