@@ -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+
623671void polympo_setAreaMP_f (MPMesh_ptr p_mpmesh, const int nComps, const int numMPs, double * areaMPHost){
624672 Kokkos::Timer timer;
625673 checkMPMeshValid (p_mpmesh);
0 commit comments