<div dir="ltr">Hi everyone,<div><br></div><div>I am trying to copy the stiffness matrix that I generated in form function to the jacobian matrix jac in form jacobian. The piece of code for that:</div><div><br></div><div><br>my_ctx* ptr = (my_ctx*) ctx; // cast the pointer to void into pointer to struct<br><br> ierr = MatGetOwnershipRange(jac,&istart,&iend);<br>       ierr = MatGetSize(ptr->K,&m,&n); CHKERRQ(ierr);<br><br>  ierr = MatAssemblyBegin(ptr->K,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);<br>  ierr = MatAssemblyEnd(ptr->K,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);<br><br> for(i=istart;i<iend;i++)<br>{<br> for(j=0;j<n;j++)<br> {<br> ierr = MatGetValue(ptr->K, i, j, &v);CHKERRQ(ierr);<br> ierr = MatSetValue(jac, i, j, v, INSERT_VALUES);CHKERRQ(ierr);<br> ierr = MatSetValue(B, i, j, v, INSERT_VALUES);CHKERRQ(ierr);<br> }<br> }<br></div><div><br></div><div>The following works for a single process run only. For a multiprocessor run the ptr->K does not get copied correctly to jac</div><div><br></div><div>I have also tried the following commands</div><div><br></div><div>ierr = MatDuplicate(ptr->K,MAT_COPY_VALUES,&jac);CHKERRQ(ierr);<br>ierr = MatDuplicate(ptr->K,MAT_COPY_VALUES,&B);CHKERRQ(ierr);<br><br>    ierr = MatCopy(ptr->K,jac,SAME_NONZERO_PATTERN);CHKERRQ(ierr);<br>     ierr = MatCopy(ptr->K,B,SAME_NONZERO_PATTERN);CHKERRQ(ierr);  <br></div><div><br></div><div><br></div><div>I get Petsc object in a wrong state error.</div><div><br></div><div>Could you please advise on what is most efficient way to copy the matrix from the user defined struct to jacobian.</div><div><br></div><div>Thanks</div><div>Kaushik</div></div>