V3FIT
unprimed_grid.f
Go to the documentation of this file.
1 !*******************************************************************************
4 !
5 ! Note separating the Doxygen comment block here so detailed decription is
6 ! found in the Module not the file.
7 !
11 !*******************************************************************************
13  USE stel_kinds, ONLY: rprec
14  USE profiler
16  USE m_grid
17  USE primed_grid
18 
19  IMPLICIT NONE
20 
21 !*******************************************************************************
22 ! DERIVED-TYPE DECLARATIONS
23 ! 1) unprimed grid base class
24 !
25 !*******************************************************************************
26 !-------------------------------------------------------------------------------
29 !-------------------------------------------------------------------------------
32  REAL (rprec), DIMENSION(:,:,:), POINTER :: a_r => null()
34  REAL (rprec), DIMENSION(:,:,:), POINTER :: a_p => null()
36  REAL (rprec), DIMENSION(:,:,:), POINTER :: a_z => null()
37 
39  REAL (rprec), DIMENSION(:,:,:), POINTER :: b_r => null()
41  REAL (rprec), DIMENSION(:,:,:), POINTER :: b_p => null()
43  REAL (rprec), DIMENSION(:,:,:), POINTER :: b_z => null()
44  END TYPE
45 
46 !-------------------------------------------------------------------------------
48 !-------------------------------------------------------------------------------
50  MODULE PROCEDURE unprimed_grid_construct_m, &
52  END INTERFACE
53 
54  CONTAINS
55 !*******************************************************************************
56 ! CONSTRUCTION SUBROUTINES
57 !*******************************************************************************
58 !-------------------------------------------------------------------------------
75 !-------------------------------------------------------------------------------
76  FUNCTION unprimed_grid_construct_m(mgrid, pgrid, p_start, p_end, &
77  & parallel, io_unit)
78 !$ USE omp_lib
80  use, INTRINSIC :: iso_fortran_env, only : output_unit
81 
82  IMPLICIT NONE
83 
84 ! Declare Arguments
86  TYPE (m_grid_class), INTENT(in) :: mgrid
87  TYPE (primed_grid_class), INTENT(in) :: pgrid
88  INTEGER, INTENT(in) :: p_start
89  INTEGER, INTENT(in) :: p_end
90  TYPE (bmw_parallel_context_class), INTENT(in) :: parallel
91  INTEGER, INTENT(in) :: io_unit
92 
93 ! local variables
94  REAL (rprec) :: start_time
95  INTEGER :: i
96  INTEGER :: ri
97  INTEGER :: zi
98  INTEGER :: vi
99  INTEGER :: num_r
100  INTEGER :: num_p
101  INTEGER :: num_z
102  REAL (rprec) :: x
103  REAL (rprec) :: y
104  REAL (rprec) :: ax
105  REAL (rprec) :: ay
106  INTEGER :: k_p
107  INTEGER :: k_m
108  REAL (rprec), DIMENSION(:), ALLOCATABLE :: r
109  REAL (rprec), DIMENSION(:), ALLOCATABLE :: z
110  REAL (rprec), DIMENSION(:), ALLOCATABLE :: r_p
111  REAL (rprec), DIMENSION(:), ALLOCATABLE :: r_m
112  REAL (rprec), DIMENSION(:), ALLOCATABLE :: cosv
113  REAL (rprec), DIMENSION(:), ALLOCATABLE :: sinv
114  REAL (rprec) :: total
115  REAL (rprec) :: done
116  REAL (rprec) :: current
117  REAL (rprec), DIMENSION(:,:,:), ALLOCATABLE :: rp
118  REAL (rprec) :: ar_p
119  REAL (rprec) :: ar_m
120  REAL (rprec) :: ap_p
121  REAL (rprec) :: ap_m
122  REAL (rprec) :: az_p
123  REAL (rprec) :: az_m
124 
125 ! Start of executable code
126  start_time = profiler_get_start_time()
127 
128  ALLOCATE(unprimed_grid_construct_m)
129 
130  num_r = SIZE(mgrid%a_r, 1)
131  num_p = SIZE(mgrid%a_p, 3)
132  num_z = SIZE(mgrid%a_z, 2)
133 
134  ALLOCATE(unprimed_grid_construct_m%a_r(num_r,num_z,num_p))
135  ALLOCATE(unprimed_grid_construct_m%a_p(num_r,num_z,num_p))
136  ALLOCATE(unprimed_grid_construct_m%a_z(num_r,num_z,num_p))
137 
138  ALLOCATE(unprimed_grid_construct_m%b_r(num_r,num_z,num_p))
139  ALLOCATE(unprimed_grid_construct_m%b_p(num_r,num_z,num_p))
140  ALLOCATE(unprimed_grid_construct_m%b_z(num_r,num_z,num_p))
141 
142  ALLOCATE(cosv(num_p))
143  ALLOCATE(sinv(num_p))
144 
145  ALLOCATE(r(num_r))
146  ALLOCATE(z(num_z))
147  ALLOCATE(r_p(num_r))
148  ALLOCATE(r_m(num_r))
149 
150  total = bmw_parallel_context_end(parallel, num_r*num_z*num_p)
151  total = ceiling(total/parallel%num_threads)
152 
153 !$OMP PARALLEL
154 !$OMP& DEFAULT(SHARED)
155 !$OMP& PRIVATE(i, ri, zi, vi, x, y, ax, ay, rp, k_p, k_m, &
156 !$OMP& ar_p, ar_m, ap_p, ap_m, az_p, az_m, current)
157 
158 ! Multi process will do an all reduce so these arrays need to be initalized.
159  IF (parallel%stride .gt. 1) THEN
160 !$OMP WORKSHARE
161  unprimed_grid_construct_m%a_r = 0.0
162  unprimed_grid_construct_m%a_p = 0.0
163  unprimed_grid_construct_m%a_z = 0.0
164  unprimed_grid_construct_m%b_r = 0.0
165  unprimed_grid_construct_m%b_p = 0.0
166  unprimed_grid_construct_m%b_z = 0.0
167  cosv = 0.0
168  sinv = 0.0
169  r = 0.0
170  z = 0.0
171  r_p = 0.0
172  r_m = 0.0
173 !$OMP END WORKSHARE
174  END IF
175 
176 !$OMP DO
177 !$OMP& SCHEDULE(STATIC)
178  DO i = bmw_parallel_context_start(parallel, num_r), &
179  & bmw_parallel_context_end(parallel, num_r)
180  r(i) = (i - 1.0)*mgrid%dr + mgrid%rmin
181  r_p(i) = r(i) + mgrid%dr
182  r_m(i) = r(i) - mgrid%dr
183  END DO
184 !$OMP END DO
185 
186 !$OMP DO
187 !$OMP& SCHEDULE(STATIC)
188  DO i = bmw_parallel_context_start(parallel, num_z), &
189  & bmw_parallel_context_end(parallel, num_z)
190  z(i) = (i - 1.0)*mgrid%dz + mgrid%zmin
191  END DO
192 !$OMP END DO
193 
194 !$OMP DO
195 !$OMP& SCHEDULE(STATIC)
196  DO i = bmw_parallel_context_start(parallel, num_p), &
197  & bmw_parallel_context_end(parallel, num_p)
198  x = (i - 1.0)*pgrid%dv
199  cosv(i) = cos(x)
200  sinv(i) = sin(x)
201  END DO
202 !$OMP END DO
203 
204 !$OMP SINGLE
205  IF (parallel%stride .gt. 1) THEN
206  CALL bmw_parallel_context_reduce(parallel, cosv)
207  CALL bmw_parallel_context_reduce(parallel, sinv)
208  CALL bmw_parallel_context_reduce(parallel, r)
209  CALL bmw_parallel_context_reduce(parallel, z)
210  CALL bmw_parallel_context_reduce(parallel, r_p)
211  CALL bmw_parallel_context_reduce(parallel, r_m)
212  END IF
213 !$OMP END SINGLE
214 
215  current = 0.0
216 
217  ALLOCATE(rp(SIZE(pgrid%x, 1), &
218  & SIZE(pgrid%x, 2), &
219  & SIZE(pgrid%x, 3)))
220 
221 !$OMP DO
222 !$OMP& SCHEDULE(STATIC)
223  DO i = bmw_parallel_context_start(parallel, num_r*num_z*num_p), &
224  & bmw_parallel_context_end(parallel, num_r*num_z*num_p)
225  ri = bmw_parallel_context_i(i, num_r)
226  zi = bmw_parallel_context_j(i, num_r, num_z)
227  vi = bmw_parallel_context_k(i, num_r, num_z)
228 
229  IF (parallel%offset .eq. 0) THEN
230 !$ IF (OMP_GET_THREAD_NUM() .eq. 0) THEN
231  current = current + 1.0
232  done = 100.0*current/total
233 
234  WRITE (io_unit,1000,advance='NO') &
235  & clear_screen, progress(mod(int(current),4)), done
236 
237  IF (io_unit .ne. output_unit) THEN
238  backspace(io_unit)
239  END IF
240 !$ END IF
241  END IF
242 
243  x = r(ri)*cosv(vi)
244  y = r(ri)*sinv(vi)
245 
246  rp = sqrt((pgrid%x - x)**2.0 + (pgrid%y - y)**2.0 + &
247  & (pgrid%z - z(zi))**2.0)
248 
249  ax = sum(pgrid%j_x/rp)*pgrid%dvol
250  ay = sum(pgrid%j_y/rp)*pgrid%dvol
251 
252  unprimed_grid_construct_m%a_r(ri,zi,vi) = &
253  & x/r(ri)*ax + y/r(ri)*ay + mgrid%a_r(ri,zi,vi)
254  unprimed_grid_construct_m%a_p(ri,zi,vi) = &
255  & -y/r(ri)*ax + x/r(ri)*ay + mgrid%a_p(ri,zi,vi)
256  unprimed_grid_construct_m%a_z(ri,zi,vi) = &
257  & sum(pgrid%j_z/rp)*pgrid%dvol + mgrid%a_z(ri,zi,vi)
258  END DO
259 !$OMP END DO
260 
261  DEALLOCATE(rp)
262 
263 !$OMP SINGLE
264 ! Multi process did not fill out the entire array. Get the missing pieces from
265 ! the other processes.
266  IF (parallel%stride .gt. 1) THEN
267  CALL bmw_parallel_context_reduce(parallel, &
269  CALL bmw_parallel_context_reduce(parallel, &
271  CALL bmw_parallel_context_reduce(parallel, &
273  END IF
274 !$OMP END SINGLE
275 
276 !$OMP DO
277 !$OMP& SCHEDULE(STATIC)
278  DO i = bmw_parallel_context_start(parallel, num_p*num_r*num_z), &
279  & bmw_parallel_context_end(parallel, num_p*num_r*num_z)
280  ri = bmw_parallel_context_i(i, num_r)
281  zi = bmw_parallel_context_j(i, num_r, num_z)
282  vi = bmw_parallel_context_k(i, num_r, num_z)
283 
284  IF (ri .eq. 1 .or. ri .eq. num_r .or. &
285  & zi .eq. 1 .or. zi .eq. num_z) THEN
286  unprimed_grid_construct_m%b_r(ri,zi,vi) = 0.0
287  unprimed_grid_construct_m%b_p(ri,zi,vi) = 0.0
288  unprimed_grid_construct_m%b_z(ri,zi,vi) = 0.0
289  ELSE
290  IF (num_p .eq. 1) THEN
291  k_p = 1
292  k_m = 1
293  ELSE
294  IF (vi .eq. 1) THEN
295  k_p = 2
296  k_m = num_p
297  ELSE IF (vi .eq. num_p) THEN
298  k_p = 1
299  k_m = num_p - 1
300  ELSE
301  k_p = vi + 1
302  k_m = vi - 1
303  END IF
304  END IF
305 
306 ! 1/rdazdp - dapdz
307  az_p = unprimed_grid_construct_m%a_z(ri,zi,k_p)
308  az_m = unprimed_grid_construct_m%a_z(ri,zi,k_m)
309  ap_p = unprimed_grid_construct_m%a_p(ri,zi + 1,vi)
310  ap_m = unprimed_grid_construct_m%a_p(ri,zi - 1,vi)
311  unprimed_grid_construct_m%b_r(ri,zi,vi) = &
312  & (az_p - az_m)/(2.0*pgrid%dv*r(ri)) - &
313  & (ap_p - ap_m)/(2.0*mgrid%dz)
314 
315 ! dardz - dazdr
316  ar_p = unprimed_grid_construct_m%a_r(ri,zi + 1,vi)
317  ar_m = unprimed_grid_construct_m%a_r(ri,zi - 1,vi)
318  az_p = unprimed_grid_construct_m%a_z(ri + 1,zi,vi)
319  az_m = unprimed_grid_construct_m%a_z(ri - 1,zi,vi)
320  unprimed_grid_construct_m%b_p(ri,zi,vi) = &
321  & (ar_p - ar_m)/(2.0*mgrid%dz) - &
322  & (az_p - az_m)/(2.0*mgrid%dr)
323 
324 ! 1/r(drapdr - dardp)
325  ar_p = unprimed_grid_construct_m%a_r(ri,zi,k_p)
326  ar_m = unprimed_grid_construct_m%a_r(ri,zi,k_m)
327  ap_p = unprimed_grid_construct_m%a_p(ri + 1,zi,vi)
328  ap_m = unprimed_grid_construct_m%a_p(ri - 1,zi,vi)
329  unprimed_grid_construct_m%b_z(ri,zi,vi) = &
330  & (r_p(ri)*ap_p - r_m(ri)*ap_m)/(2.0*mgrid%dr*r(ri)) - &
331  & (ar_p - ar_m)/(2.0*pgrid%dv*r(ri))
332 
333  END IF
334  END DO
335 !$OMP END DO
336 !$OMP END PARALLEL
337 
338  IF (parallel%stride .gt. 1) THEN
339  CALL bmw_parallel_context_reduce(parallel, &
341  CALL bmw_parallel_context_reduce(parallel, &
343  CALL bmw_parallel_context_reduce(parallel, &
345  END IF
346 
347  DEALLOCATE(cosv)
348  DEALLOCATE(sinv)
349  DEALLOCATE(r)
350  DEALLOCATE(z)
351  DEALLOCATE(r_p)
352  DEALLOCATE(r_m)
353 
354  IF (parallel%offset .eq. 0) THEN
355  WRITE (io_unit,1001) clear_screen
356  END IF
357 
358  CALL profiler_set_stop_time('unprimed_grid_construct_m', &
359  & start_time)
360 
361 1000 FORMAT(a,a,f6.2,' % Finished')
362 1001 FORMAT(a,'Unprimed Grid Finished')
363 
364  END FUNCTION
365 
366 !-------------------------------------------------------------------------------
385 !-------------------------------------------------------------------------------
386  FUNCTION unprimed_grid_construct_a(mgrid, pgrid, r_grid, z_grid, &
387  & dphi, parallel, io_unit)
388 !$ USE omp_lib
390  use, INTRINSIC :: iso_fortran_env, only : output_unit
391 ! USE stel_constants, ONLY: twopi ! TEMP
392 
393  IMPLICIT NONE
394 
395 ! Declare Arguments
397  TYPE (m_grid_class), INTENT(in) :: mgrid
398  TYPE (primed_grid_class), INTENT(in) :: pgrid
399  REAL (rprec), DIMENSION(:,:,:), INTENT(in) :: r_grid
400  REAL (rprec), DIMENSION(:,:,:), INTENT(in) :: z_grid
401  REAL (rprec), INTENT(in) :: dphi
402  TYPE (bmw_parallel_context_class), INTENT(in) :: parallel
403  INTEGER, INTENT(in) :: io_unit
404 
405 ! local variables
406  REAL (rprec) :: start_time
407  INTEGER :: num_1
408  INTEGER :: num_2
409  INTEGER :: num_3
410  REAL (rprec) :: current
411  REAL (rprec) :: done
412  REAL (rprec) :: total
413  INTEGER :: i
414  INTEGER :: ai
415  INTEGER :: aj
416  INTEGER :: ak
417  REAL (rprec), DIMENSION(:,:,:), ALLOCATABLE :: rp
418  REAL (rprec) :: ax
419  REAL (rprec) :: ay
420  REAL (rprec) :: x
421  REAL (rprec) :: y
422  REAL (rprec) :: z
423  REAL (rprec) :: r
424  REAL (rprec), DIMENSION(:), ALLOCATABLE :: phi
425  REAL (rprec), DIMENSION(:), ALLOCATABLE :: cosv
426  REAL (rprec), DIMENSION(:), ALLOCATABLE :: sinv
427 
428 ! Start of executable code
429  start_time = profiler_get_start_time()
430 
431  IF (maxval(r_grid) .gt. mgrid%rmax .or. &
432  & minval(r_grid) .lt. mgrid%rmin .or. &
433  & maxval(z_grid) .gt. mgrid%zmax .or. &
434  & minval(z_grid) .lt. mgrid%zmin) THEN
435  IF (parallel%offset .eq. 0) THEN
436  WRITE (io_unit, 2000)
437  END IF
439  END IF
440 
441  ALLOCATE(unprimed_grid_construct_a)
442 
443  num_1 = SIZE(r_grid, 1)
444  num_2 = SIZE(r_grid, 2)
445  num_3 = SIZE(r_grid, 3)
446 
447  ALLOCATE(unprimed_grid_construct_a%a_r(num_1,num_2,num_3))
448  ALLOCATE(unprimed_grid_construct_a%a_p(num_1,num_2,num_3))
449  ALLOCATE(unprimed_grid_construct_a%a_z(num_1,num_2,num_3))
450 
451  ALLOCATE(cosv(num_2))
452  ALLOCATE(sinv(num_2))
453  ALLOCATE(phi(num_2))
454 
455  total = bmw_parallel_context_end(parallel, num_1*num_2*num_3)
456  total = ceiling(total/parallel%num_threads)
457 
458 !$OMP PARALLEL
459 !$OMP& DEFAULT(SHARED)
460 !$OMP& PRIVATE(i, ai, aj, ak, r, x, y, z, ax, ay, current, rp)
461 
462 ! Multi process will do an all reduce so these arrays need to be initalized.
463  IF (parallel%stride .gt. 1) THEN
464 !$OMP WORKSHARE
465  unprimed_grid_construct_a%a_r = 0.0
466  unprimed_grid_construct_a%a_p = 0.0
467  unprimed_grid_construct_a%a_z = 0.0
468  cosv = 0.0
469  sinv = 0.0
470  phi = 0.0
471 !$OMP END WORKSHARE
472  END IF
473 
474 !$OMP DO
475 !$OMP& SCHEDULE(STATIC)
476  DO i = bmw_parallel_context_start(parallel, num_2), &
477  & bmw_parallel_context_end(parallel, num_2)
478  phi(i) = (i - 1.0)*dphi
479  cosv(i) = cos(phi(i))
480  sinv(i) = sin(phi(i))
481  END DO
482 !$OMP END DO
483 
484 !$OMP SINGLE
485  IF (parallel%stride .gt. 1) THEN
486  CALL bmw_parallel_context_reduce(parallel, cosv)
487  CALL bmw_parallel_context_reduce(parallel, sinv)
488  CALL bmw_parallel_context_reduce(parallel, phi)
489  END IF
490 !$OMP END SINGLE
491 
492  current = 0.0
493 
494  ALLOCATE(rp(SIZE(pgrid%x, 1), &
495  & SIZE(pgrid%x, 2), &
496  & SIZE(pgrid%x, 3)))
497 
498 !$OMP DO
499 !$OMP& SCHEDULE(STATIC)
500  DO i = bmw_parallel_context_start(parallel, num_1*num_2*num_3), &
501  & bmw_parallel_context_end(parallel, num_1*num_2*num_3)
502  ai = bmw_parallel_context_i(i, num_1)
503  aj = bmw_parallel_context_j(i, num_1, num_2)
504  ak = bmw_parallel_context_k(i, num_1, num_2)
505 
506  IF (parallel%offset .eq. 0) THEN
507 !$ IF (OMP_GET_THREAD_NUM() .eq. 0) THEN
508  current = current + 1.0
509  done = 100.0*current/total
510 
511  WRITE (io_unit,1000,advance='NO') &
512  & clear_screen, progress(mod(int(current),4)), done
513 
514  IF (io_unit .ne. output_unit) THEN
515  backspace(io_unit)
516  END IF
517 !$ END IF
518  END IF
519 
520  r = r_grid(ai,aj,ak)
521  z = z_grid(ai,aj,ak)
522  x = r*cosv(aj)
523  y = r*sinv(aj)
524 
525  rp = sqrt((pgrid%x - x)**2.0 + &
526  & (pgrid%y - y)**2.0 + &
527  & (pgrid%z - z)**2.0)
528 
529  ax = sum(pgrid%j_x/rp)*pgrid%dvol
530  ay = sum(pgrid%j_y/rp)*pgrid%dvol
531 
532 ! Interpolate from the mgrid grid to the unprimed R Z grid to add the vacuum
533 ! vector potential.
534  CALL m_grid_interpolate(mgrid, r, phi(aj), z, &
535  & unprimed_grid_construct_a%a_r(ai,aj,ak), &
536  & unprimed_grid_construct_a%a_p(ai,aj,ak), &
537  & unprimed_grid_construct_a%a_z(ai,aj,ak))
538 
539  unprimed_grid_construct_a%a_r(ai,aj,ak) = &
540  & unprimed_grid_construct_a%a_r(ai,aj,ak) + x/r*ax + y/r*ay
541  unprimed_grid_construct_a%a_p(ai,aj,ak) = &
542  & unprimed_grid_construct_a%a_p(ai,aj,ak) - y/r*ax + x/r*ay
543  unprimed_grid_construct_a%a_z(ai,aj,ak) = &
544  & unprimed_grid_construct_a%a_z(ai,aj,ak) + &
545  & sum(pgrid%j_z/rp)*pgrid%dvol
546  END DO
547 !$OMP END DO
548 
549  DEALLOCATE(rp)
550 
551 !$OMP END PARALLEL
552 
553 ! Multi process did not fill out the entire array. Get the missing pieces from
554 ! the other processes.
555  IF (parallel%stride .gt. 1) THEN
556  CALL bmw_parallel_context_reduce(parallel, &
558  CALL bmw_parallel_context_reduce(parallel, &
560  CALL bmw_parallel_context_reduce(parallel, &
562  END IF
563 
564  IF (parallel%offset .eq. 0) THEN
565  WRITE (io_unit,1001) clear_screen
566  END IF
567 
568  CALL profiler_set_stop_time('unprimed_grid_construct_a', &
569  & start_time)
570 
571 1000 FORMAT(a,a,f6.2,' % Finished')
572 1001 FORMAT(a,'Unprimed Grid Finished')
573 
574 2000 FORMAT('Error: Unprimed grid extends beyond the mgrid grid.')
575 
576  END FUNCTION
577 
578 !*******************************************************************************
579 ! DESTRUCTION SUBROUTINES
580 !*******************************************************************************
581 !-------------------------------------------------------------------------------
587 !-------------------------------------------------------------------------------
588  SUBROUTINE unprimed_grid_destruct(this)
589 
590  IMPLICIT NONE
591 
592 ! Declare Arguments
593  TYPE (unprimed_grid_class), POINTER :: this
594 
595 ! Start of executable code
596  IF (ASSOCIATED(this%a_r)) THEN
597  DEALLOCATE(this%a_r)
598  this%a_r => null()
599  END IF
600 
601  IF (ASSOCIATED(this%a_p)) THEN
602  DEALLOCATE(this%a_p)
603  this%a_p => null()
604  END IF
605 
606  IF (ASSOCIATED(this%a_z)) THEN
607  DEALLOCATE(this%a_z)
608  this%a_z => null()
609  END IF
610 
611  IF (ASSOCIATED(this%b_r)) THEN
612  DEALLOCATE(this%b_r)
613  this%b_r => null()
614  END IF
615 
616  IF (ASSOCIATED(this%b_p)) THEN
617  DEALLOCATE(this%b_p)
618  this%b_p => null()
619  END IF
620 
621  IF (ASSOCIATED(this%b_z)) THEN
622  DEALLOCATE(this%b_z)
623  this%b_z => null()
624  END IF
625 
626  DEALLOCATE(this)
627 
628  END SUBROUTINE
629 
630  END MODULE
primed_grid::primed_grid_class
Base class representing a primed grid. This is grid the volume integral will be summed over.
Definition: primed_grid.f:27
profiler
Defines functions for measuring an tabulating performance of function and subroutine calls....
Definition: profiler.f:13
m_grid::m_grid_interpolate
pure subroutine m_grid_interpolate(this, r, phi, z, ar, ap, az)
Interpolate the vector potential at a point.
Definition: m_grid.f:239
bmw_parallel_context::bmw_parallel_context_k
pure integer function bmw_parallel_context_k(index, num_i, num_j)
Compute the k index of a flat array.
Definition: bmw_parallel_context.f:566
bmw_state_flags
Contains parameters defining the bit positions for flags that mark different options.
Definition: bmw_state_flags.f:11
unprimed_grid::unprimed_grid_construct_a
type(unprimed_grid_class) function, pointer unprimed_grid_construct_a(mgrid, pgrid, r_grid, z_grid, dphi, parallel, io_unit)
Construct a unprimed_grid_class object at specfied points.
Definition: unprimed_grid.f:388
m_grid
Defines the base class of the type m_grid_class. This contains the state variables to define the vacu...
Definition: m_grid.f:11
bmw_parallel_context::bmw_parallel_context_start
pure integer function bmw_parallel_context_start(this, total)
Compute the start index of a flat array.
Definition: bmw_parallel_context.f:429
bmw_parallel_context
Defines the base class of the type bmw_parallel_context_class. This contains the state variables need...
Definition: bmw_parallel_context.f:11
unprimed_grid
Defines the base class of the type unprimed_grid_class. This contains the state variables to define t...
Definition: unprimed_grid.f:12
bmw_parallel_context::bmw_parallel_context_i
pure integer function bmw_parallel_context_i(index, num_i)
Compute the i index of a flat array.
Definition: bmw_parallel_context.f:515
profiler::profiler_get_start_time
real(rprec) function profiler_get_start_time()
Gets the start time of profiled function.
Definition: profiler.f:194
bmw_state_flags::progress
character(len=3), dimension(0:3), parameter progress
Progress indicator.
Definition: bmw_state_flags.f:22
bmw_parallel_context::bmw_parallel_context_j
pure integer function bmw_parallel_context_j(index, num_i, num_j)
Compute the j index of a flat array.
Definition: bmw_parallel_context.f:540
bmw_parallel_context::bmw_parallel_context_abort
subroutine bmw_parallel_context_abort(status)
Abort the entire program.
Definition: bmw_parallel_context.f:177
unprimed_grid::unprimed_grid_class
Base class representing a unprimed grid. This is grid the volume integral will be summed over.
Definition: unprimed_grid.f:30
bmw_state_flags::clear_screen
character(len= *), parameter clear_screen
Clear screen output.
Definition: bmw_state_flags.f:19
unprimed_grid::unprimed_grid_destruct
subroutine unprimed_grid_destruct(this)
Deconstruct a unprimed_grid_class object.
Definition: unprimed_grid.f:589
unprimed_grid::unprimed_grid_construct_m
type(unprimed_grid_class) function, pointer unprimed_grid_construct_m(mgrid, pgrid, p_start, p_end, parallel, io_unit)
Construct a unprimed_grid_class object.
Definition: unprimed_grid.f:78
bmw_parallel_context::bmw_parallel_context_reduce
Interface for the buffer reduction.
Definition: bmw_parallel_context.f:49
m_grid::m_grid_class
Base class representing a m grid. This is grid contains information about the vacuum fields.
Definition: m_grid.f:26
profiler::profiler_set_stop_time
subroutine profiler_set_stop_time(symbol_name, start_time)
Gets the end time of profiled function.
Definition: profiler.f:121
bmw_parallel_context::bmw_parallel_context_class
Base class representing a bmw parallel context. This contains all memory needed parameters needed to ...
Definition: bmw_parallel_context.f:26
bmw_parallel_context::bmw_parallel_context_end
pure integer function bmw_parallel_context_end(this, total)
Compute the end index of a flat array.
Definition: bmw_parallel_context.f:472
unprimed_grid::unprimed_grid_construct
Interface to constructors.
Definition: unprimed_grid.f:49
primed_grid
Defines the base class of the type primed_grid_class. This contains the state variables to define the...
Definition: primed_grid.f:11