p_piezo#

Purpose

Property function for piezoelectric shells and utilities associated with piezoelectric models.

Syntax

 mat= m_piezo('database name')
 pl = m_piezo('dbval MatId  -elas 12 Name');

See section 6.1.4 for tutorial calls. Accepted commands are

ElectrodeMPC#

[model,InputDOF(end+1,1)]=p_piezo('ElectrodeMPC Name',model,'z==5e-5'); defines the isopotential constraint as a case entry Name associated with FindNode command z==5e-5. An illustration is given in section 6.1.4.

Accepted command options are

  • -Ground defines a fixed voltage constraint FixDof,V=0 on Name.
  • -Input"InName" defines an enforced voltage DofSet,InName entry for voltage actuation.
  • MatIdi is used to define a resultant sensor to measure the charge associated with the electrode. Note that the electrode surface must not be inside the volume with MatIdi. If that is the case, you must arbitrarily decompose your mesh in two parts with different MatId. You can also generate this sensor a posteriori using ElectrodeSensQ, which attempts to determine the MatIdi based on the search of a piezoelectric material connected to the MPC.

ElectrodeSensQ#

model=p_piezo('ElectrodeSensQ 1682 Q-Base',model); adds a charge sensor (resultant) called Q-Base on node 1682. (See (1.6) for theory).

For shells, the node number is used to identify the p_piezo shell property and thus the associated elements. It is reminded that p_piezo entries must be duplicated when multiple patches are used. For volumes, the p_piezo ElectrodeMPC should be first defined, so that it can be used to obtain the electrode surface information.

Note that the command calls fe_case('SensMatch') so that changes done to material properties after this call will not be reflected in the observation matrix of this sensor.

To obtain sensor combinations (add charges of multiple sensors as done with specific wiring), specify a data structure with observation .cta at multiple .DOF as illustrated below.

For a voltage sensor, you can simply use a DOF sensor
model=fe_case(model,'SensDof','V-Base',1682.21).

model=d_piezo('meshULBPlate cantilever');  % creates the model
% If you don't remember the electrode node numbers
r2=p_piezo('ElectrodeDOF',model)
% Combined charge
r1=struct('cta',[1 1],'DOF',[r2{1:2,2}]+.21,'name','QS2+3');
model=p_piezo('ElectrodeSensQ',model,r1);
sens=fe_case(model,'sens');
% Combined voltage
r1=struct('cta',[1 1],'DOF',[r2{3:4,2}]+.21,'name','VS2+3');
model=fe_case(model,'SensDof',r1.name,r1);
sens=fe_case(model,'sens');sens.lab

ElectrodeDOF#

p_piezo('ElectrodeDof Bottom',model) returns the DOF the bottom electrode. With no name for selection p_piezo('ElectrodeDof',model) the command returns the list of electrode DOFs based on MPC defined using the ElectrodeMPC command or p_piezo shell entries. Use ElectrodeDof.* to get all DOFs.

ElectrodeView ...#

p_piezo('electrodeview',cf) outlines the electrodes in the model and prints a clear text summary of electrode information. To only get the summary, pass a model model rather than a pointer cf to a feplot figure.

p_piezo('electrodeviewCharge',cf) builds a StressCut selection allowing the visualization of charge density. You should be aware that only resultant charges at nodes are known. For proper visualization a transformation from charge resultant to charge density is performed, this is known to have problem in certain cases so you are welcome to report difficulties.

Electrode2Case#

Electrode2Case uses electrode information defined in the obsolete Electrode stack entry to generate appropriate case entries : V_In for enforced voltage actuators, V_Out for voltage measurements, Q_Out for charge sensors.

ElectrodeInit#

ElectrodeInit analyses the model to find electric master DOFs in piezo-electric shell properties or in MPC associated with volume models.

Tab#

Tab commands are used to generate tabulated information about model contents. The calling format is p_piezo('TabDD',model). With no input argument, the current feplot figure is used. Currently generated tabs are

  • TabDD constitutive laws
  • TabPro material and element parameters shown as java tables.

View#

p_piezo('ViewDD',model) displays information about piezoelectric constitutive laws in the current model.

p_piezo('ViewElec ...',model) is used to visualize the electrical field. An example is given in section 6.1.4. Command options are DefLen val to specify the arrow length, EltSel val for the selection of elements to be viewed, Reset to force reinit of selection.

ViewStrain and ViewStress follow the same calling format.

Shell element properties#

Piezo shell elements with electrodes are declared by a combination of a mechanical definition as a layered composite, see p_shell 2, and an electrode definition with element property rows of the form

[ProId Type MecaProId ElNodeId1 LayerId1 UNU1 ElNodeId2...]

  • Type typically fe_mat('p_piezo','SI',1)
  • MecaProId : ProId for mechanical properties of element p_shell 2 composite entry. The MatIdi for piezo layers must be associated with piezo electric material properties.
  • ElNodId1 : NodeId for electrode 1. This needs to be a node declared in the model but its position is not used since only the value of the electric potential (DOF 21) is used. You may use a node of the shell but this is not necessary.
  • LayerId : layer number as declared in the composite entry.
  • UNU1 : currently unused property (angle for polarization)

The constitutive law for a piezoelectric shell are detailed in section 6.1.4. The following gives a sample declaration.

model=femesh('testquad4'); % Shell MatId 100 ProdId 110

% MatId 1 : steel, MatId 12 : PZT elastic prop model.pl=m_elastic('dbval 1 Steel'); % Sonox_P502 piezo material, sdtweb m_piezo('Sonox_P502') model.pl=m_piezo(model.pl,'dbval 3 -elas 12 SONOX_P502');

% ProId 111 : 3 layer composite (mechanical properties) model.il=p_shell(model.il,['dbval 111 laminate ' ... '3 1e-3 0 ' ... % MatID 3 (PZT), 1 mm piezo, 0 '1 2e-3 0 ' ... % MatID 1 (Steel), 2 mm '3 1e-3 0']); % MatID 3 (PZT), 1 mm piezo, 0 % ProId 110 : 3 layer piezo shell with electrodes on nodes 1682 and 1683 model.il=p_piezo(model.il,'dbval 110 shell 111 1682 1 0 1683 3 0');

p_piezo('viewdd',model) % Details about the constitutive law p_piezo('ElectrodeInfo',model) % Details about the layers