65 USE bsc_cdf,
ONLY: vn_c_type, vn_s_name, vn_l_name,
66 1 vn_current, vn_raux, vn_xnod, vn_ehnod, vn_rcirc,
74 INTEGER(iprec) :: n_field_cg
75 INTEGER(iprec) :: n_diagn_c
76 REAL(rprec),
DIMENSION(:,:),
POINTER :: rdiag_coilg => null()
83 CHARACTER (len=63) :: cdffil
84 CHARACTER (len=120) :: name_diagnostic_dot
85 CHARACTER (len=30) :: idrfun
90 INTEGER(iprec) :: kp_store
91 INTEGER(iprec) :: n_field_periods
96 REAL(rprec),
DIMENSION(:,:,:),
POINTER :: a_r => null()
97 REAL(rprec),
DIMENSION(:,:,:),
POINTER :: a_f => null()
98 REAL(rprec),
DIMENSION(:,:,:),
POINTER :: a_z => null()
99 CHARACTER (len=30) :: s_name
100 CHARACTER (len=8) :: c_type
101 LOGICAL :: lstell_sym
105 CHARACTER (LEN=*),
PARAMETER ::
106 & vn_rdiag_coilg =
'rdiag_coilg',
108 & vn_n_diagn_c =
'n_diagn_c',
109 & vn_inductance_coilg =
'external_inductance'
110 CHARACTER (LEN=*),
PARAMETER ::
112 'name_diagnostic_dot',
113 & vn_lstell_sym =
'lstell_sym',
117 & vn_kp_store =
'kp_store',
119 & vn_cdffil =
'cdffil',
123 & vn_plasma_response =
'plasma_response',
124 & vn_n_field_periods =
'n_field_periods',
150 SUBROUTINE cdf_crfun_read(cdffil, crf, istat, mmode)
169 CHARACTER (LEN=*),
INTENT(in) :: cdffil
170 TYPE(clresfun),
INTENT(out) :: crf
171 INTEGER,
INTENT(out) :: istat
172 CHARACTER(LEN=1),
OPTIONAL,
INTENT(in) :: mmode
186 CHARACTER(LEN=1) :: mode =
'N'
187 INTEGER :: ncrfun, nwprocs
192 IF (
PRESENT(mmode)) mode = mmode
197 CALL mpi_comm_rank(mpi_comm_workers_ok, worker_id_ok, ierr_mpi)
198 CALL mpi_comm_size(mpi_comm_workers_ok, nwprocs, ierr_mpi)
199 IF (ierr_mpi .ne. 0) stop
'IERR_MPI != IN CDF_CRFUN_READ'
200 breadio = (worker_id_ok .eq. master)
206 CALL cdf_open(ncrfun, cdffil,
'r', istat)
207 IF (istat .ne. 0) stop
'ERROR OPENING CDFFIL!'
209 CALL cdf_read(ncrfun, vn_n_field_cg, crf%n_field_cg)
210 CALL cdf_read(ncrfun, vn_n_diagn_c, crf%n_diagn_c)
214 IF (nwprocs .gt. 1)
THEN
215 CALL mpi_bcast(crf%n_field_cg,1,
216 1 mpi_integer,master,mpi_comm_workers_ok,ierr_mpi)
217 CALL mpi_bcast(crf%n_diagn_c,1,
218 1 mpi_integer,master,mpi_comm_workers_ok,ierr_mpi)
221 IF (
ASSOCIATED(crf%rdiag_coilg))
DEALLOCATE(crf%rdiag_coilg)
222 ALLOCATE(crf%rdiag_coilg(crf%n_diagn_c,crf%n_field_cg),
224 IF (istat .ne. 0)
THEN
225 WRITE(6,*)
'In cdf_crfun_read, istat = ', istat
230 IF (mode .eq.
'R' .or. mode .eq.
'N')
THEN
231 CALL cdf_read(ncrfun, vn_rdiag_coilg, crf%rdiag_coilg)
233 CALL cdf_read(ncrfun, vn_inductance_coilg, crf%rdiag_coilg)
235 CALL cdf_close(ncrfun, istat)
239 IF (nwprocs .gt. 1)
THEN
240 CALL mpi_bcast(crf%rdiag_coilg,
SIZE(crf%rdiag_coilg),
241 1 mpi_real8,master,mpi_comm_workers_ok,ierr_mpi)
245 END SUBROUTINE cdf_crfun_read
254 SUBROUTINE cdf_prfun_read(cdffil, pl_str, istat, ldim_only)
273 CHARACTER (LEN=*),
INTENT(in) :: cdffil
274 TYPE (prfun),
INTENT(inout) :: pl_str
275 INTEGER,
INTENT(out) :: istat
276 LOGICAL,
INTENT(in),
OPTIONAL :: ldim_only
287 LOGICAL :: ldim_only_local, lfile
288 INTEGER :: nprfun, nwprocs
301 ldim_only_local = .false.
302 IF (
PRESENT(ldim_only)) ldim_only_local = ldim_only
307 CALL mpi_comm_rank(mpi_comm_workers_ok, worker_id_ok, ierr_mpi)
308 CALL mpi_comm_size(mpi_comm_workers_ok, nwprocs, ierr_mpi)
309 IF (ierr_mpi .ne. 0) stop
'IERR_MPI != IN CDF_PRFUN_READ'
310 breadio = (worker_id_ok .eq. master)
316 INQUIRE(file=cdffil, exist=lfile)
317 IF (.not. lfile)
THEN
318 print *,
' cdf file: ', trim(cdffil),
319 1
' not found in CDF_PRFUN_READ!'
323 CALL cdf_open(nprfun, cdffil,
'r', istat)
327 CALL cdf_read(nprfun,vn_s_name,pl_str%s_name)
328 CALL cdf_read(nprfun,vn_kp,pl_str%kp)
330 CALL cdf_read(nprfun,vn_kp_store,pl_str%kp_store,istat)
331 CALL cdf_read(nprfun,vn_lstell_sym,pl_str%lstell_sym)
334 IF (istat .ne. 0)
THEN
335 pl_str%kp_store = pl_str%kp
336 pl_str%lstell_sym = .false.
339 CALL cdf_read(nprfun,vn_jz,pl_str%jz)
340 CALL cdf_read(nprfun,vn_ir,pl_str%ir)
341 CALL cdf_read(nprfun,vn_rmin,pl_str%rmin)
342 CALL cdf_read(nprfun,vn_rmax,pl_str%rmax)
343 CALL cdf_read(nprfun,vn_zmin,pl_str%zmin)
344 CALL cdf_read(nprfun,vn_zmax,pl_str%zmax)
345 CALL cdf_read(nprfun,vn_cdffil,pl_str%cdffil)
346 CALL cdf_read(nprfun,vn_idc,pl_str%idc)
347 CALL cdf_read(nprfun,vn_name_diagnostic_dot,
348 & pl_str%name_diagnostic_dot)
349 CALL cdf_read(nprfun,vn_n_field_periods,pl_str%n_field_periods)
350 CALL cdf_read(nprfun,vn_idrfun,pl_str%idrfun)
354 IF (nwprocs .gt. 1)
THEN
355 CALL mpi_bcast(pl_str%s_name,len(pl_str%s_name),
356 1 mpi_character,master,mpi_comm_workers_ok,ierr_mpi)
357 CALL mpi_bcast(pl_str%kp,1,
358 1 mpi_integer,master,mpi_comm_workers_ok,ierr_mpi)
359 CALL mpi_bcast(pl_str%kp_store,1,
360 1 mpi_integer,master,mpi_comm_workers_ok,ierr_mpi)
361 CALL mpi_bcast(pl_str%lstell_sym,1,
362 1 mpi_logical,master,mpi_comm_workers_ok,ierr_mpi)
363 CALL mpi_bcast(pl_str%jz,1,
364 1 mpi_integer,master,mpi_comm_workers_ok,ierr_mpi)
365 CALL mpi_bcast(pl_str%ir,1,
366 1 mpi_integer,master,mpi_comm_workers_ok,ierr_mpi)
367 CALL mpi_bcast(pl_str%rmin,1,
368 1 mpi_real8,master,mpi_comm_workers_ok,ierr_mpi)
369 CALL mpi_bcast(pl_str%rmax,1,
370 1 mpi_real8,master,mpi_comm_workers_ok,ierr_mpi)
371 CALL mpi_bcast(pl_str%zmin,1,
372 1 mpi_real8,master,mpi_comm_workers_ok,ierr_mpi)
373 CALL mpi_bcast(pl_str%zmax,1,
374 1 mpi_real8,master,mpi_comm_workers_ok,ierr_mpi)
375 CALL mpi_bcast(pl_str%cdffil,len(pl_str%cdffil),
376 1 mpi_character,master,mpi_comm_workers_ok,ierr_mpi)
377 CALL mpi_bcast(pl_str%idc,1,
378 1 mpi_integer,master,mpi_comm_workers_ok,ierr_mpi)
379 CALL mpi_bcast(pl_str%n_field_periods,1,
380 1 mpi_integer,master,mpi_comm_workers_ok,ierr_mpi)
381 CALL mpi_bcast(pl_str%name_diagnostic_dot,
382 1 len(pl_str%name_diagnostic_dot),
383 1 mpi_character,master,mpi_comm_workers_ok,ierr_mpi)
384 CALL mpi_bcast(pl_str%idrfun,len(pl_str%idrfun),
385 1 mpi_character,master,mpi_comm_workers_ok,ierr_mpi)
389 IF (ldim_only_local)
THEN
390 IF (breadio)
CALL cdf_close(nprfun, istat)
394 IF (
ASSOCIATED(pl_str%a_r))
DEALLOCATE(pl_str%a_r)
395 IF (
ASSOCIATED(pl_str%a_f))
DEALLOCATE(pl_str%a_f)
396 IF (
ASSOCIATED(pl_str%a_z))
DEALLOCATE(pl_str%a_z)
397 ALLOCATE(pl_str%a_r(pl_str%ir,pl_str%jz,pl_str%kp_store))
398 ALLOCATE(pl_str%a_f(pl_str%ir,pl_str%jz,pl_str%kp_store))
399 ALLOCATE(pl_str%a_z(pl_str%ir,pl_str%jz,pl_str%kp_store))
402 CALL cdf_read(nprfun,vn_a_r,pl_str%a_r)
403 CALL cdf_read(nprfun,vn_a_f,pl_str%a_f)
404 CALL cdf_read(nprfun,vn_a_z,pl_str%a_z)
405 CALL cdf_close(nprfun, istat)
409 IF (nwprocs .gt. 1)
THEN
410 CALL mpi_bcast(pl_str%a_r,
SIZE(pl_str%a_r),
411 1 mpi_real8,master,mpi_comm_workers_ok,ierr_mpi)
412 CALL mpi_bcast(pl_str%a_f,
SIZE(pl_str%a_f),
413 1 mpi_real8,master,mpi_comm_workers_ok,ierr_mpi)
414 CALL mpi_bcast(pl_str%a_z,
SIZE(pl_str%a_z),
415 1 mpi_real8,master,mpi_comm_workers_ok,ierr_mpi)
419 END SUBROUTINE cdf_prfun_read
421 END MODULE read_response