xref: /petsc/src/dm/impls/composite/ftn-custom/zfddaf.c (revision bfe80ac4a46d58cb7760074b25f5e81b2f541d8a)
1 #include <petscdmcomposite.h>
2 #include <petsc/private/ftnimpl.h>
3 
4 #if defined(PETSC_HAVE_FORTRAN_CAPS)
5   #define dmcompositegetentries1_          DMCOMPOSITEGETENTRIES1
6   #define dmcompositegetentries2_          DMCOMPOSITEGETENTRIES2
7   #define dmcompositegetentries3_          DMCOMPOSITEGETENTRIES3
8   #define dmcompositegetentries4_          DMCOMPOSITEGETENTRIES4
9   #define dmcompositegetentries5_          DMCOMPOSITEGETENTRIES5
10   #define dmcompositegetaccess4_           DMCOMPOSITEGETACCESS4
11   #define dmcompositescatter4_             DMCOMPOSITESCATTER4
12   #define dmcompositerestoreaccess4_       DMCOMPOSITERESTOREACCESS4
13   #define dmcompositegetlocalvectors4_     DMCOMPOSITEGETLOCALVECTORS4
14   #define dmcompositerestorelocalvectors4_ DMCOMPOSITERESTORELOCALVECTORS4
15   #define dmcompositegetglobaliss_         DMCOMPOSITEGETGLOBALISS
16   #define dmcompositerestoreglobaliss_     DMCOMPOSITERESTOREGLOBALISS
17   #define dmcompositegetlocaliss_          DMCOMPOSITEGETLOCALISS
18   #define dmcompositerestorelocaliss_      DMCOMPOSITERESTORELOCALISS
19 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
20   #define dmcompositegetentries1_          dmcompositegetentries1
21   #define dmcompositegetentries2_          dmcompositegetentries2
22   #define dmcompositegetentries3_          dmcompositegetentries3
23   #define dmcompositegetentries4_          dmcompositegetentries4
24   #define dmcompositegetentries5_          dmcompositegetentries5
25   #define dmcompositegetaccess4_           dmcompositegetaccess4
26   #define dmcompositescatter4_             dmcompositescatter4
27   #define dmcompositerestoreaccess4_       dmcompositerestoreaccess4
28   #define dmcompositegetlocalvectors4_     dmcompositegetlocalvectors4
29   #define dmcompositerestorelocalvectors4_ dmcompositerestorelocalvectors4
30   #define dmcompositegetglobaliss_         dmcompositegetglobaliss
31   #define dmcompositerestoreglobaliss_     dmcompositerestoreglobaliss
32   #define dmcompositegetlocaliss_          dmcompositegetlocaliss
33   #define dmcompositerestorelocaliss_      dmcompositerestorelocaliss
34 #endif
35 
36 PETSC_EXTERN void dmcompositegetentries1_(DM *dm, DM *da1, PetscErrorCode *ierr)
37 {
38   *ierr = DMCompositeGetEntries(*dm, da1);
39 }
40 
41 PETSC_EXTERN void dmcompositegetentries2_(DM *dm, DM *da1, DM *da2, PetscErrorCode *ierr)
42 {
43   *ierr = DMCompositeGetEntries(*dm, da1, da2);
44 }
45 
46 PETSC_EXTERN void dmcompositegetentries3_(DM *dm, DM *da1, DM *da2, DM *da3, PetscErrorCode *ierr)
47 {
48   *ierr = DMCompositeGetEntries(*dm, da1, da2, da3);
49 }
50 
51 PETSC_EXTERN void dmcompositegetentries4_(DM *dm, DM *da1, DM *da2, DM *da3, DM *da4, PetscErrorCode *ierr)
52 {
53   *ierr = DMCompositeGetEntries(*dm, da1, da2, da3, da4);
54 }
55 
56 PETSC_EXTERN void dmcompositegetentries5_(DM *dm, DM *da1, DM *da2, DM *da3, DM *da4, DM *da5, PetscErrorCode *ierr)
57 {
58   *ierr = DMCompositeGetEntries(*dm, da1, da2, da3, da4, da5);
59 }
60 
61 PETSC_EXTERN void dmcompositegetaccess4_(DM *dm, Vec *v, void **v1, void **p1, void **v2, void **p2, PetscErrorCode *ierr)
62 {
63   Vec *vv1 = (Vec *)v1, *vv2 = (Vec *)v2;
64   *ierr = DMCompositeGetAccess(*dm, *v, vv1, (PetscScalar *)p1, vv2, (PetscScalar *)p2);
65 }
66 
67 PETSC_EXTERN void dmcompositescatter4_(DM *dm, Vec *v, void *v1, void *p1, void *v2, void *p2, PetscErrorCode *ierr)
68 {
69   Vec *vv1 = (Vec *)v1, *vv2 = (Vec *)v2;
70   *ierr = DMCompositeScatter(*dm, *v, *vv1, (PetscScalar *)p1, *vv2, (PetscScalar *)p2);
71 }
72 
73 PETSC_EXTERN void dmcompositerestoreaccess4_(DM *dm, Vec *v, void **v1, void **p1, void **v2, void **p2, PetscErrorCode *ierr)
74 {
75   *ierr = DMCompositeRestoreAccess(*dm, *v, (Vec *)v1, 0, (Vec *)v2, 0);
76 }
77 
78 PETSC_EXTERN void dmcompositegetlocalvectors4_(DM *dm, void **v1, void **p1, void **v2, void **p2, PetscErrorCode *ierr)
79 {
80   Vec *vv1 = (Vec *)v1, *vv2 = (Vec *)v2;
81   *ierr = DMCompositeGetLocalVectors(*dm, vv1, (PetscScalar *)p1, vv2, (PetscScalar *)p2);
82 }
83 
84 PETSC_EXTERN void dmcompositerestorelocalvectors4_(DM *dm, void **v1, void **p1, void **v2, void **p2, PetscErrorCode *ierr)
85 {
86   Vec *vv1 = (Vec *)v1, *vv2 = (Vec *)v2;
87   *ierr = DMCompositeRestoreLocalVectors(*dm, vv1, (PetscScalar *)p1, vv2, (PetscScalar *)p2);
88 }
89 
90 PETSC_EXTERN void dmcompositegetglobaliss_(DM *dm, F90Array1d *ptr, PetscErrorCode *ierr PETSC_F90_2PTR_PROTO(ptrd))
91 {
92   IS      *ais;
93   PetscInt ndm;
94 
95   *ierr = DMCompositeGetGlobalISs(*dm, &ais);
96   if (*ierr) return;
97   *ierr = DMCompositeGetNumberDM(*dm, &ndm);
98   if (*ierr) return;
99   *ierr = F90Array1dCreate((void *)ais, MPIU_FORTRANADDR, 1, ndm, ptr PETSC_F90_2PTR_PARAM(ptrd));
100 }
101 
102 PETSC_EXTERN void dmcompositerestoreglobaliss_(DM *dm, F90Array1d *ptr, PetscErrorCode *ierr PETSC_F90_2PTR_PROTO(ptrd))
103 {
104   IS      *ais;
105   PetscInt ndm;
106 
107   *ierr = F90Array1dAccess(ptr, MPIU_FORTRANADDR, (void **)&ais PETSC_F90_2PTR_PARAM(ptrd));
108   if (*ierr) return;
109   *ierr = DMCompositeGetNumberDM(*dm, &ndm);
110   for (PetscInt i = 0; i < ndm; i++) {
111     *ierr = ISDestroy(&ais[i]);
112     if (*ierr) return;
113   }
114   *ierr = PetscFree(ais);
115   if (*ierr) return;
116   *ierr = F90Array1dDestroy(ptr, MPIU_FORTRANADDR PETSC_F90_2PTR_PARAM(ptrd));
117 }
118 
119 PETSC_EXTERN void dmcompositegetlocaliss_(DM *dm, F90Array1d *ptr, PetscErrorCode *ierr PETSC_F90_2PTR_PROTO(ptrd))
120 {
121   IS      *ais;
122   PetscInt ndm;
123 
124   *ierr = DMCompositeGetLocalISs(*dm, &ais);
125   if (*ierr) return;
126   *ierr = DMCompositeGetNumberDM(*dm, &ndm);
127   if (*ierr) return;
128   *ierr = F90Array1dCreate((void *)ais, MPIU_FORTRANADDR, 1, ndm, ptr PETSC_F90_2PTR_PARAM(ptrd));
129 }
130 
131 PETSC_EXTERN void dmcompositerestorelocaliss_(DM *dm, F90Array1d *ptr, PetscErrorCode *ierr PETSC_F90_2PTR_PROTO(ptrd))
132 {
133   IS      *ais;
134   PetscInt ndm;
135 
136   *ierr = F90Array1dAccess(ptr, MPIU_FORTRANADDR, (void **)&ais PETSC_F90_2PTR_PARAM(ptrd));
137   if (*ierr) return;
138   *ierr = DMCompositeGetNumberDM(*dm, &ndm);
139   for (PetscInt i = 0; i < ndm; i++) {
140     *ierr = ISDestroy(&ais[i]);
141     if (*ierr) return;
142   }
143   *ierr = PetscFree(ais);
144   if (*ierr) return;
145   *ierr = F90Array1dDestroy(ptr, MPIU_FORTRANADDR PETSC_F90_2PTR_PARAM(ptrd));
146 }
147