From 55d1687384bcd1e0091cf96ad42fed4fa69cb450 Mon Sep 17 00:00:00 2001 From: Bob Yantosca Date: Wed, 22 Aug 2018 16:57:08 -0400 Subject: [PATCH] Now register SSAlkAccum and SSAlkCoarse separately The State_Chm%SSAlk array cannot be registered as a single array, because it is has a 4th dimension of size 2, which is interpreted as per species. The solution is to register the two fields separately, as SSAlkAccum and SSAlkCoarse. This also requires a slight modification to the HISTORY.rc files. Signed-off-by: Bob Yantosca --- Headers/state_chm_mod.F90 | 49 ++++++++++++++++++++++++++++++++++----- 1 file changed, 43 insertions(+), 6 deletions(-) diff --git a/Headers/state_chm_mod.F90 b/Headers/state_chm_mod.F90 index 26fa19a3e..bceefd537 100644 --- a/Headers/state_chm_mod.F90 +++ b/Headers/state_chm_mod.F90 @@ -698,6 +698,8 @@ SUBROUTINE Init_State_Chm( am_I_Root, Input_Opt, State_Chm, RC ) IF ( RC /= GC_SUCCESS ) RETURN State_Chm%Species = 0.0_fp CALL Register_ChmField( am_I_Root, chmID, State_Chm%Species, State_Chm, RC ) + CALL GC_CheckVar( 'State_Chm%Species', 1, RC ) + IF ( RC /= GC_SUCCESS ) RETURN !======================================================================= ! Allocate and initialize quantities that are only relevant for the @@ -758,6 +760,7 @@ SUBROUTINE Init_State_Chm( am_I_Root, Input_Opt, State_Chm, RC ) CALL Register_ChmField( am_I_Root, chmID, State_Chm%AeroArea, & State_Chm, RC, Ncat=N ) + CALL GC_CheckVar( 'State_Chm%AeroArea', 1, RC ) IF ( RC /= GC_SUCCESS ) RETURN ENDDO @@ -811,6 +814,7 @@ SUBROUTINE Init_State_Chm( am_I_Root, Input_Opt, State_Chm, RC ) CALL Register_ChmField( am_I_Root, chmID, State_Chm%AeroRadi, & State_Chm, RC, Ncat=N ) + CALL GC_CheckVar( 'State_Chm%AeroRadi', 1, RC ) IF ( RC /= GC_SUCCESS ) RETURN ENDDO @@ -864,6 +868,7 @@ SUBROUTINE Init_State_Chm( am_I_Root, Input_Opt, State_Chm, RC ) CALL Register_ChmField( am_I_Root, chmID, State_Chm%WetAeroArea, & State_Chm, RC, Ncat=N ) + CALL GC_CheckVar( 'State_Chm%WetAeroArea', 1, RC ) IF ( RC /= GC_SUCCESS ) RETURN ENDDO @@ -917,6 +922,7 @@ SUBROUTINE Init_State_Chm( am_I_Root, Input_Opt, State_Chm, RC ) CALL Register_ChmField( am_I_Root, chmID, State_Chm%WetAeroRadi, & State_Chm, RC, Ncat=N ) + CALL GC_CheckVar( 'State_Chm%WetAeroRadi', 1, RC ) IF ( RC /= GC_SUCCESS ) RETURN ENDDO @@ -930,6 +936,7 @@ SUBROUTINE Init_State_Chm( am_I_Root, Input_Opt, State_Chm, RC ) State_Chm%phSav = 0.0_fp CALL Register_ChmField( am_I_Root, chmID, State_Chm%phSav, & State_Chm, RC ) + CALL GC_CheckVar( 'State_Chm%phSav', 1, RC ) IF ( RC /= GC_SUCCESS ) RETURN !-------------------------------------------------------------------- @@ -942,6 +949,7 @@ SUBROUTINE Init_State_Chm( am_I_Root, Input_Opt, State_Chm, RC ) State_Chm%HplusSav = 0.0_fp CALL Register_ChmField( am_I_Root, chmID, State_Chm%HplusSav, & State_Chm, RC ) + CALL GC_CheckVar( 'State_Chm%HplusSav', 1, RC ) IF ( RC /= GC_SUCCESS ) RETURN !-------------------------------------------------------------------- @@ -954,6 +962,8 @@ SUBROUTINE Init_State_Chm( am_I_Root, Input_Opt, State_Chm, RC ) State_Chm%WaterSav = 0.0_fp CALL Register_ChmField( am_I_Root, chmID, State_Chm%WaterSav, & State_Chm, RC ) + CALL GC_CheckVar( 'State_Chm%WaterSav', 0, RC ) + IF ( RC /= GC_SUCCESS ) RETURN !-------------------------------------------------------------------- ! SulRatSav @@ -965,6 +975,7 @@ SUBROUTINE Init_State_Chm( am_I_Root, Input_Opt, State_Chm, RC ) State_Chm%SulRatSav = 0.0_fp CALL Register_ChmField( am_I_Root, chmID, State_Chm%SulRatSav, & State_Chm, RC ) + CALL GC_CheckVar( 'State_Chm%SulRatSav', 1, RC ) IF ( RC /= GC_SUCCESS ) RETURN !-------------------------------------------------------------------- @@ -977,6 +988,7 @@ SUBROUTINE Init_State_Chm( am_I_Root, Input_Opt, State_Chm, RC ) State_Chm%NaRatSav = 0.0_fp CALL Register_ChmField( am_I_Root, chmID, State_Chm%NaRatSav, & State_Chm, RC ) + CALL GC_CheckVar( 'State_Chm%NaRatSav', 1, RC ) IF ( RC /= GC_SUCCESS ) RETURN !-------------------------------------------------------------------- @@ -989,6 +1001,7 @@ SUBROUTINE Init_State_Chm( am_I_Root, Input_Opt, State_Chm, RC ) State_Chm%AcidPurSav = 0.0_fp CALL Register_ChmField( am_I_Root, chmID, State_Chm%AcidPurSav, & State_Chm, RC ) + CALL GC_CheckVar( 'State_Chm%AcidPurSav', 1, RC ) IF ( RC /= GC_SUCCESS ) RETURN !-------------------------------------------------------------------- @@ -1001,6 +1014,7 @@ SUBROUTINE Init_State_Chm( am_I_Root, Input_Opt, State_Chm, RC ) State_Chm%BisulSav = 0.0_fp CALL Register_ChmField( am_I_Root, chmID, State_Chm%BisulSav, & State_Chm, RC ) + CALL GC_CheckVar( 'State_Chm%BiSulSav', 1, RC ) IF ( RC /= GC_SUCCESS ) RETURN !-------------------------------------------------------------------- @@ -1013,17 +1027,30 @@ SUBROUTINE Init_State_Chm( am_I_Root, Input_Opt, State_Chm, RC ) State_Chm%pHCloud = 0.0_fp CALL Register_ChmField( am_I_Root, chmID, State_Chm%pHCloud, & State_Chm, RC ) + CALL GC_CheckVar( 'State_Chm%pHCloud', 1, RC ) + IF ( RC /= GC_SUCCESS ) RETURN !-------------------------------------------------------------------- ! SSAlk !-------------------------------------------------------------------- - chmId = 'SSAlk' ALLOCATE( State_Chm%SSAlk( IM, JM, LM, 2 ), STAT=RC ) CALL GC_CheckVar( 'State_Chm%SSAlk', 0, RC ) IF ( RC /= GC_SUCCESS ) RETURN - State_Chm%SSAlk = 0e+0_fp + State_Chm%SSAlk = 0.0_fp + + ! Register accumulation mode as category 1 + chmId = 'SSAlkAccum' CALL Register_ChmField( am_I_Root, chmID, State_Chm%SSAlk, & - State_Chm, RC ) + State_Chm, RC, nCat=1 ) + CALL GC_CheckVar( 'State-Chm%SsAlk', 1, RC ) + IF ( RC /= GC_SUCCESS ) RETURN + + ! Register coarse mode as category 1 + chmId = 'SSAlkCoarse' + CALL Register_ChmField( am_I_Root, chmID, State_Chm%SSAlk, & + State_Chm, RC, nCat=2 ) + CALL GC_CheckVar( 'State_Chm%SSAlk', 1, RC ) + IF ( RC /= GC_SUCCESS ) RETURN !------------------------------------------------------------------ ! HSO3_AQ @@ -1035,6 +1062,7 @@ SUBROUTINE Init_State_Chm( am_I_Root, Input_Opt, State_Chm, RC ) State_Chm%HSO3_AQ = 0.0_fp CALL Register_ChmField( am_I_Root, chmID, State_Chm%HSO3_AQ, & State_Chm, RC ) + CALL GC_CheckVar( 'State_Chm%HSO3_AQ', 1, RC ) IF ( RC /= GC_SUCCESS ) RETURN !------------------------------------------------------------------ @@ -1047,6 +1075,7 @@ SUBROUTINE Init_State_Chm( am_I_Root, Input_Opt, State_Chm, RC ) State_Chm%SO3_AQ = 0.0_fp CALL Register_ChmField( am_I_Root, chmID, State_Chm%SO3_AQ, & State_Chm, RC ) + CALL GC_CheckVar( 'State_Chm%SO3_AQ', 1, RC ) IF ( RC /= GC_SUCCESS ) RETURN !------------------------------------------------------------------ @@ -1059,6 +1088,7 @@ SUBROUTINE Init_State_Chm( am_I_Root, Input_Opt, State_Chm, RC ) State_Chm%fupdateHOBr = 0.0_fp CALL Register_ChmField( am_I_Root, chmID, State_Chm%fupdateHOBr, & State_Chm, RC ) + CALL GC_CheckVar( 'State_Chm%fupdateHOBr', 1, RC ) IF ( RC /= GC_SUCCESS ) RETURN ENDIF @@ -1077,6 +1107,7 @@ SUBROUTINE Init_State_Chm( am_I_Root, Input_Opt, State_Chm, RC ) State_Chm%STATE_PSC = 0.0_f4 CALL Register_ChmField( am_I_Root, chmID, State_Chm%STATE_PSC, & State_Chm, RC ) + CALL GC_CheckVar( 'State_Chm%STATE_PSC', 1, RC ) IF ( RC /= GC_SUCCESS ) RETURN !-------------------------------------------------------------------- @@ -1124,6 +1155,7 @@ SUBROUTINE Init_State_Chm( am_I_Root, Input_Opt, State_Chm, RC ) CALL Register_ChmField( am_I_Root, chmID, State_Chm%KHETI_SLA, & State_Chm, RC, Ncat=N ) + CALL GC_CheckVar( 'State_Chm%KHETISLA', 1, RC ) IF ( RC /= GC_SUCCESS ) RETURN ENDDO ENDIF @@ -2050,8 +2082,13 @@ SUBROUTINE Get_Metadata_State_Chm( am_I_Root, metadataID, Found, & IF ( isUnits ) Units = '1' IF ( isRank ) Rank = 3 - CASE( 'SSALK' ) - IF ( isDesc ) Desc = 'Sea salt alkalinity' + CASE( 'SSALKACCUM' ) + IF ( isDesc ) Desc = 'Sea salt alkalinity, accumulation mode' + IF ( isUnits ) Units = '1' + IF ( isRank ) Rank = 3 + + CASE( 'SSALKCOARSE' ) + IF ( isDesc ) Desc = 'Sea salt alkalinity, coarse mode' IF ( isUnits ) Units = '1' IF ( isRank ) Rank = 3 @@ -2483,7 +2520,7 @@ SUBROUTINE Register_ChmField_Rfp_4D( am_I_Root, metadataID, Ptr2Data, & !----------------------------------------------------------------------- ELSE ErrMsg = 'Handling of PerSpecies metadata ' // TRIM(perSpecies) // & - ' is not implemented for this combo of data type and size' + ' is not implemented for this combo of data type and size!' CALL GC_Error( ErrMsg, RC, ThisLoc ) RETURN ENDIF