Live Link For MATLABUsers Guide
Live Link For MATLABUsers Guide
User’s Guide
LiveLink™ for MATLAB® User’s Guide
© 2009–2023 COMSOL
Protected by patents listed on www.comsol.com/patents, or see Help>About COMSOL Multiphysics on the
File menu in the COMSOL Desktop for less detailed lists of U.S. Patents that may apply. Patents pending.
This Documentation and the Programs described herein are furnished under the COMSOL Software License
Agreement (www.comsol.com/comsol-license-agreement) and may be used or copied only under the terms
of the license agreement.
COMSOL, the COMSOL logo, COMSOL Multiphysics, COMSOL Desktop, COMSOL Compiler,
COMSOL Server, and LiveLink are either registered trademarks or trademarks of COMSOL AB. MATLAB
and Simulink are registered trademarks of The MathWorks, Inc.. All other trademarks are the property of
their respective owners, and COMSOL AB and its subsidiaries and products are not affiliated with, endorsed
by, sponsored by, or supported by those or the above non-COMSOL trademark owners. For a list of such
trademark owners, see www.comsol.com/trademarks.
Version: COMSOL 6.2
Contact Information
Visit the Contact COMSOL page at www.comsol.com/contact to submit general inquiries
or search for an address and phone number. You can also visit the Worldwide Sales Offices
page at www.comsol.com/contact/offices for address and contact information.
If you need to contact Support, an online request form is located on the COMSOL Access
page at www.comsol.com/support/case. Other useful links include:
Chapter 1: Introduction
CONTENTS |3
The Model Object Methods. . . . . . . . . . . . . . . . . . . 39
The General Utility Functionality . . . . . . . . . . . . . . . . . 39
The Model History . . . . . . . . . . . . . . . . . . . . . . 41
Loading and Saving a Model . . . . . . . . . . . . . . . . . . . 41
Model Manager Features . . . . . . . . . . . . . . . . . . . . 47
®
Sharing the Model Between the COMSOL Desktop and the
®
MATLAB Workspace . . . . . . . . . . . . . . . . . . . 50
4 | CONTENTS
Selection Using Adjacent Geometry. . . . . . . . . . . . . . . 137
Displaying Selections . . . . . . . . . . . . . . . . . . . . 138
CONTENTS |5
Evaluating a Global Matrix . . . . . . . . . . . . . . . . . . 194
Extracting Data From Evaluation Groups and Tables . . . . . . . . 196
6 | CONTENTS
Getting Model Information in the Model Manager . . . . . . . . . 251
CONTENTS |7
mmgetbranch . . . . . . . . . . . . . . . . . . . . . . . 278
mmgetcommit . . . . . . . . . . . . . . . . . . . . . . . 278
mmmodelinfo . . . . . . . . . . . . . . . . . . . . . . . 279
mmsave . . . . . . . . . . . . . . . . . . . . . . . . . 279
mmsearch . . . . . . . . . . . . . . . . . . . . . . . . 280
mphaddplotdata . . . . . . . . . . . . . . . . . . . . . . 281
mphapplicationlibraries . . . . . . . . . . . . . . . . . . . 282
mphbatchinfo . . . . . . . . . . . . . . . . . . . . . . . 283
mphcd . . . . . . . . . . . . . . . . . . . . . . . . . . 284
mphcolortable . . . . . . . . . . . . . . . . . . . . . . . 284
mphcomponentinfo . . . . . . . . . . . . . . . . . . . . . 289
mphdataset . . . . . . . . . . . . . . . . . . . . . . . . 290
mphdatasetinfo . . . . . . . . . . . . . . . . . . . . . . 291
mphdoc . . . . . . . . . . . . . . . . . . . . . . . . . 291
mpheval . . . . . . . . . . . . . . . . . . . . . . . . . 292
mphevalglobalmatrix . . . . . . . . . . . . . . . . . . . . 296
mphevalpoint . . . . . . . . . . . . . . . . . . . . . . . 298
mphevalpointmatrix . . . . . . . . . . . . . . . . . . . . . 300
mphevaluate . . . . . . . . . . . . . . . . . . . . . . . 301
mphgeom. . . . . . . . . . . . . . . . . . . . . . . . . 302
mphgeominfo . . . . . . . . . . . . . . . . . . . . . . . 305
mphgetadj . . . . . . . . . . . . . . . . . . . . . . . . 308
mphgetcoords . . . . . . . . . . . . . . . . . . . . . . . 309
mphgetexpressions . . . . . . . . . . . . . . . . . . . . . 310
mphgetproperties . . . . . . . . . . . . . . . . . . . . . 311
mphgetselection . . . . . . . . . . . . . . . . . . . . . . 312
mphgetu . . . . . . . . . . . . . . . . . . . . . . . . . 312
mphglobal . . . . . . . . . . . . . . . . . . . . . . . . 314
mphimage2geom . . . . . . . . . . . . . . . . . . . . . . 316
mphinputmatrix . . . . . . . . . . . . . . . . . . . . . . 318
mphint2 . . . . . . . . . . . . . . . . . . . . . . . . . 320
mphinterp . . . . . . . . . . . . . . . . . . . . . . . . 323
mphinterpolationfile. . . . . . . . . . . . . . . . . . . . . 328
mphlaunch . . . . . . . . . . . . . . . . . . . . . . . . 329
mphload . . . . . . . . . . . . . . . . . . . . . . . . . 330
mphmatrix . . . . . . . . . . . . . . . . . . . . . . . . 332
mphmax . . . . . . . . . . . . . . . . . . . . . . . . . 335
mphmean. . . . . . . . . . . . . . . . . . . . . . . . . 338
8 | CONTENTS
mphmeasure . . . . . . . . . . . . . . . . . . . . . . . 341
mphmesh . . . . . . . . . . . . . . . . . . . . . . . . . 342
mphmeshstats . . . . . . . . . . . . . . . . . . . . . . . 343
mphmin . . . . . . . . . . . . . . . . . . . . . . . . . 346
mphmodel . . . . . . . . . . . . . . . . . . . . . . . . 349
mphnavigator . . . . . . . . . . . . . . . . . . . . . . . 350
mphopen . . . . . . . . . . . . . . . . . . . . . . . . . 351
mphparticle . . . . . . . . . . . . . . . . . . . . . . . . 353
mphplot . . . . . . . . . . . . . . . . . . . . . . . . . 355
mphquad2tri . . . . . . . . . . . . . . . . . . . . . . . 357
mphray . . . . . . . . . . . . . . . . . . . . . . . . . 358
mphreadstl . . . . . . . . . . . . . . . . . . . . . . . . 360
mphreduction . . . . . . . . . . . . . . . . . . . . . . . 360
mphreport . . . . . . . . . . . . . . . . . . . . . . . . 362
mphrun . . . . . . . . . . . . . . . . . . . . . . . . . 363
mphsave . . . . . . . . . . . . . . . . . . . . . . . . . 363
mphsearch . . . . . . . . . . . . . . . . . . . . . . . . 365
mphselectball . . . . . . . . . . . . . . . . . . . . . . . 366
mphselectbox . . . . . . . . . . . . . . . . . . . . . . . 366
mphselectcoords . . . . . . . . . . . . . . . . . . . . . . 368
mphsetparam . . . . . . . . . . . . . . . . . . . . . . . 370
mphshowerrors . . . . . . . . . . . . . . . . . . . . . . 372
mphsolinfo . . . . . . . . . . . . . . . . . . . . . . . . 372
mphsolutioninfo . . . . . . . . . . . . . . . . . . . . . . 374
mphstart . . . . . . . . . . . . . . . . . . . . . . . . . 377
mphstate . . . . . . . . . . . . . . . . . . . . . . . . . 378
mphsurf . . . . . . . . . . . . . . . . . . . . . . . . . 381
mphtable . . . . . . . . . . . . . . . . . . . . . . . . . 382
mphtags . . . . . . . . . . . . . . . . . . . . . . . . . 383
mphthumbnail . . . . . . . . . . . . . . . . . . . . . . . 384
mphversion . . . . . . . . . . . . . . . . . . . . . . . . 385
mphviewselection . . . . . . . . . . . . . . . . . . . . . 386
mphwritestl . . . . . . . . . . . . . . . . . . . . . . . . 388
mphxmeshinfo . . . . . . . . . . . . . . . . . . . . . . . 389
Index 393
CONTENTS |9
10 | C O N T E N T S
1
Introduction
This guide introduces you to LiveLink™ for MATLAB®, which extends your
COMSOL modeling environment with an interface between COMSOL
Multiphysics® and MATLAB®. The COMSOL Multiphysics Programming
Reference Manual provides additional documentation of the COMSOL API.
In this chapter:
11
About This Product
LiveLink™ for MATLAB® connects COMSOL Multiphysics to the MATLAB scripting
environment. Using this functionality you can do the following:
12 | CHAPTER 1: INTRODUCTION
Connect to COMSOL Server™
LiveLink™ for MATLAB® has the ability to connect to COMSOL Server™ as well as
COMSOL Multiphysics Server. This means that MATLAB scripts and GUIs that
utilize COMSOL functionality can be distributed to and used by any user that have
access to COMSOL Server™.
• Getting Help
• Where Do I Access the Documentation and the Application Libraries?
Getting Help
COMSOL Multiphysics and LiveLink™ for MATLAB® have several sources of help and
information.
You can access the online documentation directly at the MATLAB prompt using the
function mphdoc.
mphdoc
mphdoc(node)
mphdoc(node,<fname>)
14 | CHAPTER 1: INTRODUCTION
where <fname> is a string defining the feature name in the COMSOL API, for
example, mphdoc(model,'Rectangle').
help mphinterp
and
doc mphinterp
M-FILES
You can save COMSOL Multiphysics models as M-files. Use the COMSOL Desktop
to get your first model implemented using the COMSOL API.
Set up the model using the graphical user interface, then save the model as an M-file.
Next go to the File menu and select Save, in the save window locate Save as type list
and select Model File for MATLAB (*.m). This generates an M-function that can be run
using COMSOL with MATLAB.
Since version 5.3 a new syntax closer to the structure in the Model Builder is available.
This new syntax includes the component node as in the example below:
model.component(<cTag>).geom(<geomTag>)
In the previous syntax to access the geometry node you need to enter:
model.geom(<geomTag>)
Both versions are fully supported, and the new syntax is used by default when saving a
model in the M-file format. To save a model M-file using the old syntax, you need to
change the preference settings as described in the steps below:
At the MATLAB prompt use mphsave to save the model object model in the *.m
format as in the command below:
mphsave(model,<filename.m>)
To save the model object in the *.m format using the component syntax enter:
mphsave(model,<filename.m>,'component','on');
Models created with older versions than COMSOL 5.3 cannot be saved
using the component syntax unless File>Compact History is used.
16 | CHAPTER 1: INTRODUCTION
Note: Autocompletion will suggest property names and property values surrounded
by double quotation marks, for example "on", whereas this documentation uses
single quotation marks such as in 'on'. The wrapper functions will accept both types
of strings. Wrapper functions always return strings as character arrays (that is, strings
that use single quotation marks).
If you have installed the COMSOL apps in the MATLAB Apps ribbon,
click the COMSOL Application Libraries icon ( ).
User defined library can also be listed in this window. Such a library has to be added
using the COMSOL Desktop.
The following are some models that can help you get started.
If you are reading the documentation as a PDF file on your computer, the
blue links do not work to open an application or content referenced in a
different guide. However, if you are using the Help system in COMSOL
Multiphysics, these links work to other modules (as long as you have a
license), application examples, and documentation sets.
18 | CHAPTER 1: INTRODUCTION
THE DOCUMENTATION AND ONLINE HELP
The COMSOL Multiphysics Reference Manual describes all core physics interfaces
and functionality included with the COMSOL Multiphysics license. This book also has
instructions about how to use COMSOL Multiphysics and how to access the
electronic Documentation and Help content.
• In the Model Builder or Physics Builder click a node or window and then
press F1.
• In the main toolbar, click the Help ( ) button.
• From the main menu, select Help>Help.
• Press Ctrl+F1.
• From the File menu select Help>Documentation ( ).
• Press Ctrl+F1.
• In the main toolbar, click the Documentation ( ) button.
• From the main menu, select Help>Documentation.
Once the Application Libraries window is opened, you can search by name or browse
under a module folder name. Click to view a summary of the application and its
properties, including options to open it or a PDF document.
To include the latest versions of model examples, from the File>Help menu
select ( ) Update COMSOL Application Libraries.
20 | CHAPTER 1: INTRODUCTION
From the File or Windows menu select Application Libraries.
To include the latest versions of model examples, from the Help menu
select ( ) Update COMSOL Application Libraries.
To receive technical support from COMSOL for the COMSOL products, please
contact your local COMSOL representative or send your questions to
[email protected]. An automatic notification and case number is sent to you by
email.
COMSOL WEBSITES
Getting Started
In this chapter:
• The Client/Server Architecture
• Running COMSOL Models at the Command Line
• The COMSOL Apps
• Calling External Functions From Within the Model
23
The Client/Server Architecture
LiveLink™ for MATLAB® uses the client–server mode to connect a COMSOL server
and MATLAB.
When starting COMSOL with MATLAB, two processes are started — a COMSOL
Multiphysics Server and the MATLAB desktop. The COMSOL Desktop does not have
to be started, but it is possible to have both MATLAB and COMSOL Desktop
connected to the same COMSOL Multiphysics Server at the same time.
You can manually specify the port number. See the COMSOL
Multiphysics Installation Guide for more information on the COMSOL
server startup properties.
The links to features described outside of this user guide do not work in
the PDF, only from the online help.
A connection can be local (on the same computer), which is the common case, or
remote to a COMSOL server located on a different computer. In the latter case, you
can connect MATLAB to the COMSOL server manually as described in the section
Connecting a COMSOL Server and MATLAB® Manually.
In this section:
• On Windows®, use the COMSOL Multiphysics with MATLAB shortcut icon that is
created on the desktop after an automatic installation. A link is also available in the
Windows start menu under COMSOL Multiphysics 6.2>COMSOL Multiphysics 6.2 with
MATLAB.
• On macOS, use the COMSOL Multiphysics 6.2 with MATLAB application available in the
Application folder.
• On Linux®, enter the command comsol mphserver matlab at a terminal window.
To reset the login information, add the flag -login force to the icon
target path.
The above command starts MATLAB without a splash screen and without the
MATLAB desktop.
To avoid the splash screen on the COMSOL server, you need to create the
environment variable COMSOL_MATLAB_INIT and set it to matlab -nosplash.
COMSOL_MATLAB_INIT=’matlab -nosplash’
If the COMSOL Multiphysics Server started listening to a different port than the
default one (which is 2036) use the mphstart function as in the command below:
mphstart(<portnumber>)
mphstart(<ipaddress>, <portnumber>)
<ipaddress> can also be defined with the COMSOL server domain name.
The command above assumes that the same user login information are set on the
server and client machine. In case the login information are not accessible from the
client machine, manually specify the user name and password to the COMSOL server
with the command:
You can also specify all the information to connect a COMSOL server within the same
command using the following command:
MEMORY SETTINGS
To be able to manipulate the model object and extract data at the MATLAB prompt,
you may need to modify the Java® heap size in MATLAB. See Improving Performance
for Large Models.
import com.comsol.model.util.*
ModelUtil.disconnect;
When using LiveLink for MATLAB with COMSOL Server™ this way, MATLAB is
installed on the local computer where the user is running commands, and COMSOL
Server™ will most often be on another computer that is handled by an IT department.
It is recommended to install Desktop and Start menu shortcuts. If these are not
installed, the only way to create a link between MATLAB and COMSOL Server™ is
to use the mphstart command as previously described for use with COMSOL
Multiphysics Server.
When clicking on this shortcut, MATLAB will start and a dialog box appears that
makes it possible to connect to the COMSOL Server™ that is already assumed
running.
• Some graphical user interfaces that are included in a regular COMSOL Multiphysics
license do not work.
• A few utility functions that are mainly used when developing new models are not
supported (for example, mphlaunch and mphmodel).
• Plot on the server is not supported; instead use mphplot to plot using a local
MATLAB figure.
1 From the File (Windows users) or Options menu (macOS and Linux users), select
Preferences ( ).
2 In the Preferences dialog box, click LiveLink Connections and then LiveLink™ for
MATLAB®.
3 Set the MATLAB root directory path in the MATLAB® installation folder field.
4 Windows users also need to click the Register MATLAB® as COM Server button;
otherwise, the specified MATLAB version does not start when calling external
MATLAB functions from the COMSOL model.
• To update the preferences file, close and reopen the COMSOL Desktop.
1 In the MATLAB Desktop, go to the Apps Tab and select Install App.
2 Browse to the COMSOL Installation directory and go to the following folder:
COMSOL62/Multiphysics/mli/toolbox
3 Change File name extension to All Files (*.*) and select the file
LiveLink for MATLAB.mltbx
4 Click Open. This opens the Install LiveLink for MATLAB window.
5 The installed apps are now listed in the Add-On Manager window.
• COMSOL Model Library — opens a GUI for viewing the Model Library; see also
The Application Libraries Window.
• COMSOL Model Navigator — opens a GUI for viewing the COMSOL model
object defined as model in MATLAB. You can get more information in the section
Navigating the Model Object Using a GUI.
• COMSOL Open — opens a GUI for opening recent files; see also Loading a Model
from a List of Existing files.
• COMSOL Search — opens a GUI for searching for expressions in the COMSOL
model object defined as model in MATLAB. See also Finding Model Expressions.
Building Models
This chapter gives an overview of the model object and provides an introduction
to building models using the LiveLink™ interface.
In this chapter:
37
The Model Object
While working with the LiveLink™ interface in MATLAB® you work with models
through the model object. Use methods to create, modify, and access models.
In this section:
• All algorithms and data structures for the model are integrated in the model object.
• The model object is used by the COMSOL Desktop to represent your model. This
means that the model object and the COMSOL Desktop behavior are virtually
identical.
• The model object includes methods to set up and run sequences of operations to
create geometry, meshes, and to solve your model.
The links to features described outside of this user guide do not work in
the PDF, only from the online help.
model = ModelUtil.create(<ModelTag>);
This command creates a model object Model on the COMSOL server and a MATLAB
object model that is linked to the model object <ModelTag> in the COMSOL server.
It is possible to have several model objects on the COMSOL server, each with a
different name. To access each model object requires different MATLAB variables
linked to them and each MATLAB variable must have a different name.
Create a MATLAB variable linked to an existing model object with the function
ModelUtil.model. For example, to create a MATLAB variable model that is linked to
the existing model object <ModelTag> on the COMSOL server, enter the command
model = ModelUtil.model(<ModelTag>);
The mphload function is most commonly used with the filename of a COMSOL
model as an argument. You can use the function mphopen as well for the same purpose.
To remove a specific model object use the method ModelUtil.remove. For example,
to remove the model object <ModelTag> from the COMSOL server enter the
command
ModelUtil.remove(<ModelTag>);
Alternatively remove all the COMSOL objects stored in the COMSOL server with the
command
ModelUtil.clear
List the names of the model objects available on the COMSOL server with the
command
mphtags -show
mphrun(model, 'std1')
ModelUtil.showProgress(true)
ModelUtil.showProgress(false)
Using the model history is a convenient way to learn the COMSOL API.
The latest settings enter in the command Desktop being listed at the end
of the M-file.
The model history is automatically enabled when the model is created in the
COMSOL Desktop. It is however possible to manually disable the model history
recording from the MATLAB prompt with the command
model.hist.disable
model.hist.enable
To compact the model history in the COMSOL Desktop, from File menu (Windows
users) or from the toolbar (Mac and Linux users), select Compact History ( ).
To compact the model history at the MATLAB prompt enter the command:
model.resetHist
where <filename> is a string. This creates a model object Model on the COMSOL
server that is accessible using the MATLAB variable model.
mphopen <filename>
that will load the model with the given filename and use the variable name model for
accessing the model later. Any existing variable model will be overwritten without
warning.
The function mphload can also be used with the same property. In the
following documentation the commands also work with mphload.
mphload does not store the filename in the recent file list as mphopen does
by default.
Once the model is loaded, the filename and its associated model object tag are
displayed in the COMSOL server window.
If there is already a model object Model in the COMSOL server, mphopen overrides
the existing model object unless the model is also open in a COMSOL Multiphysics
Client. In the later case, an index number is appended to the new model object name,
for instance Model1.
mphopen and mphload do not look for lock file when opening a model in
the COMSOL server.
If you want to manually specify the model object in the COMSOL server. use the
command
where <ModelTag> is a string defining the tag that defines the loaded model in the
COMSOL server.
When using the function mphopen, the model history is automatically disabled to
prevent large history information when running a model in a loop. To turn model
history on, use the function mphopen:
The history recording can be useful when using the COMSOL Desktop.
All the operations are then stored in the saved M-file.
If you do not want to update the recent opened file list with the model you are about
to open, use the -nostore flag with the function mphopen as in the command below:
If the model mph-file is protected using a password, use mphload as in the command
below:
If you want to get the full filename of the loaded file, add a second output as in the
command below:
mphopen
If you have installed the COMSOL apps in the MATLAB Apps ribbon,
click the COMSOL Open icon ( ).
For each selected files, the model information is available in the File Info section.
Click the Recent button to get the list of the recent opened file. Click the Search button
to search for a file using file pattern. Click the Browse button to browse the directory
where to get filename list.
mphopen -clear
To open the GUI with the list of files in a specific directory (<dirpath>), enter the
command:
This load the model in the COMSOL Multiphysics server and create the link model in
MATLAB workspace.
If you select Open Outside MATLAB instead this will opens the model in a COMSOL
Desktop only.
mphsave(model,<filename>)
where <filename> is a string. If the filename specified <filename> does not provide
a path, the file is saved relative to the current MATLAB path. The file extension
determines the format to use (*.mph, *.m, *.java, or *.vba).
When saving the model as an M-file mphsave does not automatically use
the component syntax to save model using the COMSOL API, to enable
this syntax run the command below:
mphsave(model,<filename>,'component','on')
To save the model as a copy set the property copy to on as in the line below:
After saving a copy, the model does not remember where the copy was saved. Instead
it remembers its previous save location.
When saving a COMSOL files (MPH-files) you can choose the file to be optimized for
speed (using uncompressed files that are faster to save), or to be optimized for file size
(using compressed files). To do so set the property optimize to speed, or size,
respectively, as in the command below:
To save a clean model — that is, one without built, computed, and plotted data — set
the property excludedata to on:
If you want to include a title when saving the model, use the property title as in the
command below:
To use a MATLAB figure as model thumbnail run mphsave including the property
thumbnail:
mphthumbnail(model,<filename>)
You can also use a MATLAB figure to set the thumbnail. The following command will
set the thumbnail to the image of the current figure:
mphthumbnail(model,gcf)
You can extract the image and image filename for the thumbnail stored in model, enter
the command:
Example
The code below shows how to get the model thumbnail as MATLAB image data, show
the image in a MATLAB figure and store the new image as thumbnail in the model.
mphopen model_tutorial_llmatlab
im = mphthumbnail(model);
imshow(im)
mphthumbnail(model, gcf)
mphsave(model, 'newfilename')
Model Manager comes with an extensive API that you can use to automate some tasks
involved with load, saving and searching for models. This API is based on the Java
programming language and is available when using MATLAB. Some of the
functionality is made easily accessible though a few wrapper functions that are
described in the following sections.
mphopen '<location>'
where <location> is the location in the database of the model you want to load. The
location is a long string that starts with dbmodel:///.
3 Now the location is in your clipboard, make sure you paste it in the mphopen
command within quotes (single ' or double ") so that the location is interpreted as
a string.
mmsave(model,'version',<commit message>)
mmsave(model,'draft',<commit message>)
In case the model was not already saved in the database or you would like to save it
somewhere else in the database, you can specify the branch where to save the model:
mmsave(model,type,<commit message>,'branch',<branchvar>)
where type can either be version or draft and <branchvar> is the branch variable
defining the branch in the database where to save the model.
branchvar = mmgetbranch(<brname>,<repname>,<dbname>);
where <brname>, <repname>, and <dbname> are the name of the branch, the
repository, and the database of interest.
The dat variable is a struct array that contains information about the model (or file).
In order to open the first returned result (assuming it is a model and not a file) execute
this command
mphopen(dat(1).location)
In order to obtain more information about the model, for example the commit
message, use the mmmodelinfo command
info = mmmodelinfo(dat(1))
mmmodelinfo can be called with a model variable as argument. In case you have
opened a model either from a MPH-file or from Model Manager you can use
mmmodelinfo to determine where it has been loaded from since info will contain the
location either as a file name or as a location string.
loc = mmmodelinfo(model).location
cm is a commit object and msg is a struct with information about the commit that
includes commit comment, saved date and time information and the name of the user
who performed the commit.
In order to perform searches using specific filters (keywords) specify the filters and
search terms one after the other. All search terms entered this way will be joined as if
an explicit AND has been written between them. In order to search for models that are
both having a node type of analytic and are saved as regular models use the following
search.
Not all types of searches can be performed using this syntax. In order to specify
arbitrary search terms use Model Manager’s own search syntax. E,g, to search for files
that match either free or chem anywhere in the filename do the following
mphlaunch
This starts a new COMSOL Desktop, connect it to the COMSOL Multiphysics Server
that is already connected with MATLAB, and import the model available in the server.
In case several model are available in the server you can specify which one to import
by running the command below:
mphlaunch ModelTag
List the tags of the application loaded in the server with the command
mphtags.
You can also specify the MATLAB object name that is link to the application to be
imported in the COMSOL Desktop, enter the command:
mphlaunch(model)
mphlaunch sets automatically a timeout to make MATLAB wait 500 milliseconds until
the COMSOL server is free again. If you need to increase the timeout run the
command below:
mphlaunch(model,<timeout>)
where <timeout> is the time in milliseconds to wait for the server to be free again.
1 From the File (Windows users) or Options menu (Mac and Linux users), select
COMSOL Multiphysics Server>Connect to Server ( ).
2 In the Connect to Server window, you specify the Server configuration and the user
settings. In the Server section enter the COMSOL Multiphysics Server name (the
default name is localhost) and the Port number (the default is 2036). This number
corresponds to the port that the COMSOL Multiphysics Server is listening to, the
number is displayed at the COMSOL Multiphysics Server window.
3 In the User section enter a Username and a Password (if they are empty); these are
defined the first time you are connected to the COMSOL Multiphysics Server.
The first time you connect the COMSOL Desktop to the COMSOL
Multiphysics Server no model is loaded to the GUI. See Import An
application from the COMSOL Multiphysics Server to the COMSOL
Desktop to know how connect the GUI to a model loaded in the
COMSOL Multiphysics Server.
1 From the File (Windows users) or Options menu (Mac and Linux users), select
COMSOL Multiphysics Server>Import Application from Server ( ).
2 In the Import Application from Server window, specify the application you want to
import.
model = mphload(<ModelTag>)
where model is the variable in MATLAB used to access the model stored on the
COMSOL server and <ModelTag> is the tag of the COMSOL Model.
You can get the list of the models stored in the COMSOL Multiphysics Server with
the command:
mphtags -show
ModelUtil.setServerBusyHandler(ServerBusyHandler(<timeout>))
Where <timeout> is the time in millisecond to wait the server to be free again.
The links to features described outside of this user guide do not work in
the PDF, only from the online help.
model.component(<ctag>).geom.create(<geomtag>, sdim)
where <geomtag> is a string used to refer to the geometry and <ctag> is the string
defined when the component is created. The integer sdim specifies the space
dimension of the geometry and it can be either 0, 1, 2, or 3.
geometry.feature.create(<ftag>, operation)
where geometry is a link to the geometry node. The string <ftag> is used to refer to
the operation.
To set the feature property with different values than the default, use the set method:
geometry.feature(<ftag>).set(property, <value>)
To build the entire geometry sequence, run the function mphrun as:
mphrun(model,'geom')
Alternatively, you can call the run method directly to selected node:
geometry.run;
mphgeom(model)
mphgeom(model, <geomtag>)
where <geomtag> is the tag of the geometry node to display. When specifying
additional properties the geometry tag is required. If the model only contains a single
geometry the tag <geomtag> can be left empty.
The mphgeom function will use some of the view settings that are common between
COMSOL and MATLAB to show content such as axes labels (units) and grid and
supports hiding of geometric entities. This is controlled using the view option. To
switch off the use of view settings set the view option to none:
When running mphgeom the geometry node is automatically built. Set the build
property to specify how the geometry node is supposed to be built before displaying
it. Enter:
where build is a string with the value: 'off', 'current', or the geometry feature tag
<ftag>, which, respectively, does not build the geometry (off), builds the geometry
If the geometry contains workplane, you can plot the geometry entities inside a
specified workplane as a 2D geometry. Enter:
where <wptag> is the tag of the workplane to use. It is also possible to combine the
workplane geometry display with the build property to display the geometry built up
to a certain feature.
Use the parent property to specify the axes handle where to display the plot:
The following properties are also available to specify the vertex, edge, or face
rendering:
• vertexmode • edgecolor
• edgemode • facecolor
• facemode • vertexlabelscolor
• vertexlabels • edgelabelscolor
• edgelabels • facelabelscolor
• facelabels • domainlabelscolor
• domainlabels • facealpha
Use mphgeom to display a specified geometric entity. To set the geometric entity, enter
the entity property and set the geometric entity index in the selection property to:
where entity can be either 'point', 'edge', 'boundary', or 'domain', and <idx>
is a positive integer array that contains the list of the geometric entity indices.
You can get the handle of the plotted geometry entities with the command:
• Creating a 1D Geometry
• Creating a 2D Geometry Using Primitive Geometry Objects
• Creating a 2D Geometry Using Boundary Modeling
• Creating a 3D Geometry Using Solid Modeling
CREATING A 1D GEOMETRY
From the MATLAB command prompt, create a 1D geometry model by adding a
geometry sequence and then adding geometry features. The last step is to run the
sequence using the run method.
model = ModelUtil.create('Model');
model.component.create('comp1',true);
geom1 = model.component('comp1').geom.create('geom1',1);
i1 = geom1.feature.create('i1','Interval');
i1.set('intervals','many');
i1.set('p','0,1,2');
geom1.run;
Then enter:
p1 = geom1.feature.create('p1','Point');
p1.set('p',0.5);
geom1.run;
mphgeom(model,'geom1','vertexmode','on');
model = ModelUtil.create('Model');
comp1 = model.component.create('comp1',true);
geom2 = comp1.geom.create('geom2',2);
Continue by creating a rectangle with side length of 2 and centered at the origin:
sq1 = geom2.feature.create('sq1','Square');
sq1.set('size',2);
sq1.set('base','center');
c1 = geom2.feature.create('c1','Circle');
c1.set('r',0.5);
c1.set('pos',[0 0]);
The property r describes the radius of the circle, and the property pos describes the
positioning.
The property pos could have been excluded because the default position
is the origin. The default is to position the circle about its center.
co1 = geom2.feature.create('co1','Compose');
co1.selection('input').set({'c1' 'sq1'});
co1.set('formula','sq1-c1');
A selection object is used to refer to the input object. The operators +, *, and -
correspond to the set operations union, intersection, and difference, respectively.
The Compose operation allows you to work with a formula. Alternatively use the
Difference operation instead of Compose. The following sequence of commands
starts with disabling the Compose operation:
co1.active(false);
dif1 = geom2.feature.create('dif1','Difference');
dif1.selection('input').set({'sq1'});
dif1.selection('input2').set({'c1'});
Run the geometry sequence to create the geometry and plot the result:
geom2.run;
Trimming Solids
Continue with rounding the corners of the rectangle with the Fillet operation:
fil1 = geom2.feature.create('fil1','Fillet');
fil1.selection('point').set('dif1', [1 2 7 8]);
fil1.set('radius','0.5');
geom2.run;
The geometry sequence is updated with rounded corners. To view the result, enter:
mphgeom(model,'geom2');
model = ModelUtil.create('Model');
comp1 = model.component.create('comp1',true);
g1 = comp1.geom.create('g1',2);
w=1/sqrt(2);
c1 = g1.feature.create('c1','BezierPolygon');
c1.set('type','open');
c1.set('degree',2);
c1.set('p',[-0.5 -1 -1;-0.5 -0.5 0]);
c1.set('w',[1 w 1]);
c2 = g1.feature.create('c2','BezierPolygon');
c2.set('type','open');
c2.set('degree',2);
c2.set('p',[-1 -1 -0.5;0 0.5 0.5]);
c2.set('w',[1 w 1]);
c3 = g1.feature.create('c3','BezierPolygon');
c3.set('type','open');
c3.set('degree',1);
c3.set('p',[-0.5 0.5; 0.5 0.5]);
c4 = g1.feature.create('c4','BezierPolygon');
c4.set('type','open');
c4.set('degree',2);
c4.set('p',[0.5 1 1; 0.5 0.5 0]);
The objects c1, c2, c3, c4, c5, and c6 are all curve2 objects. The vector [1 w 1]
specifies the weights for a rational Bézier curve that is equivalent to a quarter-circle arc.
The weights can be adjusted to create elliptical or circular arcs.
Convert the curve segments to a solid with the following conversion command:
csol1 = g1.feature.create('csol1','ConvertToSolid');
csol1.selection('input').set({'c1' 'c2' 'c3' 'c4' 'c5' 'c6'});
mphrun(model,'geom');
mphgeom(model,'g1');
model = ModelUtil.create('Model');
comp1 = model.component.create('comp1',true);
Add a rectangle to the work plane, then add fillet to its corners:
r1 = wp1.geom.feature.create('r1', 'Rectangle');
r1.set('size',[1 2]);
geom1.run;
geom1.runCurrent;
b1 = wp2.geom.feature.create('b1', 'BezierPolygon');
b1.set('type', 'open');
b1.set('degree', [1 1 1 1]);
b1.set('p',...
{'0.75','1','1','0.8','0.75';'0.1','0.1','0.05','0.05','0.1'});
b1.set('w', {'1','1','1','1','1','1','1','1'});
wp2.geom.feature.create('csol1', 'ConvertToSolid');
wp2.geom.feature('csol1').selection('input').set({'b1'});
mphrun(model,'geom');
where <geomtag> is the tag of either a geometry node or a part geometry node you
want the information from. In case of the model has only geometry node, the tag
<geomtag> is optional.
The output info is a MATLAB® structure. The default fields available in the structure
are listed in the table:
FIELDS DESCRIPTION
where <entitytype> is the type of the entity to get the data from. It can be either
'face', 'edge', or 'vertex'.
data is a MATLAB structure which fields depend on the entity type. These are listed
in the table below:
The geometric data are evaluated within the local parameter range on a structured grid
for faces or interval for edge, with default sizes of 10-by-10 and 10, respectively. To
change the size of geometric data evaluation point use the steps property as in the
command below:
where <steps> is an integer or a NxM integer array for a face type in case you need to
evaluate the data on an uneven grid.
model = ModelUtil.create('Model');
comp1 = model.component.create('comp1',true);
mphgeom(model)
As only one geometry node is available in the model, to access the geometry
information enter:
info = mphgeominfo(model)
info.sdim
info.Ndomains
info.Nboundaries
info.boundingbox
To get the geometry data for the face number 1 enter the command:
data.paramrange
this returns a 4-by-1 array following the given format: [s1min; s1max; s2min; s2max]
where s1min and s1max are the minimum, and maximum respectively, of the first
surface parameter. s2min and s2max are the minimum, and maximum respectively, of
the second surface parameter.
data.facex
The face coordinates are evaluated with the local parameter range on a 10 x 10 points
grid. If you want to reduce or increase the size of evaluation grid, use the property
'steps'. For instance to evaluate the face coordinates on a 5 x 10 grid enter:
To get the parameter range of an edge and, for example, to get the length of edge
number 3, enter:
To get the coordinates and the curvature data at the middle of edge number 3 enter:
model = ModelUtil.create('Model');
model.param.set('a',0.2);
comp1 = model.component.create('comp1',true);
geom1 = comp1.geom.create('geom1',2);
r1 = geom1.feature.create('r1','Rectangle');
r1.set('size',[0.5 1]);
r1.set('pos',[0 0]);
r2 = geom1.feature.create('r2','Rectangle');
r2.set('size',[0.6 1]);
r2.set('pos',[0.5 0]);
c1 = geom1.feature.create('c1','Circle');
c1.set('r',0.1);
c1.set('pos',{'a','0.5'});
model.param.set('a',0.5);
mphgeom(model);
for a=0.2:0.1:0.5
model.param.set('a',a);
geom1.run;
end
Create a mesh:
comp1.mesh.create('mesh1');
std1 = model.study.create('std1');
You can run the parametric sweep using a MATLAB for loop:
for a=0.2:0.1:0.8
model.param.set('a',a);
mphrun(model);
end
model.geom(<geomtag>).feature.create(<ftag>,'InterpolationCurve')
ftag.set('table', <data>)
where ftag is the curve interpolation node and <data> can either be a 2-by-N cell
array or a 2-by-N array.
Control the type of geometry generated by the operation with the command:
ftag.set('type', type)
where type can either be 'solid' to generate a solid object, 'closed' to generate a
closed curve or 'open' to generate an open curve.
ic1.set('table', p');
Use the MATLAB function imread to read image data from an image file.
where imagedata is a C array containing the image data, and level is the contour
level value used to generate the geometry contour.
where type is 'solid' and generates a solid object, 'closed' generates a closed
curve object, or 'open' generates an open curve geometry object.
Use the property curvetype to specify the type of curve used to generate the
geometry object:
where curvetype can be set to 'polygon' to use a polygon curve. The default curve
type creates a geometry with the best suited geometrical primitives. For interior curves
it uses interpolation curves, while for curves that are touching the perimeter of the
image a polygon curve is used.
To scale the geometry use the scale property where scale is a double value:
Set the minimum distance (in pixels) between coordinates in curve with the mindist
property where mindist is a double value:
Set the minimum area (in square pixels) for interior curves where minarea is a double
value:
To create a rectangle domain surrounding the object generated use the property
rectangle:
It is also possible to create a geometry object and include it in an existing model object,
to proceed use the command below:
where <geomnode> is the geometry node object where to include the newly generated
geometry.
To manually specify the tag of the model object created in the COMSOL server use
the command below:
where <Modeltag> is a string defining the tag of the model object in the COMSOL
server.
p = (peaks+7)*5;
[c,h] = contourf(p);
clabel(c, h);
Use the property type to create closed or open curves. For example, to create a
geometry following contour 40 with closed curves, enter:
To scale the geometry, use the scale property. Using the current model scale the
geometry with a factor of 0.001 (1e-3):
To insert a rectangle in the geometry that has an outer domain surrounding the
created contour, set the property rectangle to on:
Only include the interior curves with an area larger than 100 square pixels:
model = mphopen('model_tutorial_llmatlab');
geom1 = model.component('comp1').geom('geom1');
wp1 = geom1.feature.create('wp1', 'WorkPlane');
wp1.set('quickz',1e-2);
mphimage2geom(p, 50, 'scale', 1e-3, 'geom', wp1.geom);
mphgeom(model)
to get the measurement of the entity type entity in the geometry <geomtag>. entity
can be one of 'point', 'edge', 'boundary', or 'domain'.
The output measure return the value of a coordinates, a length, an area or volume,
respectively. For point entities, if you select two or more points, the output correspond
to the midpoint coordinates.
where sel is an integer array that contains the selection number of the entities to
measure.
When you select several entities you can get another measurement value with the
command:
where msr2 corresponds to a surface area when the entities are volumes and a distance
when the input entities are two points.
The links to features described outside of this user guide do not work in
the PDF, only from the online help.
model.component(<ctag>).mesh.create(<meshtag>, <geomtag>)
where <meshtag> is a string that you use to refer to the meshing sequence. The tag
geomtag specifies the geometry to use for this mesh node.
mesh.feature.create(<ftag>, operation)
where mesh is a link to a mesh node and the string <ftag> is a string that you use to
refer to the operation.
mesh.feature(<ftag>).set(property, <value>)
To build all the mesh sequence, runs the function mphrun as in:
mphrun(model,'mesh');
Alternatively you can call the run method for the selected mesh mode:
mesh.run;
mphrun(mesh.feature(ftag))
mphmesh(model)
If there are several meshes in a model, specify the mesh to display using the command:
mphmesh(model, <meshtag>)
The mphmesh function will use some of the view settings that are common between
COMSOL and MATLAB to show content such as axes labels (units) and grid and
supports hiding of geometric entities. This is controlled using the view option. To
switch off the use of view settings set the view option to none:
If the model only contains one mesh then the <meshtag> can be left empty.
Use the parent property to specify the axes handle where to display the plot:
• vertexmode • meshcolor
• edgemode • edgecolor
• facemode • vertexcolor
• vertexlabels • edgelabelscolor
• edgelabels • vertexlabelscolor
• facelabels • facelabelscolor
• facealpha
These properties are available both globally and locally. The following examples are
included: Creating a 2D Mesh with Triangular Elements and Creating a 2D Mesh with
Quadrilateral Elements. Also discussed is Changing The Tessellation Method.
There are several predefined settings that can be used to set a suitable combination of
values for many properties. To select one of these settings, use the property hauto and
pass an integer from 1 to 9 as its value to describe the mesh resolution:
For details about predefined mesh size settings and mesh element size
parameters, see Size in the COMSOL Multiphysics Programming
Reference Manual.
model = ModelUtil.create('Model');
mesh1 = comp1.mesh.create('mesh1');
ftri1 = mesh1.feature.create('ftri1','FreeTri');
mphrun(model,'mesh');
The default size feature is generated with the property hauto set to 5, that is:
mesh1.feature('size').set('hauto',5);
To override this behavior, set hauto to another integer. Override this by setting
specific size properties, for example, making the mesh finer than the default by
specifying a maximum element size of 0.02:
mesh1.feature('size').set('hmax',0.02);
mphrun(model,'mesh');
mphmesh(model)
Sometimes a nonuniform mesh is desirable. Make a mesh that is denser on the left side
by specifying a smaller maximum element size only on the edge segment to the left
(edge number 1):
mesh1.feature('size').set('hauto',5);
size1 = ftri1.feature.create('size1','Size');
size1.set('hmax',0.02);
size1.selection.geom('geom1',1);
size1.selection.set(1);
mesh1.run
mphmesh(model)
geom1 = comp1.geom.create('geom1',2);
geom1.feature.create('r1','Rectangle');
c1 = geom1.feature.create('c1','Circle');
c1.set('r','0.5');
co1 = geom1.feature.create('co1','Compose');
co1.selection('input').set({'c1' 'r1'});
co1.set('formula','r1-c1');
geom1.runAll;
mesh1 = comp1.mesh.create('mesh1');
ftri1 = mesh1.feature.create('ftri1','FreeTri');
ftri1.set('method','del');
mesh1.run;
mphmesh(model,'mesh1')
model = ModelUtil.create('Model');
comp1 = model.component.create('comp1', true);
geom1 = comp1.geom.create('geom1',2);
geom1.feature.create('c1','Circle');
mesh1 = comp1.mesh.create('mesh1');
mesh1.feature.create('ftri1','FreeQuad');
mesh1.run;
mphmesh(model)
Use the EdgeGroup attribute to group the edges (boundaries) into four edge groups,
one for each edge of the logical mesh. To control the edge element distribution use
the Distribution attribute, which determines the overall mesh density.
model = ModelUtil.create('Model');
comp1 = model.component.create('comp1', true);
geom1 = comp1.geom.create('geom1',2);
geom1.feature.create('r1','Rectangle');
r2 = geom1.feature.create('r2','Rectangle');
r2.set('pos',[1 0]);
c1 = geom1.feature.create('c1','Circle');
c1.set('r','0.5');
c1.set('pos',[1.1 -0.1]);
dif1 = geom1.feature.create('dif1', 'Difference');
dif1.selection('input').set({'r1' 'r2'});
dif1.selection('input2').set({'c1'});
geom1.run('dif1');
mesh1 = comp1.mesh.create('mesh1');
map1 = mesh1.feature.create('map1','Map');
mesh1.run;
mphmesh(model);
Figure 3-6: Structured quadrilateral mesh (right) and its underlying geometry.
The left-hand side plot in Figure 3-6 is obtained with this command:
The EdgeGroup attributes specify that the four edges enclosing domain 1 are
boundaries 1 and 3; boundary 2; boundary 8; and boundary 4. For domain 2 the four
edges are boundary 4; boundary 5; boundary 7; and boundaries 9, 10, and 6.
model = ModelUtil.create('Model');
comp1 = model.component.create('comp1', true);
geom1 = comp1.geom.create('geom1',2);
geom1.feature.create('r1','Rectangle');
geom1.feature.create('c1','Circle');
uni1 = geom1.feature.create('uni1', 'Union');
uni1.selection('input').set({'c1' 'r1'});
geom1.runCurrent;
del1 = geom1.feature.create('del1', 'Delete');
del1.selection('input').init(1);
del1.selection('input').set('uni1', 8);
geom1.run('del1');
mesh1 = comp1.mesh.create('mesh1');
map1 = mesh1.feature.create('map1','Map');
map1.selection.geom('geom1', 2);
map1.selection.set(2);
The final mesh is in Figure 3-7. Note the effect of the Distribution feature, with
which the distribution of vertex elements along geometry edges can be controlled.
The left-hand side plot in Figure 3-7 is obtained with this command:
To replace the structured quad mesh by an unstructured quad mesh, delete the Map
feature and replace it by a FreeQuad feature:
mesh1.feature.remove('map1');
mesh1.run('dis1');
fq1 = mesh1.feature.create('fq1', 'FreeQuad');
fq1.selection.geom('geom1', 2).set(2);
mesh1.run;
Thus, to get the FreeQuad feature before the FreeTri feature, the dis1 feature needs
to be made the current feature by building it with the run method. Alternatively, parts
of a mesh can be selectively removed by using the Delete feature. For example, to
remove the structured mesh from domain 2 (along with the adjacent edge mesh on
edges 3 and 4), and replace it with an unstructured quad mesh, enter these commands:
del1 = mesh1.feature.create('del1','Delete');
For further details on the various commands and their properties see the
COMSOL Multiphysics Programming Reference Manual.
model = ModelUtil.create('Model');
comp1 = model.component.create('comp1', true);
mesh1 = comp1.mesh.create('mesh1');
mesh1.feature.create('ftri1', 'FreeTri');
mesh1.run;
mphmesh(model)
To obtain a torus, leave the angles property unspecified; the default value gives a
complete revolution.
model = ModelUtil.create('Model');
comp1 = model.component.create('comp1', true);
geom1 = comp1.geom.create('geom1', 3);
wp1 = geom1.feature.create('wp1', 'WorkPlane');
wp1.set('planetype', 'quick');
wp1.set('quickplane', 'xy');
c1 = wp1.geom.feature.create('c1', 'Circle');
c1.set('pos', [2, 0]);
ext1 = geom1.feature.create('ext1', 'Extrude');
ext1.selection('input').set({'wp1'});
geom1.runAll;
mesh1 = comp1.mesh.create('mesh1');
mesh1.run;
mphmesh(model);
The result is shown in Figure 3-9. With the properties elemcount and elemratio, the
number and distribution of mesh element layers is controlled in the extruded direction.
model = ModelUtil.create('Model');
comp1 = model.component.create('comp1', true);
geom1 = comp1.geom.create('geom1', 3);
cone1 = geom1.feature.create('cone1', 'Cone');
cone1.set('r', 0.3).set('h', 1).set('ang', 9);
cone1.set('pos', [ 0 0.5 0.5]).set('axis', [-1 0 0]);
geom1.feature.create('blk1', 'Block');
mesh1 = comp1.mesh.create('mesh1');
mesh1.run;
mphmesh(model);
The left-hand side plot in Figure 3-10 is obtained with this command:
mphgeom(model,'geom1','facemode','off','facelabels','on')
If starting with an empty mesh, an initial mesh is automatically created before inserting
the boundary layers into the mesh. This generates a mesh with triangular and
quadrilateral elements in 2D and tetrahedral and prism elements in 3D. The following
example illustrates this in 2D:
model = ModelUtil.create('Model');
comp1 = model.component.create('comp1', true);
mesh1.run;
mphmesh(model);
It is also possible to insert boundary layers in an existing mesh. Use the following
meshing sequence with the geometry sequence from the previous example:
bl1.active(false);
Figure 3-12: Initial unstructured quad mesh (left) and resulting boundary layer mesh
(right).
mesh1.feature.create('ref1', 'Refine');
By specifying the property tri, either as a row vector of element numbers or a 2-row
matrix, the elements to be refined can be controlled. In the latter case, the second row
of the matrix specifies the number of refinements for the corresponding element.
The refinement method is controlled by the property rmethod. In 2D, its default value
is regular, corresponding to regular refinement, in which each specified triangular
element is divided into four triangles of the same shape. Setting rmethod to longest
gives longest edge refinement, where the longest edge of a triangle is bisected. Some
triangles outside the specified set might also be refined in order to preserve the
triangulation and its quality.
In 3D, the default refinement method is longest, while regular refinement is only
implemented for uniform refinements. In 1D, the function always uses regular
refinement, where each element is divided into two elements of the same shape.
For stationary or eigenvalue PDE problems you can use adaptive mesh
refinement at the solver stage with the adaption solver step. See
Adaption in the COMSOL Multiphysics Programming Reference
Manual.
It is only possible to copy meshes between boundaries that have the same
shape. However, a scaling factor between the boundaries is allowed.
The following example demonstrates how to copy a mesh between two boundaries in
3D and then create a swept mesh on the domain:
model = ModelUtil.create('Model');
comp1 = model.component.create('comp1', true);
mesh1 = comp1.mesh.create('mesh1');
mesh1.run;
mphmesh(model);
Figure 3-13: Prism element obtained with the CopyFace and Sweep features.
To explicitly control the orientation of the copied mesh, use the EdgeMap attribute.
The command sequence:
mesh1.run;
mphmesh(model);
copies the mesh between the same boundaries as in the previous example, but now the
orientation of the source mesh on the target boundary is different. The domain is then
meshed by the tetrahedral mesher, resulting in the mesh in Figure 3-14. In this case it
is not possible to create a swept mesh on the domain because the boundary meshes do
not match in the sweeping direction.
This example demonstrates how to convert a quad mesh into a triangle mesh:
model = ModelUtil.create('Model');
comp1 = model.component.create('comp1', true);
geom1 = comp1.geom.create('geom1', 2);
geom1.feature.create('c1', 'Circle');
geom1.feature.create('r1', 'Rectangle');
int1 = geom1.feature.create('int1', 'Intersection');
int1.selection('input').set({'c1' 'r1'});
mesh1 = comp1.mesh.create('mesh1', 'geom1');
mesh1.feature.create('fq1', 'FreeQuad');
mesh1.runCurrent;
mphmesh(model);
mesh1.feature.create('conv1', 'Convert');
mesh1.run;
mphmesh(model);
Figure 3-15: Mesh generated by the quad mesher (left) and the mesh after conversion from
quad to triangle elements (right).
IMPORTING MESHES
To import a mesh stored in a supported format use the Import feature. The following
commands import and plot a mesh defined in a COMSOL Multiphysics text file:
mesh1.run;
mphmesh(model);
Where COMSOL is the path of root directory where COMSOL Multiphysics is installed.
The above command sequence results in Figure 3-16.
For a description of the text file format see the COMSOL Multiphysics
Reference Manual.
model = ModelUtil.create('Model');
comp1 = model.component.create('comp1', true);
geom1 = comp1.geom.create('geom1', 2);
geom1.feature.create('c1', 'Circle');
geom1.runAll;
mesh1 = comp1.mesh.create('mesh1');
mesh1.feature.create('ftri1', 'FreeTri');
mesh1.run;
meshplot1.set('elemfilter','qualityrev');
mphplot(model,'pg1','rangenum',1);
These commands display the worst 25% and the best 25% elements in terms of mesh
element quality. In Figure 3-17, the triangular mesh elements in the right-hand side
plot are more regular than those in the left-hand side plot; this reflects the fact that a
Figure 3-17: Visualizations of the mesh quality: worst 25% (left) and best 25% (right).
stats = mphmeshstats(model)
The fields maxgrowthrate and meangrowthrate provide statistics for the entire
selection regardless of the element type property.
If several mesh cases are available in the model object, specify the mesh tag:
Set the number of bins in the quality distribution histogram (qualitydistr) with the
property qualityhistogram:
stats = mphmeshstats(model,<meshtag>,'qualityhistogram',<num>)
Set the mesh quality measure from for the mesh statistics with the property
qualitymeasure:
stats = mphmeshstats(model,<meshtag>,'qualitymeasure',<quality>)
stats = mphmeshstats(model,<meshtag>,'entity',entity)
Use the selection property to specify the entity number where to get the mesh
statistics:
stats = mphmeshstats(model,<meshtag>,'entity',entity,...
'selection',<selnum>)
stats = mphmeshstats(model,<meshtag>,'selection',<seltag>)
The properties entity and selection cannot be set if the mesh data
information is returned.
stats = mphmeshstats(model,<meshtag>,'type',type)
where type is one of the mesh element type available: vertex ('vtx'), edge ('edg'),
triangle ('tri'), quad ('quad'), tetrahedron ('tet'), pyramid ('pyr'), prism
('prism') or hexahedron ('hex'). type can also be a cell array to return the mesh
statistics of several mesh element type.
[meshstats,meshdata] = mphmeshstats(model)
model = ModelUtil.create('Model');
comp1 = model.component.create('comp1', true);
geom1 = comp1.geom.create('geom1', 2);
geom1.feature.create('sq1', 'Square');
geom1.run;
mesh1 = comp1.mesh.create('mesh1');
mesh1.feature.create('ftri1', 'FreeTri');
mesh1.feature('size').set('hmax', 0.5);
mesh1.run('ftri1');
mphmesh(model);
[meshstats,meshdata] = mphmeshstats(model);
meshdata =
types: {'edg' 'tri' 'vtx'}
vertex: [2×12 double]
vtx = meshdata.vertex
vtx =
0 0 0.302 0.5 0.351 0 0.631 1 0.673 0.5 1 1
0 0.5 0.302 0 0.639 1 0.363 0 0.672 1 0.5 1
In the elem field the element information is retrieved, such as the node indices (using
a 0 based) connected to the elements:
tri = meshdata.elem{2}
tri =
2 2 2 1 2 2 3 8 9 8 10 8 8 8
1 0 4 4 3 6 7 4 5 9 6 6 10 11
0 3 1 5 6 4 6 6 4 4 7 10 11 9
In the above command, notice that element number 1 is connected to nodes 0, 1, and
2, and element number 2 is connected to nodes 2, 0, and 3.
Then create manually a mesh using a data distribution generated in MATLAB. Enter
the command:
The node distribution obtained with this command corresponds to the mesh in
Figure 3-18.
Figure 3-18: Mesh with elements (bold) and nodes (italic) indices.
ELEMENT NODES
1 0, 3, 4
2 0, 1, 4
3 1, 4, 5
4 1, 2, 5
5 3, 6, 7
6 3, 4, 7
7 4, 7, 8
8 4, 5, 8
To create the elements and nodes connectivity information use the command:
new_tri(:,1)=[0;3;4];
new_tri(:,2)=[0;1;4];
new_tri(:,3)=[1;4;5];
new_tri(:,4)=[1;2;5];
new_tri(:,5)=[3;6;7];
new_tri(:,6)=[3;4;7];
new_tri(:,7)=[4;7;8];
new_tri(:,8)=[4;5;8];
The links to features described outside of this user guide do not work in
the PDF, only from the online help.
comp = model.component(<ctag>);
phys = comp.physics.create(<phystag>, physint, <geomtag>)
where <phystag> is a string that identifies the physics interface node. Once defined,
you can always refer to a physics interface, or any other feature, by its tag. The string
physint is the constructor name of the physics interface. To get the constructor
name, the best way is to create a model using the desired physics interface in the GUI
and save the model as an M-file. The string <geomtag> refers to the geometry where
you want to specify the interface.
phys.feature.create(<ftag>, operation)
where <ftag> is a string that you use to refer to the operation. To set a property to a
value in an operation, enter:
phys.feature(<ftag>).set(property, <value>)
To disable or remove a feature node, use the methods active or remove, respectively.
The command:
phys.feature(<ftag>).active(false)
To activate the feature node you can set the active method to true:
phys.feature(<ftag>).active(true)
phys.feature.remove(<ftag>)
model = ModelUtil.create('Model');
comp1 = model.component.create('comp1', true);
The tag of the interface is ht. The interface constructor is HeatTransfer. The physics
is defined on geometry geom1.
comp1.physics('ht')
ans =
The physics method has the following child nodes: solid1, init1, ins1, idi1, os1,
and cib1. These are the default features that come with the Heat Transfer in Solids
interface. The first feature, solid1, consists of the heat balance equation. Confirm this
by entering:
solid = phys.feature('solid1')
ans =
Type: Solid
Tag: solid1
Operation: SolidHeatTransferModel
The settings of the solid1 feature node can be modified, for example, to manually set
the material property. To change the thermal conductivity to 400 W/(m*K) enter:
solid.set('k_mat', 1, 'userdef');
solid.set('k', 400);
The Heat Transfer in Solids interface has features you can use to specify domain or
boundary settings. For example, to add a heat source of 105 W/m3 in the study
domain, enter the commands:
Then add a mesh and a study feature and compute the solution:
comp1.mesh.create('mesh1');
std = model.study.create('std1');
std.feature.create('stat', 'Stationary');
mphrun(model,'study')
To visualize the solution, call the function mphplot in combination with the default
plot group pg1:
mphplot(model,'pg1','rangenum',1)
model.component(<ctag>).material.create(<mattag>)
A Material is a collection of material models, where each material model defines a set
of material properties, material functions, and model inputs. To add a material model,
use the syntax:
mat.materialmodel.create(<mtag>)
where mat is a link to a material node. The string <mtag> refers to the material model.
To define material properties for the model, set the property value pairs by entering:
mat.materialmodel(<mtag>).set(property, <value>)
where comp is the link to the component, modelMat the model MPH-file name that
contains the source material node and <mattag> the tag of the material node to
import.
mat = model.component('comp1').material.create('mat1');
mat.materialmodel('def').set('density', 400);
mat.materialmodel('def').set('heatcapacity', 2e3);
To use the defined material in a model, set the solid1 feature to use the material node.
Enter:
solid.set('k_mat',1,'from_mat');
info = phystag.feature(<ftag>).featureInfo('info');
Use the method getInfoTable(type) to return the tables available in the Equation
View node:
infoTable = info.getInfoTable(type);
where type defines the type of table to return. It can have the value 'Weak' to return
the weak form equations, 'Constraint' to return the constraint types table, or
'Expression' to return the variable expressions table.
ht = model.component('comp1').physics('ht');
info = ht.feature('solid1').featureInfo('info');
From the info object access the weak form equation by entering:
infoTable = info.getInfoTable('Weak')
infoTable =
[] '(ht.dfluxx*t…' 'root.comp1.ht…' '4' 'Spatial' 'Domain 1' '3'
The output shows that the heat equation is defined at the first row and the weak
expression at the second column. Enter:
infoTable(1,2)
to get the weak equation as a string variable. The result of this command is:
ans =
(ht.dfluxx*test(Tx)+ht.dfluxy*test(Ty)+ht.dfluxz*test(Tz))*ht.d
equExpr = '200[W/(m*K)]*(-Tx*test(Tx)-Ty*test(Ty)-Tz*test(Tz))';
info.set(infoTable(1,2), {equExpr});
These commands set the heat conductivity to a constant value directly within the heat
balance equation.
You can now compute the solution and display the results in a figure:
mphrun(model,'study');
mphplot(model,'pg1','rangenum',1);
To define the name of the variable to be solved by the global equation, enter:
where ode is a link to a Global Equations node and <idx> is the index of the global
equation, and <name> a string with the name of the variable.
Initial value and initial velocity can be set with the commands:
where <init> and <init_t> are the initial value expression for the variable and its
time derivative respectively.
·
·· + u
u --- + 1 = 0
2
u0 = 0
u· 0 = 20
model.func.create(<functag>, 'Interpolation')
If you have several model nodes in your model and you want to attach it to the
specified component node <ctag>, enter:
model.component(<ctag>).func.create(<functag>, 'Interpolation')
Then you can interpolate data specified by a table inside the function (default), or
specified in an external file.
When using an interpolation table, set the interpolation data for each row of the table
with the commands:
where func is a link to a function node and <t_value> is the interpolation parameter
value and <ft_value> is the function value. <i> is the index (0-based) in the
interpolation table. If the number of rows is large then it takes a long time to create
the table element by element. Instead store all the data as a cell array of strings and
set the values all at once:
func.set('table', data)
To use an external file change the source for the interpolation and specify the file,
where filename is the name (including the path) of the data file:
func.set('source', 'file')
func.set('filename', <filename>)
Several interpolation methods are available. Choose the one to use with the command:
func.set('interp', method)
func.set('extrap', method)
Named Selections
The links to features described outside of this user guide do not work in
the PDF, only from the online help.
model.component(<ctag>).selection.create(<seltag>, 'Explicit')
sel.geom(sdim)
where sel is a link to an Explicit Selection node and sdim is the space dimension that
represents the different geometric entities:
• 3 for domains,
• 2 for boundaries/domains,
• 1 for edges/boundaries, and
• 0 for points.
Set the domain entity indices in the selection node with the command:
sel.set(<idx>)
where <idx> is an array of integers that list the geometric entity indices to add in the
selection.
Coordinate-Based Selections
model.component(<ctag>).selection.create(<seltag>, 'Ball')
To set the coordinates (<x0>, <y0>, <z0>) of the selection centerpoint, enter:
sel.set('posx', <x0>)
sel.set('posy', <y0>)
sel.set('posz', <z0>)
where sel is a link to a Ball Selection node and <x0>, <y0>, <z0> are double values.
sel.set('r', <r0>)
sel.set('entitydim', edim)
where edim is an integer defining the space dimension value (3 for domains, 2 for
boundaries/domains, 1 for edges/boundaries, and 0 for points).
The selection also specifies the condition for geometric entities to be selected:
sel.set('condition', condition)
To get the geometric entities enclosed by a ball of radius r0, with its center positioned
at (x0,y0,z0) enter the command:
where <geomtag> is the tag of geometry where the selection, and entitytype, can be
one of 'point', 'edge', 'boundary', or 'domain'.
The above function returns the entity indices list. Use it to specify a feature selection
or to create an explicit selection as described in Setting an Explicit Selection.
You can also refine the search using several search ball. To do so set the coordinates as
a NxM array where N corresponds of the number of point to use and M the space
dimension of the geometry as in the command below:
This returns the geometric entity indices that have vertices near both the given
coordinates using the tolerance radius.
To include any geometric entities in the selection that have at least one vertex inside
the search ball, set the property include to 'any':
In case the model geometry is finalized as an assembly, you have distinct geometric
entities for each part of the assembly (pair). Specify the adjacent domain index to avoid
selection of any overlapping geometric entities. Set the adjnumber property with the
domain index:
where <idx> is the domain index adjacent to the desired geometric entities.
model.component(<ctag>).selection.create(<seltag>, 'Box')
To specify the points (<x0>, <y0>, <z0>) and (<x1>, <y1>, <z1>), enter:
sel.set('xmin', <x0>)
sel.set('ymin', <y0>)
sel.set('zmin', <z0>)
sel.set('xmax', <x1>)
sel.set('ymax', <y1>)
sel.set('zmax', <z1>)
where sel is a link to a Box Selection node and <x0>, <y0>, <z0>, <x1>, <y1>, <z1>
are double values.
sel.set('entitydim', edim)
where edim is an integer defining the space dimension value (3 for domains, 2 for
boundaries/domains, 1 for edges/boundaries, and 0 for points).
The selection also specifies the condition for geometric entities to be selected:
sel.set('condition', condition)
To get the geometric entities of type entitytype enclosed by the box defined by the
points (x0,y0,z0) and (x1,y1,z1), enter the command:
idx = mphselectbox(model,<geomtag>,...
[<x0> <x1>;<y0> <y1>;<z0> <z1>], entitytype)
where <geomtag> is the geometry tag where the selection is applied, and entitytype
can be one of 'point', 'edge', 'boundary', or 'domain'.
The above function returns the entity indices list. Use it to specify a feature selection
or to create an explicit selection as described in Setting an Explicit Selection.
By default the function searches for the geometric entity vertices near these
coordinates using the tolerance radius. It returns only the geometric entities that have
all vertices inside the box or rectangle. To include any geometric entities in the
selection that have at least one vertex inside the search ball, set the property include
to 'any':
idx = mphselectbox(model,<geomtag>,...
[<x0> <x1>;<y0> <y1>;<z0> <z1>], entitytype,'include','any')
In case the model geometry is finalized as an assembly (pair), you have distinct
geometric entities for each part of the assembly. Specify the adjacent domain index to
avoid selection of overlapping geometric entities. Set the adjnumber property with the
domain index:
idx = mphselectbox(model,<geomtag>,...
[<x0> <x1>;<y0> <y1>;<z0> <z1>], entitytype, 'adjnumber', <idx>)
where <idx> is the domain index adjacent to the desired geometric entities.
c = mphgetcoords(model,<geomtag>,entitytype,<idx>)
model.component(<ctag>).selection.create(<seltag>, 'Adjacent')
sel.set(edim)
where sel is a link to an Adjacent Selection node and edim is an integer defining the
space dimension value (3 for domains, 2 for boundaries/domains, 1 for
edges/boundaries, and 0 for points).
The Adjacent selection node only supports the Selection node as an input:
sel.set( 'Adjacent')
sel.set('input', <seltag>)
Select the level of geometric entities to add in the selection with the command:
sel.set('outputdim', edim)
where edim is an integer defining the space dimension value (3 for domains, 2 for
boundaries/domains, 1 for edges/boundaries, and 0 for points).
If there are multiple domains in the geometry to include in the interior and exterior
selected geometric entities, then enter:
sel.set('interior', 'on')
sel.set('exterior', 'on')
To get a list of entities of type entitytype adjacent to the entity with the index
<adjnumber> of type adjtype, enter:
where <geomtag> is the tag of geometry where the selection applies, returntype is
the type of geometry entities whose index are returned and adjtype is the type of
input geometric entity. The string variables returntype and adjtype can be one of
'point', 'edge', 'boundary', or 'domain'.
If <adjnumber> is an array, you can get the list of adjacent entities that connect the
input entities the best, to do so enter:
The list returned by the function can be used to specify the selection for a model
feature or to create an explicit selection as described in Setting an Explicit Selection.
Displaying Selections
Use the function mphviewselection to display the selected geometric entities in a
MATLAB figure. This section also includes sections to Specify What to Display with
the Selection and Change Display Color and Transparency.
You can either specify the geometric entity index and its entity type or specify the tag
of a selection node available in the model.
To display the entity of type entitytype with the index <idx> enter:
where <geomtag> is the geometry node tag, and <idx> is a positive integer array that
contains the entity indices. The string entitytype can be one of 'point', 'edge',
'boundary', or 'domain'.
If the model contains a selection node with the tag <seltag>, this selection can be
displayed with the command:
To plot the selection in an existing axes, set the property 'parent' with the axes
handle. For instance, the command below displays the selection in the current axis:
• To include vertex, edge, and face numbers, set the property 'vertexlabels',
'facelabels' and 'edgelabels' respectively to 'on'.
• Change the marker used to represent the vertex with the property 'facemode'. In
the example command below the vertex are represented in the figure with a '+'
marker instead of the default '.':
mphviewselection(model, <seltag>, 'marker', '+')
• Specify the size of the marker with the property 'edgelabels', you can specify an
integer value corresponding to the number of pixels.
• Specify the color for the selected edge and face with the properties
'edgecolorselected' and 'facecolorselected' respectively. Specify the color
• Specify the color for the vertex, edge, and face labels with the properties
'vertexlabelscolor', 'edgelabelscolor' and 'facelabelscolor' respectively.
You can use a character or the RGB array to specify the color.
• Control the transparency of the geometry representation with the property
'facealpha'. Set the property with a double included between 0 and 1. Using this
command the geometry is displayed with a transparency of 50%:
mphviewselection(model, <seltag>, 'facealpha', 0.5)
The links to features described outside of this user guide do not work in
the PDF, only from the online help.
• Study steps, which determines overall settings suitable for a certain study type,
• Solver sequence, and
• Job configurations for distributed parametric jobs, batch jobs, and cluster
computing.
model.study.create(<studytag>)
The minimal definition for the study node consists in a study step that define the type
of study to use to compute the solution. To add a study step to the study node, use the
syntax:
study.feature.create(<ftag>, operation)
where study is a link to the study node. The string <ftag> is a string that is defined
to refer to the study step. The string operation is one of the basic study types, such
as Stationary, Transient, or Eigenfrequency, and more.
study.feature(<ftag>).set(property, <value>)
To generate the default solver sequence associated with the physics solved in the model
and compute the solution, run the study node with the command:
study.run
Another way to run a study is to call the function mphrun as in the command below:
mphrun(model)
This runs the study node study and automatically enables the progress window while
computing the solution. The progress bar is not available on macOS.
In case you have several studies in your model, and you would like to run a specific
one, type:
mphrun(study)
In case you do not want to display the progress window, set the property progress to
off:
mphrun(model,'study','progress','off')
model.sol.create(<soltag>)
where <soltag> is a string used to refer to the solver sequence associated to a solution
object.
A solver sequence has to be connected to a study node, which is done with the
command:
sol.study(<studytag>)
where <studytag> is the tag of the study you want to associate the solver sequence
sol.
• Study Step, where the study and study step is specified for compiling the equations
and computing the current solver sequence;
• Dependent Variables, this node handles settings for the computation of dependent
variables, such as initial value and scaling settings but also the dependent variables
not solved for; and
• Solver node, where the type of solver to use is specified to compute the solution.
sol.feature.create(<ftag>, operation)
where sol is a link to a solver sequence node. The string <ftag> is a string that is
defined to refer to the node, for example, a study step. operation can be
'StudyStep', 'Variables', or 'Stationary'.
feat.set(property, <value>)
For a list of the operations available for the solver node, see Features
Producing and Manipulating Solutions and Solvers and Study Steps, in
the COMSOL Multiphysics Programming Reference Manual.
Use the methods run or runAll to run the entire solver configuration node:
model.sol(<soltag>).run
model.sol(<soltag>).runAll
You can also use the method run(<ftag>) to run the solver sequence up to the solver
feature with the tag <ftag>:
model.sol(<soltag>).run(<ftag>)
When you want to continue solving a sequence, use the method runFrom(<ftag>) to
run the solver configuration from the solver feature with the tag <ftag>:
model.sol(<soltag>).runFrom(<ftag>)
Instead of using the low level API method shown above it is possible to instead use the
function mphrun for starting the solver. This function also takes care of showing the
progress bar.
mphrun(model)
mphrun(model, <studytag>)
mphrun(model, <soltag>)
study.feature.create(<ftag>, 'Parametric')
where <pname> is the name of the parameter to use in the parametric sweep and <idx>
the index number of the parameter. Set the <idx> to 0 to define the first parameter, 1
to define the second parameter, and so on.
where <pvalue> contains the list of parameter values defined with either a string or
with a double array, and <idx> is the index number of the parameter and uses the same
value as for the parameter name.
If there are several parameters listed in the parametric sweep node, select the type of
sweep by entering:
study.feature(<ftag>).set('sweeptype', type)
where type is a string defining the sweep type, it can take either the value 'filled'
or 'sparse', referring to all combinations or specified combinations of the parameter
values, respectively.
model.batch.create(<batchtag>, type)
where <batchtag> is the tag of the job sequence and type is the type of job to define.
It can be either Parametric, Batch, or Cluster.
For a solver sequence you need to attach the job sequence to an existing study node.
Enter the command:
model.batch(<batchtag>).attach(<studytag>)
Each job type, such as parametric, batch, or cluster job, can be defined with specific
properties. Use the set method to add a property to the batch job:
You can get the list of the properties in model.batch() in the COMSOL
Multiphysics Programming Reference Manual or type at the MATLAB
prompt: mphdoc(model.batch).
model.batch(<batchtag>).run
study.feature(<studysteptag>).set('plot', 'on')
where study is a link to a valid study node and <studysteptag> is a string that refers
to the study step.
Specify the plot group to plot by setting the plot group tag:
study.feature(<studysteptag>).set('plotgroup', <ptag>)
Only one plot group can be plotted during a computation. Use the probe feature
instead if you need to monitor several variables.
To activate Plot While Solving for a probe plot, enter the command:
study.feature(<studysteptag>).set('probesel', seltype)
where seltype is the type of probe selection, that can be 'none', 'all', or
'manual'.
In case the probe selection is set to manual you have to specify the list of the probe
variable to display. Enter the command:
study.feature(<studysteptag>).set('probes', <list>)
The links to features described outside of this user guide do not work in
the PDF, only from the online help.
model.result.create(<pgtag>, sdim)
Select the string <pgtag> to identify the plot group and the integer sdim to set the
space dimension (1, 2, or 3) of the group.
To add a plot to a plot group, use the syntax:
pg.feature.create(<ftag>, plottype)
where pg is a link to a plot group node and plottype is a string that defines the plot
type.
Plots can have different attributes that modify the display. For example, the
Deformation attribute deforms the plot according to a vector quantity, the Height
Expression attribute introduces 3D height on a 2D table surface plot, and the Filter
pg.feature(<ftag>).feature.create(<attrtag>, attrtype)
For a list of available plot types and corresponding attribute types, see
Results and model.result() in the COMSOL Multiphysics
Programming Reference Manual or type at the MATLAB prompt:
mphdoc(model.result).
The figure contains a toolbar that allows the user to control the use of views, lights,
and camera settings set in the model. The COMSOL menu list the plot group
available, as well as geometry and mesh plot.
You can specify the plotgroup to display at the command line. For example, to display
the plot group <pgtag> enter:
mphplot(model, <pgtag>)
This renders the graphics in a MATLAB figure window. In addition you can plot
results in a COMSOL Multiphysics Graphics window if you start COMSOL with
MATLAB using a graphics COMSOL Multiphysics Server. To do this for a plot group
<pgtag> enter:
Another way to plot in a COMSOL Graphics window is to use the run method:
model.result(<pgtag>).run
The default settings for plotting in a MATLAB figure do not display the color legend.
To include the color legend in a figure, use the property rangenum:
where the integer <idx> identifies the plot for which the color legend should be
displayed.
By default mphplot runs the plot group every time before generating the figure, this
ensure the plot to be up-to-date but could possibly slow down the plot generation. To
not run the plot group while creating the figure set the property run to off:
Note that if the plot group has never been run, an error could be returns while trying
to generate the figure.
pd = mphplot(model, <pgtag>)
The data fields contained in pd returned by mphplot are subject to change. The most
important fields are:
• p, the coordinates for each point that are used for creating lines or triangles.
• n, the normals in each point for the surfaces. These are not always available.
model = mphopen('model_tutorial_llmatlab');
std = model.study.create('std');
std.feature.create('stat','Stationary');
mphrun(model);
model.result.dataset.create('mir', 'Mirror3D');
pg = model.result.create('pg', 'PlotGroup3D');
pg.set('data', 'mir');
surf1 = pg.feature.create('surf1', 'Surface');
surf1.set('colortable', 'Thermal');
mphplot(model,'pg')
surf2 = pg.feature.create('surf2', 'Surface');
surf2.set('data', 'dset1').set('expr', 'ht.tfluxMag');
Now plot the result and extract the associated plot data structure:
pd = mphplot(model,'pg');
pd1 = pd{1}{1}
pd1 =
p: [3×1310 single]
t: [2×1048 int32]
rgb: [3×1 double]
type: 'line'
plottype: 'PlotGroup3D'
tag: 'pg'
preserveaspect: 'on'
title: 'Surface: Temperature (K) Surface: Total heat ...'
titlecolor: [3×1 double]
legendcolor: [3×1 double]
To investigate the plot data information of the second surface plot feature (surf2)
enter:
pd3 = pd{3}{1}
pd3 =
p: [3x4917 single]
n: [3x4917 single]
t: [3x8964 int32]
d: [4917x1 single]
colortable: 'Rainbow'
cminmax: [0.3193 6.7120e+05]
rgb: [4917x3 single]
type: 'surface'
plottype: 'Surface'
tag: 'surf2'
mphplot(<data>)
If the data structure contains the value of several expressions, set the one to display in
the plot with the index property:
mphplot supports only plotting of data structures that are of the type
point, line, or surface evaluations from mpheval.
To disable the mesh displayed together with the data results, set the property mesh to
off as in this command:
where type is the type of plot, that can be 'arrow', 'line', 'surface',
'annotation', 'tube' or 'point'.
You can create a plottype using the plotdata in an existing plotgroup using the property
plotgroup as in the command below:
First load the Busbar model from the COMSOL Multiphysics Application Library.
Enter:
model = mphopen('busbar');
To extract the temperature and the electric potential field, use the command mpheval:
dat = mpheval(model,{'T','V'},'selection',1);
mphplot(dat,'index',1,'colortable','Thermal');
Do a simple scaling of the electric potential then plot it using the default color table:
dat.d2 = dat.d2*1e-3;
To emphasize the geometry use the function mphgeom to display line plot on the same
figure:
hold on;
mphgeom(model, 'geom1', 'facemode', 'off')
All plots refer to datasets; the solutions are always available as the default
dataset.
model.result.dataset.create(<dsettag>, dsettype);
model.result.numerical.create(<numtag>, numtype)
For a list of the syntax of the numerical results type available, see About
Results Commands in the COMSOL Multiphysics Programming
Reference Manual.
To store the data needed to create a table and associate the table to the numerical node:
model.result.table.create(<tabletag>,'Table')
model.result.numerical(<numtag>).set('table',<tabletag>)
where <tabletag> is the tag of the table where you want to store the data evaluated
with the numerical operations defined with the tag <numtag>.
To extract the data stored in MATLAB into a table, use the methods getRealRow and
getImagRow, such as:
realRow = model.result.table(<tabletag>).getRealRow(<idx>)
imagRow = model.result.table(<tabletag>).getImagRow(<idx>)
For data evaluation in MATLAB you can also use the functions mpheval,
mphevalpoint, mphglobal, mphint2, mphinterp, mphmax, mphmean and mphmin.
Extracting Results
Exporting Data
Use the export node to generate an animation or to export data to an external file
(ASCII format). This section includes information about Animation Export, Data
Export, and the Animation Player.
ANIMATION EXPORT
Animations can be defined as two different types: a movie or an image sequence. The
movie generates file formats such as GIF (.gif), AVI (.avi), or flash (.swf); the
To change the animation type use the 'type' property according to:
anim.set('type', type)
where anim is a link to an animation node and type is either 'imageseq' or 'movie'.
anim.set(typefilename, <filename>)
anim.run
For a movie type animation, it is possible to change the number of frames per second
with the command:
anim.set('fps', <fps_number>)
For all animation types you can modify the width and the height of the plot with the
set method:
anim.set('width', <width_px>)
anim.set('height', <height_px>)
where, the positive integers <width_px> and <height_px> are the width and height
size (in pixels), respectively, to use for the animation.
DATA EXPORT
In order to save data to an ASCII file, create a Data node to the export method:
model.result.export.create(<datatag>, 'Data')
model.result.export(<datatag>).setIndex('expr', <expr>, 0)
model.result.export(<datatag>).set('filename', <filename>)
model.result.export(<datatag>).set('struct', datastruct)
To export the data in the specified file, run the export node:
model.result.export.(<datatag>).run
ANIMATION PLAYER
For transient and parametric studies, an animation player can be generated to create
interactive animations.
The player displays the figure on a COMSOL Graphics window. Make sure COMSOL
with MATLAB is started using a graphics COMSOL Multiphysics Server.
model.result.export.create(<playtag>, 'Player')
Then associate the player with an existing plot group by setting the plotgroup
property:
model.result.export(<playtag>).set('plotgroup', <pgtag>)
where <pgtag> refers to the plot group, which is animated in the player.
The default frame number used to generate the animation is 25, you can also specify
the number of frame with the command:
model.result.export(<playtag>).set('maxframe', <maxnum>)
model.result.export(<playtag>).run
Generating Report
You can use the Report Generator tool to report and document the model created in
COMSOL Multiphysics. At the command prompt, the function mphreport helps to
automatically add a default report template to the current model and generate it in the
HTML or Microsoft Word® format.
To add a default intermediate report template in the model, enter the command:
This create a new report node with a unique tag, which 'rpt1' if the model did not
contain any report. You can specify the tag to identify the report node using the
property 'tag' as in the command below:
When creating a default report template you can choose between different template
format, enter the command:
To generate and visualize the report with the tag <rpttag>, enter:
By default the output format is HTML, you can also generate report in the Microsoft
Word or Microsoft PowerPoint format. To generate a report in the Microsoft Word
format enter:
This section introduces you to the functionality available for LiveLink™ for
MATLAB® including the wrapper functions and the MATLAB tools that can be
used and combined with a COMSOL Multiphysics® model object.
In this chapter:
165
Using Workspace Variables in Model
Settings
LiveLink™ for MATLAB® allows you to define the model properties with MATLAB
variables or a MATLAB M-function.
In this section:
something.set(name, <value>)
The name argument is a string with the name of the parameter or property. The
<value> argument can, for example, be a MATLAB integer or double array variable.
<value> can also be a string; in this case, the value or expression is defined within the
model object.
When using a MATLAB variable, make sure that the value corresponds to the model
unit system. COMSOL can also take care of the unit conversation automatically; in this
case, convert the MATLAB integer or double variable to a string variable and use the
set method as:
something.set(property, [num2str(<value>)'[unit]'])
The name argument is a string with the name of the property; <value> is the value to
set the property, which can be a MATLAB variable value or a string; and <index> is
the index in the property table.
When using a MATLAB variable, make sure that the value corresponds to the model
unit system. COMSOL can automatically take care of the unit conversation; in this
case, converting the MATLAB integer or double variable to a string variable and using
the set method as:
where [unit] is the unit you want to set the value property.
The function is evaluated any time the model needs to be updated. The model object
cannot be called as an input argument of the M-function.
feature.set(property, myfun(<arg>))
The function is called only when the command is run at the MATLAB prompt. The
argument of the function <arg> called can be MATLAB variables. To include an
expression value from the model object, first extract it at the MATLAB prompt, as
described in Extracting Results.
The function myfun() accepts the model object model as an input argument as any
MATLAB variable.
In this section:
[d1,...] = mphinterp(model,{'e1',...},'coord',<coord>)
where e1,... are the COMSOL Multiphysics expressions to evaluate, <coord> the
evaluation point coordinates defined with a NxM double array, N the space dimension
of the evaluation domain, and M is the number of evaluation points. The output
d1,... is a PxM double array, where P is the length of the inner solution. If an
evaluation point is outside the expressions definition domain the output value is NaN.
The rest of this section has additional information for the function mphinterp:
<dsettag> is the tag of a solution dataset or a mesh dataset. The default value is the
current solution dataset of the model. When a mesh dataset is specified the
expression <expr> can only be geometry or mesh expression.
• selection — specify the domain selection for evaluation:
data = mphinterp(model,<expr>,'coord',<coord>,'selection',<seltag>)
where <seltag> is the tag of a selection node to use for the data evaluation.
<seltag> can also be a positive integer array that corresponds to the domain index
list. The default selection is All domains where the expression is defined. If the
evaluation point does not belong to the specified domain selection the output value
is NaN.
• edim — specify the element dimension for evaluation:
data = mphinterp(model,<expr>,'coord',<coord>,'edim',edim)
where edim is one of the strings 'point', 'edge', 'boundary', or 'domain'. You
can also use numerical values, which in 3D are the values from 0 to 3, corresponding
to the point (0), edge (1), boundary (2), and domain (3) levels. The default settings
correspond to the model geometry space dimension. When using a lower
space-dimension value, make sure that the evaluation point coordinates dimension
has the same size.
• solnum — specify the inner solution number for data evaluation. Inner solutions are
generated for the following analysis types: time domain, frequency domain,
eigenvalue, or stationary with continuation parameters:
data = mphinterp(model,<expr>,'coord',<coord>,solnum',<solnum>)
where <time> is a double array. The default value corresponds to all the stored time
steps.
• phase — specify the phase in degrees:
data = mphinterp(model,<expr>,'coord',<coord>,'phase',<phase>)
OUTPUT FORMAT
The function mphinterp returns in the MATLAB workspace a double array. It also
supports other output formats.
To evaluate several expressions at once, make sure that the same number of output
variables are defined as there are expressions specified:
To extract the unit of the evaluated expression, define an extra output variable:
with unit is a 1-by-N cell array, where N is the number of expressions to evaluate.
Returns only the real part in the data evaluation with the property complexout:
data = mphinterp(model,<expr>,'coord',<coord>,'complexout','off')
To disable the error message when all evaluation points are outside the geometry, set
the property coorderr to off:
data = mphinterp(model,<expr>,'coord',<coord>,'coorderr','off')
the output data for evaluation points will only contains NaN.
data = mphinterp(model,<expr>,'coord',<coord>,'evalmethod',method)
If the property evalmethod is set to harmonic, you specify whether the expression
should be linearized or not with the property differential as shown below:
data = mphinterp(model,<expr>,'coord',<coord>,...
'evalmethod','harmonic','differential',diffvalue)
data = mphinterp(model,<expr>,'coord',<coord>,'recover',recover)
where recover is either 'ppr', 'pprint', or 'off' (the default). Set the property to
ppr to perform recovery inside domains or set to pprint to apply recovery to all
domain boundaries. Because the accurate derivative processing takes time, the
property is disabled by default.
data = mphinterp(model,<expr>,'coord',<coord>,'unit',<unit>)
To not use complex-value functions with real inputs, use the property complexfun:
data = mphinterp(model,<expr>,'coord',<coord>,'complexfun','off')
Use the property matherr to return an error for undefined operations or expressions:
data = mphinterp(model,<expr>,'coord',<coord>,'matherr','on')
To evaluate the minimum of the COMSOL expressions e1,... use the command
mphmin:
[d1,...] = mphmin(model,{'e1',...},edim)
where edim is a string to define the element entity dimension: 'volume', 'surface',
or 'line'. edim can also be a positive integer (3, 2, or 1, respectively). The output
variables d1,... are an N-by-P array, where N is the number of inner solutions and P
the number of outer solutions.
<dsettag> is the tag of a solution dataset. The default value is the current solution
dataset of the model.
• selection, specify the domain selection for evaluation:
data = mphmin(model,<expr>,edim,'selection',<seltag>)
where <seltag> is the tag of a selection node to use for the data evaluation.
<seltag> can also be a positive integer array that corresponds to the domain index
list. The default selection is all domains where the expression is defined. If the
evaluation point does not belong to the specified domain selection the output value
is NaN.
• solnum, specify the inner solution number for data evaluation. Inner solutions are
generated for the following analysis types: time domain, frequency domain,
eigenvalue, or stationary with continuation parameters:
data = mphmin(model,<expr>,edim,'solnum',<solnum>)
where <time> is a double array. The default value corresponds to all the stored time
steps.
• In case of data series, such as from a parametric or a transient study, an operation
can be applied. To perform data series operation use the function mphmin as in the
command below:
data = mphmin(model,<expr>,edim,'dataseries',<dataoperation>)
where <dataoperation> can be one of the following value: 'none' (no operation
performed), 'average' (to compute average of the selected series), 'integral'
(to integrate over series), 'maximum' (to evaluate the maximum over series),
'minimum' (to evaluate the minimum), 'rms' (to compute the root mean square),
'stddev' (to compute the standard deviation), or 'variance' (to compute the
variance).
• To get the position of the minimum, you can set the property position to on as in
the command below:
data = mphmin(model,<expr>,edim,'position', on)
where data(:,1) contains the minimum value of the expression for each solution
step, and data(:,2:Sdim+1) returns the position of the minimum, with Sdim the
space dimension number.
OUTPUT FORMAT
The function mphmin also supports other output formats.
To extract the unit of the evaluated expression, define an extra output variable:
[data,unit] = mphmin(model,<expr>,edim)
where unit is a 1-by-N cell array, and N is the number of expressions to evaluate.
By default mphmin returns the results as a squeezed singleton. To get the full singleton
set the squeeze property to off:
data = mphmin(model,<expr>,edim,'squeeze','off')
Set the property matrix to off to return the data as a cell array instead of a double
array:
data = mphmin(model,<expr>,edim,'matrix','off')
To evaluate the maximum of the COMSOL Multiphysics expressions e1,... use the
command:
[d1,...] = mphmax(model,{'e1',...},edim)
where edim is a string to define the element entity dimension: 'volume', 'surface',
or 'line'. edim can also be a positive integer (3, 2, or 1, respectively). The output
variables d1,... are an N-by-P array where N is the number of inner solutions and P
the number of outer solutions.
The rest of this section has additional information for the function mphmax:
<dsettag> is the tag of a solution dataset. The default value is the current solution
dataset of the model.
• selection, specify the domain selection for evaluation:
data = mphmax(model,<expr>,edim,'selection',<seltag>)
where <seltag> is the tag of a selection node to use for the data evaluation.
<seltag> can also be a positive integer array that corresponds to the domain index
list. The default selection is all domains where the expression is defined. If the
evaluation point does not belong to the specified domain selection the output value
is NaN.
• solnum, specify the inner solution number for data evaluation. Inner solutions are
generated for the following analysis types: time domain, frequency domain,
eigenvalue, or stationary with continuation parameters:
where <time> is a double array. The default value corresponds to all the stored time
steps.
• In case of data series, such as from a parametric or a transient study, an operation
can be applied. To perform data series operation use the function mphmax as in the
command below:
data = mphmax(model,<expr>,edim,'dataseries', <dataoperation>)
where <dataoperation> can be one of the following value: 'none' (no operation
performed), 'average' (to compute average of the selected series), 'integral'
(to integrate over series), 'maximum' (to evaluate the maximum over series),
'minimum' (to evaluate the minimum), 'rms' (to compute the root mean square),
'stddev' (to compute the standard deviation), or 'variance' (to compute the
variance).
• To get the position of the maximum, you can set the property position to on as in
the command below:
data = mphmax(model,<expr>,edim,'position', on)
where data(:,1) contains the maximum value of the expression for each solution
step, and data(:,2:Sdim+1) returns the position of the maximum, with Sdim the
space dimension number.
OUTPUT FORMAT
The function mphmax also supports other output formats.
[data,unit] = mphmax(model,<expr>,edim)
where unit is a 1-by-N cell array and N is the number of expressions to evaluate.
By default mphmax returns the results as a squeezed singleton. To get the full singleton
set the squeeze property to off:
data = mphmax(model,<expr>,edim,'squeeze','off')
Set the property matrix to off to return the data as a cell array instead of a double
array:
data = mphmax(model,<expr>,edim,'matrix','off')
Evaluating an Integral
Evaluate an integral of expression with the function mphint2.
To evaluate the integral of the expression over the domain with the highest space
domain dimension call the function mphint2 as in this command:
[d1,...] = mphint2(model,{'e1',...},edim)
where e1,... are the expressions to integrate. The values d1,... are returned as a
1-by-P double array, with P the length of inner parameters. edim is the integration
dimension, which can be 'line', 'surface', 'volume', or an integer value that
specifies the space dimension (1, 2, or 3, respectively).
The rest of this section has additional information for the function mphint2:
<dsettag> is the tag of a solution dataset. The default value is the current solution
dataset of the model.
• selection, specify the integration domain:
where <seltag> is the tag of a selection node to use for the data evaluation.
<seltag> can also be a positive integer array that corresponds to the domain index
list. The default selection is all domains where the expression is defined. If the
evaluation point does not belong to the specified domain selection the output value
is NaN.
• solnum, specify the inner solution number for data evaluation. Inner solutions are
generated for the following analysis types: time domain, frequency domain,
eigenvalue, or stationary with continuation parameters:
data = mphint2(model,<expr>,edim,'solnum',<solnum>)
where <time> is a double array. The default value corresponds to all the stored time
steps.
• In case of data series, such as from a parametric or a transient study, an operation
can be applied. To perform data series operation use the function mphint2 as in the
command below:
data = mphint2(model,<expr>,edim,'dataseries',<dataoperation>)
where <dataoperation> can be one of the following value: 'none' (no operation
performed), 'average' (to compute average of the selected series), 'integral'
(to integrate over series), 'maximum' (to evaluate the maximum over series),
'minimum' (to evaluate the minimum), 'rms' (to compute the root mean square),
'stddev' (to compute the standard deviation), or 'variance' (to compute the
variance).
To extract the unit of the evaluated expression, define an extra output variable:
[data,unit] = mphint2(model,<expr>,edim)
with unit is a 1-by-N cell array where N is the number of expressions to evaluate.
By default mphint2 returns the results as a squeezed singleton. To get the full
singleton, set the squeeze property to off:
data = mphint2(model,<expr>,edim,'squeeze','off')
Set the property matrix to off to return the data as a cell array instead of a double
array:
data = mphint2(model,<expr>,edim,'matrix','off')
For datasets other than Solution, Particle, Cut*, Time Integral, Time
Average, Surface, and Line, the integration order does correspond to an
element refinement.
[d1,...] = mphmean(model,{'e1',...},edim)
where edim is a string to define the element entity dimension: 'volume', 'surface',
or 'line'. edim can also be a positive integer (3, 2, or 1 respectively). The output
variables d1,... are an NxP array where N is the number of inner solutions and P the
number of outer solutions.
The rest of this section has additional information for the function mphmean:
<dsettag> is the tag of a solution dataset. The default value is the current solution
dataset of the model.
• selection, specify the domain selection for evaluation:
data = mphmean(model,<expr>,edim,'selection',<seltag>)
where <seltag> is the tag of a selection node to use for the data evaluation.
<seltag> can also be a positive integer array that corresponds to the domain index
list. The default selection is all domains where the expression is defined. If the
evaluation point does not belong to the specified domain selection the output value
is NaN.
• solnum, specify the inner solution number for data evaluation. Inner solutions are
generated for the following analysis types: time domain, frequency domain,
eigenvalue, or stationary with continuation parameters:
where <time> is a double array. The default value corresponds to all the stored time
steps.
• In case of data series, such as from a parametric or a transient study, an operation
can be applied. To perform data series operation use the function mphmean as in the
command below:
data = mphmean(model,<expr>,edim,'dataseries',<dataoperation>)
where <dataoperation> can be one of the following value: 'none' (no operation
performed), 'average' (to compute average of the selected series), 'integral'
(to integrate over series), 'maximum' (to evaluate the maximum over series),
'minimum' (to evaluate the minimum), 'rms' (to compute the root mean square),
'stddev' (to compute the standard deviation), or 'variance' (to compute the
variance).
OUTPUT FORMAT
The function mphmean also supports other output formats.
To extract the unit of the evaluated expression, define an extra output variable:
[data,unit] = mphmean(model,<expr>,edim)
where unit is a 1-by-N cell array and N is the number of expressions to evaluate.
By default mphmean returns the results as a squeezed singleton. To get the full
singleton set the squeeze property to off:
Set the property matrix to off to return the data as a cell array instead of a double
array:
data = mphmean(model,<expr>,edim,'matrix','off')
pd = mpheval(model, <expr>)
where <expr> is a string cell array that lists the expression to evaluate. The expression
has to be defined in the COMSOL model object in order to be evaluated.
• expr contains the list of names of the expressions evaluated with mpheval.
• d1 contains the value of the expression evaluated. The columns in the data value
fields correspond to node point coordinates in columns in the field p. In case of
several expressions are evaluated in mpheval, additional field d2, d3,... are available.
• p contains the node point coordinates information. The number of rows in p is the
number of space dimensions.
• t contains the indices to columns in pd.p of a simplex mesh; each column in pd.t
represents a simplex.
The rest of this section has additional information for the function mpheval:
<dsettag> is the tag of a solution dataset. The default value is the current solution
dataset of the model. Selection datasets such as Cut Point, Cut Line, Edge, Surface,
and so forth are not supported.
• selection, specify the domain selection for evaluation:
pd = mpheval(model, <expr>, 'selection', <seltag>)
where <seltag> is the tag of a selection node to use for the data evaluation.
<seltag> can also be a positive integer array that corresponds to the domain index
list. The default selection is all domains where the expression is defined. If the
evaluation point does not belong to the specified domain selection, the output value
is NaN.
• edim, specify the element dimension for evaluation:
pd = mpheval(model, <expr>, 'edim', edim)
where <time> is a double array. The default value corresponds to all the stored time
steps.
• phase, specify the phase in degrees:
pd = mpheval(model, <expr>, 'phase', <phase>)
OUTPUT FORMAT
The function mpheval returns a structure in the MATLAB workspace. You can specify
other output data formats.
To only obtain the data evaluation as a double array, set the property dataonly to on.
Doing so speeds up the call to COMSOL because the coordinate and element
information is not retrieved.
Returns only the real part in the data evaluation with the property complexout:
where <refine> is a positive integer. The default value is 1 which set the simplex
mesh identical to the geometric mesh. Many model use second order elements for
which a refine value of 2 must be used to use all the data in the model.
• smooth, specify the smoothing method to enforce continuity on discontinuous data
evaluation:
pd = mpheval(model, <expr>, 'smooth', smooth)
where recover is either 'ppr', 'pprint', or 'off' (default). Set the property to
ppr to perform recovery inside domains or set to pprint to perform recovery inside
domains. Because the accurate derivative processing takes time, the property is
disabled by default.
Use the property matherr to return an error for undefined operations or expressions:
[d1,...] = mphevalpoint(model,{'e1',...})
where e1, … are the COMSOL expressions to evaluate. The output d1, … is an
N-by-P double array, where N is the number of evaluation points and P the length of
the inner solution.
The rest of this section has additional information for the function mphevalpoint:
where <seltag> is the tag of a selection node to use for the data evaluation.
<seltag> can also be a positive integer array that corresponds to the domain index
list. The default selection is all domains where the expression is defined. If the
evaluation point does not belong to the specified domain selection, the output value
is NaN.
• solnum — specify the inner solution number for data evaluation. Inner solutions are
generated for the following analysis types: time domain, frequency domain,
eigenvalue, or stationary with continuation parameters:
where <time> is a double array. The default value corresponds to all the stored time
steps.
data = mphevalpoint(model,<expr>,'dataseries',dataseries)
where dataseries is either 'mean', 'int', 'max', 'min', 'rms', 'std', or 'var'.
Depending on the property value, mphevalpoint performs the following operations
— mean, integral, maximum, minimum, root mean square, standard deviation, or
variance, respectively.
When performing a minimum or maximum operation on the data series, you can
specify to perform the operation using the real or the absolute value. Set the property
minmaxobj to 'real' or 'abs', respectively:
data = mphevalpoint(model,<expr>,'dataseries',dataseries,...
'minmaxobj', valuetype)
OUTPUT FORMAT
The function mphevalpoint supports other output formats.
To extract the unit of the evaluated expression, define an extra output variable:
[data,unit] = mphevalpoint(model,<expr>)
with unit is a 1-by-N cell array where N is the number of expressions to evaluate.
data = mphevalpoint(model,<expr>,'squeeze','off')
Set the property matrix to off to return the data as a cell array instead of a double
array:
data = mphevalpoint(model,<expr>,'matrix','off')
In this section you can replace the command mphparticle and mphray
as they support the same properties.
Evaluate expressions on particle and ray trajectories with either the function
mphparticle or mphray.
To evaluate the particle position and the particle velocity in a model with a unique
particle dataset, run mphparticle as in this command:
pd = mphparticle(model)
• p contains the coordinates of the particle position along the trajectories. The data
are stored in a NxMxL array where N is the number of time steps, M the number of
evaluation point along the particle trajectories, and L the evaluation space
dimension.
• v contains the value of the particle velocity along the trajectories. The data are
stored in a NxMxL array where N is the number of time steps, M the number of
evaluation points along the particle trajectories, and L the evaluation space
dimension.
• t contains the list of evaluation time.
pd = mphparticle(model,'expr','e1')
where 'e1' is the expression to evaluate along the particle trajectories. The output
structure pd contains the fields p, v, and t (described above) with the following ones:
Use a string cell array to evaluate several expressions at once. The result of the
evaluation is then stored in the field d1,... corresponding to each evaluated
expression.
<dsettag> is the tag of a particle solution dataset. The default value is the current
particle solution dataset of the model.
• To evaluate the expression data at a specific time use the property t:
pd = mphparticle(model,'expr',<expr>,'t',<time>)
where <time> is a double array. The default value corresponds to all the stored time
steps.
OUTPUT FORMAT
The function mphparticle also supports other output formats.
Set the property dataonly to on to return only the data related to the specified
expression:
pd = mphparticle(model,'expr',<expr>,'dataonly','on')
The output structure pd only contains the field unit, d#, expr, and t (described
above).
[d1,...] = mphglobal(model,{'e1',...})
where e1,... are the COMSOL Multiphysics global expressions to evaluate. The
output values d1,... are returned as a P-by-1 double array, with P the length of inner
parameters.
The rest of this section has additional information for the function mphglobal:
<dsettag> is the tag of a solution dataset. The default value is the current solution
dataset of the model.
• solnum — specify the inner solution number for data evaluation. Inner solutions are
generated for the following analysis types: time domain, frequency domain,
eigenvalue, or stationary with continuation parameters:
data = mphglobal(model,<expr>,'solnum',<solnum>)
where <time> is a double array. The default value corresponds to all the stored time
steps.
• phase — specify the phase in degrees:
data = mphglobal(model,<expr>,'phase',<phase>)
OUTPUT FORMAT
The function mphglobal also supports other output formats.
To extract the unit of the evaluated expression, define an extra output variable:
[data,unit] = mphglobal(model,<expr>)
with unit is a 1-by-N cell array, where N is the number of expressions to evaluate.
Returns only the real part in the data evaluation with the property complexout:
data = mphglobal(model,<expr>,'complexout','off')
data = mphglobal(model,<expr>,'unit',<unit>)
Use the property matherr to return an error for undefined operations or expressions:
data = mphglobal(model,<expr>,'matherr','on')
M = mphevalpointmatrix(model,<expr>,...)
where <seltag> is the tag of a selection node to use for the data evaluation.
<seltag> can also be a positive integer array that corresponds to the domain index
list. The default selection is all domains where the expression is defined. If the
evaluation point does not belong to the specified domain selection, the output value
is NaN.
• solnum — specify the inner solution number for data evaluation. Inner solutions are
generated for the following analysis types: time domain, frequency domain,
eigenvalue, or stationary with continuation parameters:
M = mphevalpointmatrix(model,<expr>,'solnum',<solnum>)
where <time> is a double array. The default value corresponds to all the stored time
steps.
• Perform a data series operation with the dataseries property:
M = mphevalpointmatrix(model,<expr>,'dataseries', dataseries)
To evaluate the global matrix associated to the expression <expr>, enter the
command:
M = mphevalglobalmatrix(model,<expr>)
The output data M is an NxN double array, where N is the number of port boundary
condition set in the model.
The rest of this section has additional information for the function
mphevalglobalmatrix:
• Set the solution dataset for evaluation with the property dataset:
M = mphevalglobalmatrix(model,<expr>,'dataset',<dsettag>)
where <time> is a double array. The default value corresponds to all the stored time
steps.
• Perform a data series operation with the dataseries property:
M = mphevalglobalmatrix(model,<expr>,'dataseries', dataseries)
M = mphevalglobalmatrix(model,<expr>,'trans',<trans>)
M = mphevalglobalmatrix(model,<expr>,'trans','sy','y0',<value>)
M = mphevalglobalmatrix(model,<expr>,'trans','ys','y0',<value>)
where <value> is the characteristic admittance in siemens (S). The default value is 1 S.
M = mphevalglobalmatrix(model,<expr>,'trans','sz','z0',<value>)
M = mphevalglobalmatrix(model,<expr>,'trans','zs','z0',<value>)
Use mphtable to extract the data stored in the table with the tag <tbltag>. Enter:
tabl = mphtable(model,<tbltag>)
The same syntax is used for evaluating and extracting data from Evaluation Groups:
data = mphtable(model,<evgrouptag>)
In this section:
By using the COMSOL built-in function to run models in loops, you can
ensure the model is saved automatically at each iteration. COMSOL also
offers tools to take advantage of clusters and distributed computer
architectures.
To run a model in a loop you do not need to run the entire M-file’s commands from
scratch. It is recommended to load a COMSOL model in MATLAB and run the loop
only over the desired operations. The COMSOL model is automatically updated when
running the study node.
The model run inside a MATLAB loop is not automatically saved. Make
sure to save the model at each iteration using the command mphsave to
save the model object.
If you are not interested in saving the entire model object at each
iteration, you can extract data and store it in the MATLAB workspace.
See Extracting Results to find the most suitable function to your model.
When running loops in MATLAB, the iteration progress is taken care of by MATLAB;
only the COMSOL commands are run in the COMSOL server.
You can generate as many nested loops as needed and combine the loop with other
MATLAB conditional statements such as if and switch or error handling statements
such as try/catch. You can also break the loop with break or jump to the next loop
iteration with continue.
See the MATLAB help for more information about the MATLAB
commands for, while, if, switch, try/catch, break, and continue.
GEOMETRY PARAMETERIZATION
This example shows how to perform a geometry parameterization using a MATLAB
for loop. The model consists of the busbar example available in the COMSOL
Multiphysics Application Library; see the Introduction to COMSOL Multiphysics.
In this example, the loop iterates over the busbar’s width, wbb. The solution for each
parameter value is displayed using the second plot group defined in the COMSOL
model. All the results are plotted in the same figure.
To run in batch an M-script that runs COMSOL Model is required. Start COMSOL
with MATLAB at a terminal window with this command:
where myscript is the M-script, saved as myscript.m, that contains the operation to
run at the MATLAB prompt.
COMSOL Multiphysics does not automatically save the model. You need
to make sure that the model is saved before the end of the execution of
the script. See Loading and Saving a Model.
You can also run the script in batch without the MATLAB desktop and the MATLAB
splash screen. Enter this command:
These steps describe how to run an M-script that runs a COMSOL model:
2 In the same terminal window, change the path to the COMSOL installation
directory:
cd COMSOL_path/mli
3 From that location, start MATLAB without display and run the mphstart function
in order to connect MATLAB to COMSOL:
matlab -nodesktop -nosplash -r "mphstart; myscript"
For more information about how to connect MATLAB to a COMSOL server, see
Starting COMSOL® with MATLAB® on Windows ®/ macOS / Linux®.
where <soltag> is the solver node tag used to assemble the system matrices and out
is a cell array containing the list of the matrices to evaluate. The output data str
returned by mphmatrix is a MATLAB® structure, and the fields correspond to the
assembled system matrices.
See the Advanced section and the Assemble section in the COMSOL
Multiphysics Reference Manual, for more information about matrix
evaluation.
The system matrices that can be extracted with mphmatrix are listed in the table:
EXPRESSION DESCRIPTION
K Stiffness matrix
L Load vector
M Constraint vector
N Constraint Jacobian
D Damping matrix
E Mass matrix
NF Constraint force Jacobian
NP Optimization constraint Jacobian (*)
You can save time during the evaluation by manually setting the linearization point.
Use the initmethod property as in this command:
str = mphmatrix(model,<soltag>,'out',out,'initmethod',method)
where method corresponds to the type of linearization point — the initial value
expression ('init') or a solution ('sol').
To set the solution to use for the linearization point, use the property initsol:
str = mphmatrix(model,<soltag>,'out',out,'initsol',<initsoltag>)
where <initsoltag> is the solver tag to use for linearization points. You can also set
the initsol property to 'zero', which corresponds to using a null solution vector as
a linearization point. The default is the current solver node where the assemble node
is associated.
str = mphmatrix(model,<soltag>,'out',out,'solnum',<solnum>)
where <solnum> is an integer value corresponding to the solution number. The default
value is the last solution number available with the current solver configuration.
str = mphmatrix(model,<soltag>,'out',out,'extractafter',<nodetag>)
where <nodetag> is the tag of a solution sequence node such as dependent variable or
solver nodes.
EIGENVALUE PROBLEMS
For eigenvalue problems, it is necessary to specify the eigenvalue name and the
eigenvalue linearization point. Use the property eigname to specify the name of the
eigenvalue and eigref to specify the value of eigenvalue linearization point:
str = mphmatrix(model,<soltag>,'out',out,'eigname',<eigname>)
str = mphmatrix(model,<soltag>,'out',out,'eigname',<eigname>,...
'eigref', <eigref>)
str = mphmatrix(model,<soltag>,'out',out,'rowscale','off')
str = mphmatrix(model,<soltag>,'out',out,'symmetry',sym)
Use the nullfun property to specify the method for computation of matrices needed
for constraint handling:
COMPLEX FUNCTION
If the system contains a complex function, use the property complexfun to specify
how to handle such a function. Set this property to on to use a complex-valued
function with real input:
str = mphmatrix(model,<soltag>,'out',out,'complexfun','on');
str = mphmatrix(model,<soltag>,'out',out,'matherr','off')
The model consists of a linear heat transfer problem solved on a unit square with a 1e5
W/m^2 surface heat source and temperature constraint. Only one quarter of the
geometry is represented in the model. For simplification reasons, the mesh is made of
four quad elements and the discretization is set with linear element.
model = ModelUtil.create('Model2');
comp1 = model.component.create('comp1', true);
geom1 = comp1.geom.create('geom1', 2);
geom1.feature.create('sq1', 'Square');
geom1.run;
mat1 = comp1.material.create('mat1');
def = mat1.materialModel('def');
def.set('thermalconductivity',4e2);
temp1 = ht.feature.create('temp1','TemperatureBoundary',1);
temp1.selection.set([1 2]);
mesh1 = comp1.mesh.create('mesh1');
dis1 = mesh1.feature.create('dis1','Distribution');
dis1.selection.set([1 2]);
dis1.set('numelem',2);
mesh1.feature.create('map1','Map');
std1 = model.study.create('std1');
std1.feature.create('stat','Stationary');
std1.run;
To extract the solution vector of the computed solution, run the function mphgetu as
in this command:
U = mphgetu(model);
Solve for the eliminated solution vector using the extracted eliminated system:
Uc = MA.Null*(MA.Kc\MA.Lc);
U0 = Uc+MA.ud;
U1 = U0.*MA.uscale;
Now compare the solution vectors U and U1 computed by COMSOL Multiphysics and
by the matrix operation, respectively.
mphinputmatrix(model,<str>,<soltag>,<soltypetag>)
This command sets the matrices of a linear system stored in the MATLAB® structure
<str> into the model. The linear system is associated to the solver sequence <soltag>
and is to be solved by the solver <soltypetag>.
mphinputmatrix only supports the solver types Stationary, Eigenvalue, and Time.
A valid structure <str> for a stationary solver includes the following fields:
FIELD DESCRIPTION
K Stiffness matrix
L Load vector
M Constraint vector
N Constraint Jacobian
EXPRESSION DESCRIPTION
K Stiffness matrix
L Load vector
M Constraint vector
N Constraint Jacobian
D Damping matrix
E Mass matrix
You can also include the Constraint force Jacobian vector, defined in the field NF.
Once the linear system is loaded in the model, you can directly run the solver.
The system matrices are not stored in the model when it is saved in the
MPH-file format or loaded to the COMSOL Desktop.
At the MATLAB prompt you load the model and add an additional line heat source to
the model directly in the system matrix by manually changing the load vector. Then
compute the solution of the modified system in COMSOL.
model = mphopen('model_tutorial_llmatlab.mph');
mphgeom(model)
Draw the line to be used as a line heat source in the model and plot the modified
geometry:
comp1 = model.component('comp1');
b1 = comp1.geom('geom1').feature.create('b1', 'BezierPolygon');
b1.set('p', {'1e-2' '5e-2'; '1e-2' '5e-2'; '1e-2' '1e-2'});
mphgeom(model,'geom1','edgelabels','on','facealpha',0.5);
mesh1 = comp1.mesh('mesh1');
mesh1.feature.create('ftet1', 'FreeTet');
mesh1.feature('size').set('hauto', 3);
mesh1.run;
mphmesh(model)
std1 = model.study.create('std1');
std1.feature.create('stat', 'Stationary');
sol1 = model.sol.create('sol1');
sol1.study('std1');
st1 = sol1.feature.create('st1', 'StudyStep');
st1.set('studystep', 'stat');
Shape = comp1.physics('ht').prop('ShapeProperty');
Shape.set('order_temperature', 1, 1);
The heat transfer interface automatically computes for internal DOFs in order to
evaluate fluxes accurately at the boundaries. Deactivate the internal DOFs with this
command:
Shape.set('boundaryFlux_temperature', false);
Now extract the matrices of the linear system associated to the solver sequence sol1:
To retrieve the degrees of freedom that belong to edge 21, you need to get the
geometric mesh data:
[stats,data] = mphmeshstats(model);
With the mesh data structure data, you can get the element indices that belong to
edge 2. Use the MATLAB find function to list all the indices:
elem_idx = find(data.elementity{1}==21)'
With the function mphxmeshinfo, retrieve the finite element mesh information
associated to solver sequence sol1:
info = mphxmeshinfo(model,'soltag','sol1','studysteptag','v1');
In the info structure you can get the DOFs indices that belong to the edge element
defined with the indices elem_idx:
dofs = info.elements.edg.dofs;
edgdofs_idx = [];
for i = 1:length(elem_idx)
edgdofs_idx = [edgdofs_idx; dofs(:,elem_idx(i))];
end
edgdofs_idx might contain duplicate DOFs indices. This is because the information
is from the element level; the duplicate indices correspond to the connecting node
between two adjacent elements.
unique_idx = unique(edgdofs_idx);
ME.L(unique_idx+1) = 50/length(unique_idx);
Now that the linear system has been modified, set it back in the model:
mphinputmatrix(model,ME,'sol1','s1')
Note: mphmatrix only assembles the matrix system for the DOFs solved in the
specified solver configuration. mphinputmatrix inserts the matrix system as defined
by the user. When inserting matrices in an existing model, the solution format may
not be compatible with the inserted system matrices.
In order to have a compatible xmesh solution format compatible with the size of the
inserted matrices, add a new equation-form physics interface, solving only for one
variable.
comp1.physics('ht').active(false);
model.sol('sol1').runAll;
This section includes information about The State-Space System, how to Extract
State-Space Matrices and Set Linearization Points and has an Extracting State-Space
Matrices.
dx
------- = Ax + Bu
dt
y = Cx + Du
M C x· = M C Ax + M C Bu
y = Cx + Du
If the components of the mass matrix MC are small, it is possible to approximate the
dynamic state-space model with a static model, where M C x· = 0 :
Let Null be the PDE constraint null-space matrix and ud a particular solution fulfilling
the constraints. The solution vector U for the PDE problem can then be written
U = Null x + ud + u 0
where u0 is the linearization point, which is the solution stored in the sequence once
the state-space export feature is run.
where <soltag> is the solver node tag used to assemble the system matrices listed in
the cell array out, and <input> and <output> are cell arrays containing the list of the
input and output variables, respectively.
The output data str returned by mphstate is a MATLAB structure and the fields
correspond to the assembled system matrices.
The input variables need to be defined as parameters in the COMSOL model. The
output variables are defined as domain point probes or global probes in the COMSOL
model.
The system matrices that can be extracted with mphstate are listed in the table:
EXPRESSION DESCRIPTION
MA McA matrix
MB McB matrix
A A matrix
B B matrix
C C matrix
D D matrix
Mc Mc matrix
Null Null matrix
ud ud vector
x0 x0 vector
To extract sparse matrices set the property sparse to on:
To keep the state-space feature node, set the property keepfeature to on:
You can manually select the linearization point to use. Use the initmethod property
to select a linearization point:
where method corresponds to the type of linearization point — the initial value
expression ('init') or a solution ('sol').
To set the solution to use for the linearization point, use the property initsol:
For continuation, time-dependent, or eigenvalue analyses you can set which solution
number to use as a linearization point. Use the solnum property:
where <solnum> is an integer value corresponding to the solution number. The default
value is the last solution number available with the current solver configuration.
If there is a solver associated to the solver configuration <soltag>, you need to extract
the matrices after the Dependent Variables node in the solver configuration, to proceed
use the property extractafter as in the command below:
State-space models can be defined using the ss and sparss functions. The sparss
function can be used if the state-space matrices are sparse. The system can be simulated
using the lsim function. In order to create a reduced-order system using MATLAB,
you can use the balred function. This function only accepts the use of full matrices.
Hence, the function ss is used for defining the state-space system in MATLAB. Note
that calling the function ss with argument matrices that are sparse results in a set of
warnings. These warnings can be ignored.
The code below show how to use the Control System Toolbox to solve a dynamic
system from the A, B, C, and D matrices obtained using mphstate:
where <input> is the input vector of the state space system, and <tspan> is the time
step list.
where <order> is the desired order reduction, and <tfinal> the simulation end time.
The problem studied here is a heat transfer model set with a heat source. In the
expected state-space system, the heat source is set as an input. The temperature at a
specified location is used as the output. This tutorial shows how to extract the
state-space matrices and solve the system using the MATLAB functions.
model = mphopen('model_tutorial_llmatlab');
This model is used as the base model for the documentation tutorial. The geometry,
mesh, and physics are set, but for this specific problem you need to edit the model to
use parameters for the initial and external temperatures because they will be used later
in the state-space matrices export:
Set the mesh size in order to keep the size of the matrices low:
comp1.mesh('mesh1').autoMeshSize(7);
std = model.study.create('std');
time = std.feature.create('time','Transient');
time.set('tlist','range(0,1,20)');
time.set('usertol',true);
Add a domain point probe plot, which will define the output of the state-space system:
Run the study and create a plot group to display the probe:
mphrun(model);
pg1 = model.result.create('pg1', 'PlotGroup1D');
glob1 = pg1.create('glob1', 'Global');
glob1.set('expr', 'comp1.ppb1');
Extract the state-space system matrices Mc, MA, MB, C, and D of the model, with power,
Temp, and Text as inputs and the probe evaluation comp1.ppb1 as the output:
M = mphstate(model,'sol1','out',{'Mc','MA','MB','C','D'},...
'input',{'power','Temp','Text'},...
'output','comp1.ppb1');
Notice that some of the input value are subtracted with the initial condition. This is
because these inputs are directly linked to the temperature degree of freedom using a
constraint condition.
Set the solver options for the mass and the Jacobian:
opt = odeset('mass',M.Mc,'jacobian',M.MA);
It is not required to define the Jacobian, but doing so speeds up the simulation.
The state-space formulation that uses the mass matrix is prepared to use sparse matrices
and can often be simulated much faster. In order to simulate systems that involve a
mass matrix on the left-hand side, you must switch to one of the simulation functions
that support a mass matrix. Such MATLAB functions are ode15s, ode23s, and
ode23t. ode15s and ode23t can solve problems with a singular mass matrix. Compute
the state-space system with the extracted matrices,
[t,x] = ode23s(func,0:1:20,zeros(size(M.MA,1),1),opt);
y = M.C*x';
y = y+T0;
Compare the solution computed with the system and the one computed with
COMSOL Multiphysics (see Figure 4-1):
Figure 4-1: Temperature distribution computed with the state-space system (red marker)
and COMSOL Multiphysics (blue line).
G = M.D-M.C*(inv(M.MA))*M.MB;
y_inf = full(G*input');
y_inf = y_inf + T0
For some types of control system design, the use of the matrices A, B, C, and D are
commonly used. Extract the state-space system matrices A, B, C, and D of the model
with power, Temp, and Text as inputs and the probe evaluation comp1.ppb1 as the
output:
M2 = mphstate(model,'sol1','out',{'A','B','C','D'},...
'input',{'power','Temp','Text'},...
'output','comp1.ppb1');
Compare the solution computed with the previous system (see Figure 4-2):
Figure 4-2: Temperature distribution computed with the state-space system 1 (red '+'
marker), state-space system without mass matrix (black '.' marker), and COMSOL
Multiphysics (blue line).
See the Modal Reduced-Order Model and The Modal Solver Algorithm in the
COMSOL Multiphysics Reference Manual for more information.
The problem studied here is a heat transfer model set with a heat source. In the
expected state-space system, the heat source is set as the input. The temperature at
specified location is used as the output. The tutorial shows how to extract the
state-space matrices and solve the system using the MATLAB functions.
The following example sets up a model using commands from MATLAB. You need
the Heat Transfer Module or MEMS Module to run the model because reduced-order
modeling requires eigenvalues of the physical problem. If you do not have access to
one of these modules, you can find the commands that sets up and solve the same
problem using the General Form PDE interface in the section Code for use with
MATLAB® - General Form PDE.
model = mphopen('model_tutorial_llmatlab');
This model is used as the base model for the documentation tutorial. The geometry,
mesh, and physics are set, but for this specific problem you need to edit the model to
use parameters for the initial and external temperatures as they will be used later in the
reduced-order model:
First switch the temperature constraint boundary condition to a heat flux condition
using a stiff spring expression:
ht.feature('temp1').active(false);
hf2 = ht.create('hf2', 'HeatFluxBoundary', 2);
hf2.selection().set(3);
hf2.set('HeatFluxType', 'ConvectiveHeatFlux');
hf2.set('h', '1e6');
hf2.set('Text', 'Temp');
std1 = model.study.create('std1');
time = std1.feature.create('time','Transient');
time.set('tlist','range(0,1,20)');
Add a domain point probe plot, which will define the output of the reduced-order
model:
Run the study and create a plot group to display the probe:
mphrun(model);
pg4 = model.result.create('pg4', 'PlotGroup1D');
glob1 = pg4.create('glob1', 'Global');
glob1.set('expr', 'comp1.ppb1');
std2 = model.study().create('std2');
eig = std2.create('eig', 'Eigenvalue');
eig.activate('ht', true);
eig.set('neigsactive', true);
eig.set('neigs', 60);
eig.set('shiftactive', true);
mphrun(model,'std2');
Before adding a reduced-order study to your model, you need to set the input. In this
example, add the power variable power, the bottom temperature Temp, and the
exterior temperature Text:
grmi1 =
model.common.create('grmi1','GlobalReducedModelInputs','');
grmi1.setIndex('name', 'power', 0);
grmi1.setIndex('name', 'Temp', 1);
grmi1.setIndex('name', 'Text', 2);
std3 = model.study.create('std3');
mr = std3.create('mr','ModelReduction');
mr.set('trainingStudy','std2');
mr.set('trainingStep','eig');
mr.set('unreducedModelStudy','std1');
mr.set('unreducedModelStep','time');
mr.setIndex('qoiname','Tout',0);
mr.setIndex('qoiexpr','comp1.ppb1',0);
mphrun(model,'std3');
model.reduced;
Now the reduced-order system can be simulated using the function ode23s.
Compare the solution computed with the system and the one computed with
COMSOL Multiphysics (see Figure 4-3):
plot(t,y2,'r+');
hold on;
mphplot(model,'pg1');
Figure 4-3: Temperature distribution computed with the reduced-order model state-space
system (red marker) and COMSOL Multiphysics (blue line).
G = -MR.C*(inv(MR.MA))*MR.MB;
y_inf = full(G*input')
The system can, for example, be simulated using the lsim function.
t = 0:1:20;
u = repmat(input,length(t),1);
figure(2)
[y,t] = lsim(sys, u,t);
grid on
info = mphsolinfo(model)
This section includes information about Specifying the Solution Object and the
Output Format.
If there are several solution datasets attached to the solver (for example, solution
datasets with different selections), specify the dataset to use to get the solution object
information with the dataset property:
FIELDS DESCRIPTION
To get the information about the number of solutions, set the property nu to on:
FIELDS DESCRIPTION
The parameters used in a study can be group in two distinct solution number types:
• The inner solution, containing the solution computed with parameters such as
eigenvalues, time steps, or continuation parameter combinations.
• The outer solution, containing the solution computed with parameters defined in
parametric sweep.
To get information about all solution object and solution dataset combinations in the
model enter the command:
info = mphsolutioninfo(model)
FIELDS DESCRIPTION
FIELDS DESCRIPTION
info = mphsolutioninfo(model,'parameters',{'e1','v1','tol1'})
The property parameters can also be set as a 1-by-N cell array, where N corresponds
to the number of parameters to specify.
This section includes information about Specifying the Solution Object and the
Output Format. It also includes the Retrieving Solution Information section.
If there are several solution datasets attached to the solver (for example, solution
datasets with different selections), specify the dataset to use to get the solution object
information with the dataset property:
OUTPUT FORMAT
To include the cellmap field in the info.sol# substructure, set the property cellmap
to on:
Improve the visibility of the map table by sorting the rows using either the column
number or the name in the map header:
model = mphopen('model_tutorial_llmatlab');
Now create a study combining a parametric sweep and a transient study step. The
parametric sweep is used to vary the parameters that set the heat source and the bottom
temperature. This is done with the following commands:
std = model.study.create('std');
param = std.feature.create('param', 'Parametric');
param.setIndex('pname', 'power', 0);
param.setIndex('plistarr', '30 60 90',0);
param.setIndex('pname', 'Temp', 1);
param.setIndex('plistarr', '300 320', 1);
time = std.feature.create('time', 'Transient');
time.set('tlist', 'range(0,1,25)');
Set the sweep type to generate all possible combinations of the parameters power and
tf and compute the study:
param.set('sweeptype', 'filled');
mphrun(model);
Once the solution is computed (it takes about 90 seconds), you can retrieve the
solution information in the model:
info = mphsolutioninfo(model)
The output info is a structure containing nine fields. By navigating in the info
structure you can retrieve how the solutions are stored in the model.
• info.sol1 contains the solution information related to the solver sequence sol1.
The associated dataset is dset1.
• info.sol2 contains the solution information for the parametric sequence. This
regroups the solution vectors computed for all outer parameters.
The other substructures contain the solution information for all possible outer solution
combinations.
map = info.sol2.map
To get the list of the solutions that contain the given parameters, enter:
solnum = info.solutions
U = mphgetu(model)
where U is an Nx1 double array, where N is the number of degrees of freedom of the
COMSOL Multiphysics model.
You can refer to the function mphxmeshinfo to receive the DOF name or
the node coordinates in the solution vector; see Retrieving Xmesh
Information.
For solver settings that compute for several inner solutions, select the inner solution to
use with the solnum property:
where <solnum> a positive integer vector that corresponds to the solution number to
use to extract the solution vector. For time-dependent and continuation analyses, the
default value for the solnum property is the last solution number. For an eigenvalue
analysis, it is the first solution number.
A model can contain different types of solution vectors — the solution of the problem,
the reaction forces vector, the adjoint solution vector, the functional sensitivity vector,
or the forward sensitivity. In mphgetu, you can specify the type of solution vector to
extract with the type property:
where type is one of the strings 'sol', 'reacf', 'adj', or 'sens' used to extract the
solution vector, reaction forces, functional sensitivity, or forward sensitivity,
respectively.
OUTPUT FORMAT
mphgetu returns the default the solution vector. Get the time derivative of the solution
vector Udot by adding a second output variable:
In case the property solnum is set as a 1-by-M array and the solver node only uses one
mesh to create the solution, the default output is an N-by-M array, where N is the
number of degrees of freedom of the model. Otherwise, the output U is a cell array that
In this section:
info = mphxmeshinfo(model)
where info is a MATLAB structure that contains the fields in the table:
FIELDS DESCRIPTION
FIELDS DESCRIPTION
FIELDS DESCRIPTION
coords Global coordinates for all nodes. The nth column contains the
coordinates of node point number n.
dofnames DOF names in this geometry.
dofs 0-based DOF numbers for all nodes in this geometry.
dofs()[k][n] is the DOF number for DOF name
dofNames()[k] at node point n. A value of -1 means that there
is no DOF with this name at the node. Note: If there is a slit, only
one of the DOFs is given for each node point.
FIELDS DESCRIPTION
The type substructure lists the information for each element. The possible mesh types
are vtx, edg, quad, tri, quad, tet, hex, prism, and pyr. The substructure type
contains the fields listed in the table:
FIELDS DESCRIPTION
nodes 0-based node point indices for all mesh elements of type type.
A value -1 means that there is no node point at this location.
dofs 0-based DOF numbers for all mesh elements of type type. A
value -1 means that there is no DOF at this location.
where <soltag> is the tag of the solver used to extract the xmesh information.
To retrieve the xmesh information for a specific study step node, specify it with the
property studysteptag:
In case several mesh cases have been used by a specific solver (for example, with an
automatic remeshing procedure), you can specify which mesh case to use to get the
discretization information:
where <meshcase> is the mesh case number or the tag of the mesh case.
In this section:
An alternative approach is to call the function mphnavigator that displays the model
object information in a MATLAB® GUI. To run the function at the MATLAB
prompt, enter the command:
mphnavigator
If you have installed the COMSOL apps in the MATLAB Apps ribbon, click the
COMSOL Model Navigator icon ( ).
When starting mphnavigator without any arguments it will use the model stored in
the model variable. If the COMSOL model objected is not stored in the MATLAB
variable model enter the command:
mphnavigator(<modelvar>)
where <modelvar> is the variable name in MATLAB that contains the model.
The appearance and behavior of the mphnavigator window depend on the version of
MATLAB. Using MATLAB version 2020a or newer will show an updated user
interface based on App Designer. These user interfaces can be resized and in many
cases support a faster workflow compared to previous versions.
In the Tools menu you will find additional functionality to inspect the model. Click Plot
to displays the geometry, the mesh, or a plot group in a MATLAB figure. This button
is only active when one of the corresponding node in the model tree is selected. Select
Search to open the Model Search window where you can search for expressions or tags
in the model object (see Finding Model Expressions). Select Solutions to open the
Solution Info window that displays the solution object available in the COMSOL
Multiphysics model object. Select Warnings and Errors to list the error or warning
nodes available in the model object (see Handling Errors and Warnings). Click Add
report (also accessible with the shortcut icon below the menu list) to generate a
report node in the model; you can choose between brief, intermediate, or complete
reports. Select Write report (also accessible using the icon ) to write a report, which
has been previously added to the model, in a document. This opens the Run Report
window where you can specify the report node to run and the report settings such as
the filename and the output format.
Using LiveLink for MATLAB, it is quite common to run a specific node in a loop. To
automatically get the corresponding code ready to be pasted in a code editor, click
Copy code: loop. This will generate the following commands:
tag1 = <feattag1>;
tag2 = <feattag2>;
tags = cell(model.geom(tag1).feature(tag2).feature.tags);
for i=1:length(tags)
obj = model.geom(tag1).feature(tag2).feature(tags{i});
end
where <feattag1> and <feattag2> are the feature tags to reach the selected
feature in the model.
In the Options menu you can set some preferences for the Model Object Navigator
window.
Select Automatic update to get the model tree and properties automatically updated as
the current model object is changed. A manual update can be achieved by clicking
in the toolbar.
The Help menu you can get the help of a selected node in the model tree (Help button
or ) as well as the corresponding API help (API Help button or ).
When a feature node is selected, its associated command is listed just beneath the
model tree. Click Copy to copy syntax to the clipboard and then paste it in your script.
The Model Tree list is different from the Model Builder tree available in the
COMSOL Desktop. This is because mphnavigator displays all feature
nodes as seen in the COMSOL API which does not use the same filter as
in the COMSOL Desktop to order the available feature nodes.
The Properties and the Value columns list the properties of the selected feature node
and the associated values respectively. The Allowed Value column list the allowed value
for the corresponding property.
Not all feature node returns a list of allowed value for the properties.
Click Copy set, or Copy get, to copy to the clipboard the command that sets the selected
property to its current value, respectively get the value of the currently selected
property. Click Copy Table to copy the entire properties table to the clipboard, then
paste into a text or spreadsheet editor. To copy a selected cell in the table, click Copy.
Using the Float window button you can open the Properties table in a separate window.
Select a method in the list to get its associated syntax at the button of the Methods
section. Use the Copy button to copy the syntax to the clipboard. Click Copy call to
copy the method syntax associated to the selected feature node, the syntax is ready to
use at the MATLAB prompt.
To get the list of the main feature nodes and the tags of the model object model, enter
the command:
mphmodel(model)
To list the subfeature of the node type model.feature enter the command:
mphmodel(model.feature)
mphmodel(model.feature(<ftag>))
str = mphmodel(model,'-struct')
str is a MATLAB structure and the fields consist of each feature node associated to
the root node.
info = mphcomponentinfo(model,<comptag>)
where <comptag> is the tag of the component. info is a MATLAB structure with the
following fields:
ds = mphdatasetinfo(model,<dsettag>)
In case you want to visualize the domain where dataset is defined you can use
mphdataset to plot the dataset in a MATLAB figure:
ds = mphdataset(model,<dsettag>)
mphsearch
If you have installed the COMSOL apps in the MATLAB Apps ribbon, click the
COMSOL Search icon ( ).
Using the COMSOL Model Search apps( ) only model object with
name model are supported.
If the COMSOL model object is has a different name than model, enter the command:
mphsearch(<modelname>)
The Search section has a search tool to filter the list. Enter any string in the text field
and select where to search the string — in the name, the expression, or the description
of the table entry. You can also select the type you want to list. The expression type can
be Equation, Field, Function, Geom, Mesh, Tag, VarNames, or Weak. You can select
Starts with to search for any expression that start with the string enter in the text field.
Click Go to display the result of the search. Click Clear to clear the search settings.
The evaluation does not require an existing solution dataset in the model, which means
that you can evaluate the expression even if there is no solution computed in the
model.
The output str is an array of structs with the same size as for the cell array of
expressions. For multiple parameters evaluation only a single output is permitted. The
struct contains the following fields: name, the parameter name; value, its value in the
unit specified in the field unit; def, the string for the definition of the parameter; and
descr, the string description of the parameter.
str = mphevaluate(model)
The output str is an array of structs with the same size as for the parameters table.
Get the full information of a model parameter expression with the command:
where value, unit, def, and descr are the parameter value, the parameter unit, the
parameter definition and the parameter description, respectively.
You can specify the unit of the expression to evaluate with the command:
To evaluate and return only the value of the expression, use the command:
To evaluate and return only the unit of the expression, use the command:
To evaluate and return the definition string of the expression, use the command:
The above command can be used to set a new parameter using an existing one.
str = mphgetproperties(model.<feature>)
where str is a MATLAB structure that lists all the properties and the value of the
feature node <feature>.
Some model nodes also provide a list of allowed value for their properties. To get such
a list, enter the command:
This command also returns the MATLAB structure allowed containing the list of the
allowed values for the properties of the feature node <feature>.
If you want to filter the properties in the output, use the property propnames as in the
following command:
str = mphgetproperties(model.<feature>,'propnames',{<prop>,...})
where <prop> is the property name to show only in the output structure.
Set the property returnstrings to off to get the property data not as strings as in
the following command:
str = mphgetproperties(model.<feature>,'returnstrings','off',...)
You can get the selection of the properties with the property showsel set to on as
described below:
str = mphgetproperties(model.<feature>,'showsel','on',...)
where <node> is the node to get the expressions from. Nodes that can be used are
model.param, model.variable(<tag>), and model.result.param.
expr is an Nx3 cell array, where N is the number of expressions for this node.
str = mphgetselection(model.selection(<seltag>))
where <seltag> is the tag a selection node defined in the model object. The output
®
str is a MATLAB structure with the following fields:
info = mmmodelinfo(model)
where model is link in MATLAB of the model loaded in the COMSOL Multiphysics
server from the database.
An alternative is to use the tag in the COMSOL Multiphysics server as in the command
below:
info = mmmodelinfo(<tag>)
See mphtags to get the list of the model loaded in the COMSOL
Multiphysics server.
In case the model is not loaded in the server you can use its location in the database:
info = mmmodelinfo(<location>)
For both errors and warnings a message is stored in a separate node located just below
the problematic model feature node.
In case of errors, a Java® Exception is thrown to MATLAB®, which also breaks the
execution of the script.
In a loop, for example, use the try and catch statements to continue to the next
iteration. For automatic geometry or mesh generation you can use it to set the model
properties with alternative values that circumvent the problem.
mphshowerrors(model)
str = mphshowerrors(model)
where str is an Nx2 cell array, where N is the number of error and warning nodes that
contain the model object. str{i,1}, which contains the location in the model of the
i:th error or warning message; str{i,2}, which contains the message of the ith error
or warning message; and str{i,3}, which contains cell arrays of the model tree nodes
that contain the error information. This last information makes it easier to extract error
information for automated processing of error and warning conditions.
• Allocating Memory
• Disabling Model Feature Update
• Disabling The Model History
Allocating Memory
COMSOL Multiphysics stores the data in Java®. If you are experiencing memory
problems during meshing, postprocessing operations, or when exchanging data
between the COMSOL server and MATLAB®, this can mean that the Java heap size
is set with too low a value.
Increasing the memory allocated for the Java process necessarily decreases
the memory available for the solver.
Either set The COMSOL Multiphysics Server Java Heap Size or Setting Manually the
Memory in MATLAB.
Edit the file with a text editor. The Java heap settings are defined as in the following
lines:
The values are given in Mb; modify these value to satisfy the model requirements.
-Xss4m
-Xmx768m
-XX:MaxPermSize=256m
The values are given in Mb; modify these value to satisfy the model requirements.
To modify the MATLAB Java Heap size the java.opts file has to be stored at the
MATLAB startup directory. This is the case when starting COMSOL with MATLAB.
For models that contain a large amount of physics feature nodes, this update operation
can take some time. For small models this is not an issue, but for larger models the
checks can be time consuming. It can then help to deactivate the model feature update.
To disable the feature model update, enter the command:
model.disableUpdates(true)
You have to enable the feature update again prior to computing the solution in order
to make sure that COMSOL works on an updated model definition. Enabling the
model.disableUpdates(false)
model.hist.disable
When the model history is disabled, you no longer see the commands used to set up
the model when saving it as an M-file.
model.hist.enable
The figure below illustrates a GUI made in MATLAB and linked to a COMSOL model
object.
The simplified GUI allows the user to compute a heat transfer problem on a given
geometry. The user can only change the radius and the position of the bottom circle
geometry. The heat source applied to the bottom circle is also defined by the user.
The button runs the building operation of the geometry and mesh. Another button
runs the computation of the solution.
This section introduces you to the MATLAB® function callback from the
COMSOL Desktop® and COMSOL Multiphysics® model object.
In this chapter:
259
Running External Function
When running the model containing a MATLAB function feature node, COMSOL
Multiphysics automatically starts a MATLAB process that evaluates the function and
returns the value to the COMSOL model.
In the COMSOL Desktop go to the Preferences and select Security, locate the General
section. To permanently enable an external MATLAB function, in the list Allow
external MATLAB® functions select Yes. To enable an external MATLAB function only
once, set the list Allow external MATLAB® functions to Ask. Using the latter option, you
will be asked to enable external functions when the function is run.
Applications that use external MATLAB function are not supported using
the COMSOL Client. It is only possible to use such applications using a
browser.
• Parameters
• Geometry settings
• Mesh settings
• Material properties
• Physics settings (domain conditions, boundary conditions, and so on)
Material properties and physics settings are evaluated while the model is solved
whereas the features can be used while the model is constructed.
• Functions, where you declare the name of the MATLAB functions and their
arguments.
• Derivatives, where you define the derivative of the MATLAB functions with respect
to all function arguments.
• Plot Parameters, where you can define the limit of the arguments value in order to
display the function in the COMSOL Desktop Graphics window.
Under Functions, you define the function name and the list of the function arguments.
In the table columns and rows, enter the Function name and the associated function
Arguments. The table supports multiple function definitions. You can define several
functions in the same table or add several MATLAB nodes, as you prefer.
• It can take any number of inputs as vectors and must return a single output vector.
• The input vectors can be of arbitrary size, but in a single call the inputs vectors will
all have the same length. The returned vector must have exactly the same length as
the input vectors.
For example, functions such as + and - (plus and minus) work well on vector inputs,
but matrix multiplication (*, mtimes) and matrix power (^, mpower) do not. Instead,
use the elementwise array operators .* and .^. See also Function Input/Output
Considerations.
input = (1:10)'
size(input)
out = besselj(input, input)
size(out)
Here there are no errors, and the size of the input and output is the same.
input = (1:10)'
size(input)
out = corrcoef(input, input)
size(out)
There are no errors when calling corrcoef using vector inputs, but the result does not
have the same size as the input and hence a call to corrcoef in this way will not work.
Click the Create Plot button ( ) to create a plot group under the Results node.
To plot the function you first need to define limits for the arguments. Expand the Plot
Parameters section and enter the desired value in the Lower limit and Upper limit
columns. In the Plot Parameters table the number of rows correspond to the number
of input arguments of the function. The first input argument corresponds to the top
row.
In case there are several functions declared in the Functions table, only the function that
has the same number of input arguments as the number of filled in rows in the Plot
Parameters table is plotted.
If several functions have the same number of input arguments, the first function in the
table (from top to bottom) is plotted. Use the Move up ( ) and Move down ( )
buttons to change the order of functions in the table.
besselh nu, x
To plot the function, you need to first define the lower and upper limits for both nu
and x. In the Plot Parameters table, set the first row (which corresponds to the first
argument nu) of the Lower limit column to 0 and the Upper limit column to 5 and set
the second row (corresponding of x) of the Lower limit column to 0 and the Upper limit
column to 10:
To proceed, you have these options to set the directory path in MATLAB:
Define the function name and function arguments with the command:
model.func(<ftag>).setIndex('funcs', <function_name>, 0, 0)
model.func(<ftag>).setIndex('funcs', <arglist>, 0, 1)
where <function_name> is a string set with the function name and <arglist> is a
string that defines the list of the input arguments.
When you write your own functions, remember that the input arguments
are vectors. The output must have the same size as the input. All
arguments and results must be real or complex-valued double-precision
vectors.
Consider the following example function where the coefficient c depends on the x
coordinate:
function c = func1(x)
if x > 0.6
c = x/1.6;
else
c = x^2+0.3;
end
This function looks good at first glance, but it does not work in COMSOL
Multiphysics because the input x is a vector:
• Element-by-element multiplication, division, and power must be used — that is, the
operators .*, ./, and .^. Replace expressions such as x/1.6 and x^2+0.3 with
x./1.6 and x.^2+0.3, respectively.
• The comparison x > 0.6 returns a matrix with ones (true) for the entries where the
expression holds true and zeros (false) where it is false. The function evaluates the
conditional statement if, and only if, all the entries are true (1).
function c = func2(x)
c = (x./1.6).*(x>0.6) + (x.^2+0.3).*(x<=0.6);
Updating Functions
If the function M-file is modified using a text editor, click Clear Functions to ensure that
the functions’ modifications are updated in the COMSOL Multiphysics model.
An alternative is to select the Clear functions automatically before solving check box.
Expand the Derivatives section to define the derivatives of the function with respect to
the function arguments. In the table, define the derivative for each function argument.
In the Function column enter the function name, in the Argument column enter the
argument. Finally, in the Function derivative column, enter the expression for the
corresponding derivative.
The section Example: Define the Hankel Function, define the function derivative by
entering the following settings in the table:
besselh nu (besselh(nu-1,x)-besselh(nu+1,x))/2
besselh x (besselh(0,x)-besselh(2,x))/2
Command Reference
The main reference for the syntax of the commands available with LiveLink™ for
MATLAB® is the COMSOL Multiphysics Programming Reference Manual. This
section documents additional interface functions that come with the product.
In this chapter:
• Summary of Commands
• Commands Grouped by Function
271
Summary of Commands
mmgetalltags mphmax
mmgetbranch mphmean
mmgetcommit mphmeasure
mmmodelinfo mphmesh
mmsave mphmeshstats
mmsearch mphmin
mphaddplotdata mphmodel
mphapplicationlibraries mphnavigator
mphbatchinfo mphopen
mphcd mphparticle
mphcomponentinfo mphplot
mphcolortable mphquad2tri
mphdataset mphray
mphdatasetinfo mphreadstl
mphdoc mphreduction
mpheval mphreport
mphevalglobalmatrix mphrun
mphevalpoint mphsave
mphevalpointmatrix mphsearch
mphevaluate mphselectball
mphgeom mphselectbox
mphgeominfo mphselectcoords
mphgetadj mphsetparam
mphgetcoords mphshowerrors
mphgetexpressions mphsolinfo
mphgetproperties mphsolutioninfo
mphgetselection mphstart
mphgetu mphstate
mphglobal mphsurf
mphimage2geom mphtable
mphinputmatrix mphtags
mphint2 mphthumbnail
mphinterp mphversion
mphinterpolationfile mphviewselection
mphlaunch mphwritestl
mphload mphxmeshinfo
mphmatrix
FUNCTION PURPOSE
INTERFACE FUNCTIONS
FUNCTION PURPOSE
GEOMETRY FUNCTIONS
FUNCTION PURPOSE
FUNCTION PURPOSE
UTILITY FUNCTIONS
FUNCTION PURPOSE
POSTPROCESSING FUNCTIONS
FUNCTION PURPOSE
FUNCTION PURPOSE
mmgetalltags
Get all assigned tags for a branch.
SYNTAX
tags = mmgetalltags(branch)
DESCRIPTION
The functions returns all assigned tags for a specific branch. Assigned tags are not the
same as tags used to identify nodes in the model tree. Assigned tags are keywords that
are assigned to items (for example, models) in Model Manager such as "Multiphysics"
or "Fluid_Dynamics".
EXAMPLE
branch = mmgetbranch('Main', 'Repository 1', 'MyDatabase')
tags = mmgetalltags(branch)
SEE ALSO
mmgetbranch, mmmodelinfo, mmsave
SYNTAX
branch = mmgetbranch(brname,repname,dbname)
DESCRIPTION
branch = mmgetbranch(brname,repname,dbname) returns the branch variable of
the branch with the name brname in the database dbname, repository repname.
SEE ALSO
mmmodelinfo, mmsave
mmgetcommit
Get commit message from an item.
SYNTAX
cm = mmgetcommit(branch, item)
[cm,msg] = mmgetcommit(branch, item)
[cm,msg] = mmgetcommit(item)
DESCRIPTION
[cm,msg] = mmgetcommit(branch, item) returns a commit object and the commit
message for a certain item that is stored in Model Manager. Often it is the commit
message that is of most interest. The msg variable is a struct with the following fields:
Note that the function mmmodelinfo also returns the commit message as one its
output.
EXAMPLE
Find models that include "busbar" in the title or description. Show the commit
message of one of the hits.
SEE ALSO
mmmodelinfo
mmmodelinfo
Get model information for models stored in Model Manager or as files.
SYNTAX
info = mmmodelinfo(location)
info = mmmodelinfo(model)
info = mmmodelinfo(modeltag)
DESCRIPTION
info = mmmodelinfo(location) returns model information for the model with the
URI string location in Model Manager.
The number of field in the struct info depends on how you define the model: with a
location, a model, or a tag.
SEE ALSO
mmgetbranch, mmsave, mphtags
mmsave
Save model in database using Model Manager.
SYNTAX
mmsave(model,'draft',commit,…)
mmsave(model,'version',commit,…)
DESCRIPTION
mmsave(model,'draft',commit,…) save model as a draft using Model Manager
with the commit message commit.
SEE ALSO
mmgetbranch, mmgetbranch
mmsearch
Full-text and keyword search in Model Manager.
SYNTAX
mmsearch(branch, searchterm)
mmsearch(branch, keyword, term, ...)
DESCRIPTION
mmsearch(branch, searchterm) performs a full-text search for searchterm in all
models and files stored in the branch. The limit for number of returned results is
10,000.
EXAMPLE
Search for filenames that either contains "free" or contains "chem":
Search for model nodes using an field expression for the node filter by searching for
nodes of type analytic and a savetype of "regular":
dat = mmsearch(branch, 'node', '@type:analytic', 'savetype', 'regular')
mphaddplotdata
SYNTAX
mphaddplotdata(model,'type',type,'data',data,…)
DESCRIPTION
mphaddplotdata(model,'type',type,'data',data,…) create a new plot using
the data data as a plottype type.
SEE ALSO
mphplot
mphapplicationlibraries
Graphical user interface (GUI) for viewing the Application Libraries.
SYNTAX
mphapplicationlibraries
DESCRIPTION
mphapplicationlibraries starts a GUI to visualize and access the example model
available in the COMSOL Application Libraries. The model MPH-file can be loaded
in MATLAB® and the model documentation PDF-file is accessible directly.
Models that are specific to LiveLink™ for MATLAB® also contains the script M-file.
Models that are specific to LiveLink™ for Simulink® also contains the simulation
SLX-file and opens directly in Simulink.
SYNTAX
info = mphbatchinfo(model)
DESCRIPTION
info = mphbatchinfo(model,…) returns information about the batch solution
structures.
Batch solution are stored in the model.batch part of the model tree and are used for
cluster, batch and parametric sweep functionality.
mphcd
Change directory to the directory of the model.
SYNTAX
mphcd(model)
DESCRIPTION
®
mphcd(model) changes the current directory in MATLAB to the directory where the
model was last saved.
SEE ALSO
mphload, mphsave
mphcolortable
Return color table data.
SYNTAX
map = mphcolortable(model,name)
mphcolortable(model,name)
list = mphcolortable(model)
DESCRIPTION
map = mphcolortable(name) returns the color table (of 256 colors) for name, where
name is a colortable used by the model.
EXAMPLE
Get the data of the Rainbow color table:
map = mphcolortable(model,'Rainbow');
mphcolortable(model,'Prism')
mphcomponentinfo
Get information about a component.
SYNTAX
info = mphcomponent(model, comptag)
DESCRIPTION
info = mphcomponent(model, comptag) returns information about the
component comptag.
If the model contains only one component, the tag comptag is optional.
FIELD DESCRIPTION
FIELD DESCRIPTION
SEE ALSO
mphnavigator
mphdataset
Plot a dataset.
SYNTAX
mphdataset(model,dsettag)
mphdataset(model,dsettag,…)
DESCRIPTION
mphdataset(model,dsettag) plots a dataset with the tag dsettag.
EXAMPLE
Open the model COMSOL_Multiphysics/Electromagnetics/thin_film_resistance
from the COMSOL Multiphysics Application library:
model = mphopen('thin_film_resistance');
mphdataset(model,'cln1')
mphdatasetinfo
Get information about datasets.
SYNTAX
ds = mphdatasetinfo(model,dsettag)
DESCRIPTION
ds = mphdatasetinfo(model,dsettag) returns information about the dataset with
the tag dsettag.
FIELD DESCRIPTION
* If a join dataset is encountered only the two parent datasets of the join dataset are
included.
SEE ALSO
mphdataset, mphnavigator
mphdoc
Open help window for a certain topic.
SYNTAX
mphdoc
mphdoc(node)
mphdoc(node,fname)
mphdoc api
mphdoc(node,fname) opens the help window for the entry on node with the feature
fname.
mphdoc api opens a window with the JavaDoc help for the COMSOL API.
EXAMPLE
Create a model object:
model = ModelUtil.create('Model');
mphdoc(model.mesh)
mphdoc(model.geom,'Rectangle')
SEE ALSO
mphapplicationlibraries
mpheval
Evaluate expressions on node points.
SYNTAX
pd = mpheval(model,{e1,…,en},…)
DESCRIPTION
pd = mpheval(model,{e1,…,en},…) returns the post data pd for the expressions
e1,…,en.
FIELD DESCRIPTION
FIELD DESCRIPTION
The property edim decides which elements to evaluate on. Evaluation takes place only
on elements with space dimension edim. If not specified, edim equal to the space
dimension of the geometry is used. The setting is specified as one of the following
strings 'point', 'edge', 'boundary' or 'domain'. In previous versions it was only
possible to specify edim as a number. For example, in a 3D model, if evaluation is done
on edges (1D elements), edim is 1. Similarly, for boundary evaluation (2D elements),
edim is 2, and for domain evaluation (3D elements), edim is 3 (default in 3D).
The property smooth controls if the post data is forced to be continuous on element
edges. When smooth is set to internal, only elements not on interior boundaries are
made continuous.
The property solnum is used to select the solution to plot when a parametric,
eigenvalue, or time-dependent solver has been used to solve the problem.
The property outersolnum is used to select the solution to plot when a parametric
sweep has been used in the study.
When the property phase is used, the solution vector is multiplied with
exp(i*phase) before evaluating the expression.
For time-dependent problems, the variable t can be used in the expressions ei. The
value of t is the interpolation time when the property t is provided, and the time for
the solution, when solnum is used. Similarly, lambda and the parameter are available
as eigenvalues for eigenvalue problems and as parameter values for parametric
problems, respectively.
EXAMPLE
Evaluate the temperature at node points:
model = mphopen('model_tutorial_llmatlab');
std = model.study.create('std');
std.feature.create('stat','Stationary');
std.run;
dat = mpheval(model,'T');
Evaluate both the total heat flux magnitude and the temperature:
data = mpheval(model,'T','dataonly','on');
data = mpheval(model,'T','selection',2);
data = mpheval(model,'T','selection',7,'edim','boundary');
data = mpheval(model,'T','refine',2);
data = mpheval(model,'T','pattern','gauss');
model = mphopen('model_tutorial_llmatlab');
std = model.study.create('std');
param = std.feature.create('param','Parametric');
time = std.feature.create('time','Transient');
time.set('tlist', 'range(0,1,25)');
param.setIndex('pname','power',0);
param.setIndex('plistarr','30 60 90',0);
std.run;
data = mpheval(model,'T','dataset','dset2');
data = mpheval(model,'T','dataset','dset2','solnum',5);
data = mpheval(model,'T','dataset','dset2','t',[10.5,15.2]);
Evaluate the temperature at every time step computed with power set to 90:
data = mpheval(model,'T','dataset','dset2','outersolnum',3);
SEE ALSO
mphevalglobalmatrix, mphevalpoint, mphevalpointmatrix, mphglobal,
mphint2, mphinterp, mphparticle, mphray
mphevalglobalmatrix
Evaluate global matrix variables such as a capacitance matrix or a S-parameters matrix
from a model.
SYNTAX
[M,unit] = mphevalglobalmatrix(model,expr,…)
DESCRIPTION
[M,unit] = mphevalglobalmatrix(model,expr,…) evaluates the global matrix of
the variable expr and returns the full matrix M. The unit is returned in unit.
EXAMPLE
Open the model RF_Module/Ferrimagnetic_Devices/lossy_circulator_3d from the
RF Module Application Library:
model = mphopen('lossy_circulator_3d.mph');
M = mphevalglobalmatrix(model,'emw.SdB','dataset','dset4');
SEE ALSO
mpheval, mphevalpoint, mphevalpointmatrix, mphglobal, mphint2, mphinterp,
mphparticle, mphray
SYNTAX
[v1,…,vn] = mphevalpoint(model,{e1,…,en},…)
[v1,…,vn,unit] = mphevalpoint(model,{e1,…,en},…)
DESCRIPTION
[v1,…,vn] = mphevalpoint(model,{e1,…,en},…) returns the results from
evaluating the expressions e1,…,en at the geometry vertices. The values v1,…,vn can
either be a cell array or a matrix depending on the options.
The property dataset controls which dataset is used for the evaluation. Datasets
contain or refer to the source of data for postprocessing purposes. Evaluation is
supported only on Solution datasets.
Set the property matrix to off to get the results in a cell array format.
In case the property dataseries is either min or max, you can specify how the values
are treated using the property minmaxobj. Use either the real data or the absolute data.
The property solnum is used to select the solution to plot when a parametric,
eigenvalue, or time-dependent solver has been used to solve the problem.
The expressions e1,…,en are evaluated for one or several solutions. Each solution
generates an additional row in the data fields of the post data output structure. The
properties solnum and t control which solutions are used for the evaluations. The
solnum property is available when the dataset has multiple solutions — for example in
the case of parametric, eigenfrequency, or time-dependent solutions. The t property is
available only for time-dependent problems. If solnum is provided, the solutions
indicated by the indices provided with the solnum property are used. If t is provided,
solutions are interpolated. If neither solnum nor t is provided, all solutions are
evaluated.
For time-dependent problems, the variable t can be used in the expressions ei. The
value of t is the interpolation time when the property t is provided, and the time for
the solution, when solnum is used. Similarly, lambda and the parameter are available
as eigenvalues for eigenvalue problems and as parameter values for parametric
problems, respectively.
EXAMPLE
Evaluate the temperature on all geometry points:
model = mphopen('model_tutorial_llmatlab');
std = model.study.create('std');
std.feature.create('stat','Stationary'); std.run;
T = mphevalpoint(model,'T');
T = mphevalpoint(model,'T','selection',5);
Evaluate the temperature and the magnitude of the total heat flux on point 5:
model = mphopen('model_tutorial_llmatlab');
std = model.study.create('std');
param = std.feature.create('param','Parametric');
time = std.feature.create('time','Transient');
time.set('tlist', 'range(0,1,25)');
param.setIndex('pname','power',0)
param.setIndex('plistarr','30 60 90',0);
std.run;
T = mphevalpoint(model,'T','selection',5,'dataset','dset2');
T = mphevalpoint(model,'T','selection',5,'dataset','dset2',…
'solnum',7);
T = mphevalpoint(model,'T','selection',5,'dataset','dset2',…
't',10.5);
T = mphevalpoint(model,'T','selection',5,'dataset','dset2',…
'outersolnum',3)
T_avg = mphevalpoint(model,'T','selection',5,…
'dataset','dset2','dataseries','average');
SEE ALSO
mpheval, mphevalglobalmatrix, mphevalpointmatrix, mphglobal, mphint2,
mphinterp, mphparticle, mphray
mphevalpointmatrix
Evaluate matrix quantities at points in the geometry.
SYNTAX
M = mphevalpointmatrix(model, expr, …)
DESCRIPTION
M = mphevalpointmatrix(model, expr, …) evaluates the point matrix of the
variable expr and returns the full matrix M.
SEE ALSO
mpheval, mphevalglobalmatrix, mphevalpoint, mphglobal, mphint2,
mphinterp, mphparticle, mphray
mphevaluate
Evaluate parameter expressions in models.
SYNTAX
mphevaluate(model,expr)
str = mphevaluate(model)
[value,unit,def,descr] = mphevaluate(model,expr,…)
[value,…] = mphevaluate(model,expr,unit)
[value,…] = mphevaluate(model,expr,asvalue)
DESCRIPTION
mphevaluate(model,expr) evaluates the expression expr defined in the Parameters
node.
The evaluation does not require an existing solution dataset in the model.
EXAMPLE
Evaluate the parameter power defined in the model:
model = mphopen('model_tutorial_llmatlab');
power = mphevaluate(model,'power');
[Temp,unit,def] = mphevaluate(model,'Temp','degC');
Temp = mphevaluate(model,'Temp+20[degC]','degF');
SEE ALSO
mpheval, mphglobal, mphinterp, mphparticle, mphray
mphgeom
Plot a geometry in a MATLAB® figure.
SYNTAX
mphgeom(model)
mphgeom(model,geomtag,…)
mphgeom(model,geomtag,'workplane',wptag,…)
h = mphgeom(model,geomtag,…)
The build property determines if mphgeom build the geometry prior to display it. If
the build property is set with a geometry object tag, the geometry is built up to that
object. mphgeom only displays built geometry objects.
Use the workplane property to show the 2D geometry that is define inside the
workplane with specified tag.
EXAMPLE
Plot the model geometry. Since most geometries do only have one geometry the
geometry tag does not have to be specified:
model = mphopen('model_tutorial_llmatlab.mph');
mphgeom(model)
mphgeom(model,'geom1','facelabels','on','facelabelscolor','r');
mphgeom(model,'geom1','entity','boundary', ...
'selection',[7:9,11]);
The geometry is plotted with view settings applied. This results in a geometry plot with
grid, axes labels, lights, hiding, and so on applied to the plot. To switch off the use of
view settings set view to 'none':
Plot the model geometry on an specific axis, for example axes in a user defined GUI
or a subplot:
figure(2);
ax = subplot(2,2,1);
mphgeom(model, 'geom1','parent', ax);
SEE ALSO
mphmesh, mphviewselection
SYNTAX
info = mphgeominfo(model, geomtag)
info = mphgeominfo(model)
[info,data] = mphgeominfo(model,geomtag,…)
DESCRIPTION
info = mphgeominfo(model,geomtag) returns the information of the geometry
defined with the tag geomtag. The tag geomtag can also be the tag of a geometry part.
If only a unique geometry node is defined in the model, the tag geomtag is optional.
FIELD DESCRIPTION
FIELD DESCRIPTION
FIELD DESCRIPTION
For an edge evaluation, the output structure data contains the following fields:
TABLE 6-16: FIELDS IN THE DATA STRUCTURE FOR FACE ENTITY.
FIELD DESCRIPTION
For a vertex evaluation, the output structure data contains the following fields:
TABLE 6-17: FIELDS IN THE DATA STRUCTURE FOR FACE ENTITY.
FIELD DESCRIPTION
p Vertex coordinates
domainnumber Domain index for isolated vertices
model = mphopen('model_tutorial_llmatlab.mph');
info = mphgeominfo(model)
SEE ALSO
mphcomponentinfo, mphmeshstats
mphgetadj
Return geometric entity indices that are adjacent to each other.
SYNTAX
n = mphgetadj(model,geomtag,returntype,adjtype,adjnumber)
[n,m] = mphgetadj(model,geomtag,returntype,adjtype,adjnumber)
DESCRIPTION
n = mphgetadj(model,geomtag,returntype,adjtype,adjnumber) returns the
indices of the adjacent geometry entities.
returntype is the type of the geometry entities whose index are returned.
The entity type can be one of 'point', 'edge', 'boundary', or 'domain' following
the entity space dimension defined below:
EXAMPLE
Return the indices of the boundaries adjacent to point 2:
model = mphopen('model_tutorial_llmatlab');
Return the indices of the adjacent edges to boundaries 1, 2, and 9 and the indices of
the edges that connect the boundaries the best. Then show the results in a figure:
SEE ALSO
mphgetcoords, mphselectbox, mphselectcoords
mphgetcoords
Return point coordinates of geometry entities.
SYNTAX
c = mphgetcoords(model,geomtag,entitytype,entitynumber)
DESCRIPTION
c = mphgetcoords(model,geomtag,entitytype,entitynumber) returns the
coordinates of the points that belong to the entity object with the type entitytype
and the index entitynumber.
EXAMPLE
Return the coordinates of points that belong to domain 2:
model = mphopen('model_tutorial_llmatlab');
SEE ALSO
mphgetadj, mphselectbox, mphselectcoords
mphgetexpressions
Get the model variables and model parameters expressions.
SYNTAX
expr = mphgetexpressions(modelnode)
DESCRIPTION
expr = mphgetexpressions(modelnode) returns expressions from the node
modelnode as a cell array. expr contains the list of the variable names, the variable
expressions and the variable descriptions.
EXAMPLE
Get the expressions defined in the parameters node
model = mphopen('model_tutorial_llmatlab');
expr = mphgetexpressions(model.param)
SEE ALSO
mphgetproperties, mphgetselection, mphmodel, mphnavigator, mphsearch
SYNTAX
str = mphgetproperties(modelnode)
[str,allowed] = mphgetproperties(modelnode)
DESCRIPTION
str = mphgetproperties(modelnode) returns the structure str containing the
properties that are defined for the node modelnode.
EXAMPLE
Build the mesh in the model model_tutorial_llmatlab.mph and get the mesh size
properties and their allowed values:
model = mphopen('model_tutorial_llmatlab');
mesh1 = model.component('comp1').mesh('mesh1');
mesh1.run;
msize = mesh1.feature('size');
[prop, allowed] = mphgetproperties(msize)
prop = mphgetproperties(msize,'propnames',{'hmin','hmax'})
prop = mphgetproperties(msize,'propnames',{'hmin','hmax'},…
'returnstrings','off')
SEE ALSO
mphgetexpressions, mphgetselection, mphmodel, mphnavigator, mphsearch
SYNTAX
info = mphgetselection(selnode)
DESCRIPTION
info = mphgetselection(selnode) returns the selection data of the selection node
selnode.
The output info is a MATLAB® structure defined with the following fields:
EXAMPLE
Add a selection node to the model busbar.mph and retrieve its information:
model = mphopen('model_tutorial_llmatlab.mph');
ball = model.selection.create('ball','Ball');
ball.set('entitydim',2);
ball.set('posz',11e-3');
ball.set('r',1e-5);
info = mphgetselection(model.selection('ball'))
SEE ALSO
mphgetexpressions, mphgetproperties, mphmodel, mphnavigator, mphsearch
mphgetu
Return a solution vector.
SYNTAX
U = mphgetu(model,…)
[U,Udot] = mphgetu(model,…)
DESCRIPTION
U = mphgetu(model) returns the solution vector U for the default solution dataset.
For a time-dependent and parametric analysis type, the last solution is returned by
default. For an eigenvalue analysis type the first solution number is returned by default.
The Solname property set the solution dataset to use associated with the defined solver
node.
Type is used to select the solution type. This is 'Sol' by default. The valid types are:
'Sol' (main solution), 'Reacf' (reaction force), 'Adj' (adjoint solution), 'Fsens'
(functional sensitivity) and 'Sens' (forward sensitivity).
If solnum is a vector and the result has been obtained with the same mesh then the
solution is stored in a matrix if the Matrix option is set to 'on'.
EXAMPLE
Extract the solution vector:
model = mphopen('model_tutorial_llmatlab');
std = model.study.create('std');
std.feature.create('stat','Stationary');
std.run;
U = mphgetu(model);
reacf = mphgetu(model,'type','reacf');
Extract the solution vectors for the first and the last time step:
model = mphopen('model_tutorial_llmatlab');
std = model.study.create('std');
param = std.feature.create('param','Parametric');
time = std.feature.create('time','Transient');
time.set('tlist', 'range(0,1,25)');
U = mphgetu(model,'solnum',[1,26]);
U = mphgetu(model,'soltag','sol3');
SEE ALSO
mphsolinfo
mphglobal
Evaluate global quantities.
SYNTAX
[d1,…,dn] = mphglobal(model,{e1,…,en},…)
[d1,…,dn,unit] = mphglobal(model,{e1,…,en},…)
DESCRIPTION
[d1,…,dn] = mphglobal(model,{e1,…,en},…) returns the results from evaluating
the global quantities specified in the string expression e1,…, en.
When the property phase is used, the solution vector is multiplied with
exp(i*phase) before evaluating the expression.
The expressions ei are evaluated for one or several solutions. Each solution generates
an additional row in the output data array di. The properties solnum and t control
which solutions are used for the evaluations. The solnum property is available when
the dataset has multiple solutions — for example, in the case of parametric,
eigenfrequency, or time-dependent solutions. The t property is available only for
time-dependent problems. If solnum is provided, the solutions indicated by the indices
provided with the solnum property are used. If t is provided, solutions are
interpolated. If neither solnum nor t is provided, all solutions are evaluated.
For time-dependent problems, the variable t can be used in the expressions ei. The
value of t is the interpolation time when the property t is provided, and the time for
the solution, when solnum is used. Similarly, lambda and the parameter are available
as eigenvalues for eigenvalue problems and as parameter values for parametric
problems, respectively.
In case of multiple expression if the unit property is defined with a string, the same
unit is used for both expressions. To use different units, set the property with a cell
array. In case of inconsistent unit definition, the default unit is used instead.
outersolnum is used to select the outer solution number when a parametric sweep has
been used in the study step node.
EXAMPLE
Evaluate the maximum temperature in the model
model = mphopen('model_tutorial_llmatlab');
maxT = mphglobal(model,'maxop(T)')
maxT = mphglobal(model,'maxop(T)','unit','degC')
Evaluate a global expression at every time step computed with power set to 30:
model = mphopen('model_tutorial_llmatlab');
model.cpl.create('maxop', 'Maximum', 'geom1').selection.all;
std = model.study.create('std');
param = std.feature.create('param','Parametric');
time = std.feature.create('time','Transient');
time.set('tlist', 'range(0,1,25)');
param.setIndex('pname','power',0);
param.setIndex('plistarr','30 60 90',0);
std.run;
maxT = mphglobal(model,'maxop(T)','dataset','dset2');
maxT = mphglobal(model,'maxop(T)',dataset','dset2',…
'solnum',[1,5]);
maxT = mphglobal(model,'maxop(T)',dataset','dset2',…
't',20.512);
Evaluate maxop(T) at every time step computed with power set to 90:
maxT = mphglobal(model,'maxop(T)','dataset','dset2',…
'outersolnum',3);
SEE ALSO
mpheval, mphevalglobalmatrix, mphevalpoint, mphevalpointmatrix, mphint2,
mphinterp
mphimage2geom
Convert image data to a geometry.
SYNTAX
model = mphimage2geom(imagedata,level,…)
The contour of the image is defined by the value level. imagedata must be a 2D
matrix.
The default curve types creates a geometry with the best suited geometrical primitives.
For interior curves this is Interpolation Curves, and for curves that are touching the
perimeter of the image, Polygons is used.
To add the geometry created with mphimage2geom, specify the geometry node with
property geom.
EXAMPLE
Create a set of point coordinates:
Create a geometry object following the contour made with point of value 50:
Create the same geometry object with a scale factor of 1e-3 and add it into an existing
3D model:
model = mphopen('model_tutorial_llmatlab');
wp1 = model.component('comp1').geom('geom1').feature.create('wp1',
'WorkPlane');
wp1.set('quickz', 1e-2);
mphimage2geom(p, 50,'scale',1e-3,wp1.geom);
mphgeom(model)
Create a geometry using MRI data. The geometry object is created following the
contour made with point of value 30 and disregard objects with an area (in pixel) lower
than 2:
mri = load('mri');
im = mri.D(:,:,1,1);
figure(1); image(im);
mphimage2geom(im, 30,'minarea',2);
mphinputmatrix
Add a matrix system for linear solvers.
SYNTAX
mphinputmatrix(model,str,soltag,soltypetag)
DESCRIPTION
mphinputmatrix(model,str,soltag,soltypetag) adds the system matrices and
vectors stored in the MATLAB® structure str to the model. The system matrices is
associated to the linear solver configuration defined with the tag soltag and solved
with the solver defined with the tag soltypetag.
soltypetag can only be one of the following solver type: Stationary, Eigenvalue,
Time.
K Stiffness matrix
L Load vector
M Constraint vector
N Constraint Jacobian
A valid structure for a time-dependent/ eigenvalue solver includes the following fields:
K Stiffness matrix
L Load vector
M Constraint vector
N Constraint Jacobian
D Damping matrix
E Mass matrix
There is also the possibility to include the constraint force Jacobian vector NF.
Once the matrix system is loaded in the model, the solver configuration is set ready to
run.
Note: The system matrices are not stored in the model when it is saved as an
MPH-file or loaded into the COMSOL Desktop.
EXAMPLE
Create a model with a square geometry
model = ModelUtil.create('Model');
comp = model.component.create('comp1', true);
geom = comp.geom.create('geom1', 2);
geom.create('sq1', 'Square');
geom.run;
Set up the study and the solver configuration for a stationary problem:
std = model.study.create('std1');
std.create('stat', 'Stationary');
sol = model.sol.create('sol1');
sol.study('std1');
sol.feature.create('st1', 'StudyStep').set('studystep', 'stat');
sol.feature.create('v1', 'Variables');
sol.feature.create('s1', 'Stationary');
str = mphmatrix(model,'sol1','out',{'K','L','M','N'},…
'initmethod','sol','initsol','zero');
str.K = str.K*0.5;
mphinputmatrix(model,str,'sol1','s1')
model.sol('sol1').runAll;
SEE ALSO
mphmatrix, mphxmeshinfo
mphint2
Perform integration of expressions.
SYNTAX
[v1,…,v2] = mphint2(model,{e1,…,en},edim,…)
[v1,…,v2,unit] = mphint2(model,{e1,…,en},edim,…)
DESCRIPTION
[v1,…,vn] = mphint2(model,{e1,…,en},…) evaluates the integrals of the string
expressions e1,…,en and returns the result in N matrices v1,…,vn with M rows and P
The property dataset controls which dataset is used for the evaluation. Datasets
contain or refer to the source of data for postprocessing purposes. Evaluation is
supported only on Solution datasets.
For time-dependent problems, the variable t can be used in the expressions ei. The
value of t is the interpolation time when the property t is provided, and the time for
the solution, when solnum is used. Similarly, lambda and the parameter are available
as eigenvalues for eigenvalue problems and as parameter values for parametric
problems, respectively.
The unit property defines the unit of the integral, if an inconsistent unit is entered,
the default unit is used. In case of multiple expression, if the unit property is defined
with a string, the same unit is used for both expressions. To use different units, set the
property with a cell array. In case of inconsistent unit definition, the default unit is used
instead.
outersolnum is used to select the outer solution number when a parametric sweep has
been used in the study step node.
EXAMPLE
Integrate the normal heat flux across all boundaries:
model = mphopen('model_tutorial_llmatlab');
std = model.study.create('std');
std.feature.create('stat','Stationary');
std.run;
mphinterp
Evaluate expressions in arbitrary points or datasets.
SYNTAX
[v1,…,vn] = mphinterp(model,{e1,…,en},'coord',coord,…)
[v1,…,vn] = mphinterp(model,{e1,…,en},'dataset',dsettag,…)
[v1,…,vn,unit] = mphinterp(model,{e1,…,en},…)
DESCRIPTION
[v1,…,vn] = mphinterp(model,{e1,…,en},'coord',coord,…) evaluates
expressions e1,…en at the coordinates specified in the double matrix coord.
Evaluation is supported only on Solution datasets.
If the number of rows in coord is less than the space dimension, then these coordinates
are parameter values on a geometry face or edge. In that case, the domain number for
that face or edge must be specified with the property selection.
The expressions that are evaluated can be expressions involving variables, in particular
physics interface variables.
The matrices v1,…,vn are of the size k-by-size(coord,2), where k is the number of
solutions for which the evaluation is carried out, see below. The value of expression ei
for solution number j in evaluation point coord(:,m) is vi(j,m).
The vector pe contains the indices m for the evaluation points code(:,m) that are
outside the mesh, or, if a domain is specified, are outside that domain.
The property data controls which dataset is used for the evaluation. Datasets contain
or refer to the source of data for postprocessing purposes. Evaluation is supported only
on Solution datasets. The active solution dataset is used by default.
The property edim decides which elements to evaluate on. Evaluation takes place only
on elements with space dimension edim. If not specified, edim equal to the space
dimension of the geometry is used. The setting is specified as one of the following
strings 'point', 'edge', 'boundary', or 'domain'. In previous versions it was only
possible to specify edim as a number. For example, in a 3D model, if evaluation is done
on edges (1D elements), edim is 1. Similarly, for boundary evaluation (2D elements),
edim is 2, and for domain evaluation (3D elements), edim is 3 (default in 3D).
When the property phase is used, the solution vector is multiplied with
exp(i*phase) before evaluating the expression.
The expressions e1,…,en are evaluated for one or several solutions. Each solution
generates an additional row in the data fields of the post data output structure. The
properties solnum and t control which solutions are used for the evaluations. The
solnum property is available when the dataset has multiple solutions — for example, in
the case of parametric, eigenfrequency, or time-dependent solutions. The t property is
available only for time-dependent problems. If solnum is provided, the solutions
indicated by the indices provided with the solnum property are used. If t is provided,
solutions are interpolated. If neither solnum nor t is provided, all solutions are
evaluated.
For time-dependent problems, the variable t can be used in the expressions ei. The
value of t is the interpolation time when the property t is provided, and the time for
the solution, when solnum is used. Similarly, lambda and the parameter are available
as eigenvalues for eigenvalue problems and as parameter values for parametric
problems, respectively.
In case of multiple expression, if the unit property is defined with a string, the same
unit is used for both expressions. To use different units, set the property with a cell
array. In case of inconsistent unit definition, the default unit is used instead.
The property solnum is used to select the solution number when a parametric,
eigenvalue, or time-dependent solver has been used.
The property outersolnum is used to select the outer solution number when a
parametric sweep has been used in the study step node.
EXAMPLE
Evaluate the temperature at given coordinates:
model = mphopen('model_tutorial_llmatlab');
std = model.study.create('std');
[T,tfluxMag] = mphinterp(model,{'T','ht.tfluxMag'},…
'coord',coord);
Evaluate the temperature and evaluation point global coordinates on boundary 7 using
local coordinates:
Modify the extrapolation distance for point coordinates outside of the geometry:
coord = [5e-2;5e-2;1.1e-2];
T = mphinterp(model,'T','coord',coord)
T = mphinterp(model,'T','coord',coord,'ext',0.5);
Extract data using a cut line dataset. First create the cut line dataset, then evaluate the
temperature field along the line:
model = mphopen('model_tutorial_llmatlab');
std = model.study.create('std');
param = std.feature.create('param','Parametric');
time = std.feature.create('time','Transient');
Evaluate the temperature at every time step computed with power set to 30:
T = mphinterp(model,'T','coord',coord,'dataset','dset2',…
'solnum',5);
T = mphinterp(model,'T','coord',coord,'dataset','dset2',…
't',10.5);
Evaluate the temperature at every time step computed with power set to 90:
T = mphinterp(model,'T','coord',coord,'dataset','dset2',…
'outersolnum',3)
SEE ALSO
mpheval, mphevalglobalmatrix, mphevalpoint, mphevalpointmatrix, mphint2,
mphint2, mphparticle, mphray
mphinterpolationfile
Save data in files readable by the Interpolation feature.
SYNTAX
mphinterpolationfile(filename,type,data)
mphinterpolationfile(filename,type,data,xdata)
mphinterpolationfile(filename,type,data,xdata,ydata)
DESCRIPTION
mphinterpolationfile(filename,type,data) saves the N-by-M matrix data
into the text file filename with the format type. The interpolation coordinates are
vectors with values from 1 to N and 1 to M.
EXAMPLE
Create random 10-by-10 interpolation data to file using grid format:
data = cumsum(0.1*randn(size(10)));
mphinterpolationfile('datagrid.txt','grid',data);
t = 0:0.05:2*pi;
z = sin(cos(t)*4)+sin(51*t)*0.05;
mphinterpolationfile('dataspread.txt','spreadsheet',z,t);
SEE ALSO
mphquad2tri, mphreadstl, mphsurf, mphwritestl
mphlaunch
Launch COMSOL Desktop, connect it to the running server, and import an
application.
SYNTAX
mphlaunch
mphlaunch(model)
mphlaunch ModelTag
mphlaunch(..., timeout)
DESCRIPTION
mphlaunch launches a COMSOL Multiphysics Client and connect it to the same
server as MATLAB® is connected to. Then it imports the model on the server into the
COMSOL Multiphysics Client.
mphlaunch(model) does the same as above, but uses the model argument to select
which model is imported.
mphlaunch(..., tms) uses the timeout tms (in milliseconds) to force MATLAB to
wait until the COMSOL server is free again. The default timeout value is 500. A
negative value results in no timeout.
EXAMPLE
Load the file model_tutorial_llmatlab.mph:
model = mphopen('model_tutorial_llmatlab');
Launch a COMSOL Multiphysics Client, connect it with the running server, import
the model defined as model:, and set a timeout of 1 s:
mphlaunch(model,1000);
mphload
Load a COMSOL Multiphysics model MPH-file.
SYNTAX
model = mphload(filename)
model = mphload(filename, mtag)
model = mphload(filename, mtag, '-history')
model = mphload(filename, mtag, pwd)
model = mphload(mtag)
model = mphload(location,...)
[model, filename] = mphload(filename, ...)
DESCRIPTION
model = mphload(filename) loads a COMSOL model object saved with the name
filename and assigns the default tag Model in the COMSOL server. If a model with
tag Model already exists and is also open in a COMSOL Multiphysics client, the loaded
model an index number is appended to the tag, for instance Model1. The model object
is accessible at the MATLAB prompt using the variable model.
model = mphload(mtag) link the model already loaded on the COMSOL server with
the tag mtag. The model object is accessible at the MATLAB prompt using the variable
model.
The model tag mtag and the password pwd are defined as string.
If the model tag is the same as a model that is currently in the COMSOL server the
loaded model overwrites the existing one.
Note that MATLAB® searches for the model on the MATLAB path if an absolute path
is not supplied.
mphload turns off the model history recording by default, unless the property
'-history' is used.
mphload does not look for lock file when opening a model in the COMSOL server.
EXAMPLE
Load the file model_tutorial_llmatlab.mph:
model = mphload('model_tutorial_llmatlab');
Load the file model_tutorial_llmatlab.mph and set the model name in the
COMSOL server to Model2:
model = mphload('model_tutorial_llmatlab','Model2');
SEE ALSO
mphopen, mphsave
SYNTAX
str = mphmatrix(model,soltag,'Out',…)
DESCRIPTION
®
str = mphmatrix(model,soltag,'Out',{'A'},…) returns a MATLAB structure
str containing the matrix A assembled using the solver node soltag and accessible as
str.A, A being taken from the Out property list.
The matrices are assembled using the current solution available as linearization point
unless the initmethod property is provided. In case of the presence of a solver step
node you need to either disable the solver step node in the model or set the property
extractafter with the tag of the Dependent Variables node.
In case the matrices are assembled after a solver step node (which is the case by
default), the load vector corresponds then to the residual of the problem.
The function mphmatrix does not solve the problem as the assembly is performed
before the solver node in the solution sequence. You can specify the solution feature
node after which to assemble the system matrices with the property extractafter.
This is useful if you need to compute the solution before extracting the matrices or if
you have a solution sequence using different solver sequences and you want to extract
the matrices for a specific one.
Use the property symmetric to assemble the model matrix system as symmetric/
Hermitian, or you can use the automatic feature to find out (see Advanced in the
COMSOL Multiphysics Reference Manual).
EXAMPLE
Evaluate the system matrices of a stationary problem
model = mphopen('model_tutorial_llmatlab');
model.mesh('mesh1').autoMeshSize(8);
std = model.study.create('std1');
std.feature.create('stat', 'Stationary');
std.run;
Get the stationary matrix system, use the initial solution as linearization point:
str = mphmatrix(model,'sol1','out',{'K','L','M','N'},…
'initmethod','init');
Display the sparsity of the stiffness matrix and the constraint Jacobian and compute the
total load applied in the matrix system:
subplot(2,1,1); spy(str.K);subplot(2,1,2);spy(str.N)
Q = sum(str.L)
str = mphmatrix(model,'sol1','out',{'Kc'},'initmethod','init');
Compare the sparsity between the eliminated and noneliminated stiffness matrix:
Evaluate the eliminated load vector using the current solution as linearization point:
str = mphmatrix(model,'sol1','out',{'Lc'},'initmethod','sol');
model = mphopen('model_tutorial_llmatlab');
model.mesh('mesh1').autoMeshSize(8);
std = model.study.create('std1');
time = std.feature.create('time', 'Transient');
time.set('tlist', 'range(0,1,25)');
model.param.set('timestep', '1[s]');
std.run;
str = mphmatrix(model,'sol1','out',{'E','D','K','L','M','N'});
str = mphmatrix(model,'sol1','out',{'Ec','Dc','Kc','Lc','M','N'});
Assemble the Jacobian using solution number 15 as linearization point. First run the
model to get available linearization point list:
std.run;
str = mphmatrix(model,'sol1','out',{'K'},…
'initmethod','sol','initsol','sol1','solnum',15);
str = mphmatrix(model,'sol1','out',{'K'},…
'initmethod','sol','initsol','zero');
SEE ALSO
mphstate, mphxmeshinfo, mphinputmatrix
mphmax
Perform a maximum of expressions.
DESCRIPTION
[v1,…,vn] = mphmax(model,{e1,…,en},edim,…) evaluates the maximum of the
string expressions e1,…,en and returns the result in N matrices v1,…,vn with M rows
and P columns. M is the number of inner solution and P the number of outer solution
used for the evaluation. edim defines the element dimension: line, surface, volume,
or as an integer value.
The maximum expressions e1,…,en is evaluated for one or several solutions. Each
solution generates an additional column in the returned matrix. The properties solnum
and t control which solutions are used for the evaluation. The solnum property is
available when the dataset has multiple solutions — for example, in the case of
parametric, eigenfrequency, or time-dependent solutions. The t property is available
only for time-dependent problems. If solnum is provided, the solutions indicated by
the indices provided with the solnum property are used. If t is provided, solutions are
interpolated. If neither solnum nor t is provided, all solutions are evaluated.
The property solnum is used to select the solution number when a parametric,
eigenvalue, or time-dependent solver has been used.
The property outersolnum is used to select the outer solution number when a
parametric sweep has been used in the study step node.
If the matrix property is set to off the output is cell arrays of length P containing cell
arrays of length M.
EXAMPLE
Evaluate the maximum temperature in the model domain:
model = mphopen('model_tutorial_llmatlab');
std = model.study.create('std');
std.feature.create('stat','Stationary');
std.run;
maxT = mphmax(model,'T','volume');
maxT = mphmax(model,'T','surface','selection',9);
model = mphopen('model_tutorial_llmatlab');
std = model.study.create('std');
param = std.feature.create('param','Parametric');
time = std.feature.create('time','Transient');
time.set('tlist', 'range(0,1,25)');
param.setIndex('pname','power',0);
param.setIndex('plistarr','30 60 90',0);
std.run;
maxT = mphmax(model,'T','volume','dataset','dset2');
maxT = mphmax(model,'T','volume','dataset','dset2',…
'solnum',5);
Evaluate the maximum of the temperature at 10.5 sec and 15.2 sec:
maxT = mphmax(model,'T','volume','dataset','dset2',…
't',[10.5,15.2]);
Evaluate the maximum of the temperature at every time step computed with power set
to 90:
maxT = mphmax(model,'T','volume','dataset','dset2',….
'outersolnum',3);
SEE ALSO
mphmean, mphmin
mphmean
Perform a mean of expressions.
SYNTAX
[v1,…,vn] = mphmean(model,{e1,…,en},edim,…)
[v1,…,vn,unit] = mphmean(model,{e1,…,en},edim,…)
DESCRIPTION
[v1,…,vn] = mphmean(model,{e1,…,en},edim,…) evaluates the means of the
string expressions e1,…,en and returns the result in N matrices v1,…,vn with M rows
and P columns. M is the number of inner solution and P the number of outer solution
used for the evaluation. edim defines the element dimension: line, surface, volume,
or as an integer value.
The property dataset controls which dataset is used for the evaluation. Datasets
contain or refer to the source of data for postprocessing purposes. Evaluation is
supported only on Solution datasets.
The mean of expressions e1,…,en is evaluated for one or several solutions. Each
solution generates an additional column in the returned matrix. The properties solnum
and t control which solutions are used for the evaluation. The solnum property is
available when the dataset has multiple solutions — for example, in the case of
parametric, eigenfrequency, or time-dependent solutions. The t property is available
only for time-dependent problems. If solnum is provided, the solutions indicated by
the indices provided with the solnum property are used. If t is provided, solutions are
interpolated. If neither solnum nor t is provided, all solutions are evaluated.
The property outersolnum is used to select the outer solution number when a
parametric sweep has been used in the study step node.
If the matrix property is set to off the output is cell arrays of length P containing cell
arrays of length M.
EXAMPLE
Evaluate the mean temperature in the model domain:
model = mphopen('model_tutorial_llmatlab');
std = model.study.create('std');
std.feature.create('stat','Stationary');
std.run;
maxT = mphmean(model,'T','volume');
maxT = mphmean(model,'T','surface','selection',9);
model = mphopen('model_tutorial_llmatlab');
std = model.study.create('std');
param = std.feature.create('param','Parametric');
time = std.feature.create('time','Transient');
time.set('tlist', 'range(0,1,25)');
param.setIndex('pname','power',0);
param.setIndex('plistarr','30 60 90',0);
std.run;
Evaluate the mean of the temperature at every time step computed with power set to
30:
maxT = mphmean(model,'T','volume','dataset','dset2');
maxT = mphmean(model,'T','volume','dataset','dset2',…
'solnum',5);
Evaluate the mean of the temperature at 10.5 sec and 15.2 sec:
maxT = mphmean(model,'T','volume','dataset','dset2',…
't',[10.5,15.2]);
Evaluate the mean of the temperature at every time step computed with power set to
90:
SEE ALSO
mphmax, mphmin
mphmeasure
Measure entities in geometry
SYNTAX
[measure, misc] = mphmeasure(model,geomtag,entity,…)
DESCRIPTION
[measure, misc] = mphmeasure(model,geomtag,entity,…) measure the entity
with the type entity in the geometry defined with the tag geomtag. entity can be
one of 'point', 'edge', 'boundary', or 'domain'.
EXAMPLE
Get the volume of all domains in the geometry:
model = mphopen('busbar');
vm = mphmeasure(model,'geom1','domain')
Get the volume and the surface area of all domains in the geometry:
[~, a] = mphgetadj(model,'geom1','edge','point',[1,29,41,42])
mphviewselection(model,'geom1',[1,29,41,42],'point')
hold on
mphviewselection(model,'geom1',a,'edge','edgecolorselected','b')
m = mphmeasure(model,'geom1','edge','selection',a)
mphmesh
Plot a mesh in a MATLAB® figure window.
SYNTAX
mphmesh(model)
mphmesh(model,meshtag,…)
pd=mphmesh(model,meshtag,…)
DESCRIPTION
mphmesh(model) plots the mesh in a MATLAB figure.
EXAMPLE
Plot the mesh
model = mphopen('model_tutorial_llmatlab');
mphrun(model, 'mesh')
mphmesh(model)
Create a second mesh with an “extra fine” default mesh settings and plot it:
mesh = model.mesh.create('mesh2','geom1');
mesh.autoMeshSize(2);
mphrun(model, 'mesh2')
mphmesh(model,'mesh2','meshcolor','r');
The mesh is plotted with view settings applied. This results in a mesh with grid, axes
labels, lights, hiding, and so on applied to the plot. To switch off the use of view
settings set view to 'none':
Plot data can be returned from mphmesh. This can be used to create the plot later or
to extract information used to create the plot for further analysis
pd = mphmesh(model, 'mesh1');
mphplot(pd)
SEE ALSO
mphgeom, mphmeshstats, mphplot
mphmeshstats
Return mesh statistics and mesh data information.
SYNTAX
stats = mphmeshstats(model)
stats = mphmeshstats(model, meshtag, …)
[stats,data] = mphmeshstats(model, meshtag, …)
FIELD DESCRIPTION
FIELD DESCRIPTION
FIELD DESCRIPTION
EXAMPLE
Get the mesh statistics:
model = mphopen('model_tutorial_llmatlab');
model.component('comp1').mesh.run;
bar(linspace(0,1,20),stats.qualitydistr)
[stats,data] = mphmeshstats(model);
numedgeelem = stats.numelem(strcmp(stats.types,'edg'))
SEE ALSO
mphmesh
mphmin
Perform a minimum of expressions.
SYNTAX
[v1,…,vn] = mphmin(model,{e1,…,en},edim,…)
[v1,…,vn,unit] = mphmin(model,{e1,…,en},edim,…)
DESCRIPTION
[v1,…,vn] = mphmin(model,{e1,…,en},edim,…) evaluates the minimum of the
string expressions e1,…,en and returns the result in N matrices v1,…,vn with M rows
and P columns. M is the number of inner solution and P the number of outer solution
used for the evaluation. edim defines the element dimension: line, surface, volume,
or as an integer value.
The property dataset controls which dataset is used for the evaluation. Datasets
contain or refer to the source of data for postprocessing purposes. Evaluation is
supported only on Solution datasets.
The mean of expressions e1,…,en is evaluated for one or several solutions. Each
solution generates an additional column in the returned matrix. The properties solnum
and t control which solutions are used for the evaluation. The solnum property is
available when the dataset has multiple solutions — for example, in the case of
parametric, eigenfrequency, or time-dependent solutions. The t property is available
only for time-dependent problems. If solnum is provided, the solutions indicated by
the indices provided with the solnum property are used. If t is provided, solutions are
interpolated. If neither solnum nor t is provided, all solutions are evaluated.
The property outersolnum is used to select the outer solution number when a
parametric sweep has been used in the study step node.
If the matrix property is set to off the output is cell arrays of length P containing cell
arrays of length M.
EXAMPLE
Evaluate the minimum temperature in the model domain:
model = mphopen('model_tutorial_llmatlab');
std = model.study.create('std');
std.feature.create('stat','Stationary');
std.run;
maxT = mphmin(model,'T','volume');
maxT = mphmin(model,'T','surface','selection',9);
model = mphopen('model_tutorial_llmatlab');
std = model.study.create('std');
param = std.feature.create('param','Parametric');
time = std.feature.create('time','Transient');
time.set('tlist', 'range(0,1,25)');
param.setIndex('pname','power',0);
param.setIndex('plistarr','30 60 90',0);
std.run;
Evaluate the minimum of the temperature at every time step computed with power set
to 30:
maxT = mphmin(model,'T','volume','dataset','dset2');
maxT = mphmin(model,'T','volume','dataset','dset2',…
'solnum',5);
Evaluate the minimum of the temperature at 10.5 sec and 15.2 sec:
maxT = mphmin(model,'T','volume','dataset','dset2',…
't',[10.5,15.2]);
Evaluate the minimum of the temperature at every time step computed with power set
to 90:
SEE ALSO
mphmax, mphmean
mphmodel
Return tags for the nodes and subnodes in the COMSOL model object.
SYNTAX
mphmodel(model)
str = mphmodel(model,'-struct')
DESCRIPTION
mphmodel(model) returns the tags for the nodes and subnodes of the object model.
str = mphmodel(model,'-struct') returns the tags for the nodes and subnodes of
the object model as a MATLAB® structure str.
The function mphmodel can be used when navigating the model object and learning
about its structure. The mphmodel function is mainly designed for usage when working
on the command line and one needs to learn what nodes are placed under a particular
node.
EXAMPLE
Open the model COMSOL_Multiphysics/Multiphysics/busbar from the COMSOL
Multiphysics Application Library and get the list of the nodes available under the root
node:
model = mphopen('busbar')
mphmodel(model)
SEE ALSO
mphgetexpressions, mphgetproperties, mphgetselection, mphnavigator,
mphsearch, mphshowerrors
SYNTAX
mphnavigator
mphnavigator(model)
DESCRIPTION
mphnavigator opens the Model Object Navigator which is a graphical user interface
that can be used to navigate the model object and to view the properties and methods
of the nodes in the model tree.
The GUI requires that the COMSOL object is stored in a variable in the base
workspace (at the MATLAB® command prompt) with the name model.
mphnavigator(model) opens the model object defined with the name model in
Model Object Navigator window.
EXAMPLE
Load busbar.mph from the Model Library:
mphopen busbar
mphnavigator
eff_diff = mphopen('effective_diffusivity');
Navigate the model object that is accessible with the variable eff_diff
mphnavigator(eff_diff)
SEE ALSO
mphgetexpressions, mphgetproperties, mphgetselection, mphmodel,
mphsearch, mphshowerrors
mphopen
Graphical user interface (GUI) to open recent model files.
SYNTAX
mphopen
mphopen -dir dirpath
mphopen -clear
model = mphopen(filename)
model = mphopen(filename, mtag)
model = mphopen(filename, mtag, '-nostore')
model = mphopen(filename, mtag, '-history')
model = mphopen(filename, mtag, pwd)
model = mphopen(location,...)
[model, filenameloaded] = mphopen(filename,…)
DESCRIPTION
mphopen starts a GUI with the recent opened files list.
mphopen -dir dirpath starts a GUI with a list of the files in the specified directory
dirpath. If dirpath is not specified the working directory is taken by default.
model = mphopen(filename) loads a COMSOL model object saved with the name
filename and assigns the default tag Model in the COMSOL server. If a model with
tag Model already exists and is also open in a COMSOL Multiphysics client, the loaded
model an index number is appended to the tag, for instance Model1.
model = mphopen(filename, mtag, pwd) loads the COMSOL model in the file
protected with the password pwd.
The model tag mtag and the password pwd are defined as string.
If the model tag is the same as a model that is currently in the COMSOL server the
loaded model overwrites the existing one.
Note that MATLAB® searches for the model on the MATLAB path if an absolute path
is not supplied.
mphopen turns off the model history recording by default, unless the property
'-history' is used.
mphopen does not look for a lock file when opening a model in the COMSOL server.
mphparticle
Evaluate expressions on particle and ray trajectories.
SYNTAX
pd = mphparticle(model)
pd = mphparticle(model,'expr',{e1,…,en},…)
DESCRIPTION
mphparticle(model) returns particle position and particle velocity at all time steps
stored in model with a single Particle/Ray dataset.
FIELD CONTENT
Note: mphparticle only evaluates expressions using particle and ray datasets.
EXAMPLE
Open the model Particle_Tracing_Module/Charged_Particle_Tracing/
trapped_protons from the Particle Tracing Module Application Library:
model = mphopen('trapped_protons');
Extract the particle positions and particle velocities along the computed trajectories at
every time steps stored in the model:
pd = mphparticle(model,'dataset','dset1')
Evaluate the mirror point latitude (Lm) and the particle equatorial pitch angle (Ea) at
t = 0.7 sec., extract only the data:
pd = mphparticle(model,'dataset','dset2',…
'expr',{'Lm','Ea*180/pi'},'t',0.7,'dataonly','on')
mphplot
Render a plot group in a figure window.
SYNTAX
mphplot(model)
mphplot(model,pgtag,…)
pd = mphplot(model,pgtag,…)
mphplot(pd,…)
DESCRIPTION
mphplot(model) opens a figure window and adds a menu where it is possible to
switch between all the different result plots in a model as well as any geometry and
mesh plots. A toolbar is added to the figure that allows the user to control the use of
views, lights, and camera settings.
mphplot(model,pgtag,…) renders the plot group tagged pgtag from the model
object model in a figure window in MATLAB®.
mphplot(pd,…) makes a plot using the post data structure pd that is generated using
the function mpheval. Plots involving points, lines, and surfaces are supported.
** The plot on server option requires that you start COMSOL with MATLAB in
graphics mode.
Only one color range bar and one legend is supported in a MATLAB figure. When the
option plot on server is active, all active color range bars are displayed.
When extracting plot data structure on machines without a graphics display set the
property createplot to 'off' and use the output pd to extract data that can be used
for plotting later. The pd struct only contains ordinary MATLAB data and can be saved
using the save command.
The data fields returned by mphplot are subject to change. The most important fields
are:
• p, the coordinates for each point that are used for creating lines or triangles.
• n, the normals in each point for the surfaces. These are not always available.
• t, contains the indices to columns in p of a simplex mesh, each column in t
representing a simplex.
• d, the data values for each point.
• rgb, the color values (red, green, and blue) entities at each point.
EXAMPLE
Display the plot settings pg using a MATLAB figure
model = mphopen('model_tutorial_llmatlab');
Display the plot group and the color range bar of the second plot type:
mphplot(model,'pg','rangenum',2)
mphplot(model,'pg','server','on')
model = mphopen('model_tutorial_llmatlab');
std = model.study.create('std');
std.feature.create('stat','Stationary');
std.run;
pd = mpheval(model,{'T','ht.tfluxMag'},'selection',2);
mphplot(pd,'index',1,'colortable','Thermal','rangenum',1)
SEE ALSO
mphcolortable, mpheval
mphquad2tri
Convert plot data quad mesh into simplex mesh.
SYNTAX
pdout = mphquad2tri(pdin)
The input and output structures, respectively pdin and pdout, are structures with
fields p, d, t, rgb, and expr.
EXAMPLE
Generate 3D surf data
[x,y] = meshgrid(-0.1:0.2:1.1,-0.4:0.2:0.4);
z = cumsum(0.1*randn(size(x)));
pd = mphsurf(x,y,z);
pd = mphquad2tri(pd);
mphplot(pd)
SEE ALSO
mphsurf, mphreadstl, mphwritestl
mphray
Evaluate expressions on particle and ray trajectories.
SYNTAX
pd = mphray(model)
pd = mphray(model,'expr',{e1,…,en},…)
Note: mphray only evaluates expressions using particle and ray datasets.
SEE ALSO
mpheval, mphevalpoint, mphevalpoint, mphint2, mphinterp, mphparticle
SYNTAX
pd = mphreadstl(filename)
DESCRIPTION
pd = mphreadstl(filename) reads the STL file filename and returns the data into
the plot data structure pd.
• The field name contains the name of the file the data come from.
• The field ref contains the header of the file.
• The field rgb contains the color model data at each vertices. The columns
correspond to node point coordinates in columns in p.
• The field expr contains the data description.
• The field d1 contains the data value at each vertices. The columns correspond to
node point coordinates in columns in p.
SEE ALSO
mphquad2tri, mphsurf, mphwritestl
mphreduction
Return reduced-order state-space matrices for a model.
SYNTAX
data = mphreduction(model, romtag, …)
SEE ALSO
mphstate
mphreport
Generate report to model or write report.
SYNTAX
mphreport(model,…)
mphreport(model,'action','run','tag',rpttag,…)
DESCRIPTION
mphreport(model,…) generate report to the model model.
EXAMPLE
Generate a brief report set with the tag 'myreport':
mphreport(model,'tag','myreport','type','brief')
Write report set with the tag 'myreport' to the Microsoft Word document
'modelreport.docx':
mphreport(model,'action','run','tag','myreport',…
mphreport(model,'action','run','tag','myreport',…
'open','off')
mphrun
Call run on nodes in the COMSOL model.
SYNTAX
mphrun(model)
mphrun(model,ntag,…)
mphrun(model,{ntag1,…},…)
mphrun(model,nodetype,…)
DESCRIPTION
mphrun(model) runs all study nodes in model.
mphrun(model,nodetype,…) runs all the nodes with the type nodetype in model.
nodetype can be any of batch, geom, mesh, sol, study, result, or
externalinterface.
When executing the run method on studies that have not been run before the default
is to create any plots that the study is set up to create. If no new plots are required set
the createplots property to 'off'.
mphsave
Save a COMSOL model as a file.
DESCRIPTION
mphsave(model) saves model as a COMSOL MPH-file.
mphsave(filename) saves the unique model that is loaded in the COMSOL server
to the file named filename.
mphsave(mtag) saves the model loaded in the COMSOL server with the tag mtag.
If the filename is not provided, the model has to be saved previously on disk.
If the filename does not provide a path, the file is saved relatively to the current path
in MATLAB®.
Note: Model created with older version than COMSOL 5.3 cannot be saved using
the component syntax.
SEE ALSO
mphopen, mphload, mphthumbnail, mmsave
mphsearch
Graphical user interface (GUI) for searching expressions in the COMSOL model
object.
SYNTAX
mphsearch(model)
DESCRIPTION
mphsearch(model) opens a graphical user interface that can be used to search
expressions in the model object model. Search using a text available in the name,
expression, or description of the variable.
mphselectball
Select geometric entity using a ball selection.
SYNTAX
n = mphselectball(model, geomtag, coord, entity)
DESCRIPTION
n = mphselectball(model, geomtag, coord, entity) finds geometry entity
numbers that are inside a ball defined by its coordinates and radius.
geomtag is the geometry tag of the geometry where the search should be performed.
mphselectball uses the Ball Selection that is built into COMSOL. This method is
similar to mphselectcoords, but the latter function does not offer the same
possibilities for the include option.
EXAMPLE
Select points that are very near the point (0, 0, 0.01) and display the points in a
geometry plot.
model = mphopen('model_tutorial_llmatlab');
coord = [0 0 0.01];
n = mphselectball(model,'geom1',coord','point','radius',0.001)
mphviewselection(model,'geom1',n,'point')
SEE ALSO
mphselectcoords, mphselectbox
mphselectbox
Select geometric entity using a rubberband/box.
SYNTAX
n = mphselectbox(model,geomtag,boxcoord,entity,…)
boxcoord set the coordinates of the selection domain, specified as an N-by-2 array,
where N is the geometry space dimension.
entity can be one of point, edge, boundary, or domain following the entity space
dimension defined below:
When a model uses form an assembly, more than one vertex can have the same
coordinate if the coordinate is shared by separate geometry objects. In that case you
can use the adjnumber property to identify the domain that the vertices should be
adjacent to.
EXAMPLE
Find the domains using a box selection:
model = mphopen('model_tutorial_llmatlab');
coordBox = [-1e-3 11e-3;-1e-3 11e-3;9e-3 11e-3];
n = mphselectbox(model,'geom1',coordBox,'domain');
n = mphselectbox(model,'geom1',coordBox,'boundary');
Find the boundaries inside the selection box that are adjacent to domain number 1:
n = mphselectbox(model,'geom1',coordBox,'boundary',…
'adjnumber',1);
model = mphopen('model_tutorial_llmatlab');
coordBox = [-1e-3,51e-3;-1e-3,51e-3;9e-3,11e-3];
n = mphselectbox(model,'geom1',coordBox,'boundary');
n = mphselectbox(model,'geom1',coordBox,'boundary',…
'adjnumber',2);
SEE ALSO
mphgetadj, mphgetcoords, mphselectcoords, mphviewselection
mphselectcoords
Select a geometric entity using point coordinates.
SYNTAX
n = mphselectcoords(model,geomtag,coord,entity,…)
DESCRIPTION
n = mphselectcoords(model,geomtag,coord,entity,…) finds geometric entity
numbers based on their vertex coordinates.
One or more coordinates can be provided. The function searches for vertices near
these coordinates using a tolerance radius. The list of the entities that are adjacent to
such vertices is returned.
coord is an N-by-M array where N correspond of the number of point to use and M
the space dimension of the geometry.
entity can be one of point, edge, boundary, or domain following the entity space
dimension defined below:
When a model uses form an assembly, more than one vertex can have the same
coordinate if the coordinate is shared by separate geometry objects. In that case you
can use the adjnumber property to identify the domain that the vertices should be
adjacent to.
The radius property is used to specify the radius of the sphere or circle that the search
should be within. A small positive radius (based on the geometry size) is used by
default in order to compensate for rounding errors.
Use the property include when two point coordinates are used. Set it to all to select
objects within the search radius of all points. any returns objects within the search
radius of any points.
EXAMPLE
Find the geometric entity number:
model = mphopen('model_tutorial_llmatlab');
coord = [10e-3 0 10e-3;0 10e-3 10e-3];
n = mphselectcoords(model,'geom1',coord','point')
Return the indices of the point at coordinates within a search radius of 0.011:
n = mphselectcoords(model,'geom1',coord','point',…
'radius',0.011)
Return the indices of the boundaries that have a vertex within the search radius:
n = mphselectcoords(model,'geom1',coord','boundary',…
'radius',11e-3)
Return the indices of the edges that have a vertex within the search radius from all
points:
Return the indices of the edges that have a vertex within the search radius from at least
one point:
model = mphopen('model_tutorial_llmatlab');
geom = model.component('comp1').geom('geom1');
geom.feature('fin').set('action', 'assembly');
geom.run('fin');
Return the indices of the boundaries that have any vertices within the search range of
a point:
coord = [0,0,10e-3];
n0 = mphselectcoords(model,'geom1',coord,'boundary')
Return the indices of the boundaries that also are adjacent to domain 1:
n1 = mphselectcoords(model,'geom1',coord,'boundary',…
'adjnumber',1);
Return the indices of the boundaries that also are adjacent to domain 2:
n1 = mphselectcoords(model,'geom1',coord,'boundary',…
'adjnumber',2);
SEE ALSO
mphgetadj, mphgetcoords, mphselectbox, mphviewselection
mphsetparam
Set parameter values.
SYNTAX
mphsetparam(model, name, value, description)
mphsetparam(model, name, [])
mphsetparam(model, data_cellarray)
mphsetparam(model, data_struct)
mphsetparam(model, data_dictionary)
DESCRIPTION
mphsetparam(model, name, value) sets a parameter with name to value. value
can be a string or a scalar variable (real or complex). If a unit must be supplied then
value has to be a string. If the parameter does not already exist, it is created. If the
parameter exists its description is not changed.
The name can be used to define parameter cases by joining the group name, parameter
case name and parameter name with slashes (/).
EXAMPLE
Set value in model.param:
param.L = '9[cm]';
param.wb = 0.05;
param.complex = 1+2i;
mphsetparam(model, param)
SEE ALSO
mphgetexpressions, mphevaluate
mphshowerrors
Show the messages in error nodes in the COMSOL Multiphysics model.
SYNTAX
mphshowerrors(model)
list = mphshowerrors(model)
DESCRIPTION
mphshowerrors(model) shows the error and warning messages stored in the model
and where they are located. The output is displayed in the command window.
mphsolinfo
Get information about a solution object.
SYNTAX
info = mphsolinfo(model,…)
info = mphsolinfo(model,'solname',soltag,…)
FIELD CONTENT
EXAMPLE
Get the information about the default solution object:
model = mphopen('model_tutorial_llmatlab');
std = model.study.create('std');
std.feature.create('stat','Stationary');
std.run;
solinfo = mphsolinfo(model)
model = mphopen('model_tutorial_llmatlab');
std = model.study.create('std');
param = std.feature.create('param','Parametric');
time = std.feature.create('time','Transient');
time.set('tlist', 'range(0,1,25)');
param.setIndex('pname','power',0);
param.setIndex('plistarr','30 60 90',0);
std.run;
Get the information about the 1st outer solution (power = 30):
solinfo = mphsolinfo(model,'soltag','sol3');
Get the solution vector for 2nd outer solution (power = 60):
solinfo = mphsolinfo(model,'soltag','sol4');
SEE ALSO
mphgetu, mphxmeshinfo, mphsolutioninfo
mphsolutioninfo
Get information about solution objects and datasets containing given parameters.
SYNTAX
info = mphsolutioninfo(model)
info = mphsolutioninfo(model,'parameters',{{ei,vi,toli},…},…)
DESCRIPTION
info = mphsolutioninfo(model) returns information about all solution object and
solution dataset combinations in model.
FIELD CONTENT
FIELD CONTENT
FIELD CONTENT
EXAMPLE
Load model_tutorial_llmatlab.mph:
model = mphopen('model_tutorial_llmatlab');
std = model.study.create('std');
param = std.feature.create('param','Parametric');
time = std.feature.create('time','Transient');
time.set('tlist', 'range(0,1,25)');
param.setIndex('pname','power',0);
param.setIndex('plistarr','30 60 90', 0);
std.run;
info = mphsolutioninfo(model,'parameters',{'power',30,0})
info = mphsolutioninfo(model,'parameters',{{'power',90,0},…
{'t',10.4,0.5}})
dset = info.sol2.dataset
solnum = info.sol2.map(end-1)
outersolnum = info.sol2.map(end)
SEE ALSO
mphgetu, mphxmeshinfo, mphsolinfo
SYNTAX
mphstart
mphstart(port)
mphstart(ipaddress, port)
mphstart(ipaddress, port, username, password)
mphstart(ipaddress, port, comsolpath)
mphstart(ipaddress, port, comsolpath, username, password)
DESCRIPTION
mphstart creates a connection with a COMSOL server using the default port number
(which is 2036).
mphstart can be used to create a connection from within MATLAB when this is
started without using the COMSOL with MATLAB option. mphstart then sets up
the necessary environment and connect to COMSOL.
Once MATLAB is connected to the server, import the COMSOL class in order to use
the ModelUtil commands. To import the COMSOL class enter:
import com.comsol.model.*
import com.comsol.model.util.*
EXAMPLE
Connect manually MATLAB to a COMSOL Multiphysics Server and create a model:
mphstart
import com.comsol.model.*
import com.comsol.model.util.*
model = ModelUtil.create('Model');
mphstart('192.168.0.1',2037)
mphstate
Get state-space matrices for a dynamic system.
SYNTAX
str = mphstate(model,soltag,'Out',{'SP'})
str = mphstate(model,soltag,'Out',{'SP1','SP2',…})
DESCRIPTION
®
str = mphstate(model,soltag,'out',{'SP'}) returns a MATLAB structure
str containing the state-space matrix SP assembled using the solver node soltag and
accessible as str.SP, SP being taken from the Out property list.
The property sparse controls whether the matrices A, B, C, D, M, MA, MB, and Null are
stored in the sparse format.
M C x· = M C Ax + M C Bu
y = Cx + Du
where x are the state variables, u are the input variables, and y are the output variables.
y = ( D – C ( M C A ) – 1 M C B )u
U = Nullx + ud + u 0
where Null is the null-space matrix, ud the constraint contribution, and u0 is the
linearization point, which is the solution stored in the sequence once the state-space
export feature is run.
The matrices MC and MCA are produced by the same algorithms that do the
finite-element assembly and constraint elimination in COMSOL Multiphysics. MC and
The matrices MCB and D are produced by a numerical differentiation of the residual
and output vectors, respectively, with respect to the input parameters (the algorithm
systematically perturbs the input parameters by multiplying them by a factor 1+10−8).
The matrices are assembled using the current solution available as linearization point
unless the initmethod property is provided. In case of the presence of a solver step
node you need either to disable the solver step node in the model or to set the property
extractafter with the Dependent Variables node tag.
EXAMPLE
Load model_tutorial_llmatlab.mph:
model = mphopen('model_tutorial_llmatlab');
comp1 = model.component('comp1');
comp1.mesh('mesh1').autoMeshSize(9);
std = model.study.create('std');
time = std.feature.create('time','Transient');
time.set('tlist','range(0,1,50)');
Edit the model to use parameter for the initial and external temperature:
model.param.set('T0','293.15[K]');
model.param.set('Text','300[K]');
ht = model.component('comp1').physics('ht');
ht.feature('init1').set('Tinit', 'T0');
ht.feature('hf1').set('Text', 'Text');
Run the study and create a plot group to display the probe:
std.run;
pg1 = model.result.create('pg1', 'PlotGroup1D');
glob1 = pg1.create('glob1', 'Global');
glob1.setIndex('expr', 'comp1.ppb1', 0);
M = mphstate(model,'sol1','out',{'A','B','C','D'},…
'input',{'power','Temp','Text'},'output','comp1.ppb1');
plot(t,y,'r');
hold on;
mphplot(model,'pg1');
G = M.D-M.C*(inv(M.A))*M.B;
y_inf = full(G*input');
y_inf = y + T0
mphsurf
Create plot data structure from surf data.
SYNTAX
pd = mphsurf(x,y,z)
pd = mphsurf(z)
DESCRIPTION
pd = mphsurf(x,y,z) creates the plot data structure pd from surf data x, y, and z.
pd = mphsurf(z) creates the plot data structure pd from surf data z. A unit scale is
assumed for the x and y coordinates.
[x,y] = meshgrid(-0.1:0.2:1.1,-0.4:0.2:0.4);
z = cumsum(0.1*randn(size(x)));
pd = mphsurf(x,y,z);
mphplot(pd)
SEE ALSO
mphquad2tri, mphreadstl, mphwritestl
mphtable
Get table data.
SYNTAX
info = mphtable(model,tabletag)
DESCRIPTION
info = mphtable(model,tabletag) returns the structure info containing the data
with the tabletag tag and its headers.
FIELD CONTENT
EXAMPLE
Load model_tutorial_llmatlab.mph, add a stationary study, and compute the
solution for different power values:
model = mphopen('model_tutorial_llmatlab');
std = model.study.create('std');
stat = std.feature.create('stat','Stationary')
stat.setIndex('pname','power',0);
stat.setIndex('plistarr','30 60 90',0);
std.run;
max = model.result.numerical.create('max','MaxVolume');
max.selection.all;
tbl = model.result.table.create('tbl','Table');
tbl.comments('Volume Maximum (T)');
max.set('table','tbl');
max.setResult;
str = mphtable(model,'tbl');
tbl_data = str.data
SEE ALSO
mpheval, mphevalpoint, mphglobal, mphint2, mphinterp, mphmax, mphmean,
mphmin
mphtags
Get tags and names for model nodes.
SYNTAX
mphtags(model)
mphtags(model, type)
mphtags(node)
[tags,labels,displaystrings] = mphtags(...)
mphtags
mphtags -show
[tags,filename,fullfilename] = mphtags
DESCRIPTION
mphtags(model) returns the tag in the COMSOL server of model loaded in the
COMSOL server.
mphtags(model,type) returns the type tag in model to give easy access to the nodes
under the result node. type can be any of result, dataset, table, numerical, and
export. It is sufficient to use the first letter of the types.
mphtags(model, node) returns the tags for the node node in model.
mphtags returns the tags for all models loaded in the COMSOL server.
mphthumbnail
Set or get model thumbnail.
SYNTAX
mphthumbnail(model,filename)
mphthumbnail(model,image)
mphthumbnail(model,fig)
mphthumbnail(model,'')
[image,imagefilename] = mphthumbnail(model)
DESCRIPTION
mphthumbnail sets or gets the model thumbnail for model loaded on the server. In
order to update the model thumbnail on disk the model must be saved.
mphthumbnail(model,image) sets the thumbnail using the image data image. image
is either an N-by-M or a N-by-M-by-3 matrix. The preferred size of the image is 280
by 210 pixels.
mphthumbnail(model,fig) sets the thumbnail using the image in the figure with
handle fig.
EXAMPLE
Load model_tutorial_llmatlab.mph:
model = mphopen('model_tutorial_llmatlab');
im = mphthumbnail(model);
imshow(im)
filename = fullfile(tempdir,'imagefile.png');
print(filename,'-dpng','-r48')
mphthumbnail(model,filename)
SEE ALSO
mphload, mphsave
mphversion
Return the version number for COMSOL Multiphysics.
SYNTAX
v = mphversion
[v,vm] = mphversion(model)
DESCRIPTION
v = mphversion returns the COMSOL Multiphysics version number that MATLAB
is connected to as a string.
EXAMPLE
Load model_tutorial_llmatlab.mph:
model = mphopen('model_tutorial_llmatlab');
SEE ALSO
mphload, mphsave
SYNTAX
mphviewselection(model,geomtag,number,entity,…)
mphviewselection(model,seltag,…)
DESCRIPTION
mphviewselection(model,geomtag,number,entity,…) displays the geometric
entity number of type entity in MATLAB figure including the representation of the
geometry geomtag.
EXAMPLE
Plot boundary 6 using yellow color:
model = mphopen('model_tutorial_llmatlab');
mphviewselection(model,'geom1',6,'boundary',…
'facecolorselected',[1 1 0],'facealpha',0.5)
mphviewselection(model,'geom1',1:8,'edge',…
'edgecolorselected',[0 1 0])
Add an explicit selection for boundaries 7 to 12 and plot the selection in a figure:
model.selection.create('sel1','Explicit').geom(2).set(7:12);
mphviewselection(model,'sel1');
Add a selection to get the vertex indices with the box delimited with the coordinates
[-1e-3 11e-3;-1e-3 11e-3;9e-3 11e-3] and plot both the selected entities and the
selector:
SEE ALSO
mphgeom, mphselectbox, mphselectcoords
mphwritestl
Export plot data as an STL file.
SYNTAX
mphwritestl(filename, pd)
mphwritestl(filename, pd, '-binary')
DESCRIPTION
mphwritestl(filename, pd) exports data in the plot data structure pd as the STL
file filename.
Other fields in the plot data structure are not considered to generate the surface mesh.
EXAMPLE
Generate a surface mesh from solution plot:
model = mphopen('vacuum_flask_llmatlab')
pd = mphplot(model, 'pg1')
pd2stl = pd{2}{1};
mphwritestl('vacuum_flask.stl', pd2stl)
model = mphopen('model_tutorial_llmatlab');
model.component('comp1').mesh('mesh1').run;
[s,d] = mphmeshstats(model, 'mesh1');
idx = strcmp(s.types, 'tri');
pdmesh.p = d.vertex;
pdmesh.t = d.elem{idx};
mphwritestl('mesh2geom.stl', pdmesh);
mphxmeshinfo
Extract information about the extended mesh.
SYNTAX
info = mphxmeshinfo(model, …)
DESCRIPTION
info = mphxmeshinfo(model,…) extracts extended mesh information from the
active solution object.
The function xmeshinfo returns a structure with the fields shown in the table below
TABLE 6-53: FIELD IN THE RETURNED STRUCTURE FROM MPHXMESHINFO.
FIELD DESCRIPTION
model = mphopen('model_tutorial_llmatlab.mph');
std = model.study.create('std');
std.feature.create('stat', 'Stationary');
std.run;
info = mphxmeshinfo(model)
dofs = info.ndofs
coords = info.dofs.coords;
idx = info.elements.tet.dofs
model = mphopen('model_tutorial_llmatlab.mph');
comp1 = model.component('comp1');
ec = comp1.physics.create('ec','ConductiveMedia','geom1');
ec.feature.create('gnd1','Ground',2).selection.set(3);
pot = ec.feature.create('pot','ElectricPotential',2);
pot.selection.set(7);
pot.set('V0',1,'50[mV]');
hs = comp1.physics('ht').feature('hs1');
hs.set('heatSourceType',1,'generalSource');
hs.set('Q_src',1,'root.comp1.ec.Qh');
std = model.study.create('std');
std.feature.create('stat', 'Stationary');
std.run;
info = mphxmeshinfo(model)
Get the index of the nodes for element with the index 100:
idx_nodes = info.elements.tet.nodes(:,100)
Get the index of the DOFs for element with the index 100:
idx_dofs = info.elements.tet.dofs(:,100)
Get the index of the variables names corresponding to the DOFs with the index
idx_dofs:
idx_names = info.dofsinds(idx_dofs);
idx_dofnames = find(strcmp(info.dofs.dofnames,'comp1.V'))-1;
Get the coordinates of the DOFs corresponding to the dependent variable V that
belong to element 100:
info.dofs.coords(:,idx_dofs(idx))
SEE ALSO:
mphgetu, mphmatrix, mphsolinfo, mphsolutioninfo
building 3D geometries 63
INDEX| 393
D data export 159 expression average 181
data, extracting 196 extended mesh 237
datasets syntax 157 extracting
defining data 169, 196
materials 125 eliminated matrices 206
MATLAB functions 264 matrices 215
selections 132 mesh information 117
settings 129 plot data 151
Delaunay method 89 solution vectors 234
derivative recovery 173 system matrices 202
difference operation 59 extruding meshes 97, 99
dipole color tables 285
F floating network license (FNL) 29
directory path, MATLAB function 267
free meshing 101
disabling model history 257
free quad mesh, example 91
disco color tables 286
function derivatives 269
disconnecting MATLAB 30
function inputs/outputs 268
displaying
functions
geometries 55
interpolation 129
meshes 84
MATLAB 167
plot groups 149
MATLAB, adding 262
selections 138
documentation 19 G geometry
394 | I N D E X
inferno color table 286 sequence 83
inner solution 231 statistics 113
integrals, evaluating 178 methods 38
internet resources 18 methods, mphnavigator 245
interpolation curve 74 Microsoft Windows 26
interpolation functions 129 minimum of expressions 82, 173
model examples 18
J Java 38
model features 256
Java heap size 255
model history 42, 257
job sequences 145
model object
K knowledge base, COMSOL 21
calling 167
L linear matrix 208 create custom GUI 258
linearization points 203, 216 information 245
Linux 26 methods 39
list model object 40 navigating 240
load model 41 Model Tree 243
loops 197, 257 models, running in loops 197
ModelUtil method 39
M macOS 26
modifying equations 126
magma color table 286
mpheval 183–186
mass matrix 214
mphevalglobalmatrix 194
materials 125
mphevalpoint 187–188
MATLAB desktop 24
MPH-files 20
MATLAB feature node 267
mphgetexpressions 250
MATLAB functions 167, 262
mphgetproperties 249–250
MATLAB functions, plot 265
mphgetselection 251
matrices, state-space 214
mphgetu 234–235
maximum of expression 176
mphglobal 191–192
memory requirements 257
mphinputmatrix 208–209
mesh
mphint2 178, 180
boundary layers 102
mphinterp 169–171, 173
converting 109
mphmatrix 202–203, 206
copying 105
mphmax 176–177
data 116
mphmean 181–182
displaying 84
mphmin 82, 173–175
element size, controlling 85
mphmodel 245
importing 110
mphnavigator 240, 243–245
refining 105
mphparticle 189–190
resolution 86
INDEX| 395
mphray 189 revolving face meshes 97
mphshowerrors 253 run solver sequences 144
mphsolinfo 66, 229–230 running, models in loops 197
mphsolutioninfo 69, 231–233
S save model object 45
mphstate 214–216, 218, 222
selecting, linearization points 203
mphtable 196
selections
mphxmeshinfo 211, 237, 239
defining 132
myscript 200
displaying 138
N NASTRAN 110 sequences of operations 38
node points 183 sequences, solvers 144
nodes, xmesh 238 set method 166
numerical node syntax 157 set operations 59
set the feature property 55
O ODE problem, example 128
setindex method 167
outer solution 231
setting
P parameterized geometries 71
linear matrix system 208
parametric jobs 145
linearization points 216
parametric sweep 144
simplex elements 105
particle trajectories 189
solid modeling 63
Physics Builder 131
solution information 229, 231
physics interfaces 121–122
solution object 229
plasma color table 286
solution vector 234
plot data, extracting 151
solutions, specifying 235
plot groups 148–149
solver configurations syntax 143
plot while solving 146
solving, ODE problems 128
plotting data, example 155
spectrum color table 287
port number 24
squeezed singleton 189
preferences 32
state-space export 214
prism mesh 99
statistics, mesh 113
progress bar 40
structured meshes 92
Q quadrilateral mesh, example 92 study syntax 141
sweeping meshes 97
R rainbow color tables 287
swept meshing 101
ray trajectories 189
syntax
refining meshes 105
datasets 157
remove model object 40
materials 125
resolution, mesh 86
numerical node 157
results evaluation 157
physics interfaces 121
revolved prism mesh, example 97
396 | I N D E X
plot groups 148
solver configurations 143
studies 141
system matrices 202
W warnings 253
wave color tables 288
weak form equation, example 126
websites, COMSOL 21
X xmesh 237
xterm 200–201
INDEX| 397
398 | I N D E X