11#include < petscksp.h>
22#include < petscdmda.h>
33
4+ #include < petscdmswarm.h>
45#include < petsctime.h>
56
67PetscErrorCode montaKeThermal_general_2d (PetscReal *Ke, PetscReal *Me, PetscReal *Fe);
@@ -38,6 +39,8 @@ extern long GaussQuad;
3839
3940extern long T_NE;
4041
42+ extern DM dms;
43+
4144extern PetscReal *TKe, *TCe, *TFe, *TCe_fut, *TMe, *Ttotal, *Ttotal_b;
4245
4346extern PetscReal *T_vec_aux_ele;
@@ -556,7 +559,7 @@ PetscErrorCode write_pressure(int cont, PetscInt binary_out)
556559
557560PetscErrorCode write_geoq_ (int cont, PetscInt binary_out)
558561{
559-
562+ PetscErrorCode ierr= 0 ;
560563 char variable_name[100 ];
561564
562565 PetscFunctionBeginUser;
@@ -582,6 +585,11 @@ PetscErrorCode write_geoq_(int cont, PetscInt binary_out)
582585 }
583586
584587 if (magmatism_flag==PETSC_TRUE){
588+
589+ PetscInt nlocal,bs,p;
590+
591+ ierr = DMSwarmGetLocalSize (dms,&nlocal);CHKERRQ (ierr);
592+
585593 sprintf (variable_name," X_depletion" );
586594 write_all_ (cont,X_depletion,variable_name,binary_out);
587595
@@ -590,6 +598,14 @@ PetscErrorCode write_geoq_(int cont, PetscInt binary_out)
590598
591599 sprintf (variable_name," dPhi" );
592600 write_all_ (cont,dPhi,variable_name,binary_out);
601+
602+ PetscReal *dPhi_array;
603+
604+ ierr = DMSwarmGetField (dms," dPhi" ,&bs,NULL ,(void **)&dPhi_array);CHKERRQ (ierr);
605+ for (p=0 ; p<nlocal; p++) {
606+ dPhi_array[p] = 0.0 ;
607+ }
608+ ierr = DMSwarmRestoreField (dms," dPhi" ,&bs,NULL ,(void **)&dPhi_array);CHKERRQ (ierr);
593609 }
594610
595611 PetscFunctionReturn (0 );
0 commit comments