[4119] | 1 | function femmodel=NewFemModel(md,solution_type,analysis_types,nummodels);
|
---|
[4063] | 2 | %NEWFEMMODEL - create a finite element model out of the matlab base \@model md.
|
---|
| 3 | % For each analysis_type contained in analysis_types, create a set of nodes, constraints
|
---|
| 4 | % and loads. All analyses rely on the same elements, vertices and parameters. See
|
---|
| 5 | % FemModel.cpp in src/c/objects for more information on the FemModel implementation in c++
|
---|
| 6 | %
|
---|
| 7 | % Usage:
|
---|
[4119] | 8 | % femmodel=NewFemModel(md,solution_type,analysis_types,nummodels)
|
---|
[4063] | 9 | %
|
---|
| 10 |
|
---|
| 11 |
|
---|
| 12 | femmodel.solution_type=solution_type;
|
---|
| 13 | femmodel.analysis_counter=nummodels; %point to last analysis_type carried out
|
---|
| 14 |
|
---|
| 15 | %Dynamically allocate whatever is a list of length nummodels: */
|
---|
| 16 | femmodel.analysis_type_list=analysis_types;
|
---|
| 17 |
|
---|
| 18 | displaystring(md.verbose,'\n reading data from model %s...',md.name);
|
---|
| 19 | [femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.constraints,femmodel.loads,femmodel.materials,femmodel.parameters]=ModelProcessor(md,solution_type,femmodel.analysis_type_list);
|
---|
| 20 |
|
---|
| 21 | %now, go through all analyses types and post-process datasets
|
---|
| 22 | for i=1:length(analysis_types),
|
---|
| 23 |
|
---|
| 24 | analysis_type=femmodel.analysis_type_list(i);
|
---|
[4119] | 25 | displaystring(md.verbose,'%s%s',' dealing with analysis type: ',EnumAsString(analysis_type));
|
---|
[4063] | 26 |
|
---|
| 27 | displaystring(md.verbose,'%s',' generating degrees of freedofemmodel...');
|
---|
| 28 | if ~isfield(femmodel,'part') [femmodel.vertices,femmodel.part,femmodel.tpart]=VerticesDof(vertices, femmodel.parameters); %do not create partition vector twice! we only have one set of vertices!
|
---|
| 29 |
|
---|
| 30 | [femmodel.nodes]=NodesDof(femmodel.nodes,femmodel.parameters);
|
---|
| 31 |
|
---|
| 32 | displaystring(md.verbose,'%s',' generating single point constraints...');
|
---|
[4114] | 33 | [femmodel.nodes,femmodel.m_yg(i)]=SpcNodes(femmodel.nodes,femmodel.constraints,analysis_type);
|
---|
[4063] | 34 |
|
---|
| 35 | displaystring(md.verbose,'%s',' generating rigid body constraints...');
|
---|
[4114] | 36 | [femmodel.m_Rmg(i),femmodel.nodes]=MpcNodes(femmodel.nodes,femmodel.constraints,analysis_types);
|
---|
[4063] | 37 |
|
---|
| 38 | displaystring(md.verbose,'%s',' generating node sets...');
|
---|
[4114] | 39 | femmodel.m_nodesets(i)=BuildNodeSets(femmodel.nodes,analysis_type);
|
---|
[4063] | 40 |
|
---|
| 41 | displaystring(md.verbose,'%s',' reducing single point constraints vector...');
|
---|
[4114] | 42 | femmodel.m_ys(i)=Reducevectorgtos(femmodel.m_yg(i).vector,femmodel.m_nodesets(i));
|
---|
[4063] | 43 |
|
---|
| 44 | displaystring(md.verbose,'%s',' normalizing rigid body constraints matrix...');
|
---|
[4114] | 45 | femmodel.m_Gmn(i)= NormalizeConstraints(femmodel.m_Rmg(i),femmodel.m_nodesets(i));
|
---|
[4063] | 46 |
|
---|
| 47 | displaystring(md.verbose,'%s',' configuring element and loads...');
|
---|
| 48 | [femmodel.elements,femmodel.loads,femmodel.nodes,femmodel.parameters] = ConfigureObjects( femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices,femmodel.materials,femmodel.parameters);
|
---|
| 49 | end
|
---|
| 50 | end
|
---|