From 0923a21ffb31e77a296574c4b6894534a7b82245 Mon Sep 17 00:00:00 2001 From: "Malcolm J. Currie" Date: Wed, 13 Aug 2014 22:02:05 -1000 Subject: [PATCH] KAPPA: Prevent segv when using variance in MSTATS. KPS1_MSAGx only processes one array component at a time, so call separately for DATA and VARIANCE components. This could be changed, but adding extra calls with distinct pointers in IPIN does the trick. --- applications/kappa/libkappa/mstats.f | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/applications/kappa/libkappa/mstats.f b/applications/kappa/libkappa/mstats.f index 56aa6986f8f..df0fe655285 100644 --- a/applications/kappa/libkappa/mstats.f +++ b/applications/kappa/libkappa/mstats.f @@ -281,8 +281,8 @@ SUBROUTINE MSTATS( STATUS ) * Councils. * Copyright (C) 2006 Particle Physics & Astronomy Research * Council. -* Copyright (C) 2008, 2009, 2012 Science & Technology Facilities -* Council. +* Copyright (C) 2008, 2009, 2012, 2014, Science & Technology +* Facilities Council. * All Rights Reserved. * Licence: @@ -335,6 +335,10 @@ SUBROUTINE MSTATS( STATUS ) * instead (set by the global MSG_FILTER environment variable). * 2012 August 3 (MJC): * Added "NGood", "NBad", "FGood", and "FBad" estimators. +* 2014 August 13 (MJC): +* Call KPS1_MSAGx separately for Data and Variance as this +* routine only processes one array component at a time. +* This preserves the pointer to the variance array. * {enter_further_changes_here} *- @@ -699,11 +703,23 @@ SUBROUTINE MSTATS( STATUS ) * make an array one dimension larger, which is then collapsed. * The routine returns the pointer to the mapped component. IF ( ITYPE .EQ. '_DOUBLE' ) THEN - CALL KPS1_MSAGD( NNDF, %VAL( CNF_PVAL( IPNDF ) ), COMP, - : NDIM, IBLSIZ, IBLOCK, IPIN, STATUS ) + CALL KPS1_MSAGD( NNDF, %VAL( CNF_PVAL( IPNDF ) ), 'Data', + : NDIM, IBLSIZ, IBLOCK, IPIN( 1 ), + : STATUS ) + IF ( PVAR ) THEN + CALL KPS1_MSAGD( NNDF, %VAL( CNF_PVAL( IPNDF ) ), + : 'Variance', NDIM, IBLSIZ, IBLOCK, + : IPIN( 2 ), STATUS ) + END IF ELSE - CALL KPS1_MSAGR( NNDF, %VAL( CNF_PVAL( IPNDF ) ), COMP, - : NDIM, IBLSIZ, IBLOCK, IPIN, STATUS ) + CALL KPS1_MSAGR( NNDF, %VAL( CNF_PVAL( IPNDF ) ), 'Data', + : NDIM, IBLSIZ, IBLOCK, IPIN( 1 ), + : STATUS ) + IF ( PVAR ) THEN + CALL KPS1_MSAGR( NNDF, %VAL( CNF_PVAL( IPNDF ) ), + : 'Variance', NDIM, IBLSIZ, IBLOCK, + : IPIN( 2 ), STATUS ) + END IF END IF CALL NDF_BLOCK( ONDF, NDIM, OBLSIZ, IBLOCK, OBL, STATUS )