c------------------------------------------------------------------------- subroutine niv(listi,numion,n_cross,np,iunit_svp) c routine du module mod_bp_for_alecian_new ! Version 1.1 (11/10/2004) ! Cette subroutine lit les niveaux atomiques necessaires au calcul du g_cont. ! Les donnees se trouvent dans le repertoire tbniv/, les niveaux atomiques ! dans les fichiers tbion... sont des niveaux regroupes approximatifs, adaptes ! pour le calcul des accelerations radiatives. ! Cette subroutine fait partie du module grcesam2. ! Version 2.1 (14/06/2004) ! Auteur: ! Georges ALECIAN ! LUTH - UMR 8102, Observatoire de Meudon ! F-92195 MEUDON CEDEX, FRANCE ! Tel: 01 45 07 74 20, + 33 1 45 07 74 20 c Adaptation à CESAM2k B.Pichon, P.Morel c------------------------------------------------------------------------- implicit none ! input integer, parameter :: nsvp=300 integer :: numion,iunit_svp integer, dimension(nsvp) :: np integer, dimension(3,nsvp) :: n_cross character(4), dimension(nsvp) :: listi ! mes variables locales character(319) :: nfe integer :: i,j,k,ii,jj,ios integer :: dim character(4) :: nom integer, dimension(nsvp) :: jz=0,ns=0,elflag integer, dimension(30,nsvp) :: saq real, dimension(30,nsvp) :: sae,sag real, dimension(nsvp) :: x=0. elflag=0 ! initialisation tableau ! On charge toutes les donnees atomiques disponibles do k=1,numion nfe=TRIM(nomch)// + 'datai_gr2p1/tbniv/tbion'//TRIM(ADJUSTL(listi(k)))//'.niv' OPEN (UNIT = iunit_svp, + FILE = nfe, + IOSTAT=ios, + STATUS = 'old') if(ios/=0) CYCLE elflag(k)=1 ! le fichier de l'ion existe read(iunit_svp,1075) nom ! nom de l'ion read(iunit_svp,1081) x(k) ! pot. ioni. (eV) read(iunit_svp,1073) jz(k) ! charge read(iunit_svp,1073) ns(k) ! nombre de niveaux read(iunit_svp,1045) dim ! inutilise read(iunit_svp,1059) (sae(i,k),i=1,ns(k)) ! energie (eV) read(iunit_svp,1057) (sag(i,k),i=1,ns(k)) ! poids stat. read(iunit_svp,1073) (saq(i,k),i=1,ns(k)) ! nb quantique pple close (iunit_svp) end do ! On remplit les tableaux utiles pour cesam aux memes positions que phistar,... do k=1,numion if(n_cross(2,k).ne.0) then ! si l'element est calcule pour cesam ii = n_cross(1,k) jj = n_cross(2,k) do j=jj-n_cross(3,k)+1 , jj ! n_cross(3,k): nb d'isotopes niv_flag(ii,j) = elflag(k) niv_nb(ii,j) = ns(k) niv_z(ii,j) = jz(k) el_pot(ii,j) = x(k) do i=1,ns(k) niv_e(i,ii,j) = sae(i,k) niv_q(i,ii,j) = saq(i,k) niv_g(i,ii,j) = sag(i,k) end do call gr_gazrare(np(k),jz(k),rar_flag(ii,j)) end do end if end do 1075 format(1x,a4) 1081 format(16f9.2) 1073 format(20i4) 1045 format(16i5) 1057 format(12f6.0) 1059 format(8f8.3) end subroutine niv