Actual source code: f90_fwrap.F90
1: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2: !XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX!
3: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4: #include <petsc/finclude/petscsys.h>
5: subroutine F90Array1dCreateScalar(array, start, len1, ptr)
6: use, intrinsic :: ISO_C_binding
7: implicit none
8: PetscInt start, len1
9: PetscScalar, target :: array(start:start + len1 - 1)
10: PetscScalar, pointer :: ptr(:)
12: ptr => array
13: end subroutine
15: subroutine F90Array1dCreateReal(array, start, len1, ptr)
16: use, intrinsic :: ISO_C_binding
17: implicit none
18: PetscInt start, len1
19: PetscReal, target :: array(start:start + len1 - 1)
20: PetscReal, pointer :: ptr(:)
22: ptr => array
23: end subroutine
25: subroutine F90Array1dCreateInt(array, start, len1, ptr)
26: use, intrinsic :: ISO_C_binding
27: implicit none
28: PetscInt start, len1
29: PetscInt, target :: array(start:start + len1 - 1)
30: PetscInt, pointer :: ptr(:)
32: ptr => array
33: end subroutine
35: subroutine F90Array1dCreateBool(array, start, len1, ptr)
36: use, intrinsic :: ISO_C_binding
37: implicit none
38: PetscInt start, len1
39: PetscBool, target :: array(start:start + len1 - 1)
40: PetscBool, pointer :: ptr(:)
42: ptr => array
43: end subroutine
45: subroutine F90Array1dCreateMPIInt(array, start, len1, ptr)
46: use, intrinsic :: ISO_C_binding
47: implicit none
48: PetscInt start, len1
49: PetscMPIInt, target :: array(start:start + len1 - 1)
50: PetscMPIInt, pointer :: ptr(:)
52: ptr => array
53: end subroutine
55: subroutine F90Array1dCreateFortranAddr(array, start, len1, ptr)
56: use, intrinsic :: ISO_C_binding
57: implicit none
58: PetscInt start, len1
59: PetscFortranAddr, target :: array(start:start + len1 - 1)
60: PetscFortranAddr, pointer :: ptr(:)
62: ptr => array
63: end subroutine
65: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
66: subroutine F90Array1dAccessScalar(ptr, address)
67: use, intrinsic :: ISO_C_binding
68: implicit none
69: PetscScalar, pointer :: ptr(:)
70: PetscFortranAddr address
71: PetscInt start
73: if (.not. associated(ptr)) then
74: address = 0
75: else
76: start = lbound(ptr, 1)
77: call F90Array1dGetAddrScalar(ptr(start), address)
78: end if
79: end subroutine
81: subroutine F90Array1dAccessReal(ptr, address)
82: use, intrinsic :: ISO_C_binding
83: implicit none
84: PetscReal, pointer :: ptr(:)
85: PetscFortranAddr address
86: PetscInt start
88: if (.not. associated(ptr)) then
89: address = 0
90: else
91: start = lbound(ptr, 1)
92: call F90Array1dGetAddrReal(ptr(start), address)
93: end if
94: end subroutine
96: subroutine F90Array1dAccessInt(ptr, address)
97: use, intrinsic :: ISO_C_binding
98: implicit none
99: PetscInt, pointer :: ptr(:)
100: PetscFortranAddr address
101: PetscInt start
103: if (.not. associated(ptr)) then
104: address = 0
105: else
106: start = lbound(ptr, 1)
107: call F90Array1dGetAddrInt(ptr(start), address)
108: end if
109: end subroutine
111: subroutine F90Array1dAccessBool(ptr, address)
112: use, intrinsic :: ISO_C_binding
113: implicit none
114: PetscBool, pointer :: ptr(:)
115: PetscFortranAddr address
116: PetscInt start
118: if (.not. associated(ptr)) then
119: address = 0
120: else
121: start = lbound(ptr, 1)
122: call F90Array1dGetAddrBool(ptr(start), address)
123: end if
124: end subroutine
126: subroutine F90Array1dAccessMPIInt(ptr, address)
127: use, intrinsic :: ISO_C_binding
128: implicit none
129: PetscMPIInt, pointer :: ptr(:)
130: PetscFortranAddr address
131: PetscInt start
133: if (.not. associated(ptr)) then
134: address = 0
135: else
136: start = lbound(ptr, 1)
137: call F90Array1dGetAddrMPIInt(ptr(start), address)
138: end if
139: end subroutine
141: subroutine F90Array1dAccessFortranAddr(ptr, address)
142: use, intrinsic :: ISO_C_binding
143: implicit none
144: PetscFortranAddr, pointer :: ptr(:)
145: PetscFortranAddr address
146: PetscInt start
148: if (.not. associated(ptr)) then
149: address = 0
150: else
151: start = lbound(ptr, 1)
152: call F90Array1dGetAddrFortranAddr(ptr(start), address)
153: end if
154: end subroutine
156: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
157: subroutine F90Array1dDestroyScalar(ptr)
158: use, intrinsic :: ISO_C_binding
159: implicit none
160: PetscScalar, pointer :: ptr(:)
162: nullify (ptr)
163: end subroutine
165: subroutine F90Array1dDestroyReal(ptr)
166: use, intrinsic :: ISO_C_binding
167: implicit none
168: PetscReal, pointer :: ptr(:)
170: nullify (ptr)
171: end subroutine
173: subroutine F90Array1dDestroyInt(ptr)
174: use, intrinsic :: ISO_C_binding
175: implicit none
176: PetscInt, pointer :: ptr(:)
178: nullify (ptr)
179: end subroutine
181: subroutine F90Array1dDestroyBool(ptr)
182: use, intrinsic :: ISO_C_binding
183: implicit none
184: PetscBool, pointer :: ptr(:)
186: nullify (ptr)
187: end subroutine
189: subroutine F90Array1dDestroyMPIInt(ptr)
190: use, intrinsic :: ISO_C_binding
191: implicit none
192: PetscMPIInt, pointer :: ptr(:)
194: nullify (ptr)
195: end subroutine
197: subroutine F90Array1dDestroyFortranAddr(ptr)
198: use, intrinsic :: ISO_C_binding
199: implicit none
200: PetscFortranAddr, pointer :: ptr(:)
202: nullify (ptr)
203: end subroutine
204: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
205: !XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX!
206: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
207: subroutine F90Array2dCreateScalar(array, start1, len1, start2, len2, ptr)
208: use, intrinsic :: ISO_C_binding
209: implicit none
210: PetscInt start1, len1
211: PetscInt start2, len2
212: PetscScalar, target :: array(start1:start1 + len1 - 1, start2:start2 + len2 - 1)
213: PetscScalar, pointer :: ptr(:, :)
215: ptr => array
216: end subroutine
218: subroutine F90Array2dCreateReal(array, start1, len1, start2, len2, ptr)
219: use, intrinsic :: ISO_C_binding
220: implicit none
221: PetscInt start1, len1
222: PetscInt start2, len2
223: PetscReal, target :: array(start1:start1 + len1 - 1, start2:start2 + len2 - 1)
224: PetscReal, pointer :: ptr(:, :)
226: ptr => array
227: end subroutine
229: subroutine F90Array2dCreateInt(array, start1, len1, start2, len2, ptr)
230: use, intrinsic :: ISO_C_binding
231: implicit none
232: PetscInt start1, len1
233: PetscInt start2, len2
234: PetscInt, target :: array(start1:start1 + len1 - 1, start2:start2 + len2 - 1)
235: PetscInt, pointer :: ptr(:, :)
237: ptr => array
238: end subroutine
240: subroutine F90Array2dCreateBool(array, start1, len1, start2, len2, ptr)
241: use, intrinsic :: ISO_C_binding
242: implicit none
243: PetscInt start1, len1
244: PetscInt start2, len2
245: PetscBool, target :: array(start1:start1 + len1 - 1, start2:start2 + len2 - 1)
246: PetscBool, pointer :: ptr(:, :)
248: ptr => array
249: end subroutine
251: subroutine F90Array2dCreateFortranAddr(array, start1, len1, start2, len2, ptr)
252: use, intrinsic :: ISO_C_binding
253: implicit none
254: PetscInt start1, len1
255: PetscInt start2, len2
256: PetscFortranAddr, target :: array(start1:start1 + len1 - 1, start2:start2 + len2 - 1)
257: PetscFortranAddr, pointer :: ptr(:, :)
259: ptr => array
260: end subroutine
262: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
263: subroutine F90Array2dAccessScalar(ptr, address)
264: use, intrinsic :: ISO_C_binding
265: implicit none
266: PetscScalar, pointer :: ptr(:, :)
267: PetscFortranAddr address
268: PetscInt start1, start2
270: start1 = lbound(ptr, 1)
271: start2 = lbound(ptr, 2)
272: call F90Array2dGetAddrScalar(ptr(start1, start2), address)
273: end subroutine
275: subroutine F90Array2dAccessReal(ptr, address)
276: use, intrinsic :: ISO_C_binding
277: implicit none
278: PetscReal, pointer :: ptr(:, :)
279: PetscFortranAddr address
280: PetscInt start1, start2
282: start1 = lbound(ptr, 1)
283: start2 = lbound(ptr, 2)
284: call F90Array2dGetAddrReal(ptr(start1, start2), address)
285: end subroutine
287: subroutine F90Array2dAccessInt(ptr, address)
288: use, intrinsic :: ISO_C_binding
289: implicit none
290: PetscInt, pointer :: ptr(:, :)
291: PetscFortranAddr address
292: PetscInt start1, start2
294: start1 = lbound(ptr, 1)
295: start2 = lbound(ptr, 2)
296: call F90Array2dGetAddrInt(ptr(start1, start2), address)
297: end subroutine
299: subroutine F90Array2dAccessBool(ptr, address)
300: use, intrinsic :: ISO_C_binding
301: implicit none
302: PetscBool, pointer :: ptr(:, :)
303: PetscFortranAddr address
304: PetscInt start1, start2
306: start1 = lbound(ptr, 1)
307: start2 = lbound(ptr, 2)
308: call F90Array2dGetAddrBool(ptr(start1, start2), address)
309: end subroutine
311: subroutine F90Array2dAccessFortranAddr(ptr, address)
312: use, intrinsic :: ISO_C_binding
313: implicit none
314: PetscFortranAddr, pointer :: ptr(:, :)
315: PetscFortranAddr address
316: PetscInt start1, start2
318: start1 = lbound(ptr, 1)
319: start2 = lbound(ptr, 2)
320: call F90Array2dGetAddrFortranAddr(ptr(start1, start2), address)
321: end subroutine
323: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
324: subroutine F90Array2dDestroyScalar(ptr)
325: use, intrinsic :: ISO_C_binding
326: implicit none
327: PetscScalar, pointer :: ptr(:, :)
329: nullify (ptr)
330: end subroutine
332: subroutine F90Array2dDestroyReal(ptr)
333: use, intrinsic :: ISO_C_binding
334: implicit none
335: PetscReal, pointer :: ptr(:, :)
337: nullify (ptr)
338: end subroutine
340: subroutine F90Array2dDestroyInt(ptr)
341: use, intrinsic :: ISO_C_binding
342: implicit none
343: PetscInt, pointer :: ptr(:, :)
345: nullify (ptr)
346: end subroutine
348: subroutine F90Array2dDestroyBool(ptr)
349: use, intrinsic :: ISO_C_binding
350: implicit none
351: PetscBool, pointer :: ptr(:, :)
353: nullify (ptr)
354: end subroutine
356: subroutine F90Array2dDestroyFortranAddr(ptr)
357: use, intrinsic :: ISO_C_binding
358: implicit none
359: PetscFortranAddr, pointer :: ptr(:, :)
361: nullify (ptr)
362: end subroutine
363: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
364: !XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX!
365: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
366: subroutine F90Array3dCreateScalar(array, start1, len1, start2, len2, start3, len3, ptr)
367: use, intrinsic :: ISO_C_binding
368: implicit none
369: PetscInt start1, len1
370: PetscInt start2, len2
371: PetscInt start3, len3
372: PetscScalar, target :: array(start1:start1 + len1 - 1, start2:start2 + len2 - 1, start3:start3 + len3 - 1)
373: PetscScalar, pointer :: ptr(:, :, :)
375: ptr => array
376: end subroutine
378: subroutine F90Array3dCreateReal(array, start1, len1, start2, len2, start3, len3, ptr)
379: use, intrinsic :: ISO_C_binding
380: implicit none
381: PetscInt start1, len1
382: PetscInt start2, len2
383: PetscInt start3, len3
384: PetscReal, target :: array(start1:start1 + len1 - 1, start2:start2 + len2 - 1, start3:start3 + len3 - 1)
385: PetscReal, pointer :: ptr(:, :, :)
387: ptr => array
388: end subroutine
390: subroutine F90Array3dCreateInt(array, start1, len1, start2, len2, start3, len3, ptr)
391: use, intrinsic :: ISO_C_binding
392: implicit none
393: PetscInt start1, len1
394: PetscInt start2, len2
395: PetscInt start3, len3
396: PetscInt, target :: array(start1:start1 + len1 - 1, start2:start2 + len2 - 1, start3:start3 + len3 - 1)
397: PetscInt, pointer :: ptr(:, :, :)
399: ptr => array
400: end subroutine
402: subroutine F90Array3dCreateBool(array, start1, len1, start2, len2, start3, len3, ptr)
403: use, intrinsic :: ISO_C_binding
404: implicit none
405: PetscInt start1, len1
406: PetscInt start2, len2
407: PetscInt start3, len3
408: PetscBool, target :: array(start1:start1 + len1 - 1, start2:start2 + len2 - 1, start3:start3 + len3 - 1)
409: PetscBool, pointer :: ptr(:, :, :)
411: ptr => array
412: end subroutine
414: subroutine F90Array3dCreateFortranAddr(array, start1, len1, start2, len2, start3, len3, ptr)
415: use, intrinsic :: ISO_C_binding
416: implicit none
417: PetscInt start1, len1
418: PetscInt start2, len2
419: PetscInt start3, len3
420: PetscFortranAddr, target :: array(start1:start1 + len1 - 1, start2:start2 + len2 - 1, start3:start3 + len3 - 1)
421: PetscFortranAddr, pointer :: ptr(:, :, :)
423: ptr => array
424: end subroutine
426: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
427: subroutine F90Array3dAccessScalar(ptr, address)
428: use, intrinsic :: ISO_C_binding
429: implicit none
430: PetscScalar, pointer :: ptr(:, :, :)
431: PetscFortranAddr address
432: PetscInt start1, start2, start3
434: start1 = lbound(ptr, 1)
435: start2 = lbound(ptr, 2)
436: start3 = lbound(ptr, 3)
437: call F90Array3dGetAddrScalar(ptr(start1, start2, start3), address)
438: end subroutine
440: subroutine F90Array3dAccessReal(ptr, address)
441: use, intrinsic :: ISO_C_binding
442: implicit none
443: PetscReal, pointer :: ptr(:, :, :)
444: PetscFortranAddr address
445: PetscInt start1, start2, start3
447: start1 = lbound(ptr, 1)
448: start2 = lbound(ptr, 2)
449: start3 = lbound(ptr, 3)
450: call F90Array3dGetAddrReal(ptr(start1, start2, start3), address)
451: end subroutine
453: subroutine F90Array3dAccessInt(ptr, address)
454: use, intrinsic :: ISO_C_binding
455: implicit none
456: PetscInt, pointer :: ptr(:, :, :)
457: PetscFortranAddr address
458: PetscInt start1, start2, start3
460: start1 = lbound(ptr, 1)
461: start2 = lbound(ptr, 2)
462: start3 = lbound(ptr, 3)
463: call F90Array3dGetAddrInt(ptr(start1, start2, start3), address)
464: end subroutine
466: subroutine F90Array3dAccessBool(ptr, address)
467: use, intrinsic :: ISO_C_binding
468: implicit none
469: PetscBool, pointer :: ptr(:, :, :)
470: PetscFortranAddr address
471: PetscInt start1, start2, start3
473: start1 = lbound(ptr, 1)
474: start2 = lbound(ptr, 2)
475: start3 = lbound(ptr, 3)
476: call F90Array3dGetAddrBool(ptr(start1, start2, start3), address)
477: end subroutine
479: subroutine F90Array3dAccessFortranAddr(ptr, address)
480: use, intrinsic :: ISO_C_binding
481: implicit none
482: PetscFortranAddr, pointer :: ptr(:, :, :)
483: PetscFortranAddr address
484: PetscInt start1, start2, start3
486: start1 = lbound(ptr, 1)
487: start2 = lbound(ptr, 2)
488: start3 = lbound(ptr, 3)
489: call F90Array3dGetAddrFortranAddr(ptr(start1, start2, start3), address)
490: end subroutine
492: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
493: subroutine F90Array3dDestroyScalar(ptr)
494: use, intrinsic :: ISO_C_binding
495: implicit none
496: PetscScalar, pointer :: ptr(:, :, :)
498: nullify (ptr)
499: end subroutine
501: subroutine F90Array3dDestroyReal(ptr)
502: use, intrinsic :: ISO_C_binding
503: implicit none
504: PetscReal, pointer :: ptr(:, :, :)
506: nullify (ptr)
507: end subroutine
509: subroutine F90Array3dDestroyInt(ptr)
510: use, intrinsic :: ISO_C_binding
511: implicit none
512: PetscInt, pointer :: ptr(:, :, :)
514: nullify (ptr)
515: end subroutine
517: subroutine F90Array3dDestroyBool(ptr)
518: use, intrinsic :: ISO_C_binding
519: implicit none
520: PetscBool, pointer :: ptr(:, :, :)
522: nullify (ptr)
523: end subroutine
525: subroutine F90Array3dDestroyFortranAddr(ptr)
526: use, intrinsic :: ISO_C_binding
527: implicit none
528: PetscFortranAddr, pointer :: ptr(:, :, :)
530: nullify (ptr)
531: end subroutine
533: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
534: subroutine F90Array4dCreateScalar(array, start1, len1, start2, len2, start3, len3, start4, len4, ptr)
535: use, intrinsic :: ISO_C_binding
536: implicit none
537: PetscInt start1, len1
538: PetscInt start2, len2
539: PetscInt start3, len3
540: PetscInt start4, len4
541: PetscScalar, target :: array(start1:start1 + len1 - 1, start2:start2 + len2 - 1, start3:start3 + len3 - 1, start4:start4 + len4 - 1)
542: PetscScalar, pointer :: ptr(:, :, :, :)
544: ptr => array
545: end subroutine
547: subroutine F90Array4dCreateReal(array, start1, len1, start2, len2, start3, len3, start4, len4, ptr)
548: use, intrinsic :: ISO_C_binding
549: implicit none
550: PetscInt start1, len1
551: PetscInt start2, len2
552: PetscInt start3, len3
553: PetscInt start4, len4
554: PetscReal, target :: array(start1:start1 + len1 - 1, start2:start2 + len2 - 1, start3:start3 + len3 - 1, start4:start4 + len4 - 1)
555: PetscReal, pointer :: ptr(:, :, :, :)
557: ptr => array
558: end subroutine
560: subroutine F90Array4dCreateInt(array, start1, len1, start2, len2, start3, len3, start4, len4, ptr)
561: use, intrinsic :: ISO_C_binding
562: implicit none
563: PetscInt start1, len1
564: PetscInt start2, len2
565: PetscInt start3, len3
566: PetscInt start4, len4
567: PetscInt, target :: array(start1:start1 + len1 - 1, start2:start2 + len2 - 1, start3:start3 + len3 - 1, start4:start4 + len4 - 1)
568: PetscInt, pointer :: ptr(:, :, :, :)
570: ptr => array
571: end subroutine
573: subroutine F90Array4dCreateBool(array, start1, len1, start2, len2, start3, len3, start4, len4, ptr)
574: use, intrinsic :: ISO_C_binding
575: implicit none
576: PetscInt start1, len1
577: PetscInt start2, len2
578: PetscInt start3, len3
579: PetscInt start4, len4
580: PetscBool, target :: array(start1:start1 + len1 - 1, start2:start2 + len2 - 1, start3:start3 + len3 - 1, start4:start4 + len4 - 1)
581: PetscBool, pointer :: ptr(:, :, :, :)
583: ptr => array
584: end subroutine
586: subroutine F90Array4dCreateFortranAddr(array, start1, len1, start2, len2, start3, len3, start4, len4, ptr)
587: use, intrinsic :: ISO_C_binding
588: implicit none
589: PetscInt start1, len1
590: PetscInt start2, len2
591: PetscInt start3, len3
592: PetscInt start4, len4
593: PetscFortranAddr, target :: array(start1:start1 + len1 - 1, start2:start2 + len2 - 1, start3:start3 + len3 - 1, start4:start4 + len4 - 1)
594: PetscFortranAddr, pointer :: ptr(:, :, :, :)
596: ptr => array
597: end subroutine
599: subroutine F90Array4dAccessScalar(ptr, address)
600: use, intrinsic :: ISO_C_binding
601: implicit none
602: PetscScalar, pointer :: ptr(:, :, :, :)
603: PetscFortranAddr address
604: PetscInt start1, start2, start3, start4
606: start1 = lbound(ptr, 1)
607: start2 = lbound(ptr, 2)
608: start3 = lbound(ptr, 3)
609: start4 = lbound(ptr, 4)
610: call F90Array4dGetAddrScalar(ptr(start1, start2, start3, start4), address)
611: end subroutine
613: subroutine F90Array4dAccessReal(ptr, address)
614: use, intrinsic :: ISO_C_binding
615: implicit none
616: PetscReal, pointer :: ptr(:, :, :, :)
617: PetscFortranAddr address
618: PetscInt start1, start2, start3, start4
620: start1 = lbound(ptr, 1)
621: start2 = lbound(ptr, 2)
622: start3 = lbound(ptr, 3)
623: start4 = lbound(ptr, 4)
624: call F90Array4dGetAddrReal(ptr(start1, start2, start3, start4), address)
625: end subroutine
627: subroutine F90Array4dAccessInt(ptr, address)
628: use, intrinsic :: ISO_C_binding
629: implicit none
630: PetscInt, pointer :: ptr(:, :, :, :)
631: PetscFortranAddr address
632: PetscInt start1, start2, start3, start4
634: start1 = lbound(ptr, 1)
635: start2 = lbound(ptr, 2)
636: start3 = lbound(ptr, 3)
637: start4 = lbound(ptr, 4)
638: call F90Array4dGetAddrInt(ptr(start1, start2, start3, start4), address)
639: end subroutine
641: subroutine F90Array4dAccessBool(ptr, address)
642: use, intrinsic :: ISO_C_binding
643: implicit none
644: PetscBool, pointer :: ptr(:, :, :, :)
645: PetscFortranAddr address
646: PetscInt start1, start2, start3, start4
648: start1 = lbound(ptr, 1)
649: start2 = lbound(ptr, 2)
650: start3 = lbound(ptr, 3)
651: start4 = lbound(ptr, 4)
652: call F90Array4dGetAddrBool(ptr(start1, start2, start3, start4), address)
653: end subroutine
655: subroutine F90Array4dAccessFortranAddr(ptr, address)
656: use, intrinsic :: ISO_C_binding
657: implicit none
658: PetscScalar, pointer :: ptr(:, :, :, :)
659: PetscFortranAddr address
660: PetscFortranAddr start1, start2, start3, start4
662: start1 = lbound(ptr, 1)
663: start2 = lbound(ptr, 2)
664: start3 = lbound(ptr, 3)
665: start4 = lbound(ptr, 4)
666: call F90Array4dGetAddrFortranAddr(ptr(start1, start2, start3, start4), address)
667: end subroutine
669: subroutine F90Array4dDestroyScalar(ptr)
670: use, intrinsic :: ISO_C_binding
671: implicit none
672: PetscScalar, pointer :: ptr(:, :, :, :)
674: nullify (ptr)
675: end subroutine
677: subroutine F90Array4dDestroyReal(ptr)
678: use, intrinsic :: ISO_C_binding
679: implicit none
680: PetscReal, pointer :: ptr(:, :, :, :)
682: nullify (ptr)
683: end subroutine
685: subroutine F90Array4dDestroyInt(ptr)
686: use, intrinsic :: ISO_C_binding
687: implicit none
688: PetscInt, pointer :: ptr(:, :, :, :)
690: nullify (ptr)
691: end subroutine
693: subroutine F90Array4dDestroyBool(ptr)
694: use, intrinsic :: ISO_C_binding
695: implicit none
696: PetscBool, pointer :: ptr(:, :, :, :)
698: nullify (ptr)
699: end subroutine
701: subroutine F90Array4dDestroyFortranAddr(ptr)
702: use, intrinsic :: ISO_C_binding
703: implicit none
704: PetscFortranAddr, pointer :: ptr(:, :, :, :)
706: nullify (ptr)
707: end subroutine
709: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
710: !XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX!
711: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!