@@ -839,73 +839,39 @@ end subroutine realloc_integer2_modes
839839
840840
841841 subroutine read_astero_search_controls (filename , ierr )
842+ use utils_namelist, only: read_namelist, missing_namelist_error
842843 character (len=* ), intent (in ) :: filename
843844 integer , intent (out ) :: ierr
845+
844846 ! initialize controls to default values
845847 include ' astero_search.defaults'
846- ierr = 0
847- call read1_astero_search_inlist(filename, 1 , ierr)
848- end subroutine read_astero_search_controls
849848
849+ call read_namelist(filename, read_astero_search_file, " astero_search_controls" , ierr, missing_namelist_error)
850+ end subroutine read_astero_search_controls
850851
851- recursive subroutine read1_astero_search_inlist (filename , level , ierr )
852- character (len=* ), intent (in ) :: filename
853- integer , intent (in ) :: level
854- integer , intent (out ) :: ierr
852+ subroutine read_astero_search_file (unit , iostat , iomsg , extra_inlists , extra_inlists_mask )
853+ use const_def, only: strlen, max_extra_inlists
855854
856- logical , dimension (max_extra_inlists) :: read_extra
857- character (len= strlen) :: message
858- character (len= strlen), dimension (max_extra_inlists) :: extra
859- integer :: unit, i
855+ integer , intent (in ) :: unit
856+ integer , intent (out ) :: iostat
857+ character (len= strlen), intent (out ) :: iomsg
858+ character (len= strlen), dimension (max_extra_inlists), intent (out ) :: extra_inlists
859+ logical , dimension (max_extra_inlists), intent (out ) :: extra_inlists_mask
860860
861- if (level >= 10 ) then
862- write (* ,* ) ' ERROR: too many levels of nested extra star_job inlist files'
863- ierr = - 1
864- return
865- end if
861+ integer :: i
866862
867- ierr = 0
868- unit= alloc_iounit(ierr)
869- if (ierr /= 0 ) return
863+ read (unit, nml= astero_search_controls, iostat= iostat, iomsg= iomsg)
870864
871- open (unit= unit, file= trim (filename), action= ' read' , delim= ' quote' , iostat= ierr)
872- if (ierr /= 0 ) then
873- write (* , * ) ' Failed to open astero search inlist file ' , trim (filename)
874- else
875- read (unit, nml= astero_search_controls, iostat= ierr)
876- close (unit)
877- if (ierr /= 0 ) then
878- write (* , * ) &
879- ' Failed while trying to read astero search inlist file ' , trim (filename)
880- write (* , ' (a)' ) trim (message)
881- write (* , ' (a)' ) &
882- ' The following runtime error message might help you find the problem'
883- write (* , * )
884- open (unit= unit, file= trim (filename), &
885- action= ' read' , delim= ' quote' , status= ' old' , iostat= ierr)
886- read (unit, nml= astero_search_controls)
887- close (unit)
888- end if
865+ if (iostat /= 0 ) then
866+ return
889867 end if
890- call free_iounit(unit)
891- if (ierr /= 0 ) return
892868
893- ! recursive calls to read other inlists
894869 do i= 1 , max_extra_inlists
895- read_extra(i) = read_extra_astero_search_inlist(i)
896- read_extra_astero_search_inlist(i) = .false.
897- extra(i) = extra_astero_search_inlist_name(i)
898- extra_astero_search_inlist_name(i) = ' undefined'
899-
900- if (read_extra(i)) then
901- call read1_astero_search_inlist(extra(i), level+1 , ierr)
902- if (ierr /= 0 ) return
903- end if
870+ extra_inlists(i) = extra_astero_search_inlist_name(i)
871+ extra_inlists_mask(i) = read_extra_astero_search_inlist(i)
904872 end do
905873
906-
907- end subroutine read1_astero_search_inlist
908-
874+ end subroutine read_astero_search_file
909875
910876 subroutine write_astero_search_controls (filename_in , ierr )
911877 use utils_lib
@@ -938,75 +904,40 @@ subroutine write_astero_search_controls(filename_in, ierr)
938904
939905 end subroutine write_astero_search_controls
940906
941-
942907 subroutine read_astero_pgstar_controls (filename , ierr )
908+ use utils_namelist, only: read_namelist, missing_namelist_error
943909 character (len=* ), intent (in ) :: filename
944910 integer , intent (out ) :: ierr
945911
946912 ! initialize controls to default values
947913 include ' astero_pgstar.defaults'
948914
949- ierr = 0
950- call read1_astero_pgstar_inlist(filename, 1 , ierr)
951-
915+ call read_namelist(filename, read_astero_pgstar_file, " astero_pgstar_controls" , ierr, missing_namelist_error)
952916 end subroutine read_astero_pgstar_controls
953917
918+ subroutine read_astero_pgstar_file (unit , iostat , iomsg , extra_inlists , extra_inlists_mask )
919+ use const_def, only: strlen, max_extra_inlists
954920
955- recursive subroutine read1_astero_pgstar_inlist (filename , level , ierr )
956- character (len=* ), intent (in ) :: filename
957- integer , intent (in ) :: level
958- integer , intent (out ) :: ierr
921+ integer , intent (in ) :: unit
922+ integer , intent (out ) :: iostat
923+ character (len= strlen), intent (out ) :: iomsg
924+ character (len= strlen), dimension (max_extra_inlists), intent (out ) :: extra_inlists
925+ logical , dimension (max_extra_inlists), intent (out ) :: extra_inlists_mask
959926
960- logical , dimension (max_extra_inlists) :: read_extra
961- character (len= strlen), dimension (max_extra_inlists) :: extra
962- integer :: unit, i
927+ integer :: i
963928
964- if (level >= 10 ) then
965- write (* ,* ) ' ERROR: too many levels of nested extra star_job inlist files'
966- ierr = - 1
967- return
968- end if
929+ read (unit, nml= astero_pgstar_controls, iostat= iostat, iomsg= iomsg)
969930
970- ierr = 0
971- unit= alloc_iounit(ierr)
972- if (ierr /= 0 ) return
973-
974- open (unit= unit, file= trim (filename), action= ' read' , delim= ' quote' , iostat= ierr)
975- if (ierr /= 0 ) then
976- write (* , * ) ' Failed to open astero pgstar inlist file ' , trim (filename)
977- else
978- read (unit, nml= astero_pgstar_controls, iostat= ierr)
979- close (unit)
980- if (ierr /= 0 ) then
981- write (* , * ) &
982- ' Failed while trying to read astero pgstar inlist file ' , trim (filename)
983- write (* , ' (a)' ) &
984- ' The following runtime error message might help you find the problem'
985- write (* , * )
986- open (unit= unit, file= trim (filename), &
987- action= ' read' , delim= ' quote' , status= ' old' , iostat= ierr)
988- read (unit, nml= astero_pgstar_controls)
989- close (unit)
990- end if
931+ if (iostat /= 0 ) then
932+ return
991933 end if
992- call free_iounit(unit)
993- if (ierr /= 0 ) return
994934
995- ! recursive calls to read other inlists
996935 do i= 1 , max_extra_inlists
997- read_extra(i) = read_extra_astero_pgstar_inlist(i)
998- read_extra_astero_pgstar_inlist(i) = .false.
999- extra(i) = extra_astero_pgstar_inlist_name(i)
1000- extra_astero_pgstar_inlist_name(i) = ' undefined'
1001-
1002- if (read_extra(i)) then
1003- call read1_astero_pgstar_inlist(extra(i), level+1 , ierr)
1004- if (ierr /= 0 ) return
1005- end if
936+ extra_inlists(i) = extra_astero_pgstar_inlist_name(i)
937+ extra_inlists_mask(i) = read_extra_astero_pgstar_inlist(i)
1006938 end do
1007939
1008- end subroutine read1_astero_pgstar_inlist
1009-
940+ end subroutine read_astero_pgstar_file
1010941
1011942 subroutine save_sample_results_to_file (i_total , results_fname , ierr )
1012943 use utils_lib
0 commit comments