Module MULTI_FMT ! USE CONFIG USE PHYSAT ! Implicit None ! Private Public :: WRITE_MULTI_FMT ! CONTAINS ! !-------------------------------------------------------------------- ! Subroutine WRITE_MULTI_FMT(line, M1, M2) Character(len = *), Intent(in) :: line Integer, intent(out) :: M1, M2 Logical :: blabla = .FALSE. ! Logical :: crit1, crit2, crit3, crit4, crit5, crit6 Character(len = 256), parameter :: multi_fmt1 = '(I3, F12.3, I4)' Character(len = 256), parameter :: multi_fmt2 = '(3F12.3)' Character(len = 256), parameter :: multi_fmt3 = '(4ES12.2)' ! crit1 = ( Ion < Ion_min .OR. Ion > Ion_max ) crit2 = ( Ei_eV > Ei_max_eV ) If (one_line_only) Then crit3 = ( lbd_vac < lbd-Dlbd/2 .OR. lbd_vac > lbd+Dlbd/2 ) Else crit3 = ( lbd_vac < lbd_min .OR. lbd_vac > lbd_max ) End If crit4 = ( loggf < loggf_min .OR. loggf > loggf_max ) crit5 = Any(Z_multi == Z) ! IF (blabla) Write(*, *)"crit1,crit2,crit3,crit4,crit5,crit6: ",crit1,crit2,crit3,crit4,crit5,crit6 ! If (crit1 .OR. crit2 .OR. crit3 .OR. crit4 .OR. .NOT. crit5) Then Write(30, '(A)', iostat = ios) Trim(line) IF (ios /= 0) STOP "IN SUBROUTINE WRITE_MULTI_FMT: PB-00." RETURN End If ! crit6 = ( Ei_eV >= Eion_multi(Z,Ion) .OR. Ej_eV >= Eion_multi(Z,Ion) ) ! If (crit6) Then Write(30, '(A)', iostat = ios) Trim(line) IF (ios /= 0) STOP "IN SUBROUTINE WRITE_MULTI_FMT: PB-01." RETURN End If ! If (rm_grad_0 .AND. gam_rad == 0.) Then Write(30, '(A)', iostat = ios) Trim(line) IF (ios /= 0) STOP "IN SUBROUTINE WRITE_MULTI_FMT: PB-021." RETURN End If ! If (rm_gsta_0 .AND. gam_Sta == 0.) Then Write(30, '(A)', iostat = ios) Trim(line) IF (ios /= 0) STOP "IN SUBROUTINE WRITE_MULTI_FMT: PB-022." RETURN End If ! If (rm_gvdw_0 .AND. gam_VdW == 0.) Then Write(30, '(A)', iostat = ios) Trim(line) IF (ios /= 0) STOP "IN SUBROUTINE WRITE_MULTI_FMT: PB-02." RETURN End If ! If (rm_one_elt) Then If (NUM_NUCLEUS(elt_rm) == Z .AND. ( ion_min_rm <= Ion .AND. ion_max_rm >= Ion) ) Then Write(30, '(A)', iostat = ios) Trim(line) IF (ios /= 0) STOP "IN SUBROUTINE WRITE_MULTI_FMT: PB-03." RETURN End If End If ! If (one_elt_only) Then If (NUM_NUCLEUS(one_elt) == Z) Then Call DETAILS() M1 = M1 + 1 ! Lines selected for the element one_elt Else Write(30, '(A)', iostat = ios) Trim(line) IF (ios /= 0) STOP "IN SUBROUTINE WRITE_MULTI_FMT: PB-05." RETURN End If Else Call DETAILS() M2 = M2 + 1 ! Lines selected for the all elements End If ! CONTAINS ! !----------------------------------------------------------------- ! Subroutine DETAILS() Integer :: pos !cElt = NUCLEUS(Elt) pos = Maxloc(Z_multi, dim = 1, mask = Z_multi == Z) cElt = Elt_multi(pos) Write(20, '(A)', iostat = ios) Trim(cElt) Write(20, '(A)', iostat = ios) Trim(cElt) IF(ios/=0) STOP "IN SUBROUTINE WRITE_MULTI_FMT: PB-01." Write(20, multi_fmt1, iostat = ios) Ion, Ei_cm, gi IF(ios/=0) STOP "IN SUBROUTINE WRITE_MULTI_FMT: PB-02." Write(20, '(A)', iostat = ios) Trim(cElt) Write(20, multi_fmt1, iostat = ios) Ion, Ej_cm, gj IF(ios/=0) STOP "IN SUBROUTINE WRITE_MULTI_FMT: PB-03." Write(20, multi_fmt2, iostat = ios) lbd_vac, lbd_vac-delta_lbd, lbd_vac+delta_lbd IF(ios/=0) STOP "IN SUBROUTINE WRITE_MULTI_FMT: PB-04." f = 10**(loggf)/real(gi) !Write(20, multi_fmt3, iostat = ios) f, gam_rad, gam_VdW, gam_Sta Write(20, multi_fmt3, iostat = ios) f, gam_rad, F_H_MULTI, gam_Sta End Subroutine ! End Subroutine WRITE_MULTI_FMT ! End Module MULTI_FMT