@@ -54,7 +54,7 @@ void MPMesh::calculateStrain(){
5454 vTanOverR = vTanOverR + MPsBasis (mp, i) * tanLatVertexRotatedOverRadius (iVertex, 0 ) * velField (iVertex, 1 );
5555 // Debugging
5656 if (MPsAppID (mp)==0 ){
57- printf (" Strain Calc: iVertex %d vel field %.15e %.15e \n " , iVertex, velField (iVertex, 0 ), velField (iVertex, 1 ));
57+ printf (" Strain Calc: iVertex %d vel field %.15e %.15e \n " , iVertex, velField (iVertex, 0 ), velField (iVertex, 1 ));
5858 }
5959 }
6060 MPsStrainRate (mp, 0 ) = v11 - vTanOverR;
@@ -66,7 +66,10 @@ void MPMesh::calculateStrain(){
6666}
6767
6868void MPMesh::calculateStress (){
69- // MeshFields
69+ static int int_xx =0 ;
70+ // std::cout<<"Counting stress: "<< int_xx << std::endl;
71+
72+ // MeshFields
7073 auto solveStress = p_mesh->getMeshField <polyMPO::MeshF_SolveStress>();
7174 auto elasticTimeStep = p_mesh->getElasticTimeStep ();
7275 auto dynamicTimeStep = p_mesh->getDynamicTimeStep ();
@@ -89,12 +92,13 @@ void MPMesh::calculateStress(){
8992 MPsStress (mp, m) = stress[m];
9093 // Debugging
9194 if (MPsAppID (mp)==0 ){
92- printf (" Strain in GPU: %.15e %.15e %.15e\n " , MPsStrainRate (mp, 0 ), MPsStrainRate (mp, 1 ), MPsStrainRate (mp, 2 ));
93- printf (" Stress in GPU: %.15e %.15e %.15e\n " , MPsStress (mp, 0 ), MPsStress (mp, 1 ), MPsStress (mp, 2 ));
95+ // printf("Strain in GPU: %.15e %.15e %.15e\n", MPsStrainRate(mp, 0), MPsStrainRate(mp, 1), MPsStrainRate(mp, 2));
96+ // printf("Stress in GPU: %.15e %.15e %.15e\n", MPsStress(mp, 0), MPsStress(mp, 1), MPsStress(mp, 2));
9497 }
9598 }
9699 };
97100 p_MPs->parallel_for (setMPStress, " setMPStress" );
101+ int_xx++;
98102}
99103
100104void MPMesh::calculateStressDivergence (){
@@ -170,19 +174,20 @@ void MPMesh::calculateStressDivergence(){
170174 p_MPs->parallel_for (stress_div, " assembly" );
171175
172176 // TODO COMMUNICATE THE VERTEX FIELDS
173-
174177
175178 auto stressDivergence = p_mesh->getMeshField <MeshF_StressDivergence>();
176179
177- Kokkos::parallel_for (" calculate_divergence" , numVtx, KOKKOS_LAMBDA (const int vtx){
178- stressDivergence (vtx, 0 ) = stress_divU (vtx);
179- stressDivergence (vtx, 1 ) = stress_divV (vtx);
180+ Kokkos::parallel_for (" calculate_divergence" , numVtx, KOKKOS_LAMBDA (const int vtx){
181+
182+ double ramp = nearAnEdge_l (vtx);
183+ double invM = 1.0 /vtxMatrixMass_l (vtx);
184+ invM = vtxMatrixMass_l (vtx) >1e-4 ? invM : 0 ;
185+
186+ stressDivergence (vtx, 0 ) = ramp * stress_divU (vtx) + (1 - ramp) * divU_edge (vtx) * invM ;
187+ stressDivergence (vtx, 1 ) = ramp * stress_divV (vtx) + (1 - ramp) * divV_edge (vtx) * invM ;
180188 // Debugging
181- if (vtx >= 10 && vtx <= 11 ) {
182- // printf("Vtx %d Divergence %.15e %.15e %.15e %.15e %.15e %.15e \n", vtx, nearAnEdge_l(vtx), vtxMatrixMass_l(vtx),
183- // stress_divU(vtx), stress_divV(vtx),
184- // divU_edge(vtx), divV_edge(vtx));
185- printf (" Vtx %d Divergence %.15e %.15e \n " , vtx, stressDivergence (vtx, 0 ), stressDivergence (vtx, 1 ));
189+ if (vtx == 10 || vtx == 11 || vtx == 1476 || vtx == 1481 ) {
190+ // printf("Vtx %d Divergence %.15e %.15e \n", vtx, stressDivergence(vtx, 0), stressDivergence(vtx, 1));
186191 }
187192 });
188193
@@ -544,7 +549,7 @@ void MPMesh::push_ahead(){
544549 calcBasis ();
545550 sphericalInterpolation<MeshF_RotLatLonIncr>(*this );
546551 sphericalInterpolation<MeshF_OnSurfVeloIncr>(*this );
547-
552+ sphericalInterpolation2Fields (* this );
548553 // Push the MPs
549554 p_MPs->updateRotLatLonAndXYZ2Tgt (p_mesh->getSphereRadius (), p_mesh->getRotatedFlag ());
550555 pumipic::RecordTime (" PolyMPO_interpolateAndPush" , timer.seconds ());
0 commit comments