SUBROUTINE DGEGV( JOBVL, JOBVR, N, A, LDA, B, LDB, ALPHAR, ALPHAI, $ BETA, VL, LDVL, VR, LDVR, WORK, LWORK, INFO ) * * -- LAPACK driver routine (version 3.1) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. CHARACTER JOBVL, JOBVR INTEGER INFO, LDA, LDB, LDVL, LDVR, LWORK, N * .. * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), ALPHAI( * ), ALPHAR( * ), $ B( LDB, * ), BETA( * ), VL( LDVL, * ), $ VR( LDVR, * ), WORK( * ) * .. * * Purpose * ======= * * This routine is deprecated and has been replaced by routine DGGEV. * * DGEGV computes the eigenvalues and, optionally, the left and/or right * eigenvectors of a real matrix pair (A,B). * Given two square matrices A and B, * the generalized nonsymmetric eigenvalue problem (GNEP) is to find the * eigenvalues lambda and corresponding (non-zero) eigenvectors x such * that * * A*x = lambda*B*x. * * An alternate form is to find the eigenvalues mu and corresponding * eigenvectors y such that * * mu*A*y = B*y. * * These two forms are equivalent with mu = 1/lambda and x = y if * neither lambda nor mu is zero. In order to deal with the case that * lambda or mu is zero or small, two values alpha and beta are returned * for each eigenvalue, such that lambda = alpha/beta and * mu = beta/alpha. * * The vectors x and y in the above equations are right eigenvectors of * the matrix pair (A,B). Vectors u and v satisfying * * u**H*A = lambda*u**H*B or mu*v**H*A = v**H*B * * are left eigenvectors of (A,B). * * Note: this routine performs "full balancing" on A and B -- see * "Further Details", below. * * Arguments * ========= * * JOBVL (input) CHARACTER*1 * = 'N': do not compute the left generalized eigenvectors; * = 'V': compute the left generalized eigenvectors (returned * in VL). * * JOBVR (input) CHARACTER*1 * = 'N': do not compute the right generalized eigenvectors; * = 'V': compute the right generalized eigenvectors (returned * in VR). * * N (input) INTEGER * The order of the matrices A, B, VL, and VR. N >= 0. * * A (input/output) DOUBLE PRECISION array, dimension (LDA, N) * On entry, the matrix A. * If JOBVL = 'V' or JOBVR = 'V', then on exit A * contains the real Schur form of A from the generalized Schur * factorization of the pair (A,B) after balancing. * If no eigenvectors were computed, then only the diagonal * blocks from the Schur form will be correct. See DGGHRD and * DHGEQZ for details. * * LDA (input) INTEGER * The leading dimension of A. LDA >= max(1,N). * * B (input/output) DOUBLE PRECISION array, dimension (LDB, N) * On entry, the matrix B. * If JOBVL = 'V' or JOBVR = 'V', then on exit B contains the * upper triangular matrix obtained from B in the generalized * Schur factorization of the pair (A,B) after balancing. * If no eigenvectors were computed, then only those elements of * B corresponding to the diagonal blocks from the Schur form of * A will be correct. See DGGHRD and DHGEQZ for details. * * LDB (input) INTEGER * The leading dimension of B. LDB >= max(1,N). * * ALPHAR (output) DOUBLE PRECISION array, dimension (N) * The real parts of each scalar alpha defining an eigenvalue of * GNEP. * * ALPHAI (output) DOUBLE PRECISION array, dimension (N) * The imaginary parts of each scalar alpha defining an * eigenvalue of GNEP. If ALPHAI(j) is zero, then the j-th * eigenvalue is real; if positive, then the j-th and * (j+1)-st eigenvalues are a complex conjugate pair, with * ALPHAI(j+1) = -ALPHAI(j). * * BETA (output) DOUBLE PRECISION array, dimension (N) * The scalars beta that define the eigenvalues of GNEP. * * Together, the quantities alpha = (ALPHAR(j),ALPHAI(j)) and * beta = BETA(j) represent the j-th eigenvalue of the matrix * pair (A,B), in one of the forms lambda = alpha/beta or * mu = beta/alpha. Since either lambda or mu may overflow, * they should not, in general, be computed. * * VL (output) DOUBLE PRECISION array, dimension (LDVL,N) * If JOBVL = 'V', the left eigenvectors u(j) are stored * in the columns of VL, in the same order as their eigenvalues. * If the j-th eigenvalue is real, then u(j) = VL(:,j). * If the j-th and (j+1)-st eigenvalues form a complex conjugate * pair, then * u(j) = VL(:,j) + i*VL(:,j+1) * and * u(j+1) = VL(:,j) - i*VL(:,j+1). * * Each eigenvector is scaled so that its largest component has * abs(real part) + abs(imag. part) = 1, except for eigenvectors * corresponding to an eigenvalue with alpha = beta = 0, which * are set to zero. * Not referenced if JOBVL = 'N'. * * LDVL (input) INTEGER * The leading dimension of the matrix VL. LDVL >= 1, and * if JOBVL = 'V', LDVL >= N. * * VR (output) DOUBLE PRECISION array, dimension (LDVR,N) * If JOBVR = 'V', the right eigenvectors x(j) are stored * in the columns of VR, in the same order as their eigenvalues. * If the j-th eigenvalue is real, then x(j) = VR(:,j). * If the j-th and (j+1)-st eigenvalues form a complex conjugate * pair, then * x(j) = VR(:,j) + i*VR(:,j+1) * and * x(j+1) = VR(:,j) - i*VR(:,j+1). * * Each eigenvector is scaled so that its largest component has * abs(real part) + abs(imag. part) = 1, except for eigenvalues * corresponding to an eigenvalue with alpha = beta = 0, which * are set to zero. * Not referenced if JOBVR = 'N'. * * LDVR (input) INTEGER * The leading dimension of the matrix VR. LDVR >= 1, and * if JOBVR = 'V', LDVR >= N. * * WORK (workspace/output) DOUBLE PRECISION array, dimension (MAX(1,LWORK)) * On exit, if INFO = 0, WORK(1) returns the optimal LWORK. * * LWORK (input) INTEGER * The dimension of the array WORK. LWORK >= max(1,8*N). * For good performance, LWORK must generally be larger. * To compute the optimal value of LWORK, call ILAENV to get * blocksizes (for DGEQRF, DORMQR, and DORGQR.) Then compute: * NB -- MAX of the blocksizes for DGEQRF, DORMQR, and DORGQR; * The optimal LWORK is: * 2*N + MAX( 6*N, N*(NB+1) ). * * If LWORK = -1, then a workspace query is assumed; the routine * only calculates the optimal size of the WORK array, returns * this value as the first entry of the WORK array, and no error * message related to LWORK is issued by XERBLA. * * INFO (output) INTEGER * = 0: successful exit * < 0: if INFO = -i, the i-th argument had an illegal value. * = 1,...,N: * The QZ iteration failed. No eigenvectors have been * calculated, but ALPHAR(j), ALPHAI(j), and BETA(j) * should be correct for j=INFO+1,...,N. * > N: errors that usually indicate LAPACK problems: * =N+1: error return from DGGBAL * =N+2: error return from DGEQRF * =N+3: error return from DORMQR * =N+4: error return from DORGQR * =N+5: error return from DGGHRD * =N+6: error return from DHGEQZ (other than failed * iteration) * =N+7: error return from DTGEVC * =N+8: error return from DGGBAK (computing VL) * =N+9: error return from DGGBAK (computing VR) * =N+10: error return from DLASCL (various calls) * * Further Details * =============== * * Balancing * --------- * * This driver calls DGGBAL to both permute and scale rows and columns * of A and B. The permutations PL and PR are chosen so that PL*A*PR * and PL*B*R will be upper triangular except for the diagonal blocks * A(i:j,i:j) and B(i:j,i:j), with i and j as close together as * possible. The diagonal scaling matrices DL and DR are chosen so * that the pair DL*PL*A*PR*DR, DL*PL*B*PR*DR have elements close to * one (except for the elements that start out zero.) * * After the eigenvalues and eigenvectors of the balanced matrices * have been computed, DGGBAK transforms the eigenvectors back to what * they would have been (in perfect arithmetic) if they had not been * balanced. * * Contents of A and B on Exit * -------- -- - --- - -- ---- * * If any eigenvectors are computed (either JOBVL='V' or JOBVR='V' or * both), then on exit the arrays A and B will contain the real Schur * form[*] of the "balanced" versions of A and B. If no eigenvectors * are computed, then only the diagonal blocks will be correct. * * [*] See DHGEQZ, DGEGS, or read the book "Matrix Computations", * by Golub & van Loan, pub. by Johns Hopkins U. Press. * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ZERO, ONE PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0 ) * .. * .. Local Scalars .. LOGICAL ILIMIT, ILV, ILVL, ILVR, LQUERY CHARACTER CHTEMP INTEGER ICOLS, IHI, IINFO, IJOBVL, IJOBVR, ILEFT, ILO, $ IN, IRIGHT, IROWS, ITAU, IWORK, JC, JR, LOPT, $ LWKMIN, LWKOPT, NB, NB1, NB2, NB3 DOUBLE PRECISION ABSAI, ABSAR, ABSB, ANRM, ANRM1, ANRM2, BNRM, $ BNRM1, BNRM2, EPS, ONEPLS, SAFMAX, SAFMIN, $ SALFAI, SALFAR, SBETA, SCALE, TEMP * .. * .. Local Arrays .. LOGICAL LDUMMA( 1 ) * .. * .. External Subroutines .. EXTERNAL DGEQRF, DGGBAK, DGGBAL, DGGHRD, DHGEQZ, DLACPY, $ DLASCL, DLASET, DORGQR, DORMQR, DTGEVC, XERBLA * .. * .. External Functions .. LOGICAL LSAME INTEGER ILAENV DOUBLE PRECISION DLAMCH, DLANGE EXTERNAL LSAME, ILAENV, DLAMCH, DLANGE * .. * .. Intrinsic Functions .. INTRINSIC ABS, INT, MAX * .. * .. Executable Statements .. * * Decode the input arguments * IF( LSAME( JOBVL, 'N' ) ) THEN IJOBVL = 1 ILVL = .FALSE. ELSE IF( LSAME( JOBVL, 'V' ) ) THEN IJOBVL = 2 ILVL = .TRUE. ELSE IJOBVL = -1 ILVL = .FALSE. END IF * IF( LSAME( JOBVR, 'N' ) ) THEN IJOBVR = 1 ILVR = .FALSE. ELSE IF( LSAME( JOBVR, 'V' ) ) THEN IJOBVR = 2 ILVR = .TRUE. ELSE IJOBVR = -1 ILVR = .FALSE. END IF ILV = ILVL .OR. ILVR * * Test the input arguments * LWKMIN = MAX( 8*N, 1 ) LWKOPT = LWKMIN WORK( 1 ) = LWKOPT LQUERY = ( LWORK.EQ.-1 ) INFO = 0 IF( IJOBVL.LE.0 ) THEN INFO = -1 ELSE IF( IJOBVR.LE.0 ) THEN INFO = -2 ELSE IF( N.LT.0 ) THEN INFO = -3 ELSE IF( LDA.LT.MAX( 1, N ) ) THEN INFO = -5 ELSE IF( LDB.LT.MAX( 1, N ) ) THEN INFO = -7 ELSE IF( LDVL.LT.1 .OR. ( ILVL .AND. LDVL.LT.N ) ) THEN INFO = -12 ELSE IF( LDVR.LT.1 .OR. ( ILVR .AND. LDVR.LT.N ) ) THEN INFO = -14 ELSE IF( LWORK.LT.LWKMIN .AND. .NOT.LQUERY ) THEN INFO = -16 END IF * IF( INFO.EQ.0 ) THEN NB1 = ILAENV( 1, 'DGEQRF', ' ', N, N, -1, -1 ) NB2 = ILAENV( 1, 'DORMQR', ' ', N, N, N, -1 ) NB3 = ILAENV( 1, 'DORGQR', ' ', N, N, N, -1 ) NB = MAX( NB1, NB2, NB3 ) LOPT = 2*N + MAX( 6*N, N*( NB+1 ) ) WORK( 1 ) = LOPT END IF * IF( INFO.NE.0 ) THEN CALL XERBLA( 'DGEGV ', -INFO ) RETURN ELSE IF( LQUERY ) THEN RETURN END IF * * Quick return if possible * IF( N.EQ.0 ) $ RETURN * * Get machine constants * EPS = DLAMCH( 'E' )*DLAMCH( 'B' ) SAFMIN = DLAMCH( 'S' ) SAFMIN = SAFMIN + SAFMIN SAFMAX = ONE / SAFMIN ONEPLS = ONE + ( 4*EPS ) * * Scale A * ANRM = DLANGE( 'M', N, N, A, LDA, WORK ) ANRM1 = ANRM ANRM2 = ONE IF( ANRM.LT.ONE ) THEN IF( SAFMAX*ANRM.LT.ONE ) THEN ANRM1 = SAFMIN ANRM2 = SAFMAX*ANRM END IF END IF * IF( ANRM.GT.ZERO ) THEN CALL DLASCL( 'G', -1, -1, ANRM, ONE, N, N, A, LDA, IINFO ) IF( IINFO.NE.0 ) THEN INFO = N + 10 RETURN END IF END IF * * Scale B * BNRM = DLANGE( 'M', N, N, B, LDB, WORK ) BNRM1 = BNRM BNRM2 = ONE IF( BNRM.LT.ONE ) THEN IF( SAFMAX*BNRM.LT.ONE ) THEN BNRM1 = SAFMIN BNRM2 = SAFMAX*BNRM END IF END IF * IF( BNRM.GT.ZERO ) THEN CALL DLASCL( 'G', -1, -1, BNRM, ONE, N, N, B, LDB, IINFO ) IF( IINFO.NE.0 ) THEN INFO = N + 10 RETURN END IF END IF * * Permute the matrix to make it more nearly triangular * Workspace layout: (8*N words -- "work" requires 6*N words) * left_permutation, right_permutation, work... * ILEFT = 1 IRIGHT = N + 1 IWORK = IRIGHT + N CALL DGGBAL( 'P', N, A, LDA, B, LDB, ILO, IHI, WORK( ILEFT ), $ WORK( IRIGHT ), WORK( IWORK ), IINFO ) IF( IINFO.NE.0 ) THEN INFO = N + 1 GO TO 120 END IF * * Reduce B to triangular form, and initialize VL and/or VR * Workspace layout: ("work..." must have at least N words) * left_permutation, right_permutation, tau, work... * IROWS = IHI + 1 - ILO IF( ILV ) THEN ICOLS = N + 1 - ILO ELSE ICOLS = IROWS END IF ITAU = IWORK IWORK = ITAU + IROWS CALL DGEQRF( IROWS, ICOLS, B( ILO, ILO ), LDB, WORK( ITAU ), $ WORK( IWORK ), LWORK+1-IWORK, IINFO ) IF( IINFO.GE.0 ) $ LWKOPT = MAX( LWKOPT, INT( WORK( IWORK ) )+IWORK-1 ) IF( IINFO.NE.0 ) THEN INFO = N + 2 GO TO 120 END IF * CALL DORMQR( 'L', 'T', IROWS, ICOLS, IROWS, B( ILO, ILO ), LDB, $ WORK( ITAU ), A( ILO, ILO ), LDA, WORK( IWORK ), $ LWORK+1-IWORK, IINFO ) IF( IINFO.GE.0 ) $ LWKOPT = MAX( LWKOPT, INT( WORK( IWORK ) )+IWORK-1 ) IF( IINFO.NE.0 ) THEN INFO = N + 3 GO TO 120 END IF * IF( ILVL ) THEN CALL DLASET( 'Full', N, N, ZERO, ONE, VL, LDVL ) CALL DLACPY( 'L', IROWS-1, IROWS-1, B( ILO+1, ILO ), LDB, $ VL( ILO+1, ILO ), LDVL ) CALL DORGQR( IROWS, IROWS, IROWS, VL( ILO, ILO ), LDVL, $ WORK( ITAU ), WORK( IWORK ), LWORK+1-IWORK, $ IINFO ) IF( IINFO.GE.0 ) $ LWKOPT = MAX( LWKOPT, INT( WORK( IWORK ) )+IWORK-1 ) IF( IINFO.NE.0 ) THEN INFO = N + 4 GO TO 120 END IF END IF * IF( ILVR ) $ CALL DLASET( 'Full', N, N, ZERO, ONE, VR, LDVR ) * * Reduce to generalized Hessenberg form * IF( ILV ) THEN * * Eigenvectors requested -- work on whole matrix. * CALL DGGHRD( JOBVL, JOBVR, N, ILO, IHI, A, LDA, B, LDB, VL, $ LDVL, VR, LDVR, IINFO ) ELSE CALL DGGHRD( 'N', 'N', IROWS, 1, IROWS, A( ILO, ILO ), LDA, $ B( ILO, ILO ), LDB, VL, LDVL, VR, LDVR, IINFO ) END IF IF( IINFO.NE.0 ) THEN INFO = N + 5 GO TO 120 END IF * * Perform QZ algorithm * Workspace layout: ("work..." must have at least 1 word) * left_permutation, right_permutation, work... * IWORK = ITAU IF( ILV ) THEN CHTEMP = 'S' ELSE CHTEMP = 'E' END IF CALL DHGEQZ( CHTEMP, JOBVL, JOBVR, N, ILO, IHI, A, LDA, B, LDB, $ ALPHAR, ALPHAI, BETA, VL, LDVL, VR, LDVR, $ WORK( IWORK ), LWORK+1-IWORK, IINFO ) IF( IINFO.GE.0 ) $ LWKOPT = MAX( LWKOPT, INT( WORK( IWORK ) )+IWORK-1 ) IF( IINFO.NE.0 ) THEN IF( IINFO.GT.0 .AND. IINFO.LE.N ) THEN INFO = IINFO ELSE IF( IINFO.GT.N .AND. IINFO.LE.2*N ) THEN INFO = IINFO - N ELSE INFO = N + 6 END IF GO TO 120 END IF * IF( ILV ) THEN * * Compute Eigenvectors (DTGEVC requires 6*N words of workspace) * IF( ILVL ) THEN IF( ILVR ) THEN CHTEMP = 'B' ELSE CHTEMP = 'L' END IF ELSE CHTEMP = 'R' END IF * CALL DTGEVC( CHTEMP, 'B', LDUMMA, N, A, LDA, B, LDB, VL, LDVL, $ VR, LDVR, N, IN, WORK( IWORK ), IINFO ) IF( IINFO.NE.0 ) THEN INFO = N + 7 GO TO 120 END IF * * Undo balancing on VL and VR, rescale * IF( ILVL ) THEN CALL DGGBAK( 'P', 'L', N, ILO, IHI, WORK( ILEFT ), $ WORK( IRIGHT ), N, VL, LDVL, IINFO ) IF( IINFO.NE.0 ) THEN INFO = N + 8 GO TO 120 END IF DO 50 JC = 1, N IF( ALPHAI( JC ).LT.ZERO ) $ GO TO 50 TEMP = ZERO IF( ALPHAI( JC ).EQ.ZERO ) THEN DO 10 JR = 1, N TEMP = MAX( TEMP, ABS( VL( JR, JC ) ) ) 10 CONTINUE ELSE DO 20 JR = 1, N TEMP = MAX( TEMP, ABS( VL( JR, JC ) )+ $ ABS( VL( JR, JC+1 ) ) ) 20 CONTINUE END IF IF( TEMP.LT.SAFMIN ) $ GO TO 50 TEMP = ONE / TEMP IF( ALPHAI( JC ).EQ.ZERO ) THEN DO 30 JR = 1, N VL( JR, JC ) = VL( JR, JC )*TEMP 30 CONTINUE ELSE DO 40 JR = 1, N VL( JR, JC ) = VL( JR, JC )*TEMP VL( JR, JC+1 ) = VL( JR, JC+1 )*TEMP 40 CONTINUE END IF 50 CONTINUE END IF IF( ILVR ) THEN CALL DGGBAK( 'P', 'R', N, ILO, IHI, WORK( ILEFT ), $ WORK( IRIGHT ), N, VR, LDVR, IINFO ) IF( IINFO.NE.0 ) THEN INFO = N + 9 GO TO 120 END IF DO 100 JC = 1, N IF( ALPHAI( JC ).LT.ZERO ) $ GO TO 100 TEMP = ZERO IF( ALPHAI( JC ).EQ.ZERO ) THEN DO 60 JR = 1, N TEMP = MAX( TEMP, ABS( VR( JR, JC ) ) ) 60 CONTINUE ELSE DO 70 JR = 1, N TEMP = MAX( TEMP, ABS( VR( JR, JC ) )+ $ ABS( VR( JR, JC+1 ) ) ) 70 CONTINUE END IF IF( TEMP.LT.SAFMIN ) $ GO TO 100 TEMP = ONE / TEMP IF( ALPHAI( JC ).EQ.ZERO ) THEN DO 80 JR = 1, N VR( JR, JC ) = VR( JR, JC )*TEMP 80 CONTINUE ELSE DO 90 JR = 1, N VR( JR, JC ) = VR( JR, JC )*TEMP VR( JR, JC+1 ) = VR( JR, JC+1 )*TEMP 90 CONTINUE END IF 100 CONTINUE END IF * * End of eigenvector calculation * END IF * * Undo scaling in alpha, beta * * Note: this does not give the alpha and beta for the unscaled * problem. * * Un-scaling is limited to avoid underflow in alpha and beta * if they are significant. * DO 110 JC = 1, N ABSAR = ABS( ALPHAR( JC ) ) ABSAI = ABS( ALPHAI( JC ) ) ABSB = ABS( BETA( JC ) ) SALFAR = ANRM*ALPHAR( JC ) SALFAI = ANRM*ALPHAI( JC ) SBETA = BNRM*BETA( JC ) ILIMIT = .FALSE. SCALE = ONE * * Check for significant underflow in ALPHAI * IF( ABS( SALFAI ).LT.SAFMIN .AND. ABSAI.GE. $ MAX( SAFMIN, EPS*ABSAR, EPS*ABSB ) ) THEN ILIMIT = .TRUE. SCALE = ( ONEPLS*SAFMIN / ANRM1 ) / $ MAX( ONEPLS*SAFMIN, ANRM2*ABSAI ) * ELSE IF( SALFAI.EQ.ZERO ) THEN * * If insignificant underflow in ALPHAI, then make the * conjugate eigenvalue real. * IF( ALPHAI( JC ).LT.ZERO .AND. JC.GT.1 ) THEN ALPHAI( JC-1 ) = ZERO ELSE IF( ALPHAI( JC ).GT.ZERO .AND. JC.LT.N ) THEN ALPHAI( JC+1 ) = ZERO END IF END IF * * Check for significant underflow in ALPHAR * IF( ABS( SALFAR ).LT.SAFMIN .AND. ABSAR.GE. $ MAX( SAFMIN, EPS*ABSAI, EPS*ABSB ) ) THEN ILIMIT = .TRUE. SCALE = MAX( SCALE, ( ONEPLS*SAFMIN / ANRM1 ) / $ MAX( ONEPLS*SAFMIN, ANRM2*ABSAR ) ) END IF * * Check for significant underflow in BETA * IF( ABS( SBETA ).LT.SAFMIN .AND. ABSB.GE. $ MAX( SAFMIN, EPS*ABSAR, EPS*ABSAI ) ) THEN ILIMIT = .TRUE. SCALE = MAX( SCALE, ( ONEPLS*SAFMIN / BNRM1 ) / $ MAX( ONEPLS*SAFMIN, BNRM2*ABSB ) ) END IF * * Check for possible overflow when limiting scaling * IF( ILIMIT ) THEN TEMP = ( SCALE*SAFMIN )*MAX( ABS( SALFAR ), ABS( SALFAI ), $ ABS( SBETA ) ) IF( TEMP.GT.ONE ) $ SCALE = SCALE / TEMP IF( SCALE.LT.ONE ) $ ILIMIT = .FALSE. END IF * * Recompute un-scaled ALPHAR, ALPHAI, BETA if necessary. * IF( ILIMIT ) THEN SALFAR = ( SCALE*ALPHAR( JC ) )*ANRM SALFAI = ( SCALE*ALPHAI( JC ) )*ANRM SBETA = ( SCALE*BETA( JC ) )*BNRM END IF ALPHAR( JC ) = SALFAR ALPHAI( JC ) = SALFAI BETA( JC ) = SBETA 110 CONTINUE * 120 CONTINUE WORK( 1 ) = LWKOPT * RETURN * * End of DGEGV * END


Primary content This message just needs to stand out.
Secondary content This message just needs to stand out.
Heads up! This alert needs your attention, but it's not super important.
Well done! You successfully read this important alert message.
Warning! Better check yourself, you're not looking too good.
Oh snap! Change a few things up and try submitting again. Look it works with really long texts too. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eu purus in odio finibus dignissim. Pellentesque nibh tortor, lacinia a dapibus et, scelerisque quis dui.


Using dashboards to display metrics service data
Prerequisites
An AeroGear metrics service instance, created from the OpenShift service catalog as described in Creating the Metrics Service
Overview of dashboards
The metrics service uses Prometheus to gather metrics data from other mobile services and Grafana to display that data.
A Grafana dashboard allows you to arrange panels and charts together to provide a visual overview of your metrics. See the Grafana Getting Started guide for an introduction to dashboards.
When you create an instance of an AeroGear service from the OpenShift service catalog, a dashboard that shows metrics about that service is added to Grafana. You can also create and modify custom dashboards to:
-
visualize metrics from apps and backend services that are not mobile services
-
monitor additional metrics from mobile services that are not displayed by default
-
monitor additional metrics from OpenShift that are not displayed by default
Creating dashboards in Grafana
You can create dashboards using Drag and Drop in Grafana. See the Grafana Documentation to learn about building Grafana dashboards.
Importing dashboards
All Grafana dashboards are represented by a JSON definition. Dashboards can be imported and exported using that JSON definition as described in the importing and exporting dashboards Grafana documentation.
Customizing the mobile services dashboards
When you provision a mobile service from the service catalog, a dashboard showing metrics about that service is added to Grafana.
| If you edit the default mobile service dashboards, your changes will be lost whenever the associated mobile service is updated. |
Before editing the dashboard, clone it as follows:
-
Open the Dashboard you want to clone.
-
Click the settings icon in the dashboard controls to show the Settings screen.
-
Select the Save As option and enter in a name for the new dashboard, for example
Copy of Sync Service Dashboard
.


News story
Assessment updates for schools
This was published under the 2010 to 2015 Conservative and Liberal Democrat coalition government
Information about the Standards and Testing Agency's email newsletters for early years providers and key stage 1 and key stage 2 schools.
Maintained schools, and others that must take part in the national curriculum assessments
If you are a maintained school or academy and must take part in the statutory national curriculum assessments, we email
assessment updates
to your school throughout the year. These updates give you essential information to help you complete actions on time and administer the key stages 1 and 2 tests and phonics screening check correctly.
Independent schools, and others that choose to take part in the national curriculum assessments
Independent schools and non-maintained special schools can opt to take part in the national curriculum tests. If you do, we will email
assessment updates
with information specific to you. These updates give you essential information to help you complete actions on time and administer the assessments correctly.
Assessment updates are sent to your school’s super user email address from the
NCA tools website
.


{% extends 'base.html' %} {% block title %}Log in{% endblock %} {% block page-header %}Log in{% endblock %} {% block container %}
Your account doesn't have access to this page. To proceed, please login with an account that has access.
Forgot password?
No account? Sign up now


There are currently no leases on file. Contact your administrator to sync records.
| PROPERTY | UNIT | TENANT | OCC TYPE | BALANCE | ||
|---|---|---|---|---|---|---|
| Unknown {{lease.PropertyName}} | {{lease.UnitId}} | Unknown {{lease.UnitNumber}} | No Tenant {{lease.FirstName}} {{lease.LastName}} Onboarding Pending | Unknown Current Former Future | {{lease.BalanceCents}} | Details |


osm/osm,osm/opentopo
[{
"id":"Barcelona",
"url":"https://github.jspm.io/probins/map-make-samples/data/barcelona.geojson",
"style":{"stroke":{"color":"rgba(255,255,0,0.6)","width":3,"lineDash":[5]}},
"attribution": "All my own work"
}]
mouseposition,center


Ends the currently running macro. If the currently running macro is a subroutine macro that was called by another macro, control is returned to the calling macro. If the currently running macro is a custom function, control is returned to the formula that called the custom function. If the currently running macro is a command macro started by the user with the Run button in the Macro dialog box or a shortcut key or by clicking an object, control is returned to the user.
Syntax
RETURN(value)
Value specifies what to return.
If the macro is a custom function or a subroutine, value specifies what value to return. However, not all subroutines return values; the last line in macros that do not return values is =RETURN().
If the macro is a command macro run by the user, value should be omitted.
Remarks
RETURN signals the end of a macro. Every macro must end with a RETURN or HALT function, but not every macro returns values.
Example
The following function returns the sum of the range B1:B10:
RETURN(SUM(B1:B10))
Related Functions
BREAK Interrupts a FOR-NEXT, FOR.CELL-NEXT, or WHILE-NEXT loop
HALT Stops all macros from running
RESULT Specifies the data type a custom function returns
Return to index


Superstars Kawhi and George combine for 42 points in first Clippers game together
Luka Doncic showed no mercy against the struggling Golden State Warriors, while Ben Simmons landed his first NBA three-pointer.
by AFPKAWHI LEONARD AND Paul George combined for 42 points in their first game together as the Los Angeles Clippers pulled out a 107-104 overtime victory over the Boston Celtics on Wednesday.
The game marked the first time George and Leonard played together since both joined the Clippers in the offseason.
Leonard, who scored 17 points on seven-of-20 shooting, was coming off a three game rest and George — who missed the start of the season with a shoulder injury — was playing in his fourth game.
Rivers said George, who finished with 25 points, is still trying to play himself into shape.
“I was more concerned minute wise with Paul than Kawhi,” Rivers said. “It is funny. He (George) told me in the first half ‘I got to play more because I got to get in better shape. I am exhausted out here.’ This game helped. He was pretty strong at the end.”
Lou Williams scored a team high 27 points and Patrick Beverley grabbed a career-best 16 rebounds to go along with 14 points and seven assists. JaMychal Green also added 10 points as Los Angeles won its third straight game.
Jayson Tatum led the Celtics with a season-high 30 points. Marcus Smart recorded 15 points and eight assists, Brad Wanamaker added 14 points, and Kemba Walker had 13 points and nine rebounds.
“It was a high-level game,” said Celtics coach Brad Stevens. “Both teams competed, even when the shots weren’t going down.”
Boston had their chances as Tatum missed a tying three-point attempt with two seconds left, and Leonard blocked Walker’s desperation three-point attempt just before the buzzer in overtime.
“That was an ugly win, but it was beautiful,” Rivers said.
Elsewhere, Luka Doncic posted his league-leading seventh triple double of the season en route to a 35-point performance as the Dallas Mavericks trounced the Golden State Warriors 142-94.
The 20-year-old Slovenian scored 35 points in just 26 minutes of playing time and he finished with 11 assists and 10 rebounds in front of a crowd of 19,500 at the American Airlines Center.
“He’s doing his thing, knocking down threes, drawing fouls. He took it to us,” said Warriors coach Steve Kerr of Doncic.
Doncic scored 33 of his points in the opening half en route to his second consecutive triple double. He was coming off a career-best, 42-point performance in a triple double Monday against San Antonio.
Tim Hardaway Jr. finished with 20 points and went four-for-four from beyond the arc for the Mavs, who posted their third straight win to start a four-game homestand.
Rookie Eric Paschall led Golden State with 22 points.
Also, Nikola Jokic posted a season-high 27 points and grabbed 12 rebounds as the Denver Nuggets snapped the Houston Rockets eight game win streak with a 105-95 win.
Will Barton had 15 points and seven rebounds, and Paul Millsap scored 11 points for Denver, which had all five starters finish in double figures en route to its seventh win in eight games.
James Harden finished with 27 points, seven rebounds and seven assists and Russell Westbrook added 25 points in the loss.
The Rockets were held to under 100 points for the first time this season as they turned the ball over 20 times.
- Rockets misfire -
In Toronto, Fred VanVleet scored 24 points and added seven assists, and the Toronto Raptors improved to 6-0 at home this season with a 113-97 win over the Orlando Magic.
It was the second win for the Raptors against the Magic this season.
Terence Davis had a career-best 19 points and Pascal Siakam tallied 18 points and 11 rebounds for the Raptors who shot 52 percent from the floor.
Norman Powell added 15 points and Chris Boucher delivered 14 points and 11 rebounds.
Centre Nikola Vucevic and forward Aaron Gordon left the game with sprained ankles in the first half and did not return.
And finally, Ben Simmons nailed his first three-pointer in the NBA. After 17 unsuccessful attempts, the Philadelphia 76ers guard ended his drought in the opening quarter of his team’s 109-104 win over the New York Knicks.


{% include "__head.html" %}
Ra
coon
Sign in to start your session
{{ form.csrf_token }}
{{ form.username(size=20) }}
{{ form.password(size=20) }}
{{ form.remember_me }} {{ form.remember_me.label }}
Sign In
Register a new membership
{% include "__js_base.html" %}


v1.2.0
- [Helper-Response] Support to specify 'type' in helperResp.handleResult function itself, instead of specifying it
in the function returned
v1.1.0
- [HelperMongo] Support for removing multiple documents
- [HelperMongo] Support for specifying query n project operations for #getById
- [HelperMongo] Support for specifying/overriding query n project operations for #getList
- [Crud] New Api Support for deleting multiple entries
v1.0.2
- Minor Performance Improvements
v1.0.1
- [Session-JWT] Removed password in Login/Register response
- [Session-JWT] Support to specify email/password fields for Session-JWT
v1.0.0


|
toolbar - A toolbar handle
tips$ - The 'tips' to set for the toolbar |
|
SetToolBarTips allows you attach textual 'tips' to toolbar buttons.
Toolbar tips appear as small rectangular popups when the mouse pointer is held over a toolbar button for about a second. Their purpose is to let the user know what those buttons really mean! Tips for multiple buttons on the toolbar should be separated by commas - see the example below for details. See also: CreateToolbar. |
|
; Example provided by Mag, added to documentation by Mark Tiffany
; get bitmap icon from the Blitz directory appdir$=SystemProperty("appdir") blitzdir$=Left(appdir,Len(appdir)-5) BMP$=blitzdir$+"\cfg\dbg_toolbar.bmp" Notify "We will use this bitmap for our ToolBar: "+Chr$(13)+BMP$ ; create a window to put the toolbar in WinHandle=CreateWindow("Test CreateToolbar",0,0,400,200) ; and create the toolbar toolHandle=CreateToolBar(BMP$,0,0,0,0,WinHandle) ; create the tooltips SetToolBarTips toolHandle,"Red Light,Green Light,Step Next,Step Into,Step Over,BOOM!" ; and now a loop to demonstrate it in action Repeat event=WaitEvent() If event=$803 Then End ; exit when we receive a Window Close event If event=$401 Then ; Button action event. EventData contains the toolbar button hit. ; Note that if we had more than just the toolbar on the form, we would check EventSource too If EventData()=0 Then Notify "Red Light selected" If EventData()=1 Then Notify "Green Light selected" If EventData()=2 Then Notify "Step Next selected" If EventData()=3 Then Notify "Step Into selected" If EventData()=4 Then Notify "Step Over selected" If EventData()=5 Then Notify "Boom selected" End If Forever End |


 However, it only speaks to one side of the equation. The other side is equally evident — those “moron leaders” who drip with venom, seeking to inflame and overturn the results of the 2016 election.
I listened to a sermon last Sunday based upon Paul’s letter to the Ephesians, in which he warns, “[W]e wrestle … against principalities, against rulers of the darkness of this world, against wickedness in high places.” Reps. Adam Schiff and Jerry Nadler immediately came to mind.
ROBERT HARGEST
TOP STORIES
Bill Clinton offers Trump advice on impeachment
Reckoning coming for Adam Schiff for impeachment inquiry
'It's going to backfire': Impeachment boosts Trump in battleground states
Alexandria, Va.
Sign up for Daily Opinion Newsletter
Copyright © 2019 The Washington Times, LLC. Click here for reprint permission.
Please read our comment policy before commenting.


Engineer and Technical Product Developer
(contact info available by downloading a pdf version of this document)
11/2021 - Current
I built and now lead a team that does weird and innovative Linux things that I can’t really talk about, both in the kernel and in userspace, to serve Intel’s hyper-scale customers’ resource management needs.
07/2018 - 10/2021
For the first half of my time at Auxon, I continued my exploration into applying proof theoretical methods for checking software at both compile time and runtime.
Once Auxon moved on from developing high-assurance software itself, I began focussing on the customer-facing edges of our product, finding that putting myself in the shoes of potential users came naturally. During this time I developed and implemented Modality’s log, check, and cumulative report features.
11/2017 - 07/2018
I came to PolySync to contribute to the high-assurance automotive runtime they were building working as a hybrid proof / software engineer. PolySync intended to use my work and research to find ways to blur the line between proof and program to instill further confidence in the integrity of the software they developed.
12/2014-11/2017
12/2012-12/2014
I was one of the first 10 developers working on VMware’s public cloud platform, vCHS. We made a globally distributed system which could deploy complete private VMware environments to the cloud in minutes. It did this through a number of interesting technologies including but not limited to: CQRS & Event Sourcing, AMQP, Cassandra, (and all of its finicky eventual consistency idiosyncrasies), and a homegrown Paxos implementation—which I was later responsible for replacing with Zookeeper.
2/2012-12/2012
At Enterhost, a hosting provider, and its MSP arm Consuro, I was responsible for designing and then implementing and/or installing medium-sized networks involving VMware infrastructure, typically on customer premises with disaster recovery environments collocated at Enterhost’s datacenter.
7/2008-2/2012
I was the primary IT provider for a midsize enterprise—an aftermarket automotive parts distributor and retailer. During the time I was there, I rebuilt their technology infrastructure from the ground up.
This included:


Home
Graduates
Thoughts
Omar Jajah
Logout
I took CS50!
Latest thoughts from CS50 takers!
+ Share thought


primary_key and foreign_key in Rails association
The hasmany and belongsto association in Rails are with many optional parameters, they are actually the parameters for DB relationship, see more details by clicking here.
As a reminder to myself, I misunderstood the primarykey an foreignkey conditions in association, it should be set in both sides in some case, for instance:
class Student < ActiveRecord::Base hasmany :triallessons, :foreignkey => :userid, :primarykey => :profileid endAbove code will let you invoke the student.triallessons, but if you want to use triallesson.student, you have to define the association as below:
class TrialLesson < ActiveRecord::Base belongsto :student, :primarykey => :profileid, :foreignkey => :userid end
Notice that: you actually set the same :primarykey and :foreign_key in both sides, it’s because...
......


To do list
Add a task to your list:
Priority
Urgent
Regular
Low Priority
Create new task
Tasks
Sort A-Z
Sort by Category
Sort By Date
Sort By Priority
{{item.taskName}}
{{item.taskCat}}
{{item.taskDate}}
{{item.taskPrio}}
Priority
Urgent
Regular
Low Priority
🖉
✕


{% load staticfiles %}
Rachell and DaYoung
Rachell & DY
Menu
Email Us
Stuff we'd love but don't have yet!
Item: {{entry.item}}
Price: {{entry.price}}
Visit store's website


--- layout: default title: Home lang: English ref: home ---
Libraries and other cultural heritage organisations (CHOs) and their staff occupy a central role in digital humanities. Given the importance many of these organisations attach to their role as supporters of research, a case can be made for the opportunity and need for libraries and their staff to position and assert themselves as partners in research.
This full-day pre-conference was held in The Hague on 8 July 2019. The program aimed to address the complexities of positioning libraries (and other CHOs) as digital humanities research partners. The question of CHOs and librarians as service providers or partners is a well-established, rich territory, with implications for labour and status. However, many are still finding their place in digital humanities due to questions of institutional commitments and external expectations. This pre-conference invited contributions addressing the topic of building trustworthy and sustainable research partnerships in digital (humanities) research that recognize the expertise of CHO staff.
The organizers are grateful to the National Library of the Netherlands, who hosted this event and provided livestreaming of many sessions. Lotte Wilms was instrumental to the event's success. Recordings of those sessions are available on the KB YouTube channel. We are additionally thankful to our excellent presenters, who have shared slides and other materials from their presentations in our Zenodo community. Please visit our programme page for further details.


Principal Public API
-
This provides easy access to the singleton NoiseTagController.
Declaration
Swift
public var NoiseTagging: NoiseTagController { get }
-
This class provides a singleton
See moreNoiseTagController
, which is responsible for coordinating everything that has to do with noise tagging. Access the singleton instance using the convenience variableNoiseTagging
.Declaration
Swift
public class NoiseTagController : NSObject, SetOfSettingsDelegate, NetworkingHelperDelegate
-
Undocumented
See moreDeclaration
Swift
@objc public protocol NoiseTagDelegate : AnyObject


{{ item.title }}
This is a unique and brilliant app. I haven't found any modelling apps that can hold a candle to it. It's only gotten better since the upgrade and pose gallaries! Anka D. Bane
This is a unique and brilliant app. I haven't found any modelling apps that can hold a candle to it. It's only gotten better since the upgrade and pose gallaries!


Audio Video Brands We Carry in Vancouver
The technology behind your home automation system is only as good as the device that allows you to control it. Once we have integrated your new smart home with intelligent systems, the fun parts is taking control of any of those systems with the magical touch of a simple elegant device. The true measure of wizardry (afforded you from a broad range of devices) allows you to control all the systems in your home seamlessly, while the technology behind them remains completely hidden from the naked eye. We work with nothing but the best-in-class manufactures to offer you a choice menu of capable products and devices to meet your project goals.


Type .url to load another page, or .web to interact.
Some websites to try: (note that some popular websites disable framing and cannot be browsed here)


[1]
after a minute or so it turned off again.
[2]
just barley OK for someone just getting off a minute or so it turned off again.


--- layout: default title: Containers page-header: headline: "Containers" alignment: left parent: label: "Layout" url: "/layout" page-navigation: - label: "Fixed-Width Containers" link: "#containers" - label: "Fluid-Width Containers" link: "#containers-fluid" navigation: - label: "Fluid-Width Container Options" link: "#containers-fluid-variants" ---
Containers provide basic layout functionality. The term "container" has been borrowed from Twitter's Bootstrap, and is meant to imply an element that wraps or "contains" content.
In Canvas, containers can be used independent of the Grid System. Properties such as a width and margin for the container vary depending on both the class and screen resolution. Choose from a responsive, fixed-width container (meaning its max-width changes at each breakpoint) or fluid-width (meaning it’s 100% wide all the time).