Changeset 12011
- Timestamp:
- 04/16/12 17:40:30 (13 years ago)
- Location:
- issm/trunk-jpl
- Files:
-
- 42 added
- 2 deleted
- 73 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/externalpackages/boost/install.sh
r11944 r12011 26 26 --with-python-root="$ISSM_TIER/externalpackages/python/install" 27 27 28 exit 29 28 30 #Compile boost 29 31 ./bjam install -
issm/trunk-jpl/src/c/Container/Options.h
r11861 r12011 15 15 /*constructors, destructors*/ 16 16 Options(); 17 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_) 18 Options(int istart, int nrhs, const mxArray* prhs[]); 19 #endif 17 Options(int istart, int nrhs, void* module_references); 20 18 ~Options(); 21 19 -
issm/trunk-jpl/src/c/Container/Results.cpp
r11861 r12011 65 65 /*}}}*/ 66 66 /*FUNCTION Results::Write{{{1*/ 67 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)68 void Results::Write(mxArray** pdataref){69 70 int i,j;71 int count;72 73 /*output: */74 mxArray* dataref=NULL;75 mxArray* processeddataref=NULL;76 mwSize nfields;77 mwSize maxfields;78 mwSize nsteps;79 mwSize step;80 const char **fnames = NULL;81 int *enums = NULL;82 int baseenum;83 mwSize onebyone[2] = {1,1};84 mwSize ndim = 2;85 86 /*How many time steps do we have? : */87 nsteps=0;88 for(i=0;i<this->Size();i++){89 ExternalResult* result=(ExternalResult*)this->GetObjectByOffset(i);90 step=result->GetStep();91 if(step>nsteps)nsteps=step;92 }93 onebyone[0]=nsteps;94 95 /*How many field names do we have. First, figure out how many result types we have: */96 maxfields=(mwSize)this->Size();97 enums=(int*)xmalloc(maxfields*sizeof(int));98 for(i=0;i<maxfields;i++){99 ExternalResult* result=(ExternalResult*)this->GetObjectByOffset(i);100 enums[i]=result->InstanceEnum();101 }102 /*Now, make result types unique: */103 for(i=0;i<maxfields;i++){104 if(enums[i]>=0){//if <0, it means this enum was found to replicate another one previously105 baseenum=enums[i];106 /*is the baseenum repeated later on?:*/107 for(j=i+1;j<maxfields;j++){108 if (enums[j]==baseenum)enums[j]=-1;109 }110 }111 else continue;112 }113 114 /*Now, go through enums, and whatever is not null is a non repeated field name: */115 nfields=0;116 for(i=0;i<maxfields;i++)if(enums[i]>0)nfields++;117 118 /*Add 2 fields for time and step: */119 nfields=nfields+2;120 121 /*Fill the names of the structure field: */122 fnames=(const char**)xmalloc(nfields*sizeof(char*));123 count=0;124 for(i=0;i<maxfields;i++){125 if (enums[i]>0){126 fnames[count]=EnumToStringx(enums[i]);127 count++;128 }129 }130 /*don't forget the extra fields "time" and "step":*/131 fnames[nfields-2]="time";132 fnames[nfields-1]="step";133 134 /*Initialize structure: */135 dataref=mxCreateStructArray( ndim,onebyone,nfields,fnames);136 137 /*Fill each field: */138 for(i=0;i<this->Size();i++){ //do not include the last one used for time139 ExternalResult* result=(ExternalResult*)this->GetObjectByOffset(i);140 result->SetMatlabField(dataref);141 }142 143 /*Now, process the patch in the dataref structure, by calling MatlabProcessPatch.m144 *on the current dataref structure: */145 mexCallMATLAB(1,&processeddataref,1,&dataref, "MatlabProcessPatch");146 147 /*Assign output pointers:*/148 *pdataref=processeddataref;149 }150 #else151 67 void Results::Write(Parameters* parameters){ 152 68 … … 167 83 168 84 } 169 #endif170 85 /*}}}*/ -
issm/trunk-jpl/src/c/Container/Results.h
r11861 r12011 26 26 /*numerics: {{{1*/ 27 27 Results* SpawnTriaResults(int* indices); 28 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)29 void Write(mxArray** pdataref);30 #else31 28 void Write(Parameters* parameters); 32 #endif33 29 /*}}}*/ 34 30 }; -
issm/trunk-jpl/src/c/Makefile.am
r11980 r12011 4 4 5 5 #Library declaration {{{1 6 #Compile serial library, and then try and compile parallel library 7 if NOSERIAL 8 if NOPARALLEL 9 lib_LIBRARIES = 10 else 11 lib_LIBRARIES = libpISSM.a libOverload.a 12 endif 13 else 14 if NOPARALLEL 15 lib_LIBRARIES = libISSM.a libOverload.a 16 else 17 lib_LIBRARIES = libISSM.a libpISSM.a libOverload.a 18 endif 6 lib_LIBRARIES = libISSMCore.a libISSMModules.a libISSMOverload.a 7 if PYTHON 8 lib_LIBRARIES += libISSMPython.a 9 endif 10 if MATLAB 11 lib_LIBRARIES += libISSMMatlab.a 19 12 endif 20 13 #}}} … … 362 355 ./modules/AverageOntoPartitionx/AverageOntoPartitionx.cpp\ 363 356 ./modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp\ 364 ./modules/AverageOntoPartitionx/AverageOntoPartitionx.h 365 dakota_psources=./modules/Dakotax/SpawnCoreParallel.cpp357 ./modules/AverageOntoPartitionx/AverageOntoPartitionx.h\ 358 ./modules/Dakotax/SpawnCoreParallel.cpp 366 359 #}}} 367 360 #Transient sources {{{1 … … 443 436 ./objects/Inputs/ControlInput.cpp\ 444 437 ./shared/Numerics/BrentSearch.cpp\ 445 ./shared/Numerics/OptimalSearch.cpp\ 446 ./shared/Numerics/OptFunc.cpp 438 ./shared/Numerics/OptimalSearch.cpp 447 439 448 440 control_psources=./solutions/control_core.cpp\ … … 694 686 ./objects/KML/KMLFileReadUtils.h 695 687 #}}} 696 #Matlab sources {{{1697 matlab_sources= ./toolkits/matlab/matlabincludes.h\698 ./toolkits/matlab/MatlabNArrayToNArray.cpp\699 ./toolkits/double/MatlabVectorToDoubleVector.cpp\700 ./toolkits/double/double.h\701 ./toolkits/double/MatlabMatrixToDoubleMatrix.cpp\702 ./io/Matlab/matlabio.h\703 ./io/Matlab/CheckNumMatlabArguments.cpp\704 ./io/Matlab/mxGetAssignedField.cpp\705 ./io/Matlab/WriteMatlabData.cpp\706 ./io/Matlab/FetchMatlabData.cpp\707 ./io/Matlab/OptionParse.cpp708 #}}}709 #Python sources {{{1710 python_sources= ./io/Python/pythonio.h\711 ./io/Python/WritePythonData.cpp\712 ./io/Python/CheckNumPythonArguments.cpp\713 ./io/Python/FetchPythonData.cpp714 #}}}715 688 #Petsc sources {{{1 716 689 petsc_sources= ./toolkits/petsc\ … … 718 691 ./toolkits/petsc/patches/SolverEnum.h\ 719 692 ./toolkits/petsc/patches/petscpatches.h\ 720 ./toolkits/petsc/patches/MatlabMatrixToPetscMatrix.cpp\721 ./toolkits/petsc/patches/MatlabVectorToPetscVector.cpp\722 ./toolkits/petsc/patches/PetscMatrixToMatlabMatrix.cpp\723 ./toolkits/petsc/patches/PetscVectorToMatlabVector.cpp\724 693 ./toolkits/petsc/patches/VecTranspose.cpp\ 725 694 ./toolkits/petsc/patches/VecToMPISerial.cpp\ … … 754 723 755 724 #}}} 756 #Serialsources {{{1 757 serial_sources= ./objects/Options/Option.cpp\ 725 #Python sources {{{1 726 python_sources= ./python/io/pythonio.h\ 727 ./python/io/WritePythonData.cpp\ 728 ./python/io/CheckNumPythonArguments.cpp\ 729 ./python/io/FetchPythonData.cpp\ 730 ./python/objects/Bamg/BamgGeom.h\ 731 ./python/objects/Bamg/BamgGeom.cpp\ 732 ./python/objects/Bamg/BamgMesh.h\ 733 ./python/objects/Bamg/BamgMesh.cpp\ 734 ./python/objects/Bamg/BamgOpts.h\ 735 ./python/objects/Bamg/BamgOpts.cpp 736 737 #}}} 738 #Matlab sources {{{1 739 matlab_sources= ./toolkits/matlab/matlabincludes.h\ 740 ./matlab/io/matlabio.h\ 741 ./matlab/io/MatlabNArrayToNArray.cpp\ 742 ./matlab/io/CheckNumMatlabArguments.cpp\ 743 ./matlab/io/mxGetAssignedField.cpp\ 744 ./matlab/io/WriteMatlabData.cpp\ 745 ./matlab/io/FetchMatlabData.cpp\ 746 ./matlab/io/OptionParse.cpp\ 747 ./matlab/io/MatlabMatrixToMatrix.cpp\ 748 ./matlab/io/MatlabVectorToVector.cpp\ 749 ./matlab/io/MatlabVectorToDoubleVector.cpp\ 750 ./matlab/io/MatlabMatrixToDoubleMatrix.cpp\ 751 ./matlab/io/Container/Options.cpp\ 752 ./matlab/objects/Bamg/BamgGeom.h\ 753 ./matlab/objects/Bamg/BamgGeom.cpp\ 754 ./matlab/objects/Bamg/BamgMesh.h\ 755 ./matlab/objects/Bamg/BamgMesh.cpp\ 756 ./matlab/objects/Bamg/BamgOpts.h\ 757 ./matlab/objects/Bamg/BamgOpts.cpp\ 758 ./matlab/io/MatlabMatrixToPetscMatrix.cpp\ 759 ./matlab/io/MatlabVectorToPetscVector.cpp\ 760 ./matlab/io/PetscMatrixToDoubleMatrix.cpp\ 761 ./matlab/io/PetscVectorToDoubleVector.cpp\ 762 ./matlab/io/MatlabMatrixToSeqMat.cpp\ 763 ./matlab/io/MatlabVectorToSeqVec.cpp 764 #}}} 765 #Modules sources{{{1 766 module_sources= ./objects/Options/Option.cpp\ 758 767 ./objects/Options/Option.h\ 759 768 ./objects/Options/OptionDouble.cpp\ … … 769 778 ./objects/Options/OptionUtilities.cpp\ 770 779 ./objects/Options/OptionUtilities.h\ 780 ./shared/Alloc/alloc_module.h\ 781 ./shared/Alloc/alloc_module.cpp\ 771 782 ./shared/Threads/issm_threads.h\ 772 783 ./shared/Threads/LaunchThread.cpp\ … … 790 801 ./modules/Chacox/chaco_seconds.cpp\ 791 802 ./modules/Chacox/user_params.cpp\ 792 ./modules/Dakotax/SpawnCoreSerial.cpp\793 803 ./modules/TriaSearchx/TriaSearchx.h\ 794 804 ./modules/TriaSearchx/TriaSearchx.cpp\ … … 841 851 #}}} 842 852 853 #{{{1 Conditional build-up of sources 843 854 #ISSM sources are a combination of core sources and sources related to specific capabilities (which can 844 855 #be activated by autotools conditionals 845 #{{{1 856 846 857 847 858 #First the core 848 859 issm_sources = $(core_sources) 849 issm_psources =850 860 851 861 #Now the optional source 852 862 if DAKOTA 853 863 issm_sources += $(dakota_sources) 854 issm_psources += $(dakota_psources)855 864 endif 856 865 857 866 if PETSC 858 867 issm_sources += $(petsc_sources) 859 issm_psources += $(petsc_psources)860 868 endif 861 869 862 870 if GSL 863 871 issm_sources += $(gsl_sources) 864 issm_psources += $(gsl_psources) 865 endif 866 872 endif 867 873 868 874 if TRANSIENT 869 875 issm_sources += $(transient_sources) 870 issm_psources += $(transient_psources)871 876 endif 872 877 873 878 if STEADYSTATE 874 879 issm_sources += $(steadystate_sources) 875 issm_psources += $(steadystate_psources)876 880 endif 877 881 878 882 if PROGNOSTIC 879 883 issm_sources += $(prognostic_sources) 880 issm_psources += $(prognostic_psources)881 884 endif 882 885 883 886 if THERMAL 884 887 issm_sources += $(thermal_sources) 885 issm_psources += $(thermal_psources)886 888 endif 887 889 888 890 if CONTROL 889 891 issm_sources += $(control_sources) 890 issm_psources += $(control_psources)891 892 endif 892 893 893 894 if HYDROLOGY 894 895 issm_sources += $(hydrology_sources) 895 issm_psources += $(hydrology_psources)896 896 endif 897 897 898 898 if DIAGNOSTIC 899 899 issm_sources += $(diagnostic_sources) 900 issm_psources += $(diagnostic_psources)901 900 endif 902 901 903 902 if BALANCED 904 903 issm_sources += $(balanced_sources) 905 issm_psources += $(balanced_psources)906 904 endif 907 905 … … 912 910 if SLOPE 913 911 issm_sources += $(slope_sources) 914 issm_psources += $(slope_psources)915 912 endif 916 913 … … 927 924 endif 928 925 #}}} 929 930 #ISSM serial library {{{1 931 if SERIAL 932 libISSM_a_SOURCES = $(issm_sources) 933 libISSM_a_SOURCES += $(serial_sources) 934 libISSM_a_SOURCES += $(bamg_sources) 935 libISSM_a_SOURCES += $(kml_sources) 936 libISSM_a_CXXFLAGS = -fPIC -D_SERIAL_ -D_GNU_SOURCE -fno-omit-frame-pointer -pthread -D_CPP_ $(CXXFLAGS) $(CXXOPTFLAGS) 937 #libISSM_a_CXXFLAGS = -D_SERIAL_ -DTRILIBRARY -DANSI_DECLARATORS -DNO_TIMER $(CXXFLAGS) $(CXXOPTFLAGS) 926 #Library flags and sources {{{1 927 ALLCXXFLAGS= -fPIC -D_GNU_SOURCE -fno-omit-frame-pointer -pthread -D_CPP_ $(CXXFLAGS) $(CXXOPTFLAGS) 928 929 libISSMCore_a_SOURCES = $(issm_sources) 930 libISSMCore_a_CXXFLAGS = $(ALLCXXFLAGS) 931 932 libISSMModules_a_SOURCES = $(module_sources) 933 libISSMModules_a_SOURCES += $(bamg_sources) 934 libISSMModules_a_SOURCES += $(kml_sources) 935 libISSMModules_a_CXXFLAGS = $(ALLCXXFLAGS) 938 936 939 937 if PYTHON 940 libISSM_a_CXXFLAGS+= -DNPY_NO_DEPRECATED_API 941 libISSM_a_SOURCES += $(python_sources) 938 libISSMPython_a_SOURCES = $(python_sources) 939 libISSMPython_a_CXXFLAGS= $(ALLCXXFLAGS) 940 libISSMPython_a_CXXFLAGS+= -DNPY_NO_DEPRECATED_API 942 941 endif 943 942 944 943 if MATLAB 945 libISSM_a_SOURCES += $(matlab_sources) 946 endif 947 948 endif 949 #}}} 950 #ISSM parallel library {{{1 951 if PARALLEL 952 libpISSM_a_SOURCES = $(issm_sources) 953 libpISSM_a_SOURCES += $(issm_psources) 954 libpISSM_a_CXXFLAGS = -fPIC -D_PARALLEL_ -D_C_ $(CXXFLAGS) $(CXXOPTFLAGS) 955 endif 944 libISSMMatlab_a_SOURCES = $(matlab_sources) 945 libISSMMatlab_a_CXXFLAGS= $(ALLCXXFLAGS) 946 endif 947 956 948 #}}} 957 949 #Overload library, to overload any non-standard symbols. {{{1 958 lib Overload_a_SOURCES = ./shared/String/stricmp.c959 lib Overload_a_CFLAGS = -fPIC -D_PARALLEL_-D_C_ $(COPTFLAGS) $(CFLAGS)950 libISSMOverload_a_SOURCES = ./shared/String/stricmp.c 951 libISSMOverload_a_CFLAGS = -fPIC -D_C_ $(COPTFLAGS) $(CFLAGS) 960 952 #}}} 961 953 962 954 #Executable {{{1 963 if NOPARALLEL964 bin_PROGRAMS =965 else966 955 bin_PROGRAMS = issm 967 endif968 956 969 957 #Standard libraries 970 LDADD = ./lib pISSM.a ./libOverload.a958 LDADD = ./libISSMCore.a ./libISSMOverload.a 971 959 972 960 #External packages … … 974 962 975 963 issm_SOURCES = solutions/issm.cpp 976 issm_CXXFLAGS= -fPIC -D_PARALLEL_$(CXXFLAGS) $(CXXOPTFLAGS) $(COPTFLAGS)964 issm_CXXFLAGS= -fPIC $(CXXFLAGS) $(CXXOPTFLAGS) $(COPTFLAGS) 977 965 #}}} 978 966 #Automatic differentiation: append this fold to the end of the src/c/Makefile.am to get this Makefile.am {{{ 979 967 if ADIC2 980 lib_LIBRARIES += libAD.a lib pISSMRose.a968 lib_LIBRARIES += libAD.a libISSMRose.a 981 969 982 970 #ADIC2 library, for automatic differentiation 983 971 #libAD_a_SOURCES = ./mini1.ad.c 984 972 libAD_a_SOURCES = 985 libAD_a_CFLAGS = -fPIC -D_PARALLEL_ -D_C_ $(COPTFLAGS) 986 973 libAD_a_CFLAGS = -fPIC -D_C_ $(COPTFLAGS) 987 974 988 975 … … 990 977 %.r2cpp.cpp : %.cpp 991 978 testTranslator -rose:o $@ -rose:skipfinalCompileStep -DHAVE_CONFIG_H -D_PARALLEL_ -D_C_ -I. -I../.. $(INCLUDES) $< 992 lib pISSMRose_a_SOURCES = $(libpISSM_a_SOURCES:.cpp=.r2cpp.cpp)993 lib pISSMRose_a_CXXFLAGS= -fPIC -D_PARALLEL_-D_C_ $(CXXOPTFLAGS)979 libISSMRose_a_SOURCES = $(libISSMCore_a_SOURCES:.cpp=.r2cpp.cpp) 980 libISSMRose_a_CXXFLAGS= -fPIC -D_C_ $(CXXOPTFLAGS) 994 981 995 982 … … 1003 990 #Executable 1004 991 bin_PROGRAMS += issmRose.exe 1005 issmRose_exe_LDADD = ./lib pISSMRose.a $(LDADD)992 issmRose_exe_LDADD = ./libISSMRose.a $(LDADD) 1006 993 issmRose_exe_SOURCES = solutions/issm.cpp 1007 issmRose_exe_CXXFLAGS= -fPIC -D_PARALLEL_$(CXXOPTFLAGS) $(COPTFLAGS)994 issmRose_exe_CXXFLAGS= -fPIC $(CXXOPTFLAGS) $(COPTFLAGS) 1008 995 LDADD += $(ADIC2LIB) 1009 996 -
issm/trunk-jpl/src/c/include/macros.h
r11974 r12011 48 48 49 49 #ifdef _SERIAL_ 50 #ifdef _HAVE_MATLAB_ //{{{251 #define MODULEBOOT(); ModuleBoot(); \52 try{53 54 #define MODULEEND(); ModuleEnd(); }\55 catch(ErrorException &exception){\56 exception.Report(); \57 mexErrMsgTxt(""); \58 }\59 catch (exception& e) {\60 _printf_(true,"Standard exception: %s\n",e.what());\61 mexErrMsgTxt(" ");\62 }63 #endif //}}}64 50 #ifdef _HAVE_PYTHON_ //{{{2 65 51 #define MODULEBOOT(); ModuleBoot(); \ … … 87 73 /*}}}*/ 88 74 /* WRAPPER {{{1*/ 89 #ifdef _HAVE_MATLAB_90 #define WRAPPER(modulename,...) void mexFunction(int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[])91 #endif92 75 #ifdef _HAVE_PYTHON_ 93 76 #define WRAPPER(modulename,...) \ … … 120 103 /*}}}*/ 121 104 /* CHECKARGUMENTS {{{1*/ 122 #ifdef _HAVE_MATLAB_123 #define CHECKARGUMENTS(NLHS,NRHS,functionpointer) CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,functionpointer)124 #endif125 105 #ifdef _HAVE_PYTHON_ 126 106 #define CHECKARGUMENTS(NLHS,NRHS,functionpointer) CheckNumPythonArguments(args, NRHS,functionpointer) … … 128 108 /*}}}*/ 129 109 130 131 110 #endif -
issm/trunk-jpl/src/c/include/types.h
r11861 r12011 16 16 17 17 /*Define abstract type for I/O: */ 18 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)19 #include <mex.h>20 typedef const mxArray* ConstDataHandle; //serially, we are reading data from a matlab array.21 typedef mxArray* DataHandle;22 #else23 typedef FILE* ConstDataHandle; //in parallel, we are reading data from a file.24 typedef FILE* DataHandle;25 #endif26 18 enum param_type { STRING, INTEGER, STRINGARRAY, DOUBLE, DOUBLEVEC, DOUBLEMAT, PETSCVEC, PETSCMAT }; 27 19 -
issm/trunk-jpl/src/c/modules/Dakotax/Dakotax.cpp
r11951 r12011 51 51 #endif 52 52 53 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)54 void Dakotax(mxArray* femmodel){55 #else56 53 void Dakotax(FemModel* femmodel){ 57 #endif58 54 59 55 … … 69 65 70 66 /*Retrieve parameters: */ 71 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)72 FetchData((Parameters**)¶meters,mxGetField((mxArray*)femmodel,0,"parameters"));73 #else74 67 parameters=femmodel->parameters; 75 #endif76 68 77 69 /*Recover dakota_input_file, dakota_output_file and dakota_error_file, in the parameters dataset in parallel */ … … 86 78 // Instantiate/initialize the parallel library and problem description 87 79 // database objects. 88 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_) 89 Dakota::ParallelLibrary parallel_lib; //use Dakota's standard library mode constructor 90 #else 91 Dakota::ParallelLibrary parallel_lib("serial"); //use our own ISSM Dakota library mode constructor, which only fires up Dakota on CPU 0. 92 #endif 80 Dakota::ParallelLibrary parallel_lib("serial"); //use our own ISSM Dakota library mode constructor, which only fires up Dakota on CPU 0. 93 81 Dakota::ProblemDescDB problem_db(parallel_lib); 94 82 … … 143 131 xfree((void**)&dakota_output_file); 144 132 145 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)146 delete parameters;147 #endif148 149 133 #endif //#ifdef _HAVE_DAKOTA_ 150 134 } -
issm/trunk-jpl/src/c/modules/Dakotax/Dakotax.h
r11861 r12011 10 10 11 11 /* local prototypes: */ 12 int SpawnCore(double* responses, int numresponses, double* variables, char** variables_descriptors,int numvariables, void* femmodel,int counter);12 int SpawnCore(double* responses, int numresponses, double* variables, char** variables_descriptors,int numvariables, void* femmodel,int counter); 13 13 int DescriptorIndex(char* root, int* pindex,char* descriptor); 14 14 15 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)16 void Dakotax(mxArray* femmodel);17 void SpawnCoreSerial(double* responses, int numresponses, double* variables, char** variables_descriptors,int numvariables, mxArray* femmodel,int counter);18 #else19 15 void Dakotax(FemModel* femmodel); 20 16 void SpawnCoreParallel(double* responses, int numresponses, double* variables, char** variables_descriptors,int numvariables, FemModel* femmodel,int counter); 21 #endif22 17 void DakotaResponses(double* responses,char** responses_descriptors,int numresponses,FemModel* femmodel); 23 18 void DakotaMPI_Bcast(double** pvariables, char*** pvariables_descriptors,int* pnumvariables, int* pnumresponses); -
issm/trunk-jpl/src/c/modules/Dakotax/SpawnCore.cpp
r11861 r12011 21 21 /*Branch into a serial SpawnCore and a parallel SpawnCore: */ 22 22 23 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_) 24 SpawnCoreSerial(responses, numresponses, variables, variables_descriptors,numvariables, (mxArray*)femmodel, counter); 25 #else 26 /*Call SpawnCoreParallel unless counter=-1 on cpu0, in which case, bail out and return 0: */ 27 MPI_Bcast(&counter,1,MPI_INT,0,MPI_COMM_WORLD); 28 if(counter==-1)return 0; 29 SpawnCoreParallel(responses, numresponses, variables, variables_descriptors,numvariables, (FemModel*)femmodel,counter); 30 #endif 23 /*Call SpawnCoreParallel unless counter=-1 on cpu0, in which case, bail out and return 0: */ 24 MPI_Bcast(&counter,1,MPI_INT,0,MPI_COMM_WORLD); 25 if(counter==-1)return 0; 26 27 SpawnCoreParallel(responses, numresponses, variables, variables_descriptors,numvariables, (FemModel*)femmodel,counter); 31 28 return 1; 32 29 } -
issm/trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp
r11922 r12011 16 16 #include "../../objects/objects.h" 17 17 18 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)19 void OutputResultsx(mxArray** pdataref, Elements* elements, Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,Results* results){20 #else21 18 void OutputResultsx( Elements* elements, Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,Results* results){ 22 #endif23 19 24 20 extern int my_rank; … … 31 27 bool dakota_analysis = false; 32 28 33 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)34 const char **fnames = NULL;35 mwSize onebyone[2] = {0,0};36 mwSize ndim = 2;37 int nfields=0;38 #endif39 40 29 /*retrieve parameters: */ 41 30 parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum); … … 43 32 if(dakota_analysis){ 44 33 //no need to output anything, Dakota analysis has different outputs 45 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)46 *pdataref=mxCreateStructArray( ndim,onebyone,nfields,fnames);47 #endif48 34 return; 49 35 } … … 56 42 /*Results do not include the type of solution being run . In parallel, we output results to a filename, 57 43 *therefore, we need to include the solutiontype into the filename: */ 58 #ifdef _PARALLEL_59 44 if(my_rank==0){ 60 45 parameters->FindParam(&solutiontype,SolutionTypeEnum); … … 88 73 parameters->SetParam(fid,OutputFilePointerEnum); 89 74 } 90 #endif91 75 92 /*Write results to disk (in parallel), or to memory (in serial mode): */ 93 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_) 94 results->Write(pdataref); 95 #else 96 results->Write(parameters); 97 #endif 76 /*Write results to disk: */ 77 results->Write(parameters); 98 78 99 79 /*Delete and reinitialize results, in parallel: */ 100 #ifdef _PARALLEL_ 101 results->clear(); 80 results->clear(); 102 81 103 /*Close output file? :*/ 104 /*WARNING: issm.cpp is taking care of it for now (quick fix) 105 if((step==1) && (time==0)){ 106 if(io_gather){ 107 if(my_rank==0) pfclose(fid,outputfilename); 108 } 109 else pfclose(fid,cpu_outputfilename); 110 } 111 */ 112 #endif 82 /*Close output file? :*/ 83 /*WARNING: issm.cpp is taking care of it for now (quick fix) 84 if((step==1) && (time==0)){ 85 if(io_gather){ 86 if(my_rank==0) pfclose(fid,outputfilename); 87 } 88 else pfclose(fid,cpu_outputfilename); 89 } 90 */ 113 91 } -
issm/trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.h
r11861 r12011 14 14 #include "../../Container/Container.h" 15 15 16 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)17 #include <mex.h>18 void OutputResultsx(mxArray** pdataref, Elements* elements, Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, Results* results);19 #else20 16 void OutputResultsx(Elements* elements, Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, Results* results); 21 #endif22 17 23 18 #endif /* _OUTPUTRESULTS_H */ -
issm/trunk-jpl/src/c/objects/Bamg/BamgGeom.cpp
r11936 r12011 19 19 } 20 20 /*}}}*/ 21 /*FUNCTION BamgGeom::BamgGeom(mxArray* matlab_struct){{{1*/22 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)23 BamgGeom::BamgGeom(mxArray* matlab_struct){24 25 FetchData(&this->Vertices, &this->VerticesSize[0], &this->VerticesSize[1], mxGetAssignedField(matlab_struct,0,"Vertices"));26 FetchData(&this->Edges, &this->EdgesSize[0], &this->EdgesSize[1], mxGetAssignedField(matlab_struct,0,"Edges"));27 this->TangentAtEdgesSize[0]=0, this->TangentAtEdgesSize[1]=0; this->TangentAtEdges=NULL;28 FetchData(&this->Corners, &this->CornersSize[0], &this->CornersSize[1], mxGetAssignedField(matlab_struct,0,"Corners"));29 FetchData(&this->RequiredVertices,&this->RequiredVerticesSize[0],&this->RequiredVerticesSize[1],mxGetAssignedField(matlab_struct,0,"RequiredVertices"));30 FetchData(&this->RequiredEdges, &this->RequiredEdgesSize[0], &this->RequiredEdgesSize[1], mxGetAssignedField(matlab_struct,0,"RequiredEdges"));31 FetchData(&this->CrackedEdges, &this->CrackedEdgesSize[0], &this->CrackedEdgesSize[1], mxGetAssignedField(matlab_struct,0,"CrackedEdges"));32 FetchData(&this->SubDomains, &this->SubDomainsSize[0], &this->SubDomainsSize[1], mxGetAssignedField(matlab_struct,0,"SubDomains"));33 34 }35 #endif36 /*}}}*/37 21 /*FUNCTION BamgGeom::~BamgGeom(){{{1*/ 38 22 BamgGeom::~BamgGeom(){ … … 49 33 } 50 34 /*}}}*/ 51 52 /*Methods*/53 /*FUNCTION BamgGeom::SetMatlabStructureFields{{{1*/54 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)55 void BamgGeom::SetMatlabStructureFields(mxArray** matlab_struct){56 57 /*Intermediary*/58 int i;59 mxArray* output=NULL;60 const int numfields=7;61 const char* fnames[numfields];62 mwSize ndim=2;63 mwSize dimensions[2]={1,1};64 65 /*Initialize field names*/66 i=0;67 fnames[i++] = "Vertices";68 fnames[i++] = "Edges";69 fnames[i++] = "TangentAtEdges";70 fnames[i++] = "RequiredVertices";71 fnames[i++] = "RequiredEdges";72 fnames[i++] = "CrackedEdges";73 fnames[i++] = "SubDomains";74 _assert_(i==numfields);75 76 /*Initialize Matlab structure*/77 output=mxCreateStructArray(ndim,dimensions,numfields,fnames);78 79 /*set each matlab each field*/80 i=0;81 i++; SetMatlabStructureField(output,"Vertices", this->VerticesSize[0], this->VerticesSize[1], this->Vertices);82 i++; SetMatlabStructureField(output,"Edges", this->EdgesSize[0], this->EdgesSize[1], this->Edges);83 i++; SetMatlabStructureField(output,"TangentAtEdges", this->TangentAtEdgesSize[0], this->TangentAtEdgesSize[1], this->TangentAtEdges);84 i++; SetMatlabStructureField(output,"RequiredVertices",this->RequiredVerticesSize[0],this->RequiredVerticesSize[1],this->RequiredVertices);85 i++; SetMatlabStructureField(output,"RequiredEdges", this->RequiredEdgesSize[0], this->RequiredEdgesSize[1], this->RequiredEdges);86 i++; SetMatlabStructureField(output,"CrackedEdges", this->CrackedEdgesSize[0], this->CrackedEdgesSize[1], this->CrackedEdges);87 i++; SetMatlabStructureField(output,"SubDomains", this->SubDomainsSize[0], this->SubDomainsSize[1], this->SubDomains);88 _assert_(i==numfields);89 90 /*Assign output*/91 *matlab_struct=output;92 93 }94 #endif95 /*}}}*/96 /*FUNCTION BamgGeom::SetMatlabStructureField{{{1*/97 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)98 void BamgGeom::SetMatlabStructureField(mxArray* matlab_struct,const char* fieldname,int fieldrows,int fieldcols,double* fieldpointer){99 100 /*Intermediary*/101 int i1,i2;102 mxArray* pfield=NULL;103 mxArray* pfield2=NULL;104 105 /*Copy field*/106 double* fieldcopy=NULL;107 if (fieldrows*fieldcols){108 fieldcopy=(double*)xmalloc(fieldrows*fieldcols*sizeof(double));109 for(i1=0;i1<fieldrows;i1++){110 for(i2=0;i2<fieldcols;i2++){111 fieldcopy[fieldcols*i1+i2]=fieldpointer[fieldcols*i1+i2];112 }113 }114 }115 116 /*Set matlab field*/117 pfield=mxCreateDoubleMatrix(0,0,mxREAL);118 mxSetM(pfield,fieldcols);119 mxSetN(pfield,fieldrows);120 mxSetPr(pfield,fieldcopy);121 mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose122 mxSetField(matlab_struct,0,fieldname,pfield2);123 }124 #endif125 /*}}}*/ -
issm/trunk-jpl/src/c/objects/Bamg/BamgGeom.h
r11861 r12011 4 4 #ifndef _BAMGGEOM_H_ 5 5 #define _BAMGGEOM_H_ 6 7 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)8 #include <mex.h>9 #endif10 6 11 7 class BamgGeom{ … … 30 26 31 27 BamgGeom(); 32 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_) 33 BamgGeom(mxArray* matlab_struct); 34 #endif 28 BamgGeom(void* module_struct); 35 29 ~BamgGeom(); 36 30 37 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_) 38 void SetMatlabStructureFields(mxArray** matlab_struct); 39 void SetMatlabStructureField(mxArray* matlab_struct,const char* fieldname,int fieldrows,int fieldcols,double* fieldpointer); 40 #endif 31 void SetStructureFields(void* matlab_struct); 32 void SetStructureField(void* matlab_struct,const char* fieldname,int fieldrows,int fieldcols,double* fieldpointer); 41 33 }; 42 34 -
issm/trunk-jpl/src/c/objects/Bamg/BamgMesh.cpp
r11936 r12011 32 32 } 33 33 /*}}}*/ 34 /*FUNCTION BamgMesh::BamgMesh(mxArray* matlab_struct){{{1*/35 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)36 BamgMesh::BamgMesh(mxArray* matlab_struct){37 38 int lines,cols;39 40 FetchData(&this->Vertices, &this->VerticesSize[0], &this->VerticesSize[1], mxGetAssignedField(matlab_struct,0,"Vertices"));41 FetchData(&this->Edges, &this->EdgesSize[0], &this->EdgesSize[1], mxGetAssignedField(matlab_struct,0,"Edges"));42 FetchData(&this->Triangles, &this->TrianglesSize[0], &this->TrianglesSize[1], mxGetAssignedField(matlab_struct,0,"Triangles"));43 this->QuadrilateralsSize[0]=0, this->QuadrilateralsSize[1]=0; this->Quadrilaterals=NULL;44 45 this->SubDomainsSize[0]=0, this->SubDomainsSize[1]=0; this->SubDomains=NULL;46 this->SubDomainsFromGeomSize[0]=0, this->SubDomainsFromGeomSize[1]=0; this->SubDomainsFromGeom=NULL;47 this->CrackedVerticesSize[0]=0, this->CrackedVerticesSize[1]=0; this->CrackedVertices=NULL;48 FetchData(&this->CrackedEdges, &this->CrackedEdgesSize[0], &this->CrackedEdgesSize[1], mxGetAssignedField(matlab_struct,0,"CrackedEdges"));49 50 FetchData(&this->VerticesOnGeomEdge, &this->VerticesOnGeomEdgeSize[0], &this->VerticesOnGeomEdgeSize[1], mxGetAssignedField(matlab_struct,0,"VerticesOnGeomEdge"));51 FetchData(&this->VerticesOnGeomVertex,&this->VerticesOnGeomVertexSize[0],&this->VerticesOnGeomVertexSize[1],mxGetAssignedField(matlab_struct,0,"VerticesOnGeomVertex"));52 FetchData(&this->EdgesOnGeomEdge, &this->EdgesOnGeomEdgeSize[0], &this->EdgesOnGeomEdgeSize[1], mxGetAssignedField(matlab_struct,0,"EdgesOnGeomEdge"));53 54 this->IssmEdgesSize[0]=0, this->IssmEdgesSize[1]=0; this->IssmEdges=NULL;55 FetchData(&this->IssmSegments, &this->IssmSegmentsSize[0], &this->IssmSegmentsSize[1], mxGetAssignedField(matlab_struct,0,"IssmSegments"));56 57 this->ElementConnectivitySize[0]=0, this->ElementConnectivitySize[1]=0; this->ElementConnectivity=NULL;58 this->NodalConnectivitySize[0]=0, this->NodalConnectivitySize[1]=0; this->NodalConnectivity=NULL;59 this->NodalElementConnectivitySize[0]=0, this->NodalElementConnectivitySize[1]=0; this->NodalElementConnectivity=NULL;60 61 }62 #endif63 /*}}}*/64 34 /*FUNCTION BamgMesh::~BamgMesh(){{{1*/ 65 35 BamgMesh::~BamgMesh(){ … … 89 59 } 90 60 /*}}}*/ 91 92 /*Methods*/93 /*FUNCTION BamgMesh::SetMatlabStructureFields{{{1*/94 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)95 void BamgMesh::SetMatlabStructureFields(mxArray** matlab_struct){96 97 /*Intermediary*/98 int i;99 mxArray* output=NULL;100 const int numfields=16;101 const char* fnames[numfields];102 mwSize ndim=2;103 mwSize dimensions[2]={1,1};104 105 /*Initialize field names*/106 i=0;107 fnames[i++] = "Triangles";108 fnames[i++] = "Vertices";109 fnames[i++] = "Edges";110 fnames[i++] = "IssmSegments";111 fnames[i++] = "IssmEdges";112 fnames[i++] = "Quadrilaterals";113 fnames[i++] = "VerticesOnGeomVertex";114 fnames[i++] = "VerticesOnGeomEdge";115 fnames[i++] = "EdgesOnGeomEdge";116 fnames[i++] = "SubDomains";117 fnames[i++] = "SubDomainsFromGeom";118 fnames[i++] = "ElementConnectivity";119 fnames[i++] = "NodalConnectivity";120 fnames[i++] = "NodalElementConnectivity";121 fnames[i++] = "CrackedVertices";122 fnames[i++] = "CrackedEdges";123 _assert_(i==numfields);124 125 /*Initialize Matlab structure*/126 output=mxCreateStructArray(ndim,dimensions,numfields,fnames);127 128 /*set each matlab each field*/129 i=0;130 i++; SetMatlabStructureField(output,"Triangles", this->TrianglesSize[0], this->TrianglesSize[1], this->Triangles);131 i++; SetMatlabStructureField(output,"Vertices", this->VerticesSize[0], this->VerticesSize[1], this->Vertices);132 i++; SetMatlabStructureField(output,"Edges", this->EdgesSize[0], this->EdgesSize[1], this->Edges);133 i++; SetMatlabStructureField(output,"IssmSegments", this->IssmSegmentsSize[0], this->IssmSegmentsSize[1], this->IssmSegments);134 i++; SetMatlabStructureField(output,"IssmEdges", this->IssmEdgesSize[0], this->IssmEdgesSize[1], this->IssmEdges);135 i++; SetMatlabStructureField(output,"Quadrilaterals", this->QuadrilateralsSize[0], this->QuadrilateralsSize[1], this->Quadrilaterals);136 i++; SetMatlabStructureField(output,"VerticesOnGeomVertex",this->VerticesOnGeomVertexSize[0],this->VerticesOnGeomVertexSize[1], this->VerticesOnGeomVertex);137 i++; SetMatlabStructureField(output,"VerticesOnGeomEdge", this->VerticesOnGeomEdgeSize[0], this->VerticesOnGeomEdgeSize[1], this->VerticesOnGeomEdge);138 i++; SetMatlabStructureField(output,"EdgesOnGeomEdge", this->EdgesOnGeomEdgeSize[0], this->EdgesOnGeomEdgeSize[1], this->EdgesOnGeomEdge);139 i++; SetMatlabStructureField(output,"SubDomains", this->SubDomainsSize[0], this->SubDomainsSize[1], this->SubDomains);140 i++; SetMatlabStructureField(output,"SubDomainsFromGeom", this->SubDomainsFromGeomSize[0], this->SubDomainsFromGeomSize[1], this->SubDomainsFromGeom);141 i++; SetMatlabStructureField(output,"ElementConnectivity", this->ElementConnectivitySize[0], this->ElementConnectivitySize[1], this->ElementConnectivity);142 i++; SetMatlabStructureField(output,"NodalConnectivity", this->NodalConnectivitySize[0], this->NodalConnectivitySize[1], this->NodalConnectivity);143 i++; SetMatlabStructureField(output,"NodalElementConnectivity", this->NodalElementConnectivitySize[0], this->NodalElementConnectivitySize[1], this->NodalElementConnectivity);144 i++; SetMatlabStructureField(output,"CrackedVertices", this->CrackedVerticesSize[0], this->CrackedVerticesSize[1], this->CrackedVertices);145 i++; SetMatlabStructureField(output,"CrackedEdges", this->CrackedEdgesSize[0], this->CrackedEdgesSize[1], this->CrackedEdges);146 _assert_(i==numfields);147 148 /*Assign output*/149 *matlab_struct=output;150 151 }152 #endif153 /*}}}*/154 /*FUNCTION BamgMesh::SetMatlabStructureField{{{1*/155 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)156 void BamgMesh::SetMatlabStructureField(mxArray* matlab_struct,const char* fieldname,int fieldrows,int fieldcols,double* fieldpointer){157 158 /*Intermediary*/159 int i1,i2;160 mxArray* pfield=NULL;161 mxArray* pfield2=NULL;162 163 /*Copy field*/164 double* fieldcopy=NULL;165 if (fieldrows*fieldcols){166 fieldcopy=(double*)xmalloc(fieldrows*fieldcols*sizeof(double));167 for(i1=0;i1<fieldrows;i1++){168 for(i2=0;i2<fieldcols;i2++){169 fieldcopy[fieldcols*i1+i2]=fieldpointer[fieldcols*i1+i2];170 }171 }172 }173 174 /*Set matlab field*/175 pfield=mxCreateDoubleMatrix(0,0,mxREAL);176 mxSetM(pfield,fieldcols);177 mxSetN(pfield,fieldrows);178 mxSetPr(pfield,fieldcopy);179 mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose180 mxSetField(matlab_struct,0,fieldname,pfield2);181 }182 #endif183 /*}}}*/ -
issm/trunk-jpl/src/c/objects/Bamg/BamgMesh.h
r11861 r12011 4 4 #ifndef _BAMGMESH_H_ 5 5 #define _BAMGMESH_H_ 6 7 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)8 #include <mex.h>9 #endif10 6 11 7 class BamgMesh{ … … 51 47 52 48 BamgMesh(); 53 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_) 54 BamgMesh(mxArray* matlab_struct); 55 #endif 49 BamgMesh(void* module_struct); 56 50 ~BamgMesh(); 57 51 58 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_) 59 void SetMatlabStructureFields(mxArray** matlab_struct); 60 void SetMatlabStructureField(mxArray* matlab_struct,const char* fieldname,int fieldrows,int fieldcols,double* fieldpointer); 61 #endif 52 void SetStructureFields(void* module_struct); 53 void SetStructureField(void* module_struct,const char* fieldname,int fieldrows,int fieldcols,double* fieldpointer); 62 54 63 55 }; -
issm/trunk-jpl/src/c/objects/Bamg/BamgOpts.cpp
r11936 r12011 40 40 41 41 } 42 /*}}}*/43 /*FUNCTION BamgOpts::BamgOpts(mxArray* matlab_struct){{{1*/44 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)45 BamgOpts::BamgOpts(mxArray* matlab_struct){46 47 FetchData(&this->anisomax,mxGetField(matlab_struct,0,"anisomax"));48 FetchData(&this->cutoff,mxGetField(matlab_struct,0,"cutoff"));49 FetchData(&this->coeff,mxGetField(matlab_struct,0,"coeff"));50 FetchData(&this->errg,mxGetField(matlab_struct,0,"errg"));51 FetchData(&this->gradation,mxGetField(matlab_struct,0,"gradation"));52 FetchData(&this->Hessiantype,mxGetField(matlab_struct,0,"Hessiantype"));53 FetchData(&this->MaxCornerAngle,mxGetField(matlab_struct,0,"MaxCornerAngle"));54 FetchData(&this->maxnbv,mxGetField(matlab_struct,0,"maxnbv"));55 FetchData(&this->maxsubdiv,mxGetField(matlab_struct,0,"maxsubdiv"));56 FetchData(&this->Metrictype,mxGetField(matlab_struct,0,"Metrictype"));57 FetchData(&this->nbjacobi,mxGetField(matlab_struct,0,"nbjacobi"));58 FetchData(&this->nbsmooth,mxGetField(matlab_struct,0,"nbsmooth"));59 FetchData(&this->omega,mxGetField(matlab_struct,0,"omega"));60 FetchData(&this->power,mxGetField(matlab_struct,0,"power"));61 FetchData(&this->verbose,mxGetField(matlab_struct,0,"verbose"));62 63 FetchData(&this->Crack,mxGetField(matlab_struct,0,"Crack"));64 FetchData(&this->geometricalmetric,mxGetField(matlab_struct,0,"geometricalmetric"));65 FetchData(&this->KeepVertices,mxGetField(matlab_struct,0,"KeepVertices"));66 FetchData(&this->splitcorners,mxGetField(matlab_struct,0,"splitcorners"));67 68 FetchData(&this->hmin,mxGetField(matlab_struct,0,"hmin"));69 FetchData(&this->hmax,mxGetField(matlab_struct,0,"hmax"));70 FetchData(&this->hminVertices,&this->hminVerticesSize[0],&this->hminVerticesSize[1],mxGetField(matlab_struct,0,"hminVertices"));71 FetchData(&this->hmaxVertices,&this->hmaxVerticesSize[0],&this->hmaxVerticesSize[1],mxGetField(matlab_struct,0,"hmaxVertices"));72 FetchData(&this->hVertices,&this->hVerticesSize[0],&this->hVerticesSize[1],mxGetField(matlab_struct,0,"hVertices"));73 FetchData(&this->metric,&this->metricSize[0],&this->metricSize[1],mxGetField(matlab_struct,0,"metric"));74 FetchData(&this->field,&this->fieldSize[0],&this->fieldSize[1],mxGetField(matlab_struct,0,"field"));75 FetchData(&this->err,&this->errSize[0],&this->errSize[1],mxGetField(matlab_struct,0,"err"));76 77 /*Additional checks*/78 this->Check();79 80 }81 #endif82 42 /*}}}*/ 83 43 /*FUNCTION BamgOpts::~BamgOpts() {{{1*/ -
issm/trunk-jpl/src/c/objects/Bamg/BamgOpts.h
r11861 r12011 5 5 #ifndef _BAMGOPTS_H_ 6 6 #define _BAMGOPTS_H_ 7 8 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)9 #include <mex.h>10 #endif11 7 12 8 class BamgOpts{ … … 54 50 55 51 BamgOpts(); 56 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_) 57 BamgOpts(mxArray* matlab_struct); 58 #endif 52 BamgOpts(void* module_struct); 59 53 ~BamgOpts(); 60 54 -
issm/trunk-jpl/src/c/objects/ExternalResults/BoolExternalResult.cpp
r11936 r12011 185 185 } 186 186 /*}}}*/ 187 /*FUNCTION BoolExternalResult::SetMatlabField{{{1*/188 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)189 void BoolExternalResult::SetMatlabField(mxArray* dataref){190 191 char* name=NULL;192 this->GetResultName(&name);193 194 mxSetField( dataref, this->step-1, name,mxCreateDoubleScalar((double)value));195 mxSetField( dataref, this->step-1, "time",mxCreateDoubleScalar((double)this->time));196 mxSetField( dataref, this->step-1, "step",mxCreateDoubleScalar((double)this->step));197 }198 #endif199 /*}}}*/200 187 /*FUNCTION BoolExternalResult::GetStep{{{1*/ 201 188 int BoolExternalResult::GetStep(void){ -
issm/trunk-jpl/src/c/objects/ExternalResults/BoolExternalResult.h
r11936 r12011 59 59 void WriteData(FILE* fid,bool io_gather); 60 60 void GetResultName(char**); 61 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)62 void SetMatlabField(mxArray* dataref);63 #endif64 61 int GetStep(void); 65 62 /*}}}*/ -
issm/trunk-jpl/src/c/objects/ExternalResults/DoubleExternalResult.cpp
r11936 r12011 181 181 } 182 182 /*}}}*/ 183 /*FUNCTION DoubleExternalResult::SetMatlabField{{{1*/184 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)185 void DoubleExternalResult::SetMatlabField(mxArray* dataref){186 187 char* name=NULL;188 this->GetResultName(&name);189 mxSetField( dataref,this->step-1, name,mxCreateDoubleScalar(value));190 mxSetField( dataref, this->step-1, "time",mxCreateDoubleScalar((double)this->time));191 mxSetField( dataref, this->step-1, "step",mxCreateDoubleScalar((double)this->step));192 193 }194 #endif195 /*}}}*/196 183 /*FUNCTION DoubleExternalResult::GetStep{{{1*/ 197 184 int DoubleExternalResult::GetStep(void){ -
issm/trunk-jpl/src/c/objects/ExternalResults/DoubleExternalResult.h
r11936 r12011 60 60 void WriteData(FILE* fid,bool io_gather); 61 61 void GetResultName(char**); 62 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)63 void SetMatlabField(mxArray* dataref);64 #endif65 62 int GetStep(void); 66 63 /*}}}*/ -
issm/trunk-jpl/src/c/objects/ExternalResults/DoubleMatExternalResult.cpp
r11936 r12011 222 222 } 223 223 /*}}}*/ 224 /*FUNCTION DoubleMatExternalResult::SetMatlabField{{{1*/225 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)226 void DoubleMatExternalResult::SetMatlabField(mxArray* dataref){227 228 mxArray* pfield=NULL;229 mxArray* pfield2=NULL;230 char* name=NULL;231 double* doublemat=NULL;232 233 /*Make a copy of the value, to be used by matlab: */234 doublemat=(double*)xmalloc(M*N*sizeof(double));235 memcpy(doublemat,values,M*N*sizeof(double));236 237 /*recover name: */238 this->GetResultName(&name);239 240 /*create matlab matrix: */241 pfield=mxCreateDoubleMatrix(0,0,mxREAL);242 mxSetM(pfield,N);243 mxSetN(pfield,M);244 mxSetPr(pfield,doublemat);245 246 /*transpose the matrix, from c to matlab format */247 mexCallMATLAB(1,&pfield2, 1, &pfield, "transpose");248 249 /*set tranpose matrix inside the dataref structure: */250 mxSetField( dataref, this->step-1, name,pfield2);251 mxSetField( dataref, this->step-1, "time",mxCreateDoubleScalar((double)this->time));252 mxSetField( dataref, this->step-1, "step",mxCreateDoubleScalar((double)this->step));253 254 }255 #endif256 /*}}}*/257 224 /*FUNCTION DoubleMatExternalResult::GetStep{{{1*/ 258 225 int DoubleMatExternalResult::GetStep(void){ -
issm/trunk-jpl/src/c/objects/ExternalResults/DoubleMatExternalResult.h
r11936 r12011 61 61 void WriteData(FILE* fid,bool io_gather); 62 62 void GetResultName(char**); 63 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)64 void SetMatlabField(mxArray* dataref);65 #endif66 63 int GetStep(void); 67 64 /*}}}*/ -
issm/trunk-jpl/src/c/objects/ExternalResults/DoubleVecExternalResult.cpp
r11936 r12011 206 206 } 207 207 /*}}}*/ 208 /*FUNCTION DoubleVecExternalResult::SetMatlabField{{{1*/209 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)210 void DoubleVecExternalResult::SetMatlabField(mxArray* dataref){211 212 mxArray *pfield = NULL;213 double *doublemat = NULL;214 char *name = NULL;215 double *doublevec = NULL;216 217 /*Make a copy of the value, to be used by matlab: */218 doublevec=(double*)xmalloc(M*sizeof(double));219 memcpy(doublevec,values,M*sizeof(double));220 221 /*recover name: */222 this->GetResultName(&name);223 224 /*create matlab matrix: */225 pfield=mxCreateDoubleMatrix(0,0,mxREAL);226 mxSetM(pfield,M);227 mxSetN(pfield,1);228 mxSetPr(pfield,doublevec);229 230 mxSetField( dataref, this->step-1, name,pfield);231 mxSetField( dataref, this->step-1, "time",mxCreateDoubleScalar((double)this->time));232 mxSetField( dataref, this->step-1, "step",mxCreateDoubleScalar((double)this->step));233 }234 #endif235 /*}}}*/236 208 /*FUNCTION DoubleVecExternalResult::GetStep{{{1*/ 237 209 int DoubleVecExternalResult::GetStep(void){ -
issm/trunk-jpl/src/c/objects/ExternalResults/DoubleVecExternalResult.h
r11936 r12011 60 60 void WriteData(FILE* fid,bool io_gather); 61 61 void GetResultName(char**); 62 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)63 void SetMatlabField(mxArray* dataref);64 #endif65 62 int GetStep(void); 66 63 /*}}}*/ -
issm/trunk-jpl/src/c/objects/ExternalResults/ExternalResult.h
r11861 r12011 33 33 virtual void WriteData(FILE* fid,bool io_gather)=0; 34 34 virtual void GetResultName(char**)=0; 35 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)36 virtual void SetMatlabField(mxArray* dataref)=0;37 #endif38 35 virtual int GetStep(void)=0; 39 36 /*}}}*/ -
issm/trunk-jpl/src/c/objects/ExternalResults/IntExternalResult.cpp
r11936 r12011 185 185 } 186 186 /*}}}*/ 187 /*FUNCTION IntExternalResult::SetMatlabField{{{1*/188 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)189 void IntExternalResult::SetMatlabField(mxArray* dataref){190 191 char* name=NULL;192 this->GetResultName(&name);193 194 mxSetField( dataref, this->step-1, name,mxCreateDoubleScalar(value));195 mxSetField( dataref, this->step-1, "time",mxCreateDoubleScalar((double)this->time));196 mxSetField( dataref, this->step-1, "step",mxCreateDoubleScalar((double)this->step));197 198 }199 #endif200 /*}}}*/201 187 /*FUNCTION IntExternalResult::GetStep{{{1*/ 202 188 int IntExternalResult::GetStep(void){ -
issm/trunk-jpl/src/c/objects/ExternalResults/IntExternalResult.h
r11936 r12011 58 58 void WriteData(FILE* fid,bool io_gather); 59 59 void GetResultName(char**); 60 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)61 void SetMatlabField(mxArray* dataref);62 #endif63 60 int GetStep(void); 64 61 /*}}}*/ -
issm/trunk-jpl/src/c/objects/ExternalResults/PetscVecExternalResult.cpp
r11936 r12011 244 244 } 245 245 /*}}}*/ 246 /*FUNCTION PetscVecExternalResult::SetMatlabField{{{1*/247 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)248 void PetscVecExternalResult::SetMatlabField(mxArray* dataref){249 250 mxArray* pfield=NULL;251 char* name=NULL;252 double* doublevec=NULL;253 int M;254 255 VecToMPISerial(&doublevec,value);256 VecGetSize(value,&M);257 this->GetResultName(&name);258 259 pfield=mxCreateDoubleMatrix(0,0,mxREAL);260 mxSetM(pfield,M);261 mxSetN(pfield,1);262 mxSetPr(pfield,doublevec);263 264 mxSetField( dataref, this->step-1, name, pfield);265 mxSetField( dataref, this->step-1, "time",mxCreateDoubleScalar((double)this->time));266 mxSetField( dataref, this->step-1, "step",mxCreateDoubleScalar((double)this->step));267 268 }269 #endif270 /*}}}*/271 246 /*FUNCTION PetscVecExternalResult::GetStep{{{1*/ 272 247 int PetscVecExternalResult::GetStep(void){ -
issm/trunk-jpl/src/c/objects/ExternalResults/PetscVecExternalResult.h
r11936 r12011 60 60 void WriteData(FILE* fid,bool io_gather); 61 61 void GetResultName(char**); 62 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)63 void SetMatlabField(mxArray* dataref);64 #endif65 62 int GetStep(void); 66 63 /*}}}*/ -
issm/trunk-jpl/src/c/objects/ExternalResults/StringExternalResult.cpp
r11936 r12011 197 197 } 198 198 /*}}}*/ 199 /*FUNCTION StringExternalResult::SetMatlabField{{{1*/200 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)201 void StringExternalResult::SetMatlabField(mxArray* dataref){202 203 char* name=NULL;204 205 this->GetResultName(&name);206 207 mxSetField( dataref, this->step-1, name, mxCreateString(value));208 mxSetField( dataref, this->step-1, "time",mxCreateDoubleScalar((double)this->time));209 mxSetField( dataref, this->step-1, "step",mxCreateDoubleScalar((double)this->step));210 211 }212 #endif213 /*}}}*/214 199 /*FUNCTION StringExternalResult::GetStep{{{1*/ 215 200 int StringExternalResult::GetStep(void){ -
issm/trunk-jpl/src/c/objects/ExternalResults/StringExternalResult.h
r11936 r12011 60 60 void WriteData(FILE* fid,bool io_gather); 61 61 void GetResultName(char**); 62 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)63 void SetMatlabField(mxArray* dataref);64 #endif65 62 int GetStep(void); 66 63 /*}}}*/ -
issm/trunk-jpl/src/c/objects/Numerics/Matrix.cpp
r11936 r12011 140 140 } 141 141 /*}}}*/ 142 143 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)144 /*FUNCTION Matrix::ToMatlabMatrix{{{1*/145 mxArray* Matrix::ToMatlabMatrix(void){146 147 mxArray* dataref=NULL;148 #ifdef _HAVE_PETSC_149 PetscMatrixToMatlabMatrix(&dataref,this->matrix);150 #else151 dataref=this->matrix->ToMatlabMatrix();152 #endif153 return dataref;154 155 }156 /*}}}*/157 /*FUNCTION MatlabMatrixToMatrix{{{1*/158 Matrix* MatlabMatrixToMatrix(const mxArray* mxmatrix){159 160 int dummy;161 Matrix* matrix=NULL;162 163 /*allocate matrix object: */164 matrix=new Matrix();165 166 #ifdef _HAVE_PETSC_167 MatlabMatrixToPetscMatrix(&matrix->matrix,NULL,NULL,mxmatrix);168 #else169 matrix->matrix=MatlabMatrixToSeqMat(mxmatrix);170 #endif171 172 return matrix;173 }174 /*}}}*/175 #endif176 142 /*FUNCTION Matrix::Assemble{{{1*/ 177 143 void Matrix::Assemble(void){ -
issm/trunk-jpl/src/c/objects/Numerics/Matrix.h
r11936 r12011 51 51 /*Matrix specific routines {{{1*/ 52 52 void Echo(void); 53 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)54 mxArray* ToMatlabMatrix(void);55 #endif56 53 void Assemble(void); 57 54 double Norm(NormMode norm_type); … … 66 63 67 64 }; 68 /*API: */69 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)70 Matrix* MatlabMatrixToMatrix(const mxArray* mxmatrix);71 #endif72 65 73 66 #endif //#ifndef _MATRIX_H_ -
issm/trunk-jpl/src/c/objects/Numerics/Vector.cpp
r11920 r12011 132 132 } 133 133 /*}}}*/ 134 135 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)136 /*FUNCTION Vector::ToMatlabVector{{{1*/137 mxArray* Vector::ToMatlabVector(void){138 139 mxArray* dataref=NULL;140 #ifdef _HAVE_PETSC_141 PetscVectorToMatlabVector(&dataref,this->vector);142 #else143 dataref=this->vector->ToMatlabVector();144 #endif145 return dataref;146 147 }148 /*}}}*/149 /*FUNCTION MatlabVectorToVector{{{1*/150 Vector* MatlabVectorToVector(const mxArray* mxvector){151 152 int dummy;153 Vector* vector=NULL;154 155 /*allocate vector object: */156 vector=new Vector();157 158 #ifdef _HAVE_PETSC_159 MatlabVectorToPetscVector(&vector->vector,&dummy,mxvector);160 #else161 vector->vector=MatlabVectorToSeqVec(mxvector);162 #endif163 164 return vector;165 }166 /*}}}*/167 #endif168 134 /*FUNCTION Vector::Assemble{{{1*/ 169 135 void Vector::Assemble(void){ -
issm/trunk-jpl/src/c/objects/Numerics/Vector.h
r11861 r12011 54 54 /*Vector specific routines {{{1*/ 55 55 void Echo(void); 56 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)57 mxArray* ToMatlabVector(void);58 #endif59 56 void AXPY(Vector *X, double a); 60 57 void AYPX(Vector *X, double a); … … 77 74 }; 78 75 79 /*API: */80 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)81 Vector* MatlabVectorToVector(const mxArray* mxvector);82 #endif83 76 84 77 #endif //#ifndef _VECTOR_H_ -
issm/trunk-jpl/src/c/objects/OptArgs.h
r11861 r12011 6 6 #define _OPTARGS_H_ 7 7 8 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)9 10 #include "mex.h"11 struct OptArgs{12 char* function_name;13 mxArray* femmodel;14 };15 16 #else17 18 8 class Model; 19 9 struct OptArgs{ 20 10 FemModel* femmodel; 21 11 }; 22 #endif23 12 24 13 #endif -
issm/trunk-jpl/src/c/objects/Params/BoolParam.cpp
r11936 r12011 134 134 } 135 135 /*}}}*/ 136 /*FUNCTION BoolParam::SetMatlabField{{{1*/137 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)138 void BoolParam::SetMatlabField(mxArray* dataref){139 char* name=NULL;140 this->GetParameterName(&name);141 mxSetField( dataref, 0, name,mxCreateDoubleScalar((double)value));142 }143 #endif144 /*}}}*/145 136 /*FUNCTION BoolParam::UnitConversion{{{1*/ 146 137 void BoolParam::UnitConversion(int direction_enum){ -
issm/trunk-jpl/src/c/objects/Params/BoolParam.h
r11936 r12011 81 81 82 82 void GetParameterName(char**pname); 83 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)84 void SetMatlabField(mxArray* dataref);85 #endif86 83 /*}}}*/ 87 84 }; -
issm/trunk-jpl/src/c/objects/Params/DoubleMatArrayParam.cpp
r11936 r12011 308 308 } 309 309 /*}}}*/ 310 /*FUNCTION StringArrayParam::SetMatlabField{{{1*/311 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)312 void DoubleMatArrayParam::SetMatlabField(mxArray* dataref){313 314 int i,m,n;315 double* matrix=NULL;316 double* outmatrix=NULL;317 char* name=NULL;318 mwSize dims[2]={0};319 mxArray* pfield=NULL;320 mxArray* pfield2=NULL;321 mxArray* pfield3=NULL;322 323 this->GetParameterName(&name);324 dims[0]=this->M;325 dims[1]=1;326 pfield=mxCreateCellArray(2,dims);327 328 for(i=0;i<this->M;i++){329 matrix=this->array[i];330 m=this->mdim_array[i];331 n=this->ndim_array[i];332 outmatrix=(double*)xmalloc(m*n*sizeof(double));333 memcpy(outmatrix,matrix,m*n*sizeof(double));334 335 pfield2=mxCreateDoubleMatrix(0,0,mxREAL);336 mxSetM(pfield2,n);337 mxSetN(pfield2,m);338 mxSetPr(pfield2,outmatrix);339 340 //transpose the outmatrix, written directly to matlab! from C to matlab.341 mexCallMATLAB(1,&pfield3, 1, &pfield2, "transpose");342 343 mxSetCell(pfield,i,pfield3);344 }345 346 mxSetField( dataref, 0, name,pfield);347 }348 #endif349 /*}}}*/350 310 /*FUNCTION DoubleMatArrayParam::SetValue(double** array, int M, int* mdim_array, int* ndim_array){{{1*/ 351 311 void DoubleMatArrayParam::SetValue(double** in_array, int in_M, int* in_mdim_array, int* in_ndim_array){ -
issm/trunk-jpl/src/c/objects/Params/DoubleMatArrayParam.h
r11936 r12011 84 84 85 85 void GetParameterName(char**pname); 86 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)87 void SetMatlabField(mxArray* dataref);88 #endif89 86 90 87 /*}}}*/ -
issm/trunk-jpl/src/c/objects/Params/DoubleMatParam.cpp
r11936 r12011 190 190 } 191 191 /*}}}*/ 192 /*FUNCTION DoubleMatParam::SetMatlabField{{{1*/193 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)194 void DoubleMatParam::SetMatlabField(mxArray* dataref){195 196 mxArray* pfield=NULL;197 mxArray* pfield2=NULL;198 double* doublemat=NULL;199 char* name=NULL;200 201 this->GetParameterName(&name);202 this->GetParameterValue(&doublemat,NULL,NULL);203 204 pfield=mxCreateDoubleMatrix(0,0,mxREAL);205 mxSetM(pfield,N);206 mxSetN(pfield,M);207 mxSetPr(pfield,doublemat);208 209 //transpose the matrix, written directly to matlab! from C to matlab.210 mexCallMATLAB(1,&pfield2, 1, &pfield, "transpose");211 mxSetField( dataref, 0, name,pfield2);212 }213 #endif214 /*}}}*/215 192 /*FUNCTION DoubleMatParam::SetValue{{{1*/ 216 193 void DoubleMatParam::SetValue(double* doublearray,int in_M,int in_N){ -
issm/trunk-jpl/src/c/objects/Params/DoubleMatParam.h
r11936 r12011 84 84 85 85 void GetParameterName(char**pname); 86 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)87 void SetMatlabField(mxArray* dataref);88 #endif89 86 90 87 /*}}}*/ -
issm/trunk-jpl/src/c/objects/Params/DoubleParam.cpp
r11936 r12011 219 219 } 220 220 /*}}}*/ 221 /*FUNCTION DoubleParam::SetMatlabField{{{1*/222 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)223 void DoubleParam::SetMatlabField(mxArray* dataref){224 225 char* name=NULL;226 this->GetParameterName(&name);227 mxSetField( dataref, 0, name,mxCreateDoubleScalar(value));228 }229 #endif230 /*}}}*/231 221 /*FUNCTION DoubleParam::UnitConversion{{{1*/ 232 222 void DoubleParam::UnitConversion(int direction_enum){ -
issm/trunk-jpl/src/c/objects/Params/DoubleParam.h
r11936 r12011 82 82 83 83 void GetParameterName(char**pname); 84 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)85 void SetMatlabField(mxArray* dataref);86 #endif87 84 88 85 /*}}}*/ -
issm/trunk-jpl/src/c/objects/Params/DoubleVecParam.cpp
r11936 r12011 202 202 } 203 203 /*}}}*/ 204 /*FUNCTION DoubleVecParam::SetMatlabField{{{1*/205 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)206 void DoubleVecParam::SetMatlabField(mxArray* dataref){207 208 char* name=NULL;209 double* doublevec=NULL;210 mxArray* pfield=NULL;211 212 this->GetParameterValue(&doublevec,NULL);213 this->GetParameterName(&name);214 215 pfield=mxCreateDoubleMatrix(0,0,mxREAL);216 mxSetM(pfield,M);217 mxSetN(pfield,1);218 mxSetPr(pfield,doublevec);219 220 mxSetField( dataref, 0, name, pfield);221 }222 #endif223 /*}}}*/224 204 /*FUNCTION DoubleVecParam::SetValue{{{1*/ 225 205 void DoubleVecParam::SetValue(double* doublearray,int in_M){ -
issm/trunk-jpl/src/c/objects/Params/DoubleVecParam.h
r11936 r12011 82 82 83 83 void GetParameterName(char**pname); 84 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)85 void SetMatlabField(mxArray* dataref);86 #endif87 84 /*}}}*/ 88 85 }; -
issm/trunk-jpl/src/c/objects/Params/FileParam.cpp
r11936 r12011 101 101 } 102 102 /*}}}*/ 103 /*FUNCTION FileParam::SetMatlabField{{{1*/104 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)105 void FileParam::SetMatlabField(mxArray* dataref){106 107 _error_("FileParam is a pointer and cannot be converted into a matlab object");108 }109 #endif110 /*}}}*/111 103 /*FUNCTION FileParam::UnitConversion{{{1*/ 112 104 void FileParam::UnitConversion(int direction_enum){ -
issm/trunk-jpl/src/c/objects/Params/FileParam.h
r11936 r12011 81 81 82 82 void GetParameterName(char**pname); 83 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)84 void SetMatlabField(mxArray* dataref);85 #endif86 83 87 84 /*}}}*/ -
issm/trunk-jpl/src/c/objects/Params/IntMatParam.cpp
r11936 r12011 172 172 } 173 173 /*}}}*/ 174 /*FUNCTION IntMatParam::SetMatlabField{{{1*/175 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)176 void IntMatParam::SetMatlabField(mxArray* dataref){177 178 char *name = NULL;179 double *doublearray = NULL;180 int *intarray = NULL;181 mxArray *pfield = NULL;182 mxArray *pfield2 = NULL;183 184 this->GetParameterValue(&intarray,NULL,NULL);185 this->GetParameterName(&name);186 187 /*cast intarray into doublearray for Matlab*/188 doublearray=(double*)xmalloc(M*N*sizeof(double));189 for(int i=0;i<M*N;i++)doublearray[i]=(double)intarray[i];190 xfree((void**)&intarray);191 192 pfield=mxCreateDoubleMatrix(0,0,mxREAL);193 mxSetM(pfield,M);194 mxSetN(pfield,N);195 mxSetPr(pfield,doublearray);196 197 //transpose the matrix, written directly to matlab! from C to matlab.198 mexCallMATLAB(1,&pfield2, 1, &pfield, "transpose");199 mxSetField( dataref, 0, name,pfield2);200 }201 #endif202 /*}}}*/203 174 /*FUNCTION IntMatParam::SetValue{{{1*/ 204 175 void IntMatParam::SetValue(int* intarray,int in_M,int in_N){ -
issm/trunk-jpl/src/c/objects/Params/IntMatParam.h
r11936 r12011 83 83 84 84 void GetParameterName(char**pname); 85 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)86 void SetMatlabField(mxArray* dataref);87 #endif88 85 89 86 /*}}}*/ -
issm/trunk-jpl/src/c/objects/Params/IntParam.cpp
r11936 r12011 134 134 } 135 135 /*}}}*/ 136 /*FUNCTION IntParam::SetMatlabField{{{1*/137 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)138 void IntParam::SetMatlabField(mxArray* dataref){139 140 char* name=NULL;141 this->GetParameterName(&name);142 mxSetField( dataref, 0, name,mxCreateDoubleScalar((double)value));143 }144 #endif145 /*}}}*/146 136 /*FUNCTION IntParam::UnitConversion{{{1*/ 147 137 void IntParam::UnitConversion(int direction_enum){ -
issm/trunk-jpl/src/c/objects/Params/IntParam.h
r11936 r12011 82 82 83 83 void GetParameterName(char**pname); 84 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)85 void SetMatlabField(mxArray* dataref);86 #endif87 84 88 85 /*}}}*/ -
issm/trunk-jpl/src/c/objects/Params/IntVecParam.cpp
r11936 r12011 185 185 } 186 186 /*}}}*/ 187 /*FUNCTION IntVecParam::SetMatlabField{{{1*/188 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)189 void IntVecParam::SetMatlabField(mxArray* dataref){190 191 char *name = NULL;192 double *doublevec = NULL;193 int *intvec = NULL;194 mxArray *pfield = NULL;195 196 this->GetParameterValue(&intvec,NULL);197 this->GetParameterName(&name);198 199 /*cast intvec into doublevec for Matlab*/200 if(M){201 doublevec=(double*)xmalloc(M*sizeof(double));202 for(int i=0;i<M;i++)doublevec[i]=(double)intvec[i];203 }204 else doublevec=NULL;205 xfree((void**)&intvec);206 207 pfield=mxCreateDoubleMatrix(0,0,mxREAL);208 mxSetM(pfield,M);209 mxSetN(pfield,1);210 mxSetPr(pfield,doublevec);211 212 mxSetField(dataref, 0, name, pfield);213 }214 #endif215 /*}}}*/216 187 /*FUNCTION IntVecParam::SetValue{{{1*/ 217 188 void IntVecParam::SetValue(int* intarray,int in_M){ -
issm/trunk-jpl/src/c/objects/Params/IntVecParam.h
r11936 r12011 83 83 84 84 void GetParameterName(char**pname); 85 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)86 void SetMatlabField(mxArray* dataref);87 #endif88 85 /*}}}*/ 89 86 }; -
issm/trunk-jpl/src/c/objects/Params/MatrixParam.cpp
r11936 r12011 190 190 } 191 191 /*}}}*/ 192 /*FUNCTION MatrixParam::SetMatlabField{{{1*/193 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)194 void MatrixParam::SetMatlabField(mxArray* dataref){195 196 char* name=NULL;197 int M,N;198 double* doublemat=NULL;199 mxArray* pfield=NULL;200 201 doublemat=value->ToSerial();202 value->GetSize(&M,&N);203 this->GetParameterName(&name);204 205 pfield=mxCreateDoubleMatrix(0,0,mxREAL);206 mxSetM(pfield,M);207 mxSetN(pfield,N);208 mxSetPr(pfield,doublemat);209 mxSetField( dataref, 0, name, pfield);210 }211 #endif212 /*}}}*/213 192 /*FUNCTION MatrixParam::SetValue{{{1*/ 214 193 void MatrixParam::SetValue(Matrix* matrix){ -
issm/trunk-jpl/src/c/objects/Params/MatrixParam.h
r11936 r12011 82 82 83 83 void GetParameterName(char**pname); 84 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)85 void SetMatlabField(mxArray* dataref);86 #endif87 84 88 85 /*}}}*/ -
issm/trunk-jpl/src/c/objects/Params/Param.h
r11861 r12011 60 60 virtual void UnitConversion(int direction_enum)=0; 61 61 virtual void GetParameterName(char**pname)=0; 62 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)63 virtual void SetMatlabField(mxArray* dataref)=0;64 #endif65 62 }; 66 63 #endif -
issm/trunk-jpl/src/c/objects/Params/StringArrayParam.cpp
r11936 r12011 236 236 } 237 237 /*}}}*/ 238 /*FUNCTION StringArrayParam::SetMatlabField{{{1*/239 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)240 void StringArrayParam::SetMatlabField(mxArray* dataref){241 242 int i;243 char* name=NULL;244 mwSize dims[2]={0};245 mxArray* pfield=NULL;246 247 this->GetParameterName(&name);248 249 dims[0]=this->numstrings;250 dims[1]=1;251 pfield=mxCreateCellArray(2,dims);252 for(i=0;i<this->numstrings;i++){253 char* string=value[i];254 mxSetCell(pfield,i,mxCreateString(string));255 }256 mxSetField( dataref, 0, name,pfield);257 }258 #endif259 /*}}}*/260 238 /*FUNCTION StringArrayParam::SetValue{{{1*/ 261 239 void StringArrayParam::SetValue(char** stringarray,int M){ -
issm/trunk-jpl/src/c/objects/Params/StringArrayParam.h
r11936 r12011 84 84 85 85 void GetParameterName(char**pname); 86 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)87 void SetMatlabField(mxArray* dataref);88 #endif89 86 /*}}}*/ 90 87 }; -
issm/trunk-jpl/src/c/objects/Params/StringParam.cpp
r11936 r12011 164 164 } 165 165 /*}}}*/ 166 /*FUNCTION StringParam::SetMatlabField{{{1*/167 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)168 void StringParam::SetMatlabField(mxArray* dataref){169 170 char* name=NULL;171 172 this->GetParameterName(&name);173 mxSetField( dataref, 0, name, mxCreateString(value));174 }175 #endif176 /*}}}*/177 166 /*FUNCTION StringParam::SetValue{{{1*/ 178 167 void StringParam::SetValue(char* string){ -
issm/trunk-jpl/src/c/objects/Params/StringParam.h
r11936 r12011 82 82 83 83 void GetParameterName(char**pname); 84 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)85 void SetMatlabField(mxArray* dataref);86 #endif87 84 88 85 /*}}}*/ -
issm/trunk-jpl/src/c/objects/Params/VectorParam.cpp
r11936 r12011 188 188 } 189 189 /*}}}*/ 190 /*FUNCTION VectorParam::SetMatlabField{{{1*/191 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)192 void VectorParam::SetMatlabField(mxArray* dataref){193 194 mxArray* pfield=NULL;195 char* name=NULL;196 double* doublevec=NULL;197 int M;198 199 doublevec=value->ToMPISerial();200 value->GetSize(&M);201 this->GetParameterName(&name);202 203 pfield=mxCreateDoubleMatrix(0,0,mxREAL);204 mxSetM(pfield,M);205 mxSetN(pfield,1);206 mxSetPr(pfield,doublevec);207 208 mxSetField( dataref, 0, name, pfield);209 }210 #endif211 /*}}}*/212 190 /*FUNCTION VectorParam::SetValue{{{1*/ 213 191 void VectorParam::SetValue(Vector* vector){ -
issm/trunk-jpl/src/c/objects/Params/VectorParam.h
r11936 r12011 82 82 83 83 void GetParameterName(char**pname); 84 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)85 void SetMatlabField(mxArray* dataref);86 #endif87 84 88 85 /*}}}*/ -
issm/trunk-jpl/src/c/shared/Alloc/alloc.cpp
r11861 r12011 19 19 #endif 20 20 21 #if defined(_SERIAL_) && defined(_HAVE_MATLAB_)22 #include "mex.h"23 #endif24 25 21 #include <stdio.h> 26 22 #include <stdlib.h> … … 37 33 if(!size)_error_(" attempting to 0 size allocation!"); 38 34 39 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)40 /* Use the matlab api to do the allocation: */41 memptr=mxMalloc(size);42 #else43 35 /* Use the c library to do the allocation: */ 44 36 memptr=malloc(size); 45 #endif46 37 if(!memptr) _error_("memory allocation failed!"); 47 38 … … 55 46 if(!size)_error_("attempting to 0 size allocation!"); 56 47 57 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)58 /* Use the matlab api to do the allocation: */59 memptr=mxCalloc(n,size);60 #else61 48 /* Use the c library to do the allocation: */ 62 49 memptr=calloc(n,size); 63 #endif64 50 if(!memptr) _error_("memory allocation failed!"); 65 51 … … 70 56 71 57 if (pv && *pv){ 72 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_) 73 mxFree(*pv); 74 #else 75 free(*pv); 76 #endif 58 free(*pv); 77 59 78 60 *pv=NULL; … … 83 65 84 66 if (pv && *pv){ 85 #ifdef _PARALLEL_86 67 /*There is no mxDelete in the Matlab API -> using delete trips up Matlab. So we 87 68 * don't actually free memory in Matlab, we let the memory manager do that. We only 88 69 * free in parallel: */ 89 70 delete *pv; 90 #else91 /*Actually, still get rid of internal Petsc matrix. Quick fix until Matlab handles C++92 * correctly: */93 #ifdef _HAVE_PETSC_94 MatFree(&(*pv)->matrix);95 #endif96 #endif97 71 *pv=NULL; 98 72 } … … 102 76 103 77 if (pv && *pv){ 104 #ifdef _PARALLEL_105 78 /*There is no mxDelete in the Matlab API -> using delete trips up Matlab. So we 106 79 * don't actually free memory in Matlab, we let the memory manager do that. We only 107 80 * free in parallel: */ 108 81 delete *pv; 109 #else110 /*Actually, still get rid of internal Petsc vector. Quick fix until Matlab handles C++111 * correctly: */112 #ifdef _HAVE_PETSC_113 VecFree(&(*pv)->vector);114 #endif115 #endif116 82 *pv=NULL; 117 83 } … … 124 90 125 91 if(!size)_error_("attempting to realloc to zero"); 126 127 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)128 value = (void*)mxRealloc(pv,size);129 #else130 92 value = (void*)realloc(pv,size); 131 #endif132 93 133 94 if (value == NULL) { -
issm/trunk-jpl/src/c/shared/Numerics/Verbosity.cpp
r11861 r12011 39 39 if(level<0) _error_("vebosity level should be a positive integer (user provided %i)",level); 40 40 41 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)42 43 mxArray* output=NULL;44 mxArray* input=NULL;45 input=mxCreateDoubleScalar((double)level);46 47 mexCallMATLAB(0,&output,1,&input,"SetVerbosityLevel");48 #else49 50 41 verbositylevel = level; 51 42 52 #endif53 43 }/*}}}*/ 54 44 /*FUNCTION GetVerbosityLevel {{{*/ 55 45 int GetVerbosityLevel(void){ 56 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)57 58 mxArray* output=NULL;59 mxArray* input=NULL;60 double level;61 62 mexCallMATLAB(1,&output,0,&input,"GetVerbosityLevel");63 level=mxGetScalar(output);64 65 verbositylevel = (int)level;66 return verbositylevel;67 68 #else69 46 70 47 _assert_(verbositylevel>=0); 71 48 return verbositylevel; 72 49 73 #endif74 50 }/*}}}*/ -
issm/trunk-jpl/src/c/toolkits/issm/SeqMat.cpp
r11941 r12011 92 92 } 93 93 /*}}}*/ 94 95 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)96 /*FUNCTION SeqMat::ToMatlabMatrix{{{1*/97 mxArray* SeqMat::ToMatlabMatrix(void){98 99 /*Intermediary: */100 double* buffer=NULL;101 mxArray* pfield=NULL;102 103 /*output: */104 mxArray* dataref=NULL;105 106 /*copy vector into a new buffer: */107 if(this->M*this->N){108 buffer=(double*)xmalloc(this->M*this->N*sizeof(double));109 memcpy(buffer,this->matrix,M*N*sizeof(double));110 111 pfield=mxCreateDoubleMatrix(0,0,mxREAL);112 mxSetM(pfield,this->N);113 mxSetN(pfield,this->M);114 mxSetPr(pfield,buffer);115 116 //transpose the matrix, written directly to matlab! from C to matlab.117 mexCallMATLAB(1,&dataref, 1, &pfield, "transpose");118 }119 else dataref=mxCreateDoubleMatrix(0,0,mxREAL);120 121 /*do not erase buffer!: */122 return dataref;123 124 }125 126 127 128 129 /*}}}*/130 /*FUNCTION MatlabMatrixToSeqMat{{{1*/131 SeqMat* MatlabMatrixToSeqMat(const mxArray* dataref){132 133 SeqMat* output=NULL;134 135 output=new SeqMat();136 MatlabMatrixToDoubleMatrix(&output->matrix,&output->M,&output->N,dataref);137 return output;138 139 }140 /*}}}*/141 #endif142 94 /*FUNCTION SeqMat::Assemble{{{1*/ 143 95 void SeqMat::Assemble(void){ -
issm/trunk-jpl/src/c/toolkits/issm/SeqMat.h
r11941 r12011 40 40 /*SeqMat specific routines {{{1*/ 41 41 void Echo(void); 42 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)43 mxArray* ToMatlabMatrix(void);44 #endif45 42 void Assemble(void); 46 43 double Norm(NormMode norm_type); … … 56 53 }; 57 54 58 /*API :*/59 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)60 SeqMat* MatlabMatrixToSeqMat(const mxArray* dataref);61 #endif62 63 55 #endif //#ifndef _SEQMAT_H_ -
issm/trunk-jpl/src/c/toolkits/issm/SeqVec.cpp
r11861 r12011 66 66 /*}}}*/ 67 67 68 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)69 /*FUNCTION SeqVec::ToMatlabVector{{{1*/70 mxArray* SeqVec::ToMatlabVector(void){71 72 double* buffer=NULL;73 74 mxArray* dataref=NULL;75 76 /*copy vector into a new buffer: */77 if(this->M){78 buffer=(double*)xmalloc(this->M*sizeof(double));79 memcpy(buffer,vector,M*sizeof(double));80 81 dataref = mxCreateDoubleMatrix(0,0,mxREAL);82 mxSetM(dataref,this->M);83 mxSetN(dataref,1);84 mxSetPr(dataref,buffer);85 }86 else dataref = mxCreateDoubleMatrix(0,0,mxREAL);87 88 89 /*do not erase buffer!: */90 return dataref;91 92 }93 /*}}}*/94 /*FUNCTION MatlabVectorToSeqVec{{{1*/95 SeqVec* MatlabVectorToSeqVec(const mxArray* dataref){96 97 SeqVec* output=NULL;98 99 output=new SeqVec();100 MatlabVectorToDoubleVector(&output->vector,&output->M,dataref);101 return output;102 103 }104 /*}}}*/105 #endif106 68 /*FUNCTION SeqVec::Assemble{{{1*/ 107 69 void SeqVec::Assemble(void){ -
issm/trunk-jpl/src/c/toolkits/issm/SeqVec.h
r11861 r12011 37 37 /*SeqVec specific routines {{{1*/ 38 38 void Echo(void); 39 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)40 mxArray* ToMatlabVector(void);41 #endif42 39 void Assemble(void); 43 40 void SetValues(int ssize, int* list, double* values, InsMode mode); … … 59 56 }; 60 57 61 62 /*API :*/63 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)64 SeqVec* MatlabVectorToSeqVec(const mxArray* dataref);65 #endif66 67 58 #endif //#ifndef _SEQVEC_H_ -
issm/trunk-jpl/startup.py
r11930 r12011 79 79 from miscellaneous import * 80 80 from private import * 81 from TriMesh import *82 81 83 82 #}}} -
issm/trunk-jpl/test/NightlyRun/test101.py
r11977 r12011 1 1 from model import * 2 from TriMesh import *2 from TriMesh.Python import * 3 3 4 md=model() 4 #md=model() 5 #md=triangle(md,'../Exp/Square.exp',150000); 6 5 7 [a,b,c,d,e]=TriMesh('../Exp/Square.exp',15000.0**2.0,True) 6 8 print(a,b,c,d,e)
Note:
See TracChangeset
for help on using the changeset viewer.