Please login with a confirmed email address before reporting spam
Posted:
9 years ago
Mar 21, 2016, 2:45 p.m. EDT
You can set 'table' in comsol so that you don't need to read from files. Here is the script that you may change in the *.m file:
% set interpolation function
model.func('int1').set('table', cellfun( @(x) num2str(x, '%0.10g'), num2cell( [y0, fy] ), 'UniformOutput', false));
where [y0, fy] is the two-column data that you stored in matlab. cellfun works as converting the data (mostly in double type ) into cells of string, so that comsol can read. In this way, you do not need to save data into the hard disk, but import directly from matlab to comsol.
By the way, unless you really have very large size of data, say ~GB, I don't think using the "files" option will be slow, since the FEM simulation usually consumes more time than data exchange between your hard drive and matlab.
You can set 'table' in comsol so that you don't need to read from files. Here is the script that you may change in the *.m file:
% set interpolation function
model.func('int1').set('table', cellfun( @(x) num2str(x, '%0.10g'), num2cell( [y0, fy] ), 'UniformOutput', false));
where [y0, fy] is the two-column data that you stored in matlab. cellfun works as converting the data (mostly in double type ) into cells of string, so that comsol can read. In this way, you do not need to save data into the hard disk, but import directly from matlab to comsol.
By the way, unless you really have very large size of data, say ~GB, I don't think using the "files" option will be slow, since the FEM simulation usually consumes more time than data exchange between your hard drive and matlab.
Please login with a confirmed email address before reporting spam
Posted:
9 years ago
Mar 21, 2016, 3:00 p.m. EDT
Thanks for the information.
I have been occupied with some other projects recently, and I will try it out as soon as I got some time.
Once again, thank you so much.
Thanks for the information.
I have been occupied with some other projects recently, and I will try it out as soon as I got some time.
Once again, thank you so much.
Please login with a confirmed email address before reporting spam
Posted:
9 years ago
Mar 22, 2016, 9:48 p.m. EDT
Dear Peng,
I think what you showed is how to pass 1-dimensional data back to Comsol? That is, fy = f(y0)?
What I want to know, is actually how to pass 2-dimensional data to Comsol, that is f(x,y) = f(x0,y0).
Do you know how to do this?
Thanks again,
Yadong
Dear Peng,
I think what you showed is how to pass 1-dimensional data back to Comsol? That is, fy = f(y0)?
What I want to know, is actually how to pass 2-dimensional data to Comsol, that is f(x,y) = f(x0,y0).
Do you know how to do this?
Thanks again,
Yadong
Please login with a confirmed email address before reporting spam
Posted:
9 years ago
Mar 25, 2016, 4:24 p.m. EDT
Dear Yadong,
Yes, for the multi-variable interpolation, the only way that I know is to use "import from file".
Peng
Dear Yadong,
Yes, for the multi-variable interpolation, the only way that I know is to use "import from file".
Peng
Please login with a confirmed email address before reporting spam
Posted:
9 years ago
Mar 25, 2016, 4:27 p.m. EDT
Ok, I see.
Thanks anyway!
Yadong
Ok, I see.
Thanks anyway!
Yadong
Please login with a confirmed email address before reporting spam
Posted:
9 years ago
May 16, 2016, 8:14 a.m. EDT
Hi all!
I found the solution very interesting as it is what I would need. Unfortunately, my MATLAB script does not replace the orders in the .m functions exported from COMSOL...
I need to replace the initial interpolation file established as a global definition. However, when I replace the corresponding line in the script, to add/import a new table, when running, it does not account for it and it runs according to the previous file. It seems like I am not able to overcome the first instructions from COMSOL and the default orders prevail.
I am trying to replace this line (a certain injection rate "q" over a time series, q(t):
model.func('int2').set('table', {'0' '0'; '600' '40'; '1200' '40'; '1800' '40'; '2400' '40'});
with this one:
model.func('int2').set('table', cellfun( @(x) num2str(x, '%0.10g'), num2cell([t, q_t]), 'UniformOutput', false));
I am sure there is something I am missing... I just cannot figure it out where... Maybe some of you could propose a solution! :)
Thanks!
Maria
Hi all!
I found the solution very interesting as it is what I would need. Unfortunately, my MATLAB script does not replace the orders in the .m functions exported from COMSOL...
I need to replace the initial interpolation file established as a global definition. However, when I replace the corresponding line in the script, to add/import a new table, when running, it does not account for it and it runs according to the previous file. It seems like I am not able to overcome the first instructions from COMSOL and the default orders prevail.
I am trying to replace this line (a certain injection rate "q" over a time series, q(t):
model.func('int2').set('table', {'0' '0'; '600' '40'; '1200' '40'; '1800' '40'; '2400' '40'});
with this one:
model.func('int2').set('table', cellfun( @(x) num2str(x, '%0.10g'), num2cell([t, q_t]), 'UniformOutput', false));
I am sure there is something I am missing... I just cannot figure it out where... Maybe some of you could propose a solution! :)
Thanks!
Maria