@@ -624,14 +624,10 @@ void polympo_getMPStrainRate_f(MPMesh_ptr p_mpmesh, const int nComps, const int
624624 (void )mpStrainRateHost;
625625}
626626
627- void polympo_setMPStress_f (MPMesh_ptr p_mpmesh, const int nComps, const int numMPs, const double * mpStressIn ){
627+ void polympo_setMPStress_f (MPMesh_ptr p_mpmesh){
628628 checkMPMeshValid (p_mpmesh);
629- std::cerr << " Error: This routine is not implemented yet\n " ;
630- exit (1 );
631- (void )p_mpmesh;
632- (void )nComps;
633- (void )numMPs;
634- (void )mpStressIn;
629+ auto mpMesh = ((polyMPO::MPMesh*)p_mpmesh);
630+ mpMesh->calculateStress ();
635631}
636632
637633void polympo_getMPStress_f (MPMesh_ptr p_mpmesh, const int nComps, const int numMPs, double * mpStressHost){
@@ -644,6 +640,93 @@ void polympo_getMPStress_f(MPMesh_ptr p_mpmesh, const int nComps, const int numM
644640 (void )mpStressHost;
645641}
646642
643+ void polympo_setAreaMP_f (MPMesh_ptr p_mpmesh, const int nComps, const int numMPs, double * areaMPHost){
644+ Kokkos::Timer timer;
645+ checkMPMeshValid (p_mpmesh);
646+
647+ auto p_MPs = ((polyMPO::MPMesh*)p_mpmesh)->p_MPs ;
648+ // Rank information
649+ int self;
650+ MPI_Comm comm = p_MPs->getMPIComm ();
651+ MPI_Comm_rank (comm, &self);
652+ // Asserts
653+ PMT_ALWAYS_ASSERT (nComps == 1 );
654+ PMT_ALWAYS_ASSERT (numMPs >= p_MPs->getCount ());
655+ // MP Data
656+ auto mpArea = p_MPs->getData <polyMPO::MPF_Area>();
657+ auto mpAppID = p_MPs->getData <polyMPO::MPF_MP_APP_ID >();
658+ // Copy to device
659+ kkViewHostU<const double **> mpAreaIn_h (areaMPHost, nComps, numMPs);
660+ Kokkos::View<double **> mpAreaIn_d (" mpAreaDevice" , nComps, numMPs);
661+ Kokkos::deep_copy (mpAreaIn_d, mpAreaIn_h);
662+ // Set in PS
663+ auto setMPArea = PS_LAMBDA (const int & elm, const int & mp, const int & mask){
664+ if (mask){
665+ mpArea (mp,0 ) = mpAreaIn_d (0 , mpAppID (mp));
666+ }
667+ };
668+ p_MPs->parallel_for (setMPArea, " setMPArea" );
669+ pumipic::RecordTime (" PolyMPO_setMPArea" + std::to_string (self), timer.seconds ());
670+ }
671+
672+ void polympo_setIcePressureMP_f (MPMesh_ptr p_mpmesh, const int nComps, const int numMPs, double * icePressureMPHost){
673+ Kokkos::Timer timer;
674+ checkMPMeshValid (p_mpmesh);
675+
676+ auto p_MPs = ((polyMPO::MPMesh*)p_mpmesh)->p_MPs ;
677+ // Rank information
678+ int self;
679+ MPI_Comm comm = p_MPs->getMPIComm ();
680+ MPI_Comm_rank (comm, &self);
681+ // Asserts
682+ PMT_ALWAYS_ASSERT (nComps == 1 );
683+ PMT_ALWAYS_ASSERT (numMPs >= p_MPs->getCount ());
684+ // MP Data
685+ auto mpIcePressure = p_MPs->getData <polyMPO::MPF_IcePressure>();
686+ auto mpAppID = p_MPs->getData <polyMPO::MPF_MP_APP_ID >();
687+ // Copy to device
688+ kkViewHostU<const double **> mpIcePressure_h (icePressureMPHost, nComps, numMPs);
689+ Kokkos::View<double **> mpIcePressure_d (" mpIcePressureDevice" , nComps, numMPs);
690+ Kokkos::deep_copy (mpIcePressure_d, mpIcePressure_h);
691+ // Set in PS
692+ auto setMPIcePressure = PS_LAMBDA (const int & elm, const int & mp, const int & mask){
693+ if (mask){
694+ mpIcePressure (mp,0 ) = mpIcePressure_d (0 , mpAppID (mp));
695+ }
696+ };
697+ p_MPs->parallel_for (setMPIcePressure, " setIcePressure" );
698+ pumipic::RecordTime (" PolyMPO_setIcePressure" + std::to_string (self), timer.seconds ());
699+ }
700+
701+ void polympo_setReplacementPressureMP_f (MPMesh_ptr p_mpmesh, const int nComps, const int numMPs, double * replacementPressureMPHost){
702+ Kokkos::Timer timer;
703+ checkMPMeshValid (p_mpmesh);
704+
705+ auto p_MPs = ((polyMPO::MPMesh*)p_mpmesh)->p_MPs ;
706+ // Rank information
707+ int self;
708+ MPI_Comm comm = p_MPs->getMPIComm ();
709+ MPI_Comm_rank (comm, &self);
710+ // Asserts
711+ PMT_ALWAYS_ASSERT (nComps == 1 );
712+ PMT_ALWAYS_ASSERT (numMPs >= p_MPs->getCount ());
713+ // MP Data
714+ auto mpReplacementPressure = p_MPs->getData <polyMPO::MPF_ReplacementPressure>();
715+ auto mpAppID = p_MPs->getData <polyMPO::MPF_MP_APP_ID >();
716+ // Copy to device
717+ kkViewHostU<const double **> mpReplacementPressure_h (replacementPressureMPHost, nComps, numMPs);
718+ Kokkos::View<double **> mpReplacementPressure_d (" mpIcePressureDevice" , nComps, numMPs);
719+ Kokkos::deep_copy (mpReplacementPressure_d, mpReplacementPressure_h);
720+ // Set in PS
721+ auto setMPReplacementPressure = PS_LAMBDA (const int & elm, const int & mp, const int & mask){
722+ if (mask){
723+ mpReplacementPressure (mp,0 ) = mpReplacementPressure_d (0 , mpAppID (mp));
724+ }
725+ };
726+ p_MPs->parallel_for (setMPReplacementPressure, " setReplacementPressure" );
727+ pumipic::RecordTime (" PolyMPO_setReplacementPressure" + std::to_string (self), timer.seconds ());
728+ }
729+
647730void polympo_startMeshFill_f (MPMesh_ptr p_mpmesh){
648731 checkMPMeshValid (p_mpmesh);
649732 ((polyMPO::MPMesh*)p_mpmesh)->p_mesh ->setMeshEdit (true );
@@ -1216,6 +1299,34 @@ void polyMPO_setTanLatVertexRotatedOverRadius_f(MPMesh_ptr p_mpmesh, const int n
12161299 Kokkos::deep_copy (tanLatVertexRotatedOverRadius, h_tanLatVertexRotatedOverRadius);
12171300}
12181301
1302+ void polympo_setElasticTimeStep_f (MPMesh_ptr p_mpmesh, const double elasticTimeStep){
1303+ // chech validity
1304+ checkMPMeshValid (p_mpmesh);
1305+ auto p_mesh = ((polyMPO::MPMesh*)p_mpmesh)->p_mesh ;
1306+ p_mesh->setElasticTimeStep (elasticTimeStep);
1307+ }
1308+
1309+ void polympo_setDynamicTimeStep_f (MPMesh_ptr p_mpmesh, const double dynamicTimeStep){
1310+ // chech validity
1311+ checkMPMeshValid (p_mpmesh);
1312+ auto p_mesh = ((polyMPO::MPMesh*)p_mpmesh)->p_mesh ;
1313+ p_mesh->setDynamicTimeStep (dynamicTimeStep);
1314+ }
1315+
1316+ void polympo_setSolveStressMesh_f (MPMesh_ptr p_mpmesh, const int nCells, int * array){
1317+ // chech validity
1318+ checkMPMeshValid (p_mpmesh);
1319+ auto p_mesh = ((polyMPO::MPMesh*)p_mpmesh)->p_mesh ;
1320+
1321+ PMT_ALWAYS_ASSERT (p_mesh->getNumElements ()==nCells);
1322+ // copy the host array to the device
1323+ auto solveStress = p_mesh->getMeshField <polyMPO::MeshF_SolveStress>();
1324+ auto h_solveStress = Kokkos::create_mirror_view (solveStress);
1325+ for (int i=0 ; i<nCells; i++)
1326+ h_solveStress (i) = array[i];
1327+ Kokkos::deep_copy (solveStress, h_solveStress);
1328+ }
1329+
12191330// Advection Calcualtions
12201331void polympo_push_f (MPMesh_ptr p_mpmesh){
12211332 checkMPMeshValid (p_mpmesh);
0 commit comments