<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
Hi,
<div class=""><br class="">
</div>
<div class="">Adding up to my previous email: looking at all calls to DMGetWorkArray / DMRestoreArray in DMPlexVecGetClosure/DMPlexVecRestoreClosure , I don’t understand why they don’t match. Here is a cleaned up lldb output from ex96. See how the mem argument
 in the second calls to DMGetWorkArray and DMRestoreArray (highlighted in black) don’t match while those in red and orange do.
<div class=""><br class="">
</div>
<div class="">Blaise</div>
<div class=""><br class="">
<div class=""><br class="">
</div>
<div class=""><br class="">
</div>
<div class="">
<div style="background-color: rgb(255, 255, 255); font-family: "Fira Code", Menlo, Monaco, "Courier New", monospace, Menlo, Monaco, "Courier New", monospace; line-height: 18px; white-space: pre;" class="">
<div class="">* thread <span style="color: #008000;" class="">#1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.2</span></div>
<div class="">frame <span style="color: #008000;" class="">#0: 0x000000010494f698 ex96`main(argc=5, argv=0x000000016b4b2788) at ex96.c:49:3</span></div>
<div class="">46 </div>
<div class="">47 PetscCall(PetscPrintf(PETSC_COMM_WORLD, <span style="color: #a31515;" class="">
"Point %"</span> PetscInt_FMT <span style="color: #a31515;" class="">"\n"</span>, pStart + 1))<span style="color: #008000;" class="">;</span></div>
<div class="">48 <span style="color: #0000ff;" class="">cval</span> = NULL<span style="color: #008000;" class="">;</span></div>
<div class="">-> 49 PetscCall(DMPlexVecGetClosure(dm, section, v, pStart + 1, &clSize, &cval))<span style="color: #008000;" class="">;</span></div>
<div class="">50 PetscCall(PetscPrintf(PETSC_COMM_WORLD, <span style="color: #a31515;" class="">
"clSize %"</span> PetscInt_FMT <span style="color: #a31515;" class="">"\n"</span>, clSize))<span style="color: #008000;" class="">;</span></div>
<div class="">51 if (clSize > 0) PetscCall(PetscRealView(clSize, cval, PETSC_VIEWER_STDOUT_SELF))<span style="color: #008000;" class="">;</span></div>
<div class="">52 PetscCall(DMPlexVecRestoreClosure(dm, section, v, pStart + 1, &clSize, &cval))<span style="color: #008000;" class="">;</span></div>
<div class="">Target 0: (ex96) stopped.</div>
<div class="">(lldb) c</div>
<br class="">
<div class="">(lldb) bt</div>
<div class="">* thread <span style="color: #008000;" class="">#1, queue = 'com.apple.main-thread', stop reason = breakpoint 2.1</span></div>
<div class="">* frame <font color="#008000" class="">#0: 0x00000001097e3c9c libpetsc.3.017.4.dylib`DMGetWorkArray(dm=0x000000015c0f0250, count=129, dtype=1275069445, mem=</font><b class=""><font color="#ff2600" class="">0x000000016b4b1cf8</font></b><font color="#008000" class="">)
 at dm.c:1569:3</font></div>
<div class="">frame <span style="color: #008000;" class="">#1: 0x0000000109ccee28 libpetsc.3.017.4.dylib`DMPlexGetTransitiveClosure_Internal(dm=0x000000015c0f0250, p=1, ornt=0, useCone=PETSC_TRUE, numPoints=0x000000016b4b1eac, points=0x000000016b4b1ea0) at
 plex.c:3560:3</span></div>
<div class="">frame <span style="color: #008000;" class="">#2: 0x0000000109cd2f20 libpetsc.3.017.4.dylib`DMPlexGetTransitiveClosure(dm=0x000000015c0f0250, p=1, useCone=PETSC_TRUE, numPoints=0x000000016b4b1eac, points=0x000000016b4b1ea0) at plex.c:3650:3</span></div>
<div class="">frame <span style="color: #008000;" class="">#3: 0x0000000109ceb028 libpetsc.3.017.4.dylib`DMPlexGetCompressedClosure(dm=0x000000015c0f0250, section=0x000000015c09e650, point=1, numPoints=0x000000016b4b1ff4, points=0x000000016b4b2010, clSec=0x000000016b4b2020,
 clPoints=0x000000016b4b2018, clp=0x000000016b4b2008) at plex.c:5555:5</span></div>
<div class="">frame <span style="color: #008000;" class="">#4: 0x0000000109cec6d0 libpetsc.3.017.4.dylib`DMPlexVecGetClosure(dm=0x000000015c0f0250, section=0x000000015c09e650, v=0x000000015c09f050, point=1, csize=0x000000016b4b21c4, values=0x000000016b4b21c8)
 at plex.c:5741:3</span></div>
<div class="">frame <span style="color: #008000;" class="">#5: 0x000000010494f70c ex96`main(argc=5, argv=0x000000016b4b2788) at ex96.c:49:3</span></div>
<div class="">frame <span style="color: #008000;" class="">#6: 0x0000000104b9508c dyld`start + 520</span></div>
<div class="">(lldb) c</div>
<div class="">Process 64051 resuming</div>
<div class="">Command <span style="color: #008000;" class="">#2 'c' continued the target.</span></div>
<div class="">(lldb) bt</div>
<div class="">* thread <span style="color: #008000;" class="">#1, queue = 'com.apple.main-thread', stop reason = breakpoint 2.1</span></div>
<div class="">* frame <font color="#008000" class="">#0: 0x00000001097e3c9c libpetsc.3.017.4.dylib`DMGetWorkArray(dm=0x000000015c0f0250, count=86, dtype=1275069445, mem=</font><b class="">0x000000016b4b1d00</b><font color="#008000" class="">) at dm.c:1569:3</font></div>
<div class="">frame <span style="color: #008000;" class="">#1: 0x0000000109ccef20 libpetsc.3.017.4.dylib`DMPlexGetTransitiveClosure_Internal(dm=0x000000015c0f0250, p=1, ornt=0, useCone=PETSC_TRUE, numPoints=0x000000016b4b1eac, points=0x000000016b4b1ea0) at
 plex.c:3563:10</span></div>
<div class="">frame <span style="color: #008000;" class="">#2: 0x0000000109cd2f20 libpetsc.3.017.4.dylib`DMPlexGetTransitiveClosure(dm=0x000000015c0f0250, p=1, useCone=PETSC_TRUE, numPoints=0x000000016b4b1eac, points=0x000000016b4b1ea0) at plex.c:3650:3</span></div>
<div class="">frame <span style="color: #008000;" class="">#3: 0x0000000109ceb028 libpetsc.3.017.4.dylib`DMPlexGetCompressedClosure(dm=0x000000015c0f0250, section=0x000000015c09e650, point=1, numPoints=0x000000016b4b1ff4, points=0x000000016b4b2010, clSec=0x000000016b4b2020,
 clPoints=0x000000016b4b2018, clp=0x000000016b4b2008) at plex.c:5555:5</span></div>
<div class="">frame <span style="color: #008000;" class="">#4: 0x0000000109cec6d0 libpetsc.3.017.4.dylib`DMPlexVecGetClosure(dm=0x000000015c0f0250, section=0x000000015c09e650, v=0x000000015c09f050, point=1, csize=0x000000016b4b21c4, values=0x000000016b4b21c8)
 at plex.c:5741:3</span></div>
<div class="">frame <span style="color: #008000;" class="">#5: 0x000000010494f70c ex96`main(argc=5, argv=0x000000016b4b2788) at ex96.c:49:3</span></div>
<div class="">frame <span style="color: #008000;" class="">#6: 0x0000000104b9508c dyld`start + 520</span></div>
<div class="">(lldb) c</div>
<div class="">Process 64051 resuming</div>
<div class="">Command <span style="color: #008000;" class="">#2 'c' continued the target.</span></div>
<div class="">(lldb) bt</div>
<div class="">* thread <span style="color: #008000;" class="">#1, queue = 'com.apple.main-thread', stop reason = breakpoint 3.1</span></div>
<div class="">* frame <font color="#008000" class="">#0: 0x00000001097e4af0 libpetsc.3.017.4.dylib`DMRestoreWorkArray(dm=0x000000015c0f0250, count=129, dtype=1275069445, mem=</font><b class=""><font color="#ff2600" class="">0x000000016b4b1cf8</font></b><font color="#008000" class="">)
 at dm.c:1617:3</font></div>
<div class="">frame <span style="color: #008000;" class="">#1: 0x0000000109ccf8b8 libpetsc.3.017.4.dylib`DMPlexGetTransitiveClosure_Internal(dm=0x000000015c0f0250, p=1, ornt=0, useCone=PETSC_TRUE, numPoints=0x000000016b4b1eac, points=0x000000016b4b1ea0) at
 plex.c:3612:3</span></div>
<div class="">frame <span style="color: #008000;" class="">#2: 0x0000000109cd2f20 libpetsc.3.017.4.dylib`DMPlexGetTransitiveClosure(dm=0x000000015c0f0250, p=1, useCone=PETSC_TRUE, numPoints=0x000000016b4b1eac, points=0x000000016b4b1ea0) at plex.c:3650:3</span></div>
<div class="">frame <span style="color: #008000;" class="">#3: 0x0000000109ceb028 libpetsc.3.017.4.dylib`DMPlexGetCompressedClosure(dm=0x000000015c0f0250, section=0x000000015c09e650, point=1, numPoints=0x000000016b4b1ff4, points=0x000000016b4b2010, clSec=0x000000016b4b2020,
 clPoints=0x000000016b4b2018, clp=0x000000016b4b2008) at plex.c:5555:5</span></div>
<div class="">frame <span style="color: #008000;" class="">#4: 0x0000000109cec6d0 libpetsc.3.017.4.dylib`DMPlexVecGetClosure(dm=0x000000015c0f0250, section=0x000000015c09e650, v=0x000000015c09f050, point=1, csize=0x000000016b4b21c4, values=0x000000016b4b21c8)
 at plex.c:5741:3</span></div>
<div class="">frame <span style="color: #008000;" class="">#5: 0x000000010494f70c ex96`main(argc=5, argv=0x000000016b4b2788) at ex96.c:49:3</span></div>
<div class="">frame <span style="color: #008000;" class="">#6: 0x0000000104b9508c dyld`start + 520</span></div>
<div class="">(lldb) c</div>
<div class="">Process 64051 resuming</div>
<div class="">Command <span style="color: #008000;" class="">#2 'c' continued the target.</span></div>
<div class="">(lldb) bt</div>
<div class="">* thread <span style="color: #008000;" class="">#1, queue = 'com.apple.main-thread', stop reason = breakpoint 2.1</span></div>
<div class="">* frame <font color="#008000" class="">#0: 0x00000001097e3c9c libpetsc.3.017.4.dylib`DMGetWorkArray(dm=0x000000015c0f0250, count=0, dtype=1275070475, mem=</font><b class=""><font color="#ff9300" class="">0x000000016b4b21c8</font></b><font color="#008000" class="">)
 at dm.c:1569:3</font></div>
<div class="">frame <span style="color: #008000;" class="">#1: 0x0000000109cec938 libpetsc.3.017.4.dylib`DMPlexVecGetClosure(dm=0x000000015c0f0250, section=0x000000015c09e650, v=0x000000015c09f050, point=1, csize=0x000000016b4b21c4, values=0x000000016b4b21c8)
 at plex.c:5755:12</span></div>
<div class="">frame <span style="color: #008000;" class="">#2: 0x000000010494f70c ex96`main(argc=5, argv=0x000000016b4b2788) at ex96.c:49:3</span></div>
<div class="">frame <span style="color: #008000;" class="">#3: 0x0000000104b9508c dyld`start + 520</span></div>
<div class="">(lldb) c</div>
<div class="">Process 64051 resuming</div>
<div class="">Command <span style="color: #008000;" class="">#2 'c' continued the target.</span></div>
<div class="">(lldb) bt</div>
<div class="">* thread <span style="color: #008000;" class="">#1, queue = 'com.apple.main-thread', stop reason = breakpoint 3.1</span></div>
<div class="">* frame <font color="#008000" class="">#0: 0x00000001097e4af0 libpetsc.3.017.4.dylib`DMRestoreWorkArray(dm=0x000000015c0f0250, count=0, dtype=1275069445, mem=</font><b class="">0x000000016b4b2010</b><font color="#008000" class="">) at dm.c:1617:3</font></div>
<div class="">frame <span style="color: #008000;" class="">#1: 0x0000000109cd3500 libpetsc.3.017.4.dylib`DMPlexRestoreTransitiveClosure(dm=0x000000015c0f0250, p=1, useCone=PETSC_TRUE, numPoints=0x000000016b4b1ff4, points=0x000000016b4b2010) at plex.c:3677:3</span></div>
<div class="">frame <span style="color: #008000;" class="">#2: 0x0000000109ceb728 libpetsc.3.017.4.dylib`DMPlexRestoreCompressedClosure(dm=0x000000015c0f0250, section=0x000000015c09e650, point=1, numPoints=0x000000016b4b1ff4, points=0x000000016b4b2010, clSec=0x000000016b4b2020,
 clPoints=0x000000016b4b2018, clp=0x000000016b4b2008) at plex.c:5567:5</span></div>
<div class="">frame <span style="color: #008000;" class="">#3: 0x0000000109cecea0 libpetsc.3.017.4.dylib`DMPlexVecGetClosure(dm=0x000000015c0f0250, section=0x000000015c09e650, v=0x000000015c09f050, point=1, csize=0x000000016b4b21c4, values=0x000000016b4b21c8)
 at plex.c:5767:3</span></div>
<div class="">frame <span style="color: #008000;" class="">#4: 0x000000010494f70c ex96`main(argc=5, argv=0x000000016b4b2788) at ex96.c:49:3</span></div>
<div class="">frame <span style="color: #008000;" class="">#5: 0x0000000104b9508c dyld`start + 520</span></div>
<div class="">(lldb) c</div>
<div class="">Process 64051 resuming</div>
<div class="">Command <span style="color: #008000;" class="">#2 'c' continued the target.</span></div>
<div class="">(lldb) clSize 0</div>
<div class="">(lldb) bt</div>
<div class="">* thread <span style="color: #008000;" class="">#1, queue = 'com.apple.main-thread', stop reason = breakpoint 3.1</span></div>
<div class="">* frame <font color="#008000" class="">#0: 0x00000001097e4af0 libpetsc.3.017.4.dylib`DMRestoreWorkArray(dm=0x000000015c0f0250, count=0, dtype=1275070475, mem=</font><b class=""><font color="#ff9300" class="">0x000000016b4b21c8</font></b><font color="#008000" class="">)
 at dm.c:1617:3</font></div>
<div class="">frame <span style="color: #008000;" class="">#1: 0x0000000109cf17f8 libpetsc.3.017.4.dylib`DMPlexVecRestoreClosure(dm=0x000000015c0f0250, section=0x000000015c09e650, v=0x000000015c09f050, point=1, csize=0x000000016b4b21c4, values=0x000000016b4b21c8)
 at plex.c:5876:3</span></div>
<div class="">frame <span style="color: #008000;" class="">#2: 0x000000010494f99c ex96`main(argc=5, argv=0x000000016b4b2788) at ex96.c:52:3</span></div>
<div class="">frame <span style="color: #008000;" class="">#3: 0x0000000104b9508c dyld`start + 520</span></div>
<div class="">(lldb) c</div>
<br class="">
</div>
<div class=""><br class="">
</div>
<div class=""><br class="">
<div><br class="">
<blockquote type="cite" class="">
<div class="">On Sep 5, 2022, at 11:34 AM, Blaise Bourdin <<a href="mailto:bourdin@mcmaster.ca" class="">bourdin@mcmaster.ca</a>> wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<div class="">
<div class="BodyFragment"><font size="2" class=""><span style="font-size:11pt;" class="">
<div class="PlainText">All,<br class="">
<br class="">
I am running in a very strange issue with DMPlexVecGetClosure/DMPlexVecRestoreClosure in Fortran when passing a point such that the returned array should be of 0 size. The typical use case is a vector associated with cell-based unknowns, and requesting the
 values on the closure of a vertex.<br class="">
<br class="">
I am attaching C and fortran90 examples. They define a Section with a single value at the first cell of a mesh, an associated Vec, then call DMPlexVecGetClosure/DMPlexVecRestoreClosure on the second element. The C example is fine, but the fortran one crashes
 when calling DMPlexVecRestoreClosure.<br class="">
<br class="">
SiMini:tests (main)$ ./ex96f90 -i ${PETSC_DIR}/share/petsc/datafiles/meshes/SquareFaceSet.exo a<br class="">
Point: 0 <br class="">
size(cval): 1 <br class="">
 0:  -1.0000e+00<br class="">
Point: 1 <br class="">
size(cval): 0 <br class="">
[0]PETSC ERROR: --------------------- Error Message --------------------------------------------------------------<br class="">
[0]PETSC ERROR: Object is in wrong state<br class="">
[0]PETSC ERROR: Array was not checked out<br class="">
[0]PETSC ERROR: See <a href="https://petsc.org/release/faq/" class="">https://petsc.org/release/faq/</a> for trouble shooting.<br class="">
[0]PETSC ERROR: Petsc Development GIT revision: v3.17.4-1175-g59be91c8676  GIT Date: 2022-09-01 12:22:09 -0400<br class="">
[0]PETSC ERROR: ./ex96f90 on a monterey-gcc12.2-arm64-basic-g named SiMini.local by blaise Mon Sep  5 11:24:40 2022<br class="">
[0]PETSC ERROR: Configure options --CFLAGS="-Wimplicit-function-declaration -Wunused -Wuninitialized" --FFLAGS="-ffree-line-length-none -fallow-argument-mismatch -Wunused -Wuninitialized" --download-chaco-1 --download-exodusii=1 --download-hdf5=1 --download-metis=1
 --download-netcdf=1 --download-parmetis=1 --download-pnetcdf=1 --download-zlib=1 --with-debugging=1 --with-exodusii-fortran-bindings --with-shared-libraries=1 --with-x11=1 --download-ctetgen=1 --download-triangle=1 --download-p4est=1<br class="">
[0]PETSC ERROR: #1 DMRestoreWorkArray() at /opt/HPC/petsc-main/src/dm/interface/dm.c:1628<br class="">
[0]PETSC ERROR: #2 DMPlexVecRestoreClosure() at /opt/HPC/petsc-main/src/dm/impls/plex/plex.c:5876<br class="">
[0]PETSC ERROR: #3 ex96f90.F90:62<br class="">
Abort(73) on node 0 (rank 0 in comm 16): application called MPI_Abort(MPI_COMM_SELF, 73) - process 0<br class="">
<br class="">
I get the same behaviour on multiple platforms / compilers.<br class="">
<br class="">
I followed the whole calling tree for DMGetWorkArray / DMRestoreArray in C and Fortran and didn’t see anything of interest.<br class="">
I tried to modify DMGetWorkArray / DMRestoreWorkArray to handle the case of a work array of length 0 differently, but only managed to break other plex examples.<br class="">
<br class="">
A possible fix at eth application code level would be to first compute the size of the closure in the section and only call DMPlexVecGetClosure/DMPlexVecRestoreClosure when it is >0. This is a bit silly however, as this is precisely the first thing does in
 DMPlexVecGetClosure.<br class="">
<br class="">
Any help would be MUCH appreciated.<br class="">
<br class="">
Regards,<br class="">
Blaise<br class="">
<br class="">
</div>
</span></font></div>
<div class="BodyFragment"><font size="2" class=""><span style="font-size:11pt;" class="">
<div class="PlainText"><br class="">
<br class="">
— <br class="">
Tier 1 Canada Research Chair in Mathematical and Computational Aspects of Solid Mechanics<br class="">
Professor, Department of Mathematics & Statistics<br class="">
Hamilton Hall room 409A, McMaster University<br class="">
1280 Main Street West, Hamilton, Ontario L8S 4K1, Canada <br class="">
<a href="https://www.math.mcmaster.ca/bourdin" class="">https://www.math.mcmaster.ca/bourdin</a> | +1 (905) 525 9140 ext. 27243<br class="">
<br class="">
</div>
</span></font></div>
</div>
<span id="cid:25E3E1C042C1AE41AF8CFB0BBEDEFF94@CANPRD01.PROD.OUTLOOK.COM"><ex96.c></span><span id="cid:B21DDC1207BC484798B27AC6089B9642@CANPRD01.PROD.OUTLOOK.COM"><ex96f90.F90></span></div>
</blockquote>
</div>
<br class="">
<div class="">
<div dir="auto" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
<div dir="auto" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
<div dir="auto" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
<div dir="auto" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
<div dir="auto" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
<div dir="auto" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
<div dir="auto" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
<div dir="auto" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
<div dir="auto" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
<div dir="auto" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
<div dir="auto" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
<div dir="auto" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
<div dir="auto" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
<div>— <br class="">
Tier 1 Canada Research Chair in Mathematical and Computational Aspects of Solid Mechanics</div>
<div>Professor, Department of Mathematics & Statistics<br class="">
Hamilton Hall room 409A, McMaster University<br class="">
1280 Main Street West, Hamilton, Ontario L8S 4K1, Canada <br class="">
<a href="https://www.math.mcmaster.ca/bourdin" class="">https://www.math.mcmaster.ca/bourdin</a> | +1 (905) 525 9140 ext. 27243</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<br class="">
</div>
</div>
</div>
</div>
</body>
</html>