submodule (static_data_m) static_data_parbnd_taylor_s !! Handles static data related with parbnd_taylors implicit none contains module subroutine static_parbnd_taylor_init(comm_handler, par_filepath, nf90_filepath) type(comm_handler_t), intent(in) :: comm_handler character(len=*), intent(in), optional :: par_filepath character(len=*), intent(in), optional :: nf90_filepath real(GP) :: dphi character(len=:), allocatable :: fpath logical :: write_to_netcdf = .false. integer :: nf90_stat, nf90_id, nf90_grpid character(len=3) :: plane_c character(len=:), allocatable :: nf90_fpath if (is_rank_info_writer) then write(get_stdout(),*)'' write(get_stdout(),*)repeat('-',80) write(get_stdout(),*)'Initializing static data: parbnd_taylor' endif if (.not.equi_is_initialized) then call handle_error('equi must be initialized at parbnd_taylor initialization', & GRILLIX_ERR_STATIC_DATA, __LINE__, __FILE__) endif if (.not.multigrid_is_initialized) then call handle_error('multigrid must be initialized at parbnd_taylor initialization', & GRILLIX_ERR_STATIC_DATA, __LINE__, __FILE__) endif if (present(par_filepath)) then fpath = par_filepath else fpath = static_data_parpath endif dphi = TWO_PI / comm_handler%get_nplanes() ! Select NetCDF file path and enable writing when required write(plane_c,'(I3.3)')comm_handler%get_plane() if (present(nf90_filepath)) then nf90_fpath = nf90_filepath else if (equi%is_axisymmetric()) then nf90_fpath = trim(static_data_dirpath)//'/parbnd_taylor.nc' if ((cntrl_build_parbnd_taylor == BUILD_AND_WRITE) .and. (is_rank_info_writer)) then write_to_netcdf = .true. endif else nf90_fpath = trim(static_data_dirpath)//'/parbnd_taylor_plane'//plane_c//'.nc' if (cntrl_build_parbnd_taylor == BUILD_AND_WRITE) then write_to_netcdf = .true. endif endif endif ! Associate staggered type if (equi%is_axisymmetric()) then parbnd_taylor_stag => parbnd_taylor_cano else allocate(parbnd_taylor_stag_mem) parbnd_taylor_stag => parbnd_taylor_stag_mem endif select case(cntrl_build_parbnd_taylor) case(BUILD_NOWRITE, BUILD_AND_WRITE) if (is_rank_info_writer) then write(get_stdout(),*)'Building parbnd_taylor from scratch' endif call parbnd_taylor_cano%init(equi, mesh_cano, dphi, fpath) if (.not.equi%is_axisymmetric()) then call parbnd_taylor_stag%init(equi, mesh_stag, dphi, fpath) endif parbnd_taylor_is_initialized = .true. case(READ) if (is_rank_info_writer) then write(get_stdout(),*)'Reading parbnd_taylor from file: ' // nf90_fpath endif nf90_stat = nf90_open(nf90_fpath, NF90_NETCDF4, nf90_id) call handle_error_netcdf(nf90_stat, __LINE__, __FILE__) if (equi%is_axisymmetric()) then call parbnd_taylor_cano%read_netcdf(nf90_id) else nf90_stat = nf90_inq_grp_ncid(nf90_id, 'canonical', nf90_grpid) call handle_error_netcdf(nf90_stat, __LINE__, __FILE__) call parbnd_taylor_cano%read_netcdf(nf90_grpid) nf90_stat = nf90_inq_grp_ncid(nf90_id, 'staggered', nf90_grpid) call handle_error_netcdf(nf90_stat, __LINE__, __FILE__) call parbnd_taylor_stag%read_netcdf(nf90_grpid) endif nf90_stat = nf90_close(nf90_id) call handle_error_netcdf(nf90_stat, __LINE__, __FILE__) parbnd_taylor_is_initialized = .true. case(NONE) if (is_rank_info_writer) then write(get_stdout(),*) 'Parbnd_taylor not built because it was not requested by the user.' endif case default call handle_error('cntrl_build_parbnd_taylor not valid', & GRILLIX_ERR_STATIC_DATA, __LINE__, __FILE__) end select if (enable_debug_output .and. parbnd_taylor_is_initialized) then call parbnd_taylor_cano%display() endif if (write_to_netcdf) then if (is_rank_info_writer) then write(get_stdout(),*)'Writing parbnd_taylor data to file (series): ' // nf90_fpath endif nf90_stat = nf90_create(nf90_fpath, NF90_NETCDF4, nf90_id) call handle_error_netcdf(nf90_stat, __LINE__, __FILE__) if (equi%is_axisymmetric()) then call parbnd_taylor_cano%write_netcdf(nf90_id) else nf90_stat = nf90_def_grp(nf90_id, 'canonical', nf90_grpid) call handle_error_netcdf(nf90_stat, __LINE__, __FILE__) call parbnd_taylor_cano%write_netcdf(nf90_grpid) nf90_stat = nf90_def_grp(nf90_id, 'staggered', nf90_grpid) call handle_error_netcdf(nf90_stat, __LINE__, __FILE__) call parbnd_taylor_stag%write_netcdf(nf90_grpid) endif nf90_stat = nf90_close(nf90_id) call handle_error_netcdf(nf90_stat, __LINE__, __FILE__) endif if (is_rank_info_writer) then write(get_stdout(),*)repeat('-',80) write(get_stdout(),*)'' endif end subroutine end submodule