c*************************************************************** PROGRAM des2k_abonts c dessin des abondances X, Y,Z de surface en fonction du temps c utilisation du fichier *.HR c Auteur: P.Morel, Département J.D. Cassini, O.C.A., c CESAM2k c-------------------------------------------------------------- USE mod_donnees, ONLY : ihe4, nchim, nom_elem, nom_fich2 USE mod_exploit, ONLY : compe, lit_hr, min_max USE mod_kind USE mod_variables, ONLY : age IMPLICIT NONE REAL (kind=dp) :: log_l, log_r, log_teff, vrot, wrot INTEGER, PARAMETER :: pmod=1500 REAL (kind=sp), ALLOCATABLE, DIMENSION(:,:) :: dcompe REAL (kind=sp), ALLOCATABLE, DIMENSION(:) :: X, Y, Z, ZsX REAL (kind=sp), DIMENSION(pmod) :: aged REAL (kind=sp) :: xmax, xmin, ymax, ymin INTEGER :: i, ic=1, j, nmod LOGICAL :: erreur, fin, init, ok CHARACTER (len=1) :: oui CHARACTER (len=80) :: chaine, device, titre c---------------------------------------------------------------------- 2000 FORMAT(8es10.3) c on entre le nom du fichier .HR à dessiner B1: DO PRINT*,'Entrer le nom générique du modèle à dessiner, Ex: soleil' READ(5,'(a)')nom_fich2 chaine=TRIM(nom_fich2)//'.HR' INQUIRE(file=chaine,exist=ok) IF(ok)THEN WRITE(*,1)chaine ; EXIT B1 1 FORMAT('dessin des abondances de surface du modèle: ',a) ELSE PRINT*,'ERREUR, fichier inconnu: ',TRIM(chaine) PRINT*,'Autre essai ?, entrer o/n' ; READ*,oui IF(oui /= 'o')STOP ENDIF ENDDO B1 c lecture du fichier HR nmod=0 ; init=.TRUE. B2: DO CALL lit_hr(init,chaine,fin,erreur,log_l,log_r,log_teff, 1 vrot,wrot) IF(fin)EXIT B2 ; IF(erreur)CYCLE B2 IF(.NOT. ALLOCATED(dcompe))ALLOCATE(dcompe(pmod,nchim)) nmod=nmod+1 IF(nmod > pmod)THEN PRINT*,'on limite le nombre de modèle à :',pmod ; EXIT B2 ENDIF aged(nmod)=age ; dcompe(nmod,:)=compe(:) ENDDO B2 c PRINT*,'nombre de modèles=',nmod c identification de He4, on a toujours ihe4 >= 3 ihe4=3 B3: DO I1: IF(nom_elem(ihe4) == 'He4 ')THEN EXIT B3 ELSE I1 IF(ihe4 < nchim)THEN ihe4=ihe4+1 ; CYCLE B3 ELSE PRINT*,'ARRET,indice de He4 non trouvé, noms des éléments' PRINT*,nom_elem ; STOP ENDIF ENDIF I1 ENDDO B3 c calcul de X, Y et Z ALLOCATE(X(nmod),Y(nmod),Z(nmod),ZsX(nmod)) DO i=1,nmod X(i)=SUM(dcompe(i,1:ihe4-1)) ; Y(i)=SUM(dcompe(i,ihe4-1:ihe4)) Z(i)=1.d0-X(i)-y(i) ; ZsX(i)=Z(i)/X(i) c WRITE(*,2000)X(i),Y(i),Z(i),ZsX(i) ; PAUSE'X, Y ,Z' ENDDO c WRITE(*,2000)ZsX c--------------- dessins ----------------------------- titre='évolution des abondances de surface de '//TRIM(chaine) device='/xw' c PRINT*,'device ? /xw, /PS, /CPS' c READ*,device CALL pgbegin(0,device,1,1) xmin=aged(1)-aged(nmod)/50. ; xmax=aged(nmod)*1.02 ymin=0.01 ; ymax=1.05*MAXVAL(ZsX(1:nmod)) CALL pgenv(xmin,xmax,ymin,ymax,0,0) CALL pglabel('âge du modèle(My)','Z / X surface',titre) ic=ic+1 ; CALL pgsci(ic) DO j=1,nmod CALL pgline(nmod,aged,ZsX) ENDDO CALL pgsci(1) ymin=0.6 ; ymax=1.05*MAXVAL(X(1:nmod)) CALL pgenv(xmin,xmax,ymin,ymax,0,0) CALL pglabel('âge du modèle(My)','X surface',titre) ic=ic+1 ; CALL pgsci(ic) DO j=1,nmod CALL pgline(nmod,aged,X) ENDDO CALL pgsci(1) ymin=0.1 ; ymax=1.05*MAXVAL(Y(1:nmod)) CALL pgenv(xmin,xmax,ymin,ymax,0,0) CALL pglabel('âge du modèle(My)','Y surface',titre) ic=ic+1 ; CALL pgsci(ic) DO j=1,nmod CALL pgline(nmod,aged,Y) ENDDO CALL pgsci(1) c dessins des abondances Xi PRINT*,'dessin des abondances des éléments en surface? o/n' READ*,oui IF(oui == 'o')THEN DEALLOCATE(X,ZsX) DO i=1,nchim IF(ic > 5)ic=1 y(1:nmod)=dcompe(1:nmod,i) ; chaine=TRIM(nom_elem(i))//' surface' CALL min_max(y,nmod,ymax,ymin) CALL pgsci(1) CALL pgenv(xmin,xmax,ymin,ymax,0,0) CALL pglabel('âge du modèle(My)',chaine,titre) ic=ic+1 ; CALL pgsci(ic) DO j=1,nmod CALL pgline(nmod,aged,y) ENDDO ENDDO ENDIF CALL pgend STOP END PROGRAM des2k_abonts