smdchp
C SMDCHP SOURCE OF166741 24/03/28 21:15:10 11811 C*********************************************************************** C NOM : smdchp.eso C DESCRIPTION : Sortie des CHPOINT dans un fichier au format MED C*********************************************************************** C HISTORIQUE : 16/10/2017 : RPAREDES : CREATION C HISTORIQUE : 07/03/2019 : CB215821 : Compatibilite avec Salome > 9.2 C HISTORIQUE : 01/08/2022 : OF : Ameliorations diverses C HISTORIQUE : 12/01/2024 : OF : Ameliorations diverses C HISTORIQUE : 24/01/2024 : OF : Menues modifications C HISTORIQUE : 31/01/2024 : OF : Menues modifications (2) C HISTORIQUE : 08/02/2024 : OF : Correction du profil avec numerotation C HISTORIQUE : 12/02/2024 : OF : Passage a bibliotheque MED-64 bits C*********************************************************************** C Priere de PRENDRE LE TEMPS DE COMPLETER LES COMMENTAIRES C en cas de modification de ce sous-programme afin de faciliter C la maintenance ! C*********************************************************************** C APPELE PAR : operateur (SORT 'MED') sormed.eso C*********************************************************************** C ENTREES : mfid : Id du fichier C name : Nom du MAILLAGE MED courant C IJGROU : SEGMENT contenant la liste des GROUPES C LISCHP : SEGMENT contenant la liste des MPOVAL C ICPR8 : SEGMENT de correspondance numero MED / Cast3M C SORTIES : aucune C*********************************************************************** IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC CCGEOME -INC CCMED -INC SMELEME -INC SMCOORD -INC SMCHPOI -INC SMLENTI -INC SMMED SEGMENT ICPR8(nnic) CHARACTER*(*) name CHARACTER*(4) cha4F C-----Definition des reels REAL*8 dt C-----Chaines de Caractere de longueur MED_NAME_SIZE=64 CHARACTER*(MED_NAME_SIZE) fname CHARACTER*(MED_NAME_SIZE) lname CHARACTER*(MED_NAME_SIZE) mname CHARACTER*(MED_LNAME_SIZE) pname C-----Chaines de Caractere de longueur MED_SNAME_SIZE=16 CHARACTER*(MED_SNAME_SIZE) dtunit C-----SEGMENT pour stocker les profils des familles (numero d'element local) SEGMENT IPROFI(nbelp) SEGMENT IPROF1(nbelp) C-----Information sur les GROUPES SEGMENT IJGROU INTEGER ILENTI(nbgrou) INTEGER IPMAIL(nbgrou) CHARACTER*(MED_LNAME_SIZE) CNOMGR(nbgrou) C nbgrou : Nombre de groupes C ILENTI : pointeur LISTENTI des numeros de famille composant les groupes C IPMAIL : pointeur MELEME du groupe en question C CNOMGR : Noms des groupes ENDSEGMENT C-----SCHMED : Proprietes des CHAMPS a sortir SEGMENT SCHMED CHARACTER*(MED_NAME_SIZE) CCHMED(nchmed) CHARACTER*(MED_NAME_SIZE) CPRMED(nchmed) C CCHMED : Nom du champ MED a creer C CPRMED : Nom du profil MED a creer ENDSEGMENT SEGMENT SLISCO ENDSEGMENT C Une petite chaine pour les formats cha4F = '(I )' mcret = 0 C ********************************************************************** C Traitement des CHPOINT : Champ, Profil et Valeurs C ********************************************************************** nbgrou = IJGROU.IPMAIL(/1) nchmed = LISCHP.NBENTI C Initialisations des segments de travail : SCHMED, SLISCO et IPROFI C Dimensionnement au maximum pour SLISCO(nbcomp) nbelp = 0 DO ia = 1, nchmed MSOUPO = LISCHP.LICHAP(ia) nbelp = MAX(nbelp, IPT1.NUM(/2)) if (ipt1.num(/1).ne.1) then write(ioimp,*) 'SMDCHP - support chpoint incoherent',ia,ipt1 endif END DO SEGINI,SCHMED,SLISCO,IPROFI SLISCO.LISSCP(ie) = ' ' SLISCO.LCUNIT(ie) = 'NO_UNIT' END DO nbch = 0 nbpr = 0 DO ia = 1, nchmed fname = LISCHP.NOCHAP(ia) MSOUPO = LISCHP.LICHAP(ia) nsize = IPT1.NUM(/2) IF (iplace .EQ. 0) THEN C------- Creation du Champ nbch = nbch + 1 SCHMED.CCHMED(nbch)=fname SLISCO.LISSCP(ie) = MSOUPO.NOCOMP(ie) ENDDO mftype = MED_FLOAT64 n4 = nbcomp dtunit = 'NO_UNIT' mname = name CALL mfdcre(mfid, fname, mftype, n4, & SLISCO.LISSCP,SLISCO.LCUNIT, dtunit, mname, mcret) IF (mcret .NE. 0) THEN moterr = 'smdchp / mfdcre' interr(1) = mcret GOTO 9999 ENDIF ENDIF C Verification de controle au CAS OU on aurait oublie un MAILLAGE IF (IDANS .EQ. 0) THEN C Determination du FORMAT automatique IFORMA = INT(LOG10(REAL(IPT1))) + 1 IF (IFORMA.LT.1 .OR. IFORMA.GT.9) THEN GOTO 9999 ENDIF WRITE(cha4F(3:3),'(I1)') IFORMA WRITE(pname , cha4F) IPT1 ELSE pname = IJGROU.CNOMGR(IDANS) ENDIF IF (iplace .EQ. 0) THEN C------- Creation du Profil nbpr = nbpr + 1 SCHMED.CPRMED(nbpr)=pname C- Prise en compte de la numerotation locale pour le profil DO i = 1, nsize IPROFI(i) = ICPR8(IPT1.NUM(1,i)) ENDDO CALL mpfprw(mfid, pname, nsize, IPROFI(1), mcret) IF (mcret .NE. 0) THEN moterr = 'smdchp / mpfprw' interr(1) = mcret GOTO 9999 ENDIF ENDIF C------ Ecriture des Valeurs du Champ MPOVAL = MSOUPO.IPOVAL numit = MED_NO_IT numdt = LISCHP.PNUMDT(ia) dt = LISCHP.XTEMPS(ia) metype = MED_NODE mgtype = MED_NONE mtsf = MED_COMPACT_STMODE lname = ' ' mswm = MED_NO_INTERLACE mcs = MED_ALL_CONSTITUENT n4 = nsize CALL mfdrpw(mfid, fname, numdt, numit, dt, metype,mgtype, mtsf, & pname, lname, mswm, mcs, n4, MPOVAL.VPOCHA, mcret) IF (mcret .NE. 0) THEN moterr = 'smdchp / mfdrpw' interr(1) = mcret GOTO 9999 ENDIF ENDDO 9999 CONTINUE SEGSUP,SCHMED,SLISCO,IPROFI C RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales