Skip to content

Commit b695be2

Browse files
committed
MPI verified EVP 16 proc, 2562
1 parent 12eaa25 commit b695be2

4 files changed

Lines changed: 71 additions & 4 deletions

File tree

src/pmpo_MPMesh.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,8 @@ void MPMesh::calculateStress(){
8484

8585
Vec3d strain_rate (MPsStrainRate(mp, 0), MPsStrainRate(mp, 1), MPsStrainRate(mp, 2));
8686
Vec3d stress(MPsStress(mp, 0), MPsStress(mp, 1), MPsStress(mp, 2));
87-
//constitutive_evp(strain_rate, stress, MPsIcePressure(mp, 0), MPsRepPressure(mp, 0), MPsArea(mp, 0), elasticTimeStep, dampingTimescale);
88-
constitutive_linear(strain_rate, stress);
87+
constitutive_evp(strain_rate, stress, MPsIcePressure(mp, 0), MPsRepPressure(mp, 0), MPsArea(mp, 0), elasticTimeStep, dampingTimescale);
88+
//constitutive_linear(strain_rate, stress);
8989
for (int m=0 ; m<3; m++)
9090
MPsStress(mp, m) = stress[m];
9191
/*
@@ -176,9 +176,9 @@ void MPMesh::calculateStressDivergence(){
176176
};
177177
p_MPs->parallel_for(stress_div, " stress_div_assembly");
178178

179-
//TO DO make to 2 fields instrad of 4 to reduce latency
180179
if(numProcsTot>1){
181-
//Takes contribution of halo vertices and adds it in halo cells
180+
181+
//Takes contribution of halo vertices and adds it in owner procs
182182
communicate_and_take_halo_contributions(stress_divU, numVertices, 1, 0, 0);
183183
communicate_and_take_halo_contributions(stress_divV, numVertices, 1, 0, 0);
184184
communicate_and_take_halo_contributions(divU_edge, numVertices, 1, 0, 0);
@@ -188,6 +188,7 @@ void MPMesh::calculateStressDivergence(){
188188
communicate_and_take_halo_contributions(stress_divV, numVertices, 1, 1, 1);
189189
communicate_and_take_halo_contributions(divU_edge, numVertices, 1, 1, 1);
190190
communicate_and_take_halo_contributions(divV_edge, numVertices, 1, 1, 1);
191+
191192
}
192193

193194
auto stressDivergence = p_mesh->getMeshField<MeshF_StressDivergence>();

src/pmpo_c.cpp

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -620,6 +620,54 @@ void polympo_calculateMPStress_f(MPMesh_ptr p_mpmesh){
620620
mpMesh->calculateStress();
621621
}
622622

623+
void polympo_setMPStress_f(MPMesh_ptr p_mpmesh, const int nComps, const int numMPs, const double* mpStressIn) {
624+
Kokkos::Timer timer;
625+
checkMPMeshValid(p_mpmesh);
626+
auto p_MPs = ((polyMPO::MPMesh*)p_mpmesh)->p_MPs;
627+
PMT_ALWAYS_ASSERT(nComps == vec3d_nEntries);
628+
PMT_ALWAYS_ASSERT(numMPs >= p_MPs->getCount());
629+
//PMT_ALWAYS_ASSERT(numMPs >= p_MPs->getMaxAppID());
630+
631+
auto mpStress = p_MPs->getData<polyMPO::MPF_Stress>();
632+
auto mpAppID = p_MPs->getData<polyMPO::MPF_MP_APP_ID>();
633+
kkViewHostU<const double**> mpStressIn_h(mpStressIn, nComps, numMPs);
634+
Kokkos::View<double**> mpStressIn_d("mpStressDevice", vec3d_nEntries, numMPs);
635+
Kokkos::deep_copy(mpStressIn_d, mpStressIn_h);
636+
auto setMPStress = PS_LAMBDA(const int& elm, const int& mp, const int& mask){
637+
if(mask){
638+
mpStress(mp,0) = mpStressIn_d(0, mpAppID(mp));
639+
mpStress(mp,1) = mpStressIn_d(1, mpAppID(mp));
640+
mpStress(mp,2) = mpStressIn_d(2, mpAppID(mp));
641+
}
642+
};
643+
p_MPs->parallel_for(setMPStress, "setMPStress");
644+
pumipic::RecordTime("PolyMPO_setMPStress", timer.seconds());
645+
}
646+
647+
void polympo_getMPStress_f(MPMesh_ptr p_mpmesh, const int nComps, const int numMPs, double* mpStressHost) {
648+
Kokkos::Timer timer;
649+
checkMPMeshValid(p_mpmesh);
650+
auto p_MPs = ((polyMPO::MPMesh*)p_mpmesh)->p_MPs;
651+
PMT_ALWAYS_ASSERT(nComps == vec3d_nEntries);
652+
PMT_ALWAYS_ASSERT(numMPs >= p_MPs->getCount());
653+
//PMT_ALWAYS_ASSERT(numMPs >= p_MPs->getMaxAppID());
654+
655+
auto mpStress = p_MPs->getData<polyMPO::MPF_Stress>();
656+
auto mpAppID = p_MPs->getData<polyMPO::MPF_MP_APP_ID>();
657+
Kokkos::View<double**> mpStressCopy("mpStressCopy", vec3d_nEntries, numMPs);
658+
auto getMPStress = PS_LAMBDA(const int& elm, const int& mp, const int& mask){
659+
if(mask){
660+
mpStressCopy(0,mpAppID(mp)) = mpStress(mp,0);
661+
mpStressCopy(1,mpAppID(mp)) = mpStress(mp,1);
662+
mpStressCopy(2,mpAppID(mp)) = mpStress(mp,2);
663+
}
664+
};
665+
p_MPs->parallel_for(getMPStress, "getMPStress");
666+
kkDbl2dViewHostU arrayHost(mpStressHost, nComps, numMPs);
667+
Kokkos::deep_copy(arrayHost, mpStressCopy);
668+
pumipic::RecordTime("PolyMPO_getMPStress", timer.seconds());
669+
}
670+
623671
void polympo_setAreaMP_f(MPMesh_ptr p_mpmesh, const int nComps, const int numMPs, double* areaMPHost){
624672
Kokkos::Timer timer;
625673
checkMPMeshValid(p_mpmesh);

src/pmpo_c.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ void polympo_setMPVel_f(MPMesh_ptr p_mpmesh, const int nComps, const int numMPs,
4848
void polympo_getMPVel_f(MPMesh_ptr p_mpmesh, const int nComps, const int numMPs, double* mpVelHost);
4949
void polympo_calculateMPStrainRate_f(MPMesh_ptr p_mpmesh);
5050
void polympo_calculateMPStress_f(MPMesh_ptr p_mpmesh);
51+
void polympo_setMPStress_f(MPMesh_ptr p_mpmesh, const int nComps, const int numMPs, const double* mpStressIn);
52+
void polympo_getMPStress_f(MPMesh_ptr p_mpmesh, const int nComps, const int numMPs, double* mpStressHost);
5153
void polympo_setAreaMP_f(MPMesh_ptr p_mpmesh, const int nComps, const int numMPs, double* areaMPHost);
5254
void polympo_setIcePressureMP_f(MPMesh_ptr p_mpmesh, const int nComps, const int numMPs, double* icePressureMPHost);
5355
void polympo_getReplacementPressureMP_f(MPMesh_ptr p_mpmesh, const int nComps, const int numMPs, double* replacementPressureMPHost);

src/pmpo_fortran.f90

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,22 @@ subroutine polympo_calculateMPStress(mpMesh) &
377377
type(c_ptr), value :: mpMesh
378378
end subroutine
379379

380+
subroutine polympo_setMPStress(mpMesh, nComps, numMPs, array) &
381+
bind(C, NAME='polympo_setMPStress_f')
382+
use :: iso_c_binding
383+
type(c_ptr), value :: mpMesh
384+
integer(c_int), value :: nComps, numMPs
385+
type(c_ptr), value :: array
386+
end subroutine
387+
388+
subroutine polympo_getMPStress(mpMesh, nComps, numMPs, array) &
389+
bind(C, NAME='polympo_getMPStress_f')
390+
use :: iso_c_binding
391+
type(c_ptr), value :: mpMesh
392+
integer(c_int), value :: nComps, numMPs
393+
type(c_ptr), value :: array
394+
end subroutine
395+
380396
subroutine polympo_setAreaMP(mpMesh, nComps, numMPs, array) &
381397
bind(C, NAME='polympo_setAreaMP_f')
382398
use :: iso_c_binding

0 commit comments

Comments
 (0)