Skip to content

Commit 29ba5f8

Browse files
committed
all mp get data
1 parent da81582 commit 29ba5f8

File tree

1 file changed

+39
-122
lines changed

1 file changed

+39
-122
lines changed

src/pmpo_c.cpp

Lines changed: 39 additions & 122 deletions
Original file line numberDiff line numberDiff line change
@@ -232,9 +232,9 @@ void polympo_setMPLatLonRotatedFlag_f(MPMesh_ptr p_mpmesh, const int isRotateFla
232232

233233
template <polyMPO::MaterialPointSlice mpSlice>
234234
void setMPData(MPMesh_ptr p_mpmesh,
235-
const int nComps,
236-
const int numMPs,
237-
const double* mpDataIn){
235+
const int nComps,
236+
const int numMPs,
237+
const double* mpDataIn){
238238
Kokkos::Timer timer;
239239
checkMPMeshValid(p_mpmesh);
240240
auto p_MPs = ((polyMPO::MPMesh*)p_mpmesh)->p_MPs;
@@ -264,6 +264,31 @@ void setMPData(MPMesh_ptr p_mpmesh,
264264
pumipic::RecordTime("PolyMPO_setMPData", timer.seconds());
265265
}
266266

267+
template <polyMPO::MaterialPointSlice mpSlice>
268+
void getMPData(MPMesh_ptr p_mpmesh,
269+
const int nComps,
270+
const int numMPs,
271+
double* mpDataHost){
272+
checkMPMeshValid(p_mpmesh);
273+
auto p_MPs = ((polyMPO::MPMesh*)p_mpmesh)->p_MPs;
274+
PMT_ALWAYS_ASSERT(nComps == polyMPO::mpSliceToNumEntries<mpSlice>());
275+
PMT_ALWAYS_ASSERT(numMPs >= p_MPs->getCount());
276+
PMT_ALWAYS_ASSERT(numMPs >= p_MPs->getMaxAppID());
277+
278+
auto mpData = p_MPs->getData<mpSlice>();
279+
auto mpAppID = p_MPs->getData<polyMPO::MPF_MP_APP_ID>();
280+
Kokkos::View<double**> mpDataCopy("mpDataCopy",nComps,numMPs);
281+
auto getData = PS_LAMBDA(const int&, const int& mp, const int& mask){
282+
if(mask){
283+
for (int i=0; i<nComps; i++)
284+
mpDataCopy(i,mpAppID(mp)) = mpData(mp,i);
285+
}
286+
};
287+
p_MPs->parallel_for(getData, "getMPData");
288+
kkDbl2dViewHostU arrayHost(mpDataHost,nComps,numMPs);
289+
Kokkos::deep_copy(arrayHost, mpDataCopy);
290+
}
291+
267292
using setMPFunc = void (*)(MPMesh_ptr, const int, const int, const double*);
268293
std::map<polyMPO::MaterialPointSlice, setMPFunc> setMPMap = {
269294
{polyMPO::MPF_Cur_Pos_Rot_Lat_Lon, setMPData<polyMPO::MPF_Cur_Pos_Rot_Lat_Lon>},
@@ -277,157 +302,49 @@ std::map<polyMPO::MaterialPointSlice, setMPFunc> setMPMap = {
277302
{polyMPO::MPF_Stress, setMPData<polyMPO::MPF_Stress>}
278303
};
279304

280-
void polympo_setMPData_f(MPMesh_ptr p_mpmesh,
281-
const int nComps,
282-
const int numMPs,
283-
const double* mpDataIn,
284-
const int mpDataType){
305+
void polympo_setMPData_f(MPMesh_ptr p_mpmesh, const int nComps, const int numMPs, const double* mpDataIn, const int mpDataType){
285306
polyMPO::MaterialPointSlice type = static_cast<polyMPO::MaterialPointSlice>(mpDataType);
286307
(*setMPMap[type])(p_mpmesh, nComps, numMPs, mpDataIn);
287308
}
288309

289-
void polympo_setMPPositions_f(MPMesh_ptr p_mpmesh,
290-
const int nComps,
291-
const int numMPs,
292-
const double* mpPositionsIn){
310+
void polympo_setMPPositions_f(MPMesh_ptr p_mpmesh, const int nComps, const int numMPs, const double* mpPositionsIn){
293311
setMPData<polyMPO::MPF_Cur_Pos_XYZ>(p_mpmesh, nComps, numMPs, mpPositionsIn);
294312
}
295-
296-
void polympo_getMPPositions_f(MPMesh_ptr p_mpmesh,
297-
const int nComps,
298-
const int numMPs,
299-
double* mpPositionsHost){
300-
checkMPMeshValid(p_mpmesh);
301-
auto p_MPs = ((polyMPO::MPMesh*)p_mpmesh)->p_MPs;
302-
PMT_ALWAYS_ASSERT(nComps == vec3d_nEntries);
303-
PMT_ALWAYS_ASSERT(numMPs >= p_MPs->getCount());
304-
PMT_ALWAYS_ASSERT(numMPs >= p_MPs->getMaxAppID());
305-
306-
auto mpPositions = p_MPs->getData<polyMPO::MPF_Cur_Pos_XYZ>();
307-
auto mpAppID = p_MPs->getData<polyMPO::MPF_MP_APP_ID>();
308-
Kokkos::View<double**> mpPositionsCopy("mpPositionsCopy",vec3d_nEntries,numMPs);
309-
auto getPos = PS_LAMBDA(const int&, const int& mp, const int& mask){
310-
if(mask){
311-
mpPositionsCopy(0,mpAppID(mp)) = mpPositions(mp,0);
312-
mpPositionsCopy(1,mpAppID(mp)) = mpPositions(mp,1);
313-
mpPositionsCopy(2,mpAppID(mp)) = mpPositions(mp,2);
314-
}
315-
};
316-
p_MPs->parallel_for(getPos, "getMPPositions");
317-
kkDbl2dViewHostU arrayHost(mpPositionsHost,nComps,numMPs);
318-
Kokkos::deep_copy(arrayHost, mpPositionsCopy);
313+
void polympo_getMPPositions_f(MPMesh_ptr p_mpmesh, const int nComps, const int numMPs, double* mpPositionsHost){
314+
getMPData<polyMPO::MPF_Cur_Pos_XYZ>(p_mpmesh, nComps, numMPs, mpPositionsHost);
319315
}
320-
321-
void polympo_setMPRotLatLon_f(MPMesh_ptr p_mpmesh,
322-
const int nComps,
323-
const int numMPs,
324-
const double* mpRotLatLonIn){
316+
void polympo_setMPRotLatLon_f(MPMesh_ptr p_mpmesh, const int nComps, const int numMPs, const double* mpRotLatLonIn){
325317
static int callCount = 0;
326318
PMT_ALWAYS_ASSERT(callCount == 0);
327319
setMPData<polyMPO::MPF_Cur_Pos_Rot_Lat_Lon>(p_mpmesh, nComps, numMPs, mpRotLatLonIn);
328320
callCount++;
329321
}
330-
331-
void polympo_getMPRotLatLon_f(MPMesh_ptr p_mpmesh,
332-
const int nComps,
333-
const int numMPs,
334-
double* mpRotLatLonHost){
335-
checkMPMeshValid(p_mpmesh);
336-
auto p_MPs = ((polyMPO::MPMesh*)p_mpmesh)->p_MPs;
337-
PMT_ALWAYS_ASSERT(nComps == vec2d_nEntries);
338-
PMT_ALWAYS_ASSERT(numMPs >= p_MPs->getCount());
339-
PMT_ALWAYS_ASSERT(numMPs >= p_MPs->getMaxAppID());
340-
341-
auto mpRotLatLon = p_MPs->getData<polyMPO::MPF_Cur_Pos_Rot_Lat_Lon>();
342-
auto mpAppID = p_MPs->getData<polyMPO::MPF_MP_APP_ID>();
343-
Kokkos::View<double**> mpRotLatLonCopy("mpRotLatLonCopy",vec2d_nEntries,numMPs);
344-
auto getPos = PS_LAMBDA(const int& elm, const int& mp, const int& mask){
345-
if(mask){
346-
mpRotLatLonCopy(0,mpAppID(mp)) = mpRotLatLon(mp,0);
347-
mpRotLatLonCopy(1,mpAppID(mp)) = mpRotLatLon(mp,1);
348-
}
349-
};
350-
p_MPs->parallel_for(getPos, "getMPRotLatLon");
351-
kkDbl2dViewHostU arrayHost(mpRotLatLonHost,nComps,numMPs);
352-
Kokkos::deep_copy(arrayHost, mpRotLatLonCopy);
322+
void polympo_getMPRotLatLon_f(MPMesh_ptr p_mpmesh, const int nComps, const int numMPs, double* mpRotLatLonHost){
323+
getMPData<polyMPO::MPF_Cur_Pos_Rot_Lat_Lon>(p_mpmesh, nComps, numMPs, mpRotLatLonHost);
353324
}
354-
355325
void polympo_setMPMass_f(MPMesh_ptr p_mpmesh, const int nComps, const int numMPs, const double* mpMassIn) {
356326
setMPData<polyMPO::MPF_Mass>(p_mpmesh, nComps, numMPs, mpMassIn);
357327
}
358-
359328
void polympo_getMPMass_f(MPMesh_ptr p_mpmesh, const int nComps, const int numMPs, double* mpMassHost) {
360-
Kokkos::Timer timer;
361-
checkMPMeshValid(p_mpmesh);
362-
auto p_MPs = ((polyMPO::MPMesh*)p_mpmesh)->p_MPs;
363-
PMT_ALWAYS_ASSERT(nComps == 1); //TODO mp_sclr_t
364-
PMT_ALWAYS_ASSERT(numMPs >= p_MPs->getCount());
365-
PMT_ALWAYS_ASSERT(numMPs >= p_MPs->getMaxAppID());
366-
367-
auto mpMass = p_MPs->getData<polyMPO::MPF_Mass>();
368-
auto mpAppID = p_MPs->getData<polyMPO::MPF_MP_APP_ID>();
369-
Kokkos::View<double**> mpMassCopy("mpMassCopy",nComps,numMPs);
370-
auto getMPMass = PS_LAMBDA(const int& elm, const int& mp, const int& mask){
371-
if(mask){
372-
mpMassCopy(0,mpAppID(mp)) = mpMass(mp,0);
373-
}
374-
};
375-
p_MPs->parallel_for(getMPMass, "getMPMass");
376-
kkDbl2dViewHostU arrayHost(mpMassHost,nComps,numMPs);
377-
Kokkos::deep_copy(arrayHost, mpMassCopy);
378-
pumipic::RecordTime("PolyMPO_getMPMass", timer.seconds());
329+
getMPData<polyMPO::MPF_Mass>(p_mpmesh, nComps, numMPs, mpMassHost);
379330
}
380-
381331
void polympo_setMPVel_f(MPMesh_ptr p_mpmesh, const int nComps, const int numMPs, const double* mpVelIn) {
382332
setMPData<polyMPO::MPF_Vel>(p_mpmesh, nComps, numMPs, mpVelIn);
383333
}
384-
385334
void polympo_getMPVel_f(MPMesh_ptr p_mpmesh, const int nComps, const int numMPs, double* mpVelHost) {
386-
Kokkos::Timer timer;
387-
checkMPMeshValid(p_mpmesh);
388-
auto p_MPs = ((polyMPO::MPMesh*)p_mpmesh)->p_MPs;
389-
PMT_ALWAYS_ASSERT(nComps == vec2d_nEntries);
390-
PMT_ALWAYS_ASSERT(numMPs >= p_MPs->getCount());
391-
PMT_ALWAYS_ASSERT(numMPs >= p_MPs->getMaxAppID());
392-
393-
auto mpVel = p_MPs->getData<polyMPO::MPF_Vel>();
394-
auto mpAppID = p_MPs->getData<polyMPO::MPF_MP_APP_ID>();
395-
Kokkos::View<double**> mpVelCopy("mpVelCopy",vec2d_nEntries,numMPs);
396-
auto getMPVel = PS_LAMBDA(const int& elm, const int& mp, const int& mask){
397-
if(mask){
398-
mpVelCopy(0,mpAppID(mp)) = mpVel(mp,0);
399-
mpVelCopy(1,mpAppID(mp)) = mpVel(mp,1);
400-
}
401-
};
402-
p_MPs->parallel_for(getMPVel, "getMPVel");
403-
kkDbl2dViewHostU arrayHost(mpVelHost,nComps,numMPs);
404-
Kokkos::deep_copy(arrayHost, mpVelCopy);
405-
pumipic::RecordTime("PolyMPO_getMPVel", timer.seconds());
335+
getMPData<polyMPO::MPF_Vel>(p_mpmesh, nComps, numMPs, mpVelHost);
406336
}
407-
408337
void polympo_setMPStrainRate_f(MPMesh_ptr p_mpmesh, const int nComps, const int numMPs, const double* mpStrainRateIn){
409338
setMPData<polyMPO::MPF_Strain_Rate>(p_mpmesh, nComps, numMPs, mpStrainRateIn);
410339
}
411340
void polympo_getMPStrainRate_f(MPMesh_ptr p_mpmesh, const int nComps, const int numMPs, double* mpStrainRateHost){
412-
checkMPMeshValid(p_mpmesh);
413-
std::cerr << "Error: This routine is not implemented yet\n";
414-
exit(1);
415-
(void)p_mpmesh;
416-
(void)nComps;
417-
(void)numMPs;
418-
(void)mpStrainRateHost;
341+
getMPData<polyMPO::MPF_Strain_Rate>(p_mpmesh, nComps, numMPs, mpStrainRateHost);
419342
}
420343
void polympo_setMPStress_f(MPMesh_ptr p_mpmesh, const int nComps, const int numMPs, const double* mpStressIn){
421344
setMPData<polyMPO::MPF_Stress>(p_mpmesh, nComps, numMPs, mpStressIn);
422345
}
423346
void polympo_getMPStress_f(MPMesh_ptr p_mpmesh, const int nComps, const int numMPs, double* mpStressHost){
424-
checkMPMeshValid(p_mpmesh);
425-
std::cerr << "Error: This routine is not implemented yet\n";
426-
exit(1);
427-
(void)p_mpmesh;
428-
(void)nComps;
429-
(void)numMPs;
430-
(void)mpStressHost;
347+
getMPData<polyMPO::MPF_Stress>(p_mpmesh, nComps, numMPs, mpStressHost);
431348
}
432349

433350
void polympo_startMeshFill_f(MPMesh_ptr p_mpmesh){

0 commit comments

Comments
 (0)