Skip to content

Commit 894391e

Browse files
committed
Added: Evaluation of 2ndary results at spatial points
1 parent 900da9e commit 894391e

4 files changed

Lines changed: 89 additions & 15 deletions

File tree

ASMu2DNastran.C

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1041,21 +1041,25 @@ ElementBlock* ASMu2DNastran::sensorGeometry (int idx, bool nodal) const
10411041
bool ASMu2DNastran::evalSolution (Matrix& sField, const IntegrandBase& integr,
10421042
const int*, char) const
10431043
{
1044+
sField.clear();
10441045
return this->evalSecSolution(sField,integr,true);
10451046
}
10461047

10471048

10481049
bool ASMu2DNastran::evalSolution (Matrix& sField, const IntegrandBase& integr,
10491050
const RealArray*, bool atElmCenters) const
10501051
{
1052+
sField.clear();
10511053
return this->evalSecSolution(sField,integr,!atElmCenters);
10521054
}
10531055

10541056

10551057
bool ASMu2DNastran::evalSolution (Matrix& sField, const IntegrandBase& integr,
1056-
const IntVec& elements) const
1058+
const IntVec& elements,
1059+
const RealArray* lpar) const
10571060
{
1058-
return this->evalSecSolution(sField,integr,false,elements);
1061+
sField.clear();
1062+
return this->evalSecSolution(sField,integr,false,elements,lpar);
10591063
}
10601064

10611065

@@ -1069,18 +1073,23 @@ bool ASMu2DNastran::evalSolution (Matrix& sField, const IntegrandBase& integr,
10691073

10701074
bool ASMu2DNastran::evalSecSolution (Matrix& sField,
10711075
const IntegrandBase& integr, bool atNodes,
1072-
const IntVec& elements) const
1076+
const IntVec& elements,
1077+
const RealArray* lpar) const
10731078
{
1074-
sField.clear();
1079+
size_t nIp = lpar ? std::min(lpar->size(),elements.size()) : 0;
1080+
if (nIp > 0) atNodes = true; // Need to to nodal averaging. Although only
1081+
// a few nodal values are needed we calculate for all, for the simplicity.
10751082

10761083
FiniteElement fe;
10771084
Vector solPt;
10781085
Vectors globSolPt(atNodes ? nnod : 0);
10791086
IntVec checkPt(atNodes ? nnod : 0,0);
10801087

10811088
// Number of evaluation points
1082-
size_t npt = atNodes ? nnod : (elements.empty() ? nel : elements.size());
1083-
size_t ipt = 0;
1089+
size_t npt = elements.empty() ? nel : elements.size();
1090+
size_t ipt = sField.cols();
1091+
if (ipt > 0 && !atNodes) // append to existing results
1092+
sField.resize(sField.rows(),ipt+npt);
10841093

10851094
// Evaluate the secondary solution field at each element node or center
10861095
for (size_t iel = 1; iel <= nel; iel++)
@@ -1117,9 +1126,8 @@ bool ASMu2DNastran::evalSecSolution (Matrix& sField,
11171126
return false;
11181127
else if (solPt.empty())
11191128
break; // a valid element with no secondary solution
1120-
1121-
if (sField.empty())
1122-
sField.resize(solPt.size(),npt,true);
1129+
else if (sField.empty() && !atNodes)
1130+
sField.resize(solPt.size(),npt);
11231131

11241132
if (!atNodes)
11251133
sField.fillColumn(++ipt,solPt);
@@ -1131,9 +1139,25 @@ bool ASMu2DNastran::evalSecSolution (Matrix& sField,
11311139
}
11321140

11331141
// Nodal averaging
1142+
Matrix tmpSol;
1143+
Matrix& nodalSol = nIp > 0 ? tmpSol : sField;
1144+
if (atNodes)
1145+
nodalSol.resize(globSolPt.front().size(),globSolPt.size());
11341146
for (size_t i = 0; i < checkPt.size(); i++)
11351147
if (checkPt[i])
1136-
sField.fillColumn(1+i, globSolPt[i] /= static_cast<double>(checkPt[i]));
1148+
nodalSol.fillColumn(1+i, globSolPt[i] /= static_cast<double>(checkPt[i]));
1149+
1150+
if (nIp > 0) // Interpolate the nodal averaged field at specified points
1151+
{
1152+
if (!this->evalSolution(sField,nodalSol.toVec(),elements,lpar))
1153+
return false;
1154+
else if (nIp == elements.size())
1155+
return true;
1156+
1157+
// Calculate and append the element center results
1158+
IntVec elmCtr(elements.begin()+nIp,elements.end());
1159+
return this->evalSecSolution(sField,integr,false,elmCtr);
1160+
}
11371161

11381162
return true;
11391163
}

ASMu2DNastran.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,10 @@ class ASMu2DNastran : public ASMu2DLag
9393
//! \param[out] sField Solution field
9494
//! \param[in] integr Object with problem-specific data and methods
9595
//! \param[in] elements List of elements to evaluate at (all if empty)
96+
//! \param[in] lpar Local parameter values of the result sampling points
9697
virtual bool evalSolution(Matrix& sField, const IntegrandBase& integr,
97-
const IntVec& elements) const;
98+
const IntVec& elements,
99+
const RealArray* lpar) const;
98100

99101
//! \brief Evaluates the primary solution at immersed geometry points.
100102
//! \param[out] field Solution field values at immersed geometry points
@@ -139,8 +141,10 @@ class ASMu2DNastran : public ASMu2DLag
139141
//! \param[in] integr Object with problem-specific data and methods
140142
//! \param[in] atNodes If \e true, evaluate at all nodal points instead
141143
//! \param[in] elements List of elements to evaluate at (all if empty)
144+
//! \param[in] lpar Local parameter values of the result sampling points
142145
bool evalSecSolution(Matrix& sField, const IntegrandBase& integr,
143-
bool atNodes, const IntVec& elements = {}) const;
146+
bool atNodes, const IntVec& elements = {},
147+
const RealArray* lpar = nullptr) const;
144148

145149
public:
146150
//! \brief Data type for shell element properties.

Test/Fine-partial.reg

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ Parsing <newmarksolver>
3636
Parsing <timestepping>
3737
Parsing <postprocessing>
3838
Parsing <resultpoints>
39+
Point 1: P1 X = 0.1 0 0.01
40+
Point 2: P1 X = 0.12 0 -0.01
3941
Element center output: P1 ( 10 20 30 )
4042
Parsing <vonMises_only>
4143
Parsing input file succeeded.
@@ -50,9 +52,11 @@ Newmark predictor/multicorrector: beta = 0.25 gamma = 0.5
5052
Stiffness-proportional damping (alpha2): 0.001
5153
Resolving Dirichlet boundary conditions
5254
Constraining P1 in direction(s) 123
53-
Result point #1: patch #1, element #10, X = 0.0997554 0 -0.000461024
54-
Result point #2: patch #1, element #20, X = 0.097439 0 0.0007217
55-
Result point #3: patch #1, element #30, X = 0.100119 0 -0.000118269
55+
Result point #1: patch #1 (u,v)=(-0.707848,0.899836), element #295, X = 0.1 0 0.01
56+
Result point #2: patch #1 (u,v)=(-0.778653,-0.0495981), element #820, X = 0.12 0 -0.01
57+
Result point #3: patch #1, element #10, X = 0.0997554 0 -0.000461024
58+
Result point #4: patch #1, element #20, X = 0.097439 0 0.0007217
59+
Result point #5: patch #1, element #30, X = 0.100119 0 -0.000118269
5660
>>> SAM model summary <<<
5761
Number of elements 902
5862
Number of nodes 951
@@ -73,6 +77,8 @@ Total element set size: 232
7377
Max x-acceleration : 1.66974
7478
Max y-acceleration : 2.8856e-05
7579
Max z-acceleration : 1.77093
80+
Element #295: sol2 = 7.271784e+03 7.271925e+03
81+
Element #820: sol2 = 1.257654e+04 1.257645e+04
7682
Element #10: sol2 = 2.088539e+04 2.088584e+04
7783
Element #20: sol2 = 1.398276e+04 1.398308e+04
7884
Element #30: sol2 = 1.962440e+04 1.962474e+04
@@ -90,6 +96,8 @@ Total element set size: 232
9096
Max x-acceleration : 4.5377
9197
Max y-acceleration : 6.92505e-05
9298
Max z-acceleration : 4.81681
99+
Element #295: sol2 = 9.285845e+03 9.286071e+03
100+
Element #820: sol2 = 1.607959e+04 1.607943e+04
93101
Element #10: sol2 = 2.670551e+04 2.670624e+04
94102
Element #20: sol2 = 1.782234e+04 1.782286e+04
95103
Element #30: sol2 = 2.510074e+04 2.510128e+04
@@ -107,6 +115,8 @@ Total element set size: 232
107115
Max x-acceleration : 7.13419
108116
Max y-acceleration : 0.000101994
109117
Max z-acceleration : 7.57463
118+
Element #295: sol2 = 1.011699e+04 1.011726e+04
119+
Element #820: sol2 = 1.753692e+04 1.753672e+04
110120
Element #10: sol2 = 2.912809e+04 2.912898e+04
111121
Element #20: sol2 = 1.938505e+04 1.938568e+04
112122
Element #30: sol2 = 2.738499e+04 2.738566e+04
@@ -124,6 +134,8 @@ Total element set size: 232
124134
Max x-acceleration : 9.58564
125135
Max y-acceleration : 0.000128926
126136
Max z-acceleration : 10.1782
137+
Element #295: sol2 = 1.158360e+04 1.158394e+04
138+
Element #820: sol2 = 2.009242e+04 2.009216e+04
127139
Element #10: sol2 = 3.337093e+04 3.337208e+04
128140
Element #20: sol2 = 2.217254e+04 2.217334e+04
129141
Element #30: sol2 = 3.137879e+04 3.137964e+04
@@ -141,6 +153,8 @@ Total element set size: 232
141153
Max x-acceleration : 11.7832
142154
Max y-acceleration : 0.000146587
143155
Max z-acceleration : 12.5127
156+
Element #295: sol2 = 1.194654e+04 1.194692e+04
157+
Element #820: sol2 = 2.073718e+04 2.073689e+04
144158
Element #10: sol2 = 3.444212e+04 3.444337e+04
145159
Element #20: sol2 = 2.283829e+04 2.283917e+04
146160
Element #30: sol2 = 3.239223e+04 3.239316e+04
@@ -158,6 +172,8 @@ Total element set size: 232
158172
Max x-acceleration : 13.8751
159173
Max y-acceleration : 0.000161631
160174
Max z-acceleration : 14.7347
175+
Element #295: sol2 = 1.277367e+04 1.277410e+04
176+
Element #820: sol2 = 2.218388e+04 2.218355e+04
161177
Element #10: sol2 = 3.684149e+04 3.684289e+04
162178
Element #20: sol2 = 2.440082e+04 2.440180e+04
163179
Element #30: sol2 = 3.465264e+04 3.465368e+04
@@ -175,6 +191,8 @@ Total element set size: 232
175191
Max x-acceleration : 15.7325
176192
Max y-acceleration : 0.000167175
177193
Max z-acceleration : 16.7085
194+
Element #295: sol2 = 1.258454e+04 1.258496e+04
195+
Element #820: sol2 = 2.186937e+04 2.186904e+04
178196
Element #10: sol2 = 3.631837e+04 3.631976e+04
179197
Element #20: sol2 = 2.401171e+04 2.40126.e+04
180198
Element #30: sol2 = 3.416637e+04 3.416740e+04
@@ -192,6 +210,8 @@ Total element set size: 232
192210
Max x-acceleration : 17.5129
193211
Max y-acceleration : 0.000172255
194212
Max z-acceleration : 18.6
213+
Element #295: sol2 = 1.273570e+04 1.273612e+04
214+
Element #820: sol2 = 2.214246e+04 2.214212e+04
195215
Element #10: sol2 = 3.676731e+04 3.676871e+04
196216
Element #20: sol2 = 2.428214e+04 2.428312e+04
197217
Element #30: sol2 = 3.459226e+04 3.459330e+04
@@ -209,6 +229,8 @@ Total element set size: 232
209229
Max x-acceleration : 19.0817
210230
Max y-acceleration : 0.000169339
211231
Max z-acceleration : 20.2676
232+
Element #295: sol2 = 1.197170e+04 1.197208e+04
233+
Element #820: sol2 = 2.082809e+04 2.082778e+04
212234
Element #10: sol2 = 3.458266e+04 3.458392e+04
213235
Element #20: sol2 = 2.279678e+04 2.279767e+04
214236
Element #30: sol2 = 3.254263e+04 3.254357e+04
@@ -226,6 +248,8 @@ Total element set size: 232
226248
Max x-acceleration : 20.5913
227249
Max y-acceleration : 0.000166568
228250
Max z-acceleration : 21.8719
251+
Element #295: sol2 = 1.147034e+04 1.147067e+04
252+
Element #820: sol2 = 1.996695e+04 1.996667e+04
229253
Element #10: sol2 = 3.314690e+04 3.314803e+04
230254
Element #20: sol2 = 2.182223e+04 2.182302e+04
231255
Element #30: sol2 = 3.119535e+04 3.119620e+04
@@ -243,6 +267,8 @@ Total element set size: 232
243267
Max x-acceleration : 21.9158
244268
Max y-acceleration : 0.000158829
245269
Max z-acceleration : 23.2807
270+
Element #295: sol2 = 1.017100e+04 1.017128e+04
271+
Element #820: sol2 = 1.772043e+04 1.772019e+04
246272
Element #10: sol2 = 2.941297e+04 2.941389e+04
247273
Element #20: sol2 = 1.931792e+04 1.931856e+04
248274
Element #30: sol2 = 2.768755e+04 2.768823e+04
@@ -260,6 +286,8 @@ Total element set size: 232
260286
Max x-acceleration : 23.1893
261287
Max y-acceleration : 0.000150458
262288
Max z-acceleration : 24.6348
289+
Element #295: sol2 = 9.099152e+03 9.099362e+03
290+
Element #820: sol2 = 1.586641e+04 1.586623e+04
263291
Element #10: sol2 = 2.632709e+04 2.632780e+04
264292
Element #20: sol2 = 1.725689e+04 1.725739e+04
265293
Element #30: sol2 = 2.478734e+04 2.478787e+04
@@ -277,6 +305,8 @@ Total element set size: 232
277305
Max x-acceleration : 24.308
278306
Max y-acceleration : 0.000140925
279307
Max z-acceleration : 25.8254
308+
Element #295: sol2 = 7.361883e+03 7.362026e+03
309+
Element #820: sol2 = 1.285614e+04 1.285600e+04
280310
Element #10: sol2 = 2.132226e+04 2.132275e+04
281311
Element #20: sol2 = 1.392052e+04 1.392086e+04
282312
Element #30: sol2 = 2.008288e+04 2.008324e+04
@@ -294,6 +324,8 @@ Total element set size: 232
294324
Max x-acceleration : 25.3752
295325
Max y-acceleration : 0.000129311
296326
Max z-acceleration : 26.961
327+
Element #295: sol2 = 5.853423e+03 5.853507e+03
328+
Element #820: sol2 = 1.024093e+04 1.024084e+04
297329
Element #10: sol2 = 1.696895e+04 1.696925e+04
298330
Element #20: sol2 = 1.102905e+04 1.102925e+04
299331
Element #30: sol2 = 1.598939e+04 1.598961e+04
@@ -311,6 +343,8 @@ Total element set size: 232
311343
Max x-acceleration : 26.3206
312344
Max y-acceleration : 0.000120067
313345
Max z-acceleration : 27.9681
346+
Element #295: sol2 = 3.825289e+03 3.825328e+03
347+
Element #820: sol2 = 6.721904e+03 6.721861e+03
314348
Element #10: sol2 = 1.110842e+04 1.110856e+04
315349
Element #20: sol2 = 7.138003e+03 7.138098e+03
316350
Element #30: sol2 = 1.047861e+04 1.047871e+04
@@ -328,6 +362,8 @@ Total element set size: 232
328362
Max x-acceleration : 27.2078
329363
Max y-acceleration : 0.000107557
330364
Max z-acceleration : 28.913
365+
Element #295: sol2 = 2.061443e+03 2.061451e+03
366+
Element #820: sol2 = 3.659519e+03 3.659505e+03
331367
Element #10: sol2 = 5.982991e+03 5.983024e+03
332368
Element #20: sol2 = 3.748210e+03 3.748232e+03
333369
Element #30: sol2 = 5.657544e+03 5.657569e+03
@@ -344,6 +380,8 @@ Total element set size: 232
344380
Max x-acceleration : 28.0074
345381
Max y-acceleration : 9.96853e-05
346382
Max z-acceleration : 29.7656
383+
Element #295: sol2 = 3.461054e+02 3.461063e+02
384+
Element #820: sol2 = 6.068181e+02 6.068177e+02
347385
Element #10: sol2 = 2.266748e+02 2.266709e+02
348386
Element #20: sol2 = 4.426779e+02 4.426774e+02
349387
Element #30: sol2 = 1.855386e+02 1.855356e+02
@@ -361,6 +399,8 @@ Total element set size: 232
361399
Max x-acceleration : 28.7376
362400
Max y-acceleration : 8.84086e-05
363401
Max z-acceleration : 30.5444
402+
Element #295: sol2 = 1.990120e+03 1.990110e+03
403+
Element #820: sol2 = 3.385961e+03 3.385964e+03
364404
Element #10: sol2 = 5.560534e+03 5.560504e+03
365405
Element #20: sol2 = 3.899946e+03 3.899924e+03
366406
Element #30: sol2 = 5.201834e+03 5.201812e+03
@@ -378,6 +418,8 @@ Total element set size: 232
378418
Max x-acceleration : 29.414
379419
Max y-acceleration : 8.22015e-05
380420
Max z-acceleration : 31.2666
421+
Element #295: sol2 = 4.055092e+03 4.055048e+03
422+
Element #820: sol2 = 6.974515e+03 6.974540e+03
381423
Element #10: sol2 = 1.156060e+04 1.156046e+04
382424
Element #20: sol2 = 7.858620e+03 7.858521e+03
383425
Element #30: sol2 = 1.084689e+04 1.084679e+04
@@ -395,6 +437,8 @@ Total element set size: 232
395437
Max x-acceleration : 30.0083
396438
Max y-acceleration : 7.37996e-05
397439
Max z-acceleration : 31.9016
440+
Element #295: sol2 = 5.771244e+03 5.771155e+03
441+
Element #820: sol2 = 9.960260e+03 9.960316e+03
398442
Element #10: sol2 = 1.653515e+04 1.653487e+04
399443
Element #20: sol2 = 1.113091e+04 1.113070e+04
400444
Element #30: sol2 = 1.552872e+04 1.552851e+04

Test/Fine-partial.xinp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@
4040
<postprocessing>
4141
<resultpoints printmapping="true" vtfsize="0.0002">
4242
<elements patch="1">10 20 30</elements>
43+
<point patch="1">0.1 0 0.01</point>
44+
<point patch="1">0.12 0 -0.01</point>
4345
</resultpoints>
4446
<vonMises_only/>
4547
</postprocessing>

0 commit comments

Comments
 (0)