SFEMaNS  version 4.1 (work in progress)
Reference documentation for SFEMaNS
 All Classes Files Functions Variables Groups Pages
st_csr_mhd.f90
Go to the documentation of this file.
1 MODULE st_csr_mhd
3 
4  PRIVATE
5 #include "petsc/finclude/petsc.h"
6 
7 CONTAINS
8 
9  SUBROUTINE st_scr_maxwell_mu_h_p_phi(communicator, H_mesh_glob, H_mesh, pmag_mesh_glob, pmag_mesh, &
10  phi_mesh_glob, phi_mesh, interface_glob, interface_h_mu_glob, &
11  la_h, la_pmag, la_phi, la_mhd, opt_per)
12  USE my_util
13  USE def_type_mesh
14  USE st_matrix
15  IMPLICIT NONE
16  TYPE(mesh_type), INTENT(IN) :: h_mesh_glob, pmag_mesh_glob, phi_mesh_glob
17  TYPE(mesh_type), INTENT(IN) :: h_mesh, pmag_mesh, phi_mesh
18  TYPE(interface_type), INTENT(IN) :: interface_glob, interface_h_mu_glob
19  TYPE(periodic_type), OPTIONAL, INTENT(IN) :: opt_per
20  TYPE(petsc_csr_la), INTENT(OUT):: la_h, la_pmag, la_phi, la_mhd
21  INTEGER, PARAMETER :: param=200
22  INTEGER, DIMENSION(param) :: a_d
23  INTEGER, DIMENSION(SIZE(H_mesh_glob%jj,1)) :: jj_loc, jj_loc1, jj_loc2
24  INTEGER, DIMENSION(:,:), POINTER :: ja_work
25  INTEGER, DIMENSION(:), POINTER :: nja_glob
26  INTEGER :: np_glob, np_h, np_pmag, np_phi, np_m, code, rank, dp, n_a_d, &
27  iglob, jglob, iloc, jloc, ni, nj, ci, m, mi, mj, m1, m2, i ,j, k, ki, kj, &
28  jmin, jmax, p, nnz, p_i, p_f, ms, nb_procs, proc
29  LOGICAL :: out
30  INTEGER, DIMENSION(:), ALLOCATABLE :: per_loc
31  INTEGER :: njt, i1, i2
32  mpi_comm :: communicator
33 
34  CALL mpi_comm_rank(communicator,rank,code)
35  CALL mpi_comm_size(communicator,nb_procs,code)
36 
37 
38  CALL st_aij_csr_glob_block(communicator,3,h_mesh_glob,h_mesh,la_h)
39  CALL st_aij_csr_glob_block(communicator,1,pmag_mesh_glob,pmag_mesh,la_pmag)
40  CALL st_aij_csr_glob_block(communicator,1,phi_mesh_glob,phi_mesh,la_phi)
41 
42  np_h = 3*h_mesh%dom_np
43  np_pmag = pmag_mesh%dom_np
44  np_phi = phi_mesh%dom_np
45  np_glob = np_h + np_pmag + np_phi
46  np_m = h_mesh%dom_np
47 
48 
49  ! Modify LA_H, LA_pmag, LA_phi
50  dp = 3*(h_mesh%disp(rank+1)-1)+(pmag_mesh%disp(rank+1)-1)+(phi_mesh%disp(rank+1)-1)
51 
52 !!$ WRITE(*,*) rank, 'H deb', MINVAL(LA_H%loc_to_glob(1,1:H_mesh%dom_np)), MAXVAL(LA_H%loc_to_glob(3,1:H_mesh%dom_np))
53 !!$ WRITE(*,*) rank, 'pmag deb', MINVAL(LA_pmag%loc_to_glob(1,1:pmag_mesh%dom_np)), MAXVAL(LA_pmag%loc_to_glob(1,1:pmag_mesh%dom_np))
54 !!$ WRITE(*,*) rank, 'phi deb', MINVAL(LA_phi%loc_to_glob(1,1:phi_mesh%dom_np)), MAXVAL(LA_phi%loc_to_glob(1,1:phi_mesh%dom_np))
55 
56 !!$ DO i = 1, H_mesh%dom_np
57 !!$ DO k = 1, 3
58 !!$ LA_H%loc_to_glob(k,i) = LA_H%loc_to_glob(k,i)-3*(H_mesh%disp(rank+1)-1) + dp !+ (k-1)*np_m
59 !!$ END DO
60 !!$ END DO
61 !!$ DO i = 1, pmag_mesh%dom_np
62 !!$ LA_pmag%loc_to_glob(1,i) = LA_pmag%loc_to_glob(1,i) - (pmag_mesh%disp(rank+1)-1) +dp + np_H
63 !!$ END DO
64 !!$ DO i = 1, phi_mesh%dom_np
65 !!$ LA_phi%loc_to_glob(1,i) = LA_phi%loc_to_glob(1,i) - (phi_mesh%disp(rank+1)-1) + dp + np_H + np_pmag
66 !!$ END DO
67 
68 
69  DO i = 1, h_mesh%np
70  DO k = 1, 3
71  CALL search_index_block(h_mesh, la_h%loc_to_glob(k,i),rank, 3, nb_procs, iloc, proc, out)
72  la_h%loc_to_glob(k,i) = 3*(h_mesh%disp(proc)-1)+(pmag_mesh%disp(proc)-1)+(phi_mesh%disp(proc)-1)+ iloc
73  END DO
74  END DO
75 
76  DO i = 1, pmag_mesh%np
77  CALL search_index_block(pmag_mesh, la_pmag%loc_to_glob(1,i),rank, 1, nb_procs, iloc, proc, out)
78  la_pmag%loc_to_glob(1,i) =3*(h_mesh%disp(proc)-1)+(pmag_mesh%disp(proc)-1)+(phi_mesh%disp(proc)-1) &
79  + 3*h_mesh%domnp(proc) + iloc
80  END DO
81  DO i = 1, phi_mesh%np
82  CALL search_index_block(phi_mesh, la_phi%loc_to_glob(1,i), rank, 1, nb_procs, iloc, proc, out)
83  la_phi%loc_to_glob(1,i) =3*(h_mesh%disp(proc)-1)+(pmag_mesh%disp(proc)-1)+(phi_mesh%disp(proc)-1) &
84  + 3*h_mesh%domnp(proc) +pmag_mesh%domnp(proc) + iloc
85  END DO
86 
87  ! End Modify LA_H, LA_pmag, LA_phi
88 
89  ALLOCATE(ja_work(np_glob,param),nja_glob(np_glob))
90  ALLOCATE(per_loc(2*param))
91  nja_glob = 0
92 
93  ! Block HxH
94  IF (h_mesh%me /=0) THEN
95  DO m = 1, h_mesh_glob%me
96  DO ni = 1, SIZE(h_mesh%jj,1)
97  iglob = h_mesh_glob%jj(ni,m)
98  IF (iglob<h_mesh%loc_to_glob(1) .OR. iglob>h_mesh%loc_to_glob(1) + h_mesh%dom_np -1) cycle
99  DO nj = 1, SIZE(h_mesh%jj,1)
100  jglob = h_mesh_glob%jj(nj,m)
101  CALL search_index(h_mesh,jglob,nb_procs,jloc,proc,out)
102  DO kj = 1, 3
103  IF (out) THEN
104  j = 3*(h_mesh%disp(proc)-1)+(pmag_mesh%disp(proc)-1)+(phi_mesh%disp(proc)-1) + (kj-1)*h_mesh%domnp(proc) &
105  + jloc
106  ELSE
107  j = la_h%loc_to_glob(kj,jloc)
108  END IF
109  DO ki = 1, 3
110  i = iglob - h_mesh%loc_to_glob(1)+1 + (ki-1)*np_m
111  IF (minval(abs(ja_work(i,1:nja_glob(i))-j)) /= 0) THEN
112  nja_glob(i) = nja_glob(i) + 1
113  ja_work(i,nja_glob(i)) = j
114  END IF
115  END DO
116  END DO
117 
118  END DO
119  END DO
120  END DO
121  END IF
122  ! Block HxH
123 
124  ! Block pxp
125  DO i = 1, np_pmag
126  iglob = i + np_h
127  nnz = la_pmag%ia(i) - la_pmag%ia(i-1) !LA is C indexed
128  p_i = la_pmag%ia(i-1)
129  p_f = la_pmag%ia(i)-1
130  DO p = p_i, p_f
131  jglob = la_pmag%ja(p)+1
132  CALL search_index_block(pmag_mesh, jglob, rank, 1, nb_procs,jloc,proc,out)
133  IF (out) THEN
134  j = 3*(h_mesh%disp(proc)-1)+(pmag_mesh%disp(proc)-1)+(phi_mesh%disp(proc)-1) + 3*h_mesh%domnp(proc) + jloc
135  ELSE
136  j = la_pmag%loc_to_glob(1,jloc)
137  END IF
138  ja_work(iglob,p-p_i+1) = j
139  END DO
140  nja_glob(iglob) = nnz
141  END DO
142  ! End Block pxp
143 
144  ! Block phixphi
145  DO i = 1, np_phi
146  iglob = i + np_h + np_pmag
147  nnz = la_phi%ia(i) - la_phi%ia(i-1) !LA is C indexed
148  p_i = la_phi%ia(i-1)
149  p_f = la_phi%ia(i)-1
150  DO p = p_i, p_f
151  jglob = la_phi%ja(p)+1
152  CALL search_index_block(phi_mesh,jglob, rank, 1, nb_procs,jloc,proc,out)
153  IF (out) THEN
154  j = 3*(h_mesh%disp(proc)-1)+(pmag_mesh%disp(proc)-1)+(phi_mesh%disp(proc)-1) &
155  + 3*h_mesh%domnp(proc) + pmag_mesh%domnp(proc) + jloc
156  ELSE
157  j = la_phi%loc_to_glob(1,jloc)
158  END IF
159  ja_work(iglob,p-p_i+1) = j
160  END DO
161  nja_glob(iglob) = nnz
162  END DO
163  ! End Block phixphi
164 
165  ! Cleanup
166  nullify(la_h%ia,la_h%ja,la_pmag%ia,la_pmag%ja,la_phi%ia,la_phi%ja)
167  ! Cleanup
168 
169  ! Block Hxp and pxH
170  IF (h_mesh%me /=0) THEN
171  DO m = 1, h_mesh_glob%me
172  jj_loc = h_mesh_glob%jj(:,m)
173  IF (maxval(jj_loc)<h_mesh%loc_to_glob(1) .OR. minval(jj_loc)>h_mesh%loc_to_glob(1) + h_mesh%dom_np -1) cycle
174  DO ni = 1, SIZE(h_mesh%jj,1)
175  iglob = jj_loc(ni)
176 
177  DO nj = 1, SIZE(pmag_mesh%jj,1)
178  jglob = pmag_mesh_glob%jj(nj,m)
179  CALL search_index(pmag_mesh,jglob,nb_procs,jloc,proc,out)
180  IF (out) THEN
181  j = 3*(h_mesh%disp(proc)-1)+(pmag_mesh%disp(proc)-1)+(phi_mesh%disp(proc)-1) + 3*h_mesh%domnp(proc) + jloc
182  ELSE
183  j = la_pmag%loc_to_glob(1,jloc)
184  END IF
185 
186  IF (iglob.GE.h_mesh%loc_to_glob(1) .AND. iglob.LE.h_mesh%loc_to_glob(1) + h_mesh%dom_np -1) THEN
187  i = iglob - h_mesh%loc_to_glob(1)+1
188  IF (minval(abs(ja_work(i,1:nja_glob(i))-j)) /= 0) THEN
189  nja_glob(i) = nja_glob(i) + 1
190  nja_glob(i+np_m) = nja_glob(i+np_m) + 1
191  nja_glob(i+2*np_m) = nja_glob(i+2*np_m) + 1
192  ja_work(i,nja_glob(i)) = j
193  ja_work(i+np_m,nja_glob(i+np_m)) = j
194  ja_work(i+2*np_m,nja_glob(i+2*np_m)) = j
195  END IF
196  END IF
197 
198  IF (.NOT.out) THEN
199  i = np_h + jloc
200  CALL search_index(h_mesh,iglob,nb_procs,iloc,proc,out)
201  DO k = 1, 3
202  IF (out) THEN
203  j = 3*(h_mesh%disp(proc)-1)+(pmag_mesh%disp(proc)-1)+(phi_mesh%disp(proc)-1) &
204  + (k-1)*h_mesh%domnp(proc) + iloc
205  ELSE
206  j = la_h%loc_to_glob(k,iloc)
207  END IF
208  IF (minval(abs(ja_work(i,1:nja_glob(i))-j)) /= 0) THEN
209  nja_glob(i) = nja_glob(i) + 1
210  ja_work(i,nja_glob(i)) = j
211  END IF
212  END DO
213  END IF
214 
215  END DO
216  END DO
217  END DO
218  END IF
219  ! End Block Hxp and pxH
220 
221  ! Interface_H_mu
222  IF (h_mesh%me /=0) THEN
223  DO ms = 1, interface_h_mu_glob%mes
224  m1 = h_mesh_glob%neighs(interface_h_mu_glob%mesh1(ms))
225  m2 = h_mesh_glob%neighs(interface_h_mu_glob%mesh2(ms))
226 
227  jj_loc1 = h_mesh_glob%jj(:,m1)
228  jj_loc2 = h_mesh_glob%jj(:,m2)
229  jmin = min(minval(jj_loc1),minval(jj_loc2))
230  jmax = max(maxval(jj_loc1),maxval(jj_loc2))
231 
232  IF (jmax<h_mesh%loc_to_glob(1) .OR. jmin>h_mesh%loc_to_glob(1) + h_mesh%dom_np -1) cycle
233 
234  DO ci = 1, 2
235  IF (ci==1) THEN
236  mi = m1
237  mj = m2
238  ELSE
239  mi = m2
240  mj = m1
241  END IF
242 
243  DO ni = 1, SIZE(h_mesh%jj,1)
244  iglob = h_mesh_glob%jj(ni,mi)
245  IF (iglob < h_mesh%loc_to_glob(1) .OR. iglob > h_mesh%loc_to_glob(1) + h_mesh%dom_np -1) cycle
246 
247  DO nj = 1, SIZE(h_mesh%jj,1)
248  jglob = h_mesh_glob%jj(nj,mj)
249  CALL search_index(h_mesh,jglob,nb_procs,jloc,proc,out)
250  DO kj = 1, 3
251  IF (out) THEN
252  j = 3*(h_mesh%disp(proc)-1)+(pmag_mesh%disp(proc)-1)+(phi_mesh%disp(proc)-1) &
253  + (kj-1)*h_mesh%domnp(proc) + jloc
254  ELSE
255  j = la_h%loc_to_glob(kj,jloc)
256  END IF
257  DO ki = 1, 3
258  i = iglob - h_mesh%loc_to_glob(1) + 1 + (ki-1)*np_m
259  IF (minval(abs(ja_work(i,1:nja_glob(i))-j)) == 0) cycle
260  nja_glob(i) = nja_glob(i) + 1
261  ja_work(i,nja_glob(i)) = j
262  END DO
263  END DO
264  END DO
265  END DO
266  END DO
267  END DO
268  END IF
269  ! End Interface_H_mu
270 
271  ! Interface_H_phi
272  IF (h_mesh%me*phi_mesh%me /=0) THEN
273  DO ms = 1, interface_glob%mes
274  m1 = h_mesh_glob%neighs(interface_glob%mesh1(ms))
275  m2 = phi_mesh_glob%neighs(interface_glob%mesh2(ms))
276 
277  DO ni = 1, SIZE(h_mesh%jj,1)
278  iglob = h_mesh_glob%jj(ni,m1)
279  IF (iglob < h_mesh%loc_to_glob(1) .OR. iglob > h_mesh%loc_to_glob(1) + h_mesh%dom_np -1) cycle
280 
281  DO nj = 1, SIZE(phi_mesh%jj,1)
282  jglob = phi_mesh_glob%jj(nj,m2)
283  CALL search_index(phi_mesh,jglob,nb_procs,jloc,proc,out)
284  IF (out) THEN
285  j = 3*(h_mesh%disp(proc)-1)+(pmag_mesh%disp(proc)-1)+(phi_mesh%disp(proc)-1) &
286  + 3*h_mesh%domnp(proc) + pmag_mesh%domnp(proc) + jloc
287  ELSE
288  j = la_phi%loc_to_glob(1,jloc)
289  END IF
290  DO ki = 1, 3
291  i = iglob - h_mesh%loc_to_glob(1) + 1 + (ki-1)*np_m
292  IF (minval(abs(ja_work(i,1:nja_glob(i))-j)) == 0) cycle
293  nja_glob(i) = nja_glob(i) + 1
294  ja_work(i,nja_glob(i)) = j
295  END DO
296  END DO
297  END DO
298 
299  DO ni = 1, SIZE(phi_mesh%jj,1)
300  iglob = phi_mesh_glob%jj(ni,m2)
301  IF (iglob < phi_mesh%loc_to_glob(1) .OR. iglob > phi_mesh%loc_to_glob(1) + phi_mesh%dom_np -1) cycle
302  i = iglob - phi_mesh%loc_to_glob(1) + 1 + np_h + np_pmag
303  DO nj = 1, SIZE(h_mesh%jj,1)
304  jglob = h_mesh_glob%jj(nj,m1)
305  CALL search_index(h_mesh,jglob,nb_procs,jloc,proc,out)
306  DO kj = 1, 3
307  IF (out) THEN
308  j = 3*(h_mesh%disp(proc)-1)+(pmag_mesh%disp(proc)-1)+(phi_mesh%disp(proc)-1) &
309  + (kj-1)*h_mesh%domnp(proc) + jloc
310  ELSE
311  j = la_h%loc_to_glob(kj,jloc)
312  END IF
313  IF (minval(abs(ja_work(i,1:nja_glob(i))-j)) == 0) cycle
314  nja_glob(i) = nja_glob(i) + 1
315  ja_work(i,nja_glob(i)) = j
316  END DO
317  END DO
318  END DO
319  END DO
320  END IF
321  ! End Interface_H_phi
322 
323  IF (present(opt_per)) THEN
324  DO k = 1, opt_per%n_bord
325  DO i = 1, SIZE(opt_per%list(k)%DIL)
326  per_loc=0
327  i1 = opt_per%list(k)%DIL(i)
328  i2 = opt_per%perlist(k)%DIL(i)
329  njt = nja_glob(i1)+nja_glob(i2)
330  IF (njt > param) THEN
331  CALL error_petsc('BUG in st_aij_glob_block, SIZE(ja) not large enough')
332  END IF
333  per_loc(1:nja_glob(i1)) = ja_work(i1,1:nja_glob(i1))
334  per_loc(nja_glob(i1)+1:njt) = ja_work(i2,1:nja_glob(i2))
335  nja_glob(i1) = njt
336  nja_glob(i2) = njt
337  ja_work(i1,1:njt) = per_loc(1:njt)
338  ja_work(i2,1:njt) = per_loc(1:njt)
339  END DO
340  END DO
341  END IF
342 
343 
344 
345  IF (maxval(nja_glob)>param) THEN
346  CALL error_petsc('ST_SPARSEKIT: dimension of ja must be >= nparm')
347  END IF
348 
349 
350  nnz = sum(nja_glob)
351  ALLOCATE(la_mhd%ia(0:np_glob),la_mhd%ja(0:nnz-1))
352  la_mhd%ia(0) = 0
353  DO i = 1, np_glob
354  CALL tri_jlg(ja_work(i,1:nja_glob(i)), a_d, n_a_d)
355  IF (n_a_d /= nja_glob(i)) THEN
356  CALL error_petsc(' BUG in st_scr_maxwell_mu_H_p_phi')
357  END IF
358  la_mhd%ia(i) = la_mhd%ia(i-1) + nja_glob(i)
359  la_mhd%ja(la_mhd%ia(i-1):la_mhd%ia(i)-1) = a_d(1:nja_glob(i))-1
360  END DO
361 
362  ALLOCATE(la_mhd%dom_np(5),la_mhd%np(5))
363 
364  la_mhd%dom_np(1:3) = h_mesh%dom_np
365  la_mhd%np(1:3) = h_mesh%np
366  la_mhd%dom_np(4) = pmag_mesh%dom_np
367  la_mhd%np(4) = pmag_mesh%np
368  la_mhd%dom_np(5) = phi_mesh%dom_np
369  la_mhd%np(5) = phi_mesh%np
370 
371  IF (ASSOCIATED(la_mhd%loc_to_glob)) DEALLOCATE(la_mhd%loc_to_glob)
372  ALLOCATE(la_mhd%loc_to_glob(1,np_glob))
373  np_h = 3*h_mesh%dom_np
374  np_pmag = pmag_mesh%dom_np
375  np_phi = phi_mesh%dom_np
376  np_m = h_mesh%dom_np
377  DO i = 1, np_m
378  DO j = 1, 3
379  la_mhd%loc_to_glob(1,(j-1)*np_m+i) = la_h%loc_to_glob(j,i)
380  END DO
381  END DO
382  DO i = 1, np_pmag
383  la_mhd%loc_to_glob(1,np_h+i) = la_pmag%loc_to_glob(1,i)
384  END DO
385  DO i = 1, np_phi
386  la_mhd%loc_to_glob(1,np_h+np_pmag+i) = la_phi%loc_to_glob(1,i)
387  END DO
388 
389  DEALLOCATE (ja_work, nja_glob)
390  DEALLOCATE (per_loc)
391 
392  END SUBROUTINE st_scr_maxwell_mu_h_p_phi
393 
394 !!$ SUBROUTINE search_index_copy(mesh,jglob,nb_procs,jloc,proc,out)
395 !!$ USE def_type_mesh
396 !!$ IMPLICIT NONE
397 !!$ TYPE(mesh_type), INTENT(IN) :: mesh
398 !!$ INTEGER , INTENT(IN) :: jglob, nb_procs
399 !!$ INTEGER , INTENT(OUT):: jloc, proc
400 !!$ LOGICAL, INTENT(OUT):: out
401 !!$ INTEGER :: p
402 !!$
403 !!$ IF (jglob< mesh%loc_to_glob(1) .OR. jglob> mesh%loc_to_glob(2)) THEN
404 !!$ DO p = 2, nb_procs+1
405 !!$ IF (mesh%disp(p) > jglob) THEN
406 !!$ proc = p - 1
407 !!$ EXIT
408 !!$ END IF
409 !!$ END DO
410 !!$ out = .TRUE.
411 !!$ jloc = jglob - mesh%disp(proc) + 1
412 !!$ ELSE
413 !!$ out = .FALSE.
414 !!$ jloc = jglob - mesh%loc_to_glob(1) + 1
415 !!$ END IF
416 !!$ END SUBROUTINE search_index_copy
417 
418  SUBROUTINE search_index(mesh,jglob,nb_procs,jloc,proc,out)
419  USE def_type_mesh
420  IMPLICIT NONE
421  TYPE(mesh_type), INTENT(IN) :: mesh
422  INTEGER , INTENT(IN) :: jglob, nb_procs
423  INTEGER , INTENT(OUT):: jloc, proc
424  LOGICAL, INTENT(OUT):: out
425  INTEGER :: p
426 
427  IF (mesh%dom_np == 0) THEN
428  DO p = 2, nb_procs+1
429  IF (mesh%disp(p) > jglob) THEN
430  proc = p - 1
431  EXIT
432  END IF
433  END DO
434  out = .true.
435  jloc = jglob - mesh%disp(proc) + 1
436  ELSE IF (jglob< mesh%loc_to_glob(1) .OR. jglob> mesh%loc_to_glob(mesh%dom_np)) THEN
437  DO p = 2, nb_procs+1
438  IF (mesh%disp(p) > jglob) THEN
439  proc = p - 1
440  EXIT
441  END IF
442  END DO
443  out = .true.
444  jloc = jglob - mesh%disp(proc) + 1
445  ELSE
446  out = .false.
447  jloc = jglob - mesh%loc_to_glob(1) + 1
448  END IF
449  END SUBROUTINE search_index
450 
451  SUBROUTINE search_index_block(mesh, jglob, rank, kmax, nb_procs, jloc, proc, out)
452  USE def_type_mesh
453  IMPLICIT NONE
454  TYPE(mesh_type), INTENT(IN) :: mesh
455  INTEGER, INTENT(IN) :: jglob,rank, kmax, nb_procs
456  INTEGER, INTENT(OUT) :: jloc, proc
457  LOGICAL, INTENT(OUT) :: out
458  INTEGER :: p
459 
460 
461  out = .true.
462  DO p = 2, nb_procs
463  IF (kmax*(mesh%disp(p)-1) .GE. jglob) THEN
464  proc = p-1
465  out = .false.
466  EXIT
467  END IF
468  END DO
469  IF (out) proc = nb_procs
470 
471  jloc = jglob - kmax*(mesh%disp(proc)-1)
472  out = (proc /= rank+1)
473 
474  END SUBROUTINE search_index_block
475 
476 
477 END MODULE st_csr_mhd
subroutine search_index_block(mesh, jglob, rank, kmax, nb_procs, jloc, proc, out)
Definition: st_csr_mhd.f90:451
subroutine, public st_scr_maxwell_mu_h_p_phi(communicator, H_mesh_glob, H_mesh, pmag_mesh_glob, pmag_mesh, phi_mesh_glob, phi_mesh, interface_glob, interface_H_mu_glob, LA_H, LA_pmag, LA_phi, LA_mhd, opt_per)
Definition: st_csr_mhd.f90:9
subroutine, public tri_jlg(a, a_d, n_a_d)
Definition: st_csr.f90:779
subroutine, public st_aij_csr_glob_block(communicator, kmax, mesh_glob, mesh, LA, opt_per)
Definition: st_csr.f90:163
subroutine search_index(mesh, jglob, nb_procs, jloc, proc, out)
Definition: st_csr_mhd.f90:418
subroutine error_petsc(string)
Definition: my_util.f90:15