Best programming language for solving numerical PDEs
$begingroup$
I have been using matlab to write my finite difference, finite volume and level set codes when solving PDEs. The codes become even complicated hence taking longer to run when I go to 3D cases. This causes the temperature of the laptop to be high (about 71 degree celcius measured by Sensor) and surfing internet while running the codes to be difficult, due to its slow speed. I like matlab since I have been using it since 5 years ago, and there are functions that I think are simple that I can easily remember. On the other hand, I have previously and occasionally used (although not an expert) R (through Rstudio), Python (through Spyder/Anaconda) and C++ (for example using CodeBlocks). Is it worth to change from matlab to other languange/software since that would need me to convert all my codes and find appropriate functions that are equivalent to those from matlab? What I meant by functions here are not the simple ones like ode45 (which I could write on my own), but rather the complicated ones such as isosurface, patch etc.
Edit: I am using ubuntu 16.04 LTS, Memory: 3.7 GiB, Processor: Intel Core i7-4500U CPU @ 1.80GHz x 4, Graphics: Intel Haswell Mobile, Disk: 343.9 GB. It is a dual boot laptop (Asus F550L).
computer-science computational-mathematics programming
$endgroup$
add a comment |
$begingroup$
I have been using matlab to write my finite difference, finite volume and level set codes when solving PDEs. The codes become even complicated hence taking longer to run when I go to 3D cases. This causes the temperature of the laptop to be high (about 71 degree celcius measured by Sensor) and surfing internet while running the codes to be difficult, due to its slow speed. I like matlab since I have been using it since 5 years ago, and there are functions that I think are simple that I can easily remember. On the other hand, I have previously and occasionally used (although not an expert) R (through Rstudio), Python (through Spyder/Anaconda) and C++ (for example using CodeBlocks). Is it worth to change from matlab to other languange/software since that would need me to convert all my codes and find appropriate functions that are equivalent to those from matlab? What I meant by functions here are not the simple ones like ode45 (which I could write on my own), but rather the complicated ones such as isosurface, patch etc.
Edit: I am using ubuntu 16.04 LTS, Memory: 3.7 GiB, Processor: Intel Core i7-4500U CPU @ 1.80GHz x 4, Graphics: Intel Haswell Mobile, Disk: 343.9 GB. It is a dual boot laptop (Asus F550L).
computer-science computational-mathematics programming
$endgroup$
add a comment |
$begingroup$
I have been using matlab to write my finite difference, finite volume and level set codes when solving PDEs. The codes become even complicated hence taking longer to run when I go to 3D cases. This causes the temperature of the laptop to be high (about 71 degree celcius measured by Sensor) and surfing internet while running the codes to be difficult, due to its slow speed. I like matlab since I have been using it since 5 years ago, and there are functions that I think are simple that I can easily remember. On the other hand, I have previously and occasionally used (although not an expert) R (through Rstudio), Python (through Spyder/Anaconda) and C++ (for example using CodeBlocks). Is it worth to change from matlab to other languange/software since that would need me to convert all my codes and find appropriate functions that are equivalent to those from matlab? What I meant by functions here are not the simple ones like ode45 (which I could write on my own), but rather the complicated ones such as isosurface, patch etc.
Edit: I am using ubuntu 16.04 LTS, Memory: 3.7 GiB, Processor: Intel Core i7-4500U CPU @ 1.80GHz x 4, Graphics: Intel Haswell Mobile, Disk: 343.9 GB. It is a dual boot laptop (Asus F550L).
computer-science computational-mathematics programming
$endgroup$
I have been using matlab to write my finite difference, finite volume and level set codes when solving PDEs. The codes become even complicated hence taking longer to run when I go to 3D cases. This causes the temperature of the laptop to be high (about 71 degree celcius measured by Sensor) and surfing internet while running the codes to be difficult, due to its slow speed. I like matlab since I have been using it since 5 years ago, and there are functions that I think are simple that I can easily remember. On the other hand, I have previously and occasionally used (although not an expert) R (through Rstudio), Python (through Spyder/Anaconda) and C++ (for example using CodeBlocks). Is it worth to change from matlab to other languange/software since that would need me to convert all my codes and find appropriate functions that are equivalent to those from matlab? What I meant by functions here are not the simple ones like ode45 (which I could write on my own), but rather the complicated ones such as isosurface, patch etc.
Edit: I am using ubuntu 16.04 LTS, Memory: 3.7 GiB, Processor: Intel Core i7-4500U CPU @ 1.80GHz x 4, Graphics: Intel Haswell Mobile, Disk: 343.9 GB. It is a dual boot laptop (Asus F550L).
computer-science computational-mathematics programming
computer-science computational-mathematics programming
edited Jan 8 at 6:38
mohd
asked Jan 8 at 6:14
mohdmohd
275
275
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
$begingroup$
In reality, this is more of a question of data structuring/algorithmic development than it is of the most efficient language. In my experience in dealing with people in your situation the most common issue I observe is that the user is relying on built in packages (say the LU function in matlab) and that they are either not calling it correctly for the matrix(/ces) they are working with AND/OR are using a built in package that is inefficient for the situation they are in (i.e. you have a matrix of a certain structure in which many of the operations in the built in package are superfluous).
If you want to go 'hardcore' and build everything yourself then I personally recommend C/C++. If you want to really boost your performance you can run a stack of GPU's together in parallel with CUDA. There are also a number of incredibly amazing C++ Boost libraries that have been built that serve (not exclusively) in solving PDE's numerically.
There are other 'mathsy' languages out there that are great to use. I've been using Julia (on and off) over the past few years and it's great - very much written for ease of maths coding.
Addition
My recommendation is that before you move to another dev environment/language have a good read into the matlab packages you use to make sure they are not 'over working' the data you are working with. By 'over working' I mean performing unnecessary operations. For example performing a LU decomposition on a sparse matrix in which the overwhelming operations are meaningless (converting 0's to 0's is the most common).
There is also a CUDA package for Matlab too. I've not personally used it, but might be worth investigating.
$endgroup$
1
$begingroup$
thanks for your comments. I will have a look at them all.
$endgroup$
– mohd
Jan 9 at 1:39
1
$begingroup$
No worries. Please at any time shoot me a message on this topic. Computational Mathematics is one of my favs of the Applied Mathematics.
$endgroup$
– DavidG
Jan 9 at 1:41
add a comment |
$begingroup$
I would use C/C++. In any interpreted language (Matlab, Python, etc), writing for
loops is extremely inefficient. That's why in Matlab for example you can write an external library in C. The speed up is at least one order of magnitude. The advantage of C++ is that you can also (with some effort) write nice parallel code, to use more than one core in the processor.
$endgroup$
1
$begingroup$
Matlab has built in multi-processor parallel coding (has been around for at least 5 years - (for example the 'parfor loop'
$endgroup$
– DavidG
Jan 8 at 6:22
$begingroup$
Thanks @Andrei for your answer. I know about the parfor loop, and in certain circumstances, I use vectorization rather than for loop in order to run faster (whenever possible). It is just that I think matlab is too heavy for my laptop. Besides, I don't know if C/C++ has the functions that I need.
$endgroup$
– mohd
Jan 8 at 6:25
1
$begingroup$
@mohd - If you are using either Windows or Mac, you may want to consider using a Linux Distro. I use Ubuntu primarily and I've found that Matlab (overall) performs much better in a Linux environment.
$endgroup$
– DavidG
Jan 8 at 6:31
1
$begingroup$
You can also use a lot of the C/C++ binders/wrappers in Python too. But as Andrei pointed out, it's still an interpretive language and as such will not be as efficient.
$endgroup$
– DavidG
Jan 8 at 6:36
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
return StackExchange.using("mathjaxEditing", function () {
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["$", "$"], ["\\(","\\)"]]);
});
});
}, "mathjax-editing");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "69"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
noCode: true, onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmath.stackexchange.com%2fquestions%2f3065859%2fbest-programming-language-for-solving-numerical-pdes%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
$begingroup$
In reality, this is more of a question of data structuring/algorithmic development than it is of the most efficient language. In my experience in dealing with people in your situation the most common issue I observe is that the user is relying on built in packages (say the LU function in matlab) and that they are either not calling it correctly for the matrix(/ces) they are working with AND/OR are using a built in package that is inefficient for the situation they are in (i.e. you have a matrix of a certain structure in which many of the operations in the built in package are superfluous).
If you want to go 'hardcore' and build everything yourself then I personally recommend C/C++. If you want to really boost your performance you can run a stack of GPU's together in parallel with CUDA. There are also a number of incredibly amazing C++ Boost libraries that have been built that serve (not exclusively) in solving PDE's numerically.
There are other 'mathsy' languages out there that are great to use. I've been using Julia (on and off) over the past few years and it's great - very much written for ease of maths coding.
Addition
My recommendation is that before you move to another dev environment/language have a good read into the matlab packages you use to make sure they are not 'over working' the data you are working with. By 'over working' I mean performing unnecessary operations. For example performing a LU decomposition on a sparse matrix in which the overwhelming operations are meaningless (converting 0's to 0's is the most common).
There is also a CUDA package for Matlab too. I've not personally used it, but might be worth investigating.
$endgroup$
1
$begingroup$
thanks for your comments. I will have a look at them all.
$endgroup$
– mohd
Jan 9 at 1:39
1
$begingroup$
No worries. Please at any time shoot me a message on this topic. Computational Mathematics is one of my favs of the Applied Mathematics.
$endgroup$
– DavidG
Jan 9 at 1:41
add a comment |
$begingroup$
In reality, this is more of a question of data structuring/algorithmic development than it is of the most efficient language. In my experience in dealing with people in your situation the most common issue I observe is that the user is relying on built in packages (say the LU function in matlab) and that they are either not calling it correctly for the matrix(/ces) they are working with AND/OR are using a built in package that is inefficient for the situation they are in (i.e. you have a matrix of a certain structure in which many of the operations in the built in package are superfluous).
If you want to go 'hardcore' and build everything yourself then I personally recommend C/C++. If you want to really boost your performance you can run a stack of GPU's together in parallel with CUDA. There are also a number of incredibly amazing C++ Boost libraries that have been built that serve (not exclusively) in solving PDE's numerically.
There are other 'mathsy' languages out there that are great to use. I've been using Julia (on and off) over the past few years and it's great - very much written for ease of maths coding.
Addition
My recommendation is that before you move to another dev environment/language have a good read into the matlab packages you use to make sure they are not 'over working' the data you are working with. By 'over working' I mean performing unnecessary operations. For example performing a LU decomposition on a sparse matrix in which the overwhelming operations are meaningless (converting 0's to 0's is the most common).
There is also a CUDA package for Matlab too. I've not personally used it, but might be worth investigating.
$endgroup$
1
$begingroup$
thanks for your comments. I will have a look at them all.
$endgroup$
– mohd
Jan 9 at 1:39
1
$begingroup$
No worries. Please at any time shoot me a message on this topic. Computational Mathematics is one of my favs of the Applied Mathematics.
$endgroup$
– DavidG
Jan 9 at 1:41
add a comment |
$begingroup$
In reality, this is more of a question of data structuring/algorithmic development than it is of the most efficient language. In my experience in dealing with people in your situation the most common issue I observe is that the user is relying on built in packages (say the LU function in matlab) and that they are either not calling it correctly for the matrix(/ces) they are working with AND/OR are using a built in package that is inefficient for the situation they are in (i.e. you have a matrix of a certain structure in which many of the operations in the built in package are superfluous).
If you want to go 'hardcore' and build everything yourself then I personally recommend C/C++. If you want to really boost your performance you can run a stack of GPU's together in parallel with CUDA. There are also a number of incredibly amazing C++ Boost libraries that have been built that serve (not exclusively) in solving PDE's numerically.
There are other 'mathsy' languages out there that are great to use. I've been using Julia (on and off) over the past few years and it's great - very much written for ease of maths coding.
Addition
My recommendation is that before you move to another dev environment/language have a good read into the matlab packages you use to make sure they are not 'over working' the data you are working with. By 'over working' I mean performing unnecessary operations. For example performing a LU decomposition on a sparse matrix in which the overwhelming operations are meaningless (converting 0's to 0's is the most common).
There is also a CUDA package for Matlab too. I've not personally used it, but might be worth investigating.
$endgroup$
In reality, this is more of a question of data structuring/algorithmic development than it is of the most efficient language. In my experience in dealing with people in your situation the most common issue I observe is that the user is relying on built in packages (say the LU function in matlab) and that they are either not calling it correctly for the matrix(/ces) they are working with AND/OR are using a built in package that is inefficient for the situation they are in (i.e. you have a matrix of a certain structure in which many of the operations in the built in package are superfluous).
If you want to go 'hardcore' and build everything yourself then I personally recommend C/C++. If you want to really boost your performance you can run a stack of GPU's together in parallel with CUDA. There are also a number of incredibly amazing C++ Boost libraries that have been built that serve (not exclusively) in solving PDE's numerically.
There are other 'mathsy' languages out there that are great to use. I've been using Julia (on and off) over the past few years and it's great - very much written for ease of maths coding.
Addition
My recommendation is that before you move to another dev environment/language have a good read into the matlab packages you use to make sure they are not 'over working' the data you are working with. By 'over working' I mean performing unnecessary operations. For example performing a LU decomposition on a sparse matrix in which the overwhelming operations are meaningless (converting 0's to 0's is the most common).
There is also a CUDA package for Matlab too. I've not personally used it, but might be worth investigating.
edited Jan 8 at 6:50
answered Jan 8 at 6:37
DavidGDavidG
2,1851720
2,1851720
1
$begingroup$
thanks for your comments. I will have a look at them all.
$endgroup$
– mohd
Jan 9 at 1:39
1
$begingroup$
No worries. Please at any time shoot me a message on this topic. Computational Mathematics is one of my favs of the Applied Mathematics.
$endgroup$
– DavidG
Jan 9 at 1:41
add a comment |
1
$begingroup$
thanks for your comments. I will have a look at them all.
$endgroup$
– mohd
Jan 9 at 1:39
1
$begingroup$
No worries. Please at any time shoot me a message on this topic. Computational Mathematics is one of my favs of the Applied Mathematics.
$endgroup$
– DavidG
Jan 9 at 1:41
1
1
$begingroup$
thanks for your comments. I will have a look at them all.
$endgroup$
– mohd
Jan 9 at 1:39
$begingroup$
thanks for your comments. I will have a look at them all.
$endgroup$
– mohd
Jan 9 at 1:39
1
1
$begingroup$
No worries. Please at any time shoot me a message on this topic. Computational Mathematics is one of my favs of the Applied Mathematics.
$endgroup$
– DavidG
Jan 9 at 1:41
$begingroup$
No worries. Please at any time shoot me a message on this topic. Computational Mathematics is one of my favs of the Applied Mathematics.
$endgroup$
– DavidG
Jan 9 at 1:41
add a comment |
$begingroup$
I would use C/C++. In any interpreted language (Matlab, Python, etc), writing for
loops is extremely inefficient. That's why in Matlab for example you can write an external library in C. The speed up is at least one order of magnitude. The advantage of C++ is that you can also (with some effort) write nice parallel code, to use more than one core in the processor.
$endgroup$
1
$begingroup$
Matlab has built in multi-processor parallel coding (has been around for at least 5 years - (for example the 'parfor loop'
$endgroup$
– DavidG
Jan 8 at 6:22
$begingroup$
Thanks @Andrei for your answer. I know about the parfor loop, and in certain circumstances, I use vectorization rather than for loop in order to run faster (whenever possible). It is just that I think matlab is too heavy for my laptop. Besides, I don't know if C/C++ has the functions that I need.
$endgroup$
– mohd
Jan 8 at 6:25
1
$begingroup$
@mohd - If you are using either Windows or Mac, you may want to consider using a Linux Distro. I use Ubuntu primarily and I've found that Matlab (overall) performs much better in a Linux environment.
$endgroup$
– DavidG
Jan 8 at 6:31
1
$begingroup$
You can also use a lot of the C/C++ binders/wrappers in Python too. But as Andrei pointed out, it's still an interpretive language and as such will not be as efficient.
$endgroup$
– DavidG
Jan 8 at 6:36
add a comment |
$begingroup$
I would use C/C++. In any interpreted language (Matlab, Python, etc), writing for
loops is extremely inefficient. That's why in Matlab for example you can write an external library in C. The speed up is at least one order of magnitude. The advantage of C++ is that you can also (with some effort) write nice parallel code, to use more than one core in the processor.
$endgroup$
1
$begingroup$
Matlab has built in multi-processor parallel coding (has been around for at least 5 years - (for example the 'parfor loop'
$endgroup$
– DavidG
Jan 8 at 6:22
$begingroup$
Thanks @Andrei for your answer. I know about the parfor loop, and in certain circumstances, I use vectorization rather than for loop in order to run faster (whenever possible). It is just that I think matlab is too heavy for my laptop. Besides, I don't know if C/C++ has the functions that I need.
$endgroup$
– mohd
Jan 8 at 6:25
1
$begingroup$
@mohd - If you are using either Windows or Mac, you may want to consider using a Linux Distro. I use Ubuntu primarily and I've found that Matlab (overall) performs much better in a Linux environment.
$endgroup$
– DavidG
Jan 8 at 6:31
1
$begingroup$
You can also use a lot of the C/C++ binders/wrappers in Python too. But as Andrei pointed out, it's still an interpretive language and as such will not be as efficient.
$endgroup$
– DavidG
Jan 8 at 6:36
add a comment |
$begingroup$
I would use C/C++. In any interpreted language (Matlab, Python, etc), writing for
loops is extremely inefficient. That's why in Matlab for example you can write an external library in C. The speed up is at least one order of magnitude. The advantage of C++ is that you can also (with some effort) write nice parallel code, to use more than one core in the processor.
$endgroup$
I would use C/C++. In any interpreted language (Matlab, Python, etc), writing for
loops is extremely inefficient. That's why in Matlab for example you can write an external library in C. The speed up is at least one order of magnitude. The advantage of C++ is that you can also (with some effort) write nice parallel code, to use more than one core in the processor.
answered Jan 8 at 6:20
AndreiAndrei
11.8k21026
11.8k21026
1
$begingroup$
Matlab has built in multi-processor parallel coding (has been around for at least 5 years - (for example the 'parfor loop'
$endgroup$
– DavidG
Jan 8 at 6:22
$begingroup$
Thanks @Andrei for your answer. I know about the parfor loop, and in certain circumstances, I use vectorization rather than for loop in order to run faster (whenever possible). It is just that I think matlab is too heavy for my laptop. Besides, I don't know if C/C++ has the functions that I need.
$endgroup$
– mohd
Jan 8 at 6:25
1
$begingroup$
@mohd - If you are using either Windows or Mac, you may want to consider using a Linux Distro. I use Ubuntu primarily and I've found that Matlab (overall) performs much better in a Linux environment.
$endgroup$
– DavidG
Jan 8 at 6:31
1
$begingroup$
You can also use a lot of the C/C++ binders/wrappers in Python too. But as Andrei pointed out, it's still an interpretive language and as such will not be as efficient.
$endgroup$
– DavidG
Jan 8 at 6:36
add a comment |
1
$begingroup$
Matlab has built in multi-processor parallel coding (has been around for at least 5 years - (for example the 'parfor loop'
$endgroup$
– DavidG
Jan 8 at 6:22
$begingroup$
Thanks @Andrei for your answer. I know about the parfor loop, and in certain circumstances, I use vectorization rather than for loop in order to run faster (whenever possible). It is just that I think matlab is too heavy for my laptop. Besides, I don't know if C/C++ has the functions that I need.
$endgroup$
– mohd
Jan 8 at 6:25
1
$begingroup$
@mohd - If you are using either Windows or Mac, you may want to consider using a Linux Distro. I use Ubuntu primarily and I've found that Matlab (overall) performs much better in a Linux environment.
$endgroup$
– DavidG
Jan 8 at 6:31
1
$begingroup$
You can also use a lot of the C/C++ binders/wrappers in Python too. But as Andrei pointed out, it's still an interpretive language and as such will not be as efficient.
$endgroup$
– DavidG
Jan 8 at 6:36
1
1
$begingroup$
Matlab has built in multi-processor parallel coding (has been around for at least 5 years - (for example the 'parfor loop'
$endgroup$
– DavidG
Jan 8 at 6:22
$begingroup$
Matlab has built in multi-processor parallel coding (has been around for at least 5 years - (for example the 'parfor loop'
$endgroup$
– DavidG
Jan 8 at 6:22
$begingroup$
Thanks @Andrei for your answer. I know about the parfor loop, and in certain circumstances, I use vectorization rather than for loop in order to run faster (whenever possible). It is just that I think matlab is too heavy for my laptop. Besides, I don't know if C/C++ has the functions that I need.
$endgroup$
– mohd
Jan 8 at 6:25
$begingroup$
Thanks @Andrei for your answer. I know about the parfor loop, and in certain circumstances, I use vectorization rather than for loop in order to run faster (whenever possible). It is just that I think matlab is too heavy for my laptop. Besides, I don't know if C/C++ has the functions that I need.
$endgroup$
– mohd
Jan 8 at 6:25
1
1
$begingroup$
@mohd - If you are using either Windows or Mac, you may want to consider using a Linux Distro. I use Ubuntu primarily and I've found that Matlab (overall) performs much better in a Linux environment.
$endgroup$
– DavidG
Jan 8 at 6:31
$begingroup$
@mohd - If you are using either Windows or Mac, you may want to consider using a Linux Distro. I use Ubuntu primarily and I've found that Matlab (overall) performs much better in a Linux environment.
$endgroup$
– DavidG
Jan 8 at 6:31
1
1
$begingroup$
You can also use a lot of the C/C++ binders/wrappers in Python too. But as Andrei pointed out, it's still an interpretive language and as such will not be as efficient.
$endgroup$
– DavidG
Jan 8 at 6:36
$begingroup$
You can also use a lot of the C/C++ binders/wrappers in Python too. But as Andrei pointed out, it's still an interpretive language and as such will not be as efficient.
$endgroup$
– DavidG
Jan 8 at 6:36
add a comment |
Thanks for contributing an answer to Mathematics Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmath.stackexchange.com%2fquestions%2f3065859%2fbest-programming-language-for-solving-numerical-pdes%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown