PetscMatlabEngineEvaluate(mpc->mengine,"clc;  clear all;  close all;  
addpath([cd,'/MPC_matlab_code'])");

Undefined function or variable 'load_mpc_parameters'.

My guess is that the 'cd' may be different on the different machines, hence it 
does not do the addpath() you expect and hence cannot find the script 
load_mpc_parameters ?

In the branch I provided I have just now added more output messages if you run 
with the PETSc option -info that might indicate what is happening. So you can 
git pull; make libs and run again.


Barry




> On Nov 12, 2020, at 1:48 AM, Kaustubh Khedkar <[email protected]> wrote:
> 
> Hi Barry,
> I used the branch barry/2020-11-10/add-matlab-engine-host. Now it appears 
> that the matlab engine starts can start on any node but it is not able to 
> execute any matlab script. If I revert back to PETSc 3.13.5 the head compute 
> node is able to execute the MATLAB script. See the following error 
> (load_mpc_parameters.m is a MATLAB script that the code is trying to execute):
>  
>  
>  
> Starting Matlab engine...
>  
> Matlab engine started
> Storing variables in Matlab workspace...
>  
> Undefined function or variable 'load_mpc_parameters'.
> Error using save
> Variable 'a' not found.
> [0]PETSC ERROR: --------------------- Error Message 
> --------------------------------------------------------------
> [0]PETSC ERROR: Error in external library
> [0]PETSC ERROR: Unable to get array a from matlab
> [0]PETSC ERROR: See https://www.mcs.anl.gov/petsc/documentation/faq.html for 
> trouble shooting.
> [0]PETSC ERROR: Petsc Development GIT revision: unknown  GIT Date: unknown
> [0]PETSC ERROR: ./main3d on a linux-opt named node35 by kkhedkar Thu Nov 12 
> 02:39:47 2020
> [0]PETSC ERROR: Configure options 
> --CC=/home/kkhedkar/sfw/mpich3.3_mellanox/3.3/bin/mpicc 
> --CXX=/home/kkhedkar/sfw/mpich3.3_mellanox/3.3/bin/mpicxx 
> --FC=/home/kkhedkar/sfw/mpich3.3_mellanox/3.3/bin/mpif90 --COPTFLAGS=-O3 
> --CXXOPTFLAGS=-O3 --FOPTFLAGS=-O3 --PETSC_ARCH=linux-opt --with-debugging=0 
> --download-hypre=1 --with-x=0 --download-fblaslapack=1 
> --with-matlab-dir=/nas/app/MATLAB/matlab2019a/ --with-matlab-engine=1 
> --with-matlab-engine-dir=/nas/app/MATLAB/matlab2019a/extern/engines/
> [0]PETSC ERROR: #1 PetscMatlabEngineGetArray() line 407 in 
> /home/kkhedkar/sfw/petsc_matlab_host_fix/petsc/src/sys/classes/matlabengine/matlab.c
> Error using save
> Variable 'h' not found.
> [0]PETSC ERROR: #2 PetscMatlabEngineGetArray() line 407 in 
> /home/kkhedkar/sfw/petsc_matlab_host_fix/petsc/src/sys/classes/matlabengine/matlab.c
> Error using save
> Variable 'mpc_start_time' not found.
> [0]PETSC ERROR: #3 PetscMatlabEngineGetArray() line 407 in 
> /home/kkhedkar/sfw/petsc_matlab_host_fix/petsc/src/sys/classes/matlabengine/matlab.c
> Error using save
> Variable 'sample_size' not found.
>  
> sample_size = 0
> [0]PETSC ERROR: #4 PetscMatlabEngineGetArray() line 407 in 
> /home/kkhedkar/sfw/petsc_matlab_host_fix/petsc/src/sys/classes/matlabengine/matlab.c
> Error using save
> Variable 'dt_sampling' not found.
> Storing up past excitation force samples every 0 time-steps.
>  
> [0]PETSC ERROR: #5 PetscMatlabEngineGetArray() line 407 in 
> /home/kkhedkar/sfw/petsc_matlab_host_fix/petsc/src/sys/classes/matlabengine/matlab.c
> IBRedundantInitializer:  Deallocating initialization data.
>  
>  
> My code is using Petsc matlab engine in this way (“master” is the hostname of 
> the head node where MATLAB is licensed):
>  
> if(SAMRAI_MPI::getRank() == 0)
>         {
>             std::cout << "\nStarting Matlab engine...\n" << std::endl;
>             PetscMatlabEngineCreate(PETSC_COMM_SELF, "master", 
> &(mpc->mengine));
>             std::cout << "Matlab engine started" << std::endl; 
>             PetscMatlabEngineEvaluate(mpc->mengine,"clc;  clear all;  close 
> all;  addpath([cd,'/MPC_matlab_code'])");
>             
>             std::cout << "Storing variables in Matlab workspace...\n" << 
> std::endl;
>             PetscMatlabEngineEvaluate(mpc->mengine,"global hydro wave;   
> wave.H_wave = %f ;   wave.Tp = %f;  m = %f;", input_db->getDouble("HEIGHT"), 
> input_db->getDouble("TIME_PERIOD"), input_db->getDouble("MASS"));
>             
>             PetscMatlabEngineEvaluate(mpc->mengine,"load_mpc_parameters;   
> calculate_mpc_matrices");
>             
>             PetscMatlabEngineGetArray(mpc->mengine, 1, 1, 
> &(mpc->m_plus_Ainf), "a");
>             
>             PetscMatlabEngineGetArray(mpc->mengine, 1, 1, 
> &(mpc->dt_controller), "h");
>             
>             PetscMatlabEngineGetArray(mpc->mengine, 1, 1, 
> &(mpc->mpc_start_time), "mpc_start_time");
>             
>             PetscScalar sample_size;
>             PetscMatlabEngineGetArray(mpc->mengine, 1, 1, &sample_size, 
> "sample_size");
>             mpc->sample_size = int(sample_size);
>             std::cout << "\nsample_size = " << mpc->sample_size << std::endl;
>             
>             mpc->F_past.resize(mpc->sample_size);
>             mpc->t_past.resize(mpc->sample_size);
>             
>             double dt = input_db->getDouble("DT_MAX");
>             mpc->initial_position = input_db->getDouble("ZCOM");
>             mpc->current_position = mpc->initial_position;
>             
>             PetscScalar dt_sampling;
>             PetscMatlabEngineGetArray(mpc->mengine, 1, 1, &dt_sampling, 
> "dt_sampling");
>             
>             mpc->sampling_interval = int(dt_sampling / dt);
>             
>             std::cout << "Storing up past excitation force samples every " << 
> mpc->sampling_interval << " time-steps.\n" << std::endl;
>         }
>  
>  
>  
> From: Barry Smith <[email protected]>
> Date: Tuesday, November 10, 2020 at 5:22 PM
> To: Kaustubh Khedkar <[email protected]>
> Cc: "[email protected]" <[email protected]>
> Subject: Re: [petsc-users] Using Petsc-Matlab engine on a cluster
>  
>  
>    In the git branch  barry/2020-11-10/add-matlab-engine-host   I have added 
> the option -matlab_engine_host hostname 
>  
>    Note this does require you have ssh access to hostname from where your 
> PETSc program is running which may require setting up some ssh files
>  
>    Good luck
>  
>    Barry
>  
> 
> 
> On Nov 9, 2020, at 5:35 PM, Kaustubh Khedkar <[email protected] 
> <mailto:[email protected]>> wrote:
>  
> Hello,
> I am using PETSc with Matlab engine. I have built an application that uses 
> Matlab engine through PETSc interface. I am trying to run this application on 
> a cluster which has Matlab installed on a network drive (nas drive). I have 
> made sure that I am able to access Matlab using my university details on the 
> cluster (by activating Matlab license through Mathworks.com 
> <http://mathworks.com/> account). I am also able to run this application 
> using mpirun on the head node (master) which starts the Matlab engine but if 
> I try to run this application using slurm on compute node then the Matlab 
> engine does not start. I have also confirmed that if I login into one of the 
> compute nodes and do a mpirun the Matlab engine does not start there. If I 
> try to launch Matlab on a compute node it asks for Matlab license which the 
> compute node is unable to activate possibly because it is not connected to 
> the internet directly.
>  
> Is there a way start matlab engine on the head node through Petsc interface 
> even though the application is running on compute nodes or is there any other 
> work around this issue?
>  
>  
> Thanks,
> Kaustubh Khedkar
>  

Reply via email to