mod_inout.f90 Source File

This module read the input user parameters (parameters.txt file / data / noise if true)


This file depends on

sourcefile~~mod_inout.f90~~EfferentGraph sourcefile~mod_inout.f90 mod_inout.f90 sourcefile~mod_constants.f90 mod_constants.f90 sourcefile~mod_inout.f90->sourcefile~mod_constants.f90

Files dependent on this one

sourcefile~~mod_inout.f90~~AfferentGraph sourcefile~mod_inout.f90 mod_inout.f90 sourcefile~main.f90 main.f90 sourcefile~main.f90->sourcefile~mod_inout.f90

Contents

Source Code


Source Code

!! This module read the input user parameters (parameters.txt file / data / noise if true)
module mod_inout
  !! This module read the input user parameters (parameters.txt file / data / noise if true)
  use mod_constants
  
  implicit none
  
  private
  
  public :: read_cube, read_map, read_parameters!, read_fits_real_3d

contains
  
  subroutine read_parameters(filename_parameters, filename, fileout, filename_noise, n_gauss, n_gauss_add, &
       lambda_amp, lambda_mu, lambda_sig, lambda_var_amp, lambda_var_mu, lambda_var_sig, amp_fact_init, &
       sig_init, init_option, maxiter_init, maxiter, m, noise, regul, descent, lstd, ustd, iprint, iprint_init)
    implicit none

    integer :: ios=0

    character(len=512), intent(in) :: filename_parameters

    integer, intent(inout) :: n_gauss, n_gauss_add
    integer, intent(inout) :: m 
    integer, intent(inout) :: lstd, ustd
    integer, intent(inout) :: iprint, iprint_init
    integer, intent(inout) :: maxiter, maxiter_init
    real(xp), intent(inout) :: lambda_amp, lambda_mu, lambda_sig
    real(xp), intent(inout) :: lambda_var_amp, lambda_var_mu, lambda_var_sig
    real(xp), intent(inout) :: amp_fact_init, sig_init
    logical, intent(inout) :: noise, regul, descent

    character(len=512), intent(inout) :: filename
    character(len=512), intent(inout) :: fileout
    character(len=512), intent(inout) :: filename_noise
    character(len=8), intent(inout) :: init_option

    namelist /user_parameters/ filename, fileout, filename_noise, n_gauss, n_gauss_add, lambda_amp, lambda_mu, &
         & lambda_sig, lambda_var_amp, lambda_var_mu, lambda_var_sig, amp_fact_init, sig_init, init_option, &
         maxiter_init, maxiter, m, noise, regul, descent, lstd, ustd, iprint, iprint_init
    
    open(unit=11, file=filename_parameters, status="old", iostat=ios)
    if (ios /= 0) stop "opening file error"
    
    read(11, user_parameters)
    
    close(11)
  end subroutine read_parameters


  subroutine read_cube(filename, cube)
    implicit none
    integer           :: ios=0, i
    integer           :: v, y, x 
    real(xp)          :: val
    integer           :: nv, ny, nx !cube dimension
    integer           :: nl
    character(len=512), intent(in) :: filename
    real(xp), intent(inout), dimension(:,:,:), allocatable :: cube

    open(unit=11, file=filename, action="read", status="old", iostat=ios)
    if (ios /= 0) stop "opening file error"
    
    read(11,fmt=*) nv, ny, nx
    nl = nv*ny*nx

    allocate(cube(nv,ny,nx))

    do i=1,nl
       read(11,fmt=*) v, y, x, val
       cube(v+1,y+1,x+1) = val
    enddo
    
    close(11)
  end subroutine read_cube

  
  subroutine read_map(filename, map)
    implicit none

    integer           :: ios=0, i
    integer           :: y,x 
    real(xp)          :: val
    integer           :: ny,nx
    integer           :: nl
    character(len=512), intent(in) :: filename
    real(xp), intent(inout), dimension(:,:), allocatable :: map

    open(unit=11, file=filename, action="read", status="old", iostat=ios)
    if (ios /= 0) stop "opening file error"
    
    read(11,fmt=*) ny, nx
    nl = ny*nx

    allocate(map(ny,nx))

    do i=1,nl
       read(11,fmt=*) y, x, val
       map(y+1,x+1) = val
    enddo
    
    close(11)
  end subroutine read_map

end Module mod_inout