Skip to content

Commit 367241c

Browse files
authored
Merge pull request #44 from gismo/MaterialFixes
Small fixes and improvements in material classes
2 parents 7a7e83e + 85c7e83 commit 367241c

File tree

7 files changed

+60
-458
lines changed

7 files changed

+60
-458
lines changed

src/gsLinearMaterial.h

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ class gsLinearMaterial : public gsMaterialBase<T>
6767
this->setParameter(1,nu);
6868
}
6969

70+
using Base::eval_stress_into;
7071
/// See \ref gsMaterialBase.h for more details
7172
void eval_stress_into(const gsMaterialData<T> & data, gsMatrix<T> & Sresult) const
7273
{
@@ -76,24 +77,22 @@ class gsLinearMaterial : public gsMaterialBase<T>
7677
// Resize the result
7778
Sresult.resize(dim*dim,N);
7879

79-
// Lamé parameters
80-
T E, nu;
81-
T lambda, mu;
8280
gsMatrix<T> I = gsMatrix<T>::Identity(dim,dim);
83-
81+
// Lamé parameters
82+
gsMatrix<T> lambda(1,N), mu(1,N);
83+
gsMatrix<T> E = data.m_pars[0];
84+
gsMatrix<T> nu = data.m_pars[1];
85+
lambda.array() = E.array() * nu.array() / ( ( 1. + nu.array() ) * ( 1. - 2. * nu.array() ) );
86+
mu.array() = E.array() / ( 2. * ( 1. + nu.array() ) );
8487
for (index_t i=0; i!=N; i++)
8588
{
86-
E = data.m_parmat(0,i);
87-
nu= data.m_parmat(1,i);
88-
lambda = E * nu / ( ( 1. + nu ) * ( 1. - 2. * nu ) );
89-
mu = E / ( 2. * ( 1. + nu ) );
90-
9189
gsAsMatrix<T, Dynamic, Dynamic> Emat = data.m_E.reshapeCol(i,dim,dim);
9290
gsAsMatrix<T, Dynamic, Dynamic> S = Sresult.reshapeCol(i,dim,dim);
93-
S = lambda*Emat.trace()*I + 2*mu*Emat;
91+
S = lambda(0,i)*Emat.trace()*I + 2*mu(0,i)*Emat;
9492
}
9593
}
9694

95+
using Base::eval_matrix_into;
9796
/// See \ref gsMaterialBase.h for more details
9897
void eval_matrix_into(const gsMaterialData<T> & data, gsMatrix<T> & Cresult) const
9998
{
@@ -115,16 +114,15 @@ class gsLinearMaterial : public gsMaterialBase<T>
115114
symmetricIdentityTensor<T>(Cmu,I);
116115

117116
// Lamé parameters
118-
T E, nu;
119-
T lambda, mu;
117+
gsMatrix<T> lambda(1,N), mu(1,N);
118+
gsMatrix<T> E = data.m_pars[0];
119+
gsMatrix<T> nu = data.m_pars[1];
120+
lambda.array() = E.array() * nu.array() / ( ( 1. + nu.array() ) * ( 1. - 2. * nu.array() ) );
121+
mu.array() = E.array() / ( 2. * ( 1. + nu.array() ) );
120122
for (index_t i=0; i!=N; i++)
121123
{
122-
E = data.m_parmat(0,i);
123-
nu= data.m_parmat(1,i);
124-
lambda = E * nu / ( ( 1. + nu ) * ( 1. - 2. * nu ) );
125-
mu = E / ( 2. * ( 1. + nu ) );
126124
// Compute C
127-
Cresult.reshapeCol(i,sz,sz) = lambda*Clambda + mu*Cmu;
125+
Cresult.reshapeCol(i,sz,sz) = lambda(0,i)*Clambda + mu(0,i)*Cmu;
128126
}
129127
}
130128

src/gsMaterialBase.h

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ class gsMaterialBase
280280
this->eval_stress_into(data,Sresult);
281281
}
282282

283-
virtual void eval_stress_into(const gsMaterialData<T> & data, gsMatrix<T> & Sresult) const
283+
virtual void eval_stress_into(const gsMaterialData<T> & /* data */, gsMatrix<T> & /* Sresult */) const
284284
{ GISMO_NO_IMPLEMENTATION; }
285285

286286
/**
@@ -305,7 +305,7 @@ class gsMaterialBase
305305
this->eval_matrix_into(data,Cresult);
306306
}
307307

308-
virtual void eval_matrix_into(const gsMaterialData<T> & data, gsMatrix<T> & Cresult) const
308+
virtual void eval_matrix_into(const gsMaterialData<T> & /* data */, gsMatrix<T> & /* Cresult */) const
309309
{ GISMO_NO_IMPLEMENTATION; }
310310

311311
/**
@@ -330,7 +330,7 @@ class gsMaterialBase
330330
this->eval_matrix_pos_into(data,Cresult);
331331
}
332332

333-
virtual void eval_matrix_pos_into(const gsMaterialData<T> & data, gsMatrix<T> & Cresult) const
333+
virtual void eval_matrix_pos_into(const gsMaterialData<T> & /* data */, gsMatrix<T> & /* Cresult */) const
334334
{ GISMO_NO_IMPLEMENTATION; }
335335

336336
/**
@@ -355,7 +355,7 @@ class gsMaterialBase
355355
this->eval_energy_into(data,Presult);
356356
}
357357

358-
virtual void eval_energy_into(const gsMaterialData<T> & data, gsMatrix<T> & Presult) const
358+
virtual void eval_energy_into(const gsMaterialData<T> & /* data */, gsMatrix<T> & /* Presult */) const
359359
{ GISMO_NO_IMPLEMENTATION; }
360360

361361
/// Sets the density
@@ -392,7 +392,7 @@ class gsMaterialBase
392392
{
393393
m_pars.resize(pars.size());
394394
for (size_t k = 0; k!=pars.size(); k++)
395-
m_pars[k] = std::make_pair(pars[k],true);
395+
m_pars[k] = std::make_pair(pars[k],parametric);
396396
}
397397

398398
/**
@@ -507,17 +507,16 @@ class gsMaterialBase
507507
data.patch = (map_ori.patchId==-1) ? 0 : map_ori.patchId;
508508
data.m_F.resize(0,data.size);
509509
data.m_E.resize(0,data.size);
510-
data.m_parmat.resize(m_pars.size(),data.size);
510+
data.m_pars.resize(m_pars.size());
511511

512-
data.m_parmat.setZero();
513512
gsMatrix<T> pars;
514513
for (size_t v=0; v!=m_pars.size(); v++)
515514
{
516515
m_pars[v].first->piece(data.patch).eval_into((m_pars[v].second) ?
517516
map_ori.points :
518517
map_ori.values[0],
519518
pars);
520-
data.m_parmat.row(v) = pars;
519+
data.m_pars[v] = pars;
521520
}
522521
}
523522

@@ -542,9 +541,8 @@ class gsMaterialBase
542541
data.patch = (map_ori.patchId==-1) ? 0 : map_ori.patchId;
543542
data.m_F.resize(data.dim*data.dim,data.size);
544543
data.m_E.resize(data.dim*data.dim,data.size);
545-
data.m_parmat.resize(m_pars.size(),data.size);
544+
data.m_pars.resize(m_pars.size());
546545

547-
data.m_parmat.setZero();
548546
gsMatrix<T> pars;
549547
gsMatrix<T> jac_ori, jac_def;
550548
gsMatrix<T> I = gsMatrix<T>::Identity(data.dim,data.dim);
@@ -563,7 +561,7 @@ class gsMaterialBase
563561
for (size_t v=0; v!=m_pars.size(); v++)
564562
{
565563
m_pars[v].first->piece(data.patch).eval_into(map_ori.values[0], pars);
566-
data.m_parmat.row(v) = pars;
564+
data.m_pars[v] = pars;
567565
}
568566
}
569567

@@ -685,7 +683,7 @@ class gsMaterialData
685683
typename gsMaterialBase<T>::function_ptr m_undeformed;
686684
typename gsMaterialBase<T>::function_ptr m_deformed;
687685

688-
mutable gsMatrix<T> m_parmat;
686+
mutable std::vector<gsMatrix<T>> m_pars;
689687
mutable gsMatrix<T> m_rhoMat;
690688
// mutable gsMatrix<T> m_jac_ori, m_jac_def;
691689
mutable gsMatrix<T> m_F, m_E;

0 commit comments

Comments
 (0)