Bug#985228: unblock: petsc/3.14.5+dfsg1-2
On 2021-03-16 17:32, Ivo De Decker wrote:
Control: tags -1 moreinfo
...
On Sun, Mar 14, 2021 at 09:01:26PM +0100, Drew Parsons wrote:
upstream released petsc 3.14.5 with bug fixes only.
This will help improve the stability of the package over the lifetime
of the bullseye release.
I'm not convinced this complies with the freeze policy (but see below).
...
[ ] attach debdiff against the package in testing
We ask these this for a reason. The current diff between the version in
testing and unstable is very large and unreviewable. It certainly isn't
going
to get unblocked like this. If you can provide a filtered diff, with
only the
'real' changes, and not the noise generated by the new upstream
release,
there's at least a chance we could look at them. Note that this doesn't
guarantee it will be unblocked. There's still a decent chance that the
changes
will be too big.
Hi Ivo, I'm attaching the essential debdiff, omitting changes to docs,
TAGS and html files and trivial whitespace reformatting. I also omitted
the diff to src/ts/trajectory/impls/memory/trajmemory.c, involving the
conditional "#if defined(PETSC_HAVE_REVOLVE)", since we do not build
against revolve.
My argument is that this patch makes petsc and therefore bullseye a
little more robust.
Drew
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/debian/changelog petsc-3.14.5+dfsg1/debian/changelog
--- petsc-3.14.4+dfsg1/debian/changelog 2021-02-11 16:51:02.000000000 +0100
+++ petsc-3.14.5+dfsg1/debian/changelog 2021-03-10 12:21:59.000000000 +0100
@@ -1,3 +1,22 @@
+petsc (3.14.5+dfsg1-2) unstable; urgency=medium
+
+ * upload new bugfix release to unstable
+
+ -- Drew Parsons <dparsons@debian.org> Wed, 10 Mar 2021 12:21:59 +0100
+
+petsc (3.14.5+dfsg1-1) experimental; urgency=medium
+
+ * New upstream release (bugfixes)
+
+ -- Drew Parsons <dparsons@debian.org> Mon, 08 Mar 2021 18:37:39 +0100
+
+petsc (3.14.4+dfsg1-2) unstable; urgency=medium
+
+ * fix PETSC64_NAME in libpetsc64-complex3.14-dev.prerm to enable a
+ clean uninstall of libpetsc64-complex3.14-dev. Closes: #983892.
+
+ -- Drew Parsons <dparsons@debian.org> Mon, 08 Mar 2021 18:27:40 +0100
+
petsc (3.14.4+dfsg1-1) unstable; urgency=medium
* New upstream release.
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/debian/libpetsc64-complex3.14-dev.prerm petsc-3.14.5+dfsg1/debian/libpetsc64-complex3.14-dev.prerm
--- petsc-3.14.4+dfsg1/debian/libpetsc64-complex3.14-dev.prerm 2021-02-11 16:51:02.000000000 +0100
+++ petsc-3.14.5+dfsg1/debian/libpetsc64-complex3.14-dev.prerm 2021-03-10 12:21:59.000000000 +0100
@@ -8,7 +8,7 @@
PETSC_ARCH=${DEB_HOST_MULTIARCH}
PETSC_COMPLEX_ARCH=${PETSC_ARCH}-complex
PETSC_SONAME_VERSION=__PETSC_SONAME_VERSION__
-PETSC64_NAME=petsc${PETSC_SONAME_VERSION}
+PETSC64_NAME=petsc64-${PETSC_SONAME_VERSION}
PETSC64_DIR_COMPLEX=/usr/lib/petscdir/${PETSC64_NAME}/${PETSC_COMPLEX_ARCH}
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/include/petsc/private/petschpddm.h petsc-3.14.5+dfsg1/include/petsc/private/petschpddm.h
--- petsc-3.14.4+dfsg1/include/petsc/private/petschpddm.h 2020-11-03 19:01:59.000000000 +0100
+++ petsc-3.14.5+dfsg1/include/petsc/private/petschpddm.h 2021-03-03 23:13:43.000000000 +0100
@@ -31,6 +31,7 @@
PC_HPDDM_Level **levels; /* array of shells */
Mat aux; /* local auxiliary matrix defined at the finest level on PETSC_COMM_SELF */
Mat B; /* right-hand side matrix defined at the finest level on PETSC_COMM_SELF */
+ Vec normal; /* temporary Vec when preconditioning the normal equations with KSPLSQR */
IS is; /* global numbering of the auxiliary matrix */
PetscInt N; /* number of levels */
PCHPDDMCoarseCorrectionType correction; /* type of coarse correction */
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/dm/dt/fe/interface/ftn-custom/zfef.c petsc-3.14.5+dfsg1/src/dm/dt/fe/interface/ftn-custom/zfef.c
--- petsc-3.14.4+dfsg1/src/dm/dt/fe/interface/ftn-custom/zfef.c 2020-11-03 19:01:59.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/dm/dt/fe/interface/ftn-custom/zfef.c 2021-03-03 23:09:50.000000000 +0100
@@ -17,6 +17,7 @@
char *t;
FIXCHAR(type,len,t);
+ CHKFORTRANNULLOBJECT(obj);
*ierr = PetscSpaceViewFromOptions(*ao,obj,t);if (*ierr) return;
FREECHAR(type,t);
}
@@ -26,6 +27,7 @@
char *t;
FIXCHAR(type,len,t);
+ CHKFORTRANNULLOBJECT(obj);
*ierr = PetscDualSpaceViewFromOptions(*ao,obj,t);if (*ierr) return;
FREECHAR(type,t);
}
@@ -35,6 +37,7 @@
char *t;
FIXCHAR(type,len,t);
+ CHKFORTRANNULLOBJECT(obj);
*ierr = PetscFEViewFromOptions(*ao,obj,t);if (*ierr) return;
FREECHAR(type,t);
}
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/dm/dt/fv/interface/ftn-custom/zfvf.c petsc-3.14.5+dfsg1/src/dm/dt/fv/interface/ftn-custom/zfvf.c
--- petsc-3.14.4+dfsg1/src/dm/dt/fv/interface/ftn-custom/zfvf.c 2020-11-03 19:01:59.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/dm/dt/fv/interface/ftn-custom/zfvf.c 2021-03-03 23:13:43.000000000 +0100
@@ -15,6 +15,7 @@
char *t;
FIXCHAR(type,len,t);
+ CHKFORTRANNULLOBJECT(obj);
*ierr = PetscLimiterViewFromOptions(*ao,obj,t);if (*ierr) return;
FREECHAR(type,t);
}
@@ -24,6 +25,7 @@
char *t;
FIXCHAR(type,len,t);
+ CHKFORTRANNULLOBJECT(obj);
*ierr = PetscFVViewFromOptions(*ao,obj,t);if (*ierr) return;
FREECHAR(type,t);
}
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/dm/dt/interface/ftn-custom/zdsf.c petsc-3.14.5+dfsg1/src/dm/dt/interface/ftn-custom/zdsf.c
--- petsc-3.14.4+dfsg1/src/dm/dt/interface/ftn-custom/zdsf.c 2020-11-03 19:01:59.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/dm/dt/interface/ftn-custom/zdsf.c 2021-03-03 23:13:43.000000000 +0100
@@ -13,6 +13,7 @@
char *t;
FIXCHAR(type,len,t);
+ CHKFORTRANNULLOBJECT(obj);
*ierr = PetscDSViewFromOptions(*ao,obj,t);if (*ierr) return;
FREECHAR(type,t);
}
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/dm/impls/plex/plexvtu.c petsc-3.14.5+dfsg1/src/dm/impls/plex/plexvtu.c
--- petsc-3.14.4+dfsg1/src/dm/impls/plex/plexvtu.c 2020-11-03 19:01:59.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/dm/impls/plex/plexvtu.c 2021-03-03 23:13:43.000000000 +0100
@@ -23,16 +23,13 @@
#define MPIU_VTUREAL MPIU_REAL
#endif
-static PetscErrorCode TransferWrite(PetscViewer viewer,FILE *fp,PetscMPIInt srank,PetscMPIInt root,const void *send,void *recv,PetscMPIInt count,MPI_Datatype mpidatatype,PetscMPIInt tag)
+static PetscErrorCode TransferWrite(MPI_Comm comm, PetscViewer viewer,FILE *fp,PetscMPIInt srank,PetscMPIInt root,const void *send,void *recv,PetscMPIInt count,MPI_Datatype mpidatatype,PetscMPIInt tag)
{
PetscMPIInt rank;
PetscErrorCode ierr;
- MPI_Comm comm;
PetscFunctionBegin;
- ierr = PetscObjectGetComm((PetscObject)viewer,&comm);CHKERRQ(ierr);
ierr = MPI_Comm_rank(comm,&rank);CHKERRQ(ierr);
-
if (rank == srank && rank != root) {
ierr = MPI_Send((void*)send,count,mpidatatype,root,tag,comm);CHKERRQ(ierr);
} else if (rank == root) {
@@ -155,7 +152,7 @@
#endif
ierr = MPI_Comm_size(comm,&size);CHKERRQ(ierr);
ierr = MPI_Comm_rank(comm,&rank);CHKERRQ(ierr);
- tag = ((PetscObject)viewer)->tag;
+ ierr = PetscCommGetNewTag(comm,&tag);CHKERRQ(ierr);
ierr = PetscFOpen(comm,vtk->filename,"wb",&fp);CHKERRQ(ierr);
ierr = PetscFPrintf(comm,fp,"<?xml version=\"1.0\"?>\n");CHKERRQ(ierr);
@@ -238,10 +235,10 @@
boffset += gpiece[r].ncells*sizeof(int) + sizeof(int);
/* all the vectors */
for (link=vtk->link; link; link=link->next) {
- Vec X = (Vec)link->vec;
- DM dmX = NULL;
- PetscInt bs,nfields,field;
- const char *vecname = "";
+ Vec X = (Vec)link->vec;
+ DM dmX = NULL;
+ PetscInt bs = 1,nfields,field;
+ const char *vecname = "";
PetscSection section;
if ((link->ft != PETSC_VTK_CELL_FIELD) && (link->ft != PETSC_VTK_CELL_VECTOR_FIELD)) continue;
if (((PetscObject)X)->name || link != vtk->link) { /* If the object is already named, use it. If it is past the first link, name it to disambiguate. */
@@ -251,7 +248,7 @@
if (!dmX) dmX = dm;
ierr = PetscObjectQuery(link->vec, "section", (PetscObject*) §ion);CHKERRQ(ierr);
if (!section) {ierr = DMGetLocalSection(dmX, §ion);CHKERRQ(ierr);}
- ierr = PetscSectionGetDof(section,cStart,&bs);CHKERRQ(ierr);
+ if (cEnd > cStart) { ierr = PetscSectionGetDof(section,cStart,&bs);CHKERRQ(ierr); }
ierr = PetscSectionGetNumFields(section,&nfields);CHKERRQ(ierr);
field = 0;
if (link->field >= 0) {
@@ -340,10 +337,10 @@
*/
ierr = PetscFPrintf(PETSC_COMM_SELF,fp," <PointData>\n");CHKERRQ(ierr);
for (link=vtk->link; link; link=link->next) {
- Vec X = (Vec)link->vec;
- DM dmX;
- PetscInt bs,nfields,field;
- const char *vecname = "";
+ Vec X = (Vec)link->vec;
+ DM dmX;
+ PetscInt bs = 1,nfields,field;
+ const char *vecname = "";
PetscSection section;
if ((link->ft != PETSC_VTK_POINT_FIELD) && (link->ft != PETSC_VTK_POINT_VECTOR_FIELD)) continue;
if (((PetscObject)X)->name || link != vtk->link) { /* If the object is already named, use it. If it is past the first link, name it to disambiguate. */
@@ -353,7 +350,7 @@
if (!dmX) dmX = dm;
ierr = PetscObjectQuery(link->vec, "section", (PetscObject*) §ion);CHKERRQ(ierr);
if (!section) {ierr = DMGetLocalSection(dmX, §ion);CHKERRQ(ierr);}
- ierr = PetscSectionGetDof(section,vStart,&bs);CHKERRQ(ierr);
+ if (vEnd > vStart) { ierr = PetscSectionGetDof(section,vStart,&bs);CHKERRQ(ierr); }
ierr = PetscSectionGetNumFields(section,&nfields);CHKERRQ(ierr);
field = 0;
if (link->field >= 0) {
@@ -429,8 +426,8 @@
Vec coords;
PetscBool copy;
- ierr = DMGetCoordinatesLocal(dm,&coords);CHKERRQ(ierr);
- ierr = VecGetArrayRead(coords,&x);CHKERRQ(ierr);
+ ierr = DMGetCoordinatesLocal(dm,&coords);CHKERRQ(ierr);
+ ierr = VecGetArrayRead(coords,&x);CHKERRQ(ierr);
#if defined(PETSC_USE_COMPLEX)
copy = PETSC_TRUE;
#else
@@ -492,7 +489,7 @@
}
}
nsend = piece.nvertices*3;
- ierr = TransferWrite(viewer,fp,r,0,copy ? (const void *) y : (const void *) x,buffer,nsend,MPIU_VTUREAL,tag);CHKERRQ(ierr);
+ ierr = TransferWrite(comm,viewer,fp,r,0,copy ? (const void *) y : (const void *) x,buffer,nsend,MPIU_VTUREAL,tag);CHKERRQ(ierr);
ierr = PetscFree(y);CHKERRQ(ierr);
ierr = VecRestoreArrayRead(coords,&x);CHKERRQ(ierr);
}
@@ -500,16 +497,16 @@
PetscVTKInt *connectivity = NULL, *offsets = NULL;
PetscVTKType *types = NULL;
ierr = DMPlexGetVTKConnectivity(dm,localized,&piece,&connectivity,&offsets,&types);CHKERRQ(ierr);
- ierr = TransferWrite(viewer,fp,r,0,connectivity,buffer,piece.nconn,MPI_INT,tag);CHKERRQ(ierr);
- ierr = TransferWrite(viewer,fp,r,0,offsets,buffer,piece.ncells,MPI_INT,tag);CHKERRQ(ierr);
- ierr = TransferWrite(viewer,fp,r,0,types,buffer,piece.ncells,MPI_CHAR,tag);CHKERRQ(ierr);
+ ierr = TransferWrite(comm,viewer,fp,r,0,connectivity,buffer,piece.nconn,MPI_INT,tag);CHKERRQ(ierr);
+ ierr = TransferWrite(comm,viewer,fp,r,0,offsets,buffer,piece.ncells,MPI_INT,tag);CHKERRQ(ierr);
+ ierr = TransferWrite(comm,viewer,fp,r,0,types,buffer,piece.ncells,MPI_CHAR,tag);CHKERRQ(ierr);
ierr = PetscFree3(connectivity,offsets,types);CHKERRQ(ierr);
}
{ /* Owners (cell data) */
PetscVTKInt *owners;
ierr = PetscMalloc1(piece.ncells,&owners);CHKERRQ(ierr);
for (i=0; i<piece.ncells; i++) owners[i] = rank;
- ierr = TransferWrite(viewer,fp,r,0,owners,buffer,piece.ncells,MPI_INT,tag);CHKERRQ(ierr);
+ ierr = TransferWrite(comm,viewer,fp,r,0,owners,buffer,piece.ncells,MPI_INT,tag);CHKERRQ(ierr);
ierr = PetscFree(owners);CHKERRQ(ierr);
}
/* Cell data */
@@ -518,7 +515,7 @@
DM dmX;
const PetscScalar *x;
PetscVTUReal *y;
- PetscInt bs, nfields, field;
+ PetscInt bs = 1, nfields, field;
PetscSection section = NULL;
if ((link->ft != PETSC_VTK_CELL_FIELD) && (link->ft != PETSC_VTK_CELL_VECTOR_FIELD)) continue;
@@ -526,7 +523,7 @@
if (!dmX) dmX = dm;
ierr = PetscObjectQuery(link->vec, "section", (PetscObject*) §ion);CHKERRQ(ierr);
if (!section) {ierr = DMGetLocalSection(dmX, §ion);CHKERRQ(ierr);}
- ierr = PetscSectionGetDof(section,cStart,&bs);CHKERRQ(ierr);
+ if (cEnd > cStart) { ierr = PetscSectionGetDof(section,cStart,&bs);CHKERRQ(ierr); }
ierr = PetscSectionGetNumFields(section,&nfields);CHKERRQ(ierr);
field = 0;
if (link->field >= 0) {
@@ -541,7 +538,7 @@
PetscObject f;
PetscClassId fClass;
PetscBool vector;
- if (nfields) { /* We have user-defined fields/components */
+ if (nfields && cEnd > cStart) { /* We have user-defined fields/components */
ierr = PetscSectionGetFieldDof(section,cStart,field,&fbs);CHKERRQ(ierr);
} else fbs = bs; /* Say we have one field with 'bs' components */
ierr = DMGetField(dmX,field,NULL,&f);CHKERRQ(ierr);
@@ -585,7 +582,7 @@
for (; j < 3; j++) y[cnt++] = 0.;
}
if (cnt != piece.ncells*3) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"Count does not match");
- ierr = TransferWrite(viewer,fp,r,0,y,buffer,piece.ncells*3,MPIU_VTUREAL,tag);CHKERRQ(ierr);
+ ierr = TransferWrite(comm,viewer,fp,r,0,y,buffer,piece.ncells*3,MPIU_VTUREAL,tag);CHKERRQ(ierr);
}
} else {
for (i=0; i<fbs; i++) {
@@ -609,7 +606,7 @@
y[cnt++] = (PetscVTUReal) (l ? PetscImaginaryPart(xpoint[i]) : PetscRealPart(xpoint[i]));
}
if (cnt != piece.ncells) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"Count does not match");
- ierr = TransferWrite(viewer,fp,r,0,y,buffer,piece.ncells,MPIU_VTUREAL,tag);CHKERRQ(ierr);
+ ierr = TransferWrite(comm,viewer,fp,r,0,y,buffer,piece.ncells,MPIU_VTUREAL,tag);CHKERRQ(ierr);
}
}
}
@@ -623,7 +620,7 @@
DM dmX;
const PetscScalar *x;
PetscVTUReal *y;
- PetscInt bs, nfields, field;
+ PetscInt bs = 1, nfields, field;
PetscSection section = NULL;
if ((link->ft != PETSC_VTK_POINT_FIELD) && (link->ft != PETSC_VTK_POINT_VECTOR_FIELD)) continue;
@@ -631,7 +628,7 @@
if (!dmX) dmX = dm;
ierr = PetscObjectQuery(link->vec, "section", (PetscObject*) §ion);CHKERRQ(ierr);
if (!section) {ierr = DMGetLocalSection(dmX, §ion);CHKERRQ(ierr);}
- ierr = PetscSectionGetDof(section,vStart,&bs);CHKERRQ(ierr);
+ if (vEnd > vStart) { ierr = PetscSectionGetDof(section,vStart,&bs);CHKERRQ(ierr); }
ierr = PetscSectionGetNumFields(section,&nfields);CHKERRQ(ierr);
field = 0;
if (link->field >= 0) {
@@ -641,8 +638,8 @@
ierr = VecGetArrayRead(X,&x);CHKERRQ(ierr);
ierr = PetscMalloc1(piece.nvertices*3,&y);CHKERRQ(ierr);
for (i=0; field<(nfields?nfields:1); field++) {
- PetscInt fbs,j;
- if (nfields) { /* We have user-defined fields/components */
+ PetscInt fbs,j;
+ if (nfields && vEnd > vStart) { /* We have user-defined fields/components */
ierr = PetscSectionGetFieldDof(section,vStart,field,&fbs);CHKERRQ(ierr);
} else fbs = bs; /* Say we have one field with 'bs' components */
if (link->ft == PETSC_VTK_POINT_VECTOR_FIELD) {
@@ -692,7 +689,7 @@
}
}
if (cnt != piece.nvertices*3) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"Count does not match");
- ierr = TransferWrite(viewer,fp,r,0,y,buffer,piece.nvertices*3,MPIU_VTUREAL,tag);CHKERRQ(ierr);
+ ierr = TransferWrite(comm,viewer,fp,r,0,y,buffer,piece.nvertices*3,MPIU_VTUREAL,tag);CHKERRQ(ierr);
}
} else {
for (i=0; i<fbs; i++) {
@@ -736,7 +733,7 @@
}
}
if (cnt != piece.nvertices) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"Count does not match");
- ierr = TransferWrite(viewer,fp,r,0,y,buffer,piece.nvertices,MPIU_VTUREAL,tag);CHKERRQ(ierr);
+ ierr = TransferWrite(comm,viewer,fp,r,0,y,buffer,piece.nvertices,MPIU_VTUREAL,tag);CHKERRQ(ierr);
}
}
}
@@ -747,15 +744,15 @@
} else if (!rank) {
PetscInt l;
- ierr = TransferWrite(viewer,fp,r,0,NULL,buffer,gpiece[r].nvertices*3,MPIU_VTUREAL,tag);CHKERRQ(ierr); /* positions */
- ierr = TransferWrite(viewer,fp,r,0,NULL,buffer,gpiece[r].nconn,MPI_INT,tag);CHKERRQ(ierr); /* connectivity */
- ierr = TransferWrite(viewer,fp,r,0,NULL,buffer,gpiece[r].ncells,MPI_INT,tag);CHKERRQ(ierr); /* offsets */
- ierr = TransferWrite(viewer,fp,r,0,NULL,buffer,gpiece[r].ncells,MPI_CHAR,tag);CHKERRQ(ierr); /* types */
- ierr = TransferWrite(viewer,fp,r,0,NULL,buffer,gpiece[r].ncells,MPI_INT,tag);CHKERRQ(ierr); /* owner rank (cells) */
+ ierr = TransferWrite(comm,viewer,fp,r,0,NULL,buffer,gpiece[r].nvertices*3,MPIU_VTUREAL,tag);CHKERRQ(ierr); /* positions */
+ ierr = TransferWrite(comm,viewer,fp,r,0,NULL,buffer,gpiece[r].nconn,MPI_INT,tag);CHKERRQ(ierr); /* connectivity */
+ ierr = TransferWrite(comm,viewer,fp,r,0,NULL,buffer,gpiece[r].ncells,MPI_INT,tag);CHKERRQ(ierr); /* offsets */
+ ierr = TransferWrite(comm,viewer,fp,r,0,NULL,buffer,gpiece[r].ncells,MPI_CHAR,tag);CHKERRQ(ierr); /* types */
+ ierr = TransferWrite(comm,viewer,fp,r,0,NULL,buffer,gpiece[r].ncells,MPI_INT,tag);CHKERRQ(ierr); /* owner rank (cells) */
/* all cell data */
for (link=vtk->link; link; link=link->next) {
- Vec X = (Vec)link->vec;
- PetscInt bs, nfields, field;
+ Vec X = (Vec)link->vec;
+ PetscInt bs = 1, nfields, field;
DM dmX;
PetscSection section = NULL;
@@ -764,7 +761,7 @@
if (!dmX) dmX = dm;
ierr = PetscObjectQuery(link->vec, "section", (PetscObject*) §ion);CHKERRQ(ierr);
if (!section) {ierr = DMGetLocalSection(dmX, §ion);CHKERRQ(ierr);}
- ierr = PetscSectionGetDof(section,cStart,&bs);CHKERRQ(ierr);
+ if (cEnd > cStart) { ierr = PetscSectionGetDof(section,cStart,&bs);CHKERRQ(ierr); }
ierr = PetscSectionGetNumFields(section,&nfields);CHKERRQ(ierr);
field = 0;
if (link->field >= 0) {
@@ -777,7 +774,7 @@
PetscObject f;
PetscClassId fClass;
PetscBool vector;
- if (nfields) { /* We have user-defined fields/components */
+ if (nfields && cEnd > cStart) { /* We have user-defined fields/components */
ierr = PetscSectionGetFieldDof(section,cStart,field,&fbs);CHKERRQ(ierr);
} else fbs = bs; /* Say we have one field with 'bs' components */
ierr = DMGetField(dmX,field,NULL,&f);CHKERRQ(ierr);
@@ -799,12 +796,12 @@
}
if (vector) {
for (l = 0; l < loops_per_scalar; l++) {
- ierr = TransferWrite(viewer,fp,r,0,NULL,buffer,gpiece[r].ncells*3,MPIU_VTUREAL,tag);CHKERRQ(ierr);
+ ierr = TransferWrite(comm,viewer,fp,r,0,NULL,buffer,gpiece[r].ncells*3,MPIU_VTUREAL,tag);CHKERRQ(ierr);
}
} else {
for (i=0; i<fbs; i++) {
for (l = 0; l < loops_per_scalar; l++) {
- ierr = TransferWrite(viewer,fp,r,0,NULL,buffer,gpiece[r].ncells,MPIU_VTUREAL,tag);CHKERRQ(ierr);
+ ierr = TransferWrite(comm,viewer,fp,r,0,NULL,buffer,gpiece[r].ncells,MPIU_VTUREAL,tag);CHKERRQ(ierr);
}
}
}
@@ -812,9 +809,9 @@
}
/* all point data */
for (link=vtk->link; link; link=link->next) {
- Vec X = (Vec)link->vec;
- DM dmX;
- PetscInt bs, nfields, field;
+ Vec X = (Vec)link->vec;
+ DM dmX;
+ PetscInt bs = 1, nfields, field;
PetscSection section = NULL;
if ((link->ft != PETSC_VTK_POINT_FIELD) && (link->ft != PETSC_VTK_POINT_VECTOR_FIELD)) continue;
@@ -822,7 +819,7 @@
if (!dmX) dmX = dm;
ierr = PetscObjectQuery(link->vec, "section", (PetscObject*) §ion);CHKERRQ(ierr);
if (!section) {ierr = DMGetLocalSection(dmX, §ion);CHKERRQ(ierr);}
- ierr = PetscSectionGetDof(section,vStart,&bs);CHKERRQ(ierr);
+ if (vEnd > vStart) { ierr = PetscSectionGetDof(section,vStart,&bs);CHKERRQ(ierr); }
ierr = PetscSectionGetNumFields(section,&nfields);CHKERRQ(ierr);
field = 0;
if (link->field >= 0) {
@@ -831,17 +828,17 @@
}
for (i=0; field<(nfields?nfields:1); field++) {
PetscInt fbs;
- if (nfields) { /* We have user-defined fields/components */
+ if (nfields && vEnd > vStart) { /* We have user-defined fields/components */
ierr = PetscSectionGetFieldDof(section,vStart,field,&fbs);CHKERRQ(ierr);
} else fbs = bs; /* Say we have one field with 'bs' components */
if (link->ft == PETSC_VTK_POINT_VECTOR_FIELD) {
for (l = 0; l < loops_per_scalar; l++) {
- ierr = TransferWrite(viewer,fp,r,0,NULL,buffer,gpiece[r].nvertices*3,MPIU_VTUREAL,tag);CHKERRQ(ierr);
+ ierr = TransferWrite(comm,viewer,fp,r,0,NULL,buffer,gpiece[r].nvertices*3,MPIU_VTUREAL,tag);CHKERRQ(ierr);
}
} else {
for (i=0; i<fbs; i++) {
for (l = 0; l < loops_per_scalar; l++) {
- ierr = TransferWrite(viewer,fp,r,0,NULL,buffer,gpiece[r].nvertices,MPIU_VTUREAL,tag);CHKERRQ(ierr);
+ ierr = TransferWrite(comm,viewer,fp,r,0,NULL,buffer,gpiece[r].nvertices,MPIU_VTUREAL,tag);CHKERRQ(ierr);
}
}
}
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/dm/interface/ftn-custom/zdmf.c petsc-3.14.5+dfsg1/src/dm/interface/ftn-custom/zdmf.c
--- petsc-3.14.4+dfsg1/src/dm/interface/ftn-custom/zdmf.c 2021-01-10 03:07:51.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/dm/interface/ftn-custom/zdmf.c 2021-03-03 23:09:50.000000000 +0100
@@ -26,6 +26,7 @@
#define dmsetstratumis_ DMSETSTRATUMIS
#define dmremovelabel_ DMREMOVELABEL
#define dmviewfromoptions_ DMVIEWFROMOPTIONS
+#define dmcreatesuperdm_ DMCREATESUPERDM
#elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
#define dmcreateinterpolation_ dmcreateinterpolation
#define dmview_ dmview
@@ -50,6 +51,7 @@
#define dmsetstratumis_ dmsetstratumis
#define dmremovelabel_ dmremovelabel
#define dmviewfromoptions_ dmviewfromoptions
+#define dmcreatesuperdm_ dmreatesuperdm
#endif
PETSC_EXTERN void dmgetmattype_(DM *mm,char* name,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/dm/partitioner/interface/ftn-custom/zpartitioner.c petsc-3.14.5+dfsg1/src/dm/partitioner/interface/ftn-custom/zpartitioner.c
--- petsc-3.14.4+dfsg1/src/dm/partitioner/interface/ftn-custom/zpartitioner.c 2020-11-03 19:01:59.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/dm/partitioner/interface/ftn-custom/zpartitioner.c 2021-03-03 23:09:50.000000000 +0100
@@ -28,6 +28,7 @@
char *t;
FIXCHAR(type,len,t);
+ CHKFORTRANNULLOBJECT(obj);
*ierr = PetscPartitionerViewFromOptions(*part,obj,t);if (*ierr) return;
FREECHAR(type,t);
}
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/ksp/ksp/interface/ftn-custom/zitcreatef.c petsc-3.14.5+dfsg1/src/ksp/ksp/interface/ftn-custom/zitcreatef.c
--- petsc-3.14.4+dfsg1/src/ksp/ksp/interface/ftn-custom/zitcreatef.c 2020-11-03 19:01:59.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/ksp/ksp/interface/ftn-custom/zitcreatef.c 2021-03-03 23:13:43.000000000 +0100
@@ -45,6 +45,7 @@
char *t;
FIXCHAR(type,len,t);
+ CHKFORTRANNULLOBJECT(obj);
*ierr = KSPViewFromOptions(*ao,obj,t);if (*ierr) return;
FREECHAR(type,t);
}
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/ksp/pc/impls/bddc/bddc.c petsc-3.14.5+dfsg1/src/ksp/pc/impls/bddc/bddc.c
--- petsc-3.14.4+dfsg1/src/ksp/pc/impls/bddc/bddc.c 2020-11-03 19:02:00.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/ksp/pc/impls/bddc/bddc.c 2021-03-03 23:13:43.000000000 +0100
@@ -1318,7 +1318,7 @@
guess if a transformation of basis approach has been selected.
Input Parameter:
-+ pc - the preconditioner contex
++ pc - the preconditioner context
Application Interface Routine: PCPreSolve()
@@ -1530,7 +1530,7 @@
approach has been selected. Also, restores rhs to its original state.
Input Parameter:
-+ pc - the preconditioner contex
++ pc - the preconditioner context
Application Interface Routine: PCPostSolve()
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/ksp/pc/impls/hpddm/hpddm.cxx petsc-3.14.5+dfsg1/src/ksp/pc/impls/hpddm/hpddm.cxx
--- petsc-3.14.4+dfsg1/src/ksp/pc/impls/hpddm/hpddm.cxx 2020-11-03 19:02:00.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/ksp/pc/impls/hpddm/hpddm.cxx 2021-03-03 23:13:43.000000000 +0100
@@ -39,6 +39,7 @@
ierr = ISDestroy(&data->is);CHKERRQ(ierr);
ierr = MatDestroy(&data->aux);CHKERRQ(ierr);
ierr = MatDestroy(&data->B);CHKERRQ(ierr);
+ ierr = VecDestroy(&data->normal);CHKERRQ(ierr);
data->correction = PC_HPDDM_COARSE_CORRECTION_DEFLATED;
data->Neumann = PETSC_FALSE;
data->setup = NULL;
@@ -391,6 +392,24 @@
PetscFunctionReturn(0);
}
+static PetscErrorCode PCPreSolve_HPDDM(PC pc, KSP ksp, Vec, Vec)
+{
+ PC_HPDDM *data = (PC_HPDDM*)pc->data;
+ PetscBool flg;
+ Mat A;
+ PetscErrorCode ierr;
+
+ PetscFunctionBegin;
+ if (ksp) {
+ ierr = PetscObjectTypeCompare((PetscObject)ksp, KSPLSQR, &flg);CHKERRQ(ierr);
+ if (flg && !data->normal) {
+ ierr = KSPGetOperators(ksp, &A, NULL);CHKERRQ(ierr);
+ ierr = MatCreateVecs(A, NULL, &data->normal);CHKERRQ(ierr); /* temporary Vec used in PCHPDDMShellApply() for coarse grid corrections */
+ }
+ }
+ PetscFunctionReturn(0);
+}
+
static PetscErrorCode PCHPDDMShellSetUp(PC pc)
{
PC_HPDDM_Level *ctx;
@@ -526,11 +545,21 @@
ierr = KSPGetOperators(ctx->ksp, &A, NULL);CHKERRQ(ierr);
ierr = PCHPDDMDeflate_Private(pc, x, y);CHKERRQ(ierr); /* y = Q x */
if (ctx->parent->correction == PC_HPDDM_COARSE_CORRECTION_DEFLATED || ctx->parent->correction == PC_HPDDM_COARSE_CORRECTION_BALANCED) {
- ierr = MatMult(A, y, ctx->v[1][0]);CHKERRQ(ierr); /* y = A Q x */
+ if (!ctx->parent->normal || ctx != ctx->parent->levels[0]) {
+ ierr = MatMult(A, y, ctx->v[1][0]);CHKERRQ(ierr); /* y = A Q x */
+ } else { /* KSPLSQR and finest level */
+ ierr = MatMult(A, y, ctx->parent->normal);CHKERRQ(ierr); /* y = A Q x */
+ ierr = MatMultTranspose(A, ctx->parent->normal, ctx->v[1][0]);CHKERRQ(ierr); /* y = A^T A Q x */
+ }
ierr = VecWAXPY(ctx->v[1][1], -1.0, ctx->v[1][0], x);CHKERRQ(ierr); /* y = (I - A Q) x */
ierr = PCApply(ctx->pc, ctx->v[1][1], ctx->v[1][0]);CHKERRQ(ierr); /* y = M^-1 (I - A Q) x */
if (ctx->parent->correction == PC_HPDDM_COARSE_CORRECTION_BALANCED) {
- ierr = MatMultTranspose(A, ctx->v[1][0], ctx->v[1][1]);CHKERRQ(ierr); /* z = A^T M^-1 (I - A Q) x */
+ if (!ctx->parent->normal || ctx != ctx->parent->levels[0]) {
+ ierr = MatMultTranspose(A, ctx->v[1][0], ctx->v[1][1]);CHKERRQ(ierr); /* z = A^T M^-1 (I - A Q) x */
+ } else {
+ ierr = MatMult(A, ctx->v[1][0], ctx->parent->normal);CHKERRQ(ierr);
+ ierr = MatMultTranspose(A, ctx->parent->normal, ctx->v[1][1]);CHKERRQ(ierr); /* z = A^T A M^-1 (I - A^T A Q) x */
+ }
ierr = PCHPDDMDeflate_Private(pc, ctx->v[1][1], ctx->v[1][1]);CHKERRQ(ierr);
ierr = VecAXPY(ctx->v[1][0], -1.0, ctx->v[1][1]);CHKERRQ(ierr); /* y = (I - Q A^T) M^-1 (I - A Q) x */
}
@@ -1082,6 +1111,7 @@
pc->ops->applytranspose = 0;
pc->ops->applysymmetricleft = 0;
pc->ops->applysymmetricright = 0;
+ pc->ops->presolve = PCPreSolve_HPDDM;
ierr = PetscObjectComposeFunction((PetscObject)pc, "PCHPDDMSetAuxiliaryMat_C", PCHPDDMSetAuxiliaryMat_HPDDM);CHKERRQ(ierr);
ierr = PetscObjectComposeFunction((PetscObject)pc, "PCHPDDMHasNeumannMat_C", PCHPDDMHasNeumannMat_HPDDM);CHKERRQ(ierr);
ierr = PetscObjectComposeFunction((PetscObject)pc, "PCHPDDMSetRHSMat_C", PCHPDDMSetRHSMat_HPDDM);CHKERRQ(ierr);
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/ksp/pc/interface/ftn-custom/zpreconf.c petsc-3.14.5+dfsg1/src/ksp/pc/interface/ftn-custom/zpreconf.c
--- petsc-3.14.4+dfsg1/src/ksp/pc/interface/ftn-custom/zpreconf.c 2020-11-03 19:02:00.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/ksp/pc/interface/ftn-custom/zpreconf.c 2021-03-03 23:09:50.000000000 +0100
@@ -57,6 +57,7 @@
char *t;
FIXCHAR(type,len,t);
+ CHKFORTRANNULLOBJECT(obj);
*ierr = PCViewFromOptions(*ao,obj,t);if (*ierr) return;
FREECHAR(type,t);
}
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/mat/coarsen/ftn-custom/zcoarsenf.c petsc-3.14.5+dfsg1/src/mat/coarsen/ftn-custom/zcoarsenf.c
--- petsc-3.14.4+dfsg1/src/mat/coarsen/ftn-custom/zcoarsenf.c 2020-11-03 19:02:00.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/mat/coarsen/ftn-custom/zcoarsenf.c 2021-03-03 23:09:50.000000000 +0100
@@ -12,6 +12,7 @@
char *t;
FIXCHAR(type,len,t);
+ CHKFORTRANNULLOBJECT(obj);
*ierr = MatCoarsenViewFromOptions(*a,obj,t);if (*ierr) return;
FREECHAR(type,t);
}
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/mat/impls/aij/mpi/mpimatmatmult.c petsc-3.14.5+dfsg1/src/mat/impls/aij/mpi/mpimatmatmult.c
--- petsc-3.14.4+dfsg1/src/mat/impls/aij/mpi/mpimatmatmult.c 2020-12-03 18:03:40.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/mat/impls/aij/mpi/mpimatmatmult.c 2021-03-03 23:13:43.000000000 +0100
@@ -417,6 +417,7 @@
/* Estimate Bbn, column size of Bb */
if (nz) {
Bbn1 = 2*Am*BN/nz;
+ if (!Bbn1) Bbn1 = 1;
} else Bbn1 = BN;
bs = PetscAbs(B->cmap->bs);
@@ -588,6 +589,7 @@
} else {
Mat Bb,Cb;
PetscInt BN=B->cmap->N,n=contents->workB->cmap->n,i;
+ if (n <= 0) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Column block size %D must be positive",n);
for (i=0; i<BN; i+=n) {
ierr = MatDenseGetSubMatrix(B,i,PetscMin(i+n,BN),&Bb);CHKERRQ(ierr);
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/mat/impls/baij/seq/baijfact81.c petsc-3.14.5+dfsg1/src/mat/impls/baij/seq/baijfact81.c
--- petsc-3.14.4+dfsg1/src/mat/impls/baij/seq/baijfact81.c 2020-11-03 19:02:00.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/mat/impls/baij/seq/baijfact81.c 2021-03-03 23:09:50.000000000 +0100
@@ -79,7 +79,7 @@
/* PetscKernel_A_gets_A_minus_B_times_C(bs,rtmp+bs2*pj[j],pc,pv+bs2*j); */
/* rtmp+bs2*pj[j] = rtmp+bs2*pj[j] - (*pc)*(pv+bs2*j) */
v = rtmp + bs2*pj[j];
- ierr = PetscKernel_A_gets_A_minus_B_times_C_9(v,pc,pv);CHKERRQ(ierr);
+ ierr = PetscKernel_A_gets_A_minus_B_times_C_9(v,pc,pv+81*j);CHKERRQ(ierr);
/* pv incremented in PetscKernel_A_gets_A_minus_B_times_C_9 */
}
ierr = PetscLogFlops(1458*nz+1377);CHKERRQ(ierr); /* flops = 2*bs^3*nz + 2*bs^3 - bs2) */
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/mat/impls/baij/seq/baij.h petsc-3.14.5+dfsg1/src/mat/impls/baij/seq/baij.h
--- petsc-3.14.4+dfsg1/src/mat/impls/baij/seq/baij.h 2020-11-03 19:02:00.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/mat/impls/baij/seq/baij.h 2021-03-03 23:09:50.000000000 +0100
@@ -738,9 +738,9 @@
A6 = _mm256_loadu_pd (W+18); A7 = _mm256_loadu_pd (W+22); A8 = _mm256_loadu_pd (W+26);
B0 = _mm256_broadcast_sd(B+ 2); B1 = _mm256_broadcast_sd(B+11); B2 = _mm256_broadcast_sd(B+20);
- S0 = _mm256_fmadd_pd(A6,B0,S0); S1 = _mm256_fmadd_pd(A7,B0,S1); S2 = _mm256_fmadd_pd(A2,B0,S2);
- S3 = _mm256_fmadd_pd(A6,B1,S3); S4 = _mm256_fmadd_pd(A7,B1,S4); S5 = _mm256_fmadd_pd(A2,B1,S5);
- S6 = _mm256_fmadd_pd(A6,B2,S6); S7 = _mm256_fmadd_pd(A7,B2,S7); S8 = _mm256_fmadd_pd(A5,B2,S8);
+ S0 = _mm256_fmadd_pd(A6,B0,S0); S1 = _mm256_fmadd_pd(A7,B0,S1); S2 = _mm256_fmadd_pd(A8,B0,S2);
+ S3 = _mm256_fmadd_pd(A6,B1,S3); S4 = _mm256_fmadd_pd(A7,B1,S4); S5 = _mm256_fmadd_pd(A8,B1,S5);
+ S6 = _mm256_fmadd_pd(A6,B2,S6); S7 = _mm256_fmadd_pd(A7,B2,S7); S8 = _mm256_fmadd_pd(A8,B2,S8);
A0 = _mm256_loadu_pd (W+27); A1 = _mm256_loadu_pd (W+31); A2 = _mm256_loadu_pd (W+35);
B6 = _mm256_broadcast_sd(B+ 3); B7 = _mm256_broadcast_sd(B+12); B8 = _mm256_broadcast_sd(B+21);
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/mat/interface/ftn-custom/zmatrixf.c petsc-3.14.5+dfsg1/src/mat/interface/ftn-custom/zmatrixf.c
--- petsc-3.14.4+dfsg1/src/mat/interface/ftn-custom/zmatrixf.c 2020-11-03 19:02:00.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/mat/interface/ftn-custom/zmatrixf.c 2021-03-03 23:09:50.000000000 +0100
@@ -843,6 +843,7 @@
char *t;
FIXCHAR(type,len,t);
+ CHKFORTRANNULLOBJECT(obj);
*ierr = MatViewFromOptions(*ao,obj,t);if (*ierr) return;
FREECHAR(type,t);
}
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/mat/partition/ftn-custom/zpartitionf.c petsc-3.14.5+dfsg1/src/mat/partition/ftn-custom/zpartitionf.c
--- petsc-3.14.4+dfsg1/src/mat/partition/ftn-custom/zpartitionf.c 2020-11-03 19:02:00.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/mat/partition/ftn-custom/zpartitionf.c 2021-03-03 23:09:50.000000000 +0100
@@ -42,6 +42,7 @@
char *t;
FIXCHAR(type,len,t);
+ CHKFORTRANNULLOBJECT(obj);
*ierr = MatPartitioningViewFromOptions(*ao,obj,t);if (*ierr) return;
FREECHAR(type,t);
}
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/mat/tests/ex237.c petsc-3.14.5+dfsg1/src/mat/tests/ex237.c
--- petsc-3.14.4+dfsg1/src/mat/tests/ex237.c 2020-11-03 19:02:00.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/mat/tests/ex237.c 2021-03-03 23:13:43.000000000 +0100
@@ -9,7 +9,7 @@
#include <petsc.h>
-#if defined(PETSC_HAVE_MKL)
+#if defined(PETSC_HAVE_MKL) && defined(PETSC_HAVE_MKL_SPARSE_OPTIMIZE)
#include <mkl.h>
#define PetscStackCallMKLSparse(func, args) do { \
sparse_status_t __ierr; \
@@ -121,7 +121,7 @@
char *tmp;
PetscInt *ia_ptr, *ja_ptr, k;
PetscScalar *a_ptr;
-#if defined(PETSC_HAVE_MKL)
+#if defined(PETSC_HAVE_MKL) && defined(PETSC_HAVE_MKL_SPARSE_OPTIMIZE)
struct matrix_descr descr;
sparse_matrix_t spr;
descr.type = SPARSE_MATRIX_TYPE_GENERAL;
@@ -182,7 +182,7 @@
for (k = 0; k < Ai[An]; ++k) ja_ptr[k] = Aj[k] + 1; /* Fortran indexing to maximize cases covered by _mm routines */
ierr = MatSeqSBAIJGetArray(A, &a_ptr);CHKERRQ(ierr);
PetscStackCallMKLSparse(mkl_sparse_d_create_bsr, (&spr, SPARSE_INDEX_BASE_ONE, SPARSE_LAYOUT_COLUMN_MAJOR, An, An, bs[j], ia_ptr, ia_ptr + 1, ja_ptr, a_ptr));
-#if defined(PETSC_HAVE_MKL)
+#if defined(PETSC_HAVE_MKL) && defined(PETSC_HAVE_MKL_SPARSE_OPTIMIZE)
descr.type = SPARSE_MATRIX_TYPE_SYMMETRIC;
descr.mode = SPARSE_FILL_MODE_UPPER;
descr.diag = SPARSE_DIAG_NON_UNIT;
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/snes/interface/ftn-custom/zsnesf.c petsc-3.14.5+dfsg1/src/snes/interface/ftn-custom/zsnesf.c
--- petsc-3.14.4+dfsg1/src/snes/interface/ftn-custom/zsnesf.c 2020-11-03 19:02:00.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/snes/interface/ftn-custom/zsnesf.c 2021-03-03 23:13:43.000000000 +0100
@@ -433,6 +433,7 @@
char *t;
FIXCHAR(type,len,t);
+ CHKFORTRANNULLOBJECT(obj);
*ierr = SNESViewFromOptions(*ao,obj,t);if (*ierr) return;
FREECHAR(type,t);
}
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/sys/classes/draw/interface/ftn-custom/zdrawregf.c petsc-3.14.5+dfsg1/src/sys/classes/draw/interface/ftn-custom/zdrawregf.c
--- petsc-3.14.4+dfsg1/src/sys/classes/draw/interface/ftn-custom/zdrawregf.c 2020-11-03 19:02:00.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/sys/classes/draw/interface/ftn-custom/zdrawregf.c 2021-03-03 23:09:50.000000000 +0100
@@ -49,6 +49,7 @@
char *t;
FIXCHAR(type,len,t);
+ CHKFORTRANNULLOBJECT(obj);
*ierr = PetscDrawViewFromOptions(*draw,obj,t);if (*ierr) return;
FREECHAR(type,t);
}
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/sys/classes/random/interface/ftn-custom/zrandomf.c petsc-3.14.5+dfsg1/src/sys/classes/random/interface/ftn-custom/zrandomf.c
--- petsc-3.14.4+dfsg1/src/sys/classes/random/interface/ftn-custom/zrandomf.c 2020-11-03 19:02:00.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/sys/classes/random/interface/ftn-custom/zrandomf.c 2021-03-03 23:09:50.000000000 +0100
@@ -47,6 +47,7 @@
char *t;
FIXCHAR(type,len,t);
+ CHKFORTRANNULLOBJECT(obj);
*ierr = PetscRandomViewFromOptions(*ao,obj,t);if (*ierr) return;
FREECHAR(type,t);
}
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/sys/fileio/sysio.c petsc-3.14.5+dfsg1/src/sys/fileio/sysio.c
--- petsc-3.14.4+dfsg1/src/sys/fileio/sysio.c 2020-11-03 19:02:00.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/sys/fileio/sysio.c 2021-03-03 23:13:43.000000000 +0100
@@ -609,7 +609,7 @@
PetscErrorCode PetscBinarySynchronizedRead(MPI_Comm comm,int fd,void *data,PetscInt num,PetscInt *count,PetscDataType type)
{
PetscErrorCode ierr;
- PetscMPIInt rank;
+ PetscMPIInt rank,size;
MPI_Datatype mtype;
PetscInt ibuf[2] = {0, 0};
char *fname = NULL;
@@ -626,13 +626,18 @@
}
ierr = MPI_Comm_rank(comm,&rank);CHKERRQ(ierr);
+ ierr = MPI_Comm_size(comm,&size);CHKERRQ(ierr);
if (!rank) {
ibuf[0] = PetscBinaryRead(fd,data,num,count?&ibuf[1]:NULL,type);
}
ierr = MPI_Bcast(ibuf,2,MPIU_INT,0,comm);CHKERRQ(ierr);
ierr = (PetscErrorCode)ibuf[0];CHKERRQ(ierr);
- ierr = PetscDataTypeToMPIDataType(type,&mtype);CHKERRQ(ierr);
- ierr = MPI_Bcast(data,count?ibuf[1]:num,mtype,0,comm);CHKERRQ(ierr);
+
+ /* skip MPI call on potentially huge amounts of data when running with one process; this allows the amount of data to basically unlimited in that case */
+ if (size > 1) {
+ ierr = PetscDataTypeToMPIDataType(type,&mtype);CHKERRQ(ierr);
+ ierr = MPI_Bcast(data,count?ibuf[1]:num,mtype,0,comm);CHKERRQ(ierr);
+ }
if (count) *count = ibuf[1];
if (type == PETSC_FUNCTION) {
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/sys/objects/ftn-custom/zoptionsf.c petsc-3.14.5+dfsg1/src/sys/objects/ftn-custom/zoptionsf.c
--- petsc-3.14.4+dfsg1/src/sys/objects/ftn-custom/zoptionsf.c 2020-11-03 19:02:00.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/sys/objects/ftn-custom/zoptionsf.c 2021-03-03 23:09:50.000000000 +0100
@@ -257,6 +257,7 @@
char *o;
FIXCHAR(option, loption, o);
+ CHKFORTRANNULLOBJECT(obj);
*ierr = PetscObjectViewFromOptions(*obj, *bobj, o);if (*ierr) return;
FREECHAR(option, o);
}
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/sys/objects/options.c petsc-3.14.5+dfsg1/src/sys/objects/options.c
--- petsc-3.14.4+dfsg1/src/sys/objects/options.c 2021-02-03 17:42:34.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/sys/objects/options.c 2021-03-03 23:13:43.000000000 +0100
@@ -258,6 +258,7 @@
PetscErrorCode ierr;
PetscOptions tmp;
+ if (!defaultoptions) return 0;
/* Destroy any options that the user forgot to pop */
while (defaultoptions->previous) {
tmp = defaultoptions;
@@ -976,7 +977,8 @@
key[0] = '-'; /* keys must start with '-' */
ierr = PetscStrncpy(key+1,prefix,sizeof(key)-1);CHKERRQ(ierr);
ierr = PetscOptionsValidKey(key,&valid);CHKERRQ(ierr);
- if (!valid) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_USER,"Given prefix \"%s\" not valid (the first character must be a letter, do not include leading '-')",prefix);
+ if (!valid && options->prefixind > 0 && isdigit((int)prefix[0])) valid = PETSC_TRUE; /* If the prefix stack is not empty, make numbers a valid prefix */
+ if (!valid) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_USER,"Given prefix \"%s\" not valid (the first character must be a letter%s, do not include leading '-')",prefix,options->prefixind?" or digit":"");
start = options->prefixind ? options->prefixstack[options->prefixind-1] : 0;
ierr = PetscStrlen(prefix,&n);CHKERRQ(ierr);
if (n+1 > sizeof(options->prefix)-start) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_PLIB,"Maximum prefix length %d exceeded",sizeof(options->prefix));
@@ -1263,8 +1265,7 @@
PetscFunctionBegin;
options = options ? options : defaultoptions;
if (name[0] != '-') SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Name must begin with '-': Instead %s",name);
-
- if (!PetscOptNameCmp(name,"-help")) options->help = PETSC_FALSE;
+ if (!PetscOptNameCmp(name,"-help")) options->help = options->help_intro = PETSC_FALSE;
name++; /* skip starting dash */
@@ -1701,7 +1702,7 @@
options = options ? options : defaultoptions;
*used = PETSC_FALSE;
for (i=0; i<options->N; i++) {
- ierr = PetscStrcmp(options->names[i],name,used);CHKERRQ(ierr);
+ ierr = PetscStrcasecmp(options->names[i],name,used);CHKERRQ(ierr);
if (*used) {
*used = options->used[i];
break;
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/sys/objects/pinit.c petsc-3.14.5+dfsg1/src/sys/objects/pinit.c
--- petsc-3.14.4+dfsg1/src/sys/objects/pinit.c 2020-11-03 19:02:00.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/sys/objects/pinit.c 2021-03-03 23:13:43.000000000 +0100
@@ -843,13 +843,20 @@
/* check for OpenMPI version, it is not part of the MPI ABI initiative (is it part of another initiative that needs to be handled?) */
#elif defined(OMPI_MAJOR_VERSION)
{
- char *ver,bs[32],*bsf;
+ char *ver,bs[MPI_MAX_LIBRARY_VERSION_STRING],*bsf;
flg = PETSC_FALSE;
- ierr = PetscStrstr(mpilibraryversion,"Open MPI",&ver);if (ierr) return ierr;
- if (ver) {
- PetscSNPrintf(bs,32,"v%d.%d",OMPI_MAJOR_VERSION,OMPI_MINOR_VERSION);
- ierr = PetscStrstr(ver,bs,&bsf);if (ierr) return ierr;
- if (bsf) flg = PETSC_TRUE;
+#define PSTRSZ 2
+ char ompistr1[PSTRSZ][MPI_MAX_LIBRARY_VERSION_STRING] = {"Open MPI","FUJITSU MPI"};
+ char ompistr2[PSTRSZ][MPI_MAX_LIBRARY_VERSION_STRING] = {"v","Library "};
+ int i;
+ for (i=0; i<PSTRSZ; i++) {
+ ierr = PetscStrstr(mpilibraryversion,ompistr1[i],&ver);if (ierr) return ierr;
+ if (ver) {
+ PetscSNPrintf(bs,MPI_MAX_LIBRARY_VERSION_STRING,"%s%d.%d",ompistr2[i],OMPI_MAJOR_VERSION,OMPI_MINOR_VERSION);
+ ierr = PetscStrstr(ver,bs,&bsf);if (ierr) return ierr;
+ if (bsf) flg = PETSC_TRUE;
+ break;
+ }
}
if (!flg) {
fprintf(stderr,"PETSc Error --- Open MPI library version \n%s does not match what PETSc was compiled with %d.%d, aborting\n",mpilibraryversion,OMPI_MAJOR_VERSION,OMPI_MINOR_VERSION);
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/sys/objects/prefix.c petsc-3.14.5+dfsg1/src/sys/objects/prefix.c
--- petsc-3.14.4+dfsg1/src/sys/objects/prefix.c 2020-11-03 19:02:00.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/sys/objects/prefix.c 2021-03-03 23:09:50.000000000 +0100
@@ -180,7 +180,7 @@
Level: advanced
.seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectAppendOptionsPrefix(),
- PetscObjectGetOptionsPrefix(), TSPrependOptionsPrefix(), SNESPrependOptionsPrefix(), KSPPrependOptionsPrefix()
+ PetscObjectGetOptionsPrefix()
@*/
PetscErrorCode PetscObjectPrependOptionsPrefix(PetscObject obj,const char prefix[])
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/tao/interface/ftn-custom/ztaosolverf.c petsc-3.14.5+dfsg1/src/tao/interface/ftn-custom/ztaosolverf.c
--- petsc-3.14.4+dfsg1/src/tao/interface/ftn-custom/ztaosolverf.c 2020-11-03 19:02:00.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/tao/interface/ftn-custom/ztaosolverf.c 2021-03-03 23:09:50.000000000 +0100
@@ -370,6 +370,7 @@
char *t;
FIXCHAR(type,len,t);
+ CHKFORTRANNULLOBJECT(obj);
*ierr = TaoViewFromOptions(*ao,obj,t);if (*ierr) return;
FREECHAR(type,t);
}
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/tao/linesearch/interface/ftn-custom/ztaolinesearchf.c petsc-3.14.5+dfsg1/src/tao/linesearch/interface/ftn-custom/ztaolinesearchf.c
--- petsc-3.14.4+dfsg1/src/tao/linesearch/interface/ftn-custom/ztaolinesearchf.c 2020-11-03 19:02:00.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/tao/linesearch/interface/ftn-custom/ztaolinesearchf.c 2021-03-03 23:09:50.000000000 +0100
@@ -163,6 +163,7 @@
char *t;
FIXCHAR(type,len,t);
+ CHKFORTRANNULLOBJECT(obj);
*ierr = TaoLineSearchViewFromOptions(*ao,obj,t);if (*ierr) return;
FREECHAR(type,t);
}
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/ts/interface/ftn-custom/ztsf.c petsc-3.14.5+dfsg1/src/ts/interface/ftn-custom/ztsf.c
--- petsc-3.14.4+dfsg1/src/ts/interface/ftn-custom/ztsf.c 2020-12-03 18:03:40.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/ts/interface/ftn-custom/ztsf.c 2021-03-03 23:09:50.000000000 +0100
@@ -304,6 +304,7 @@
char *t;
FIXCHAR(type,len,t);
+ CHKFORTRANNULLOBJECT(obj);
*ierr = TSViewFromOptions(*ao,obj,t);if (*ierr) return;
FREECHAR(type,t);
}
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/ts/trajectory/interface/ftn-custom/ztrajf.c petsc-3.14.5+dfsg1/src/ts/trajectory/interface/ftn-custom/ztrajf.c
--- petsc-3.14.4+dfsg1/src/ts/trajectory/interface/ftn-custom/ztrajf.c 2020-11-03 19:02:00.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/ts/trajectory/interface/ftn-custom/ztrajf.c 2021-03-03 23:09:50.000000000 +0100
@@ -31,6 +31,7 @@
char *t;
FIXCHAR(type,len,t);
+ CHKFORTRANNULLOBJECT(obj);
*ierr = TSTrajectoryViewFromOptions(*ao,obj,t);if (*ierr) return;
FREECHAR(type,t);
}
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/vec/is/ao/interface/ftn-custom/zaof.c petsc-3.14.5+dfsg1/src/vec/is/ao/interface/ftn-custom/zaof.c
--- petsc-3.14.4+dfsg1/src/vec/is/ao/interface/ftn-custom/zaof.c 2020-11-03 19:02:00.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/vec/is/ao/interface/ftn-custom/zaof.c 2021-03-03 23:09:50.000000000 +0100
@@ -34,6 +34,7 @@
char *t;
FIXCHAR(type,len,t);
+ CHKFORTRANNULLOBJECT(obj);
*ierr = AOViewFromOptions(*ao,obj,t);if (*ierr) return;
FREECHAR(type,t);
}
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/vec/is/is/interface/ftn-custom/zindexf.c petsc-3.14.5+dfsg1/src/vec/is/is/interface/ftn-custom/zindexf.c
--- petsc-3.14.4+dfsg1/src/vec/is/is/interface/ftn-custom/zindexf.c 2020-11-03 19:02:00.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/vec/is/is/interface/ftn-custom/zindexf.c 2021-03-03 23:09:50.000000000 +0100
@@ -126,6 +126,7 @@
char *t;
FIXCHAR(type,len,t);
+ CHKFORTRANNULLOBJECT(obj);
*ierr = ISViewFromOptions(*ao,obj,t);if (*ierr) return;
FREECHAR(type,t);
}
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/vec/is/is/utils/ftn-custom/ziscoloringf.c petsc-3.14.5+dfsg1/src/vec/is/is/utils/ftn-custom/ziscoloringf.c
--- petsc-3.14.4+dfsg1/src/vec/is/is/utils/ftn-custom/ziscoloringf.c 2020-11-03 19:02:00.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/vec/is/is/utils/ftn-custom/ziscoloringf.c 2021-03-03 23:09:50.000000000 +0100
@@ -22,6 +22,7 @@
char *t;
FIXCHAR(type,len,t);
+ CHKFORTRANNULLOBJECT(obj);
*ierr = ISColoringViewFromOptions(*ao,obj,t);if (*ierr) return;
FREECHAR(type,t);
}
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/vec/is/section/interface/ftn-custom/zsectionf.c petsc-3.14.5+dfsg1/src/vec/is/section/interface/ftn-custom/zsectionf.c
--- petsc-3.14.4+dfsg1/src/vec/is/section/interface/ftn-custom/zsectionf.c 2020-11-03 19:02:00.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/vec/is/section/interface/ftn-custom/zsectionf.c 2021-03-03 23:09:50.000000000 +0100
@@ -13,6 +13,7 @@
char *t;
FIXCHAR(type,len,t);
+ CHKFORTRANNULLOBJECT(obj);
*ierr = PetscSectionViewFromOptions(*ao,obj,t);if (*ierr) return;
FREECHAR(type,t);
}
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/vec/is/sf/interface/ftn-custom/zsf.c petsc-3.14.5+dfsg1/src/vec/is/sf/interface/ftn-custom/zsf.c
--- petsc-3.14.4+dfsg1/src/vec/is/sf/interface/ftn-custom/zsf.c 2020-12-03 18:03:41.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/vec/is/sf/interface/ftn-custom/zsf.c 2021-03-03 23:13:43.000000000 +0100
@@ -88,6 +88,7 @@
char *t;
FIXCHAR(type,len,t);
+ CHKFORTRANNULLOBJECT(obj);
*ierr = PetscSFViewFromOptions(*ao,obj,t);if (*ierr) return;
FREECHAR(type,t);
}
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/vec/is/utils/ftn-custom/zisltogf.c petsc-3.14.5+dfsg1/src/vec/is/utils/ftn-custom/zisltogf.c
--- petsc-3.14.4+dfsg1/src/vec/is/utils/ftn-custom/zisltogf.c 2020-11-03 19:02:00.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/vec/is/utils/ftn-custom/zisltogf.c 2021-03-03 23:09:50.000000000 +0100
@@ -50,6 +50,7 @@
char *t;
FIXCHAR(type,len,t);
+ CHKFORTRANNULLOBJECT(obj);
*ierr = ISLocalToGlobalMappingViewFromOptions(*ao,obj,t);if (*ierr) return;
FREECHAR(type,t);
}
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/vec/pf/interface/ftn-custom/zpff.c petsc-3.14.5+dfsg1/src/vec/pf/interface/ftn-custom/zpff.c
--- petsc-3.14.4+dfsg1/src/vec/pf/interface/ftn-custom/zpff.c 2020-11-03 19:02:00.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/vec/pf/interface/ftn-custom/zpff.c 2021-03-03 23:09:50.000000000 +0100
@@ -13,6 +13,7 @@
char *t;
FIXCHAR(type,len,t);
+ CHKFORTRANNULLOBJECT(obj);
*ierr = PFViewFromOptions(*ao,obj,t);if (*ierr) return;
FREECHAR(type,t);
}
diff -Nru --exclude '*.html' --exclude '*docs*' petsc-3.14.4+dfsg1/src/vec/vec/interface/ftn-custom/zvectorf.c petsc-3.14.5+dfsg1/src/vec/vec/interface/ftn-custom/zvectorf.c
--- petsc-3.14.4+dfsg1/src/vec/vec/interface/ftn-custom/zvectorf.c 2021-01-10 03:07:51.000000000 +0100
+++ petsc-3.14.5+dfsg1/src/vec/vec/interface/ftn-custom/zvectorf.c 2021-03-03 23:09:50.000000000 +0100
@@ -370,6 +370,7 @@
char *t;
FIXCHAR(type,len,t);
+ CHKFORTRANNULLOBJECT(obj);
*ierr = VecViewFromOptions(*ao,obj,t);if (*ierr) return;
FREECHAR(type,t);
}
@@ -378,6 +379,7 @@
char *t;
FIXCHAR(type,len,t);
+ CHKFORTRANNULLOBJECT(obj);
*ierr = VecStashViewFromOptions(*ao,obj,t);if (*ierr) return;
FREECHAR(type,t);
}
Reply to: