Merge remote-tracking branch 'origin/release-v4.6.1'
[WRF.git] / chem / KPP / kpp / kpp-2.1 / util / Mex_Hessian.f90
blob4282ff85bc438c30ad6eb99ae1b7e9f4f380f4eb
2 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3 SUBROUTINE mexFunction( nlhs, plhs, nrhs, prhs )
4 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5 ! Matlab Gateway for the Function Hessian
6 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8 USE KPP_ROOT_Model
10 INTEGER nlhs, nrhs
11 INTEGER plhs(*), prhs(*)
12 INTEGER mxGetPr, mxCreateFull, mxGetM, mxgetN
13 INTEGER VPtr, FPtr, RPtr, HESSPtr
14 KPP_REAL V(KPP_NVAR), F(KPP_NFIX), RCT(KPP_NREACT)
15 KPP_REAL HESS(KPP_NHESS)
17 ! Check for the right number of input arguments
18 IF ( nrhs .ne. 3 ) THEN
19 CALL mexErrMsgTxt('Hessian requires 3 input vectors: &
20 &V(KPP_NVAR), F(KPP_NFIX), RCT(KPP_NREACT)')
21 END IF
22 ! Check for the right number of output arguments
23 IF ( nlhs .ne. 1 ) THEN
24 CALL mexErrMsgTxt('Hessian requires 1 output vector: &
25 &HESS(KPP_NHESS)')
26 END IF
28 plhs(1) = mxCreateDoubleMatrix(KPP_NHESS,1,0)
30 VPtr = mxGetPr(prhs(1));
31 CALL mxCopyPtrToReal8(VPtr,V,KPP_NVAR)
33 FPtr = mxGetPr(prhs(2));
34 CALL mxCopyPtrToReal8(FPtr,F,KPP_NFIX)
36 RPtr = mxGetPr(prhs(3));
37 CALL mxCopyPtrToReal8(RPtr,RCT,KPP_NREACT)
39 HESSPtr = mxGetPr(plhs(1))
41 CALL Hessian( V, F, RCT, HESS )
43 CALL mxCopyReal8ToPtr(HESS, HESSPtr, KPP_NHESS)
45 END SUBROUTINE mexFunction